summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorBrian Evans <grknight@gentoo.org>2019-04-11 12:08:10 -0400
committerBrian Evans <grknight@gentoo.org>2019-04-11 12:08:10 -0400
commit0fade6b8594219568c87e08834290cda3f6356af (patch)
treea11ca46a29dc53d2335de074b00416158490b5be
parentCommentStreams: Include minor fixes from upstream (diff)
downloadextensions-0fade6b8594219568c87e08834290cda3f6356af.tar.gz
extensions-0fade6b8594219568c87e08834290cda3f6356af.tar.bz2
extensions-0fade6b8594219568c87e08834290cda3f6356af.zip
Update Echo for 1.32
Signed-off-by: Brian Evans <grknight@gentoo.org>
-rw-r--r--Echo/.eslintrc.json3
-rw-r--r--Echo/.gitignore1
-rw-r--r--Echo/.phpcs.xml (renamed from Echo/phpcs.xml)14
-rw-r--r--Echo/.rubocop.yml20
-rw-r--r--Echo/.stylelintrc.json2
-rw-r--r--Echo/CODE_OF_CONDUCT.md2
-rw-r--r--Echo/Echo.alias.php13
-rw-r--r--Echo/Echo.php43
-rw-r--r--Echo/Gemfile7
-rw-r--r--Echo/Gemfile.lock121
-rw-r--r--Echo/Gruntfile.js41
-rw-r--r--Echo/Makefile13
-rw-r--r--Echo/Rakefile22
-rw-r--r--Echo/composer.json16
-rw-r--r--Echo/extension.json162
-rw-r--r--Echo/gitinfo.json2
-rw-r--r--Echo/i18n/abs.json8
-rw-r--r--Echo/i18n/ady-cyrl.json3
-rw-r--r--Echo/i18n/af.json4
-rw-r--r--Echo/i18n/ais.json125
-rw-r--r--Echo/i18n/ami.json10
-rw-r--r--Echo/i18n/anp.json3
-rw-r--r--Echo/i18n/api/ar.json18
-rw-r--r--Echo/i18n/api/ba.json1
-rw-r--r--Echo/i18n/api/bn.json3
-rw-r--r--Echo/i18n/api/ce.json1
-rw-r--r--Echo/i18n/api/ckb.json9
-rw-r--r--Echo/i18n/api/de.json11
-rw-r--r--Echo/i18n/api/diq.json8
-rw-r--r--Echo/i18n/api/eo.json10
-rw-r--r--Echo/i18n/api/es.json5
-rw-r--r--Echo/i18n/api/gl.json9
-rw-r--r--Echo/i18n/api/gsw.json12
-rw-r--r--Echo/i18n/api/he.json15
-rw-r--r--Echo/i18n/api/hi.json1
-rw-r--r--Echo/i18n/api/hu.json6
-rw-r--r--Echo/i18n/api/ia.json9
-rw-r--r--Echo/i18n/api/id.json6
-rw-r--r--Echo/i18n/api/is.json8
-rw-r--r--Echo/i18n/api/ka.json8
-rw-r--r--Echo/i18n/api/kk-cyrl.json1
-rw-r--r--Echo/i18n/api/ko.json1
-rw-r--r--Echo/i18n/api/ksh.json1
-rw-r--r--Echo/i18n/api/lb.json13
-rw-r--r--Echo/i18n/api/lv.json15
-rw-r--r--Echo/i18n/api/mk.json2
-rw-r--r--Echo/i18n/api/mr.json4
-rw-r--r--Echo/i18n/api/nap.json6
-rw-r--r--Echo/i18n/api/ne.json8
-rw-r--r--Echo/i18n/api/pl.json3
-rw-r--r--Echo/i18n/api/qqq.json2
-rw-r--r--Echo/i18n/api/roa-tara.json9
-rw-r--r--Echo/i18n/api/ru.json30
-rw-r--r--Echo/i18n/api/sah.json1
-rw-r--r--Echo/i18n/api/sl.json14
-rw-r--r--Echo/i18n/api/sr-ec.json11
-rw-r--r--Echo/i18n/api/sr-el.json9
-rw-r--r--Echo/i18n/api/th.json8
-rw-r--r--Echo/i18n/api/tt-cyrl.json10
-rw-r--r--Echo/i18n/api/vi.json1
-rw-r--r--Echo/i18n/api/yi.json11
-rw-r--r--Echo/i18n/api/zh-hant.json18
-rw-r--r--Echo/i18n/ar.json17
-rw-r--r--Echo/i18n/arq.json3
-rw-r--r--Echo/i18n/ary.json8
-rw-r--r--Echo/i18n/as.json3
-rw-r--r--Echo/i18n/ast.json23
-rw-r--r--Echo/i18n/awa.json3
-rw-r--r--Echo/i18n/ay.json2
-rw-r--r--Echo/i18n/az.json4
-rw-r--r--Echo/i18n/ba.json9
-rw-r--r--Echo/i18n/bbc-latn.json4
-rw-r--r--Echo/i18n/bcc.json1
-rw-r--r--Echo/i18n/bcl.json5
-rw-r--r--Echo/i18n/be-tarask.json45
-rw-r--r--Echo/i18n/be.json29
-rw-r--r--Echo/i18n/bg.json24
-rw-r--r--Echo/i18n/bho.json2
-rw-r--r--Echo/i18n/bn.json60
-rw-r--r--Echo/i18n/br.json6
-rw-r--r--Echo/i18n/bs.json7
-rw-r--r--Echo/i18n/btm.json8
-rw-r--r--Echo/i18n/ca.json17
-rw-r--r--Echo/i18n/cdo.json16
-rw-r--r--Echo/i18n/ce.json7
-rw-r--r--Echo/i18n/ckb.json97
-rw-r--r--Echo/i18n/cs.json21
-rw-r--r--Echo/i18n/cu.json4
-rw-r--r--Echo/i18n/cy.json2
-rw-r--r--Echo/i18n/da.json31
-rw-r--r--Echo/i18n/de-formal.json6
-rw-r--r--Echo/i18n/de.json14
-rw-r--r--Echo/i18n/diq.json1
-rw-r--r--Echo/i18n/dsb.json2
-rw-r--r--Echo/i18n/el.json39
-rw-r--r--Echo/i18n/en.json10
-rw-r--r--Echo/i18n/eo.json15
-rw-r--r--Echo/i18n/es-formal.json8
-rw-r--r--Echo/i18n/es.json15
-rw-r--r--Echo/i18n/et.json37
-rw-r--r--Echo/i18n/eu.json4
-rw-r--r--Echo/i18n/fa.json12
-rw-r--r--Echo/i18n/fi.json12
-rw-r--r--Echo/i18n/fo.json3
-rw-r--r--Echo/i18n/fr.json31
-rw-r--r--Echo/i18n/frp.json5
-rw-r--r--Echo/i18n/frr.json4
-rw-r--r--Echo/i18n/fur.json3
-rw-r--r--Echo/i18n/gcr.json8
-rw-r--r--Echo/i18n/gd.json2
-rw-r--r--Echo/i18n/gl.json24
-rw-r--r--Echo/i18n/glk.json3
-rw-r--r--Echo/i18n/gn.json6
-rw-r--r--Echo/i18n/gom-latn.json1
-rw-r--r--Echo/i18n/gor.json3
-rw-r--r--Echo/i18n/grc.json3
-rw-r--r--Echo/i18n/gsw.json2
-rw-r--r--Echo/i18n/gu.json2
-rw-r--r--Echo/i18n/hak.json3
-rw-r--r--Echo/i18n/haw.json1
-rw-r--r--Echo/i18n/he.json9
-rw-r--r--Echo/i18n/hi.json6
-rw-r--r--Echo/i18n/hr.json19
-rw-r--r--Echo/i18n/hsb.json2
-rw-r--r--Echo/i18n/hu.json10
-rw-r--r--Echo/i18n/hy.json16
-rw-r--r--Echo/i18n/hyw.json8
-rw-r--r--Echo/i18n/ia.json10
-rw-r--r--Echo/i18n/id.json106
-rw-r--r--Echo/i18n/ig.json2
-rw-r--r--Echo/i18n/ilo.json20
-rw-r--r--Echo/i18n/inh.json22
-rw-r--r--Echo/i18n/io.json54
-rw-r--r--Echo/i18n/is.json33
-rw-r--r--Echo/i18n/it.json10
-rw-r--r--Echo/i18n/ja.json26
-rw-r--r--Echo/i18n/jam.json3
-rw-r--r--Echo/i18n/jut.json3
-rw-r--r--Echo/i18n/jv.json103
-rw-r--r--Echo/i18n/ka.json8
-rw-r--r--Echo/i18n/kab.json1
-rw-r--r--Echo/i18n/kbp.json3
-rw-r--r--Echo/i18n/khw.json3
-rw-r--r--Echo/i18n/kjp.json14
-rw-r--r--Echo/i18n/kk-cyrl.json2
-rw-r--r--Echo/i18n/km.json189
-rw-r--r--Echo/i18n/kn.json2
-rw-r--r--Echo/i18n/ko.json40
-rw-r--r--Echo/i18n/krc.json9
-rw-r--r--Echo/i18n/krl.json3
-rw-r--r--Echo/i18n/ksh.json11
-rw-r--r--Echo/i18n/kum.json8
-rw-r--r--Echo/i18n/kw.json8
-rw-r--r--Echo/i18n/la.json5
-rw-r--r--Echo/i18n/lb.json49
-rw-r--r--Echo/i18n/lfn.json4
-rw-r--r--Echo/i18n/lij.json9
-rw-r--r--Echo/i18n/lki.json2
-rw-r--r--Echo/i18n/lrc.json3
-rw-r--r--Echo/i18n/lt.json26
-rw-r--r--Echo/i18n/lv.json49
-rw-r--r--Echo/i18n/lzh.json4
-rw-r--r--Echo/i18n/mai.json2
-rw-r--r--Echo/i18n/mg.json2
-rw-r--r--Echo/i18n/mk.json33
-rw-r--r--Echo/i18n/ml.json168
-rw-r--r--Echo/i18n/mn.json3
-rw-r--r--Echo/i18n/mni.json8
-rw-r--r--Echo/i18n/mnw.json8
-rw-r--r--Echo/i18n/mr.json36
-rw-r--r--Echo/i18n/ms.json2
-rw-r--r--Echo/i18n/mt.json2
-rw-r--r--Echo/i18n/mui.json8
-rw-r--r--Echo/i18n/mwl.json8
-rw-r--r--Echo/i18n/my.json103
-rw-r--r--Echo/i18n/mzn.json3
-rw-r--r--Echo/i18n/nap.json15
-rw-r--r--Echo/i18n/nb.json75
-rw-r--r--Echo/i18n/nds-nl.json6
-rw-r--r--Echo/i18n/ne.json2
-rw-r--r--Echo/i18n/nl.json27
-rw-r--r--Echo/i18n/nn.json50
-rw-r--r--Echo/i18n/nys.json8
-rw-r--r--Echo/i18n/oc.json2
-rw-r--r--Echo/i18n/or.json2
-rw-r--r--Echo/i18n/pa.json2
-rw-r--r--Echo/i18n/pl.json9
-rw-r--r--Echo/i18n/pms.json2
-rw-r--r--Echo/i18n/pnb.json4
-rw-r--r--Echo/i18n/ps.json140
-rw-r--r--Echo/i18n/pt-br.json34
-rw-r--r--Echo/i18n/pt.json33
-rw-r--r--Echo/i18n/qqq.json57
-rw-r--r--Echo/i18n/qu.json8
-rw-r--r--Echo/i18n/ro.json38
-rw-r--r--Echo/i18n/roa-tara.json14
-rw-r--r--Echo/i18n/ru.json22
-rw-r--r--Echo/i18n/sa.json2
-rw-r--r--Echo/i18n/sah.json1
-rw-r--r--Echo/i18n/sat.json16
-rw-r--r--Echo/i18n/scn.json2
-rw-r--r--Echo/i18n/sd.json83
-rw-r--r--Echo/i18n/sdh.json3
-rw-r--r--Echo/i18n/sh.json2
-rw-r--r--Echo/i18n/shn.json4
-rw-r--r--Echo/i18n/si.json12
-rw-r--r--Echo/i18n/sk.json17
-rw-r--r--Echo/i18n/skr-arab.json4
-rw-r--r--Echo/i18n/sl.json33
-rw-r--r--Echo/i18n/so.json3
-rw-r--r--Echo/i18n/sq.json2
-rw-r--r--Echo/i18n/sr-ec.json233
-rw-r--r--Echo/i18n/sr-el.json11
-rw-r--r--Echo/i18n/sv.json16
-rw-r--r--Echo/i18n/ta.json2
-rw-r--r--Echo/i18n/tay.json21
-rw-r--r--Echo/i18n/te.json7
-rw-r--r--Echo/i18n/th.json201
-rw-r--r--Echo/i18n/tl.json5
-rw-r--r--Echo/i18n/tr.json14
-rw-r--r--Echo/i18n/tt-cyrl.json32
-rw-r--r--Echo/i18n/tt-latn.json3
-rw-r--r--Echo/i18n/uk.json13
-rw-r--r--Echo/i18n/ur.json70
-rw-r--r--Echo/i18n/uz.json2
-rw-r--r--Echo/i18n/vec.json2
-rw-r--r--Echo/i18n/vep.json3
-rw-r--r--Echo/i18n/vi.json28
-rw-r--r--Echo/i18n/wa.json3
-rw-r--r--Echo/i18n/war.json3
-rw-r--r--Echo/i18n/wo.json3
-rw-r--r--Echo/i18n/wuu.json3
-rw-r--r--Echo/i18n/xmf.json1
-rw-r--r--Echo/i18n/yi.json10
-rw-r--r--Echo/i18n/yue.json6
-rw-r--r--Echo/i18n/zgh.json6
-rw-r--r--Echo/i18n/zh-hans.json9
-rw-r--r--Echo/i18n/zh-hant.json20
-rw-r--r--Echo/images/betafeatures-icon-notifications-ltr.svg49
-rw-r--r--Echo/images/betafeatures-icon-notifications-rtl.svg49
-rw-r--r--Echo/includes/AttributeManager.php64
-rw-r--r--Echo/includes/Bundleable.php2
-rw-r--r--Echo/includes/ContainmentSet.php270
-rw-r--r--Echo/includes/DataOutputFormatter.php51
-rw-r--r--Echo/includes/DeferredMarkAsDeletedUpdate.php3
-rw-r--r--Echo/includes/DiscussionParser.php170
-rw-r--r--Echo/includes/EchoArrayList.php34
-rw-r--r--Echo/includes/EchoCachedList.php62
-rw-r--r--Echo/includes/EchoContainmentList.php18
-rw-r--r--Echo/includes/EchoContainmentSet.php108
-rw-r--r--Echo/includes/EchoDbFactory.php37
-rw-r--r--Echo/includes/EchoDiffGroup.php115
-rw-r--r--Echo/includes/EchoDiffParser.php (renamed from Echo/includes/DiffParser.php)102
-rw-r--r--Echo/includes/EchoHooks.php (renamed from Echo/Hooks.php)507
-rw-r--r--Echo/includes/EchoOnWikiList.php54
-rw-r--r--Echo/includes/EchoSummaryParser.php55
-rw-r--r--Echo/includes/EmailBatch.php22
-rw-r--r--Echo/includes/EventLogging.php15
-rw-r--r--Echo/includes/ForeignNotifications.php12
-rw-r--r--Echo/includes/ForeignWikiRequest.php60
-rw-r--r--Echo/includes/NotifUser.php594
-rw-r--r--Echo/includes/Notifier.php19
-rw-r--r--Echo/includes/SeenTime.php4
-rw-r--r--Echo/includes/UnreadWikis.php14
-rw-r--r--Echo/includes/UserLocator.php17
-rw-r--r--Echo/includes/api/ApiCrossWiki.php (renamed from Echo/includes/api/ApiCrossWikiBase.php)63
-rw-r--r--Echo/includes/api/ApiEchoArticleReminder.php1
-rw-r--r--Echo/includes/api/ApiEchoMarkRead.php53
-rw-r--r--Echo/includes/api/ApiEchoMarkSeen.php1
-rw-r--r--Echo/includes/api/ApiEchoNotifications.php72
-rw-r--r--Echo/includes/api/ApiEchoUnreadNotificationPages.php13
-rw-r--r--Echo/includes/cache/LocalCache.php47
-rw-r--r--Echo/includes/cache/RevisionLocalCache.php41
-rw-r--r--Echo/includes/cache/TitleLocalCache.php10
-rw-r--r--Echo/includes/controller/ModerationController.php3
-rw-r--r--Echo/includes/controller/NotificationController.php81
-rw-r--r--Echo/includes/formatters/EchoEventDigestFormatter.php6
-rw-r--r--Echo/includes/formatters/EchoEventFormatter.php11
-rw-r--r--Echo/includes/formatters/EchoHtmlDigestEmailFormatter.php9
-rw-r--r--Echo/includes/formatters/EchoHtmlEmailFormatter.php12
-rw-r--r--Echo/includes/formatters/EchoIcon.php2
-rw-r--r--Echo/includes/formatters/EchoPlainTextDigestEmailFormatter.php2
-rw-r--r--Echo/includes/formatters/EditUserTalkPresentationModel.php13
-rw-r--r--Echo/includes/formatters/EventPresentationModel.php111
-rw-r--r--Echo/includes/formatters/MentionInSummaryPresentationModel.php59
-rw-r--r--Echo/includes/formatters/PageLinkedPresentationModel.php2
-rw-r--r--Echo/includes/formatters/PresentationModelSectionTrait.php8
-rw-r--r--Echo/includes/formatters/SpecialNotificationsFormatter.php4
-rw-r--r--Echo/includes/formatters/UserRightsPresentationModel.php10
-rw-r--r--Echo/includes/gateway/UserNotificationGateway.php110
-rw-r--r--Echo/includes/iterator/FilteredSequentialIterator.php1
-rw-r--r--Echo/includes/jobs/NotificationDeleteJob.php9
-rw-r--r--Echo/includes/jobs/NotificationJob.php37
-rw-r--r--Echo/includes/mapper/AbstractMapper.php5
-rw-r--r--Echo/includes/mapper/EventMapper.php14
-rw-r--r--Echo/includes/mapper/NotificationMapper.php100
-rw-r--r--Echo/includes/model/Event.php34
-rw-r--r--Echo/includes/model/Notification.php11
-rw-r--r--Echo/includes/model/TargetPage.php4
-rw-r--r--Echo/includes/ooui/LabelIconWidget.php6
-rw-r--r--Echo/includes/special/NotificationPager.php4
-rw-r--r--Echo/includes/special/SpecialDisplayNotificationsConfiguration.php117
-rw-r--r--Echo/includes/special/SpecialNotifications.php10
-rw-r--r--Echo/includes/special/SpecialNotificationsMarkRead.php9
-rw-r--r--Echo/maintenance/backfillReadBundles.php4
-rw-r--r--Echo/maintenance/backfillUnreadWikis.php20
-rw-r--r--Echo/maintenance/generateSampleNotifications.php95
-rw-r--r--Echo/maintenance/processEchoEmailBatch.php6
-rw-r--r--Echo/maintenance/removeInvalidNotification.php2
-rw-r--r--Echo/maintenance/removeOrphanedEvents.php2
-rw-r--r--Echo/maintenance/testDiscussionParser.php2
-rw-r--r--Echo/maintenance/updateEchoSchemaForSuppression.php2
-rw-r--r--Echo/maintenance/updatePerUserBlacklist.php93
-rw-r--r--Echo/modules/api/mw.echo.api.APIHandler.js2
-rw-r--r--Echo/modules/api/mw.echo.api.EchoApi.js6
-rw-r--r--Echo/modules/api/mw.echo.api.ForeignAPIHandler.js2
-rw-r--r--Echo/modules/api/mw.echo.api.LocalAPIHandler.js23
-rw-r--r--Echo/modules/controller/mw.echo.Controller.js17
-rw-r--r--Echo/modules/echo.variables.less4
-rw-r--r--Echo/modules/ext.echo.init.js16
-rw-r--r--Echo/modules/icons/articleCheck-progressive.svg7
-rw-r--r--Echo/modules/icons/badgeicons.json4
-rw-r--r--Echo/modules/icons/bell.svg9
-rw-r--r--Echo/modules/icons/bellOn-ltr.svg4
-rw-r--r--Echo/modules/icons/bellOn-rtl.svg4
-rw-r--r--Echo/modules/icons/changes.svg10
-rw-r--r--Echo/modules/icons/chat.svg4
-rw-r--r--Echo/modules/icons/double-check.svg5
-rw-r--r--Echo/modules/icons/edit-progressive.svg7
-rw-r--r--Echo/modules/icons/edit-user-talk-progressive.svg10
-rw-r--r--Echo/modules/icons/edit-user-talk.svg4
-rw-r--r--Echo/modules/icons/emailuser.svg4
-rw-r--r--Echo/modules/icons/feedback-progressive.svg10
-rw-r--r--Echo/modules/icons/feedback.svg4
-rw-r--r--Echo/modules/icons/generic.svg7
-rw-r--r--Echo/modules/icons/global-progressive.svg7
-rw-r--r--Echo/modules/icons/global.svg4
-rw-r--r--Echo/modules/icons/help.svg15
-rw-r--r--Echo/modules/icons/link-blue.svg7
-rw-r--r--Echo/modules/icons/link-progressive.svg10
-rw-r--r--Echo/modules/icons/mention-failure.svg9
-rw-r--r--Echo/modules/icons/mention-progressive.svg10
-rw-r--r--Echo/modules/icons/mention-status-bundle-progressive.svg7
-rw-r--r--Echo/modules/icons/mention-status-bundle.svg5
-rw-r--r--Echo/modules/icons/mention-success-constructive.svg7
-rw-r--r--Echo/modules/icons/mention-success.svg5
-rw-r--r--Echo/modules/icons/mention.svg4
-rw-r--r--Echo/modules/icons/message-constructive.svg10
-rw-r--r--Echo/modules/icons/notice.svg7
-rw-r--r--Echo/modules/icons/ooui-edit-ltr-progressive.svg4
-rw-r--r--Echo/modules/icons/ooui-edit-rtl-progressive.svg4
-rw-r--r--Echo/modules/icons/revert.svg15
-rw-r--r--Echo/modules/icons/reviewed.svg4
-rw-r--r--Echo/modules/icons/speechBubbles-ltr-progressive.svg10
-rw-r--r--Echo/modules/icons/speechBubbles-ltr.svg10
-rw-r--r--Echo/modules/icons/speechBubbles-rtl-progressive.svg10
-rw-r--r--Echo/modules/icons/speechBubbles-rtl.svg10
-rw-r--r--Echo/modules/icons/thanks-ltr.svg4
-rw-r--r--Echo/modules/icons/thanks-rtl.svg4
-rw-r--r--Echo/modules/icons/trash.svg4
-rw-r--r--Echo/modules/icons/tray.svg9
-rw-r--r--Echo/modules/icons/user-rights-progressive.svg10
-rw-r--r--Echo/modules/icons/user-rights.svg4
-rw-r--r--Echo/modules/icons/user-speech-bubble.svg10
-rw-r--r--Echo/modules/icons/userTalk-ltr.svg7
-rw-r--r--Echo/modules/icons/userTalk-rtl.svg7
-rw-r--r--Echo/modules/logger/mw.echo.Logger.js27
-rw-r--r--Echo/modules/model/mw.echo.dm.BundleNotificationItem.js5
-rw-r--r--Echo/modules/model/mw.echo.dm.CrossWikiNotificationItem.js2
-rw-r--r--Echo/modules/model/mw.echo.dm.ModelManager.js2
-rw-r--r--Echo/modules/model/mw.echo.dm.NotificationGroupsList.js2
-rw-r--r--Echo/modules/model/mw.echo.dm.NotificationsList.js10
-rw-r--r--Echo/modules/model/mw.echo.dm.SourcePagesModel.js4
-rw-r--r--Echo/modules/nojs/mw.echo.badge.less8
-rw-r--r--Echo/modules/nojs/mw.echo.badge.vector.less1
-rw-r--r--Echo/modules/nojs/mw.echo.special.less4
-rw-r--r--Echo/modules/styles/LabelIconWidget.less5
-rw-r--r--Echo/modules/styles/mw.echo.ui.ConfirmationPopupWidget.less4
-rw-r--r--Echo/modules/styles/mw.echo.ui.CrossWikiNotificationItemWidget.less6
-rw-r--r--Echo/modules/styles/mw.echo.ui.FooterNoticeWidget.less2
-rw-r--r--Echo/modules/styles/mw.echo.ui.MenuItemWidget.less83
-rw-r--r--Echo/modules/styles/mw.echo.ui.NotificationBadgeWidget.less41
-rw-r--r--Echo/modules/styles/mw.echo.ui.NotificationBadgeWidget.monobook.less12
-rw-r--r--Echo/modules/styles/mw.echo.ui.NotificationItemWidget.less14
-rw-r--r--Echo/modules/styles/mw.echo.ui.NotificationsInboxWidget.less22
-rw-r--r--Echo/modules/styles/mw.echo.ui.PageFilterWidget.less1
-rw-r--r--Echo/modules/styles/mw.echo.ui.PageNotificationsOptionWidget.less40
-rw-r--r--Echo/modules/styles/mw.echo.ui.SpecialHelpMenuWidget.less41
-rw-r--r--Echo/modules/styles/mw.echo.ui.SubGroupListWidget.less7
-rw-r--r--Echo/modules/styles/mw.echo.ui.overlay.minerva.less2
-rw-r--r--Echo/modules/styles/mw.echo.ui.overlay.monobook.less3
-rw-r--r--Echo/modules/ui/mw.echo.ui.ActionMenuPopupWidget.js2
-rw-r--r--Echo/modules/ui/mw.echo.ui.BadgeLinkWidget.js5
-rw-r--r--Echo/modules/ui/mw.echo.ui.BundleNotificationItemWidget.js7
-rw-r--r--Echo/modules/ui/mw.echo.ui.ClonedNotificationItemWidget.js4
-rw-r--r--Echo/modules/ui/mw.echo.ui.ConfirmationPopupWidget.js28
-rw-r--r--Echo/modules/ui/mw.echo.ui.CrossWikiNotificationItemWidget.js14
-rw-r--r--Echo/modules/ui/mw.echo.ui.CrossWikiUnreadFilterWidget.js8
-rw-r--r--Echo/modules/ui/mw.echo.ui.DatedNotificationsWidget.js7
-rw-r--r--Echo/modules/ui/mw.echo.ui.DatedSubGroupListWidget.js4
-rw-r--r--Echo/modules/ui/mw.echo.ui.FooterNoticeWidget.js3
-rw-r--r--Echo/modules/ui/mw.echo.ui.MenuItemWidget.js68
-rw-r--r--Echo/modules/ui/mw.echo.ui.NotificationBadgeWidget.js60
-rw-r--r--Echo/modules/ui/mw.echo.ui.NotificationItemWidget.js17
-rw-r--r--Echo/modules/ui/mw.echo.ui.NotificationsInboxWidget.js73
-rw-r--r--Echo/modules/ui/mw.echo.ui.NotificationsListWidget.js4
-rw-r--r--Echo/modules/ui/mw.echo.ui.NotificationsWrapper.js6
-rw-r--r--Echo/modules/ui/mw.echo.ui.PageFilterWidget.js4
-rw-r--r--Echo/modules/ui/mw.echo.ui.PageNotificationsOptionWidget.js33
-rw-r--r--Echo/modules/ui/mw.echo.ui.PaginationWidget.js12
-rw-r--r--Echo/modules/ui/mw.echo.ui.PlaceholderItemWidget.js4
-rw-r--r--Echo/modules/ui/mw.echo.ui.ReadStateButtonSelectWidget.js6
-rw-r--r--Echo/modules/ui/mw.echo.ui.SingleNotificationItemWidget.js6
-rw-r--r--Echo/modules/ui/mw.echo.ui.SortedListWidget.js4
-rw-r--r--Echo/modules/ui/mw.echo.ui.SpecialHelpMenuWidget.js131
-rw-r--r--Echo/modules/ui/mw.echo.ui.SubGroupListWidget.js60
-rw-r--r--Echo/modules/ui/mw.echo.ui.ToggleReadCircleButtonWidget.js4
-rw-r--r--Echo/package.json28
-rw-r--r--Echo/scripts/generatecss.php28
-rw-r--r--Echo/tests/browser/README.md1
-rw-r--r--Echo/tests/browser/ci.yml9
-rw-r--r--Echo/tests/browser/environments.yml48
-rw-r--r--Echo/tests/browser/features/no_javascript.feature11
-rw-r--r--Echo/tests/browser/features/notifications.feature22
-rw-r--r--Echo/tests/browser/features/step_definition/badge_steps.rb10
-rw-r--r--Echo/tests/browser/features/step_definition/no_javascript.rb21
-rw-r--r--Echo/tests/browser/features/step_definition/notifications_steps.rb76
-rw-r--r--Echo/tests/browser/features/step_definition/popup_steps.rb11
-rw-r--r--Echo/tests/browser/features/support/components/notifications.rb21
-rw-r--r--Echo/tests/browser/features/support/data_manager.rb11
-rw-r--r--Echo/tests/browser/features/support/echo_api_helper.rb25
-rw-r--r--Echo/tests/browser/features/support/echo_pageobject_extension.rb9
-rw-r--r--Echo/tests/browser/features/support/env.rb10
-rw-r--r--Echo/tests/browser/features/support/hooks.rb10
-rw-r--r--Echo/tests/browser/features/support/pages/article_page.rb8
-rw-r--r--Echo/tests/browser/features/support/pages/special_notifications_page.rb8
-rw-r--r--Echo/tests/phpunit/AttributeManagerTest.php62
-rw-r--r--Echo/tests/phpunit/BundlerTest.php3
-rw-r--r--Echo/tests/phpunit/ContainmentSetTest.php7
-rw-r--r--Echo/tests/phpunit/DiffParserTest.php3
-rw-r--r--Echo/tests/phpunit/DiscussionParserTest.php89
-rw-r--r--Echo/tests/phpunit/EchoDbFactoryTest.php12
-rw-r--r--Echo/tests/phpunit/EchoHooksTest.php53
-rw-r--r--Echo/tests/phpunit/EchoSummaryParserTest.php68
-rw-r--r--Echo/tests/phpunit/NotifUserTest.php56
-rw-r--r--Echo/tests/phpunit/NotificationStructureTest.php40
-rw-r--r--Echo/tests/phpunit/NotificationsTest.php (renamed from Echo/tests/NotificationsTest.php)9
-rw-r--r--Echo/tests/phpunit/TalkPageFunctionalTest.php10
-rw-r--r--Echo/tests/phpunit/ThankYouEditTest.php7
-rw-r--r--Echo/tests/phpunit/UserLocatorTest.php3
-rw-r--r--Echo/tests/phpunit/api/ApiEchoMarkReadTest.php7
-rw-r--r--Echo/tests/phpunit/api/ApiEchoNotificationsTest.php2
-rw-r--r--Echo/tests/phpunit/cache/TitleLocalCacheTest.php123
-rw-r--r--Echo/tests/phpunit/controller/NotificationControllerTest.php3
-rw-r--r--Echo/tests/phpunit/gateway/UserNotificationGatewayTest.php21
-rw-r--r--Echo/tests/phpunit/iterator/FilteredSequentialIteratorTest.php4
-rw-r--r--Echo/tests/phpunit/maintenance/SupressionMaintenanceTest.php1
-rw-r--r--Echo/tests/phpunit/mapper/AbstractMapperTest.php13
-rw-r--r--Echo/tests/phpunit/mapper/EchoAbstractMapperStub.php11
-rw-r--r--Echo/tests/phpunit/mapper/EchoExecuteFirstArgumentStub.php18
-rw-r--r--Echo/tests/phpunit/mapper/EventMapperTest.php8
-rw-r--r--Echo/tests/phpunit/mapper/NotificationMapperTest.php74
-rw-r--r--Echo/tests/phpunit/mapper/TargetPageMapperTest.php13
-rw-r--r--Echo/tests/phpunit/model/NotificationTest.php5
-rw-r--r--Echo/tests/phpunit/model/TargetPageTest.php3
-rw-r--r--Echo/tests/phpunit/revision_txt/123.txt1
-rw-r--r--Echo/tests/phpunit/revision_txt/1234.txt1
-rw-r--r--Echo/tests/qunit/.eslintrc.json6
-rw-r--r--Echo/tests/qunit/model/test_mw.echo.dm.BundleNotificationItem.js18
-rw-r--r--Echo/tests/qunit/model/test_mw.echo.dm.CrossWikiNotificationItem.js12
-rw-r--r--Echo/tests/qunit/model/test_mw.echo.dm.FiltersModel.js8
-rw-r--r--Echo/tests/qunit/model/test_mw.echo.dm.NotificationGroupsList.js12
-rw-r--r--Echo/tests/qunit/model/test_mw.echo.dm.NotificationsList.js8
-rw-r--r--Echo/tests/qunit/model/test_mw.echo.dm.SourcePagesModel.js12
-rw-r--r--Echo/tests/qunit/model/test_mw.echo.dm.UnreadNotificationCounter.js16
-rw-r--r--Echo/tests/qunit/overlay/test_ext.echo.overlay.js16
-rw-r--r--Echo/tests/rspec/README.md7
-rw-r--r--Echo/tests/rspec/notification_spec.rb55
-rw-r--r--Echo/tests/selenium/.eslintrc.json14
-rw-r--r--Echo/tests/selenium/README.md42
-rw-r--r--Echo/tests/selenium/pageobjects/echo.page.js10
-rw-r--r--Echo/tests/selenium/specs/echo.js18
-rw-r--r--Echo/tests/selenium/wdio.conf.js88
-rw-r--r--Echo/version6
484 files changed, 6611 insertions, 4441 deletions
diff --git a/Echo/.eslintrc.json b/Echo/.eslintrc.json
index 488ab054..50ebfabf 100644
--- a/Echo/.eslintrc.json
+++ b/Echo/.eslintrc.json
@@ -10,6 +10,7 @@
"mediaWiki": false
},
"rules": {
- "dot-notation": [ "error", { "allowKeywords": true } ]
+ "dot-notation": [ "error", { "allowKeywords": true } ],
+ "max-len": 0
}
}
diff --git a/Echo/.gitignore b/Echo/.gitignore
index cb2aeb6c..e8e8e3a8 100644
--- a/Echo/.gitignore
+++ b/Echo/.gitignore
@@ -1,7 +1,6 @@
.idea/
node_modules/
scripts/remotes/
-tests/browser/screenshots
/vendor
/docs
composer.lock
diff --git a/Echo/phpcs.xml b/Echo/.phpcs.xml
index 2adc8f65..555dcf8d 100644
--- a/Echo/phpcs.xml
+++ b/Echo/.phpcs.xml
@@ -2,19 +2,17 @@
<ruleset name="MediaWiki">
<file>.</file>
<rule ref="./vendor/mediawiki/mediawiki-codesniffer/MediaWiki">
- <exclude name="Generic.Files.LineLength.TooLong" />
- <exclude name="MediaWiki.Commenting.FunctionComment.ExtraParamComment" />
- <exclude name="MediaWiki.Commenting.FunctionComment.MissingParamComment" />
- <exclude name="MediaWiki.Commenting.FunctionComment.MissingParamName" />
- <exclude name="MediaWiki.Commenting.FunctionComment.MissingParamTag" />
- <exclude name="MediaWiki.Commenting.FunctionComment.MissingReturn" />
<exclude name="MediaWiki.Files.ClassMatchesFilename.NotMatch" />
- <exclude name="MediaWiki.Files.ClassMatchesFilename.WrongCase" />
- <exclude name="MediaWiki.Files.OneClassPerFile.MultipleFound" />
<exclude name="MediaWiki.Commenting.FunctionComment.MissingDocumentationProtected" />
<exclude name="MediaWiki.Commenting.FunctionComment.MissingDocumentationPublic" />
<exclude name="MediaWiki.NamingConventions.LowerCamelFunctionsName.FunctionName" />
<exclude name="MediaWiki.WhiteSpace.SpaceBeforeSingleLineComment.NewLineComment" />
+ <exclude name="Squiz.Scope.MethodScope.Missing" />
+ </rule>
+ <rule ref="Generic.Files.LineLength">
+ <properties>
+ <property name="lineLimit" value="140" />
+ </properties>
</rule>
<arg name="encoding" value="UTF-8" />
<arg name="extensions" value="php,php5,inc" />
diff --git a/Echo/.rubocop.yml b/Echo/.rubocop.yml
deleted file mode 100644
index 84567a59..00000000
--- a/Echo/.rubocop.yml
+++ /dev/null
@@ -1,20 +0,0 @@
-AllCops:
- StyleGuideCopsOnly: true
-
-Metrics/LineLength:
- Max: 100
-
-Metrics/MethodLength:
- Enabled: false
-
-Style/Alias:
- Enabled: false
-
-Style/SignalException:
- Enabled: false
-
-Style/StringLiterals:
- EnforcedStyle: single_quotes
-
-Style/TrivialAccessors:
- ExactNameMatch: true
diff --git a/Echo/.stylelintrc.json b/Echo/.stylelintrc.json
index c0d30c62..dab9de6b 100644
--- a/Echo/.stylelintrc.json
+++ b/Echo/.stylelintrc.json
@@ -2,6 +2,6 @@
"extends": "stylelint-config-wikimedia",
"rules": {
"declaration-no-important": null,
- "selector-no-id": null
+ "selector-max-id": null
}
}
diff --git a/Echo/CODE_OF_CONDUCT.md b/Echo/CODE_OF_CONDUCT.md
index d8e5d087..498acf76 100644
--- a/Echo/CODE_OF_CONDUCT.md
+++ b/Echo/CODE_OF_CONDUCT.md
@@ -1 +1 @@
-The development of this software is covered by a [Code of Conduct](https://www.mediawiki.org/wiki/Code_of_Conduct).
+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/Echo/Echo.alias.php b/Echo/Echo.alias.php
index 606688d0..193e00df 100644
--- a/Echo/Echo.alias.php
+++ b/Echo/Echo.alias.php
@@ -222,11 +222,16 @@ $specialPageAliases['scn'] = [
'Notifications' => [ 'Notifiche' ],
];
-/** Serbian (Cyrillic script) (српски (ћирилица)‎) */
+/** Serbian (Cyrillic script) (српски (ћирилица)) */
$specialPageAliases['sr-ec'] = [
'Notifications' => [ 'Обавештења' ],
];
+/** Serbian (Latin script) (srpski (latinica)) */
+$specialPageAliases['sr-el'] = [
+ 'Notifications' => [ 'Obaveštenja' ],
+];
+
/** Swedish (svenska) */
$specialPageAliases['sv'] = [
'Notifications' => [ 'Meddelanden' ],
@@ -240,6 +245,8 @@ $specialPageAliases['uk'] = [
/** Urdu (اردو) */
$specialPageAliases['ur'] = [
'Notifications' => [ 'اطلاعات' ],
+ 'DisplayNotificationsConfiguration' => [ 'ترتیب_نمائش_اطلاعات' ],
+ 'NotificationsMarkRead' => [ 'اطلاعات_کی_خواندہ_نشان_زدگی' ],
];
/** Venetian (vèneto) */
@@ -257,12 +264,12 @@ $specialPageAliases['zh'] = [
'Notifications' => [ '通知' ],
];
-/** Simplified Chinese (中文(简体)‎) */
+/** Simplified Chinese (中文(简体)) */
$specialPageAliases['zh-hans'] = [
'Notifications' => [ '通知' ],
];
-/** Traditional Chinese (中文(繁體)‎) */
+/** Traditional Chinese (中文(繁體)) */
$specialPageAliases['zh-hant'] = [
'Notifications' => [ '通知' ],
];
diff --git a/Echo/Echo.php b/Echo/Echo.php
deleted file mode 100644
index ecb65bcc..00000000
--- a/Echo/Echo.php
+++ /dev/null
@@ -1,43 +0,0 @@
-<?php
-/**
- * MediaWiki Extension: Echo
- * http://www.mediawiki.org/wiki/Extension:Echo
- *
- * 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.
- *
- * This program is distributed WITHOUT ANY WARRANTY.
- */
-
-/**
- *
- * @file
- * @ingroup Extensions
- * @author Andrew Garrett, Benny Situ, Ryan Kaldari, Erik Bernhardson
- * @licence MIT License
- */
-
-if ( function_exists( 'wfLoadExtension' ) ) {
- wfLoadExtension( 'Echo' );
- // Keep i18n globals so mergeMessageFileList.php doesn't break
- $wgMessagesDirs['Echo'] = [
- __DIR__ . '/i18n',
- __DIR__ . '/i18n/api',
- ];
- $wgExtensionMessagesFiles['EchoAliases'] = __DIR__ . '/Echo.alias.php';
- /* wfWarn(
- 'Deprecated PHP entry point used for Echo extension. ' .
- 'Please use wfLoadExtension instead, ' .
- 'see https://www.mediawiki.org/wiki/Extension_registration for more details.'
- ); */
- return;
-} else {
- die( 'This version of the Echo extension requires MediaWiki 1.25+' );
-}
diff --git a/Echo/Gemfile b/Echo/Gemfile
deleted file mode 100644
index 70c1a10b..00000000
--- a/Echo/Gemfile
+++ /dev/null
@@ -1,7 +0,0 @@
-source 'https://rubygems.org'
-
-gem 'csscss', '~> 1.3.3'
-gem 'mediawiki_selenium', '~> 1.8'
-gem 'rake', '~> 11.1', '>= 11.1.1'
-gem 'rspec-mocks', '~> 2.99', '>= 2.99.4'
-gem 'rubocop', '~> 0.34.2', require: false
diff --git a/Echo/Gemfile.lock b/Echo/Gemfile.lock
deleted file mode 100644
index 7a8d8130..00000000
--- a/Echo/Gemfile.lock
+++ /dev/null
@@ -1,121 +0,0 @@
-GEM
- remote: https://rubygems.org/
- specs:
- ast (2.1.0)
- astrolabe (1.3.1)
- parser (~> 2.2)
- blankslate (3.1.3)
- builder (3.2.3)
- childprocess (0.6.2)
- ffi (~> 1.0, >= 1.0.11)
- colorize (0.7.7)
- csscss (1.3.3)
- colorize
- parslet (>= 1.6.1, < 2.0)
- cucumber (1.3.20)
- builder (>= 2.1.2)
- diff-lcs (>= 1.1.3)
- gherkin (~> 2.12)
- multi_json (>= 1.7.5, < 2.0)
- multi_test (>= 0.1.2)
- data_magic (1.0)
- faker (>= 1.1.2)
- yml_reader (>= 0.6)
- diff-lcs (1.3)
- domain_name (0.5.20170223)
- unf (>= 0.0.5, < 1.0.0)
- faker (1.7.3)
- i18n (~> 0.5)
- faraday (0.11.0)
- multipart-post (>= 1.2, < 3)
- faraday-cookie_jar (0.0.6)
- faraday (>= 0.7.4)
- http-cookie (~> 1.0.0)
- faraday_middleware (0.11.0.1)
- faraday (>= 0.7.4, < 1.0)
- ffi (1.9.17)
- gherkin (2.12.2)
- multi_json (~> 1.3)
- headless (2.3.1)
- http-cookie (1.0.3)
- domain_name (~> 0.5)
- i18n (0.8.1)
- json (2.0.3)
- mediawiki_api (0.7.1)
- faraday (~> 0.9, >= 0.9.0)
- faraday-cookie_jar (~> 0.0, >= 0.0.6)
- faraday_middleware (~> 0.10, >= 0.10.0)
- mediawiki_selenium (1.8.0)
- cucumber (~> 1.3, >= 1.3.20)
- headless (~> 2.0, >= 2.1.0)
- json (~> 2.0, >= 2.0.2)
- mediawiki_api (~> 0.7, >= 0.7.0)
- page-object (~> 2.0)
- rest-client (~> 1.6, >= 1.6.7)
- rspec-core (~> 2.14, >= 2.14.4)
- rspec-expectations (~> 2.14, >= 2.14.4)
- selenium-webdriver (~> 3.1.0)
- syntax (~> 1.2, >= 1.2.0)
- thor (~> 0.19, >= 0.19.1)
- mime-types (2.99.3)
- multi_json (1.12.1)
- multi_test (0.1.2)
- multipart-post (2.0.0)
- net-http-persistent (2.9.4)
- netrc (0.11.0)
- page-object (2.0.0)
- net-http-persistent (~> 2.9.4)
- page_navigation (>= 0.9)
- selenium-webdriver (~> 3.0)
- watir (~> 6.0)
- page_navigation (0.10)
- data_magic (>= 0.22)
- parser (2.2.2.6)
- ast (>= 1.1, < 3.0)
- parslet (1.7.1)
- blankslate (>= 2.0, <= 4.0)
- powerpack (0.1.1)
- rainbow (2.0.0)
- rake (11.1.1)
- rest-client (1.8.0)
- http-cookie (>= 1.0.2, < 2.0)
- mime-types (>= 1.16, < 3.0)
- netrc (~> 0.7)
- rspec-core (2.99.2)
- rspec-expectations (2.99.2)
- diff-lcs (>= 1.1.3, < 2.0)
- rspec-mocks (2.99.4)
- rubocop (0.34.2)
- astrolabe (~> 1.3)
- parser (>= 2.2.2.5, < 3.0)
- powerpack (~> 0.1)
- rainbow (>= 1.99.1, < 3.0)
- ruby-progressbar (~> 1.4)
- ruby-progressbar (1.7.5)
- rubyzip (1.2.1)
- selenium-webdriver (3.1.0)
- childprocess (~> 0.5)
- rubyzip (~> 1.0)
- websocket (~> 1.0)
- syntax (1.2.1)
- thor (0.19.4)
- unf (0.1.4)
- unf_ext
- unf_ext (0.0.7.2)
- watir (6.2.0)
- selenium-webdriver (~> 3.0)
- websocket (1.2.4)
- yml_reader (0.7)
-
-PLATFORMS
- ruby
-
-DEPENDENCIES
- csscss (~> 1.3.3)
- mediawiki_selenium (~> 1.8)
- rake (~> 11.1, >= 11.1.1)
- rspec-mocks (~> 2.99, >= 2.99.4)
- rubocop (~> 0.34.2)
-
-BUNDLED WITH
- 1.14.6
diff --git a/Echo/Gruntfile.js b/Echo/Gruntfile.js
index c389ce11..2df0b98d 100644
--- a/Echo/Gruntfile.js
+++ b/Echo/Gruntfile.js
@@ -7,6 +7,7 @@ module.exports = function ( grunt ) {
grunt.loadNpmTasks( 'grunt-eslint' );
grunt.loadNpmTasks( 'grunt-jsonlint' );
grunt.loadNpmTasks( 'grunt-stylelint' );
+ grunt.loadNpmTasks( 'grunt-svgmin' );
grunt.initConfig( {
eslint: {
@@ -28,6 +29,42 @@ module.exports = function ( grunt ) {
'modules/**/*.less'
]
},
+ // SVG Optimization
+ svgmin: {
+ options: {
+ js2svg: {
+ indent: ' ',
+ pretty: true
+ },
+ multipass: true,
+ plugins: [ {
+ cleanupIDs: false
+ }, {
+ removeDesc: false
+ }, {
+ removeRasterImages: true
+ }, {
+ removeTitle: false
+ }, {
+ removeViewBox: false
+ }, {
+ removeXMLProcInst: false
+ }, {
+ sortAttrs: true
+ } ]
+ },
+ all: {
+ files: [ {
+ expand: true,
+ cwd: 'modules/icons',
+ src: [
+ '**/*.svg'
+ ],
+ dest: 'modules/icons/',
+ ext: '.svg'
+ } ]
+ }
+ },
banana: conf.MessagesDirs,
watch: {
files: [
@@ -41,12 +78,14 @@ module.exports = function ( grunt ) {
all: [
'**/*.json',
'!node_modules/**',
+ '!vendor/**',
'!docs/**'
]
}
} );
+ grunt.registerTask( 'minify', 'svgmin' );
grunt.registerTask( 'lint', [ 'eslint', 'stylelint', 'jsonlint', 'banana' ] );
grunt.registerTask( 'test', 'lint' );
- grunt.registerTask( 'default', 'test' );
+ grunt.registerTask( 'default', [ 'minify', 'test' ] );
};
diff --git a/Echo/Makefile b/Echo/Makefile
index a12d6f45..b6e77015 100644
--- a/Echo/Makefile
+++ b/Echo/Makefile
@@ -47,12 +47,6 @@ jshint: nodecheck
checkless:
@${PHP} ../../maintenance/checkLess.php
-# Check compiled less files for duplicated rules
-csscss: gems
- echo "Generating CSS file..."
- php scripts/generatecss.php ${MEDIAWIKI_LOAD_URL} /tmp/foo.css
- csscss -v /tmp/foo.css --num 2 --no-match-shorthand --ignore-properties=display,position,top,bottom,left,right
-
###
# Testing
###
@@ -61,10 +55,3 @@ test: phpunit
# Run the projects phpunit tests
phpunit:
cd ${MW_INSTALL_PATH}/tests/phpunit && ${PHP} phpunit.php --configuration ${MW_INSTALL_PATH}/extensions/Echo/tests/echo.suite.xml --group=Echo
-
-###
-# Update this repository for csscss dependencies
-###
-gems:
- bundle install
-
diff --git a/Echo/Rakefile b/Echo/Rakefile
deleted file mode 100644
index 76835007..00000000
--- a/Echo/Rakefile
+++ /dev/null
@@ -1,22 +0,0 @@
-require 'bundler/setup'
-
-require 'rubocop/rake_task'
-RuboCop::RakeTask.new(:rubocop) do |task|
- # if you use mediawiki-vagrant, rubocop will by default use it's .rubocop.yml
- # the next line makes it explicit that you want .rubocop.yml from the directory
- # where `bundle exec rake` is executed
- task.options = ['-c', '.rubocop.yml']
-end
-
-require 'mediawiki_selenium/rake_task'
-MediawikiSelenium::RakeTask.new
-
-require 'rspec/core/rake_task'
-RSpec::Core::RakeTask.new do |t|
- t.rspec_opts = 'tests/rspec/'
-end
-
-task default: [:test]
-
-desc 'Run all build/tests commands (CI entry point)'
-task test: [:rubocop, :spec, :selenium]
diff --git a/Echo/composer.json b/Echo/composer.json
index 78987234..7a62b001 100644
--- a/Echo/composer.json
+++ b/Echo/composer.json
@@ -1,16 +1,22 @@
{
"require-dev": {
- "jakub-onderka/php-parallel-lint": "0.9.2",
- "mediawiki/mediawiki-codesniffer": "0.12.0",
- "jakub-onderka/php-console-highlighter": "0.3.2"
+ "jakub-onderka/php-parallel-lint": "1.0.0",
+ "mediawiki/mediawiki-codesniffer": "22.0.0",
+ "jakub-onderka/php-console-highlighter": "0.3.2",
+ "mediawiki/minus-x": "0.3.1"
},
"scripts": {
"test": [
"parallel-lint . --exclude vendor --exclude node_modules",
- "phpcs -p -s"
+ "phpcs -p -s",
+ "minus-x check ."
],
"fix": [
- "phpcbf"
+ "phpcbf",
+ "minus-x fix ."
]
+ },
+ "extra": {
+ "phan-taint-check-plugin": "1.5.0"
}
}
diff --git a/Echo/extension.json b/Echo/extension.json
index 39606dbc..6b728482 100644
--- a/Echo/extension.json
+++ b/Echo/extension.json
@@ -7,16 +7,16 @@
"Luke Welling",
"Kunal Mehta",
"Moriel Schottlender",
- "Jon Robson"
+ "Jon Robson",
+ "Roan Kattouw"
],
"url": "https://www.mediawiki.org/wiki/Extension:Echo",
"descriptionmsg": "echo-desc",
"license-name": "MIT",
"type": "specialpage",
"requires": {
- "MediaWiki": ">= 1.29.0"
+ "MediaWiki": ">= 1.32.0"
},
- "callback": "EchoHooks::registerExtension",
"APIMetaModules": {
"notifications": "ApiEchoNotifications",
"unreadnotificationpages": "ApiEchoUnreadNotificationPages"
@@ -27,9 +27,7 @@
"echoarticlereminder": "ApiEchoArticleReminder"
},
"DefaultUserOptions": {
- "echo-show-alert": true,
- "echo-email-frequency": 0,
- "echo-dismiss-special-page-invitation": 0
+ "echo-email-frequency": 0
},
"ExtensionFunctions": [
"EchoHooks::initEchoExtension"
@@ -53,6 +51,18 @@
"EchoAliases": "Echo.alias.php"
},
"ResourceModules": {
+ "ext.echo.logger": {
+ "scripts": [
+ "logger/mw.echo.Logger.js"
+ ],
+ "dependencies": [
+ "oojs"
+ ],
+ "targets": [
+ "desktop",
+ "mobile"
+ ]
+ },
"ext.echo.ui.desktop": {
"scripts": [
"ui/mw.echo.ui.BadgeLinkWidget.js",
@@ -73,11 +83,7 @@
"ext.echo.ui",
"ext.echo.styles.badge",
"mediawiki.util",
- "mediawiki.api.options"
- ],
- "messages": [
- "echo-popup-footer-special-page-invitation",
- "echo-popup-footer-special-page-invitation-link"
+ "mediawiki.api"
],
"targets": [
"desktop"
@@ -98,7 +104,6 @@
"ui/mw.echo.ui.ClonedNotificationItemWidget.js",
"ui/mw.echo.ui.ActionMenuPopupWidget.js",
"ui/mw.echo.ui.MenuItemWidget.js",
- "ui/mw.echo.ui.FooterNoticeWidget.js",
"ui/mw.echo.ui.NotificationsWrapper.js",
"ui/mw.echo.ui.ConfirmationPopupWidget.js",
"ext.echo.moment-hack.js"
@@ -113,7 +118,6 @@
"styles/mw.echo.ui.SubGroupListWidget.less",
"styles/mw.echo.ui.ActionMenuPopupWidget.less",
"styles/mw.echo.ui.MenuItemWidget.less",
- "styles/mw.echo.ui.FooterNoticeWidget.less",
"styles/mw.echo.ui.NotificationsWrapper.less",
"styles/mw.echo.ui.ConfirmationPopupWidget.less"
],
@@ -288,7 +292,6 @@
]
},
"ext.echo.styles.badge": {
- "position": "top",
"styles": [
"nojs/mw.echo.badge.less"
],
@@ -309,7 +312,6 @@
]
},
"ext.echo.styles.notifications": {
- "position": "top",
"styles": [
"nojs/mw.echo.notifications.less",
"styles/LabelIconWidget.less"
@@ -320,7 +322,6 @@
]
},
"ext.echo.styles.alert": {
- "position": "top",
"styles": [
"nojs/mw.echo.alert.less"
],
@@ -393,7 +394,6 @@
]
},
"ext.echo.styles.special": {
- "position": "top",
"styles": [
"nojs/mw.echo.special.less"
],
@@ -404,7 +404,6 @@
},
"ext.echo.badgeicons": {
"class": "ResourceLoaderImageModule",
- "position": "top",
"data": "icons/badgeicons.json",
"selectorWithoutVariant": ".oo-ui-icon-{name}",
"selectorWithVariant": ".oo-ui-image-{variant}.oo-ui-icon-{name}"
@@ -421,11 +420,11 @@
"BeforePageDisplay": "EchoHooks::beforePageDisplay",
"MakeGlobalVariablesScript": "EchoHooks::makeGlobalVariablesScript",
"ResourceLoaderRegisterModules": "EchoHooks::onResourceLoaderRegisterModules",
- "EventLoggingRegisterSchemas": "EchoHooks::onEventLoggingRegisterSchemas",
"ResourceLoaderTestModules": "EchoHooks::onResourceLoaderTestModules",
"UserGroupsChanged": "EchoHooks::onUserGroupsChanged",
"UserLoadOptions": "EchoHooks::onUserLoadOptions",
"UserSaveOptions": "EchoHooks::onUserSaveOptions",
+ "UserGetDefaultOptions": "EchoHooks::onUserGetDefaultOptions",
"UserClearNewTalkNotification": "EchoHooks::onUserClearNewTalkNotification",
"ParserTestTables": "EchoHooks::onParserTestTables",
"EmailUserComplete": "EchoHooks::onEmailUserComplete",
@@ -459,12 +458,6 @@
"EchoEmailFooterAddress": {
"value": ""
},
- "NotificationSenderName": {
- "value": null
- },
- "NotificationReplyName": {
- "value": "No Reply"
- },
"EchoCluster": {
"value": false
},
@@ -498,15 +491,6 @@
"EchoBundleEmailInterval": {
"value": 0
},
- "EchoNewMsgAlert": {
- "value": true
- },
- "EchoShowFooterNotice": {
- "value": false
- },
- "EchoFooterNoticeURL": {
- "value": ""
- },
"DefaultNotifyTypeAvailability": {
"value": {
"web": true,
@@ -618,61 +602,58 @@
"EchoNotificationIcons": {
"value": {
"placeholder": {
- "path": "Echo/modules/icons/generic.svg"
- },
- "trash": {
- "path": "Echo/modules/icons/trash.svg"
+ "path": "Echo/modules/icons/notice.svg"
},
"chat": {
- "path": "Echo/modules/icons/chat.svg"
- },
- "edit": {
"path": {
- "ltr": "Echo/modules/icons/ooui-edit-ltr-progressive.svg",
- "rtl": "Echo/modules/icons/ooui-edit-rtl-progressive.svg"
+ "ltr": "Echo/modules/icons/speechBubbles-ltr-progressive.svg",
+ "rtl": "Echo/modules/icons/speechBubbles-rtl-progressive.svg"
}
},
+ "edit": {
+ "path": "Echo/modules/icons/edit-progressive.svg"
+ },
"edit-user-talk": {
- "path": "Echo/modules/icons/edit-user-talk.svg"
+ "path": "Echo/modules/icons/edit-user-talk-progressive.svg"
},
"linked": {
- "path": "Echo/modules/icons/link-blue.svg"
+ "path": "Echo/modules/icons/link-progressive.svg"
},
"mention": {
- "path": "Echo/modules/icons/mention.svg"
+ "path": "Echo/modules/icons/mention-progressive.svg"
},
"mention-failure": {
"path": "Echo/modules/icons/mention-failure.svg"
},
"mention-success": {
- "path": "Echo/modules/icons/mention-success.svg"
+ "path": "Echo/modules/icons/mention-success-constructive.svg"
},
"mention-status-bundle": {
- "path": "Echo/modules/icons/mention-status-bundle.svg"
+ "path": "Echo/modules/icons/mention-status-bundle-progressive.svg"
},
"reviewed": {
- "path": "Echo/modules/icons/reviewed.svg"
+ "path": "Echo/modules/icons/articleCheck-progressive.svg"
},
"revert": {
"path": "Echo/modules/icons/revert.svg"
},
"user-rights": {
- "path": "Echo/modules/icons/user-rights.svg"
+ "path": "Echo/modules/icons/user-rights-progressive.svg"
},
"emailuser": {
- "path": "Echo/modules/icons/emailuser.svg"
+ "path": "Echo/modules/icons/message-constructive.svg"
},
"help": {
"path": "Echo/modules/icons/help.svg"
},
"global": {
- "path": "Echo/modules/icons/global.svg"
+ "path": "Echo/modules/icons/global-progressive.svg"
},
"site": {
"url": false
},
"article-reminder": {
- "path": "Echo/modules/icons/global.svg"
+ "path": "Echo/modules/icons/global-progressive.svg"
}
},
"merge_strategy": "array_plus_2d"
@@ -680,15 +661,15 @@
"EchoSecondaryIcons": {
"value": {
"linked": {
- "path": "Echo/modules/icons/link-blue.svg"
+ "path": "Echo/modules/icons/link-progressive.svg"
},
"changes": {
"path": "Echo/modules/icons/changes.svg"
},
"thanks": {
"path": {
- "ltr": "Echo/modules/icons/thanks-ltr.svg",
- "rtl": "Echo/modules/icons/thanks-rtl.svg"
+ "ltr": "Echo/modules/icons/userTalk-ltr.svg",
+ "rtl": "Echo/modules/icons/userTalk-rtl.svg"
}
},
"userSpeechBubble": {
@@ -721,7 +702,8 @@
"section": "alert",
"bundle": {
"web": true,
- "email": false
+ "email": false,
+ "expandable": true
},
"immediate": true
},
@@ -767,6 +749,20 @@
"section": "alert",
"presentation-model": "EchoMentionPresentationModel"
},
+ "mention-summary": {
+ "user-locators": [
+ [
+ "EchoUserLocator::locateFromEventExtra",
+ [
+ "mentioned-users"
+ ]
+ ]
+ ],
+ "category": "mention",
+ "group": "interactive",
+ "section": "alert",
+ "presentation-model": "EchoMentionInSummaryPresentationModel"
+ },
"mention-failure": {
"user-locators": [
[
@@ -878,19 +874,13 @@
"EchoEventLoggingSchemas": {
"value": {
"Echo": {
- "enabled": false,
- "revision": 7731316,
- "client": false
+ "enabled": false
},
"EchoMail": {
- "enabled": false,
- "revision": 5467650,
- "client": false
+ "enabled": false
},
"EchoInteraction": {
- "enabled": false,
- "revision": 15823738,
- "client": true
+ "enabled": false
}
},
"merge_strategy": "array_plus_2d"
@@ -898,11 +888,22 @@
"AllowArticleReminderNotification": {
"value": false,
"description": "This is a feature flag to the Article Reminder notification"
+ },
+ "EchoMaxMentionsInEditSummary": {
+ "value": 0,
+ "description": "Maximum nubmer of users that will be notified that they were linked from an edit summary or 0 for no notifications"
+ }
+ },
+ "attributes": {
+ "EventLogging": {
+ "Schemas": {
+ "EchoInteraction": 15823738
+ }
}
},
"manifest_version": 2,
"AutoloadClasses": {
- "ApiCrossWikiBase": "includes/api/ApiCrossWikiBase.php",
+ "ApiCrossWiki": "includes/api/ApiCrossWiki.php",
"ApiEchoArticleReminder": "includes/api/ApiEchoArticleReminder.php",
"ApiEchoMarkRead": "includes/api/ApiEchoMarkRead.php",
"ApiEchoMarkReadTest": "tests/phpunit/api/ApiEchoMarkReadTest.php",
@@ -918,20 +919,20 @@
"ContainmentSetTest": "tests/phpunit/ContainmentSetTest.php",
"EchoAbstractEntity": "includes/model/AbstractEntity.php",
"EchoAbstractMapper": "includes/mapper/AbstractMapper.php",
- "EchoAbstractMapperStub": "tests/phpunit/mapper/AbstractMapperTest.php",
+ "EchoAbstractMapperStub": "tests/phpunit/mapper/EchoAbstractMapperStub.php",
"EchoAbstractMapperTest": "tests/phpunit/mapper/AbstractMapperTest.php",
- "EchoArrayList": "includes/ContainmentSet.php",
+ "EchoArrayList": "includes/EchoArrayList.php",
"EchoAttributeManager": "includes/AttributeManager.php",
"EchoAttributeManagerTest": "tests/phpunit/AttributeManagerTest.php",
- "EchoCachedList": "includes/ContainmentSet.php",
+ "EchoCachedList": "includes/EchoCachedList.php",
"EchoCallbackIterator": "includes/iterator/CallbackIterator.php",
"EchoCatchableFatalErrorException": "includes/exception/CatchableFatalErrorException.php",
- "EchoContainmentList": "includes/ContainmentSet.php",
- "EchoContainmentSet": "includes/ContainmentSet.php",
+ "EchoContainmentList": "includes/EchoContainmentList.php",
+ "EchoContainmentSet": "includes/EchoContainmentSet.php",
"EchoDataOutputFormatter": "includes/DataOutputFormatter.php",
"EchoDeferredMarkAsDeletedUpdate": "includes/DeferredMarkAsDeletedUpdate.php",
- "EchoDiffGroup": "includes/DiffParser.php",
- "EchoDiffParser": "includes/DiffParser.php",
+ "EchoDiffGroup": "includes/EchoDiffGroup.php",
+ "EchoDiffParser": "includes/EchoDiffParser.php",
"EchoDiffParserTest": "tests/phpunit/DiffParserTest.php",
"EchoDiscussionParser": "includes/DiscussionParser.php",
"EchoDiscussionParserTest": "tests/phpunit/DiscussionParserTest.php",
@@ -947,18 +948,19 @@
"EchoEventMapper": "includes/mapper/EventMapper.php",
"EchoEventMapperTest": "tests/phpunit/mapper/EventMapperTest.php",
"EchoEventPresentationModel": "includes/formatters/EventPresentationModel.php",
- "EchoExecuteFirstArgumentStub": "tests/phpunit/mapper/NotificationMapperTest.php",
+ "EchoExecuteFirstArgumentStub": "tests/phpunit/mapper/EchoExecuteFirstArgumentStub.php",
"EchoFilteredSequentialIterator": "includes/iterator/FilteredSequentialIterator.php",
"EchoFlyoutFormatter": "includes/formatters/EchoFlyoutFormatter.php",
"EchoForeignNotifications": "includes/ForeignNotifications.php",
"EchoForeignPresentationModel": "includes/formatters/EchoForeignPresentationModel.php",
"EchoForeignWikiRequest": "includes/ForeignWikiRequest.php",
- "EchoHooks": "Hooks.php",
+ "EchoHooks": "includes/EchoHooks.php",
"EchoHtmlDigestEmailFormatter": "includes/formatters/EchoHtmlDigestEmailFormatter.php",
"EchoHtmlEmailFormatter": "includes/formatters/EchoHtmlEmailFormatter.php",
"EchoIcon": "includes/formatters/EchoIcon.php",
"EchoIteratorDecorator": "includes/iterator/IteratorDecorator.php",
"EchoLocalCache": "includes/cache/LocalCache.php",
+ "EchoMentionInSummaryPresentationModel": "includes/formatters/MentionInSummaryPresentationModel.php",
"EchoMentionPresentationModel": "includes/formatters/MentionPresentationModel.php",
"EchoMentionStatusPresentationModel": "includes/formatters/MentionStatusPresentationModel.php",
"EchoModelFormatter": "includes/formatters/EchoModelFormatter.php",
@@ -974,7 +976,7 @@
"EchoNotificationTest": "tests/phpunit/model/NotificationTest.php",
"EchoNotifier": "includes/Notifier.php",
"EchoOOUI\\LabelIconWidget": "includes/ooui/LabelIconWidget.php",
- "EchoOnWikiList": "includes/ContainmentSet.php",
+ "EchoOnWikiList": "includes/EchoOnWikiList.php",
"EchoPageLinkedPresentationModel": "includes/formatters/PageLinkedPresentationModel.php",
"EchoPlainTextDigestEmailFormatter": "includes/formatters/EchoPlainTextDigestEmailFormatter.php",
"EchoPlainTextEmailFormatter": "includes/formatters/EchoPlainTextEmailFormatter.php",
@@ -982,6 +984,7 @@
"EchoRevertedPresentationModel": "includes/formatters/RevertedPresentationModel.php",
"EchoRevisionLocalCache": "includes/cache/RevisionLocalCache.php",
"EchoSeenTime": "includes/SeenTime.php",
+ "EchoSummaryParser": "includes/EchoSummaryParser.php",
"EchoSuppressionRowUpdateGenerator": "includes/schemaUpdate.php",
"EchoTalkPageFunctionalTest": "tests/phpunit/TalkPageFunctionalTest.php",
"EchoTargetPage": "includes/model/TargetPage.php",
@@ -1008,7 +1011,7 @@
"MWEchoThankYouEditTest": "tests/phpunit/ThankYouEditTest.php",
"NotificationControllerTest": "tests/phpunit/controller/NotificationControllerTest.php",
"NotificationPager": "includes/special/NotificationPager.php",
- "NotificationsTest": "tests/NotificationsTest.php",
+ "NotificationsTest": "tests/phpunit/NotificationsTest.php",
"ProcessEchoEmailBatch": "maintenance/processEchoEmailBatch.php",
"RemoveInvalidNotification": "maintenance/removeInvalidNotification.php",
"RemoveOrphanedEvents": "maintenance/removeOrphanedEvents.php",
@@ -1019,6 +1022,7 @@
"SpecialNotificationsMarkRead": "includes/special/SpecialNotificationsMarkRead.php",
"SuppressionMaintenanceTest": "tests/phpunit/maintenance/SupressionMaintenanceTest.php",
"TestDiscussionParser": "maintenance/testDiscussionParser.php",
- "UpdateEchoSchemaForSuppression": "maintenance/updateEchoSchemaForSuppression.php"
+ "UpdateEchoSchemaForSuppression": "maintenance/updateEchoSchemaForSuppression.php",
+ "EchoUpdatePerUserBlacklist": "maintenance/updatePerUserBlacklist.php"
}
}
diff --git a/Echo/gitinfo.json b/Echo/gitinfo.json
index bea5149a..4cbb0cf7 100644
--- a/Echo/gitinfo.json
+++ b/Echo/gitinfo.json
@@ -1 +1 @@
-{"headSHA1": "d64a26dd69ead0c3c4618b136a71dcab964b691f\n", "head": "d64a26dd69ead0c3c4618b136a71dcab964b691f\n", "remoteURL": "https://gerrit.wikimedia.org/r/mediawiki/extensions/Echo", "branch": "d64a26dd69ead0c3c4618b136a71dcab964b691f\n", "headCommitDate": "1535056172"} \ No newline at end of file
+{"headCommitDate": "1544816094", "head": "335389f7504459bb43edd3dc4df28af8d01f1452\n", "remoteURL": "https://gerrit.wikimedia.org/r/mediawiki/extensions/Echo", "branch": "335389f7504459bb43edd3dc4df28af8d01f1452\n", "headSHA1": "335389f7504459bb43edd3dc4df28af8d01f1452\n"} \ No newline at end of file
diff --git a/Echo/i18n/abs.json b/Echo/i18n/abs.json
new file mode 100644
index 00000000..99b88c9e
--- /dev/null
+++ b/Echo/i18n/abs.json
@@ -0,0 +1,8 @@
+{
+ "@metadata": {
+ "authors": [
+ "Anok kutai jang"
+ ]
+ },
+ "tooltip-pt-notifications-alert": "Pamberitahuan {{GENDER:|Ale}}"
+}
diff --git a/Echo/i18n/ady-cyrl.json b/Echo/i18n/ady-cyrl.json
index b2ef3346..b8080283 100644
--- a/Echo/i18n/ady-cyrl.json
+++ b/Echo/i18n/ady-cyrl.json
@@ -5,6 +5,5 @@
"TheRossatron"
]
},
- "tooltip-pt-notifications-alert": "{{GENDER:|Уи}} мэкъэгъэIухэр",
- "tooltip-pt-notifications-message": "{{GENDER:|Уи}} мессаджхэр"
+ "tooltip-pt-notifications-alert": "{{GENDER:|Уи}} мэкъэгъэIухэр"
}
diff --git a/Echo/i18n/af.json b/Echo/i18n/af.json
index b0d26796..6148e463 100644
--- a/Echo/i18n/af.json
+++ b/Echo/i18n/af.json
@@ -13,7 +13,6 @@
"prefs-displaynotifications": "Vertoonopsies",
"prefs-echosubscriptions": "Hou my op hoogte oor hierdie gebeurtenisse",
"prefs-echocrosswiki": "Kennisgewings van ander wiki's",
- "prefs-newmessageindicator": "Nuwe boodskap-indikator",
"prefs-blocknotificationslist": "Stilgebruikers",
"echo-pref-send-me": "Stuur my:",
"echo-pref-send-to": "Stuur na:",
@@ -26,7 +25,6 @@
"echo-pref-email-frequency-weekly": "Weeklikse opsomming van kennisgewings",
"echo-pref-email-format-html": "HTML",
"echo-pref-email-format-plain-text": "Eenvoudige teks",
- "echo-pref-new-message-indicator": "Wys besprekingsblad-boodskapindikator in my werkbalk",
"echo-learn-more": "Leer meer",
"echo-new-messages": "U het nuwe boodskappe",
"echo-category-title-edit-user-talk": "Boodskap{{PLURAL:$1||pe}} op u besprekingsblad",
@@ -48,8 +46,6 @@
"echo-none": "U het geen kennisgewings nie.",
"echo-more-info": "Meer inligting",
"echo-feedback": "Terugvoer",
- "echo-popup-footer-special-page-invitation": "<strong>Probeer die herontwerpte kennisgewingsbladsy.</strong> [$2 $1]",
- "echo-popup-footer-special-page-invitation-link": "'n Heel nuwe uiterlik en nuwe funksies.",
"echo-api-failure": "Kan kennisgewings nie ophaal nie.",
"echo-api-failure-cross-wiki": "Toegang tot die eksterne domein is geweier.",
"echo-notification-placeholder": "Daar is geen kennisgewings nie.",
diff --git a/Echo/i18n/ais.json b/Echo/i18n/ais.json
index 74a5d36f..c60dc4a2 100644
--- a/Echo/i18n/ais.json
+++ b/Echo/i18n/ais.json
@@ -6,63 +6,182 @@
"Tokoabibi"
]
},
+ "echo-desc": "sapipatakus misaungayay sikawaw atu palatuh a sisetyimo",
"prefs-echo": "patakus",
"prefs-emailsettings": "imyiyo(email) mapili’ay",
"prefs-displaynotifications": "paazih tu mapiliay",
+ "prefs-echosubscriptions": "patakus takuan tuyniyay a kawaw",
"prefs-echocrosswiki": "milakuid wiki patakus",
- "prefs-newmessageindicator": "baluhay palatuh satuzu’ a sakaluk",
"echo-pref-send-me": "pabahel takuwanan:",
"echo-pref-send-to": "pabahel katukuh i:",
+ "echo-pref-email-format": "imyiyo(email) kese",
"echo-pref-web": "calay-kasabelih(wangyei)",
"echo-pref-email": "imyiyo(email)",
+ "echo-pref-email-frequency-never": "amana pabahel amahicahica tu tigami patakus",
+ "echo-pref-email-frequency-immediately": "pacacacacay patakus nasikawaway a palatuh",
"echo-pref-email-frequency-daily": "paydemiad patakus pecu’ nu lacul",
"echo-pref-email-frequency-weekly": "paylipay patakus pecu’ nu lacul",
"echo-pref-email-format-html": "HTML",
"echo-pref-email-format-plain-text": "sulit a dada’",
+ "echo-pref-cross-wiki-notifications": "paazih namakay zuma wiki a takus",
"echo-pref-beta-feature-cross-wiki-message": "pacunusen patakus sasahicaan",
+ "echo-pref-beta-feature-cross-wiki-description": "sadayumtu miciwsace atu mikumi patakus. tina sasahicaan yamalyilu milakuid Wiki patakus sasahicaan,ngay misaungayay taneng miciwsace namakay zuma Wiki a palatuh.(i hatizaay Wiki milayap malakuid Wiki a takus,kanca i kya Wiki miteka’ mitanamay a sasahicaan.)",
"echo-learn-more": "sayadahay ku tineng",
"echo-log": "nubinawlan a nasulitan nazipa’an",
"echo-new-messages": "izaw baluhay palatuh kisu",
+ "echo-category-title-edit-user-talk": "sasukamu kasabelih {{PLURAL:$1|palatuh}}",
+ "echo-category-title-article-linked": "kasabelih {{PLURAL:$1|masasiket}}",
+ "echo-category-title-reverted": "mikawaway-kalumyiti {{PLURAL:$1|patiku}}",
+ "echo-category-title-mention": "{{PLURAL:$1|mapatahkal}}",
+ "echo-category-title-mention-failure": "mungangaw {{PLURAL:$1|mapatahkal}}",
+ "echo-category-title-mention-success": "malahci {{PLURAL:$1|mapatahkal}}",
+ "echo-category-title-other": "{{PLURAL:$1|zuma}}",
+ "echo-category-title-system": "{{PLURAL:$1|sisetyimo}}",
+ "echo-category-title-user-rights": "{{PLURAL:$1|misaungayay tungus misumad}}",
+ "echo-category-title-emailuser": "{{PLURAL:$1|namakay zuma misaungayay a imyiyo(email)}}",
+ "echo-pref-tooltip-edit-user-talk": "anu izaw tu tademaw i sasukamu kasabelih nu maku miliwan palatuh saca patubeli nisubelidan kamu sa, patakus takuwan.",
+ "echo-pref-tooltip-reverted": "anu izaw ku tademaw pisaungay patiku saca palawpes sasahicaan apatiku numakuay a mikawaway-kalumyiti patakus takuwan",
+ "echo-pref-tooltip-mention": "anu sitademaw misasiket nu makuaya a misaungayay kasabelih haw patakus takuwanan.",
+ "echo-pref-tooltip-mention-failure": "imahini mapatahkal kaku situngusay mungangaw sa patakus takuwan",
+ "echo-pref-tooltip-mention-success": "imahini mapatahkal kaku ku situngusay haw patakus takuwan.",
+ "echo-pref-tooltip-user-rights": "anu sitademaw misumad nu makuay a misaungayay tungus haw patakus takuwanan.",
+ "echo-pref-tooltip-emailuser": "anu izaw pabahel imyiyo(email) takuwan haw patakus takuwan.",
"echo-error-no-formatter": "caay henay misaheci kese nu takus.",
"notifications": "patakus",
"tooltip-pt-notifications-alert": "{{GENDER:|misuay}}pacekil",
+ "tooltip-pt-notifications-notice": "{{GENDER:|misuay}} habutuday a patakus",
"echo-displaynotificationsconfiguration": "paazih patakus setin",
+ "echo-displaynotificationsconfiguration-summary": "tina bilih buhci tu kamu tina wiki a takus setin.",
"echo-displaynotificationsconfiguration-notifications-by-category-header": "paykakuniza a takus",
"echo-displaynotificationsconfiguration-sorting-by-section-header": "masilsilay a kakuniza",
+ "echo-displaynotificationsconfiguration-sorting-by-section-legend": "paytakus nu pakakuniza tu kakuniza",
"echo-displaynotificationsconfiguration-available-notification-methods-header": "mahasa mitakus sasakawawen",
+ "echo-displaynotificationsconfiguration-available-notification-methods-by-category-legend": "kalutakus matatungusay a takus sasakawawen",
+ "echo-displaynotificationsconfiguration-available-notification-methods-by-type-legend": "hamin kakuniza nu patakus kapah mitakusay a sasakawawen; matatungus dada’ misetin midimutay a takus kakuniza.",
"echo-displaynotificationsconfiguration-enabled-default-header": "pataayaw tu kawaw miwawah",
"echo-displaynotificationsconfiguration-enabled-default-existing-users-legend": "ayzaay a misaungayay",
"echo-displaynotificationsconfiguration-enabled-default-new-users-legend": "baluhay misaungayay",
+ "echo-displaynotificationsconfiguration-mandatory-notification-methods-header": "kasasululay a patakus sasakawawen",
+ "echo-displaynotificationsconfiguration-mandatory-notification-methods-by-category-legend": "kalupatakus kanca pisaungay takus sasakawawen",
+ "echo-specialpage": "patakus",
"echo-specialpage-section-markread": "silusi tu luyaluy ku maasipay",
"echo-specialpage-markasread": "takus: silusi naasip tuway",
"echo-specialpage-markasread-invalid-id": "sikawaw ID la’cus",
+ "echo-specialpage-pagination-numnotifications": "$1 {{PLURAL:$1|patakus}}",
"echo-specialpage-pagefilters-title": "capiay a saungay nu binawlan",
"echo-specialpage-pagefilters-subtitle": "yamalyilu caay maasipay a kasabelih nu tukus",
"notificationsmarkread-legend": "ya takus silusi namasiptu",
+ "echo-anon": "amizawis patakus, piayaw [$1 pangangan ku canghaw] saca [$2 patalabu].",
"echo-none": "inayi’ amahicahica tu patakus numisu.",
"echo-more-info": "sayadahay a cesyun",
"echo-feedback": "nabalucu’an hwidubaku",
- "echo-popup-footer-special-page-invitation-link": "sakacinizaniza baluhayay a nuhekalan atu kungneng.",
+ "echo-api-failure": "miala patakus mungangaw.",
+ "echo-api-failure-cross-wiki": "tayza baatay calay-subal(wangyi) misuped-miala makakaian.",
"echo-notification-placeholder": "inayi’ ku hicahica a takus.",
+ "echo-notification-placeholder-filters": "inayi’ amahicahica tu matatungus uyniyay sakacucek a takus.",
+ "echo-notification-loginrequired": "manakanca kisu patalabu taneng miazih tu takus.",
+ "echo-notification-popup-loginrequired": "patalabu amiciwsace takus nu misu.",
"echo-notification-markasread": "silusi sanay u maasipay tu",
"echo-notification-markasread-tooltip": "silusi sanay u maasipay tu",
"echo-notification-more-options-tooltip": "sayadahay a mapiliay",
+ "notification-dynamic-actions-unwatch": "{{GENDER:$3|pahanhan}}miazih \"$1\" a baluhay likit a kawaw",
+ "notification-dynamic-actions-unwatch-confirmation": "{{GENDER:$3|kisu}}caay tu paazih \"$1\"",
+ "notification-dynamic-actions-unwatch-confirmation-description": "{{GENDER:$3|kisu}} kapah tu miazih demidemiad [$2 tina belih].",
+ "notification-dynamic-actions-watch": "{{GENDER:$3|mikilul nazikuzan}} \"$1\" a baluhay likit a kawaw",
+ "notification-dynamic-actions-watch-confirmation": "{{GENDER:$3|kisu}}maazih kasabelih \"$1\" tuway",
+ "notification-dynamic-actions-watch-confirmation-description": "{{GENDER:$3|kisu}} kapah tu demidemiad sa pahanhan miazih[$2 tina kasabelih].",
"notification-link-text-expand-all": "micuwat",
+ "notification-link-text-expand-alert-count": "ciwsace {{PLURAL:$1|$1 pacekil}}",
+ "notification-link-text-expand-notice-count": "ciwsace {{PLURAL:$1|$1 patakus}}",
+ "notification-link-text-expand-all-count": "ciwsace {{PLURAL:$1|$1 patakus}}",
"notification-link-text-collapse-all": "piked",
"notification-link-text-view-message": "ciwsace tu palatuh",
+ "notification-link-text-view-mention": "ciwsace mapatahkal",
+ "notification-link-text-view-mention-failure": "{{PLURAL:$1|ciwsac mapatahkal}}",
+ "notification-link-text-view-changes": "{{GENDER:$1|ciwsace}} misumad",
"notification-link-text-view-page": "ciwsace tu kasabelih",
+ "notification-header-edit-user-talk": "$1 i <strong>{{GENDER:$3|kisu}} a misaungayay sasukamu kasabelih </strong>{{GENDER:$2|maliwan}} cacay palatuh.",
+ "notification-header-edit-user-talk-with-section": "$1 i <strong>{{GENDER:$3|kisu}} a misaungayay sasukamu kasabelih </strong> a \"<strong>$4</strong>\" {{GENDER:$2|maliwan tu}} cacay palatuh.",
+ "notification-header-page-linked": "izaw ku tademaw ilabu <strong>$4</strong> micunus tu <strong>$3</strong> a siket.",
+ "notification-compact-header-page-linked": "<strong>$1</strong> masasiket tu tina belih.",
+ "notification-bundle-header-page-linked": "izaw ku tademaw i {{PLURAL:$5||$5 kasabelih|100=99+ kasabelih}} micunus tu payiza <strong>$3</strong> misiket.",
+ "notification-link-text-what-links-here": "sacahamin a kasabelih nu masasiket tina kasabilih",
+ "notification-header-mention-other": "$1 i \"<strong>$4</strong>\" a \"<strong>$5</strong>\" {{GENDER:$2|mapatahkal}} tuway {{GENDER:$3|kisu}}.",
+ "notification-header-mention-other-nosection": "$1 ilabu’ nu <strong>$4</strong> {{GENDER:$2|sakamu}} satu {{GENDER:$3|kisu}}.",
+ "notification-header-mention-user-talkpage-v2": "$1 i <strong>$4 {{GENDER:$5|a}} misaungayay sasukamu-belih</strong> a \"<strong>$6</strong>\" {{GENDER:$2|sakamu}} tuway {{GENDER:$3|kisu}}",
+ "notification-header-mention-user-talkpage-nosection": "$1 i <strong> $4 {{GENDER:$5|a}} misaungayay sasukamu belih </strong>{{GENDER:$2|sakamu}} tuway {{GENDER:$3|kisu}}",
+ "notification-header-mention-agent-talkpage": "$1 i <strong>{{GENDER:$2|ciniza}} sasukamu kasabelih</strong> a \"<strong>$4</strong>\" {{GENDER:$2|sakamu}} tuway {{GENDER:$3|kisu}}",
+ "notification-header-mention-agent-talkpage-nosection": "$1i <strong>{{GENDER:$2|ciniza}}a sasukamu belih</strong> {{GENDER:$2|sakamu}} tuway {{GENDER:$3|kisu}}.",
+ "notification-header-mention-article-talkpage": "$1i <strong>$4</strong> ipabaw nu matatengil belih <strong>$5</strong>\"{{GENDER:$2|musakamu}} tu {{GENDER:$3|kisu}}",
+ "notification-header-mention-article-talkpage-nosection": "$1 i <strong>$4</strong> a matatengil-bilih {{GENDER:$2|sakamu}} tu {{GENDER:$3|kisu}}.",
+ "notification-header-mention-failure-user-unknown": "la’cus patahkal {{GENDER:$2|kisu}} tu <strong>$3</strong> a mapatahkal, zayhan caay katepa ku misaungayay.",
+ "notification-header-mention-failure-user-anonymous": "la’cus liliten {{GENDER:$2|kisu}} sakay <strong>$3</strong> a mapatahkal, izay kya misaungayay ku paceba panganganay a misaungayay.",
+ "notification-header-mention-failure-too-many": "{{GENDER:$2|kisu}}mitanam mapatahkal mangasiw $3 a {{PLURAL:$3|situngusay}}, uyzasa sacahamin mangasiw pabaw-sahezek a mapatahkal, sacahamin caaytu pabahal.",
+ "notification-header-mention-failure-bundle": "{{PLURAL:$3|la’cus}} pabahel {{GENDER:$2|kisu}} i <strong>$4</strong> ipabaw nu matatengil-balih a {{PLURAL:$3|mapatahkal|$3 mapatahkal }}",
+ "notification-compact-header-mention-failure-user-unknown": "<strong>misaungayay a kalungangan inayi’:</strong> $1",
+ "notification-compact-header-mention-failure-user-anonymous": "<strong>IP sanay amana mapatahkal:</strong> $1",
+ "notification-header-mention-success": "mapatahkal tu{{GENDER:$2|kisu}}tu <strong>$3</strong> a masakamutu",
+ "notification-header-mention-success-bundle": "{{PLURAL:$3|mapatahkal tuway}} {{GENDER:$2|kisu}} i <strong>$4</strong> matatengil-belih a {{PLURAL:$3|mapatahkal|$3 mapatahkal}}",
+ "notification-compact-header-mention-success": "<strong>{{GENDER:$2|mapatahkal kisu}}:</strong> $3",
+ "notification-header-mention-status-bundle": "izaw {{PLURAL:$3|$3}} mahizaay {{GENDER:$2|kisu}} i <strong>$4</strong> matatengil belih misanga’ay a mapatahkal takus: {{PLURAL:$5|$5 caayhen pabahel}}, {{PLURAL:$6|$6 mapabahel tuway}}.",
+ "notification-header-user-rights-add-only": "{{GENDER:$4|numisu}} misaungayay a tungus tu a {{GENDER:$1|masumad}}. macunus tu kisu ta: $2.",
+ "notification-header-user-rights-remove-only": "{{GENDER:$4|numisu}} misaungayay tungus mapa {{GENDER:$1|masumad}}. caaytu kisu $2 mamikawaw",
+ "notification-header-user-rights-add-and-remove": "{{GENDER:$6|misuay}} misaungayay tungus {{GENDER:$1|masumad}}. pacunus tu kisu i:$2. caaytu kisu ku $4 a mamikawaway.",
+ "notification-header-welcome": "$1, {{GENDER:$2|limulak militemuh}} tayni {{SITENAME}}! limulak miazih tisuwan itini {{GENDER:$2|kisu}}.",
+ "notification-header-thank-you-1-edit": "{{GENDER:$2|kisu}} nasawni masanga’an tu {{GENDER:$2|numisuay}}sakacacay mikawaway-kalumyiti. kukay tisuwanan, limulak militemuh {{GENDER:$2|kisu}}!",
+ "notification-header-thank-you-10-edit": "{{GENDER:$2|kisu}} nasawni mikawaw tu {{GENDER:$2|numisu}}saka cacay bataan mikawaway-kalumyiti. kukay tu tisuwanan, kapalalid paicelang",
+ "notification-header-thank-you-100-edit": "{{GENDER:$2|kisu}} nasawni misaungay tuway {{GENDER:$2|misuay}} cacay a lasubu mikawaway-kalumyiti. kukay{{GENDER:$2|kisu}}",
+ "notification-header-thank-you-1000-edit": "{{GENDER:$2|kisu}}nasawni masang’ tuway{{GENDER:$2|misuay}} saka cacay a malebut mikawaway-kalumyiti. mikukay {{GENDER:$2|kisu}} kya paanin!",
+ "notification-header-thank-you-10000-edit": "{{GENDER:$2|kisu}} nasawni misaungay tuway {{GENDER:$2|misuay}} cacay a mang mikawaway-kalumyiti. kukay{{GENDER:$2|kisu}}",
+ "notification-header-thank-you-100000-edit": "{{GENDER:$2|kisu}} sanawni masanga’tu {{GENDER:$2|misuay}} saka cacay bataan a mang mikawaway-kalumyiti. kukay {{GENDER:$2|kisu}} sakapay a paanin!",
+ "notification-header-thank-you-1000000-edit": "{{GENDER:$2|kisu}} sanawni masanga’tu {{GENDER:$2|misuay}} saka cacay lasubu a mang mikawaway-kalumyiti. kukay {{GENDER:$2|kisu}} sakapay a paanin!",
+ "notification-link-thank-you-edit": "{{GENDER:$1|misuay}} mikawaway-kalumyiti",
"notification-link-text-view-edit": "ciwsace tu mikawaway-kalumyiti",
"notification-link-article-reminder": "ciwsace tu kasabelih",
+ "notification-header-reverted": "izaw ku tademaw {{GENDER:$2|patiku}} tu kisu {{PLURAL:$4|sakay<strong>$3</strong> samikawaway-kalumyiti}}.",
+ "notification-header-emailuser": "$1 pasayza tisuwan {{GENDER:$2|pabahel tu}} cacay a imyiyo(email)",
+ "notification-edit-talk-page-email-subject2": "$1 i {{SITENAME}} {{GENDER:$1|maliwan tu}}ku cacay palatuh pabeli tisuwan.",
+ "notification-edit-talk-page-email-batch-body-with-section": "$1 itisuwan kasasukamu kasabelih ilabu’ nu \"$2\" a {{GENDER:$1|masubeliday}} cacayay a sapalatuh.",
+ "notification-page-linked-email-subject": "i {{SITENAME}} kisu patizengau a kasabelih masasiket tuway",
+ "notification-reverted-email-subject2": "izaw ku tademaw{{GENDER:$1|patiku tuway}} kisu i{{SITENAME}} sa {{PLURAL:$3|mikawaway-kalumyiti}}",
+ "notification-mention-email-subject": "$1 i {{SITENAME}} pabaw {{GENDER:$1|mapasakamu}} {{GENDER:$2|kisu}}",
+ "notification-user-rights-email-subject": "i {{SITENAME}} misuay a misaungayay tungus masumad tuway",
+ "notification-timestamp-ago-seconds": "{{PLURAL:$1|$1 beti}}",
+ "notification-timestamp-ago-minutes": "{{PLURAL:$1|$1 a widi}}",
+ "notification-timestamp-ago-hours": "{{PLURAL:$1|$1 a tuki}}",
+ "notification-timestamp-ago-days": "{{PLURAL:$1|$1 demiad}}",
+ "notification-timestamp-ago-months": "{{PLURAL:$1|$1 a bulad}}",
+ "notification-timestamp-ago-years": "{{PLURAL:$1|$1 a mihca}}",
"notification-timestamp-today": "ayza a demiad",
"notification-timestamp-yesterday": "nacila",
"notification-inbox-filter-read": "miasip",
"notification-inbox-filter-unread": "caay henay miasip",
"notification-inbox-filter-all": "hamin",
+ "echo-email-body-default": "i {{SITENAME}} kisu izaw ku baluhayay a palatuh:\n\n\n$1",
+ "echo-email-footer-default-html": "anu maydih sulimet napatigami tisuwan nuniyam a imyiyo(email), <a href=\"$2\" style=\"text-decoration:none; color: #3868B0;\">pikinsa setin tu kanamuhan nu misu </a>.<br />\n$1",
+ "echo-email-footer-default": "$2\n\nanu maydih sulimet napatigami tisuwan nuniyam a imyiyo(email), pikinsa setin tu kanamuhan nu misu:\n{{canonicalurl:{{#special:Preferences}}#mw-prefsection-echo}}\n\n$1",
+ "echo-email-plain-footer": "anu maydih misulimet pabahelen nu maku tisuwan ku imyiyo(email), kapikinsa {{GENDER:$1|kisuan}} setin tu kanamuhan:",
+ "echo-email-html-footer-with-link": "anu amisulimet patigami nu niyam{{GENDER:$2|misu}}a imyiyo(email), $1:",
+ "echo-notification-alert": "{{PLURAL:$1|pacekil ($1ce)|100= pacekil (99+ce)}}",
+ "echo-notification-notice": "{{PLURAL:$1|habutud patakus ($1)|100=habutud patakus (99+)}}",
"echo-notification-alert-text-only": "pacekil",
"echo-notification-notice-text-only": "habutuday a patakus",
"echo-overlay-link": "sacahamin a takus",
"echo-overlay-title": "<b>patakus</b>",
+ "echo-overlay-title-overflow": "<b>{{PLURAL:$1|patakus}}</b> (paazih $2 caay hen kaasip a latuh labu’ay $1)",
+ "echo-mark-all-as-read": "silusi sacahamin maasipay tuway",
+ "echo-mark-all-as-read-confirmation": "masilusi $1{{PLURAL:$1|patakus}} ku maasipay",
+ "echo-mark-wiki-as-read": "i mapiliay a wiki silusi sacahamin ku maasipay: $1",
"echo-date-today": "ayza a demiad",
"echo-date-yesterday": "nacila",
- "echo-email-batch-link-text-view-all-notifications": "ciwsace tu sacahamin a satakus"
+ "echo-load-more-error": "miala sangaleb a heci sa mungangaw.",
+ "notification-bundle-header-edit-user-talk-v2": "<strong>{{GENDER:$3|kisu}} a sasukamu kasabelih</strong> ilabu’ izaw {{PLURAL:$1|$1|100=99 mikiyadah}} baluhay palatuh",
+ "echo-email-batch-subject-daily": "kisu i {{SITENAME}} izaw {{PLURAL:$2|cacay baluhay a takus}}",
+ "echo-email-batch-subject-weekly": "ayza a lipay, kisu i {{SITENAME}} izaw{{PLURAL:$2|cacay baluhay a takus}}",
+ "echo-email-batch-body-intro-daily": "$1 mahica tu,\ntina sa kisu i {{SITENAME}} ayza a demiad saungay nu binawlan misulit pecu’ nu lacul",
+ "echo-email-batch-body-intro-weekly": "$1 mahica tu,\ntina sa kisu i {{SITENAME}} ayza a lipay saungay nu binawlan misulit pecu’ nu lacul",
+ "echo-email-batch-link-text-view-all-notifications": "ciwsace tu sacahamin a satakus",
+ "notification-header-foreign-alert": "namakay {{PLURAL:$5|zumaay wiki|zuma $5 ke wiki}} a yadah patakus",
+ "notification-header-foreign-notice": "namakay {{PLURAL:$5|zumaay wiki|zuma $5 ke wiki}} a yadah habutud patakus",
+ "notification-header-foreign-all": "namakay {{PLURAL:$5|zuma wiki|$5 zuma wiki}} a yadah patakus"
}
diff --git a/Echo/i18n/ami.json b/Echo/i18n/ami.json
new file mode 100644
index 00000000..86286172
--- /dev/null
+++ b/Echo/i18n/ami.json
@@ -0,0 +1,10 @@
+{
+ "@metadata": {
+ "authors": [
+ "Vickylin77s"
+ ]
+ },
+ "tooltip-pt-notifications-alert": "{{GENDER:|no miso}} mipalal",
+ "notification-link-text-expand-all": " misatapang",
+ "notification-inbox-filter-all": " Maemin/po:long"
+}
diff --git a/Echo/i18n/anp.json b/Echo/i18n/anp.json
index d5f5ca67..2753589f 100644
--- a/Echo/i18n/anp.json
+++ b/Echo/i18n/anp.json
@@ -4,6 +4,5 @@
"Angpradesh"
]
},
- "tooltip-pt-notifications-alert": "{{GENDER:|आपन॑ के}} जागरुकता संदेश",
- "tooltip-pt-notifications-message": "{{GENDER:|आपन॑ के}} संदेश"
+ "tooltip-pt-notifications-alert": "{{GENDER:|आपन॑ के}} जागरुकता संदेश"
}
diff --git a/Echo/i18n/api/ar.json b/Echo/i18n/api/ar.json
index 3ae1687f..eabd2bb7 100644
--- a/Echo/i18n/api/ar.json
+++ b/Echo/i18n/api/ar.json
@@ -7,10 +7,12 @@
"Maroen1990",
"Meno25",
"بدارين",
- "محمد أحمد عبد الفتاح"
+ "محمد أحمد عبد الفتاح",
+ "ديفيد"
]
},
"apihelp-echomarkread-description": "علم الإخطارات للقراءة للمستخدم الحالي.",
+ "apihelp-echomarkread-summary": "علم الإشعارات للقراءة للمستخدم الحالي.",
"apihelp-echomarkread-param-list": "قائمة بأرقام الإخطارات للتعليم كمقروءة.",
"apihelp-echomarkread-param-unreadlist": "قائمة بأرقام الإخطارات للتعليم كغير مقروءة.",
"apihelp-echomarkread-param-all": "لو مضبوطة؛ تعلم على كل إخطارات المستخدم كمقروءة.",
@@ -19,16 +21,17 @@
"apihelp-echomarkread-example-2": "تعليم جميع الإشعارات كمقروءة",
"apihelp-echomarkread-example-3": "علم على الإخطار 1 كمقروء",
"apihelp-echomarkseen-description": "التعليم على الإخطارات كمنظورة للمستخدم الحالي.",
+ "apihelp-echomarkseen-summary": "التعليم على الإخطارات كمنظورة للمستخدم الحالي.",
"apihelp-echomarkseen-example-1": "التعليم على الإخطارات من كل الأنواع كمنظورة",
"apihelp-echomarkseen-param-type": "نوع الإشعارت لتحديد كما تبدو على أنها: 'تنبيه' 'رسالة' أو 'كل'.",
"apihelp-echomarkseen-param-timestampFormat": "صيغة الطابع الزمني للاستخدام للناتج 'ISO_8601' أو 'MW'. 'MW' مستغنى عنه هنا، لذا فكل العملاء ينبغي أن يتحولوا إلى 'ISO_8601'. هذا المعامل ستتم إزالته، و 'ISO_8601' سيصبح صيغة الناتج الوحيدة.",
"apihelp-query+notifications-description": "الحصول على الإخطارات قيد الانتظار للمستخدم الحالي.",
+ "apihelp-query+notifications-summary": "الحصول على إشعارات في انتظار المستخدم الحالي.",
"apihelp-query+notifications-param-prop": "طلب تفاصيل.",
"apihelp-query+notifications-param-sections": "اقسام الأشعار للأستعلام (أي بمعنى بعض الثنائي من \"تنبيه\" و \"رسالة\").",
"apihelp-query+notifications-param-groupbysection": "ما إذا يتم جمع النتيجة بالقسم. كل قسم يتم جلبه بشكل مستقل لو مضبوط.",
"apihelp-query+notifications-param-filter": "فلترة الإخارات أرجعت.",
"apihelp-query+notifications-param-format": "لو محدد، فالإخطارات سيتم إرجاعها مهيئة بهذه الطريقة.",
- "apihelp-query+notifications-paramvalue-format-text": "صيغة نص عادي",
"apihelp-query+notifications-paramvalue-format-model": "بيانات إشعارات خام",
"apihelp-query+notifications-paramvalue-format-special": "مهيئة لصفحة Special:Notifications (وفقط هذه!) لا تعتمد على HTML إذ أنه ربما يتغير في أي وقت.",
"apihelp-query+notifications-paramvalue-format-flyout": "<span class=\"apihelp-deprecated\">مستغنى عنه</span>. استخدم <kbd>$1format=model</kbd> للبيانات الخام",
@@ -46,11 +49,20 @@
"apihelp-query+notifications-example-1": "قائمة الإشعارات",
"apihelp-query+notifications-example-2": "إخطارات القائمة، التي تم تجميعها حسب القسم، مع احصاء",
"apihelp-query+unreadnotificationpages-description": "الحصول على الصفحات التي لها إخطارات غير مقروءة للمستخدم الحالي.",
+ "apihelp-query+unreadnotificationpages-summary": "الحصول على الصفحات التي توجد بها إشعارات غير مقروءة للمستخدم الحالي.",
"apihelp-query+unreadnotificationpages-param-grouppages": "جمع صفحات النقاش مع صفحات موضوعها، وجمع الإخطارات غير المرتبطة مع صفحة مع صفحة المستخدم للمستخدم الحالي.",
"apihelp-query+unreadnotificationpages-param-limit": "العدد الأقصى للصفحات للإرجاع.",
"apihelp-query+unreadnotificationpages-param-wikis": "قائمة بالويكيات لجلب الصفحات مع الإخطارات غير المقروءة منها (افتراضيا الويكي الحالية فقط).",
"apihelp-query+unreadnotificationpages-example-1": "قائمة الصفحات مع (عدد) الإخطارات غير المقروءة",
+ "apihelp-echoarticlereminder-summary": "اطلب تذكيرًا مستقبليًا بالمقالة المحددة",
+ "apihelp-echoarticlereminder-param-pageid": "معرف المقالة لتذكير المستخدم بشأنها",
+ "apihelp-echoarticlereminder-param-title": "عنوان المقالة لتذكير المستخدم بشأنها",
+ "apihelp-echoarticlereminder-param-timestamp": "أي طابع زمني لتذكير المستخدم به",
+ "apihelp-echoarticlereminder-param-comment": "تعليق مستخدم اختياري لتضمينه في التذكير",
+ "apihelp-echoarticlereminder-example-1": "إنشاء إشعار تذكير مقالة للغد مع تعليق",
+ "apihelp-echoarticlereminder-example-2": "إنشاء إشعار تذكير مقالة للغد دون تعليق",
"apiwarn-echo-deprecation-timestampformat": "صيغة خرج MW timestamp مستغنى عنها هنا. في المستقبل، ISO 8601 سيتم استخدامها دائما لصيغة خرج الطابع الزمني. عدل عميلك واضبط <var>timestampFormat</var> إلى <kbd>ISO_8601</kbd>.",
"apiwarn-echo-deprecation-flyout": "<kbd>notformat=flyout</kbd> تم الاستغناء عنها وستتم إزالتها قريبا. استخدم <kbd>notformat=model</kbd> للحصول على البيانات الخام أو <kbd>notformat=special</kbd> لHTML المهيأ مسبقا.",
- "apiwarn-echo-deprecation-html": "<kbd>notformat=html</kbd> تم الاستغناء عنها وستتم إزالتها قريبا. استخدم <kbd>notformat=special</kbd> بدلا منها."
+ "apiwarn-echo-deprecation-html": "<kbd>notformat=html</kbd> تم الاستغناء عنها وستتم إزالتها قريبا. استخدم <kbd>notformat=special</kbd> بدلا منها.",
+ "apierror-echo-event-creation-failed": "لا يمكن إنشاء حدث إشعارات"
}
diff --git a/Echo/i18n/api/ba.json b/Echo/i18n/api/ba.json
index 56dc6913..19010b84 100644
--- a/Echo/i18n/api/ba.json
+++ b/Echo/i18n/api/ba.json
@@ -24,7 +24,6 @@
"apihelp-query+notifications-param-groupbysection": "Бүлектәр буйынса алынған һөҙөмтәне төркөмгә айырыу кәрәкме. Алдан күрһәтелһә, һәр бүлек айырым сығарыла.",
"apihelp-query+notifications-param-filter": "Кире ҡайтарылған белдереүҙәрҙе һөҙөргә.",
"apihelp-query+notifications-param-format": "Бойороҡ бирелһә, хәбәрҙәр ошолай форматлаштырып кире ҡайтарыласаҡ.",
- "apihelp-query+notifications-paramvalue-format-text": "Текст форматы",
"apihelp-query+notifications-paramvalue-format-model": "Эшкәртелмәгән белдереү мәғлүмәттәре",
"apihelp-query+notifications-paramvalue-format-special": "Ошо Special:Notifications бите өсөн генә (!) форматлаштырылған. Был HTMLға ышанмағыҙ, ул ҡапыл ғына үҙгәреүе мөмкин.",
"apihelp-query+notifications-paramvalue-format-flyout": "<span class=\"apihelp-deprecated\">Иҫкергән</span>. Тәүге күрһәткестәргә <kbd>$1format=model</kbd> ҡулланығыҙ",
diff --git a/Echo/i18n/api/bn.json b/Echo/i18n/api/bn.json
index f5c426cc..eb632693 100644
--- a/Echo/i18n/api/bn.json
+++ b/Echo/i18n/api/bn.json
@@ -1,7 +1,8 @@
{
"@metadata": {
"authors": [
- "Aftabuzzaman"
+ "Aftabuzzaman",
+ "আফতাবুজ্জামান"
]
},
"apihelp-echomarkread-description": "বর্তমান ব্যবহারকারীর জন্য বিজ্ঞপ্তি পঠিত হিসাবে চিহ্নিত করে।",
diff --git a/Echo/i18n/api/ce.json b/Echo/i18n/api/ce.json
index 3cc79364..8735a8a0 100644
--- a/Echo/i18n/api/ce.json
+++ b/Echo/i18n/api/ce.json
@@ -14,7 +14,6 @@
"apihelp-echomarkseen-example-1": "Билгалде массо тайпа долу дӀахаийтарш дешна санна",
"apihelp-query+notifications-param-prop": "Дехарна ма-дарра.",
"apihelp-query+notifications-param-filter": "Юхадирзина дӀахаийтарш литта.",
- "apihelp-query+notifications-paramvalue-format-text": "Йозанан формат",
"apihelp-query+notifications-paramvalue-format-model": "Кечъбанза дӀахаийтаран хаамаш",
"apihelp-query+notifications-example-1": "ДӀахаийтарийн могӀам",
"apihelp-query+unreadnotificationpages-param-limit": "Юхаялоран агӀонийн максимале дукхалла"
diff --git a/Echo/i18n/api/ckb.json b/Echo/i18n/api/ckb.json
new file mode 100644
index 00000000..0bb16736
--- /dev/null
+++ b/Echo/i18n/api/ckb.json
@@ -0,0 +1,9 @@
+{
+ "@metadata": {
+ "authors": [
+ "Asoxor"
+ ]
+ },
+ "apihelp-query+notifications-example-1": "پێرستی ئاگادارییەکان",
+ "apihelp-query+notifications-example-2": "پێرستی پۆلێن کراوی ئاگادارییەکان لەگەڵ ژمارەکانیان"
+}
diff --git a/Echo/i18n/api/de.json b/Echo/i18n/api/de.json
index ed7e2fe9..93f7acf6 100644
--- a/Echo/i18n/api/de.json
+++ b/Echo/i18n/api/de.json
@@ -8,6 +8,7 @@
]
},
"apihelp-echomarkread-description": "Benachrichtigungen für den aktuellen Benutzer als gelesen markieren.",
+ "apihelp-echomarkread-summary": "Markiert Benachrichtigungen für den aktuellen Benutzer als gelesen.",
"apihelp-echomarkread-param-list": "Eine Liste von Benachrichtigungskennungen, um sie als gelesen zu markieren.",
"apihelp-echomarkread-param-unreadlist": "Eine Liste mit Benachrichtigungskennungen, die als ungelesen markiert werden sollen.",
"apihelp-echomarkread-param-all": "Falls festgelegt, markiert alle Benutzerbenachrichtigungen als gelesen.",
@@ -16,16 +17,19 @@
"apihelp-echomarkread-example-2": "Alle Benachrichtigungen als gelesen markieren",
"apihelp-echomarkread-example-3": "Markiert die Benachrichtigung 1 als ungelesen",
"apihelp-echomarkseen-description": "Benachrichtigungen für den derzeitigen Benutzer als gesehen markieren.",
+ "apihelp-echomarkseen-summary": "Markiert Benachrichtigungen für den aktuellen Benutzer als gesehen.",
"apihelp-echomarkseen-example-1": "Benachrichtigungen aller Typen als gesehen markieren",
"apihelp-echomarkseen-param-type": "Benachrichtigungstypen, die als gesehen markiert werden sollen: „alert“, „message“ oder „all“.",
"apihelp-echomarkseen-param-timestampFormat": "Zu verwendendes Zeitstempelformat für die Ausgabe. „ISO_8601“ oder „MW“. „MW“ ist hier veraltet, so dass alle Clients auf „ISO_8601“ wechseln sollten. Dieser Parameter wird entfernt und „ISO_8601“ wird das einzige Ausgabeformat.",
"apihelp-query+notifications-description": "Benachrichtigungen abrufen, die auf den aktuellen Benutzer warten.",
+ "apihelp-query+notifications-summary": "Ruft wartende Benachrichtigungen für den aktuellen Benutzer ab.",
"apihelp-query+notifications-param-prop": "Einzelheiten der Anfrage.",
"apihelp-query+notifications-param-sections": "Die abzufragenden Benachrichtigungsabschnitte (z.&nbsp;B. eine Kombination aus „alert“ und „message“).",
"apihelp-query+notifications-param-groupbysection": "Ob das Ergebnis nach Abschnitt gruppiert werden soll. Jeder Abschnitt wird separat abgerufen, wenn es eingestellt wird.",
"apihelp-query+notifications-param-filter": "Filtert zurückgegebene Benachrichtigungen.",
"apihelp-query+notifications-param-format": "Falls angegeben, werden die zurückgegebenen Benachrichtigungen auf diese Weise formatiert.",
"apihelp-query+notifications-paramvalue-format-model": "Rohe Benachrichtigungsdaten",
+ "apihelp-query+notifications-paramvalue-format-special": "Formatiert für Spezial:Benachrichtigungen (und nur diese Seite!) Die HTML-Formatierung kann sich jederzeit ändern.",
"apihelp-query+notifications-paramvalue-format-flyout": "<span class=\"apihelp-deprecated\">Veraltet</span>. Für Rohdaten <kbd>$1format=model</kbd> verwenden.",
"apihelp-query+notifications-paramvalue-format-html": "<span class=\"apihelp-deprecated\">Veraltet</span>. Für Rohdaten <kbd>$1format=model</kbd> verwenden.",
"apihelp-query+notifications-param-limit": "Die maximale Anzahl zurückzugebender Benachrichtigungen.",
@@ -44,6 +48,13 @@
"apihelp-query+unreadnotificationpages-param-limit": "Die maximale Anzahl der zurückzugebenden Seiten.",
"apihelp-query+unreadnotificationpages-param-wikis": "Listet die Wikis auf, von denen Seiten mit ungelesenen Benachrichtigungen abgerufen werden sollen (Standard: Nur das aktuelle Wiki).",
"apihelp-query+unreadnotificationpages-example-1": "Listet Seiten mit (ihre Menge der) ungelesenen Benachrichtigungen auf",
+ "apihelp-echoarticlereminder-summary": "Fordert eine zukünftige Erinnerung über den angegebenen Artikel an",
+ "apihelp-echoarticlereminder-param-pageid": "Kennung des Artikels, an den der Benutzer erinnert werden soll.",
+ "apihelp-echoarticlereminder-param-title": "Name des Artikels, an den der Benutzer erinnert werden soll.",
+ "apihelp-echoarticlereminder-param-timestamp": "An welchem Zeitstempel der Benutzer erinnert werden soll",
+ "apihelp-echoarticlereminder-param-comment": "Optionaler Benutzerkommentar, der in der Erinnerung enthalten sein soll.",
+ "apihelp-echoarticlereminder-example-1": "Erstellt eine Artikel-Erinnerungsbenachrichtigung für morgen mit Kommentar",
+ "apihelp-echoarticlereminder-example-2": "Erstellt eine Artikel-Erinnerungsbenachrichtigung für morgen ohne Kommentar",
"apiwarn-echo-deprecation-timestampformat": "Das MW-Zeitstempel-Ausgabeformat ist hier veraltet. In Zukunft wird immer ISO 8601 für das Ausgabezeitstempelformat verwendet. Passe deinen Client an und lege <var>timestampFormat</var> auf <kbd>ISO_8601</kbd> fest.",
"apiwarn-echo-deprecation-flyout": "<kbd>notformat=flyout</kbd> ist veraltet und wird bald entfernt. Verwende <kbd>notformat=model</kbd>, um die Rohdaten zu erhalten oder <kbd>notformat=special</kbd> für vorgerendertes HTML.",
"apiwarn-echo-deprecation-html": "<kbd>notformat=html</kbd> ist veraltet und wird bald entfernt. Verwende stattdessen <kbd>notformat=special</kbd>.",
diff --git a/Echo/i18n/api/diq.json b/Echo/i18n/api/diq.json
new file mode 100644
index 00000000..62a6a4ba
--- /dev/null
+++ b/Echo/i18n/api/diq.json
@@ -0,0 +1,8 @@
+{
+ "@metadata": {
+ "authors": [
+ "Kumkumuk"
+ ]
+ },
+ "apihelp-query+notifications-example-1": "Akerdenê liste"
+}
diff --git a/Echo/i18n/api/eo.json b/Echo/i18n/api/eo.json
new file mode 100644
index 00000000..9230a897
--- /dev/null
+++ b/Echo/i18n/api/eo.json
@@ -0,0 +1,10 @@
+{
+ "@metadata": {
+ "authors": [
+ "KuboF"
+ ]
+ },
+ "apihelp-echomarkread-description": "Marki sciigojn legitaj por tiu ĉi uzanto.",
+ "apihelp-echomarkread-example-2": "Marki ĉiujn sciigojn legitaj",
+ "apihelp-query+notifications-description": "Ricevi sciigojn atentantajn por tiu ĉi uzanto."
+}
diff --git a/Echo/i18n/api/es.json b/Echo/i18n/api/es.json
index 29247e72..e1524c5e 100644
--- a/Echo/i18n/api/es.json
+++ b/Echo/i18n/api/es.json
@@ -18,13 +18,13 @@
"apihelp-echomarkseen-description": "Marca las notificaciones como vistas para el usuario actual.",
"apihelp-echomarkseen-example-1": "Marca las notificaciones de todos los tipos como vistas",
"apihelp-echomarkseen-param-type": "Tipo de notificaciones para marcar como leídas: 'alert' (alerta), 'message' (mensaje) o 'all' (todas).",
+ "apihelp-echomarkseen-param-timestampFormat": "Formato de fecha y hora que utilizar para la salida, «ISO_8601» o «MW». «MW» aquí está desusado, por lo que todos los clientes deben cambiar a «ISO_8601». Este parámetro desaparecerá y el único formato de salida será «ISO_8601».",
"apihelp-query+notifications-description": "Recibe notificaciones en espera para el usuario actual.",
"apihelp-query+notifications-param-prop": "Detalles que solicitar.",
"apihelp-query+notifications-param-sections": "Las secciones de notificación para consultar (o sea, alguna combinación de «alerta» y «mensaje»).",
"apihelp-query+notifications-param-groupbysection": "Si se agrupan los resultados por sección. Cada sección se obtiene por separado si así se establece.",
"apihelp-query+notifications-param-filter": "Filtra las notificaciones recibidas.",
"apihelp-query+notifications-param-format": "Si se especifica, las notificaciones se recibirán en este formato.",
- "apihelp-query+notifications-paramvalue-format-text": "Formato de texto plano",
"apihelp-query+notifications-paramvalue-format-model": "Datos de notificación en crudo",
"apihelp-query+notifications-paramvalue-format-special": "Con formato para la página Special:Notifications (¡y solo esa!) No confíes en el HTML, ya que puede cambiar en cualquier momento.",
"apihelp-query+notifications-paramvalue-format-flyout": "<span class=\"apihelp-deprecated\">Desaconsejado</span>. Usa <kbd>$1format=model</kbd> para datos en crudo",
@@ -42,5 +42,6 @@
"apihelp-query+unreadnotificationpages-description": "Obtener las páginas para las que hay notificaciones sin leer para el usuario actual.",
"apihelp-query+unreadnotificationpages-param-limit": "El máximo número de páginas que se devolverán.",
"apihelp-query+unreadnotificationpages-param-wikis": "Lista de wikis desde las cuales obtener notificaciones sin leer (usa el wiki actual de manera predeterminada).",
- "apihelp-query+unreadnotificationpages-example-1": "Lista páginas con (la cantidad de) notificaciones sin leer"
+ "apihelp-query+unreadnotificationpages-example-1": "Lista páginas con (la cantidad de) notificaciones sin leer",
+ "apierror-echo-event-creation-failed": "No se pudo crear el suceso de Echo"
}
diff --git a/Echo/i18n/api/gl.json b/Echo/i18n/api/gl.json
index 58a72230..70cdb552 100644
--- a/Echo/i18n/api/gl.json
+++ b/Echo/i18n/api/gl.json
@@ -35,12 +35,12 @@
"apihelp-query+notifications-param-wikis": "Lista das wikis desde as que recuperar as notificacións (por defecto só a wiki actual).",
"apihelp-query+notifications-param-crosswikisummary": "Certo para optar a unha notificación de resumo de notifiacións en wikis foráneas.",
"apihelp-query+notifications-param-alertcontinue": "Cando estean dispoñibles alertas adicionais, use esta opción para continuar.",
- "apihelp-query+notifications-param-unreadfirst": "Decidir se mostrar as notificacións non vistas primeiro (só empregado se groupbysection non está definido).",
- "apihelp-query+notifications-param-alertunreadfirst": "Mostra as notificacións de mensaxes sen ler primeiro (só usado se está activado groupbysection).",
+ "apihelp-query+notifications-param-unreadfirst": "Decidir se amosar as notificacións non vistas primeiro (só empregado se groupbysection non está definido).",
+ "apihelp-query+notifications-param-alertunreadfirst": "Amosa as notificacións de mensaxes sen ler primeiro (só usado se está activado groupbysection).",
"apihelp-query+notifications-param-messagecontinue": "Cando novos mensaxes estean dispoñibles, use esta opción para continuar.",
- "apihelp-query+notifications-param-messageunreadfirst": "Mostra as notificacións de alertas sen ler primeiro (só usado se está activado groupbysection).",
+ "apihelp-query+notifications-param-messageunreadfirst": "Amosa as notificacións de alertas sen ler primeiro (só usado se está activado groupbysection).",
"apihelp-query+notifications-param-titles": "Devolver só as notificacións destas páxinas. Para obter as notificacións non asociadas cunha páxina, use [] como título.",
- "apihelp-query+notifications-param-bundle": "Se mostrar as notificacións non lidas compatibles coas regras de agrupamento de tipos de notificación.",
+ "apihelp-query+notifications-param-bundle": "Se amosar as notificacións non lidas compatibles coas regras de agrupamento de tipos de notificación.",
"apihelp-query+notifications-example-1": "Listar as notificacións",
"apihelp-query+notifications-example-2": "Listar as notificacións, agrupadas por seccións, incluíndo os contadores",
"apihelp-query+unreadnotificationpages-description": "Obter as páxinas para as que hai notificacións sen ler para o usuario actual.",
@@ -49,6 +49,7 @@
"apihelp-query+unreadnotificationpages-param-limit": "Número máximo de páxinas a devolver.",
"apihelp-query+unreadnotificationpages-param-wikis": "Lista de wikis para buscar páxinas con notificacións sen ler (por defecto só na wiki actual).",
"apihelp-query+unreadnotificationpages-example-1": "Listar as páxinas con notificacións sen ler (xunto ao número de notificacións sen ler)",
+ "apihelp-echoarticlereminder-summary": "Pedir unha lembranza futura sobre o artigo especificado",
"apihelp-echoarticlereminder-param-pageid": "Identificador do artigo a lembrar ó usuario",
"apihelp-echoarticlereminder-param-title": "Título do artigo a lembrar ó usuario",
"apihelp-echoarticlereminder-param-timestamp": "En que data e hora lembrar ó usuario",
diff --git a/Echo/i18n/api/gsw.json b/Echo/i18n/api/gsw.json
new file mode 100644
index 00000000..8e27ed5b
--- /dev/null
+++ b/Echo/i18n/api/gsw.json
@@ -0,0 +1,12 @@
+{
+ "@metadata": {
+ "authors": [
+ "J. 'mach' wust"
+ ]
+ },
+ "apihelp-echomarkread-description": "Hiwyse für das Konto (Benutzerin oder Benutzer) als gläse markiere.",
+ "apihelp-echomarkread-param-all": "Falls festgleit, alli Hiwyse vomene Konto (Benutzerin oder Benutzer) als gläse markiere.",
+ "apihelp-echomarkread-param-sections": "A Liste vo den Abschnitte, wo als gläse sölle markiert wärde.",
+ "apihelp-echomarkread-example-1": "Hiwys 8 als gläse markiere",
+ "apihelp-echomarkread-example-2": "Alli Hiwysen als gläse markiere"
+}
diff --git a/Echo/i18n/api/he.json b/Echo/i18n/api/he.json
index 49327e83..3b28cc78 100644
--- a/Echo/i18n/api/he.json
+++ b/Echo/i18n/api/he.json
@@ -6,6 +6,7 @@
]
},
"apihelp-echomarkread-description": "סימון שכל ההודעות נקראו עבור המשתמש הנוכחי.",
+ "apihelp-echomarkread-summary": "סימון שההודעות נקראו עבור המשתמש הנוכחי.",
"apihelp-echomarkread-param-list": "רשימת מזהי התראות שצריך לסמן שהן נקראו.",
"apihelp-echomarkread-param-unreadlist": "רשימת מזהי הודעה לסימון כהודעות שלא נקראו.",
"apihelp-echomarkread-param-all": "אם זה מוגדר, כל ההודעות של המשתמש תסומנה בתור הודעות שנקראו.",
@@ -14,16 +15,17 @@
"apihelp-echomarkread-example-2": "לסמן שכל ההתראות נקראו",
"apihelp-echomarkread-example-3": "סימון הודעה 1 כהודעה שלא נקראה",
"apihelp-echomarkseen-description": "סימון הודעות כהודעות שנקראו עבור המשתמש הנוכחי.",
+ "apihelp-echomarkseen-summary": "סימון שההודעות נצפו עבור המשתמש הנוכחי.",
"apihelp-echomarkseen-example-1": "לסמן שהתראות מכל הסוגים נראו",
"apihelp-echomarkseen-param-type": "סוג ההודעות לסמן בתור הודעות שנראו: 'alert'‏, 'message' או 'all'.",
"apihelp-echomarkseen-param-timestampFormat": "תסדיר חותם־זמן שישמש בפלט, 'ISO_8601' או 'MW'. תסדיר 'MW' מיושן כאן, אז כל הלקוחות אמורים לעבור ל־'ISO_8601'. הפרמטר הזה יוסר ותסדיר הפלט היחיד יהיה 'ISO_8601'.",
"apihelp-query+notifications-description": "קבלת התראות שממתינות למשתמש הנוכחי.",
+ "apihelp-query+notifications-summary": "קבלת התראות שממתינות למשתמש הנוכחי.",
"apihelp-query+notifications-param-prop": "אילו פרטים לבקש.",
"apihelp-query+notifications-param-sections": "אזורי ההודעות שצריך לאחזר (כלומר, שילוב כלשהו של 'alert' ו־'message').",
"apihelp-query+notifications-param-groupbysection": "האם לקבץ את התוצאות לפי פסקה. כל פסקה מאוחזרת בנפרד אם זה מוגדר.",
"apihelp-query+notifications-param-filter": "סינון ההודעות שהוחזרו.",
"apihelp-query+notifications-param-format": "אם זה מצוין, ההודעות תוחזרנה עם עיצוב כזה.",
- "apihelp-query+notifications-paramvalue-format-text": "תסדיר טקסט רגיל",
"apihelp-query+notifications-paramvalue-format-model": "נתוני התראה גולמיים",
"apihelp-query+notifications-paramvalue-format-special": "מעוצב בשביל דף Special:Notifications (ורק בשביל זה!). אין לסמוך על ה־HTML היות שהוא יכול להשתנות בכל זמן.",
"apihelp-query+notifications-paramvalue-format-flyout": "<span class=\"apihelp-deprecated\">מיושן</span>. נא להשתמש ב־<kbd dir=\"ltr\">$1format=model</kbd> לנתונים גולמיים",
@@ -41,11 +43,20 @@
"apihelp-query+notifications-example-1": "רשימת הודעות",
"apihelp-query+notifications-example-2": "רשימת הודעות, מקובצות לפי פסקה, עם מונים",
"apihelp-query+unreadnotificationpages-description": "קבלת דפים שעבורם יש הודעות שלא נקראו למשתמש הנוכחי.",
+ "apihelp-query+unreadnotificationpages-summary": "קבלת דפים שעבורם יש הודעות שלא נקראו למשתמש הנוכחי.",
"apihelp-query+unreadnotificationpages-param-grouppages": "לקבץ דפי שיחה יחד עם דפי התוכן המשויכים להם, ולקבץ הודעות שאינן משויכות לשום דף לדף המשתמש של המשתמש הנוכחי.",
"apihelp-query+unreadnotificationpages-param-limit": "המספר המרבי של דפים להחזיר.",
"apihelp-query+unreadnotificationpages-param-wikis": "רשימת אתרי ויקי שמהם יאוחזרו דפים עם הודעות שלא נקראו (אם לא נאמר אחרת, רק הוויקי הנוכחי).",
"apihelp-query+unreadnotificationpages-example-1": "רשימת דפים עם (כמות של) הודעות שלא נקראו",
+ "apihelp-echoarticlereminder-summary": "בקשת תזכור עתידי עבור הערך שצוין",
+ "apihelp-echoarticlereminder-param-pageid": "מזהה הערך שלגביו המשתמש יתוזכר",
+ "apihelp-echoarticlereminder-param-title": "שם הערך שלגביו המשתמש יתוזכר",
+ "apihelp-echoarticlereminder-param-timestamp": "מתי לתזכר את המשתמש (תאריך ושעה)",
+ "apihelp-echoarticlereminder-param-comment": "הערת משתמש אופציונלית שתיכלל בתזכור",
+ "apihelp-echoarticlereminder-example-1": "יצירת הודעת תזכור לגבי ערך למחר עם הערה",
+ "apihelp-echoarticlereminder-example-2": "יצירת הודעת תזכור לגבי ערך למחר ללא הערה",
"apiwarn-echo-deprecation-timestampformat": "תסדיר חותם הזמן של מדיה־ויקי הוגדר כאן בתור מיושן. בעתיד, ISO 8601 תמיד ישמש לפלט של חותם הזמן. נא לתקן את הלקוח שלך ולהגדיר את <var>timestampFormat</var> לערך <kbd>ISO_8601</kbd>.",
"apiwarn-echo-deprecation-flyout": "<kbd>notformat=flyout</kbd> הוכרז בתור מיושן ויוסר כליל בקרוב. נא להשתמש ב־<kbd>notformat=model</kbd> כדי לקבל את הנתונים הגולמיים או ב־<kbd>notformat=special</kbd> בשביל HTML שכבר הוכן לתצוגה.",
- "apiwarn-echo-deprecation-html": "<kbd>notformat=html</kbd> הוכרז בתור מיושן ויוסר כליל בקרוב. נא להשתמש ב־<kbd>notformat=special</kbd> במקומו."
+ "apiwarn-echo-deprecation-html": "<kbd>notformat=html</kbd> הוכרז בתור מיושן ויוסר כליל בקרוב. נא להשתמש ב־<kbd>notformat=special</kbd> במקומו.",
+ "apierror-echo-event-creation-failed": "לא ניתן היה ליצור את פעולת ה־Echo"
}
diff --git a/Echo/i18n/api/hi.json b/Echo/i18n/api/hi.json
index 027b7040..93af4b84 100644
--- a/Echo/i18n/api/hi.json
+++ b/Echo/i18n/api/hi.json
@@ -15,7 +15,6 @@
"apihelp-echomarkseen-description": "वर्तमान सदस्य की अधिसूचनाओं पढ़ी गई रेखांकित करें।",
"apihelp-echomarkseen-example-1": "अधिसूचनाओं को देखे जाने के तौर पर चिन्हित करें",
"apihelp-query+notifications-param-sections": "पूछताछ के अधिसूचना अनुभाग",
- "apihelp-query+notifications-paramvalue-format-text": "सादापाठ्य प्रारूप",
"apihelp-query+notifications-paramvalue-format-model": "पंक्ति में सूचना डाटा",
"apihelp-query+notifications-example-1": "अधिसूचनाओं को सूचीबद्ध करें",
"apihelp-query+notifications-example-2": "अधिसूचनाओं को सूचीबद्ध अनुभाग के अनुसार सम्मिलित करके गिनकर करें"
diff --git a/Echo/i18n/api/hu.json b/Echo/i18n/api/hu.json
index fe6ce2ff..f32d27c9 100644
--- a/Echo/i18n/api/hu.json
+++ b/Echo/i18n/api/hu.json
@@ -2,7 +2,8 @@
"@metadata": {
"authors": [
"Tacsipacsi",
- "Tgr"
+ "Tgr",
+ "Bencemac"
]
},
"apihelp-echomarkread-description": "Értesítések olvasottnak jelölése az aktuális felhasználó számára.",
@@ -36,5 +37,6 @@
"apihelp-query+notifications-param-messageunreadfirst": "Előrevegye-e az olvasatlan figyelmezetetéseket (csak akkor van használatban, ha a groupbysection meg van adva).",
"apihelp-query+notifications-param-titles": "Csak az ezen lapokhoz kapcsolódó értesítések lekérése. A laphoz nem kötődő értesítések címeként [] használható.",
"apihelp-query+notifications-example-1": "Értesítések listázása",
- "apihelp-query+notifications-example-2": "Értesítések listázása, szakaszonkénti bontásban, darabszámmal"
+ "apihelp-query+notifications-example-2": "Értesítések listázása, szakaszonkénti bontásban, darabszámmal",
+ "apierror-echo-event-creation-failed": "Echo esemény létrehozása nem sikerült"
}
diff --git a/Echo/i18n/api/ia.json b/Echo/i18n/api/ia.json
new file mode 100644
index 00000000..f7b211c8
--- /dev/null
+++ b/Echo/i18n/api/ia.json
@@ -0,0 +1,9 @@
+{
+ "@metadata": {
+ "authors": [
+ "McDutchie"
+ ]
+ },
+ "apihelp-echomarkread-param-unreadlist": "Un lista de IDs de notification a marcar como non legite.",
+ "apihelp-echomarkread-example-3": "Marcar le notification 1 como non legite"
+}
diff --git a/Echo/i18n/api/id.json b/Echo/i18n/api/id.json
index d7e87e35..9fbc6880 100644
--- a/Echo/i18n/api/id.json
+++ b/Echo/i18n/api/id.json
@@ -2,11 +2,15 @@
"@metadata": {
"authors": [
"Rachmat.Wahidi",
- "William Surya Permana"
+ "William Surya Permana",
+ "Kenrick95",
+ "Rachmat04"
]
},
"apihelp-echomarkread-description": "Tandai pemberitahuan dari pengguna ini sebagai telah dibaca.",
+ "apihelp-echomarkread-summary": "Tandai pemberitahuan dari pengguna ini sebagai telah dibaca.",
"apihelp-echomarkread-param-list": "Daftar ID pemberitahuan yang ingin ditandai sebagai telah dibaca.",
+ "apihelp-echomarkread-param-unreadlist": "Daftar ID pemberitahuan yang ingin ditandai sebagai belum dibaca.",
"apihelp-echomarkread-param-all": "Jika ditetapkan, menandai semua pemberitahuan pengguna sebagai telah dibaca.",
"apihelp-echomarkread-param-sections": "Daftar bagian yang ingin ditandai sebagai telah dibaca.",
"apihelp-echomarkread-example-1": "Tandai pemberitahuan 8 sebagai telah dibaca",
diff --git a/Echo/i18n/api/is.json b/Echo/i18n/api/is.json
new file mode 100644
index 00000000..f3f9d18f
--- /dev/null
+++ b/Echo/i18n/api/is.json
@@ -0,0 +1,8 @@
+{
+ "@metadata": {
+ "authors": [
+ "Snævar"
+ ]
+ },
+ "apihelp-echomarkseen-example-1": "Merkja tilkynningar af öllum gerðum sem lesnar"
+}
diff --git a/Echo/i18n/api/ka.json b/Echo/i18n/api/ka.json
new file mode 100644
index 00000000..ab551977
--- /dev/null
+++ b/Echo/i18n/api/ka.json
@@ -0,0 +1,8 @@
+{
+ "@metadata": {
+ "authors": [
+ "BRUTE"
+ ]
+ },
+ "apihelp-query+notifications-param-prop": "მოთხოვნილი დეტალები."
+}
diff --git a/Echo/i18n/api/kk-cyrl.json b/Echo/i18n/api/kk-cyrl.json
index 787bde14..8c63fef9 100644
--- a/Echo/i18n/api/kk-cyrl.json
+++ b/Echo/i18n/api/kk-cyrl.json
@@ -21,7 +21,6 @@
"apihelp-query+notifications-param-groupbysection": "Бөлім бойынша нәтижені топтауы тиіс. Егер орнатса, әрбір бөлім бөлектей шығарылады.",
"apihelp-query+notifications-param-filter": "Оралған ескертпелерді сүзгілеу.",
"apihelp-query+notifications-param-format": "Егер көрсетсе, ескертпелер осылайша форматталады.",
- "apihelp-query+notifications-paramvalue-format-text": "Текстік формат",
"apihelp-query+notifications-paramvalue-format-model": "Өңделмеген ескертпе дерегі",
"apihelp-query+notifications-paramvalue-format-special": "Special:Notifications беті үшін форматталады (және тек бұл ғана!) Бұл HTML мәтінге жауап бермеңіз, өйткені оны кез келген уақытта өзгерте аласыз.",
"apihelp-query+notifications-paramvalue-format-flyout": "<span class=\"apihelp-deprecated\">Ескірген</span>. Қайнар дерегі үшін <kbd>$1format=model</kbd> қолданыңыз",
diff --git a/Echo/i18n/api/ko.json b/Echo/i18n/api/ko.json
index 61ea7517..05afd8fc 100644
--- a/Echo/i18n/api/ko.json
+++ b/Echo/i18n/api/ko.json
@@ -21,6 +21,7 @@
"apihelp-echomarkseen-summary": "현재 사용자가 알림을 본 것으로 표시합니다.",
"apihelp-echomarkseen-example-1": "모든 종류의 알림을 본 것으로 표시.",
"apihelp-echomarkseen-param-type": "읽은 것으로 표시할 알림의 종류: 'alert', 'message' 또는 'all'.",
+ "apihelp-echomarkseen-param-timestampFormat": "출력을 위해 사용할 타임스탬프 포맷 'ISO_8601' 또는 'MW'입니다. 'MW'는 구식이므로 모든 클라이언트는 'ISO_8601'로 전환하는 것이 좋습니다. 이 변수는 제거될 것이며 'ISO_8601'이 유일한 출력 포맷이 될 것입니다.",
"apihelp-query+notifications-description": "현재 사용자를 기다리고 있는 알림을 얻어옵니다.",
"apihelp-query+notifications-summary": "현재 사용자를 기다리고 있는 알림을 가져옵니다.",
"apihelp-query+notifications-param-prop": "상세한 요청 내용.",
diff --git a/Echo/i18n/api/ksh.json b/Echo/i18n/api/ksh.json
index c6080780..eeec4b5d 100644
--- a/Echo/i18n/api/ksh.json
+++ b/Echo/i18n/api/ksh.json
@@ -19,7 +19,6 @@
"apihelp-query+notifications-param-sections": "De Afschnedde met de oot Nohreeschte zom holle, allsu esu jät wi „<kbd lang=\"en\" xml:lang=\"en\" dir=\"ltr\">alert</kbd>“ un \n„<kbd lang=\"en\" xml:lang=\"en\" dir=\"ltr\">message</kbd>“ udder beeds.",
"apihelp-query+notifications-param-groupbysection": "Of de Leß en Jroppe vun Afschnedde sin sull.\nJehde Affschnedd es för sesch, wann dat aanjeklegg es.",
"apihelp-query+notifications-param-format": "Wann aanjejovve, wähde de Nohreeschte en dä Manier daajeschtällt.",
- "apihelp-query+notifications-paramvalue-format-text": "Eijfach Täx Fommaht",
"apihelp-query+notifications-paramvalue-format-model": "Rüh Dahte vun de Medeijlonge",
"apihelp-query+notifications-param-limit": "Nit mih, wi esu vill Meddeijlonge ußjävve.",
"apihelp-query+notifications-param-alertcontinue": "Wann mih Meddeijlonge ze holle sin, nemm dat för wigger ze maache.",
diff --git a/Echo/i18n/api/lb.json b/Echo/i18n/api/lb.json
new file mode 100644
index 00000000..26fb74cf
--- /dev/null
+++ b/Echo/i18n/api/lb.json
@@ -0,0 +1,13 @@
+{
+ "@metadata": {
+ "authors": [
+ "Robby",
+ "Les Meloures"
+ ]
+ },
+ "apihelp-echomarkread-param-sections": "Eng Lëscht vun den Abschnitter déi als gelies markéiert solle ginn.",
+ "apihelp-echomarkread-example-3": "D'Notifikatioun 1 als net gelies markéieren",
+ "apihelp-echomarkseen-description": "Notifikatioune fir den aktuelle Benotzer als gelies markéieren.",
+ "apihelp-echomarkseen-example-1": "Notifikatioune vun all Typ als gelies markéieren",
+ "apihelp-query+notifications-param-prop": "Detailer fir unzefroen."
+}
diff --git a/Echo/i18n/api/lv.json b/Echo/i18n/api/lv.json
new file mode 100644
index 00000000..403ee453
--- /dev/null
+++ b/Echo/i18n/api/lv.json
@@ -0,0 +1,15 @@
+{
+ "@metadata": {
+ "authors": [
+ "Papuass",
+ "Zuiks"
+ ]
+ },
+ "apihelp-echomarkread-example-1": "Atzīmēt paziņojumu 8 kā izlasītu",
+ "apihelp-echomarkread-example-2": "Atzīmēt visus paziņojumus kā izlasītus",
+ "apihelp-echomarkread-example-3": "Atzīmēt paziņojumu 1 kā nelasītu",
+ "apihelp-query+unreadnotificationpages-param-limit": "Maksimālais atgriežamo lapu skaits.",
+ "apihelp-echoarticlereminder-param-pageid": "Raksta ID, par ko dalībniekam atgādināt",
+ "apihelp-echoarticlereminder-param-title": "Raksta nosaukums, par ko dalībniekam atgādināt",
+ "apierror-echo-event-creation-failed": "Neizdevās izveidot Echo notikumu"
+}
diff --git a/Echo/i18n/api/mk.json b/Echo/i18n/api/mk.json
index ffad0e7a..b60b2e70 100644
--- a/Echo/i18n/api/mk.json
+++ b/Echo/i18n/api/mk.json
@@ -43,7 +43,7 @@
"apihelp-query+notifications-example-2": "Испиши известувања, групирани по поднаслови, со бројност",
"apihelp-query+unreadnotificationpages-description": "Дај страници за кои постојат непрочитани известувања за тековниот корисник.",
"apihelp-query+unreadnotificationpages-summary": "Дај страници за кои постојат непрочитани известувања за тековниот корисник.",
- "apihelp-query+unreadnotificationpages-param-grouppages": "Групните страници за разговор заедно со нивните предметни страници и групните известувања неповрзани со страница заедно со корисничката страница на тековниот корисник.",
+ "apihelp-query+unreadnotificationpages-param-grouppages": "Групните разговорни страници заедно со нивните предметни страници и групните известувања неповрзани со страница заедно со корисничката страница на тековниот корисник.",
"apihelp-query+unreadnotificationpages-param-limit": "Највеќе страници за прикажување.",
"apihelp-query+unreadnotificationpages-param-wikis": "Список на викија од кои треба да се преземат непрочитани известувања (по основно: само тековното вики).",
"apihelp-query+unreadnotificationpages-example-1": "Наведи страници со (бројот на) непрочитани известувања",
diff --git a/Echo/i18n/api/mr.json b/Echo/i18n/api/mr.json
index 4595770b..41df08e0 100644
--- a/Echo/i18n/api/mr.json
+++ b/Echo/i18n/api/mr.json
@@ -5,6 +5,7 @@
]
},
"apihelp-echomarkread-description": "सध्याच्या सदस्यासाठी अधिसूचनांवर वाचले अशी खूण करा.",
+ "apihelp-echomarkread-summary": "सध्याच्या सदस्यासाठी अधिसूचनांवर वाचले अशी खूण करा.",
"apihelp-echomarkread-param-list": "वाचले म्हणून खूण करण्यास अधिसूचना ओळखणींची यादी.",
"apihelp-echomarkread-param-unreadlist": "वाचले नाही अशी खूण करण्यास अधिसूचनांच्या ओळखणींची यादी.",
"apihelp-echomarkread-param-all": "जर स्थापिल्या गेले तर, कोणत्याही सदस्यांच्या सर्व अधिसूचनांवर वाचले अशी खूण करते.",
@@ -13,12 +14,15 @@
"apihelp-echomarkread-example-2": "सर्व अधिसूचना वाचल्यात अशी खूण करा",
"apihelp-echomarkread-example-3": "अधिसूचना १ वर वाचले नाही अशी खूण करा",
"apihelp-echomarkseen-description": "सध्याच्या सदस्यास अधिसूचना बघितल्या अशी खूण करा.",
+ "apihelp-echomarkseen-summary": "सध्याच्या सदस्याच्या अधिसूचना बघितल्या अशी खूण करा.",
"apihelp-echomarkseen-example-1": "सर्व प्रकारच्या अधिसूचना बघितल्या अशी खूण करा",
"apihelp-echomarkseen-param-type": "बघितले अशी खूण करण्यास, अधिसूचनेचे प्रकार:'सजगता', 'संदेश' किंवा 'सर्व'.",
"apihelp-query+notifications-description": "सध्याच्या सदस्यासाठी ताटकळत असलेल्या अधिसूचना प्राप्त करा.",
+ "apihelp-query+notifications-summary": "सध्याच्या सदस्यासाठी ताटकळत असलेल्या अधिसूचना प्राप्त करा.",
"apihelp-query+notifications-param-prop": "विनंती करावयाचा तपशिल.",
"apihelp-query+notifications-param-sections": "पृच्छा करावयासाठीचे विभाग (म्हणजे - 'सजगता' व 'संदेश' यांची सरमिसळ).",
"apihelp-query+notifications-param-groupbysection": "निकालाचे विभागानुसार गट करावयाचे काय. जर स्थापिल्या गेले तर,प्रत्येक विभागास वेगळ्या रितीने पुरवठा होतो.",
+ "apihelp-query+notifications-param-filter": "परतविलेल्या अधिसूचना गाळा.",
"apihelp-query+notifications-param-format": "जर नमूद केले तर, अधिसूचना या प्रकारे प्रारुपण करुन पाठविल्या जातील.",
"apihelp-query+notifications-param-wikis": "अधिसूचना पुरवाविण्यास असलेली विकिंची यादी (फक्त सध्याच्या विकिसाठीच फक्त अविचल)",
"apihelp-query+notifications-param-messagecontinue": "जेंव्हा अधिक संदेश निकाल उपलब्ध असतील, याचा वापर पुढे जाण्यास करा.",
diff --git a/Echo/i18n/api/nap.json b/Echo/i18n/api/nap.json
index 3f6ca243..1b748e32 100644
--- a/Echo/i18n/api/nap.json
+++ b/Echo/i18n/api/nap.json
@@ -1,7 +1,8 @@
{
"@metadata": {
"authors": [
- "C.R."
+ "C.R.",
+ "Ruthven"
]
},
"apihelp-echomarkread-description": "Nzegna tutt' 'e notifiche comm'a fossero liggiute 'a ll'utente.",
@@ -21,13 +22,12 @@
"apihelp-query+notifications-param-groupbysection": "Si vulite accucchià 'o risultato pe' sezziona. Ogne seziona se pigliasse comme fosse a spartuta si chisto se buò ffà.",
"apihelp-query+notifications-param-filter": "Notifiche 'e filtre turnate.",
"apihelp-query+notifications-param-format": "Quanno fosse specificato, 'e notifiche fossero turnate cu stu formato.",
- "apihelp-query+notifications-paramvalue-format-text": "Testo furmato semprice",
"apihelp-query+notifications-paramvalue-format-model": "Notifica 'e date 'ncruro",
"apihelp-query+notifications-paramvalue-format-special": "Furmattato p' 'a paggena 'e Special:Notifications (e sulo chesta!) Non v'affidà surtant'a 'o codece HTML pecché chesto putesse cagnà int'a n'atu mumento.",
"apihelp-query+notifications-paramvalue-format-flyout": "<span class=\"apihelp-deprecated\">Obsoleto</span>. Ausà <kbd>$1format=model</kbd> p' 'e date 'ncruro",
"apihelp-query+notifications-paramvalue-format-html": "<span class=\"apihelp-deprecated\">Obsoleto</span>. Ausà <kbd>$1format=model</kbd> p' 'e date 'ncruro",
"apihelp-query+notifications-param-limit": "'O nummero massimo 'e notifiche ca s'avess'a turnà.",
- "apihelp-query+notifications-param-wikis": "Elenco 'e wiki addò se piglià 'e notifiche (predefinito surtanto 'o wiki 'e mò).",
+ "apihelp-query+notifications-param-wikis": "Elenco 'e wiki addò piglià 'e nutifiche (predefinito surtanto p'o wiki 'e mo).",
"apihelp-query+notifications-param-crosswikisummary": "Overo (True) pe' puté dicere sì a se piglia nu riassunto 'e notifiche 'e wiki 'e fore.",
"apihelp-query+notifications-param-alertcontinue": "Quanno stessero cchiù risultate ccà a disposizione, facite stu prucesso pe cuntinuà.",
"apihelp-query+notifications-param-unreadfirst": "Si vulite fà vedé 'e notifiche nun liggiute primma (ausato surtanto si groupbysection fosse mpustato).",
diff --git a/Echo/i18n/api/ne.json b/Echo/i18n/api/ne.json
new file mode 100644
index 00000000..ce0678e9
--- /dev/null
+++ b/Echo/i18n/api/ne.json
@@ -0,0 +1,8 @@
+{
+ "@metadata": {
+ "authors": [
+ "Nirjal stha"
+ ]
+ },
+ "apihelp-echomarkseen-example-1": "सूचनालाई हेरेको भनि चिन्ह लगाउने"
+}
diff --git a/Echo/i18n/api/pl.json b/Echo/i18n/api/pl.json
index 41c16229..6d9bce76 100644
--- a/Echo/i18n/api/pl.json
+++ b/Echo/i18n/api/pl.json
@@ -6,6 +6,7 @@
]
},
"apihelp-echomarkread-description": "Oznacz powiadomienia jako przeczytane dla bieżącego użytkownika.",
+ "apihelp-echomarkread-summary": "Oznacz powiadomienia jako przeczytane dla bieżącego użytkownika.",
"apihelp-echomarkread-param-list": "Lista ID powiadomień do oznaczenia jako przeczytane.",
"apihelp-echomarkread-param-unreadlist": "Lista ID powiadomień do oznaczenia jako nieprzeczytane.",
"apihelp-echomarkread-param-all": "Jeżeli ustawiono, oznacza wszystkie powiadomienia użytkownika jako przeczytane.",
@@ -22,7 +23,6 @@
"apihelp-query+notifications-param-groupbysection": "Czy grupować wynik według sekcji. Każda sekcja jest pobierana osobno jeśli ustawiono.",
"apihelp-query+notifications-param-filter": "Filtruj zwrócone powiadomienia.",
"apihelp-query+notifications-param-format": "Jeśli określono, powiadomienia zostaną zwrócone sformatowane w taki sposób.",
- "apihelp-query+notifications-paramvalue-format-text": "Format tekstowy",
"apihelp-query+notifications-paramvalue-format-model": "Surowe dane powiadomienia",
"apihelp-query+notifications-paramvalue-format-special": "Sformatowane dla strony Specjalna:Powiadomienia (i tylko tej!). Nie polegaj na HTML, jako że może zmienić się w dowolnym czasie.",
"apihelp-query+notifications-paramvalue-format-flyout": "<span class=\"apihelp-deprecated\">Zdeprecjonowane</span>. Użyj <kbd>$1format=model</kbd> dla surowych danych",
@@ -30,5 +30,6 @@
"apihelp-query+notifications-param-limit": "Maksymalna liczba zwracanych powiadomień.",
"apihelp-query+notifications-param-wikis": "Lista wiki, z których pobrać powiadomienia (domyślnie tylko bieżąca wiki).",
"apihelp-query+notifications-example-1": "Spis powiadomień",
+ "apihelp-query+notifications-example-2": "Wypisz powiadomienia pogrupowane według sekcji z ich liczbą",
"apihelp-query+unreadnotificationpages-param-limit": "Maksymalna liczba zwracanych stron."
}
diff --git a/Echo/i18n/api/qqq.json b/Echo/i18n/api/qqq.json
index e19e34ee..aaff6686 100644
--- a/Echo/i18n/api/qqq.json
+++ b/Echo/i18n/api/qqq.json
@@ -28,7 +28,7 @@
"apihelp-query+notifications-description": "{{doc-apihelp-description|query+notifications}}",
"apihelp-query+notifications-summary": "{{doc-apihelp-summary|query+notifications}}",
"apihelp-query+notifications-param-prop": "{{doc-apihelp-param|query+notifications|prop}}",
- "apihelp-query+notifications-param-sections": "{{doc-apihelp-param|query+notifications|sections}} Do not translate the quoted strings.",
+ "apihelp-query+notifications-param-sections": "{{doc-apihelp-param|query+notifications|sections}}",
"apihelp-query+notifications-param-groupbysection": "{{doc-apihelp-param|query+notifications|groupbysection}}",
"apihelp-query+notifications-param-filter": "{{doc-apihelp-param|query+notifications|filter}}",
"apihelp-query+notifications-param-format": "{{doc-apihelp-param|query+notifications|format}}",
diff --git a/Echo/i18n/api/roa-tara.json b/Echo/i18n/api/roa-tara.json
index 7b25d4ff..0ad96c3e 100644
--- a/Echo/i18n/api/roa-tara.json
+++ b/Echo/i18n/api/roa-tara.json
@@ -4,8 +4,17 @@
"Joetaras"
]
},
+ "apihelp-echomarkread-description": "Signe tutte le notifeche cumme lette pe l'utende de mò.",
+ "apihelp-echomarkread-summary": "Signe tutte le notifeche cumme lette pe l'utende de mò.",
+ "apihelp-echomarkread-param-list": "'N'elenghe de ID de le notifeche da signà cumme lette.",
+ "apihelp-echomarkread-param-unreadlist": "'N'elenghe de ID de le notifeche da signà cumme none lette.",
+ "apihelp-echomarkread-param-all": "Ce 'mbostate, signe tutte le notifeche de l'utende cumme lette.",
+ "apihelp-echomarkread-param-sections": "'N'elenghe de seziune da signà cumme lette.",
"apihelp-echomarkread-example-1": "Signe 'a notifiche 8 cumme lette",
"apihelp-echomarkread-example-2": "Signe tutte le notifiche cumme lette",
"apihelp-echomarkread-example-3": "Signe 'a notifiche 1 cumme lette",
+ "apihelp-echomarkseen-description": "Signe tutte le notifeche cumme 'ndrucate pe l'utende de mò.",
+ "apihelp-echomarkseen-summary": "Signe tutte le notifeche cumme 'ndrucate pe l'utende de mò.",
+ "apihelp-echomarkseen-example-1": "Signe le notifeche de tutte le tipe cumme 'ndrucate",
"apihelp-query+notifications-example-1": "Elenghe de le notifiche"
}
diff --git a/Echo/i18n/api/ru.json b/Echo/i18n/api/ru.json
index 399540ed..cf5c1fb2 100644
--- a/Echo/i18n/api/ru.json
+++ b/Echo/i18n/api/ru.json
@@ -5,10 +5,12 @@
"Marina Melik-Adamyan",
"Okras",
"Putnik",
- "Sunpriat"
+ "Sunpriat",
+ "Mouse21"
]
},
"apihelp-echomarkread-description": "Отметить уведомления как прочитанные для текущего пользователя.",
+ "apihelp-echomarkread-summary": "Отметить уведомления как прочитанные для текущего пользователя.",
"apihelp-echomarkread-param-list": "Список ID уведомлений для отметки прочитанными.",
"apihelp-echomarkread-param-unreadlist": "Список ID уведомлений для отметки непрочитанными.",
"apihelp-echomarkread-param-all": "Если задано, отметает все уведомления пользователя как прочитанные.",
@@ -17,26 +19,48 @@
"apihelp-echomarkread-example-2": "Отметить все уведомления как прочитанные",
"apihelp-echomarkread-example-3": "Пометить уведомление 1 как непрочитанное",
"apihelp-echomarkseen-description": "Отметить уведомления как прочитанные для данного пользователя.",
+ "apihelp-echomarkseen-summary": "Отметить уведомления как прочитанные для данного пользователя.",
"apihelp-echomarkseen-example-1": "Отметить уведомления всех типов как прочитанные",
"apihelp-echomarkseen-param-type": "Тип уведомлений для отметки прочитанными: 'alert', 'message' или 'all'.",
+ "apihelp-echomarkseen-param-timestampFormat": "Формат временной отметки для вывода на печать, 'ISO_8601' или 'MW'. 'MW' устарел здесь, поэтому все клиенты должны переключиться на 'ISO_8601'. Этот параметр будет удален, а 'ISO_8601' станет единственным выходным форматом.",
"apihelp-query+notifications-description": "Получать уведомления, ожидающие текущего пользователя.",
+ "apihelp-query+notifications-summary": "Получать уведомления, ожидающие текущего пользователя.",
"apihelp-query+notifications-param-prop": "Подробности для запроса.",
"apihelp-query+notifications-param-sections": "Разделы уведомлений для запроса (т. е. некое сочетание 'alert' и 'message').",
"apihelp-query+notifications-param-groupbysection": "Следует ли группировать результат по разделам. Если задано, каждый раздел извлекается отдельно.",
"apihelp-query+notifications-param-filter": "Фильтровать возвращённые уведомления.",
"apihelp-query+notifications-param-format": "Если определено, уведомления будут возвращены отформатированными таким образом.",
- "apihelp-query+notifications-paramvalue-format-text": "Текстовый формат",
"apihelp-query+notifications-paramvalue-format-model": "Необработанные данные уведомления",
"apihelp-query+notifications-paramvalue-format-special": "Отформатированое для страницы Special:Notifications (и только её!) Не полагайтесь на этот HTML, так как он может измениться в любой момент.",
"apihelp-query+notifications-paramvalue-format-flyout": "<span class=\"apihelp-deprecated\">Устарело</span>. Используйте <kbd>$1format=model</kbd> для исходных данных",
"apihelp-query+notifications-paramvalue-format-html": "<span class=\"apihelp-deprecated\">Устарело</span>. Используйте <kbd>$1format=model</kbd> для исходных данных",
"apihelp-query+notifications-param-limit": "Максимальное количество возвращаемых уведомлений.",
+ "apihelp-query+notifications-param-wikis": "Список вики для извлечения уведомлений (по умолчанию только для текущей вики).",
+ "apihelp-query+notifications-param-crosswikisummary": "Истинно, чтобы принять участие в сводном уведомлении об уведомлениях о чужих вики.",
"apihelp-query+notifications-param-alertcontinue": "Когда доступно больше результатов для предупреждений, используйте это для продолжения.",
"apihelp-query+notifications-param-unreadfirst": "Нужно ли показывать непрочитанные уведомления вначале (используется только если groupbysection не установлен).",
"apihelp-query+notifications-param-alertunreadfirst": "Нужно ли показывать непрочитанные уведомления о сообщениях в первую очередь (используется только если указан groupbysection).",
"apihelp-query+notifications-param-messagecontinue": "Когда доступно больше результатов для сообщений, используйте это для продолжения.",
"apihelp-query+notifications-param-messageunreadfirst": "Нужно ли показывать непрочитанные уведомления о оповещениях в первую очередь (используется только если указан groupbysection).",
+ "apihelp-query+notifications-param-titles": "Только возвращать уведомления для этих страниц. Чтобы получать уведомления, не связанные с какой-либо страницей, используйте [] как заголовок.",
+ "apihelp-query+notifications-param-bundle": "Является ли показать совместимые с пакетом непрочитанные уведомления в соответствии со стандартами связывания типов уведомлений.",
"apihelp-query+notifications-example-1": "Список уведомлений",
"apihelp-query+notifications-example-2": "Список уведомлений, сгруппированных по разделам, с указанием количества",
- "apihelp-query+unreadnotificationpages-param-limit": "Максимальное количество страниц для возврата"
+ "apihelp-query+unreadnotificationpages-description": "Получите страницы, для которых есть непрочитанные уведомления для текущего пользователя.",
+ "apihelp-query+unreadnotificationpages-summary": "Получите страницы, для которых есть непрочитанные уведомления для текущего пользователя.",
+ "apihelp-query+unreadnotificationpages-param-grouppages": "Групповые страницы разговора вместе со своей тематической страницей и групповые уведомления, не связанные со страницей, вместе с пользовательской страницей пользователя.",
+ "apihelp-query+unreadnotificationpages-param-limit": "Максимальное количество страниц для возврата",
+ "apihelp-query+unreadnotificationpages-param-wikis": "Список вики для получения страниц с непрочитанными уведомлениями (по умолчанию используется только текущая вики).",
+ "apihelp-query+unreadnotificationpages-example-1": "Список страниц с (их количеством) непрочитанных уведомлений",
+ "apihelp-echoarticlereminder-summary": "Запросить напоминание о указанной статье",
+ "apihelp-echoarticlereminder-param-pageid": "Идентификатор статьи, чтобы напомнить пользователю",
+ "apihelp-echoarticlereminder-param-title": "Заголовок статьи, чтобы напомнить пользователю",
+ "apihelp-echoarticlereminder-param-timestamp": "На какой временной метке напомнить пользователю",
+ "apihelp-echoarticlereminder-param-comment": "Необязательный комментарий пользователя для включения в напоминание",
+ "apihelp-echoarticlereminder-example-1": "Создайте уведомление о напоминаниях статьи на завтра с комментарием",
+ "apihelp-echoarticlereminder-example-2": "Создайте уведомление о напоминаниях статьи на завтра без комментариев",
+ "apiwarn-echo-deprecation-timestampformat": "Формат выходных данных временной шкалы MW устарел. В будущем ISO 8601 всегда будет использоваться для формата временной метки вывода. Отрегулируйте клиента и установите <var>timestampFormat</var> в <kbd>ISO_8601</kbd>.",
+ "apiwarn-echo-deprecation-flyout": "<kbd>notformat=flyout</kbd> устарел и скоро будет удален. Использование <kbd>notformat=model</kbd> для получения необработанных данных или <kbd>notformat=special</kbd> для предварительно обработанного HTML.",
+ "apiwarn-echo-deprecation-html": "<kbd>notformat=html</kbd> устарел и скоро будет удален. Использование <kbd>notformat=special</kbd> вместо.",
+ "apierror-echo-event-creation-failed": "Не удалось создать событие Echo"
}
diff --git a/Echo/i18n/api/sah.json b/Echo/i18n/api/sah.json
index 317bc8a7..4b68263f 100644
--- a/Echo/i18n/api/sah.json
+++ b/Echo/i18n/api/sah.json
@@ -15,7 +15,6 @@
"apihelp-query+notifications-description": "Билиҥҥи туттааччыга биллэриилэри ааҕыллыбыт курдук бэлиэтээ",
"apihelp-query+notifications-param-prop": "чымпык ыйытыга",
"apihelp-query+notifications-param-filter": "Төннөрүллүбүт биллэриилэри сиидэлээһин.",
- "apihelp-query+notifications-paramvalue-format-text": "Тиэкис формаата",
"apihelp-query+notifications-paramvalue-format-model": "Көннөрүллүбэтэх биллэриилэр даннайдара",
"apihelp-query+notifications-param-limit": "Төннөрүллэр биллэриилэр муҥутуур ахсааннара.",
"apihelp-query+notifications-example-1": "Биллэриилэр испииһэктэрэ",
diff --git a/Echo/i18n/api/sl.json b/Echo/i18n/api/sl.json
index d7bf9831..18acb345 100644
--- a/Echo/i18n/api/sl.json
+++ b/Echo/i18n/api/sl.json
@@ -4,16 +4,16 @@
"Janezdrilc"
]
},
- "apihelp-echomarkread-description": "Označi obvestila za prebrana za trenutnega uporabnika.",
+ "apihelp-echomarkread-description": "Označi obvestila kot prebrana za trenutnega uporabnika.",
"apihelp-echomarkread-param-list": "Seznam ID-jev obvestil za označitev za prebrano.",
"apihelp-echomarkread-param-unreadlist": "Seznam ID-jev obvestil za označitev za neprebrano.",
- "apihelp-echomarkread-param-all": "Ob nastavitvi označi vsa uporabnikova obvestila za prebrana.",
+ "apihelp-echomarkread-param-all": "Ob nastavitvi označi vsa uporabnikova obvestila kot prebrana.",
"apihelp-echomarkread-param-sections": "Seznam delov za označitev za prebrano.",
- "apihelp-echomarkread-example-1": "Označi obvestilo 8 za prebrano",
- "apihelp-echomarkread-example-2": "Označi vsa obvestila za prebrana",
- "apihelp-echomarkread-example-3": "Označi obvestilo 1 za neprebrano",
- "apihelp-echomarkseen-description": "Označi obvestila za ogledana za trenutnega uporabnika.",
- "apihelp-echomarkseen-example-1": "Označi vse vrste obvestil za ogledane",
+ "apihelp-echomarkread-example-1": "Označi obvestilo 8 kot prebrano",
+ "apihelp-echomarkread-example-2": "Označi vsa obvestila kot prebrana",
+ "apihelp-echomarkread-example-3": "Označi obvestilo 1 kot neprebrano",
+ "apihelp-echomarkseen-description": "Označi obvestila kot ogledana za trenutnega uporabnika.",
+ "apihelp-echomarkseen-example-1": "Označi vse vrste obvestil kot ogledane",
"apihelp-echomarkseen-param-type": "Vrste obvestil za označitev za ogledano: 'opomnik', 'sporočilo' ali 'vse'.",
"apihelp-echomarkseen-param-timestampFormat": "Datumski odtis pri izpisovanju, 'ISO_8601' ali 'MW'. 'MW' se ne priporoča, zato ga naj uporabniki zamenjajo z 'ISO_8601'. Ko bo ukinjen, bo ostal v uporabi le 'ISO_8601'.",
"apihelp-query+notifications-description": "Poglej obvestila, ki so na čakanju za trenutnega uporabnika.",
diff --git a/Echo/i18n/api/sr-ec.json b/Echo/i18n/api/sr-ec.json
new file mode 100644
index 00000000..abae1467
--- /dev/null
+++ b/Echo/i18n/api/sr-ec.json
@@ -0,0 +1,11 @@
+{
+ "@metadata": {
+ "authors": [
+ "Milicevic01",
+ "BadDog"
+ ]
+ },
+ "apihelp-echomarkread-example-2": "Означи сва обавештења као прочитана",
+ "apihelp-query+notifications-example-1": "Списак обавештења",
+ "apierror-echo-event-creation-failed": "Не могу да направим дешавања Echo"
+}
diff --git a/Echo/i18n/api/sr-el.json b/Echo/i18n/api/sr-el.json
new file mode 100644
index 00000000..328f4364
--- /dev/null
+++ b/Echo/i18n/api/sr-el.json
@@ -0,0 +1,9 @@
+{
+ "@metadata": {
+ "authors": [
+ "Milicevic01"
+ ]
+ },
+ "apihelp-echomarkread-example-2": "Označi sva obaveštenja pročitanim",
+ "apihelp-query+notifications-example-1": "Spisak obaveštenja"
+}
diff --git a/Echo/i18n/api/th.json b/Echo/i18n/api/th.json
new file mode 100644
index 00000000..c8320e09
--- /dev/null
+++ b/Echo/i18n/api/th.json
@@ -0,0 +1,8 @@
+{
+ "@metadata": {
+ "authors": [
+ "Horus"
+ ]
+ },
+ "apihelp-echomarkread-description": "ทำเครื่องหมายการแจ้งว่าอ่านแล้วสำหรับผู้ใช้ปัจจุบัน"
+}
diff --git a/Echo/i18n/api/tt-cyrl.json b/Echo/i18n/api/tt-cyrl.json
new file mode 100644
index 00000000..3f22d9fb
--- /dev/null
+++ b/Echo/i18n/api/tt-cyrl.json
@@ -0,0 +1,10 @@
+{
+ "@metadata": {
+ "authors": [
+ "Ильнар"
+ ]
+ },
+ "apihelp-echomarkread-description": "Кулланучы өчен барлык белдерүләрне укылган дип билгеләү",
+ "apihelp-echomarkread-example-2": "Барлык белдерүләрне укылган дип билгеләү",
+ "apihelp-query+notifications-example-1": "Хəбəрнамəләр исемлеге"
+}
diff --git a/Echo/i18n/api/vi.json b/Echo/i18n/api/vi.json
index 08214121..ccb81952 100644
--- a/Echo/i18n/api/vi.json
+++ b/Echo/i18n/api/vi.json
@@ -8,7 +8,6 @@
"apihelp-echomarkread-param-list": "Danh sách các ID thông báo để đánh dấu là đã đọc.",
"apihelp-echomarkread-example-2": "Đánh dấu tất cả thông báo là đã đọc",
"apihelp-query+notifications-param-prop": "Chi tiết để yêu cầu.",
- "apihelp-query+notifications-paramvalue-format-text": "Định dạng văn bản thuần",
"apihelp-query+notifications-paramvalue-format-model": "Dữ liệu thông báo thô",
"apihelp-query+notifications-example-1": "Danh sách thông báo"
}
diff --git a/Echo/i18n/api/yi.json b/Echo/i18n/api/yi.json
new file mode 100644
index 00000000..14435e7e
--- /dev/null
+++ b/Echo/i18n/api/yi.json
@@ -0,0 +1,11 @@
+{
+ "@metadata": {
+ "authors": [
+ "פוילישער"
+ ]
+ },
+ "apihelp-echomarkread-param-sections": "א ליסטע פון אפטיילונגען צו מארקירן געלייענט.",
+ "apihelp-echomarkread-example-1": "מארקירן מודעה 8 געליינט",
+ "apihelp-echomarkread-example-2": "מארקירן אַלע מודעות געליינט",
+ "apihelp-echomarkread-example-3": "מארקירן מודעה 1נישט־געליינט"
+}
diff --git a/Echo/i18n/api/zh-hant.json b/Echo/i18n/api/zh-hant.json
index f4b00c2a..19a374cf 100644
--- a/Echo/i18n/api/zh-hant.json
+++ b/Echo/i18n/api/zh-hant.json
@@ -2,10 +2,12 @@
"@metadata": {
"authors": [
"Cwlin0416",
- "Winstonyin"
+ "Winstonyin",
+ "Kly"
]
},
"apihelp-echomarkread-description": "把目前使用者的通知標記為已讀。",
+ "apihelp-echomarkread-summary": "把目前使用者的通知標記為已讀。",
"apihelp-echomarkread-param-list": "要標記為已讀的通知 ID 清單。",
"apihelp-echomarkread-param-unreadlist": "要標記為未讀的通知 ID 清單。",
"apihelp-echomarkread-param-all": "一旦設定,將會把某個使用者的所有通知標記為已讀。",
@@ -14,16 +16,17 @@
"apihelp-echomarkread-example-2": "把所有通知標記為已讀",
"apihelp-echomarkread-example-3": "把通知 1 標記為未讀",
"apihelp-echomarkseen-description": "把目前使用者的通知標記為已讀",
+ "apihelp-echomarkseen-summary": "把目前使用者的通知標記為已看過",
"apihelp-echomarkseen-example-1": "把所有類型的通知標記為已讀",
"apihelp-echomarkseen-param-type": "標記為已讀的通知類型:'alert'、'message' 或 'all'。",
"apihelp-echomarkseen-param-timestampFormat": "用於輸出的時間戳格式 'ISO_8601' 或 'MW'。'MW' 將被棄用,因此所有客戶端都應改用 'ISO_8601'。此參數將會被移除,而 'ISO_8601' 將會成為唯一的輸出格式。",
"apihelp-query+notifications-description": "取得目前使用者等待的通知。",
+ "apihelp-query+notifications-summary": "取得目前使用者等待的通知。",
"apihelp-query+notifications-param-prop": "請求的詳細資料。",
"apihelp-query+notifications-param-sections": "要查詢的通知章節 (例如部份 'alert' 與 'message' 的組合)。",
"apihelp-query+notifications-param-groupbysection": "是否要依據章節來分類查詢結果。 若開啟此功能,每個章節會分開擷取。",
"apihelp-query+notifications-param-filter": "過濾返回的通知。",
"apihelp-query+notifications-param-format": "若有指定,通知將會以此指定的格式回傳結果。",
- "apihelp-query+notifications-paramvalue-format-text": "純文字格式",
"apihelp-query+notifications-paramvalue-format-model": "原始通知資料",
"apihelp-query+notifications-paramvalue-format-special": "格式用於Special:Notifications頁面(僅限於此!)。不要依賴HTML,因為它在任何時候都可能會變化。",
"apihelp-query+notifications-paramvalue-format-flyout": "<span class=\"apihelp-deprecated\">棄用</span>。原始數據請用<kbd>$1format=model</kbd>",
@@ -41,11 +44,20 @@
"apihelp-query+notifications-example-1": "通知清單",
"apihelp-query+notifications-example-2": "依章節分類通知清單並顯示總數",
"apihelp-query+unreadnotificationpages-description": "獲取目前使用者有未讀通知的頁面。",
+ "apihelp-query+unreadnotificationpages-summary": "取得目前使用者有未讀通知的頁面。",
"apihelp-query+unreadnotificationpages-param-grouppages": "將討論頁與對應的主題頁面歸在一起,並將未分配給某一頁面的通知與目前使用者的使用者頁面歸在一起。",
"apihelp-query+unreadnotificationpages-param-limit": "回傳的頁面數量上限。",
"apihelp-query+unreadnotificationpages-param-wikis": "要擷取未讀通知的wiki清單(預設為目前的wiki)。",
"apihelp-query+unreadnotificationpages-example-1": "列出有未讀通知的頁面(及其未讀通知數量)",
+ "apihelp-echoarticlereminder-summary": "請求後續有關特定條目的提醒",
+ "apihelp-echoarticlereminder-param-pageid": "提醒使用者的條目 ID",
+ "apihelp-echoarticlereminder-param-title": "提醒使用者的條目標題",
+ "apihelp-echoarticlereminder-param-timestamp": "何時提醒使用者的時間戳記",
+ "apihelp-echoarticlereminder-param-comment": "包含在提醒的選用使用者註釋",
+ "apihelp-echoarticlereminder-example-1": "建立帶有註釋的條目明日提醒通知",
+ "apihelp-echoarticlereminder-example-2": "建立不帶註釋的條目明日提醒通知",
"apiwarn-echo-deprecation-timestampformat": "此處棄用MW時間戳輸出格式。今後的時間戳輸出格式將總是使用ISO 8601。請將您的客戶端<var>timestampFormat</var>調整為<kbd>ISO_8601</kbd>。",
"apiwarn-echo-deprecation-flyout": "<kbd>notformat=flyout</kbd>已棄用,並將很快被移除。請用<kbd>notformat=model</kbd>獲取原始數據,或用<kbd>notformat=special</kbd>獲取預渲染HTML。",
- "apiwarn-echo-deprecation-html": "<kbd>notformat=html</kbd>已棄用,並將很快被移除。請改用<kbd>notformat=special</kbd>。"
+ "apiwarn-echo-deprecation-html": "<kbd>notformat=html</kbd>已棄用,並將很快被移除。請改用<kbd>notformat=special</kbd>。",
+ "apierror-echo-event-creation-failed": "無法建立 Echo 事件"
}
diff --git a/Echo/i18n/ar.json b/Echo/i18n/ar.json
index 8fd9b999..9cb73229 100644
--- a/Echo/i18n/ar.json
+++ b/Echo/i18n/ar.json
@@ -23,7 +23,8 @@
"بدارين",
"Izoozo",
"Moud hosny",
- "ديفيد"
+ "ديفيد",
+ "Antime"
]
},
"echo-desc": "نظام لإخطار المستخدمين عن الأحداث والرسائل",
@@ -32,7 +33,6 @@
"prefs-displaynotifications": "خيارات العرض",
"prefs-echosubscriptions": "أعلمني بشأن هذه الأحداث",
"prefs-echocrosswiki": "إشعارات عابرة للويكي",
- "prefs-newmessageindicator": "مؤشر الرسائل الجديدة",
"prefs-blocknotificationslist": "المستخدمون الممنوعون",
"echo-pref-send-me": "أرسل لي:",
"echo-pref-send-to": "أرسل إلى:",
@@ -46,8 +46,7 @@
"echo-pref-email-format-html": "إتش تي إم إل",
"echo-pref-email-format-plain-text": "نص خام",
"echo-pref-cross-wiki-notifications": "أظهر الإشعارات من ويكيات أخرى.",
- "echo-pref-notifications-blacklist": "لا تعرض الإخطارات من هؤلاء المستخدمين. ([[mw:Help:Notifications#mute|اعرف المزيد]])",
- "echo-pref-new-message-indicator": "أظهر مؤشر رسائل صفحة النقاش في شريط الأدوات",
+ "echo-pref-notifications-blacklist": "لا تعرض الإخطارات من هؤلاء المستخدمين. ([[mw:Special:MyLanguage/Help:Notifications#mute|اعرف المزيد]])",
"echo-pref-beta-feature-cross-wiki-message": "إشعارات معززة",
"echo-pref-beta-feature-cross-wiki-description": "اعرض ونظّم الإشعارات بطريقة أكثر سهولة. بما في ذلك الإشعارات عبر الويكي، التي تتيح لك رؤية إشعاراتك في مواقع الويكي الأخرى. (لاستلام الإشعارات عبر الويكي، يجب عليك تفعيل خاصية البيتا على هذه الويكي.)",
"echo-learn-more": "معرفة المزيد",
@@ -75,7 +74,7 @@
"echo-pref-tooltip-article-reminder": "أخطرني حول هذه الصفحة عندما أسأل.",
"echo-error-no-formatter": "لم يحدد للإشعارات أي تنسيق.",
"notifications": "إشعارات",
- "tooltip-pt-notifications-alert": "{{GENDER:|إخطاراتك}}",
+ "tooltip-pt-notifications-alert": "{{GENDER:|تنبيهاتك}}",
"tooltip-pt-notifications-notice": "{{GENDER:|إخطاراتك}}",
"echo-displaynotificationsconfiguration": "عرض تنبهات الإعدادات",
"echo-displaynotificationsconfiguration-summary": "هذا لمحة عامة عن كيفية اعداد الإخطارات في هذه الويكي.",
@@ -102,8 +101,6 @@
"echo-none": "ليس لديك أي إشعارات",
"echo-more-info": "المزيد",
"echo-feedback": "تعليقات",
- "echo-popup-footer-special-page-invitation": "<strong>جرب صفحة الإخطارات المعاد تصميمها.</strong> [$2 $1]",
- "echo-popup-footer-special-page-invitation-link": "كل الخصائص والمظاهر الجديدة.",
"echo-api-failure": "تعذّر إظهار الإشعارات.",
"echo-api-failure-cross-wiki": "رُفض الوصول إلى النطاق البعيد.",
"echo-notification-placeholder": "لا توجد أية إخطارات.",
@@ -132,6 +129,8 @@
"notification-link-text-view-page": "اعرض الصفحة",
"notification-header-edit-user-talk": "{{GENDER:$2|بعث|بعثت}} $1 رسالةً إليك في <strong>{{GENDER:$3|صفحة نقاشك}}</strong>.",
"notification-header-edit-user-talk-with-section": "{{GENDER:$2|بعث|بعثت}} $1 رسالةً إليك في <strong>{{GENDER:$3|صفحة نقاشك}}</strong> في \"<strong>$4</strong>\".",
+ "notification-compact-header-edit-user-talk": "$1 {{GENDER:$2|ترك|تركت}} {{GENDER:$3|لك}} رسالة.",
+ "notification-compact-header-edit-user-talk-with-section": "$1 {{GENDER:$2|ترك|تركت}} {{GENDER:$3|لك}} رسالة في \"<strong>$4</strong>\".",
"notification-header-page-linked": "أضيفت وصلة لصفحة <strong>$3</strong> في صفحة <strong>$4</strong>.",
"notification-compact-header-page-linked": "موصول من <strong>$1</strong>.",
"notification-bundle-header-page-linked": "أضيفت وصلات من {{PLURAL:$5||صفحة أخرى|صفحتين أخرتين|$5 صفحات أخرى|100=99+ صفحة أخرى}} إلى <strong>$3</strong>.",
@@ -160,6 +159,7 @@
"notification-header-user-rights-add-and-remove": "{{GENDER:$6|صلاحياتك}} تم {{GENDER:$1|تغييرها}}. أنت تمت إضافتك إلى: $2. أنت لم تعد عضوا في: $4.",
"notification-header-user-rights-expiry-change": "تاريخ انتهاء {{GENDER:$4|عضويتك}} في {{PLURAL:$3|المجموعة|المجموعات}} التالية تم {{GENDER:$1|تغييرها}}: $2.",
"notification-header-welcome": "{{GENDER:$2|مرحبًا بك|مرحبًا بكِ}} في {{SITENAME}}، $1! نحن سعداءٌ {{GENDER:$2|بتواجدك|بتواجدكِ}} هنا.",
+ "notification-header-mention-summary": "$1 {{GENDER:$2|ذكر|ذكرت}}{{GENDER:$3|ك}} في ملخص تعديل في <strong>$4</strong>.",
"notification-welcome-linktext": "أهلاً بك.",
"notification-header-thank-you-1-edit": "لقد {{GENDER:$2|قمت|قمتِ}} قبل قليل {{GENDER:$2|بتعديلك|بتعديلكِ}} الأول؛ شكرًا {{GENDER:$2|لك|لكِ}}، ومرحبًا بك!",
"notification-header-thank-you-10-edit": "لقد {{GENDER:$2|قمت|قمتِ}} {{GENDER:$2|بتعديلك|بتعديلكِ}} العاشر؛ شكرًا {{GENDER:$2|لك|لكِ}}، و{{GENDER:$2|واصل|واصلي}} العمل!",
@@ -217,5 +217,6 @@
"echo-email-batch-link-text-view-all-notifications": "اعرض كل الإشعارات",
"notification-header-foreign-alert": "إخطارات أكثر من {{PLURAL:$5|لا موقع ويكي|موقع ويكي آخر|موقعين ويكي آخرين|$5 مواقع ويكي أخرى}}",
"notification-header-foreign-notice": "مزيد من الإشعارات من {{PLURAL:$5|ويكي أخر|$5 ويكيات أخرى}}",
- "notification-header-foreign-all": "المزيد من الإخطارات من {{PLURAL:$5|ويكي أخرى|$5 ويكيات أخرى}}"
+ "notification-header-foreign-all": "المزيد من الإخطارات من {{PLURAL:$5|ويكي أخرى|$5 ويكيات أخرى}}",
+ "echo-badge-count": "{{PLURAL:$1|$1|100=٩٩+}}"
}
diff --git a/Echo/i18n/arq.json b/Echo/i18n/arq.json
index 7c7fdf19..fe1fd0cf 100644
--- a/Echo/i18n/arq.json
+++ b/Echo/i18n/arq.json
@@ -5,6 +5,5 @@
"GeekEmad"
]
},
- "tooltip-pt-notifications-alert": "إخطاراتك",
- "tooltip-pt-notifications-message": "رسايلك"
+ "tooltip-pt-notifications-alert": "إخطاراتك"
}
diff --git a/Echo/i18n/ary.json b/Echo/i18n/ary.json
new file mode 100644
index 00000000..bbd8d929
--- /dev/null
+++ b/Echo/i18n/ary.json
@@ -0,0 +1,8 @@
+{
+ "@metadata": {
+ "authors": [
+ "Reda Benkhadra"
+ ]
+ },
+ "notification-inbox-filter-all": "كلشي"
+}
diff --git a/Echo/i18n/as.json b/Echo/i18n/as.json
index 0fb34392..59d59348 100644
--- a/Echo/i18n/as.json
+++ b/Echo/i18n/as.json
@@ -6,6 +6,5 @@
},
"echo-new-messages": "আপোনালৈ নতুন বাৰ্তা আহিছে",
"notifications": "জাননী",
- "tooltip-pt-notifications-alert": "{{GENDER:|আপোনাৰ}} জাননী",
- "tooltip-pt-notifications-message": "{{GENDER:|আপোনাৰ}} বাৰ্তাসমূহ"
+ "tooltip-pt-notifications-alert": "{{GENDER:|আপোনাৰ}} জাননী"
}
diff --git a/Echo/i18n/ast.json b/Echo/i18n/ast.json
index 3a72e6c7..d325d108 100644
--- a/Echo/i18n/ast.json
+++ b/Echo/i18n/ast.json
@@ -11,8 +11,7 @@
"prefs-displaynotifications": "Opciones de vista",
"prefs-echosubscriptions": "Avisame d'estos socesos",
"prefs-echocrosswiki": "Notificaciones ente wikis",
- "prefs-newmessageindicator": "Indicador de mensaxe nuevu",
- "prefs-blocknotificationslist": "Llista de bloqueos",
+ "prefs-blocknotificationslist": "Usuarios callaos",
"echo-pref-send-me": "Unviame:",
"echo-pref-send-to": "Unviar a:",
"echo-pref-email-format": "Formatu del corréu:",
@@ -25,8 +24,7 @@
"echo-pref-email-format-html": "HTML",
"echo-pref-email-format-plain-text": "Testu simple",
"echo-pref-cross-wiki-notifications": "Amosar notificaciones d'otres wikis",
- "echo-pref-notifications-blacklist": "Llista de nomes d'usuariu que tán na llista prieta pa disparar la mayor parte d'avisos de Echo (les ediciones na páxina d'alderique d'usuariu entá dispararán los avisos)",
- "echo-pref-new-message-indicator": "Amosar un indicador de mensaxe na páxina d'alderique na mio barra de ferramientes",
+ "echo-pref-notifications-blacklist": "Nun amosar notificaciones d'estos usuarios. ([[mw:Special:MyLanguage/Help:Notifications#mute|más información]])",
"echo-pref-beta-feature-cross-wiki-message": "Notificaciones enantaes",
"echo-pref-beta-feature-cross-wiki-description": "Ver y organizar les notificaciones más fácilmente. Incluye notificaciones ente wikis, lo que te permite ver mensaxes d'otres wikis. (Pa recibir notificaciones ente wikis nuna wiki determinada tienes d'activar la carauterística beta nesa wiki)",
"echo-learn-more": "Más información",
@@ -42,16 +40,16 @@
"echo-category-title-system": "{{PLURAL:$1|Sistema}}",
"echo-category-title-user-rights": "{{PLURAL:$1|Cambiu de permisos d'usuariu|Cambios de permisos d'usuariu}}",
"echo-category-title-emailuser": "{{PLURAL:$1|Corréu electrónicu d'otru usuariu|Correos electrónicos d'otros usuarios}}",
- "echo-category-title-article-reminder": "{{PLURAL:$1|Recordatoriu d'artículu|Recordatorios d'artículu}} de la páxina",
+ "echo-category-title-article-reminder": "{{PLURAL:$1|Recordatoriu|Recordatorios}} de la páxina",
"echo-pref-tooltip-edit-user-talk": "Avisame cuando dalguién dexe un mensaxe o conteste na mio páxina d'alderique.",
- "echo-pref-tooltip-article-linked": "Avisame cuando dalguién enllace a una páxina que yo creé dende una páxina d'artículu.",
+ "echo-pref-tooltip-article-linked": "Avisame cuando dalguién enllace a una páxina que yo creé dende otra páxina.",
"echo-pref-tooltip-reverted": "Avisame cuando dalguién revierta una edición fecha por min, usando les ferramientes desfacer o revertir.",
"echo-pref-tooltip-mention": "Avisame cuando dalguién enllace a la mio páxina d'usuariu.",
"echo-pref-tooltip-mention-failure": "Avisame cuando nun pueda unviar una mención a dalguién.",
"echo-pref-tooltip-mention-success": "Avisame cuando unvie una mención a dalguién.",
"echo-pref-tooltip-user-rights": "Avisame cuando dalguién cambie los mios permisos d'usuariu.",
"echo-pref-tooltip-emailuser": "Avisame cuando daquién me mande un corréu electrónicu.",
- "echo-pref-tooltip-article-reminder": "Recordame d'esti artículu cuando lo pidí.",
+ "echo-pref-tooltip-article-reminder": "Avisame d'esta páxina cuando lo pida.",
"echo-error-no-formatter": "Nun se definió formatu dalu pal avisu",
"notifications": "Avisos",
"tooltip-pt-notifications-alert": "{{GENDER:|Les tos}} alertes",
@@ -77,12 +75,10 @@
"echo-specialpage-pagefilters-title": "Actividá recién",
"echo-specialpage-pagefilters-subtitle": "Páxines con notificaciones ensin lleer",
"notificationsmarkread-legend": "Marcar la notificación como lleída",
- "echo-anon": "Pa recibir avisos, [$1 cree una cuenta] o [$2 anicie sesión].",
+ "echo-anon": "Pa recibir avisos, [$1 crea una cuenta] o [$2 anicia sesión].",
"echo-none": "Nun tien avisos.",
"echo-more-info": "Más información",
"echo-feedback": "La so opinión",
- "echo-popup-footer-special-page-invitation": "<strong>Prueba la páxina de notificaciones rediseñada.</strong> [$2 $1]",
- "echo-popup-footer-special-page-invitation-link": "Aspeutu y carauterístiques nuevos dafechu.",
"echo-api-failure": "Nun pudieron recuperase les notificaciones.",
"echo-api-failure-cross-wiki": "Refugóse l'accesu al dominiu remotu.",
"echo-notification-placeholder": "Nun hai notificaciones.",
@@ -111,10 +107,12 @@
"notification-link-text-view-page": "Ver la páxina",
"notification-header-edit-user-talk": "$1 {{GENDER:$2|dexó}} un mensaxe na <strong>{{GENDER:$3|to}} páxina d'alderique</strong>.",
"notification-header-edit-user-talk-with-section": "$1 {{GENDER:$2|dexó}} un mensaxe na <strong>{{GENDER:$3|to}} páxina d'alderique</strong> en «<strong>$4</strong>».",
+ "notification-compact-header-edit-user-talk": "$1 {{GENDER:$2|dexó}}{{GENDER:$3|te}} un mensaxe.",
+ "notification-compact-header-edit-user-talk-with-section": "$1 {{GENDER:$2|dexó}}{{GENDER:$3|te}} un mensax en «<strong>$4</strong>».",
"notification-header-page-linked": "Féxose un enllaz dende <strong>$4</strong> a <strong>$3</strong>.",
"notification-compact-header-page-linked": "Enllazáu dende <strong>$1</strong>.",
"notification-bundle-header-page-linked": "Ficiéronse enllaces dende {{PLURAL:$5||$5 páxines|100=99+ páxines}} a <strong>$3</strong>.",
- "notification-header-article-reminder": "En <strong>$3</strong> hai un artículu del que {{GENDER:$2|pidisti}} un recordatoriu",
+ "notification-header-article-reminder": "En <strong>$3</strong> hai una páxina de la que {{GENDER:$2|pidisti}} un recordatoriu",
"notification-link-text-what-links-here": "Tolos enllaces a esta páxina",
"notification-header-mention-other": "$1 {{GENDER:$3|te}} {{GENDER:$2|mentó}} en <strong>$4</strong> nel filu «<strong>$5</strong>».",
"notification-header-mention-other-nosection": "$1 {{GENDER:$3|te}} {{GENDER:$2|mentó}} en <strong>$4</strong>.",
@@ -139,6 +137,7 @@
"notification-header-user-rights-add-and-remove": "{{GENDER:$1|Cambiáronse}} {{GENDER:$6|los tos}} permisos d'usuariu. Amestáronte a $2. Yá nun yes miembru de: $4.",
"notification-header-user-rights-expiry-change": "La data de caducidá de la {{GENDER:$4|to}} pertenencia {{PLURAL:$3|al siguiente grupu|a los siguientes grupos}} {{GENDER:$1|cambióse}}: $2.",
"notification-header-welcome": "¡{{GENDER:$2|Bienveníu|Bienvenida}} a {{SITENAME}}, $1! Préstanos que {{GENDER:$2|teas}} equí.",
+ "notification-header-mention-summary": "$1 {{GENDER:$3|te}} {{GENDER:$2|mentó}} na descripción de <strong>$4</strong>.",
"notification-welcome-linktext": "Bienveníu/a",
"notification-header-thank-you-1-edit": "Vienes de facer la {{GENDER:$2|to}} primera edición. ¡Gracies y {{GENDER:$2|bienveníu|bienvenida}}!",
"notification-header-thank-you-10-edit": "Vienes de facer la {{GENDER:$2|to}} décima edición. ¡Gracies y {{GENDER:$2|sigui}} col bon trabayu!",
@@ -149,7 +148,7 @@
"notification-header-thank-you-1000000-edit": "Vienes de facer la {{GENDER:$2|to}} milllonésima edición. ¡Munches gracies por ser {{GENDER:$2|un collaborador|una collaboradora}} tan plasmante!",
"notification-link-thank-you-edit": "{{GENDER:$1|La to}} edición",
"notification-link-text-view-edit": "Ver la edición",
- "notification-link-article-reminder": "Ver l'artículu",
+ "notification-link-article-reminder": "Ver la páxina",
"notification-header-reverted": "{{PLURAL:$4|La to edición {{GENDER:$2|invertióse}}|Les tos ediciones {{GENDER:$2|invertiéronse}}}}'n <strong>$3</strong>",
"notification-header-emailuser": "$1 {{GENDER:$2|unvióte}} un corréu electrónicu.",
"notification-edit-talk-page-email-subject2": "$1 {{GENDER:$1|dexó-y}} un mensaxe en {{SITENAME}}",
diff --git a/Echo/i18n/awa.json b/Echo/i18n/awa.json
index b1008daf..f33bd76c 100644
--- a/Echo/i18n/awa.json
+++ b/Echo/i18n/awa.json
@@ -5,12 +5,9 @@
]
},
"notifications": "अधिसूचना",
- "echo-email-subject-default": "{{SITENAME}} पे नँवा अधिसूचना",
"echo-email-body-default": "आप कय लिए {{SITENAME}} पे नँवा अधिसूचना है:\n\n$1",
- "echo-email-batch-body-default": "आप कय लिए नँवा अधिसूचना है।",
"echo-email-footer-default": "$2\n\nहमारी ओर से भेजे जाने वाले ईमेलों पर नियंत्रण करने के लिये कृपया अपनी पसन्द देखिए:\n{{canonicalurl:{{#special:Preferences}}#mw-prefsection-echo}}\n\n$1",
"echo-notification-alert-text-only": "एलर्ट",
- "echo-notification-message-text-only": "सनेशा",
"echo-overlay-link": "कुल अधिसूचना",
"echo-overlay-title": "<b>अधिसूचना</b>",
"echo-overlay-title-overflow": "<b>{{PLURAL:$1|अधिसूचना}}</b>($2 अपठित में से $1 देखाइ जात है)",
diff --git a/Echo/i18n/ay.json b/Echo/i18n/ay.json
index b1df8787..4ec0cda3 100644
--- a/Echo/i18n/ay.json
+++ b/Echo/i18n/ay.json
@@ -9,7 +9,6 @@
"prefs-emailsettings": "Opciones de correo electrónico",
"prefs-displaynotifications": "Opciones de visualización",
"prefs-echosubscriptions": "Notificarme sobre estos eventos",
- "prefs-newmessageindicator": "Indicador de mensajes nuevos",
"echo-pref-send-me": "Enviarme:",
"echo-pref-send-to": "Enviar a:",
"echo-pref-email-format": "Formato del mensaje:",
@@ -21,7 +20,6 @@
"echo-pref-email-frequency-weekly": "Resumen semanal de notificaciones",
"echo-pref-email-format-html": "HTML",
"echo-pref-email-format-plain-text": "Texto sin formato",
- "echo-pref-new-message-indicator": "Mostrar el indicador de mensajes en la barra de herramientas",
"echo-learn-more": "Más información",
"echo-new-messages": "Tienes mensajes nuevos",
"echo-category-title-edit-user-talk": "{{PLURAL:$1|mensaje|mensajes}} en la página de discusión",
diff --git a/Echo/i18n/az.json b/Echo/i18n/az.json
index faf4651c..6d76412d 100644
--- a/Echo/i18n/az.json
+++ b/Echo/i18n/az.json
@@ -13,7 +13,6 @@
"prefs-emailsettings": "Elektron poçtun parametrləri",
"prefs-displaynotifications": "Displeyin parametrləri",
"prefs-echosubscriptions": "Bu hadisələr barədə mənə xəbər verilsin",
- "prefs-newmessageindicator": "Yeni mesaj göstəricisi",
"echo-pref-send-me": "Mənə göndər:",
"echo-pref-send-to": "Göndər",
"echo-pref-email-format": "Elektron məktub formatı",
@@ -26,7 +25,6 @@
"echo-pref-email-format-html": "HTML",
"echo-pref-email-format-plain-text": "Sadə mətn",
"echo-pref-cross-wiki-notifications": "Digər vikipediyalardan bildirişləri göstər",
- "echo-pref-new-message-indicator": "Müzakirə səhifəsindəki mesaj indikatorunu alətlər panelimdə göstər",
"echo-learn-more": "Daha ətraflı",
"echo-new-messages": "Yeni mesajlarınız var",
"echo-category-title-edit-user-talk": "Müzakirə səhifəsindəki {{PLURAL:$1|1=mesaj|mesaj}}",
@@ -65,6 +63,8 @@
"notification-inbox-filter-unread": "Oxunmamış",
"notification-inbox-filter-all": "Hamısı",
"echo-email-body-default": "Sizə {{SITENAME}} səhifəsində yeni bildiriş var :\n\n$1",
+ "echo-email-footer-default-html": "Sizə göndərdiyimiz e-poçtlara nəzarət etmək üçün, <a href=\"$2\" style=\"text-decoration:none; color: #3868B0;\">nizamlamalarınızı yoxlayın</a>.<br />\n$1",
+ "echo-email-footer-default": "$2\n\nSizə göndərdiyimiz e-poçtlara nəzarət etmək üçün, nizamlamalarınızı yoxlayın:\n{{canonicalurl:{{#special:Preferences}}#mw-prefsection-echo}}\n\n$1",
"echo-notification-alert": "{{PLURAL:$1|Xəbərdarlıq ($1)|Xəbərdarlıqlar ($1)|100=Xəbərdarlıqlar (99+)}}",
"echo-notification-notice": "{{PLURAL:$1|Bildiri. ($1)|Bildirişlər ($1)|100=Bildirişlər (99+)}}",
"echo-notification-alert-text-only": "Xəbərdarlıqlar",
diff --git a/Echo/i18n/ba.json b/Echo/i18n/ba.json
index 96bd9ee8..920caddf 100644
--- a/Echo/i18n/ba.json
+++ b/Echo/i18n/ba.json
@@ -10,7 +10,8 @@
"Янмурза Баки",
"Lizalizaufa",
"Банат Валеева-Яубасарова",
- "Лилиә"
+ "Лилиә",
+ "Рустам Нурыев"
]
},
"echo-desc": "Ҡатнашыусыларҙың ваҡиғалар һәм хәбәрҙәр тураһында белдереүҙәр системаһы",
@@ -19,7 +20,6 @@
"prefs-displaynotifications": "Күренеш көйләүҙәре",
"prefs-echosubscriptions": "Миңә был ваҡиғалар тураһында хәбәр итергә",
"prefs-echocrosswiki": "Кросс-вики белдереүҙәре",
- "prefs-newmessageindicator": "яңы хаттар тураһында белдереү",
"echo-pref-send-me": "миңә ебәрергә",
"echo-pref-send-to": "Ебәрергә",
"echo-pref-email-format": "Хаттарҙың ҙурлығы",
@@ -32,7 +32,6 @@
"echo-pref-email-format-html": "HTML",
"echo-pref-email-format-plain-text": "ғәҙәти яҙма",
"echo-pref-cross-wiki-notifications": "Башҡа викилар белдереүҙәрен күрһәтергә",
- "echo-pref-new-message-indicator": "Фекер алышыу сәхифәмдә хәбәрҙәр тураһында белдереүҙе минең ҡоралдар панелендә күрһәтергә",
"echo-pref-beta-feature-cross-wiki-message": "Киңәйтелгән белдереүҙәр",
"echo-pref-beta-feature-cross-wiki-description": "Белдереүҙәрҙе ябайыраҡ ҡарарға һәм ойошторорға ярҙам итә. Башҡа викилар хәбәрҙәрен күреү мөмкинлеген биргән кросс-вики белдереүҙәрҙе үҙ эсенә ала. (Был вики-проектта шундай хәбәрҙәр алыр өсөн, тейешле бета-функцияны ҡабыҙыр кәрәк.)",
"echo-learn-more": "Күберәк белергә",
@@ -54,7 +53,7 @@
"echo-pref-tooltip-emailuser": "Башҡалар миңә электрон хат ебәргән осраҡта миңә хәбәр итергә.",
"echo-error-no-formatter": "Форматлау белдереү ебәреү өсөн билдәләнмәгән.",
"notifications": "Белдереүҙәр",
- "tooltip-pt-notifications-alert": "{{GENDER:|Һеҙҙең}} иҫкәртеүҙәр",
+ "tooltip-pt-notifications-alert": "{{GENDER:|Һеҙгә}} хәбәр итәләр",
"tooltip-pt-notifications-notice": "{{GENDER:|Һеҙҙең}} хәбәрҙәр",
"echo-displaynotificationsconfiguration": "Белдереү көйләүҙәрен күрһәтергә",
"echo-displaynotificationsconfiguration-notifications-by-category-header": "Категориялар буйынса белдереүҙәр",
@@ -106,7 +105,7 @@
"notification-link-thank-you-edit": "{{GENDER:$1|Һеҙҙең}} үҙгәртеү",
"notification-link-text-view-edit": "Үҙгәртеүҙе ҡарарға",
"notification-header-reverted": "{{PLURAL:$4|1=Һеҙҙең}} <strong>$3</strong> битендәге төҙәтмә {{GENDER:$2|{{PLURAL:$4|кире ҡағылды}}}}.",
- "notification-header-emailuser": "$1{{GENDER:$2|ебәргән}} һеҙгә электрон почта аша ебәрелгән.",
+ "notification-header-emailuser": "$1 һеҙгә хат ебәрҙе.",
"notification-edit-talk-page-email-subject2": "{{GENDER:$1|Ҡатнашыусы}} $1 «{{SITENAME}}» сайтында һеҙгә хәбәр ҡалдырҙы.",
"notification-edit-talk-page-email-batch-body-with-section": "$1 {{GENDER:$1|һулда}} һеҙҙең менән әңгәмәнең \"$2\" битендәге хәбәр.",
"notification-page-linked-email-subject": "Һеҙ төҙөгән биткә «{{SITENAME}}» сайтында һылтанма яһалды",
diff --git a/Echo/i18n/bbc-latn.json b/Echo/i18n/bbc-latn.json
index e8b5a7b0..2e5a47c7 100644
--- a/Echo/i18n/bbc-latn.json
+++ b/Echo/i18n/bbc-latn.json
@@ -4,7 +4,5 @@
"WBT001Erin"
]
},
- "echo-category-title-article-linked": "Alaman pangait",
- "notification-edit-user-talk-email-batch-bundle-body": "alaman panghataion",
- "notification-page-linked-email-batch-bundle-body": "alaman/alamanalaman"
+ "echo-category-title-article-linked": "Alaman pangait"
}
diff --git a/Echo/i18n/bcc.json b/Echo/i18n/bcc.json
index 3bbecc2d..19ed6bee 100644
--- a/Echo/i18n/bcc.json
+++ b/Echo/i18n/bcc.json
@@ -5,7 +5,6 @@
]
},
"echo-notification-alert": "{{جمع:$1|هشداران ($1)|هشداران ($1)|100=هشداران (99+)}}",
- "echo-notification-message": "{{جمع:$1|پیامان ($1)|پیامان ($1)|100=پیامان (99+)}}",
"echo-date-today": "مروچی",
"echo-date-yesterday": "زئ"
}
diff --git a/Echo/i18n/bcl.json b/Echo/i18n/bcl.json
index 5b2ac63c..aeb04e22 100644
--- a/Echo/i18n/bcl.json
+++ b/Echo/i18n/bcl.json
@@ -1,8 +1,9 @@
{
"@metadata": {
"authors": [
- "Geopoet"
+ "Geopoet",
+ "ShimunUfesoj"
]
},
- "notification-edit-talk-page-email-batch-body2": "$1 {{GENDER:$1|wala}} sarong mensahe sa saimong pahina sa olay."
+ "tooltip-pt-notifications-alert": "{{GENDER:|Saimong}} mga alerto"
}
diff --git a/Echo/i18n/be-tarask.json b/Echo/i18n/be-tarask.json
index e0fa1704..fffa04f8 100644
--- a/Echo/i18n/be-tarask.json
+++ b/Echo/i18n/be-tarask.json
@@ -14,7 +14,6 @@
"prefs-displaynotifications": "Налады паказу",
"prefs-echosubscriptions": "Паведамляць мне пра гэтыя падзеі",
"prefs-echocrosswiki": "Міжвікі-апавяшчэньні",
- "prefs-newmessageindicator": "Індыкатар новых паведамленьняў",
"prefs-blocknotificationslist": "Ігнаруемыя ўдзельнікі",
"echo-pref-send-me": "Даслаць мне:",
"echo-pref-send-to": "Даслаць да:",
@@ -28,8 +27,7 @@
"echo-pref-email-format-html": "HTML",
"echo-pref-email-format-plain-text": "Просты тэкст",
"echo-pref-cross-wiki-notifications": "Паказваць апавяшчэньні зь іншых вікаў",
- "echo-pref-notifications-blacklist": "Не паказваць паведамленьні ад гэтых удзельнікаў. ([[mw:Help:Notifications#mute|даведацца болей]])",
- "echo-pref-new-message-indicator": "Паказваць індыкатар паведамленьняў на старонцы гутарак у маёй панэлі",
+ "echo-pref-notifications-blacklist": "Не паказваць паведамленьні ад гэтых удзельнікаў. ([[mw:Special:MyLanguage/Help:Notifications#mute|даведацца болей]])",
"echo-pref-beta-feature-cross-wiki-message": "Пашыраныя апавяшчэньні",
"echo-pref-beta-feature-cross-wiki-description": "Спрашчае прагляд і арганізацыю паведамленьняў. Утрымлівае «крос-вікі» паведамленьні, што дае вам магчымасьць бачыць абвесткі зь іншых вікі (каб атрымліваць такія паведамленьні з пэўнай вікі, вы мусіце актываваць бэта-функцыю ў гэтай вікі).",
"echo-learn-more": "Даведацца болей",
@@ -84,8 +82,6 @@
"echo-none": "Вы ня маеце абвестак.",
"echo-more-info": "Болей",
"echo-feedback": "Водгук",
- "echo-popup-footer-special-page-invitation": "<strong>Паспрабуйце абноўленую старонку паведамленьняў.</strong> [$2 $1]",
- "echo-popup-footer-special-page-invitation-link": "Цалкам новы выгляд і функцыі.",
"echo-api-failure": "Памылка пры атрыманьні паведамленьняў.",
"echo-api-failure-cross-wiki": "Доступ да аддаленага дамэну быў забаронены.",
"echo-notification-placeholder": "Няма паведамленьняў.",
@@ -114,6 +110,8 @@
"notification-link-text-view-page": "Праглядзець старонку",
"notification-header-edit-user-talk": "$1 {{GENDER:$2|пакінуў|пакінула}} паведамленьне на <strong>{{GENDER:$3|вашай}} старонцы размоваў</strong>.",
"notification-header-edit-user-talk-with-section": "$1 {{GENDER:$2|пакінуў|пакінула}} паведамленьне на <strong>{{GENDER:$3|вашай}} старонцы размоваў</strong> у «<strong>$4</strong>».",
+ "notification-compact-header-edit-user-talk": "$1 {{GENDER:$2|пакінуў|пакінула}} {{GENDER:$3|вам}} паведамленьне.",
+ "notification-compact-header-edit-user-talk-with-section": "$1 {{GENDER:$2|пакінуў|пакінула}} {{GENDER:$3|вам}} паведамленьне ў разьдзеле «<strong>$4</strong>».",
"notification-header-page-linked": "Была зробленая спасылка з <strong>$4</strong> на <strong>$3</strong>.",
"notification-compact-header-page-linked": "Спаслаліся з <strong>$1</strong>.",
"notification-bundle-header-page-linked": "Спасылкі былі зробленыя з {{PLURAL:$5|$5 старонкі|$5 старонак|100=99+ старонак}} на <strong>$3</strong>.",
@@ -133,6 +131,17 @@
"notification-header-mention-failure-bundle": "$3 {{PLURAL:$3|згадка|згадкі|згадак}}, {{PLURAL:$3|1=якую|якія}} {{GENDER:$2|вы зрабілі}} на старонцы абмеркаваньня <strong>$4</strong> ня {{PLURAL:$3|1=можа быць дасланая|могуць быць дасланыя}}.",
"notification-compact-header-mention-failure-user-unknown": "<strong>Імя ўдзельніка не існуе:</strong> $1",
"notification-compact-header-mention-failure-user-anonymous": "<strong>IP-адрасы ня могуць быць згаданыя:</strong> $1",
+ "notification-header-mention-success": "{{GENDER:$2|Вашая}} згадка <strong>$3</strong> была дасланая.",
+ "notification-header-mention-success-bundle": "$3 {{PLURAL:$3|згадка|згадкі|згадак}}, {{PLURAL:$3|1=якую|якія}} {{GENDER:$2|вы зрабілі}} на старонцы абмеркаваньня <strong>$4</strong> {{PLURAL:$3|1=была дасланая|былі дасланыя}}.",
+ "notification-compact-header-mention-success": "<strong>{{GENDER:$2|Вы згадалі}}:</strong> $3",
+ "notification-header-mention-status-bundle": "{{PLURAL:$3|$3 паведамленьне|$3 паведамленьні|$3 паведамленьняў}} пра згадкі, {{GENDER:$2|што вы зрабілі}} на старонцы абмеркаваньня <strong>$4</strong>: {{PLURAL:$5|$5 не была дасланая|$5 не былі дасланыя}}, {{PLURAL:$6|$6 дасланая|$6 дасланыя}}.",
+ "notification-header-user-rights-add-only": "Вашыя правы {{GENDER:$4|ўдзельніка|ўдзельніцы}} былі {{GENDER:$1|зьмененыя}}. Вы былі дададзеныя да: $2.",
+ "notification-header-user-rights-remove-only": "Вашыя правы {{GENDER:$4|ўдзельніка|ўдзельніцы}} былі {{GENDER:$1|зьмененыя}}. Вы больш не ўваходзіце ў групу: $2.",
+ "notification-header-user-rights-add-and-remove": "Вашыя правы {{GENDER:$6|ўдзельніка|ўдзельніцы}} былі {{GENDER:$1|зьмененыя}}. Вы былі дададзеныя да: $2. Вы больш не ўваходзіце ў: $4.",
+ "notification-header-user-rights-expiry-change": "Тэрмін скачэньня {{GENDER:$4|вашага}} ўдзелу ў {{PLURAL:$3|1=наступнай групе|наступных групах}} быў {{GENDER:$1|зьменены}}: $2.",
+ "notification-header-welcome": "{{GENDER:$2|Вітаем}} у {{GRAMMAR:месны|{{SITENAME}}}}, $1! Мы радыя бачыць {{GENDER:$2|вас}} тут.",
+ "notification-header-mention-summary": "$1 {{GENDER:$2|згадаў|згадала}} {{GENDER:$3|вас}} у апісаньні зьменаў да <strong>$4</strong>.",
+ "notification-welcome-linktext": "Вітаем",
"notification-header-thank-you-1-edit": "{{GENDER:$2|Вы}} толькі што зрабілі {{GENDER:$2|вашую}} першую праўку; дзякуем {{GENDER:$2|вам}} і запрашаем!",
"notification-header-thank-you-10-edit": "{{GENDER:$2|Вы}} толькі што зрабілі {{GENDER:$2|вашую}} дзясятую праўку; дзякуем {{GENDER:$2|вам}}, так трымаць!",
"notification-header-thank-you-100-edit": "{{GENDER:$2|Вы}} толькі што зрабілі {{GENDER:$2|вашую}} сотую праўку; дзякуй {{GENDER:$2|вам}} вялікі!",
@@ -140,7 +149,9 @@
"notification-header-thank-you-10000-edit": "{{GENDER:$2|Вы}} толькі што зрабілі {{GENDER:$2|вашую}} дзесяцітысячную праўку; дзякуй {{GENDER:$2|вам}} велізарны!",
"notification-header-thank-you-100000-edit": "{{GENDER:$2|Вы}} толькі што зрабілі {{GENDER:$2|вашую}} статысячную праўку; дзякуй {{GENDER:$2|вам}} за дзівосны ўнёсак!",
"notification-header-thank-you-1000000-edit": "{{GENDER:$2|Вы}} толькі што зрабілі {{GENDER:$2|вашую}} мільённую праўку; дзякуй {{GENDER:$2|вам}} за ашаламляльны ўнёсак!",
+ "notification-link-thank-you-edit": "{{GENDER:$1|Вашая}} праўка",
"notification-link-text-view-edit": "Праглядзець праўку",
+ "notification-link-article-reminder": "Прагляд старонкі",
"notification-header-reverted": "{{PLURAL:$4|1=Вашая праўка|Вашыя праўкі}} на старонцы <strong>$3</strong> {{GENDER:$2|{{PLURAL:$4|1=была скасаваная|былі скасаваныя}}}}.",
"notification-header-emailuser": "$1 {{GENDER:$2|даслаў|даслала}} вам ліст электроннай поштай.",
"notification-edit-talk-page-email-subject2": "$1 {{GENDER:$1|пакінуў|пакінула}} Вам паведамленьне на {{SITENAME}}",
@@ -149,21 +160,43 @@
"notification-reverted-email-subject2": "$1 {{GENDER:$1|скасаваў|скасавала}} {{PLURAL:$3|1=Вашую праўку|Вашыя праўкі}} на сайце {{SITENAME}}",
"notification-mention-email-subject": "$1 {{GENDER:$1|згадаў|згадала}} {{GENDER:$2|Вас}} у {{GRAMMAR:месны|{{SITENAME}}}}",
"notification-user-rights-email-subject": "Вашыя правы ў {{GRAMMAR:месны|{{SITENAME}}}} былі зьмененыя",
+ "notification-timestamp-ago-seconds": "{{PLURAL:$1|$1 с}}",
+ "notification-timestamp-ago-minutes": "{{PLURAL:$1|$1 хв}}",
+ "notification-timestamp-ago-hours": "{{PLURAL:$1|$1 гадз}}",
+ "notification-timestamp-ago-days": "{{PLURAL:$1|$1 дзень|$1 дні|$1 дзён}}",
+ "notification-timestamp-ago-months": "{{PLURAL:$1|$1 мес.}}",
+ "notification-timestamp-ago-years": "{{PLURAL:$1|$1 год|$1 гады|$1 гадоў}}",
+ "notification-timestamp-today": "Сёньня",
+ "notification-timestamp-yesterday": "Учора",
+ "notification-inbox-filter-read": "Прачытаныя",
+ "notification-inbox-filter-unread": "Непрачытаныя",
"notification-inbox-filter-all": "Усе",
"echo-email-body-default": "Для Вас ёсьць новая абвестка ў {{GRAMMAR:месны|{{SITENAME}}}}:\n\n$1",
+ "echo-email-footer-default-html": "Для кантролю, якія лісты электроннай пошты мы дасылаем вам, <a href=\"$2\" style=\"text-decoration:none; color: #3868B0;\">праверце вашыя налады</a>.<br />\n$1",
"echo-email-footer-default": "$2\n\nКаб кантраляваць, якія лісты мы дасылацьмем Вам, наведайце свае налады:\n{{canonicalurl:{{#special:Preferences}}#mw-prefsection-echo}}\n\n$1",
+ "echo-email-plain-footer": "Для кантролю, якія лісты электроннай пошты мы дасылаем {{GENDER:$1|вам}}, праверце {{GENDER:$1|вашыя}} налады:",
+ "echo-email-html-footer-preference-link-text": "праверце {{GENDER:$1|вашыя}} налады",
+ "echo-email-html-footer-with-link": "Для кантролю, якія лісты электроннай пошты мы дасылаем {{GENDER:$2|вам}}, $1.",
+ "echo-notification-alert": "{{PLURAL:$1|1=Паведамленьне ($1)|Паведамленьні ($1)|100=Паведамленьні (99+)}}",
+ "echo-notification-notice": "{{PLURAL:$1|1=Абвестка ($1)|Абвесткі ($1)|100=Абвесткі (99+)}}",
"echo-notification-alert-text-only": "Паведамленьні",
"echo-notification-notice-text-only": "Абвесткі",
"echo-overlay-link": "Усе абвесткі",
"echo-overlay-title": "<b>Абвесткі</b>",
"echo-overlay-title-overflow": "<b>{{PLURAL:$1|1=Паведамленьне|Паведамленьні}}</b> ({{PLURAL:$1|1=паказанае|паказаныя}} $1 з $2 {{PLURAL:$2|1=непрачытанага|непрачытаных}})",
"echo-mark-all-as-read": "Пазначыць усё як прачытанае",
+ "echo-mark-all-as-read-confirmation": "$1 {{PLURAL:$1|паведамленьне пазначанае як прачытанае|паведамленьні пазначаныя як прачытаныя|паведамленьняў пазначаныя як прачытаныя}}",
+ "echo-mark-wiki-as-read": "Пазначыць усё як прачытанае ў абранай вікі: $1",
"echo-date-today": "Сёньня",
"echo-date-yesterday": "Учора",
"echo-load-more-error": "Узьнікла памылка ў час атрыманьня дадатковых вынікаў.",
+ "notification-bundle-header-edit-user-talk-v2": "{{PLURAL:$1|$1 новае паведамленьне|$1 новыя паведамленьні|100=99+ новых паведамленьняў}} на <strong>{{GENDER:$3|вашай}} старонцы гутарак</strong>.",
"echo-email-batch-subject-daily": "Вы атрымалі {{PLURAL:$2|новую абвестку|новыя абвесткі|новых абвестак}} на {{SITENAME}}",
"echo-email-batch-subject-weekly": "На гэтым тыдні Вы атрымалі {{PLURAL:$2|новую абвестку|новыя абвесткі|новых абвестак}} на {{SITENAME}}",
"echo-email-batch-body-intro-daily": "Вітаем, $1!\nВось агляд сёньняшняй актыўнасьці ў {{GRAMMAR:месны|{{SITENAME}}}} для Вас.",
"echo-email-batch-body-intro-weekly": "Вітаем, $1!\nВось тыднёвы агляд актыўнасьці ў {{GRAMMAR:месны|{{SITENAME}}}} для вас.",
- "echo-email-batch-link-text-view-all-notifications": "Праглядзець усе абвесткі"
+ "echo-email-batch-link-text-view-all-notifications": "Праглядзець усе абвесткі",
+ "notification-header-foreign-alert": "Болей паведамленьняў з {{PLURAL:$5|$5 іншай вікі|$5 іншых вікі}}",
+ "notification-header-foreign-notice": "Болей абвестак з {{PLURAL:$5|$5 іншай вікі|$5 іншых вікі}}",
+ "notification-header-foreign-all": "Болей паведамленьняў з {{PLURAL:$5|$5 іншай вікі|$5 іншых вікі}}"
}
diff --git a/Echo/i18n/be.json b/Echo/i18n/be.json
index d2ba7f0f..e465eb3d 100644
--- a/Echo/i18n/be.json
+++ b/Echo/i18n/be.json
@@ -4,7 +4,9 @@
"Дзяніс Тутэйшы",
"Чаховіч Уладзіслаў",
"Mikalai Udodau",
- "Macofe"
+ "Macofe",
+ "Artsiom91",
+ "Matěj Suchánek"
]
},
"echo-desc": "Сістэма апавяшчэння ўдзельнікаў пра падзеі і паведамленні",
@@ -12,7 +14,8 @@
"prefs-emailsettings": "Настройкі эл. пошты",
"prefs-displaynotifications": "Настройкі адлюстравання",
"prefs-echosubscriptions": "Паведамляць мне пра гэтыя падзеі",
- "prefs-newmessageindicator": "Індыкатар новага паведамлення",
+ "prefs-echocrosswiki": "Паведамленні з некалькіх вікі-праектаў («крос-вікі»)",
+ "prefs-blocknotificationslist": "Адключаныя ўдзельнікі",
"echo-pref-send-me": "Дасылаць мне:",
"echo-pref-send-to": "Дасылаць да:",
"echo-pref-email-format": "Фармат e-mail:",
@@ -24,13 +27,16 @@
"echo-pref-email-frequency-weekly": "Штотыдневы агляд паведамленняў",
"echo-pref-email-format-html": "HTML",
"echo-pref-email-format-plain-text": "Просты тэкст",
- "echo-pref-new-message-indicator": "Паказаць у маёй панэлі інструментаў індыкатар паведамленняў на старонцы абмеркавання",
+ "echo-pref-cross-wiki-notifications": "Паказваць паведамленні з іншых вікі-праектаў",
+ "echo-pref-notifications-blacklist": "Не паказваць паведамленні ад гэтых удзельнікаў ([[mw:Special:MyLanguage/Help:Notifications#mute|даведацца больш]]):",
"echo-learn-more": "Даведацца больш",
- "echo-new-messages": "У вас ёсць новыя паведамленні",
+ "echo-new-messages": "У Вас ёсць новыя паведамленні",
"echo-category-title-edit-user-talk": "{{PLURAL:$1|паведамленне|паведамленні}} на старонцы размоў",
"echo-category-title-article-linked": "{{PLURAL:$1|спасылка|спасылкі}} на старонкі",
"echo-category-title-reverted": "{{PLURAL:$1|адмена|адмены}} правак",
"echo-category-title-mention": "{{PLURAL:$1|Згадванне|Згадванні}}",
+ "echo-category-title-mention-failure": "{{PLURAL:$1|Наўдалае згадванне|Няўдалыя згадванні}}",
+ "echo-category-title-mention-success": "{{PLURAL:$1|Паспяховае згадванне|Паспяховыя згадванні}}",
"echo-category-title-other": "{{PLURAL:$1|Іншае|Іншыя}}",
"echo-category-title-system": "{{PLURAL:$1|Сістэмнае|Сістэмныя}}",
"echo-category-title-user-rights": "{{PLURAL:$1|Змяненне доступаў удзельніка|Змяненні доступаў удзельніка}}",
@@ -39,8 +45,11 @@
"echo-pref-tooltip-article-linked": "Паведамляць мне, калі хтосьці спасылаецца ў артыкулах на створаную мной старонку",
"echo-pref-tooltip-reverted": "Паведамляць мне, калі хтосьці адмяніў маю праўку, выкарыстаўшы функцыю адмены ці адкату.",
"echo-pref-tooltip-mention": "Паведамляць мне, калі хтосьці высылаецца на маю старонку ўдзельніка.",
+ "echo-pref-tooltip-mention-failure": "Паведамляць мне, калі я не магу адправіць камусьці згадванне.",
+ "echo-pref-tooltip-mention-success": "Паведамляць мне, калі я адпраўляю камусьці згадванне.",
"echo-pref-tooltip-user-rights": "Паведамляць мне, калі хтосьці змяняе мае правы доступу.",
- "echo-pref-tooltip-emailuser": "Апавяшчаць мяне, калі хто-небудзь шле мне ліст электроннай поштай.",
+ "echo-pref-tooltip-emailuser": "Паведамляць мне, калі нехта шле мне ліст электроннай поштай.",
+ "echo-pref-tooltip-article-reminder": "Паведаміць мне аб гэтай старонцы, калі я папрашу.",
"echo-error-no-formatter": "Фарматаванне не вызначана для паведамлення",
"notifications": "Паведамленні",
"tooltip-pt-notifications-alert": "{{GENDER:|Вашы}} апавяшчэнні",
@@ -50,6 +59,7 @@
"echo-specialpage-section-markread": "Пазначыць групу як прачытаную",
"echo-specialpage-pagination-numnotifications": "$1 {{PLURAL:$1|апавяшчэнне|апавяшчэнні|апавяшчэнняў}}",
"echo-specialpage-pagefilters-title": "Нядаўняя актыўнасць",
+ "echo-specialpage-pagefilters-subtitle": "Старонкі з непрагледжанымі апавяшчэннямі",
"notificationsmarkread-legend": "Пазначыць апавяшчэнні як прачытаныя",
"echo-anon": "Каб атрымліваць паведамленні, [$1 стварыце ўліковы запіс] ці [$2 прадстаўцеся].",
"echo-none": "Вы не атрымлівалі паведамленняў.",
@@ -74,6 +84,11 @@
"notification-header-edit-user-talk-with-section": "$1 {{GENDER:$2|пакінуў|пакінула}} паведамленне на <strong>{{GENDER:$3|вашай}} старонцы размоў</strong> у \"<strong>$4</strong>\".",
"notification-header-page-linked": "Зроблена спасылка з <strong>$4</strong> на <strong>$3</strong>.",
"notification-link-text-what-links-here": "Усе спасылкі на гэту старонку",
+ "notification-header-mention-other-nosection": "$1 {{GENDER:$2|згадаў|згадала}} {{GENDER:$3|Вас}} на старонцы <strong>$4</strong>.",
+ "notification-header-mention-user-talkpage-v2": "$1 {{GENDER:$2|згадаў|згадала}} {{GENDER:$3|Вас}} на <strong>старонцы размоў удзельніка $4</strong> у \"<strong>$6</strong>\".",
+ "notification-header-mention-agent-talkpage": "$1 {{GENDER:$2||згадаў|згадала}} {{GENDER:$3|Вас}} на <strong>сваёй старонцы размоў</strong> у \"<strong>$4</strong>\".",
+ "notification-header-mention-agent-talkpage-nosection": "$1 {{GENDER:$2|згадаў|згадала}} {{GENDER:$3|Вас}} на <strong>сваёй старонцы размоў</strong>.",
+ "notification-header-mention-summary": "$1 {{GENDER:$2|згадаў|згадала}} {{GENDER:$3|Вас}} у кароткім апісанні змен старонкі <strong>$4</strong>.",
"notification-link-text-view-edit": "Прагляд праўкі",
"notification-header-reverted": "{{PLURAL:$4|1=Вашу праўку на старонцы $3|Вашы праўкі на старонцы $3}} {{GENDER:$2|скасаваў|скасавала}} $1.",
"notification-edit-talk-page-email-subject2": "{{GENDER:$1|Удзельнік|Удзельніца}} $1 {{GENDER:$1|пакінуў|пакінула}} вам паведамленне на пляцоўцы «{{SITENAME}}»",
@@ -89,10 +104,12 @@
"notification-inbox-filter-all": "Усе",
"echo-email-body-default": "У вас ёсць новае паведамленне на сайце «{{SITENAME}}»: $1",
"echo-email-footer-default": "$2 Для кантролю за тым, якія паведамленні адпраўляюцца вам па эл. пошце, праверце свае персанальныя настройкі: {{canonicalurl:{{#special:Preferences}}#mw-prefsection-echo}} $1",
+ "echo-notification-alert": "{{PLURAL:$1|Абвестка ($1)|Абвесткі ($1)|100=Абвесткі (99+)}}",
+ "echo-notification-alert-text-only": "Паведамленні",
"echo-notification-notice-text-only": "Абвесткі",
"echo-overlay-link": "Усе паведамленні",
"echo-overlay-title": "<b>Паведамленні</b>",
- "echo-overlay-title-overflow": "<b>{{PLURAL:$1|Паведамленні}}</b> ({{PLURAL|$1|паказана|паказаны}} $1 з $2 {{PLURAL|$2|непрачытанага|непрачытаных}})",
+ "echo-overlay-title-overflow": "<b>{{PLURAL:$1|Паведамленні}}</b> ({{PLURAL:$1|паказана|паказаны}} $1 з $2 {{PLURAL:$2|непрачытанага|непрачытаных}})",
"echo-mark-all-as-read": "Пазначыць усе як прачытаныя",
"echo-mark-wiki-as-read": "Пазначыць усе як прачытаныя ў выбранай вікі: $1",
"echo-date-today": "Сёння",
diff --git a/Echo/i18n/bg.json b/Echo/i18n/bg.json
index 7d460edc..2e869464 100644
--- a/Echo/i18n/bg.json
+++ b/Echo/i18n/bg.json
@@ -11,7 +11,8 @@
"Spiritia",
"Ket",
"StanProg",
- "ShockD"
+ "ShockD",
+ "Iliev"
]
},
"echo-desc": "Система за уведомяване на потребителите за събития и съобщения",
@@ -20,7 +21,6 @@
"prefs-displaynotifications": "Настройки за показване",
"prefs-echosubscriptions": "Получаване на известие за следните събития",
"prefs-echocrosswiki": "Известия от други уикита",
- "prefs-newmessageindicator": "Индикатор за ново съобщение",
"prefs-blocknotificationslist": "Заглушени потребители",
"echo-pref-send-me": "Съдържание на е-писмата:",
"echo-pref-send-to": "Адрес за получаване:",
@@ -34,8 +34,7 @@
"echo-pref-email-format-html": "HTML",
"echo-pref-email-format-plain-text": "обикновен текст",
"echo-pref-cross-wiki-notifications": "Показване на известия от други уикита",
- "echo-pref-notifications-blacklist": "Да не се показват известия от следните потребители.\n([[mw:Help:Notifications#mute|learn more]])",
- "echo-pref-new-message-indicator": "Показване на индикатор за съобщения на беседата в лентата с моите инструменти",
+ "echo-pref-notifications-blacklist": "Да не се показват известия от следните потребители.\n([[mw:Special:MyLanguage/Help:Notifications#mute|научете повече]])",
"echo-pref-beta-feature-cross-wiki-message": "Подобрени известявания",
"echo-pref-beta-feature-cross-wiki-description": "Наблюдавайте и организирайте по-лесно известията си. Включва „cross-wiki“ известия, които ви позволяват да видите съобщенията си от други уикипроекти на едно място. (За да получaвате тези известия в даден уикипроект, трябва да активирате бета функцията в него.)",
"echo-learn-more": "Повече подробности",
@@ -51,14 +50,16 @@
"echo-category-title-system": "{{PLURAL:$1|Системни известия}}",
"echo-category-title-user-rights": "{{PLURAL:$1|Промяна|Промени}} на потребителските права",
"echo-category-title-emailuser": "{{PLURAL:$1|Писмо от друг потребител|Писма от други потребители}}",
+ "echo-category-title-article-reminder": "{{PLURAL:$1|напомняне|напомняния}} за страницата",
"echo-pref-tooltip-edit-user-talk": "Известяване, когато някой остави съобщение или отговор на беседата ми.",
- "echo-pref-tooltip-article-linked": "Известяване, когато някой постави препратка в статия към създадена от мен страница.",
+ "echo-pref-tooltip-article-linked": "Известяване, когато някой постави препратка в страница към създадена от мен страница.",
"echo-pref-tooltip-reverted": "Известяване, когато някой премахне или отмени моя редакция чрез инструмента за връщане.",
"echo-pref-tooltip-mention": "Известяване, когато някой постави препратка към потребителската ми страница.",
"echo-pref-tooltip-mention-failure": "Уведоми ме, когато не съм успял да изпратя споменаване на някого.",
"echo-pref-tooltip-mention-success": "Уведоми ме, когато изпратя споменаване на някого.",
"echo-pref-tooltip-user-rights": "Известяване, когато някой промени потребителските ми права.",
"echo-pref-tooltip-emailuser": "Известяване, когато някой ми изпрати е-поща.",
+ "echo-pref-tooltip-article-reminder": "Уведомяване за страницата, когато поискам.",
"echo-error-no-formatter": "Не е посочено форматиране на известията.",
"notifications": "Известия",
"tooltip-pt-notifications-alert": "{{GENDER:|Вашите}} известия",
@@ -88,8 +89,6 @@
"echo-none": "Нямате известия.",
"echo-more-info": "Повече информация",
"echo-feedback": "Обратна връзка",
- "echo-popup-footer-special-page-invitation": "<strong>Опитайте обновената страница за известия.</strong> [$2 $1]",
- "echo-popup-footer-special-page-invitation-link": "Нов изглед и нови възможности.",
"echo-api-failure": "Неуспешно извличане на известия.",
"echo-api-failure-cross-wiki": "Отказан е достъп до външен домейн.",
"echo-notification-placeholder": "Няма известия.",
@@ -118,11 +117,14 @@
"notification-link-text-view-page": "Преглед на страницата",
"notification-header-edit-user-talk": "$1 остави {{GENDER:$2||}} съобщение на <strong>{{GENDER:$3|Вашата}} беседа</strong>.",
"notification-header-edit-user-talk-with-section": "$1 остави {{GENDER:$2||}} съобщение на <strong>{{GENDER:$3|вашата}} беседа</strong>, в раздел „<strong>$4</strong>“.",
+ "notification-compact-header-edit-user-talk": "$1 {{GENDER:$2|Ви}} {{GENDER:$3|остави}} съобщение.",
+ "notification-compact-header-edit-user-talk-with-section": "$1 {{GENDER:$2|Ви}} {{GENDER:$3|остави}} съобщение на „<strong>$4</strong>“.",
"notification-header-page-linked": "Направена е препратка от <strong>$4</strong> до <strong>$3</strong>.",
"notification-compact-header-page-linked": "Направена е препратка от $<strong>$1</strong>.",
"notification-bundle-header-page-linked": "Направени са препратки от {{PLURAL:$5||$5 страници|100=чрез 99 страници}} до <strong>$3</strong>.",
+ "notification-header-article-reminder": "Страница, за която {{GENDER:$2|сте}} поискали да бъдете уведомявани, се намира на <strong>$3</strong>",
"notification-link-text-what-links-here": "Всички връзки към страницата",
- "notification-header-mention-other": "$1 {{GENDER:$3|ви}} {{GENDER:$2|спомена}} на беседата на <strong>$4</strong>, в раздел „$5“.",
+ "notification-header-mention-other": "$1 {{GENDER:$3|Ви}} {{GENDER:$2|спомена}} на беседата на <strong>$4</strong>, в раздел „$5“.",
"notification-header-mention-other-nosection": "$1 {{GENDER:$3|Ви}} {{GENDER:$2|спомена}} на беседата на <strong>$4</strong>.",
"notification-header-mention-user-talkpage-v2": "$1 {{GENDER:$3|Ви}} {{GENDER:$2|<strong>спомена</strong>}} на <strong>беседата</strong> {{GENDER:$5|на}} <strong>$4</strong>, в раздел „$6“.",
"notification-header-mention-user-talkpage-nosection": "$1 {{GENDER:$3|Ви}} {{GENDER:$2|<strong>спомена</strong>}} на <strong>беседата</strong> {{GENDER:$5|на}} <strong>$4</strong>.",
@@ -143,6 +145,7 @@
"notification-header-user-rights-add-only": "{{GENDER:$4|Вашите}} потребителски права бяха {{GENDER:$1|променени}}. Бяхте добавени в група: $2.",
"notification-header-user-rights-remove-only": "{{GENDER:$4|Вашите}} потребителски права бяха {{GENDER:$1|променени}}. Вече не сте член на група: $2.",
"notification-header-user-rights-add-and-remove": "{{GENDER:$6|Вашите}} потребителски права бяха {{GENDER:$1|променени}}. Бяхте добавени в група: $2. Вече не сте член на група: $4.",
+ "notification-header-user-rights-expiry-change": "Срокът на изтичане на членството {{GENDER:$4|Ви}} в {{PLURAL:$3|следната група|следните групи}} беше {{GENDER:$1|променен}}: $2.",
"notification-header-welcome": "{{GENDER:$2|Добре дошли}} в {{SITENAME}}, $1! Радваме се, че {{GENDER:$2|сте}} тук.",
"notification-welcome-linktext": "Добре дошли!",
"notification-header-thank-you-1-edit": "Току-що {{GENDER:$2|направихте}} {{GENDER:$2|Вашата}} първа редакция. {{GENDER:$2|Благодарим}} Ви и добре дошли!",
@@ -154,12 +157,13 @@
"notification-header-thank-you-1000000-edit": "Току-що {{GENDER:$2|направихте}} {{GENDER:$2|вашата}} милионна редакция. {{GENDER:$2|Благодарим}} Ви за невероятния принос!",
"notification-link-thank-you-edit": "{{GENDER:$1|Вашата}} редакция",
"notification-link-text-view-edit": "Преглед на редакцията",
- "notification-header-reverted": "{{PLURAL:$4|Ваша редакция|Ваши редакции}} на страница <strong>$3</strong> {{GENDER:$2|{{PLURAL:$4|е върната|са върнати}}}}.",
+ "notification-link-article-reminder": "Преглед на страницата",
+ "notification-header-reverted": "{{PLURAL:$4|Ваша редакция|Ваши редакции}} на страницата <strong>$3</strong> {{GENDER:$2|{{PLURAL:$4|е върната|са върнати}}}}.",
"notification-header-emailuser": "$1 {{GENDER:$2|Ви изпрати}} имейл.",
"notification-edit-talk-page-email-subject2": "$1 ви {{GENDER:$1|остави}} съобщение на {{SITENAME}}",
"notification-edit-talk-page-email-batch-body-with-section": "$1 {{GENDER:$1|остави}} съобщение на вашата беседа, в раздел „$2“.",
"notification-page-linked-email-subject": "Страницата, създадена от вас, бе свързана с {{SITENAME}}",
- "notification-reverted-email-subject2": "{{PLURAL:$3|Вашата редакция|Вашите редакции}} на {{SITENAME}} {{GENDER:$1|бе върната|бяха върнати}}",
+ "notification-reverted-email-subject2": "{{PLURAL:$3|Вашата редакция|Вашите редакции}} на {{SITENAME}} {{PLURAL:$3|бе върната|бяха върнати}}",
"notification-mention-email-subject": "$1 {{GENDER:$2|Ви}} {{GENDER:$1|спомена}} в {{SITENAME}}",
"notification-user-rights-email-subject": "Потребителските Ви права в {{SITENAME}} бяха променени",
"notification-timestamp-ago-seconds": "{{PLURAL:$1|$1 сек}}",
diff --git a/Echo/i18n/bho.json b/Echo/i18n/bho.json
index c4d9ef37..5726cf1e 100644
--- a/Echo/i18n/bho.json
+++ b/Echo/i18n/bho.json
@@ -5,6 +5,8 @@
"SatyamMishra"
]
},
+ "notifications": "नोटिफिकेशन",
"tooltip-pt-notifications-alert": "{{GENDER:|राउर}} सूचना",
+ "echo-specialpage": "नोटिफिकेशन",
"echo-notification-alert-text-only": "सूचना"
}
diff --git a/Echo/i18n/bn.json b/Echo/i18n/bn.json
index e488c65c..144108ca 100644
--- a/Echo/i18n/bn.json
+++ b/Echo/i18n/bn.json
@@ -9,31 +9,30 @@
"Aftabuzzaman",
"Macofe",
"Kayser Ahmad",
- "Bodhisattwa"
+ "Bodhisattwa",
+ "আফতাবুজ্জামান"
]
},
"echo-desc": "ঘটনা এবং বার্তা সম্পর্কে ব্যবহারকারীদের বিজ্ঞপ্তি দেয়ার জন্য ব্যবস্থা",
"prefs-echo": "বিজ্ঞপ্তি",
- "prefs-emailsettings": "ইমেইল অপশন",
- "prefs-displaynotifications": "প্রদর্শনের অপশন",
- "prefs-echosubscriptions": "এই ঘটনা সম্পর্কে আমাকে অবহিত করো",
+ "prefs-emailsettings": "ইমেইল বিকল্প",
+ "prefs-displaynotifications": "প্রদর্শনের বিকল্প",
+ "prefs-echosubscriptions": "এই ঘটনা সম্পর্কে আমাকে অবহিত করুন",
"prefs-echocrosswiki": "আন্তঃ-উইকি বিজ্ঞপ্তি",
- "prefs-newmessageindicator": "নতুন বার্তা নির্দেশক",
"prefs-blocknotificationslist": "নিঃশব্দকৃত ব্যবহারকারী",
- "echo-pref-send-me": "আমাকে পাঠাও:",
+ "echo-pref-send-me": "আমাকে পাঠান:",
"echo-pref-send-to": "প্রাপক:",
"echo-pref-email-format": "ইমেইল বিন্যাস:",
"echo-pref-web": "ওয়েব",
"echo-pref-email": "ইমেইল",
- "echo-pref-email-frequency-never": "আমাকে কোনো ইমেইল বিজ্ঞপ্তি পাঠিও না",
+ "echo-pref-email-frequency-never": "আমাকে কোনো ইমেইল বিজ্ঞপ্তি পাঠাবেন না",
"echo-pref-email-frequency-immediately": "স্বতন্ত্র বিজ্ঞপ্তি আসা মাত্রই",
"echo-pref-email-frequency-daily": "দৈনিক বিজ্ঞপ্তির একটি সারাংশ",
"echo-pref-email-frequency-weekly": "সাপ্তাহিক বিজ্ঞপ্তির একটি সারাংশ",
"echo-pref-email-format-html": "HTML",
"echo-pref-email-format-plain-text": "সরল লেখা",
- "echo-pref-cross-wiki-notifications": "অন্যান্য উইকিগুলি থেকে বিজ্ঞপ্তি দেখাও",
- "echo-pref-notifications-blacklist": "এই ব্যবহারকারীদের থেকে বিজ্ঞপ্তি প্রদর্শন করবেন না। ([[mw:Help:Notifications#mute|আরও জানুন]])",
- "echo-pref-new-message-indicator": "আমার সরঞ্জামদণ্ডে আলাপ পাতার বার্তা নির্দেশক দেখাও",
+ "echo-pref-cross-wiki-notifications": "অন্যান্য উইকিগুলি থেকে বিজ্ঞপ্তি দেখান",
+ "echo-pref-notifications-blacklist": "এই ব্যবহারকারীদের থেকে বিজ্ঞপ্তি প্রদর্শন করবেন না। ([[mw:Special:MyLanguage/Help:Notifications#mute|আরও জানুন]])",
"echo-pref-beta-feature-cross-wiki-message": "উন্নত বিজ্ঞপ্তি",
"echo-pref-beta-feature-cross-wiki-description": "আরো সহজে বিজ্ঞপ্তি দেখুন ও সংগঠিত করুন। এটি আন্তঃ-উইকি বিজ্ঞপ্তিসহ, যা আপনার অন্যান্য উইকির বার্তাগুলি দেখতে দিবে। (একটি প্রদত্ত উইকিতে আন্তঃ উইকি বিজ্ঞপ্তি পেতে, আপনাকে সেই উইকিতে বেটা বৈশিষ্ট্য সক্রিয় করা আবশ্যক।)",
"echo-learn-more": "আরও জানুন",
@@ -43,20 +42,22 @@
"echo-category-title-article-linked": "পাতা {{PLURAL:$1|সংযোগ|সংযোগসমূহ}}",
"echo-category-title-reverted": "সম্পাদনা {{PLURAL:$1|ফেরত}}",
"echo-category-title-mention": "{{PLURAL:$1|উল্লেখ|উল্লেখসমূহ}}",
- "echo-category-title-mention-failure": "{{PLURAL:$1|উল্লেখ|উল্লেখসমূহ}} ব্যর্থ হয়েছে",
+ "echo-category-title-mention-failure": "{{PLURAL:$1|উল্লেখ|উল্লেখসমূহ}} ব্যর্থ হলে",
"echo-category-title-mention-success": "{{PLURAL:$1|উল্লেখ|উল্লেখসমূহ}} সফল হয়েছে",
"echo-category-title-other": "{{PLURAL:$1|অন্য}}",
"echo-category-title-system": "{{PLURAL:$1|সিস্টেম}}",
"echo-category-title-user-rights": "{{PLURAL:$1|ব্যবহারকারীর অধিকার পরিবর্তন}}",
"echo-category-title-emailuser": "{{PLURAL:$1|অন্য ব্যবহারকারীর কাছ থেকে ইমেইল|অন্যান্য ব্যবহারকারীর কাছ থেকে ইমেইলসমূহ}}",
- "echo-pref-tooltip-edit-user-talk": "আমার আলাপ পাতায় কেউ বার্তা রাখলে বা উত্তর দিলে আমাকে বিজ্ঞপ্তি দাও।",
+ "echo-category-title-article-reminder": "পাতা {{PLURAL:$1|স্মরণ}}",
+ "echo-pref-tooltip-edit-user-talk": "আমার আলাপ পাতায় কেউ বার্তা রাখলে বা উত্তর দিলে আমাকে বিজ্ঞপ্তি দিন।",
"echo-pref-tooltip-article-linked": "কেউ অন্য পাতায় আমার তৈরি কোনো পাতার লিঙ্ক প্রদান করলে আমাকে বিজ্ঞপ্তি দিন।",
- "echo-pref-tooltip-reverted": "পূর্বাবস্থা বা রোলব্যাক সরঞ্জাম দিয়ে কেউ আমার সম্পাদনা ফেরত নিলে আমাকে বিজ্ঞপ্তি দাও।",
- "echo-pref-tooltip-mention": "কেউ আমার ব্যবহারকারী পাতার লিঙ্ক প্রদান করলে আমাকে বিজ্ঞপ্তি দাও।",
- "echo-pref-tooltip-mention-failure": "আমার কাউকে উল্লেখ করতে ব্যর্থ হলে আমাকে বিজ্ঞপ্তি দাও।",
- "echo-pref-tooltip-mention-success": "আমি কাউকে উল্লেখ করলে আমাকে বিজ্ঞপ্তি দাও।",
- "echo-pref-tooltip-user-rights": "কেউ আমার ব্যবহারকারীর অধিকার পরিবর্তন করলে আমাকে বিজ্ঞপ্তি দাও।",
- "echo-pref-tooltip-emailuser": "কেউ আমাকে একটি ইমেল প্রেরণ করলে আমাকে বিজ্ঞপ্তি দাও।",
+ "echo-pref-tooltip-reverted": "পূর্বাবস্থা বা রোলব্যাক সরঞ্জাম দিয়ে কেউ আমার সম্পাদনা ফেরত নিলে আমাকে বিজ্ঞপ্তি দিন।",
+ "echo-pref-tooltip-mention": "কেউ আমার ব্যবহারকারী পাতার লিঙ্ক প্রদান করলে আমাকে বিজ্ঞপ্তি দিন।",
+ "echo-pref-tooltip-mention-failure": "আমি কাউকে উল্লেখ করতে ব্যর্থ হলে আমাকে বিজ্ঞপ্তি দিন।",
+ "echo-pref-tooltip-mention-success": "আমি কাউকে উল্লেখ করলে আমাকে বিজ্ঞপ্তি দিন।",
+ "echo-pref-tooltip-user-rights": "কেউ আমার ব্যবহারকারীর অধিকার পরিবর্তন করলে আমাকে বিজ্ঞপ্তি দিন।",
+ "echo-pref-tooltip-emailuser": "কেউ আমাকে একটি ইমেল প্রেরণ করলে আমাকে বিজ্ঞপ্তি দিন।",
+ "echo-pref-tooltip-article-reminder": "এই পাতা সম্পর্কে আমাকে অবহিত করুন যখন আমি জিজ্ঞেস করব।",
"echo-error-no-formatter": "বিজ্ঞপ্তির জন্য কোন বিন্যাস সংজ্ঞায়িত করা হয়নি।",
"notifications": "বিজ্ঞপ্তি",
"tooltip-pt-notifications-alert": "{{GENDER:|আপনার}} অবহিতি",
@@ -83,11 +84,9 @@
"echo-specialpage-pagefilters-subtitle": "অপঠিত বিজ্ঞপ্তিসহ পাতা",
"notificationsmarkread-legend": "বিজ্ঞপ্তি পঠিত হিসেবে চিহ্নিত করুন",
"echo-anon": "বিজ্ঞপ্তি পেতে, [$1 অ্যাকাউন্ট তৈরি] অথবা [$2 প্রবেশ] করুন।",
- "echo-none": "আপনার কোন বিজ্ঞপ্তি নাই।",
+ "echo-none": "আপনার কোন বিজ্ঞপ্তি নেই।",
"echo-more-info": "আরও তথ্য",
"echo-feedback": "প্রতিক্রিয়া",
- "echo-popup-footer-special-page-invitation": "<strong>পুনঃনকশা করা বিজ্ঞপ্তি পাতাটি ব্যবহার করে দেখুন।</strong> [$2 $1]",
- "echo-popup-footer-special-page-invitation-link": "নতুন চেহারায় ও নতুন বৈশিষ্ট্যে।",
"echo-quotation-marks": "“$1”",
"echo-api-failure": "বিজ্ঞপ্তি আনতে ব্যর্থ হয়েছে।",
"echo-api-failure-cross-wiki": "রিমোট ডোমেইনে প্রবেশ অস্বীকৃত হয়েছে।",
@@ -110,13 +109,15 @@
"notification-link-text-expand-notice-count": "{{PLURAL:$1|$1টি}} বিজ্ঞপ্তি দেখুন",
"notification-link-text-expand-all-count": "{{PLURAL:$1|$1টি বিজ্ঞপ্তি}} দেখুন",
"notification-link-text-collapse-all": "সংকোচন",
- "notification-link-text-view-message": "বার্তা দেখাও",
- "notification-link-text-view-mention": "উল্লেখণ দেখাও",
+ "notification-link-text-view-message": "বার্তা দেখুন",
+ "notification-link-text-view-mention": "উল্লেখণ দেখুন",
"notification-link-text-view-mention-failure": "{{PLURAL:$1|উল্লেখ দেখুন|উল্লেখগুলি দেখুন}}",
"notification-link-text-view-changes": "{{GENDER:$1|পরিবর্তনসমূহ}} দেখুন",
- "notification-link-text-view-page": "পাতা দেখাও",
+ "notification-link-text-view-page": "পাতা দেখুন",
"notification-header-edit-user-talk": "$1 <strong>{{GENDER:$3|আপনার}} আলাপ পাতায়</strong> একটি বার্তা {{GENDER:$2|দিয়েছেন}}।",
"notification-header-edit-user-talk-with-section": "$1 <strong>{{GENDER:$3|আপনার}} আলাপ পাতায়</strong> \"<strong>$4</strong>\"-এ একটি বার্তা {{GENDER:$2|দিয়েছেন}}।",
+ "notification-compact-header-edit-user-talk": "$1 {{GENDER:$3|আপনাকে}} একটি বার্তা {{GENDER:$2|দিয়েছেন}}।",
+ "notification-compact-header-edit-user-talk-with-section": "$1 \"<strong>$4</strong>\"-এ {{GENDER:$3|আপনাকে}} একটি বার্তা {{GENDER:$2|দিয়েছেন}}।",
"notification-header-page-linked": "<strong>$4</strong> থেকে <strong>$3</strong>-এ একটি সংযোগ তৈরি করা হয়েছে।",
"notification-compact-header-page-linked": "<strong>$1</strong> থেকে সংযুক্ত।",
"notification-bundle-header-page-linked": "{{PLURAL:$5||$5টি|100=৯৯+টি}} পাতা থেকে <strong>$3</strong>-এ সংযোগ তৈরি করা হয়েছে।",
@@ -131,7 +132,7 @@
"notification-header-mention-article-talkpage-nosection": "$1 ''$4'''-এর আলাপ পাতায় {{GENDER:$3|আপনাকে}} {{GENDER:$2|উল্লেখ করেছেন}}।",
"notification-header-mention-failure-user-unknown": "<strong>$3</strong>-এর জন্য {{GENDER:$2|আপনার করা}} উল্লেখ পাঠানো যায়নি কারণ ব্যবহারকারীকে পাওয়া যায়নি।",
"notification-header-mention-failure-user-anonymous": "<strong>$3</strong>-এর জন্য {{GENDER:$2|আপনার করা}} উল্লেখ পাঠানো যায়নি কারণ ব্যবহারকারী বেনামী ছিলেন।",
- "notification-header-mention-failure-too-many": "{{GENDER:$2|আপনার}} করা উল্লেখগুলি পাঠানো যায়নি কারণ তা $3-এর সীমা ছাড়িয়ে গেছে।",
+ "notification-header-mention-failure-too-many": "{{GENDER:$2|আপনি}} $3 জনের অধিক {{PLURAL:$3|ব্যবহারকারীকে}} উল্লেখ করার চেষ্টা করেছেন। উপরে উল্লেখিত যেগুলি এই সীমা অতিক্রম করেছে সেগুলি পাঠানো হয়নি।",
"notification-header-mention-failure-bundle": "<strong>$4</strong> আলাপ পাতায় {{GENDER:$2|আপনার করা}} {{PLURAL:$3|একটি উল্লেখ|$3টি উল্লেখ}} পাঠানো যায়নি।",
"notification-compact-header-mention-failure-user-unknown": "<strong>ব্যবহারকারী নামের অস্তিত্ব নেই:</strong> $1",
"notification-compact-header-mention-failure-user-anonymous": "<strong>আইপিসমূহকে উল্লেখ করা যাবে না:</strong> $1",
@@ -144,6 +145,7 @@
"notification-header-user-rights-add-and-remove": "{{GENDER:$6|আপনার}} ব্যবহারকারী অধিকার {{GENDER:$1|পরিবর্তিত হয়েছে}}। আপনাকে এখানে যোগ করা হয়েছে: $2। আপনি এখন আর এই দলের সদস্য নন: $4।",
"notification-header-user-rights-expiry-change": "নিন্মলিখিত {{PLURAL:$3|দলে|দলগুলিতে}} {{GENDER:$4|আপনার}} সদস্যতা শেষ হওয়ার সময়সীমা {{GENDER:$1|পরিবর্তিত হয়েছে}}: $2।",
"notification-header-welcome": "{{SITENAME}}-এ {{GENDER:$2|স্বাগতম}}, $1! {{GENDER:$2|আপনাকে}} এখানে দেখে আমরা আনন্দিত।",
+ "notification-header-mention-summary": "$1 <strong>$4</strong>-এ একটি সম্পাদনা সারাংশে {{GENDER:$3|আপনাকে}} {{GENDER:$2|উল্লেখ করেছেন}}।",
"notification-welcome-linktext": "স্বাগতম",
"notification-header-thank-you-1-edit": "{{GENDER:$2|আপনি}} এইমাত্র {{GENDER:$2|আপনার}} প্রথম সম্পাদনা করেছেন; {{GENDER:$2|আপনাকে}} ধন্যবাদ, এবং স্বাগতম!",
"notification-header-thank-you-10-edit": "{{GENDER:$2|আপনি}} এইমাত্র {{GENDER:$2|আপনার}} দশম সম্পাদনা করেছেন; {{GENDER:$2|আপনাকে}} ধন্যবাদ, এবং দয়া করে অব্যাহত রাখুন!",
@@ -153,11 +155,11 @@
"notification-header-thank-you-100000-edit": "{{GENDER:$2|আপনি}} এইমাত্র {{GENDER:$2|আপনার}} এক লক্ষতম সম্পাদনা করেছেন; একজন অসাধারণ অবদানকারী হওয়ার জন্য {{GENDER:$2|আপনাকে}} ধন্যবাদ!",
"notification-header-thank-you-1000000-edit": "{{GENDER:$2|আপনি}} এইমাত্র {{GENDER:$2|আপনার}} এক লক্ষতম সম্পাদনা করেছেন; একজন অসাধারণ অবদানকারী হওয়ার জন্য {{GENDER:$2|আপনাকে}} ধন্যবাদ!",
"notification-link-thank-you-edit": "{{GENDER:$1|আপনার}} সম্পাদনা",
- "notification-link-text-view-edit": "সম্পাদনা দেখাও",
+ "notification-link-text-view-edit": "সম্পাদনা দেখুন",
"notification-link-article-reminder": "পাতা দেখুন",
"notification-header-reverted": "<strong>$3</strong>-এ আপনার করা {{PLURAL:$4|সম্পাদনা|সম্পাদনাগুলো}} {{GENDER:$2|পূর্বাবস্থায় নেয়া হয়েছে}}।",
"notification-header-emailuser": "$1 আপনাকে একটি ইমেইল {{GENDER:$2|পাঠিয়েছেন}}।",
- "notification-edit-talk-page-email-subject2": "$1 {{SITENAME}} এ আপনার জন্য একটি বার্তা {{GENDER:$1|রেখেছেন}}",
+ "notification-edit-talk-page-email-subject2": "$1 {{SITENAME}}-এ আপনাকে একটি বার্তা {{GENDER:$1|দিয়েছেন}}",
"notification-edit-talk-page-email-batch-body-with-section": "$1 আপনার আলাপ পাতায় \"$2\"-এ একটি বার্তা {{GENDER:$1|রেখেছেন}}।",
"notification-page-linked-email-subject": "আপনার তৈরিকৃত একটি পাতা {{SITENAME}} সাইটে সংযোগ করা হয়েছে।",
"notification-reverted-email-subject2": "{{SITENAME}}-এ আপনার {{PLURAL:$3|সম্পাদনা|সম্পাদনাগুলো}} {{GENDER:$1|পূর্বাবস্থায়}} নেয়া হয়েছে",
@@ -165,7 +167,7 @@
"notification-user-rights-email-subject": "{{SITENAME}}-এ আপনার ব্যবহারকারী অধিকার পরিবর্তন হয়েছে",
"notification-timestamp-ago-seconds": "{{PLURAL:$1|$1 সে}}",
"notification-timestamp-ago-minutes": "{{PLURAL:$1|$1 মি}}",
- "notification-timestamp-ago-hours": "{{PLURAL:$1|$1 ঘ}}",
+ "notification-timestamp-ago-hours": "{{PLURAL:$1|$1 ঘণ্টা}}",
"notification-timestamp-ago-days": "{{PLURAL:$1|$1 দিন}}",
"notification-timestamp-ago-months": "{{PLURAL:$1|$1 মাস}}",
"notification-timestamp-ago-years": "{{PLURAL:$1|$1 বছর}}",
@@ -198,7 +200,7 @@
"echo-email-batch-subject-weekly": "এই সপ্তাহে আপনি {{SITENAME}}-এ {{PLURAL:$2|একটি নতুন বিজ্ঞপ্তি|নতুন বিজ্ঞপ্তিসমূহ}} পেয়েছেন",
"echo-email-batch-body-intro-daily": "প্রিয় $1,\n{{SITENAME}} সাইটে আপনার জন্য দিনের কার্যক্রমের সারাংশ এখানে দেওয়া হল।",
"echo-email-batch-body-intro-weekly": "প্রিয় $1,\n{{SITENAME}} সাইটে আপনার জন্য সপ্তাহের কার্যক্রমের সারাংশ এখানে দেওয়া হল।",
- "echo-email-batch-link-text-view-all-notifications": "সকল বিজ্ঞপ্তি দেখাও",
+ "echo-email-batch-link-text-view-all-notifications": "সকল বিজ্ঞপ্তি দেখান",
"notification-header-foreign-alert": "{{PLURAL:$5|আরেকটি উইকি থেকে|$5টি উইকি থেকে}} আরো অবহিতি",
"notification-header-foreign-notice": "{{PLURAL:$5|আরেকটি উইকি|$5টি উইকি}} থেকে আরো বিজ্ঞপ্তি",
"notification-header-foreign-all": "{{PLURAL:$5|আরেকটি উইকি|$5টি উইকি}} থেকে আরো বিজ্ঞপ্তি",
diff --git a/Echo/i18n/br.json b/Echo/i18n/br.json
index fed64e0d..81edc522 100644
--- a/Echo/i18n/br.json
+++ b/Echo/i18n/br.json
@@ -14,7 +14,6 @@
"prefs-displaynotifications": "Dibarzhioù diskwel",
"prefs-echosubscriptions": "Kas keloù din diwar-benn an darvoudoù-mañ",
"prefs-echocrosswiki": "Kemennoù etrewiki",
- "prefs-newmessageindicator": "Merker kemennadenn nevez",
"echo-pref-send-me": "Kas din :",
"echo-pref-send-to": "Kas da :",
"echo-pref-email-format": "Furmad ar postel :",
@@ -61,7 +60,6 @@
"echo-none": "N'ho peus resevet kemenn ebet.",
"echo-more-info": "Gouzout hiroc'h",
"echo-feedback": "Sonjoù",
- "echo-popup-footer-special-page-invitation": "<strong>Klaskit gant ar bajenn kemennoù, un tres nevez zo ganti.</strong> [$2 $1]",
"echo-api-failure": "N'eus ket bet gallet mont da gerc'hat ar c'hemennadennoù.",
"echo-notification-placeholder": "N'eus kemenn ebet.",
"echo-notification-loginrequired": "Ret eo deoc'h kevreañ evit gallout lenn ho kemennoù.",
@@ -74,6 +72,10 @@
"notification-link-text-view-page": "Gwelet ar bajenn",
"notification-header-edit-user-talk-with-section": "$1 {{GENDER:$2|en deus|he deus}} skrivet ur c'hemennad war <strong>{{GENDER:$3|ho}} pajenn gaozeal</strong> e kevrenn \"<strong>$4</strong>\".",
"notification-header-mention-status-bundle": "{{PLURAL:$3|Ur c'hemenn|$3 kemen}} diwar-benn menegoù {{GENDER:$2|graet ganeoc'h}} e bajenn gaozeal <strong>$4</strong> : $5 {{PLURAL:$5|n'eo ket bet kaset|n'int ket bet kaset}}, ha {{PLURAL:$6|$6 zo bet kaset}}.",
+ "notification-header-thank-you-1-edit": "{{GENDER:$2|Da}} gemmadenn gentañ o paouez bezañ graet ganit; trugarez ha degemer mat!",
+ "notification-header-thank-you-10-edit": "{{GENDER:$2|Da}} dekvet gemmadenn o paouez bezañ graet ganit; trugarez ha bec'h dezhi!",
+ "notification-header-thank-you-100-edit": "{{GENDER:$2|Da}} kantvet gemmadenn o paouez bezañ graet ganit; mersi bras!",
+ "notification-header-thank-you-1000-edit": "{{GENDER:$2|Da}} milvet gemmadenn o paouez bezañ graet ganit; trugarez da vezañ ur {{GENDER:$2|c'henlabourer meur|genlabourerez veur}}!",
"notification-link-text-view-edit": "Gwelet ar c'hemm",
"notification-edit-talk-page-email-subject2": "$1 {{GENDER:$1|en|he}} deus laosket deoc'h ur gemennadenn\nwar {{SITENAME}}",
"notification-edit-talk-page-email-batch-body-with-section": "$1 {{GENDER:$1|en deus|he deus}} embannet ur gemennadenn war ho pajenn gaozeal diwar-benn \"$2\".",
diff --git a/Echo/i18n/bs.json b/Echo/i18n/bs.json
index 32ac8c86..0990332f 100644
--- a/Echo/i18n/bs.json
+++ b/Echo/i18n/bs.json
@@ -17,7 +17,6 @@
"prefs-displaynotifications": "Opcije prikaza",
"prefs-echosubscriptions": "Obavijesti me o ovim događajima",
"prefs-echocrosswiki": "Obavještenja s drugih wikija",
- "prefs-newmessageindicator": "Indikator za nove poruke",
"prefs-blocknotificationslist": "Crna lista",
"echo-pref-send-me": "Pošalji mi:",
"echo-pref-send-to": "Pošalji na:",
@@ -31,8 +30,7 @@
"echo-pref-email-format-html": "HTML",
"echo-pref-email-format-plain-text": "Obični tekst",
"echo-pref-cross-wiki-notifications": "Prikaži obavještenja s drugih wikija",
- "echo-pref-notifications-blacklist": "Spisak korisnika koji Vam, u većini slučajeva, neće moći slati obavještenja koristeći Echo (ne utiče na izmjene na Vašoj stranici za razgovor; [[mw:Help:Notifications#mute|detaljnije]])",
- "echo-pref-new-message-indicator": "Prikaži indikator da je dobijena poruka na stranici za razgovor u mojoj alatnoj traci",
+ "echo-pref-notifications-blacklist": "Spisak korisnika koji Vam, u većini slučajeva, neće moći slati obavještenja koristeći Echo (ne utiče na izmjene na Vašoj stranici za razgovor; [[mw:Special:MyLanguage/Help:Notifications#mute|detaljnije]])",
"echo-pref-beta-feature-cross-wiki-message": "Poboljšana obavještenja",
"echo-pref-beta-feature-cross-wiki-description": "Omogućava lakši pregled i organizaciju obavještenja. Također omogućava obavještenja kad dobijete poruku na drugim wikijima. (Da biste vidjeli obavještenja s nekog wikija, na tom wikiju morate aktivirati ovu beta mogućnost.)",
"echo-learn-more": "Saznajte više",
@@ -85,8 +83,6 @@
"echo-none": "Nemate obavještenja",
"echo-more-info": "Više informacija",
"echo-feedback": "Povratna informacija",
- "echo-popup-footer-special-page-invitation": "<strong>Isprobajte redizajniranu stranicu s obavještenjima.</strong> [$2 $1]",
- "echo-popup-footer-special-page-invitation-link": "Potpuno novi izgled i mogućnosti.",
"echo-api-failure": "Dobavljanje obavještenja nije uspjelo.",
"echo-api-failure-cross-wiki": "Odbijen pristup vanjskoj domeni.",
"echo-notification-placeholder": "Nema obavještenja.",
@@ -141,6 +137,7 @@
"notification-header-user-rights-remove-only": "{{GENDER:$4|Vaša}} korisnička prava su {{GENDER:$1|promijenjena}}. Više niste član sljedećih grupa: $2.",
"notification-header-user-rights-add-and-remove": "{{GENDER:$6|Vaša}} korisnička prava su {{GENDER:$1|promijenjena}}. Sad ste član sljedećih grupa: $2. Više niste član sljedećih grupa: $4.",
"notification-header-welcome": "{{GENDER:$2|Dobro došli}} na {{GRAMMAR:akuzativ|{{SITENAME}}}}, $1! Drago nam je što {{GENDER:$2|ste}} ovdje.",
+ "notification-header-mention-summary": "$1 {{GENDER:$3|Vas}} je {{GENDER:$2|spomenuo|spomenula}} u sažetku na stranici <strong>$4</strong>.",
"notification-welcome-linktext": "Dobro došli",
"notification-header-thank-you-1-edit": "Upravo {{GENDER:$2|ste}} napravili prvu izmjenu; hvala {{GENDER:$2|Vam}} i dobro došli!",
"notification-header-thank-you-10-edit": "Upravo {{GENDER:$2|ste}} napravili {{GENDER:$2|svoju}} desetu izmjenu; hvala {{GENDER:$2|Vam}} i samo tako nastavite!",
diff --git a/Echo/i18n/btm.json b/Echo/i18n/btm.json
new file mode 100644
index 00000000..f7d88863
--- /dev/null
+++ b/Echo/i18n/btm.json
@@ -0,0 +1,8 @@
+{
+ "@metadata": {
+ "authors": [
+ "Simartampua"
+ ]
+ },
+ "tooltip-pt-notifications-alert": "{{GENDER:|Your}} sipaingot"
+}
diff --git a/Echo/i18n/ca.json b/Echo/i18n/ca.json
index a7566cdb..d882c8a8 100644
--- a/Echo/i18n/ca.json
+++ b/Echo/i18n/ca.json
@@ -10,7 +10,8 @@
"Fitoschido",
"Ssola",
"Nemo bis",
- "Toniher"
+ "Toniher",
+ "Lluis tgn"
]
},
"echo-desc": "Sistema per notificar als usuaris sobre esdeveniments i missatges",
@@ -19,7 +20,7 @@
"prefs-displaynotifications": "Opcions de visualització",
"prefs-echosubscriptions": "Notifica'm sobre aquests esdeveniments",
"prefs-echocrosswiki": "Notificacions interwiki",
- "prefs-newmessageindicator": "Indicador de missatges nous",
+ "prefs-blocknotificationslist": "Usuaris silenciats",
"echo-pref-send-me": "Envia’m:",
"echo-pref-send-to": "Envia a:",
"echo-pref-email-format": "Format del missatge:",
@@ -32,7 +33,6 @@
"echo-pref-email-format-html": "HTML",
"echo-pref-email-format-plain-text": "Text net",
"echo-pref-cross-wiki-notifications": "Mostra les notificacions d'altres wikis",
- "echo-pref-new-message-indicator": "Mostra l'indicador de missatges en pàgina de discussió a la meva barra d'eines",
"echo-pref-beta-feature-cross-wiki-message": "Notificacions millorades",
"echo-pref-beta-feature-cross-wiki-description": "Mostra i organitza les notificacions més fàcilment. Inclou les notificacions multi-wiki que permet veure els missatges d'altres wikis. (Per rebre notificacions d'altres wikis en un wiki determinat, heu d'activar la funcionalitat beta en aquest wiki.)",
"echo-learn-more": "Més informació",
@@ -48,6 +48,7 @@
"echo-category-title-system": "{{PLURAL:$1|Sistema}}",
"echo-category-title-user-rights": "{{PLURAL:$1|Canvi de drets d'usuari|Canvis de drets d'usuari}}",
"echo-category-title-emailuser": "{{PLURAL:$1|Correu electrònic d'un altre usuari|Correus electrònics d'altres usuaris}}",
+ "echo-category-title-article-reminder": "{{PLURAL:$1|Recordatori|Recordatoris}} de pàgina",
"echo-pref-tooltip-edit-user-talk": "Avisa'm quan algú envia un missatge o respon a la meva pàgina de discussió.",
"echo-pref-tooltip-article-linked": "Avisa'm quan algú enllaça des d'un article a una pàgina que he creat.",
"echo-pref-tooltip-reverted": "Avisa'm quan algú reverteix una modificació que he fet, emprant l'eina per a desfer o revocar.",
@@ -56,6 +57,7 @@
"echo-pref-tooltip-mention-success": "Notifica'm quan enviï una menció a algú.",
"echo-pref-tooltip-user-rights": "Avisa’m quan algú canviï els meus drets d’usuari.",
"echo-pref-tooltip-emailuser": "Notifica'm quan algú m'enviï un correu electrònic.",
+ "echo-pref-tooltip-article-reminder": "Notifica’m sobre aquesta pàgina quan ho pregunti.",
"echo-error-no-formatter": "Cap format definit per a la notificació.",
"notifications": "Notificacions",
"tooltip-pt-notifications-alert": "{{GENDER:|Les vostres}} alertes",
@@ -85,8 +87,6 @@
"echo-none": "No teniu cap notificació.",
"echo-more-info": "Més informació",
"echo-feedback": "Comentaris",
- "echo-popup-footer-special-page-invitation": "<strong>Proveu el nou disseny de la pàgina de notificacions.</strong> [$2 $1]",
- "echo-popup-footer-special-page-invitation-link": "Nou aspecte i funcionalitats.",
"echo-api-failure": "La recuperació de notificacions ha fallat.",
"echo-api-failure-cross-wiki": "L'accés al domini remot ha estat denegat.",
"echo-notification-placeholder": "No hi ha cap notificació.",
@@ -115,6 +115,8 @@
"notification-link-text-view-page": "Mostra la pàgina",
"notification-header-edit-user-talk": "$1 {{GENDER:$2|ha deixat}} un missatge en la <strong>{{GENDER:$3|vostra}} pàgina de discussió</strong>.",
"notification-header-edit-user-talk-with-section": "$1 {{GENDER:$2|ha deixat}} un missatge en la <strong>{{GENDER:$3|vostra}} pàgina de discussió</strong> a «<strong>$4</strong>».",
+ "notification-compact-header-edit-user-talk": "$1 {{GENDER:$2|us ha}} {{GENDER:$3|deixat}} un missatge.",
+ "notification-compact-header-edit-user-talk-with-section": "$1 {{GENDER:$2|us ha}} {{GENDER:$3|deixat}} un missatge a «<strong>$4</strong>».",
"notification-header-page-linked": "S'ha creat un enllaç a <strong>$4</strong> vers <strong>$3</strong>.",
"notification-compact-header-page-linked": "Enllaçades des de <strong>$1</strong>.",
"notification-bundle-header-page-linked": "Enllaços creats des de {{PLURAL:$5||$5 pàgines|100=més d'un centenar de pàgines}} vers <strong>$3</strong>.",
@@ -132,6 +134,7 @@
"notification-compact-header-mention-failure-user-unknown": "<strong>El nom d'usuari no existeix:</strong> $1",
"notification-compact-header-mention-failure-user-anonymous": "<strong>Les IP no es poden mencionar:</strong> $1",
"notification-header-mention-success": "S'ha enviat {{GENDER:$2|la vostra}} menció a <strong>$3</strong>.",
+ "notification-compact-header-mention-success": "<strong>{{GENDER:$2|Vau mencionar a}}:</strong> $3",
"notification-header-user-rights-add-only": "Els vostres drets d'usuari han estat {{GENDER:$1|modificats}}. Heu estat {{GENDER:$4|afegit|afegida}} a: $2.",
"notification-header-user-rights-remove-only": "{{GENDER:$4|Els vostres}} drets d'usuari han estat {{GENDER:$1|modificats}}. Ja no sou membre de: $2.",
"notification-header-user-rights-add-and-remove": "Els vostres drets d'usuari han estat {{GENDER:$1|modificats}}. Heu estat {{GENDER:$6|afegit|afegida}} a: $2. Ja no sou membre de: $4.",
@@ -146,7 +149,8 @@
"notification-header-thank-you-1000000-edit": "{{GENDER:$2|Acabeu}} de fer un milió de modificacions; us agraïm {{GENDER:$2|la vostra}} col·laboració sorprenent!",
"notification-link-thank-you-edit": "{{GENDER:$1|La vostra}} modificació",
"notification-link-text-view-edit": "Mostra la modificació",
- "notification-header-reverted": "{{PLURAL:$4|La vostra edició a <strong>$3</strong> ha estat revertida|Les vostres edicions a <strong>$3</strong> han estat revertides}}{{GENDER:$2|}}",
+ "notification-link-article-reminder": "Mostra la pàgina",
+ "notification-header-reverted": "{{PLURAL:$4|La vostra edició a <strong>$3</strong> ha estat revertida|Les vostres edicions a <strong>$3</strong> han estat revertides}}{{GENDER:$2|}}.",
"notification-header-emailuser": "$1 us ha {{GENDER:$2|enviat}} un correu electrònic.",
"notification-edit-talk-page-email-subject2": "$1 us {{GENDER:$1|ha deixat}} un missatge al projecte {{SITENAME}}",
"notification-edit-talk-page-email-batch-body-with-section": "$1 us {{GENDER:$1|ha deixat}} un missatge en la vostra pàgina de discussió sobre «$2».",
@@ -167,6 +171,7 @@
"notification-inbox-filter-all": "Totes",
"echo-email-body-default": "Teniu una nova notificació a {{SITENAME}}:\n\n$1",
"echo-email-footer-default": "$2\n\nPer a controlar quins correus us enviem, reviseu les vostres preferències:\n{{canonicalurl:{{#special:Preferences}}#mw-prefsection-echo}}\n\n$1",
+ "echo-email-html-footer-preference-link-text": "comproveu {{GENDER:$1|les vostres}} preferències",
"echo-email-html-footer-with-link": "Per controlar quins missatges de correu electrònic {{GENDER:$2|us}} enviem, $1.",
"echo-notification-alert": "{{PLURAL:$1|Alertes ($1)|100=Alertes (+99)}}",
"echo-notification-notice": "{{PLURAL:$1|Avisos ($1)|100=Avisos (més de 100)}}",
diff --git a/Echo/i18n/cdo.json b/Echo/i18n/cdo.json
index 0de715d6..e510b4df 100644
--- a/Echo/i18n/cdo.json
+++ b/Echo/i18n/cdo.json
@@ -3,7 +3,8 @@
"authors": [
"Amire80",
"Yejianfei",
- "唐吉訶德的侍從"
+ "唐吉訶德的侍從",
+ "Davidzdh"
]
},
"echo-desc": "通知系統",
@@ -11,7 +12,6 @@
"prefs-emailsettings": "電批選項",
"prefs-displaynotifications": "顯示選項",
"prefs-echosubscriptions": "通知我茲幾萆事計",
- "prefs-newmessageindicator": "新其導航",
"echo-pref-send-me": "發送給我:",
"echo-pref-send-to": "發送遘:",
"echo-pref-email-format": "電批格式:",
@@ -23,7 +23,6 @@
"echo-pref-email-frequency-weekly": "蜀禮拜蜀回其通知總結",
"echo-pref-email-format-html": "HTML",
"echo-pref-email-format-plain-text": "純文本",
- "echo-pref-new-message-indicator": "敆我其工具欄顯示討論頁信息指示",
"echo-learn-more": "學習更更価仂囝",
"echo-new-messages": "汝有新其信息",
"echo-category-title-edit-user-talk": "討論頁 {{PLURAL:$1|條}}信息",
@@ -32,12 +31,13 @@
"echo-category-title-mention": "提遘{{PLURAL:$1|回}}",
"echo-category-title-other": "{{PLURAL:$1|其它}}",
"echo-category-title-system": "{{PLURAL:$1|萆系統}}",
- "echo-pref-tooltip-edit-user-talk": "有儂敆我其用戶頁回覆其辰候通知我。",
- "echo-pref-tooltip-article-linked": "有儂鏈接我趁論文頁面創建其頁面其辰候通知我。",
+ "echo-pref-tooltip-edit-user-talk": "有儂敆我其用戶頁發信息或者回覆其辰候通知我。",
+ "echo-pref-tooltip-article-linked": "有儂鏈接我趁另外蜀頁創建其頁面其辰候通知我。",
"echo-pref-tooltip-reverted": "有儂使撤銷或者回滾工具回退我其修改其辰候通知我。",
"echo-pref-tooltip-mention": "有儂鏈接遘我其用戶頁其辰候通知我。",
"echo-error-no-formatter": "未規定通知其格式。",
"notifications": "通知",
+ "tooltip-pt-notifications-alert": "{{GENDER:|Nṳ̄ gì}} tì-sĭng",
"echo-specialpage": "通知",
"echo-anon": "卜想收遘通知,著[$1 開賬號]或者[$2 躒入]。",
"echo-none": "汝無通知。",
@@ -45,15 +45,15 @@
"echo-feedback": "反饋",
"notification-link-text-view-message": "看蜀看信息",
"notification-link-text-view-mention": "看提遘其乇",
- "notification-link-text-view-changes": "看蜀看改變",
+ "notification-link-text-view-changes": "{{GENDER:$1|看蜀看}}改變",
"notification-link-text-view-page": "看蜀看頁面",
"notification-link-text-view-edit": "看蜀看修改",
"notification-header-reverted": "汝{{PLURAL:$4|敆$3上其修改}}已經乞$1{{GENDER:$2|回滾}}。",
"notification-edit-talk-page-email-subject2": "$1敆{{SITENAME}}𡅏給汝{{GENDER:$1|留下}}蜀條信息",
"notification-edit-talk-page-email-batch-body-with-section": "$1敆汝其用戶討論頁其「$2」𡅏{{GENDER:$1|留下}}蜀條信息。",
- "notification-page-linked-email-subject": "汝其頁面鏈遘{{SITENAME}}",
+ "notification-page-linked-email-subject": "汝創建其頁面鏈遘{{SITENAME}}",
"notification-reverted-email-subject2": "汝其{{PLURAL:$3|修改}}敆{{SITENAME}}𡅏乞{{GENDER:$1|回滾}}去",
- "notification-mention-email-subject": "$1敆{{SITENAME}}𡅏{{GENDER:$1|提遘}}汝",
+ "notification-mention-email-subject": "$1敆{{SITENAME}}𡅏{{GENDER:$1|提遘}}{{GENDER:$2|汝}}",
"notification-user-rights-email-subject": "汝其用戶權利敆{{SITENAME}}𡅏乞改去了。",
"echo-email-body-default": "汝敆{{SITENAME}}懸頂有新其通知:\n\n$1",
"echo-email-footer-default": "為𡅏控制儂家發給汝其底蜀種電子郵件,檢查汝其喜好:\n{{canonicalurl:{{#special:Preferences}}#mw-prefsection-echo}}\n\n$2:$1",
diff --git a/Echo/i18n/ce.json b/Echo/i18n/ce.json
index 2366b034..e163e40f 100644
--- a/Echo/i18n/ce.json
+++ b/Echo/i18n/ce.json
@@ -12,7 +12,6 @@
"prefs-displaynotifications": "Гуш болу гӀирсаш",
"prefs-echosubscriptions": "ХӀокху хиларах лаьцна хаийта",
"prefs-echocrosswiki": "Кросс-вики дӀахаийтарш",
- "prefs-newmessageindicator": "Керлачу хааман индикатор",
"prefs-blocknotificationslist": "Ӏаьржа могӀам",
"echo-pref-send-me": "Баийта соьга:",
"echo-pref-send-to": "Хаам баийта тӀе:",
@@ -26,8 +25,7 @@
"echo-pref-email-format-html": "HTML",
"echo-pref-email-format-plain-text": "Цхьалхе йоза",
"echo-pref-cross-wiki-notifications": "Кхечу викиш чура хаамаш гайта",
- "echo-pref-notifications-blacklist": "ХӀокху декъашхошкара хаамаш ма гайта. ([[mw:Help:Notifications#mute|мадарра]])",
- "echo-pref-new-message-indicator": "Сан панелан тӀехь гайта хааман индикатор",
+ "echo-pref-notifications-blacklist": "ХӀокху декъашхошкара хаамаш ма гайта. ([[mw:Special:MyLanguage/Help:Notifications#mute|мадарра]])",
"echo-pref-beta-feature-cross-wiki-message": "Дика дина дӀахаийтарш",
"echo-pref-beta-feature-cross-wiki-description": "Жим атта хьажар а, дӀахаийтарийн организаци а. Цуьнца ю кросс-вики-дӀахаийтарш, оцо кхечу викиш чура хаамаш гойту.",
"echo-learn-more": "Цул совнаха хаа",
@@ -76,8 +74,6 @@
"echo-none": "Хьуна хаамаш ца беара.",
"echo-more-info": "Ма-дарра",
"echo-feedback": "ЮхагӀо зӀе",
- "echo-popup-footer-special-page-invitation": "<strong>Мах хадабе карлаяьккхинчу дӀахаийтаран агӀона.</strong> [$2 $1]",
- "echo-popup-footer-special-page-invitation-link": "Керла дизайн а, функцеш а.",
"echo-api-failure": "ДӀахаийтаршка хьажа цаделира.",
"echo-api-failure-cross-wiki": "ДӀаяьккхинчу доменан тӀекхача цало.",
"echo-notification-placeholder": "ДӀахаийтарш дац.",
@@ -111,6 +107,7 @@
"notification-header-mention-article-talkpage": "$1 {{GENDER:$2|хьахийна}} {{GENDER:$3|хьо}} «$4» дийцаре агӀона «$5» дакъа тӀехь.",
"notification-header-mention-article-talkpage-nosection": "$1 {{GENDER:$2|хьахийна}} {{GENDER:$3|хьо}} «$4» дийцаре агӀонгахь.",
"notification-welcome-linktext": "Марша догӀийла",
+ "notification-header-thank-you-1-edit": "Маршалла, {{GENDER:$2|ахьа}} хӀинца дина {{GENDER:$2|хьай}} духхьара нисдар. Баркалла {{GENDER:$2|хьуна}}!",
"notification-link-thank-you-edit": "{{GENDER:$1|Хьан}} нисдар",
"notification-link-text-view-edit": "Нисдаре хьажар",
"notification-link-article-reminder": "АгӀоне хьажар",
diff --git a/Echo/i18n/ckb.json b/Echo/i18n/ckb.json
index 689971bc..94c408f6 100644
--- a/Echo/i18n/ckb.json
+++ b/Echo/i18n/ckb.json
@@ -6,7 +6,8 @@
"Macofe",
"Sarchia",
"Muhammed taha",
- "Lost Whispers"
+ "Lost Whispers",
+ "Épine"
]
},
"echo-desc": "سیستەمی ئاگادارکردنەوەی بەکارھێنەران سەبارەت بە ڕووداوەکان و پەیامەکان",
@@ -14,7 +15,8 @@
"prefs-emailsettings": "ھەڵبژاردەکانی ئیمەیل",
"prefs-displaynotifications": "ھەڵبژاردەکانی پێشاندان",
"prefs-echosubscriptions": "سەبارەت بەم ڕووداوانە ئاگادارم بکە",
- "prefs-newmessageindicator": "نیشاندەری پەیامی نوێ",
+ "prefs-echocrosswiki": "ھۆشداری سەرانسەری",
+ "prefs-blocknotificationslist": "بەکارھێنەرە بێدەنگکراوەکان",
"echo-pref-send-me": "بۆم بنێرە:",
"echo-pref-send-to": "بنێرە بۆ:",
"echo-pref-email-format": "جۆری ئیمەیل:",
@@ -26,46 +28,111 @@
"echo-pref-email-frequency-weekly": "ھەفتەیەک جارێک، پوختەیەکی ئاگادارییەکان",
"echo-pref-email-format-html": "HTML",
"echo-pref-email-format-plain-text": "دەقی ساکار",
- "echo-pref-new-message-indicator": "نیشاندەری پەیامی پەڕەی لێدوان لە تووڵامرازەکەمدا نیشان بدە",
+ "echo-pref-cross-wiki-notifications": "نیشاندانی ھۆشداری ویکییەکانی تر",
+ "echo-pref-notifications-blacklist": "ھۆشداری ئەم بەکارھێنەرانە پیشان مەدە.\n([[mw:Special:MyLanguage/Help:Notifications#mute|زیاتر بزانە]])",
+ "echo-pref-beta-feature-cross-wiki-message": "ھۆشداری پەرەپێدراو",
"echo-learn-more": "زۆرتر بزانە",
+ "echo-log": "لۆگی گشتی",
"echo-new-messages": "پەیامی نوێت ھەیە",
"echo-category-title-edit-user-talk": "{{PLURAL:$1|پەیام|پەیامەکان}}ی پەڕەی لێدوان",
"echo-category-title-article-linked": "{{PLURAL:$1|بەستەر|بەستەرەکان}}ی پەڕە",
"echo-category-title-reverted": "{{PLURAL:$1|گەڕاندنەوە|گەڕاندنەوەکان}}ی دەستکاری",
"echo-category-title-mention": "{{PLURAL:$1|ئاماژە|ئاماژەکان}}",
+ "echo-category-title-mention-failure": "بانگکردنە سەرنەکەوتووەکان",
+ "echo-category-title-mention-success": "بانگکردنە سەرکەوتووەکان",
"echo-category-title-other": "{{PLURAL:$1|دیکە}}",
"echo-category-title-system": "{{PLURAL:$1|سیستەم}}",
"echo-category-title-user-rights": "{{PLURAL:$1|گۆڕانی مافەکانی بەکارھێنەر}}",
"echo-category-title-emailuser": "{{PLURAL:$1|ئیمێل لە بەکارھێنەرێکی ترەوە|ئیمێلەکان لە بەکارھێنارانی ترەوە}}",
+ "echo-category-title-article-reminder": "بیرھێنانەوەی پەڕەکان",
"echo-pref-tooltip-edit-user-talk": "کاتێک کەسێک لە پەڕەی لێدوانمدا پەیامێکی نارد یان وەڵامی دامەوە، ئاگادارم بکە.",
- "echo-pref-tooltip-article-linked": "کاتێک کەسێک لە پەڕەیەکی وتاردا بە پەڕەیەک کە من دروستم کردووە بەستەری دا، ئاگادارم بکە.",
+ "echo-pref-tooltip-article-linked": "ئاگادارم بکەرەوە کاتێک یەکێک لە پەڕەیەکەوە بەستەر دەدات بە پەڕەیەک کە من دروستم کردووە.",
"echo-pref-tooltip-reverted": "کاتێک کەسێک دەستکارییەکی من کردوومە بە ئامرازی پووچەڵکردنەوە یان گەڕاندنەوە دەگەڕێنێتەوە، ئاگادارم بکە.",
"echo-pref-tooltip-mention": "ئاگادارم بکەرەوە، ئەگەر کەسێک بۆ پەڕەی بەکارھێنەریی من بەستەری دانا.",
+ "echo-pref-tooltip-mention-failure": "ئاگادارم بکەرەوە کاتێک نەمتوانی بە سەرکەوتووانە بانگی کەسێک بکەم.",
+ "echo-pref-tooltip-mention-success": "ئاگادارم بکەرەوە کاتێک بە سەرکەوتووانە بانگی کەسێک دەکەم.",
"echo-pref-tooltip-user-rights": "ئاگاداردم بکەرەوە، کاتێک کە کەسێک مافە بەکارھێنەرییەکانم دەگۆڕێت.",
"echo-pref-tooltip-emailuser": "ئاگادارم بەکەرەوە کاتێک کە کەسێک ئیمێلێکم بۆ دەنێرێت.",
+ "echo-pref-tooltip-article-reminder": "لەبارەی ئەم پەڕەیەوە ئاگادارم بکەرەوە کە پرسیم.",
"echo-error-no-formatter": "ھیچ شێوازێک بۆ ئاگاداری دیاری نەکراوە.",
"notifications": "ئاگادارییەکان",
"tooltip-pt-notifications-alert": "{{GENDER:|ھۆشدارەکانت}}",
+ "tooltip-pt-notifications-notice": "{{GENDER:|پەیامەکانت}}",
+ "echo-displaynotificationsconfiguration-notifications-by-category-header": "ئاگادارییەکان بە پۆل",
+ "echo-displaynotificationsconfiguration-enabled-default-header": "بە بنچینەیی کارا کراوە",
+ "echo-displaynotificationsconfiguration-enabled-default-existing-users-legend": "بەکارھێنەرەکانی ئێستا",
+ "echo-displaynotificationsconfiguration-enabled-default-new-users-legend": "بەکارھێنەرە نوێکان",
"echo-specialpage": "ئاگادارییەکان",
+ "echo-specialpage-section-markread": "کۆمەڵەکە وەک خوێندراوە نیشانی بکە",
+ "echo-specialpage-markasread": "ھۆشدار: وەک خوێندراوە نیشانی بکە",
+ "echo-specialpage-pagination-numnotifications": "$1 ھۆشدار",
+ "echo-specialpage-pagination-range": "$1 - $2",
"echo-specialpage-pagefilters-title": "چالاکیی تازە",
"echo-specialpage-pagefilters-subtitle": "پەڕەکانی ئاگادارییە نەخوێندراوەکان",
+ "notificationsmarkread-legend": "دیاریکردنی ھۆشدار وەک خوێنراوە",
"echo-anon": "بۆ وەرگرتنی ئاگادارییەکان، [$1 ھەژمارێک دروست بکە] یان [$2 بچۆ ژوورەوە].",
"echo-none": "ھیچ ئاگادارییەکت نییە.",
"echo-more-info": "زانیاریی زیاتر",
"echo-feedback": "بەردەنگ",
+ "echo-quotation-marks": "«$1»",
"echo-notification-placeholder": "ھیچ ئاگادارییەک نییە.",
+ "echo-notification-loginrequired": "دەبێت بچیتە ژوورەوە بۆ بینینی ھۆشدارەکانت.",
+ "echo-notification-popup-loginrequired": "تکایە بچۆ ژوورەوە بۆ بینینی ھۆشدارەکانت.",
"echo-notification-markasread": "نیشانکردن وەکوو خوێنراو",
"echo-notification-markasunread": "نیشانکردن وەکوو نەخوێنراوە",
"echo-notification-markasread-tooltip": "نیشانکردن وەکوو خوێنراو",
+ "echo-notification-more-options-tooltip": "ھەڵبژاردەی زیاتر",
+ "notification-dynamic-actions-unwatch": "ڕاگرتنی چاودێری لەسەر «$1»",
+ "notification-dynamic-actions-unwatch-confirmation": "پەڕەی «$1» لە پێڕستی چاودێریت دەرکرا",
+ "notification-dynamic-actions-watch-confirmation": "ئێستا چاودێری پەڕەی «$1» دەکەیت",
+ "notification-dynamic-actions-watch-confirmation-description": "دەتوانیت ھەر کاتێک ویستت [$2 ئەم پەڕەیە] لە پێڕستی چاودێریت دەربکەیت.",
+ "notification-link-text-expand-all": "بڵاوکردنەوە",
+ "notification-link-text-expand-alert-count": "بینینی $1 ئاگاداری",
+ "notification-link-text-expand-notice-count": "بینینی $1 ھۆشدار",
+ "notification-link-text-collapse-all": "کۆکردنەوە",
"notification-link-text-view-message": "پەیام ببینە",
"notification-link-text-view-mention": "ئاماژە ببینە",
+ "notification-link-text-view-mention-failure": "{{PLURAL:$1|بینینی بانگکردن|بینینی بانگکردنەکان}}",
"notification-link-text-view-changes": "{{GENDER:$1|دەستکارییەکانی ببینە}}",
"notification-link-text-view-page": "پەڕە ببینە",
+ "notification-header-edit-user-talk": "$1 پەیامێکی لەسەر <strong>پەڕەی وتووێژەکەت</strong> دانا.",
+ "notification-header-edit-user-talk-with-section": "$1 پەیامێکی لەسەر <strong>پەڕەی وتووێژەکەت</strong> دانا لە «<strong>$4</strong>»",
+ "notification-compact-header-edit-user-talk": "$1 پەیامێکی بۆ ناردیت.",
+ "notification-compact-header-edit-user-talk-with-section": "$1 پەیامێکی لە «<strong>$4</strong>» بۆ ناردی.",
+ "notification-header-page-linked": "بەستەرێک لە <strong>$4</strong>ەوە بۆ <strong>$3</strong> درا.",
+ "notification-compact-header-page-linked": "بەستەردرا لە <strong>$1</strong>ەوە.",
+ "notification-bundle-header-page-linked": "بەستەر لە $5 پەڕەوە بۆ <strong>$3</strong> درا.",
+ "notification-link-text-what-links-here": "ھەموو بەستەرەکان بۆ ئەم پەڕەیە",
+ "notification-header-mention-other": "$1 لە <strong>$4</strong>دا لە «<strong>$5</strong>» ئاماژەی پێ کردی.",
+ "notification-header-mention-other-nosection": "$1 لەسەر <strong>$4</strong> بانگی کردیت.",
+ "notification-header-mention-user-talkpage-v2": "$1 لەسەر <strong>پەڕەی لێدوانی $4</strong> بانگی کردیت لە «<strong>$6</strong>».",
+ "notification-header-mention-user-talkpage-nosection": "$1 لەسەر <strong>پەڕەی لێدوانی $4</strong> بانگی کردیت.",
+ "notification-header-mention-agent-talkpage": "$1 ئاماژەی پێت کرد لە <strong>پەڕەی لێدوانەکەیاندا</strong> لە «<strong>$4</strong>",
"notification-header-mention-agent-talkpage-nosection": "$1 {{GENDER:$2|ئاماژەی بە}} {{GENDER:$3|تۆ}} کرد لە پەڕەی <strong>لێدوانەکەی {{GENDER:$2|خۆی|خۆی|خۆیان}}</strong>.",
+ "notification-header-mention-article-talkpage": "$1 لە پەڕەی وتووێژی <strong>$4</strong> ئاماژەی پێت کرد لە بەشی ''<strong>$5</strong>''.",
+ "notification-header-mention-article-talkpage-nosection": "$1 ئاماژەی پێدایت لەسەر پەڕەی وتووێژی <strong>$4</strong>",
+ "notification-header-mention-failure-user-unknown": "بانگکردنەکەی <strong>$3</strong> سەرکەوتوو نەبوو چوونکە بەکارھێنەر نەدۆزرایەوە.",
+ "notification-header-mention-failure-user-anonymous": "بانگکردنەکەی <strong>$3</strong> سەرکەوتوو نەبوو چوونکە بەکارھێنەرەکە نەناسراوە.",
+ "notification-compact-header-mention-failure-user-unknown": "<strong>ناوی بەکارھێنەر بوونی نییر:</strong> $1",
+ "notification-compact-header-mention-failure-user-anonymous": "<strong>ئای-پییەکان ناتواندرێت بانگ بکرێن:</strong> $1",
+ "notification-header-mention-success": "بانگکردنەکەی $3 سەرکەوتوو بوو.",
+ "notification-compact-header-mention-success": "<strong>تۆ بانگی</strong> $3ت کرد.",
+ "notification-header-user-rights-add-only": "مافەکانی بەکارھێنەرت گۆڕان. تۆ بۆ $2 زیاد کرایت.",
+ "notification-header-user-rights-remove-only": "مافەکانی بەکارھێنەرت گۆڕان. تۆ چی تر ئەندامی $2 نیت.",
+ "notification-header-user-rights-add-and-remove": "مافەکانی بەکارھێنەرت گۆڕان. تۆ بۆ $2 زیاد کرایت، بەڵام چی تر ئەندامی $4 نیت.",
"notification-header-welcome": "$1، {{GENDER:$2|بەخێربێیت}} بۆ {{SITENAME}}! خۆشحاڵین کە {{GENDER:$2|ھاتوویت}} بۆ ئێرە.",
+ "notification-header-mention-summary": "$1 لە کورتەی دەستکارییەکان بانگی کردیت لە <strong>$4</strong>دا.",
"notification-welcome-linktext": "بەخێربێیت",
+ "notification-header-thank-you-1-edit": "تۆ یەکەم دەستکاریت ئەنجام دا؛ بەخێربێیت!",
+ "notification-header-thank-you-10-edit": "تۆ دەیەم دەستکاریت ئەنجام دا؛ سوپاس بۆ تۆ، بە ھیوای بەردەوامی!",
+ "notification-header-thank-you-100-edit": "تۆ سەیەم دەستکاریت ئەنجام دا؛ زۆر سوپاس بۆ تۆ!",
+ "notification-header-thank-you-1000-edit": "تۆ ھەزارەم دەستکاریت ئەنجام دا؛ سوپاس بۆ ھەموو خزمەتەکانت!",
+ "notification-header-thank-you-10000-edit": "ژمارەی دەستکارییەکانت گەیشتنە دە ھەزار دەستکاری؛ سوپاس و پێزانین بۆ تۆی تێکۆشەر!",
+ "notification-header-thank-you-100000-edit": "ژمارەی دەستکارییەکانت گەیشینە سەد ھەزار دەستکاری! بەڕاستی تۆ بەشداربوویەکی نەبەزیت!",
+ "notification-link-thank-you-edit": "{{GENDER:$1|دەستکارییەکەت}}",
"notification-link-text-view-edit": "دەستکاری ببینە",
- "notification-header-reverted": "{{PLURAL:$4|دەستکارییەکەت|دەستکارییەکانت}} لە $3دا لە لایەن $1ەوە {{GENDER:$2|گەڕێنرایەوە}}.",
+ "notification-link-article-reminder": "بینینی پەڕە",
+ "notification-header-reverted": "{{PLURAL:$4|دەستکارییەکەت|دەستکارییەکانت}} لە $3دا لە لایەن $1ەوە {{GENDER:$2|گەڕێندرایەوە}}.",
"notification-header-emailuser": "$1 ئیمێلێکی بۆ {{GENDER:$2|ناردی}}.",
"notification-edit-talk-page-email-subject2": "$1 لە {{SITENAME}}دا پەیامێکی بۆ ناردی.",
"notification-edit-talk-page-email-batch-body-with-section": "$1 لە پەڕەی لێدوانت لە «$2»دا پەیامێکی نارد.",
@@ -73,12 +140,25 @@
"notification-reverted-email-subject2": "{{PLURAL:$3|دەستکارییەکەت|دەستکارییەکانت}} لە {{SITENAME}}دا {{GENDER:$1|گەڕێنرایەوە}}",
"notification-mention-email-subject": "$1 لە {{SITENAME}}دا ئاماژەی پێ‌کردی.",
"notification-user-rights-email-subject": "مافەکانی بەکارھێنەریت لە {{SITENAME}}دا گۆڕدرا.",
+ "notification-timestamp-ago-seconds": "$1چ",
+ "notification-timestamp-ago-minutes": "$1خ",
+ "notification-timestamp-ago-hours": "$1س",
+ "notification-timestamp-ago-days": "$1ڕ",
+ "notification-timestamp-ago-months": "$1م",
+ "notification-timestamp-ago-years": "$1سا",
+ "notification-timestamp-today": "ئەمڕۆ",
+ "notification-timestamp-yesterday": "دوێنێ",
"notification-inbox-filter-read": "خوێندنەوە",
"notification-inbox-filter-unread": "نەخوێنراوە",
"notification-inbox-filter-all": "ھەموو",
"echo-email-body-default": "ئاگادارییەکی نوێت ھەیە لە {{SITENAME}}:\n\n$1",
- "echo-email-footer-default": "$2\n\nبۆ کۆنترۆڵی ئەو ئیمەیلانەی بۆت دەنێرین، ھەڵبژاردەکانت تاوتوێ بکە:\n{{canonicalurl:{{#special:Preferences}}#mw-prefsection-echo}}\n\n$1",
+ "echo-email-footer-default-html": "بۆ کۆنترۆڵکردنی ئەو پۆستە ئەلیکترۆنییانەی بۆتی دەنێرین، <a href=\"$2\" style=\"text-decoration:none; color: #3868B0;\">ھەڵبژاردەکانت تاووتوێ بکە</a>.<br />\n$1",
+ "echo-email-footer-default": "$2\n\nبۆ کۆنترۆڵی ئەو ئیمەیلانەی بۆت دەنێرین، ھەڵبژاردەکانت تاووتوێ بکە:\n{{canonicalurl:{{#special:Preferences}}#mw-prefsection-echo}}\n\n$1",
+ "echo-email-plain-footer": "بۆ کۆنترۆڵکردنی ئەو پۆستە ئەلیکترۆنییانەی بۆتی دەنێرین، سەیری ھەڵبژاردەکانت بکە:",
+ "echo-email-html-footer-preference-link-text": "{{GENDER:$1|ھەڵبژاردەکانت}} ببینە",
+ "echo-email-html-footer-with-link": "بۆ کۆنترۆڵکردنی ئەو پۆستە ئەلیکترۆنییانەی بۆتی دەنێرین، $1.",
"echo-notification-alert-text-only": "ھۆشدارەکان",
+ "echo-notification-notice-text-only": "ھۆشدارەکان",
"echo-overlay-link": "ھەموو ئاگادارییەکان",
"echo-overlay-title": "<b>ئاگادارییەکان</b>",
"echo-overlay-title-overflow": "<b>{{PLURAL:$1|ئاگادارییەکان}}</b> (نیشاندانی $1 لە $2ی نەخوێنراو)",
@@ -86,9 +166,12 @@
"echo-date-today": "ئەمڕۆ",
"echo-date-yesterday": "دوێنێ",
"echo-load-more-error": "ھەڵەیەک لە کاتی وەرگرتنی ئاکامی زیاتر ڕووی دا.",
+ "notification-bundle-header-edit-user-talk-v2": "{{PLURAL:$1|پەیامێکی نوێ|$1 پەیامی نوێ|100=99+ پەیامی نوێ}} داندرا لەسەر <strong>پەڕەی وتووێژەکەت</strong>.",
"echo-email-batch-subject-daily": "لە {{SITENAME}}دا {{PLURAL:$2|ئاگادارییەکی نوێت|ئاگاداریی نوێت}} ھەیە",
"echo-email-batch-subject-weekly": "لە {{SITENAME}}دا {{PLURAL:$2|ئاگادارییەکی نوێت|ئاگاداریی نوێت}} لەم حەفتەیەدا ھەیە",
"echo-email-batch-body-intro-daily": "سڵاو $1،\nئەمە کۆرتەیەکە لە چالاکییەکانی ئەمرۆی {{SITENAME}} بۆ تۆ.",
"echo-email-batch-body-intro-weekly": "سڵاو $1،\nئەمە کۆرتەیەکە لە چالاکییەکانی حەفتانەی {{SITENAME}} بۆ تۆ.",
- "echo-email-batch-link-text-view-all-notifications": "ھەموو ئاگادارییەکان ببینە"
+ "echo-email-batch-link-text-view-all-notifications": "ھەموو ئاگادارییەکان ببینە",
+ "notification-header-foreign-alert": "ئاگاداری زیاتر لە ویکی تر",
+ "echo-foreign-wiki-lang": "$1 - $2"
}
diff --git a/Echo/i18n/cs.json b/Echo/i18n/cs.json
index d9e00ef4..84f5fcc1 100644
--- a/Echo/i18n/cs.json
+++ b/Echo/i18n/cs.json
@@ -12,7 +12,8 @@
"Dvorapa",
"Danny B.",
"Meliganai",
- "Martin Urbanec"
+ "Martin Urbanec",
+ "Ilimanaq29"
]
},
"echo-desc": "Systém pro upozorňování uživatelů na události a zprávy",
@@ -21,7 +22,6 @@
"prefs-displaynotifications": "Možnosti zobrazení",
"prefs-echosubscriptions": "Upozorněte mě na…",
"prefs-echocrosswiki": "Upozornění napříč projekty",
- "prefs-newmessageindicator": "Indikátor nových zpráv",
"prefs-blocknotificationslist": "Ztlumení uživatelé",
"echo-pref-send-me": "Posílejte mi:",
"echo-pref-send-to": "Posílat na:",
@@ -35,8 +35,7 @@
"echo-pref-email-format-html": "HTML",
"echo-pref-email-format-plain-text": "Prostý text",
"echo-pref-cross-wiki-notifications": "Zobrazovat upozornění z jiných wiki",
- "echo-pref-notifications-blacklist": "Nezobrazovat notifikace od těchto uživatelů. ([[mw:Help:Notifications#mute|dozvědět se více]])",
- "echo-pref-new-message-indicator": "Zobrazit indikátor diskusních zpráv v mém panelu nástrojů",
+ "echo-pref-notifications-blacklist": "Nezobrazovat notifikace od těchto uživatelů. ([[mw:Special:MyLanguage/Help:Notifications#mute|dozvědět se více]])",
"echo-pref-beta-feature-cross-wiki-message": "Vylepšená upozornění",
"echo-pref-beta-feature-cross-wiki-description": "Prohlížejte si a organizujte upozornění snadněji. Zahrnuje upozornění napříč wikiprojekty, což vám umožňuje vidět zprávy z jiných wiki. (Abyste na dané wiki přijímali upozornění napříč wikiprojekty, musíte na té wiki zapnout tuto betafunkci.)",
"echo-learn-more": "Další informace",
@@ -61,6 +60,7 @@
"echo-pref-tooltip-mention-success": "Upozorněte mě, když někomu odešlu zmínku.",
"echo-pref-tooltip-user-rights": "Upozorněte mě, když někdo změní moje uživatelská práva.",
"echo-pref-tooltip-emailuser": "Upozorněte mě, když mi někdo pošle e-mail.",
+ "echo-pref-tooltip-article-reminder": "Upozorněte mě na tuto stránku, když požádám.",
"echo-error-no-formatter": "Upozornění nemá definováno formátování.",
"notifications": "Upozornění",
"tooltip-pt-notifications-alert": "{{GENDER:|Vaše}} upozornění",
@@ -90,8 +90,6 @@
"echo-none": "Nemáte žádná upozornění.",
"echo-more-info": "Více informací",
"echo-feedback": "Názor",
- "echo-popup-footer-special-page-invitation": "<strong>Vyzkoušejte přepracovanou stránku s upozorněními.</strong> [$2 $1]",
- "echo-popup-footer-special-page-invitation-link": "Včetně nového vzhledu a funkcí.",
"echo-quotation-marks": "„$1“",
"echo-api-failure": "Nepodařilo se načíst oznámení.",
"echo-api-failure-cross-wiki": "Přístup ke vzdálené doméně byl odepřen.",
@@ -121,6 +119,8 @@
"notification-link-text-view-page": "Zobrazit stránku",
"notification-header-edit-user-talk": "$1 {{GENDER:$3|vám}} {{GENDER:$2|napsal|napsala}} na <strong>vaši diskusní stránku</strong>.",
"notification-header-edit-user-talk-with-section": "$1 {{GENDER:$3|vám}} {{GENDER:$2|napsal|napsala}} na <strong>vaši diskusní stránku</strong> k „<strong>$4</strong>“.",
+ "notification-compact-header-edit-user-talk": "$1 {{GENDER:$3|vám}} {{GENDER:$2|napsal|napsala|napsal(a)}} zprávu.",
+ "notification-compact-header-edit-user-talk-with-section": "$1 {{GENDER:$3|vám}} {{GENDER:$2|napsal|napsala|napsal(a)}} zprávu k „<strong>$4</strong>“.",
"notification-body-edit-user-talk-with-section": "$1",
"notification-header-page-linked": "Ze stránky <strong>$4</strong> byl vytvořen odkaz na stránku <strong>$3</strong>.",
"notification-compact-header-page-linked": "Ze stránky <strong>$1</strong>.",
@@ -150,14 +150,15 @@
"notification-header-user-rights-add-and-remove": "Vaše uživatelská práva byla {{GENDER:$1|změněna}}. Nyní patříte do: $2. Už nejste {{GENDER:$6|členem|členkou}}: $4.",
"notification-header-user-rights-expiry-change": "Čas vypršení {{GENDER:$4|vašeho}} členství v {{PLURAL:$3|následující skupině|následujících skupinách}} byl {{GENDER:$1|změněn}}: $2.",
"notification-header-welcome": "Vítejte na {{GRAMMAR:6sg|{{SITENAME}}}}, {{GENDER:$2|uživateli|uživatelko}} $1! Jsme rádi, že jste zde.",
+ "notification-header-mention-summary": "$1 {{GENDER:$3|vás}} {{GENDER:$2|zmínil|zmínila}} ve shrnutí editace stránky <strong>$4</strong>.",
"notification-welcome-linktext": "Vítejte",
- "notification-header-thank-you-1-edit": "Právě jste {{GENDER:$2|provedl|provedla}} svou první editaci. Díky a vítejte!",
+ "notification-header-thank-you-1-edit": "Právě jste {{GENDER:$2|provedl|provedla}} svou první editaci. Děkujeme a vítejte!",
"notification-header-thank-you-10-edit": "Právě jste {{GENDER:$2|provedl|provedla}} svou desátou editaci. Díky a jen tak dál!",
"notification-header-thank-you-100-edit": "Právě jste {{GENDER:$2|provedl|provedla}} svou stou editaci. Velké díky!",
- "notification-header-thank-you-1000-edit": "Právě jste {{GENDER:$2|provedl|provedla}} svou tisící editaci. Díky, jste {{GENDER:$2|skvělý přispěvatel|skvělá přispěvatelka}}!",
+ "notification-header-thank-you-1000-edit": "Právě jste {{GENDER:$2|provedl|provedla}} svou tisící editaci. Děkujeme, jste {{GENDER:$2|skvělý přispěvatel|skvělá přispěvatelka}}!",
"notification-header-thank-you-10000-edit": "Právě jste {{GENDER:$2|provedl|provedla}} svou desetitisící editaci. Velmi velké díky!",
- "notification-header-thank-you-100000-edit": "Právě jste {{GENDER:$2|provedl|provedla}} svou stotisící editaci. Díky za váš úžasný příspěvek!",
- "notification-header-thank-you-1000000-edit": "Právě jste {{GENDER:$2|provedl|provedla}} svou miliontou editaci. Díky za váš ohromující příspěvek!",
+ "notification-header-thank-you-100000-edit": "Právě jste {{GENDER:$2|provedl|provedla}} svou stotisící editaci. Děkujeme za váš úžasný příspěvek!",
+ "notification-header-thank-you-1000000-edit": "Právě jste {{GENDER:$2|provedl|provedla}} svou miliontou editaci. Děkujeme za váš ohromující příspěvek!",
"notification-link-thank-you-edit": "{{GENDER:$1|Vaše}} editace",
"notification-link-text-view-edit": "Zobrazit editaci",
"notification-link-article-reminder": "Zobrazit stránku",
diff --git a/Echo/i18n/cu.json b/Echo/i18n/cu.json
index 7b4b7369..98778d0e 100644
--- a/Echo/i18n/cu.json
+++ b/Echo/i18n/cu.json
@@ -8,9 +8,7 @@
"echo-category-title-edit-user-talk": "{{PLURAL:$1|напьсаниѥ|напьсании|напьсаниꙗ}} бєсѣдꙑ страницѣ",
"echo-category-title-system": "{{PLURAL:$1|сѷстима}}",
"tooltip-pt-notifications-alert": "{{GENDER:|твоѩ}} повѣщєниꙗ",
- "notification-edit-talk-page2": "[[User:$1|$1]] {{GENDER:$1|напьса}} твоѥи [[User talk:$2#$3|бєсѣдꙑ страници]]",
- "notification-header-edit-user-talk-with-section": "$1 {{GENDER:$2|напьса}} {{GENDER:$3|твоѥи}} бєсѣдꙑ страници въ чѧсти ⁖ $4 ⁖",
- "notification-add-talkpage-topic2": "[[User:$1|$1]] новоу бєсѣдꙑ чѧсть имєньмь ⁖ $2 ⁖ {{GENDER:$1|почѧ}} страници ⁖ [[$3]] ⁖",
+ "notification-header-edit-user-talk-with-section": "$1 {{GENDER:$2|напьса}} на <strong>{{GENDER:$3|твоѥи}}</strong> бєсѣдꙑ страници въ чѧсти ⁖ <strong>$4</strong> ⁖",
"echo-date-today": "дьньсь",
"echo-date-yesterday": "вьчєра"
}
diff --git a/Echo/i18n/cy.json b/Echo/i18n/cy.json
index 50731042..c842d501 100644
--- a/Echo/i18n/cy.json
+++ b/Echo/i18n/cy.json
@@ -11,7 +11,6 @@
"prefs-emailsettings": "Dewisiadau ebost",
"prefs-displaynotifications": "Dewisiadau arddangos",
"prefs-echosubscriptions": "Hysbyswch fi am y digwyddiadau hyn",
- "prefs-newmessageindicator": "Arwyddo negeseuon newydd",
"echo-pref-send-me": "Anfon ataf:",
"echo-pref-send-to": "Anfon at:",
"echo-pref-email-format": "Fformat yr ebost:",
@@ -23,7 +22,6 @@
"echo-pref-email-frequency-weekly": "Crynodeb wythnosol o'r hysbysiadau",
"echo-pref-email-format-html": "HTML",
"echo-pref-email-format-plain-text": "Testun plaen",
- "echo-pref-new-message-indicator": "Dangos arwydd bod neges newydd ar fy nhudalen sgwrs yn fy mar offer",
"echo-learn-more": "Darllen mwy",
"echo-new-messages": "Mae negeseuon newydd gennych",
"echo-category-title-edit-user-talk": "{{PLURAL:$1|negeseuon}} ar dudalennau sgwrs",
diff --git a/Echo/i18n/da.json b/Echo/i18n/da.json
index e96aaaa4..923b0594 100644
--- a/Echo/i18n/da.json
+++ b/Echo/i18n/da.json
@@ -10,7 +10,9 @@
"Cgtdk",
"Macofe",
"Simeondahl",
- "SimmeD"
+ "SimmeD",
+ "EeveeSylveon",
+ "Saederup92"
]
},
"echo-desc": "System til at give brugere besked om handlinger og meddelelser",
@@ -18,7 +20,7 @@
"prefs-emailsettings": "E-mailindstillinger",
"prefs-displaynotifications": "Indstillinger for visning",
"prefs-echosubscriptions": "Giv mig en meddelelse ved følgende hændelser",
- "prefs-newmessageindicator": "Indikator for nye meddelelser",
+ "prefs-blocknotificationslist": "Ignorerede brugere",
"echo-pref-send-me": "Send mig:",
"echo-pref-send-to": "Send til:",
"echo-pref-email-format": "E-mailformat:",
@@ -31,7 +33,6 @@
"echo-pref-email-format-html": "HTML",
"echo-pref-email-format-plain-text": "Plain text",
"echo-pref-cross-wiki-notifications": "Vis notifikationer fra andre wikier",
- "echo-pref-new-message-indicator": "Vis indikator for meddelelser på diskussionssiden i min værktøjslinje",
"echo-learn-more": "Find ud af mere",
"echo-log": "Offentlig log",
"echo-new-messages": "Du har nye beskeder",
@@ -52,15 +53,27 @@
"notifications": "Meddelelser",
"tooltip-pt-notifications-alert": "{{GENDER:|Dine}} alarmer",
"tooltip-pt-notifications-notice": "{{GENDER:|Dine}} meddelelser",
+ "echo-displaynotificationsconfiguration-enabled-default-header": "Aktiveret som standard",
+ "echo-displaynotificationsconfiguration-enabled-default-existing-users-legend": "Eksisterende brugere",
+ "echo-displaynotificationsconfiguration-enabled-default-new-users-legend": "Nye brugere",
"echo-specialpage": "Meddelelser",
+ "echo-specialpage-section-markread": "Mærk gruppe som læst",
+ "echo-specialpage-markasread": "Notifikation: Mærk som læst",
+ "echo-specialpage-pagefilters-title": "Nylig aktivitet",
"echo-specialpage-pagefilters-subtitle": "Sider med ulæste meddelelser",
+ "notificationsmarkread-legend": "Mærk notifikation som læst",
"echo-anon": "For at modtage meddelelser skal du [$1 oprette en konto] eller [$2 logge ind].",
"echo-none": "Du har ingen meddelelser.",
"echo-more-info": "Mere information",
"echo-feedback": "Feedback",
+ "echo-notification-markasread": "Mærk som læst",
+ "echo-notification-markasunread": "Marker som ulæst",
+ "echo-notification-markasread-tooltip": "Marker som læst",
+ "notification-link-text-expand-all": "Udvid",
+ "notification-link-text-collapse-all": "Sammenfold",
"notification-link-text-view-message": "Vis besked",
"notification-link-text-view-mention": "Se omtale",
- "notification-link-text-view-changes": "Se ændringer",
+ "notification-link-text-view-changes": "{{GENDER:$1|Se}} ændringer",
"notification-link-text-view-page": "Se side",
"notification-header-edit-user-talk": "$1 {{GENDER:$2|efterlod}} en meddelelse på <strong>{{GENDER:$3|din}} diskussionsside</strong>.",
"notification-header-page-linked": "Der blev oprettet et link fra <strong>$4</strong> til <strong>$3</strong>",
@@ -72,17 +85,25 @@
"notification-header-user-rights-remove-only": "{{GENDER:$4|Dine}} brugerrettigheder blev {{GENDER:$1|ændret}}. Du er ikke længere medlem af: $2.",
"notification-header-user-rights-add-and-remove": "{{GENDER:$6|Dine}} brugerrettigheder blev {{GENDER:$1|Ændret}}. Du er blevet tilføjet til: $2. Du er ikke længere medlem af: $4.",
"notification-header-welcome": "{{GENDER:$2|Velkommen}} til {{SITENAME}}, $1! Vi er glade for {{GENDER:$2|du}} er her.",
+ "notification-header-mention-summary": "$1 {{GENDER:$2|nævnte}} {{GENDER:$3|dig}} i en redigeringsopsummering på <strong>$4</strong>.",
"notification-welcome-linktext": "Velkommen",
+ "notification-header-thank-you-1-edit": "{{GENDER:$2|Du}} har lige lavet {{GENDER:$2|din}} første redigering; mange {{GENDER:$2|tak}}, og velkommen!",
"notification-link-text-view-edit": "Se redigering",
+ "notification-link-article-reminder": "Vis side",
"notification-header-reverted": "{{PLURAL:$4|Din redigering af <strong>$3</strong> er blevet tilbagestillet|Dine redigeringer af <strong>$3</strong> er blevet tilbagestillede}} af $2",
+ "notification-header-emailuser": "$1 {{GENDER:$2|sendte}} dig en email.",
"notification-edit-talk-page-email-subject2": "$1 lagde en besked til dig på {{SITENAME}}",
"notification-edit-talk-page-email-batch-body-with-section": "$1 lagde en besked på din diskussionsside i \"$2\".",
"notification-page-linked-email-subject": "En side som du oprettede blev henvist til på {{SITENAME}}",
"notification-reverted-email-subject2": "{{PLURAL:$3|Din redigering blev|Dine redigeringer blev}} {{GENDER:$1|omgjort}} på {{SITENAME}}",
- "notification-mention-email-subject": "$1 omtalte dig på {{SITENAME}}",
+ "notification-mention-email-subject": "$1 {{GENDER:$1|omtalte}} {{GENDER:$2|dig}} på {{SITENAME}}",
"notification-user-rights-email-subject": "Dine brugerrettigheder er blevet ændret på {{SITENAME}}",
+ "notification-timestamp-ago-hours": "{{PLURAL:$1|$1t}}",
"notification-timestamp-today": "I dag",
+ "notification-timestamp-yesterday": "I går",
"notification-inbox-filter-read": "Læs",
+ "notification-inbox-filter-unread": "Ulæste",
+ "notification-inbox-filter-all": "Alle",
"echo-email-body-default": "Der er en ny meddelelse til dig på {{SITENAME}}\n\n$1",
"echo-email-footer-default": "$2\n\nTjek dine indstillinger for at se hvilke e-mails vi sender til dig:\n{{canonicalurl:{{#special:Preferences}}#mw-prefsection-echo}}\n\n$1",
"echo-notification-alert": "{{PLURAL:$1|Meddelelse ($1)|Meddelelser ($1)|100=Meddelelser (99+)}}",
diff --git a/Echo/i18n/de-formal.json b/Echo/i18n/de-formal.json
index 387ba577..daeb3b57 100644
--- a/Echo/i18n/de-formal.json
+++ b/Echo/i18n/de-formal.json
@@ -7,12 +7,6 @@
"echo-new-messages": "Sie haben neue Nachrichten",
"tooltip-pt-notifications-alert": "{{GENDER:|Ihre}} Meldungen",
"echo-none": "Sie haben in letzter Zeit keine Benachrichtigungen erhalten.",
- "notification-user-rights": "Ihre Benutzerrechte wurden von [[User:$1|$1]] [[Special:Log/rights/$1|{{GENDER:$1|geändert}}]]. $2. [[Special:ListGroupRights|Weitere Informationen …]]",
- "notification-user-rights-flyout": "Ihre Benutzerrechte wurden von $1 {{GENDER:$1|geändert}}. $2. [[Special:ListGroupRights|Weitere Informationen …]]",
- "notification-user-rights-add": "Sie sind jetzt Mitglied dieser {{PLURAL:$2|Benutzergruppe|Benutzergruppen}}: $1",
- "notification-user-rights-remove": "Sie sind nicht länger Mitglied dieser {{PLURAL:$2|Benutzergruppe|Benutzergruppen}}: $1",
- "notification-new-user": "Willkommen bei {{SITENAME}}, $1! Wir freuen uns, dass Sie hier sind.",
"notification-user-rights-email-subject": "Ihre Benutzerrechte auf „{{SITENAME}}“ wurden geändert.",
- "notification-user-rights-email-batch-body": "Ihre Benutzerrechte wurden von $1 {{GENDER:$1|geändert}}. $2",
"echo-email-footer-default": "$2\n\nUm zu steuern, welche E-Mails wir Ihnen senden, nutzen Sie Ihre Einstellungen:\n{{canonicalurl:{{#special:Preferences}}#mw-prefsection-echo}}\n\n$1"
}
diff --git a/Echo/i18n/de.json b/Echo/i18n/de.json
index 34d0e7ac..d189967e 100644
--- a/Echo/i18n/de.json
+++ b/Echo/i18n/de.json
@@ -12,7 +12,8 @@
"Predatorix",
"FriedhelmW",
"MGChecker",
- "Vogone"
+ "Vogone",
+ "DerHexer"
]
},
"echo-desc": "Stellt ein System zur Benachrichtigung von Benutzern über Ereignisse und Nachrichten bereit",
@@ -21,7 +22,6 @@
"prefs-displaynotifications": "Anzeigeoptionen",
"prefs-echosubscriptions": "Bei diesen Ereignissen benachrichtigen",
"prefs-echocrosswiki": "Wikiübergreifende Benachrichtigungen",
- "prefs-newmessageindicator": "Hinweise zu neuen Nachrichten",
"prefs-blocknotificationslist": "Ignorierte Benutzer",
"echo-pref-send-me": "Sende mir:",
"echo-pref-send-to": "Sende an:",
@@ -35,8 +35,7 @@
"echo-pref-email-format-html": "HTML",
"echo-pref-email-format-plain-text": "Nur Text",
"echo-pref-cross-wiki-notifications": "Benachrichtigungen von anderen Wikis anzeigen",
- "echo-pref-notifications-blacklist": "Benachrichtigungen von diesen Benutzern nicht anzeigen ([[mw:Help:Notifications#mute|mehr erfahren]]).",
- "echo-pref-new-message-indicator": "Hinweise zu neuen Nachrichten in meiner Benutzerleiste anzeigen",
+ "echo-pref-notifications-blacklist": "Benachrichtigungen von diesen Benutzern nicht anzeigen ([[mw:Special:MyLanguage/Help:Notifications#mute|mehr erfahren]]).",
"echo-pref-beta-feature-cross-wiki-message": "Erweiterte Benachrichtigungen",
"echo-pref-beta-feature-cross-wiki-description": "Betrachte und organisiere deine Benachrichtigungen einfacher. Beinhaltet wikiübergreifende Benachrichtigungen, die dich Nachrichten von anderen Wikis sehen lassen. Um wikiübergreifende Benachrichtigungen auf einem angegebenen Wiki zu erhalten, musst du die entsprechende Beta-Funktion auf diesem Wiki aktivieren.",
"echo-learn-more": "Mehr erfahren",
@@ -91,8 +90,6 @@
"echo-none": "Du hast keine Benachrichtigungen.",
"echo-more-info": "Mehr Informationen",
"echo-feedback": "Rückmeldungen",
- "echo-popup-footer-special-page-invitation": "<strong>Teste die neu gestaltete Benachrichtigungsseite.</strong> [$2 $1]",
- "echo-popup-footer-special-page-invitation-link": "Mit neuem Aussehen und neuen Funktionen.",
"echo-api-failure": "Benachrichtigungen konnten nicht abgerufen werden.",
"echo-api-failure-cross-wiki": "Der Zugriff auf die Remote-Domäne wurde abgelehnt.",
"echo-notification-placeholder": "Es gibt keine Benachrichtigungen.",
@@ -121,6 +118,8 @@
"notification-link-text-view-page": "Seite ansehen",
"notification-header-edit-user-talk": "$1 {{GENDER:$2|hinterließ}} eine Nachricht auf <strong>{{GENDER:$3|deiner}} Diskussionsseite</strong>.",
"notification-header-edit-user-talk-with-section": "$1 {{GENDER:$2|hinterließ}} eine Nachricht auf <strong>{{GENDER:$3|deiner}} Diskussionsseite</strong> in „<strong>$4</strong>“.",
+ "notification-compact-header-edit-user-talk": "$1 {{GENDER:$2|hinterließ}} {{GENDER:$3|dir}} eine Nachricht.",
+ "notification-compact-header-edit-user-talk-with-section": "$1 {{GENDER:$2|hinterließ}} {{GENDER:$3|dir}} eine Nachricht in „<strong>$4</strong>“.",
"notification-body-edit-user-talk-with-section": "$1",
"notification-header-page-linked": "Ein Link von <strong>$4</strong> auf <strong>$3</strong> wurde erstellt.",
"notification-compact-header-page-linked": "Verlinkt von <strong>$1</strong>.",
@@ -150,11 +149,12 @@
"notification-header-user-rights-add-and-remove": "{{GENDER:$6|Deine}} Benutzerrechte wurden {{GENDER:$1|geändert}}. Du wurdest hinzugefügt zu: $2. Du bist kein Mitglied mehr von: $4.",
"notification-header-user-rights-expiry-change": "Der Ablauf {{GENDER:$4|deiner}} Mitgliedschaft in {{PLURAL:$3|der folgenden Gruppe|den folgenden Gruppen}} wurde {{GENDER:$1|geändert}}: $2.",
"notification-header-welcome": "{{GENDER:$2|Willkommen}} bei {{SITENAME}}, $1! Wir sind froh, dass {{GENDER:$2|du}} da bist.",
+ "notification-header-mention-summary": "$1 {{GENDER:$2|erwähnte}} {{GENDER:$3|dich}} in einer Bearbeitungszusammenfassung auf <strong>$4</strong>.",
"notification-welcome-linktext": "Willkommen",
"notification-header-thank-you-1-edit": "{{GENDER:$2|Du}} hast gerade {{GENDER:$2|deine}} erste Bearbeitung durchgeführt. {{GENDER:$2|Vielen}} Dank und willkommen!",
"notification-header-thank-you-10-edit": "{{GENDER:$2|Du}} hast gerade {{GENDER:$2|deine}} zehnte Bearbeitung durchgeführt. {{GENDER:$2|Vielen}} Dank! Mach weiter so!",
"notification-header-thank-you-100-edit": "{{GENDER:$2|Du}} hast gerade {{GENDER:$2|deine}} hundertste Bearbeitung durchgeführt. {{GENDER:$2|Vielen}} Dank!",
- "notification-header-thank-you-1000-edit": "{{GENDER:$2|Du}} hast gerade {{GENDER:$2|deine}} tausendste Bearbeitung durchgeführt. {{GENDER:$2|Vielen}} Dank! Du bist ein großartiger Autor!",
+ "notification-header-thank-you-1000-edit": "{{GENDER:$2|Du}} hast gerade {{GENDER:$2|deine}} tausendste Bearbeitung durchgeführt. {{GENDER:$2|Vielen}} Dank! Du bist großartig!",
"notification-header-thank-you-10000-edit": "{{GENDER:$2|Du}} hast gerade {{GENDER:$2|deine}} zehntausendste Bearbeitung durchgeführt. {{GENDER:$2|Vielen}} herzlichen Dank!",
"notification-header-thank-you-100000-edit": "{{GENDER:$2|Du}} hast gerade {{GENDER:$2|deine}} hunderttausendste Bearbeitung durchgeführt. {{GENDER:$2|Vielen}} Dank für einen hervorragenden Beitrag!",
"notification-header-thank-you-1000000-edit": "{{GENDER:$2|Du}} hast gerade {{GENDER:$2|deine}} millionste Bearbeitung durchgeführt. {{GENDER:$2|Vielen}} Dank für einen erstaunlichen Beitrag!",
diff --git a/Echo/i18n/diq.json b/Echo/i18n/diq.json
index d379bf0b..9a71cfc7 100644
--- a/Echo/i18n/diq.json
+++ b/Echo/i18n/diq.json
@@ -16,7 +16,6 @@
"prefs-echo": "Mengeney",
"prefs-emailsettings": "Opsiyona e-posta",
"prefs-displaynotifications": "Weçinayışa mocnayışi",
- "prefs-newmessageindicator": "Tebliğê mesacanê neweyan",
"echo-pref-send-me": "Mı rê bırışe:",
"echo-pref-send-to": "Cı rê bırışe:",
"echo-pref-email-format": "Formata E-posta:",
diff --git a/Echo/i18n/dsb.json b/Echo/i18n/dsb.json
index 02032634..3a92009f 100644
--- a/Echo/i18n/dsb.json
+++ b/Echo/i18n/dsb.json
@@ -9,7 +9,6 @@
"prefs-emailsettings": "E-mailowe nastajenja",
"prefs-displaynotifications": "Zwobraznjowańske nastajenja",
"prefs-echosubscriptions": "Mě wó toś tych tšojenjach informěrowaś",
- "prefs-newmessageindicator": "Nowy powěsćowy indikator",
"echo-pref-send-me": "Pósćel mě:",
"echo-pref-send-to": "Pósłaś na:",
"echo-pref-email-format": "E-mailowy format:",
@@ -21,7 +20,6 @@
"echo-pref-email-frequency-weekly": "Tyźeński pśeglěd powěźeńkow",
"echo-pref-email-format-html": "HTML",
"echo-pref-email-format-plain-text": "Lutny tekst",
- "echo-pref-new-message-indicator": "Powěsćowy indikator diskusijnego boka w symbolowej rědce pokazaś",
"echo-learn-more": "Dalšne informacije",
"echo-new-messages": "Maš nowe powěsći",
"echo-category-title-edit-user-talk": "{{PLURAL:$1|Powěsć|Powěsći}} na diskusijnem boku",
diff --git a/Echo/i18n/el.json b/Echo/i18n/el.json
index 5a5cb84f..134df7ab 100644
--- a/Echo/i18n/el.json
+++ b/Echo/i18n/el.json
@@ -20,7 +20,7 @@
"prefs-displaynotifications": "Επιλογές εμφάνισης",
"prefs-echosubscriptions": "Να ειδοποιούμαι σχετικά με αυτά τα γεγονότα",
"prefs-echocrosswiki": "Cross-wiki ενημερώσεις",
- "prefs-newmessageindicator": "Δείκτης νέων μηνυμάτων",
+ "prefs-blocknotificationslist": "Σιγασμένοι χρήστες",
"echo-pref-send-me": "Στείλτε μου:",
"echo-pref-send-to": "Αποστολή σε:",
"echo-pref-email-format": "Μορφή ηλεκτρονικού ταχυδρομείου:",
@@ -33,7 +33,7 @@
"echo-pref-email-format-html": "HTML",
"echo-pref-email-format-plain-text": "Απλό κείμενο",
"echo-pref-cross-wiki-notifications": "Εμφάνιση ενημερώσεων από άλλα wiki",
- "echo-pref-new-message-indicator": "Να εμφανίζεται, στη γραμμή εργαλείων, ο δείκτης μηνυμάτων της σελίδας συζήτησης",
+ "echo-pref-notifications-blacklist": "Να μην εμφανίζονται ειδοποιήσεις από αυτούς τους χρήστες.([[mw:Special:MyLanguage/Help:Notifications#mute|μάθετε περισσότερα]])",
"echo-pref-beta-feature-cross-wiki-message": "Ενισχυμένες ενημερώσεις",
"echo-pref-beta-feature-cross-wiki-description": "Προβάλετε και οργανώσετε τις ενημερώσεις πιο εύκολα. Περιλαμβάνει cross-wiki ενημερώσεις, οι οποίες σας επιτρέπουν να δείτε μηνύματα από άλλα wiki. (Για να λάβετε cross-wiki ενημερώσεις σχετικά με ένα συγκεκριμένο wiki, θα πρέπει να ενεργοποιήσετε το εργαλείο beta στο συγκεκριμένο wiki.)",
"echo-learn-more": "Μάθετε περισσότερα",
@@ -49,12 +49,16 @@
"echo-category-title-system": "{{PLURAL:$1|Σύστημα}}",
"echo-category-title-user-rights": "{{PLURAL:$1|Αλλαγή δικαιωμάτων χρήστη|Αλλαγές δικαιωμάτων χρήστη}}",
"echo-category-title-emailuser": "{{PLURAL:$1|Email από άλλο χρήστη|Email από άλλους χρήστες}}",
+ "echo-category-title-article-reminder": "{{PLURAL:$1|Υπενθύμιση σελίδας|Υπενθυμίσεις σελίδων}}",
"echo-pref-tooltip-edit-user-talk": "Να ενημερώνομαι όταν κάποιος δημοσιεύσει ένα μήνυμα ή απαντήσεις στη σελίδα συζήτησής μου.",
"echo-pref-tooltip-article-linked": "Να ενημερώνομαι όταν κάποιος συνδέει τη σελίδα που δημιούργησα σε μια σελίδα λήμματος.",
"echo-pref-tooltip-reverted": "Να ενημερώνομαι όταν κάποιος αναστρέφει μια επεξεργασία που έκανα, χρησιμοποιώντας το εργαλείο αναίρεσης ή επαναφοράς.",
"echo-pref-tooltip-mention": "Να ενημερώνομαι όταν κάποιος προσθέτει σύνδεσμο προς τη σελίδα χρήστη μου.",
+ "echo-pref-tooltip-mention-failure": "Να ειδοποιούμαι όταν δεν μπόρεσα να στείλω ειδοποίηση αναφοράς σε κάποιον.",
+ "echo-pref-tooltip-mention-success": "Να ειδοποιούμαι όταν έστειλα ειδοποίηση αναφοράς σε κάποιον.",
"echo-pref-tooltip-user-rights": "Να ενημερώνομαι με όταν κάποιος αλλάζει τα δικαιώματα χρήστη μου.",
"echo-pref-tooltip-emailuser": "Να ενημερώνομαι όταν κάποιος μου στέλνει email.",
+ "echo-pref-tooltip-article-reminder": "Να ειδοποιούμαι για αυτή τη σελίδα όταν το ζητάω.",
"echo-error-no-formatter": "Δεν έχει οριστεί μορφοποίηση για την ενημέρωση.",
"notifications": "Ενημερώσεις",
"tooltip-pt-notifications-alert": "Οι ειδοποιήσεις {{GENDER:|σας}}",
@@ -73,6 +77,7 @@
"echo-displaynotificationsconfiguration-mandatory-notification-methods-header": "Απαιτούμενες μέθοδοι ειδοποίησης",
"echo-displaynotificationsconfiguration-mandatory-notification-methods-by-category-legend": "Ποιές μέθοδοι ειδοποίησης είναι υποχρεωτικές για κάθε κατηγορία",
"echo-specialpage": "Ενημερώσεις",
+ "echo-specialpage-section-markread": "Σήμανση ομάδας ως αναγνωσμένης",
"echo-specialpage-markasread": "Ενημέρωση: Σημείωση ως αναγνωσμένη",
"echo-specialpage-pagination-numnotifications": "$1 {{PLURAL:$1|ενημέρωση|ενημερώσεις}}",
"echo-specialpage-pagefilters-title": "Πρόσφατη δραστηριότητα",
@@ -82,8 +87,6 @@
"echo-none": "Δεν έχετε ενημερώσεις.",
"echo-more-info": "Περισσότερες πληροφορίες",
"echo-feedback": "Ανατροφοδότηση",
- "echo-popup-footer-special-page-invitation": "<strong>Δοκιμάστε την επανασχεδιασμένη σελίδα Ενημερώσεων.</strong> [$2 $1]",
- "echo-popup-footer-special-page-invitation-link": "Πλήρης νέα εμφάνιση και λειτουργίες.",
"echo-api-failure": "Δεν μπόρεσαν να ανακτηθούν ενημερώσεις.",
"echo-api-failure-cross-wiki": "Πρόσβαση στον απομακρυσμένο τομέα απορρίφθηκε.",
"echo-notification-placeholder": "Δεν υπάρχουν ενημερώσεις.",
@@ -110,9 +113,33 @@
"notification-compact-header-page-linked": "Συνδέθηκε από την <strong>$1</strong>.",
"notification-bundle-header-page-linked": "Συνδέσεις έγιναν από {{PLURAL:$5||$5 σελίδες|100=99+ σελίδες}} στην <strong>$3</strong>.",
"notification-link-text-what-links-here": "Όλοι οι σύνδεσμοι προς αυτήν τη σελίδα",
+ "notification-header-mention-other": "{{GENDER:$2|Ο|Η}} $1 {{GENDER:$3|σε}} ανάφερε στη <strong>$4</strong> στο «<strong>$5</strong>».",
+ "notification-header-mention-other-nosection": "{{GENDER:$2|Ο|Η}} $1 {{GENDER:$3|σε}} ανάφερε στη <strong>$4</strong>.",
+ "notification-header-mention-user-talkpage-v2": "{{GENDER:$2|Ο|Η}} $1 {{GENDER:$3|σε}} ανάφερε στη <strong>σελίδα συζήτησης {{GENDER:$5|του|της}} $4</strong> στο «<strong>$6</strong>».",
+ "notification-header-mention-user-talkpage-nosection": "{{GENDER:$2|Ο|Η}} $1 {{GENDER:$3|σε}} ανάφερε στη <strong>σελίδα συζήτησης {{GENDER:$5|του|της}} $4</strong>.",
"notification-header-mention-agent-talkpage": "{{GENDER:$2|Ο|Η}} $1 σας {{GENDER:$3|ανάφερε}} στην <strong>σελίδα συζήτησής {{GENDER:$2|του|της}}</strong> στο «<strong>$4</strong>».",
+ "notification-header-mention-agent-talkpage-nosection": "{{GENDER:$2|Ο|Η}} $1 {{GENDER:$3|σε}} ανάφερε στη <strong>σελίδα συζήτησής {{GENDER:$2|του|της|του}}.",
+ "notification-header-mention-article-talkpage": "{{GENDER:$2|Ο|Η}} $1 {{GENDER:$3|σε}} ανάφερε στη <strong>σελίδα συζήτησης $4</strong> στο «<strong>$5</strong>».",
+ "notification-header-mention-article-talkpage-nosection": "{{GENDER:$2|Ο|Η}} $1 {{GENDER:$3|σε}} ανάφερε στη <strong>σελίδα συζήτησης $4</strong>.",
+ "notification-header-mention-failure-user-unknown": "Η αναφορά {{GENDER:$2|σου}} στον <strong>$3</strong> δεν στάλθηκε επειδή δεν βρέθηκε ο χρήστης.",
+ "notification-header-mention-failure-user-anonymous": "Η αναφορά {{GENDER:$2|σου}} στον <strong>$3</strong> δεν στάλθηκε επειδή ο χρήστης είναι ανώνυμος.",
+ "notification-header-mention-failure-too-many": "{{GENDER:$2|Προσπάθησες}} να αναφέρεις περισσότερους από $3 {{PLURAL:$3|χρήστη|χρήστες}}. Όλες οι αναφορές πάνω από αυτό το όριο δεν στάλθηκαν.",
+ "notification-compact-header-mention-failure-user-unknown": "<strong>Το όνομα χρήστη δεν υπάρχει:</strong> $1",
+ "notification-compact-header-mention-failure-user-anonymous": "<strong>Οι IP δεν μπορούν να αναφερθούν:</strong> $1",
+ "notification-header-mention-success": "Η {{GENDER:$2|αναφορά}} σου {{GENDER:$3|στον|στην}} <strong>$3</strong> έχει σταλεί.",
+ "notification-compact-header-mention-success": "<strong>{{GENDER:$2|Αναφέρατε}}:</strong> $3",
+ "notification-header-mention-summary": "{{GENDER:$2|Ο|Η}} $1 {{GENDER:$3|σας}} ανάφερε στη σύνοψη επεξεργασίας στην <strong>$4</strong>.",
"notification-welcome-linktext": "Καλώς ήρθατε",
+ "notification-header-thank-you-1-edit": "Μόλις {{GENDER:$2|έκανες}} την πρώτη σου επεξεργασία. Σε ευχαριστούμε, και καλώς ήρθες!",
+ "notification-header-thank-you-10-edit": "Μόλις {{GENDER:$2|κάνατε}} την δέκατη επεξεργασία {{GENDER:$2|σας}}. {{GENDER:$2|Σας}} ευχαριστούμε, και παρακαλούμε συνεχίστε!",
+ "notification-header-thank-you-100-edit": "Μόλις {{GENDER:$2|κάνατε}} την εκατοστή επεξεργασία {{GENDER:$2|σας}}. {{GENDER:$2|Σας}} ευχαριστούμε πάρα πολύ!",
+ "notification-header-thank-you-1000-edit": "Μόλις {{GENDER:$2|κάνατε}} την χιλιοστή επεξεργασία {{GENDER:$2|σας}}. {{GENDER:$2|Σας}} ευχαριστούμε για τη μεγάλη συνεισφορά σας!",
+ "notification-header-thank-you-10000-edit": "Μόλις {{GENDER:$2|κάνατε}} την δεκάκις χιλιοστή επεξεργασία {{GENDER:$2|σας}}. {{GENDER:$2|Σας}} ευχαριστούμε πάρα πολύ!",
+ "notification-header-thank-you-100000-edit": "Μόλις {{GENDER:$2|κάνατε}} την εκατοστή χιλιοστή επεξεργασία {{GENDER:$2|σας}}. {{GENDER:$2|Σας}} ευχαριστούμε για την καταπληκτική συνεισφορά!",
+ "notification-header-thank-you-1000000-edit": "Μόλις {{GENDER:$2|κάνατε}} την εκατομμυριοστή επεξεργασία {{GENDER:$2|σας}}. {{GENDER:$2|Σας}} ευχαριστούμε για την εκπληκτική συνεισφορά!",
+ "notification-link-thank-you-edit": "Η επεξεργασία {{GENDER:$1|σας}}",
"notification-link-text-view-edit": "Προβολή επεξεργασίας",
+ "notification-link-article-reminder": "Προβολή σελίδας",
"notification-header-reverted": "{{PLURAL:$4|Η επεξεργασία σας στην <strong>$3</strong> έχει|Οι επεξεργασίες σας στην <strong>$3</strong> έχουν}} {{GENDER:$2|αναστραφεί}}.",
"notification-header-emailuser": "{{GENDER:$2|Ο|Η}} $1 σας έστειλε ένα email.",
"notification-edit-talk-page-email-subject2": "{{GENDER:$1|Ο|Η}} $1 σας άφησε ένα μήνυμα στη {{SITENAME}}",
@@ -128,7 +155,7 @@
"echo-email-body-default": "Έχετε μια νέα ενημέρωση στη {{SITENAME}}:\n\n\n$1",
"echo-email-footer-default-html": "Για να ελέγξετε ποια email σας στέλνουμε, <a href=\"$2\" style=\"text-decoration:none; color: #3868B0;\">ελέγξτε τις προτιμήσεις σας</a>.<br />\n$1",
"echo-email-footer-default": "$2\n\nΓια να ελέγξετε ποια email σας στέλνουμε, πηγαίνετε στις προτιμήσεις σας:\n{{canonicalurl:{{#special:Preferences}}#mw-prefsection-echo}}\n\n$1",
- "echo-email-html-footer-preference-link-text": "ελέγξτε τις προτιμήσεις σας",
+ "echo-email-html-footer-preference-link-text": "ελέγξτε τις προτιμήσεις {{GENDER:$1|σας}}",
"echo-notification-alert": "{{PLURAL:$1|Ειδοποίηση ($1)|Ειδοποιήσεις ($1)|100=Ειδοποιήσεις (99+)}}",
"echo-notification-notice": "{{PLURAL:$1|Προειδοποίηση ($1)|Ανακοινώσεις ($1)|100=Ανακοινώσεις (99+)}}",
"echo-notification-alert-text-only": "Ειδοποιήσεις",
@@ -137,6 +164,8 @@
"echo-overlay-title": "<b>Ενημερώσεις</b>",
"echo-overlay-title-overflow": "<b>{{PLURAL:$1|Ενημέρωση|Ενημερώσεις}}</b> (εμφανίζονται $1 από $2 μη αναγνωσμένες)",
"echo-mark-all-as-read": "Σήμανση όλων ως αναγνωσμένες",
+ "echo-mark-all-as-read-confirmation": "$1 {{PLURAL:$1|ειδοποίηση σημάνθηκε ως αναγνωσμένη|ειδοποιήσεις σημάνθηκαν ως αναγνωσμένες}}",
+ "echo-mark-wiki-as-read": "Σήμανση ως αναγνωσμένο στο επιλεγμένο wiki: $1",
"echo-date-today": "Σήμερα",
"echo-date-yesterday": "Χθες",
"echo-load-more-error": "Παρουσιάστηκε σφάλμα κατά την ανάκτηση περισσότερων αποτελέσματων.",
diff --git a/Echo/i18n/en.json b/Echo/i18n/en.json
index 795a5abf..5c14a87e 100644
--- a/Echo/i18n/en.json
+++ b/Echo/i18n/en.json
@@ -41,7 +41,6 @@
"prefs-displaynotifications": "Display options",
"prefs-echosubscriptions": "Notify me about these events",
"prefs-echocrosswiki": "Cross-wiki notifications",
- "prefs-newmessageindicator": "New message indicator",
"prefs-blocknotificationslist": "Muted users",
"echo-pref-send-me": "Send me:",
"echo-pref-send-to": "Send to:",
@@ -55,8 +54,7 @@
"echo-pref-email-format-html": "HTML",
"echo-pref-email-format-plain-text": "Plain text",
"echo-pref-cross-wiki-notifications": "Show notifications from other wikis",
- "echo-pref-notifications-blacklist": "Do not display notifications from these users. ([[mw:Help:Notifications#mute|learn more]])",
- "echo-pref-new-message-indicator": "Show talk page message indicator in my toolbar",
+ "echo-pref-notifications-blacklist": "Do not display notifications from these users. ([[mw:Special:MyLanguage/Help:Notifications#mute|learn more]])",
"echo-pref-beta-feature-cross-wiki-message": "Enhanced notifications",
"echo-pref-beta-feature-cross-wiki-description": "View and organize notifications more easily. Includes cross-wiki notifications, which lets you see messages from other wikis. (To receive cross-wiki notifications on a given wiki, you must activate the beta feature on that wiki.)",
"echo-learn-more": "Learn more",
@@ -112,8 +110,6 @@
"echo-none": "You have no notifications.",
"echo-more-info": "More info",
"echo-feedback": "Feedback",
- "echo-popup-footer-special-page-invitation": "<strong>Try the redesigned Notifications page.</strong> [$2 $1]",
- "echo-popup-footer-special-page-invitation-link": "All new look and features.",
"echo-quotation-marks": "\"$1\"",
"echo-api-failure": "Failed to fetch notifications.",
"echo-api-failure-cross-wiki": "Access to the remote domain was denied.",
@@ -143,6 +139,8 @@
"notification-link-text-view-page": "View page",
"notification-header-edit-user-talk": "$1 {{GENDER:$2|left}} a message on <strong>{{GENDER:$3|your}} talk page</strong>.",
"notification-header-edit-user-talk-with-section": "$1 {{GENDER:$2|left}} a message on <strong>{{GENDER:$3|your}} talk page</strong> in \"<strong>$4</strong>\".",
+ "notification-compact-header-edit-user-talk": "$1 {{GENDER:$2|left}} {{GENDER:$3|you}} a message.",
+ "notification-compact-header-edit-user-talk-with-section": "$1 {{GENDER:$2|left}} {{GENDER:$3|you}} a message in \"<strong>$4</strong>\".",
"notification-body-edit-user-talk-with-section": "$1",
"notification-header-page-linked": "A link was made from <strong>$4</strong> to <strong>$3</strong>.",
"notification-compact-header-page-linked": "Linked from <strong>$1</strong>.",
@@ -172,8 +170,8 @@
"notification-header-user-rights-remove-only": "{{GENDER:$4|Your}} user rights were {{GENDER:$1|changed}}. You are no longer a member of: $2.",
"notification-header-user-rights-add-and-remove": "{{GENDER:$6|Your}} user rights were {{GENDER:$1|changed}}. You have been added to: $2. You are no longer a member of: $4.",
"notification-header-user-rights-expiry-change": "The expiry of {{GENDER:$4|your}} membership in the following {{PLURAL:$3|group|groups}} has been {{GENDER:$1|changed}}: $2.",
- "notification-body-user-rights": "$1",
"notification-header-welcome": "{{GENDER:$2|Welcome}} to {{SITENAME}}, $1! We're glad {{GENDER:$2|you're}} here.",
+ "notification-header-mention-summary": "$1 {{GENDER:$2|mentioned}} {{GENDER:$3|you}} in an edit summary on <strong>$4</strong>.",
"notification-welcome-link": "",
"notification-welcome-linktext": "Welcome",
"notification-header-thank-you-1-edit": "{{GENDER:$2|You}} just made {{GENDER:$2|your}} first edit; thank {{GENDER:$2|you}}, and welcome!",
diff --git a/Echo/i18n/eo.json b/Echo/i18n/eo.json
index 66bb1d3f..692a815a 100644
--- a/Echo/i18n/eo.json
+++ b/Echo/i18n/eo.json
@@ -8,7 +8,8 @@
"Lucas",
"Macofe",
"Gamliel Fishkin",
- "NMaia"
+ "NMaia",
+ "Joao Xavier"
]
},
"echo-desc": "Sistemo por sciigado uzantojn pri okazaĵoj kaj mesaĝoj",
@@ -17,7 +18,6 @@
"prefs-displaynotifications": "Montraj opcioj",
"prefs-echosubscriptions": "Sciigu min pri tiuj ĉi okazaĵoj",
"prefs-echocrosswiki": "Transvikiaj sciigoj",
- "prefs-newmessageindicator": "Indikilo pri novaj mesaĝoj",
"echo-pref-send-me": "Sendadi al mi:",
"echo-pref-send-to": "Sendadi al:",
"echo-pref-email-format": "Formo de retpoŝto:",
@@ -30,7 +30,6 @@
"echo-pref-email-format-html": "HTML",
"echo-pref-email-format-plain-text": "Ordinara teksto",
"echo-pref-cross-wiki-notifications": "Montri sciigojn el aliaj vikioj",
- "echo-pref-new-message-indicator": "Montri indikilon pri diskutaj mesaĝoj en mia ilobreto",
"echo-pref-beta-feature-cross-wiki-message": "Plibonigitaj sciigoj",
"echo-learn-more": "Lerni plu",
"echo-log": "Publika protokolo",
@@ -55,7 +54,7 @@
"echo-pref-tooltip-emailuser": "Sciigu min kiam iu sendas al mi retpoŝtan mesaĝon.",
"echo-error-no-formatter": "Neniu aranĝo difinita por sciigo.",
"notifications": "Sciigoj",
- "tooltip-pt-notifications-alert": "{{GENDER:|Viaj}} sciigoj",
+ "tooltip-pt-notifications-alert": "{{GENDER:|Viaj}} atentigoj",
"tooltip-pt-notifications-notice": "{{GENDER:|Viaj}} sciigoj",
"echo-displaynotificationsconfiguration-enabled-default-existing-users-legend": "Estantaj uzantoj",
"echo-displaynotificationsconfiguration-enabled-default-new-users-legend": "Novaj uzantoj",
@@ -68,8 +67,6 @@
"echo-none": "Vi ne havas sciigojn.",
"echo-more-info": "Pliaj informoj",
"echo-feedback": "Rimarkoj",
- "echo-popup-footer-special-page-invitation": "<strong>Gustumu la redizajnitan paĝon Sciigoj.</strong> [$2 $1]",
- "echo-popup-footer-special-page-invitation-link": "La tuta nova aspekto kaj ecoj.",
"echo-api-failure": "Ne sukcesis akiri la sciigojn.",
"echo-notification-placeholder": "Ne estas iuj sciigoj.",
"echo-notification-placeholder-filters": "Ne estas sciigoj konformaj al ĉi tiu kriterio.",
@@ -80,7 +77,7 @@
"echo-notification-markasread-tooltip": "Marki kiel legite",
"echo-notification-more-options-tooltip": "Pliaj agordoj",
"notification-link-text-expand-all": "Etendi",
- "notification-link-text-expand-alert-count": "Vidi {{PLURAL:$1|sciigo|$1 sciigoj}}n",
+ "notification-link-text-expand-alert-count": "Vidi {{PLURAL:$1|atentigon|$1 atentigojn}}",
"notification-link-text-expand-notice-count": "Vidi {{PLURAL:$1|sciigo|$1 sciigoj}}n",
"notification-link-text-collapse-all": "Kaŝi",
"notification-link-text-view-message": "Montri mesaĝon",
@@ -141,7 +138,7 @@
"echo-email-footer-default": "$2\n\nPor kontroli kiujn retpoŝtaĵojn ni sendas al vi, kontrolu viajn preferojn:\n{{canonicalurl:{{#special:Preferences}}#mw-prefsection-echo}}\n\n$1",
"echo-email-html-footer-preference-link-text": "kontroli {{GENDER:$1|viajn}} preferojn",
"echo-notification-alert": "{{PLURAL:$1|Atentigo ($1)|Atentigoj ($1)|100=Atentigoj (99+)}}",
- "echo-notification-alert-text-only": "Sciigoj",
+ "echo-notification-alert-text-only": "Atentigoj",
"echo-notification-notice-text-only": "Sciigoj",
"echo-overlay-link": "Ĉiuj sciigoj",
"echo-overlay-title": "<b>Sciigoj</b>",
@@ -156,6 +153,6 @@
"echo-email-batch-body-intro-daily": "Saluton $1,\nĈi tie estas resumo de hodiaŭaj aktivaĵoj sur {{SITENAME}} por vi.",
"echo-email-batch-body-intro-weekly": "Saluton $1,\nĈi tie estas resumo de la aktivaĵoj de ĉi tiu semajno sur {{SITENAME}} por vi.",
"echo-email-batch-link-text-view-all-notifications": "Montri ĉiujn sciigojn",
- "notification-header-foreign-alert": "Pliaj sciigoj el {{PLURAL:$5|alia vikio|$5 aliaj vikioj}}",
+ "notification-header-foreign-alert": "Pliaj atentigoj de {{PLURAL:$5|alia vikio|$5 aliaj vikioj}}",
"notification-header-foreign-notice": "Pliaj sciigoj el {{PLURAL:$5|alia vikio|$5 aliaj vikioj}}"
}
diff --git a/Echo/i18n/es-formal.json b/Echo/i18n/es-formal.json
new file mode 100644
index 00000000..7dd57be0
--- /dev/null
+++ b/Echo/i18n/es-formal.json
@@ -0,0 +1,8 @@
+{
+ "@metadata": {
+ "authors": [
+ "MarcoAurelio"
+ ]
+ },
+ "notification-header-mention-summary": "$1 {{GENDER:$3|le}} {{GENDER:$2|mencionó}} en un resúmen de edición en <strong>$4</strong>."
+}
diff --git a/Echo/i18n/es.json b/Echo/i18n/es.json
index 8e862966..1ed48c16 100644
--- a/Echo/i18n/es.json
+++ b/Echo/i18n/es.json
@@ -28,7 +28,9 @@
"Dgstranz",
"Hamilton Abreu",
"Matiia",
- "Javiersanp"
+ "Javiersanp",
+ "MarcoAurelio",
+ "Savh"
]
},
"echo-desc": "Sistema para notificar a los usuarios sobre eventos y mensajes",
@@ -37,7 +39,6 @@
"prefs-displaynotifications": "Opciones de visualización",
"prefs-echosubscriptions": "Notificarme sobre estos eventos",
"prefs-echocrosswiki": "Notificaciones de varios wikis",
- "prefs-newmessageindicator": "Indicador de mensajes nuevos",
"prefs-blocknotificationslist": "Usuarios silenciados",
"echo-pref-send-me": "Enviarme:",
"echo-pref-send-to": "Enviar a:",
@@ -51,8 +52,7 @@
"echo-pref-email-format-html": "HTML",
"echo-pref-email-format-plain-text": "Texto sin formato",
"echo-pref-cross-wiki-notifications": "Mostrar notificaciones de otros wikis",
- "echo-pref-notifications-blacklist": "No mostrar notificaciones de estos usuarios. ([[mw:Help:Notifications#mute|más información]])",
- "echo-pref-new-message-indicator": "Mostrar en la barra de herramientas el indicador de mensajes en mi página de discusión",
+ "echo-pref-notifications-blacklist": "No mostrar notificaciones de estos usuarios. ([[mw:Special:MyLanguage/Help:Notifications#mute|más información]])",
"echo-pref-beta-feature-cross-wiki-message": "Notificaciones mejoradas",
"echo-pref-beta-feature-cross-wiki-description": "Ver y organizar las notificaciones más fácilmente. Incluye las notificaciones entre wikis, que te permite ver los mensajes de otros wikis. (Para recibir notificaciones transwiki en un wiki dado, debes activar la función en pruebas en ese wiki.)",
"echo-learn-more": "Más información",
@@ -107,8 +107,6 @@
"echo-none": "No tienes notificaciones.",
"echo-more-info": "Más información",
"echo-feedback": "Comentarios",
- "echo-popup-footer-special-page-invitation": "<strong>Prueba la página rediseñada de notificaciones.</strong> [$2 $1]",
- "echo-popup-footer-special-page-invitation-link": "Nuevo aspecto y funcionalidades.",
"echo-api-failure": "Error al obtener las notificaciones.",
"echo-api-failure-cross-wiki": "Se denegó el acceso al dominio remoto.",
"echo-notification-placeholder": "No hay notificaciones.",
@@ -119,6 +117,8 @@
"echo-notification-markasunread": "Marcar como no leído",
"echo-notification-markasread-tooltip": "Marcar como leí­da",
"echo-notification-more-options-tooltip": "Más opciones",
+ "notification-dynamic-actions-watch-confirmation": "Ahora {{GENDER:$3|estás}} observando la página «$1»",
+ "notification-dynamic-actions-watch-confirmation-description": "{{GENDER:$3|Puedes}} dejar de observar [$2 esta página] en cualquier momento.",
"notification-link-text-expand-all": "Expandir",
"notification-link-text-expand-alert-count": "Ver {{PLURAL:$1|$1 alerta|$1 alertas}}",
"notification-link-text-expand-notice-count": "Ver {{PLURAL:$1|$1 aviso|$1 avisos}}",
@@ -131,6 +131,8 @@
"notification-link-text-view-page": "Ver página",
"notification-header-edit-user-talk": "$1 te {{GENDER:$2|dejó}} un mensaje en '''{{GENDER:$3|tu}} página de discusión'''.",
"notification-header-edit-user-talk-with-section": "$1 te {{GENDER:$2|dejó}} un mensaje en <strong>{{GENDER:$3|tu}} página de discusión</strong> en «<strong>$4</strong>».",
+ "notification-compact-header-edit-user-talk": "$1 {{GENDER:$3|te}} {{GENDER:$2|dejó}} un mensaje.",
+ "notification-compact-header-edit-user-talk-with-section": "$1 {{GENDER:$3|te}} {{GENDER:$2|dejó}} un mensaje en «<strong>$4</strong>».",
"notification-header-page-linked": "Se creó un enlace desde <strong>$4</strong> a <strong>$3</strong>.",
"notification-compact-header-page-linked": "Enlazado desde <strong>$1</strong>.",
"notification-bundle-header-page-linked": "Se crearon enlaces desde {{PLURAL:$5||$5 páginas|100=más de 99 páginas}} a <strong>$3</strong>.",
@@ -157,6 +159,7 @@
"notification-header-user-rights-remove-only": "{{GENDER:$4|Tus}} permisos de usuario han sido {{GENDER:$1|modificados}}. Ya no eres miembro de: $2.",
"notification-header-user-rights-add-and-remove": "{{GENDER:$6|Tus}} permisos de usuario han sido {{GENDER:$1|modificados}}. Ahora perteneces a: $2. Ya no eres miembro de: $4.",
"notification-header-welcome": "¡{{GENDER:$2|Bienvenido|Bienvenida}} a {{SITENAME}}, $1! Nos alegra que estés aquí.",
+ "notification-header-mention-summary": "$1 {{GENDER:$3|te}} {{GENDER:$2|mencionó}} en un resumen de edición en <strong>$4</strong>.",
"notification-welcome-linktext": "Te damos la bienvenida",
"notification-header-thank-you-1-edit": "Acabas de hacer {{GENDER:$2|tu}} primera edición. Gracias y ¡{{GENDER:$2|bienvenido|bienvenida}}!",
"notification-header-thank-you-10-edit": "Acabas de hacer {{GENDER:$2|tu}} décima edición. Gracias y ¡sigue así!",
diff --git a/Echo/i18n/et.json b/Echo/i18n/et.json
index 4a068d5e..938dedf4 100644
--- a/Echo/i18n/et.json
+++ b/Echo/i18n/et.json
@@ -15,7 +15,6 @@
"prefs-displaynotifications": "Kuvaseaded",
"prefs-echosubscriptions": "Teavita mind neist sündmustest",
"prefs-echocrosswiki": "Vikideülesed teavitused",
- "prefs-newmessageindicator": "Uue sõnumi indikaator",
"prefs-blocknotificationslist": "Vaigistatud kasutajad",
"echo-pref-send-me": "Saada mulle:",
"echo-pref-send-to": "Saada aadressile:",
@@ -29,9 +28,9 @@
"echo-pref-email-format-html": "HTML",
"echo-pref-email-format-plain-text": "Lihttekst",
"echo-pref-cross-wiki-notifications": "Näita teavitusi teistest vikidest",
- "echo-pref-notifications-blacklist": "Neilt kasutajatelt teavitusi ei näidata. ([[mw:Help:Notifications#mute|lisateave]])",
- "echo-pref-new-message-indicator": "Näita arutelulehekülje postituste indikaatorit minu tööriistaribal",
+ "echo-pref-notifications-blacklist": "Neilt kasutajatelt teavitusi ei näidata. ([[mw:Special:MyLanguage/Help:Notifications#mute|lisateave]])",
"echo-learn-more": "Lisateave",
+ "echo-log": "Avalik logi",
"echo-new-messages": "Sulle on uusi sõnumeid",
"echo-category-title-edit-user-talk": "Arutelulehekülje {{PLURAL:$1|sõnum|sõnumid}}",
"echo-category-title-article-linked": "{{PLURAL:$1|Leheküljelink|Leheküljelingid}}",
@@ -55,12 +54,28 @@
"notifications": "Teavitused",
"tooltip-pt-notifications-alert": "Sinu märguanded",
"tooltip-pt-notifications-notice": "{{GENDER:|Sinu}} märkused",
+ "echo-displaynotificationsconfiguration": "Teavituste kuvamise häälestus",
+ "echo-displaynotificationsconfiguration-summary": "Siin on ülevaade teavituste häälestusest selles vikis.",
+ "echo-displaynotificationsconfiguration-notifications-by-category-header": "Teavituste kategooriad",
+ "echo-displaynotificationsconfiguration-sorting-by-section-header": "Tüüpide sortimine",
+ "echo-displaynotificationsconfiguration-sorting-by-section-legend": "Alaosad, millesse teavitused jagatakse tüübi järgi",
+ "echo-displaynotificationsconfiguration-available-notification-methods-header": "Lubatud teavitusviisid",
+ "echo-displaynotificationsconfiguration-available-notification-methods-by-category-legend": "Teavitusviisid, mida kategooriate lõikes võimaldatakse",
+ "echo-displaynotificationsconfiguration-available-notification-methods-by-type-legend": "Teavitusviisid, mida tüüpide lõikes võimaldatakse (rakendatakse ainult tüüpidele kategooriates, mis on eelistustes peidetud)",
+ "echo-displaynotificationsconfiguration-enabled-default-header": "Vaikimisi lubatud",
+ "echo-displaynotificationsconfiguration-enabled-default-existing-users-legend": "Olemasolevad kasutajad",
+ "echo-displaynotificationsconfiguration-enabled-default-new-users-legend": "Uued kasutajad",
+ "echo-displaynotificationsconfiguration-mandatory-notification-methods-header": "Nõutavad teavitusviisid",
+ "echo-displaynotificationsconfiguration-mandatory-notification-methods-by-category-legend": "Teavitusviisid, mis on kategooria lõikes kohustuslikud",
"echo-specialpage": "Teavitused",
"echo-specialpage-section-markread": "Märgi rühm loetuks",
+ "echo-specialpage-markasread": "Teavitus: loetuks märkimine",
+ "echo-specialpage-markasread-invalid-id": "Vigane sündmuse identifikaator",
"echo-specialpage-pagination-numnotifications": "{{PLURAL:$1|Üks teavitus|$1 teavitust}}",
"echo-specialpage-pagination-range": "$1–$2",
"echo-specialpage-pagefilters-title": "Viimased teavitused",
"echo-specialpage-pagefilters-subtitle": "Lugemata teavitustega leheküljed",
+ "notificationsmarkread-legend": "Teavituse loetuks märkimine",
"echo-anon": "Et teavitusi saada, [$1 loo konto] või [$2 logi sisse].",
"echo-none": "Sul pole uusi teavitusi.",
"echo-more-info": "Lisateave",
@@ -80,11 +95,15 @@
"notification-link-text-collapse-all": "Peida",
"notification-link-text-view-message": "Vaata sõnumit",
"notification-link-text-view-mention": "Vaata mainimist",
+ "notification-link-text-view-mention-failure": "Vaata {{PLURAL:$1|mainimist|mainimisi}}",
"notification-link-text-view-changes": "{{GENDER:$1|Vaata}} muudatusi",
"notification-link-text-view-page": "Vaata lehekülge",
"notification-header-edit-user-talk": "$1 {{GENDER:$2|jättis}} sõnumi <strong>{{GENDER:$3|sinu}} aruteluleheküljele</strong>.",
"notification-header-edit-user-talk-with-section": "$1 {{GENDER:$2|jättis}} sõnumi <strong>{{GENDER:$3|sinu}} arutelulehekülje</strong> alaosasse \"<strong>$4</strong>\".",
+ "notification-compact-header-edit-user-talk": "$1 {{GENDER:$2|jättis}} {{GENDER:$3|sulle}} sõnumi.",
+ "notification-compact-header-edit-user-talk-with-section": "$1 {{GENDER:$2|jättis}} {{GENDER:$3|sulle}} sõnumi leheküljele \"<strong>$4</strong>\".",
"notification-header-page-linked": "Leheküljele \"<strong>$3</strong>\" lingiti asukohast \"<strong>$4</strong>\".",
+ "notification-compact-header-page-linked": "Lingitud leheküljelt \"<strong>$1</strong>\".",
"notification-bundle-header-page-linked": "Leheküljele \"<strong>$3</strong>\" lingiti {{PLURAL:$5||$5 leheküljelt|100=rohkem kui 99 leheküljelt}}.",
"notification-link-text-what-links-here": "Kõiki lingid sellele leheküljele",
"notification-header-mention-other": "$1 {{GENDER:$2|mainis}} {{GENDER:$3|sind}} lehekülje \"<strong>$4</strong>\" alaosas \"<strong>$5</strong>\".",
@@ -95,11 +114,22 @@
"notification-header-mention-agent-talkpage-nosection": "$1 {{GENDER:$2|mainis}} {{GENDER:$3|sind}} <strong>{{GENDER:$2|oma}} aruteluleheküljel</strong>.",
"notification-header-mention-article-talkpage": "$1 {{GENDER:$2|mainis}} {{GENDER:$3|sind}} lehekülje \"<strong>$4</strong>\" arutelu alaosas \"<strong>$5</strong>\".",
"notification-header-mention-article-talkpage-nosection": "$1 {{GENDER:$2|mainis}} {{GENDER:$3|sind}} lehekülje \"<strong>$4</strong>\" arutelus.",
+ "notification-header-mention-failure-user-unknown": "{{GENDER:$2|Mainisid}} kasutajat <strong>$3</strong>, aga selle kohta ei saadetud teavitust, sest kasutajat ei leitud.",
+ "notification-header-mention-failure-user-anonymous": "{{GENDER:$2|Mainisid}} kasutajat <strong>$3</strong>, aga selle kohta ei saadetud teavitust, sest kasutaja on anonüümne.",
+ "notification-header-mention-failure-too-many": "{{GENDER:$2|Proovisid}} mainida rohkem kui {{PLURAL:$3|üht|$3}} kasutajat. Mainimine saadeti nii mitmele kasutajale, ülejäänud mainimised jäid saatmata.",
+ "notification-header-mention-failure-bundle": "{{PLURAL:$3|Mainimine|$3 mainimist}}, mille {{GENDER:$2|lisasid}} aruteluleheküljele \"<strong>$4</strong>\", {{PLURAL:$3|jäi|jäid}} saatmata.",
+ "notification-compact-header-mention-failure-user-unknown": "<strong>Kasutajanime pole olemas:</strong> $1",
+ "notification-compact-header-mention-failure-user-anonymous": "<strong>IP-aadresse ei saa mainida:</strong> $1",
+ "notification-header-mention-success": "{{GENDER:$2|Kasutaja}} <strong>$3</strong> mainimine on saadetud.",
+ "notification-header-mention-success-bundle": "{{PLURAL:$3|Mainimine|$3 mainimist}}, mille {{GENDER:$2|lisasid}} aruteluleheküljele \"<strong>$4</strong>\", on saadetud.",
+ "notification-compact-header-mention-success": "<strong>{{GENDER:$2|Mainisid}}:</strong> $3",
+ "notification-header-mention-status-bundle": "{{PLURAL:$3|Teavitus|$3 teavitust}} mainimistest, mille {{GENDER:$2|lisasid}} aruteluleheküljele \"<strong>$4</strong>\": {{PLURAL:$5|$5 saatmata}}, {{PLURAL:$6|$6 saadetud}}.",
"notification-header-user-rights-add-only": "{{GENDER:$4|Sinu}} kasutajaõigusi {{GENDER:$1|muudeti}}. Sind lisati rühma: $2.",
"notification-header-user-rights-remove-only": "{{GENDER:$4|Sinu}} kasutajaõigusi {{GENDER:$1|muudeti}}. Sa ei kuulu enam rühma: $2.",
"notification-header-user-rights-add-and-remove": "{{GENDER:$6|Sinu}} kasutajaõigused {{GENDER:$1|muudeti}}. Kuulud nüüd järgmistesse rühmadesse: $2. Sa ei kuulu enam järgmistesse rühmadesse: $4.",
"notification-header-user-rights-expiry-change": "{{GENDER:$4|Sinu}} liikmesuse aegumistähtaeg {{PLURAL:$3|järgmises rühmas|järgmistes rühmades}} on {{GENDER:$1|muudetud}}: $2.",
"notification-header-welcome": "{{GENDER:$2|Tere}} tulemast saidile {{SITENAME}}, $1! Meil on hea meel, et siin oled.",
+ "notification-header-mention-summary": "$1 {{GENDER:$2|mainis}} {{GENDER:$3|sind}} lehekülje \"<strong>$4</strong>\" muudatuse resümees.",
"notification-welcome-linktext": "Tere tulemast",
"notification-header-thank-you-1-edit": "{{GENDER:$2|Tegid}} just esimese muudatuse. Aitäh ja tere tulemast!",
"notification-header-thank-you-10-edit": "{{GENDER:$2|Tegid}} just oma kümnenda muudatuse. Aitäh ja jõudu!",
@@ -144,6 +174,7 @@
"echo-overlay-title-overflow": "<b>Teavitused</b> (näidatakse {{PLURAL:$1|üht|$1}} $2-st lugemata teavitusest)",
"echo-mark-all-as-read": "Märgi kõik loetuks",
"echo-mark-all-as-read-confirmation": "{{PLURAL:$1|Üks teavitus|$1 teavitust}} märgitud loetuks.",
+ "echo-mark-wiki-as-read": "Märgi valitud vikis kõik loetuks: $1",
"echo-date-today": "Täna",
"echo-date-yesterday": "Eile",
"echo-load-more-error": "Rohkemate tulemuste laadimisel ilmnes tõrge.",
diff --git a/Echo/i18n/eu.json b/Echo/i18n/eu.json
index 46d17724..ccffb998 100644
--- a/Echo/i18n/eu.json
+++ b/Echo/i18n/eu.json
@@ -12,7 +12,6 @@
"prefs-displaynotifications": "Aukerak erakutsi",
"prefs-echosubscriptions": "Gertaera hauen inguruan jakinarazi nazazue",
"prefs-echocrosswiki": "Wikien arteko jakinarazpenak",
- "prefs-newmessageindicator": "Mezu berriaren adierazlea",
"echo-pref-send-me": "Bidali niri:",
"echo-pref-send-to": "Honi bidali:",
"echo-pref-email-format": "Posta-elektronikoaren formatua:",
@@ -25,7 +24,6 @@
"echo-pref-email-format-html": "HTML",
"echo-pref-email-format-plain-text": "Testu laua",
"echo-pref-cross-wiki-notifications": "Erakutsi beste wikietako jakinarazpenak",
- "echo-pref-new-message-indicator": "Erakutsi eztabaida orrialdearen mezu adierazlea nire tresna-barran",
"echo-pref-beta-feature-cross-wiki-message": "Jakinarazpen hobetuak",
"echo-learn-more": "Gehiago ikasi",
"echo-new-messages": "Mezu berriak dituzu",
@@ -37,7 +35,7 @@
"echo-category-title-article-reminder": "Orrialdea {{PLURAL:$1|reminder|reminders}}",
"echo-pref-tooltip-edit-user-talk": "Jakinarazi norbaitek mezu bat nire eztabaida orrian jartzen edo erantzuten duenean.",
"echo-pref-tooltip-article-linked": "Jakinarazi norbaitek egin dudan artikulu bati beste orri batetik loturen bat egiten duenean.",
- "echo-pref-tooltip-reverted": "Jakinarazi norbaitek nire ekarpenen bat desegiten atzera botatzen duenean, desegin edo rollback tresnaren bidez.",
+ "echo-pref-tooltip-reverted": "Jakinaraz iezadazue inork nire ekarpenen bat atzera botatzen duenean, desegite edo lehengoratze tresnaren bidez.",
"echo-pref-tooltip-mention": "Jakinarazi norbaitek nire lankide orrira lotura egiten duenean.",
"echo-pref-tooltip-user-rights": "Jakinarazi norbaitek nire lankide eskubideak aldatzean.",
"echo-pref-tooltip-emailuser": "Jakinarazi norbaitek niri email bat bidaltzean.",
diff --git a/Echo/i18n/fa.json b/Echo/i18n/fa.json
index a683c861..e8ed6837 100644
--- a/Echo/i18n/fa.json
+++ b/Echo/i18n/fa.json
@@ -22,7 +22,8 @@
"Arian Ar",
"Macofe",
"Mahdy Saffar",
- "4nn1l2"
+ "4nn1l2",
+ "Baloch Khan"
]
},
"echo-desc": "سامانهٔ آگاه‌سازی کاربران از رویدادها و پیام‌ها",
@@ -31,7 +32,6 @@
"prefs-displaynotifications": "گزینه‌های نمایش",
"prefs-echosubscriptions": "مرا از این رویدادها آگاه کن",
"prefs-echocrosswiki": "آگاه‌سازی همه ویکی‌ها",
- "prefs-newmessageindicator": "نشانگر پیام تازه",
"prefs-blocknotificationslist": "کاربران خاموش‌شده",
"echo-pref-send-me": "برایم فرستاده شود:",
"echo-pref-send-to": "فرستاده‌شود به:",
@@ -45,8 +45,7 @@
"echo-pref-email-format-html": "اچ‌تی‌ام‌ال",
"echo-pref-email-format-plain-text": "متن ساده",
"echo-pref-cross-wiki-notifications": "نمایش آگاه‌سازی از ویکی‌های دیگر",
- "echo-pref-notifications-blacklist": "عدم نمایش آگاه‌سازی برای این کاربران. [[mw:Help:Notifications#mute|برای اطلاعات بیشتر]]",
- "echo-pref-new-message-indicator": "نشانگر پیام در صفحهٔ بحث در نوار ابزار من نشان داده شود",
+ "echo-pref-notifications-blacklist": "عدم نمایش آگاه‌سازی برای این کاربران. [[mw:Special:MyLanguage/Help:Notifications#mute|برای اطلاعات بیشتر]]",
"echo-pref-beta-feature-cross-wiki-message": "آگاه‌سازی‌های بهبودیافته",
"echo-pref-beta-feature-cross-wiki-description": "آسان‌تر آگاه‌سازی‌ها را ببینید و مدیریت کنید. این ویژگی شامل آگاه‌سازی بین ویکی‌هاست که به شما اجازه می‌دهد پیام آگاه‌سازی از سایر ویکی‌ها هم دریافت کنید. (برای دریافت آگاه‌سازی از سایر ویکی‌ها باید نسخهٔ آزمایشی را در آن ویکی فعال کنید).",
"echo-learn-more": "اطلاعات بیشتر",
@@ -101,8 +100,6 @@
"echo-none": "آگاه‌سازی ندارید.",
"echo-more-info": "اطلاعات بیشتر",
"echo-feedback": "بازخورد",
- "echo-popup-footer-special-page-invitation": "<strong>تلاش برای طراحی مجدد صفحهٔ آگاه‌سازی.</strong> [$2 $1]",
- "echo-popup-footer-special-page-invitation-link": "ظاهر و ویژگی‌های جدید.",
"echo-quotation-marks": "«$1»",
"echo-api-failure": "ناتوان از دریافت آگاه‌سازی‌ها.",
"echo-api-failure-cross-wiki": "اجازهٔ دسترسی به دامنه دور داده نشد.",
@@ -132,6 +129,8 @@
"notification-link-text-view-page": "نمایش صفحه",
"notification-header-edit-user-talk": "$1 پیامی بر روی صفحهٔ <strong>بحث {{GENDER:$3|شما}}</strong> {{GENDER:$2|گذاشته‌است}}.",
"notification-header-edit-user-talk-with-section": "$1 یک پیام در <strong>بحث {{GENDER:$3|شما}}</strong> در <strong>«$4»</strong> {{GENDER:$2|گذاشته‌است}}.",
+ "notification-compact-header-edit-user-talk": "$1 {{GENDER:$2|برای}} {{GENDER:$3|شما}} یک پیام گذاشت.",
+ "notification-compact-header-edit-user-talk-with-section": "$1 {{GENDER:$2|برای}} {{GENDER:$3|شما}} یک پیام در «<strong>$4</strong>» گذاشت.",
"notification-header-page-linked": "پیوندی از <strong>$4</strong> به <strong>$3</strong> داده شده‌است.",
"notification-compact-header-page-linked": "پیوند داده شده از <strong>$1</strong>.",
"notification-bundle-header-page-linked": "پیوندهای ایجاد شده از {{PLURAL:$5||$5 صفحه|100=بیش از ۹۹ صفحه}} به <strong>$3</strong>.",
@@ -160,6 +159,7 @@
"notification-header-user-rights-add-and-remove": "دسترسی {{GENDER:$6|شما}} تغییر {{GENDER:$1|کرده‌است}}. اضافه شدید به: $2. دیگر در $4 عضو نیستید.",
"notification-header-user-rights-expiry-change": "انقضای عضویت {{GENDER:$4|شما}} در این {{PLURAL:$3|گروه|گروه‌ها}} تغییر {{GENDER:$1|یافته‌است}}: $2",
"notification-header-welcome": "$1، به {{SITENAME}} {{GENDER:$2|خوش آمدید}}. خوشحالیم که {{GENDER:$2|شما}} اینجایید.",
+ "notification-header-mention-summary": "$1 {{GENDER:$3|به شما}} در خلاصه ویرایش <strong>$4</strong> {{GENDER:$2|اشاره کرد}}.",
"notification-welcome-linktext": "خوش‌آمدید",
"notification-header-thank-you-1-edit": "{{GENDER:$2|شما}} اولین ویرایشتان را {{GENDER:$2|انجام دادید}}؛ {{GENDER:$2|ممنون}}، خوش‌آمدید!",
"notification-header-thank-you-10-edit": "{{GENDER:$2|شما}} دهمین ویرایشتان را {{GENDER:$2|انجام دادید}}؛ {{GENDER:$2|ممنون}}، لطفاً ادامه دهید!",
diff --git a/Echo/i18n/fi.json b/Echo/i18n/fi.json
index cb2c6150..fdd87c2e 100644
--- a/Echo/i18n/fi.json
+++ b/Echo/i18n/fi.json
@@ -13,7 +13,8 @@
"Pitke",
"McSalama",
"Mikahama",
- "01miki10"
+ "01miki10",
+ "Pyscowicz"
]
},
"echo-desc": "Järjestelmä jonka avulla käyttäjille voi lähettää ilmoituksia tapahtumista ja viesteistä",
@@ -22,8 +23,7 @@
"prefs-displaynotifications": "Näyttöasetukset",
"prefs-echosubscriptions": "Ilmoita minulle näistä tapahtumista",
"prefs-echocrosswiki": "Wikienväliset ilmoitukset",
- "prefs-newmessageindicator": "Uuden viestin ilmaisin",
- "prefs-blocknotificationslist": "Estolista",
+ "prefs-blocknotificationslist": "Hiljennetyt käyttäjät",
"echo-pref-send-me": "Lähetä minulle:",
"echo-pref-send-to": "Lähetä osoitteeseen:",
"echo-pref-email-format": "Sähköpostin muoto:",
@@ -36,9 +36,9 @@
"echo-pref-email-format-html": "HTML",
"echo-pref-email-format-plain-text": "Pelkkä teksti",
"echo-pref-cross-wiki-notifications": "Näytä ilmoituksia muista wikeistä",
- "echo-pref-new-message-indicator": "Näytä keskustelusivujen viestistä erillinen ilmoitus työkalurivilläni",
+ "echo-pref-notifications-blacklist": "Älä näytä ilmoituksia näiltä käyttäjiltä. ([[mw:Special:MyLanguage/Help:Notifications#mute|lisätietoja]])",
"echo-pref-beta-feature-cross-wiki-message": "Kehittyneet ilmoitukset",
- "echo-pref-beta-feature-cross-wiki-description": "Tee ilmoitusten katselusta ja järjestämisestä helpompaa. Sisältää wikienväliset ilmoitukset, joiden avulla viestit muissa wikeissä eivät jää huomaamatta. (Saat wikienvälisiä ilmoituksia vain niissä wikeissä, joissa betaominaisuus on käytössä.)",
+ "echo-pref-beta-feature-cross-wiki-description": "Tee ilmoitusten katselusta ja järjestämisestä helpompaa. Sisältää wikienväliset ilmoitukset, joiden avulla viestit muissa wikeissä eivät jää huomaamatta. (Saat wikienvälisiä ilmoituksia vain niissä wikeissä, joissa beetaominaisuus on käytössä.)",
"echo-learn-more": "Lue lisää aiheesta",
"echo-log": "Julkinen loki",
"echo-new-messages": "Sinulle on uusia viestejä",
@@ -89,8 +89,6 @@
"echo-none": "Sinulla ei ole ilmoituksia.",
"echo-more-info": "Lisätietoja",
"echo-feedback": "Palaute",
- "echo-popup-footer-special-page-invitation": "<strong>Kokeile uusittua Ilmoitukset-sivua.</strong> [$2 $1]",
- "echo-popup-footer-special-page-invitation-link": "Täysin uusi ilme ja uusia ominaisuuksia.",
"echo-api-failure": "Ilmoitusten hakeminen epäonnistui.",
"echo-api-failure-cross-wiki": "Pääsy etäkoneeseen on estetty.",
"echo-notification-placeholder": "Ei ilmoituksia.",
diff --git a/Echo/i18n/fo.json b/Echo/i18n/fo.json
index 8b6dd178..f29b31ed 100644
--- a/Echo/i18n/fo.json
+++ b/Echo/i18n/fo.json
@@ -15,11 +15,8 @@
"echo-pref-web": "Net",
"echo-pref-email": "T-postur",
"echo-pref-email-frequency-never": "Ikki senda mær fráboðanir við telduposti",
- "echo-no-agent": "[Ongin]",
- "echo-no-title": "[Ongin síða]",
"notification-link-text-view-page": "Vís síðu",
"notification-link-text-view-edit": "Vís rætting",
- "echo-email-batch-body-default": "Tú hevur nýggj boð.",
"echo-overlay-link": "Allar fráboðanir",
"echo-overlay-title": "<b>Fráboðanir</b>",
"echo-overlay-title-overflow": "<b>{{PLURAL:$1|Fráboðanir}}</b> (vísir $1 av $2 ólisnum)",
diff --git a/Echo/i18n/fr.json b/Echo/i18n/fr.json
index d4bfa024..c73357e6 100644
--- a/Echo/i18n/fr.json
+++ b/Echo/i18n/fr.json
@@ -50,36 +50,34 @@
"prefs-displaynotifications": "Options d'affichage",
"prefs-echosubscriptions": "Me prévenir de ces événements",
"prefs-echocrosswiki": "Notifications inter-wikis",
- "prefs-newmessageindicator": "Indicateur de nouveau message",
"prefs-blocknotificationslist": "Utilisateurs occultés",
- "echo-pref-send-me": "M'envoyer :",
+ "echo-pref-send-me": "M’envoyer :",
"echo-pref-send-to": "Envoyer à :",
"echo-pref-email-format": "Format de courriel :",
"echo-pref-web": "Web",
"echo-pref-email": "Courriel",
"echo-pref-email-frequency-never": "Ne pas m'envoyer de notification par courriel",
- "echo-pref-email-frequency-immediately": "Un courriel par notification",
+ "echo-pref-email-frequency-immediately": "Les notifications individuelles dès leur arrivée",
"echo-pref-email-frequency-daily": "Un résumé quotidien des notifications",
"echo-pref-email-frequency-weekly": "Un résumé hebdomadaire des notifications",
"echo-pref-email-format-html": "HTML",
"echo-pref-email-format-plain-text": "Texte brut",
"echo-pref-cross-wiki-notifications": "Afficher les notifications d’autres wikis",
- "echo-pref-notifications-blacklist": "Ne pas afficher les notifications de ces utilisateurs ([[mw:Help:Notifications#mute|en savoir plus]]).",
- "echo-pref-new-message-indicator": "Afficher dans ma barre d’outils l’indicateur signalant de nouveaux messages sur ma page de discussion",
+ "echo-pref-notifications-blacklist": "Ne pas afficher les notifications de ces utilisateurs. ([[mw:Special:MyLanguage/Help:Notifications#mute|en savoir plus]])",
"echo-pref-beta-feature-cross-wiki-message": "Notifications améliorées",
"echo-pref-beta-feature-cross-wiki-description": "Afficher et organiser plus facilement les notifications. Inclut les notifications inter-wikis, qui permettent de voir les messages des autres wikis (pour recevoir des notifications inter-wikis sur un wiki donné, vous devez activer la fonctionnalité bêta depuis celui-ci).",
"echo-learn-more": "En savoir plus",
"echo-log": "Journal public",
"echo-new-messages": "Vous avez de nouveaux messages",
- "echo-category-title-edit-user-talk": "{{PLURAL:$1|Message|Messages}} de la page de discussion",
- "echo-category-title-article-linked": "{{PLURAL:$1|Article lié|Article liés}}",
+ "echo-category-title-edit-user-talk": "{{PLURAL:$1|Message|Messages}} sur ma page de discussion",
+ "echo-category-title-article-linked": "{{PLURAL:$1|Article lié|Articles liés}}",
"echo-category-title-reverted": "{{PLURAL:$1|Modification annulée|Modifications annulées}}",
"echo-category-title-mention": "{{PLURAL:$1|Mention|Mentions}}",
"echo-category-title-mention-failure": "Échec {{PLURAL:$1|de la mention d’un utilisateur|des mentions d’utilisateurs}}",
"echo-category-title-mention-success": "Succès {{PLURAL:$1|de la mention d’un utilisateur|des mentions d’utilisateurs}}",
- "echo-category-title-other": "{{PLURAL:$1|Autres}}",
+ "echo-category-title-other": "{{PLURAL:$1|Autre|Autres}}",
"echo-category-title-system": "{{PLURAL:$1|Système}}",
- "echo-category-title-user-rights": "{{PLURAL:$1|Modification de droits utilisateur|Modifications de droits utilisateur}}",
+ "echo-category-title-user-rights": "Modification{{PLURAL:$1||s}} des droits utilisateur",
"echo-category-title-emailuser": "{{PLURAL:$1|Courriel d’un autre utilisateur|Courriels d’autres utilisateurs}}",
"echo-category-title-article-reminder": "{{PLURAL:$1|Rappel de page|Rappels de pages}}",
"echo-pref-tooltip-edit-user-talk": "Me prévenir quand quelqu’un publie un message ou répond sur ma page de discussion.",
@@ -98,7 +96,7 @@
"echo-displaynotificationsconfiguration": "Configuration d’affichage des notifications",
"echo-displaynotificationsconfiguration-summary": "Ceci est un aperçu de comment les notifications sont configurées sur ce wiki.",
"echo-displaynotificationsconfiguration-notifications-by-category-header": "Notifications par catégorie",
- "echo-displaynotificationsconfiguration-sorting-by-section-header": "Classification des types de notification",
+ "echo-displaynotificationsconfiguration-sorting-by-section-header": "Tri par type",
"echo-displaynotificationsconfiguration-sorting-by-section-legend": "Dans quelle section chaque type de notification est trié",
"echo-displaynotificationsconfiguration-available-notification-methods-header": "Méthodes de notification autorisées",
"echo-displaynotificationsconfiguration-available-notification-methods-by-category-legend": "Quelles méthodes de notification sont prises en charge pour chaque catégorie",
@@ -120,8 +118,6 @@
"echo-none": "Vous n'avez reçu aucune notification.",
"echo-more-info": "Plus d’informations",
"echo-feedback": "Avis",
- "echo-popup-footer-special-page-invitation": "<strong>Essayez la page des Notifications refaite.</strong> [$2 $1]",
- "echo-popup-footer-special-page-invitation-link": "Nouvelles présentation et fonctionnalités.",
"echo-quotation-marks": "« $1 »",
"echo-api-failure": "Impossible de récupérer les notifications.",
"echo-api-failure-cross-wiki": "L'accès au domaine distant a été refusé.",
@@ -149,8 +145,10 @@
"notification-link-text-view-mention-failure": "Afficher l{{PLURAL:$1|a mention|es mentions}}",
"notification-link-text-view-changes": "{{GENDER:$1|Afficher}} les modifications",
"notification-link-text-view-page": "Afficher la page",
- "notification-header-edit-user-talk": "$1 {{GENDER:$2|a laissé}} un message sur <strong>{{GENDER:$3|votre}} page de discussion</strong>.",
+ "notification-header-edit-user-talk": "$1 {{GENDER:$2|}}a laissé un message sur <strong>{{GENDER:$3|}}votre page de discussion</strong>.",
"notification-header-edit-user-talk-with-section": "$1 {{GENDER:$2|a laissé}} un message sur <strong>{{GENDER:$3|votre}} page de discussion</strong> dans la section « <strong>$4</strong> ».",
+ "notification-compact-header-edit-user-talk": "$1 {{GENDER:$3|vous}} {{GENDER:$2|a laissé}} un message.",
+ "notification-compact-header-edit-user-talk-with-section": "$1 {{GENDER:$3|vous}} {{GENDER:$2|a laissé}} un message dans « <strong>$4</strong> ».",
"notification-body-edit-user-talk-with-section": "$1",
"notification-header-page-linked": "Un lien vers <strong>$3</strong> a été créé sur <strong>$4</strong>.",
"notification-compact-header-page-linked": "Lié depuis <strong>$1</strong>.",
@@ -177,13 +175,14 @@
"notification-header-mention-status-bundle": "Concernant {{PLURAL:$3|l’utilisat{{GENDER:$2|eur|rice}} $2 que vous avez mentionné{{GENDER:$2||e}}|les $3 utilisateurs que vous avez mentionnés}} sur la page de discussion <strong>$4</strong>, {{PLURAL:$5|0=|une notification n’a pas pu lui être envoyée|$5 notifications n’ont pas pu leur être envoyées}}{{PLURAL:$5|0=|{{PLURAL:$6|0=|&#32;et&#32;}}}}{{PLURAL:$6|0=|une notification lui a été envoyée|$6 notifications leur ont été envoyées}}.",
"notification-header-user-rights-add-only": "{{GENDER:$4|Vos}} droits utilisateurs ont été {{GENDER:$1|modifiés}}. Vous avez été ajouté à : $2.",
"notification-header-user-rights-remove-only": "{{GENDER:$4|Vos}} droits utilisateurs ont été {{GENDER:$1|modifiés}}. Vous n’êtes désormais plus membre de : $2.",
- "notification-header-user-rights-add-and-remove": "{{GENDER:$6|Vos}} droits d’{{GENDER:$2|utilisateur|utilisatrice}} ont été {{GENDER:$1|modifiés}}. Vous avez été ajouté{{GENDER:$2||e}} à : $2. Vous n’êtes désormais plus membre de : $4.",
+ "notification-header-user-rights-add-and-remove": "{{GENDER:$1|Vos}} droits d’{{GENDER:$6|utilisateur|utilisatrice}} ont été modifiés. Vous avez été {{GENDER:$6|ajouté|ajoutée}} à : $2. Vous n’êtes désormais plus membre de : $4.",
"notification-header-user-rights-expiry-change": "L’expiration de {{GENDER:$4|votre}} appartenance {{PLURAL:$3|au groupe suivant|aux groupes suivants}} a été {{GENDER:$1|modifiée}} : $2.",
"notification-header-welcome": "{{GENDER:$2|Bienvenue}} sur {{SITENAME}}, $1 ! Nous sommes heureux que {{GENDER:$2|vous soyez}} ici.",
+ "notification-header-mention-summary": "$1 {{GENDER:$3|vous}} {{GENDER:$2|a mentionné}} dans un résumé de modification sur <strong>$4</strong>.",
"notification-welcome-linktext": "Bienvenue",
- "notification-header-thank-you-1-edit": "{{GENDER:$2|Vous}} venez de faire {{GENDER:$2|votre}} première modification , {{GENDER:$2|}} merci et bienvenue !",
+ "notification-header-thank-you-1-edit": "{{GENDER:$2|Vous}} venez de faire {{GENDER:$2|votre}} première modification, {{GENDER:$2|}} merci et bienvenue !",
"notification-header-thank-you-10-edit": "{{GENDER:$2|Vous}} venez de faire {{GENDER:$2|votre}} dixième modification, {{GENDER:$2|}} merci, continuez ainsi !",
- "notification-header-thank-you-100-edit": "{{GENDER:$2|Vous}} venez de faire {{GENDER:$2|votre}} centième modification , {{GENDER:$2|}} merci beaucoup !",
+ "notification-header-thank-you-100-edit": "{{GENDER:$2|Vous}} venez de faire {{GENDER:$2|votre}} centième modification, {{GENDER:$2|}} merci beaucoup !",
"notification-header-thank-you-1000-edit": "{{GENDER:$2|Vous}} venez de faire {{GENDER:$2|votre}} millième modification ; nous {{GENDER:$2|vous}} remercions d’être {{GENDER:$2|un grand contributeur !|une grande contributrice !}}",
"notification-header-thank-you-10000-edit": "{{GENDER:$2|Vous}} venez de faire {{GENDER:$2|votre}} dix-millième modification, un très grand merci à {{GENDER:$2|vous}} !",
"notification-header-thank-you-100000-edit": "{{GENDER:$2|Vous}} venez de faire {{GENDER:$2|votre}} cent-millième modification, merci à {{GENDER:$2|vous}} pour votre participation incroyable !",
diff --git a/Echo/i18n/frp.json b/Echo/i18n/frp.json
index 10366195..2e726788 100644
--- a/Echo/i18n/frp.json
+++ b/Echo/i18n/frp.json
@@ -7,15 +7,10 @@
"echo-desc": "Sistèmo de notificacions",
"prefs-echo": "Notificacions",
"prefs-displaynotifications": "Chouèx de visualisacion",
- "echo-no-agent": "[Nion]",
- "echo-no-title": "[Niona pâge]",
"notifications": "Notificacions",
"tooltip-pt-notifications-alert": "{{GENDER:|Voutres}} alèrtes",
- "tooltip-pt-notifications-message": "{{GENDER:|Voutros}} mèssâjos",
"echo-specialpage": "Mes notificacions",
"echo-none": "Vos éd reçu gins de notificacion.",
- "notification-new-user": "Benvegnua sur {{SITENAME}}, $1 !",
- "echo-email-subject-default": "Novèla notificacion dessus {{SITENAME}}",
"echo-email-body-default": "Vos avéd na novèla notificacion dessus {{SITENAME}} :\n\n$1",
"echo-email-footer-default": "$2\n\nPor controlar quints mèssâjos nos vos mandens, visitâd :\n{{canonicalurl:{{#special:Preferences}}#mw-prefsection-echo}}\n\n$1",
"echo-overlay-link": "Totes les notificacions",
diff --git a/Echo/i18n/frr.json b/Echo/i18n/frr.json
index 7fc62718..02db94a4 100644
--- a/Echo/i18n/frr.json
+++ b/Echo/i18n/frr.json
@@ -9,7 +9,6 @@
"prefs-emailsettings": "E-mail iinstelangen",
"prefs-displaynotifications": "Mögelkhaiden för't uunwisin",
"prefs-echosubscriptions": "Schüür mi diar en bööd am",
- "prefs-newmessageindicator": "Nei bööd uunwiiser",
"echo-pref-send-me": "Schüür mi:",
"echo-pref-send-to": "Schüür tu:",
"echo-pref-email-format": "E-mail-formoot:",
@@ -21,7 +20,6 @@
"echo-pref-email-frequency-weekly": "Iansis a weg en bööd",
"echo-pref-email-format-html": "HTML",
"echo-pref-email-format-plain-text": "Normool tekst",
- "echo-pref-new-message-indicator": "Nei bööd üüb min diskuschuunssidj uun min werktjüchlist uunwise",
"echo-learn-more": "Ik wal muar wed",
"echo-new-messages": "Dü heest nei bööd",
"echo-category-title-edit-user-talk": "{{PLURAL:$1|bööd|bööden}} üüb min diskuschuunssidj",
@@ -31,11 +29,13 @@
"echo-category-title-other": "{{PLURAL:$1|Öödern}}",
"echo-category-title-system": "{{PLURAL:$1|Süsteem}}",
"echo-category-title-user-rights": "{{PLURAL:$1|Feranrang|Feranrangen}} faan brükerrochten",
+ "echo-category-title-emailuser": "{{PLURAL:$1|E-mail faan en öödern brüker|E-mails faan ööder brükern}}",
"echo-pref-tooltip-edit-user-talk": "Sai mi beskias, wan diar hoker en bööd of en oonswaar üüb min diskuschuunsidj skraft.",
"echo-pref-tooltip-article-linked": "Sai mi beskias, wan diar hoker en ferwisang üüb en sidj saat, diar ik skrewen haa.",
"echo-pref-tooltip-reverted": "Sai mi beskias, wan diar hoker en feranrang faan mi uun en artiikel turagsaat.",
"echo-pref-tooltip-mention": "Sai mi beskias, wan diar hoker en ferwisang faan en diskuschuunsidj üüb min brükersidj saat.",
"echo-pref-tooltip-user-rights": "Du mi bööd, wan hoker min brükerrochten feranert.",
+ "echo-pref-tooltip-emailuser": "Du mi bööd, wan mi hoker en e-mail schüürt.",
"echo-error-no-formatter": "Tu detdiar bööd as nian formoot fäästlaanj wurden.",
"notifications": "Bööd",
"tooltip-pt-notifications-alert": "{{GENDER:|Din}} wäärnangen",
diff --git a/Echo/i18n/fur.json b/Echo/i18n/fur.json
index 5309945e..453e768c 100644
--- a/Echo/i18n/fur.json
+++ b/Echo/i18n/fur.json
@@ -4,6 +4,5 @@
"Tocaibon"
]
},
- "tooltip-pt-notifications-alert": "{{GENDER:|I tiei}} avîs",
- "tooltip-pt-notifications-message": "{{GENDER:|I tiei}} messaçs"
+ "tooltip-pt-notifications-alert": "{{GENDER:|I tiei}} avîs"
}
diff --git a/Echo/i18n/gcr.json b/Echo/i18n/gcr.json
new file mode 100644
index 00000000..ae283177
--- /dev/null
+++ b/Echo/i18n/gcr.json
@@ -0,0 +1,8 @@
+{
+ "@metadata": {
+ "authors": [
+ "LeGuyanaisPure"
+ ]
+ },
+ "tooltip-pt-notifications-alert": "Zòt alèrt"
+}
diff --git a/Echo/i18n/gd.json b/Echo/i18n/gd.json
index 9e5eb48f..2759103f 100644
--- a/Echo/i18n/gd.json
+++ b/Echo/i18n/gd.json
@@ -10,7 +10,6 @@
"prefs-emailsettings": "Roghainnean a' phuist-d",
"prefs-displaynotifications": "Roghainnean an t-seallaidh",
"prefs-echosubscriptions": "Cuir brath thugam mu na tachartasan seo",
- "prefs-newmessageindicator": "Taisbeanair nan teachdaireachdan ùra",
"echo-pref-send-me": "Cuir thugam:",
"echo-pref-send-to": "Cuir gu:",
"echo-pref-email-format": "Fòrmat a' phuist-d:",
@@ -22,7 +21,6 @@
"echo-pref-email-frequency-weekly": "Gearr chunntas dhe bhrathan-naidheachd na seachdaine",
"echo-pref-email-format-html": "HTML",
"echo-pref-email-format-plain-text": "Teacsa lom",
- "echo-pref-new-message-indicator": "Seall taisbeanair airson duilleag na deasbaireachd air a' bhàr-inneal agam",
"echo-learn-more": "Barrachd fiosrachaidh",
"echo-new-messages": "Tha teachdaireachdan ùra agad",
"echo-category-title-edit-user-talk": "{{PLURAL:$1|Teachdaireachd|Teachdaireachdan}} air duilleag na deasbaireachd",
diff --git a/Echo/i18n/gl.json b/Echo/i18n/gl.json
index ff99770f..870962dd 100644
--- a/Echo/i18n/gl.json
+++ b/Echo/i18n/gl.json
@@ -5,7 +5,8 @@
"Toliño",
"Vivaelcelta",
"Banjo",
- "Macofe"
+ "Macofe",
+ "Navhy"
]
},
"echo-desc": "Sistema para notificar aos usuarios sobre eventos e mensaxes",
@@ -14,7 +15,6 @@
"prefs-displaynotifications": "Opcións de visualización",
"prefs-echosubscriptions": "Notificádeme sobre estes eventos",
"prefs-echocrosswiki": "Notificatións entre wikis",
- "prefs-newmessageindicator": "Indicador de mensaxe nova",
"prefs-blocknotificationslist": "Usuarios ocultados",
"echo-pref-send-me": "Enviádeme:",
"echo-pref-send-to": "Enviar a:",
@@ -27,9 +27,8 @@
"echo-pref-email-frequency-weekly": "Un resumo semanal das notificacións",
"echo-pref-email-format-html": "HTML",
"echo-pref-email-format-plain-text": "Texto simple",
- "echo-pref-cross-wiki-notifications": "Mostrar as notificacións doutros wikis",
- "echo-pref-notifications-blacklist": "Non amosar notificacións destes usuarios.\n([[mw:Help:Notifications#mute|Saber máis]])",
- "echo-pref-new-message-indicator": "Mostrar o indicador de mensaxe na páxina de conversa na miña barra de ferramentas",
+ "echo-pref-cross-wiki-notifications": "Amosar as notificacións doutros wikis",
+ "echo-pref-notifications-blacklist": "Non amosar notificacións destes usuarios.\n([[mw:Special:MyLanguage/Help:Notifications#mute|Saber máis]])",
"echo-pref-beta-feature-cross-wiki-message": "Notificacións melloradas",
"echo-pref-beta-feature-cross-wiki-description": "Ver e organizar as notifiacións máis doadamente. Inclúe as notificacións entre wikis, o que lle permite ver as mensaxes doutros wikis. (Para recibir notificacións desde outros wikis, debe activar a característica beta neses wikis.)",
"echo-learn-more": "Máis información",
@@ -84,8 +83,6 @@
"echo-none": "Non ten ningunha notificación.",
"echo-more-info": "Máis información",
"echo-feedback": "Comentarios",
- "echo-popup-footer-special-page-invitation": "<strong>Probar a páxina de notificacións redeseñada.</strong> [$2 $1]",
- "echo-popup-footer-special-page-invitation-link": "Aspecto e funcionalidades totalmente novas.",
"echo-api-failure": "Erro ao recuperar as notificacións.",
"echo-api-failure-cross-wiki": "Denegouse o acceso ao dominio remoto.",
"echo-notification-placeholder": "Non hai notificacións.",
@@ -107,13 +104,15 @@
"notification-link-text-expand-notice-count": "Ver {{PLURAL:$1|$1 aviso|$1 avisos}}",
"notification-link-text-expand-all-count": "Ver {{PLURAL:$1|$1 notificación|$1 notificacións}}",
"notification-link-text-collapse-all": "Contraer",
- "notification-link-text-view-message": "Mostrar a mensaxe",
- "notification-link-text-view-mention": "Mostrar a mención",
+ "notification-link-text-view-message": "Amosar a mensaxe",
+ "notification-link-text-view-mention": "Amosar a mención",
"notification-link-text-view-mention-failure": "{{PLURAL:$1|Ver a mención|Ver as mencións}}",
"notification-link-text-view-changes": "{{GENDER:$1|Ver}} os cambios",
- "notification-link-text-view-page": "Mostrar a páxina",
+ "notification-link-text-view-page": "Amosar a páxina",
"notification-header-edit-user-talk": "$1 {{GENDER:$2|deixou}} unha mensaxe na <strong>{{GENDER:$3|súa}} páxina de conversa</strong>.",
"notification-header-edit-user-talk-with-section": "$1 {{GENDER:$2|deixou}} unha mensaxe na <strong>{{GENDER:$3|súa}} páxina de conversa</strong> en \"<strong>$4</strong>\".",
+ "notification-compact-header-edit-user-talk": "$1 {{GENDER:$2|deixou}}{{GENDER:$3|lle}} unha mensaxe.",
+ "notification-compact-header-edit-user-talk-with-section": "$1 {{GENDER:$2|deixou}}{{GENDER:$3|lle}} unha mensaxe en \"<strong>$4</strong>\".",
"notification-body-edit-user-talk-with-section": "$1",
"notification-header-page-linked": "Fíxose unha ligazón desde \"<strong>$4</strong>\" a \"<strong>$3</strong>\".",
"notification-compact-header-page-linked": "Ligada desde \"<strong>$1</strong>\".",
@@ -143,6 +142,7 @@
"notification-header-user-rights-add-and-remove": "Os {{GENDER:$6|seus}} dereitos de usuarios foron {{GENDER:$1|modificados}}. Foi engadido a: $2. Xa non pertence a: $4.",
"notification-header-user-rights-expiry-change": "A data de expiración {{GENDER:$4|da}} súa pertenza {{PLURAL:$3|no seguinte grupo|nos seguintes grupos}} foi {{GENDER:$1|modificada}}: $2.",
"notification-header-welcome": "{{GENDER:$2|Benvido|Benvida}} a {{SITENAME}}, $1. Alégranos que esteas aquí.",
+ "notification-header-mention-summary": "$1 {{GENDER:$2|mencionou}}{{GENDER:$3|no|na}} nun resumo de edición en <strong>$4</strong>.",
"notification-welcome-linktext": "Reciba a nosa benvida",
"notification-header-thank-you-1-edit": "Acaba de facer {{GENDER:$2|a súa}} primeira edición. Grazas e ¡{{GENDER:$2|benvido|benvida}}!",
"notification-header-thank-you-10-edit": "{{GENDER:$2|Acaba}} de facer {{GENDER:$2|a súa}} décima edición en, {{GENDER:$2|grazas}}, e por favor, continúe!",
@@ -152,7 +152,7 @@
"notification-header-thank-you-100000-edit": "Acaba de facer {{GENDER:$2|a súa}} edición número cen mil. {{GENDER:$2|Grazas}} pola súa incrible contribución!",
"notification-header-thank-you-1000000-edit": "Acaba de facer {{GENDER:$2|a súa}} edición número un millón. {{GENDER:$2|Grazas}} pola súa abraiante contribución!",
"notification-link-thank-you-edit": "{{GENDER:$1|A súa}} edición",
- "notification-link-text-view-edit": "Mostrar a edición",
+ "notification-link-text-view-edit": "Amosar a edición",
"notification-link-article-reminder": "Ollar a páxina",
"notification-header-reverted": "{{PLURAL:$4|A túa edición en <strong>$3</strong> foi revertida|As túas edicións en <strong>$3</strong> foron {{GENDER:$2|revertidas}}}}.",
"notification-header-emailuser": "$1 {{GENDER:$2|envioulle}} un correo electrónico.",
@@ -185,7 +185,7 @@
"echo-notification-notice-text-only": "Avisos",
"echo-overlay-link": "Todas as notificacións",
"echo-overlay-title": "<b>Notificacións</b>",
- "echo-overlay-title-overflow": "<b>{{PLURAL:$1|Notificación|Notificacións}}</b> (mostrando $1 de $2 sen ler)",
+ "echo-overlay-title-overflow": "<b>{{PLURAL:$1|Notificación|Notificacións}}</b> (amosando $1 de $2 sen ler)",
"echo-mark-all-as-read": "Marcar todo como lido",
"echo-mark-all-as-read-confirmation": "$1 {{PLURAL:$1|notificación marcada como lida|notificacións marcadas como lidas}}",
"echo-mark-wiki-as-read": "Marcar todas como lidas na wiki seleccionada: $1",
diff --git a/Echo/i18n/glk.json b/Echo/i18n/glk.json
index eadd36b9..2596fea7 100644
--- a/Echo/i18n/glk.json
+++ b/Echo/i18n/glk.json
@@ -4,6 +4,5 @@
"شیخ"
]
},
- "tooltip-pt-notifications-alert": "{{GENDER:|شيمي}} واخؤ گۊدنؤن",
- "tooltip-pt-notifications-message": "{{GENDER:|شيمي}} پىغامؤن"
+ "tooltip-pt-notifications-alert": "{{GENDER:|شيمي}} واخؤ گۊدنؤن"
}
diff --git a/Echo/i18n/gn.json b/Echo/i18n/gn.json
index 24d187ae..7e591943 100644
--- a/Echo/i18n/gn.json
+++ b/Echo/i18n/gn.json
@@ -9,15 +9,12 @@
"prefs-emailsettings": "E-mail jeporavo",
"prefs-displaynotifications": "Jehecha jeporavo",
"prefs-echosubscriptions": "Tomomarandu chéve kóva rehegua",
- "prefs-newmessageindicator": "Momba'ukaha pyahu hechaukaha",
"echo-pref-send-me": "Chemombe'ukarãː",
"echo-pref-send-to": "Mombe'ukaː",
"echo-pref-email-format": "E-mail rekoː",
"echo-pref-web": "Web",
"echo-pref-email": "E-mail",
"echo-pref-email-format-html": "HTML",
- "echo-no-agent": "[Mavave]",
- "echo-no-title": "[Ndaipóri Kuatirogue]",
"notifications": "Maranduha",
"echo-specialpage": "Maranduha",
"echo-none": "Nderereko maranduha pyahu.",
@@ -26,6 +23,5 @@
"notification-link-text-view-message": "Mombe'ukaha jehecha",
"notification-link-text-view-changes": "Ñemoambue jehecha",
"notification-link-text-view-page": "Kuatiarogue jehecha",
- "notification-link-text-view-edit": "Jehaijey jehecha",
- "notification-edit-talk-page2": "[[User:$1|$1]] {{GENDER:$1|omoĩ}} mombe'ukaha pyahu nde [[User talk:$2#$3|myangekõi kuatiápe]]."
+ "notification-link-text-view-edit": "Jehaijey jehecha"
}
diff --git a/Echo/i18n/gom-latn.json b/Echo/i18n/gom-latn.json
index c214742f..d1909cf8 100644
--- a/Echo/i18n/gom-latn.json
+++ b/Echo/i18n/gom-latn.json
@@ -5,7 +5,6 @@
]
},
"tooltip-pt-notifications-alert": "{{GENDER:|Tujeo}} chotraio",
- "tooltip-pt-notifications-message": "{{GENDER:|Tujeo}} sondex",
"notification-timestamp-today": "Aiz",
"notification-timestamp-yesterday": "Kal",
"notification-inbox-filter-read": "Vach",
diff --git a/Echo/i18n/gor.json b/Echo/i18n/gor.json
index 89f3b784..018e3a57 100644
--- a/Echo/i18n/gor.json
+++ b/Echo/i18n/gor.json
@@ -4,6 +4,5 @@
"Marwan Mohamad"
]
},
- "tooltip-pt-notifications-alert": "Mopo'ota {{GENDER:|Yi'o}}",
- "tooltip-pt-notifications-message": "Tahuli {{GENDER:|Yi'o}}"
+ "tooltip-pt-notifications-alert": "Mopo'ota {{GENDER:|Yi'o}}"
}
diff --git a/Echo/i18n/grc.json b/Echo/i18n/grc.json
index 7ddc3f37..8db2c8e7 100644
--- a/Echo/i18n/grc.json
+++ b/Echo/i18n/grc.json
@@ -4,6 +4,5 @@
"Gts-tg"
]
},
- "tooltip-pt-notifications-alert": "Αἴ {{GENDER:|ὐμετέραι}} ἐιδοποιήσεις",
- "tooltip-pt-notifications-message": "Αἴ {{GENDER:|ὐμέτεραι}} ἀγγέλματα"
+ "tooltip-pt-notifications-alert": "Αἴ {{GENDER:|ὐμετέραι}} ἐιδοποιήσεις"
}
diff --git a/Echo/i18n/gsw.json b/Echo/i18n/gsw.json
index 24fe4087..bd70c7ca 100644
--- a/Echo/i18n/gsw.json
+++ b/Echo/i18n/gsw.json
@@ -9,7 +9,6 @@
"prefs-echo": "Hiwyse",
"prefs-emailsettings": "E-Mail-Ystellige",
"prefs-echosubscriptions": "Uswahl vo de Hiwyse",
- "prefs-newmessageindicator": "Hiwysen ir Wikipedia azeige",
"echo-pref-send-me": "Schick mer es E-Mail:",
"echo-pref-send-to": "E-Mail-Adrässe:",
"echo-pref-email-format": "E-Mail-Format:",
@@ -21,7 +20,6 @@
"echo-pref-email-frequency-weekly": "Zämefassig vo de Hiwysen einisch ir Wuche",
"echo-pref-email-format-html": "HTML",
"echo-pref-email-format-plain-text": "Reine Text",
- "echo-pref-new-message-indicator": "Nöüi Hiwysen i der persönleche Lysten azeige.",
"echo-learn-more": "Meh lehre",
"echo-new-messages": "Du hesch nöüi Nachrichte",
"echo-category-title-edit-user-talk": "Myni Diskussion",
diff --git a/Echo/i18n/gu.json b/Echo/i18n/gu.json
index a795aafb..c3622e8e 100644
--- a/Echo/i18n/gu.json
+++ b/Echo/i18n/gu.json
@@ -14,7 +14,6 @@
"prefs-displaynotifications": "પ્રદર્શન વિકલ્પો",
"prefs-echosubscriptions": "મને આ ઘટનાઓ વિશે જાણ કરવી",
"prefs-echocrosswiki": "આંતર-વિકિ સૂચનાઓ",
- "prefs-newmessageindicator": "નવો સંદેશ સૂચક",
"echo-pref-send-me": "મને મોકલો:",
"echo-pref-send-to": "આને મોકલો:",
"echo-pref-email-format": "ઈમેઇલ માળખું:",
@@ -27,7 +26,6 @@
"echo-pref-email-format-html": "HTML",
"echo-pref-email-format-plain-text": "સાદું લખાણ",
"echo-pref-cross-wiki-notifications": "અન્ય વિકિ પરની સૂચનાઓ દર્શાવો",
- "echo-pref-new-message-indicator": "ચર્ચા પાનાઓની સૂચનાઓ મારી સાધનપટ્ટીમાં દેખાડવી",
"echo-learn-more": "વધુ જાણો",
"echo-log": "જાહેર નોંધ",
"echo-new-messages": "તમારા માટે નવા સંદેશાઓ છે",
diff --git a/Echo/i18n/hak.json b/Echo/i18n/hak.json
index 85e24de2..a83c71c7 100644
--- a/Echo/i18n/hak.json
+++ b/Echo/i18n/hak.json
@@ -4,6 +4,5 @@
"Hakka"
]
},
- "tooltip-pt-notifications-alert": "{{GENDER:|ngì ke}} thì-siáng",
- "tooltip-pt-notifications-message": "{{GENDER:|Ngì ke}} liù-ngièn sêu-sit"
+ "tooltip-pt-notifications-alert": "{{GENDER:|ngì ke}} thì-siáng"
}
diff --git a/Echo/i18n/haw.json b/Echo/i18n/haw.json
index ae08c7b9..c57ac4ef 100644
--- a/Echo/i18n/haw.json
+++ b/Echo/i18n/haw.json
@@ -8,7 +8,6 @@
"prefs-echo": "Notikala",
"prefs-emailsettings": "Koho leka uila",
"prefs-displaynotifications": "Koho hō‘ike",
- "prefs-newmessageindicator": "Hō‘ailona no nā memo hou",
"echo-pref-send-me": "Ho‘ouna ia‘u:",
"echo-pref-send-to": "Ho‘ouna iā:",
"echo-pref-email-format": "Hulu leka uila:",
diff --git a/Echo/i18n/he.json b/Echo/i18n/he.json
index abda6166..51a3c217 100644
--- a/Echo/i18n/he.json
+++ b/Echo/i18n/he.json
@@ -21,7 +21,6 @@
"prefs-displaynotifications": "אפשרויות תצוגה",
"prefs-echosubscriptions": "להודיע לי על האירועים הבאים",
"prefs-echocrosswiki": "הודעות מאתרי ויקי אחרים",
- "prefs-newmessageindicator": "סמן הודעת דף שיחה חדשה",
"prefs-blocknotificationslist": "משתמשים מושתקים",
"echo-pref-send-me": "מה לשלוח לי:",
"echo-pref-send-to": "לשלוח אל:",
@@ -35,8 +34,7 @@
"echo-pref-email-format-html": "HTML",
"echo-pref-email-format-plain-text": "טקסט רגיל",
"echo-pref-cross-wiki-notifications": "הצגת הודעות מאתרי ויקי אחרים",
- "echo-pref-notifications-blacklist": "לא להציג התראות מהמשתמשים האלה. ([[mw:Help:Notifications#mute|מידע נוסף]])",
- "echo-pref-new-message-indicator": "הצגת סמן הודעות דף שיחה בסרגל הכלים שלי",
+ "echo-pref-notifications-blacklist": "לא להציג התראות מהמשתמשים האלה. ([[mw:Special:MyLanguage/Help:Notifications#mute|מידע נוסף]])",
"echo-pref-beta-feature-cross-wiki-message": "הודעות מורחבות",
"echo-pref-beta-feature-cross-wiki-description": "הצגה וארגון של הודעות יותר בקלות. כולל הצגת הודעות מאתרי ויקי שונים, שמאפשרת לך לראות הודעות דף שיחה מאתרים אחרים. (כדי לקבל הודעות בוויקי מסוים, יש להפעיל את אפשרות הבטא באותו הוויקי.)",
"echo-learn-more": "מידע נוסף",
@@ -91,8 +89,6 @@
"echo-none": "אין לך הודעות.",
"echo-more-info": "מידע נוסף",
"echo-feedback": "משוב",
- "echo-popup-footer-special-page-invitation": "<strong>{{GENDER:|נסה|נסי|נסו}} את העיצוב החדש של דף ההודעות.</strong> [$2 $1]",
- "echo-popup-footer-special-page-invitation-link": "המראה החדש וכל התכונות החדשות.",
"echo-api-failure": "לא ניתן היה לאחזר הודעות.",
"echo-api-failure-cross-wiki": "לא ניתנה גישה למתחם המרוחק.",
"echo-notification-placeholder": "אין הודעות.",
@@ -121,6 +117,8 @@
"notification-link-text-view-page": "הצגת הדף",
"notification-header-edit-user-talk": "$1 {{GENDER:$2|השאיר|השאירה}} הודעה ב<strong>דף השיחה {{GENDER:$3|שלך}}</strong>.",
"notification-header-edit-user-talk-with-section": "$1 {{GENDER:$2|השאיר|השאירה}} הודעה ב<strong>דף השיחה {{GENDER:$3|שלך}}</strong> בפסקה \"<strong>$4</strong>\".",
+ "notification-compact-header-edit-user-talk": "$1 {{GENDER:$2|השאיר|השאירה}} {{GENDER:$3|לך}} הודעה.",
+ "notification-compact-header-edit-user-talk-with-section": "$1 {{GENDER:$2|השאיר|השאירה}} {{GENDER:$3|לך}} הודעה בפסקה \"<strong>$4</strong>\".",
"notification-header-page-linked": "נוצר קישור מהדף <strong>$4</strong> אל הדף <strong>$3</strong>.",
"notification-compact-header-page-linked": "קושר מהדף <strong>$1</strong>.",
"notification-bundle-header-page-linked": "נוצרו קישורים מ{{GRAMMAR:תחילית|{{PLURAL:$5||$5 דפים|100=99+ דפים}}}} אל הדף <strong>$3</strong>.",
@@ -149,6 +147,7 @@
"notification-header-user-rights-add-and-remove": "הרשאות המשתמש שלך {{GENDER:$1|שונו}}. נוספת ל{{GRAMMAR:תחילית|$2}}. {{GENDER:$6|אתה כבר לא חבר|את כבר לא חברה}} ב{{GRAMMAR:תחילית|$4}}.",
"notification-header-user-rights-expiry-change": "תפוגת החברות {{GENDER:$4|שלך}} {{PLURAL:$3|בקבוצה הבאה|בקבוצות הבאות}} {{GENDER:$1|שונתה}}: $2",
"notification-header-welcome": "{{GENDER:$2|ברוך הבא|ברוכה הבאה|ברוך בואך}} ל{{GRAMMAR:תחילית|{{SITENAME}}}}&rlm;, $1! אנחנו שמחים {{GENDER:$2|שאתה פה|שאת פה|שבאת}}.",
+ "notification-header-mention-summary": "$1 {{GENDER:$2|הזכיר|הזכירה}} {{GENDER:$3|אותך}} בתקציר העריכה בדף <strong>$4</strong>.",
"notification-welcome-linktext": "ברוך בואך",
"notification-header-thank-you-1-edit": "זה עתה {{GENDER:$2|עשית}} את העריכה הראשונה שלך; תודה ו{{GENDER:$2|ברוך הבא|ברוכה הבאה|ברוך בואך}}!",
"notification-header-thank-you-10-edit": "זה עתה {{GENDER:$2|עשית}} את העריכה העשירית שלך; תודה, {{GENDER:$2|המשך|המשיכי}} כך!",
diff --git a/Echo/i18n/hi.json b/Echo/i18n/hi.json
index 5081463f..f018925b 100644
--- a/Echo/i18n/hi.json
+++ b/Echo/i18n/hi.json
@@ -25,7 +25,6 @@
"prefs-displaynotifications": "प्रदर्शन विकल्प",
"prefs-echosubscriptions": "मुझे इन घटनाओं के बारे में सूचित करें",
"prefs-echocrosswiki": "क्रॉस-विकी नोटिफिकेशन",
- "prefs-newmessageindicator": "नए संदेश का संकेतक",
"prefs-blocknotificationslist": "मूक उपयोगकर्ता",
"echo-pref-send-me": "मुझे भेजिए:",
"echo-pref-send-to": "यहाँ भेजिए:",
@@ -39,7 +38,6 @@
"echo-pref-email-format-html": "एच॰टी॰एम॰एल॰",
"echo-pref-email-format-plain-text": "सादा पाठ",
"echo-pref-cross-wiki-notifications": "दूसरे विकीज़ से नोटिफिकेशन दिखाएँ",
- "echo-pref-new-message-indicator": "वार्ता पृष्ठ संदेश संकेतक मेरी उपकरण पट्टी में दिखाएँ",
"echo-pref-beta-feature-cross-wiki-message": "बढ़ा सूचना",
"echo-learn-more": "अधिक जानिए",
"echo-log": "सार्वजनिक लॉग",
@@ -88,8 +86,6 @@
"echo-none": "आपके लिये कोई अधिसूचना नहीं है।",
"echo-more-info": "अधिक जानकारी",
"echo-feedback": "आपके सुझाव",
- "echo-popup-footer-special-page-invitation": "<strong>सूचना पन्ने का फिर से रूप बनाने का कोशिश करें।</strong> [$2 $1]",
- "echo-popup-footer-special-page-invitation-link": "सभी नया रूप और विशेषता",
"echo-api-failure": "सूचना प्राप्त करने में विफल रहा।",
"echo-api-failure-cross-wiki": "रिमोट डोमैन ने जुड़ने से इंकार कर दिया।",
"echo-notification-placeholder": "कोई सूचना नहीं है।",
@@ -154,7 +150,7 @@
"echo-email-footer-default": "$2\n\nहमारी ओर से भेजे जाने वाले ईमेलों पर नियंत्रण करने के लिये कृपया अपनी पसन्द देखिए:\n{{canonicalurl:{{#special:Preferences}}#mw-prefsection-echo}}\n\n$1",
"echo-email-html-footer-preference-link-text": "{{GENDER:$1|अपनी}} पसंद देखें",
"echo-notification-alert": "{{PLURAL:$1|सूचना ($1)|सूचना ($1)|100=सूचना (99+)}}",
- "echo-notification-alert-text-only": "चेतावनी",
+ "echo-notification-alert-text-only": "सूचना",
"echo-notification-notice-text-only": "सूचना",
"echo-overlay-link": "सभी सूचनायें",
"echo-overlay-title": "<b>सूचनायें</b>",
diff --git a/Echo/i18n/hr.json b/Echo/i18n/hr.json
index bc66aa73..9618b596 100644
--- a/Echo/i18n/hr.json
+++ b/Echo/i18n/hr.json
@@ -15,7 +15,6 @@
"prefs-displaynotifications": "Opcije prikaza",
"prefs-echosubscriptions": "Obavijesti me o događajima",
"prefs-echocrosswiki": "Obavijesti s drugih wikija",
- "prefs-newmessageindicator": "Pokazivač novih poruka",
"prefs-blocknotificationslist": "Suradnici čije obavijesti i vijestice ne želite primati",
"echo-pref-send-me": "Pošalji mi:",
"echo-pref-send-to": "Pošalji na:",
@@ -29,10 +28,9 @@
"echo-pref-email-format-html": "HTML",
"echo-pref-email-format-plain-text": "obični tekst",
"echo-pref-cross-wiki-notifications": "Prikaži obavijesti s drugih wikija",
- "echo-pref-notifications-blacklist": "Popis suradnika koji Vam, u većini slučajeva, ne će više moći slati obavijesti i vijestice (nema utjecaja na izmjene na Vašoj razgovornoj stranici; [[mw:Help:Notifications#mute|saznaj više]])",
- "echo-pref-new-message-indicator": "Prikaži pokazivač poruka uz stranicu za razgovor na mojoj alatnoj traci",
+ "echo-pref-notifications-blacklist": "Ne prikazuj obavijesti ovih suradnika. ([[mw:Special:MyLanguage/Help:Notifications#mute|saznaj više]])",
"echo-pref-beta-feature-cross-wiki-message": "Poboljšane obavijesti",
- "echo-pref-beta-feature-cross-wiki-description": "Jednostavniji pregled i organiziranje obavijesti, uključujući i mogućnost pregleda obavijesti s drugih wikija.",
+ "echo-pref-beta-feature-cross-wiki-description": "Jednostavniji pregled i organiziranje obavijesti, uključujući i mogućnost pregleda obavijesti s drugih wikija. Da biste primali obavijesti s drugih wikija, morate omogućiti beta mogućnost na tom wikiju.",
"echo-learn-more": "Saznajte više",
"echo-log": "Javni očevidnik",
"echo-new-messages": "Imate nove poruke",
@@ -49,6 +47,8 @@
"echo-pref-tooltip-article-linked": "Obavijesti me kad netko doda poveznicu na stranicu koju sam započeo s druge stranice.",
"echo-pref-tooltip-reverted": "Obavijesti me kad netko ukloni moje uređivanje.",
"echo-pref-tooltip-mention": "Obavijesti me kad netko doda poveznicu prema mojoj suradničkoj stranici.",
+ "echo-pref-tooltip-mention-failure": "Obavijesti me kad netko nije dobio obavijest nakon što sam ga spomenuo.",
+ "echo-pref-tooltip-mention-success": "Obavijesti me kad ikom pošaljem spominjanje.",
"echo-pref-tooltip-user-rights": "Obavijesti me kad netko promijeni moja suradnička prava.",
"echo-pref-tooltip-emailuser": "Obavijesti me kada mi netko pošalje e-poštu.",
"notifications": "Obavijesti",
@@ -64,8 +64,6 @@
"echo-none": "Nemate obavijesti.",
"echo-more-info": "Više informacija",
"echo-feedback": "Povratna informacija",
- "echo-popup-footer-special-page-invitation": "<strong>Isprobajte redizajniranu stranicu s obavijestima.</strong> [$2 $1]",
- "echo-popup-footer-special-page-invitation-link": "Novi izgled i mogućnosti.",
"echo-api-failure": "Dobavljanje obavijesti/vijestica nije bilo uspješno!",
"echo-notification-placeholder": "Nema obavijesti.",
"echo-notification-placeholder-filters": "Nema obavijesti prema zadanom kriteriju.",
@@ -75,6 +73,7 @@
"echo-notification-markasunread": "Označi kao nepročitano",
"echo-notification-markasread-tooltip": "Označi kao pročitano",
"echo-notification-more-options-tooltip": "Više mogućnosti",
+ "notification-dynamic-actions-unwatch": "{{GENDER:$3|Prestani}} pratiti nove aktivnosti na \"$1\"",
"notification-link-text-expand-all": "Proširi",
"notification-link-text-expand-alert-count": "Vidi {{PLURAL:$1|$1 obavijest|$1 obavijesti}}",
"notification-link-text-expand-notice-count": "Vidi {{PLURAL:$1|$1 vijesticu|$1 vijestice|$1 vijestica}}",
@@ -82,6 +81,7 @@
"notification-link-text-collapse-all": "Sažmi",
"notification-link-text-view-message": "Pogledajte poruku",
"notification-link-text-view-mention": "Pogledaj spominjanja",
+ "notification-link-text-view-mention-failure": "{{PLURAL:$1|Vidi spominjanje|Vidi spominjanja}}",
"notification-link-text-view-changes": "{{GENDER:$1|Pregled}} promjena",
"notification-link-text-view-page": "Vidi stranicu",
"notification-header-edit-user-talk": "$1 {{GENDER:$2|Vam je ostavio|Vam je ostavila}} poruku na {{GENDER:$3|Vašoj}} stranici za razgovor.",
@@ -91,10 +91,12 @@
"notification-bundle-header-page-linked": "Stranica $3 je {{GENDER:$2|povezana}} sa stranicom $4 i s još $5 {{PLURAL:$6|stranicom|stranice|stranica}}.",
"notification-link-text-what-links-here": "Sve poveznice na ovu stranicu",
"notification-header-mention-other": "$1 Vas je {{GENDER:$2|spomenuo|spomenula}} {{GENDER:$3|na}} <strong>$4</strong> u „<strong>$5</strong>”.",
+ "notification-header-mention-other-nosection": "$1 {{GENDER:$3|Vas}} je {{GENDER:$2|spomenuo|spomenula}} na <strong>$4</strong>.",
"notification-header-mention-user-talkpage-v2": "$1 {{GENDER:$3|Vas}} je {{GENDER:$2|spomenuo|spomenula}} na <strong>razgovornoj stranici {{GENDER:$5|suradnika|suradnice}} $4</strong> u odlomku »<strong>$6</strong>«.",
"notification-header-mention-user-talkpage-nosection": "$1 {{GENDER:$3|Vas}} je {{GENDER:$2|spomenuo|spomenula}} na <strong>razgovornoj stranici {{GENDER:$5|suradnika|suradnice}} $4</strong>.",
"notification-header-mention-agent-talkpage": "$1 {{GENDER:$3|Vas}} je {{GENDER:$2|spomenuo|spomenula}} na <strong>{{GENDER:$2|svojoj}} razgovornoj stranici</strong> u odlomku »<strong>$4</strong>«.",
"notification-header-mention-article-talkpage": "$1 {{GENDER:$3|Vas}} je {{GENDER:$2|spomenuo|spomenula}} na razgovornoj stranici <strong>$4</strong> u temi \"<strong>$5</strong>\".",
+ "notification-header-mention-article-talkpage-nosection": "$1 {{GENDER:$3|Vas}} je {{GENDER:$2|spomenuo|spomenula}} na <strong>$4</strong> stranici za razgovor.",
"notification-header-mention-failure-user-unknown": "{{GENDER:$2|Vaše}} spominjanje suradnika <strong>$3</strong> nije bilo poslano, jer suradničko ime nije bilo moguće pronaći.",
"notification-header-mention-failure-user-anonymous": "{{GENDER:$2|Vaše}} spominjanje suradnika <strong>$3</strong> nije poslano, jer je neprijavljeni suradnik anoniman.",
"notification-header-mention-failure-bundle": "{{PLURAL:$3|Spominjanje koje|$3 spominjanja koja}} ste Vi {{GENDER:$2|poslali|poslala}}, a putem razgovorne stranice <strong>$4</strong>, {{PLURAL:$3|nije bilo isporučeno|nisu bila isporučena}}.",
@@ -104,6 +106,7 @@
"notification-header-mention-success-bundle": "{{PLURAL:$3|Spominjanje koje|$3 spominjanja koja}} ste Vi {{GENDER:$2|poslali|poslala}}, a putem razgovorne stranice <strong>$4</strong>, {{PLURAL:$3|bilo je isporučeno|bila su isporučena}}.",
"notification-compact-header-mention-success": "<strong>{{GENDER:$2|Spomenuo si suradnika|Spomenula si suradnika|Spomenuli ste suradnika}}:</strong> $3",
"notification-header-user-rights-add-only": "{{GENDER:$4|Vašu}} pripadnost suradničkim skupinama {{GENDER:$1|promijenio|promijenila}} je {{GENDER:$1|suradnik|suradnica}} $1. Sad ste {{GENDER:$4|pripadnikom|pripadnicom}} suradničke skupine: $2.",
+ "notification-header-mention-summary": "$1 {{GENDER:$3|Vas}} je {{GENDER:$2|spomenuo|spomenula}} u sažetku uređivanja <strong>$4</strong>.",
"notification-welcome-linktext": "Dobro došli",
"notification-header-thank-you-1-edit": "Upravo {{GENDER:$2|ste}} načinili {{GENDER:$2|Vaše}} prvo uređivanje, zahvaljujemo {{GENDER:$2|Vam}} i dobro nam došli!",
"notification-header-thank-you-10-edit": "Upravo {{GENDER:$2|ste}} načinili {{GENDER:$2|Vaše}} deseto uređivanje, zahvaljujemo {{GENDER:$2|Vam}} i molimo Vas da tako i nastavite!",
@@ -134,8 +137,10 @@
"notification-inbox-filter-all": "Sve",
"echo-email-body-default": "Imate novu obavijest na projektu {{SITENAME}}:\n\n$1",
"echo-email-footer-default-html": "Ukoliko želite prilagoditi primanje e-pošte, <a href=\"$2\" style=\"text-decoration:none; color: #3868B0;\">prilagodite svoje postavke</a>.<br />\n$1",
- "echo-email-footer-default": "$2\n\nUkoliko želite prilagoditi primanje e-pošte, prilagodite svoje postavke:\n{{canonicalurl:{{#special:Preferences}}#mw-prefsection-echo}}\n\n$1",
+ "echo-email-footer-default": "$2\n\nUkoliko želite prilagoditi primanje e-pošte, provjerite svoje postavke:\n{{canonicalurl:{{#special:Preferences}}#mw-prefsection-echo}}\n\n$1",
"echo-email-plain-footer": "Da biste prilagodili primanje e-pošte, provjerite postavke:",
+ "echo-email-html-footer-preference-link-text": "provjerite {{GENDER:$1|Vaše}} postavke",
+ "echo-email-html-footer-with-link": "Da biste prilagodili primanje e-pošte, $1.",
"echo-notification-alert": "{{PLURAL:$1|Imate jednu obavijest|Imate $1 obavijesti|100=Imate više od 100 obavijesti}}",
"echo-notification-notice": "{{PLURAL:$1|Imate jednu vijesticu|Imate $1 vijestice|Imate $1 vijestica|100=Imate 100 ili više vijestica}}",
"echo-notification-alert-text-only": "Obavijesti",
diff --git a/Echo/i18n/hsb.json b/Echo/i18n/hsb.json
index b0bff710..bdca0301 100644
--- a/Echo/i18n/hsb.json
+++ b/Echo/i18n/hsb.json
@@ -10,7 +10,6 @@
"prefs-emailsettings": "E-mejlowe nastajenja",
"prefs-displaynotifications": "Zwobraznjenske opcije",
"prefs-echosubscriptions": "Mje wo tutych podawkach informować",
- "prefs-newmessageindicator": "Nowy powěsćowy indikator",
"echo-pref-send-me": "Pósćel mi:",
"echo-pref-send-to": "Pósłać na:",
"echo-pref-email-format": "E-mejlowy format:",
@@ -22,7 +21,6 @@
"echo-pref-email-frequency-weekly": "Tydźenski přehlad zdźělenkow",
"echo-pref-email-format-html": "HTML",
"echo-pref-email-format-plain-text": "Luty tekst",
- "echo-pref-new-message-indicator": "Powěsćowy indikator diskusijneje strony w symbolowej lajsće pokazać",
"echo-learn-more": "Dalše informacije",
"echo-new-messages": "Maš nowe powěsće",
"echo-category-title-edit-user-talk": "{{PLURAL:$1|Powěsć|Powěsći|Powěsće|Powěsćow}} na diskusijnej stronje",
diff --git a/Echo/i18n/hu.json b/Echo/i18n/hu.json
index 5b0d138b..a2ce8532 100644
--- a/Echo/i18n/hu.json
+++ b/Echo/i18n/hu.json
@@ -21,7 +21,6 @@
"prefs-displaynotifications": "Megjelenítési beállítások",
"prefs-echosubscriptions": "Értesítést kérek ezekről az eseményekről",
"prefs-echocrosswiki": "Wikiközi értesítések",
- "prefs-newmessageindicator": "Új üzenet jelzése",
"prefs-blocknotificationslist": "Lenémított felhasználók",
"echo-pref-send-me": "Gyakoriság:",
"echo-pref-send-to": "Erre a címre:",
@@ -35,8 +34,7 @@
"echo-pref-email-format-html": "HTML",
"echo-pref-email-format-plain-text": "Sima szöveg",
"echo-pref-cross-wiki-notifications": "Értesítések megjelenítése más wikikről",
- "echo-pref-notifications-blacklist": "Értesítések megjelenítésének letiltása ezektől a felhasználóktól. ([[mw:Help:Notifications#mute|további információk]])",
- "echo-pref-new-message-indicator": "Jelezze a vitalapi üzeneteket a lap tetején lévő menüben",
+ "echo-pref-notifications-blacklist": "Értesítések megjelenítésének letiltása ezektől a felhasználóktól. ([[mw:Help:Notifications/hu#mute|további információk]])",
"echo-pref-beta-feature-cross-wiki-message": "Fejlettebb értesítések",
"echo-learn-more": "Tudj meg többet",
"echo-log": "Nyilvános napló",
@@ -87,8 +85,6 @@
"echo-none": "Nincsenek értesítéseid.",
"echo-more-info": "További információ",
"echo-feedback": "Visszajelzés",
- "echo-popup-footer-special-page-invitation": "<strong>Próbáld ki az újratervezett Értesítések lapot.</strong> [$2 $1]",
- "echo-popup-footer-special-page-invitation-link": "Teljesen új megjelenés és funkciók.",
"echo-api-failure": "Nem sikerült lekérni az értesítéseket.",
"echo-api-failure-cross-wiki": "A hozzáférés a távoli tartományhoz elutasítva.",
"echo-notification-placeholder": "Nincsenek értesítések.",
@@ -117,6 +113,8 @@
"notification-link-text-view-page": "Lap mutatása",
"notification-header-edit-user-talk": "$1 üzenetet {{GENDER:$2|hagyott}} {{GENDER:$3|a <strong>vitalapodon</strong>}}.",
"notification-header-edit-user-talk-with-section": "$1 üzenetet {{GENDER:$2|hagyott}} {{GENDER:$3|a <strong>vitalapodon</strong>}} a(z) „<strong>$4</strong>” szakaszban.",
+ "notification-compact-header-edit-user-talk": "$1 üzenetet {{GENDER:$2|hagyott}} {{GENDER:$3|neked}}.",
+ "notification-compact-header-edit-user-talk-with-section": "$1 üzenetet {{GENDER:$2|hagyott}} {{GENDER:$3|neked}} a(z) „<strong>$4</strong>” szakaszban.",
"notification-header-page-linked": "A(z) <strong>$3</strong> lapra hivatkoztak a(z) <strong>$4</strong> lapról.",
"notification-compact-header-page-linked": "Hivatkozva a(z) <strong>$1</strong> lapról.",
"notification-bundle-header-page-linked": "Hivatkozás készült {{PLURAL:$5||$5 lapról|100=99+ lapról}} a(z) <strong>$3</strong> lapra.",
@@ -143,6 +141,7 @@
"notification-header-user-rights-remove-only": "{{GENDER:$1|Megváltoztak}} a {{GENDER:$4|jogosultságaid}}. Kikerültél {{PLURAL:$3|ebből a csoportból|ezekből a csoportokból}}: $2",
"notification-header-user-rights-add-and-remove": "{{GENDER:$1|Megváltoztak}} a {{GENDER:$6|jogosultságaid}}. Tagja lettél {{PLURAL:$3|ennek a csoportnak|ezeknek a csoportoknak}}: $2. Kikerültél {{PLURAL:$5|ebből a csoportból|ezekből a csoportokból}}: $4.",
"notification-header-welcome": "{{GENDER:$2|Üdvözlünk}} a(z) {{SITENAME}} wikin, $1! Örülünk, hogy itt {{GENDER:$2|vagy}}.",
+ "notification-header-mention-summary": "$1 {{GENDER:$2|megemlített}} {{GENDER:$3|téged}} egy szerkesztési összefoglalóban a(z) <strong>$4</strong> lapon.",
"notification-welcome-linktext": "Üdvözlet",
"notification-header-thank-you-1-edit": "{{GENDER:$2|Elkészítetted}} az első szerkesztésedet; köszönjük és üdvözlünk!",
"notification-header-thank-you-10-edit": "{{GENDER:$2|Elkészítetted}} a tizedik szerkesztésedet; köszönjük és csak így tovább!",
@@ -153,6 +152,7 @@
"notification-header-thank-you-1000000-edit": "{{GENDER:$2|Elkészítetted}} a milliomodik szerkesztésedet; köszönjük a megdöbbentő hozzájárulásodat!",
"notification-link-thank-you-edit": "A {{GENDER:$1|szerkesztésed}}",
"notification-link-text-view-edit": "Szerkesztés mutatása",
+ "notification-link-article-reminder": "Oldal megtekintése",
"notification-header-reverted": "{{GENDER:$2|Visszavonták}} a {{PLURAL:$4|szerkesztésedet|szerkesztéseidet}} a(z) <strong>$3</strong> cikkben.",
"notification-header-emailuser": "$1 {{GENDER:$2|küldött}} neked egy e-mailt",
"notification-edit-talk-page-email-subject2": "$1 üzenetet hagyott neked a(z) {{SITENAME}} wikin",
diff --git a/Echo/i18n/hy.json b/Echo/i18n/hy.json
index e6025ae4..0a4df19e 100644
--- a/Echo/i18n/hy.json
+++ b/Echo/i18n/hy.json
@@ -5,7 +5,8 @@
"Lilitik22",
"Դավիթ Սարոյան",
"Aram1985",
- "Աշոտ1997"
+ "Աշոտ1997",
+ "23artashes"
]
},
"echo-desc": "Մասնակիցներին միջոցառումների և հաղորդագրությունների մասին ծանուցող համակարգ",
@@ -14,7 +15,6 @@
"prefs-displaynotifications": "Ցուցադրման կարգավորումներ",
"prefs-echosubscriptions": "Ծանուցել հետևյալ դեպքերում",
"prefs-echocrosswiki": "Միջվիքիական հաղորդագրություններ",
- "prefs-newmessageindicator": "Նոր ուղերձների ցուցիչ։",
"echo-pref-send-me": "Ուղարկել ինձ․",
"echo-pref-send-to": "Ուղարկել․",
"echo-pref-email-format": "Նամակի ձևաչափ․",
@@ -26,13 +26,12 @@
"echo-pref-email-frequency-weekly": "Ծանուցումների շաբաթական ամփոփում",
"echo-pref-email-format-html": "ԷյչԹիԷմԷլ",
"echo-pref-email-format-plain-text": "Պարզ տեքստ",
- "echo-pref-cross-wiki-notifications": "Ցույց այլ վիքիների ծանուցումները",
- "echo-pref-new-message-indicator": "Ցուցադրել քննարկման էջի հաղորդագրությունների ցուցիչը իմ վահանակում",
+ "echo-pref-cross-wiki-notifications": "Ցուցադրել այլ վիքիների ծանուցումները",
"echo-pref-beta-feature-cross-wiki-message": "Բարելավված ծանուցումներ",
"echo-learn-more": "Իմանալ ավելին",
"echo-log": "Հանրամատչելի գրանցամատյան",
"echo-new-messages": "Դուք նոր ուղերձներ ունեք",
- "echo-category-title-edit-user-talk": "Քննարկման էջում {{PLURAL:$1|ուղերձ|ուղերձներ}}",
+ "echo-category-title-edit-user-talk": "{{PLURAL:$1|Ուղերձ|ուղերձներ}} քննարկման էջում",
"echo-category-title-article-linked": "Էջի {{PLURAL:$1|հղում|հղումներ}}",
"echo-category-title-reverted": "{{PLURAL:$1|1=Խմբագրման|Խմբագրումների}} հետ շրջում",
"echo-category-title-mention": "{{PLURAL:$1|Նշում|Նշումներ}}",
@@ -72,12 +71,11 @@
"echo-none": "Դուք ծանուցումներ չունեք։",
"echo-more-info": "Մանրամասն",
"echo-feedback": "Հետադարձ կապ",
- "echo-popup-footer-special-page-invitation-link": "Նոր տեսք և ֆունկցիաներ",
"echo-api-failure": "Չի հաջողվել ստանալ ծանուցումները:",
"echo-notification-placeholder": "Ծանուցումներ չկան",
"echo-notification-placeholder-filters": "Այս չափորոշչին համապատասխան ծանուցում չկա",
"echo-notification-loginrequired": "Դու պետք է մուտք գործես՝ ծանուցումներդ տեսնելու համար:",
- "echo-notification-popup-loginrequired": "Մուտք գործիր՝ ծանուցումներդ տեսնելու համար:",
+ "echo-notification-popup-loginrequired": "Մու՛տք գործիր ծանուցումներդ տեսնելու համար:",
"echo-notification-markasread": "Նշել ընթերցված",
"echo-notification-markasunread": "Նշել չընթերցված",
"echo-notification-markasread-tooltip": "Նշել ընթերցված",
@@ -100,7 +98,7 @@
"notification-link-text-what-links-here": "Այստեղ հղվող էջերը",
"notification-header-mention-other": "$1-ը {{GENDER:$2|հիշատակել է}} {{GENDER:$3|քեզ}} <strong>$4</strong> էջի «<strong>$5</strong>» բաժնում:",
"notification-header-mention-other-nosection": "$1-ը {{GENDER:$2|հիշատակել է}} {{GENDER:$3|քեզ}} <strong>$4</strong> էջում:",
- "notification-header-mention-user-talkpage-v2": "$1-ը {{GENDER:$2|հիշատակել է}} {{GENDER:$3|քեզ}} <strong> $4-ի քննարկման էջի</strong> «<strong>$6</strong>» բաժնում:",
+ "notification-header-mention-user-talkpage-v2": "$1-ը {{GENDER:$2|հիշատակել է}} {{GENDER:$3|քեզ}} <strong> $4-ի քննարկման {{GENDER:$5|էջի}}</strong> «<strong>$6</strong>» բաժնում:",
"notification-header-mention-user-talkpage-nosection": "$1-ը {{GENDER:$2|հիշատակել է}} {{GENDER:$3|քեզ}} <strong> $4-ի քննարկման էջի</strong>:",
"notification-header-mention-agent-talkpage": "$1-ը {{GENDER:$2|հիշատակել է}} {{GENDER:$3|քեզ}} <strong> {{GENDER:$2|իր}} քննարկման էջի</strong> «<strong>$4</strong>» բաժնում:",
"notification-header-mention-agent-talkpage-nosection": "$1-ը {{GENDER:$2|հիշատակել է}} {{GENDER:$3|քեզ}} <strong> {{GENDER:$2|իր}} քննարկման էջում</strong>:",
@@ -116,6 +114,7 @@
"notification-compact-header-mention-success": "<strong>{{GENDER:$2|Դու նշել ես}}՝</strong> $3",
"notification-header-user-rights-add-only": "{{GENDER:$4|Ձեր}} մասնակցային իրավունքները {{GENDER:$1|փոփոխվել են}}: Ձեզ ավելացրել են՝ «$2» խմբում:",
"notification-header-user-rights-remove-only": "{{GENDER:$4|Ձեր}} մասնակցային իրավունքները {{GENDER:$1|փոփոխվել են}}: Դուք այլևս $2 խմբում չեք:",
+ "notification-header-welcome": "{{GENDER:$2|Բարի գալո՜ւստ}} {{SITENAME}}, $1։ Մենք ուրախ ենք {{GENDER:$2|քեզ}} տեսնել այստեղ։",
"notification-welcome-linktext": "Բարի գալուստ",
"notification-header-thank-you-1-edit": "{{GENDER:$2|Դուք}} հենց նոր արեցիք {{GENDER:$2|Ձեր}} առաջին խմբագրումը: Շատ շնորհակալություն և բարի՛ գալուստ:",
"notification-header-thank-you-10-edit": "{{GENDER:$2|Դուք}} հենց նոր արեցիք {{GENDER:$2|ձեր}} տասներորդ խմբագրումը: Շարունակեք նույն կերպ:",
@@ -126,6 +125,7 @@
"notification-header-thank-you-1000000-edit": "{{GENDER:$2|Դու}} հենց նոր արեցիր {{GENDER:$2|քո}} միլիոներորդ խմբագրումը: Շնորհակալություն այսպիսի անհավատալի խմբագիր լինելու համար:",
"notification-link-thank-you-edit": "{{GENDER:$1|Ձեր}} խմբագրումը",
"notification-link-text-view-edit": "Դիտել խմբագրումը",
+ "notification-link-article-reminder": "Դիտել էջը",
"notification-header-reverted": "Քո {{PLURAL:$4|խմբագրումը <strong>$3</strong> էջում|խմբագրումները <strong>$3</strong> էջում}} {{PLURAL:$2|հետ է շրջվել|հետ են շրջվել}}:",
"notification-header-emailuser": "$1-ը քեզ {{GENDER:$2|ուղարկել է}} էլ. փոստ:",
"notification-edit-talk-page-email-subject2": "$1-ը հաղորդագրություն է {{GENDER:$1|թողել}} {{SITENAME}}-ում:",
diff --git a/Echo/i18n/hyw.json b/Echo/i18n/hyw.json
new file mode 100644
index 00000000..be4388c7
--- /dev/null
+++ b/Echo/i18n/hyw.json
@@ -0,0 +1,8 @@
+{
+ "@metadata": {
+ "authors": [
+ "Rajemian"
+ ]
+ },
+ "tooltip-pt-notifications-alert": "{{GENDER:|Ձեր}} զգուշացումները"
+}
diff --git a/Echo/i18n/ia.json b/Echo/i18n/ia.json
index f405c19d..a2b1df63 100644
--- a/Echo/i18n/ia.json
+++ b/Echo/i18n/ia.json
@@ -10,7 +10,6 @@
"prefs-emailsettings": "Optiones de e-mail",
"prefs-displaynotifications": "Optiones de presentation",
"prefs-echosubscriptions": "Notificar me de iste eventos",
- "prefs-newmessageindicator": "Indicator de nove messages",
"echo-pref-send-me": "Inviar me:",
"echo-pref-send-to": "Inviar a:",
"echo-pref-email-format": "Formato de e-mail:",
@@ -22,7 +21,6 @@
"echo-pref-email-frequency-weekly": "Un summario septimanal de notificationes",
"echo-pref-email-format-html": "HTML",
"echo-pref-email-format-plain-text": "Texto simple",
- "echo-pref-new-message-indicator": "Monstrar indicator de message in pagina de discussion in mi instrumentario",
"echo-learn-more": "Leger plus",
"echo-new-messages": "Tu ha nove messages",
"echo-category-title-edit-user-talk": "{{PLURAL:$1|Message|Messages}} del pagina de discussion",
@@ -32,10 +30,10 @@
"echo-category-title-other": "{{PLURAL:$1|Altere|Alteres}}",
"echo-category-title-system": "{{PLURAL:$1|Systema|Systemas}}",
"echo-pref-tooltip-edit-user-talk": "Notificar me quando alcuno scribe un message o responsa in mi pagina de discussion",
- "echo-pref-tooltip-article-linked": "Notificar me quando alcuno insere in un pagina de articulo un ligamine a un pagina que io ha create.",
+ "echo-pref-tooltip-article-linked": "Notificar me quando alcuno insere in un altere pagina un ligamine a un pagina que io ha create.",
"echo-pref-tooltip-reverted": "Notificar me quando alcuno reverte, per medio de \"disfacer\" o \"revocar\", un modification que io ha facite.",
"echo-pref-tooltip-mention": "Notificar me quando alcuno insere un ligamine a mi pagina de usator.",
- "echo-pref-tooltip-article-reminder": "Notificar me sur iste articulo quando io lo demandava.",
+ "echo-pref-tooltip-article-reminder": "Notificar me sur iste pagina quando io lo demanda.",
"echo-error-no-formatter": "Nulle formato definite pro notification",
"notifications": "Notificationes",
"tooltip-pt-notifications-alert": "Tu alertas",
@@ -51,9 +49,9 @@
"notification-link-text-view-mention": "Vider mention",
"notification-link-text-view-changes": "{{GENDER:$1|Vider}} modificationes",
"notification-link-text-view-page": "Vider pagina",
- "notification-header-article-reminder": "Un articulo del qual {{GENDER:$2|tu}} ha requestate de esser rememorate es a <strong>$3</strong>",
+ "notification-header-article-reminder": "Un pagina del qual {{GENDER:$2|tu}} ha requestate de esser rememorate es a <strong>$3</strong>",
"notification-link-text-view-edit": "Vider modification",
- "notification-link-article-reminder": "Vider articulo",
+ "notification-link-article-reminder": "Vider pagina",
"notification-header-reverted": "Tu {{PLURAL:$4|modification|modificationes}} de <strong>$3</strong> ha essite {{GENDER:$2|revertite}}.",
"notification-edit-talk-page-email-subject2": "$1 te {{GENDER:$1|ha lassate}} un message in {{SITENAME}}",
"notification-edit-talk-page-email-batch-body-with-section": "$1 {{GENDER:$1|ha lassate}} un message in tu pagina de discussion in \"$2\".",
diff --git a/Echo/i18n/id.json b/Echo/i18n/id.json
index 2f2910b9..6153d708 100644
--- a/Echo/i18n/id.json
+++ b/Echo/i18n/id.json
@@ -9,7 +9,9 @@
"WongKentir",
"Mbrt",
"Rachmat.Wahidi",
- "Kenrick95"
+ "Kenrick95",
+ "Gombang",
+ "Rachmat04"
]
},
"echo-desc": "Sistem pemberitahuan ke pengguna tentang pesan dan peristiwa",
@@ -18,7 +20,7 @@
"prefs-displaynotifications": "Opsi tampilan",
"prefs-echosubscriptions": "Beritahu saya mengenai peristiwa berikut",
"prefs-echocrosswiki": "Pemberitahuan antar-wiki",
- "prefs-newmessageindicator": "Penanda pesan baru",
+ "prefs-blocknotificationslist": "Pengguna yang dibisukan.",
"echo-pref-send-me": "Kirimi saya:",
"echo-pref-send-to": "Kirimkan ke:",
"echo-pref-email-format": "Format surel:",
@@ -31,61 +33,138 @@
"echo-pref-email-format-html": "HTML",
"echo-pref-email-format-plain-text": "Teks polos",
"echo-pref-cross-wiki-notifications": "Perlihatkan pemberitahuan dari wiki lain",
- "echo-pref-new-message-indicator": "Tampilkan penanda pesan halaman pembicaraan pada bilah alat saya",
- "echo-pref-beta-feature-cross-wiki-message": "Notifikasi tingkat tinggi",
+ "echo-pref-notifications-blacklist": "Jangan tampilkan pemberitahuan dari pengguna ini. \n([[mw:Special:MyLanguage/Help:Notifications#mute|learn more]])",
+ "echo-pref-beta-feature-cross-wiki-message": "Pemberitahuan tingkat tinggi",
+ "echo-pref-beta-feature-cross-wiki-description": "Lihat dan atur pemberitahuan dengan lebih mudah. Termasuk pemberitahuan lintas wiki, yang memungkinkan Anda untuk melihat pesan dari wiki lain. (Untuk menerima pemberitahuan lintas wiki pada wiki tertentu, Anda harus mengaktifkan fitur beta pada wiki tersebut)",
"echo-learn-more": "Pelajari selengkapnya",
+ "echo-log": "Catatan publik",
"echo-new-messages": "Anda memiliki pesan baru",
"echo-category-title-edit-user-talk": "{{PLURAL:$1|Pesan}} halaman pembicaraan",
"echo-category-title-article-linked": "{{PLURAL:$1|Pranala}} halaman",
"echo-category-title-reverted": "{{PLURAL:$1|Pembalikan}} suntingan",
"echo-category-title-mention": "{{PLURAL:$1|Sebutan}}",
+ "echo-category-title-mention-failure": "{{PLURAL:$1|Sebutan}} gagal",
+ "echo-category-title-mention-success": "{{PLURAL:$1|Sebutan}} berhasil",
"echo-category-title-other": "{{PLURAL:$1|Lainnya}}",
"echo-category-title-system": "{{PLURAL:$1|Sistem}}",
"echo-category-title-user-rights": "{{PLURAL:$1|Perubahan hak pengguna}}",
+ "echo-category-title-emailuser": "{{PLURAL:$1|Surel dari pengguna lain|Surel dari pengguna lain}}",
+ "echo-category-title-article-reminder": "Halaman {{PLURAL:$1|pengingat|pengingat}}",
"echo-pref-tooltip-edit-user-talk": "Beritahu saya saat seseorang mengirimkan pesan atau balasan pada halaman pembicaraan saya.",
"echo-pref-tooltip-article-linked": "Beritahu saya saat seseorang membuat pranala di halaman artikel ke sebuah halaman yang pernah saya rintis.",
"echo-pref-tooltip-reverted": "Beritahu saya saat seseorang membalikkan suntingan yang pernah saya buat, dengan menggunakan alat batalkan atau balikkan.",
- "echo-pref-tooltip-mention": "Beritahu saya saat seseorang membuat pranala menuju halaman pengguna saya.",
+ "echo-pref-tooltip-mention": "Beritahu saya saat seseorang menautkan ke halaman pengguna saya.",
+ "echo-pref-tooltip-mention-failure": "Beri tahu saya bila tidak dapat mengirim pesan ke pengguna lain.",
+ "echo-pref-tooltip-mention-success": "Beri tahu saya ketika mengirimkan sebutan ke seseorang.",
"echo-pref-tooltip-user-rights": "Beritahu saya saat seseorang mengubah hak pengguna saya.",
+ "echo-pref-tooltip-emailuser": "Beri tahu saya bila seseorang mengirim saya surel.",
+ "echo-pref-tooltip-article-reminder": "Beri tahu saya tentang halaman ini bila saya minta.",
"echo-error-no-formatter": "Tidak ada pemformatan yang ditetapkan untuk pemberitahuan.",
"notifications": "Notifikasi (Pemberitahuan)",
"tooltip-pt-notifications-alert": "Pemberitahuan {{GENDER:|Anda}}",
"tooltip-pt-notifications-notice": "Pemberitahuan {{GENDER:|Anda}}",
"echo-displaynotificationsconfiguration": "Perlihatkan konfigurasi Pemberitahuan",
+ "echo-displaynotificationsconfiguration-summary": "Ini adalah ikhtisar konfigurasi pemberitahuan pada wiki ini.",
+ "echo-displaynotificationsconfiguration-notifications-by-category-header": "Pemberitahuan berdasarkan kategori",
+ "echo-displaynotificationsconfiguration-sorting-by-section-header": "Menyortir jenis",
+ "echo-displaynotificationsconfiguration-sorting-by-section-legend": "Bagian manakah masing-masing jenis pemberitahuan diurutkan ke dalamnya",
+ "echo-displaynotificationsconfiguration-available-notification-methods-header": "Cara pemberitahuan yang diizinkan",
+ "echo-displaynotificationsconfiguration-available-notification-methods-by-category-legend": "Metode pemberitahuan manakah yang didukung untuk masing-masing kategori",
+ "echo-displaynotificationsconfiguration-available-notification-methods-by-type-legend": "Metode pemberitahuan apa saja yang didukung untuk setiap jenis; hanya berlaku ke jenis yang masuk dalam kategori yang disembunyikan dari preferensi",
+ "echo-displaynotificationsconfiguration-enabled-default-header": "Diaktifkan secara baku",
+ "echo-displaynotificationsconfiguration-enabled-default-existing-users-legend": "Pengguna yang sudah ada",
"echo-displaynotificationsconfiguration-enabled-default-new-users-legend": "Pengguna baru",
+ "echo-displaynotificationsconfiguration-mandatory-notification-methods-header": "Metode pemberitahuan yang dibutuhkan",
+ "echo-displaynotificationsconfiguration-mandatory-notification-methods-by-category-legend": "Metode pemberitahuan yang wajib untuk tiap kategori",
"echo-specialpage": "Pemberitahuan",
"echo-specialpage-section-markread": "Tandai grup telah dibaca",
+ "echo-specialpage-markasread": "Pemberitahuan: Tandai sudah dibaca",
+ "echo-specialpage-markasread-invalid-id": "ID event tidak sah",
"echo-specialpage-pagination-numnotifications": "$1 {{PLURAL:$1|pemberitahuan|pemberitahuan}}",
"echo-specialpage-pagefilters-title": "Aktivitas terkini",
"echo-specialpage-pagefilters-subtitle": "Halaman dengan pemberitahuan yang belum dibaca",
+ "notificationsmarkread-legend": "Tandai pemberitahuan ini sebagai telah dibaca",
"echo-anon": "Untuk menerima pemberitahuan, [$1 buat sebuah akun] atau [$2 masuk log].",
"echo-none": "Anda tidak memiliki pemberitahuan.",
"echo-more-info": "Informasi selengkapnya",
"echo-feedback": "Umpan balik",
"echo-quotation-marks": "\"$1\"",
"echo-api-failure": "Gagal mengambil pemberitahuan.",
+ "echo-api-failure-cross-wiki": "Akses ke domain jauh ditolak",
+ "echo-notification-placeholder": "Tidak ada pemberitahuan.",
"echo-notification-placeholder-filters": "Tidak ada pemberitahuan yang sesuai dengan kriteria ini.",
+ "echo-notification-loginrequired": "Anda harus masuk log untuk melihat pemberitahuan Anda.",
+ "echo-notification-popup-loginrequired": "Silakan masuk log untuk melihat pemberitahuan Anda.",
"echo-notification-markasread": "Tandai sudah dibaca",
"echo-notification-markasunread": "Tandai belum dibaca",
"echo-notification-markasread-tooltip": "Tandai sudah dibaca",
"echo-notification-more-options-tooltip": "Opsi lainnya",
+ "notification-dynamic-actions-unwatch": "{{GENDER:$3|Berhenti}} memantau aktivitas baru pada \"$1\"",
+ "notification-dynamic-actions-unwatch-confirmation": "{{GENDER:$3|Anda}} tidak lagi memantau halaman \"$1\"",
+ "notification-dynamic-actions-unwatch-confirmation-description": "{{GENDER:$3|Anda}} dapat memantau [$2 halaman ini] kapan saja.",
+ "notification-dynamic-actions-watch": "{{GENDER:$3|Pantau}} aktivitas baru pada \"$1\"",
+ "notification-dynamic-actions-watch-confirmation": "{{GENDER:$3|Anda}} sekarang memantau halaman \"$1\"",
+ "notification-dynamic-actions-watch-confirmation-description": "{{GENDER:$3|Anda}} dapat berhenti memantau [$2 halaman ini] kapan saja.",
"notification-link-text-expand-all": "Kembangkan",
+ "notification-link-text-expand-alert-count": "Lihat {{PLURAL:$1|$1 pemberitahuan|$1 pemberitahuan}}",
+ "notification-link-text-expand-notice-count": "Lihat {{PLURAL:$1|$1 pemberitahuan|$1 pemberitahuan}}",
+ "notification-link-text-expand-all-count": "Lihat {{PLURAL:$1|$1 pemberitahuan}}",
"notification-link-text-collapse-all": "Ciutkan",
"notification-link-text-view-message": "Lihat pesan",
"notification-link-text-view-mention": "Lihat sebutan",
+ "notification-link-text-view-mention-failure": "{{PLURAL:$1|Lihat penyebutan}}",
"notification-link-text-view-changes": "{{GENDER:$1|Lihat}} perubahan",
"notification-link-text-view-page": "Lihat halaman",
"notification-header-edit-user-talk": "$1 {{GENDER:$2|meninggalkan}} sebuah pesan di <strong>halaman pembicaraan {{GENDER:$3|Anda}}</strong>.",
+ "notification-header-edit-user-talk-with-section": "$1 {{GENDER:$2|meninggalkan}} sebuah pesan di <strong>halaman pembicaraan {{GENDER:$3|Anda}}</strong> di \"<strong>$4</strong>\".",
+ "notification-compact-header-edit-user-talk": "$1 {{GENDER:$2|meninggalkan}} {{GENDER:$3|Anda}} sebuah pesan.",
+ "notification-compact-header-edit-user-talk-with-section": "$1 {{GENDER:$2|meninggalkan}} {{GENDER:$3|Anda}} sebuah pesan di \"<strong>$4</strong>\".",
+ "notification-header-page-linked": "Sebuah pranala telah dibuat dari <strong>$4</strong> ke <strong>$3</strong>.",
+ "notification-compact-header-page-linked": "Dipautkan dari <strong>$1</strong>",
+ "notification-bundle-header-page-linked": "Pranala dibuat dari {{PLURAL:$5||$5 halaman|100=99+ halaman}} ke <strong>$3</strong>.",
+ "notification-header-article-reminder": "Halaman yang {{GENDER:$2|Anda}} minta untuk diingatkan ada di <strong>$3</strong>",
+ "notification-link-text-what-links-here": "Semua pranala ke halaman ini",
+ "notification-header-mention-other": "$1 {{GENDER:$2|menyebut}} {{GENDER:$3|Anda}} di <strong>$4</strong> di \"<strong>$5</strong>\".",
+ "notification-header-mention-other-nosection": "$1 {{GENDER:$2|menyebut}} {{GENDER:$3|Anda}} di <strong>$4</strong>.",
+ "notification-header-mention-user-talkpage-v2": "$1 {{GENDER:$2|menyebut}} {{GENDER:$3|Anda}} di <strong>halaman pembicaraan pengguna {{GENDER:$5|dari}} $4</strong> di \"<strong>$6</strong>\".",
+ "notification-header-mention-user-talkpage-nosection": "$1 {{GENDER:$2|menyebut}} {{GENDER:$3|Anda}} di <strong>halaman pembicaraan pengguna {{GENDER:$5|dari}} $4</strong>.",
+ "notification-header-mention-agent-talkpage": "$1 {{GENDER:$2|menyebut}} {{GENDER:$3|Anda}} di <strong>halaman pembicaraan{{GENDER:$2|nya|nya|nya}}</strong> di \"<strong>$4</strong>\".",
+ "notification-header-mention-agent-talkpage-nosection": "$1 {{GENDER:$2|menyebut}} {{GENDER:$3|Anda}} di <strong>halaman pembicaraan{{GENDER:$2|nya|nya|nya}}</strong>.",
+ "notification-header-mention-article-talkpage": "$1 {{GENDER:$2|menyebut}} {{GENDER:$3|Anda}} di <strong>$4</strong> halaman pembicaraannya di \"<strong>$5</strong>\".",
+ "notification-header-mention-article-talkpage-nosection": "$1 {{GENDER:$2|menyebut}} {{GENDER:$3|Anda}} di <strong>$4</strong> halaman pembicaraan.",
+ "notification-header-mention-failure-user-unknown": "Sebutan dari {{GENDER:$2|Anda}} kepada <strong>$3</strong> tidak terkirim karena pengguna tersebut tidak diketahui.",
+ "notification-header-mention-failure-user-anonymous": "Sebutan dari {{GENDER:$2|Anda}} kepada <strong>$3</strong> tidak terkirim karena pengguna tersebut anonim.",
+ "notification-header-mention-failure-too-many": "{{GENDER:$2|Anda}} mencoba menyebut lebih dari $3 {{PLURAL:$3|pengguna|pengguna}}. Semua sebutan yang dibatasi tidak akan dikirimkan.",
+ "notification-header-mention-failure-bundle": "{{PLURAL:$3|Sebutan|$3 sebutan}} {{GENDER:$2|yang Anda buat}} di halaman pembicaraan <strong>$4</strong> tidak {{PLURAL:$3|dapat}} dikirimkan.",
+ "notification-compact-header-mention-failure-user-unknown": "<strong>Nama pengguna tidak ada:</strong> $1",
+ "notification-compact-header-mention-failure-user-anonymous": "<strong>Alamat IP tidak dapat dikirimkan sebutan:</strong> $1",
+ "notification-header-mention-success": "Sebutan {{GENDER:$2|Anda}} ke <strong>$3</strong> telah dikirim.",
+ "notification-header-mention-success-bundle": "{{PLURAL:$3|Sebutan|$3 sebutan}} {{GENDER:$2|yang Anda buat}} di halaman pembicaraan <strong>$4</strong> {{PLURAL:$3|telah}} dikirimkan.",
+ "notification-compact-header-mention-success": "<strong>{{GENDER:$2|Anda menyebut}}:</strong> $3",
+ "notification-header-mention-status-bundle": "{{PLURAL:$3|Sebuah|$3}} pemberitahuan tentang penyebutan yang {{GENDER:$2|Anda lakukan}} di halaman pemberitahuan <strong>$4</strong>: {{PLURAL:$5|$5 tidak terkirim}}, {{PLURAL:$6|$6 terkirim}}.",
+ "notification-header-user-rights-add-only": "Kelompok pengguna {{GENDER:$4|Anda}} telah {{GENDER:$1|diubah}}. Anda telah ditambahkan ke: $2.",
+ "notification-header-user-rights-remove-only": "Kelompok pengguna {{GENDER:$4|Anda}} telah {{GENDER:$1|diubah}}. Anda tidak lagi menjadi anggota dari: $2.",
+ "notification-header-user-rights-add-and-remove": "Kelompok pengguna {{GENDER:$6|Anda}} telah {{GENDER:$1|diubah}}. Anda telah ditambahkan ke: $2. Anda tidak lagi menjadi anggota dari: $4.",
+ "notification-header-user-rights-expiry-change": "Kedaluwarsa dari keanggotaan {{GENDER:$4|Anda}} dalam {{PLURAL:$3|kelompok|kelompok}} telah {{GENDER:$1|diubah}}: $2.",
+ "notification-header-welcome": "{{GENDER:$2|Selamat datang}} di {{SITENAME}}, $1! Kami senang {{GENDER:$2|Anda}} bergabung.",
"notification-welcome-linktext": "Selamat datang",
+ "notification-header-thank-you-1-edit": "{{GENDER:$2|Anda}} baru saja melakukan suntingan pertama; terima kasih, dan selamat datang!",
+ "notification-header-thank-you-10-edit": "{{GENDER:$2|Anda}} baru saja melakukan suntingan ke-10; terima kasih, dan teruslah menyunting!",
+ "notification-header-thank-you-100-edit": "{{GENDER:$2|Anda}} baru saja melakukan suntingan ke-100; terima kasih banyak!",
+ "notification-header-thank-you-1000-edit": "{{GENDER:$2|Anda}} baru saja melakukan suntingan ke-1.000; terima kasih telah menjadi kontributor yang hebat!",
+ "notification-header-thank-you-10000-edit": "{{GENDER:$2|Anda}} baru saja melakukan suntingan ke-10.000; terima kasih banyak!",
+ "notification-header-thank-you-100000-edit": "{{GENDER:$2|Anda}} baru saja melakukan suntingan ke-100.000; terima kasih atas segala kontribusi Anda!",
+ "notification-header-thank-you-1000000-edit": "{{GENDER:$2|Anda}} baru saja melakukan suntingan ke-1.000.000; terima kasih atas kontribusi Anda yang menakjubkan!",
"notification-link-thank-you-edit": "Suntingan {{GENDER:$1|Anda}}",
"notification-link-text-view-edit": "Lihat suntingan",
+ "notification-link-article-reminder": "Lihat halaman",
"notification-header-reverted": "{{PLURAL:$4|Suntingan Anda pada <strong>$3</strong> telah}} {{GENDER:$2|dibalikkan}}.",
"notification-header-emailuser": "$1 {{GENDER:$2|mengirimkan}} Anda sebuah surel.",
"notification-edit-talk-page-email-subject2": "$1 {{GENDER:$1|meninggalkan}} Anda sebuah pesan di {{SITENAME}}",
"notification-edit-talk-page-email-batch-body-with-section": "$1 {{GENDER:$1|meninggalkan}} sebuah pesan di \"$2\" pada halaman pembicaraan Anda.",
"notification-page-linked-email-subject": "Pranala ke halaman yang Anda buat ditambahkan di {{SITENAME}}",
"notification-reverted-email-subject2": "{{PLURAL:$3|Suntingan}} Anda telah {{GENDER:$1|dibalikkan}} di {{SITENAME}}",
- "notification-mention-email-subject": "$1 {{GENDER:$1|menyebut}} Anda di {{SITENAME}}",
+ "notification-mention-email-subject": "$1 {{GENDER:$1|menyebut}} {{GENDER:$2|Anda}} di {{SITENAME}}",
"notification-user-rights-email-subject": "Hak pengguna Anda telah diubah di {{SITENAME}}",
"notification-timestamp-ago-seconds": "{{PLURAL:$1|$1d}}",
"notification-timestamp-ago-minutes": "{{PLURAL:$1|$1m}}",
@@ -99,20 +178,31 @@
"notification-inbox-filter-unread": "Belum dibaca",
"notification-inbox-filter-all": "Semua",
"echo-email-body-default": "Anda memiliki pemberitahuan baru di {{SITENAME}}:\n\n$1",
- "echo-email-footer-default": "$2\n\nUntuk mengendalikan surel mana saja yang akan kami kirimkan kepada Anda, periksa preferensi Anda:\n{{canonicalurl: {{#special:Preferences}} #mw-prefsection-echo}}\n\n$1",
+ "echo-email-footer-default-html": "Untuk mengendalikan surel mana saja yang akan kami kirimkan kepada Anda, <a href=\"$2\" style=\"text-decoration:none; color: #3868B0;\">periksa preferensi Anda</a>.<br />\n\n$1",
+ "echo-email-footer-default": "$2\n\nUntuk mengendalikan surel mana saja yang akan kami kirimkan kepada Anda, periksa preferensi Anda:\n{{canonicalurl:{{#special:Preferences}}#mw-prefsection-echo}}\n\n$1",
+ "echo-email-plain-footer": "Untuk mengendalikan surel mana saja yang akan kami kirimkan kepada {{GENDER:$1|Anda}}, periksa preferensi {{GENDER:$1|Anda}}:",
+ "echo-email-html-footer-preference-link-text": "periksa preferensi {{GENDER:$1|Anda}}",
+ "echo-email-html-footer-with-link": "Untuk mengendalikan surel mana saja yang akan kami kirimkan kepada {{GENDER:$2|Anda}}, $1.",
"echo-notification-alert": "{{PLURAL:$1|Penanda ($1)|100=Penanda (99+)}}",
+ "echo-notification-notice": "{{PLURAL:$1|Pemberitahuan ($1)|Pemberitahuan ($1)|100=Pemberitahuan (99+)}}",
"echo-notification-alert-text-only": "Penanda",
"echo-notification-notice-text-only": "Pemberitahuan",
"echo-overlay-link": "Semua pemberitahuan",
"echo-overlay-title": "<b>Pemberitahuan</b>",
"echo-overlay-title-overflow": "<b>{{PLURAL:$1|Pemberitahuan}}</b> (menampilkan $1 dari $2 yang belum dibaca)",
"echo-mark-all-as-read": "Tandai semua sebagai telah dibaca",
+ "echo-mark-all-as-read-confirmation": "$1 {{PLURAL:$1|pemberitahuan}} telah ditandai sebagai sudah dibaca",
+ "echo-mark-wiki-as-read": "Tandai semua sebagai telah dibaca di wiki: $1",
"echo-date-today": "Hari ini",
"echo-date-yesterday": "Kemarin",
"echo-load-more-error": "Terjadi galat saat mengambil hasil selengkapnya.",
+ "notification-bundle-header-edit-user-talk-v2": "{{PLURAL:$1|Sebuah pesan baru|$1 pesan baru|100=99+ pesan baru}} di <strong>halaman pembicaraan {{GENDER:$3|Anda}}</strong>.",
"echo-email-batch-subject-daily": "Anda memiliki {{PLURAL:$2|sebuah|beberapa}} pemberitahuan baru di {{SITENAME}}",
"echo-email-batch-subject-weekly": "Anda memiliki {{PLURAL:$2|sebuah|beberapa}} pemberitahuan baru di {{SITENAME}} pekan ini",
"echo-email-batch-body-intro-daily": "Hai $1,\nIni adalah ringkasan aktivitas kegiatan hari ini di {{SITENAME}} untuk Anda.",
"echo-email-batch-body-intro-weekly": "Hai $1,\nIni adalah ringkasan aktivitas kegiatan pekan ini di {{SITENAME}} untuk Anda.",
- "echo-email-batch-link-text-view-all-notifications": "Tampilkan semua pemberitahuan"
+ "echo-email-batch-link-text-view-all-notifications": "Tampilkan semua pemberitahuan",
+ "notification-header-foreign-alert": "Pemberitahuan lainnya dari {{PLURAL:$5|wiki lainnya|$5 wiki lainnya}}",
+ "notification-header-foreign-notice": "Pemberitahuan lainnya dari {{PLURAL:$5|wiki lainnya|$5 wiki lainnya}}.",
+ "notification-header-foreign-all": "Pemberitahuan lainnya dari {{PLURAL:$5|wiki lainnya|$5 wiki lainnya}}."
}
diff --git a/Echo/i18n/ig.json b/Echo/i18n/ig.json
index 348138a2..6ffb8830 100644
--- a/Echo/i18n/ig.json
+++ b/Echo/i18n/ig.json
@@ -4,6 +4,8 @@
"Ukabia"
]
},
+ "echo-category-title-article-linked": "{{PLURAL:$1|Òjikọ}} ihu",
+ "notification-inbox-filter-read": "Gụ̀ọ",
"echo-date-today": "Ta",
"echo-date-yesterday": "Nnyáfụ̀"
}
diff --git a/Echo/i18n/ilo.json b/Echo/i18n/ilo.json
index c0261087..37ab3973 100644
--- a/Echo/i18n/ilo.json
+++ b/Echo/i18n/ilo.json
@@ -4,12 +4,11 @@
"Lam-ang"
]
},
- "echo-desc": "Sistema dagiti pakaammo",
+ "echo-desc": "Sistema para iti panangipakaammo kadagiti agar-aramat a manipanggep kadagiti pasamak ken dagiti mensahe",
"prefs-echo": "Dagiti pakaammo",
"prefs-emailsettings": "Pagpilian ti esurat",
"prefs-displaynotifications": "Ipakita dagiti pagpilian",
"prefs-echosubscriptions": "Pakammuannak ti maipanggep kadagitoy a pasamak",
- "prefs-newmessageindicator": "Baro a panangipakita ti mensahe",
"echo-pref-send-me": "Patulodannak:",
"echo-pref-send-to": "Ipatulod kenni:",
"echo-pref-email-format": "Pormat ti esurat:",
@@ -21,7 +20,6 @@
"echo-pref-email-frequency-weekly": "Ti linawas a pakapukpukan dagiti pakaammo",
"echo-pref-email-format-html": "HTML",
"echo-pref-email-format-plain-text": "Naranas a teksto",
- "echo-pref-new-message-indicator": "Iparang ti panangipakita ti mensahe ti tungtungan a panid iti baras ti ramitko",
"echo-learn-more": "Agadal pay ti adu",
"echo-new-messages": "Adda dagiti baro a mensahem",
"echo-category-title-edit-user-talk": "{{PLURAL:$1|Ti mensahe|Dagiti mensahe}} ti tungtungan a panid",
@@ -31,11 +29,11 @@
"echo-category-title-other": "{{PLURAL:$1|Sabali}}",
"echo-category-title-system": "{{PLURAL:$1|Sistema}}",
"echo-category-title-user-rights": "{{PLURAL:$1|Panagbaliw ti karkarbengan ti agar-aramat|Panagbalbaliw ti karkarbengan ti agar-aramat}}",
- "echo-pref-tooltip-edit-user-talk": "Pakaammuannak no adda agipablaak ti mensahe wenno sumungbat iti tungtungan a panidko.",
- "echo-pref-tooltip-article-linked": "Pakaammuannak no adda mangisilpo iti panid a pinartuatko manipud ti maysa a panid ti artikulo.",
- "echo-pref-tooltip-reverted": "Pakaammuannak no adda mangisubli ti inurnosko, babaen ti panag-usar ti ramit ti panagukas wenno panangisubli.",
+ "echo-pref-tooltip-edit-user-talk": "Pakaammuannak no adda agipablaak iti mensahe wenno sumungbat iti tungtungan a panidko.",
+ "echo-pref-tooltip-article-linked": "Pakaammuannak no adda mangisilpo iti panid a pinartuatko manipud iti maysa a panid.",
+ "echo-pref-tooltip-reverted": "Pakaammuannak no adda mangisubli ti inurnosko, babaen ti panagusar ti ramit ti panagukas wenno panangisubli.",
"echo-pref-tooltip-mention": "Pakaammuannak no adda mangisilpo iti panidko.",
- "echo-pref-tooltip-user-rights": "Pakaammuannak no adda mangbaliw ti karkarbengak.",
+ "echo-pref-tooltip-user-rights": "Pakaammuannak no adda mangbaliw kadagiti karbengak.",
"echo-error-no-formatter": "Awan ti naipalawag a panagporma para iti pakaammo.",
"notifications": "Dagiti pakaammo",
"tooltip-pt-notifications-alert": "{{GENDER:|Dagiti}} pakaammom",
@@ -46,15 +44,15 @@
"echo-feedback": "Feedback",
"notification-link-text-view-message": "Kitaen ti mensahe",
"notification-link-text-view-mention": "Kitaen ti naibaga",
- "notification-link-text-view-changes": "Kitaen dagiti sinukatan",
+ "notification-link-text-view-changes": "{{GENDER:$1|Kitaen}} dagiti binaliwan",
"notification-link-text-view-page": "Kitaen ti panid",
"notification-link-text-view-edit": "Kitaen ti inurnos",
- "notification-header-reverted": "Ti {{PLURAL:$4|inurnosmo iti $3 ket|inur-urnosmo iti $3 ket}} {{GENDER:$2|naisubli}} babaen ni $1.",
+ "notification-header-reverted": "{{PLURAL:$4|Ti inurnosmo iti <strong>$3</strong> ket|Dagiti inurnosmo iti <strong>$3</strong> ket}} {{GENDER:$2|naisubli}}.",
"notification-edit-talk-page-email-subject2": "Ni $1 ket {{GENDER:$1|nangibati}} kenka ti mensahe idiay {{SITENAME}}",
"notification-edit-talk-page-email-batch-body-with-section": "Ni $1 ket {{GENDER:$1|nangibati}} ti mensahe idiay tungtungam a panid iti \"$2\".",
- "notification-page-linked-email-subject": "Ti panidmo ket naisilpo idiay {{SITENAME}}",
+ "notification-page-linked-email-subject": "Ti maysa a panid a pinartuatmo ket naisilpo iti {{SITENAME}}",
"notification-reverted-email-subject2": "{{PLURAL:$3|Ti inurnosmo ket|Dagiti inurnosmo ket}} {{GENDER:$1|naisubli}} idiay {{SITENAME}}",
- "notification-mention-email-subject": "Ni $1 {{GENDER:$1|inbaganaka}} idiay {{SITENAME}}",
+ "notification-mention-email-subject": "Ni $1 ket {{GENDER:$1|inbaganaka}} idiay {{SITENAME}}",
"notification-user-rights-email-subject": "Dagiti karbengam nga agar-aramat ket nabaliwan idiay {{SITENAME}}",
"echo-email-body-default": "Adda baro a pakaammom idiay {{SITENAME}}:\n\n$1",
"echo-email-footer-default": "$2\n\nTi mangtengngel no ania dagiti esurat nga ipatulodmi kenka, kitaem dagiti kakaykayatam:\n{{canonicalurl:{{#special:Preferences}}#mw-prefsection-echo}}\n\n$1",
diff --git a/Echo/i18n/inh.json b/Echo/i18n/inh.json
index da1bce6d..e49211b6 100644
--- a/Echo/i18n/inh.json
+++ b/Echo/i18n/inh.json
@@ -1,9 +1,25 @@
{
"@metadata": {
"authors": [
- "Adam-Yourist"
+ "Adam-Yourist",
+ "Tusholi"
]
},
- "tooltip-pt-notifications-alert": "{{GENDER:|Хьа}} дӀахейтараш",
- "tooltip-pt-notifications-message": "{{GENDER:|Хьа}} хоамбараш"
+ "prefs-echo": "Хоамбар",
+ "prefs-emailsettings": "Электронни пошта оттамаш",
+ "prefs-echosubscriptions": "Акхарех лаьца хоамбар",
+ "prefs-echocrosswiki": "Массехк вики-проекташкара хоамбар («кросс-вики»)",
+ "prefs-blocknotificationslist": "ДIабоабаь доакъашхой («Iаьржа хьаязъяьр»)",
+ "echo-pref-send-me": "Ахийта сога:",
+ "echo-pref-send-to": "Ахийта укх цIайна тIа:",
+ "echo-pref-email-format": "Хоамбара формат:",
+ "echo-pref-email": "Эл. пошт",
+ "echo-pref-email-frequency-never": "Ма бе сога хоам эл. поште гIолла",
+ "echo-pref-email-frequency-immediately": "Цхьадола хоамаш шоаш хьакхаьчача",
+ "echo-pref-email-frequency-daily": "ХIара денна хоамий сводка",
+ "echo-pref-email-frequency-weekly": "ХIара кIира хоамий сводка",
+ "echo-pref-cross-wiki-notifications": "Хьахьувкха кхыйолча викешкара хоамбар",
+ "echo-pref-notifications-blacklist": "Ма гойта хоамаш укх доакъашхошкара ([[mw:Special:MyLanguage/Help:Notifications#mute|дукхагIа хá]])",
+ "notifications": "Хоамбар",
+ "tooltip-pt-notifications-alert": "{{GENDER:|Хьога}} дéна дӀахайтар"
}
diff --git a/Echo/i18n/io.json b/Echo/i18n/io.json
index 06d359d4..93567ad6 100644
--- a/Echo/i18n/io.json
+++ b/Echo/i18n/io.json
@@ -1,14 +1,64 @@
{
"@metadata": {
"authors": [
- "Algentem"
+ "Algentem",
+ "Joao Xavier"
]
},
+ "prefs-echo": "Avizi",
+ "prefs-emailsettings": "Selekti pri e-posto (e-mail)",
+ "prefs-echocrosswiki": "Avizi de altra Wiki",
+ "echo-pref-web": "Per reto",
+ "echo-pref-email": "Per e-posto",
+ "echo-pref-email-frequency-daily": "Diala rezumo pri avizi",
+ "echo-pref-email-frequency-weekly": "Semanala rezumo pri avizi",
+ "echo-pref-cross-wiki-notifications": "Montrez notifiki de altra Wiki",
+ "echo-pref-beta-feature-cross-wiki-message": "Plubonigita avizi",
+ "echo-new-messages": "Vu havas nova mesaji",
+ "echo-category-title-edit-user-talk": "{{PLURAL:$1|Mesajo|Mesaji}} en la diskuto-pagino",
+ "notifications": "Avizi",
+ "tooltip-pt-notifications-alert": "{{GENDER:|Vua}} informi",
+ "tooltip-pt-notifications-notice": "{{GENDER:|Vua}} informi",
+ "echo-specialpage": "Avizi",
+ "echo-specialpage-pagination-numnotifications": "$1 {{PLURAL:$1|avizo|avizi}}",
+ "echo-specialpage-pagefilters-title": "Recenta agadi",
+ "echo-specialpage-pagefilters-subtitle": "Pagini kun nelektita avizi",
+ "notificationsmarkread-legend": "Markizar l'informo quale \"lektita\"",
+ "echo-notification-placeholder": "Ne existas avizi.",
+ "echo-notification-placeholder-filters": "Ne existas avizi segun ica kriterii.",
+ "echo-notification-markasread": "Indikez \"lektita\"",
+ "echo-notification-markasunread": "Indikez quale \"ne lektita\"",
+ "notification-link-text-expand-alert-count": "Vidar {{PLURAL:$1|$1 avizo|$1 avizi}}",
+ "notification-link-text-view-changes": "{{GENDER:$1|Vidar}} modifiki",
+ "notification-link-text-view-page": "Montrez pagino",
+ "notification-header-edit-user-talk": "$1 {{GENDER:$2|lasis}} mesajo en <strong>{{GENDER:$3|vua}} debato-pagino</strong>.",
+ "notification-header-edit-user-talk-with-section": "$1 {{GENDER:$2|lasis}} mesajo en <strong>{{GENDER:$3|vua}} debato-pagino</strong> en \"<strong>$4</strong>\".",
+ "notification-header-mention-success": "{{GENDER:$2|Vua}} menciono pri <strong>$3</strong> sendesis.",
+ "notification-header-welcome": "{{GENDER:$2|Bonveno}} a {{SITENAME}}, $1! Ni prizas havar {{GENDER:$2|vu}} hike!",
"notification-header-thank-you-1-edit": "{{GENDER:$2|Vu}} jus facis {{GENDER:$2|vua}} unesma redakto; ni dankas {{GENDER:$2|vu}}, e bonveno!",
"notification-header-thank-you-10-edit": "{{GENDER:$2|Vu}} jus facis {{GENDER:$2|vua}} dekesma redakto; ni dankas {{GENDER:$2|vu}}, e voluntez durar!",
"notification-header-thank-you-100-edit": "{{GENDER:$2|Vu}} jus facis {{GENDER:$2|vua}} centesma redakto; ni dankas {{GENDER:$2|vu}} tre multe!",
"notification-header-thank-you-1000-edit": "{{GENDER:$2|Vu}} jus facis {{GENDER:$2|vua}} milesma redakto; ni dankas {{GENDER:$2|vu}} por esar bonega kontributero!",
"notification-header-thank-you-10000-edit": "{{GENDER:$2|Vu}} jus facis {{GENDER:$2|vua}} dekamilesma redakto; ni dankas {{GENDER:$2|vu}} tre multe!",
"notification-header-thank-you-100000-edit": "{{GENDER:$2|Vu}} jus facis {{GENDER:$2|vua}} centamilesma redakto; ni dankas {{GENDER:$2|vu}} por astoniva kontributo!",
- "notification-header-thank-you-1000000-edit": "{{GENDER:$2|Vu}} jus facis {{GENDER:$2|vua}} milionesma redakto; ni dankas {{GENDER:$2|vu}} por astoniva kontributo!"
+ "notification-header-thank-you-1000000-edit": "{{GENDER:$2|Vu}} jus facis {{GENDER:$2|vua}} milionesma redakto; ni dankas {{GENDER:$2|vu}} por astoniva kontributo!",
+ "notification-link-text-view-edit": "Montrez redakturo",
+ "notification-header-reverted": "Vua {{PLURAL:$4|redakto en <strong>$3</strong>|redakti en <strong>$3</strong>}} {{GENDER:$2|desfacesis}}.",
+ "notification-header-emailuser": "$1 {{GENDER:$2|sendis}} e-posto a vu.",
+ "notification-edit-talk-page-email-subject2": "$1 {{GENDER:$1|skriptis}} mesajo a vu en {{SITENAME}}",
+ "notification-reverted-email-subject2": "Vua {{PLURAL:$3|redakto|redakti}} {{GENDER:$1|desfacesis}} en {{SITENAME}}",
+ "notification-mention-email-subject": "$1 {{GENDER:$1|mencionis}} {{GENDER:$2|vu}} en {{SITENAME}}",
+ "notification-timestamp-ago-hours": "{{PLURAL:$1|horo|$1 hori}}",
+ "notification-timestamp-ago-days": "{{PLURAL:$1|$1d}}",
+ "notification-timestamp-ago-months": "{{PLURAL:$1|1 monato|$1 monati}}",
+ "notification-inbox-filter-all": "Omna",
+ "echo-notification-alert": "{{PLURAL:$1|($1) avizo|($1) avizi|100=(99+) avizi}}",
+ "echo-notification-alert-text-only": "Avizi",
+ "echo-notification-notice-text-only": "Avizi",
+ "echo-overlay-link": "Omna avizi",
+ "echo-overlay-title": "<b>Avizi</b>",
+ "echo-overlay-title-overflow": "<b>{{PLURAL:$1|Avizo|Avizi}}</b> (montrante $1 de $2 nelektita)",
+ "echo-mark-all-as-read": "Indikez omna mesaji quale \"lektita\"",
+ "notification-header-foreign-alert": "Plusa avizi de {{PLURAL:$5|altra Wiki|$5 altra Wiki}}",
+ "notification-header-foreign-notice": "Altra avizi de {{PLURAL:$5|altra Wiki|$5 altra Wiki}}"
}
diff --git a/Echo/i18n/is.json b/Echo/i18n/is.json
index ce17e38a..01d307d7 100644
--- a/Echo/i18n/is.json
+++ b/Echo/i18n/is.json
@@ -5,7 +5,8 @@
"පසිඳු කාවින්ද",
"Sveinki",
"Macofe",
- "Hjalmtyr"
+ "Hjalmtyr",
+ "Sveinn í Felli"
]
},
"echo-desc": "Kerfi til að tilkynna notendum um viðburði og skilaboð",
@@ -25,7 +26,7 @@
"echo-pref-email-format-html": "HTML",
"echo-pref-email-format-plain-text": "óstílfærður texti",
"echo-pref-cross-wiki-notifications": "Sýna tilkynningar frá öðrum wiki",
- "echo-pref-new-message-indicator": "Sýna merki um skilaboð á spjallsíðu í tólastikunni minni",
+ "echo-learn-more": "Vita meira",
"echo-new-messages": "Þú hefur ný skilaboð",
"echo-category-title-edit-user-talk": "{{PLURAL:$1|Skilaboð}} á spjallsíðu",
"echo-category-title-article-linked": "{{PLURAL:$1|Tengil|Tengla}} á síðum",
@@ -36,23 +37,32 @@
"echo-category-title-user-rights": "{{PLURAL:$1|Réttinda breyting|Réttinda breytingar}}",
"echo-category-title-emailuser": "{{PLURAL:$1|Tölvupóstur frá öðrum notanda|Tölvupóstar frá öðrum notendum}}",
"echo-pref-tooltip-edit-user-talk": "Tilkynntu mér um þegar einhver skilur eftir skilaboð eða svarar skilaboðum á spjallsíðunni minni.",
- "echo-pref-tooltip-article-linked": "Gefðu mér tilkynningu þegar einhver tengir í síðu, sem ég bjó til, frá annari síðu.",
+ "echo-pref-tooltip-article-linked": "Gefðu mér tilkynningu þegar einhver tengir í síðu sem ég bjó til úr annari síðu.",
"echo-pref-tooltip-reverted": "Gefðu mér tilkynningu þegar einhver tekur aftur breytingu sem ég gerði.",
"echo-pref-tooltip-mention": "Tilkynntu mér þegar einhver tengir í notendasíðuna mína.",
"echo-pref-tooltip-user-rights": "Tilkynntu mér þegar einhver breytir notendaréttendum mínum.",
"echo-pref-tooltip-emailuser": "Tilkynntu mér um þegar einhver sendir mér tölvupóst.",
"echo-error-no-formatter": "Engin stílviðmið tilgreind fyrir tilkynningum.",
"notifications": "Tilkynningar",
- "tooltip-pt-notifications-alert": "Aðvaranir til {{GENDER:|þín}}",
+ "tooltip-pt-notifications-alert": "Tilkynningar til {{GENDER:|þín}}",
+ "tooltip-pt-notifications-notice": "Athugasemdir {{GENDER:|þínar}}",
+ "echo-displaynotificationsconfiguration-enabled-default-existing-users-legend": "Fyrirliggjandi notendur",
+ "echo-displaynotificationsconfiguration-enabled-default-new-users-legend": "Nýjir notendur",
"echo-specialpage": "Tilkynningar",
+ "echo-specialpage-pagination-range": "$1 - $2",
+ "echo-specialpage-pagefilters-title": "Nýleg virkni",
"echo-anon": "Til þess að fá tilkynningar þarft þú annaðhvort að [$1 búa til aðgang] eða [$2 skrá þig inn].",
"echo-none": "Þú hefur engar tilkynningar.",
"echo-more-info": "Frekari upplýsingar",
"echo-feedback": "Svörun",
+ "echo-quotation-marks": "\"$1\"",
"echo-notification-placeholder": "Engar tilkynningar.",
"echo-notification-markasread": "Merkja sem lesið",
"echo-notification-markasunread": "Merkja sem ólesið",
"echo-notification-markasread-tooltip": "Merkja sem lesið",
+ "echo-notification-more-options-tooltip": "Fleiri kostir",
+ "notification-link-text-expand-all": "Þenja út",
+ "notification-link-text-collapse-all": "Fella saman",
"notification-link-text-view-message": "Sjá skilaboð",
"notification-link-text-view-changes": "{{GENDER:$1|Sjá}} breytingar",
"notification-link-text-view-page": "Skoða síðu",
@@ -71,17 +81,29 @@
"notification-header-thank-you-10000-edit": "{{GENDER:$2|Þú}} gerðir {{GENDER:$2|þína}} hundruðustu breytingu; takk {{GENDER:$2|kærlega}} fyrir!",
"notification-link-thank-you-edit": "Breytingin {{GENDER:$1|þín}}",
"notification-link-text-view-edit": "Skoða breytingu",
+ "notification-link-article-reminder": "Skoða síðu",
"notification-header-reverted": "{{PLURAL:$4|Breyting þín|Breytingar þínar}} á <strong>$3</strong> {{PLURAL:$4|var tekin|voru teknar}} {{GENDER:$2|aftur}}.",
+ "notification-body-reverted": "$1",
+ "notification-header-emailuser": "$1 {{GENDER:$2|sendi}} þér tölvupóst.",
"notification-edit-talk-page-email-subject2": "$1 {{GENDER:$1|skildi}} eftir skilaboð handa þér á {{SITENAME}}",
"notification-edit-talk-page-email-batch-body-with-section": "$1 {{GENDER:$1|skildi}} eftir skilaboð á spjallsíðu þinni undir \"$2\".",
"notification-page-linked-email-subject": "Tengt var í síðu sem þú bjóst til á {{SITENAME}}",
"notification-reverted-email-subject2": "{{PLURAL:$3|Breytingin þín var tekin aftur|Breytingarnar þínar voru teknar}} {{GENDER:$1|aftur}} á {{SITENAME}}",
"notification-mention-email-subject": "$1 {{GENDER:$1|minntist}} á {{GENDER:$2|þig}} á {{SITENAME}}",
"notification-user-rights-email-subject": "Notandaréttindi þín hafa breyst á {{SITENAME}}",
+ "notification-timestamp-ago-seconds": "{{PLURAL:$1|$1sek}}",
+ "notification-timestamp-ago-minutes": "{{PLURAL:$1|$1 m}}",
"notification-timestamp-ago-hours": "{{PLURAL:$1|$1 klst}}",
+ "notification-timestamp-ago-days": "{{PLURAL:$1|$1dag}}",
"notification-timestamp-ago-years": "{{PLURAL:$1|$1 ár}}",
+ "notification-timestamp-today": "Í dag",
+ "notification-timestamp-yesterday": "Í gær",
+ "notification-inbox-filter-read": "Lesið",
+ "notification-inbox-filter-unread": "Ólesið",
+ "notification-inbox-filter-all": "Allt",
"echo-notification-alert": "{{PLURAL:$1|$1 áminning|$1 Áminningar|100=Áminningar (99+)}}",
"echo-notification-alert-text-only": "Áminningar",
+ "echo-notification-notice-text-only": "Athugasemdir",
"echo-overlay-link": "Allar tilkynningar",
"echo-overlay-title": "<b>Tilkynningar</b>",
"echo-overlay-title-overflow": "<b>{{PLURAL:$1|Tilkynning|Tilkynningar}}</b> (sýni $1 af $2 ólesnum)",
@@ -91,5 +113,6 @@
"echo-load-more-error": "Villa átti sér stað þegar fleiri niðurstöður voru sóttar.",
"echo-email-batch-subject-daily": "Þú hefur {{PLURAL:$2|nýja tilkynningu|nýjar tilkynningar}} á {{SITENAME}}",
"echo-email-batch-subject-weekly": "Þú hefur {{PLURAL:$2|nýja tilkynningu|nýjar tilkynningar}} á {{SITENAME}} í þessari viku",
- "notification-header-foreign-all": "Fleiri skilaboð frá {{PLURAL:$5|öðru wiki|$5 öðrum wiki-um}}"
+ "notification-header-foreign-all": "Fleiri skilaboð frá {{PLURAL:$5|öðru wiki|$5 öðrum wiki-um}}",
+ "echo-badge-count": "{{PLURAL:$1|$1|100=99+}}"
}
diff --git a/Echo/i18n/it.json b/Echo/i18n/it.json
index 92243e22..69c7fd44 100644
--- a/Echo/i18n/it.json
+++ b/Echo/i18n/it.json
@@ -16,7 +16,8 @@
"Macofe",
"Matteocng",
"Anto",
- "Pequod76"
+ "Pequod76",
+ "Sakretsu"
]
},
"echo-desc": "Sistema per notificare agli utenti messaggi ed eventi",
@@ -25,7 +26,6 @@
"prefs-displaynotifications": "Opzioni di visualizzazione",
"prefs-echosubscriptions": "Inviami una notifica su questi eventi",
"prefs-echocrosswiki": "Notifiche cross-wiki",
- "prefs-newmessageindicator": "Indicatore dei nuovi messaggi",
"prefs-blocknotificationslist": "Utenti silenziati",
"echo-pref-send-me": "Inviami:",
"echo-pref-send-to": "Invia a:",
@@ -39,8 +39,7 @@
"echo-pref-email-format-html": "HTML",
"echo-pref-email-format-plain-text": "Testo normale",
"echo-pref-cross-wiki-notifications": "Mostra notifiche da altri wiki",
- "echo-pref-notifications-blacklist": "Non mostrare notifiche di questi utenti. ([[mw:Help:Notifications#mute|ulteriori informazioni]])",
- "echo-pref-new-message-indicator": "Mostra l'indicatore nella barra degli strumenti, per nuovi messaggi nella mia pagina di discussione",
+ "echo-pref-notifications-blacklist": "Non mostrare notifiche di questi utenti. ([[mw:Special:MyLanguage/Help:Notifications#mute|ulteriori informazioni]])",
"echo-pref-beta-feature-cross-wiki-message": "Notifiche migliorate",
"echo-pref-beta-feature-cross-wiki-description": "Visualizza e organizza le notifiche più facilmente. Include notifiche cross-wiki, che ti permettono di visualizzare i messaggi provenienti da altri wiki. (Per ricevere notifiche cross-wiki su un wiki specifico, devi attivare la funzione beta su quel wiki.)",
"echo-learn-more": "Ulteriori informazioni",
@@ -121,6 +120,8 @@
"notification-link-text-view-page": "Vedi pagina",
"notification-header-edit-user-talk": "$1 {{GENDER:$2|ha lasciato}} un messaggio sulla <strong>{{GENDER:$3|tua}} pagina di discussione</strong>.",
"notification-header-edit-user-talk-with-section": "$1 {{GENDER:$2|ha lasciato}} un messaggio sulla <strong>{{GENDER:$3|tua}} pagina di discussione</strong> in \"<strong>$4</strong>\".",
+ "notification-compact-header-edit-user-talk": "$1 {{GENDER:$3|ti}} {{GENDER:$2|ha lasciato}} un messaggio.",
+ "notification-compact-header-edit-user-talk-with-section": "$1 {{GENDER:$3|ti}} {{GENDER:$2|ha lasciato}} un messaggio in \"<strong>$4</strong>\".",
"notification-header-page-linked": "È stato creato un collegamento da <strong>$4</strong> a <strong>$3</strong>.",
"notification-compact-header-page-linked": "Collegata da <strong>$1</strong>.",
"notification-bundle-header-page-linked": "Sono stati creati i collegamenti da {{PLURAL:$5||$5 pagine|100=più di 99 pagine}} a <strong>$3</strong>.",
@@ -147,6 +148,7 @@
"notification-header-user-rights-add-and-remove": "I tuoi diritti utente sono stati {{GENDER:$1|modificati}}. Sei {{GENDER:$6|stato aggiunto|stata aggiunta}} a: $2. Non sei più un membro di: $4.",
"notification-header-user-rights-expiry-change": "La scadenza della {{GENDER:$4|tua}} appartenenza {{PLURAL:$3|al seguente gruppo|ai seguenti gruppi}} è stata {{GENDER:$1|modificata}}: $2.",
"notification-header-welcome": "{{GENDER:$2|Benvenuto|Benvenuta|Benvenuto/a}} su {{SITENAME}}, $1! Siamo lieti che {{GENDER:$2|tu sia}} qui.",
+ "notification-header-mention-summary": "$1 ti {{GENDER:$2|ha}} {{GENDER:$3|menzionato|menzionata|menzionato/a}} nell'oggetto di una modifica su <strong>$4</strong>.",
"notification-welcome-linktext": "Benvenuto",
"notification-header-thank-you-1-edit": "Hai appena fatto la tua prima modifica; grazie e {{GENDER:$2|benvenuto|benvenuta|benvenuto/a}}!",
"notification-header-thank-you-10-edit": "Hai appena fatto la tua decima modifica; grazie e {{GENDER:$2|continua}} così!",
diff --git a/Echo/i18n/ja.json b/Echo/i18n/ja.json
index 68540415..6d3bda50 100644
--- a/Echo/i18n/ja.json
+++ b/Echo/i18n/ja.json
@@ -12,7 +12,9 @@
"Vigorous action",
"Thibaut120094",
"Marine-Blue",
- "Translatealcd"
+ "Translatealcd",
+ "Omotecho",
+ "Yusuke1109"
]
},
"echo-desc": "イベントおよびメッセージについて、ユーザーに通知するシステム",
@@ -21,7 +23,6 @@
"prefs-displaynotifications": "表示の設定",
"prefs-echosubscriptions": "以下の場合に通知を受け取る",
"prefs-echocrosswiki": "ウィキ横断通知",
- "prefs-newmessageindicator": "新着メッセージの表示",
"prefs-blocknotificationslist": "ミュートした利用者",
"echo-pref-send-me": "受け取る頻度:",
"echo-pref-send-to": "送信先:",
@@ -35,8 +36,7 @@
"echo-pref-email-format-html": "HTML",
"echo-pref-email-format-plain-text": "プレーンテキスト",
"echo-pref-cross-wiki-notifications": "他のウィキからの通知を表示",
- "echo-pref-notifications-blacklist": "以下の利用者からの通知は表示されません ([[mw:Help:Notifications#mute|詳細]])。",
- "echo-pref-new-message-indicator": "トークページのメッセージの未読数をツールバーに表示",
+ "echo-pref-notifications-blacklist": "以下の利用者からの通知は表示されません ([[mw:Special:MyLanguage/Help:Notifications#mute|詳細]])。",
"echo-pref-beta-feature-cross-wiki-message": "強化型通知",
"echo-pref-beta-feature-cross-wiki-description": "より簡単に通知を閲覧・整理します。ウィキ横断通知により、他のウィキからのメッセージを見れます。(あるウィキでウィキ横断通知を受信するには、そのウィキでベータ版機能を有効化する必要があります。)",
"echo-learn-more": "詳細",
@@ -52,6 +52,7 @@
"echo-category-title-system": "{{PLURAL:$1|システム}}",
"echo-category-title-user-rights": "{{PLURAL:$1|利用者権限の変更}}",
"echo-category-title-emailuser": "{{PLURAL:$1|他の利用者からのメール}}",
+ "echo-category-title-article-reminder": "ページ{{PLURAL:$1|リマインダー}}",
"echo-pref-tooltip-edit-user-talk": "誰かが私のトークページでメッセージの投稿または返信をしたときに通知する。",
"echo-pref-tooltip-article-linked": "誰かが自分の作成したページに記事からリンクしたときに通知する。",
"echo-pref-tooltip-reverted": "誰かが取り消しや巻き戻しの機能で私の編集を差し戻したときに通知する。",
@@ -89,8 +90,6 @@
"echo-none": "通知はありません。",
"echo-more-info": "詳細情報",
"echo-feedback": "フィードバック",
- "echo-popup-footer-special-page-invitation": "<strong>再デザインされた通知ページを試す。</strong> [$2 $1]",
- "echo-popup-footer-special-page-invitation-link": "まったく新しい外観と機能。",
"echo-quotation-marks": "「$1」",
"echo-api-failure": "通知を取得できませんでした。",
"echo-api-failure-cross-wiki": "リモートドメインへのアクセスが拒否されました。",
@@ -114,6 +113,8 @@
"notification-link-text-view-page": "ページを閲覧",
"notification-header-edit-user-talk": "$1 が<strong>{{GENDER:$3|あなたの}}トークページ</strong>にメッセージを{{GENDER:$2|投稿しました}}。",
"notification-header-edit-user-talk-with-section": "$1 が<strong>{{GENDER:$3|あなたの}}トークページ</strong>のセクション「<strong>$4</strong>」にメッセージを{{GENDER:$2|投稿しました}}。",
+ "notification-compact-header-edit-user-talk": "$1 が{{GENDER:$3|あなた}}にメッセージを{{GENDER:$2|残しました}}。",
+ "notification-compact-header-edit-user-talk-with-section": "$1 が「<strong>$4</strong>」で{{GENDER:$3|あなた}}にメッセージを{{GENDER:$2|残しました}}。",
"notification-header-page-linked": "<strong>$3</strong> が <strong>$4</strong> からリンクされました。",
"notification-compact-header-page-linked": "<strong>$1</strong> からリンクされました。",
"notification-bundle-header-page-linked": "<strong>$3</strong> が {{PLURAL:$5||$5件のページ|100=99件以上のページ}}からリンクされました。",
@@ -122,13 +123,13 @@
"notification-header-mention-other-nosection": "$1 が <strong>$4</strong> で{{GENDER:$3|あなた}}に{{GENDER:$2|言及しました}}。",
"notification-header-mention-user-talkpage-v2": "$1 が <strong>$4 {{GENDER:$5|の}}利用者トークページ</strong>のセクション「<strong>$6</strong>」で{{GENDER:$3|あなた}}に{{GENDER:$2|言及しました}}。",
"notification-header-mention-user-talkpage-nosection": "$1 が <strong>$4 {{GENDER:$5|の}}利用者トークページ</strong>で{{GENDER:$3|あなた}}に{{GENDER:$2|言及しました}}。",
- "notification-header-mention-agent-talkpage": "$1 が<strong>{{GENDER:$2|自分|自分|自分}}のトークページ</strong>のセクション「<strong>$4</strong>」で{{GENDER:$3|あなた}}に{{GENDER:$2|言及しました}}。",
- "notification-header-mention-agent-talkpage-nosection": "$1 が<strong>{{GENDER:$2|自分|自分|自分}}のトークページ</strong>で{{GENDER:$3|あなた}}に{{GENDER:$2|言及しました}}。",
+ "notification-header-mention-agent-talkpage": "$1 が<strong>{{GENDER:$2|自身}}のトークページ</strong>のセクション「<strong>$4</strong>」で{{GENDER:$3|あなた}}に{{GENDER:$2|言及しました}}。",
+ "notification-header-mention-agent-talkpage-nosection": "$1 が<strong>{{GENDER:$2|自身}}のトークページ</strong>で{{GENDER:$3|あなた}}に{{GENDER:$2|言及しました}}。",
"notification-header-mention-article-talkpage": "$1 が <strong>$4</strong> のセクション「<strong>$5</strong>」で{{GENDER:$3|あなた}}に{{GENDER:$2|言及しました}}。",
"notification-header-mention-article-talkpage-nosection": "$1 が <strong>$4</strong> のトークページで{{GENDER:$3|あなた}}に{{GENDER:$2|言及しました}}。",
"notification-header-mention-failure-user-unknown": "<strong>$3</strong> は存在しない利用者のため、{{GENDER:$2|あなた}}の言及を送信できませんでした。",
"notification-header-mention-failure-user-anonymous": "<strong>$3</strong> は匿名利用者のため、{{GENDER:$2|あなた}}の言及を送信できませんでした。",
- "notification-header-mention-failure-too-many": "$3件を超過して言及することはできないため、{{GENDER:$2|あなた}}の言及を送信できませんでした。",
+ "notification-header-mention-failure-too-many": "{{GENDER:$2|あなた}}の言及が上限の{{PLURAL:$3|利用者|利用者}}$3人を超えました。上限を超えた言及は送信できませんでした。",
"notification-header-mention-failure-bundle": "<strong>$4</strong> に{{GENDER:$2|送信}}した{{PLURAL:$3|言及|$3件の言及}}を送信{{PLURAL:$3|できませんでした}}。",
"notification-compact-header-mention-failure-user-unknown": "<strong>そのような利用者名は存在しません:</strong> $1",
"notification-compact-header-mention-failure-user-anonymous": "<strong>IP利用者には言及できません:</strong> $1",
@@ -140,9 +141,10 @@
"notification-header-user-rights-remove-only": "{{GENDER:$4|あなたの}}利用者権限が{{GENDER:$1|変更されました}}: $2から除外されました。",
"notification-header-user-rights-add-and-remove": "{{GENDER:$6|あなたの}}利用者権限が{{GENDER:$1|変更されました}}: $2へ追加され、$4から除外されました。",
"notification-header-welcome": "$1 さん、{{SITENAME}} へ{{GENDER:$2|ようこそ}}!{{GENDER:$2|あなた}}の参加を歓迎します。",
+ "notification-header-mention-summary": "$1 が <strong>$4</strong> の「編集の要約欄」で{{GENDER:$3|あなた}}に{{GENDER:$2|言及しました}} 。",
"notification-welcome-linktext": "ようこそ",
"notification-header-thank-you-1-edit": "{{GENDER:$2|あなた}}は初めて編集を行いました。寄稿をありがとうございます。そして、ようこそ!",
- "notification-header-thank-you-10-edit": "{{GENDER:$2|あなた}}は10回の編集を行いました。これからも頑張りましょう!",
+ "notification-header-thank-you-10-edit": "{{GENDER:$2|あなた}}は10回の編集を行いました。これからも頑張りましょう!",
"notification-header-thank-you-100-edit": "{{GENDER:$2|あなた}}は100回の編集を行いました。ありがとうございます!",
"notification-header-thank-you-1000-edit": "{{GENDER:$2|あなた}}は1,000回の編集を行いました。たくさんの寄稿をありがとうございます。",
"notification-header-thank-you-10000-edit": "{{GENDER:$2|あなた}}は10,000回の編集を行いました。非常に多くの寄稿をありがとうございます。",
@@ -172,7 +174,9 @@
"notification-inbox-filter-all": "すべて",
"echo-email-body-default": "{{SITENAME}}で新しい通知があります:\n\n$1",
"echo-email-footer-default": "$2\n\n受け取るメールの設定を変更するには、個人設定をご確認ください:\n{{canonicalurl:{{#special:Preferences}}#mw-prefsection-echo}}\n\n$1",
- "echo-email-html-footer-preference-link-text": "{{GENDER:$1|自分}}の個人設定を確認する",
+ "echo-email-plain-footer": "{{GENDER:$1|ご自分が}}受け取るメールの設定を変更するには、{{GENDER:$1|各人の}}個人設定をご確認ください:",
+ "echo-email-html-footer-preference-link-text": "個人設定をご確認ください",
+ "echo-email-html-footer-with-link": "受け取るメールの設定を変更するには、$1。",
"echo-notification-alert": "{{PLURAL:$1|アラート ($1)|100=アラート (99+)}}",
"echo-notification-notice": "{{PLURAL:$1|通知 ($1件)|100=通知 (99件以上)}}",
"echo-notification-alert-text-only": "通知",
diff --git a/Echo/i18n/jam.json b/Echo/i18n/jam.json
index fb7765ae..73ec36c8 100644
--- a/Echo/i18n/jam.json
+++ b/Echo/i18n/jam.json
@@ -4,6 +4,5 @@
"Katxis"
]
},
- "tooltip-pt-notifications-alert": "{{GENDER:|Fiyu}} aloert‎",
- "tooltip-pt-notifications-message": "{{GENDER:|Fiyu}} mechiz‎"
+ "tooltip-pt-notifications-alert": "{{GENDER:|Fiyu}} aloert‎"
}
diff --git a/Echo/i18n/jut.json b/Echo/i18n/jut.json
index 938661bb..2494b40c 100644
--- a/Echo/i18n/jut.json
+++ b/Echo/i18n/jut.json
@@ -4,6 +4,5 @@
"Jyllanj"
]
},
- "tooltip-pt-notifications-alert": "{{GENDER:|Din}} mæljenge",
- "tooltip-pt-notifications-message": "{{GENDER:|Din}} beskede"
+ "tooltip-pt-notifications-alert": "{{GENDER:|Din}} mæljenge"
}
diff --git a/Echo/i18n/jv.json b/Echo/i18n/jv.json
index 2d5dbd31..9a4c0711 100644
--- a/Echo/i18n/jv.json
+++ b/Echo/i18n/jv.json
@@ -7,27 +7,25 @@
]
},
"echo-desc": "Sistem sing ngabari panganggo ngenani anané layang lan kagiyatan",
- "prefs-echo": "Wara-wara",
+ "prefs-echo": "Pambiwara",
"prefs-emailsettings": "Opsi layang-èl",
"prefs-displaynotifications": "Opsi pitontonan",
"prefs-echosubscriptions": "Kabari aku ngenani kagiyatan iki",
- "prefs-echocrosswiki": "Wara-wara antar-wiki",
- "prefs-newmessageindicator": "Panengeré layang anyar",
+ "prefs-echocrosswiki": "Pambiwara antarawiki",
"echo-pref-send-me": "Kirimi aku:",
"echo-pref-send-to": "Kirim menyang:",
"echo-pref-email-format": "Format layang-èl:",
"echo-pref-web": "Jaringan",
"echo-pref-email": "Layang-èl",
- "echo-pref-email-frequency-never": "Aja kirimi aku wara-wara lumantar layang-èl",
- "echo-pref-email-frequency-immediately": "Wara-wara siji saben kabar",
- "echo-pref-email-frequency-daily": "Ringkesan padinan wara-wara sing mlebu",
- "echo-pref-email-frequency-weekly": "Ringkesan minggon wara-wara sing mlebu",
+ "echo-pref-email-frequency-never": "Aja kirimi aku pambiwara lumantar layang-èl",
+ "echo-pref-email-frequency-immediately": "Pambiwara siji saben kabar",
+ "echo-pref-email-frequency-daily": "Ringkesan padinan pambiwara kang mlebu",
+ "echo-pref-email-frequency-weekly": "Ringkesan minggon pambiwara kang mlebu",
"echo-pref-email-format-html": "HTML",
"echo-pref-email-format-plain-text": "Tèks barès",
- "echo-pref-cross-wiki-notifications": "Tuduhaké wara-wara saka wiki liya",
- "echo-pref-new-message-indicator": "Tuduhaké panengeré layang saka kaca-parembugan menyang wilah-pirantiku",
- "echo-pref-beta-feature-cross-wiki-message": "Wara-wara njlimet",
- "echo-pref-beta-feature-cross-wiki-description": "Deleng lan tata wara-wara kanthi mayar. Kalebu wara-wara antar-wiki, sing njalari panjenengan bisa ndeleng layang saka wiki-wiki liya. (Supaya bisa nampa wara-wara antar-wiki ing sawijiné wiki, panjenengan kudu ngurubaké fitur béta ing wiki iku.)",
+ "echo-pref-cross-wiki-notifications": "Tuduhaké pambiwara saka wiki liya",
+ "echo-pref-beta-feature-cross-wiki-message": "Pambiwara tataran dhuwur",
+ "echo-pref-beta-feature-cross-wiki-description": "Deleng lan tata pambiwara kanthi mayar. Kalebu pambiwara antarawiki, kang njalari panjenengan bisa ndeleng layang saka wiki-wiki liya. (Supaya bisa nampa pambiwara antarawiki ing siji wiki, panjenengan kudu ngurubaké fitur béta ing wiki iku.)",
"echo-learn-more": "Sinaoni candhaké",
"echo-log": "Log umum",
"echo-new-messages": "Panjenengan antuk layang anyar",
@@ -44,44 +42,45 @@
"echo-pref-tooltip-edit-user-talk": "Kabari aku manawa ana sing ngirimi layang utawa mangsuli aku ing kaca-parembuganku.",
"echo-pref-tooltip-article-linked": "Kabari aku manawa ana sing nggayutaké kaca artikel nyang kaca sing takgawé.",
"echo-pref-tooltip-reverted": "Kabari aku manawa ana sing mbalèkaké besutanku lumantar tombol-balèkaké.",
- "echo-pref-tooltip-mention": "Kabari aku manawa ana sing nggayut menyang kaca-panganggoku.",
+ "echo-pref-tooltip-mention": "Kabari aku manawa ana kang nggayutaké menyang kaca panganggoku.",
"echo-pref-tooltip-mention-failure": "Kabari aku manawa aku ora kasil ngirim panyebutan nyang sawiji wong.",
"echo-pref-tooltip-mention-success": "Kabari aku manawa aku kasil ngirim panyebutan marang sawijining wong.",
"echo-pref-tooltip-user-rights": "Kabari aku manawa ana sing ngowahi hak-panganggoku.",
"echo-pref-tooltip-emailuser": "Kabari aku manawa ana sing ngirimi layang-èl.",
- "echo-error-no-formatter": "Ora ana format sing dicakaké ing wara-wara.",
- "notifications": "Wara-wara",
+ "echo-pref-tooltip-article-reminder": "Kabari aku bab kaca iki nalika daksuwun.",
+ "echo-error-no-formatter": "Ora ana format kang katrapaké mungguh pambiwara.",
+ "notifications": "Pambiwara",
"tooltip-pt-notifications-alert": "Pangawasané {{GENDER:|panjenengan}}",
- "tooltip-pt-notifications-notice": "Wara-warané {{GENDER:|panjenengan}}",
- "echo-displaynotificationsconfiguration": "Tuduhaké pangaturané Wara-wara",
- "echo-displaynotificationsconfiguration-summary": "Iki ulasan ngenani kepiyé Wara-wara ditata ing wiki iki.",
- "echo-displaynotificationsconfiguration-notifications-by-category-header": "Wara-wara miturut kategoriné",
+ "tooltip-pt-notifications-notice": "Pambiwarané {{GENDER:|panjenengan}}",
+ "echo-displaynotificationsconfiguration": "Tuduhaké setèlané Pambiwara",
+ "echo-displaynotificationsconfiguration-summary": "Iki cathetan bab anggoné Pambiwara katata ing wiki iki.",
+ "echo-displaynotificationsconfiguration-notifications-by-category-header": "Pambiwara miturut kategoriné",
"echo-displaynotificationsconfiguration-sorting-by-section-header": "Urutané jinis",
- "echo-displaynotificationsconfiguration-available-notification-methods-header": "Métodhe wara-wara sing diidinaké",
+ "echo-displaynotificationsconfiguration-available-notification-methods-header": "Métodhe pambiwara kang kaolèhaké",
"echo-displaynotificationsconfiguration-enabled-default-header": "Urubaké miturut bakuné",
"echo-displaynotificationsconfiguration-enabled-default-existing-users-legend": "Panganggo sing ana",
"echo-displaynotificationsconfiguration-enabled-default-new-users-legend": "Panganggo anyar",
- "echo-displaynotificationsconfiguration-mandatory-notification-methods-header": "Métodhené wara-wara sing dibutuhaké",
- "echo-specialpage": "Wara-wara",
+ "echo-displaynotificationsconfiguration-mandatory-notification-methods-header": "Métodhe pambiwara kang kabutuhaké",
+ "echo-specialpage": "Pambiwara",
"echo-specialpage-section-markread": "Tengeri grup iki yèn wis diwaca",
- "echo-specialpage-markasread": "Wara-wara: Tengeri yèn wis diwaca",
+ "echo-specialpage-markasread": "Pambiwara: Tandhani wis kawaca",
"echo-specialpage-markasread-invalid-id": "ID kagiyatan ora sah",
- "echo-specialpage-pagination-numnotifications": "$1 {{PLURAL:$1|wara-wara}}",
+ "echo-specialpage-pagination-numnotifications": "$1 {{PLURAL:$1|pambiwara|pambiwara}}",
+ "echo-specialpage-pagination-range": "$1 - $2",
"echo-specialpage-pagefilters-title": "Kagiyatan mentas waé",
- "echo-specialpage-pagefilters-subtitle": "Kaca mawa wara-wara sing durung diwaca",
- "notificationsmarkread-legend": "Tengeri wara-wara yèn wis diwaca",
- "echo-anon": "Supaya bisa nampa wara-wara, [$1 gawéa akun] utawa [$2 mlebua log].",
- "echo-none": "Panjenengan durung antuk wara-wara.",
+ "echo-specialpage-pagefilters-subtitle": "Kaca mawa pambiwara kang durung kawaca",
+ "notificationsmarkread-legend": "Tandhani pambiwara wis kawaca",
+ "echo-anon": "Supaya bisa nampa pambiwara, [$1 gawéa akun] utawa [$2 mlebua log].",
+ "echo-none": "Panjenengan durung olèh pambiwara.",
"echo-more-info": "Katerangan liyané",
"echo-feedback": "Pamrayoga",
- "echo-popup-footer-special-page-invitation": "<strong>Jajala kaca Wara-wara sing wis dirancang ulang.</strong> [$2 $1]",
- "echo-popup-footer-special-page-invitation-link": "Sakèhing sesawangan lan fitur anyar.",
- "echo-api-failure": "Wurung antuk wara-wara.",
+ "echo-quotation-marks": "\"$1\"",
+ "echo-api-failure": "Wurung olèh pambiwara.",
"echo-api-failure-cross-wiki": "Aksès menyang dhomain adoh ora diolèhaké.",
- "echo-notification-placeholder": "Durung ana wara-wara.",
- "echo-notification-placeholder-filters": "Ora ana wara-wara sing mathuk pathokan iki.",
- "echo-notification-loginrequired": "Panjenengan kudu mlebu log saperlu maca wara-wara kanggo panjenengan.",
- "echo-notification-popup-loginrequired": "Mangga mlebua log saperlu maca wara-wara kanggo panjenengan.",
+ "echo-notification-placeholder": "Ora ana pambiwara.",
+ "echo-notification-placeholder-filters": "Ora ana pambiwara kang mathuk pathokan iki.",
+ "echo-notification-loginrequired": "Panjenengan kudu mlebu log saperlu maca pambiwara kanggo panjenengan.",
+ "echo-notification-popup-loginrequired": "Mangga mlebua log saperlu maca pambiwara kanggo panjenengan.",
"echo-notification-markasread": "Tengeri yèn wis diwaca",
"echo-notification-markasunread": "Tengeri yèn durung diwaca",
"echo-notification-markasread-tooltip": "Tengeri yèn wis diwaca",
@@ -92,11 +91,11 @@
"notification-dynamic-actions-watch": "{{GENDER:$3|Awasi}} kagiyatan anyar ing \"$1\"",
"notification-dynamic-actions-watch-confirmation": "{{GENDER:$3|Panjenengan}} saiki ngawasi kaca \"$1\"",
"notification-dynamic-actions-watch-confirmation-description": "{{GENDER:$3|Panjenengan}} bisa sawayah-wayah mandheg ngawasi [$2 kaca iki].",
- "notification-link-text-expand-all": "Jembarna",
+ "notification-link-text-expand-all": "Bukak",
"notification-link-text-expand-alert-count": "Deleng {{PLURAL:$1|$1 pangawasan}}",
"notification-link-text-expand-notice-count": "Deleng {{PLURAL:$1|$1 wara-wara}}",
- "notification-link-text-expand-all-count": "Deleng {{PLURAL:$1|$1 wara-wara}}",
- "notification-link-text-collapse-all": "Ciyutna",
+ "notification-link-text-expand-all-count": "Deleng {{PLURAL:$1|$1 pambiwara}}",
+ "notification-link-text-collapse-all": "Tutup",
"notification-link-text-view-message": "Waca layang",
"notification-link-text-view-mention": "Deleng panyebutan",
"notification-link-text-view-mention-failure": "{{PLURAL:$1|Deleng panyebutan}}",
@@ -104,6 +103,9 @@
"notification-link-text-view-page": "Deleng kaca",
"notification-header-edit-user-talk": "$1 {{GENDER:$2|ninggal}} layang ing <strong>kaca parembugané {{GENDER:$3|panjenengan}}</strong>.",
"notification-header-edit-user-talk-with-section": "$1 {{GENDER:$2|ninggal}} layang ing <strong>kaca parembugané {{GENDER:$3|panjenengan}}</strong> ing \"<strong>$4</strong>\".",
+ "notification-compact-header-edit-user-talk": "$1 {{GENDER:$2|mènèhi}} {{GENDER:$3|panjenengan}} layang.",
+ "notification-compact-header-edit-user-talk-with-section": "$1 {{GENDER:$2|mènèhi}} {{GENDER:$3|panjenengan}} layang ing \"<strong>$4</strong>\".",
+ "notification-body-edit-user-talk-with-section": "$1",
"notification-header-page-linked": "Sawijining pranala digawé saka <strong>$4</strong> nyang <strong>$3</strong>.",
"notification-compact-header-page-linked": "Kagayut saka <strong>$1</strong>.",
"notification-bundle-header-page-linked": "Pranala digawé saka {{PLURAL:$5||$5 kaca|100=99+ kaca}} nyang <strong>$3</strong>.",
@@ -125,7 +127,7 @@
"notification-header-mention-success": "Panyebuté {{GENDER:$2|panjenengan}} tumrap <strong>$3</strong> wis kakirim.",
"notification-header-mention-success-bundle": "{{PLURAL:$3|Panyebutan|$3 panyebutan}} sing {{GENDER:$2|digawé panjenengan}} ing kaca parembugané <strong>$4</strong> {{PLURAL:$3|wis}} kakirim.",
"notification-compact-header-mention-success": "<strong>{{GENDER:$2|Panjenengan nyebut}}:</strong> $3",
- "notification-header-mention-status-bundle": "{{PLURAL:$3|Wara-wara|$3 wara-wara}} ngenani panyebutan sing {{GENDER:$2|digawé panjenengan}} ing kaca parembugané <strong>$4</strong>: {{PLURAL:$5|$5 ora kakirim}}, {{PLURAL:$6|$6 kakirim}}.",
+ "notification-header-mention-status-bundle": "{{PLURAL:$3|Siji pambiwara|$3 pambiwara}} bab {{GENDER:$2|anggoné panjenengan nyebut}} ing kaca parembugané <strong>$4</strong>: {{PLURAL:$5|$5 ora kakirim}}, {{PLURAL:$6|$6 kakirim}}.",
"notification-header-user-rights-add-only": "Haké {{GENDER:$4|panjenengan}} wis {{GENDER:$1|diowahi}}. Panjenengan wis dilebokaké nyang: $2.",
"notification-header-user-rights-remove-only": "Haké {{GENDER:$4|panjenengan}} wis {{GENDER:$1|diowahi}}. Panjenengan wis dudu anggota: $2.",
"notification-header-user-rights-add-and-remove": "Haké {{GENDER:$6|panjenengan}} wis {{GENDER:$1|diowahi}}. Panjenengan wis dilebokaké nyang: $2. Panjenengan wis dudu anggota: $4.",
@@ -140,7 +142,9 @@
"notification-header-thank-you-1000000-edit": "{{GENDER:$2|Panjenengan}} nembé nggawé besutan sing kaping sayuta; matur nuwun wis ndharma kalawan tulus!",
"notification-link-thank-you-edit": "Besutané {{GENDER:$1|panjenengan}}",
"notification-link-text-view-edit": "Tuduhaké besutan",
+ "notification-link-article-reminder": "Deleng kaca",
"notification-header-reverted": "{{PLURAL:$4|Besutané panjenengan ing <strong>$3</strong>}} {{GENDER:$2|dibalèkaké}}.",
+ "notification-body-reverted": "$1",
"notification-header-emailuser": "$1 {{GENDER:$2|ngirimi}} panjenengan layang.",
"notification-edit-talk-page-email-subject2": "$1 {{GENDER:$1|ngirimi}} panjenengan layang ing {{SITENAME}}",
"notification-edit-talk-page-email-batch-body-with-section": "$1 {{GENDER:$1|ndèkèk}} layang ing kaca parembugané panjenengan ing \"$2\".",
@@ -159,7 +163,7 @@
"notification-inbox-filter-read": "Wis diwaca",
"notification-inbox-filter-unread": "Durung diwaca",
"notification-inbox-filter-all": "Kabèh",
- "echo-email-body-default": "Panjenengan antuk wara-wara anyar ing {{SITENAME}}:\n\n$1",
+ "echo-email-body-default": "Panjenengan olèh pambiwara anyar ing {{SITENAME}}:\n\n$1",
"echo-email-footer-default-html": "Kanggo ngatur layang-èl endi waé sing kudu kita kirim nyang panjenengan, <a href=\"$2\" style=\"text-decoration:none; color: #3868B0;\">priksa préferènsiné panjenengan</a>.<br />\n$1",
"echo-email-footer-default": "$2\n\nKanggo ngatur layang-èl endi waé sing kudu kita kirim nyang panjenengan, priksa préferènsiné panjenengan:\n{{canonicalurl:{{#special:Preferences}}#mw-prefsection-echo}}\n\n$1",
"echo-email-plain-footer": "Kanggo ngatur layang-èl endi waé sing kudu kita kirim nyang {{GENDER:$1|panjenengan}}, priksa préferènsiné {{GENDER:$1|panjenengan}}:",
@@ -169,22 +173,25 @@
"echo-notification-notice": "{{PLURAL:$1|Wara-wara ($1)|100=Wara-wara (99+)}}",
"echo-notification-alert-text-only": "Pangawasan",
"echo-notification-notice-text-only": "Wara-wara",
- "echo-overlay-link": "Kabèh wara-wara",
- "echo-overlay-title": "<b>Wara-wara</b>",
- "echo-overlay-title-overflow": "<b>{{PLURAL:$1|Wara-wara}}</b> (nuduhaké $1 saka $2 layang sing durung diwaca)",
+ "echo-overlay-link": "Kabèh pambiwara",
+ "echo-overlay-title": "<b>Pambiwara</b>",
+ "echo-overlay-title-overflow": "<b>{{PLURAL:$1|Pambiwara}}</b> (nuduhaké $1 saka $2 layang kang durung kawaca)",
"echo-mark-all-as-read": "Tengeri kabèh yèn wis diwaca",
- "echo-mark-all-as-read-confirmation": "$1 {{PLURAL:$1|wara-wara}} ditengeri yèn wis diwaca",
+ "echo-mark-all-as-read-confirmation": "$1 {{PLURAL:$1|pambiwara}} tinandhani wis kawaca",
"echo-mark-wiki-as-read": "Tengeri kabèh yèn wis diwaca ing wiki iki: $1",
"echo-date-today": "Dina iki",
"echo-date-yesterday": "Dina wingi",
"echo-load-more-error": "Ana masalah nalika njupuk kasilé luwih akèh.",
"notification-bundle-header-edit-user-talk-v2": "{{PLURAL:$1|Salayang anyar|$1 layang anyar|100=99+ layang anyar}} ing <strong>kaca parembugané {{GENDER:$3|panjenengan}}</strong>.",
- "echo-email-batch-subject-daily": "Panjenengan antuk {{PLURAL:$2|wara-wara anyar}} ing {{SITENAME}}",
- "echo-email-batch-subject-weekly": "Panjenengan antuk {{PLURAL:$2|wara-wara anyar}} ing {{SITENAME}} minggu iki",
+ "echo-email-batch-bullet": "•",
+ "echo-email-batch-subject-daily": "Panjenengan olèh {{PLURAL:$2|pambiwara anyar}} ing {{SITENAME}}",
+ "echo-email-batch-subject-weekly": "Panjenengan olèh {{PLURAL:$2|pambiwara anyar}} ing {{SITENAME}} minggu iki",
"echo-email-batch-body-intro-daily": "Halo $1,\nIki ringkesané kagiyatan dina iki ing {{SITENAME}} kanggo panjenengan.",
"echo-email-batch-body-intro-weekly": "Halo $1,\nIki ringkesané kagiyatan minggu iki ing {{SITENAME}} kanggo panjenengan.",
- "echo-email-batch-link-text-view-all-notifications": "Deleng kabèh wara-wara",
+ "echo-email-batch-link-text-view-all-notifications": "Deleng kabèh pambiwara",
"notification-header-foreign-alert": "Pangawasan tambahan saka {{PLURAL:$5|wiki liya|$5 wiki liya}}",
- "notification-header-foreign-notice": "Wara-wara tambahan saka {{PLURAL:$5|wiki liya|$5 wiki liya}}",
- "notification-header-foreign-all": "Wara-wara tambahan saka {{PLURAL:$5|wiki liya|$5 wiki liya}}"
+ "notification-header-foreign-notice": "Pambiwara liyané saka {{PLURAL:$5|wiki liya|$5 wiki liya}}",
+ "notification-header-foreign-all": "Pambiwara liyané saka {{PLURAL:$5|wiki liya|$5 wiki liya}}",
+ "echo-foreign-wiki-lang": "$1 - $2",
+ "echo-badge-count": "{{PLURAL:$1|$1|100=99+}}"
}
diff --git a/Echo/i18n/ka.json b/Echo/i18n/ka.json
index 4003c78a..455d528f 100644
--- a/Echo/i18n/ka.json
+++ b/Echo/i18n/ka.json
@@ -18,7 +18,7 @@
"prefs-displaynotifications": "გამოსახვის პარამეტრები",
"prefs-echosubscriptions": "შემატყობინეთ ამ ღონისძიებების შესახებ",
"prefs-echocrosswiki": "კროს-ვიკის შეტყობინებები",
- "prefs-newmessageindicator": "ახალი შეტყობინების ინდიკატორი",
+ "prefs-blocknotificationslist": "გათიშული მომხმარებლები",
"echo-pref-send-me": "გამომიგზავნეთ:",
"echo-pref-send-to": "გასაგზავნი მისამართი:",
"echo-pref-email-format": "ელ.ფოსტის ფორმატი:",
@@ -31,7 +31,7 @@
"echo-pref-email-format-html": "HTML",
"echo-pref-email-format-plain-text": "ჩვეულებრივი ტექსტი",
"echo-pref-cross-wiki-notifications": "შეტყობინების ჩვენება სხვა ვიკიდან",
- "echo-pref-new-message-indicator": "განხილვის გვერდის შეტყობინების ინდიკატორის ჩვენება ხელსაწყოების პანელზე",
+ "echo-pref-notifications-blacklist": "არ აჩვენო ამ მომხმარებლების შეტყობინება. ([[mw:Special:MyLanguage/Help:Notifications#mute|მეტის გაგება]])",
"echo-pref-beta-feature-cross-wiki-message": "გაზრდილი შეტყობინებები",
"echo-pref-beta-feature-cross-wiki-description": "იხილეთ და მოაწესრიგეთ შეტყობინებები უფრო მარტივად. შეგეძლებათ იხილოთ შეტყობინებები, რომლებსაც დაგიტოვებენ სხვა პროექტებში.",
"echo-learn-more": "გაიგეთ მეტი",
@@ -62,13 +62,14 @@
"echo-displaynotificationsconfiguration-sorting-by-section-header": "ტიპების დალაგება",
"echo-displaynotificationsconfiguration-enabled-default-new-users-legend": "ახალი მომხმარებლები",
"echo-specialpage": "შეტყობინებები",
+ "echo-specialpage-pagination-numnotifications": "$1 {{PLURAL:$1|შეტყობინება|შეტყობინება}}",
"echo-specialpage-pagefilters-title": "ბოლო მოქმედებები",
"echo-specialpage-pagefilters-subtitle": "გვერდები წაუკითხავი შეტყობინებებით",
"echo-anon": "რომ მიიღოთ შეტყობინებები, [$1 შექმენით ანგარიში] ან [$2 შედით სისტემაში].",
"echo-none": "თქვენ არ გაქვთ შეტყობინება.",
"echo-more-info": "დეტალურად",
"echo-feedback": "შეფასება",
- "echo-api-failure": "შეტყობინებას ვერ ვპოულობთ. გთხოვთ სცადეთ თავიდან. (შეცდომა $1)",
+ "echo-api-failure": "შეტყობინებას ვერ ვპოულობთ.",
"echo-api-failure-cross-wiki": "მანძილზე მოქმედ დომეინზე წვდომა უარყოფილია.",
"echo-notification-placeholder": "ახალი შეტყობინებები არ არის.",
"echo-notification-loginrequired": "თქვენი შეტყობინებების სანახავად უნდა გაიაროთ ავტორიზაცია.",
@@ -112,6 +113,7 @@
"notification-timestamp-ago-months": "{{PLURAL:$1|$1 თვე}}",
"notification-timestamp-ago-years": "{{PLURAL:$1|$1 წელი}}",
"notification-timestamp-today": "დღეს",
+ "notification-timestamp-yesterday": "გუშინ",
"notification-inbox-filter-read": "კითხვა",
"notification-inbox-filter-unread": "წაუკითხავი",
"notification-inbox-filter-all": "ყველა",
diff --git a/Echo/i18n/kab.json b/Echo/i18n/kab.json
index 3563fc2d..f47344e5 100644
--- a/Echo/i18n/kab.json
+++ b/Echo/i18n/kab.json
@@ -4,7 +4,6 @@
"Belkacem77"
]
},
- "prefs-newmessageindicator": "Anammal n yizen amaynut",
"echo-new-messages": "Ɣur-k iznan imaynuten",
"tooltip-pt-notifications-alert": "Ilɣa-ik",
"echo-displaynotificationsconfiguration-enabled-default-new-users-legend": "Iseqdacen imaynuten",
diff --git a/Echo/i18n/kbp.json b/Echo/i18n/kbp.json
index c646c3c1..9420464d 100644
--- a/Echo/i18n/kbp.json
+++ b/Echo/i18n/kbp.json
@@ -4,6 +4,5 @@
"Gnangbade"
]
},
- "tooltip-pt-notifications-alert": "Ño-kubusi",
- "tooltip-pt-notifications-message": "Ñɔ-tɔm kɩmamatʋ"
+ "tooltip-pt-notifications-alert": "Ño-kubusi"
}
diff --git a/Echo/i18n/khw.json b/Echo/i18n/khw.json
index d99291cc..f5503ddf 100644
--- a/Echo/i18n/khw.json
+++ b/Echo/i18n/khw.json
@@ -4,6 +4,5 @@
"Rachitrali"
]
},
- "tooltip-pt-notifications-alert": "الرٹس",
- "tooltip-pt-notifications-message": "پیغامات"
+ "tooltip-pt-notifications-alert": "الرٹس"
}
diff --git a/Echo/i18n/kjp.json b/Echo/i18n/kjp.json
new file mode 100644
index 00000000..d7048bdb
--- /dev/null
+++ b/Echo/i18n/kjp.json
@@ -0,0 +1,14 @@
+{
+ "@metadata": {
+ "authors": [
+ "Rul1902"
+ ]
+ },
+ "tooltip-pt-notifications-alert": "{{GENDER:|ၮ်ု}} ဖှ်ေလင်ဆ်ုတ်ုတိုဒ်သယ်",
+ "notification-welcome-linktext": "အင်းၯးလင်ဖဝ့်",
+ "notification-timestamp-today": "လ်ုၮီယိုဝ်",
+ "notification-timestamp-yesterday": "လ်ုမူႋၯး",
+ "notification-inbox-filter-read": "ပဝ်ႋ",
+ "notification-inbox-filter-unread": "ပဝ်ႋအေး",
+ "notification-inbox-filter-all": "လုက်ဆိင့်"
+}
diff --git a/Echo/i18n/kk-cyrl.json b/Echo/i18n/kk-cyrl.json
index f3643783..c88d7879 100644
--- a/Echo/i18n/kk-cyrl.json
+++ b/Echo/i18n/kk-cyrl.json
@@ -11,7 +11,6 @@
"prefs-displaynotifications": "Көрсету бапталымдары",
"prefs-echosubscriptions": "Бұл оқиғалар туралы маған хабарландыр",
"prefs-echocrosswiki": "Уикиаралық ескетпелер",
- "prefs-newmessageindicator": "Жаңа хабарлама көрсеткіші",
"echo-pref-send-me": "Маған жіберу:",
"echo-pref-send-to": "Жіберу:",
"echo-pref-email-format": "Е-пошта пішіні:",
@@ -24,7 +23,6 @@
"echo-pref-email-format-html": "HTML",
"echo-pref-email-format-plain-text": "Қалыпты мәтін",
"echo-pref-cross-wiki-notifications": "Басқа уикилерден ескертпелерді көрсету",
- "echo-pref-new-message-indicator": "Құралдар үстелімде талқылау беттегі хабарламалар көрсеткішін көрсету",
"echo-pref-beta-feature-cross-wiki-message": "Кеңейтілген хабарландырулар",
"echo-pref-beta-feature-cross-wiki-description": "Ескетпелерді қарау және басқару бұрыңғыдан да жеңілірек. Сіз басқа уикилерден хабарламалар көруге мүмкіндік береді, ол уикиаралық хабарландыруларын қамтиды.",
"echo-learn-more": "Көбірек білу",
diff --git a/Echo/i18n/km.json b/Echo/i18n/km.json
index c436bf04..2157ed98 100644
--- a/Echo/i18n/km.json
+++ b/Echo/i18n/km.json
@@ -4,24 +4,195 @@
"គីមស៊្រុន"
]
},
- "prefs-echo": "ការជូនដំណឹង",
+ "echo-desc": "ប្រព័ន្ធសម្រាប់ផ្ដល់ដំណឹងដល់អ្នកប្រើប្រាស់អំពីព្រឹត្តិការណ៍និងសារនានា",
+ "prefs-echo": "សារជូនដំណឹង",
"prefs-emailsettings": "ជម្រើសទាក់ទិននឹងអ៊ីមែល",
+ "prefs-displaynotifications": "ជម្រើសទាក់ទិននឹងការបង្ហាញ",
"prefs-echosubscriptions": "ជូនដំណឹងដល់ខ្ញុំពីព្រឹត្តិការណ៍ខាងក្រោមនេះ",
+ "prefs-echocrosswiki": "សារជូនដំណឹងអន្តរវិគី",
+ "prefs-blocknotificationslist": "អ្នកប្រើប្រាស់បិតមាត់រួច",
"echo-pref-send-me": "ផ្ញើមកខ្ញុំនូវ៖",
"echo-pref-send-to": "ផ្ញើទៅកាន់៖",
"echo-pref-email-format": "ទម្រង់អ៊ីមែល៖",
"echo-pref-web": "វិបសាយ",
"echo-pref-email": "អ៊ីមែល",
- "echo-pref-email-frequency-never": "កុំផ្ញើសារជូនដំណឹងអោយសោះ",
+ "echo-pref-email-frequency-never": "កុំផ្ញើសារជូនដំណឹងមកខ្ញុំអោយសោះ",
"echo-pref-email-frequency-immediately": "សារជូនដំណឹងមួយៗពេលដែលគេផ្ញើចូលមក",
- "echo-pref-email-frequency-daily": "ការជូនដំណឹងសង្ខេបសរុបប្រចាំថ្ងៃ",
- "echo-pref-email-frequency-weekly": "ការជូនដំណឹងសង្ខេបសរុបប្រចាំសប្ដាហ៍",
+ "echo-pref-email-frequency-daily": "សារជូនដំណឹងសង្ខេបសរុបប្រចាំថ្ងៃ",
+ "echo-pref-email-frequency-weekly": "សារជូនដំណឹងសង្ខេបសរុបប្រចាំសប្ដាហ៍",
+ "echo-pref-email-format-html": "HTML",
"echo-pref-email-format-plain-text": "អក្សរសុទ្ធ",
+ "echo-pref-cross-wiki-notifications": "បង្ហាញសារជូនដំណឹងពីវិគីដទៃ",
+ "echo-pref-notifications-blacklist": "កុំបង្ហាញសារជូនដំណឹងពីអ្នកប្រើប្រាស់ទាំងនេះ ([[mw:Special:MyLanguage/Help:Notifications#mute|ស្វែងយល់បន្ថែម]])",
+ "echo-pref-beta-feature-cross-wiki-message": "សារជូនដំណឹងថ្នាក់ខ្ពស់",
+ "echo-pref-beta-feature-cross-wiki-description": "មើលនឹងចាត់ចែងសារជូនដំណឹងកាន់តែស្រួលជាងមុន។ បញ្ចូលសារជូនដំណឹងអន្តរវិគី ជួួយអោយអ្នកមើលសារពីវិគីដទៃ។ (ដើម្បីទទួលសារអន្តរវិគីនៅលើវិគីណាមួយ អ្នកចាំបាច់ត្រូវតែបើកប្រើមុខងារបេតានៅលើវិគីនោះ។)",
"echo-learn-more": "ស្វែងយល់បន្ថែម",
+ "echo-log": "កំណត់ត្រាសាធារណៈ",
"echo-new-messages": "អ្នកមានសារថ្មីៗ",
- "notifications": "ការជូនដំណឹង",
- "tooltip-pt-notifications-alert": "ការជូនដំណឹង{{GENDER:|មកអ្នក}}",
- "echo-anon": "ដើម្បីទទួលបានការជូនដំណឺង សូម[$1 បង្កើតគណនី] ឬ [$2 កត់ឈ្មោះចូល]។",
- "echo-email-footer-default": "$2\n\nដើម្បីកំណត់អ៊ីមែលដែលយើងត្រូវផ្ញើអោយអ្នក សូមពិនិត្យចំណង់ចំណូលសិត្តរបស់អ្នក៖\n{{canonicalurl:{{#special:Preferences}}#mw-prefsection-echo}}\n\n$1",
- "echo-overlay-link": "ការជូនដំណឹងទាំងអស់"
+ "echo-category-title-edit-user-talk": "{{PLURAL:$1|សារ|សារ}}ក្នុងទំព័រពិភាក្សា",
+ "echo-category-title-article-linked": "{{PLURAL:$1|តំណភ្ជាប់|តំណភ្ជាប់}}ទៅទំព័រ",
+ "echo-category-title-reverted": "{{PLURAL:$1|ការមួលត្រឡប់|ការមួលត្រឡប់}}កំណែប្រែ",
+ "echo-category-title-mention": "{{PLURAL:$1|ការហៅឈ្មោះ|ការហៅឈ្មោះ}}",
+ "echo-category-title-mention-failure": "{{PLURAL:$1|ការហៅឈ្មោះ|ការហៅឈ្មោះ}}មិនបានសម្រេច",
+ "echo-category-title-mention-success": "{{PLURAL:$1|ការហៅឈ្មោះ|ការហៅឈ្មោះ}}បានសម្រេច",
+ "echo-category-title-other": "{{PLURAL:$1|ផ្សេងទៀត}}",
+ "echo-category-title-system": "{{PLURAL:$1|ប្រព័ន្ធ}}",
+ "echo-category-title-user-rights": "{{PLURAL:$1|ការផ្លាស់ប្ដូរសិទ្ធិអ្នកប្រើប្រាស់|ការផ្លាស់ប្ដូរសិទ្ធិអ្នកប្រើប្រាស់}}",
+ "echo-category-title-emailuser": "{{PLURAL:$1|អ៊ីមែលពីអ្នកប្រើប្រាស់ដទៃ|អ៊ីមែលពីអ្នកប្រើប្រាស់ដទៃ}}",
+ "echo-category-title-article-reminder": "ទំព័រ{{PLURAL:$1|ក្រើនរំលឹក|ក្រើនរំលឹក}}",
+ "echo-pref-tooltip-edit-user-talk": "ជូនដំណឹងមកខ្ញុំពេលនរណាម្នាក់បិទសារឬឆ្លើយតបលើទំព័រពិភាក្សារបស់ខ្ញុំ",
+ "echo-pref-tooltip-article-linked": "ជូនដំណឹងមកខ្ញុំពេលនរណាម្នាក់ដាក់តំណភ្ជាប់ក្នុងទំព័រមួយទៀត ដែលតភ្ជាប់មកទំព័រដែលខ្ញុំបានបង្កើត។",
+ "echo-pref-tooltip-reverted": "ជូនដំណឹងមកខ្ញុំពេលនរណាម្នាក់មួលត្រឡប់កំណែប្រែដែលខ្ញុំបានធ្វើ ដោយប្រើប្រាស់ឧបករណ៍ធ្វើឡើងវិញឬមួលត្រឡប់។",
+ "echo-pref-tooltip-mention": "ជូនដំណឹងមកខ្ញុំពេលនរណាម្នាក់ដាក់តំណភ្ជាប់មកទំព័រអ្នកប្រើប្រាស់របស់ខ្ញុំ។",
+ "echo-pref-tooltip-mention-failure": "ជូនដំណឹងមកខ្ញុំពេលខ្ញុំមិនអាចផ្ញើចេញការហៅឈ្មោះទៅនរណាម្នាក់។",
+ "echo-pref-tooltip-mention-success": "ជូនដំណឹងមកខ្ញុំពេលខ្ញុំផ្ញើចេញការហៅឈ្មោះនរណាម្នាក់។",
+ "echo-pref-tooltip-user-rights": "ជូនដំណឹងមកខ្ញុំពេលនរណាម្នាក់ផ្លាស់ប្ដូរសិទ្ធិអ្នកប្រើប្រាស់របស់ខ្ញុំ។",
+ "echo-pref-tooltip-emailuser": "ជូនដំណឹងមកខ្ញុំពេលនរណាម្នាក់ផ្ញើអ៊ីមែលមកកាន់ខ្ញុំ។",
+ "echo-pref-tooltip-article-reminder": "ជូនដំណឹងមកខ្ញុំអំពីទំព័រនេះពេលខ្ញុំសួរ។",
+ "echo-error-no-formatter": "គ្មានទម្រង់កំណត់សម្រាប់សារជូនដំណឹងទេ។",
+ "notifications": "សារជូនដំណឹង",
+ "tooltip-pt-notifications-alert": "សារជូនដំណឹងសំខាន់{{GENDER:|មកអ្នក}}",
+ "tooltip-pt-notifications-notice": "សារជូនដំណឹងធម្មតា{{GENDER:|មកអ្នក}}",
+ "echo-displaynotificationsconfiguration": "បង្ហាញការកំណត់អំពីសារជូនដំណឹង",
+ "echo-displaynotificationsconfiguration-summary": "នេះជាសេចក្ដីសង្ខេបអំពីរបៀបកំណត់សារជូនដំណឹងនៅលើវិគីនេះ។",
+ "echo-displaynotificationsconfiguration-notifications-by-category-header": "សារជូនដំណឹងតាមចំណាត់ថ្នាក់ក្រុម",
+ "echo-displaynotificationsconfiguration-sorting-by-section-header": "ចែកចូលតាមប្រភេទ",
+ "echo-displaynotificationsconfiguration-sorting-by-section-legend": "ផ្នែកដែលប្រភេទសារជូនដំណឹងនីមួយៗត្រូវបានចែកចូល",
+ "echo-displaynotificationsconfiguration-available-notification-methods-header": "វិធីផ្ញើសារជូនដំណឹងដែលអនុញ្ញាតអោយប្រើ",
+ "echo-displaynotificationsconfiguration-available-notification-methods-by-category-legend": "វិធីផ្ញើសារជូនដំណឹងដែលចំណាត់ថ្នាក់ក្រុមនីមួួយៗអាចប្រើបាន",
+ "echo-displaynotificationsconfiguration-available-notification-methods-by-type-legend": "វិធីផ្ញើសារជូនដំណឹងដែលប្រភេទនីមួួយៗអាចប្រើបាន។ អនុវត្តបានសម្រាប់តែប្រភេទក្នុងចំណាត់ថ្នាក់ក្រុមដែលបានលាក់ពីចំណង់ចំណូលចិត្ត។",
+ "echo-displaynotificationsconfiguration-enabled-default-header": "បើកប្រើតាមលំនាំដើម",
+ "echo-displaynotificationsconfiguration-enabled-default-existing-users-legend": "អ្នកប្រើប្រាស់ចាស់",
+ "echo-displaynotificationsconfiguration-enabled-default-new-users-legend": "អ្នកប្រើប្រាស់ថ្មី",
+ "echo-displaynotificationsconfiguration-mandatory-notification-methods-header": "វិធីផ្ញើសារជូនដំណឹងចាំបាច់ត្រូវកំណត់",
+ "echo-displaynotificationsconfiguration-mandatory-notification-methods-by-category-legend": "វិធីផ្ញើសារជូនដំណឹងដែលចាំបាច់ត្រូវកំណត់សម្រាប់ចំណាត់ថ្នាក់ក្រុមនីមួយៗ",
+ "echo-specialpage": "សារជូនដំណឹង",
+ "echo-specialpage-section-markread": "កត់ចំណាំសារមួយបាច់នេះថាបានអានរួច",
+ "echo-specialpage-markasread": "សារជូនដំណឹង៖ កត់ចំណាំថាបានអានហើយ",
+ "echo-specialpage-markasread-invalid-id": "អត្តលេខព្រឹត្តិការណ៍មិនត្រឹមត្រូវ",
+ "echo-specialpage-pagination-numnotifications": "$1 {{PLURAL:$1|សារជូនដំណឹង|សារជូនដំណឹង}}",
+ "echo-specialpage-pagefilters-title": "សកម្មភាពថ្មីៗ",
+ "echo-specialpage-pagefilters-subtitle": "ទំព័រដែលមានសារមិនទាន់អានហើយ",
+ "notificationsmarkread-legend": "កត់ចំណាំសារជូនដំណឹងថាបានអានហើយ",
+ "echo-anon": "ដើម្បីទទួលបានសារជូនដំណឺង សូម[$1 បង្កើតគណនី] ឬ [$2 កត់ឈ្មោះចូល]។",
+ "echo-none": "អ្នកគ្មានសារជូនដំណឹងទេ។",
+ "echo-more-info": "ព័ត៌មានបន្ថែម",
+ "echo-feedback": "មតិយោបល់",
+ "echo-api-failure": "ទាញយកសារជូនដំណឹងមិនបានសម្រេច។",
+ "echo-api-failure-cross-wiki": "ការចូលទៅដូម៉ែនពីចម្ងាយត្រូវបានបដិសេដ។",
+ "echo-notification-placeholder": "គ្មានសារជូនដំណឹងទេ។",
+ "echo-notification-placeholder-filters": "គ្មានសារជូនដំណឹងទេដែលត្រូវនឹងលក្ខខណ្ឌនេះទេ។",
+ "echo-notification-loginrequired": "អ្នកត្រូវតែកត់ឈ្មោះចូលដើម្បីមើលសារជូនដំណឹងរបស់អ្នក។",
+ "echo-notification-popup-loginrequired": "សូមកត់ឈ្មោះចូលដើម្បីមើលសារជូនដំណឹងរបស់អ្នក។",
+ "echo-notification-markasread": "កត់ចំណាំថាបានអានហើយ",
+ "echo-notification-markasunread": "កត់ចំណាំថាមិនទាន់អានហើយ",
+ "echo-notification-markasread-tooltip": "កត់ចំណាំថាបានអានហើយ",
+ "echo-notification-more-options-tooltip": "ជម្រើសផ្សេងទៀត",
+ "notification-dynamic-actions-unwatch": "{{GENDER:$3|ឈប់}}តាមដានសកម្មភាពថ្មីនៅ \"$1\"",
+ "notification-dynamic-actions-unwatch-confirmation": "{{GENDER:$3|អ្នក}}ឈប់តាមដានទំព័រ \"$1\" តទៅទៀតហើយ",
+ "notification-dynamic-actions-unwatch-confirmation-description": "{{GENDER:$3|អ្នក}}អាចតាមដាន[$2 ទំព័រនេះ] ពេលណាក៏បាន។",
+ "notification-dynamic-actions-watch": "{{GENDER:$3|តាមដាន}}សកម្មភាពថ្មីនៅ \"$1\"",
+ "notification-dynamic-actions-watch-confirmation": "{{GENDER:$3|អ្នក}}កំពុងតាមដានទំព័រ \"$1\"",
+ "notification-dynamic-actions-watch-confirmation-description": "{{GENDER:$3|អ្នក}}អាចឈប់តាមដាន[$2 ទំព័រនេះ]ពេលណាក៏បាន.",
+ "notification-link-text-expand-all": "ពន្លាត",
+ "notification-link-text-expand-alert-count": "មើល{{PLURAL:$1|$1 សារជូនដំណឹងសំខាន់|សារជូនដំណឹងសំខាន់ចំនួន $1}}",
+ "notification-link-text-expand-notice-count": "មើល{{PLURAL:$1|$1 សារជូនដំណឹងធម្មតា|សារជូនដំណឹងធម្មតាចំនួន $1}}",
+ "notification-link-text-expand-all-count": "មើល{{PLURAL:$1|$1 សារជូនដំណឹង|សារជូនដំណឹងចំនួន $1}}",
+ "notification-link-text-collapse-all": "បង្រួញ",
+ "notification-link-text-view-message": "មើលសារ",
+ "notification-link-text-view-mention": "មើលការហៅឈ្មោះ",
+ "notification-link-text-view-mention-failure": "{{PLURAL:$1|មើលការហៅឈ្មោះ|មើលការហៅឈ្មោះ}}",
+ "notification-link-text-view-changes": "{{GENDER:$1|មើល}}បន្លាស់ប្ដូរ",
+ "notification-link-text-view-page": "មើលទំព័រ",
+ "notification-header-edit-user-talk": "$1 {{GENDER:$2|បានសរសេរ}}សារមួយនៅលើទំព័រពិភាក្សា<strong>{{GENDER:$3|របស់អ្នក}}</strong>។",
+ "notification-header-edit-user-talk-with-section": "$1 {{GENDER:$2|បានសរសេរ}}សារមួយនៅលើទំព័រពិភាក្សា<strong>{{GENDER:$3|របស់អ្នក}}</strong>នៅក្នុងផ្នែក \"<strong>$4</strong>\"។",
+ "notification-compact-header-edit-user-talk": "$1 {{GENDER:$2|បានសរសេរ}}សារមួយមក<strong>{{GENDER:$3|អ្នក}}</strong>។",
+ "notification-compact-header-edit-user-talk-with-section": "$1 {{GENDER:$2|បានសរសេរ}}សារមក<strong>{{GENDER:$3|អ្នក}}</strong>នៅក្នុងផ្នែក \"<strong>$4</strong>\"។",
+ "notification-header-page-linked": "មានគេដាក់តំណភ្ជាប់មួួយពី <strong>$4</strong> ទៅ <strong>$3</strong>។",
+ "notification-compact-header-page-linked": "ត្រូវបានដាក់តំណភ្ជាប់ពី <strong>$1</strong>។",
+ "notification-bundle-header-page-linked": "តំណភ្ជាប់ត្រូវបានដាក់ពី {{PLURAL:$5||ទំព័រចំនួន $5|100=ទំព័ររាប់រយ}} មកកាន់ <strong>$3</strong>។",
+ "notification-header-article-reminder": "ទំព័រមួយដែល{{GENDER:$2|អ្នក}}បានស្នើសុំអោយក្រើនរំលឹកមាននៅ <strong>$3</strong>",
+ "notification-link-text-what-links-here": "តំណភ្ជាប់ទាំងអស់មកកាន់ទំព័រនេះ",
+ "notification-header-mention-other": "$1 {{GENDER:$2|បានហៅឈ្មោះ}}{{GENDER:$3|អ្នក}}នៅ<strong>$4</strong> ក្នុងផ្នែក \"<strong>$5</strong>\"។",
+ "notification-header-mention-other-nosection": "$1 {{GENDER:$2|បានហៅឈ្មោះ}}{{GENDER:$3|អ្នក}}នៅ <strong>$4</strong>។",
+ "notification-header-mention-user-talkpage-v2": "$1 {{GENDER:$2|បានហៅឈ្មោះ}}{{GENDER:$3|អ្នក}}នៅលើ<strong>ទំព័រពិភាក្សាអ្នកប្រើប្រាស់{{GENDER:$5|របស់}} $4</strong> ក្នុងផ្នែក \"<strong>$6</strong>\"។",
+ "notification-header-mention-user-talkpage-nosection": "$1 {{GENDER:$2|បានហៅឈ្មោះ}}{{GENDER:$3|អ្នក}}នៅលើ<strong>ទំព័រពិភាក្សាអ្នកប្រើប្រាស់{{GENDER:$5|របស់}} $4</strong>។",
+ "notification-header-mention-agent-talkpage": "$1 {{GENDER:$2|បានហៅឈ្មោះ}}{{GENDER:$3|អ្នក}}នៅលើ<strong>ទំព័រពិភាក្សា{{GENDER:$2|របស់គាត់|របស់គាត់|របស់ពួកគាត់}}</strong> ក្នុងផ្នែក \"<strong>$4</strong>\"។",
+ "notification-header-mention-agent-talkpage-nosection": "$1 {{GENDER:$2|បានហៅឈ្មោះ}}{{GENDER:$3|អ្នក}}នៅលើ<strong>ទំព័រពិភាក្សា{{GENDER:$2|របស់គាត់|របស់គាត់|របស់ពួកគាត់}}</strong>។",
+ "notification-header-mention-article-talkpage": "$1 {{GENDER:$2|បានហៅឈ្មោះ}}{{GENDER:$3|អ្នក}}នៅលើទំព័រពិភាក្សា<strong>$4</strong> ក្នុងផ្នែក \"<strong>$5</strong>\"។",
+ "notification-header-mention-article-talkpage-nosection": "$1 {{GENDER:$2|បានហៅឈ្មោះ}}{{GENDER:$3|អ្នក}}នៅលើទំព័រពិភាក្សា<strong>$4</strong>។",
+ "notification-header-mention-failure-user-unknown": "ការហៅឈ្មោះ<strong>$3</strong> ដែល{{GENDER:$2|អ្នក}}បានហៅ ផ្ញើចេញមិនបានទេ ព្រោះរកមិនឃើញអ្នកប្រើប្រាស់នេះ។",
+ "notification-header-mention-failure-user-anonymous": "ការហៅឈ្មោះ<strong>$3</strong> ដែល{{GENDER:$2|អ្នក}}បានហៅ ផ្ញើចេញមិនបានទេ ព្រោះអ្នកប្រើប្រាស់នេះជាអនាមិកជន។",
+ "notification-header-mention-failure-too-many": "{{GENDER:$2|អ្នក}}បានព្យាយាមហៅឈ្មោះ{{PLURAL:$3|អ្នកប្រើប្រាស់|អ្នកប្រើប្រាស់}}ច្រើនជាង $3 នាក់។ ការហៅឈ្មោះលើពីចំនួនកំហិតនេះនឹងមិនត្រូវបានផ្ញើចេញទេ។",
+ "notification-header-mention-failure-bundle": "{{PLURAL:$3|ការហៅឈ្មោះ|ការហៅឈ្មោះចំនួន $3 នាក់}}ដែល{{GENDER:$2|អ្នកបានហៅ}}នៅលើទំព័រពិភាក្សា<strong>$4</strong> {{PLURAL:$3|មិនអាច}}ផ្ញើចេញបានទេ។",
+ "notification-compact-header-mention-failure-user-unknown": "<strong>គ្មានអត្តនាមអ្នកប្រើប្រាស់បែបនេះ៖</strong> $1",
+ "notification-compact-header-mention-failure-user-anonymous": "<strong>មិនអាចហៅឈ្មោះអាសយដ្ឋានIP៖</strong> $1",
+ "notification-header-mention-success": "ការហៅឈ្មោះ<strong>$3</strong>{{GENDER:$2|របស់អ្នក}}ត្រូវបានផ្ញើចេញ។",
+ "notification-header-mention-success-bundle": "{{PLURAL:$3|ការហៅឈ្មោះ|ការហៅឈ្មោះចំនួន $3 នាក់}}ដែល{{GENDER:$2|អ្នកបានហៅ}}នៅលើទំព័រពិភាក្សា<strong>$4</strong> {{PLURAL:$3|ត្រូវបាន}}ផ្ញើចេញ។",
+ "notification-compact-header-mention-success": "<strong>{{GENDER:$2|អ្នកបានហៅឈ្មោះ}}៖</strong> $3",
+ "notification-header-mention-status-bundle": "{{PLURAL:$3|សារជូនដំណឹង|សារជូនដំណឹងចំនួន $3ច្បាប់}}អំពីការហៅឈ្មោះដែល{{GENDER:$2|អ្នកបានហៅ}}នៅលើទំព័រពិភាក្សា<strong>$4</strong>៖ {{PLURAL:$5|ផ្ញើចេញមិនបានចំនួន $5}}, {{PLURAL:$6|ផ្ញើចេញបានចំនួន $6}}។",
+ "notification-header-user-rights-add-only": "សិទ្ធិអ្នកប្រើប្រាស់{{GENDER:$4|របស់អ្នក}}{{GENDER:$1|ត្រូវបានផ្លាស់ប្ដូរ}}។ អ្នកត្រូវបានបន្ថែមជាសមាជិក៖ $2។",
+ "notification-header-user-rights-remove-only": "សិទ្ធិអ្នកប្រើប្រាស់{{GENDER:$4|របស់អ្នក}}{{GENDER:$1|ត្រូវបានផ្លាស់ប្ដូរ}}។ អ្នកលែងជាសមាជិក៖ $2។",
+ "notification-header-user-rights-add-and-remove": "សិទ្ធិអ្នកប្រើប្រាស់{{GENDER:$6|របស់អ្នក}}{{GENDER:$1|ត្រូវបានផ្លាស់ប្ដូរ}}។ អ្នកត្រូវបានបន្ថែមជាសមាជិក៖ $2។ អ្នកលែងជាសមាជិក៖​ $4។",
+ "notification-header-user-rights-expiry-change": "កាលបរិច្ឆេទសុពលភាពសមាជិកភាព{{GENDER:$4|របស់អ្នក}}នៅក្នុង{{PLURAL:$3|ក្រុម|ក្រុម}}ខាងក្រោម{{GENDER:$1|ត្រូវបានផ្លាស់ប្ដូរ}}៖ $2។",
+ "notification-header-welcome": "{{SITENAME}}{{GENDER:$2|សូមស្វាគមន៍}} $1! យើងខ្ញុំរីករាយណាស់ដែល{{GENDER:$2|អ្នក}}មានវត្តមាននៅទីនេះ។",
+ "notification-header-mention-summary": "$1 {{GENDER:$2|បានហៅឈ្មោះ}}{{GENDER:$3|អ្នក}}ក្នុងចំណារពន្យល់ក្នុង<strong>$4</strong>។",
+ "notification-welcome-linktext": "សូមស្វាគមន៍",
+ "notification-header-thank-you-1-edit": "{{GENDER:$2|អ្នក}}ទើបនឹងធ្វើកំណែប្រែដំបូង{{GENDER:$2|របស់អ្នក}}។ សូមអរគុណច្រើន!",
+ "notification-header-thank-you-10-edit": "{{GENDER:$2|អ្នក}}ទើបនឹងធ្វើកំណែប្រែទីដប់{{GENDER:$2|របស់អ្នក}}។ សូមអរគុណច្រើន និងសូមជួយបន្តទៀត!",
+ "notification-header-thank-you-100-edit": "{{GENDER:$2|អ្នក}}ទើបនឹងធ្វើកំណែប្រែទីមួយរយ{{GENDER:$2|របស់អ្នក}}។ សូមអរគុណច្រើន!",
+ "notification-header-thank-you-1000-edit": "{{GENDER:$2|អ្នក}}ទើបនឹងធ្វើកំណែប្រែទីមួយពាន់{{GENDER:$2|របស់អ្នក}}។ សូមអរគុណច្រើន! អ្នកជាអ្នករួមចំណែកដ៏មហិមាម្នាក់ហើយ!",
+ "notification-header-thank-you-10000-edit": "{{GENDER:$2|អ្នក}}ទើបនឹងធ្វើកំណែប្រែទីមួយម៉ឺន{{GENDER:$2|របស់អ្នក}}។ សូមអរគុណច្រើន!",
+ "notification-header-thank-you-100000-edit": "{{GENDER:$2|អ្នក}}ទើបនឹងធ្វើកំណែប្រែទីមួយសែន{{GENDER:$2|របស់អ្នក}}។ សូមអរគុណច្រើនសម្រាប់ការរួមចំណែកដ៏អស្ចារ្យនេះ!",
+ "notification-header-thank-you-1000000-edit": "{{GENDER:$2|អ្នក}}ទើបនឹងធ្វើកំណែប្រែទីមួយលាន{{GENDER:$2|របស់អ្នក}}។ សូមអរគុណច្រើនសម្រាប់ការរួមចំណែកមហាសាលនេះ!",
+ "notification-link-thank-you-edit": "កំណែប្រែ{{GENDER:$1|របស់អ្នក}}",
+ "notification-link-text-view-edit": "មើលកំណែប្រែ",
+ "notification-link-article-reminder": "មើលទំព័រ",
+ "notification-header-reverted": "{{PLURAL:$4|កំណែប្រែរបស់អ្នកលើ<strong>$3</strong>ត្រូវបាន|កំណែប្រែរបស់អ្នកលើ<strong>$3</strong>ត្រូវបាន}}{{GENDER:$2|ត្រូវបានមួលត្រឡប់}}។",
+ "notification-header-emailuser": "$1 {{GENDER:$2|បានផ្ញើ}}អ៊ីមែលមួយមកអ្នក។",
+ "notification-edit-talk-page-email-subject2": "$1 {{GENDER:$1|បានសរសេរ}}សារមួយមកអ្នកនៅក្នុង{{SITENAME}}",
+ "notification-edit-talk-page-email-batch-body-with-section": "$1 {{GENDER:$1|បានសរសេរ}}សារមួយនៅលើទំព័រពិភាក្សារបស់អ្នក ក្នុងផ្នែក \"$2\"។",
+ "notification-page-linked-email-subject": "ទំព័រមួយដែលអ្នកបានបង្កើតត្រូវបានដាក់តំណភ្ជាប់នៅក្នុង{{SITENAME}}",
+ "notification-reverted-email-subject2": "{{PLURAL:$3|កំណែប្រែរបស់អ្នកត្រូវបាន|កំណែប្រែរបស់អ្នកត្រូវបាន}}{{GENDER:$1|មួលត្រឡប់}} នៅក្នុង{{SITENAME}}",
+ "notification-mention-email-subject": "$1 {{GENDER:$1|បានហៅឈ្មោះ}}{{GENDER:$2|អ្នក}} នៅក្នុង{{SITENAME}}",
+ "notification-user-rights-email-subject": "សិទ្ធិអ្នកប្រើប្រាស់របស់អ្នកនៅក្នុង{{SITENAME}}ត្រូវបានផ្លាស់ប្ដូរ",
+ "notification-timestamp-ago-seconds": "{{PLURAL:$1|$1វិនាទីមុន}}",
+ "notification-timestamp-ago-minutes": "{{PLURAL:$1|$1នាទីមុន}}",
+ "notification-timestamp-ago-hours": "{{PLURAL:$1|$1ម៉ោងមុន}}",
+ "notification-timestamp-ago-days": "{{PLURAL:$1|$1ថ្ងៃមុន}}",
+ "notification-timestamp-ago-months": "{{PLURAL:$1|$1ខែមុន}}",
+ "notification-timestamp-ago-years": "{{PLURAL:$1|$1ឆ្នាំមុន}}",
+ "notification-timestamp-today": "ថ្ងៃនេះ",
+ "notification-timestamp-yesterday": "ម្សិលមិញ",
+ "notification-inbox-filter-read": "អានហើយ",
+ "notification-inbox-filter-unread": "មិនទាន់អាន",
+ "notification-inbox-filter-all": "ទាំងអស់",
+ "echo-email-body-default": "អ្នកមានសារថ្មីមួយនៅ {{SITENAME}}៖\n\n$1",
+ "echo-email-footer-default-html": "ដើម្បីចាត់ចែងអ៊ីមែលដែលយើងខ្ញុំផ្ញើមកអ្នក <a href=\"$2\" style=\"text-decoration:none; color: #3868B0;\">សូមពិនិត្យចំណង់ចំណូលចិត្តរបស់អ្នក</a>។<br />\n$1",
+ "echo-email-footer-default": "$2\n\nដើម្បីចាត់ចែងអ៊ីមែលដែលយើងខ្ញុំត្រូវផ្ញើមកអ្នក សូមពិនិត្យចំណង់ចំណូលចិត្តរបស់អ្នក៖\n{{canonicalurl:{{#special:Preferences}}#mw-prefsection-echo}}\n\n$1",
+ "echo-email-plain-footer": "ដើម្បីចាត់ចែងអ៊ីមែលដែលយើងខ្ញុំផ្ញើមក{{GENDER:$1|អ្នក}} សូមពិនិត្យចំណង់ចំណូលចិត្ត{{GENDER:$1|របស់អ្នក}}៖",
+ "echo-email-html-footer-preference-link-text": "ពិនិត្យចំណង់ចំណូលចិត្ត{{GENDER:$1|របស់អ្នក}}",
+ "echo-email-html-footer-with-link": "ដើម្បីចាត់ចែងអ៊ីមែលណាដែលត្រូវផ្ញើមក{{GENDER:$2|អ្នក}} $1។",
+ "echo-notification-alert": "{{PLURAL:$1|សារជូនដំណឹងសំខាន់($1)|សារជូនដំណឹងសំខាន់($1)|100=សារជូនដំណឹងសំខាន់(ជាង១០០)}}",
+ "echo-notification-notice": "{{PLURAL:$1|សារជូនដំណឹងធម្មតា($1)|សារជូនដំណឹងធម្មតា($1)|100=សារជូនដំណឹងធម្មតា(ជាង១០០)}}",
+ "echo-notification-alert-text-only": "សារជូនដំណឹងសំខាន់",
+ "echo-notification-notice-text-only": "សារជូនដំណឹងធម្មតា",
+ "echo-overlay-link": "សារជូនដំណឹងទាំងអស់",
+ "echo-overlay-title": "<b>សារជូនដំណឹង</b>",
+ "echo-overlay-title-overflow": "<b>{{PLURAL:$1|សារជូនដំណឹង|សារជូនដំណឹង}}</b> (កំពុងបង្ហាញ $1ច្បាប់ ក្នុងចំណោមសារមិនទាន់អាន $2ច្បាប់)",
+ "echo-mark-all-as-read": "កត់ចំណាំថាបានអានទាំងអស់ហើយ",
+ "echo-mark-all-as-read-confirmation": "បានកត់ចំណាំ{{PLURAL:$1|សារជូនដំណឹង|សារជូនដំណឹង}}ចំនួន $1ច្បាប់ថាបានអានហើយ",
+ "echo-mark-wiki-as-read": "កត់ចំណាំថាបានអានទាំងអស់ហើយនៅក្នុងវិគីដែលបានជ្រើសយក៖ $1",
+ "echo-date-today": "ថ្ងៃនេះ",
+ "echo-date-yesterday": "ម្សិលមិញ",
+ "echo-load-more-error": "មានបញ្ហាកើតឡើងពេលទាញយកលទ្ធផលបន្ថែម។",
+ "notification-bundle-header-edit-user-talk-v2": "{{PLURAL:$1|សារថ្មីមួយ|សារថ្មីចំនួន $1|100=សារថ្មីជាង១០០}}នៅលើ<strong>ទំព័រពិភាក្សា{{GENDER:$3|របស់អ្នក}}</strong>។",
+ "echo-email-batch-subject-daily": "អ្នកមាន{{PLURAL:$2|សារថ្មីមួយ|សារថ្មីៗ}}នៅក្នុង{{SITENAME}}",
+ "echo-email-batch-subject-weekly": "សប្ដាហ៍នេះអ្នកមាន{{PLURAL:$2|សារថ្មីមួយ|សារថ្មីៗ}}នៅក្នុង{{SITENAME}}",
+ "echo-email-batch-body-intro-daily": "សួស្ដី $1!\nនេះជាសេចក្ដីសង្ខេបសកម្មភាពថ្ងៃនេះនៅក្នុង{{SITENAME}}សម្រាប់អ្នក។",
+ "echo-email-batch-body-intro-weekly": "សួស្ដី $1!\nនេះជាសេចក្ដីសង្ខេបសកម្មភាពសប្ដាហ៍នេះនៅក្នុង{{SITENAME}}សម្រាប់អ្នក។",
+ "echo-email-batch-link-text-view-all-notifications": "មើលសារជូនដំណឹងទាំងអស់",
+ "notification-header-foreign-alert": "សារជូនដំណឹងសំខាន់ផ្សេងទៀតពី{{PLURAL:$5|វិគីមួយទៀត|វិគី$5ផ្សេងទៀត}}",
+ "notification-header-foreign-notice": "សារជូនដំណឹងធម្មតាផ្សេងទៀតពី{{PLURAL:$5|វិគីមួយទៀត|វិគី$5ផ្សេងទៀត}}",
+ "notification-header-foreign-all": "សារជូនដំណឹងផ្សេងទៀតពី{{PLURAL:$5|វិគីមួយទៀត|វិគី$5ផ្សេងទៀត}}"
}
diff --git a/Echo/i18n/kn.json b/Echo/i18n/kn.json
index 3de081ce..2569df2d 100644
--- a/Echo/i18n/kn.json
+++ b/Echo/i18n/kn.json
@@ -11,7 +11,6 @@
"prefs-emailsettings": "ಇಮೈಲ್ ಆಯ್ಕೆಗಳು",
"prefs-displaynotifications": "ಪ್ರದರ್ಶನ ಆಯ್ಕೆಗಳು",
"prefs-echosubscriptions": "ಈ ಘಟನೆಗಳ ಬಗ್ಗೆ ನನಗೆ ತಿಳಿಸಿ",
- "prefs-newmessageindicator": "ಹೊಸ ಸಂದೇಶ ಸೂಚಕ",
"echo-pref-send-me": "ನನಗೆ ಕಳುಹಿಸಿ:",
"echo-pref-send-to": "ಇವರಿಗೆ ಕಳುಹಿಸಿ:",
"echo-pref-email-format": "ಇಮೈಲ್ ನಮೂನೆ:",
@@ -23,7 +22,6 @@
"echo-pref-email-frequency-weekly": "ಪ್ರತಿ ವಾರದ ಸೂಚನೆಗಳ ಸಾರಾಂಶ",
"echo-pref-email-format-html": "ಎಚ್‌ಟಿಎಂಎಲ್",
"echo-pref-email-format-plain-text": "ಸಾದಾ ಪಠ್ಯ",
- "echo-pref-new-message-indicator": "ನನ್ನ ಸಾಧನಪಟ್ಟಿಯಲ್ಲಿ ಚರ್ಚಾಪುಟದ ಸಂದೇಶಸೂಚನೆ ತೋರಿಸಿ",
"echo-learn-more": "ಇನ್ನಷ್ಟು ತಿಳಿಯಿರಿ",
"echo-new-messages": "ನಿಮಗೆ ಹೊಸ ಸಂದೇಶಗಳಿವೆ",
"echo-category-title-edit-user-talk": "ಚರ್ಚಾಪುಟ {{PLURAL:$1|message|messages}}",
diff --git a/Echo/i18n/ko.json b/Echo/i18n/ko.json
index 097d75f6..3e776676 100644
--- a/Echo/i18n/ko.json
+++ b/Echo/i18n/ko.json
@@ -16,7 +16,8 @@
"Ykhwong",
"Jonghaya",
"Ellif",
- "렌즈"
+ "렌즈",
+ "Garam"
]
},
"echo-desc": "이벤트와 메시지를 사용자에게 알리는 시스템",
@@ -25,7 +26,6 @@
"prefs-displaynotifications": "표시 옵션",
"prefs-echosubscriptions": "다음의 경우에 내게 알림",
"prefs-echocrosswiki": "여러 위키의 알림",
- "prefs-newmessageindicator": "새 메시지 표시기",
"prefs-blocknotificationslist": "알림에서 제외된 사용자",
"echo-pref-send-me": "다음 방식으로 보내기:",
"echo-pref-send-to": "다음 주소로 보내기:",
@@ -39,8 +39,7 @@
"echo-pref-email-format-html": "HTML",
"echo-pref-email-format-plain-text": "일반 텍스트",
"echo-pref-cross-wiki-notifications": "다른 위키의 알림을 보기",
- "echo-pref-notifications-blacklist": "이 사용자들에게서 오는 알림을 표시하지 않습니다. ([[mw:Help:Notifications#mute|더 알아보기]])",
- "echo-pref-new-message-indicator": "내 도구 모음에 토론 문서 메시지 표시기 보이기",
+ "echo-pref-notifications-blacklist": "이 사용자의 알림을 표시하지 않습니다.([[mw:Special:MyLanguage/Help:Notifications#mute|더 알아보기]])",
"echo-pref-beta-feature-cross-wiki-message": "향상된 알림",
"echo-pref-beta-feature-cross-wiki-description": "알림을 더 쉽게 확인하고 정리합니다. 위키 간 알림 기능이 포함되어, 다른 위키에서의 메시지를 볼 수 있습니다. (주어진 위키에서 다른 위키의 알림을 받으려면 해당 위키에서 베타 기능을 활성화해야 합니다.)",
"echo-learn-more": "더 알아보기",
@@ -56,9 +55,10 @@
"echo-category-title-system": "{{PLURAL:$1|시스템}}",
"echo-category-title-user-rights": "{{PLURAL:$1|사용자 권한 바꾸기}}",
"echo-category-title-emailuser": "{{PLURAL:$1|다른 사용자로부터의 이메일}}",
+ "echo-category-title-article-reminder": "문서 {{PLURAL:$1|알리미}}",
"echo-pref-tooltip-edit-user-talk": "내 토론 문서에 누군가가 글이나 답글을 남길 때 내게 알립니다.",
"echo-pref-tooltip-article-linked": "누군가가 다른 문서에서 내가 만든 문서를 링크할 때 내게 알립니다.",
- "echo-pref-tooltip-reverted": "누군가가 편집 취소나 되돌리기 도구를 사용하여 내 편집을 되돌릴 때 내게 알림",
+ "echo-pref-tooltip-reverted": "누군가가 편집 취소나 되돌리기 도구를 사용하여 내 편집을 되돌릴 때 내게 알립니다.",
"echo-pref-tooltip-mention": "누군가가 내 사용자 문서를 링크할 때 내게 알립니다.",
"echo-pref-tooltip-mention-failure": "내가 누군가에게 언급을 보내지 못하면 내게 알립니다.",
"echo-pref-tooltip-mention-success": "내가 누군가에게 언급을 보내면 내게 알립니다.",
@@ -89,8 +89,6 @@
"echo-none": "알림이 없습니다.",
"echo-more-info": "자세한 정보",
"echo-feedback": "피드백 남기기",
- "echo-popup-footer-special-page-invitation": "<strong>재설계된 알림 문서를 사용해 보세요.</strong> [$2 $1]",
- "echo-popup-footer-special-page-invitation-link": "새로운 모든 모양과 기능.",
"echo-api-failure": "알림을 받아올 수 없었습니다.",
"echo-api-failure-cross-wiki": "원격 도메인으로의 연결은 거부되었습니다.",
"echo-notification-placeholder": "알림이 없습니다.",
@@ -119,18 +117,20 @@
"notification-link-text-view-page": "문서 보기",
"notification-header-edit-user-talk": "$1님이 <strong>{{GENDER:$3|당신의}} 토론 문서</strong>에 글을 {{GENDER:$2|남겼습니다}}.",
"notification-header-edit-user-talk-with-section": "$1님이 <strong>{{GENDER:$3|당신의}} 토론 문서</strong>의 \"<strong>$4</strong>\" 문단에 글을 {{GENDER:$2|남겼습니다}}.",
+ "notification-compact-header-edit-user-talk": "$1님이 {{GENDER:$3|당신에게}} 메시지를 {{GENDER:$2|남겼습니다}}.",
+ "notification-compact-header-edit-user-talk-with-section": "$1님이 \"<strong>$4</strong>\"에서 {{GENDER:$3|당신에게}} 메시지를 {{GENDER:$2|남겼습니다}}.",
"notification-header-page-linked": "<strong>$4</strong>에서 <strong>$3</strong>으로 연결되는 링크가 생성되었습니다.",
"notification-compact-header-page-linked": "<strong>$1</strong>에서 연결되었습니다.",
"notification-bundle-header-page-linked": "<strong>$3</strong> 문서가 {{PLURAL:$5||$5 개의 문서|100=99개 이상의 문서}}에서 링크되었습니다.",
"notification-link-text-what-links-here": "이 문서로 향하는 모든 링크",
- "notification-header-mention-other": "$1님이 <strong>$4</strong>의 \"<strong>$5</strong>\"에서 {{GENDER:$3|당신}}을 {{GENDER:$2|언급했습니다}}.",
- "notification-header-mention-other-nosection": "$1님이 <strong>$4</strong>에서 {{GENDER:$3|당신을}} {{GENDER:$2|언급했습니다}}.",
- "notification-header-mention-user-talkpage-v2": "$1님이 <strong>$4{{GENDER:$5|의}} 사용자 토론 문서</strong>의 \"<strong>$6</strong>\"에서 {{GENDER:$3|당신}}을 {{GENDER:$2|언급했습니다}}.",
- "notification-header-mention-user-talkpage-nosection": "$1님이 <strong>$4{{GENDER:$5|의}} 사용자 토론 문서</strong>에서 {{GENDER:$3|당신}}을 {{GENDER:$2|언급했습니다}}.",
- "notification-header-mention-agent-talkpage": "$1님이 <strong>$1님 자신의 사용자 토론 문서</strong>의 \"<strong>$4</strong>\"에서 {{GENDER:$3|당신}}을 {{GENDER:$2|언급했습니다}}.",
- "notification-header-mention-agent-talkpage-nosection": "$1님이 <strong>$1님 자신의 사용자 토론 문서</strong>에서 {{GENDER:$3|당신}}을 {{GENDER:$2|언급했습니다}}.",
- "notification-header-mention-article-talkpage": "$1님이 $4 토론 문서의 \"<strong>$5</strong>\" 문단에서 {{GENDER:$3|당신을}} {{GENDER:$2|언급했습니다}}.",
- "notification-header-mention-article-talkpage-nosection": "$1님이 <strong>$4</strong> 토론 문서에서 {{GENDER:$3|당신을}} {{GENDER:$2|언급했습니다}}.",
+ "notification-header-mention-other": "$1님이 <strong>$4</strong>의 \"<strong>$5</strong>\"에서 {{GENDER:$3|나를}} {{GENDER:$2|언급했습니다}}.",
+ "notification-header-mention-other-nosection": "$1님이 <strong>$4</strong>에서 {{GENDER:$3|나를}} {{GENDER:$2|언급했습니다}}.",
+ "notification-header-mention-user-talkpage-v2": "$1님이 <strong>$4{{GENDER:$5|의}} 사용자 토론 문서</strong>의 \"<strong>$6</strong>\"에서 {{GENDER:$3|나를}} {{GENDER:$2|언급했습니다}}.",
+ "notification-header-mention-user-talkpage-nosection": "$1님이 <strong>$4{{GENDER:$5|의}} 사용자 토론 문서</strong>에서 {{GENDER:$3|나를}} {{GENDER:$2|언급했습니다}}.",
+ "notification-header-mention-agent-talkpage": "$1님이 <strong>$1님 자신의 사용자 토론 문서</strong>의 \"<strong>$4</strong>\"에서 {{GENDER:$3|나를}} {{GENDER:$2|언급했습니다}}.",
+ "notification-header-mention-agent-talkpage-nosection": "$1님이 <strong>$1님 자신의 사용자 토론 문서</strong>에서 {{GENDER:$3|나를}} {{GENDER:$2|언급했습니다}}.",
+ "notification-header-mention-article-talkpage": "$1님이 $4 토론 문서의 \"<strong>$5</strong>\" 문단에서 {{GENDER:$3|나를}} {{GENDER:$2|언급했습니다}}.",
+ "notification-header-mention-article-talkpage-nosection": "$1님이 <strong>$4</strong> 토론 문서에서 {{GENDER:$3|나를}} {{GENDER:$2|언급했습니다}}.",
"notification-header-mention-failure-user-unknown": "사용자를 찾을 수 없기 때문에 <strong>$3</strong>에 대한 {{GENDER:$2|당신의}} 언급은 전달되지 않았습니다.",
"notification-header-mention-failure-user-anonymous": "사용자가 익명이기 때문에 <strong>$3</strong>에 대한 {{GENDER:$2|당신의}} 언급은 전달되지 않았습니다.",
"notification-header-mention-failure-too-many": "{{GENDER:$2|당신은}} $3명 이상의 {{PLURAL:$3|사용자}}를 언급하려고 했습니다. 제한을 초과한 모든 언급은 전달되지 않았습니다.",
@@ -146,6 +146,7 @@
"notification-header-user-rights-add-and-remove": "{{GENDER:$6|당신}}의 사용자 권한이 {{GENDER:$1|바뀌었습니다}}. 당신은 $2 권한을 받았지만, $4 권한은 더 이상 갖고 있지 않습니다.",
"notification-header-user-rights-expiry-change": "$2 {{PLURAL:$3|그룹|그룹들}}에서의 {{GENDER:$4|귀하}}의 멤버십 유효기간이 {{GENDER:$1|변경되었습니다}}.",
"notification-header-welcome": "{{SITENAME}}에 오신 것을 {{GENDER:$2|환영}}합니다, $1님! 당신을 만나게 되어 기쁩니다.",
+ "notification-header-mention-summary": "$1님이 <strong>$4</strong>의 편집 요약에서 {{GENDER:$3|나를}} {{GENDER:$2|언급했습니다}}.",
"notification-welcome-linktext": "환영합니다",
"notification-header-thank-you-1-edit": "{{GENDER:$2|}}방금 첫 번째 편집을 달성했습니다. 기여에 감사드리며, 환영합니다!",
"notification-header-thank-you-10-edit": "{{GENDER:$2|}}방금 10번째 편집을 달성했습니다. 편집에 감사드리며, 앞으로도 좋은 기여 부탁드립니다!",
@@ -157,13 +158,13 @@
"notification-link-thank-you-edit": "{{GENDER:$1|사용자}}의 편집",
"notification-link-text-view-edit": "편집 보기",
"notification-link-article-reminder": "문서 보기",
- "notification-header-reverted": "당신의 {{PLURAL:$4|<strong>$3</strong>에 대한 편집}}이 {{GENDER:$2|되돌려졌습니다}}.",
+ "notification-header-reverted": "{{PLURAL:$4|<strong>$3</strong> 문서의 내 편집}}이 {{GENDER:$2|되돌려졌습니다}}.",
"notification-header-emailuser": "$1님이 당신에게 이메일을 {{GENDER:$2|보냈습니다}}.",
"notification-edit-talk-page-email-subject2": "$1님이 {{SITENAME}}에서 당신에게 글을 {{GENDER:$1|남겼습니다}}",
"notification-edit-talk-page-email-batch-body-with-section": "$1님이 당신의 토론 문서의 \"$2\" 문단에 글을 {{GENDER:$1|남겼습니다}}.",
"notification-page-linked-email-subject": "{{SITENAME}}에서 당신이 만든 문서가 링크되었습니다",
"notification-reverted-email-subject2": "{{SITENAME}}의 당신의 {{PLURAL:$3|편집}}이 {{GENDER:$1|되돌려졌습니다}}",
- "notification-mention-email-subject": "$1님이 {{SITENAME}}에서 {{GENDER:$2|당신을}} {{GENDER:$1|언급했습니다}}",
+ "notification-mention-email-subject": "$1님이 {{SITENAME}}에서 {{GENDER:$2|나를}} {{GENDER:$1|언급했습니다}}",
"notification-user-rights-email-subject": "{{SITENAME}}에서 당신의 사용자 권한이 바뀌었습니다",
"notification-timestamp-ago-seconds": "$1초 전",
"notification-timestamp-ago-minutes": "$1분 전",
@@ -179,6 +180,8 @@
"echo-email-body-default": "{{SITENAME}}에 새 알림이 있습니다:\n\n$1",
"echo-email-footer-default-html": "발송되는 메일을 관리하려면 <a href=\"$2\" style=\"text-decoration:none; color:#3868B0;\">환경 설정을 확인하세요</a>. <br />\n$1",
"echo-email-footer-default": "$2\n\n발송되는 이메일을 관리하려면, 환경 설정을 확인하세요:\n{{canonicalurl:{{#special:Preferences}}#mw-prefsection-echo}}\n\n$1",
+ "echo-email-plain-footer": "저희가 {{GENDER:$1|당신}}에게 보낼 이메일을 수정하려면 {{GENDER:$1|사용자}} 환경 설정을 확인하십시오:",
+ "echo-email-html-footer-preference-link-text": "{{GENDER:$1|사용자}} 환경 설정을 확인하세요",
"echo-email-html-footer-with-link": "{{GENDER:$2|}}발송되는 메일을 관리하려면, $1.",
"echo-notification-alert": "{{PLURAL:$1|경보 ($1)|경보 ($1)|100=경보 (99+)}}",
"echo-notification-notice": "{{PLURAL:$1|알림 ($1)|알림 ($1)|100=알림 (99+)}}",
@@ -188,11 +191,12 @@
"echo-overlay-title": "<b>알림</b>",
"echo-overlay-title-overflow": "<b>{{PLURAL:$1|알림}}</b> (안 읽은 알림 $2개 중 $1개)",
"echo-mark-all-as-read": "모두 읽은 것으로 표시",
+ "echo-mark-all-as-read-confirmation": "{{PLURAL:$1|알림}} $1개를 읽은 것으로 표시했습니다",
"echo-mark-wiki-as-read": "선택한 위키에서 모든 항목을 읽은 것으로 표시: $1",
"echo-date-today": "오늘",
"echo-date-yesterday": "어제",
"echo-load-more-error": "더 많은 결과를 가져오는 동안 오류가 발생했습니다.",
- "notification-bundle-header-edit-user-talk-v2": "{{GENDER:$3|당신}}의 토론 문서에 {{PLURAL:$1|1개의 새 메시지|$1개의 새 메시지|100=99+개의 새 메시지}}가 있습니다.",
+ "notification-bundle-header-edit-user-talk-v2": "{{GENDER:$3|내}} 토론 문서에 {{PLURAL:$1|1개의 새 메시지|$1개의 새 메시지|100=99+개의 새 메시지}}가 있습니다.",
"echo-email-batch-subject-daily": "{{SITENAME}}에서 {{PLURAL:$2|새 알림}}이 있습니다",
"echo-email-batch-subject-weekly": "이번 주에 {{SITENAME}}에서 {{PLURAL:$2|새 알림}}이 있습니다",
"echo-email-batch-body-intro-daily": "$1님 안녕하세요,\n여기에 {{SITENAME}}에 오늘의 활동 요약이 있습니다.",
diff --git a/Echo/i18n/krc.json b/Echo/i18n/krc.json
index ba1d4c47..24e1292e 100644
--- a/Echo/i18n/krc.json
+++ b/Echo/i18n/krc.json
@@ -2,7 +2,8 @@
"@metadata": {
"authors": [
"Iltever",
- "Ernác"
+ "Ernác",
+ "Matěj Suchánek"
]
},
"echo-desc": "Къошулуучуланы болууланы юсюнден эмда джазылгъанланы юсюнден система билдириуле",
@@ -10,7 +11,6 @@
"prefs-emailsettings": "Эл. почтаны джарашдырыулары",
"prefs-displaynotifications": "Кёрюнюуню джарашдырыулары",
"prefs-echosubscriptions": "Бу болууланы юсюнден билдире тур",
- "prefs-newmessageindicator": "Джангы билдириуню индикатору",
"echo-pref-send-me": "Меннге джибер:",
"echo-pref-send-to": "Былайгъа джибер:",
"echo-pref-email-format": "E-mail'ни форматы:",
@@ -22,7 +22,6 @@
"echo-pref-email-frequency-weekly": "Билдириулени ыйыкъ сайын сводкасы",
"echo-pref-email-format-html": "HTML",
"echo-pref-email-format-plain-text": "Тюз текст",
- "echo-pref-new-message-indicator": "Адырла панелимде сюзюу бетимдеги билдириулени индикаторун кёргюз",
"echo-learn-more": "Кёбюрек бил",
"echo-log": "Баш журнал",
"echo-new-messages": "Джангы билдириулеринг барды",
@@ -47,8 +46,6 @@
"echo-none": "Билдириуюгюз болмагъанды.",
"echo-more-info": "Толу билги",
"echo-feedback": "Ызына билдириу",
- "echo-popup-footer-special-page-invitation": "<strong>Билдириулени джангыргъан бетине багъа бичигиз.</strong> [$2 $1]",
- "echo-popup-footer-special-page-invitation-link": "Джангы дизайн эм функцияла.",
"notification-link-text-view-message": "Билдириуню кёр",
"notification-link-text-view-mention": "Сагъыныуну кёр",
"notification-link-text-view-changes": "Тюрлениулени кёр",
@@ -79,7 +76,7 @@
"echo-notification-notice-text-only": "Билдириуле",
"echo-overlay-link": "Бютеу билдириуле",
"echo-overlay-title": "<b>Билдириуле</b>",
- "echo-overlay-title-overflow": "<b>{{PLURAL:$1|Билдириу|Билдириуле}}</b> ($2 {{PLURAL|$2|окъулмагъандан}} $1 саны {{PLURAL|$1|кёргюзюлгенди}})",
+ "echo-overlay-title-overflow": "<b>{{PLURAL:$1|Билдириу|Билдириуле}}</b> ($2 {{PLURAL:$2|окъулмагъандан}} $1 саны {{PLURAL:$1|кёргюзюлгенди}})",
"echo-mark-all-as-read": "Барысын да окъулгъанлача белгиле",
"echo-date-today": "Бюгюн",
"echo-date-yesterday": "Тюнене",
diff --git a/Echo/i18n/krl.json b/Echo/i18n/krl.json
index 38b97edd..8456bb1c 100644
--- a/Echo/i18n/krl.json
+++ b/Echo/i18n/krl.json
@@ -5,6 +5,5 @@
"Varvana"
]
},
- "tooltip-pt-notifications-alert": "{{GENDER:|Šiun}} hälytykšet",
- "tooltip-pt-notifications-message": "{{GENDER:|Šiun}} viestit"
+ "tooltip-pt-notifications-alert": "{{GENDER:|Šiun}} hälytykšet"
}
diff --git a/Echo/i18n/ksh.json b/Echo/i18n/ksh.json
index ffeabd9a..3ca8a490 100644
--- a/Echo/i18n/ksh.json
+++ b/Echo/i18n/ksh.json
@@ -1,7 +1,8 @@
{
"@metadata": {
"authors": [
- "Purodha"
+ "Purodha",
+ "Matěj Suchánek"
]
},
"echo-desc": "Süßtehm för de Metmaacher ze benohreeschteje övver wat paßehrd es un övver Meddeijlonge un Nohreeschte.",
@@ -10,7 +11,6 @@
"prefs-displaynotifications": "Enschtällonge för_t Aanzeije",
"prefs-echosubscriptions": "Donn mesch enfommehre övver:",
"prefs-echocrosswiki": "Meddeijlonge uß anndere Wikkis",
- "prefs-newmessageindicator": "„Neu Meddeijlonge“ Aanzeije",
"echo-pref-send-me": "Scheck mer:",
"echo-pref-send-to": "Scheck aan:",
"echo-pref-email-format": "Dä <i lang=\"en\" xml:lang=\"en\" dir=\"ltr\">e-mail</i> iehr Fommahd:",
@@ -23,7 +23,6 @@
"echo-pref-email-format-html": "<i lang=\"en\" xml:lang=\"en\" dir=\"ltr\" title=\"PHP Hypertext Preprocessor</i>",
"echo-pref-email-format-plain-text": "Eijfache Täx",
"echo-pref-cross-wiki-notifications": "Donn Meddeijlonge uß anndere Wikkis aanzeije",
- "echo-pref-new-message-indicator": "Donn „Neu Meddeijlonge op Dinger Klaafsigg“ en mingem Menüh anzeije",
"echo-pref-beta-feature-cross-wiki-message": "Bäßer Meddeijlonge",
"echo-pref-beta-feature-cross-wiki-description": "Benohreeschtejonge leijschter belohre un ojjannisere, enjeschloße Benohreeschtejonge uß andere Wikkis.",
"echo-learn-more": "Mih lässe",
@@ -104,10 +103,10 @@
"notification-link-text-view-edit": "De Veränderong belohre",
"notification-header-reverted": "{{GENDER:$2|Dä|Dat|Dä Metmaacher|De|Dat}} „$1“ hät {{PLURAL:$4|Dinge Beijdraach|Ding Beijdrähsch|keine Beijdraach vun Der}} op dä Sigg „$3“ retuhr jemaht.",
"notification-header-emailuser": "{{GENDER:$2|Dä|Dat|Dä Metmaacher|De|Dat}} „$1“ hät Der en <i lang=\"en\" xml:lang=\"en\" dir=\"ltr\" title=\"„de eläktrohnesche Poß“\">e-mail</i> jeschek.",
- "notification-edit-talk-page-email-subject2": "{{GENDER:$1|Dä|Dat|Dä Metmaacher|De|Dat}} „$1“ hät Der op {{GENDER:Dative|{{SITENAME}}}} en Metdeilong jeschek.",
+ "notification-edit-talk-page-email-subject2": "{{GENDER:$1|Dä|Dat|Dä Metmaacher|De|Dat}} „$1“ hät Der op {{GRAMMAR:Dative|{{SITENAME}}}} en Metdeilong jeschek.",
"notification-edit-talk-page-email-batch-body-with-section": "{{GENDER:$1|Dä|Dat|Dä Metmaacher|De|Dat}} „$1“ hät Der op en Metdeilong op Ding Klaafsigg en dä Affschnett „$2“ jedonn.",
- "notification-page-linked-email-subject": "Op {{GENDER:Dative|{{SITENAME}}}} wohd ene Lengk op Sigg aanjelaht, di Do aanjalaht hats.",
- "notification-reverted-email-subject2": "{{GENDER:$1|Dä|Dat|Dä Metmaacher|De|Dat}} „$1“ häd op {{GENDER:Dative|{{SITENAME}}}} {{PLURAL:$3|en Änderong|$3 Änderonge|kein Änderonge}} vun Der retuhr jemaht.",
+ "notification-page-linked-email-subject": "Op {{GRAMMAR:Dative|{{SITENAME}}}} wohd ene Lengk op Sigg aanjelaht, di Do aanjalaht hats.",
+ "notification-reverted-email-subject2": "{{GENDER:$1|Dä|Dat|Dä Metmaacher|De|Dat}} „$1“ häd op {{GRAMMAR:Dative|{{SITENAME}}}} {{PLURAL:$3|en Änderong|$3 Änderonge|kein Änderonge}} vun Der retuhr jemaht.",
"notification-mention-email-subject": "{{GENDER:$1|Dä|Dat|Dä Metmaacher|De|Dat}} „$1“ hät Desch {{GRAMMAR:em|{{ucfirst:{{SITENAME}}}}}} jenannt.",
"notification-user-rights-email-subject": "Ding Rääschde als Metmaacher {{GRAMMAR:em|{{ucfirst:{{SITENAME}}}}}} sin verändert woode.",
"notification-timestamp-ago-seconds": "{{PLURAL:$1|$1 Sek.}}",
diff --git a/Echo/i18n/kum.json b/Echo/i18n/kum.json
new file mode 100644
index 00000000..7dd08daa
--- /dev/null
+++ b/Echo/i18n/kum.json
@@ -0,0 +1,8 @@
+{
+ "@metadata": {
+ "authors": [
+ "ArslanX"
+ ]
+ },
+ "tooltip-pt-notifications-alert": "{{GENDER:|сени}} билдиривлеринг"
+}
diff --git a/Echo/i18n/kw.json b/Echo/i18n/kw.json
new file mode 100644
index 00000000..83500e6b
--- /dev/null
+++ b/Echo/i18n/kw.json
@@ -0,0 +1,8 @@
+{
+ "@metadata": {
+ "authors": [
+ "Nrowe"
+ ]
+ },
+ "tooltip-pt-notifications-alert": "{{GENDER:|Agas gwarnyansow}}"
+}
diff --git a/Echo/i18n/la.json b/Echo/i18n/la.json
index 40f819ab..94977be2 100644
--- a/Echo/i18n/la.json
+++ b/Echo/i18n/la.json
@@ -4,7 +4,8 @@
"Amire80",
"Autokrator",
"UV",
- "Laurentianus"
+ "Laurentianus",
+ "Lesgles"
]
},
"echo-desc": "Modus nuntiorum mittendarum",
@@ -12,7 +13,6 @@
"prefs-emailsettings": "Modi nuntiorum",
"prefs-displaynotifications": "Nuntiorum modi",
"prefs-echosubscriptions": "Haec indicare",
- "prefs-newmessageindicator": "Nova nuntia",
"echo-pref-send-me": "Mihi mittantur:",
"echo-pref-send-to": "Mittantur per:",
"echo-pref-email-format": "Litterarum modus:",
@@ -24,7 +24,6 @@
"echo-pref-email-frequency-weekly": "Nuntia hebdomadatim congesta",
"echo-pref-email-format-html": "HTML",
"echo-pref-email-format-plain-text": "Textus nudus",
- "echo-pref-new-message-indicator": "Nova apud te disputata in arca ferramentorum indicare",
"echo-learn-more": "Plura legere",
"echo-new-messages": "Habes nuntia nova",
"echo-category-title-edit-user-talk": "Paginae disputationis {{PLURAL:$1|nuntium|nuntia}}",
diff --git a/Echo/i18n/lb.json b/Echo/i18n/lb.json
index 4e7b166e..9e4b87d9 100644
--- a/Echo/i18n/lb.json
+++ b/Echo/i18n/lb.json
@@ -13,7 +13,6 @@
"prefs-displaynotifications": "Optioune vum Affichage",
"prefs-echosubscriptions": "Mech iwwer dës Evenementer informéieren",
"prefs-echocrosswiki": "Cross-Wiki Notifikatiounen",
- "prefs-newmessageindicator": "Indicateur vun neie Messagen",
"prefs-blocknotificationslist": "Verstoppt Benotzer",
"echo-pref-send-me": "Mir schécken:",
"echo-pref-send-to": "Schécken un:",
@@ -27,8 +26,7 @@
"echo-pref-email-format-html": "HTML",
"echo-pref-email-format-plain-text": "Kloertext",
"echo-pref-cross-wiki-notifications": "Notifikatioune vun anere Wikie weisen",
- "echo-pref-notifications-blacklist": "Notifikatioune vun dëse Benotzer net weisen.\n([[mw:Help:Notifications#mute|méi gewuer ginn]])",
- "echo-pref-new-message-indicator": "Indicateur fir Messagen op menger Diskussiounssäit a menger Geschirläischt weisen",
+ "echo-pref-notifications-blacklist": "Notifikatioune vun dëse Benotzer net weisen.\n([[mw:Special:MyLanguage/Help:Notifications#mute|méi gewuer ginn]])",
"echo-pref-beta-feature-cross-wiki-message": "Erweidert Notifikatiounen",
"echo-pref-beta-feature-cross-wiki-description": "Notifikatioune méi einfach weisen an organiséieren.Inklusiv Cross-Wiki Notifikatiounen, déi Iech Message vun anere Wikie weisen. (Fir Cross-Wiki Notifikatioune vun enger bestëmmter Wiki ze kréie musst dir d'Beta-Funktioun op där Wiki aktivéieren.)",
"echo-learn-more": "Fir méi ze wëssen",
@@ -49,14 +47,14 @@
"echo-pref-tooltip-article-linked": "Mech informéiere wann een an engem Artikel op eng aner Säit verlinkt, déi ech kreéiert hunn.",
"echo-pref-tooltip-reverted": "Mech informéiere wann ee meng Ännerung zerécksetzt oder wann de 'Rollback'-Tool benotzt gëtt.",
"echo-pref-tooltip-mention": "Mech informéiere wann een e Link op meng Benotzersäit setzt.",
- "echo-pref-tooltip-mention-failure": "Mech informéieren wann ech engem eng Mentioun net schécke konnt.",
- "echo-pref-tooltip-mention-success": "Mech informéieren wann ech engem eng Mentioun geschéckt hunn.",
+ "echo-pref-tooltip-mention-failure": "Mech informéiere wann ech engem eng Mentioun net schécke konnt.",
+ "echo-pref-tooltip-mention-success": "Mech informéiere wann ech engem eng Mentioun geschéckt hunn.",
"echo-pref-tooltip-user-rights": "Mech informéiere wann ee meng Benotzerrechter ännert.",
"echo-pref-tooltip-emailuser": "Mech informéiere wann ee mir en E-Mail schéckt.",
"echo-pref-tooltip-article-reminder": "Mech iwwer dës Säit notifiéieren wann ech froen.",
"echo-error-no-formatter": "Keng Formatéierung fir Notifikatiounen definéiert.",
"notifications": "Notifikatiounen",
- "tooltip-pt-notifications-alert": "{{GENDER:|Är}} Warnungen",
+ "tooltip-pt-notifications-alert": "{{GENDER:|Är}} Meldungen",
"tooltip-pt-notifications-notice": "{{GENDER:|Är}} Notifikatiounen",
"echo-displaynotificationsconfiguration": "Astellunge vun den Notifikatioune weisen",
"echo-displaynotificationsconfiguration-summary": "Dëst ass eng Iwwersiicht wéi Notifikatiounen op dëser Wiki agestallt sinn.",
@@ -72,27 +70,27 @@
"echo-displaynotificationsconfiguration-mandatory-notification-methods-header": "Obligatoresch Notifikatiounsmethoden",
"echo-displaynotificationsconfiguration-mandatory-notification-methods-by-category-legend": "Wat fir eng Notifikatiounsmethode fir jidder Kategorie obligatoresch sinn",
"echo-specialpage": "Notifikatiounen",
- "echo-specialpage-section-markread": "Grupp als geliest markéieren",
- "echo-specialpage-markasread": "Notifikatioun: Als geliest markéieren",
+ "echo-specialpage-section-markread": "D'Grupp als gelies markéieren",
+ "echo-specialpage-markasread": "Notifikatioun: Als gelies markéieren",
"echo-specialpage-markasread-invalid-id": "Net valabel ID vun engem Evenement",
"echo-specialpage-pagination-numnotifications": "$1 {{PLURAL:$1|Notifikatioun|Notifikatiounen}}",
+ "echo-specialpage-pagination-range": "$1 bis $2",
"echo-specialpage-pagefilters-title": "Rezent Aktivitéit",
"echo-specialpage-pagefilters-subtitle": "Säite mat net geliesten Notifikatiounen",
- "notificationsmarkread-legend": "Notifikatioun als geliest markéieren",
+ "notificationsmarkread-legend": "Notifikatioun als gelies markéieren",
"echo-anon": "Fir Notifikatiounen ze kréien, [$1 maacht e Benotzerkont op] oder [$2 loggt Iech an]",
"echo-none": "Dir hutt keng Notifikatiounen.",
"echo-more-info": "Méi Informatiounen",
"echo-feedback": "Feedback",
- "echo-popup-footer-special-page-invitation": "<strong>Probéiert déi nei Notifikatiouns-Säit aus.</strong> [$2 $1]",
- "echo-popup-footer-special-page-invitation-link": "Mat neiem Look an neie Funktiounen",
+ "echo-quotation-marks": "\"$1\"",
"echo-api-failure": "D'Notifikatioune konnten net ofgeruff ginn.",
"echo-api-failure-cross-wiki": "Den Zougang op d'Remote-Domain gouf net erlaabt.",
"echo-notification-placeholder": "Et si keng Notifikatiounen do.",
"echo-notification-placeholder-filters": "Et gëtt keng Notifikatiounen déi dëse Kritären entspriechen.",
"echo-notification-loginrequired": "Dir musst Iech alogge fir Är Notifikatiounen ze gesinn.",
"echo-notification-popup-loginrequired": "Loggt Iech w.e.g. a fir Är Notifikatiounen ze gesinn.",
- "echo-notification-markasread": "Als geliest markéieren",
- "echo-notification-markasunread": "Als net-geliest markéieren",
+ "echo-notification-markasread": "Als gelies markéieren",
+ "echo-notification-markasunread": "Als net-gelies markéieren",
"echo-notification-markasread-tooltip": "Als gelies markéieren",
"echo-notification-more-options-tooltip": "Méi Optiounen",
"notification-dynamic-actions-unwatch": "{{GENDER:$3|Ophalen}} nei Aktivitéiten iwwer \"$1\" z'iwwerwaachen",
@@ -102,7 +100,7 @@
"notification-dynamic-actions-watch-confirmation": "{{GENDER:$3|Dir}} iwwerwaacht elo d'Säit \"$1\"",
"notification-dynamic-actions-watch-confirmation-description": "{{GENDER:$3|Dir}} kënnt zu all Ament ophalen [$2 dës Säit] z'iwwerwaachen.",
"notification-link-text-expand-all": "Opklappen",
- "notification-link-text-expand-alert-count": "{{PLURAL:$1|Eng Warnung|$1 Warnunge}} weisen",
+ "notification-link-text-expand-alert-count": "{{PLURAL:$1|Eng Meldung|$1 Meldunge}} weisen",
"notification-link-text-expand-notice-count": "{{PLURAL:$1|Eng Notifikatioun|$1 Notifikatioune}} weisen",
"notification-link-text-expand-all-count": "{{PLURAL:$1|Eng Notifikatioun|$1 Notifikatiounen}} weisen",
"notification-link-text-collapse-all": "Zesummeklappen",
@@ -113,6 +111,7 @@
"notification-link-text-view-page": "Säit weisen",
"notification-header-edit-user-talk": "$1 {{GENDER:$2|huet}} e Message op <strong>{{GENDER:$3|Är}} Diskussiounssäit</strong> gesat.",
"notification-header-edit-user-talk-with-section": "$1 huet {{GENDER:$2|Iech}} e Message op <strong>{{GENDER:$3|Ärer}} Diskussiounssäit</strong> an \"<strong>$4</strong>\" geschriwwen.",
+ "notification-compact-header-edit-user-talk": "$1 {{GENDER:$2|huet}} {{GENDER:$3|Iech}} e Message hannerlooss.",
"notification-body-edit-user-talk-with-section": "$1",
"notification-header-page-linked": "Et gouf e Link vu(n) <strong>$4</strong> op <strong>$3</strong> gemaach.",
"notification-compact-header-page-linked": "Vu(n) <strong>$1</strong> verlinkt.",
@@ -135,14 +134,14 @@
"notification-header-mention-success": "{{GENDER:$2|Är}} Mentioun vu(n) <strong>$3</strong> gouf geschéckt.",
"notification-header-mention-success-bundle": "{{PLURAL:$3|Eng Mentioun|$3 Mentiounen}} déi {{GENDER:$2|Dir}} op der Diskussiounssäit <strong>$4</strong> gemaach hutt {{PLURAL:$3|gouf|goufe}} geschéckt.",
"notification-compact-header-mention-success": "<strong>{{GENDER:$2|Dir}} hutt mentionnéiert:</strong> $3",
- "notification-header-mention-status-bundle": "{{PLURAL:$3|Eng Notifikatioun|$3 Notifikatioune}} vu Mentiounen déi {{GENDER:$2|Dir}} op der Diskussiounssäit <strong>$4</strong> ge4maach hutt: {{PLURAL:$5|$5 gouf geschéckt|goufe geschéckt}}, {{PLURAL:$6|$6 geschéckt}}.",
+ "notification-header-mention-status-bundle": "{{PLURAL:$3|Eng Notifikatioun|$3 Notifikatioune}} vu Mentiounen déi {{GENDER:$2|Dir}} op der Diskussiounssäit <strong>$4</strong> gemaach hutt: {{PLURAL:$5|$5 gouf geschéckt|goufe geschéckt}}, {{PLURAL:$6|$6 geschéckt}}.",
"notification-header-user-rights-add-only": "{{GENDER:$4|Är}} Benotzerrechter goufe {{GENDER:$1|geännert}}. Dir sidd elo Member vun: $2.",
"notification-header-user-rights-remove-only": "{{GENDER:$4|Är}} Benotzerrechter goufe {{GENDER:$1|geännert}}. Dir sidd net méi Member vun: $2.",
"notification-header-user-rights-add-and-remove": "{{GENDER:$6|Är}} Benotzerrechter goufe {{GENDER:$1|geännert}}. Dir sidd elo Member vun: $2. Dir sidd net méi Member vun: $4.",
"notification-header-welcome": "{{GENDER:$2|Wëllkomm}} op {{SITENAME}}, $1! Mir si frou, datt {{GENDER:$2|Dir}} do sidd.",
"notification-welcome-linktext": "Wëllkomm",
"notification-header-thank-you-1-edit": "{{GENDER:$2|Dir}} hutt elo grad {{GENDER:$2|Är}} éischt Ännerung op {{SITENAME}} gemaach; Villmools {{GENDER:$2|Merci}}, a wëllkomm!",
- "notification-header-thank-you-10-edit": "{{GENDER:$2|Dir}} hutt elo grad {{GENDER:$2|Är}} zéngst Ännerung gemaach; Villmools {{GENDER:$2|Merci}}, a maacht esou weider!",
+ "notification-header-thank-you-10-edit": "{{GENDER:$2|Dir}} hutt elo grad {{GENDER:$2|Är}} zéngt Ännerung gemaach; Villmools {{GENDER:$2|Merci}}, a maacht esou weider!",
"notification-header-thank-you-100-edit": "{{GENDER:$2|Dir}} hutt elo grad {{GENDER:$2|Är}} honnertst Ännerung gemaach; Villmools {{GENDER:$2|Merci}}!",
"notification-header-thank-you-1000-edit": "{{GENDER:$2|Dir}} hutt elo grad {{GENDER:$2|Är}} dausendst Ännerung gemaach; Villmools {{GENDER:$2|Merci}}! Dir sidd e gudde Mataarbechter!",
"notification-header-thank-you-10000-edit": "{{GENDER:$2|Dir}} hutt elo grad {{GENDER:$2|Är}} zengdausendst Ännerung gemaach; Villmools {{GENDER:$2|Merci}}!",
@@ -167,8 +166,8 @@
"notification-timestamp-ago-years": "{{PLURAL:$1|Ee Joer|$1 Joer}}",
"notification-timestamp-today": "Haut",
"notification-timestamp-yesterday": "Gëschter",
- "notification-inbox-filter-read": "Geliest",
- "notification-inbox-filter-unread": "Net geliest",
+ "notification-inbox-filter-read": "Gelies",
+ "notification-inbox-filter-unread": "Net gelies",
"notification-inbox-filter-all": "All",
"echo-email-body-default": "Dir hutt eng nei Notifikatioun op {{SITENAME}}:\n\n$1",
"echo-email-footer-default-html": "Fir ze kontrolléiere wat fir eng E-Maile mir Iech schécken, <a href=\"$2\" style=\"text-decoration:none; color: #3868B0;\">kuckt an Ären Astellungen</a><br />\n$1",
@@ -176,16 +175,16 @@
"echo-email-plain-footer": "Fir ze kontrolléiere wat fir eng E-Mailen mir {{GENDER:$1|Iech}} schécken, kuckt an {{GENDER:$1|Ären}} Astellungen:",
"echo-email-html-footer-preference-link-text": "kuckt {{GENDER:$1|Är}} Astellungen no",
"echo-email-html-footer-with-link": "Fir ze kontrolléiere wat fir eng E-Mailen mir {{GENDER:$2|Iech}} schécken, $1.",
- "echo-notification-alert": "{{PLURAL:$1|Warnung ($1)|Warnungen ($1)|100=Warnungen (99+)}}",
+ "echo-notification-alert": "{{PLURAL:$1|Meldung ($1)|Meldungen ($1)|100=Meldungen (99+)}}",
"echo-notification-notice": "{{PLURAL:$1|Notifikatioun ($1)|Notifikatiounen ($1)|100=Notifikatiounen (méi wéi 99)}}",
- "echo-notification-alert-text-only": "Warnungen",
+ "echo-notification-alert-text-only": "Meldungen",
"echo-notification-notice-text-only": "Notifikatiounen",
"echo-overlay-link": "All Notifikatiounen",
"echo-overlay-title": "<b>Notifikatiounen</b>",
"echo-overlay-title-overflow": "<b>{{PLURAL:$1|Notifikatioun|Notifikatiounen}}</b> (weist $1 vun $2 net geliesten)",
- "echo-mark-all-as-read": "All als geliest markéieren",
- "echo-mark-all-as-read-confirmation": "{{PLURAL:$1|Eng Notifikatioun|$1 Notifikatiounen}} als geliest markéiert",
- "echo-mark-wiki-as-read": "An der erausgesichter Wiki all als geliest markéieren: $1",
+ "echo-mark-all-as-read": "All als gelies markéieren",
+ "echo-mark-all-as-read-confirmation": "{{PLURAL:$1|Eng Notifikatioun|$1 Notifikatiounen}} als gelies markéiert",
+ "echo-mark-wiki-as-read": "An der erausgesichter Wiki all als gelies markéieren: $1",
"echo-date-today": "Haut",
"echo-date-yesterday": "Gëschter",
"echo-load-more-error": "Am Sichen no méi Resultater ass e Feeler geschitt.",
@@ -195,7 +194,7 @@
"echo-email-batch-body-intro-daily": "Salut $1,\n\nHei ass e Resumé vun den Aktivitéite vun haut op {{SITENAME}} fir Iech.",
"echo-email-batch-body-intro-weekly": "Salut $1,\n\nHei ass e Resumé vun den Aktivitéite vun dëser Woch op {{SITENAME}} fir Iech.",
"echo-email-batch-link-text-view-all-notifications": "All Notifikatioune weisen",
- "notification-header-foreign-alert": "Méi Warnunge {{PLURAL:$5|vun enger anerer Wiki|vu(n) $5 anere Wikien}}",
- "notification-header-foreign-notice": "Méi Notifikatiounen aus {{PLURAL:$5|enger anere Wiki|$5 anere Wikien}}",
+ "notification-header-foreign-alert": "Méi Meldunge {{PLURAL:$5|vun enger anerer Wiki|vu(n) $5 anere Wikien}}",
+ "notification-header-foreign-notice": "Méi Notifikatiounen aus {{PLURAL:$5|enger anerer Wiki|$5 anere Wikien}}",
"notification-header-foreign-all": "Méi Notifikatioune {{PLURAL:$5|vun enger anerer Wiki|vu(n) $5 anere Wikien}}"
}
diff --git a/Echo/i18n/lfn.json b/Echo/i18n/lfn.json
index d654456c..3c8a9d07 100644
--- a/Echo/i18n/lfn.json
+++ b/Echo/i18n/lfn.json
@@ -1,8 +1,10 @@
{
"@metadata": {
"authors": [
- "Cgboeree"
+ "Cgboeree",
+ "Mafcadio"
]
},
+ "notifications": "Avisas",
"tooltip-pt-notifications-alert": "{{GENDER:|Tua}} avisas"
}
diff --git a/Echo/i18n/lij.json b/Echo/i18n/lij.json
index 72bb0b2e..358433ea 100644
--- a/Echo/i18n/lij.json
+++ b/Echo/i18n/lij.json
@@ -1,7 +1,8 @@
{
"@metadata": {
"authors": [
- "Giromin Cangiaxo"
+ "Giromin Cangiaxo",
+ "S4b1nuz E.656"
]
},
"echo-desc": "Scistema pe notificâ a-i utenti messaggi e eventi",
@@ -10,7 +11,6 @@
"prefs-displaynotifications": "Opçioin de vixualizaçion",
"prefs-echosubscriptions": "Mandime 'na notiffica insce questi eventi",
"prefs-echocrosswiki": "Notiffiche cross-wiki",
- "prefs-newmessageindicator": "Indicatô di noeuvi messaggi",
"echo-pref-send-me": "Mandime:",
"echo-pref-send-to": "Manda a:",
"echo-pref-email-format": "Formato e-mail:",
@@ -23,7 +23,6 @@
"echo-pref-email-format-html": "HTML",
"echo-pref-email-format-plain-text": "Testo normale",
"echo-pref-cross-wiki-notifications": "Mostra notiffiche da atri wiki",
- "echo-pref-new-message-indicator": "Mostra inta bara di strumenti l'indicatô pe-i noeuvi messaggi da mæ paggina de discuscion",
"echo-pref-beta-feature-cross-wiki-message": "Notiffiche amegioæ",
"echo-pref-beta-feature-cross-wiki-description": "Vixualizza e organizza e notiffiche ciù façilmente. O l'includde e notiffiche cross-wiki, che te permettan de vixualizâ i messaggi da i atri wiki. (Pe riçeive e notiffiche cross-wiki insce 'n dæto wiki, ti devi attivâ a fonçion beta inte quello wiki.)",
"echo-learn-more": "Pe saveine de ciu",
@@ -49,7 +48,7 @@
"echo-pref-tooltip-emailuser": "Avvixime quande quarcun o m'invia 'n'e-mail.",
"echo-error-no-formatter": "Nisciun-a formattaçion definia pe-e notiffiche",
"notifications": "Notiffiche",
- "tooltip-pt-notifications-alert": "{{GENDER:|I teu}} avixi",
+ "tooltip-pt-notifications-alert": "{{GENDER:|I teu}} avîsi",
"tooltip-pt-notifications-notice": "{{GENDER:|I teu}} avixi",
"echo-displaynotificationsconfiguration": "Mostra a configuaçion de notiffiche",
"echo-displaynotificationsconfiguration-summary": "Questa a l'è 'na panorammica de comme e notiffiche son configuæ insce questo wiki.",
@@ -76,8 +75,6 @@
"echo-none": "Notiffiche no ti ghe n'hæ .",
"echo-more-info": "Atre informaçioin",
"echo-feedback": "Commenti",
- "echo-popup-footer-special-page-invitation": "<strong>Proeuva a noeuva paggina de notiffiche.</strong> [$2 $1]",
- "echo-popup-footer-special-page-invitation-link": "Noeuve presentaçioin e fonçionalitæ.",
"echo-api-failure": "No l'è stæto poscibbile recuperâ e notiffiche.",
"echo-api-failure-cross-wiki": "L'accesso a-o dominnio remoto o l'è stæto negou.",
"echo-notification-placeholder": "Notiffiche no ghe n'è.",
diff --git a/Echo/i18n/lki.json b/Echo/i18n/lki.json
index ddfc94f3..fcc27217 100644
--- a/Echo/i18n/lki.json
+++ b/Echo/i18n/lki.json
@@ -11,7 +11,6 @@
"prefs-emailsettings": "تنظیمات ایمیل",
"prefs-displaynotifications": "گزینه‌های نمایش",
"prefs-echosubscriptions": "مرا از این رویدادها آگاه کن",
- "prefs-newmessageindicator": "نشانگر پیام تازه",
"echo-pref-send-me": "برایم فرستاده شود:",
"echo-pref-send-to": "فرستاده‌شود به:",
"echo-pref-email-format": "قالب ایمیل:",
@@ -23,7 +22,6 @@
"echo-pref-email-frequency-weekly": "خلاصهٔ هفتگی اعلان‌ها",
"echo-pref-email-format-html": "اچ‌تی‌ام‌ال",
"echo-pref-email-format-plain-text": "متن ساده",
- "echo-pref-new-message-indicator": "نمایش نشانگر پیام صفحهٔ بحث در نوار ابزار من",
"echo-learn-more": "اطلاعات بیشتر",
"echo-new-messages": "پیام‌های جدیدی دارید",
"echo-category-title-edit-user-talk": "{{PLURAL:$1|پیام|پیام‌های}} وةڵگة گةپ",
diff --git a/Echo/i18n/lrc.json b/Echo/i18n/lrc.json
index 296985cd..d70c6804 100644
--- a/Echo/i18n/lrc.json
+++ b/Echo/i18n/lrc.json
@@ -10,7 +10,6 @@
"prefs-emailsettings": "چیا هنی انجومانامه",
"prefs-displaynotifications": "گزینه یا نه نشو بیه",
"prefs-echosubscriptions": "مه نه سی ای رخ ونیا خوردار کو",
- "prefs-newmessageindicator": "نشو دیارکن پیغام تازه",
"echo-pref-send-me": "کل کو سیم:",
"echo-pref-send-to": "کل کو سی:",
"echo-pref-email-format": "قالو ایمیل:",
@@ -22,7 +21,6 @@
"echo-pref-email-frequency-weekly": "یه گل چکسه هفته ای د وارسیاریا",
"echo-pref-email-format-html": "اچ تی ام ال",
"echo-pref-email-format-plain-text": "متن ساده",
- "echo-pref-new-message-indicator": "نشودیارکن پیغوم نه د اوزارجا بلگه چک چنه نشو بیئه",
"echo-learn-more": "بيشتر يا بيئريت",
"echo-new-messages": "شما پیغومیا تازه داریتو",
"echo-category-title-edit-user-talk": "بلگه چک چنه {{PLURAL:$1|پیغوم|پیغومیا}}",
@@ -36,6 +34,7 @@
"echo-pref-tooltip-mention": "هرگاتی که کسی وه بلگه کاریاری مه هوم پیوند بی مه نه وارسیاری بک",
"echo-pref-tooltip-user-rights": "هرگاتی که کسی حقوق کاریاری مه نا آلشت ده مه نه وارسیاری بک.",
"notifications": "وارسیاریا",
+ "tooltip-pt-notifications-alert": "هوشداریا",
"echo-specialpage": "وارسیاریا",
"echo-none": "شما هیژ وارسیاری ناریت.",
"echo-more-info": "دونسمنیا هنی",
diff --git a/Echo/i18n/lt.json b/Echo/i18n/lt.json
index 57744400..6fab96b4 100644
--- a/Echo/i18n/lt.json
+++ b/Echo/i18n/lt.json
@@ -7,7 +7,8 @@
"Albertas",
"Zygimantus",
"Macofe",
- "Homo"
+ "Homo",
+ "Manvydasz"
]
},
"echo-desc": "Sistema, skirta naudotojų informavimui apie įvykius ir žinutes",
@@ -15,20 +16,21 @@
"prefs-emailsettings": "El. pašto nustatymai",
"prefs-displaynotifications": "Rodymo nuostatos",
"prefs-echosubscriptions": "Pranešti man apie šiuos įvykius",
- "prefs-newmessageindicator": "Naujų žinučių indikatorius",
+ "prefs-echocrosswiki": "Kitų projektų pranešimai",
+ "prefs-blocknotificationslist": "Užblokuoti naudotojai",
"echo-pref-send-me": "Siųskite man:",
"echo-pref-send-to": "Siųsti:",
"echo-pref-email-format": "Elektroninių laškų pavidalas:",
"echo-pref-web": "Internetas",
"echo-pref-email": "El. paštas",
- "echo-pref-email-frequency-never": "Nesiųskite man jokiu el. pašto pranešimų",
+ "echo-pref-email-frequency-never": "Nesiųskite man jokių el. pašto pranešimų",
"echo-pref-email-frequency-immediately": "Atskiri pranešimai, vos juos gavus",
"echo-pref-email-frequency-daily": "Per dieną gautų pranešimų sąvadas",
"echo-pref-email-frequency-weekly": "Per savaitę gautų pranešimų sąvadas",
"echo-pref-email-format-html": "HTML",
"echo-pref-email-format-plain-text": "Paprastas tekstas",
"echo-pref-cross-wiki-notifications": "Rodyti pranešimus iš kitų viki",
- "echo-pref-new-message-indicator": "Rodyti ženklą mano įrankių juostoje apie aptarimų puslapyje gautą pranešimą",
+ "echo-pref-notifications-blacklist": "Nerodyti pranešimų iš šių naudotojų. ([[mw:Special:MyLanguage/Help:Notifications#mute|sužinoti daugiau]])",
"echo-pref-beta-feature-cross-wiki-message": "Papildyti pranešimai",
"echo-pref-beta-feature-cross-wiki-description": "Peržiūrėkite ir organizuokite pranešimus lengviau. Įeina tarp-vikiniai pranešimai, kurie leidžia matyti žinutes iš kitų vikių.",
"echo-learn-more": "Sužinokite daugiau",
@@ -44,9 +46,9 @@
"echo-category-title-system": "{{PLURAL:$1|Sistema}}",
"echo-category-title-user-rights": "{{PLURAL:$1|Naudotojo teisių pakeitimas|Naudotojo teisių pakeitimai}}",
"echo-category-title-emailuser": "{{PLURAL:$1|El. laiškas iš kito naudotojo|El. laiškai iš kitų naudotojų}}",
- "echo-category-title-article-reminder": "Puslapio priminimai",
+ "echo-category-title-article-reminder": "Puslapio {{PLURAL:$1|priminimas|priminimai|priminimų}}",
"echo-pref-tooltip-edit-user-talk": "Pranešti man, kai kas nors parašo žinutę ar atsako mano aptarimo puslapyje.",
- "echo-pref-tooltip-article-linked": "Pranešti man, kai kas nors sukuria nuorodą iš straipsnio į mano sukurtą puslapį.",
+ "echo-pref-tooltip-article-linked": "Pranešti man, kai kas nors sukuria nuorodą iš kito puslapio į mano sukurtą puslapį.",
"echo-pref-tooltip-reverted": "Pranešti man, kai kas nors atmeta mano pakeitimus, naudodamasis atmetimo ar atšaukimo įrankiais.",
"echo-pref-tooltip-mention": "Pranešti man, kai kas nors sukuria nuorodą į mano naudotojo puslapį.",
"echo-pref-tooltip-mention-failure": "Pranešti man, kai aš kažkam negaliu išsiųsti paminėjimo.",
@@ -82,8 +84,6 @@
"echo-none": "Jūs turite jokių pranešimų.",
"echo-more-info": "Daugiau informacijos",
"echo-feedback": "Atsiliepimas",
- "echo-popup-footer-special-page-invitation": "<strong>Išbandykite naują Pranešimų puslapį.</strong> [$2 $1]",
- "echo-popup-footer-special-page-invitation-link": "Nauja išvaizda ir galimybės.",
"echo-api-failure": "Nepavyko gauti pranešimų.",
"echo-api-failure-cross-wiki": "Prieiga prie nuotolinio domeno buvo atmesta.",
"echo-notification-placeholder": "Pranešimų nėra.",
@@ -108,7 +108,7 @@
"notification-link-text-view-message": "Peržiūrėti žinutę",
"notification-link-text-view-mention": "Peržiūrėti paminėjimą",
"notification-link-text-view-mention-failure": "{{PLURAL:$1|Žiūrėti paminėjimą|Žiūrėti paminėjimus}}",
- "notification-link-text-view-changes": "{{GENDER:$1|Žiūrėti}} keitimus",
+ "notification-link-text-view-changes": "{{GENDER:$1|Peržiūrėti}} keitimus",
"notification-link-text-view-page": "Peržiūrėti puslapį",
"notification-header-edit-user-talk": "$1 {{GENDER:$2|paliko}} žinutę <strong>{{GENDER:$3|jūsų}} aptarimo puslapyje</strong>.",
"notification-header-edit-user-talk-with-section": "$1 {{GENDER:$2|paliko}} žinutę <strong>{{GENDER:$3|jūsų}} aptarimo puslapyje</strong> \"<strong>$4</strong>\".",
@@ -136,7 +136,7 @@
"notification-header-user-rights-add-only": "{{GENDER:$4|Jūsų}} vartotojo teisės buvo {{GENDER:$1|pakeistos}}. Buvote pridėtas prie: $2.",
"notification-header-user-rights-remove-only": "{{GENDER:$4|Jūsų}} vartotojo teisės buvo {{GENDER:$1|pakeistos}}. Jūs nebeesate šių grupių narys: $2.",
"notification-header-user-rights-add-and-remove": "{{GENDER:$6|Jūsų}} vartotojo teisės buvo {{GENDER:$1|pakeistos}}. Buvote pridėtas prie: $2. Jūs nebeesate šių grupių narys: $4.",
- "notification-header-welcome": "{{GENDER:$2|Sveiki atvykę}} į {{SITENAME}}, $1! Me džiaugiamės, kad {{GENDER:$2|jūs esate}} čia.",
+ "notification-header-welcome": "{{GENDER:$2|Sveiki atvykę}} į {{SITENAME}}, $1! Mes džiaugiamės, kad {{GENDER:$2|jūs esate}} čia.",
"notification-welcome-linktext": "Sveiki",
"notification-header-thank-you-1-edit": "Ką tik atlikote {{GENDER:$2|savo}} pirmąjį pakeitimą; ačiū jums ir sveiki atvykę!",
"notification-header-thank-you-10-edit": "Ką tik atlikote {{GENDER:$2|savo}} dešimtąjį pakeitimą; ačiū jums ir prašome nesustoti!",
@@ -148,7 +148,7 @@
"notification-link-thank-you-edit": "{{GENDER:$1|Jūsų}} pakeitimas",
"notification-link-text-view-edit": "Peržiūrėti redagavimą",
"notification-link-article-reminder": "Žiūrėti puslapį",
- "notification-header-reverted": "Jūsų {{PLURAL:$4|keitimas <strong>$3</strong>|keitimai <strong>$3</strong> puslapyje}} buvo {{GENDER:$2|atmesti}}.",
+ "notification-header-reverted": "Jūsų {{PLURAL:$4|keitimas <strong>$3</strong>|keitimai <strong>$3</strong>}} puslapyje buvo {{PLURAL:$4|atmestas|atmesti}}.",
"notification-header-emailuser": "$1 {{GENDER:$2|atsiuntė}} jums el. laišką.",
"notification-edit-talk-page-email-subject2": "$1 {{GENDER:$1|paliko}} žinutę jums svetainėje {{SITENAME}}",
"notification-edit-talk-page-email-batch-body-with-section": "$1 {{GENDER:$1|paliko}} žinutę jūsų aptarimo puslapyje \"$2\".",
@@ -171,8 +171,8 @@
"echo-email-footer-default-html": "Kad valdytumėte kuriuos el. laiškus jums siunčiame, <a href=\"$2\" style=\"text-decoration:none; color: #3868B0;\">patikrinkite savo nustatymus</a>.<br />\n$1",
"echo-email-footer-default": "$2\n\nKontroliuoti, kuriuos el. laiškus Jums siunčiame, galite savo nustatymuose:\n{{canonicalurl:{{#special:Preferences}}#mw-prefsection-echo}}\n\n$1",
"echo-email-plain-footer": "Kontroliuoti, kuriuos el. laiškus Jums siunčiame, galite savo nustatymuose:",
- "echo-email-html-footer-preference-link-text": "patikrinkite savo nustatymus",
- "echo-email-html-footer-with-link": "Kontroliuoti, kuriuos el. laiškus jums siunčiame, $1.",
+ "echo-email-html-footer-preference-link-text": "patikrinkite {{GENDER:$1|savo}} nustatymus",
+ "echo-email-html-footer-with-link": "Kontroliuoti, kuriuos el. laiškus jums {{GENDER:$2|siunčiame}}, $1.",
"echo-notification-alert": "{{PLURAL:$1|Įspėjimas ($1)|Įspėjimai ($1)|100=Įspėjimų (99+)}}",
"echo-notification-notice": "{{PLURAL:$1|Pranešimas ($1)|Pranešimai ($1)|100=Pranešimai (99+)}}",
"echo-notification-alert-text-only": "Įspėjimai",
diff --git a/Echo/i18n/lv.json b/Echo/i18n/lv.json
index 892e5834..88de8c83 100644
--- a/Echo/i18n/lv.json
+++ b/Echo/i18n/lv.json
@@ -14,12 +14,12 @@
"prefs-displaynotifications": "Attēlošanas uzstādījumi",
"prefs-echosubscriptions": "Paziņot man par šiem notikumiem",
"prefs-echocrosswiki": "Starpprojektu paziņojumi",
- "prefs-newmessageindicator": "Jauna ziņojuma indikators",
+ "prefs-blocknotificationslist": "Apklusinātie dalībnieki",
"echo-pref-send-me": "Nosūtīt man:",
"echo-pref-send-to": "Nosūtīt uz:",
"echo-pref-email-format": "E-pasta formāts:",
- "echo-pref-web": "Tīmeklis",
- "echo-pref-email": "E-pasts",
+ "echo-pref-web": "Vietnē",
+ "echo-pref-email": "E-pastā",
"echo-pref-email-frequency-never": "Nesūtīt man e-pasta paziņojumus",
"echo-pref-email-frequency-immediately": "Individuāli paziņojumi, tiklīdz tie ienāk",
"echo-pref-email-frequency-daily": "Ikdienas paziņojumu kopsavilkums",
@@ -27,7 +27,7 @@
"echo-pref-email-format-html": "HTML",
"echo-pref-email-format-plain-text": "Vienkāršs teksts",
"echo-pref-cross-wiki-notifications": "Rādīt paziņojumus no citiem WMF projektiem",
- "echo-pref-new-message-indicator": "Rādīt diskusiju lapas ziņojumu indikatoru manā rīkjoslā",
+ "echo-pref-notifications-blacklist": "Nerādīt paziņojumus no šiem dalībniekiem. ([[mw:Special:MyLanguage/Help:Notifications#mute|uzzināt vairāk]])",
"echo-learn-more": "Uzzināt vairāk",
"echo-log": "Publiskais žurnāls",
"echo-new-messages": "tev ir jauni paziņojumi",
@@ -35,14 +35,16 @@
"echo-category-title-article-linked": "Lapas {{PLURAL:$1|saites|saite|saites}}",
"echo-category-title-reverted": "{{PLURAL:$1|Atcelti labojumi|Atcelts labojums|Atcelti labojumi}}",
"echo-category-title-mention": "{{PLURAL:$1|Pieminēšanas|Pieminēšana|Pieminēšanas}}",
+ "echo-category-title-mention-failure": "Neizdevušās {{PLURAL:$1|pieminēšanas|pieminēšana|pieminēšanas}}",
+ "echo-category-title-mention-success": "Veiksmīgas {{PLURAL:$1|pieminēšanas|pieminēšana|pieminēšanas}}",
"echo-category-title-other": "{{PLURAL:$1|Citi|Cits|Citi}}",
"echo-category-title-system": "{{PLURAL:$1|Sistēmas paziņojumi|Sistēmas paziņojums|Sistēmas paziņojumi}}",
"echo-category-title-user-rights": "{{PLURAL:$1|Dalībnieka tiesību izmaiņas|Dalībnieka tiesības izmaiņas|Dalībnieka tiesību izmaiņas}}",
"echo-category-title-emailuser": "{{PLURAL:$1|E-pasti no citiem dalībniekiem|E-pasts no citiem dalībniekiem|E-pasti no citiem dalībniekiem}}",
"echo-category-title-article-reminder": "{{PLURAL:$1|Lapu atgādinājumi|Lapas atgādinājums|Lapu atgādinājumi}}",
"echo-pref-tooltip-edit-user-talk": "Paziņot man, kad kāds pievieno ziņojumu vai atbild manā diskusiju lapā.",
- "echo-pref-tooltip-article-linked": "Paziņot man, kad kāds izveido saiti uz manis izveidotu lapu.",
- "echo-pref-tooltip-reverted": "Paziņot man, kad kāds atceļ manis veiktu labojumu, izmanojot atcelšanas rīku.",
+ "echo-pref-tooltip-article-linked": "Paziņot man, kad kāds citā lapā izveido saiti uz manis izveidotu lapu.",
+ "echo-pref-tooltip-reverted": "Paziņot man, kad kāds atceļ manis veiktu labojumu, izmantojot saiti \"atcelt\" vai atcelšanas rīku.",
"echo-pref-tooltip-mention": "Paziņot man, kad kāds izveido saiti uz manu dalībnieka lapu.",
"echo-pref-tooltip-user-rights": "Paziņot man, kad kāds izmaina manas dalībnieka tiesības.",
"echo-pref-tooltip-emailuser": "Paziņot man, kad kāds nosūta man e-pastu.",
@@ -51,6 +53,9 @@
"tooltip-pt-notifications-alert": "{{GENDER:|Tavi}} brīdinājumi",
"tooltip-pt-notifications-notice": "{{GENDER:|Tavi}} paziņojumi",
"echo-displaynotificationsconfiguration-notifications-by-category-header": "Paziņojumi pēc kategorijas",
+ "echo-displaynotificationsconfiguration-sorting-by-section-header": "Veidu šķirošana",
+ "echo-displaynotificationsconfiguration-sorting-by-section-legend": "Kurā sadaļā katrs paziņojuma veids tiek ievietots",
+ "echo-displaynotificationsconfiguration-available-notification-methods-header": "Atļautās paziņojumu metodes",
"echo-displaynotificationsconfiguration-enabled-default-header": "Iespējots pēc noklusējuma",
"echo-displaynotificationsconfiguration-enabled-default-existing-users-legend": "Esošie dalībnieki",
"echo-displaynotificationsconfiguration-enabled-default-new-users-legend": "Jauni dalībnieki",
@@ -66,8 +71,6 @@
"echo-none": "Jums nav paziņojumu.",
"echo-more-info": "Vairāk informācijas",
"echo-feedback": "Atsauksmes",
- "echo-popup-footer-special-page-invitation": "<strong>Izmēģini uzlaboto paziņojumu lapu.</strong> [$2 $1]",
- "echo-popup-footer-special-page-invitation-link": "Jauns izskats un iespējas.",
"echo-api-failure": "Neizdevās iegūt paziņojumus.",
"echo-notification-placeholder": "Nav paziņojumu.",
"echo-notification-placeholder-filters": "Nav paziņojumu, kas atbilstu šiem kritērijiem.",
@@ -76,17 +79,39 @@
"echo-notification-markasread-tooltip": "Atzīmēt kā lasītu",
"echo-notification-more-options-tooltip": "Vairāk iespēju",
"notification-link-text-expand-all": "Izvērst",
+ "notification-link-text-expand-alert-count": "Skatīt {{PLURAL:$1|$1 brīdinājumus|$1 brīdinājumu|$1 brīdinājumus}}",
"notification-link-text-expand-notice-count": "Apskatīt {{PLURAL:$1|$1 paziņojumus|$1 paziņojumu|$1 paziņojumus}}",
+ "notification-link-text-expand-all-count": "Skatīt {{PLURAL:$1|$1 paziņojumus|$1 paziņojumu|$1 paziņojumus}}",
"notification-link-text-collapse-all": "Sakļaut",
"notification-link-text-view-message": "Apskatīt ziņojumu",
"notification-link-text-view-mention": "Apskatīt pieminēšanu",
+ "notification-link-text-view-mention-failure": "Skatīt {{PLURAL:$1|$1 pieminēšanas|$1 pieminēšanu|$1 pieminēšanas}}",
"notification-link-text-view-changes": "{{GENDER:$1|Apskatīt}} izmaiņas",
"notification-link-text-view-page": "Apskatīt lapu",
+ "notification-header-edit-user-talk": "$1 {{GENDER:$2|atstāja}} ziņu <strong>{{GENDER:$3|tavā}} diskusiju lapā</strong>.",
+ "notification-header-edit-user-talk-with-section": "$1 {{GENDER:$2|atstāja}} ziņu <strong>{{GENDER:$3|tavā}} diskusiju lapā</strong> sadaļā \"<strong>$4</strong>\".",
+ "notification-compact-header-edit-user-talk": "$1 {{GENDER:$2|atstāja}} {{GENDER:$3|tev}} ziņu.",
+ "notification-compact-header-edit-user-talk-with-section": "$1 {{GENDER:$2|atstāja}} {{GENDER:$3|tev}} ziņu par \"<strong>$4</strong>\".",
+ "notification-header-page-linked": "No <strong>$4</strong> uz <strong>$3</strong> tika izveidota saite.",
+ "notification-compact-header-page-linked": "Izveidota saite no <strong>$1</strong>.",
"notification-link-text-what-links-here": "Visas saites uz šo lapu",
+ "notification-header-mention-other": "$1 {{GENDER:$2|pieminēja}} {{GENDER:$3|tevi}} lapas <strong>$4</strong> sadaļā \"<strong>$5</strong>\".",
+ "notification-header-mention-other-nosection": "$1 {{GENDER:$2|pieminēja}} {{GENDER:$3|tevi}} lapā <strong>$4</strong>.",
+ "notification-header-mention-user-talkpage-v2": "$1 {{GENDER:$2|pieminēja}} {{GENDER:$3|tevi}} <strong>{{GENDER:$5|dalībnieka|dalībnieces}} $4 diskusiju lapā</strong> sadaļā \"<strong>$6</strong>\".",
+ "notification-header-mention-user-talkpage-nosection": "$1 {{GENDER:$2|pieminēja}} {{GENDER:$3|tevi}} <strong>{{GENDER:$5|dalībnieka|dalībnieces}} $4 diskusiju lapā</strong>.",
+ "notification-header-mention-agent-talkpage": "$1 {{GENDER:$2|pieminēja}} {{GENDER:$3|tevi}} <strong>{{GENDER:$2|savā}} diskusiju lapā</strong> sadaļā \"<strong>$4</strong>\".",
+ "notification-header-mention-agent-talkpage-nosection": "$1 {{GENDER:$2|pieminēja}} {{GENDER:$3|tevi}} <strong>{{GENDER:$2|savā}} diskusiju lapā</strong>.",
+ "notification-header-mention-article-talkpage": "$1 {{GENDER:$2|pieminēja}} {{GENDER:$3|tevi}} <strong>$4</strong> diskusiju lapā sadaļā \"<strong>$5</strong>\".",
+ "notification-header-mention-article-talkpage-nosection": "$1 {{GENDER:$2|pieminēja}} {{GENDER:$3|tevi}} <strong>$4</strong> diskusiju lapā.",
"notification-header-mention-failure-too-many": "{{GENDER:$2|Tu}} mēģināji pieminēt vairāk nekā $3 {{PLURAL:$3|dalībniekus|dalībnieku|dalībniekus}}. Visiem pieminētajiem aiz šīs robežas netika nosūtīts paziņojums.",
"notification-compact-header-mention-failure-user-unknown": "<strong>Dalībnieka vārds nepastāv:</strong> $1",
"notification-compact-header-mention-failure-user-anonymous": "<strong>IP adreses nevar pieminēt:</strong> $1",
"notification-compact-header-mention-success": "<strong>{{GENDER:$2|Tu pieminēji}}:</strong> $3",
+ "notification-header-user-rights-add-only": "{{GENDER:$4|Tavas}} lietotāja tiesības tika {{GENDER:$1|mainītas}}. Tu tiki {{GENDER:$4|pievienots|pievienota}} grupai: $2.",
+ "notification-header-user-rights-remove-only": "{{GENDER:$4|Tavas}} lietotāja tiesības tika {{GENDER:$1|mainītas}}. Tu vairs neesi grupā: $2.",
+ "notification-header-user-rights-add-and-remove": "{{GENDER:$4|Tavas}} lietotāja tiesības tika {{GENDER:$1|mainītas}}. Tu tiki {{GENDER:$6|pievienots|pievienota}} grupai: $2. Tu vairs neesi grupā: $4.",
+ "notification-header-mention-summary": "$1 {{GENDER:$2|pieminēja}} {{GENDER:$3|tevi}} <strong>$4</strong> labojuma kopsavilkumā.",
+ "notification-welcome-linktext": "Laipni lūdzam!",
"notification-header-thank-you-1-edit": "Tu nupat veici savu pirmo labojumu; paldies tev un laipni {{GENDER:$2|lūgts|lūgta}}!",
"notification-header-thank-you-10-edit": "Tu nupat veici savu desmito labojumu; paldies tev un {{GENDER:$2|lūdzu turpini}}!",
"notification-header-thank-you-100-edit": "Tu nupat veici savu simto labojumu; liels paldies {{GENDER:$2|tev}}!",
@@ -101,7 +126,7 @@
"notification-header-emailuser": "$1 {{GENDER:$2|nosūtīja}} tev e-pastu.",
"notification-edit-talk-page-email-subject2": "$1 {{GENDER:$1|atstāja}} tev ziņojumu {{SITENAME}}",
"notification-edit-talk-page-email-batch-body-with-section": "$1 {{GENDER:$1|atstāja}} paziņojumu jūsu diskusiju lapā \"$2\".",
- "notification-page-linked-email-subject": "Uz jūsu lapu {{SITENAME}} tika izveidota saite",
+ "notification-page-linked-email-subject": "Uz tevis veidotu lapu vietnē {{SITENAME}} tika izveidota saite",
"notification-reverted-email-subject2": "Jūsu {{PLURAL:$3|atcelts|labojums tika {{GENDER:$1|atcelts}}|labojumi tika {{GENDER:$1|atcelti}}}} {{SITENAME}}",
"notification-mention-email-subject": "$1 {{GENDER:$1|pieminēja}} {{GENDER:$2|tevi}} vietnē {{SITENAME}}",
"notification-user-rights-email-subject": "Jūsu dalībnieka tiesības tika izmainītas {{SITENAME}}",
@@ -126,6 +151,7 @@
"echo-overlay-title-overflow": "<b>{{PLURAL:$1|Paziņojumi|Paziņojums|Paziņojumi}}</b> (rāda $1 no $2 nelasītiem)",
"echo-mark-all-as-read": "Atzīmēt visus kā izlasītus",
"echo-mark-all-as-read-confirmation": "$1 {{PLURAL:$1|paziņojumi|paziņojums|paziņojumi}} atzīmēti kā izlasīti",
+ "echo-mark-wiki-as-read": "Atzīmēt visus kā izlasītus izvēlētajā vikivietnē: $1",
"echo-date-today": "Šodien",
"echo-date-yesterday": "Vakar",
"echo-load-more-error": "Ielasot vairāk rezultātus, notika kļūda.",
@@ -133,5 +159,8 @@
"echo-email-batch-subject-weekly": "Jums šonedēļ ir {{PLURAL:$2|jauni paziņojumi|jauns paziņojums|jauni paziņojumi}} par {{SITENAME}}",
"echo-email-batch-body-intro-daily": "Sveiks $1,\nŠis ir šīsdienas {{SITENAME}} aktivitāšu saraksts.",
"echo-email-batch-body-intro-weekly": "Sveiks $1,\nŠis ir šīs nedēļas {{SITENAME}} aktivitāšu saraksts.",
- "echo-email-batch-link-text-view-all-notifications": "Apskatīt visus paziņojumus"
+ "echo-email-batch-link-text-view-all-notifications": "Apskatīt visus paziņojumus",
+ "notification-header-foreign-alert": "Brīdinājumi no {{PLURAL:$5|$5 citām vikivietnēm|$5 citas vikivietnes|$5 citām vikivietnēm}}",
+ "notification-header-foreign-notice": "Informācija no {{PLURAL:$5|$5 citām vikivietnēm|$5 citas vikivietnes|$5 citām vikivietnēm}}",
+ "notification-header-foreign-all": "Paziņojumi no {{PLURAL:$5|$5 citām vikivietnēm|$5 citas vikivietnes|$5 citām vikivietnēm}}"
}
diff --git a/Echo/i18n/lzh.json b/Echo/i18n/lzh.json
index c762faeb..99995844 100644
--- a/Echo/i18n/lzh.json
+++ b/Echo/i18n/lzh.json
@@ -5,7 +5,8 @@
"Jason924tw",
"SolidBlock",
"Davidzdh",
- "LNDDYL"
+ "LNDDYL",
+ "Itsmine"
]
},
"prefs-echo": "告示",
@@ -14,5 +15,6 @@
"echo-new-messages": "音書新來",
"notifications": "訊",
"tooltip-pt-notifications-alert": "{{GENDER:|君}}鳴",
+ "notification-header-thank-you-1-edit": "{{GENDER:$2|千里之行}},始於{{GENDER:$2|足下}},{{GENDER:$2|再接再厲}}!",
"echo-notification-alert": "{{PLURAL:$1|訊 ($1)|訊 ($1)|100=訊 (九九+)}}"
}
diff --git a/Echo/i18n/mai.json b/Echo/i18n/mai.json
index 83f9464a..769e9681 100644
--- a/Echo/i18n/mai.json
+++ b/Echo/i18n/mai.json
@@ -10,7 +10,6 @@
"prefs-displaynotifications": "प्रदर्शन विकल्पसभ",
"prefs-echosubscriptions": "हमरा ई घटनासभक बारेमे सूचित करी",
"prefs-echocrosswiki": "क्रस-विकी सूचना",
- "prefs-newmessageindicator": "नव सन्देशक सङ्केतक",
"echo-pref-send-me": "हमरा भेजी:",
"echo-pref-send-to": "यतयँ भेजी:",
"echo-pref-email-format": "इमेल प्रारूप:",
@@ -18,7 +17,6 @@
"echo-pref-email": "इमेल",
"echo-pref-email-format-plain-text": "सादा पाठ",
"echo-pref-cross-wiki-notifications": "दोसर विकिसभक सूचना देखाबी",
- "echo-pref-new-message-indicator": "वार्ता पृष्ठ सन्देश सङ्केत हमर उपकरण पट्टीमे देखाबी",
"echo-learn-more": "अधिक जानी",
"echo-log": "सार्वजनिक लग",
"echo-new-messages": "अहाँक लेल नव सन्देश अछि",
diff --git a/Echo/i18n/mg.json b/Echo/i18n/mg.json
index 77348dbf..8b447ae4 100644
--- a/Echo/i18n/mg.json
+++ b/Echo/i18n/mg.json
@@ -10,7 +10,6 @@
"prefs-emailsettings": "Safidin'ny mailaka",
"prefs-displaynotifications": "Safidin-tseho",
"prefs-echosubscriptions": "Ampandreneso momba ireo zava-mitranga ireo aho",
- "prefs-newmessageindicator": "Tondron-kafatra vaovao",
"echo-pref-send-me": "Andefaso ahy:",
"echo-pref-send-to": "Alefaso any amy:",
"echo-pref-web": "Tranonkala",
@@ -21,7 +20,6 @@
"echo-pref-email-frequency-weekly": "Famintinana isan-kerinandron'ny fampilazana",
"echo-pref-email-format-html": "HTML",
"echo-pref-email-format-plain-text": "Soratra tsotra",
- "echo-pref-new-message-indicator": "Haneho ny mpanondro hafatra ao amin'ny pejin-dresaka ao amin'ny toolbar-ko",
"echo-learn-more": "Fampahalalana fanampiny",
"echo-new-messages": "Misy hafatra vaovao",
"echo-category-title-edit-user-talk": "Hafatry ny {{PLURAL:$1|pejin-dresaka}}",
diff --git a/Echo/i18n/mk.json b/Echo/i18n/mk.json
index 2794da90..3636d38a 100644
--- a/Echo/i18n/mk.json
+++ b/Echo/i18n/mk.json
@@ -11,8 +11,7 @@
"prefs-displaynotifications": "Нагодувања на приказот",
"prefs-echosubscriptions": "Известувај ме за следниве настани",
"prefs-echocrosswiki": "Известувања од други викија",
- "prefs-newmessageindicator": "Показател за нови пораки",
- "prefs-blocknotificationslist": "Список на блокови",
+ "prefs-blocknotificationslist": "Занемени корисници",
"echo-pref-send-me": "Испрати ми:",
"echo-pref-send-to": "Испрати на:",
"echo-pref-email-format": "Формат на е-поштата:",
@@ -25,8 +24,7 @@
"echo-pref-email-format-html": "HTML",
"echo-pref-email-format-plain-text": "Прост текст",
"echo-pref-cross-wiki-notifications": "Прикажувај известувања од други викија",
- "echo-pref-notifications-blacklist": "Список на кориснички имиња на црниот список, што значи дека за нив нема да се известува во Ехо (уредувањата на вашата корисничка разговорна страница сепак ќе се известуваат)",
- "echo-pref-new-message-indicator": "Прикажувај показател за нови пораки (на стр. за разговор) во алатникот",
+ "echo-pref-notifications-blacklist": "Не прикажувај известувања од овие корисници. ([[mw:Special:MyLanguage/Help:Notifications#mute|дознајте повеќе]])",
"echo-pref-beta-feature-cross-wiki-message": "Подобрени известувања",
"echo-pref-beta-feature-cross-wiki-description": "Полесно прегледување и организирање на известувањата. Вклучува известувања низ сите викија, што значи дека ќе можете да ја видите пораката од други викија, покрај вашето. (За да добивате известувања низ сите викија на дадено вики, ќе мора да ја вклучите бета-можноста на тоа вики.)",
"echo-learn-more": "Дознајте повеќе",
@@ -43,7 +41,7 @@
"echo-category-title-user-rights": "{{PLURAL:$1|Промена во корисничките права|Промени во корисничките права}}",
"echo-category-title-emailuser": "{{PLURAL:$1|Е-пошта од друг корисник|Е-пошта од други корисници}}",
"echo-category-title-article-reminder": "{{PLURAL:$1|Потсетник за страница|Потсетници за страниците}}",
- "echo-pref-tooltip-edit-user-talk": "Извести ме кога некој ќе остави порака или ќе одговори на мојата страница за разговор.",
+ "echo-pref-tooltip-edit-user-talk": "Извести ме кога некој ќе остави порака или ќе одговори на мојата разговорна страница.",
"echo-pref-tooltip-article-linked": "Извести ме кога некој ќе се повика на страница што ја имам создадено од друга страница.",
"echo-pref-tooltip-reverted": "Извести ме кога некој ќе откаже уредување што го имам направено користејќи ја алатката за отповикување или враќање.",
"echo-pref-tooltip-mention": "Извести ме кога некој ќе се повика на мојата корисничка страница.",
@@ -82,8 +80,6 @@
"echo-none": "Немате известувања.",
"echo-more-info": "Повеќе информации",
"echo-feedback": "Мислења",
- "echo-popup-footer-special-page-invitation": "<strong>Пробајте ја новопреуредената страница за Известувања.</strong> [$2 $1]",
- "echo-popup-footer-special-page-invitation-link": "Нов изглед и нови можности.",
"echo-quotation-marks": "„$1“",
"echo-api-failure": "Не успеав да ги добијам известувањата.",
"echo-api-failure-cross-wiki": "Пристапот до далечински домен е одбиен.",
@@ -111,8 +107,10 @@
"notification-link-text-view-mention-failure": "Погл. {{PLURAL:$1|споменување|споменувања}}",
"notification-link-text-view-changes": "{{GENDER:$1|Погл.}} промени",
"notification-link-text-view-page": "Погл. страница",
- "notification-header-edit-user-talk": "$1 {{GENDER:$2|остави}} порака на <strong>{{GENDER:$3|вашата}} страница за разговор.</strong>.",
- "notification-header-edit-user-talk-with-section": "$1 {{GENDER:$2|остави}} порака на <strong>{{GENDER:$3|вашата}} страница за разговор</strong> на <strong>„$4“.</strong>",
+ "notification-header-edit-user-talk": "$1 {{GENDER:$2|остави}} порака на <strong>{{GENDER:$3|вашата}} разговорна страница.</strong>.",
+ "notification-header-edit-user-talk-with-section": "$1 {{GENDER:$2|остави}} порака на <strong>{{GENDER:$3|вашата}} разговорна страница</strong> на <strong>„$4“.</strong>",
+ "notification-compact-header-edit-user-talk": "$1 {{GENDER:$3|ви}} {{GENDER:$2|остави}} порака.",
+ "notification-compact-header-edit-user-talk-with-section": "$1 {{GENDER:$3|ви}} {{GENDER:$2|остави}} порака во „<strong>$4</strong>“.",
"notification-body-edit-user-talk-with-section": "$1",
"notification-header-page-linked": "Направена е врска од <strong>$4</strong> до <strong>$3</strong>.",
"notification-compact-header-page-linked": "Поврзано од <strong>$1</strong>.",
@@ -121,27 +119,28 @@
"notification-link-text-what-links-here": "Сите врски до страницава",
"notification-header-mention-other": "$1 {{GENDER:$3|ве}} {{GENDER:$2|спомна}} на <strong>$4</strong> во „<strong>$5</strong>“.",
"notification-header-mention-other-nosection": "$1 {{GENDER:$3|ве}} {{GENDER:$2|спомна}} на <strong>$4</strong>.",
- "notification-header-mention-user-talkpage-v2": "$1 {{GENDER:$3|ве}} {{GENDER:$2|спомна}} на <strong>страницата за разговор {{GENDER:$5|на}} $4</strong> во „<strong>$6</strong>“.",
- "notification-header-mention-user-talkpage-nosection": "$1 {{GENDER:$3|ве}} {{GENDER:$2|спомна}} на <strong>страницата за разговор {{GENDER:$5|на}} $4</strong>.",
- "notification-header-mention-agent-talkpage": "$1 {{GENDER:$3|ве}} {{GENDER:$2|спомна}} на <strong>{{GENDER:$2|неговата|нејзината|својата}} страница</strong> за разговор во „<strong>$4</strong>“.",
+ "notification-header-mention-user-talkpage-v2": "$1 {{GENDER:$3|ве}} {{GENDER:$2|спомна}} на <strong>разговорната страница {{GENDER:$5|на}} $4</strong> во „<strong>$6</strong>“.",
+ "notification-header-mention-user-talkpage-nosection": "$1 {{GENDER:$3|ве}} {{GENDER:$2|спомна}} на <strong>разговорната страница {{GENDER:$5|на}} $4</strong>.",
+ "notification-header-mention-agent-talkpage": "$1 {{GENDER:$3|ве}} {{GENDER:$2|спомна}} на <strong>{{GENDER:$2|неговата|нејзината|својата}} разговорна страница</strong> во „<strong>$4</strong>“.",
"notification-header-mention-agent-talkpage-nosection": "$1 {{GENDER:$3|ве}} {{GENDER:$2|спомна}} на <strong>{{GENDER:$2|неговата|нејзината|својата}} странца за разговор.</strong>.",
"notification-header-mention-article-talkpage": "$1 {{GENDER:$3|ве}} {{GENDER:$2|спомна}} во разговорот за <strong>$4</strong> во „<strong>$5</strong>“.",
"notification-header-mention-article-talkpage-nosection": "$1 {{GENDER:$3|ве}} {{GENDER:$2|спомна}} во разговорот за <strong>$4</strong>.",
"notification-header-mention-failure-user-unknown": "{{GENDER:$2|Вашето}} споменување на <strong>$3</strong> не е испратено бидејќи не можев да го најдам корисникот.",
"notification-header-mention-failure-user-anonymous": "{{GENDER:$2|Вашето}} споменување на <strong>$3</strong> не е испратено бидејќи корисникот е анонимен.",
"notification-header-mention-failure-too-many": "{{GENDER:$2|Се обидовте}} да споменете повеќе од $3 {{PLURAL:$3|корисник|корисници}}. Сите споменувања што ја надминуваат оваа граница не беа испратени.",
- "notification-header-mention-failure-bundle": "Не {{PLURAL:$3|е испратено споменувањето|се испратени $3 споменувањата}} {{GENDER:$3|што го {{GENDER:$2|направивте}}|што ги направивте}} на страницата за разговор <strong>$4</strong>.",
+ "notification-header-mention-failure-bundle": "Не {{PLURAL:$3|е испратено споменувањето|се испратени $3 споменувањата}} {{GENDER:$3|што го {{GENDER:$2|направивте}}|што ги направивте}} на разговорната страница <strong>$4</strong>.",
"notification-compact-header-mention-failure-user-unknown": "<strong>Корисничкото име не постои:</strong> $1",
"notification-compact-header-mention-failure-user-anonymous": "<strong>Не можат да се споменуваат IP-адреси:</strong> $1",
"notification-header-mention-success": "{{GENDER:$2|Вашето}} споменување на <strong>$3</strong> е испратено.",
- "notification-header-mention-success-bundle": "{{PLURAL:$3|Испратено е|Испратени се}} {{PLURAL:$3|споменување што го {{GENDER:$2|направивте}}|$3 споменувања што ги направивте}} на страницата за разговор <strong>$4</strong>.",
+ "notification-header-mention-success-bundle": "{{PLURAL:$3|Испратено е|Испратени се}} {{PLURAL:$3|споменување што го {{GENDER:$2|направивте}}|$3 споменувања што ги направивте}} на разговорната страница <strong>$4</strong>.",
"notification-compact-header-mention-success": "<strong>{{GENDER:$2|Го споменавте|Ја споменавте}}:</strong> $3",
- "notification-header-mention-status-bundle": "{{PLURAL:$3|Известување|$3 известувања}} за споменувања {{GENDER:$2|што ги направивте}} на страницата за разговор <strong>$4</strong>: {{PLURAL:$5|$5 неисправена|$5 неиспратени}}, {{PLURAL:$6|$6 испратена|$6 испратени}}.",
+ "notification-header-mention-status-bundle": "{{PLURAL:$3|Известување|$3 известувања}} за споменувања {{GENDER:$2|што ги направивте}} на разговорната страница <strong>$4</strong>: {{PLURAL:$5|$5 неисправена|$5 неиспратени}}, {{PLURAL:$6|$6 испратена|$6 испратени}}.",
"notification-header-user-rights-add-only": "{{GENDER:$4|Вашите}} кориснички права се {{GENDER:$1|изменети}}. Додадени сте во: $2.",
"notification-header-user-rights-remove-only": "{{GENDER:$4|Вашите}} кориснички права се {{GENDER:$1|изменети}}. Повеќе не членувате во $2.",
"notification-header-user-rights-add-and-remove": "{{GENDER:$6|Вашите}} кориснички права се {{GENDER:$1|изменети}}. Додадени сте во: $2. Повеќе не членувате во: $4.",
"notification-header-user-rights-expiry-change": "{{GENDER:$1|Изменет}} е истекот на {{GENDER:$4|вашето}} членство во {{PLURAL:$3|следнава група|следниве групи}}: $2.",
"notification-header-welcome": "{{GENDER:$2|Добре дојдовте}} на {{SITENAME}}, $1! Драго ни е {{GENDER:$2|што сте}} тука.",
+ "notification-header-mention-summary": "$1 {{GENDER:$3|ве}} {{GENDER:$2|спомна}} во опис на уредувањето на <strong>$4</strong>.",
"notification-welcome-linktext": "Добре дојдовте",
"notification-header-thank-you-1-edit": "Штотуку го {{GENDER:$2|направивте}} {{GENDER:$2|вашето}} прво уредување. {{GENDER:$2|Ви}} благодариме, и добре дојдовте!",
"notification-header-thank-you-10-edit": "Штотуку го {{GENDER:$2|направивте}} {{GENDER:$2|вашето}} десетто уредување. {{GENDER:$2|Ви}} благодариме, и продолжете така!",
@@ -156,7 +155,7 @@
"notification-header-reverted": "{{PLURAL:$4|Вашето уредување на <strong>$3</strong> е {{GENDER:$2|отповикано}}|Вашите уредувања на <strong>$3</strong> се {{GENDER:$2|отповикани}}}}",
"notification-header-emailuser": "$1 {{GENDER:$2|ви испрати}} е-пошта.",
"notification-edit-talk-page-email-subject2": "$1 {{GENDER:$1|ви остави}} порака на {{SITENAME}}",
- "notification-edit-talk-page-email-batch-body-with-section": "$1 {{GENDER:$1|остави}} порака на вашата страница за разговор на „$2“.",
+ "notification-edit-talk-page-email-batch-body-with-section": "$1 {{GENDER:$1|остави}} порака на вашата разговорна страница на „$2“.",
"notification-page-linked-email-subject": "Ваша страница беше наведена на {{SITENAME}}",
"notification-reverted-email-subject2": "{{GENDER:$1|На}} {{SITENAME}} {{PLURAL:$3|е вратено ваше уредување|се вратени ваши уредувања}}",
"notification-mention-email-subject": "$1 {{GENDER:$1|ве}} {{GENDER:$2|спомна}} на {{SITENAME}}",
@@ -191,7 +190,7 @@
"echo-date-today": "Денес",
"echo-date-yesterday": "Вчера",
"echo-load-more-error": "Се појави грешка при обидот да добијам повеќе ставки.",
- "notification-bundle-header-edit-user-talk-v2": "{{PLURAL:$1|Една нова порака|$1 нови пораки|100=преку 99 нови пораки}} на <strong>{{GENDER:$3|вашата}} страница за разговор</strong>.",
+ "notification-bundle-header-edit-user-talk-v2": "{{PLURAL:$1|Една нова порака|$1 нови пораки|100=преку 99 нови пораки}} на <strong>{{GENDER:$3|вашата}} разговорна страница</strong>.",
"echo-email-batch-subject-daily": "Имате {{PLURAL:$2|ново известување|нови известувања}} на {{SITENAME}}",
"echo-email-batch-subject-weekly": "Неделава имате {{PLURAL:$2|ново известување|нови известувања}} на {{SITENAME}}",
"echo-email-batch-body-intro-daily": "Здраво $1,\nВи даваме преглед на денешните збиднувања на {{SITENAME}}",
diff --git a/Echo/i18n/ml.json b/Echo/i18n/ml.json
index 6b810924..6d284124 100644
--- a/Echo/i18n/ml.json
+++ b/Echo/i18n/ml.json
@@ -9,72 +9,143 @@
]
},
"echo-desc": "സംഭവങ്ങളെക്കുറിച്ചും സന്ദേശങ്ങളെക്കുറിച്ചും ഉപയോക്താക്കളെ അറിയിക്കാനുള്ള സംവിധാനം",
- "prefs-echo": "അറിയിപ്പുകൾ",
+ "prefs-echo": "വിജ്ഞാപനങ്ങൾ",
"prefs-emailsettings": "ഇമെയിൽ ഐച്ഛികങ്ങൾ",
"prefs-displaynotifications": "പ്രദർശന ഐച്ഛികങ്ങൾ",
"prefs-echosubscriptions": "ഈ സംഭവങ്ങളെക്കുറിച്ച് എന്നെ അറിയിക്കുക",
- "prefs-newmessageindicator": "പുതിയ സന്ദേശത്തിന്റെ അടയാളം",
- "echo-pref-send-me": "എനിക്ക് അയയ്ക്കുക:",
+ "prefs-echocrosswiki": "അന്തർവിക്കി വിജ്ഞാപനങ്ങൾ",
+ "prefs-blocknotificationslist": "നിശ്ശബ്ദരാക്കിയ ഉപയോക്താക്കൾ",
+ "echo-pref-send-me": "എനിക്ക് അയയ്ക്കേണ്ട രീതി:",
"echo-pref-send-to": "അയക്കേണ്ട വിലാസം:",
"echo-pref-email-format": "ഇമെയിൽ എഴുത്തുരീതി:",
"echo-pref-web": "വെബ്",
"echo-pref-email": "ഇമെയിൽ",
- "echo-pref-email-frequency-never": "എനിക്ക് ഇമെയിൽ അറിയിപ്പുകൾ വേണ്ട",
- "echo-pref-email-frequency-immediately": "വരുന്ന മുറയ്ക്ക് വെവ്വേറെ അറിയിപ്പുകൾ",
- "echo-pref-email-frequency-daily": "ഒരു ദിവസത്തെ അറിയിപ്പുകളുടെ അവലോകനം",
- "echo-pref-email-frequency-weekly": "ഒരു ആഴ്ചയിലെ അറിയിപ്പുകളുടെ അവലോകനം",
+ "echo-pref-email-frequency-never": "എനിക്ക് ഇമെയിൽ വിജ്ഞാപനങ്ങൾ വേണ്ട",
+ "echo-pref-email-frequency-immediately": "വരുന്ന മുറയ്ക്ക് വെവ്വേറെ വിജ്ഞാപനങ്ങൾ",
+ "echo-pref-email-frequency-daily": "ഒരു ദിവസത്തെ വിജ്ഞാപനങ്ങളുടെ അവലോകനം",
+ "echo-pref-email-frequency-weekly": "ഒരു ആഴ്ചയിലെ വിജ്ഞാപനങ്ങളുടെ അവലോകനം",
"echo-pref-email-format-html": "എച്ച്.റ്റി.എം.എൽ.",
"echo-pref-email-format-plain-text": "വെറും എഴുത്ത്",
- "echo-pref-new-message-indicator": "എന്റെ സംവാദത്താളിലെ സന്ദേശങ്ങളുടെ സൂചന ടൂൾബാറിൽ പ്രദർശിപ്പിക്കുക",
- "echo-pref-beta-feature-cross-wiki-message": "മെച്ചപ്പെടുത്തിയ അറിയിപ്പുകൾ",
- "echo-pref-beta-feature-cross-wiki-description": "അറിയിപ്പുകൾ കൂടുതൽ എളുപ്പത്തിൽ കാണുകയും ക്രമപ്പെടുത്തുകയും ചെയ്യുക. മറ്റ് വിക്കികളിൽ നിന്നുള്ള സന്ദേശങ്ങൾ കാണാനനുവദിക്കുന്ന അന്തർവിക്കി അറിയിപ്പുകൾ ഉൾപ്പടെ.",
+ "echo-pref-cross-wiki-notifications": "മറ്റ് വിക്കികളിൽ നിന്നുള്ള വിജ്ഞാപനങ്ങൾ പ്രദർശിപ്പിക്കുക",
+ "echo-pref-notifications-blacklist": "ഈ ഉപയോക്താക്കളിൽ നിന്നുള്ള വിജ്ഞാപനങ്ങൾ പ്രദർശിപ്പിക്കേണ്ടതില്ല. ([[mw:Special:MyLanguage/Help:Notifications#mute|കൂടുതൽ അറിയുക]])",
+ "echo-pref-beta-feature-cross-wiki-message": "മെച്ചപ്പെടുത്തിയ വിജ്ഞാപനങ്ങൾ",
+ "echo-pref-beta-feature-cross-wiki-description": "വിജ്ഞാപനങ്ങൾ കൂടുതൽ എളുപ്പത്തിൽ കാണുകയും ക്രമപ്പെടുത്തുകയും ചെയ്യുക. മറ്റ് വിക്കികളിൽ നിന്നുള്ള സന്ദേശങ്ങൾ, അന്തർവിക്കി വിജ്ഞാപനങ്ങൾ ഉൾപ്പടെ കാണാനനുവദിക്കുന്നു. (ഒരു വിക്കിയിൽ അന്തർ-വിക്കി വിജ്ഞാപനങ്ങൾ ലഭിക്കാൻ ആ വിക്കിയിൽ ബീറ്റ സൗകര്യങ്ങൾ സജ്ജമാക്കിയിരിക്കണം.)",
"echo-learn-more": "കൂടുതൽ അറിയുക",
+ "echo-log": "പൊതു രേഖ",
"echo-new-messages": "താങ്കൾക്ക് പുതിയ സന്ദേശങ്ങൾ ഉണ്ട്",
"echo-category-title-edit-user-talk": "സംവാദത്താളിലെ {{PLURAL:$1|സന്ദേശം|സന്ദേശങ്ങൾ}}",
"echo-category-title-article-linked": "താളിലേയ്ക്കുള്ള {{PLURAL:$1|കണ്ണി|കണ്ണികൾ}}",
"echo-category-title-reverted": "തിരുത്തൽ {{PLURAL:$1|മുൻപ്രാപനം|മുൻപ്രാപനങ്ങൾ}}",
"echo-category-title-mention": "{{PLURAL:$1|പരാമർശം|പരാമർശങ്ങൾ}}",
+ "echo-category-title-mention-failure": "പരാജയപ്പെട്ട {{PLURAL:$1|പരാമർശം|പരാമർശങ്ങൾ}}",
+ "echo-category-title-mention-success": "വിജയകരമായ {{PLURAL:$1|പരാമർശം|പരാമർശങ്ങൾ}}",
"echo-category-title-other": "{{PLURAL:$1|മറ്റുള്ളവ}}",
"echo-category-title-system": "{{PLURAL:$1|വ്യവസ്ഥ}}",
"echo-category-title-user-rights": "ഉപയോക്തൃ അവകാശ {{PLURAL:$1|മാറ്റം|മാറ്റങ്ങൾ}}",
"echo-category-title-emailuser": "{{PLURAL:$1|മറ്റൊരു ഉപയോക്താവ് അയച്ച ഇമെയിൽ|മറ്റ് ഉപയോക്താക്കൾ അയച്ച ഇമെയിലുകൾ}}",
+ "echo-category-title-article-reminder": "താളിലെ {{PLURAL:$1|ഓർമ്മപ്പെടുത്തൽ|ഓർമ്മപ്പെടുത്തലുകൾ}}",
"echo-pref-tooltip-edit-user-talk": "ആരെങ്കിലും എന്റെ സംവാദത്താളിൽ ഒരു സന്ദേശമോ മറുപടിയോ ഇട്ടാൽ എന്നെ അറിയിക്കുക.",
- "echo-pref-tooltip-article-linked": "ഞാൻ സൃഷ്ടിച്ച ഒരു ലേഖനതാളിൽ ആരെങ്കിലും കണ്ണി ചേർത്താൽ എന്നെ അറിയിക്കുക.",
- "echo-pref-tooltip-reverted": "തിരസ്കരണ അല്ലെങ്കിൽ മുൻപ്രാപന ഉപകരണമുപയോഗിച്ച് ആരെങ്കിലും ഞാൻ വരുത്തിയ തിരുത്തൽ ഒഴിവാക്കിയാൽ എന്നെ അറിയിക്കുക.",
+ "echo-pref-tooltip-article-linked": "ഞാൻ സൃഷ്ടിച്ച ഒരു താളിൽ ആരെങ്കിലും കണ്ണി ചേർത്താൽ എന്നെ അറിയിക്കുക.",
+ "echo-pref-tooltip-reverted": "തിരസ്കരണ അല്ലെങ്കിൽ തിരിച്ചാക്കൽ ഉപകരണമുപയോഗിച്ച് ആരെങ്കിലും ഞാൻ വരുത്തിയ തിരുത്ത് ഒഴിവാക്കിയാൽ എന്നെ അറിയിക്കുക.",
"echo-pref-tooltip-mention": "ആരെങ്കിലും എന്റെ ഉപയോക്തൃതാളിലേക്ക് കണ്ണി ചേർത്താൽ എന്നെ അറിയിക്കുക.",
+ "echo-pref-tooltip-mention-failure": "മറ്റൊരാളെപറ്റിയുള്ള പരാമർശം എനിക്ക് അയയ്ക്കാൻ കഴിഞ്ഞില്ലെങ്കിൽ എന്നെ അറിയിക്കുക.",
+ "echo-pref-tooltip-mention-success": "മറ്റൊരാളെപ്പറ്റിയുള്ള പരാമർശം ഞാൻ അയച്ചെങ്കിൽ എന്നെ അറിയിക്കുക.",
"echo-pref-tooltip-user-rights": "എന്റെ ഉപയോക്തൃ അവകാശങ്ങളിൽ ആരെങ്കിലും മാറ്റം വരുത്തിയാൽ എന്നെ അറിയിക്കുക.",
"echo-pref-tooltip-emailuser": "ആരെങ്കിലും എനിക്ക് ഇമെയിൽ അയച്ചാൽ എന്നെ അറിയിക്കുക.",
- "echo-error-no-formatter": "അറിയിപ്പിനായി യാതൊരു രൂപവും നിർവ്വചിച്ചിട്ടില്ല",
- "notifications": "അറിയിപ്പുകൾ",
- "tooltip-pt-notifications-alert": "{{GENDER:|താങ്കൾക്കുള്ള}} അറിയിപ്പുകൾ",
- "echo-specialpage": "അറിയിപ്പുകൾ",
- "echo-anon": "അറിയിപ്പുകൾ ലഭിക്കാനായി, [$1 അംഗത്വമെടുക്കയോ] [$2 പ്രവേശിക്കുകയോ] ചെയ്യേണ്ടതാണ്.",
- "echo-none": "താങ്കൾക്ക് അറിയിപ്പുകളൊന്നുമില്ല.",
+ "echo-pref-tooltip-article-reminder": "ഞാനാവശ്യപ്പെടുമ്പോൾ ഈ താളിനെക്കുറിച്ച് അറിയിക്കുക.",
+ "echo-error-no-formatter": "വിജ്ഞാപനത്തിനായി യാതൊരു രൂപവും നിർവ്വചിച്ചിട്ടില്ല",
+ "notifications": "വിജ്ഞാപനങ്ങൾ",
+ "tooltip-pt-notifications-alert": "{{GENDER:|താങ്കൾ}} ശ്രദ്ധിക്കേണ്ടവ",
+ "tooltip-pt-notifications-notice": "{{GENDER:|താങ്കൾക്കുള്ള}} അറിയിപ്പുകൾ",
+ "echo-displaynotificationsconfiguration": "വിജ്ഞാപനങ്ങൾ പ്രദർശിപ്പിക്കൽ ക്രമീകരണങ്ങൾ",
+ "echo-displaynotificationsconfiguration-summary": "ഈ വിക്കിയിൽ എപ്രകാരമാണ് വിജ്ഞാപനങ്ങൾ ക്രമീകരിച്ചിട്ടുള്ളതെന്നതിന്റെ അവലോകനമാണിത്.",
+ "echo-displaynotificationsconfiguration-notifications-by-category-header": "വിജ്ഞാപനങ്ങൾ വർഗ്ഗങ്ങൾക്കനുസരിച്ച്",
+ "echo-displaynotificationsconfiguration-sorting-by-section-header": "വിവിധ തരങ്ങളുടെ ക്രമപ്പെടുത്തൽ",
+ "echo-displaynotificationsconfiguration-available-notification-methods-header": "അനുവദിച്ചിട്ടുള്ള വിജ്ഞാപന മാർഗ്ഗങ്ങൾ",
+ "echo-displaynotificationsconfiguration-enabled-default-header": "സ്വതേ സജ്ജം",
+ "echo-displaynotificationsconfiguration-enabled-default-existing-users-legend": "നിലവിലുള്ള ഉപയോക്താക്കൾ",
+ "echo-displaynotificationsconfiguration-enabled-default-new-users-legend": "പുതിയ ഉപയോക്താക്കൾ",
+ "echo-specialpage": "വിജ്ഞാപനങ്ങൾ",
+ "echo-specialpage-section-markread": "ഗണം വായിച്ചതായി അടയാളപ്പെടുത്തുക",
+ "echo-specialpage-markasread": "വിജ്ഞാപനം: വായിച്ചതായി അടയാളപ്പെടുത്തുക",
+ "echo-specialpage-pagination-numnotifications": "{{PLURAL:$1|ഒരു വിജ്ഞാപനം|$1 വിജ്ഞാപനങ്ങൾ}}",
+ "echo-specialpage-pagefilters-title": "സമീപകാല പ്രവർത്തനങ്ങൾ",
+ "echo-specialpage-pagefilters-subtitle": "വായിക്കാത്ത വിജ്ഞാപനങ്ങൾ ഉള്ള താളുകൾ",
+ "notificationsmarkread-legend": "വിജ്ഞാപനം വായിച്ചതായി അടയാളപ്പെടുത്തുക",
+ "echo-anon": "വിജ്ഞാപനങ്ങൾ ലഭിക്കാനായി, [$1 അംഗത്വമെടുക്കയോ] [$2 പ്രവേശിക്കുകയോ] ചെയ്യേണ്ടതാണ്.",
+ "echo-none": "താങ്കൾക്ക് വിജ്ഞാപനങ്ങളൊന്നുമില്ല.",
"echo-more-info": "കൂടുതൽ വിവരങ്ങൾ",
"echo-feedback": "പ്രതികരണം",
- "echo-api-failure": "അറിയിപ്പുകൾ എടുക്കാൻ കഴിഞ്ഞില്ല. ദയവായി വീണ്ടും ശ്രമിക്കുക. (പിഴവ് $1)",
+ "echo-api-failure": "വിജ്ഞാപനങ്ങൾ എടുക്കാൻ കഴിഞ്ഞില്ല.",
"echo-api-failure-cross-wiki": "വിദൂര ഡൊമൈന്റെ ലഭ്യത നിരാകരിച്ചിരിക്കുന്നു.",
- "echo-notification-placeholder": "അറിയിപ്പുകൾ ഒന്നുമില്ല.",
- "echo-notification-loginrequired": "താങ്കൾക്കുള്ള അറിയിപ്പുകൾ കാണാൻ പ്രവേശിച്ചിരിക്കണം.",
- "echo-notification-popup-loginrequired": "താങ്കൾക്കുള്ള അറിയിപ്പുകൾ കാണാൻ പ്രവേശിക്കുക.",
- "notification-link-text-expand-all": "എല്ലാം വികസിപ്പിക്കുക",
+ "echo-notification-placeholder": "വിജ്ഞാപനങ്ങൾ ഒന്നുമില്ല.",
+ "echo-notification-placeholder-filters": "ഈ മാനദണ്ഡങ്ങൾ പാലിക്കുന്ന അറിയിപ്പുകൾ ഇല്ല.",
+ "echo-notification-loginrequired": "താങ്കൾക്കുള്ള വിജ്ഞാപനങ്ങൾ കാണാൻ പ്രവേശിച്ചിരിക്കണം.",
+ "echo-notification-popup-loginrequired": "താങ്കൾക്കുള്ള വിജ്ഞാപനങ്ങൾ കാണാൻ പ്രവേശിക്കുക.",
+ "echo-notification-markasread": "വായിച്ചതായി അടയാളപ്പെടുത്തുക",
+ "echo-notification-markasunread": "വായിക്കാത്തതായി അടയാളപ്പെടുത്തുക",
+ "echo-notification-markasread-tooltip": "വായിച്ചതായി അടയാളപ്പെടുത്തുക",
+ "echo-notification-more-options-tooltip": "കൂടുതൽ ഐച്ഛികങ്ങൾ",
+ "notification-dynamic-actions-unwatch": "\"$1\" താളിലെ പുതിയ പ്രവൃത്തികൾ ശ്രദ്ധിക്കുന്നത് {{GENDER:$3|നിർത്തുക}}",
+ "notification-dynamic-actions-unwatch-confirmation": "{{GENDER:$3|താങ്കൾ}} \"$1\" താൾ ശ്രദ്ധിക്കുന്നില്ല",
+ "notification-dynamic-actions-unwatch-confirmation-description": "{{GENDER:$3|താങ്കൾക്ക്}} [$2 ഈ താൾ] എപ്പോൾ വേണമെങ്കിലും ശ്രദ്ധിക്കുന്നവയിലേക്ക് ചേർക്കാവുന്നതാണ്.",
+ "notification-dynamic-actions-watch": "\"$1\" താളിലെ പുതിയ പ്രവൃത്തികൾ {{GENDER:$3|പിന്തുടരുക}}",
+ "notification-dynamic-actions-watch-confirmation": "{{GENDER:$3|താങ്കൾ}} ഇപ്പോൾ \"$1\" താൾ ശ്രദ്ധിക്കുന്നുണ്ട്",
+ "notification-dynamic-actions-watch-confirmation-description": "{{GENDER:$3|താങ്കൾക്ക്}} [$2 ഈ താൾ] എപ്പോൾ വേണമെങ്കിലും ശ്രദ്ധിക്കുന്നവയിൽ നിന്ന് ഒഴിവാക്കാവുന്നതാണ്.",
+ "notification-link-text-expand-all": "വികസിപ്പിക്കുക",
"notification-link-text-expand-alert-count": "{{PLURAL:$1|ഒരു ജാഗ്രതാ അറിയിപ്പ്|$1 ജാഗ്രതാ അറിയിപ്പുകൾ}} വികസിപ്പിക്കുക",
- "notification-link-text-expand-all-count": "{{PLURAL:$1|ഒരു അറിയിപ്പ്|$1 അറിയിപ്പുകൾ}} വികസിപ്പിക്കുക",
- "notification-link-text-collapse-all": "എല്ലാം ചുരുക്കുക",
+ "notification-link-text-expand-notice-count": "{{PLURAL:$1|ഒരു അറിയിപ്പ്|$1 അറിയിപ്പുകൾ}} കാണുക",
+ "notification-link-text-expand-all-count": "{{PLURAL:$1|ഒരു വിജ്ഞാപനം|$1 വിജ്ഞാപനങ്ങൾ}} കാണുക",
+ "notification-link-text-collapse-all": "ചുരുക്കുക",
"notification-link-text-view-message": "സന്ദേശം കാണുക",
"notification-link-text-view-mention": "പരാമർശിച്ചിരിക്കുന്നത് കാണുക",
- "notification-link-text-view-changes": "മാറ്റങ്ങൾ കാണുക",
+ "notification-link-text-view-mention-failure": "{{PLURAL:$1|പരാമർശം|പരാമർശങ്ങൾ}} കാണുക",
+ "notification-link-text-view-changes": "മാറ്റങ്ങൾ {{GENDER:$1|കാണുക}}",
"notification-link-text-view-page": "താൾ കാണുക",
- "notification-header-edit-user-talk": "{{GENDER:$3|താങ്കളുടെ}} സംവാദത്താളിൽ, $1 ഒരു സന്ദേശം {{GENDER:$2|ചേർത്തിട്ടുണ്ട്}}.",
- "notification-header-edit-user-talk-with-section": "{{GENDER:$3|താങ്കളുടെ}} സംവാദത്താളിലെ \"$4\" ഭാഗത്ത്, $1 ഒരു സന്ദേശം {{GENDER:$2|ചേർത്തിട്ടുണ്ട്}}.",
+ "notification-header-edit-user-talk": "<strong>{{GENDER:$3|താങ്കളുടെ}} സംവാദത്താളിൽ</strong>, $1 ഒരു സന്ദേശം {{GENDER:$2|ചേർത്തിട്ടുണ്ട്}}.",
+ "notification-header-edit-user-talk-with-section": "<strong>{{GENDER:$3|താങ്കളുടെ}} സംവാദത്താളിലെ \"$4\" ഭാഗത്ത്</strong> , $1 ഒരു സന്ദേശം {{GENDER:$2|ചേർത്തിട്ടുണ്ട്}}.",
+ "notification-compact-header-edit-user-talk": "$1 {{GENDER:$3|താങ്കൾക്ക്}} ഒരു സന്ദേശം {{GENDER:$2|ഇട്ടിട്ടുണ്ട്}}.",
+ "notification-compact-header-edit-user-talk-with-section": "$1 \"<strong>$4</strong>\" എന്ന ഭാഗത്ത് {{GENDER:$3|താങ്കൾക്ക്}} ഒരു സന്ദേശം {{GENDER:$2|ഇട്ടു}}.",
"notification-body-edit-user-talk-with-section": "$1",
"notification-header-page-linked": "<strong>$4</strong> എന്ന താളിൽ നിന്ന് <strong>$3</strong> എന്ന താളിലേക്ക് ഒരു കണ്ണി സൃഷ്ടിക്കപ്പെട്ടിരിക്കുന്നു.",
- "notification-bundle-header-page-linked": "$4 എന്ന താളിൽ നിന്നും $5 മറ്റ് {{PLURAL:$6|താളിൽ|താളുകളിൽ}} നിന്നും $3 എന്ന താളിലേക്ക് കണ്ണി ചേർക്കപ്പെട്ടു.",
+ "notification-compact-header-page-linked": "<strong>$1</strong> താളിൽ നിന്നും കണ്ണി ചേർത്തു.",
+ "notification-bundle-header-page-linked": "{{PLURAL:$5|$5 താളുകളിൽ|99+ താളുകളിൽ}} നിന്നും <strong>$3</strong> എന്ന താളിലേക്ക് കണ്ണി ചേർക്കപ്പെട്ടു.",
"notification-link-text-what-links-here": "ഈ താളിലേക്കുള്ള കണ്ണികൾ",
+ "notification-header-mention-other": "<strong>$4</strong> താളിലെ \"<strong>$5</strong>\" ഭാഗത്ത് {{GENDER:$3|താങ്കളെ}}, $1 {{GENDER:$2|പരാമർശിച്ചു}}.",
+ "notification-header-mention-other-nosection": "<strong>$4</strong> താളിൽ {{GENDER:$3|താങ്കളെ}}, $1 {{GENDER:$2|പരാമർശിച്ചു}}.",
+ "notification-header-mention-user-talkpage-v2": "\"<strong>$4 എന്ന {{GENDER:$5|ഉപയോക്താവിന്റെ}} സംവാദത്താളിലെ $6</strong>\" എന്ന ഭാഗത്ത് {{GENDER:$3|താങ്കളെ}}, $1 {{GENDER:$2|പരാമർശിച്ചു}}.",
+ "notification-header-mention-user-talkpage-nosection": "<strong>$4 എന്ന {{GENDER:$5|ഉപയോക്താവിന്റെ}} സംവാദത്താളിൽ {{GENDER:$3|താങ്കളെ}}, $1 {{GENDER:$2|പരാമർശിച്ചു}}.",
+ "notification-header-mention-agent-talkpage": "$1 <strong>{{GENDER:$2|അദ്ദേഹത്തിന്റെ|അവരുടെ|അവരുടെ}} സംവാദത്താളിൽ \"<strong>$4</strong> ഭാഗത്ത്\"</strong> {{GENDER:$3|താങ്കളെ}} {{GENDER:$2|പരാമർശിച്ചിട്ടുണ്ട്}}.",
+ "notification-header-mention-agent-talkpage-nosection": "$1 {{GENDER:$3|താങ്കളെ}} <strong>{{GENDER:$2|അദ്ദേഹത്തിന്റെ|അവരുടെ|അവരുടെ}} സംവാദത്താളിൽ </strong>{{GENDER:$2|പരാമർശിച്ചിട്ടുണ്ട്}}.",
+ "notification-header-mention-article-talkpage": "$1 {{GENDER:$3|താങ്കളെ}} <strong>$4</strong> സംവാദത്താളിലെ \"<strong>$5</strong>\" ഭാഗത്ത് {{GENDER:$2|പരാമർശിച്ചിട്ടുണ്ട്}}.",
+ "notification-header-mention-article-talkpage-nosection": "$1 {{GENDER:$3|താങ്കളെ}} <strong>$4</strong> സംവാദത്താളിൽ {{GENDER:$2|പരാമർശിച്ചിട്ടുണ്ട്}}.",
+ "notification-header-mention-failure-user-unknown": "ഉപയോക്താവിനെ കണ്ടെത്താനാവാത്തതിനാൽ {{GENDER:$2|താങ്കൾ}} <strong>$3</strong> എന്ന ഉപയോക്താവിനെ പരാമർശിച്ചത് അയച്ചിട്ടില്ല.",
+ "notification-header-mention-failure-user-anonymous": "ഉപയോക്താവ് അജ്ഞാത(ൻ) ആയതിനാൽ {{GENDER:$2|താങ്കൾ}} <strong>$3</strong> എന്ന ഉപയോക്താവിനെ പരാമർശിച്ചത് അയച്ചിട്ടില്ല.",
+ "notification-header-mention-failure-too-many": "{{GENDER:$2|താങ്കൾ}} ശ്രമിച്ചത് {{PLURAL:$3|ഒരു ഉപയോക്താവിലും|$3 ഉപയോക്താക്കളിലും}} അധികം ആൾക്കാരെ പരാമർശിക്കാനാണ്. ആ പരിധിക്ക് മുകളിലുള്ള പരാമർശങ്ങൾ അയക്കില്ല.",
+ "notification-header-mention-failure-bundle": "<strong>$4</strong> സംവാദത്താളിൽ {{GENDER:$2|താങ്കൾ നടത്തിയ}} {{PLURAL:$3|ഒരു പരാമർശം|$3 പരാമർശങ്ങൾ}} അയയ്ക്കാൻ കഴിഞ്ഞില്ല.",
+ "notification-compact-header-mention-failure-user-unknown": "<strong>ഉപയോക്തൃനാമം നിലവിലില്ല:</strong> $1",
+ "notification-compact-header-mention-failure-user-anonymous": "<strong>ഐ.പി.കൾ പരാമർശിക്കാനാവില്ല:</strong> $1",
+ "notification-header-mention-success": "{{GENDER:$2|താങ്കൾ}} <strong>$3</strong> എന്ന ഉപയോക്താവിനെ പരാമർശിച്ചത് അയച്ചു.",
+ "notification-header-mention-success-bundle": "<strong>$4</strong> സംവാദത്താളിൽ {{GENDER:$2|താങ്കൾ നടത്തിയ}} {{PLURAL:$3|ഒരു പരാമർശം|$3 പരാമർശങ്ങൾ}} അയച്ചിരിക്കുന്നു.",
+ "notification-compact-header-mention-success": "<strong>{{GENDER:$2|താങ്കൾ പരാമർശിച്ചത്}}:</strong> $3",
+ "notification-header-mention-status-bundle": "<strong>$4</strong> സംവാദത്താളിൽ {{PLURAL:$3|ഒരു പരാമർശം|$3 പരാമർശങ്ങൾ}} {{GENDER:$2|താങ്കൾ നടത്തിയിട്ടുണ്ട്}}; അവയിൽ {{PLURAL:$5|$5 അയച്ചില്ല}}, {{PLURAL:$6|$6 അയച്ചു}}.",
+ "notification-header-user-rights-add-only": "{{GENDER:$4|താങ്കളുടെ}} ഉപയോക്തൃ അവകാശങ്ങൾ {{GENDER:$1|മാറിയിരിക്കുന്നു}}. ഇനി പറയുന്നതിലേക്ക് താങ്കൾ ചേർക്കപ്പെട്ടിരിക്കുന്നു: $2.",
+ "notification-header-user-rights-remove-only": "{{GENDER:$4|താങ്കളുടെ}} ഉപയോക്തൃ അവകാശങ്ങൾ {{GENDER:$1|മാറിയിരിക്കുന്നു}}. ഇനി പറയുന്നതിൽ താങ്കൾ ഇപ്പോൾ അംഗമല്ല: $2.",
+ "notification-header-user-rights-add-and-remove": "{{GENDER:$6|താങ്കളുടെ}} ഉപയോക്തൃ അവകാശങ്ങൾ {{GENDER:$1|മാറിയിരിക്കുന്നു}}. ഇനി പറയുന്നതിലേക്ക് താങ്കൾ ചേർക്കപ്പെട്ടിരിക്കുന്നു: $2. ഇനി പറയുന്നതിൽ താങ്കൾ ഇപ്പോൾ അംഗമല്ല: $4.",
"notification-header-welcome": "{{SITENAME}} സംരംഭത്തിലേക്ക് {{GENDER:$2|സ്വാഗതം}}, $1! {{GENDER:$2|താങ്കൾ}} ഇവിടെ എത്തിയതിൽ അതിയായി സന്തോഷിക്കുന്നു.",
+ "notification-header-mention-summary": "<strong>$4</strong> താളിന്റെ തിരുത്തൽ സംഗ്രഹത്തിൽ {{GENDER:$3|താങ്കളെ}}, $1 {{GENDER:$2|പരാമർശിച്ചു}}.",
"notification-welcome-linktext": "സ്വാഗതം",
+ "notification-header-thank-you-1-edit": "{{GENDER:$2|താങ്കൾ}} {{GENDER:$2|താങ്കളുടെ}} ആദ്യ തിരുത്ത് ഇപ്പോൾ ചെയ്തു; നന്ദി, സ്വാഗതം!",
+ "notification-header-thank-you-10-edit": "{{GENDER:$2|താങ്കൾ}} {{GENDER:$2|താങ്കളുടെ}} പത്താമത്തെ തിരുത്ത് ഇപ്പോൾ ചെയ്തു; നന്ദി, ഇനിയും മുന്നോട്ട് മുന്നോട്ട്!",
+ "notification-header-thank-you-100-edit": "{{GENDER:$2|താങ്കൾ}} {{GENDER:$2|താങ്കളുടെ}} നൂറാമത്ത് തിരുത്ത് ഇപ്പോൾ ചെയ്തു; വളരെ നന്ദി!",
+ "notification-header-thank-you-1000-edit": "{{GENDER:$2|താങ്കൾ}} {{GENDER:$2|താങ്കളുടെ}} ആയിരാമത്തെ തിരുത്ത് ഇപ്പോൾ ചെയ്തു; മഹത്തായ {{GENDER:$2|സംഭാവകൻ|സംഭാവക|സംഭാവനകൾ ചെയ്യുന്നയാൾ}} ആയിരിക്കുന്നതിന് നന്ദി!",
+ "notification-header-thank-you-10000-edit": "{{GENDER:$2|താങ്കൾ}} {{GENDER:$2|താങ്കളുടെ}} പതിനായിരാമത്തെ തിരുത്ത് ഇപ്പോൾ ചെയ്തു; വളരെ നന്ദി!",
+ "notification-header-thank-you-100000-edit": "{{GENDER:$2|താങ്കൾ}} {{GENDER:$2|താങ്കളുടെ}} ലക്ഷാമത്തെ തിരുത്ത് ഇപ്പോൾ ചെയ്തു; താങ്കളുടെ ആശ്ചര്യകരമായ സംഭാവനകൾക്ക് നന്ദി!",
+ "notification-header-thank-you-1000000-edit": "{{GENDER:$2|താങ്കൾ}} {{GENDER:$2|താങ്കളുടെ}} പത്തുലക്ഷാമത്തെ തിരുത്ത് ഇപ്പോൾ ചെയ്തു; താങ്കളുടെ വിസ്മയകരമായ സംഭാവനകൾക്ക് നന്ദി!",
+ "notification-link-thank-you-edit": "{{GENDER:$1|താങ്കളുടെ}} തിരുത്ത്",
"notification-link-text-view-edit": "തിരുത്ത് കാണുക",
- "notification-header-reverted": "താങ്കൾ വരുത്തിയ {{PLURAL:$4|<strong>$3</strong> താളിലെ തിരുത്ത്|<strong>$3</strong> താളിലെ തിരുത്തുകൾ}}{{GENDER:$2|മുൻപ്രാപനം ചെയ്തിരിക്കുന്നു}}",
+ "notification-link-article-reminder": "താൾ കാണുക",
+ "notification-header-reverted": "താങ്കൾ വരുത്തിയ {{PLURAL:$4|<strong>$3</strong> താളിലെ തിരുത്ത്|<strong>$3</strong> താളിലെ തിരുത്തുകൾ}} {{GENDER:$2|മുൻപ്രാപനം ചെയ്തിരിക്കുന്നു}}",
"notification-header-emailuser": "$1 താങ്കൾക്കൊരു ഇമെയിൽ {{GENDER:$2|അയച്ചിട്ടുണ്ട്}}.",
"notification-edit-talk-page-email-subject2": "{{SITENAME}} സംരംഭത്തിൽ, താങ്കൾക്കൊരു സന്ദേശം $1 {{GENDER:$1|ചേർത്തിട്ടുണ്ട്}}",
"notification-edit-talk-page-email-batch-body-with-section": "താങ്കളുടെ സംവാദത്താളിൽ, \"$2\" എന്നതിൽ ഒരു സന്ദേശം $1 {{GENDER:$1|ചേർത്തിട്ടുണ്ട്}}.",
@@ -82,20 +153,43 @@
"notification-reverted-email-subject2": "{{SITENAME}} സംരംഭത്തിൽ താങ്കൾ വരുത്തിയ {{PLURAL:$3|തിരുത്ത്|തിരുത്തുകൾ}} {{GENDER:$1|മുൻപ്രാപനം ചെയ്തിരിക്കുന്നു}}",
"notification-mention-email-subject": "$1 {{GENDER:$2|താങ്കളെ}} {{SITENAME}} സംരംഭത്തിൽ {{GENDER:$1|പരാമർശിച്ചിരിക്കുന്നു}}",
"notification-user-rights-email-subject": "{{SITENAME}} സംരംഭത്തിൽ താങ്കളുടെ അവകാശങ്ങളിൽ മാറ്റമുണ്ടായിരിക്കുന്നു",
+ "notification-timestamp-ago-seconds": "{{PLURAL:$1|$1 സെ.}}",
+ "notification-timestamp-ago-minutes": "{{PLURAL:$1|$1 മി.}}",
+ "notification-timestamp-ago-hours": "{{PLURAL:$1|$1 മ.}}",
+ "notification-timestamp-ago-days": "{{PLURAL:$1|$1 ദി.}}",
+ "notification-timestamp-ago-months": "{{PLURAL:$1|$1 മാ.}}",
+ "notification-timestamp-ago-years": "{{PLURAL:$1|$1 വ.}}",
+ "notification-timestamp-today": "ഇന്ന്",
+ "notification-timestamp-yesterday": "ഇന്നലെ",
+ "notification-inbox-filter-read": "വായിച്ചവ",
+ "notification-inbox-filter-unread": "വായിക്കാത്തവ",
+ "notification-inbox-filter-all": "എല്ലാം",
"echo-email-body-default": "{{SITENAME}} സംരംഭത്തിൽ താങ്കൾക്ക് ഒരു അറിയിപ്പുണ്ട്:\n\n$1",
+ "echo-email-footer-default-html": "ഞങ്ങൾ താങ്കൾക്ക് അയയ്ക്കുന്ന ഇമെയിലുകളെ നിയന്ത്രിക്കാൻ, <a href=\"$2\" style=\"text-decoration:none; color: #3868B0;\">താങ്കളുടെ ക്രമീകരണങ്ങൾ കാണുക</a>.<br />\n$1",
"echo-email-footer-default": "$2\n\nഞങ്ങൾ താങ്കൾക്കയയ്ക്കുന്ന ഇമെയിലുകൾ നിയന്ത്രിക്കാൻ, താങ്കളുടെ ക്രമീകരണങ്ങൾ ഉപയോഗിക്കുക: {{canonicalurl:{{#special:Preferences}}#mw-prefsection-echo}}\n\n$1",
+ "echo-email-plain-footer": "ഞങ്ങൾ {{GENDER:$1|താങ്കൾക്കയയ്ക്കുന്ന}} ഇമെയിലുകൾ നിയന്ത്രിക്കാൻ, {{GENDER:$1|താങ്കളുടെ}} ക്രമീകരണങ്ങൾ പരിശോധിക്കുക:",
+ "echo-email-html-footer-preference-link-text": "{{GENDER:$1|താങ്കളുടെ}} ക്രമീകരണങ്ങൾ പരിശോധിക്കുക",
+ "echo-email-html-footer-with-link": "ഞങ്ങൾ {{GENDER:$2|താങ്കൾക്കയയ്ക്കുന്ന}} ഇമെയിലുകൾ നിയന്ത്രിക്കാൻ, $1.",
"echo-notification-alert": "{{PLURAL:$1|ജാഗ്രതാ അറിയിപ്പ് ($1)|ജാഗ്രതാ അറിയിപ്പുകൾ ($1)|100=ജാഗ്രതാ അറിയിപ്പുകൾ (99+)}}",
- "echo-notification-alert-text-only": "അറിയിപ്പുകൾ",
- "echo-overlay-link": "എല്ലാ അറിയിപ്പുകളും",
- "echo-overlay-title": "<b>അറിയിപ്പുകൾ</b>",
- "echo-overlay-title-overflow": "<b>{{PLURAL:$1|അറിയിപ്പുകൾ}}</b> (വായിക്കാത്ത $2 എണ്ണത്തിലെ $1 എണ്ണം കാണിക്കുന്നു)",
+ "echo-notification-notice": "{{PLURAL:$1|അറിയിപ്പ് ($1)|അറിയിപ്പുകൾ ($1)|100=അറിയിപ്പുകൾ (99+)}}",
+ "echo-notification-alert-text-only": "ഇവ ശ്രദ്ധിക്കുക",
+ "echo-notification-notice-text-only": "അറിയിപ്പുകൾ",
+ "echo-overlay-link": "എല്ലാ വിജ്ഞാപനങ്ങളും",
+ "echo-overlay-title": "<b>വിജ്ഞാപനങ്ങൾ</b>",
+ "echo-overlay-title-overflow": "<b>{{PLURAL:$1|വിജ്ഞാപനങ്ങൾ}}</b> (വായിക്കാത്ത $2 എണ്ണത്തിലെ $1 എണ്ണം കാണിക്കുന്നു)",
"echo-mark-all-as-read": "എല്ലാം വായിച്ചതായി അടയാളപ്പെടുത്തുക",
+ "echo-mark-all-as-read-confirmation": "{{PLURAL:$1|ഒരു വിജ്ഞാപനം|$1 വിജ്ഞാപനങ്ങൾ}} വായിച്ചതായി അടയാളപ്പെടുത്തുക",
+ "echo-mark-wiki-as-read": "തിരഞ്ഞെടുത്ത വിക്കിയിൽ എല്ലാം വായിച്ചതായി അടയാളപ്പെടുത്തുക: $1",
"echo-date-today": "ഇന്ന്",
"echo-date-yesterday": "ഇന്നലെ",
"echo-load-more-error": "കൂടുതൽ ഫലങ്ങൾ എടുക്കുന്നതിനിടെ ഒരു പിഴവുണ്ടായി.",
- "echo-email-batch-subject-daily": "താങ്കൾക്ക് {{SITENAME}} സംരംഭത്തിൽ {{PLURAL:$2|ഒരു പുതിയ അറിയിപ്പ്|പുതിയ അറിയിപ്പുകൾ}} ഉണ്ട്",
- "echo-email-batch-subject-weekly": "താങ്കൾക്ക് ഈ ആഴ്ച, {{SITENAME}} സംരംഭത്തിൽ {{PLURAL:$2|പുതിയ ഒരറിയിപ്പ്|പുതിയ അറിയിപ്പുകൾ}} ഉണ്ട്",
+ "notification-bundle-header-edit-user-talk-v2": "<strong>{{GENDER:$3|താങ്കളുടെ}} സംവാദത്താളിൽ</strong> {{PLURAL:$1|ഒരു പുതിയ സന്ദേശം|$1 പുതിയ സന്ദേശങ്ങൾ|100=99+ പുതിയ സന്ദേശങ്ങൾ}} ഉണ്ട്.",
+ "echo-email-batch-subject-daily": "താങ്കൾക്ക് {{SITENAME}} സംരംഭത്തിൽ {{PLURAL:$2|ഒരു പുതിയ വിജ്ഞാപനം|പുതിയ വിജ്ഞാപനങ്ങൾ}} ഉണ്ട്",
+ "echo-email-batch-subject-weekly": "താങ്കൾക്ക് ഈ ആഴ്ച, {{SITENAME}} സംരംഭത്തിൽ {{PLURAL:$2|പുതിയ ഒരു വിജ്ഞാപനം|പുതിയ വിജ്ഞാപനങ്ങൾ}} ഉണ്ട്",
"echo-email-batch-body-intro-daily": "പ്രിയ $1,\n{{SITENAME}} സംരംഭത്തിൽ, താങ്കളെ ബാധിക്കുന്ന ഇന്നത്തെ പ്രവർത്തനങ്ങളുടെ സംഗ്രഹം ഇതാ.",
"echo-email-batch-body-intro-weekly": "പ്രിയ $1,\n{{SITENAME}} സംരംഭത്തിൽ, താങ്കളെ ബാധിക്കുന്ന ഈ ആഴ്ചയിലെ പ്രവർത്തനങ്ങളുടെ സംഗ്രഹം ഇതാ.",
- "echo-email-batch-link-text-view-all-notifications": "എല്ലാ അറിയിപ്പുകളും കാണുക"
+ "echo-email-batch-link-text-view-all-notifications": "എല്ലാ വിജ്ഞാപനങ്ങളും കാണുക",
+ "notification-header-foreign-alert": "{{PLURAL:$5|മറ്റൊരു വിക്കിയിൽ|മറ്റ് $5 വിക്കികളിൽ}} താങ്കൾ ശ്രദ്ധിക്കേണ്ടവ ഉണ്ട്.",
+ "notification-header-foreign-notice": "{{PLURAL:$5|മറ്റൊരു വിക്കിയിൽ|മറ്റ് $5 വിക്കികളിൽ}} താങ്കൾക്ക് അറിയിപ്പുകൾ ഉണ്ട്.",
+ "notification-header-foreign-all": "{{PLURAL:$5|മറ്റൊരു വിക്കിയിൽ|മറ്റ് $5 വിക്കികളിൽ}} താങ്കക്ക് വിജ്ഞാപനങ്ങൾ ഉണ്ട്."
}
diff --git a/Echo/i18n/mn.json b/Echo/i18n/mn.json
index e966d34d..da28645d 100644
--- a/Echo/i18n/mn.json
+++ b/Echo/i18n/mn.json
@@ -6,6 +6,5 @@
]
},
"echo-notification-markasread": "Уншсанаар тэмдэглэх",
- "echo-notification-alert": "{{PLURAL:$1|Сануулга ($1)|Сануулга ($1)|100=Сануулга (99+)}}",
- "echo-notification-message": "{{PLURAL:$1|Мэдээ ($1)|Мэдээ ($1)|100=Мэдээ (99+)}}"
+ "echo-notification-alert": "{{PLURAL:$1|Сануулга ($1)|Сануулга ($1)|100=Сануулга (99+)}}"
}
diff --git a/Echo/i18n/mni.json b/Echo/i18n/mni.json
new file mode 100644
index 00000000..0ee74f64
--- /dev/null
+++ b/Echo/i18n/mni.json
@@ -0,0 +1,8 @@
+{
+ "@metadata": {
+ "authors": [
+ "Awangba Mangang"
+ ]
+ },
+ "tooltip-pt-notifications-alert": "{{GENDER:|ꯅꯪꯒꯤ}} ꯈꯪꯍꯟꯕꯥ"
+}
diff --git a/Echo/i18n/mnw.json b/Echo/i18n/mnw.json
new file mode 100644
index 00000000..1a1be15c
--- /dev/null
+++ b/Echo/i18n/mnw.json
@@ -0,0 +1,8 @@
+{
+ "@metadata": {
+ "authors": [
+ "Htawmonzel"
+ ]
+ },
+ "tooltip-pt-notifications-alert": "{{GENDER:|မၞး}} မကဵုသတိဂမၠိုင်"
+}
diff --git a/Echo/i18n/mr.json b/Echo/i18n/mr.json
index bc101873..7ed93a8d 100644
--- a/Echo/i18n/mr.json
+++ b/Echo/i18n/mr.json
@@ -8,7 +8,8 @@
"Sankoswal",
"V.narsikar",
"संतोष दहिवळ",
- "Macofe"
+ "Macofe",
+ "Susheelkasab"
]
},
"echo-desc": "सदस्यांना घडामोडी व संदेश देणारी अधिसूचना प्रणाली",
@@ -17,7 +18,7 @@
"prefs-displaynotifications": "प्रदर्शित करण्याचे पर्याय",
"prefs-echosubscriptions": "या उपक्रमाबद्दल कळवावे",
"prefs-echocrosswiki": "आंतर-विकि अधिसूचना",
- "prefs-newmessageindicator": "नवीन संदेश निर्देशक",
+ "prefs-blocknotificationslist": "मूक करण्यात आलेले सदस्य",
"echo-pref-send-me": "मला पाठवा:",
"echo-pref-send-to": "ला पाठवा:",
"echo-pref-email-format": "विपत्र प्रारुप:",
@@ -30,7 +31,7 @@
"echo-pref-email-format-html": "एचटीएमएल",
"echo-pref-email-format-plain-text": "साधा मजकूर",
"echo-pref-cross-wiki-notifications": "ईतर विकिंवरील अधिसूचना दाखवा",
- "echo-pref-new-message-indicator": "चर्चापान संदेश दर्शक माझ्या साधनपेटीत दाखवा",
+ "echo-pref-notifications-blacklist": "या सदस्यांनी पाठविलेल्या अधिसूचना दर्शवू नका.([[mw:Special:MyLanguage/Help:Notifications#mute|याबाबत अधिक जाणा]])",
"echo-pref-beta-feature-cross-wiki-message": "वर्धित अधिसूचना",
"echo-pref-beta-feature-cross-wiki-description": "सोप्या रितीने अधिसूचना बघा व त्यांना व्यवस्थित लावा.यात आंतरविकि अधिसूचना अंतर्भूत आहेत ज्या, आपणास, इतर विकिंतील अधिसूचना बघणे शक्य करतात.( आंतर विकि अधिसूचना दिलेल्या विकिवर प्राप्त करण्यास, आपण त्या विकिवर बीटा फिचर सक्शम करावयास हवा.)",
"echo-learn-more": "अधिक जाणून घ्या",
@@ -46,19 +47,22 @@
"echo-category-title-system": "{{PLURAL:$1|प्रणाली}}",
"echo-category-title-user-rights": "{{PLURAL:$1|सदस्य अधिकार बदल}}",
"echo-category-title-emailuser": "{{PLURAL:$1|दुसऱ्या सदस्यातर्फे विपत्र|दुसऱ्या सदस्यांतर्फे विपत्र}}",
+ "echo-category-title-article-reminder": "पान {{PLURAL:$1|स्मृतीपत्र|स्मृतीपत्रे}}",
"echo-pref-tooltip-edit-user-talk": "माझ्या चर्चापानावर कोणी संदेश किंवा उत्तर टाकल्यास मला कळवा.",
- "echo-pref-tooltip-article-linked": "मी तयार केलेल्या लेख पानाचा दुवा कोणी दुसरऱ्या लेख पानात दिल्यास मला कळवा.",
+ "echo-pref-tooltip-article-linked": "मी तयार केलेल्या लेख पानाचा दुवा कोणी दुसरऱ्या पानात दिल्यास मला कळवा.",
"echo-pref-tooltip-reverted": "मी केलेले संपादन जर कोणी 'रद्द करा' किंवा रोलबॅक साधन वापरून उलटवित असेल तर मला कळवा.",
"echo-pref-tooltip-mention": "माझ्या सदस्यपानास जर कोणी दुवा दिला तर मला सुचित करा.",
- "echo-pref-tooltip-mention-failure": "जेंव्हा माझी संपादने वापरकर्त्यास नमूद करण्यात अयशस्वी होतील तेंव्हा मला कळवा.",
- "echo-pref-tooltip-mention-success": "जेंव्हा माझी संपादने यशस्वीरित्या सदस्यांचा उल्लेख करतील तेंव्हा मला सूचना द्या.",
+ "echo-pref-tooltip-mention-failure": "जेंव्हा मी दुसऱ्या कोणासाठी उल्लेखित केलेले बाहेर पाठवू शकलो नाही तर मला कळवा.",
+ "echo-pref-tooltip-mention-success": "जेंव्हा मी दुसऱ्या कोणासाठी उल्लेखित केलेले बाहेर पाठविले तर मला कळवा.",
"echo-pref-tooltip-user-rights": "माझे सदस्याधिकार कोणी बदलविल्यास मला सुचित करा.",
"echo-pref-tooltip-emailuser": "जर कोणी मला विपत्र पाठविले तर मला सुचित करा.",
+ "echo-pref-tooltip-article-reminder": "मी विचारल्यावर या पानाबद्दल मला सूचना द्या.",
"echo-error-no-formatter": "अधिसूचनेसाठी कोणतेच प्रारुपण निश्चित नाही.",
"notifications": "अधिसूचना",
"tooltip-pt-notifications-alert": "{{GENDER:|आपले}} सजगतेचे संदेश",
"tooltip-pt-notifications-notice": "{{GENDER:|आपल्या}} सूचना",
"echo-displaynotificationsconfiguration": "अधिसूचनांचे विन्यास दर्शवा",
+ "echo-displaynotificationsconfiguration-summary": "या विकिवर अधिसूचना कशा माअंडल्या जातात याचे हे अवलोकन आहे.",
"echo-displaynotificationsconfiguration-notifications-by-category-header": "वर्गानूसार अधिसूचना",
"echo-displaynotificationsconfiguration-sorting-by-section-header": "प्रकारानुसार निवड",
"echo-displaynotificationsconfiguration-sorting-by-section-legend": "प्रत्येक अधिसूचना कोणत्या विभागात निवडल्या जाते",
@@ -79,8 +83,6 @@
"echo-none": "आपल्यासाठी काहीच अधिसूचना नाहीत.",
"echo-more-info": "अधिक माहिती",
"echo-feedback": "प्रतिक्रिया",
- "echo-popup-footer-special-page-invitation": "<strong>पुनर्रचित अधिसूचनेच्या पानावर प्रयत्न करा.</strong> [$2 $1]",
- "echo-popup-footer-special-page-invitation-link": "पूर्णपणे नविन दिखावा व फिचर्स",
"echo-quotation-marks": "\"$1\"",
"echo-api-failure": "अधिसूचना पुरविण्यात अयशस्वी.",
"echo-api-failure-cross-wiki": "दूरवरच्या विदागारास पोहोच नाकारण्यात आली आहे.",
@@ -92,7 +94,11 @@
"echo-notification-markasunread": "न वाचलेले अशी खूण करा",
"echo-notification-markasread-tooltip": "वाचले अशी खूण करा",
"echo-notification-more-options-tooltip": "अधिक पर्याय",
+ "notification-dynamic-actions-unwatch": "\"$1\" वरच्या नवीन क्रियांवर पहारा देणे {{GENDER:$3|थांबवा}}",
"notification-dynamic-actions-unwatch-confirmation": "{{GENDER:$3|आपला}} \"$1\" या पानावर पहारा नाही.",
+ "notification-dynamic-actions-unwatch-confirmation-description": "{{GENDER:$3|आपण}} [$2 या पानावर] कधीही पहारा देऊ शकता.",
+ "notification-dynamic-actions-watch": "\"$1\" वर नवीन क्रिया {{GENDER:$3|अनुसरा}}.",
+ "notification-dynamic-actions-watch-confirmation": "{{GENDER:$3|आपण}} \"$1\" या पानावर सध्या पहारा देत आहात",
"notification-dynamic-actions-watch-confirmation-description": "{{GENDER:$3|आपण}} [$2 या पानावर] पहारा देणे कधीही थांबवू शकता.",
"notification-link-text-expand-all": "विस्तार करा",
"notification-link-text-expand-alert-count": "{{PLURAL:$1|$1 इशारा|$1 इशारे}} बघा",
@@ -106,9 +112,12 @@
"notification-link-text-view-page": "पान बघा",
"notification-header-edit-user-talk": "$1 ने <strong>{{GENDER:$3|आपल्या}} चर्चा पानावर </strong> एक संदेश {{GENDER:$2|टाकला}}.",
"notification-header-edit-user-talk-with-section": "$1 ने <strong>{{GENDER:$3|आपल्या}} चर्चा पानावर </strong>\"<strong>$4</strong>\" मध्ये एक संदेश {{GENDER:$2|टाकला}}.",
+ "notification-compact-header-edit-user-talk": "$1 ने {{GENDER:$3|आपणासाठी}} एक संदेश {{GENDER:$2|टाकला}}.",
+ "notification-compact-header-edit-user-talk-with-section": "$1 ने \"<strong>$4</strong>\" वर {{GENDER:$3|आपणासाठी}} एक संदेश {{GENDER:$2|टाकला}}.",
"notification-header-page-linked": "<strong>$4</strong> हून <strong>$3</strong> ला दुवा तयार केल्या गेला.",
"notification-compact-header-page-linked": "<strong>$1</strong> शी दुवा जोडला आहे.",
"notification-bundle-header-page-linked": "{{PLURAL:$5||$5 पाने|100=99+ पाने}} आता <strong>$3</strong> शी जुळवल्या गेली आहेत.",
+ "notification-header-article-reminder": "{{GENDER:$2|आपण}} आठवण करुन द्यावयाची विनंती केलेले पान <strong>$3</strong> वर आहे",
"notification-link-text-what-links-here": "या पानास असणारे सर्व दुवे",
"notification-header-mention-other": "$1 ने <strong>$4</strong> वर \"<strong>$5</strong>\" मध्ये {{GENDER:$3|आपला}} {{GENDER:$2|उल्लेख केला}}.",
"notification-header-mention-other-nosection": "$1 ने <strong>$4</strong> वर {{GENDER:$3|आपला}} {{GENDER:$2|उल्लेख केला}}.",
@@ -120,7 +129,7 @@
"notification-header-mention-article-talkpage-nosection": "$1 ने <strong>$4</strong> चर्चा पानावर {{GENDER:$3|आपला}}{{GENDER:$2|उल्लेख केला}}.",
"notification-header-mention-failure-user-unknown": "{{GENDER:$2|आपण}} उल्लेख केलेले<strong>$3</strong> पाठविल्या गेले नाही कारण तो सदस्य सापडला नाही.",
"notification-header-mention-failure-user-anonymous": "{{GENDER:$2|आपण}} उल्लेख केलेले<strong>$3</strong> पाठविल्या गेले नाही कारण तो सदस्य अनामिक आहे.",
- "notification-header-mention-failure-too-many": "{{GENDER:$2|आपले}} उल्लेखित पाठविल्या गेले नाहीत कारण त्यांनी $3 ची मर्यादा उल्लंघिली.",
+ "notification-header-mention-failure-too-many": "{{GENDER:$2|आपण}} $3पेक्षा जास्त {{PLURAL:$3|सदस्य}}उल्लेखित केले आहेत. त्या मर्यादेपेक्षा जास्त उल्लेख पाठविल्या गेले नाहीत.",
"notification-header-mention-failure-bundle": "{{GENDER:$2|आपण केलेला/ले}} {{PLURAL:$3|एक उल्लेख|$3 उल्लेख}} <strong>$4</strong> चर्चा पानावर {{PLURAL:$3|पाठविल्या}} गेले नाहीत.",
"notification-compact-header-mention-failure-user-unknown": "<strong>सदस्यनाव अस्तित्वात नाही:</strong> $1",
"notification-compact-header-mention-failure-user-anonymous": "<strong>अंकपत्ते उल्लेखित केल्या जाऊ शकत नाहीत:</strong> $1",
@@ -131,7 +140,9 @@
"notification-header-user-rights-add-only": "{{GENDER:$4|आपले}} सदस्य अधिकार {{GENDER:$1|बदलल्या गेलेत}}. आपण जोडल्या गेले आहात: $2 शी.",
"notification-header-user-rights-remove-only": "{{GENDER:$4|आपले}} सदस्य अधिकार {{GENDER:$1|बदलल्या गेलेत}}. आपण आता सदस्य नाहीत: $2 चा.",
"notification-header-user-rights-add-and-remove": "{{GENDER:$6|आपले}} सदस्य अधिकार {{GENDER:$1|बदललेत}}. आपण जोडल्या गेले आहात: $2. आपण सध्या सदस्य नाहीत: $4 चे.",
+ "notification-header-user-rights-expiry-change": "खालील {{PLURAL:$3|गटा|गटां}}मधील {{GENDER:$4|आपल्या}} सदस्यत्वाची समाप्ती {{GENDER:$1|बदलल्या}} गेली आहे:$2",
"notification-header-welcome": "{{SITENAME}} वर {{GENDER:$2|आपले स्वागत}}, $1! {{GENDER:$2|आपण}} येथे आल्यामुळे आम्हास आनंद झाला.",
+ "notification-header-mention-summary": "$1 यांनी <strong>$4</strong>च्या अद्यन्वित सारांशावर {{GENDER:$3|तुमचा}}{{GENDER:$2|उल्लेख}} केला",
"notification-welcome-linktext": "स्वागत",
"notification-header-thank-you-1-edit": "{{GENDER:$2|आपण}} {{GENDER:$2|आपले}} पहिले संपादन नुकतेच केले आहे;{{GENDER:$2|आपणास}} धन्यवाद व आपले स्वागत आहे!",
"notification-header-thank-you-10-edit": "{{GENDER:$2|आपण}} {{GENDER:$2|आपले}} दहावे संपादन नुकतेच केले आहे;{{GENDER:$2|आपणास}} धन्यवाद व कृपया संपादने सुरु ठेवा!",
@@ -142,6 +153,7 @@
"notification-header-thank-you-1000000-edit": "{{GENDER:$2|आपण}} {{GENDER:$2|आपले}} लाखावे संपादन नुकतेच केले आहे;{{GENDER:$2|आपणास}} योगदानाच्या आपल्या आश्चर्यकारक कामाबद्दल धन्यवाद!",
"notification-link-thank-you-edit": "{{GENDER:$1|आपले}} संपादन",
"notification-link-text-view-edit": "संपादन बघा",
+ "notification-link-article-reminder": "पान बघा",
"notification-header-reverted": "आपले/ली {{PLURAL:$4|<strong>$3</strong> वरील संपादन|<strong>$3</strong> वरील संपादने}}{{GENDER:$2|उलटवल्या गेलीत}}.",
"notification-header-emailuser": "$1 ने आपणास एक विपत्र {{GENDER:$2|पाठविले}}.",
"notification-edit-talk-page-email-subject2": "$1 ने {{SITENAME}}वर आपल्यासाठी एक संदेश {{GENDER:$1|टाकला}}",
@@ -164,9 +176,9 @@
"echo-email-body-default": "{{SITENAME}}वर आपणासाठी एक नविन अधिसूचना आहे:\n\n$1",
"echo-email-footer-default-html": "आम्ही आपणास कोणते विपत्र पाठवितो, त्यावर नियंत्रण करण्यास<a href=\"$2\" style=\"text-decoration:none; color: #3868B0;\">आपला पसंतीक्रम तपासा</a>.<br />\n$1",
"echo-email-footer-default": "$2\n\nआम्ही आपणास पाठविण्याच्या विपत्रांवर नियंत्रणासाठी, आपला पसंतीक्रम तपासा:\n{{canonicalurl:{{#special:Preferences}}#mw-prefsection-echo}}\n\n$1",
- "echo-email-plain-footer": "आम्ही आपणास पाठविण्याच्या विपत्रांवर नियंत्रणासाठी, आपला पसंतीक्रम तपासा:",
- "echo-email-html-footer-preference-link-text": "आपला पसंतीक्रम तपासा",
- "echo-email-html-footer-with-link": "आम्ही आपणास पाठविण्याच्या विपत्रांवर नियंत्रणासाठी, $1.",
+ "echo-email-plain-footer": "आम्ही {{GENDER:$1|आपणास}} पाठविण्याच्या विपत्रांवर नियंत्रणासाठी, {{GENDER:$1|आपला}}पसंतीक्रम तपासा:",
+ "echo-email-html-footer-preference-link-text": "{{GENDER:$1|आपला}} पसंतीक्रम तपासा",
+ "echo-email-html-footer-with-link": "आम्ही {{GENDER:$2|आपणास}} पाठविण्याच्या विपत्रांवर नियंत्रणासाठी, $1.",
"echo-notification-alert": "{{PLURAL:$1|सजगता ($1)|100=(99+)सजगता}}",
"echo-notification-notice": "{{PLURAL:$1|सूचना($1)|100=सूचना(99+)}}",
"echo-notification-alert-text-only": "सजगता",
diff --git a/Echo/i18n/ms.json b/Echo/i18n/ms.json
index ff45ddd7..dc593088 100644
--- a/Echo/i18n/ms.json
+++ b/Echo/i18n/ms.json
@@ -13,7 +13,6 @@
"prefs-emailsettings": "Pilihan e-mel",
"prefs-displaynotifications": "Pilihan paparan",
"prefs-echosubscriptions": "Beritahu saya tentang peristiwa-peristiwa ini",
- "prefs-newmessageindicator": "Indikator pesanan baru",
"echo-pref-send-me": "Hantarkan saya:",
"echo-pref-send-to": "Hantar ke:",
"echo-pref-email-format": "Format e-mel:",
@@ -25,7 +24,6 @@
"echo-pref-email-frequency-weekly": "Ringkasan pemberitahuan mingguan",
"echo-pref-email-format-html": "HTML",
"echo-pref-email-format-plain-text": "Teks biasa",
- "echo-pref-new-message-indicator": "Paparkan indikator pesanan dari halaman perbincangan pada palang alat saya",
"echo-learn-more": "Ketahui lebih lanjut",
"echo-new-messages": "Anda mempunyai pesanan baru",
"echo-category-title-edit-user-talk": "{{PLURAL:$1|Pesanan|Pesanan-pesanan}} laman perbincangan",
diff --git a/Echo/i18n/mt.json b/Echo/i18n/mt.json
index 9a03b329..0e30df0f 100644
--- a/Echo/i18n/mt.json
+++ b/Echo/i18n/mt.json
@@ -12,7 +12,6 @@
"prefs-emailsettings": "Għażliet għall-posta elettronika",
"prefs-displaynotifications": "Għażla ta' kif trid tara n-notifiki",
"prefs-echosubscriptions": "Għarrafni meta jiġru dawn",
- "prefs-newmessageindicator": "Sinjal ta' messaġġi ġodda",
"echo-pref-send-me": "Ibgħatli:",
"echo-pref-send-to": "Ibgħat lil:",
"echo-pref-email-format": "Format tal-posta elettronika:",
@@ -24,7 +23,6 @@
"echo-pref-email-frequency-weekly": "Sommarju ta' kull ġimgħa tan-notifiki",
"echo-pref-email-format-html": "HTML",
"echo-pref-email-format-plain-text": "Test normali",
- "echo-pref-new-message-indicator": "Uri s-sinjal tal-messaġġi l-ġodda fil-paġna tad-diskussjoni tiegħi fl-iżbarra tal-għodda",
"echo-learn-more": "Aktar tagħrif",
"echo-new-messages": "Għandek messaġġi ġodda",
"echo-category-title-edit-user-talk": "{{PLURAL:$1|Messaġġ|Messaġġi}} fuq il-paġna ta' diskussjoni",
diff --git a/Echo/i18n/mui.json b/Echo/i18n/mui.json
new file mode 100644
index 00000000..7eb08d76
--- /dev/null
+++ b/Echo/i18n/mui.json
@@ -0,0 +1,8 @@
+{
+ "@metadata": {
+ "authors": [
+ "Jawadywn"
+ ]
+ },
+ "tooltip-pt-notifications-alert": "Pengenjuktahuan {{GENDER:|dulur}}"
+}
diff --git a/Echo/i18n/mwl.json b/Echo/i18n/mwl.json
index 5cb31add..b60c60ab 100644
--- a/Echo/i18n/mwl.json
+++ b/Echo/i18n/mwl.json
@@ -1,7 +1,8 @@
{
"@metadata": {
"authors": [
- "MokaAkashiyaPT"
+ "MokaAkashiyaPT",
+ "Athena in Wonderland"
]
},
"prefs-echo": "Notificaçones",
@@ -9,7 +10,6 @@
"prefs-displaynotifications": "Oupçones de bisualizaçon",
"prefs-echosubscriptions": "Abisar-me subre estes eibentos",
"prefs-echocrosswiki": "Notificaçones d'outras bersones de la Biquipédia",
- "prefs-newmessageindicator": "Andicador de nuoba mensaige",
"prefs-blocknotificationslist": "Lhista de bloqueios",
"echo-pref-send-me": "Ambiar-me:",
"echo-pref-send-to": "Ambiar pa:",
@@ -23,8 +23,7 @@
"echo-pref-email-format-html": "HTML",
"echo-pref-email-format-plain-text": "Testo simples",
"echo-pref-cross-wiki-notifications": "Amostrar notificaçones d'outras bersones de la Biquipédia",
- "echo-pref-notifications-blacklist": "Nun amostrar notificaçones destes outelizadores. ([[mw:Help:Notifications#mute|coincer mais]])",
- "echo-pref-new-message-indicator": "Amostrar l'andicador de mensaige na páigina de cumbersa na mie barra de ferramientas",
+ "echo-pref-notifications-blacklist": "Nun amostrar notificaçones destes outelizadores. ([[mw:Special:MyLanguage/Help:Notifications#mute|coincer mais]])",
"echo-category-title-edit-user-talk": "{{PLURAL:$1|Mensaige|Mensaiges}} na páigina de cumbersa",
"echo-category-title-article-linked": "{{PLURAL:$1|Lhigaçon|Lhigaçones}} pa la páigina",
"echo-category-title-reverted": "{{PLURAL:$1|Eidiçon rebertida|Eidiçones rebertidas}}",
@@ -42,6 +41,7 @@
"echo-pref-tooltip-user-rights": "Abisar-me quando ls mius prebilégios de outelizador fúren altarados.",
"echo-pref-tooltip-emailuser": "Abisar-me quando alguien me ambiar un correio eiletrónico.",
"notifications": "Notificaçones",
+ "tooltip-pt-notifications-alert": "Ls {{GENDER:|sous}} alhertas",
"echo-specialpage": "Notificaçones",
"echo-specialpage-pagination-numnotifications": "$1 {{PLURAL:$1|notificaçon|notificaçones}}",
"notification-link-text-view-mention": "Ber mençon",
diff --git a/Echo/i18n/my.json b/Echo/i18n/my.json
index 9e3d105f..2ca5e936 100644
--- a/Echo/i18n/my.json
+++ b/Echo/i18n/my.json
@@ -2,18 +2,117 @@
"@metadata": {
"authors": [
"Ninjastrikers",
- "9.sinistra"
+ "9.sinistra",
+ "Dr Lotus Black"
]
},
"prefs-echo": "အသိပေးချက်များ",
+ "prefs-emailsettings": "အီးမေးအတွက် ရွေးချယ်စရာ",
+ "prefs-displaynotifications": "ပြသရန် ရွေးချယ်မှု",
+ "prefs-echosubscriptions": "ဤဖြစ်ရပ်များကို ကျွန်ုပ်အားအသိပေးပါ",
+ "prefs-echocrosswiki": "ဝီကီများအနှံ့ အသိပေးချက်များ",
+ "prefs-blocknotificationslist": "အသံတိတ်သွားသော အသုံးပြုသူများ",
+ "echo-pref-send-me": "ပို့ပေးပါ:",
+ "echo-pref-send-to": "ပို့ရန်:",
+ "echo-pref-email-format": "အီးမေးလ်ပုံစံ:",
+ "echo-pref-web": "ဝဘ်",
+ "echo-pref-email": "အီးမေးလ်",
+ "echo-pref-email-frequency-never": "မည်သည့်အီးမေးလ် အသိပေးချက်မျှ မပို့ပါနှင့်",
+ "echo-pref-email-frequency-immediately": "ဝင်လာသော သီးသန့်အသိပေးချက်များ",
+ "echo-pref-email-frequency-daily": "နေ့စဉ်အကျဉ်းချုပ် အသိပေးချက်များ",
+ "echo-pref-email-frequency-weekly": "အပတ်စဉ်အကျဉ်းချုပ် အသိပေးချက်များ",
+ "echo-pref-email-format-html": "HTML",
+ "echo-pref-email-format-plain-text": "စာသား သက်သက်",
+ "echo-pref-cross-wiki-notifications": "အခြားဝီကီများမှ အသိပေးချက်များကို ပြရန်",
+ "echo-pref-notifications-blacklist": "ဤအသုံးပြုသူများထံမှ အသိပေးချက်များကို မပြပါနှင့် ([[mw:Special:MyLanguage/Help:Notifications#mute|ပိုမိုလေ့လာရန်]])",
+ "echo-pref-beta-feature-cross-wiki-message": "အားသွေးလောင်းထားသော အသိပေးချက်များ",
+ "echo-learn-more": "ပို၍ လေ့လာရန်",
+ "echo-new-messages": "မက်ဆေ့အသစ်များ ရောက်နေသည်",
+ "echo-category-title-edit-user-talk": "ဆွေးနွေးချက်စာမျက်နှာ {{PLURAL:$1|မက်ဆေ့|မက်ဆေ့များ}}",
+ "echo-category-title-article-linked": "စာမျက်နှာ {{PLURAL:$1|လင့်ခ်|လင့်ခ်များ}}",
+ "echo-category-title-other": "{{PLURAL:$1|အခြား}}",
+ "echo-category-title-system": "{{PLURAL:$1|စနစ်}}",
+ "echo-category-title-emailuser": "{{PLURAL:$1|အခြားအသုံးပြုသူမှ အီးမေးလ်|အခြားအသုံးပြုသူမှ အီးမေးလ်များ}}",
+ "echo-pref-tooltip-edit-user-talk": "တစ်ယောက်ယောက်က မိမိ၏ဆွေးနွေးစာမျက်နှာတွင် မက်ဆေ့တစ်စောင်ပို့ပါက သို့မဟုတ် အကြောင်းပြန်ပါက အသိပေးရန်။",
+ "echo-pref-tooltip-user-rights": "မိမိ၏အသုံးပြုသူအခွင့်ရေးကို တစ်ယောက်ယောက်မှ ပြောင်းလဲလိုက်ပါက အသိပေးရန်။",
+ "echo-pref-tooltip-emailuser": "တစ်ယောက်ယောက်က ကျွန်ုပ်အား အီးမေးလ်ပို့ပါက အသိပေးရန်။",
"notifications": "အသိပေးချက်များ",
"tooltip-pt-notifications-alert": "{{GENDER:|သင်၏}} သတိပေးချက်များ",
+ "tooltip-pt-notifications-notice": "{{GENDER:|သင်၏}} အသိပေးစာများ",
+ "echo-displaynotificationsconfiguration-notifications-by-category-header": "ကဏ္ဍအလိုက် အသိပေးချက်များ",
+ "echo-displaynotificationsconfiguration-available-notification-methods-header": "ခွင့်ပြုထားသော အသိပေးချက်နည်းလမ်းများ",
+ "echo-displaynotificationsconfiguration-enabled-default-new-users-legend": "အသုံးပြုသူ အသစ်များ",
+ "echo-displaynotificationsconfiguration-mandatory-notification-methods-header": "လိုအပ်သော အသိပေးချက်နည်းလမ်းများ",
"echo-specialpage": "အသိပေးချက်များ",
+ "echo-specialpage-pagination-numnotifications": "$1 {{PLURAL:$1|အသိပေးချက်|အသိပေးချက်များ}}",
+ "notificationsmarkread-legend": "အသိပေးချက်ကို ဖတ်ရှုပြီးဖြစ်ကြောင်း မှတ်သားရန်",
+ "echo-anon": "အသိပေးချက်များ လက်ခံရန် [$1 အကောင့်တစ်ခု ဖန်တီးပါ] သို့မဟုတ် [$2 အကောင့်ထဲဝင်ပါ]။",
+ "echo-none": "အသိပေးချက်များ မရှိပါ။",
+ "echo-more-info": "အချက်အလက် ပို၍",
+ "echo-feedback": "အကြံပေးရန်",
+ "echo-notification-placeholder": "အသိပေးချက်များ မရှိပါ။",
+ "echo-notification-loginrequired": "သင်၏အသိပေးချက်များကို ကြည့်ရန် အကောင့်ထဲသို့ဝင်ရပါမည်။",
+ "echo-notification-popup-loginrequired": "သင်၏အသိပေးချက်များကို ကြည့်ရှုရန် အကောင့်ထဲသို့ဝင်ပါ။",
+ "echo-notification-markasread": "ဖတ်ပြီးကြောင်း မှတ်သားရန်",
+ "echo-notification-markasunread": "မဖတ်ရသေးကြောင်း မှတ်သားရန်",
+ "echo-notification-markasread-tooltip": "ဖတ်ပြီးကြောင်း မှတ်သားရန်",
+ "echo-notification-more-options-tooltip": "ရွေးစရာများ ပို၍",
+ "notification-dynamic-actions-watch-confirmation": "{{GENDER:$3|သင်သည်}} ယခု \"$1\" စာမျက်နှာကို စောင့်ကြည့်နေသည်",
+ "notification-link-text-expand-all": "ချဲ့ရန်",
+ "notification-link-text-expand-alert-count": "{{PLURAL:$1|$1 သတိပေးချက်|$1 သတိပေးချက်များ}}ကို ကြည့်ရှုရန်",
+ "notification-link-text-expand-notice-count": "{{PLURAL:$1|$1 အသိပေးချက်|$1 အသိပေးချက်များ}}ကို ကြည့်ရှုရန်",
+ "notification-link-text-expand-all-count": "{{PLURAL:$1|$1 အသိပေးချက်|$1 အသိပေးချက်များ}}ကို ကြည့်ရှုရန်",
+ "notification-link-text-collapse-all": "ချုံ့ရန်",
+ "notification-link-text-view-message": "မက်ဆေ့ ကြည့်ရန်",
+ "notification-link-text-view-changes": "ပြောင်းလဲမှုများကို {{GENDER:$1|ကြည့်ရှုရန်}}",
+ "notification-link-text-view-page": "စာမျက်နှာ ကြည့်ရန်",
"notification-header-edit-user-talk": "<strong>{{GENDER:$3|သင်၏}} ဆွေးနွေးချက် စာမျက်နှာ</strong>တွင် စာလွှာတစ်ခုကို $1 {{GENDER:$2|ချန်ထားခဲ့သည်}}။",
"notification-header-edit-user-talk-with-section": "<strong>{{GENDER:$3|သင်၏}} ဆွေးနွေးချက်စာမျက်နှာ</strong>ရှိ \"<strong>$4</strong>\" တွင် စာလွှာတစ်ခုကို $1 {{GENDER:$2|ချန်ထားခဲ့သည်}}။",
+ "notification-compact-header-edit-user-talk": "$1 က {{GENDER:$3|သင့်}}ကို မက်ဆေ့တစ်စောင် {{GENDER:$2|ချန်ထားခဲ့သည်}}။",
+ "notification-compact-header-edit-user-talk-with-section": "$1 က {{GENDER:$3|သင့်}}ကို \"<strong>$4</strong>\"တွင် မက်ဆေ့တစ်စောင် {{GENDER:$2|ချန်ထားခဲ့သည်}}။",
+ "notification-link-text-what-links-here": "ဤစာမျက်နှာသို့ ချိတ်ဆက်ထားသော လင့်ခ်များအားလုံး",
+ "notification-compact-header-mention-failure-user-unknown": "<strong>အသုံးပြုသူအမည် မတည်ရှိပါ:</strong> $1",
+ "notification-header-welcome": "{{SITENAME}} က {{GENDER:$2|ကြိုဆိုပါတယ်}}၊ $1! ဒီနေရာကို {{GENDER:$2|သင်}}ရောက်လာတဲ့အတွက် ကျွန်ုပ်တို့ ဝမ်းသာပါတယ်။",
+ "notification-welcome-linktext": "ကြိုဆိုပါသည်",
"notification-header-thank-you-1-edit": "{{GENDER:$2|သင့်ရဲ့}} ပထမဆုံး တည်းဖြတ်မှုကို {{GENDER:$2|သင်}} ပြုလုပ်ခဲ့ပါပြီ၊ {{GENDER:$2|ကျေးဇူးတင်ပြီး}} ကြိုဆိုလိုက်ပါတယ်!",
+ "notification-header-thank-you-10-edit": "{{GENDER:$2|သင်}}သည် {{GENDER:$2|သင်၏}} ၁၀ ခုမြောက်တည်းဖြတ်မှုကို လုပ်ဆောင်ခဲ့သည်၊ ကျေးဇူး{{GENDER:$2|တင်ပါသည်}}၊ ဆက်လုပ်ပါ။",
+ "notification-header-thank-you-100-edit": "{{GENDER:$2|သင်}}သည် {{GENDER:$2|သင်၏}} ၁၀၀ ခုမြောက်တည်းဖြတ်မှုကို လုပ်ဆောင်ခဲ့သည်၊ ကျေးဇူးအများကြီး{{GENDER:$2|တင်ပါသည်}}။",
+ "notification-header-thank-you-1000-edit": "{{GENDER:$2|သင်}}သည် {{GENDER:$2|သင်၏}} ၁၀၀၀ ခုမြောက်တည်းဖြတ်မှုကို လုပ်ဆောင်ခဲ့သည်၊ ကြီးကျယ်သော\nပံ့ပိုးသူတစ်ဦးဖြစ်သည့်အတွက် ကျေးဇူး{{GENDER:$2|တင်ပါသည်}}။",
+ "notification-header-thank-you-10000-edit": "{{GENDER:$2|သင်}}သည် {{GENDER:$2|သင်၏}} တစ်သောင်းပြည့်မြောက် တည်းဖြတ်မှုကို လုပ်ဆေင်ခဲ့ပါပြီ၊ ကျေးဇူး{{GENDER:$2|တင်ပါသည်}}",
+ "notification-header-thank-you-100000-edit": "{{GENDER:$2|သင်}}သည် {{GENDER:$2|သင်၏}} ၁၀၀ ခုမြောက်တည်းဖြတ်မှုကို လုပ်ဆောင်ခဲ့သည်၊ အံ့ဩဖွယ်ပံ့ပိုးမှုအတွက်ကျေးဇူး{{GENDER:$2|တင်ပါသည်}}။",
+ "notification-header-thank-you-1000000-edit": "{{GENDER:$2|သင်}}သည် {{GENDER:$2|သင်၏}} တစ်သိန်းမြောက်တည်းဖြတ်မှုကို လုပ်ဆောင်ခဲ့သည်၊ အံ့အားသင့်စရာ\nပံပိုးမှုအတွက် ကျေးဇူး{{GENDER:$2|တင်ပါသည်}}။",
+ "notification-link-thank-you-edit": "{{GENDER:$1|သင်၏}} တည်းဖြတ်မှု",
+ "notification-link-text-view-edit": "တည်းဖြတ်မှုကို ကြည့်ရန်",
+ "notification-link-article-reminder": "စာမျက်နှာ ကြည့်ရန်",
"notification-header-reverted": "သင်၏ {{PLURAL:$4|<strong>$3</strong> ပေါ်ရှိ တည်းဖြတ်မှု|<strong>$3</strong> ပေါ်ရှိ တည်းဖြတ်မှုများ}}သည် {{GENDER:$2|နောက်ပြန် ပြန်ပြင်ခံခဲ့ရသည်}}။",
+ "notification-header-emailuser": "$1 က သင့်ကို အီးမေးလ်တစ်စောင် {{GENDER:$2|ပို့ခဲ့သည်}}။",
+ "notification-edit-talk-page-email-subject2": "$1 က {{SITENAME}}တွင် မက်ဆေ့တစ်စောင် {{GENDER:$1|ချန်ထားခဲ့သည်}}",
+ "notification-edit-talk-page-email-batch-body-with-section": "$1 က သင်၏ဆွေးနွေးချက်စာမျက်နှာရှိ \"$2\"တွင် မက်ဆေ့တစ်စောင် {{GENDER:$1|ချန်ထားခဲ့သည်}}",
+ "notification-page-linked-email-subject": "သင်ဖန်တီးခဲ့သော စာမျက်နှာတစ်ခုသည် {{SITENAME}}တွင် လင့်ခ်ချိတ်ခဲ့ပါသည်",
"notification-reverted-email-subject2": "{{SITENAME}} ရှိ သင့် {{PLURAL:$3|တည်းဖြတ်မှု|တည်းဖြတ်မှုများ}}ကို {{GENDER:$1|နောက်ပြန်ပြင်ခဲ့သည်}}",
+ "notification-user-rights-email-subject": "{{SITENAME}}တွင် သင်၏အသုံးပြုသူအခွင့်ရေး ပြောင်းလဲသွားပါသည်",
+ "notification-timestamp-ago-seconds": "{{PLURAL:$1|$1စက္ကန့်}}",
+ "notification-timestamp-ago-minutes": "{{PLURAL:$1|$1မိနစ်}}",
+ "notification-timestamp-ago-hours": "{{PLURAL:$1|$1နာရီ}}",
+ "notification-timestamp-ago-days": "{{PLURAL:$1|$1ရက်}}",
+ "notification-timestamp-ago-months": "{{PLURAL:$1|$1လ}}",
+ "notification-timestamp-ago-years": "{{PLURAL:$1|$1နှစ်}}",
+ "notification-timestamp-today": "ယနေ့",
+ "notification-timestamp-yesterday": "မနေ့",
+ "notification-inbox-filter-read": "ဖတ်ပြီး",
+ "notification-inbox-filter-unread": "မဖတ်ရသေး",
+ "notification-inbox-filter-all": "အားလုံး",
+ "echo-email-body-default": "{{SITENAME}} တွင် အသိပေးချက်တစ်ခု ရောက်နေသည်:\n\n$1",
+ "echo-email-html-footer-preference-link-text": "{{GENDER:$1|သင်၏}} ရွေးချယ်စရာများကို စစ်ဆေးရန်",
+ "echo-notification-alert-text-only": "အသိပေးချက်များ",
+ "echo-notification-notice-text-only": "ကြော်ငြာသင်ပုန်း",
"echo-overlay-link": "အသိပေးချက်များ အားလုံး",
- "echo-email-batch-link-text-view-all-notifications": "အသိပေးချက်များ အားလုံးကို ကြည့်ရန်"
+ "echo-overlay-title": "<b>အသိပေးချက်များ</b>",
+ "echo-mark-all-as-read": "အကုန်လုံး ဖတ်ရှုပြီးဖြစ်ကြောင်း မှတ်သားရန်",
+ "echo-date-today": "ယနေ့",
+ "echo-date-yesterday": "မနေ့",
+ "echo-email-batch-link-text-view-all-notifications": "အသိပေးချက်များ အားလုံးကို ကြည့်ရန်",
+ "notification-header-foreign-alert": "{{PLURAL:$5|အခြားဝီကီ|$5 အခြားဝီကီများ}}မှ သတိပေးချက်များ ပို၍",
+ "notification-header-foreign-notice": "{{PLURAL:$5|အခြားဝီကီ|$5 အခြားဝီကီများ}}မှ အသိပေးချက်များ ပို၍",
+ "notification-header-foreign-all": "{{PLURAL:$5|အခြားဝီကီ|$5 အခြားဝီကီများ}}မှ အသိပေးချက်များ ပို၍"
}
diff --git a/Echo/i18n/mzn.json b/Echo/i18n/mzn.json
index 9a62e60c..eb12f954 100644
--- a/Echo/i18n/mzn.json
+++ b/Echo/i18n/mzn.json
@@ -4,6 +4,5 @@
"محک"
]
},
- "tooltip-pt-notifications-alert": "{{GENDER:|شمه}} هشدارون",
- "tooltip-pt-notifications-message": "{{GENDER:|شمه}} پیغوم‌ئون"
+ "tooltip-pt-notifications-alert": "{{GENDER:|شمه}} هشدارون"
}
diff --git a/Echo/i18n/nap.json b/Echo/i18n/nap.json
index cf3e0365..a18e989e 100644
--- a/Echo/i18n/nap.json
+++ b/Echo/i18n/nap.json
@@ -5,7 +5,8 @@
"Chelin",
"Macofe",
"Catrope",
- "Nemo bis"
+ "Nemo bis",
+ "Ruthven"
]
},
"echo-desc": "Sistema pe' notificà ll'utente ncopp'a ll'evente e li mmasciate",
@@ -14,7 +15,6 @@
"prefs-displaynotifications": "Opziune 'e visualizzazione",
"prefs-echosubscriptions": "Famme sapè ncopp'a sti avvenimente",
"prefs-echocrosswiki": "Nutifiche cross-wiki",
- "prefs-newmessageindicator": "Barra d' 'e mmasciate nove",
"echo-pref-send-me": "Manna a mme:",
"echo-pref-send-to": "Manna a:",
"echo-pref-email-format": "Furmato e-mail:",
@@ -27,7 +27,6 @@
"echo-pref-email-format-html": "HTML",
"echo-pref-email-format-plain-text": "Testo nurmale",
"echo-pref-cross-wiki-notifications": "Fà veré 'e nnutifiche 'e ll'ati wiki",
- "echo-pref-new-message-indicator": "Fa verè nnicature d' 'e mmasciate ncopp' 'a paggena 'e chiacchiera cu na mmasciata dint' 'a barra 'e strumiente",
"echo-pref-beta-feature-cross-wiki-message": "Notifiche migliurate",
"echo-pref-beta-feature-cross-wiki-description": "Vide e sistema notifiche cchiù sempricemente. Chesto ncludesse notifiche cross-wiki, ca ve premmettessero 'e vedé mmasciate 'a n'ati wiki. (Pe' puté ricevere notifiche 'e na wiki data, avite appiccià attive 'e funziune beta ncopp'a chillu wiki.)",
"echo-learn-more": "Mpara 'e cchiù",
@@ -44,7 +43,7 @@
"echo-category-title-user-rights": "{{PLURAL:$1|Cagna 'o deritto|Cagna 'e deritte}} utente",
"echo-category-title-emailuser": "{{PLURAL:$1|Masciata mail 'a n'at'utente|Mmasciate mail 'a ll'at'utente}}",
"echo-pref-tooltip-edit-user-talk": "Famme nu tuzzuleo si coccheruno mannasse na mmasciata o rispunnesse ncopp' 'a paggena 'e chiacchiera mia.",
- "echo-pref-tooltip-article-linked": "Famme nu tuzzuleo si coccheruno se cullegasse a na paggena ca io avesse criato 'a na voce.",
+ "echo-pref-tooltip-article-linked": "Famme nu tuzzuleo si quaccheruno se cullegasse a na paggena ca avesse criato ij 'a n'ata voce.",
"echo-pref-tooltip-reverted": "Famme nu tuzzuleo si coccheruno annullasse nu cagnamiento ca io stesso aggio fatto, ausanno 'o strumiento 'e annulla.",
"echo-pref-tooltip-mention": "Famme nu tuzzuleo si coccheruno se cullegasse 'a paggena utente mia.",
"echo-pref-tooltip-mention-failure": "Fà 'a notifica si nun putesse mannà fòre na menziona a coccheruno.",
@@ -80,8 +79,6 @@
"echo-none": "Nun tiene notifiche.",
"echo-more-info": "Cchiù nfurmaziune",
"echo-feedback": "Commenti",
- "echo-popup-footer-special-page-invitation": "<strong>Pròva 'a paggena 'e Nutifiche fatta nuova.</strong> [$2 $1]",
- "echo-popup-footer-special-page-invitation-link": "Tutt' 'e caratteristiche e nuova faccia.",
"echo-api-failure": "Guastaje a arrepiglià notifiche.",
"echo-api-failure-cross-wiki": "L'acciesso a 'o dominio remoto è stato negato.",
"echo-notification-placeholder": "Nun ce stanno notifiche.",
@@ -140,9 +137,9 @@
"notification-welcome-linktext": "Bemmenute",
"notification-header-thank-you-1-edit": "{{GENDER:$2|Vuje}} appena avite fatto 'o primmo cagnamiento {{GENDER:$2|r' 'o vuosto}}; ve ringraziamm'assaje, e {{GENDER:$2|bemmenuto|bemmenuta}}!",
"notification-header-thank-you-10-edit": "{{GENDER:$2|Vuje}} appena avite fatt' 'o cagnamiento nummero diece {{GENDER:$2|r' 'o vuosto}}; ve ringraziamm'assaje assaje, pe' piacere facite semp'accussì!",
- "notification-header-thank-you-100-edit": "{{GENDER:$2|Vuje}} avite fatto mò mò nu centenaro 'e cagnamiente; site {{GENDER:$2|nu|na}} mostro, ve ringraziamm'assaje!",
+ "notification-header-thank-you-100-edit": "{{GENDER:$2|Vuje}} avite fatto mo mmo nu centenaro 'e cagnamiente; site {{GENDER:$2|nu|na}} mostro, ve ringraziamm'assaje!",
"notification-header-thank-you-1000-edit": "{{GENDER:$2|Vuje}} appena avite fatto nu migliar' 'e cuntribbute; Chest'è na cosa seria, nc'amma luvà 'o cappiello annanz'a {{GENDER:$2|nu cuntribbutore|na cuntribbutrice}} accussì {{GENDER:$2|gruoss|gross}}.",
- "notification-header-thank-you-10000-edit": "{{GENDER:$2|Vuje}} avite fatto mò mò ll'edizione {{GENDER:$2|vosta}} nummero diecimila; {{GENDER:$2|ve}} ringraziamm'assaje!",
+ "notification-header-thank-you-10000-edit": "{{GENDER:$2|Vuje}} avite fatto mo mmo ll'edizione {{GENDER:$2|vosta}} nummero diecemila; {{GENDER:$2|ve}} ringraziamm'assaje!",
"notification-header-thank-you-100000-edit": "{{GENDER:$2|Vuje}} appena avite fatto nu centenar' 'e migliar' 'e cuntribbute; marò, assaje! grazie a {{GENDER:$2|vuje}} pe' nu cuntribbuto accussì gruoss!",
"notification-header-thank-you-1000000-edit": "{{GENDER:$2|Vuje}} appena avite fatto nu melion' 'e cuntribbute; Nu melione! Oh anema ro Priatorio!!! (cit.) grazie a {{GENDER:$2|vuje}}!",
"notification-link-thank-you-edit": "'O cagnamiento {{GENDER:$1|vuosto}}",
@@ -151,7 +148,7 @@
"notification-header-emailuser": "$1 {{GENDER:$2|te mannaje}} na mmasciata email.",
"notification-edit-talk-page-email-subject2": "$1 {{GENDER:$1|t'ha lassato}} na mmasciata {{SITENAME}}",
"notification-edit-talk-page-email-batch-body-with-section": "$1 {{GENDER:$1|lassaje}} na mmasciata dint'a paggena 'e chiacchiera r' 'a vosta \"$2\".",
- "notification-page-linked-email-subject": "Na paggena c'avite criato fuje cullegata ncopp'a {{SITENAME}}",
+ "notification-page-linked-email-subject": "'A paggena ch'avite criato ha sito cullegata ncopp'a {{SITENAME}}",
"notification-reverted-email-subject2": "{{PLURAL:$3|'O cangiamento vuosto è stato|'E cangiamiente vuoste so'}} state {{GENDER:$1|annullate}} ncopp'a {{SITENAME}}",
"notification-mention-email-subject": "$1 {{GENDER:$1|facette 'o nomme}} {{GENDER:$2|vuosto}} ncopp'a {{SITENAME}}",
"notification-user-rights-email-subject": "'E deritte utente vuoste so' state cagnate ncopp'a {{SITENAME}}",
diff --git a/Echo/i18n/nb.json b/Echo/i18n/nb.json
index f24f0000..6a56f96a 100644
--- a/Echo/i18n/nb.json
+++ b/Echo/i18n/nb.json
@@ -18,7 +18,6 @@
"prefs-displaynotifications": "Visningsvalg",
"prefs-echosubscriptions": "Gi meg beskjed om disse hendelsene",
"prefs-echocrosswiki": "Interwikivarsler",
- "prefs-newmessageindicator": "Indikator for ny melding",
"prefs-blocknotificationslist": "Ignorerte brukere",
"echo-pref-send-me": "Send meg:",
"echo-pref-send-to": "Send til:",
@@ -32,8 +31,7 @@
"echo-pref-email-format-html": "HTML",
"echo-pref-email-format-plain-text": "Ren tekst",
"echo-pref-cross-wiki-notifications": "Vis beskjeder fra andre wikier",
- "echo-pref-notifications-blacklist": "Ikke vis varsler fra disse brukerne. ([[mw:Help:Notifications#mute|lær mer]])",
- "echo-pref-new-message-indicator": "Vis indikator for nye meldinger i verktøylinjen min",
+ "echo-pref-notifications-blacklist": "Ikke vis varsler fra disse brukerne. ([[mw:Special:MyLanguage/Help:Notifications#mute|lær mer]])",
"echo-pref-beta-feature-cross-wiki-message": "Utvidete beskjeder",
"echo-pref-beta-feature-cross-wiki-description": "Vis og organiser beskjeder på en enklere måte. Inkluder beskjeder fra andre wikier. (For å motta beskjeder fra en gitt wiki må du aktivere betafunksjonen på den wikien.)",
"echo-learn-more": "Lær mer",
@@ -42,20 +40,20 @@
"echo-category-title-edit-user-talk": "{{PLURAL:$1|Melding|Meldinger}} på diskusjonsside",
"echo-category-title-article-linked": "{{PLURAL:$1|Sidelenke|Sidelenker}}",
"echo-category-title-reverted": "Tilbakestilling av {{PLURAL:$1|redigering|redigeringer}}",
- "echo-category-title-mention": "{{PLURAL:$1|Omtale|Omtaler}}",
- "echo-category-title-mention-failure": "{{PLURAL:$1|Mislykket omtale|Mislykkede omtaler}}",
- "echo-category-title-mention-success": "{{PLURAL:$1|Vellykket omtale|Vellykkede omtaler}}",
+ "echo-category-title-mention": "{{PLURAL:$1|Nevning|Nevninger}}",
+ "echo-category-title-mention-failure": "{{PLURAL:$1|Mislykket nevning|Mislykkede nevninger}}",
+ "echo-category-title-mention-success": "{{PLURAL:$1|Vellykket nevning|Vellykkede nevninger}}",
"echo-category-title-other": "{{PLURAL:$1|Annet}}",
"echo-category-title-system": "{{PLURAL:$1|System}}",
"echo-category-title-user-rights": "{{PLURAL:$1|Endring|Endringer}} i brukerrettigheter",
"echo-category-title-emailuser": "Epost fra {{PLURAL:$1|annen bruker|andre brukere}}",
"echo-category-title-article-reminder": "{{PLURAL:$1|Sidepåminnelse|Sidepåminnelser}}",
"echo-pref-tooltip-edit-user-talk": "Gi meg beskjed når noen skriver en melding eller svarer på diskusjonssiden min.",
- "echo-pref-tooltip-article-linked": "Varsle meg når noen lenker til en side jeg har opprettet fra en annen side.",
+ "echo-pref-tooltip-article-linked": "Gi meg beskjed når noen lenker til en side jeg har opprettet fra en annen side.",
"echo-pref-tooltip-reverted": "Gi meg beskjed når noen tilbakestiller en av redigeringene mine.",
"echo-pref-tooltip-mention": "Gi meg beskjed når noen lenker til brukersiden min.",
- "echo-pref-tooltip-mention-failure": "Gi meg beskjed når omtale jeg forsøker å sende ut ikke blir sendt.",
- "echo-pref-tooltip-mention-success": "Gi meg beskjed når jeg sender ut omtale til noen.",
+ "echo-pref-tooltip-mention-failure": "Gi meg beskjed når jeg forsøker å nevne noen, men det ikke fungerer.",
+ "echo-pref-tooltip-mention-success": "Gi meg beskjed når jeg lenker til noens brukerside slik at de får beskjed om at de har blitt nevnt.",
"echo-pref-tooltip-user-rights": "Gi meg beskjed når noen endrer brukerrettighetene mine.",
"echo-pref-tooltip-emailuser": "Gi meg beskjed når noen sender meg en e-post.",
"echo-pref-tooltip-article-reminder": "Varsle meg om denne siden når jeg spør.",
@@ -69,8 +67,8 @@
"echo-displaynotificationsconfiguration-sorting-by-section-header": "Sortering av typer",
"echo-displaynotificationsconfiguration-sorting-by-section-legend": "Hvilken seksjon hver beskjedtype er sortert i",
"echo-displaynotificationsconfiguration-available-notification-methods-header": "Tillatte beskjedmetoder",
- "echo-displaynotificationsconfiguration-available-notification-methods-by-category-legend": "Hvilken beskjedmetoder er støttet for hver kategori",
- "echo-displaynotificationsconfiguration-available-notification-methods-by-type-legend": "Hvilken beskjedmetoder er støttet for hver type; gjelder bare typer innen kategorier som er skjult fra innstillinger",
+ "echo-displaynotificationsconfiguration-available-notification-methods-by-category-legend": "Hvilke beskjedmetoder er støttet for hver kategori",
+ "echo-displaynotificationsconfiguration-available-notification-methods-by-type-legend": "Hvilke beskjedmetoder er støttet for hver type; gjelder bare typer innen kategorier som er skjult fra innstillinger",
"echo-displaynotificationsconfiguration-enabled-default-header": "Aktivert som standard",
"echo-displaynotificationsconfiguration-enabled-default-existing-users-legend": "Eksisterende brukere",
"echo-displaynotificationsconfiguration-enabled-default-new-users-legend": "Nye brukere",
@@ -88,8 +86,6 @@
"echo-none": "Du har ingen beskjeder.",
"echo-more-info": "Mer informasjon",
"echo-feedback": "Tilbakemelding",
- "echo-popup-footer-special-page-invitation": "<strong>Prøv den nye siden for beskjeder.</strong> [$2 $1]",
- "echo-popup-footer-special-page-invitation-link": "Nytt utseende og ny funksjonalitet.",
"echo-api-failure": "Kunne ikke hente beskjeder på grunn av en feil.",
"echo-api-failure-cross-wiki": "Tilgang til det eksterne domenet ble avvist.",
"echo-notification-placeholder": "Det er ingen beskjeder.",
@@ -112,40 +108,43 @@
"notification-link-text-expand-all-count": "Vis {{PLURAL:$1|beskjeden|$1 beskjedene}}",
"notification-link-text-collapse-all": "Skjul",
"notification-link-text-view-message": "Vis melding",
- "notification-link-text-view-mention": "Vis omtale",
- "notification-link-text-view-mention-failure": "{{PLURAL:$1|Vis omtale|Vis omtaler}}",
+ "notification-link-text-view-mention": "Vis hvor jeg ble nevnt",
+ "notification-link-text-view-mention-failure": "{{PLURAL:$1|Vis nevning|Vis nevninger}}",
"notification-link-text-view-changes": "{{GENDER:$1|Vis}} endringer",
"notification-link-text-view-page": "Vis side",
"notification-header-edit-user-talk": "$1 {{GENDER:$2|skrev}} en melding på <strong>diskusjonssiden {{GENDER:$3|din}}</strong>.",
"notification-header-edit-user-talk-with-section": "$1 {{GENDER:$2|skrev}} en melding under «<strong>$4</strong>» på <strong>diskusjonssiden {{GENDER:$3|din}}</strong>.",
+ "notification-compact-header-edit-user-talk": "$1 {{GENDER:$2|la}} igjen en beskjed til {{GENDER:$3|deg}}.",
+ "notification-compact-header-edit-user-talk-with-section": "$1 {{GENDER:$2|la}} igjen en beskjed til {{GENDER:$3|deg}} under «<strong>$4</strong>».",
"notification-header-page-linked": "<strong>$3</strong> ble lenket til fra <strong>$4</strong>.",
"notification-compact-header-page-linked": "Lenket fra <strong>$1</strong>.",
"notification-bundle-header-page-linked": "<strong>$3</strong> ble lenket til fra {{PLURAL:$5||$5 sider|100=99+ andre sider}}.",
"notification-header-article-reminder": "En side {{GENDER:$2|du}} har bedt om varsler for finnes på <strong>$3</strong>",
"notification-link-text-what-links-here": "Alle lenker til denne siden",
- "notification-header-mention-other": "$1 {{GENDER:$2|omtalte}} {{GENDER:$3|deg}} i «<strong>$5</strong>» på <strong>$4</strong>.",
- "notification-header-mention-other-nosection": "$1 {{GENDER:$2|omtalte}} {{GENDER:$3|deg}} på <strong>$4</strong>.",
- "notification-header-mention-user-talkpage-v2": "$1 {{GENDER:$2|omtalte}} {{GENDER:$3|deg}} i «<strong>$6</strong>» på <strong>brukerdiskusjonssiden {{GENDER:$5|til}} $4</strong>.",
- "notification-header-mention-user-talkpage-nosection": "$1 {{GENDER:$2|omtalte}} {{GENDER:$3|deg}} på <strong>brukerdiskusjonssiden {{GENDER:$5|til}} $4</strong>.",
- "notification-header-mention-agent-talkpage": "$1 {{GENDER:$2|omtalte}} {{GENDER:$3|deg}} i «<strong>$4</strong>» på <strong>diskusjonssiden {{GENDER:$2|sin}}</strong>.",
- "notification-header-mention-agent-talkpage-nosection": "$1 {{GENDER:$2|omtalte}} {{GENDER:$3|deg}} på <strong>diskusjonssiden {{GENDER:$2|sin}}</strong>.",
- "notification-header-mention-article-talkpage": "$1 {{GENDER:$2|omtalte}} {{GENDER:$3|deg}} i «<strong>$5</strong>» på diskusjonssiden til <strong>$4</strong>.",
- "notification-header-mention-article-talkpage-nosection": "$1 {{GENDER:$2|omtalte}} {{GENDER:$3|deg}} på diskusjonssiden til <strong>$4</strong>.",
- "notification-header-mention-failure-user-unknown": "Omtalen {{GENDER:$2|din}} av <strong>$3</strong> ble ikke sendt fordi brukeren ikke ble funnet.",
- "notification-header-mention-failure-user-anonymous": "Omtalen {{GENDER:$2|din}} av <strong>$3</strong> ble ikke sendt fordi brukeren er anonym.",
- "notification-header-mention-failure-too-many": "Omtalene {{GENDER:$2|dine}} ble ikke sendt fordi antallet {{PLURAL:$3|mottakere}} oversteg grensen på $3.",
- "notification-header-mention-failure-bundle": "{{PLURAL:$3|En omtale|$3 omtaler}} {{GENDER:$2|du gjorde}} på diskusjonssiden <strong>$4</strong> {{PLURAL:$3|kunne}} ikke sendes.",
+ "notification-header-mention-other": "$1 {{GENDER:$2|nevnte}} {{GENDER:$3|deg}} i «<strong>$5</strong>» på <strong>$4</strong>.",
+ "notification-header-mention-other-nosection": "$1 {{GENDER:$2|nevnte}} {{GENDER:$3|deg}} på <strong>$4</strong>.",
+ "notification-header-mention-user-talkpage-v2": "$1 {{GENDER:$2|nevnte}} {{GENDER:$3|deg}} i «<strong>$6</strong>» på <strong>brukerdiskusjonssiden {{GENDER:$5|til}} $4</strong>.",
+ "notification-header-mention-user-talkpage-nosection": "$1 {{GENDER:$2|nevnte}} {{GENDER:$3|deg}} på <strong>brukerdiskusjonssiden {{GENDER:$5|til}} $4</strong>.",
+ "notification-header-mention-agent-talkpage": "$1 {{GENDER:$2|nevnte}} {{GENDER:$3|deg}} i «<strong>$4</strong>» på <strong>diskusjonssiden {{GENDER:$2|sin}}</strong>.",
+ "notification-header-mention-agent-talkpage-nosection": "$1 {{GENDER:$2|nevnte}} {{GENDER:$3|deg}} på <strong>diskusjonssiden {{GENDER:$2|sin}}</strong>.",
+ "notification-header-mention-article-talkpage": "$1 {{GENDER:$2|nevnte}} {{GENDER:$3|deg}} i «<strong>$5</strong>» på diskusjonssiden til <strong>$4</strong>.",
+ "notification-header-mention-article-talkpage-nosection": "$1 {{GENDER:$2|nevnte}} {{GENDER:$3|deg}} på diskusjonssiden til <strong>$4</strong>.",
+ "notification-header-mention-failure-user-unknown": "Brukeren <strong>$3</strong>, som du {{GENDER:$2|du}} prøvde å nevne, ble ikke funnet.",
+ "notification-header-mention-failure-user-anonymous": "Brukeren <strong>$3</strong>, som {{GENDER:$2|du}} prøvde å nevne, er anonym.",
+ "notification-header-mention-failure-too-many": "{{GENDER:$2|Du}} prøvde å nevne mer enn $3 {{PLURAL:$3|bruker|brukere}}. Overskytende nevninger ble ikke sendt.",
+ "notification-header-mention-failure-bundle": "{{PLURAL:$3|Kunne}} ikke sende {{PLURAL:$3|en nevning|$3 nevninger}} {{GENDER:$2|du prøvde å gjøre}} på diskusjonssiden <strong>$4</strong>.",
"notification-compact-header-mention-failure-user-unknown": "<strong>Brukernavnet eksisterer ikke:</strong> $1",
- "notification-compact-header-mention-failure-user-anonymous": "<strong>IP-er kan ikke omtales:</strong> $1",
- "notification-header-mention-success": "Omtalen {{GENDER:$2|din}} av <strong>$3</strong> ble sendt.",
- "notification-header-mention-success-bundle": "{{PLURAL:$3|En omtale|$3 omtaler}} {{GENDER:$2|du gjorde}} på diskusjonssiden <strong>$4</strong> {{PLURAL:$3|ble}} sendt.",
- "notification-compact-header-mention-success": "<strong>{{GENDER:$2|Du omtalte}}:</strong> $3",
- "notification-header-mention-status-bundle": "{{PLURAL:$3|En beskjed|$3 beskjeder}} om omtaler {{GENDER:$2|du gjorde}} på diskusjonssiden <strong>$4</strong>: {{PLURAL:$5|$5 ble ikke sendt}}, {{PLURAL:$6|$6 ble sendt}}.",
+ "notification-compact-header-mention-failure-user-anonymous": "<strong>Kan ikke nevne IP-adresser:</strong> $1",
+ "notification-header-mention-success": "<strong>$3</strong> har fått beskjed om at {{GENDER:$2|du}} nevnte vedkommende.",
+ "notification-header-mention-success-bundle": "{{GENDER:$2|Du}} {{PLURAL:$3|nevnte}} {{PLURAL:$3|en bruker|$3 brukere}} på diskusjonssiden <strong>$4</strong>.",
+ "notification-compact-header-mention-success": "<strong>{{GENDER:$2|Du nevnte}}:</strong> $3",
+ "notification-header-mention-status-bundle": "{{PLURAL:$3|En beskjed|$3 beskjeder}} om nevninger {{GENDER:$2|du gjorde}} på diskusjonssiden <strong>$4</strong>: {{PLURAL:$5|$5 ble ikke sendt}}, {{PLURAL:$6|$6 ble sendt}}.",
"notification-header-user-rights-add-only": "Brukerrettighetene {{GENDER:$4|dine}} har blitt {{GENDER:$1|endret}}. Du er nå medlem av: $2.",
"notification-header-user-rights-remove-only": "Brukerrettighetene {{GENDER:$4|dine}} har blitt {{GENDER:$1|endret}}. Du er ikke lengre medlem av: $2.",
"notification-header-user-rights-add-and-remove": "Brukerrettighetene {{GENDER:$6|dine}} har blitt {{GENDER:$1|endret}}. Du er nå medlem av: $2. Du er ikke lengre medlem av: $4.",
"notification-header-user-rights-expiry-change": "Utløpstiden for medlemskapet {{GENDER:$4|ditt}} i følgende {{PLURAL:$3|gruppe|grupper}} har blitt {{GENDER:$1|endret}}: $2.",
"notification-header-welcome": "{{GENDER:$2|Velkommen}} til {{SITENAME}}, $1! Vi er glade for at {{GENDER:$2|du}} er her.",
+ "notification-header-mention-summary": "$1 {{GENDER:$2|nevnte}} {{GENDER:$3|deg}} i en redigeringsforklaring på <strong>$4</strong>.",
"notification-welcome-linktext": "Velkommen",
"notification-header-thank-you-1-edit": "{{GENDER:$2|Du}} har gjort {{GENDER:$2|din}} første redigering. {{GENDER:$2|Takk}} – og velkommen hit!",
"notification-header-thank-you-10-edit": "{{GENDER:$2|Du}} har gjort {{GENDER:$2|din}} tiende redigering. {{GENDER:$2|Takk}}, fortsett gjerne!",
@@ -163,9 +162,9 @@
"notification-edit-talk-page-email-batch-body-with-section": "$1 {{GENDER:$1|skrev}} en melding til deg under overskriften «$2» på diskussjonssiden din.",
"notification-page-linked-email-subject": "En side du opprettet ble lenket til på {{SITENAME}}",
"notification-reverted-email-subject2": "{{PLURAL:$3|Redigeringen din|Redigeringene dine}} på {{SITENAME}} ble {{GENDER:$1|tilbakestilt}}",
- "notification-mention-email-subject": "$1 {{GENDER:$1|omtalte}} {{GENDER:$2|deg}} på {{SITENAME}}",
+ "notification-mention-email-subject": "$1 {{GENDER:$1|nevnte}} {{GENDER:$2|deg}} på {{SITENAME}}",
"notification-user-rights-email-subject": "Brukerrettighetene dine ble endret på {{SITENAME}}",
- "notification-timestamp-ago-seconds": "{{PLURAL:$1|$1 s}}",
+ "notification-timestamp-ago-seconds": "{{PLURAL:$1|$1s}}",
"notification-timestamp-ago-minutes": "{{PLURAL:$1|$1m}}",
"notification-timestamp-ago-hours": "{{PLURAL:$1|$1t}}",
"notification-timestamp-ago-days": "{{PLURAL:$1|$1d}}",
@@ -179,9 +178,9 @@
"echo-email-body-default": "Du har en ny beskjed på {{SITENAME}}:\n\n$1",
"echo-email-footer-default-html": "Du kan styre hva slags eposter vi sender deg i <a href=\"$2\" style=\"text-decoration:none; color: #3868B0;\">innstillingene dine</a>.<br />\n$1",
"echo-email-footer-default": "$2\n\nFor å styre hva slags e-poster vi sender deg, sjekk innstillingene dine: {{canonicalurl:{{#special:Preferences}}#mw-prefsection-echo}}\n\n$1",
- "echo-email-plain-footer": "For å kontrollere hvilke eposter vi sender {{GENDER:$1|deg}}, sjekk innstillingene dine:",
+ "echo-email-plain-footer": "For å styre hvilke eposter vi sender {{GENDER:$1|deg}}, sjekk innstillingene dine:",
"echo-email-html-footer-preference-link-text": "sjekk innstillingene {{GENDER:$1|dine}}",
- "echo-email-html-footer-with-link": "For å kontrollere hvilke eposter vi sender {{GENDER:$2|deg}}, $1.",
+ "echo-email-html-footer-with-link": "For å styre hvilke eposter vi sender {{GENDER:$2|deg}}, $1.",
"echo-notification-alert": "{{PLURAL:$1|Varsel ($1)|Varsler ($1)|100=Varsler (99+)}}",
"echo-notification-notice": "{{PLURAL:$1|Notis ($1)|Notiser ($1)|100=Notiser (99+)}}",
"echo-notification-alert-text-only": "Varsler",
@@ -198,8 +197,8 @@
"notification-bundle-header-edit-user-talk-v2": "{{PLURAL:$1|Én ny melding|$1 nye meldinger|100=99+ nye meldinger}} på <strong>diskusjonssiden {{GENDER:$3|din}}</strong>.",
"echo-email-batch-subject-daily": "Du har {{PLURAL:$2|en ny beskjed|nye beskjeder}} på {{SITENAME}} i dag",
"echo-email-batch-subject-weekly": "Du har {{PLURAL:$2|en ny beskjed|nye beskjeder}} på {{SITENAME}} denne uka",
- "echo-email-batch-body-intro-daily": "Hei $1,\nHer er et sammendrag av dagens aktivitet på {{SITENAME}} for deg",
- "echo-email-batch-body-intro-weekly": "Hei $1,\nHer er et sammendrag av ukas aktivitet på {{SITENAME}} for deg",
+ "echo-email-batch-body-intro-daily": "Hei $1\nHer er et sammendrag av dagens aktivitet på {{SITENAME}} for deg.",
+ "echo-email-batch-body-intro-weekly": "Hei $1\nHer er et sammendrag av ukas aktivitet på {{SITENAME}} for deg.",
"echo-email-batch-link-text-view-all-notifications": "Vis alle beskjeder",
"notification-header-foreign-alert": "Flere varsler fra {{PLURAL:$5|én annen wiki|$5 andre wikier}}",
"notification-header-foreign-notice": "Flere notiser fra {{PLURAL:$5|en annen wiki|$5 andre wikier}}",
diff --git a/Echo/i18n/nds-nl.json b/Echo/i18n/nds-nl.json
index c39410d9..6241f00b 100644
--- a/Echo/i18n/nds-nl.json
+++ b/Echo/i18n/nds-nl.json
@@ -10,7 +10,6 @@
"prefs-displaynotifications": "Weergave-instellingen",
"prefs-echosubscriptions": "Stel mien op de heugte van disse gebeurtenissen",
"prefs-echocrosswiki": "Meldingen van aandere wiki's",
- "prefs-newmessageindicator": "Melding nieje berichten",
"echo-pref-send-me": "Stuur mien:",
"echo-pref-send-to": "Sturen naor:",
"echo-pref-email-format": "Netpostopmaak:",
@@ -23,10 +22,9 @@
"echo-pref-email-format-html": "HTML",
"echo-pref-email-format-plain-text": "Tekste zonder opmaak",
"echo-pref-cross-wiki-notifications": "Meldingen van aandere wiki's laoten zien",
- "echo-pref-new-message-indicator": "Laot meldingen over berichten op mien overlegzied in mien warkbalke zien",
"echo-learn-more": "Meer lezen",
"echo-log": "Openbaor logboek",
- "echo-new-messages": "Je hebben nieje berichten",
+ "echo-new-messages": "Jy hebben nye berichten",
"echo-category-title-edit-user-talk": "Bericht{{PLURAL:$1||en}} op mien overlegzied",
"echo-category-title-article-linked": "Ziedverwiezing{{PLURAL:$1||en}}",
"echo-category-title-reverted": "Bewarking{{PLURAL:$1||en}} weerummedreid",
@@ -49,8 +47,6 @@
"echo-none": "Je hebben gien meldingen.",
"echo-more-info": "Meer informasie",
"echo-feedback": "Kommentaar",
- "echo-popup-footer-special-page-invitation": "<strong>Probeer de herontwörpen meldingenzied.</strong> [$2 $1]",
- "echo-popup-footer-special-page-invitation-link": "n Niej uterlik en nieje funksies.",
"echo-api-failure": "Kan meldingen niet ophaolen.",
"echo-notification-placeholder": "Der bin gien berichten.",
"echo-notification-markasread": "Markeer as elezen",
diff --git a/Echo/i18n/ne.json b/Echo/i18n/ne.json
index c175e424..e915ac5a 100644
--- a/Echo/i18n/ne.json
+++ b/Echo/i18n/ne.json
@@ -14,7 +14,6 @@
"prefs-emailsettings": "इमेल विकल्पहरू",
"prefs-displaynotifications": "प्रदर्शन विकल्पहरू",
"prefs-echosubscriptions": "निम्न घटनाहरूबारे मलाई जानकारी गराउने",
- "prefs-newmessageindicator": "नयाँ जानकारी सुचक",
"echo-pref-send-me": "मलाई पठाउने:",
"echo-pref-send-to": "पठाउने:",
"echo-pref-email-format": "इमेल ढाँचा :",
@@ -26,7 +25,6 @@
"echo-pref-email-frequency-weekly": "साप्ताहिक जानकारीको सारांश",
"echo-pref-email-format-html": "HTML",
"echo-pref-email-format-plain-text": "साधारण पाठ",
- "echo-pref-new-message-indicator": "टुलबारमा मेरो वार्तालाप पृष्ठको सन्देश पनि देखाउने",
"echo-learn-more": "थप जानकारी",
"echo-new-messages": "तपाईंको लागि नयाँ सन्देशहरू छन्",
"echo-category-title-edit-user-talk": "वार्तालाप पृष्ठ {{PLURAL:$1|सन्देश|सन्देशहरू}}",
diff --git a/Echo/i18n/nl.json b/Echo/i18n/nl.json
index 7f113018..574c62f0 100644
--- a/Echo/i18n/nl.json
+++ b/Echo/i18n/nl.json
@@ -32,7 +32,6 @@
"prefs-displaynotifications": "Weergaveopties",
"prefs-echosubscriptions": "Informeer mij over deze gebeurtenissen",
"prefs-echocrosswiki": "Meldingen van andere wiki's",
- "prefs-newmessageindicator": "Melding nieuwe berichten",
"prefs-blocknotificationslist": "Genegeerde gebruikers",
"echo-pref-send-me": "Stuur mij:",
"echo-pref-send-to": "Verzenden naar:",
@@ -46,8 +45,7 @@
"echo-pref-email-format-html": "HTML",
"echo-pref-email-format-plain-text": "Tekst zonder opmaak",
"echo-pref-cross-wiki-notifications": "Meldingen van andere wiki's weergeven",
- "echo-pref-notifications-blacklist": "Toon geen meldingen van deze gebruikers. ([[mw:Help:Notifications#mute|Meer lezen]])",
- "echo-pref-new-message-indicator": "Overlegpaginaberichtenindicator in mijn werkbalk weergeven",
+ "echo-pref-notifications-blacklist": "Toon geen meldingen van deze gebruikers. ([[mw:Special:MyLanguage/Help:Notifications#mute|Meer lezen]])",
"echo-pref-beta-feature-cross-wiki-message": "Uitgebreide meldingen",
"echo-pref-beta-feature-cross-wiki-description": "Bekijk en organiseer uw meldingen efficiënter. U ziet ook meldingen over andere wiki's. (Om meldingen van andere wiki's te ontvangen op een gegeven wiki, moet u de beta-functie op de desbetreffende wiki aanzetten.)",
"echo-learn-more": "Meer lezen",
@@ -55,21 +53,21 @@
"echo-new-messages": "U hebt nieuwe berichten",
"echo-category-title-edit-user-talk": "{{PLURAL:$1|Bericht|Berichten}} op mijn overlegpagina",
"echo-category-title-article-linked": "Paginakoppeling{{PLURAL:$1||en}}",
- "echo-category-title-reverted": "Bewerking{{PLURAL:$1||en}} teruggedraaid",
- "echo-category-title-mention": "{{PLURAL:$1|Genoemd}}",
+ "echo-category-title-reverted": "Teruggedraaide {{PLURAL:$1|bewerking|bewerkingen}}",
+ "echo-category-title-mention": "{{PLURAL:$1|Vermelding|Vermeldingen}}",
"echo-category-title-mention-failure": "Mislukte vermelding{{PLURAL:$1||en}}",
"echo-category-title-mention-success": "Succesvolle vermelding{{PLURAL:$1||en}}",
"echo-category-title-other": "{{PLURAL:$1|Overige}}",
"echo-category-title-system": "{{PLURAL:$1|Systeem}}",
"echo-category-title-user-rights": "{{PLURAL:$1|Gebruikersrechtenwijziging|Gebruikersrechtenwijzigingen}}",
- "echo-category-title-emailuser": "{{PLURAL:$1|E-mail van een andere gebruiker|E-mails van andere gebruikers}}",
- "echo-category-title-article-reminder": "Pagina {{PLURAL:$1|herinnering|herinneringen}}",
+ "echo-category-title-emailuser": "{{PLURAL:$1|E-mail van andere gebruiker|E-mails van andere gebruikers}}",
+ "echo-category-title-article-reminder": "{{PLURAL:$1|Paginaherinnering|Paginaherinneringen}}",
"echo-pref-tooltip-edit-user-talk": "Informeer mij wanneer iemand een bericht of antwoord op mijn overlegpagina plaatst.",
"echo-pref-tooltip-article-linked": "Informeer mij wanneer iemand een koppeling aanbrengt naar een pagina die ik heb aangemaakt.",
"echo-pref-tooltip-reverted": "Informeer mij wanneer iemand een bewerking van mij terugdraait met behulp van \"ongedaan maken\" of \"terugdraaien\".",
"echo-pref-tooltip-mention": "Informeer mij wanneer iemand een koppeling naar mijn gebruikerspagina plaatst.",
- "echo-pref-tooltip-mention-failure": "Houd me op de hoogte wanneer ik iemand niet kon vermelden.",
- "echo-pref-tooltip-mention-success": "Houd me op de hoogte wanneer ik iemand vermeld.",
+ "echo-pref-tooltip-mention-failure": "Informeer mij wanneer mijn vermelding van iemand niet verzonden kon worden.",
+ "echo-pref-tooltip-mention-success": "Informeer mij wanneer mijn vermelding van iemand is verzonden.",
"echo-pref-tooltip-user-rights": "Informeer mij wanneer iemand mijn gebruikersrechten wijzigt.",
"echo-pref-tooltip-emailuser": "Informeer mij wanneer iemand mij een e-mail stuurt.",
"echo-pref-tooltip-article-reminder": "Herinner me aan deze pagina wanneer ik er om vraag.",
@@ -102,8 +100,6 @@
"echo-none": "U hebt geen meldingen.",
"echo-more-info": "Meer info",
"echo-feedback": "Terugkoppeling",
- "echo-popup-footer-special-page-invitation": "<strong>Probeer de herontworpen meldingenpagina.</strong> [$2 $1]",
- "echo-popup-footer-special-page-invitation-link": "Een compleet nieuw uiterlijk en nieuwe functies.",
"echo-api-failure": "Kan meldingen niet ophalen.",
"echo-api-failure-cross-wiki": "Toegang tot het externe domein is geweigerd.",
"echo-notification-placeholder": "Er zijn geen meldingen.",
@@ -132,6 +128,8 @@
"notification-link-text-view-page": "Pagina bekijken",
"notification-header-edit-user-talk": "$1 heeft een bericht {{GENDER:$2|achtergelaten}} op <strong>{{GENDER:$3|uw}} overlegpagina</strong>.",
"notification-header-edit-user-talk-with-section": "$1 {{GENDER:$2|heeft}} een bericht op <strong>{{GENDER:$3|uw}} overlegpagina</strong> achtergelaten onder \"<strong>$4</strong>\".",
+ "notification-compact-header-edit-user-talk": "$1 heeft een bericht voor {{GENDER:$3|u}} {{GENDER:$2|achtergelaten}}.",
+ "notification-compact-header-edit-user-talk-with-section": "$1 heeft een bericht voor {{GENDER:$3|u}} {{GENDER:$2|achtergelaten}} in \"<strong>$4</strong>\".",
"notification-header-page-linked": "Er is een koppeling gemaakt van <strong>$4</strong> naar <strong>$3</strong>.",
"notification-compact-header-page-linked": "Koppeling van <strong>$1</strong>.",
"notification-bundle-header-page-linked": "Er zijn koppelingen gemaakt {{PLURAL:$5|één andere pagina|$5 andere pagina's|100=99+ andere pagina's}} naar <strong>$3</strong>.",
@@ -143,7 +141,7 @@
"notification-header-mention-user-talkpage-nosection": "$1 heeft {{GENDER:$3|u}} {{GENDER:$2|genoemd}} op de <strong>overlegpagina {{GENDER:$5|van}} $4</strong>.",
"notification-header-mention-agent-talkpage": "$1 heeft {{GENDER:$3|u}} {{GENDER:$2|genoemd}} op <strong>{{GENDER:$2|zijn|haar|zijn/haar}} overlegpagina</strong> onder \"<strong>$4</strong>\".",
"notification-header-mention-agent-talkpage-nosection": "$1 heeft {{GENDER:$3|u}} {{GENDER:$2|genoemd}} op <strong>{{GENDER:$2|zijn|haar|zijn/haar}} overlegpagina</strong>.",
- "notification-header-mention-article-talkpage": "$1 heeft {{GENDER:$3|u}} {{GENDER:$2|genoemd}} op de <strong>overlegpagina van $4</strong> onder \"<strong>$5</strong>\".",
+ "notification-header-mention-article-talkpage": "$1 heeft {{GENDER:$3|u}} {{GENDER:$2|genoemd}} op de overlegpagina van <strong>$4</strong> onder \"<strong>$5</strong>\".",
"notification-header-mention-article-talkpage-nosection": "$1 heeft {{GENDER:$3|u}} {{GENDER:$2|genoemd}} op de overlegpagina van <strong>$4</strong>.",
"notification-header-mention-failure-user-unknown": "{{GENDER:$2|Uw}} vermelding van <strong>$3</strong> werd niet verzonden, omdat de gebruiker niet gevonden werd.",
"notification-header-mention-failure-user-anonymous": "{{GENDER:$2|Uw}} vermelding van <strong>$3</strong> werd niet verzonden, omdat de gebruiker anoniem is.",
@@ -160,6 +158,7 @@
"notification-header-user-rights-add-and-remove": "{{GENDER:$6|Uw}} gebruikersrechten zijn {{GENDER:$1|veranderd}}. U bent nu lid van $2 en niet langer meer lid van $4.",
"notification-header-user-rights-expiry-change": "De verlooptijd van {{GENDER:$4|uw}} lidmaatschap in de volgende {{PLURAL:$3|groep|groepen}} is {{GENDER:$1|gewijzigd}}: $2",
"notification-header-welcome": "{{GENDER:$2|Welkom}} op {{SITENAME}}, $1! We zijn blij dat {{GENDER:$2|u}} er bent.",
+ "notification-header-mention-summary": "$1 heeft {{GENDER:$2|u}} {{GENDER:$3|genoemd}} in de bewerkingssamenvatting van <strong>$4</strong>.",
"notification-welcome-linktext": "Welkom",
"notification-header-thank-you-1-edit": "{{GENDER:$2|U}} hebt uw eerste bewerking gemaakt; dankuwel, en welkom!",
"notification-header-thank-you-10-edit": "{{GENDER:$2|U}} hebt uw tiende bewerking gemaakt; dankuwel, en ga door!",
@@ -210,8 +209,8 @@
"echo-date-yesterday": "Gisteren",
"echo-load-more-error": "Er is een fout opgetreden tijdens het ophalen van meer resultaten.",
"notification-bundle-header-edit-user-talk-v2": "{{PLURAL:$1|één nieuw bericht|$1 nieuwe berichten|100=99+ nieuwe berichten}} op <strong>{{GENDER:$3|uw}} overlegpagina</strong>.",
- "echo-email-batch-subject-daily": "U heeft vandaag {{PLURAL:$2|een nieuwe melding|nieuwe meldingen}} op {{SITENAME}} ontvangen",
- "echo-email-batch-subject-weekly": "U heeft deze week {{PLURAL:$2|een nieuwe melding|nieuwe meldingen}} op {{SITENAME}} ontvangen",
+ "echo-email-batch-subject-daily": "U hebt {{PLURAL:$2|een nieuwe melding|nieuwe meldingen}} op {{SITENAME}} ontvangen",
+ "echo-email-batch-subject-weekly": "U hebt deze week {{PLURAL:$2|een nieuwe melding|nieuwe meldingen}} op {{SITENAME}} ontvangen",
"echo-email-batch-body-intro-daily": "Hallo $1,\nHier is een samenvatting voor u van de activiteiten van vandaag op {{SITENAME}}.",
"echo-email-batch-body-intro-weekly": "Hallo $1,\nHier is een samenvatting voor u van de activiteiten van deze week op {{SITENAME}}.",
"echo-email-batch-link-text-view-all-notifications": "Alle mededelingen bekijken",
diff --git a/Echo/i18n/nn.json b/Echo/i18n/nn.json
index e8339e50..a671b0c8 100644
--- a/Echo/i18n/nn.json
+++ b/Echo/i18n/nn.json
@@ -3,7 +3,8 @@
"authors": [
"Amire80",
"Njardarlogar",
- "Jon Harald Søby"
+ "Jon Harald Søby",
+ "Ranveig"
]
},
"echo-desc": "Meldingssystem",
@@ -11,7 +12,8 @@
"prefs-emailsettings": "E-postval",
"prefs-displaynotifications": "Visingsval",
"prefs-echosubscriptions": "Meld meg om desse hendingane",
- "prefs-newmessageindicator": "Ny melding-indikator",
+ "prefs-echocrosswiki": "Krosswikivarsel",
+ "prefs-blocknotificationslist": "Ignorerte brukarar",
"echo-pref-send-me": "Send meg:",
"echo-pref-send-to": "Send til:",
"echo-pref-email-format": "E-postformat",
@@ -23,8 +25,10 @@
"echo-pref-email-frequency-weekly": "Eit vekentleg samandrag av meldingar og varsel",
"echo-pref-email-format-html": "HTML",
"echo-pref-email-format-plain-text": "Rein tekst",
- "echo-pref-new-message-indicator": "Vis indikatoren for diskusjonssidemeldingar på verktøylina mi",
+ "echo-pref-cross-wiki-notifications": "Vis meldingar frå andre wikiar",
+ "echo-pref-notifications-blacklist": "Ikkje vis varsel frå desse brukarane. ([[mw:Special:MyLanguage/Help:Notifications#mute|lær meir]])",
"echo-learn-more": "Lær meir",
+ "echo-log": "Offentleg logg",
"echo-new-messages": "Du har nye meldingar",
"echo-category-title-edit-user-talk": "Diskusjonssidemelding{{PLURAL:$1||ar}}",
"echo-category-title-article-linked": "Sidelenkje{{PLURAL:$1||r}}",
@@ -56,6 +60,9 @@
"echo-notification-placeholder-filters": "Ingen varsel eller notisar passar med desse kriteria.",
"echo-notification-markasread": "Merk som lese(n)",
"echo-notification-markasunread": "Merk som ulese(n)",
+ "notification-link-text-expand-all": "Vis",
+ "notification-link-text-expand-notice-count": "Sjå {{PLURAL:$1|éin notis|$1 notisar}}",
+ "notification-link-text-collapse-all": "Gøym",
"notification-link-text-view-message": "Sjå melding",
"notification-link-text-view-mention": "Sjå omtale",
"notification-link-text-view-changes": "{{GENDER:$1|Sjå}} endringar",
@@ -66,25 +73,38 @@
"notification-compact-header-page-linked": "Lenkja frå <strong>$1</strong>.",
"notification-bundle-header-page-linked": "Det vart oppretta lenkjer frå {{PLURAL:$5||$5 sider|100=meir enn 99 sider}} til <strong>$3</strong>.",
"notification-link-text-what-links-here": "Alle lenkjer til sida",
+ "notification-header-mention-other": "$1 {{GENDER:$2|nemnde}} {{GENDER:$3|deg}} i «<strong>$5</strong>» på <strong>$4</strong>.",
+ "notification-header-mention-other-nosection": "$1 {{GENDER:$2|nemnde}} {{GENDER:$3|deg}} på <strong>$4</strong>.",
+ "notification-header-mention-user-talkpage-v2": "$1 {{GENDER:$2|nemnde}} {{GENDER:$3|deg}} i «<strong>$6</strong>» på <strong>brukardiskusjonssida {{GENDER:$5|til}} $4</strong>.",
+ "notification-header-mention-user-talkpage-nosection": "$1 {{GENDER:$2|nemnde}} {{GENDER:$3|deg}} på <strong>brukardiskusjonssida {{GENDER:$5|til}} $4</strong>.",
+ "notification-header-mention-agent-talkpage": "$1 {{GENDER:$2|nemnde}} {{GENDER:$3|deg}} i «<strong>$4</strong>» på <strong>diskusjonssida {{GENDER:$2|si}}</strong>.",
+ "notification-header-mention-agent-talkpage-nosection": "$1 {{GENDER:$2|nemnde}} {{GENDER:$3|deg}} på <strong>diskusjonssida {{GENDER:$2|si}}</strong>.",
+ "notification-header-mention-article-talkpage": "$1 {{GENDER:$2|nemnde}} {{GENDER:$3|deg}} i «<strong>$5</strong>» på diskusjonssida til <strong>$4</strong>.",
+ "notification-header-mention-article-talkpage-nosection": "$1 {{GENDER:$2|nemnde}} {{GENDER:$3|deg}} på diskusjonssida til <strong>$4</strong>.",
+ "notification-compact-header-mention-failure-user-anonymous": "<strong>IP-addressar kan ikkje nemnast:</strong> $1",
"notification-compact-header-mention-success": "<strong>{{GENDER:$2|Du nemnde}}:</strong> $3",
+ "notification-header-user-rights-add-only": "Brukarrettane {{GENDER:$4|dine}} vart endra {{GENDER:$1|endra}}. Du er no medlem av: $2.",
+ "notification-header-user-rights-remove-only": "Brukarrettane {{GENDER:$4|dine}} vart endra {{GENDER:$1|endra}}. Du er ikkje lenger medlem av: $2.",
+ "notification-header-user-rights-add-and-remove": "Brukarrettane {{GENDER:$4|dine}} vart endra {{GENDER:$1|endra}}. Du er no medlem av: $2. Du er ikkje lenger medlem av: $2.",
+ "notification-header-mention-summary": "$1 {{GENDER:$2|nemnde}} {{GENDER:$3|deg}} i eit endringssamandrag på <strong>$4</strong>.",
"notification-welcome-linktext": "Velkomen",
- "notification-header-thank-you-1-edit": "{{GENDER:$2|Du}} gjorde nettopp di fyrste endring; takk og velkomen!",
- "notification-header-thank-you-10-edit": "{{GENDER:$2|Du}} gjorde nettopp di tiande endring; takk, fortsett slik!",
- "notification-header-thank-you-100-edit": "{{GENDER:$2|Du}} gjorde nettopp di hundrede endring; tusen takk!",
- "notification-header-thank-you-1000-edit": "{{GENDER:$2|Du gjorde nettopp di tusande endring; takk for at du er ein flott bidragsytar!",
- "notification-header-thank-you-10000-edit": "{{GENDER:$2|Du}} gjorde nettopp di titusende endring; ti tusen takk!",
- "notification-header-thank-you-100000-edit": "{{GENDER:$2|Du}} gjorde nettopp di hundretusende endring; takk for ein fantastisk innsats!",
- "notification-header-thank-you-1000000-edit": "{{GENDER:$2|Du}} gjorde nettopp di endring nr. éin million; takk for ditt eneståande bidrag!",
+ "notification-header-thank-you-1-edit": "{{GENDER:$2|Du}} gjorde nettopp den fyrste endringa {{GENDER:$2|di}} - takk og velkomen!",
+ "notification-header-thank-you-10-edit": "{{GENDER:$2|Du}} gjorde nettopp den tiande endringa {{GENDER:$2|di}}. Takk for det - hald gjerne fram slik!",
+ "notification-header-thank-you-100-edit": "{{GENDER:$2|Du}} gjorde nettopp den hundrede endringa {{GENDER:$2|di}} - takk så mykje!",
+ "notification-header-thank-you-1000-edit": "{{GENDER:$2|Du}} gjorde nettopp den tusende endringa {{GENDER:$2|di}} - takk for at {{GENDER:$2|du}} er ein flott bidragsytar!",
+ "notification-header-thank-you-10000-edit": "{{GENDER:$2|Du}} gjorde nettopp den titusende endringa {{GENDER:$2|di}} - takk så kjempemykje!",
+ "notification-header-thank-you-100000-edit": "{{GENDER:$2|Du}} gjorde nettopp den hundretusende endringa {{GENDER:$2|di}} - takk for eit gjævt bidrag!",
+ "notification-header-thank-you-1000000-edit": "{{GENDER:$2|Du}} gjorde nettopp den millionte endringa {{GENDER:$2|di}} - takk for eit utruleg bidrag!",
"notification-link-thank-you-edit": "{{GENDER:$1|Di}} endring",
"notification-link-text-view-edit": "Sjå endring",
"notification-header-reverted": "{{PLURAL:$4|Endringa di|Endringane dine}} på <strong>$3</strong> vart {{GENDER:$2|fjerna}}.",
- "notification-header-emailuser": "$1 {{GENDER:$2|sendte}} deg ein e-post",
+ "notification-header-emailuser": "$1 {{GENDER:$2|sende}} deg ein e-post",
"notification-edit-talk-page-email-subject2": "$1 {{GENDER:$1|la att}} ei melding til deg på {{SITENAME}}",
"notification-edit-talk-page-email-batch-body-with-section": "$1 {{GENDER:$1|la att}} ei melding på diskusjonssida di under «$2».",
"notification-page-linked-email-subject": "Ei side du oppretta vart lenkja til på {{SITENAME}}",
"notification-reverted-email-subject2": "{{PLURAL:$3|Endringa di|Endringane dine}} vart {{GENDER:$1|fjerna}} på {{SITENAME}}",
"notification-mention-email-subject": "$1 {{GENDER:$1|nemnde}} {{GENDER:$2|deg}} på {{SITENAME}}",
- "notification-user-rights-email-subject": "Brukarrettane dine på {{SITENAME}} har vorte endra",
+ "notification-user-rights-email-subject": "Brukarrettane dine på {{SITENAME}} er vortne endra",
"notification-timestamp-ago-seconds": "{{PLURAL:$1|$1 sek.}}",
"notification-timestamp-ago-minutes": "{{PLURAL:$1|$1 min.}}",
"notification-timestamp-ago-hours": "{{PLURAL:$1|$1 t.}}",
@@ -109,9 +129,13 @@
"echo-date-today": "I dag",
"echo-date-yesterday": "I går",
"echo-load-more-error": "Det oppstod ein feil under henting av fleire resultat.",
+ "notification-bundle-header-edit-user-talk-v2": "{{PLURAL:$1|Ei ny melding|$1 nye meldingar|100=99+ nye meldingar}} på <strong>diskusjonssida {{GENDER:$3|di}}</strong>.",
"echo-email-batch-subject-daily": "Du har {{PLURAL:$2|ei ny melding|nye meldingar}} på {{SITENAME}}",
"echo-email-batch-subject-weekly": "Du har {{PLURAL:$2|ei ny melding|nye meldingar}} på {{SITENAME}} denne veka",
"echo-email-batch-body-intro-daily": "Hei $1.\nHer er eit samandrag av aktiviteten i dag på {{SITENAME}} for deg.",
"echo-email-batch-body-intro-weekly": "Hei $1.\nHer er eit samandrag av aktiviteten denne veka på {{SITENAME}} for deg.",
- "echo-email-batch-link-text-view-all-notifications": "Sjå alle meldingar og varsel"
+ "echo-email-batch-link-text-view-all-notifications": "Sjå alle meldingar og varsel",
+ "notification-header-foreign-alert": "Varsel frå {{PLURAL:$5|éin annan wiki|$5 andre wikiar}}",
+ "notification-header-foreign-notice": "Fleire notisar frå {{PLURAL:$5|ein annan wiki|$5 andre wikiar}}",
+ "notification-header-foreign-all": "Fleire meldingar frå {{PLURAL:$5|ein annan wiki|$5 andre wikiar}}"
}
diff --git a/Echo/i18n/nys.json b/Echo/i18n/nys.json
new file mode 100644
index 00000000..0993c715
--- /dev/null
+++ b/Echo/i18n/nys.json
@@ -0,0 +1,8 @@
+{
+ "@metadata": {
+ "authors": [
+ "Gnangarra"
+ ]
+ },
+ "tooltip-pt-notifications-alert": "{{GENDER:|Noonook}} aliwah"
+}
diff --git a/Echo/i18n/oc.json b/Echo/i18n/oc.json
index f720b093..5289c2fa 100644
--- a/Echo/i18n/oc.json
+++ b/Echo/i18n/oc.json
@@ -11,7 +11,6 @@
"prefs-emailsettings": "Opcions del corrièr electronic",
"prefs-displaynotifications": "Opcions d'afichatge",
"prefs-echosubscriptions": "M'avisar d'aqueles eveniments",
- "prefs-newmessageindicator": "Indicador de messatge novèl",
"echo-pref-send-me": "Me mandar :",
"echo-pref-send-to": "Mandar a :",
"echo-pref-email-format": "Format de corrièr electronic :",
@@ -24,7 +23,6 @@
"echo-pref-email-format-html": "HTML",
"echo-pref-email-format-plain-text": "Tèxte brut",
"echo-pref-cross-wiki-notifications": "Afichar las notificacions d’autres wikis",
- "echo-pref-new-message-indicator": "Afichar l’indicador de messatge sus la pagina de discussion dins ma barra d’aisinas",
"echo-learn-more": "Ne saber mai",
"echo-new-messages": "Avètz de messatges novèls",
"echo-category-title-edit-user-talk": "{{PLURAL:$1|Messatge|Messatges}} de la pagina de discussion",
diff --git a/Echo/i18n/or.json b/Echo/i18n/or.json
index 666ae374..a8006dbe 100644
--- a/Echo/i18n/or.json
+++ b/Echo/i18n/or.json
@@ -11,7 +11,6 @@
"prefs-emailsettings": "ଇମେଲ ବିକଳ୍ପ",
"prefs-displaynotifications": "ଦେଖଣା ବିକଳ୍ପ",
"prefs-echosubscriptions": "ଏହି ଘଟଣା ସଂପର୍କରେ ମତେ ସୂଚନା ଦିଅନ୍ତୁ",
- "prefs-newmessageindicator": "ନୂଆ ସନ୍ଦେଶ ସୂଚକ",
"echo-pref-send-me": "ମୋ ପାଖକୁ ପଠାନ୍ତୁ",
"echo-pref-send-to": "ଏହାଙ୍କ ପାଖକୁ ପଠାନ୍ତୁ",
"echo-pref-email-format": "ଇମେଲ ଶୈଳୀ",
@@ -23,7 +22,6 @@
"echo-pref-email-frequency-weekly": "ସୂଚନାର ସାପ୍ତାହିକ ସାରମର୍ମ",
"echo-pref-email-format-html": "ଏଚଟିଏମଏଲ",
"echo-pref-email-format-plain-text": "ସାଦା ଲେଖା",
- "echo-pref-new-message-indicator": "ମୋ ଟୁଲବାରରେ ଆଲୋଚନା ପୃଷ୍ଠା ବାର୍ତ୍ତ ସୂଚକ ଦେଖାନ୍ତୁ",
"echo-learn-more": "ଅଧିକ ଶିଖନ୍ତୁ",
"echo-new-messages": "ଆପଣଙ୍କ ପାଖକୁ ନୂଆ ସନ୍ଦେଶ ଆସିଛି",
"echo-category-title-edit-user-talk": "ଆଲୋଚନା ପୃଷ୍ଠା {{PLURAL:$1|ସନ୍ଦେଶ|ଏକାଧିକ ସନ୍ଦେଶÍ}}",
diff --git a/Echo/i18n/pa.json b/Echo/i18n/pa.json
index 5a135f69..97d3accb 100644
--- a/Echo/i18n/pa.json
+++ b/Echo/i18n/pa.json
@@ -13,7 +13,6 @@
"prefs-emailsettings": "ਈ-ਮੇਲ ਆਪਸ਼ਨ",
"prefs-displaynotifications": "ਪ੍ਰਗਟਾਓ ਆਪਸ਼ਨ",
"prefs-echosubscriptions": "ਮੈਨੂੰ ਇਸ ਤਰ੍ਹਾਂ ਦੇ ਸਬੱਬਾਂ ਬਾਰੇ ਨੋਟੀਫਾਈ ਕਰੋ",
- "prefs-newmessageindicator": "ਨਵਾਂ ਸੁਨੇਹਾ ਸੂਚਕ",
"echo-pref-send-me": "ਮੈਨੂੰ ਭੇਜੋ:",
"echo-pref-send-to": "ਭੇਜੋ:",
"echo-pref-email-format": "ਈ-ਮੇਲ ਫਾਰਮੈਟ",
@@ -25,7 +24,6 @@
"echo-pref-email-frequency-weekly": "ਸੂਚਨਾਵਾਂ ਦਾ ਹਫਤਾਵਰ ਸਾਰ",
"echo-pref-email-format-html": "ਐਚ.ਟੀ.ਮੈਲ.ਐਲ.",
"echo-pref-email-format-plain-text": "ਸਰਲ ਟੈਕਸਟ",
- "echo-pref-new-message-indicator": "ਮੇਰੀ ਟੂਲਬਾਰ ਵਿੱਚ ਗੱਲ-ਬਾਤ ਪੰਨਾ ਸੂਚਕ ਵਿਖਾਓ",
"echo-learn-more": "ਹੋਰ ਜਾਣੋ",
"echo-new-messages": "ਤੁਹਾਡੇ ਲਈ ਨਵੇਂ ਸੁਨੇਹੇ ਹਨ।",
"echo-category-title-edit-user-talk": "ਗੱਲ-ਬਾਤ ਪੰਨਾ {{PLURAL:$1|ਸੁਨੇਹਾ|ਸੁਨੇਹੇ}}",
diff --git a/Echo/i18n/pl.json b/Echo/i18n/pl.json
index 71cf7005..e2bd6f2d 100644
--- a/Echo/i18n/pl.json
+++ b/Echo/i18n/pl.json
@@ -28,7 +28,6 @@
"prefs-displaynotifications": "Opcje wyświetlania",
"prefs-echosubscriptions": "Powiadom mnie o tych zdarzeniach",
"prefs-echocrosswiki": "Powiadomienia z innych projektów",
- "prefs-newmessageindicator": "Informacje o nowych wiadomościach",
"prefs-blocknotificationslist": "Ignorowanie od użytkowników",
"echo-pref-send-me": "Wysyłaj mi:",
"echo-pref-send-to": "Wyślij na adres:",
@@ -42,8 +41,7 @@
"echo-pref-email-format-html": "HTML",
"echo-pref-email-format-plain-text": "Zwykły tekst",
"echo-pref-cross-wiki-notifications": "Pokazuj powiadomienia z innych wiki",
- "echo-pref-notifications-blacklist": "Nie wyświetlaj powiadomień od tych użytkowników. ([[mw:Help:Notifications#mute|dowiedz się więcej]])",
- "echo-pref-new-message-indicator": "Pokazuj informację o nowej wiadomości w pasku osobistym",
+ "echo-pref-notifications-blacklist": "Nie wyświetlaj powiadomień od tych użytkowników. ([[mw:Special:MyLanguage/Help:Notifications#mute|dowiedz się więcej]])",
"echo-pref-beta-feature-cross-wiki-message": "Rozbudowane powiadomienia",
"echo-pref-beta-feature-cross-wiki-description": "Łatwiej wyświetlaj i organizuj powiadomienia. Funkcja obejmuje powiadomienia ''cross-wiki'', dzięki którym widzisz powiadomienia z innych wiki. (Aby otrzymywać powiadomienia cross-wiki na danej wiki, należy włączyć funkcją eksperymentalną na tej wiki)",
"echo-learn-more": "Dowiedz się więcej",
@@ -98,8 +96,6 @@
"echo-none": "Nie masz żadnych powiadomień.",
"echo-more-info": "Więcej informacji",
"echo-feedback": "Opinie",
- "echo-popup-footer-special-page-invitation": "<strong>Wypróbuj przebudowaną stronę powiadomień.</strong> [$2 $1]",
- "echo-popup-footer-special-page-invitation-link": "Całkowicie nowy wygląd i możliwości.",
"echo-api-failure": "Nie udało się pobrać powiadomień.",
"echo-api-failure-cross-wiki": "Dostęp do zdalnej domeny jest zabroniony.",
"echo-notification-placeholder": "Nie ma powiadomień.",
@@ -128,6 +124,8 @@
"notification-link-text-view-page": "Zobacz stronę",
"notification-header-edit-user-talk": "$1 {{GENDER:$2|zostawił|zostawiła|zostawił(a)}} wiadomość na <strong>{{GENDER:$3|twojej}} stronie dyskusji</strong>.",
"notification-header-edit-user-talk-with-section": "$1 {{GENDER:$2|zostawił|zostawiła|zostawił(a)}} wiadomość na <strong>{{GENDER:$3|twojej}} stronie dyskusji</strong> w „<strong>$4</strong>”.",
+ "notification-compact-header-edit-user-talk": "$1 {{GENDER:$2|pozostawił|pozostawił}} {{GENDER:$3|Ci}} wiadomość.",
+ "notification-compact-header-edit-user-talk-with-section": "$1 {{GENDER:$2|pozostawił|pozostawiła}} {{GENDER:$3|Ci}} wiadomość w „<strong>$4</strong>”.",
"notification-body-edit-user-talk-with-section": "$1",
"notification-header-page-linked": "Utworzono link z <strong>$4</strong> do <strong>$3</strong>.",
"notification-compact-header-page-linked": "Linkowana z <strong>$1</strong>.",
@@ -155,6 +153,7 @@
"notification-header-user-rights-add-and-remove": "{{GENDER:$6|Twoje}} uprawnienia zostały {{GENDER:$1|zmienione}}. {{GENDER:$6|Zostałeś dodany|Zostałaś dodana}} do: $2. Nie należysz już do: $4.",
"notification-header-user-rights-expiry-change": "{{GENDER:$1|Zmieniono}} czas wygaśnięcia {{GENDER:$4|Twojego}} członkostwa w {{PLURAL:$3|następującej grupie|następujących grupach}}: $2.",
"notification-header-welcome": "{{GENDER:$2|Witaj}} w {{GRAMMAR:MS.lp|{{SITENAME}}}}, $1! Cieszymy się, że {{GENDER:$2|jesteś}} tutaj.",
+ "notification-header-mention-summary": "$1 {{GENDER:$2|wspomniał|wspomniała}} {{GENDER:$3|o Tobie}} w opisie zmiany na stronie <strong>$4</strong>.",
"notification-welcome-linktext": "Witaj",
"notification-header-thank-you-1-edit": "Właśnie {{GENDER:$2|dokonałeś|dokonałaś}} swojej pierwszej edycji; dziękujemy Ci i zapraszamy!",
"notification-header-thank-you-10-edit": "Właśnie {{GENDER:$2|dokonałeś|dokonałaś}} swojej dziesiątej edycji; dziękujemy Ci i tak trzymaj!",
diff --git a/Echo/i18n/pms.json b/Echo/i18n/pms.json
index cc837f13..b1adaa24 100644
--- a/Echo/i18n/pms.json
+++ b/Echo/i18n/pms.json
@@ -10,7 +10,6 @@
"prefs-emailsettings": "Opsion ëd pòsta eletrònica",
"prefs-displaynotifications": "Opsion ëd visualisassion",
"prefs-echosubscriptions": "Aviseme ëd si eveniment",
- "prefs-newmessageindicator": "Marca ëd mëssagi neuv",
"echo-pref-send-me": "Mandeme:",
"echo-pref-send-to": "Mandé a:",
"echo-pref-email-format": "Formà ëd mëssagi:",
@@ -22,7 +21,6 @@
"echo-pref-email-frequency-weekly": "Un resumé ebdomadari dle notìfiche",
"echo-pref-email-format-html": "HTML",
"echo-pref-email-format-plain-text": "Mach test",
- "echo-pref-new-message-indicator": "Smon-e la marca ëd mëssagi an la pàgina ëd ciaciarade an mia bara d'utiss",
"echo-learn-more": "Savèjne 'd pì",
"echo-new-messages": "A l'ha 'd mëssagi neuv",
"echo-category-title-edit-user-talk": "{{PLURAL:$1|mëssagi}} ëd la pàgina ëd ciaciarade",
diff --git a/Echo/i18n/pnb.json b/Echo/i18n/pnb.json
index 88f0bd51..1998d6fb 100644
--- a/Echo/i18n/pnb.json
+++ b/Echo/i18n/pnb.json
@@ -3,8 +3,10 @@
"authors": [
"Khalid Mahmood",
"Saanvel",
- "Abbas dhothar"
+ "Abbas dhothar",
+ "BukhariSaeed"
]
},
+ "notifications": "اطلاعات",
"tooltip-pt-notifications-alert": "{{GENDER:|Your}} الرٹس"
}
diff --git a/Echo/i18n/ps.json b/Echo/i18n/ps.json
index b3245fd1..dd86f462 100644
--- a/Echo/i18n/ps.json
+++ b/Echo/i18n/ps.json
@@ -1,15 +1,17 @@
{
"@metadata": {
"authors": [
- "Ahmed-Najib-Biabani-Ibrahimkhel"
+ "Ahmed-Najib-Biabani-Ibrahimkhel",
+ "Baloch Khan"
]
},
- "echo-desc": "د يادگيرنو غونډال",
+ "echo-desc": "د پیښو او پیغامونو په اړه د کاروونکو د خبرتیا سیسټم",
"prefs-echo": "يادگيرنې",
"prefs-emailsettings": "د برېښليک خوښنې",
"prefs-displaynotifications": "د ښکارېدنې خوښنې",
"prefs-echosubscriptions": "د دغو پېښو په اړه دې خبر شم",
- "prefs-newmessageindicator": "نوی پيغام ښکاره کوونکی",
+ "prefs-echocrosswiki": "د ويکي دباندې خبرتیاوې",
+ "prefs-blocknotificationslist": "باوري کارنان",
"echo-pref-send-me": "را ولېږه:",
"echo-pref-send-to": "ور ولېږه:",
"echo-pref-email-format": "برېښليک بڼه:",
@@ -22,65 +24,175 @@
"echo-pref-email-format-html": "اچ ټي ام اېل",
"echo-pref-email-format-plain-text": "ساده متن",
"echo-pref-cross-wiki-notifications": "له نورو ويکي گانو څخه خبرونې ښکاره کول",
- "echo-pref-new-message-indicator": "زما په توکپټه کې د خبرو اترو پيغام ښودونکی ښکاره کول",
+ "echo-pref-notifications-blacklist": "د دې کاروونکو خبرتیاوې مه ښکاره کوي. ([[mw:Special:MyLanguage/Help:Notifications#mute|lنور ولولئ]])",
"echo-pref-beta-feature-cross-wiki-message": "پرمختللې خبرونې",
+ "echo-pref-beta-feature-cross-wiki-description": "خبرتیاوې په اسانۍ سره وګورئ او تنظیم کړئ. سره د ويکي دباندي خبرتیاوو، کوم چې تاسو ته د نورو ويکي ګانو د پيغامونو کتنې اجازه هم درکوي. (په ورکړل شوي ويکي باندې که غواړئ د ويکي-دباندي خبرتیاوې ترلاسه کړي، تاسو باید راتلونکې بيټا په دغه ويکي کي فعاله کړي.)",
"echo-learn-more": "نور څه زده کول",
+ "echo-log": "عام يادښتونه",
"echo-new-messages": "تاسې نوي پيغامونه لرئ",
"echo-category-title-edit-user-talk": "خبرو اترو مخ {{PLURAL:$1|پيغام|پيغامونه}}",
"echo-category-title-article-linked": "مخ {{PLURAL:$1|تړنه|تړنې}}",
+ "echo-category-title-reverted": "سمونې {{PLURAL:$1|تکرار|تکراری}}",
+ "echo-category-title-mention": "{{PLURAL:$1|یادونه|يادونې}}",
+ "echo-category-title-mention-failure": "ترسره نشو {{PLURAL:$1|يادونه|يادونې}}",
+ "echo-category-title-mention-success": "بریالی {{PLURAL:$1|یادونه|يادونې}}",
"echo-category-title-other": "{{PLURAL:$1|نور}}",
"echo-category-title-system": "{{PLURAL:$1|غونډال}}",
"echo-category-title-user-rights": "{{PLURAL:$1|کارن رښتې بدلون|کارن رښتو بدلونونه}}",
"echo-category-title-emailuser": "{{PLURAL:$1|له بل کارن څخه برېښليک اخيستل|له نورو کارنانو څخه برېښليکونه اخيستل}}",
+ "echo-category-title-article-reminder": "د مخ {{PLURAL:$1|یادونه|یادونې}}",
+ "echo-pref-tooltip-edit-user-talk": "ما ته خبر راکړئ کله چې څوک ماته پیغام ولیکي یا زما د خبرو اترو په مخ ځواب ووایي.",
+ "echo-pref-tooltip-article-linked": "ما ته خبر راکړئ کله چې څوک زما په جوړه شوې ليکنه کې يو بل مخ وراظافه کړې.",
+ "echo-pref-tooltip-reverted": "ما ته خبر راکړئ کله چې څوک زما لخوا سمونه د راګرځولو وسیلي له لاري راوګرځوي.",
+ "echo-pref-tooltip-mention": "ما ته خبر راکړئ کله چې څوک زما کارن مخ په يوه بله ليکنه کې ورګډ کړي.",
+ "echo-pref-tooltip-mention-failure": "ما ته خبرداری راکړئ کله چې ما نشو کولی چې یو څوک ذکر کړم.",
+ "echo-pref-tooltip-mention-success": "ما ته خبر راکړئ کله چې زه یو چا ته یادونه لیږم.",
+ "echo-pref-tooltip-user-rights": "ما ته خبر راکړئ کله چې څوک زما د کارن حقوق بدل کړي.",
+ "echo-pref-tooltip-emailuser": "ما ته خبر راکړئ کله چې څوک ماته پيغام راوليږي.",
+ "echo-pref-tooltip-article-reminder": "ما ته ددې پاڼې خبر راکړئ کله چې زه ووایم.",
+ "echo-error-no-formatter": "د خبرتیا لپاره هیڅ ډول بڼه نده ټاکل شوې.",
"notifications": "يادگيرنې",
"tooltip-pt-notifications-alert": "{{GENDER:|ستاسې}} خبرونې",
"tooltip-pt-notifications-notice": "{{GENDER:|ستاسې}} خبرونې",
+ "echo-displaynotificationsconfiguration": "د خبرتیاوو ترتیب نښودل",
+ "echo-displaynotificationsconfiguration-summary": "دا یوه عمومي کتنه ده چې په دې ويکي کې نوښتونه نه دي تنظیم شوي.",
+ "echo-displaynotificationsconfiguration-notifications-by-category-header": "د وېشنيزو لخوا خبرتیاوې",
+ "echo-displaynotificationsconfiguration-sorting-by-section-header": "د ډولونو ترتیبول",
+ "echo-displaynotificationsconfiguration-sorting-by-section-legend": "د خبرتیا لپاره کوم ډول ترتیب شوی دی",
+ "echo-displaynotificationsconfiguration-available-notification-methods-header": "د خبرتیا میتودونو ته اجازه ورکړي",
+ "echo-displaynotificationsconfiguration-available-notification-methods-by-category-legend": "د کومې وېشنيزې لپاره د خبرتیا میتودونه چمتو شوي دي",
+ "echo-displaynotificationsconfiguration-available-notification-methods-by-type-legend": "د کوم ډول میتودونو ملاتړ پر هر ډول کیږي; یوازې د وېشنيزو دننه ډولونه پلي کیږي چې د غوره توب څخه پټ دي",
+ "echo-displaynotificationsconfiguration-enabled-default-header": "په خواني ډول فعال شوي",
+ "echo-displaynotificationsconfiguration-enabled-default-existing-users-legend": "موجود کارنان",
"echo-displaynotificationsconfiguration-enabled-default-new-users-legend": "نوي کارنان",
+ "echo-displaynotificationsconfiguration-mandatory-notification-methods-header": "د خبرتیا میتودونو ته اړينه اجازه ورکړي",
+ "echo-displaynotificationsconfiguration-mandatory-notification-methods-by-category-legend": "د کومې هري وېشنيزې لپاره د خبرتیا میتودونه چمتو شوي دي",
"echo-specialpage": "يادگيرنې",
+ "echo-specialpage-section-markread": "په نښه کول لکه ويل شوي",
"echo-specialpage-markasread": "خبرېدنه: د لوستلي په توگه په نخښه کول",
+ "echo-specialpage-markasread-invalid-id": "د پیښې ناسمه پېژندنه",
+ "echo-specialpage-pagination-numnotifications": "$1 {{PLURAL:$1|يادگيرنه|يادگيرنې}}",
+ "echo-specialpage-pagefilters-title": "تازه فعاليتونه",
+ "echo-specialpage-pagefilters-subtitle": "مخونه د نالوستل شوي خبرتیاوو سره",
+ "notificationsmarkread-legend": "يادگيرنې لکه لوستل شوي په نښه کول",
"echo-anon": "د يادگيرنو اخيستلو لپاره، [$1 يو گڼون جوړ کړئ] او يا هم [$2 ورننوځئ].",
"echo-none": "تاسې هېڅ يادگيرنې نه لرئ.",
"echo-more-info": "نور مالومات",
"echo-feedback": "غبرگون",
+ "echo-api-failure": "د خبرتیاوو په ترلاسه کولو کې پاتې راغلي.",
+ "echo-api-failure-cross-wiki": "لرې پرتو ډومینونو ته لاسرسی رد شو.",
"echo-notification-placeholder": "کومې خبرونې نشته.",
+ "echo-notification-placeholder-filters": "د دې معیارونو سره هيڅ سمون شتون نه لري.",
+ "echo-notification-loginrequired": "تاسو باید ننوځئ تر څو اطلاعات وګورئ.",
+ "echo-notification-popup-loginrequired": "هيله اول ننوځئ تر څو خبرتیاوې وګورئ.",
"echo-notification-markasread": "ټول لوستی په نخښه کول",
+ "echo-notification-markasunread": "لکه نالوستلی يي په نخښه کول",
"echo-notification-markasread-tooltip": "لوستی په نخښه کول",
"echo-notification-more-options-tooltip": "نورې خوښنې",
+ "notification-dynamic-actions-unwatch": "{{GENDER:$3|ودريږي}} د نوي فعالیت کتنه په \"$1\" کې",
+ "notification-dynamic-actions-unwatch-confirmation": "{{GENDER:$3|تاسو}} نور دا پاڼه \"$1\" نه ګوري",
+ "notification-dynamic-actions-unwatch-confirmation-description": "تاسو کولی شئ هر وخت چي وغواړي [$2 دا مخ] و {{GENDER:$3|ګوري}}",
+ "notification-dynamic-actions-watch": "{{GENDER:$3|پسي}} نوي فعالیتونه په \"$1\" کي",
+ "notification-dynamic-actions-watch-confirmation": "{{GENDER:$3|تاسو}} نور دا پاڼه \"$1\" نه ګوري",
+ "notification-dynamic-actions-watch-confirmation-description": "تاسو کولی شئ هر وخت چي وغواړي د [$2 مخ] {{GENDER:$3|کتل}} ودروي",
"notification-link-text-expand-all": "غځول",
+ "notification-link-text-expand-alert-count": "{{PLURAL:$1|$1 خبرتیا|$1 خبرتیاوې}} وګوري",
+ "notification-link-text-expand-notice-count": "{{PLURAL:$1|$1 خبرتیا|$1 خبرتیاوې}} وګورئ",
+ "notification-link-text-expand-all-count": "{{PLURAL:$1|$1 يادګيرنه|$1 يادګيرنې}} وګورئ",
"notification-link-text-collapse-all": "پرځول",
"notification-link-text-view-message": "پيغام کتل",
"notification-link-text-view-mention": "يادگيرنه کتل",
"notification-link-text-view-mention-failure": "{{PLURAL:$1|يادگيرنه کتل|يادگيرنې کتل}}",
- "notification-link-text-view-changes": "بدلونونه کتل",
+ "notification-link-text-view-changes": "{{GENDER:$1|بدلونونه}} کتل",
"notification-link-text-view-page": "مخ کتل",
- "notification-header-edit-user-talk": "$1 {{GENDER:$3|ستاسې}} د خبرو اترو په مخ يو پيغام {{GENDER:$2|پرېښوده}}.",
+ "notification-header-edit-user-talk": "$1 ستاسو <strong>د خبرو اترو په {{GENDER:$3|مخ}}</strong> {{GENDER:$2|کي پيغام پريښود}}.",
+ "notification-header-edit-user-talk-with-section": "$1 ستاسو د <strong> خبرو اترو په {{GENDER:$3|مخ}} کي </strong> په <strong>«$4»</strong> {{GENDER:$2|کي پيغام پريښود}}.",
+ "notification-compact-header-edit-user-talk": "$1 {{GENDER:$2|ستاسو}} {{GENDER:$3|لپاره}} يو پيغام پريښود",
+ "notification-compact-header-edit-user-talk-with-section": "$1 {{GENDER:$2|ستاسو}} {{GENDER:$3|لپاره}} په «<strong>$4</strong>» کي يو پيغام پريښود.",
+ "notification-header-page-linked": "لينک د <strong>$4</strong> څخه و <strong>$3</strong> ته ورکول شو.",
+ "notification-compact-header-page-linked": "لينک ورکونه د <strong> $1</strong> لخوا.",
+ "notification-bundle-header-page-linked": "جوړ شوي نښلونې {{PLURAL:$5||$5 مخ|100=زيات تر ۹۹ مخونو}} او <strong>$3</strong>.",
+ "notification-header-article-reminder": "هغه مخ چي {{GENDER:$2|تاسو}} تاسو يي ده په يادولو اړوند غوښتنه کړې وي په <strong> $3 کي دي</strong>",
"notification-link-text-what-links-here": "همدې مخ سره ټولې تړنې",
+ "notification-header-mention-other": "$1 {{GENDER:$3|ستاسو}} {{GENDER:$2|يادونه}} پر <strong>$4</strong> باندې په \"<strong>$5</strong>\" کې وکړه.",
+ "notification-header-mention-other-nosection": "$1 {{GENDER:$3|ستاسو}} {{GENDER:$2|يادونه}} \nپه <strong>$4</strong> کي وکړه.",
+ "notification-header-mention-user-talkpage-v2": "$1 {{GENDER:$3|ستاسو}} {{GENDER:$2|يادونه}} د <strong>کارن په خبرو اترو {{GENDER:$5|کي}} $4</strong> پر \"<strong>$6</strong>\" باندې وکړه.",
+ "notification-header-mention-user-talkpage-nosection": "$1 {{GENDER:$3|ستاسو}} {{GENDER:$2|يادونه}} {{GENDER:$5|د}} $4 <strong> په کارن خبرې اترې مخ </strong> کي وکړه.",
+ "notification-header-mention-agent-talkpage": "$1 و {{GENDER:$3|تاسو}} ته د<strong> {{GENDER:$2|خپل خبروآترو مخ|خپل خبروآترو مخ|خپل خبروآترو مخ}}</strong> په <strong> «$4»</strong> {{GENDER:$2| کي يادونه}} وکړه.",
+ "notification-header-mention-agent-talkpage-nosection": "$1 {{GENDER:$3|تاسو}} ته <strong>\n{{GENDER:$2|د هغه|د هغي|د هغوي}} په\nخبرو اترو کي</strong> {{GENDER:$2|يادونه}} وکړه.",
+ "notification-header-mention-article-talkpage": "$1 {{GENDER:$3|ستاسو}} {{GENDER:$2|يادونه}} د <strong>$4</strong> په خبرو اترو \"<strong>$5</strong>\" کي وکړه.",
+ "notification-header-mention-article-talkpage-nosection": "$1 {{GENDER:$3|ستاسو}} \n{{GENDER:$2|يادونه}} د <strong>$4</strong> د خبرو اترو په مخ کي وکړه.",
+ "notification-header-mention-failure-user-unknown": "{{GENDER:$2|ستاسو|ستاسو}} پيغام و <strong>$3</strong> ته ونه لیږل شو ځکه چې دا کارن ونه موندل شو.",
+ "notification-header-mention-failure-user-anonymous": "{{GENDER:$2|ستاسو}} د <strong>$3</strong> يادونه ونه ليږل شول ځکه چې کارن نامعلوم دي.",
+ "notification-header-mention-failure-too-many": "{{GENDER:$2|تاسو}} هڅه وکړه چې تر $3 زياتو {{PLURAL:$3|کارن|کارنانو}} یادونه وکړي. ټولي هغه یادوني چې محدودیت يي لوړ دي ندي لیږل شوي.",
+ "notification-header-mention-failure-bundle": "د {{PLURAL:$3|يادونه|$3 يادونې}} {{GENDER:$2|چي تاسو}} د <strong>$4</strong> د خبرو اترو مخ ته جوړي کړي {{PLURAL:$3|ونه ليږل}} شوي.",
+ "notification-compact-header-mention-failure-user-unknown": "د $1 <strong> کارن نوم شتون نه لري</strong>",
+ "notification-compact-header-mention-failure-user-anonymous": "<strong>د کارن آدرس يادونه نشي کیدی:</strong> $1",
"notification-header-mention-success": "{{GENDER:$2|ستاسې}} يادونه د $3 ولېږل شوه.",
+ "notification-header-mention-success-bundle": "{{PLURAL:$3|يادونه|$3 یادونې}} چي {{GENDER:$2|تاسو}} د <strong>$4</strong> د خبرو اترو په مخ کې جوړي کړي وي {{PLURAL:$3|هغه}} وروليږل شوي.",
"notification-compact-header-mention-success": "<strong>{{GENDER:$2|تاسې ياد کړی}}:</strong> $3",
+ "notification-header-mention-status-bundle": "{{PLURAL:$3|A يادونه|$3 يادونې}} د ياداښتونو اړوند د {{GENDER:$2|چي تاسو}} د <strong>$4</strong> په خبرو اترو کي راوستلي وو: {{PLURAL:$5|$5 ندي}}، {{PLURAL:$6|$6 ورليږل}} شي.",
+ "notification-header-user-rights-add-only": "{{GENDER:$4|ستاسو}} د کارن په حقوقو کي {{GENDER:$1|بدلون}} رامنځته شو. ستاسو په کارنيز حقوقو کي '''$2''' ورګډ شو.",
+ "notification-header-user-rights-remove-only": "{{GENDER:$4|ستاسو}} د کارن حقوقو {{GENDER:$1|بدلون وموند}}. تاسو نور د $2 غړي نه ياست.",
+ "notification-header-user-rights-add-and-remove": "{{GENDER:$6|ستاسو}} د کارن حقوق {{GENDER:$1|بدل}} شوه. تاسو $2 ته ورګډ شوي. تاسو نور د $4 غړي نه ياست.",
+ "notification-header-user-rights-expiry-change": "{{GENDER:$4|ستاسو}} د پای ته رسیدني وخت په لاندې غړیتوب {{PLURAL:$3|ګروپ|ګروپونو}} کي {{GENDER:$1|بدلون}} وموند: $2.",
+ "notification-header-welcome": "$1 {{SITENAME}} ته {{GENDER:$2|ښه راغلئ}}!، موږ خوشحاله يو چي {{GENDER:$2|تاسو}} دلته ياست.",
"notification-welcome-linktext": "ښه راغلئ",
+ "notification-header-thank-you-1-edit": "{{GENDER:$2|تاسو}} یوازې {{GENDER:$2|خپل}} لومړی سمون ترسره کړ; {{GENDER:$2|مننه}}، او ښه راغلئ!",
+ "notification-header-thank-you-10-edit": "{{GENDER:$2|تاسو}} یوازې {{GENDER:$2|خپل}} لس سمونونه ترسره کړل; {{GENDER:$2|مننه}}، او مهرباني وکړئ ادامه ورکړۍ!",
+ "notification-header-thank-you-100-edit": "{{GENDER:$2|تاسو}} يوازې {{GENDER:$2|خپل}} سلم سمون ترسره کړ; ډيره زياته {{GENDER:$2|مننه}}!",
+ "notification-header-thank-you-1000-edit": "{{GENDER:$2|تاسو}} {{GENDER:$2|خپل}} زر سمونې ترسره کړي; ستاسو څخه د یو ښه مرستندویه په توګه ډيره {{GENDER:$2|مننه}} !",
+ "notification-header-thank-you-10000-edit": "{{GENDER:$2|تاسو}} {{GENDER:$2|خپل}} لس زره سمونې ترسره کړي; {{GENDER:$2|ستاسو}} څخه ډيره ډېره زياته مننه!",
+ "notification-header-thank-you-100000-edit": "{{GENDER:$2|تاسو}} {{GENDER:$2|خپل}} يولک سمونې ترسره کړي; {{GENDER:$2|ستاسو}} څخه ډيره مننه چي يو په زړه پورې سمونکي ياست!",
+ "notification-header-thank-you-1000000-edit": "{{GENDER:$2|تاسو}} {{GENDER:$2|خپل}} يولک سمونې ترسره کړي; {{GENDER:$2|ستاسو}} څخه ډيره مننه چي يو زيات په زړه پورې سمونکي ياست!",
+ "notification-link-thank-you-edit": "{{GENDER:$1|ستاسو}} سمون",
"notification-link-text-view-edit": "سمون کتل",
+ "notification-link-article-reminder": "مخ کتل",
+ "notification-header-reverted": "{{PLURAL:$4|ستاسو سمونه پر <strong>$3</strong>|ستاسو سمونې پر <strong>$3</strong>}} باندې {{GENDER:$2|بیرته راوګرځول شوی.}}",
+ "notification-header-emailuser": "$1 تاسو ته يو {{GENDER:$2|بريښناليک}} دروليږدوي.",
+ "notification-edit-talk-page-email-subject2": "$1 {{GENDER:$1|تاسو}} تي په {{SITENAME}} کي پيغام پريښود",
"notification-edit-talk-page-email-batch-body-with-section": "$1 ستاسې د خبرو اترو پر مخ يو پيغام په \"$2\" کې {{GENDER:$1|پرېښود}}.",
"notification-page-linked-email-subject": "يو مخ چې تاسې جوړ کړی، په {{SITENAME}} يې تړنه جوړه شوه",
- "notification-timestamp-ago-minutes": "{{PLURAL:$1|$1د}}",
- "notification-timestamp-ago-hours": "{{PLURAL:$1|$1گ}}",
- "notification-timestamp-ago-days": "{{PLURAL:$1|$1و}}",
- "notification-timestamp-ago-months": "{{PLURAL:$1|$1م}}",
- "notification-timestamp-ago-years": "{{PLURAL:$1|$1ک}}",
+ "notification-reverted-email-subject2": "ستاسو {{PLURAL:$3|سمون|سمونې}} په {{SITENAME}} کي\n{{GENDER:$1|دسره راوګرځول}} شوي",
+ "notification-mention-email-subject": "$1 په {{SITENAME}} کي {{GENDER:$2|ستاسو}} {{GENDER:$1|يادونه}} وکړه",
+ "notification-user-rights-email-subject": "ستاسو د کارن حقوق په {{SITENAME}} کي بدل شوه",
+ "notification-timestamp-ago-seconds": "{{PLURAL:$1|$1 ثانیه}}",
+ "notification-timestamp-ago-minutes": "{{PLURAL:$1|$1دقیقه}}",
+ "notification-timestamp-ago-hours": "{{PLURAL:$1|$1گړۍ}}",
+ "notification-timestamp-ago-days": "{{PLURAL:$1|$1ورځ}}",
+ "notification-timestamp-ago-months": "{{PLURAL:$1|$1مياشت}}",
+ "notification-timestamp-ago-years": "{{PLURAL:$1|$1کال}}",
"notification-timestamp-today": "نن",
"notification-timestamp-yesterday": "پرون",
"notification-inbox-filter-read": "لوستل",
"notification-inbox-filter-unread": "نالوستل",
"notification-inbox-filter-all": "ټول",
"echo-email-body-default": "تاسې په {{SITENAME}} باندې يوه نوې يادگيرنه لرئ:\n\n$1",
- "echo-email-html-footer-preference-link-text": "خپل غوره توبونه وڅارئ",
+ "echo-email-footer-default-html": "ددې لپاره چې پر هغو بريښناليکونو باندې کنټرول ولري کوم چي موږ تاته درليږو، <a href=\"$2\" style=\"text-decoration:none; color: #3868B0;\">خپل غوره توبونه وګورئ</a>.<br />\n$1",
+ "echo-email-footer-default": "$2\n\nددې لپاره چې پر هغو بريښناليکونو باندې کنټرول ولري کوم چي موږ تاته درليږو، خپل غوره توبونه وګورئ:\n{{canonicalurl:{{#special:Preferences}}#mw-prefsection-echo}}\n\n$1",
+ "echo-email-plain-footer": "ددې لپاره چې پر هغو بريښناليکونو باندې کنټرول ولري کوم چي موږ {{GENDER:$1|تاته}} درليږو، {{GENDER:$1|خپل}} غوره توبونه وګورئ:",
+ "echo-email-html-footer-preference-link-text": "خپل {{GENDER:$1|غوره توبونه}} وڅارئ",
+ "echo-email-html-footer-with-link": "د بریښنالیکونو د کنټرول لپاره کوم چې موږ {{GENDER:$2|تاسو}} ته درليږو، $1.",
+ "echo-notification-alert": "{{PLURAL:$1|خبر ($1)|خبرونه ($1)|100=خبرونې (۹۹+)}}",
"echo-notification-notice": "{{PLURAL:$1|يادښت ($1)|يادښتونه ($1)|100=يادښتونه (99+)}}",
"echo-notification-alert-text-only": "خبرونې",
"echo-notification-notice-text-only": "يادښتونه",
"echo-overlay-link": "ټولې يادگيرنې",
"echo-overlay-title": "<b>يادگيرنې</b>",
- "echo-overlay-title-overflow": "<b>يادگيرنې</b> (د$2 څخه $1 نالوستلي ښکاره کول)",
+ "echo-overlay-title-overflow": "<b>{{PLURAL:$1|يادونه}}</b> ( د $1 ښکاريدنه له $2 نالوستلي ښکاري)",
"echo-mark-all-as-read": "ټول لوستی په نخښه کول",
+ "echo-mark-all-as-read-confirmation": "$1 {{PLURAL:$1|خبرتیا|خبرتیاوې}} لکه لوستل شوي په نښه شوي",
+ "echo-mark-wiki-as-read": "په ټاکل شوي ويکي کې ټول لکه لوستلی په نښه کړي: $1",
"echo-date-today": "نن",
"echo-date-yesterday": "پرون",
- "echo-email-batch-link-text-view-all-notifications": "ټولې يادگيرنې کتل"
+ "echo-load-more-error": "د نورو پایلو د ترلاسه کولو پر مهال یوه تېروتنه رامنځته شوه.",
+ "notification-bundle-header-edit-user-talk-v2": "{{PLURAL:$1|يو نوي پيغام|$1 نوي پيغامونه|100=تر ۹۹ زيات نوي پيغامونه}} {{GENDER:$3|ستاسو}} د<strong>خبرو اترو په مخ </strong> کي ځای پر ځای شوي دي.",
+ "echo-email-batch-subject-daily": "ستاسو لپاره په {{SITENAME}} کي {{PLURAL:$2|یو نوی خبرتیا|نوی خبرتیاوي}} موجودی دي",
+ "echo-email-batch-subject-weekly": "تاسو په {{SITENAME}} کي په دي هفته کي يوه {{PLURAL:$2|يوه نوی خبرتیا|نوی خبرتیاوي}} لري",
+ "echo-email-batch-body-intro-daily": "سلام $1، د نن ورځې د فعالیت لنډیز په {{SITENAME}} کي ستا لپاره.",
+ "echo-email-batch-body-intro-weekly": "سلام $1، ددې اونۍ د فعالیت لنډیز په {{SITENAME}} کي ستا لپاره.",
+ "echo-email-batch-link-text-view-all-notifications": "ټولې يادگيرنې کتل",
+ "notification-header-foreign-alert": "نوري خبرتیاوي د {{PLURAL:$5|د بلي ويکي|$5 د نورو ويکي ګانو }} څخه",
+ "notification-header-foreign-notice": "نور ياداښتونه د {{PLURAL:$5|د بلي ويکي|$5 د نورو ويکي ګانو }} څخه",
+ "notification-header-foreign-all": "نور اطلاعات د {{PLURAL:$5|د بلي ويکي|$5 د نورو ويکي ګانو }} څخه"
}
diff --git a/Echo/i18n/pt-br.json b/Echo/i18n/pt-br.json
index 5203fcae..4b014764 100644
--- a/Echo/i18n/pt-br.json
+++ b/Echo/i18n/pt-br.json
@@ -18,7 +18,10 @@
"Peter Fernando",
"Cristofer Alves",
"Hamilton Abreu",
- "Felipe L. Ewald"
+ "Felipe L. Ewald",
+ "Chicocvenancio",
+ "Eduardo Addad de Oliveira",
+ "Opraco"
]
},
"echo-desc": "Sistema para notificar usuários sobre eventos e mensagens",
@@ -27,8 +30,7 @@
"prefs-displaynotifications": "Opções de exibição",
"prefs-echosubscriptions": "Notificar-me sobre estes eventos",
"prefs-echocrosswiki": "Notificações entre-wikis",
- "prefs-newmessageindicator": "Indicador de nova mensagem",
- "prefs-blocknotificationslist": "Lista de bloqueios",
+ "prefs-blocknotificationslist": "Usuários silenciados",
"echo-pref-send-me": "Envie-me:",
"echo-pref-send-to": "Envie para:",
"echo-pref-email-format": "Formato de e-mail:",
@@ -41,8 +43,7 @@
"echo-pref-email-format-html": "HTML",
"echo-pref-email-format-plain-text": "Texto simples",
"echo-pref-cross-wiki-notifications": "Mostrar notificações de outras wikis",
- "echo-pref-notifications-blacklist": "Lista de nomes de usuários que estão na lista negra de ativar a maioria das notificações do Echo (as edições na página de conversa do usuário ainda serão acionadas para notificações)",
- "echo-pref-new-message-indicator": "Exibir indicador de mensagem na página de discussão em minha barra de ferramentas",
+ "echo-pref-notifications-blacklist": "Não apresentar notificações destes usuários. ([[mw:Special:MyLanguage/Help:Notifications#mute|mais informações]])",
"echo-pref-beta-feature-cross-wiki-message": "Notificações aprimoradas",
"echo-pref-beta-feature-cross-wiki-description": "Confira e organize as suas notificações mais facilmente. Inclui notificações globais, o que lhe permite verificar as suas mensagens provenientes de outras wikis. (Para receber notificações globais em uma wiki específica deverá ativar a funcionalidade beta na respetiva wiki.)",
"echo-learn-more": "Saiba mais",
@@ -52,8 +53,8 @@
"echo-category-title-article-linked": "{{PLURAL:$1|Ligação|Ligações}} para a página",
"echo-category-title-reverted": "{{PLURAL:$1|Edição revertida|Edições revertidas}}",
"echo-category-title-mention": "{{PLURAL:$1|Menção|Menções}}",
- "echo-category-title-mention-failure": "{{PLURAL:$1|Mensão falhou|Menções falharam}}",
- "echo-category-title-mention-success": "{{PLURAL:$1|Mensão realizada|Menções realizadas}}",
+ "echo-category-title-mention-failure": "{{PLURAL:$1|Menção falhou|Menções falharam}}",
+ "echo-category-title-mention-success": "{{PLURAL:$1|Menção realizada|Menções realizadas}}",
"echo-category-title-other": "{{PLURAL:$1|Outro|Outros}}",
"echo-category-title-system": "{{PLURAL:$1|Sistema|Sistemas}}",
"echo-category-title-user-rights": "{{PLURAL:$1|Alteração de permissões de usuário|Alterações de permissões de usuário}}",
@@ -66,7 +67,7 @@
"echo-pref-tooltip-mention-failure": "Avise-me quando eu não puder enviar uma menção a alguém.",
"echo-pref-tooltip-mention-success": "Notifique me quando eu enviar uma menção para alguém.",
"echo-pref-tooltip-user-rights": "Notificar-me quando alguém alterar minhas permissões de usuário.",
- "echo-pref-tooltip-emailuser": "Notificar-me quando alguém me enviar um email.",
+ "echo-pref-tooltip-emailuser": "Notificar-me quando alguém me enviar um e-mail.",
"echo-pref-tooltip-article-reminder": "Avise-me sobre esta página quando eu perguntar.",
"echo-error-no-formatter": "Nenhum formato definido para notificações.",
"notifications": "Notificações",
@@ -98,8 +99,6 @@
"echo-none": "Você não tem notificações.",
"echo-more-info": "Mais informações",
"echo-feedback": "Comentários",
- "echo-popup-footer-special-page-invitation": "<strong>Experimente a página de Notificações redesenhada.</strong> [$2 $1]",
- "echo-popup-footer-special-page-invitation-link": "Todos os novos looks e recursos.",
"echo-quotation-marks": "\"$1\"",
"echo-api-failure": "Não foi possível recuperar as notificações.",
"echo-api-failure-cross-wiki": "O acesso ao domínio remoto foi negado.",
@@ -129,6 +128,8 @@
"notification-link-text-view-page": "Ver página",
"notification-header-edit-user-talk": "$1 {{GENDER:$2|deixou}} uma mensagem na '''{{GENDER:$3|sua}} página de discussão'''.",
"notification-header-edit-user-talk-with-section": "$1 {{GENDER:$2|deixou}} uma mensagem na <strong>{{GENDER:$3|sua}} página de discussão</strong> em “<strong>$4</strong>”.",
+ "notification-compact-header-edit-user-talk": "$1 {{GENDER:$2|deixou}}{{GENDER:$3|-lhe}} uma mensagem.",
+ "notification-compact-header-edit-user-talk-with-section": "$1 {{GENDER:$2|deixou}}{{GENDER:$3|-lhe}} uma mensagem em \"<strong>$4</strong>\".",
"notification-body-edit-user-talk-with-section": "$1",
"notification-header-page-linked": "Uma ligação foi criada de <strong>$4</strong> para <strong>$3</strong>.",
"notification-compact-header-page-linked": "Vinculado de <strong>$1</strong>.",
@@ -158,6 +159,7 @@
"notification-header-user-rights-add-and-remove": "Os {{GENDER:$6|seus}} privilégios foram {{GENDER:$1|alterados}}. Foi {{GENDER:$6|adicionado|adicionada|adicionado(a)}} a: $2. Não pertence mais a: $4.",
"notification-header-user-rights-expiry-change": "A expiração de {{GENDER:$4|sua}} associação {{PLURAL:$3|no seguinte grupo|nos seguintes grupos}} foi {{GENDER:$1|modificado|modificada}}: $2.",
"notification-header-welcome": "{{GENDER:$2|Bem-vindo|Bem-vinda}} ao site {{SITENAME}}, $1! Estamos contentes por ter {{GENDER:$2|você}} aqui.",
+ "notification-header-mention-summary": "$1 {{GENDER:$2|mencionou}} {{GENDER:$4|você}} em um resumo de edição em <strong>$3</strong>.",
"notification-welcome-linktext": "Bem-vindo(a)",
"notification-header-thank-you-1-edit": "{{GENDER:$2|Você}} acaba de fez {{GENDER:$2|sua}} primeira edição; {{GENDER:$2|Obrigado e seja bem-vindo!|Obrigada e seja bem-vinda!}}",
"notification-header-thank-you-10-edit": "{{GENDER:$2|Você}} acaba de fez {{GENDER:$2|sua}} décima edição; {{GENDER:$2|Obrigado|Obrigada}} e continue por aí!",
@@ -178,12 +180,12 @@
"notification-reverted-email-subject2": "{{PLURAL:$3|Sua edição foi revertida|Suas edições foram revertidas}} {{GENDER:$1|em}} {{SITENAME}}",
"notification-mention-email-subject": "$1 {{GENDER:$1|mencionou}} {{GENDER:$2|você}} em {{SITENAME}}",
"notification-user-rights-email-subject": "Seus direitos de usuários mudaram em {{SITENAME}}",
- "notification-timestamp-ago-seconds": "{{PLURAL:$1|$1s}}",
- "notification-timestamp-ago-minutes": "{{PLURAL:$1|$1m}}",
- "notification-timestamp-ago-hours": "{{PLURAL:$1|$1h}}",
- "notification-timestamp-ago-days": "{{PLURAL:$1|$1d}}",
- "notification-timestamp-ago-months": "{{PLURAL:$1|$1m}}",
- "notification-timestamp-ago-years": "{{PLURAL:$1|$1a}}",
+ "notification-timestamp-ago-seconds": "{{PLURAL:$1|$1&nbsp;s}}",
+ "notification-timestamp-ago-minutes": "{{PLURAL:$1|$1&nbsp;min}}",
+ "notification-timestamp-ago-hours": "{{PLURAL:$1|$1&nbsp;h}}",
+ "notification-timestamp-ago-days": "$1&nbsp;{{PLURAL:$1|dia|dias}}",
+ "notification-timestamp-ago-months": "{{PLURAL:$1|$1&nbsp;mês|$1&nbsp;meses}}",
+ "notification-timestamp-ago-years": "$1&nbsp;{{PLURAL:$1|ano|anos}}",
"notification-timestamp-today": "Hoje",
"notification-timestamp-yesterday": "Ontem",
"notification-inbox-filter-read": "Ler",
diff --git a/Echo/i18n/pt.json b/Echo/i18n/pt.json
index 8d0753ea..384686de 100644
--- a/Echo/i18n/pt.json
+++ b/Echo/i18n/pt.json
@@ -16,7 +16,9 @@
"Diniscoelho",
"Gato Preto",
"Mansil",
- "Hamilton Abreu"
+ "Hamilton Abreu",
+ "Athena in Wonderland",
+ "Opraco"
]
},
"echo-desc": "Sistema de notificações a utilizadores sobre eventos e mensagens",
@@ -25,8 +27,7 @@
"prefs-displaynotifications": "Opções de visualização",
"prefs-echosubscriptions": "Notificar-me sobre estes eventos",
"prefs-echocrosswiki": "Notificações interwikis",
- "prefs-newmessageindicator": "Indicador de nova mensagem",
- "prefs-blocknotificationslist": "Lista de bloqueios",
+ "prefs-blocknotificationslist": "Utilizadores silenciados",
"echo-pref-send-me": "Enviar-me:",
"echo-pref-send-to": "Enviar para:",
"echo-pref-email-format": "Formato de correio:",
@@ -39,15 +40,14 @@
"echo-pref-email-format-html": "HTML",
"echo-pref-email-format-plain-text": "Texto simples",
"echo-pref-cross-wiki-notifications": "Mostrar notificações de outras wikis",
- "echo-pref-notifications-blacklist": "Lista de nomes de utilizador que não podem desencadear a maioria das notificações Echo (as edições da sua página de discussão continuarão a desencadear notificações)",
- "echo-pref-new-message-indicator": "Mostrar indicador de mensagem na página de discussão na minha barra de ferramentas",
+ "echo-pref-notifications-blacklist": "Não apresentar notificações destes utilizadores. ([[mw:Special:MyLanguage/Help:Notifications#mute|mais informações]])",
"echo-pref-beta-feature-cross-wiki-message": "Notificações melhoradas",
"echo-pref-beta-feature-cross-wiki-description": "Veja e organize as suas notificações mais facilmente. Inclui notificações interwikis, o que lhe permite ver as mensagens provenientes de outras wikis. (Para receber notificações interwikis deverá ativar a funcionalidade beta na respetiva wiki.)",
"echo-learn-more": "Saiba mais",
"echo-log": "Registo público",
"echo-new-messages": "Tem novas mensagens",
"echo-category-title-edit-user-talk": "{{PLURAL:$1|Mensagem|Mensagens}} na página de discussão",
- "echo-category-title-article-linked": "{{PLURAL:$1|Ligação|Ligações}} para a página",
+ "echo-category-title-article-linked": "{{PLURAL:$1|Hiperligação|Hiperligações}} para uma página",
"echo-category-title-reverted": "{{PLURAL:$1|Edição revertida|Edições revertidas}}",
"echo-category-title-mention": "{{PLURAL:$1|Menção|Menções}}",
"echo-category-title-mention-failure": "{{PLURAL:$1|Menção falhada|Menções falhadas}}",
@@ -58,9 +58,9 @@
"echo-category-title-emailuser": "{{PLURAL:$1|Correio eletrónico de outro utilizador|Correio eletrónico de outros utilizadores}}",
"echo-category-title-article-reminder": "{{PLURAL:$1|Notificação|Notificações}} de páginas",
"echo-pref-tooltip-edit-user-talk": "Notificar-me quando alguém publicar na minha página de discussão.",
- "echo-pref-tooltip-article-linked": "Notificar-me quando alguém interligar uma página criada por mim numa outra.",
+ "echo-pref-tooltip-article-linked": "Notificar-me quando alguém criar uma hiperligação para uma página criada por mim, a partir de outra página.",
"echo-pref-tooltip-reverted": "Notificar-me quando alguém reverter uma edição minha, ao utilizar a função desfazer ou a ferramenta de reversão.",
- "echo-pref-tooltip-mention": "Notificar-me quando alguém criar uma ligação para a minha página de utilizador.",
+ "echo-pref-tooltip-mention": "Notificar-me quando alguém criar uma hiperligação para a minha página de utilizador.",
"echo-pref-tooltip-mention-failure": "Notificar-me quando ocorrer um erro ao mencionar alguém.",
"echo-pref-tooltip-mention-success": "Notificar-me quando menciono alguém.",
"echo-pref-tooltip-user-rights": "Notificar-me quando os meus privilégios de utilizador forem alterados.",
@@ -95,8 +95,6 @@
"echo-none": "Não tem notificações.",
"echo-more-info": "Mais informações",
"echo-feedback": "Comentários",
- "echo-popup-footer-special-page-invitation": "<strong>Experimente a página redesenhada de notificações.</strong> [$2 $1]",
- "echo-popup-footer-special-page-invitation-link": "Aspeto e funcionalidades totalmente novas.",
"echo-api-failure": "Não foi possível obter as notificações.",
"echo-api-failure-cross-wiki": "O acesso ao domínio remoto foi negado.",
"echo-notification-placeholder": "Não há notificações.",
@@ -125,9 +123,11 @@
"notification-link-text-view-page": "Ver página",
"notification-header-edit-user-talk": "$1 {{GENDER:$2|deixou}} uma mensagem na <strong>{{GENDER:$3|sua}} página de discussão</strong>.",
"notification-header-edit-user-talk-with-section": "$1 {{GENDER:$2|deixou}} uma mensagem na <strong>{{GENDER:$3|sua}} página de discussão</strong>, na secção \"<strong>$4</strong>\".",
- "notification-header-page-linked": "Foi feita ligação em <strong>$4</strong> para <strong>$3</strong>.",
- "notification-compact-header-page-linked": "Feita ligação a partir de <strong>$1</strong>.",
- "notification-bundle-header-page-linked": "Foram feitas ligações para <strong>$3</strong> em {{PLURAL:$5||$5 outras páginas|100=mais de 99 outras páginas}}.",
+ "notification-compact-header-edit-user-talk": "$1 {{GENDER:$2|deixou}}{{GENDER:$3|-lhe}} uma mensagem.",
+ "notification-compact-header-edit-user-talk-with-section": "$1 {{GENDER:$2|deixou}}{{GENDER:$3|-lhe}} uma mensagem em \"<strong>$4</strong>\".",
+ "notification-header-page-linked": "Foi feita uma hiperligação em <strong>$4</strong> para <strong>$3</strong>.",
+ "notification-compact-header-page-linked": "Hiperligação a partir de <strong>$1</strong>.",
+ "notification-bundle-header-page-linked": "Foram criadas hiperligações para <strong>$3</strong> em {{PLURAL:$5||$5 outras páginas|100=mais de 99 outras páginas}}.",
"notification-header-article-reminder": "Uma página acerca da qual pediu para ser {{GENDER:$2|recordado|recordada}} está em <strong>$3</strong>",
"notification-link-text-what-links-here": "Todas as páginas afluentes desta",
"notification-header-mention-other": "$1 {{GENDER:$2|mencionou-}}{{GENDER:$3|o|a|o(a)}} em <strong>$4</strong>, na secção \"<strong>$5</strong>\".",
@@ -147,12 +147,13 @@
"notification-header-mention-success": "A {{GENDER:$2|sua}} menção de <strong>$3</strong> foi enviada.",
"notification-header-mention-success-bundle": "{{PLURAL:$3|A menção|As $3 menções}} {{GENDER:$2|que fez}} na página de discussão \"<strong>$4</strong>\" {{PLURAL:$3|foi enviada|foram enviadas}}.",
"notification-compact-header-mention-success": "<strong>{{GENDER:$2|Mencionou}}:</strong> $3",
- "notification-header-mention-status-bundle": "{{PLURAL:$3|Uma notificação|$3 notificações}} sobre menções {{GENDER:$2|que fez}} na página de discussão \"<strong>$4</strong>\": {{PLURAL:$5|$5 não enviadas}}, {{PLURAL:$6|$6 enviadas}}.",
+ "notification-header-mention-status-bundle": "{{PLURAL:$3|Uma notificação|$3 notificações}} sobre menções {{GENDER:$2|que fez}} na página de discussão \"<strong>$4</strong>\": $5 {{PLURAL:$5|não enviada|não enviadas}}, $6 {{PLURAL:$6|enviada|enviadas}}.",
"notification-header-user-rights-add-only": "Os {{GENDER:$4|seus}} privilégios foram {{GENDER:$1|alterados}}. Foi {{GENDER:$4|adicionado|adicionada|adicionado(a)}} a: $2.",
"notification-header-user-rights-remove-only": "Os {{GENDER:$4|seus}} privilégios foram {{GENDER:$1|alterados}}. Deixou de pertencer a: $2.",
"notification-header-user-rights-add-and-remove": "Os {{GENDER:$6|seus}} privilégios foram {{GENDER:$1|alterados}}. Foi {{GENDER:$6|adicionado|adicionada|adicionado(a)}} a: $2. Deixou de pertencer a: $4.",
"notification-header-user-rights-expiry-change": "A expiração de {{GENDER:$4|sua}} associação {{PLURAL:$3|no seguinte grupo|nos seguintes grupos}} foi {{GENDER:$1|alterada}}: $2",
"notification-header-welcome": "{{GENDER:$2|Bem-vindo|Bem-vinda|Bem-vindo(a)}} à wiki {{SITENAME}}, $1! Ficamos satisfeitos por {{GENDER:$2|tê-lo|tê-la|tê-lo(a)}} aqui.",
+ "notification-header-mention-summary": "$1 {{GENDER:$2|mencionou-}}{{GENDER:$3|o|a}} num resumo de edição em <strong>$4</strong>.",
"notification-welcome-linktext": "Bem-vindo(a)!",
"notification-header-thank-you-1-edit": "{{GENDER:$2|Acabou}} de fazer a {{GENDER:$2|sua}} primeira edição; obrigado, e seja {{GENDER:$2|bem-vindo|bem-vinda|bem-vindo(a)}}!",
"notification-header-thank-you-10-edit": "{{GENDER:$2|Acabou}} de fazer a {{GENDER:$2|sua}} décima edição; obrigado e, por favor, continue!",
@@ -168,12 +169,12 @@
"notification-header-emailuser": "$1 {{GENDER:$2|enviou-lhe}} uma mensagem de correio.",
"notification-edit-talk-page-email-subject2": "$1 {{GENDER:$1|deixou-lhe}} uma mensagem na wiki {{SITENAME}}",
"notification-edit-talk-page-email-batch-body-with-section": "$1 {{GENDER:$1|deixou-lhe}} uma mensagem na sua página de discussão na secção \"$2\".",
- "notification-page-linked-email-subject": "Foi criada uma ligação para uma página que criou na wiki {{SITENAME}}",
+ "notification-page-linked-email-subject": "Foi criada uma hiperligação para uma página que criou na wiki {{SITENAME}}",
"notification-reverted-email-subject2": "{{PLURAL:$3|A sua edição foi revertida|As suas edições foram revertidas}}{{GENDER:$1|}} na wiki {{SITENAME}}",
"notification-mention-email-subject": "$1 {{GENDER:$1|mencionou-}}{{GENDER:$2|o|a|o(a)}} na wiki {{SITENAME}}",
"notification-user-rights-email-subject": "Os seus privilégios de utilizador foram alterados na wiki {{SITENAME}}",
"notification-timestamp-ago-seconds": "{{PLURAL:$1|$1 s}}",
- "notification-timestamp-ago-minutes": "{{PLURAL:$1|$1 m}}",
+ "notification-timestamp-ago-minutes": "{{PLURAL:$1|$1 min}}",
"notification-timestamp-ago-hours": "{{PLURAL:$1|$1 h}}",
"notification-timestamp-ago-days": "{{PLURAL:$1|$1 d}}",
"notification-timestamp-ago-months": "{{PLURAL:$1|$1 mês|$1 meses}}",
diff --git a/Echo/i18n/qqq.json b/Echo/i18n/qqq.json
index cb66f3e6..36e8edd2 100644
--- a/Echo/i18n/qqq.json
+++ b/Echo/i18n/qqq.json
@@ -28,7 +28,10 @@
"Matěj Suchánek",
"McDutchie",
"Ans",
- "Verdy p"
+ "Verdy p",
+ "Mar(c)",
+ "Matma Rex",
+ "Tweety"
]
},
"echo-desc": "{{desc|name=Echo|url=https://www.mediawiki.org/wiki/Extension:Echo}} The [https://www.mediawiki.org/wiki/Help:Notifications Mediawiki help] page gives notes on the terminology in this extension.",
@@ -37,7 +40,6 @@
"prefs-displaynotifications": "Header for the section of preferences that deals with how notifications are displayed",
"prefs-echosubscriptions": "Header for the section of preferences that deals with which notifications the user receives",
"prefs-echocrosswiki": "Header for the section of preferences that deals with notifications from other wikis",
- "prefs-newmessageindicator": "Header for the section of preferences that deals with talk page message alerts",
"prefs-blocknotificationslist": "Header for the section of preferences that deals with blocking notifications from certain users",
"echo-pref-send-me": "Label for the following email delivery options:\n* {{msg-mw|Echo-pref-email-frequency-never}}\n* {{msg-mw|Echo-pref-email-frequency-immediately}} (default)\n* {{msg-mw|Echo-pref-email-frequency-daily}}\n* {{msg-mw|Echo-pref-email-frequency-weekly}}",
"echo-pref-send-to": "Label for the address to send email notifications to.",
@@ -48,36 +50,35 @@
"echo-pref-email-frequency-immediately": "Option for users who want to receive email for each notification as it occurs",
"echo-pref-email-frequency-daily": "Option for users who want to receive a daily digest of email notifications",
"echo-pref-email-frequency-weekly": "Option for users who want to receive a weekly digest of email notifications",
- "echo-pref-email-format-html": "Option for users who want to receive HTML email notification.\n\nSee also:\n* {{msg-mw|Echo-pref-email-format}}\n{{Identical|HTML}}",
+ "echo-pref-email-format-html": "ترجيات انهن واپرائيندڙن لاءِ جيڪي برق ٽپال ۾ ايڇ ٽي ايم ايل اطلاع ڏسڻ چاهين ٿا.\n\nوڌيڪ ڏسو:\n* {{msg-mw|Echo-pref-email-format}}\n{{Identical|ايڇ ٽي ايم يل}}",
"echo-pref-email-format-plain-text": "Option for users who want to receive plain text email notification.\n\nSee also:\n* {{msg-mw|Echo-pref-email-format}}\n{{Identical|Plain text}}",
"echo-pref-cross-wiki-notifications": "Label for a preference which enables notifications from other wikis. Only used if {{msg-mw|echo-pref-beta-feature-cross-wiki-message}} is not used.",
"echo-pref-notifications-blacklist": "Label for a preference which allows a user to block notifications from certain users.\n\nNote that the translatewiki.net tool may warn, if you alter the link to use an existing translated version linked from the English page at [[mw:Help:Notifications#mute]], such as [[mw:Help:Notifications/fr#mute]] for the French version.",
- "echo-pref-new-message-indicator": "Label for a preference which enables the new talk page message alert",
"echo-pref-beta-feature-cross-wiki-message": "Label for the cross-wiki notifications Beta Feature. Only used if {{msg-mw|echo-pref-cross-wiki-notifications}} is not used.",
"echo-pref-beta-feature-cross-wiki-description": "Description for the cross-wiki notifications Beta Feature, describing the feature that will be enabled. Only used if {{msg-mw|echo-pref-cross-wiki-notifications}} is not used.",
"echo-learn-more": "Text for link to more information about a topic.\n{{Identical|Learn more}}",
"echo-log": "Text for link to go to Special:Log",
"echo-new-messages": "Message to let the user know that they have new talk page messages, displayed in the personal menu (top-right corner on Vector and Monobook).\n\nKeep this message short. It '''should not''' end in a full stop.",
- "echo-category-title-edit-user-talk": "This is a short title for notification category.\n\nUsed in a list of options under the heading {{msg-mw|Prefs-echosubscriptions}} in Special:Preferences. As far as I can see this always needs to be a plural for an unspecified number.\n\nIt used to be used as <code>$1</code> in {{msg-mw|Echo-dismiss-message}}, but this message is no longer used, apparently.\n\nParameters:\n* $1 - number of messages, for PLURAL support\n{{Related|Echo-category-title}}",
- "echo-category-title-article-linked": "This is a short title for notification category.\n\nUsed in a list of options under the heading {{msg-mw|Prefs-echosubscriptions}} in Special:Preferences. As far as I can see this always needs to be a plural for an unspecified number.\n\nIt used to be used as <code>$1</code> in {{msg-mw|Echo-dismiss-message}}, but this message is no longer used, apparently.\n\nParameters:\n* $1 - number of messages, for PLURAL support\n{{Related|Echo-category-title}}",
- "echo-category-title-reverted": "This is a short title for notification category.\n\nUsed in a list of options under the heading {{msg-mw|Prefs-echosubscriptions}} in Special:Preferences. As far as I can see this always needs to be a plural for an unspecified number.\n\nIt used to be used as <code>$1</code> in {{msg-mw|Echo-dismiss-message}}, but this message is no longer used, apparently.\n\nParameters:\n* $1 - number of messages, for PLURAL support\n{{Related|Echo-category-title}}",
- "echo-category-title-mention": "This is a short title for notification category.\n\nUsed in a list of options under the heading {{msg-mw|Prefs-echosubscriptions}} in Special:Preferences. As far as I can see this always needs to be a plural for an unspecified number.\n\nIt used to be used as <code>$1</code> in {{msg-mw|Echo-dismiss-message}}, but this message is no longer used, apparently.\n\nParameters:\n* $1 - number of messages, for PLURAL support\n{{Related|Echo-category-title}}\n{{Identical|Mention}}",
- "echo-category-title-mention-failure": "This is a short title for notification category.\n\nUsed in a list of options under the heading {{msg-mw|Prefs-echosubscriptions}} in Special:Preferences. As far as I can see this always needs to be a plural for an unspecified number.\n\nIt used to be used as <code>$1</code> in {{msg-mw|Echo-dismiss-message}}, but this message is no longer used, apparently.\n{{Related|Echo-category-title}}",
- "echo-category-title-mention-success": "This is a short title for notification category.\n\nUsed in a list of options under the heading {{msg-mw|Prefs-echosubscriptions}} in Special:Preferences. As far as I can see this always needs to be a plural for an unspecified number.\n\nIt used to be used as <code>$1</code> in {{msg-mw|Echo-dismiss-message}}, but this message is no longer used, apparently.\n{{Related|Echo-category-title}}",
- "echo-category-title-other": "This is a short title for notification category.\n\nUsed in a list of options under the heading {{msg-mw|Prefs-echosubscriptions}} in Special:Preferences. As far as I can see this always needs to be a plural for an unspecified number.\n\nIt used to be used as <code>$1</code> in {{msg-mw|Echo-dismiss-message}}, but this message is no longer used, apparently.\n\nParameters:\n* $1 - number of messages, for PLURAL support\n{{Related|Echo-category-title}}\n{{Identical|Other}}",
- "echo-category-title-system": "This is a short title for notification category.\n\nUsed in a list of options under the heading {{msg-mw|Prefs-echosubscriptions}} in Special:Preferences. As far as I can see this always needs to be a plural for an unspecified number.\n\nIt used to be used as <code>$1</code> in {{msg-mw|Echo-dismiss-message}}, but this message is no longer used, apparently.\n\nParameters:\n* $1 - number of messages, for PLURAL support\n{{Related|Echo-category-title}}\n{{Identical|System}}",
- "echo-category-title-user-rights": "This is a short title for notification category.\n\nUsed in a list of options under the heading {{msg-mw|Prefs-echosubscriptions}} in Special:Preferences. As far as I can see this always needs to be a plural for an unspecified number.\n\nIt used to be used as <code>$1</code> in {{msg-mw|Echo-dismiss-message}}, but this message is no longer used, apparently.\n\nParameters:\n* $1 - number of messages, for PLURAL support\n{{Related|Echo-category-title}}",
- "echo-category-title-emailuser": "This is a short title for notification category.\n\nUsed in a list of options under the heading {{msg-mw|Prefs-echosubscriptions}} in Special:Preferences. As far as I can see this always needs to be a plural for an unspecified number.\n\nIt used to be used as <code>$1</code> in {{msg-mw|Echo-dismiss-message}}, but this message is no longer used, apparently.\n\nParameters:\n* $1 - number of messages, for PLURAL support\n{{Related|Echo-category-title}}",
- "echo-category-title-article-reminder": "This is a short title for notification category.\n\nUsed in a list of options under the heading {{msg-mw|Prefs-echosubscriptions}} in Special:Preferences. As far as I can see this always needs to be a plural for an unspecified number.\n\nIt used to be used as <code>$1</code> in {{msg-mw|Echo-dismiss-message}}, but this message is no longer used, apparently.\n\nParameters:\n* $1 - number of messages, for PLURAL support\n{{Related|Echo-category-title}}",
- "echo-pref-tooltip-edit-user-talk": "This is a short description of the edit-user-talk notification category.\n{{Related|Echo-pref-tooltip}}",
- "echo-pref-tooltip-article-linked": "This is a short description of the article-linked notification category.\n{{Related|Echo-pref-tooltip}}",
- "echo-pref-tooltip-reverted": "This is a short description of the tooltip-reverted notification category.\n{{Related|Echo-pref-tooltip}}",
- "echo-pref-tooltip-mention": "This is a short description of the mention notification category.\n{{Related|Echo-pref-tooltip}}",
- "echo-pref-tooltip-mention-failure": "This is a short description of the mention failure notification category.\n{{Related|Echo-pref-tooltip}}",
- "echo-pref-tooltip-mention-success": "This is a short description of the mention success notification category.\n{{Related|Echo-pref-tooltip}}",
- "echo-pref-tooltip-user-rights": "This is a short description of the user rights changes notification category\n{{Related|Echo-pref-tooltip}}",
- "echo-pref-tooltip-emailuser": "This is a short description of the user email notification category\n{{Related|Echo-pref-tooltip}}",
- "echo-pref-tooltip-article-reminder": "This is a short description of the article reminder user notification category\n{{Related|Echo-pref-tooltip}}",
+ "echo-category-title-edit-user-talk": "{{doc-echo-category-title|tooltip=Echo-pref-tooltip-edit-user-talk}}",
+ "echo-category-title-article-linked": "{{doc-echo-category-title|tooltip=Echo-pref-tooltip-article-linked}}",
+ "echo-category-title-reverted": "{{doc-echo-category-title|tooltip=Echo-pref-tooltip-reverted}}",
+ "echo-category-title-mention": "{{doc-echo-category-title|tooltip=Echo-pref-tooltip-mention}}\n{{Identical|Mention}}",
+ "echo-category-title-mention-failure": "{{doc-echo-category-title|tooltip=Echo-pref-tooltip-mention-failure}}",
+ "echo-category-title-mention-success": "{{doc-echo-category-title|tooltip=Echo-pref-tooltip-mention-success}}",
+ "echo-category-title-other": "{{doc-echo-category-title}}\n{{Identical|Other}}",
+ "echo-category-title-system": "{{doc-echo-category-title}}\n{{Identical|System}}",
+ "echo-category-title-user-rights": "{{doc-echo-category-title|tooltip=Echo-pref-tooltip-user-rights}}",
+ "echo-category-title-emailuser": "{{doc-echo-category-title|tooltip=Echo-pref-tooltip-emailuser}}",
+ "echo-category-title-article-reminder": "{{doc-echo-category-title|tooltip=Echo-pref-tooltip-article-reminder}}",
+ "echo-pref-tooltip-edit-user-talk": "{{doc-echo-pref-tooltip|title=Echo-category-title-edit-user-talk}}",
+ "echo-pref-tooltip-article-linked": "{{doc-echo-pref-tooltip|title=Echo-category-title-article-linked}}",
+ "echo-pref-tooltip-reverted": "{{doc-echo-pref-tooltip|title=Echo-category-title-reverted}}",
+ "echo-pref-tooltip-mention": "{{doc-echo-pref-tooltip|title=Echo-category-title-mention}}",
+ "echo-pref-tooltip-mention-failure": "{{doc-echo-pref-tooltip|title=Echo-category-title-mention-failure}}",
+ "echo-pref-tooltip-mention-success": "{{doc-echo-pref-tooltip|title=Echo-category-title-mention-success}}",
+ "echo-pref-tooltip-user-rights": "{{doc-echo-pref-tooltip|title=Echo-category-title-user-rights}}",
+ "echo-pref-tooltip-emailuser": "{{doc-echo-pref-tooltip|title=Echo-category-title-emailuser}}",
+ "echo-pref-tooltip-article-reminder": "{{doc-echo-pref-tooltip|title=Echo-category-title-article-reminder}}",
"echo-error-no-formatter": "Error message displayed when no formatting has been defined for a notification. In other words, the extension doesn't know how to properly display the notification.",
"notifications": "{{doc-special|Notifications}}\n{{Identical|Notification}}",
"tooltip-pt-notifications-alert": "This is used for the title (mouseover text) of the alert notifications user tool.",
@@ -108,8 +109,6 @@
"echo-none": "Message shown to users who have no notifications. Also shown in the overlay.",
"echo-more-info": "This is used for the title (mouseover text) of an icon that links to a page with more information about the Echo extension.\n{{Identical|More information}}",
"echo-feedback": "Text for a link that goes to a feedback survey shown at [[Special:Notifications]].\n{{Identical|Feedback}}",
- "echo-popup-footer-special-page-invitation": "Text inviting the user to try the new [[Special:Notifications]] page, displayed at the bottom of the notifications popup.\n\nParameters:\n* $1 - Text of the link ({{msg-mw|echo-popup-footer-special-page-invitation-link}}).\n* $2 - URL of the link to Special:Notifications.",
- "echo-popup-footer-special-page-invitation-link": "Text for the link in {{msg-mw|echo-popup-footer-special-page-invitation}}.",
"echo-quotation-marks": "Unused at this time.\n\n{{optional}}\nPuts the edit summary in quotation marks. Only translate if different than English.\n\nParameters:\n* $1 - ...",
"echo-api-failure": "Label for the text that notes an error in retrieving notifications for the Echo popup.",
"echo-api-failure-cross-wiki": "Label for the api failure text for a failure to fetch cross-wiki notifications, but the remote server is not granted access.",
@@ -139,6 +138,8 @@
"notification-link-text-view-page": "Label for button that links to a page.\n{{Identical|View page}}",
"notification-header-edit-user-talk": "Flyout-specific format for displaying notification header of a user talk page being edited.\n\nParameters:\n* $1 - the formatted username of the person who edited.\n* $2 - the username for GENDER\n* $3 - username of the current user, can be used for GENDER",
"notification-header-edit-user-talk-with-section": "Flyout-specific format for displaying notification header of a user talk page being edited with a new section or new comment.\n\nParameters:\n* $1 - the formatted username of the person who edited.\n* $2 - the username for GENDER\n* $3 - username of the current user, can be used for GENDER\n* $4 - the raw section title text",
+ "notification-compact-header-edit-user-talk": "Flyout-specific format for displaying compact notification header of a user talk page being edited.\n\nParameters:\n* $1 - the formatted username of the person who edited.\n* $2 - the username for GENDER\n* $3 - username of the current user, can be used for GENDER",
+ "notification-compact-header-edit-user-talk-with-section": "Flyout-specific format for displaying compact notification header of a user talk page being edited with a new section or new comment.\n\nParameters:\n* $1 - the formatted username of the person who edited.\n* $2 - the username for GENDER\n* $3 - username of the current user, can be used for GENDER\n* $4 - the raw section title text",
"notification-body-edit-user-talk-with-section": "{{optional}}\nFlyout-specific format for displaying notification body of a user talk page being edited with a new section or new comment.\n\nParameters:\n* $1 - comment left on the user talk page.",
"notification-header-page-linked": "Notification header message for articles being linked.\n\nParameters:\n* $1 - the formatted username of the person who linked the page. \n* $2 - the username for GENDER\n* $3 - the page being linked\n* $4 - the page linked from\nSee also:\n* {{msg-mw|Notification-page-linked-email-subject}}",
"notification-compact-header-page-linked": "Notification compact header message for articles being linked.\n\nParameters:\n* $1 - the page linked from.\nSee also:\n* {{msg-mw|Notification-page-linked-email-subject}}",
@@ -168,8 +169,8 @@
"notification-header-user-rights-remove-only": "Notifications header message when a user is removed from groups. Parameters:\n* $1 - the raw username of the person who made the user rights change, can be used for GENDER support\n* $2 - a localized list of the groups that were removed\n* $3 - the number of groups that were removed, can be used for PLURAL\n* $4 - name of the user viewing the notification, can be used for GENDER",
"notification-header-user-rights-add-and-remove": "Notifications header message when a user is added to groups and removed from groups. Parameters:\n* $1 - the raw username of the person who made the user rights change, can be used for GENDER support\n* $2 - a localized list of the groups that were added\n* $4 - a localized list of the groups that were removed\n* $6 - name of the user viewing the notification, can be used for GENDER",
"notification-header-user-rights-expiry-change": "Notifications header message when a user's group membership is extended or reduced in duration. Parameters:\n* $1 - the raw username of the person who made the user rights change, can be used for GENDER support\n* $2 - a localized list of the groups for which the expiry was changed\n* $3 - the number of groups that were changed, can be used for PLURAL\n* $4 - name of the user viewing the notification, can be used for GENDER",
- "notification-body-user-rights": "{{notranslate}}",
"notification-header-welcome": "Text of the welcome notification. Parameters:\n* $1 - the name of the new user.\nSee also:\n* {{msg-mw|Guidedtour-tour-gettingstarted-start-title}}",
+ "notification-header-mention-summary": "Header text for a notification when you are mentioned by another user in an edit summary.\n* $1 - user's name (not suitable for GENDER).\n* $2 - user's name for use in GENDER.\n* $3 - name of the user viewing the notification, can be used for GENDER\n* $4 - name of the page they were mentioned in (with namespace)",
"notification-welcome-link": "{{notranslate}}",
"notification-welcome-linktext": "Link text for link to the wiki's welcome or introduction page.\n{{Identical|Welcome}}",
"notification-header-thank-you-1-edit": "Text of the editor welcome notification for their first edit.\nParameters:\n* $1 - the formatted username of the new user\n* $2 - the username for gender purposes",
@@ -182,7 +183,7 @@
"notification-link-thank-you-edit": "Label for the link to the user's edit which triggered a threshold congratulations message.\nParameters:\n* $1 - the username for gender purposes",
"notification-link-text-view-edit": "Label for button that links to a \"diff\" view showing an edit made to a page. This is an alternative to the wording in {{msg-mw|notification-link-text-view-changes}}, which serves essentially the same function.",
"notification-link-article-reminder": "Label for the link to the article the user requested to be reminded about",
- "notification-header-reverted": "Notification header of a user's edit being reverted.\n\nParameters:\n* $2 - the username for GENDER\n* $3 - the page that was reverted, formatted\n* $4 - the number of edits that were reverted. NOTE: This will only be set to 1 or 2, with 2 actually meaning \"an unknown number greater than 0\".\n{{Related|Notification-reverted}}",
+ "notification-header-reverted": "Notification header of a user's edit being reverted.\n\nParameters:\n* $2 - the username for GENDER\n* $3 - the page that was reverted, formatted\n* $4 - the number of edits that were reverted\n{{Related|Notification-reverted}}",
"notification-body-reverted": "{{notranslate}}",
"notification-header-emailuser": "Flyout-specific format for displaying notifications of user has sent an email to another user.\n\nParameters:\n* $1 - the formatted username of the person who sent the email.\n* $2 - the username for GENDER.",
"notification-body-emailuser": "{{notranslate}}",
diff --git a/Echo/i18n/qu.json b/Echo/i18n/qu.json
index c15e8902..01c27a0e 100644
--- a/Echo/i18n/qu.json
+++ b/Echo/i18n/qu.json
@@ -13,22 +13,14 @@
"echo-new-messages": "Musuq willaykunam qhawanayki kachkan",
"notifications": "Willaykuykuna",
"tooltip-pt-notifications-alert": "{{GENDER:|}}Ch'itiyayniykikuna",
- "tooltip-pt-notifications-message": "{{GENDER:|}}Willayniykikuna",
"echo-specialpage": "Willaykuykuna",
"notification-link-text-view-message": "Willasqata qhaway",
"notification-link-text-view-changes": "Hukchasqakunata qhaway",
- "notification-edit-talk-page2": "[[User:$1|$1]] sutiyuq ruraqqa qampaq {{GENDER:$1|willaynintam}} [[User talk:$2#$3|rimanakuy p'anqaykipi]] saqisurqanki.",
- "notification-edit-talk-page-with-section": "[[User:$1|$1]] sutiyuq ruraqqa qampaq {{GENDER:$1|willaynintam}} rimanakuy p'anqaykipi [[User talk:$2#$3|$4]]-pi saqisurqanki.",
- "notification-mention": "[[User:$1|$1]] qammanta rimaspa {{GENDER:$1|qillqarqan}} $5 rimanakuy p'anqapi \"[[:$3#$2|$4]]\" nisqapim.",
- "notification-reverted2": "[[$5|$1]] sutiyuq ruraqqa [[:$2]] nisqapi qampa {{PLURAL:$4|llamk'apusqaykita|llamk'apusqaykikunata}} {{GENDER:$1|kutichirqanmi}}. $3",
"notification-header-reverted": "$1 sutiyuq ruraqqa $3 nisqapi qampa {{PLURAL:$4|llamk'apusqaykita|llamk'apusqaykikunata}} {{GENDER:$2|kutichirqanmi}}.",
"notification-edit-talk-page-email-subject2": "$1 sutiyuq {{GENDER:$1|ruraqqa}} willasqantam saqisurqanki {{SITENAME}} nisqapi.",
- "notification-edit-talk-page-email-batch-body2": "$1 sutiyuq {{GENDER:$1|ruraqqa}} rimanakuy p'anqaykipi willasqantam saqirqan:",
"notification-edit-talk-page-email-batch-body-with-section": "$1 sutiyuq {{GENDER:$1|ruraqqa}} rimanakuy p'anqaykipi willasqantam saqisurqanki \"$2\" nisqapi.",
"echo-email-footer-default": "$2\n\nKachasunayku e-chaski qillqakunata kamachinaykipaqqa, allinkachinaykikunata llanchiy:\n{{canonicalurl:{{#special:Preferences}}#mw-prefsection-echo}}\n\n$1",
"echo-overlay-link": "Tukuy qampaq willaykuykuna",
"echo-overlay-title": "<b>Willaykuykuna</b>",
- "notification-edit-talk-page-bundle": "$1, $3 {{PLURAL:$4|wakinpas|wakinkunapas}} qampaq {{GENDER:$1|willaynintam}} [[User talk:$2|rimanakuy p'anqaykipi]] saqisurqanki.",
- "notification-edit-user-talk-email-batch-bundle-body": "$1, $2 wakin {{PLURAL:$3|ruraqpas|ruraqkunapas}} willayninta rimanakuy p'anqaykipim {{GENDER:$1|qillqamusurqanki}}.",
"echo-email-batch-link-text-view-all-notifications": "Tukuy willaykuykunata qhaway"
}
diff --git a/Echo/i18n/ro.json b/Echo/i18n/ro.json
index 4a6265cb..651b3cec 100644
--- a/Echo/i18n/ro.json
+++ b/Echo/i18n/ro.json
@@ -17,7 +17,7 @@
"prefs-displaynotifications": "Opțiuni de afișare",
"prefs-echosubscriptions": "Notifică-mă despre aceste evenimente",
"prefs-echocrosswiki": "Notificări inter-wiki",
- "prefs-newmessageindicator": "Indicator de mesaj nou",
+ "prefs-blocknotificationslist": "Utilizatori blocați",
"echo-pref-send-me": "Trimite-mi:",
"echo-pref-send-to": "Trimite la:",
"echo-pref-email-format": "Formatul e-mailului:",
@@ -30,9 +30,9 @@
"echo-pref-email-format-html": "HTML",
"echo-pref-email-format-plain-text": "Text brut",
"echo-pref-cross-wiki-notifications": "Arată notificări de la alte wikiuri",
- "echo-pref-new-message-indicator": "Arată indicator pentru mesajele din pagina de discuții în bara mea de instrumente",
+ "echo-pref-notifications-blacklist": "Nu arăta notificări de la acești utilizatori. ([[mw:Special:MyLanguage/Help:Notifications#mute|Află mai multe]])",
"echo-pref-beta-feature-cross-wiki-message": "Notificări îmbunătățite",
- "echo-pref-beta-feature-cross-wiki-description": "Vizualizați și gestionați notificările mai ușor. Include notificări inter-wiki, care vă permit să vizualizați mesajele de la alte wikiuri.",
+ "echo-pref-beta-feature-cross-wiki-description": "Vizualizați și gestionați notificările mai ușor. Include notificări inter-wiki, care vă permit să vizualizați mesajele de la alte wikiuri. (pentru a primi notificări pe un anumit wiki, trebuie să activați capabilitatea pe acel wiki.)",
"echo-learn-more": "Aflați mai multe",
"echo-log": "Jurnal public",
"echo-new-messages": "Aveți mesaje noi",
@@ -40,6 +40,8 @@
"echo-category-title-article-linked": "{{PLURAL:$1|Legătură|Legături}} către pagină",
"echo-category-title-reverted": "{{PLURAL:$1|Revenire|Reveniri}} asupra modificărilor",
"echo-category-title-mention": "{{PLURAL:$1|Menționare|Menționări}}",
+ "echo-category-title-mention-failure": "{{PLURAL:$1|Menționare eșuată|Menționări eșuate}}",
+ "echo-category-title-mention-success": "{{PLURAL:$1|Menționare reușită|Menționări reușite}}",
"echo-category-title-other": "{{PLURAL:$1|Altele}}",
"echo-category-title-system": "{{PLURAL:$1|Sistem}}",
"echo-category-title-user-rights": "{{PLURAL:$1|Schimbare a drepturilor de utilizator|Schimbări ale drepturilor de utilizator}}",
@@ -53,6 +55,7 @@
"echo-error-no-formatter": "Nicio formatare definită pentru această notificare.",
"notifications": "Notificări",
"tooltip-pt-notifications-alert": "Alertele {{GENDER:|dumneavoastră}}",
+ "tooltip-pt-notifications-notice": "Înștiințările {{GENDER:|dumneavoastră}}",
"echo-displaynotificationsconfiguration": "Configurare Afișare notificări",
"echo-displaynotificationsconfiguration-summary": "Acesta este un rezumat al modului în care Notificări a fost configurată pe acest wiki.",
"echo-displaynotificationsconfiguration-notifications-by-category-header": "Notificări după categorie",
@@ -63,9 +66,12 @@
"echo-displaynotificationsconfiguration-enabled-default-new-users-legend": "Utilizatori noi",
"echo-displaynotificationsconfiguration-mandatory-notification-methods-header": "Metode obligatorii de notificare",
"echo-specialpage": "Notificări",
- "echo-specialpage-section-markread": "Marchează secțiunea ca citită",
+ "echo-specialpage-section-markread": "Marchează grupul ca citit",
"echo-specialpage-markasread": "Notificare: Marcare ca citită",
"echo-specialpage-markasread-invalid-id": "ID de eveniment nevalid",
+ "echo-specialpage-pagination-numnotifications": "$1 {{PLURAL:$1|notificare|notificări|de notificări}}",
+ "echo-specialpage-pagefilters-title": "Activitate recentă",
+ "echo-specialpage-pagefilters-subtitle": "Pagini cu notificări necitite",
"notificationsmarkread-legend": "Marchează notificarea ca citită",
"echo-anon": "Pentru a primi notificări, [$1 creați-vă un cont] sau [$2 autentificați-vă].",
"echo-none": "Nu aveți nicio notificare.",
@@ -81,6 +87,7 @@
"echo-notification-more-options-tooltip": "Mai multe opțiuni",
"notification-link-text-expand-all": "Extinde",
"notification-link-text-expand-alert-count": "Arată {{PLURAL:$1|$1 alertă|$1 alerte|$1 de alerte}}",
+ "notification-link-text-expand-notice-count": "Arată {{PLURAL:$1|$1 înștiințare|$1 înștiințări|$1 de înștiințări}}",
"notification-link-text-expand-all-count": "Arată {{PLURAL:$1|$1 notificare|$1 notificări|$1 de notificări}}",
"notification-link-text-collapse-all": "Restrânge",
"notification-link-text-view-message": "Vezi mesajul",
@@ -90,13 +97,16 @@
"notification-header-edit-user-talk": "$1 {{GENDER:$2|a lăsat}} un mesaj pe <strong>pagina {{GENDER:$3|dumnevoastră}} de discuții</strong>.",
"notification-header-edit-user-talk-with-section": "$1 {{GENDER:$2|a lăsat}} un mesaj pe <strong>pagina {{GENDER:$3|dumneavoastră}} de discuții</strong>, în cadrul secțiunii „<strong>$4</strong>”.",
"notification-header-page-linked": "A fost creată o legătură de la <strong>$4</strong> către <strong>$3</strong>.",
- "notification-bundle-header-page-linked": "Au fost create legături de la <strong>$4</strong> și {{PLURAL:$5|încă o pagină|încă alte $5 pagini|încă alte $5 de pagini|100=alte 99+ pagini}} către <strong>$3</strong>.",
+ "notification-bundle-header-page-linked": "Au fost create legături de la {{PLURAL:$5|o pagină|alte $5 pagini|alte $5 de pagini|100=alte 99+ pagini}} către <strong>$3</strong>.",
"notification-link-text-what-links-here": "Toate legăturile către această pagină",
+ "notification-compact-header-mention-failure-user-unknown": "<strong>Numele de utilizator nu există:</strong> $1",
+ "notification-compact-header-mention-failure-user-anonymous": "<strong>Adresele IP nu pot fi menționate:</strong> $1",
"notification-header-welcome": "{{GENDER:$2|Bun venit}} la {{SITENAME}}, $1! Ne bucurăm să {{GENDER:$2|vă avem}} printre noi.",
"notification-welcome-linktext": "Bun venit",
"notification-link-thank-you-edit": "Modificarea {{GENDER:$1|dumnevoastră}}",
"notification-link-text-view-edit": "Vezi modificarea",
- "notification-header-reverted": "{{PLURAL:$4|Modificarea dumneavoastră asupra paginii <strong>$3</strong> a|Modificările dumneavoastră asupra paginii <strong>$3</strong> au}} fost {{GENDER:$2|înlăturat}}{{PLURAL:$4|ă|e}}",
+ "notification-link-article-reminder": "Vezi pagina",
+ "notification-header-reverted": "{{PLURAL:$4|Modificarea dumneavoastră asupra paginii <strong>$3</strong> a|Modificările dumneavoastră asupra paginii <strong>$3</strong> au}} fost {{GENDER:$2|înlăturat}}{{PLURAL:$4|ă|e}}.",
"notification-header-emailuser": "$1 {{GENDER:$2|v-a trimis}} un e-mail.",
"notification-edit-talk-page-email-subject2": "$1 {{GENDER:$1|v-a lăsat}} un mesaj la {{SITENAME}}",
"notification-edit-talk-page-email-batch-body-with-section": "$1 {{GENDER:$1|a lăsat}} un mesaj pe pagina dumneavoastră de discuții, în cadrul secțiunii „$2”.",
@@ -110,23 +120,37 @@
"notification-timestamp-ago-days": "{{PLURAL:$1|$1 z}}",
"notification-timestamp-ago-months": "{{PLURAL:$1|$1 l}}",
"notification-timestamp-ago-years": "{{PLURAL:$1|$1 an|$1 ani}}",
+ "notification-timestamp-today": "Astăzi",
+ "notification-timestamp-yesterday": "Ieri",
+ "notification-inbox-filter-read": "Citite",
+ "notification-inbox-filter-unread": "Necitite",
+ "notification-inbox-filter-all": "Toate",
"echo-email-body-default": "Aveți o notificare nouă la {{SITENAME}}:\n\n$1",
+ "echo-email-footer-default-html": "Pentru a controla ce emailuri vă trimitem, <a href=\"$2\" style=\"text-decoration:none; color: #3868B0;\">verificați-vă preferințele</a>.<br />\n$1",
"echo-email-footer-default": "$2\n\nPentru a avea controlul asupra e-mailurilor pe care vi le trimitem, verificați-vă preferințele:\n{{canonicalurl:{{#special:Preferences}}#mw-prefsection-echo}}\n\n$1",
"echo-email-plain-footer": "Pentru a avea controlul asupra e-mailurilor pe care vi le trimitem, verificați-vă preferințele:",
"echo-email-html-footer-preference-link-text": "verificați-vă preferințele",
"echo-email-html-footer-with-link": "Pentru a avea controlul asupra e-mailurilor pe care vi le trimitem, $1.",
"echo-notification-alert": "{{PLURAL:$1|Alertă ($1)|Alerte ($1)|100=Alerte (99+)}}",
+ "echo-notification-notice": "{{PLURAL:$1|Înștiințare ($1)|Înștiințări ($1)|100=Înștiințări (99+)}}",
"echo-notification-alert-text-only": "Alerte",
+ "echo-notification-notice-text-only": "Înștiințări",
"echo-overlay-link": "Toate notificările",
"echo-overlay-title": "<b>Notificări</b>",
"echo-overlay-title-overflow": "<b>{{PLURAL:$1|Notificări}}</b> (se afișează $1 din $2 necitite)",
"echo-mark-all-as-read": "Marchează toate ca citite",
+ "echo-mark-all-as-read-confirmation": "$1 {{PLURAL:$1|notificare marcată ca citită|notificări marcate ca citite|de notificări marcate ca citite}}",
+ "echo-mark-wiki-as-read": "Marchează ca citită în wikiul selectat: $1",
"echo-date-today": "Astăzi",
"echo-date-yesterday": "Ieri",
"echo-load-more-error": "A apărut o eroare în timpul obținerii mai multor rezultate.",
+ "notification-bundle-header-edit-user-talk-v2": "{{PLURAL:$1|Un mesaj noi|$1 mesaje noi|$1 de mesaje noi|100=99+ mesaje noi}} pe <strong>pagina {{GENDER:$3|dumneavoastră}} de discuții</strong>.",
"echo-email-batch-subject-daily": "Aveți {{PLURAL:$2|o notificare nouă|notificări noi}} la {{SITENAME}}",
"echo-email-batch-subject-weekly": "Aveți {{PLURAL:$2|o notificare nouă|notificări noi}} la {{SITENAME}} în această săptămână",
"echo-email-batch-body-intro-daily": "Bună ziua $1,\nAveți aici un rezumat al activității de astăzi la {{SITENAME}}.",
"echo-email-batch-body-intro-weekly": "Bună ziua $1,\nAveți aici un rezumat al activității din această săptămână la {{SITENAME}}.",
- "echo-email-batch-link-text-view-all-notifications": "Vezi toate notificările"
+ "echo-email-batch-link-text-view-all-notifications": "Vezi toate notificările",
+ "notification-header-foreign-alert": "Mai multe alerte de pe {{PLURAL:$5|alt wiki|$5 alte wikiuri|$5 de alte wikiuri}}",
+ "notification-header-foreign-notice": "Mai multe înștiințări de pe {{PLURAL:$5|alt wiki|$5 alte wikiuri|$5 de alte wikiuri}}",
+ "notification-header-foreign-all": "Mai multe notificări de pe {{PLURAL:$5|alt wiki|$5 alte wikiuri|$5 de alte wikiuri}}"
}
diff --git a/Echo/i18n/roa-tara.json b/Echo/i18n/roa-tara.json
index f4a63d00..d5520b00 100644
--- a/Echo/i18n/roa-tara.json
+++ b/Echo/i18n/roa-tara.json
@@ -10,7 +10,6 @@
"prefs-emailsettings": "'Mbostaziune de l'email",
"prefs-displaynotifications": "Opziune de visualizzazzione",
"prefs-echosubscriptions": "Notificame sus a ste avveneminde",
- "prefs-newmessageindicator": "Indicatore de messàgge nuève",
"prefs-blocknotificationslist": "Utinde citte da sotte",
"echo-pref-send-me": "Manne a me:",
"echo-pref-send-to": "Manne a:",
@@ -23,13 +22,15 @@
"echo-pref-email-frequency-weekly": "'Nu riepiloghe sumanale de le notifiche",
"echo-pref-email-format-html": "HTML",
"echo-pref-email-format-plain-text": "Teste semblice",
- "echo-pref-new-message-indicator": "Fà vedè le 'ndicature de le messàgge sus a pàgene de le 'ngazzaminde jndr'à barre de le struminde meje",
"echo-learn-more": "'Mbare de cchiù",
+ "echo-log": "Archivije pubbleche",
"echo-new-messages": "Tu è messàgge nuève",
"echo-category-title-edit-user-talk": "{{PLURAL:$1|Messàgge}} d'a pàgene de le 'ngazzaminde",
"echo-category-title-article-linked": "{{PLURAL:$1|Collegamende|Collegaminde}} d'a pàgene",
"echo-category-title-reverted": "Annulle {{PLURAL:$1|'u cangiamende|le cangiaminde}}",
"echo-category-title-mention": "{{PLURAL:$1|Menzione}}",
+ "echo-category-title-mention-failure": "{{PLURAL:$1|Menzione}} sciute a male",
+ "echo-category-title-mention-success": "{{PLURAL:$1|Menzione}} apposte",
"echo-category-title-other": "{{PLURAL:$1|Otre}}",
"echo-category-title-system": "{{PLURAL:$1|Sisteme}}",
"echo-category-title-user-rights": "{{PLURAL:$1|Cangiamende|Cangiaminde}} de le deritte de l'utende",
@@ -63,15 +64,24 @@
"notification-link-text-view-mention": "'Ndruche 'a menzione",
"notification-link-text-view-changes": "{{GENDER:$1|'Ndruche}} le cangiaminde",
"notification-link-text-view-page": "'Ndruche 'a pàgene",
+ "notification-compact-header-edit-user-talk": "$1 {{GENDER:$2|T'ha}} {{GENDER:$3|lassate}} 'nu messàgge.",
+ "notification-compact-header-page-linked": "Collegate da <strong>$1</strong>.",
"notification-link-text-what-links-here": "Tutte le collegaminde a sta pàgene",
+ "notification-compact-header-mention-failure-user-unknown": "<strong>'U nome utende non g'esiste:</strong> $1",
+ "notification-compact-header-mention-failure-user-anonymous": "<strong>Le IP non ge ponne essere menzionate:</strong> $1",
+ "notification-welcome-linktext": "Bovègne",
"notification-link-text-view-edit": "'Ndruche 'u cangiamende",
+ "notification-link-article-reminder": "'Ndruche 'a vôsce",
"notification-header-reverted": "{{PLURAL:$4|'U cangiamende tune sus a $3 ave|Le cangiaminde tune sus a $3 onne}} state {{GENDER:$2|annullate}}.",
+ "notification-header-emailuser": "$1 {{GENDER:$2|t'ha mannate}} na mail.",
"notification-edit-talk-page-email-subject2": "$1 {{GENDER:$1|t'ha lassate}} 'nu messàgge sus a {{SITENAME}}",
"notification-edit-talk-page-email-batch-body-with-section": "$1 {{GENDER:$1|t'ha lassate}} 'nu messàgge sus 'a pàgene de le 'ngazzaminde tune jndr'à \"$2\".",
"notification-page-linked-email-subject": "'Na pàgene ca tu è ccrejate ha state collagate sus a {{SITENAME}}",
"notification-reverted-email-subject2": "{{PLURAL:$3|'U cangiamende tune ha state|Le cangiaminde tune onne}} state {{GENDER:$1|annullate}} sus a {{SITENAME}}",
"notification-mention-email-subject": "$1 {{GENDER:$2|t'ave}} {{GENDER:$1|menzionate}} sus a {{SITENAME}}",
"notification-user-rights-email-subject": "Le deritte utende tune onne state cangiate sus a {{SITENAME}}",
+ "notification-timestamp-ago-seconds": "{{PLURAL:$1|$1s}}",
+ "notification-timestamp-ago-minutes": "{{PLURAL:$1|$1 m}}",
"echo-email-body-default": "Tu è 'na notifica nove sus a {{SITENAME}}:\n\n$1",
"echo-email-footer-default": "$2\n\nPe condrollà ce email t'amme mannate, verifiche le prefenze tune:\n{{canonicalurl:{{#special:Preferences}}#mw-prefsection-echo}}\n\n$1",
"echo-notification-alert-text-only": "Avvise",
diff --git a/Echo/i18n/ru.json b/Echo/i18n/ru.json
index d946f2dc..e5074b4c 100644
--- a/Echo/i18n/ru.json
+++ b/Echo/i18n/ru.json
@@ -36,7 +36,12 @@
"Alex Great",
"Facenapalm",
"ЛосЯш",
- "DevilishSkull"
+ "DevilishSkull",
+ "Smigles",
+ "Mouse21",
+ "Happy13241",
+ "Movses",
+ "Stjn"
]
},
"echo-desc": "Система уведомления участников о событиях и сообщениях",
@@ -45,8 +50,7 @@
"prefs-displaynotifications": "Настройки отображения",
"prefs-echosubscriptions": "Сообщать мне об этих событиях",
"prefs-echocrosswiki": "Уведомления из нескольких вики-проектов («кросс-вики»)",
- "prefs-newmessageindicator": "Индикатор нового сообщения",
- "prefs-blocknotificationslist": "Чёрный список",
+ "prefs-blocknotificationslist": "Отключенные участники",
"echo-pref-send-me": "Присылать мне:",
"echo-pref-send-to": "Отправлять на адрес:",
"echo-pref-email-format": "Формат писем:",
@@ -59,7 +63,7 @@
"echo-pref-email-format-html": "HTML",
"echo-pref-email-format-plain-text": "Простой текст",
"echo-pref-cross-wiki-notifications": "Показывать уведомления с других вики",
- "echo-pref-new-message-indicator": "Показать в моей панели инструментов индикатор сообщений на странице обсуждения",
+ "echo-pref-notifications-blacklist": "Не показывать уведомления от этих участников ([[mw:Special:MyLanguage/Help:Notifications#mute|узнать больше]]):",
"echo-pref-beta-feature-cross-wiki-message": "Улучшенные уведомления",
"echo-pref-beta-feature-cross-wiki-description": "Упрощает просмотр и организацию уведомлений. Включает «кросс-вики» уведомления, которые позволяют видеть сообщения из других вики. (Чтобы получать такие уведомления в этом вики-проекте, вы должны активировать здесь соответствующую бета-функцию.)",
"echo-learn-more": "Узнать больше",
@@ -75,6 +79,7 @@
"echo-category-title-system": "{{PLURAL:$1|1=Системное|Системные}}",
"echo-category-title-user-rights": "{{PLURAL:$1|Изменение|Изменения}} прав участника",
"echo-category-title-emailuser": "Электронная почта от {{PLURAL:$1|другого участника|других участников}}",
+ "echo-category-title-article-reminder": "Страница {{PLURAL:$1|напоминание|напоминания}}",
"echo-pref-tooltip-edit-user-talk": "Сообщать мне, когда кто-то посылает сообщение или отвечает на моей странице обсуждения.",
"echo-pref-tooltip-article-linked": "Сообщать мне, когда на созданную мной страницу кто-то ссылается с другой страницы.",
"echo-pref-tooltip-reverted": "Сообщать мне, когда кто-то отменил мою правку, используя функцию отмены или отката.",
@@ -113,8 +118,6 @@
"echo-none": "Вы не получали уведомлений.",
"echo-more-info": "Подробнее",
"echo-feedback": "Обратная связь",
- "echo-popup-footer-special-page-invitation": "<strong>Оцените обновлённую страницу уведомлений.</strong> [$2 $1]",
- "echo-popup-footer-special-page-invitation-link": "Новый дизайн и функции.",
"echo-quotation-marks": "«$1»",
"echo-api-failure": "Не удалось получить уведомления.",
"echo-api-failure-cross-wiki": "В доступе к удаленному домену было отказано.",
@@ -144,6 +147,8 @@
"notification-link-text-view-page": "Просмотр страницы",
"notification-header-edit-user-talk": "$1 оставил{{GENDER:$2||а}} сообщение на <strong>{{GENDER:$3|вашей}} странице обсуждения</strong>.",
"notification-header-edit-user-talk-with-section": "$1 оставил{{GENDER:$2||а}} сообщение на <strong>{{GENDER:$3|вашей}} странице обсуждения</strong> в разделе «<strong>$4</strong>».",
+ "notification-compact-header-edit-user-talk": "$1 {{GENDER:$2|оставил|оставила}} {{GENDER:$3|вам}} сообщение.",
+ "notification-compact-header-edit-user-talk-with-section": "$1 {{GENDER:$2|оставил|оставила}} {{GENDER:$3|вам}} сообщение на странице «<strong>$4</strong>».",
"notification-body-edit-user-talk-with-section": "$1",
"notification-header-page-linked": "Была сделана ссылка с <strong>$4</strong> на <strong>$3</strong>.",
"notification-compact-header-page-linked": "Связано с $1",
@@ -159,7 +164,7 @@
"notification-header-mention-article-talkpage": "$1 упомянул{{GENDER:$2||а}} {{GENDER:$3|вас}} на странице обсуждения «<strong>$4</strong>» в разделе «<strong>$5</strong>».",
"notification-header-mention-article-talkpage-nosection": "$1 упомянул{{GENDER:$2||а}} {{GENDER:$3|вас}} на странице обсуждения «$4».",
"notification-header-mention-failure-user-unknown": "{{GENDER:$2|Ваше}} упоминание <strong>$3</strong> не было отправлено поскольку этот участник не найден.",
- "notification-header-mention-failure-user-anonymous": "{{GENDER:$2|Ваше}} упоминание <strong>$3</strong> не было отправлено поскольку этот участник аноним.",
+ "notification-header-mention-failure-user-anonymous": "{{GENDER:$2|Ваше}} упоминание <strong>$3</strong> не было отправлено, поскольку этот участник аноним.",
"notification-header-mention-failure-too-many": "{{GENDER:$2|Вы}} попытались упомянуть более $3 {{PLURAL:$3|участника|участников}}. Все упоминания выше этого лимита не были разосланы.",
"notification-header-mention-failure-bundle": "{{PLURAL:$3|Упоминание|$3 упоминания|$3 упоминаний}} {{PLURAL:$3|сделанное|сделанные|сделанных}} {{GENDER:$2|вами}} на странице обсуждений <strong>$4</strong> не {{PLURAL:$3|может|могут}} быть отправлены.",
"notification-compact-header-mention-failure-user-unknown": "<strong>Имя участника не существует:</strong> $1",
@@ -173,6 +178,7 @@
"notification-header-user-rights-add-and-remove": "{{GENDER:$6|Ваши}} права участника были {{GENDER:$1|изменены}}. Вы были добавлены в: $2. Вы больше не входите в: $4.",
"notification-header-user-rights-expiry-change": "Время истечения {{GENDER:$4|вашего}} членства в {{PLURAL:$3|следующей группе|следующих группах}} {{GENDER:$1|изменено}}: $2.",
"notification-header-welcome": "{{GENDER:$2|Добро пожаловать}} на сайт {{SITENAME}}, $1! Мы рады приветствовать {{GENDER:$2|вас}} здесь.",
+ "notification-header-mention-summary": "$1 упомянул{{GENDER:$2||а}} {{GENDER:$3|вас}} в описании <strong>$4</strong>.",
"notification-welcome-linktext": "Добро пожаловать!",
"notification-header-thank-you-1-edit": "{{GENDER:$2|Вы}} только что сделали {{GENDER:$2|вашу}} первую правку. Благодарим {{GENDER:$2|вас}} за это, и добро пожаловать!",
"notification-header-thank-you-10-edit": "{{GENDER:$2|Вы}} только что сделали {{GENDER:$2|вашу}} десятую правку. Благодарим {{GENDER:$2|вас}} за это, продолжайте в том же духе!",
@@ -222,7 +228,7 @@
"echo-date-today": "Сегодня",
"echo-date-yesterday": "Вчера",
"echo-load-more-error": "Произошла ошибка при получении дополнительных результатов.",
- "notification-bundle-header-edit-user-talk-v2": "{{PLURAL:$1|новое сообщение|$1 новых сообщений|100=99+ новых сообщения|100=99+ новых сообщений}} на <strong>{{GENDER:$3|вашей}} странице обсуждения</strong>.",
+ "notification-bundle-header-edit-user-talk-v2": "$1 {{PLURAL:$1|новое сообщение|новых сообщения|новых сообщений|100=99+ новых сообщений}} на {{GENDER:$3|вашей}} странице обсуждения.",
"echo-email-batch-bullet": "•",
"echo-email-batch-subject-daily": "Вы получили {{PLURAL:$2|$2 новое уведомление|$2 новых уведомления|$2 новых уведомлений|1=новое уведомление}} в проекте «{{SITENAME}}»",
"echo-email-batch-subject-weekly": "На этой неделе вы получили {{PLURAL:$2|$2 новое уведомление|$2 новых уведомления|$2 новых уведомлений|1=новое уведомление}} в проекте «{{SITENAME}}»",
diff --git a/Echo/i18n/sa.json b/Echo/i18n/sa.json
index 09817fb1..75c5231e 100644
--- a/Echo/i18n/sa.json
+++ b/Echo/i18n/sa.json
@@ -12,7 +12,6 @@
"prefs-emailsettings": "ईपत्र-विकल्पाः",
"prefs-displaynotifications": "प्रदर्शन-विकल्पाः",
"prefs-echosubscriptions": "एतेषां घटनानां विषये मां सूचयतु",
- "prefs-newmessageindicator": "नूतनसन्देशसूचकम्",
"echo-pref-send-me": "मह्यं प्रेष्यताम्:",
"echo-pref-send-to": "एतस्मै प्रेष्यताम्",
"echo-pref-email-format": "ईपत्र-प्रारूपः:",
@@ -24,7 +23,6 @@
"echo-pref-email-frequency-weekly": "प्रतिसप्ताहस्य सन्देशानां सारांशः",
"echo-pref-email-format-html": "एच् टि एम् एल्",
"echo-pref-email-format-plain-text": "सरलपठ्यम्",
- "echo-pref-new-message-indicator": "मम साधनापट्टिकायां चर्चापुटस्य सन्देशः दर्श्यताम्",
"echo-learn-more": "अधिकं ज्ञायताम्",
"echo-new-messages": "भवते नूतनसन्देशाः सन्ति",
"echo-category-title-edit-user-talk": "चर्चापुटम् {{PLURAL:$1|सन्देशः|सन्देशाः}}",
diff --git a/Echo/i18n/sah.json b/Echo/i18n/sah.json
index 00ef8d0c..ff282b2a 100644
--- a/Echo/i18n/sah.json
+++ b/Echo/i18n/sah.json
@@ -14,7 +14,6 @@
"prefs-displaynotifications": "Туруоруулары көрдөр",
"prefs-echosubscriptions": "Бу түбэлтэлэр тустарынан миэхэ биллэрэн ис",
"prefs-echocrosswiki": "Кросс-вики биллэрии",
- "prefs-newmessageindicator": "Саҥа сурук кэллэҕинэ көстөр",
"echo-pref-send-me": "Миэхэ манна ыыт:",
"echo-pref-send-to": "Манна ыыт:",
"echo-pref-email-format": "Сурук формаата",
diff --git a/Echo/i18n/sat.json b/Echo/i18n/sat.json
index 4846c0dc..2616b879 100644
--- a/Echo/i18n/sat.json
+++ b/Echo/i18n/sat.json
@@ -1,9 +1,19 @@
{
"@metadata": {
"authors": [
- "Albinus"
+ "Albinus",
+ "Manik Soren",
+ "Ramjit Tudu",
+ "Fagunkoyel Hansdah"
]
},
- "tooltip-pt-notifications-alert": "{{GENDER:|Amaḱ}} baḍaejoṅ",
- "tooltip-pt-notifications-message": "{{GENDER:|Amaḱ}} kathako"
+ "echo-pref-web": "ᱣᱮᱵᱽ",
+ "echo-pref-email": "ᱤᱢᱮᱞ",
+ "echo-learn-more": "ᱟᱨᱦᱚᱸ ᱪᱮᱫᱽᱢᱮ",
+ "tooltip-pt-notifications-alert": "{{GENDER:|ᱟᱢᱟᱜ}} ᱵᱟᱰᱟᱭᱡᱚᱝ",
+ "tooltip-pt-notifications-notice": "{{GENDER:|ᱟᱢᱟᱜ}} ᱧᱮᱛᱮᱞᱠᱚ",
+ "notification-link-text-expand-notice-count": "ᱧᱮᱞᱢᱮ {{PLURAL:$1|$1 ᱧᱮᱛᱮᱞ|$1 ᱧᱮᱛᱮᱞᱠᱚ}}",
+ "echo-notification-notice": "{{PLURAL:$1|ᱧᱮᱛᱮᱞ ($1)|ᱧᱮᱛᱮᱞᱠᱚ ($1)|100=ᱧᱮᱛᱮᱞᱠᱚ (᱙᱙+)}}",
+ "echo-notification-notice-text-only": "ᱧᱮᱛᱮᱞᱠᱚ",
+ "notification-header-foreign-notice": "{{PLURAL:$5|ᱟᱨᱢᱤᱫ ᱣᱤᱠᱤ|$5 ᱮᱴᱟᱜ ᱣᱤᱠᱤ ᱠᱚᱨᱮ}} ᱠᱷᱚᱱ ᱵᱟᱹᱲᱛᱤ ᱧᱮᱛᱮᱞᱠᱚ"
}
diff --git a/Echo/i18n/scn.json b/Echo/i18n/scn.json
index 24824aef..37d41c16 100644
--- a/Echo/i18n/scn.json
+++ b/Echo/i18n/scn.json
@@ -11,7 +11,6 @@
"prefs-emailsettings": "Upzioni email",
"prefs-displaynotifications": "Upzioni di visualizzazzioni",
"prefs-echosubscriptions": "Mànnami na nutìfica supra sti abbinimenti",
- "prefs-newmessageindicator": "Barra dî missaggi novi",
"echo-pref-send-me": "Mànnami:",
"echo-pref-send-to": "Manna a:",
"echo-pref-email-format": "Furmatu email:",
@@ -23,7 +22,6 @@
"echo-pref-email-frequency-weekly": "Nu riepìlugu dî nutìfichi dâ simana",
"echo-pref-email-format-html": "HTML",
"echo-pref-email-format-plain-text": "Testu nurmali",
- "echo-pref-new-message-indicator": "Ammùscia la barra dê missaggi novi supra la mè pàggina di discussioni ntâ barra dî strummenta",
"echo-learn-more": "Pi sapìrinni cchiossai",
"echo-new-messages": "Vossìa havi missaggi novi",
"echo-category-title-edit-user-talk": "{{PLURAL:$1|Missaggiu|Missaggi}} supra la pàggina di discussioni",
diff --git a/Echo/i18n/sd.json b/Echo/i18n/sd.json
index 0f68d4f8..2c8a726a 100644
--- a/Echo/i18n/sd.json
+++ b/Echo/i18n/sd.json
@@ -2,33 +2,112 @@
"@metadata": {
"authors": [
"Aursani",
- "Mehtab ahmed"
+ "Mehtab ahmed",
+ "Tweety"
]
},
+ "echo-desc": "واپرائيندڙن کي واقعن ۽ پيغامن جو اطلاع ڏيڻ لاءِ سرشتو",
"prefs-echo": "اطلاع",
+ "prefs-emailsettings": "برقٽپال چارا",
+ "prefs-displaynotifications": "نماڪار چارا",
+ "prefs-echosubscriptions": "مونکي ھنن واقعن بابت اطلاع ڏيو",
+ "prefs-echocrosswiki": "بين-الوڪي اطلاع",
+ "prefs-blocknotificationslist": "بند واپرائيندڙ",
+ "echo-pref-send-me": "مون ڏي موڪليو:",
+ "echo-pref-send-to": "ڏانھن موڪليو:",
+ "echo-pref-email-format": "برق ٽپال حليو",
+ "echo-pref-web": "ويب",
+ "echo-pref-email": "برق ٽپال",
+ "echo-pref-email-frequency-never": "مونکي اطلاع برق ٽپال تي نه موڪليو",
+ "echo-pref-email-frequency-immediately": "جيئن ئي اچن، الڳ الڳ موڪليو",
+ "echo-pref-email-frequency-daily": "هر روز اطلاعن جو تت موڪليو",
+ "echo-pref-email-frequency-weekly": "هر هفتي اطلاعن جو تت موڪليو",
+ "echo-pref-email-format-html": "ايڇ ٽي ايم ايل",
+ "echo-pref-email-format-plain-text": "سادا اکر",
+ "echo-pref-cross-wiki-notifications": "ٻين وڪيز جا اطلاع ڏيکاريو",
+ "echo-pref-notifications-blacklist": "هنن واپرائيندڙ جا اطلاع نه ڏيو. ([[mw:Special:MyLanguage/Help:Notifications#mute|وڌيڪ معلومات]])",
+ "echo-pref-beta-feature-cross-wiki-message": "وسيع اطلاع",
+ "echo-pref-beta-feature-cross-wiki-description": "اطلاع ڏسو ۽ ترتيب ڏيو آساني سان، جنهن جي مدد سان اوهان ٻين وڪيز جا اطلاع ڏسي سگھو ٿا. (ٻين وڪيز جا ميسج ڏسڻ لاءِ، ان وڪي تي آزمائشي خصوصيتن کي ڪارگر ڪيو.)",
+ "echo-learn-more": "وڌيڪ ڄاڻو",
+ "echo-new-messages": "توھان لاءِ نوان نياپا آھن",
+ "echo-category-title-edit-user-talk": "بحث صفحي {{PLURAL:$1|جو پيغام|جا پيغام}}",
+ "echo-category-title-article-linked": "صفحو {{PLURAL:$1|ڳنڍڻو|ڳنڍڻا}}",
+ "echo-category-title-reverted": "ترميم {{PLURAL:$1|اڻڪريو|اڻڪريل}}",
+ "echo-category-title-mention": "{{PLURAL:$1|ذڪر|ياد}}",
+ "echo-category-title-mention-failure": "نامڪمل {{PLURAL:$1|ذڪر|ياد}}",
+ "echo-category-title-mention-success": "ڪامياب {{PLURAL:$1|ياد|يادگري}}",
+ "echo-category-title-other": "{{PLURAL:$1|ٻي}}",
+ "echo-category-title-system": "{{PLURAL:$1|سسٽم}}",
+ "echo-category-title-user-rights": "{{PLURAL:$1|واپرائيندڙ حق ۾ تبديليون|واپرائيندڙ حقن ۾ تبديلون}}",
+ "echo-category-title-emailuser": "{{PLURAL:$1|ٻي واپرائيندڙ وٽان برق ٽپال|ٻين واپرائيندڙ طرفان برق ٽپالون}}",
+ "echo-category-title-article-reminder": "صفحو {{PLURAL:$1|يادگير|ياگيريون}}",
+ "echo-pref-tooltip-edit-user-talk": "مونکي اطلاع ڏيو، جڏهن ڪير منهنجي بحث صفحي تي پيغام ڇڏي يا جواب ڏي.",
+ "echo-pref-tooltip-article-linked": "مونکي اطلاع ڏيو، جڏهن ڪير ان صفحي سان ڳنڍڻو جوڙي جيڪو مون ٻي صفحي تان جوڙيو آهي.",
+ "echo-pref-tooltip-reverted": "مونکي اطلاع ڏيو جڏهن منهنجي ترميمن کي اڻڪريو يا رولبيڪ اوزار سان واپس ڪيو وڃي.",
+ "echo-pref-tooltip-mention": "مونکي اطلاع ڏيو جڏهن ڪير منهنجي واپرائيندڙ صفحي سان ڳنڍڻو جوڙي.",
+ "echo-pref-tooltip-user-rights": "مونکي اطلاع ڏيو جڏهن ڪير منهنجي واپرائيندڙ حقن ۾ تبديلي آڻي.",
+ "echo-pref-tooltip-emailuser": "مونکي اطلاع ڏيو جڏهن ڪير مونکي برق ٽپال موڪلي.",
+ "echo-pref-tooltip-article-reminder": "جڏهن هن صفحي بابت آئون پڇان ته مونکي اطلاع ڏيو.",
"notifications": "اطلاع",
"tooltip-pt-notifications-alert": "{{GENDER:|توهانجون}} خبرون",
+ "tooltip-pt-notifications-notice": "{{GENDER:|توھان جا}} اطلاع",
+ "echo-displaynotificationsconfiguration-notifications-by-category-header": "اطلاع بلحاظ زمرو",
+ "echo-displaynotificationsconfiguration-sorting-by-section-header": "تربيت جا قسم",
+ "echo-displaynotificationsconfiguration-enabled-default-header": "شروع کان ڪارگر آهي",
+ "echo-displaynotificationsconfiguration-enabled-default-existing-users-legend": "موجوده واپرائيندڙ",
+ "echo-displaynotificationsconfiguration-enabled-default-new-users-legend": "نئون واپرائيندڙ",
"echo-specialpage": "اطلاع",
"echo-specialpage-section-markread": "گروھ کي پڙھيل طور نشان لڳايو",
"echo-specialpage-markasread": "اطلاع:پڙھيل طور نشان لڳايو",
+ "echo-specialpage-pagefilters-title": "تازي سرگرمي",
"notificationsmarkread-legend": "اطلاع کي پڙھيل طور نشان لڳايو",
+ "echo-none": "اوهان لاءِ ڪي به اطلاع ناهن.",
+ "echo-more-info": "وڌيڪ ڄاڻ",
+ "echo-feedback": "پذيرائي",
+ "echo-quotation-marks": "\"$1\"",
+ "echo-notification-placeholder": "ڪي به اطلاع ناهن.",
+ "echo-notification-loginrequired": "اطلاع ڏسڻ لاءِ داخل ٿيو.",
+ "echo-notification-popup-loginrequired": "پنهنجي اطلاعن کي ڏسڻ لاءِ داخل ٿيو.",
"echo-notification-markasread": "پڙھيل طور نشان لڳايو",
"echo-notification-markasunread": "نه-پڙھيل طور نشان لڳايو",
"echo-notification-markasread-tooltip": "پڙھيل طور نشان لڳايو",
+ "echo-notification-more-options-tooltip": "وڌيڪ عمل",
+ "notification-link-text-expand-all": "کوليو",
+ "notification-link-text-expand-notice-count": "{{PLURAL:$1|$1 اطلاع|$1 اطلاعَ}} ڏسو",
+ "notification-link-text-collapse-all": "بند ڪريو",
+ "notification-link-text-view-message": "پيغام ڏسو",
"notification-link-text-view-changes": "تبديليون {{GENDER:$1|ڏيکاريو}}",
+ "notification-link-text-view-page": "صفحو ڏسو",
"notification-header-edit-user-talk": "$1 <strong>{{GENDER:$3|توھان جي}} بحث صفحي</strong> تي ھڪ پيغام {{GENDER:$2|ڇڏيو}}.",
"notification-header-edit-user-talk-with-section": "$1 <strong>{{GENDER:$3|توھان جي}} بحث صفحي</strong> تي ھڪ پيغام \"<strong>$4</strong>\" ۾ {{GENDER:$2|ڇڏيو}}.",
+ "notification-body-edit-user-talk-with-section": "$1",
"notification-header-page-linked": "<strong>$4</strong> کان ھڪ ڳنڍڻو <strong>$3</strong> ڏانھن ٺاھيو ويو.",
+ "notification-compact-header-page-linked": "<strong>$1</strong> تان ڳنڍڻو.",
"notification-link-text-what-links-here": "ھن صفحي ڏانھن سڀ ڳنڍڻا",
"notification-header-mention-article-talkpage-nosection": "$1 {{GENDER:$3|توھان کي}} <strong>$4</strong> بحث صفحي تي {{GENDER:$2|بيان ڪيو}}.",
+ "notification-compact-header-mention-failure-user-unknown": "<strong>واپرائيندڙ نانءُ نه لڌو:</strong> $1",
+ "notification-compact-header-mention-failure-user-anonymous": "<strong>آئي پي پتا ڄاڻيل ناهن:</strong> $1",
"notification-welcome-linktext": "ڀليڪار",
+ "notification-link-thank-you-edit": "{{GENDER:$1|توهان جي}} ترميم",
+ "notification-link-text-view-edit": "ترميم ڏسو",
+ "notification-link-article-reminder": "صفحو ڏسو",
+ "notification-body-reverted": "$1",
"notification-header-emailuser": "$1 توھان ڏانھن ھڪ ايميل {{GENDER:$2|موڪلي}}.",
"notification-edit-talk-page-email-batch-body-with-section": "$1 توھان جي بحث صفحي \"$2\" تي پيغام {{GENDER:$1|ڇڏيو}}.",
+ "notification-timestamp-today": "اڄ",
+ "notification-timestamp-yesterday": "ڪلھ",
"notification-inbox-filter-read": "پڙھيل",
"notification-inbox-filter-unread": "اڻپڙھيل",
"notification-inbox-filter-all": "سڀ",
"echo-notification-alert-text-only": "پيغام",
"echo-notification-notice-text-only": "اطلاع",
"echo-overlay-link": "سڀ اطلاع",
- "echo-mark-all-as-read": "سڀ پڙھيل طور نشان لڳايو"
+ "echo-overlay-title": "<b>اطلاع</b>",
+ "echo-mark-all-as-read": "سڀ پڙھيل طور نشان لڳايو",
+ "echo-date-today": "اڄ",
+ "echo-date-yesterday": "ڪلھ",
+ "echo-email-batch-bullet": "•",
+ "echo-email-batch-link-text-view-all-notifications": "سڀ اطلاع ڏسو",
+ "echo-foreign-wiki-lang": "$1 - $2",
+ "echo-badge-count": "{{PLURAL:$1|$1|100=99+}}"
}
diff --git a/Echo/i18n/sdh.json b/Echo/i18n/sdh.json
index 9a683441..575dea8c 100644
--- a/Echo/i18n/sdh.json
+++ b/Echo/i18n/sdh.json
@@ -5,6 +5,5 @@
]
},
"echo-pref-web": "وێب",
- "echo-pref-email": "ئیمەیل",
- "echo-notification-message-text-only": "پەیامەیل"
+ "echo-pref-email": "ئیمەیل"
}
diff --git a/Echo/i18n/sh.json b/Echo/i18n/sh.json
index 4f23ab9b..482b8908 100644
--- a/Echo/i18n/sh.json
+++ b/Echo/i18n/sh.json
@@ -10,7 +10,6 @@
"prefs-emailsettings": "Email opcije",
"prefs-displaynotifications": "Opcije prikaza",
"prefs-echosubscriptions": "Obavijesti me o tim događajima",
- "prefs-newmessageindicator": "Indikator za nove poruke",
"echo-pref-send-me": "Pošalji mi:",
"echo-pref-send-to": "Pošalji:",
"echo-pref-email-format": "Format e-pošte:",
@@ -22,7 +21,6 @@
"echo-pref-email-frequency-weekly": "Nedeljni sažetak obavještenja",
"echo-pref-email-format-html": "HTML",
"echo-pref-email-format-plain-text": "Obični tekst",
- "echo-pref-new-message-indicator": "Pokaži indikator da je dobijena poruka na stranici za razgovor u mojoj alatnoj traci",
"echo-learn-more": "Saznajte više",
"echo-new-messages": "Imate nove poruke.",
"echo-category-title-edit-user-talk": "{{PLURAL:$1|Poruke}} na stranici za razgovor",
diff --git a/Echo/i18n/shn.json b/Echo/i18n/shn.json
index a8aeb273..e48e00fd 100644
--- a/Echo/i18n/shn.json
+++ b/Echo/i18n/shn.json
@@ -5,5 +5,7 @@
"Saimawnkham"
]
},
- "tooltip-pt-notifications-alert": "{{GENDER:|ၸဝ်ႈၵဝ်ႇ}} ဢၼ်ၽၢင်ႉ"
+ "echo-pref-tooltip-user-rights": "သင်ၸိူဝ်ႉဝႃႈ သေၵေႃႉၵေႃႉ မ​ႄးသုၼ်ႇလႆႈၽူႈၸႂ်ႉတိုဝ်းၵဝ်ၶႃႈၼႆ ပၼ်ၶေႃႈၽၢင်ႉသေၵမ်း။",
+ "tooltip-pt-notifications-alert": "{{GENDER:|ၸဝ်ႈၵဝ်ႇ}} ဢၼ်ၽၢင်ႉ",
+ "notification-link-text-view-changes": "{{GENDER:$1|တူၺ်း}} လွင်ႈၸိူဝ်းလႅၵ်ႈလၢႆႈ"
}
diff --git a/Echo/i18n/si.json b/Echo/i18n/si.json
index 386be4f2..cdf268ab 100644
--- a/Echo/i18n/si.json
+++ b/Echo/i18n/si.json
@@ -4,7 +4,8 @@
"පසිඳු කාවින්ද",
"Susith Chandira Gts",
"SusithCM",
- "හරිත"
+ "හරිත",
+ 1100100
]
},
"echo-desc": "නිවේදන පද්ධතිය",
@@ -14,23 +15,14 @@
"echo-pref-email-frequency-immediately": "තනි තනි නිවේදන ඒවා එන විට",
"echo-pref-email-frequency-daily": "නිවේදනවල දෛනික සාරාංශයක්",
"echo-pref-email-frequency-weekly": "නිවේදනවල සතිපතා සාරාංශයක්",
- "echo-no-agent": "[කිසිවෙකු නැත]",
- "echo-no-title": "[පිටුවක් නොමැත]",
"echo-error-no-formatter": "නිවේදනය සඳහා කිසිදු ආකෘතියක් දක්වා නොමැත",
"notifications": "නිවේදන",
"tooltip-pt-notifications-alert": "{{GENDER:|ඔබේ}} දැනුම්දීම්",
- "tooltip-pt-notifications-message": "{{GENDER:|ඔබේ}} පණිවිඩ",
"echo-specialpage": "නිවේදන",
"echo-anon": "නිවේදන ලබා ගැනීම සඳහා, [$1 ගිණුමක් තනන්න] හෝ [$2 ප්‍රවිෂ්ට වන්න].",
"echo-none": "ඔබට නිවේදන කිසිවක් නොමැත.",
- "notification-edit-talk-page2": "[[User:$1|$1]] විසින් ඔබේ [[User talk:$2#$3|සාකච්ඡා පිටුවෙහි]] පණිවුඩයක් {{GENDER:$1|තබා ඇත}}.",
- "notification-edit-talk-page-flyout-with-section": "$1 විසින් ඔබේ සාකච්ඡා පිටුවෙහි \"[[User talk:$2#$3|$4]]\" කොටසෙහි පණිවුඩයක් {{GENDER:$1|තබා ඇත}}.",
- "notification-new-user": "{{SITENAME}} වෙත පිළිගනිමු, $1!",
"notification-edit-talk-page-email-subject2": "$1 විසින් ඔබ හට {{SITENAME}} හි පණිවුඩයක් {{GENDER:$1|තබා ඇත}}.",
- "notification-edit-talk-page-email-batch-body2": "$1 විසින් ඔබ හට ඔබේ සාකච්ඡා පිටුවෙහි පණිවුඩයක් {{GENDER:$1|තබා ඇත}}.",
"notification-mention-email-subject": "$1 විසින් ඔබව {{SITENAME}} හි {{GENDER:$1|සඳහන් කර}} ඇත.",
- "echo-notification-count": "$1+",
- "echo-email-subject-default": "{{SITENAME}} හී නව නිවේදනයක්",
"echo-email-body-default": "ඔබට {{SITENAME}} හීදී නව නිවේදනයක් ඇත:\n\n$1",
"echo-overlay-link": "සියලුම නිවේදන",
"echo-overlay-title": "<b>නිවේදන</b>",
diff --git a/Echo/i18n/sk.json b/Echo/i18n/sk.json
index d1cc6a8b..7dba669a 100644
--- a/Echo/i18n/sk.json
+++ b/Echo/i18n/sk.json
@@ -5,7 +5,8 @@
"Teslaton",
"Macofe",
"Urbanecm",
- "Martin Urbanec"
+ "Martin Urbanec",
+ "TomášPolonec"
]
},
"echo-desc": "Notifikačný systém",
@@ -14,7 +15,7 @@
"prefs-displaynotifications": "Možnosti zobrazenia",
"prefs-echosubscriptions": "Upozornite ma na tieto udalosti",
"prefs-echocrosswiki": "Upozornenia medzi projektami",
- "prefs-newmessageindicator": "Indikátor nových správ",
+ "prefs-blocknotificationslist": "Stlmení používatelia",
"echo-pref-send-me": "Posielajte mi:",
"echo-pref-send-to": "Posielať na:",
"echo-pref-email-format": "Formát e-mailu:",
@@ -27,7 +28,7 @@
"echo-pref-email-format-html": "HTML",
"echo-pref-email-format-plain-text": "Obyčajný text",
"echo-pref-cross-wiki-notifications": "Zobrazovať upozornenia z iných wiki",
- "echo-pref-new-message-indicator": "Zobraziť indikátor diskusných správ v mojom paneli nástrojov",
+ "echo-pref-notifications-blacklist": "Nezobrazovať notifikácie od týchto používateľov. ([[mw:Special:MyLanguage/Help:Notifications#mute|podrobnosti]])",
"echo-pref-beta-feature-cross-wiki-message": "Vylepšené upozornenia",
"echo-pref-beta-feature-cross-wiki-description": "Prezerajte si a organizujte upozornenia jednoduchšie. Zahŕňa upozornenia naprieč wikiprojektami, čo vám umožní vidieť správy z iných wiki.",
"echo-learn-more": "Ďalšie informácie",
@@ -66,8 +67,6 @@
"echo-none": "Nemáte žiadne upozornenia.",
"echo-more-info": "Viac informácií",
"echo-feedback": "Spätná väzba",
- "echo-popup-footer-special-page-invitation": "<strong>Vyskúšajte prepracovanú stránku s upozorneniami.</strong> [$2 $1]",
- "echo-popup-footer-special-page-invitation-link": "S novým vizuálom aj funkciami.",
"echo-api-failure": "Nepodarilo sa načítať upozornenia. Skúste to prosím znovu. (Chyba $1)",
"echo-notification-placeholder": "Nemáte žiadne upozornenia.",
"echo-notification-markasread": "Označiť ako prečítané",
@@ -89,6 +88,7 @@
"notification-header-page-linked": "Zo stránky <strong>$4</strong> bol vytvorený odkaz na stránku <strong>$3</strong>.",
"notification-compact-header-page-linked": "Zo stránky <strong>$1</strong>.",
"notification-bundle-header-page-linked": "Zo stránky $4 a $5 {{PLURAL:$6|ďalšej|ďalších}} boli vytvorené odkazy na stránku $3.",
+ "notification-header-article-reminder": "Stránka, na ktorú ste si {{GENDER:$2|žiadal byť upozornený|žiadala byť upozornená}}, sa nachádza na <strong>$3</strong>",
"notification-link-text-what-links-here": "Všetky odkazy na túto stránku",
"notification-header-mention-other": "$1 {{GENDER:$3|vás}} {{GENDER:$2|spomenul|spomenula}} v diskusii <strong>$4</strong> v sekcii „$5“.",
"notification-header-mention-other-nosection": "$1 {{GENDER:$3|vás}} {{GENDER:$2|spomenul|spomenula}} v diskusii <strong>$4</strong>.",
@@ -98,15 +98,18 @@
"notification-header-mention-agent-talkpage-nosection": "$1 {{GENDER:$3|vás}} {{GENDER:$2|spomenul|spomenula}} na svojej diskusnej stránke.",
"notification-header-mention-article-talkpage": "$1 {{GENDER:$3|vás}} {{GENDER:$2|spomenul|spomenula}} v diskusii k článku <strong>$4</strong> v sekcii „$5“.",
"notification-header-mention-article-talkpage-nosection": "$1 {{GENDER:$3|vás}} {{GENDER:$2|spomenul|spomenula}} v diskusii k článku <strong>$4</strong>.",
+ "notification-header-mention-failure-user-unknown": "{{GENDER:$2|Vaša}} zmienka používateľa <strong>$3</strong> nebola odoslaná, pretože daný používateľ nebol nájdený.",
+ "notification-header-mention-failure-user-anonymous": "{{GENDER:$2|Vaša}} zmienka používateľa <strong>$3</strong> nebola odoslaná, pretože daný používateľ je anonymný.",
+ "notification-header-mention-success": "{{GENDER:$2|Vaša}} zmienka {{GENDER:$3|redaktora|redaktorky}} <strong>$3</strong> sa odoslala.",
"notification-header-user-rights-add-only": "Vaše používateľské práva boli {{GENDER:$1|zmenené}}: Stali ste sa {{GENDER:$4|členom|členkou}} {{PLURAL:$3|skupiny|skupín}} $2.",
"notification-header-user-rights-remove-only": "Vaše používateľské práva boli {{GENDER:$1|zmenené}}: Už nie ste {{GENDER:$4|členom|členkou}} {{PLURAL:$3|skupiny|skupín}} $2.",
"notification-header-user-rights-add-and-remove": "{{GENDER:$6|Vaše}} používateľské práva boli {{GENDER:$1|zmenené}}: Stali ste sa {{GENDER:$6|členom|členkou}} {{PLURAL:$3|skupiny|skupín}} $2 a už nie ste {{GENDER:$6|členom|členkou}} {{PLURAL:$5|skupiny|skupín}} $4.",
"notification-header-welcome": "Vitajte na {{GRAMMAR:6sg|{{SITENAME}}}}, {{GENDER:$2|$1}}! Teší nás, že ste tu.",
"notification-welcome-linktext": "Vitajte",
"notification-header-thank-you-1-edit": "Práve ste {{GENDER:$2|vykonal|vykonala}} svoju prvú úpravu. Vďaka a vitajte!",
- "notification-header-thank-you-10-edit": "Práve ste {{GENDER:$2|vykonal|vykonala}} svoju desiatu úpravu. Vďaka a len tak ďalej!",
+ "notification-header-thank-you-10-edit": "Práve ste vykonali svoju desiatu úpravu. Vďaka a len tak ďalej!",
"notification-header-thank-you-100-edit": "Práve ste {{GENDER:$2|vykonal|vykonala}} svoju stú úpravu. Veľká vďaka!",
- "notification-header-thank-you-1000-edit": "Práve ste {{GENDER:$2|vykonal|vykonala}} svoju tisícu úpravu. Vďaka, ste {{GENDER:$2|skvelý prispievatel|skvelá prispievateľka}}!",
+ "notification-header-thank-you-1000-edit": "Práve ste vykonali svoju tisícu úpravu. Vďaka, ste {{GENDER:$2|skvelý prispievateľ|skvelá prispievateľka}}!",
"notification-header-thank-you-10000-edit": "Práve ste {{GENDER:$2|vykonal|vykonala}} svoju desaťtisícu úpravu. Obrovská vďaka!",
"notification-header-thank-you-100000-edit": "Práve ste {{GENDER:$2|vykonal|vykonala}} svoju stotisícu úpravu. Vďaka za váš vynikajúci príspevok!",
"notification-header-thank-you-1000000-edit": "Práve ste {{GENDER:$2|vykonal|vykonala}} svoju milióntu úpravu. Vďaka za váš ohromujúci príspevok!",
diff --git a/Echo/i18n/skr-arab.json b/Echo/i18n/skr-arab.json
index 3c15c80a..6ccf5a1f 100644
--- a/Echo/i18n/skr-arab.json
+++ b/Echo/i18n/skr-arab.json
@@ -7,8 +7,8 @@
"prefs-echo": "اطلاع نامے",
"prefs-emailsettings": "ای میل دے آپشن",
"prefs-displaynotifications": "آپشن ݙکھاؤ",
- "echo-pref-send-me": "میکوں بھیجو:",
- "echo-pref-send-to": "جیکوں بھیجو:",
+ "echo-pref-send-me": "میکوں بھیڄو:",
+ "echo-pref-send-to": "جیکوں بھیڄو:",
"echo-pref-email-format": "ای میل فارمیٹ",
"echo-pref-web": "ویب",
"echo-pref-email": "ای میل",
diff --git a/Echo/i18n/sl.json b/Echo/i18n/sl.json
index fd5944a9..f966c23e 100644
--- a/Echo/i18n/sl.json
+++ b/Echo/i18n/sl.json
@@ -16,7 +16,7 @@
"prefs-displaynotifications": "Možnosti prikaza",
"prefs-echosubscriptions": "Obvesti me o naslednjih dogodkih",
"prefs-echocrosswiki": "Obveščanje med wikiji",
- "prefs-newmessageindicator": "Kazalnik novih sporočil",
+ "prefs-blocknotificationslist": "Utišani uporabniki",
"echo-pref-send-me": "Pošlji mi:",
"echo-pref-send-to": "Pošlji:",
"echo-pref-email-format": "Format e-pošte:",
@@ -29,7 +29,7 @@
"echo-pref-email-format-html": "HTML",
"echo-pref-email-format-plain-text": "Neoblikovano besedilo",
"echo-pref-cross-wiki-notifications": "Prikaži obvestila iz drugih wikijev",
- "echo-pref-new-message-indicator": "V orodni vrstici prikaži kazalnik sporočil na pogovornih straneh",
+ "echo-pref-notifications-blacklist": "Ne prikazuj obvestil naslednjih uporabnikov. ([[mw:Special:MyLanguage/Help:Notifications#mute|več]])",
"echo-pref-beta-feature-cross-wiki-message": "Napredna obvestila",
"echo-pref-beta-feature-cross-wiki-description": "Poglej in razporedi obvestila bolj pregledno. Vključuje obveščanje med wikiji. (Za prejemanj obvestil na poljubnem wikiju, moraš na njem vklopiti beta funkcijo.)",
"echo-learn-more": "Več o tem",
@@ -45,6 +45,7 @@
"echo-category-title-system": "{{PLURAL:$1|Sistem}}",
"echo-category-title-user-rights": "{{PLURAL:$1|Sprememba|Spremembi|Spremembe}} uporabniških pravic",
"echo-category-title-emailuser": "{{PLURAL:$1|e-pošta od drugega uporabnika|e-pošti od drugih uporabnikov|e-pošte od drugih uporabnikov|e-pošt od drugih uporabnikov}}",
+ "echo-category-title-article-reminder": "{{PLURAL:$1|opomnik|opomnika|opomniki|opomnikov}} strani",
"echo-pref-tooltip-edit-user-talk": "Obvesti me, ko nekdo na moji pogovorni strani objavi sporočilo ali odgovori.",
"echo-pref-tooltip-article-linked": "Obvesti me, ko nekdo doda povezavo na stran, ki sem jo ustvaril.",
"echo-pref-tooltip-reverted": "Obvesti me, ko nekdo z orodjem za razveljavitev ali vrnitev vrne urejanje, ki sem ga napravil.",
@@ -53,6 +54,7 @@
"echo-pref-tooltip-mention-success": "Obvesti me, ko pošljem omembo nekoga.",
"echo-pref-tooltip-user-rights": "Obvesti me, ko nekdo spremeni moje uporabniške pravice.",
"echo-pref-tooltip-emailuser": "Obvesti me ob prejemu e-pošte.",
+ "echo-pref-tooltip-article-reminder": "Obvesti me o tej strani, kadar povprašam.",
"echo-error-no-formatter": "Za obvestilo ni določeno nobeno oblikovanje.",
"notifications": "Obvestila",
"tooltip-pt-notifications-alert": "{{GENDER:|Tvoji}} opomniki",
@@ -71,28 +73,26 @@
"echo-displaynotificationsconfiguration-mandatory-notification-methods-header": "Zahtevani načini za obveščanje",
"echo-displaynotificationsconfiguration-mandatory-notification-methods-by-category-legend": "Kateri načini obveščanja so obvezni za posamezno kategorijo",
"echo-specialpage": "Obvestila",
- "echo-specialpage-section-markread": "Označi skupino za prebrano",
- "echo-specialpage-markasread": "Obvestilo: Označi za prebrano",
+ "echo-specialpage-section-markread": "Označi skupino kot prebrano",
+ "echo-specialpage-markasread": "Obvestilo: Označi kot prebrano",
"echo-specialpage-markasread-invalid-id": "Neuspešna določitev dejanja",
"echo-specialpage-pagination-numnotifications": "$1 {{PLURAL:$1|obvestilo|obvestili|obvestila|obvestil}}",
"echo-specialpage-pagefilters-title": "Trenutna dejavnost",
"echo-specialpage-pagefilters-subtitle": "Strani z neprebranimi obvestili",
- "notificationsmarkread-legend": "Označi obvestilo za prebrano",
+ "notificationsmarkread-legend": "Označi obvestilo kot prebrano",
"echo-anon": "Za prejemanje obvestil [$1 si moraš ustvariti račun] ali [$2 se prijaviti].",
"echo-none": "Ni obvestil.",
"echo-more-info": "Več informacij",
"echo-feedback": "Povratne informacije",
- "echo-popup-footer-special-page-invitation": "<strong>Preizkusi prenovljeno stran obvestil.</strong> [$2 $1]",
- "echo-popup-footer-special-page-invitation-link": "Novi izgled in funkcije.",
"echo-api-failure": "Pri izpisu obvestil je prišlo do napake.",
"echo-api-failure-cross-wiki": "Dostop do oddaljene domene je bil zavrnjen.",
"echo-notification-placeholder": "Ni obvestil.",
"echo-notification-placeholder-filters": "Ni obvestil, ki bi se ujemale s temi kriteriji.",
"echo-notification-loginrequired": "Za pregled sporočil se moraš prijaviti.",
"echo-notification-popup-loginrequired": "Za ogled svojih obvestil se prosim prijavi.",
- "echo-notification-markasread": "Označi za prebrano",
- "echo-notification-markasunread": "Označi za neprebrano",
- "echo-notification-markasread-tooltip": "Označi za prebrano",
+ "echo-notification-markasread": "Označi kot prebrano",
+ "echo-notification-markasunread": "Označi kot neprebrano",
+ "echo-notification-markasread-tooltip": "Označi kot prebrano",
"echo-notification-more-options-tooltip": "Dodatne možnosti",
"notification-dynamic-actions-unwatch": "{{GENDER:$3|Ne glej}} več novih dejavnosti na \"$1\"",
"notification-dynamic-actions-unwatch-confirmation": "{{GENDER:$3|Ne gledaš}} več strani \"$1\"",
@@ -112,9 +112,12 @@
"notification-link-text-view-page": "Ogled strani",
"notification-header-edit-user-talk": "$1 je na <strong>{{GENDER:$3|tvoji}} pogovorni strani</strong> {{GENDER:$2|pustil|pustila}} sporočilo.",
"notification-header-edit-user-talk-with-section": "$1 ti je {{GENDER:$2|pustil|pustila}} sporočilo na <strong>{{GENDER:$3|tvoji}} pogovorni strani</strong> v razdelku »<strong>$4</strong>«.",
+ "notification-compact-header-edit-user-talk": "$1 {{GENDER:$3|ti}} {{GENDER:$2|je pustil}} sporočilo.",
+ "notification-compact-header-edit-user-talk-with-section": "$1 {{GENDER:$3|ti}} {{GENDER:$2|je pustil}} sporočilo v razdelku \"<strong>$4</strong>\".",
"notification-header-page-linked": "V članku <strong>$4</strong> je bila narejena notranja povezava na članek <strong>$3</strong>.",
"notification-compact-header-page-linked": "Povezava narejena iz <strong>$1</strong>.",
"notification-bundle-header-page-linked": "Narejene so bile povezave iz {{PLURAL:$5|$5 stran|$5 strani|100=99+ strani}} na <strong>$3</strong>.",
+ "notification-header-article-reminder": "Stran, o kateri {{GENDER:$2|si}} si želel biti opomnjen, ima naslov <strong>$3</strong>",
"notification-link-text-what-links-here": "Vse povezave na to stran",
"notification-header-mention-other": "$1 {{GENDER:$3|te}} je {{GENDER:$2|omenil|omenila}} na strani <strong>$4</strong> v razdelku »<strong>$5</strong>«.",
"notification-header-mention-other-nosection": "$1 {{GENDER:$3|te}} je {{GENDER:$2|omenil|omenila}} na strani <strong>$4</strong>.",
@@ -138,7 +141,8 @@
"notification-header-user-rights-remove-only": "{{GENDER:$4|Tvoje}} Uporabniške pravice {{GENDER:$1|so bile spremenjene}}. Odslej nisi več v skupini: $2.",
"notification-header-user-rights-add-and-remove": "{{GENDER:$6|Tvoje}} uporabniške pravice {{GENDER:$1|so bile spremenjene}}. Postal si del skupine: $2. Nisi več v skupini: $4.",
"notification-header-user-rights-expiry-change": "Čas poteka {{GENDER:$4|tvojega}} tvojega članstva v naslednjih {{PLURAL:$3|skupini|skupinama|skupinah}} je bil {{GENDER:$1|spremenjen}}: $2.",
- "notification-header-welcome": "{{GENDER:|Dobrodošel|Dobrodošla}} na {{SITENAME}}, $1! Veseli smo {{GENDER:$2|tvojega}} obiska.",
+ "notification-header-welcome": "{{GENDER:$2|Dobrodošel|Dobrodošla}} na {{SITENAME}}, $1! Veseli smo, da si se {{GENDER:$2|oglasil|oglasila}}.",
+ "notification-header-mention-summary": "$1 {{GENDER:$3|te}} {{GENDER:$2|je omenil}} v povzetku urejanja strani <strong>$4</strong>.",
"notification-welcome-linktext": "{{GENDER:|Dobrodošel|Dobrodošla}}",
"notification-header-thank-you-1-edit": "Pravkar si {{GENDER:$2|naredil|naredila}} svoje prvo urejanje. Hvala {{GENDER:$2|ti}} in {{GENDER:$2|dobrodošel|dobrodošla}} še naprej!",
"notification-header-thank-you-10-edit": "Pravkar si {{GENDER:$2|naredil|naredila}} {{GENDER:$2|svoje}} deseto urejanje. Hvala {{GENDER:$2|ti}} in le tako naprej!",
@@ -149,6 +153,7 @@
"notification-header-thank-you-1000000-edit": "Pravkar si {{GENDER:$2|naredil|naredila}} {{GENDER:$2|svoje}} milijonto urejanje. Hvala ti za {{GENDER:$2|tvoj}} naravnost osupljiv doprinos!",
"notification-link-thank-you-edit": "{{GENDER:$1|Tvoje}} urejanje",
"notification-link-text-view-edit": "Ogled urejanja",
+ "notification-link-article-reminder": "Ogled strani",
"notification-header-reverted": "{{PLURAL:$4|Tvoje urejanje strani <strong>$3</strong> je bilo {{GENDER:$2|vrnjeno}}|Tvoji urejanji strani <strong>$3</strong> sta bili vrnjeni|Tvoja urejanja strani <strong>$3</strong> so bila vrnjena}}.",
"notification-header-emailuser": "$1 ti {{GENDER:$2|je poslal|je poslala}} e-pošto.",
"notification-edit-talk-page-email-subject2": "V projektu {{SITENAME}} ti je {{GENDER:$1|uporabnik|uporabnica}} {{GENDER:$1|pustil|pustila}} sporočilo.",
@@ -181,9 +186,9 @@
"echo-overlay-link": "Vsa obvestila",
"echo-overlay-title": "<b>Obvestila</b>",
"echo-overlay-title-overflow": "<b>{{PLURAL:$1|Obvestila}}</b> ({{PLURAL:$1|prikazano|prikazani|prikazana|prikazanih}} $1 od $2 {{PLURAL:$2|neprebranega|neprebranih}})",
- "echo-mark-all-as-read": "Označi vsa sporočila za prebrana",
+ "echo-mark-all-as-read": "Označi vsa sporočila kot prebrana",
"echo-mark-all-as-read-confirmation": "$1 {{PLURAL:$1|obvestilo označeno za prebrano|obvestili označeni za prebrani|obvestila označena za prebrana|obvestil označenih za prebrane}}",
- "echo-mark-wiki-as-read": "Označi vsa za prebrana v izbranem wikiju: $1",
+ "echo-mark-wiki-as-read": "Označi vsa kot prebrana v izbranem wikiju: $1",
"echo-date-today": "Danes",
"echo-date-yesterday": "Včeraj",
"echo-load-more-error": "Pri pridobivanju dodatnih rezultatov je prišlo do napake.",
@@ -193,7 +198,7 @@
"echo-email-batch-body-intro-daily": "{{GENDER:|Pozdravljen|Pozdravljena}}, $1.\n\nTu je povzetek tvoje današnje dejavnosti v {{GRAMMAR:dajalnik|{{SITENAME}}}}.",
"echo-email-batch-body-intro-weekly": "{{GENDER:|Pozdravljen|Pozdravljena}}, $1.\n\nTu je povzetek tvojih dejavnosti v preteklem tednu v {{GRAMMAR:dajalnik|{{SITENAME}}}}.",
"echo-email-batch-link-text-view-all-notifications": "Ogled vseh obvestil",
- "notification-header-foreign-alert": "Več opomnikov iz {{PLURAL:$5|drugega wikija|$5 drugih wikijev}}",
+ "notification-header-foreign-alert": "Novi opomniki iz {{PLURAL:$5|drugega wikija|$5 drugih wikijev}}",
"notification-header-foreign-notice": "Več obvestil iz {{PLURAL:$5|drugega wikija|$5 drugih wikijev}}",
"notification-header-foreign-all": "Več obvestil iz {{PLURAL:$5|drugega wikija|$5 drugih wikijev}}"
}
diff --git a/Echo/i18n/so.json b/Echo/i18n/so.json
index 3f6cc64b..81aeb754 100644
--- a/Echo/i18n/so.json
+++ b/Echo/i18n/so.json
@@ -8,7 +8,6 @@
"prefs-emailsettings": "Dooqyada e-mail-ka",
"prefs-echosubscriptions": "Iisoo dir arrimaha ku saabsan dhacdooyinkaan",
"prefs-echocrosswiki": "Wargelinno kuu tallabinaya wikiga",
- "prefs-newmessageindicator": "Tusaha farriimaha cusub",
"echo-pref-email-frequency-never": "Waxba ha iiga soo dirin ku saabsan wargelinnada e-mailka",
"echo-pref-email-frequency-immediately": "Wargelinnada kalida ah ee marka ay soo dhacaan.",
"echo-pref-email-frequency-daily": "Dulmar maalmeed wargelineed",
@@ -22,8 +21,6 @@
"echo-specialpage-pagefilters-subtitle": "Bogag leh wargelinno ee aan la aqrin",
"echo-none": "Malahan wax wargelin ah.",
"echo-more-info": "Dheeraad",
- "echo-popup-footer-special-page-invitation": "<strong>Isku day bogga wargelinnada ee lagu soo celceliyo qaabaynteedda.</strong> [$2 $1]",
- "echo-popup-footer-special-page-invitation-link": "Dhammaan astaamaha iyo bandhigyada cusub.",
"echo-notification-placeholder": "Ma lahan wargelin.",
"echo-notification-placeholder-filters": "Ma jiraan wargelinno isleh ee xulshadaan kooban",
"notification-link-text-view-changes": "{{GENDER:$1|Itus}} isbedelka",
diff --git a/Echo/i18n/sq.json b/Echo/i18n/sq.json
index 1bbb78a4..e836a5b6 100644
--- a/Echo/i18n/sq.json
+++ b/Echo/i18n/sq.json
@@ -12,7 +12,6 @@
"prefs-emailsettings": "Opsionet e emailit",
"prefs-displaynotifications": "Shfaq opsionet",
"prefs-echosubscriptions": "Më njofto për këto raste",
- "prefs-newmessageindicator": "Brezi i mesazhit të ri",
"echo-pref-send-me": "Më dërgo:",
"echo-pref-send-to": "Dërgo në:",
"echo-pref-email-format": "Formati i e-mailit:",
@@ -24,7 +23,6 @@
"echo-pref-email-frequency-weekly": "Përmbledhje javore e njoftimeve",
"echo-pref-email-format-html": "HTML",
"echo-pref-email-format-plain-text": "Tekst normal",
- "echo-pref-new-message-indicator": "Shfaq brezin e mesazheve të reja në faqen time të diskutimit në brezin e mjeteve",
"echo-learn-more": "Mëso më tepër",
"echo-new-messages": "Keni mesazhe të reja",
"echo-category-title-edit-user-talk": "{{PLURAL:$1|mesazh|mesazhe}} në faqen e diskutimeve",
diff --git a/Echo/i18n/sr-ec.json b/Echo/i18n/sr-ec.json
index 00de9048..40051773 100644
--- a/Echo/i18n/sr-ec.json
+++ b/Echo/i18n/sr-ec.json
@@ -8,157 +8,202 @@
"Macofe",
"Srdjan m",
"Dungodung",
- "Obsuser"
+ "Obsuser",
+ "Prevodim",
+ "Acamicamacaraca",
+ "BadDog",
+ "Matěj Suchánek"
]
},
"echo-desc": "Систем за обавештавање корисника о дешавањима и порукама",
"prefs-echo": "Обавештења",
- "prefs-emailsettings": "Поставке имејла",
- "prefs-displaynotifications": "Поставке приказа",
+ "prefs-emailsettings": "Опције имејла",
+ "prefs-displaynotifications": "Опције приказа",
"prefs-echosubscriptions": "Обавести ме о овим догађајима",
"prefs-echocrosswiki": "Међувики обавештења",
- "prefs-newmessageindicator": "Индикатор за нове поруке",
- "prefs-blocknotificationslist": "Игнорисани корисници",
+ "prefs-blocknotificationslist": "Пригушени корисници",
"echo-pref-send-me": "Пошаљи ми:",
"echo-pref-send-to": "Пошаљи на:",
"echo-pref-email-format": "Формат имејла:",
"echo-pref-web": "Веб",
"echo-pref-email": "Имејл",
- "echo-pref-email-frequency-never": "Не шаљи ми обавештења на имејл",
- "echo-pref-email-frequency-immediately": "Појединачна обавештења чим се појаве",
- "echo-pref-email-frequency-daily": "Дневни сажетак обавештења",
- "echo-pref-email-frequency-weekly": "Седмични сажетак обавештења",
+ "echo-pref-email-frequency-never": "не шаљи ми никаква обавештења путем имејла",
+ "echo-pref-email-frequency-immediately": "појединачна обавештења чим се појаве",
+ "echo-pref-email-frequency-daily": "дневни резиме обавештења",
+ "echo-pref-email-frequency-weekly": "седмични резиме обавештења",
"echo-pref-email-format-html": "HTML",
- "echo-pref-email-format-plain-text": "Чист текст",
- "echo-pref-cross-wiki-notifications": "Прикажи обавештења са других викија",
- "echo-pref-notifications-blacklist": "Не приказуј обавештења од ових корисника. ([[mw:Help:Notifications#mute|сазнај више]])",
- "echo-pref-new-message-indicator": "Прикажи индикатор када добијем поруку на страници за разговор",
+ "echo-pref-email-format-plain-text": "обичан текст",
+ "echo-pref-cross-wiki-notifications": "Обавештења са других викија",
+ "echo-pref-notifications-blacklist": "Не приказуј обавештења од ових корисника. ([[mw:Special:MyLanguage/Help:Notifications#mute|сазнајте више]])",
+ "echo-pref-beta-feature-cross-wiki-message": "Побољшана обавештења",
+ "echo-pref-beta-feature-cross-wiki-description": "Лакши преглед и организација обавештења. Укључује међувики обавештења, што вам омогућава да видите поруке са других викија. (Да бисте примали међувики обавештења на датом викију, морате да активирате ову бета могућност.)",
"echo-learn-more": "Сазнајте више",
- "echo-log": "Дневници",
+ "echo-log": "Јаван дневник",
"echo-new-messages": "Имате нове поруке",
"echo-category-title-edit-user-talk": "{{PLURAL:$1|Поруке}} на страници за разговор",
- "echo-category-title-article-linked": "{{PLURAL:$1|Повезивање страница}}",
- "echo-category-title-reverted": "Поништене {{PLURAL:$1|измене}}",
+ "echo-category-title-article-linked": "{{PLURAL:$1|Линкови на страницу}}",
+ "echo-category-title-reverted": "{{PLURAL:$1|Враћање измена}}",
"echo-category-title-mention": "{{PLURAL:$1|Спомињања}}",
- "echo-category-title-mention-failure": "Неуспешна {{PLURAL:$1|спомињања}}",
+ "echo-category-title-mention-failure": "Неуспела {{PLURAL:$1|спомињања}}",
"echo-category-title-mention-success": "Успешна {{PLURAL:$1|спомињања}}",
- "echo-category-title-other": "{{PLURAL:$1|Остало}}",
+ "echo-category-title-other": "{{PLURAL:$1|Друго}}",
"echo-category-title-system": "{{PLURAL:$1|Систем}}",
"echo-category-title-user-rights": "{{PLURAL:$1|Промена корисничких права}}",
"echo-category-title-emailuser": "{{PLURAL:$1|Имејлови од других корисника}}",
- "echo-pref-tooltip-edit-user-talk": "Обавештава вас када неко остави поруку или реплицира на вашој страници за разговор.",
- "echo-pref-tooltip-article-linked": "Обавештава вас када неко повеже чланак који сте ви направили са неком другом страницом.",
- "echo-pref-tooltip-reverted": "Обавештава вас када неко поништи измену коју сте направили, било коришћењем опције поништи или опције за враћање.",
- "echo-pref-tooltip-mention": "Обавештава вас кад вас неко спомене.",
- "echo-pref-tooltip-mention-failure": "Обавештава вас када неко не добије обавештење након што га споменете.",
- "echo-pref-tooltip-mention-success": "Обавештава вас када неко добије обавештење након што га споменете.",
+ "echo-category-title-article-reminder": "{{PLURAL:$1|Подсетници}} о страницама",
+ "echo-pref-tooltip-edit-user-talk": "Обавештава вас када неко постави поруку или одговори на вашој страници за разговор.",
+ "echo-pref-tooltip-article-linked": "Обавештава вас када неко повеже страницу који сте направили са неком другом страницом.",
+ "echo-pref-tooltip-reverted": "Обавештава вас када неко врати измену коју сте направили, било коришћењем опције поништи или алатке за враћање.",
+ "echo-pref-tooltip-mention": "Обавештава вас када неко дода везу ка вашој корисничкој страници.",
+ "echo-pref-tooltip-mention-failure": "Обавештава вас када некоме не можете да пошаљете спомињање.",
+ "echo-pref-tooltip-mention-success": "Обавештава вас када некоме пошаљете спомињање.",
"echo-pref-tooltip-user-rights": "Обавештава вас када неко промени ваша корисничка права.",
"echo-pref-tooltip-emailuser": "Обавештава вас када вам неко пошаље имејл.",
- "echo-error-no-formatter": "Није задато обликовање за обавештења",
+ "echo-pref-tooltip-article-reminder": "Обавести ме о овој страници када затражим.",
+ "echo-error-no-formatter": "Није одређено обликовање за обавештења.",
"notifications": "Обавештења",
"tooltip-pt-notifications-alert": "{{GENDER:|Ваша}} обавештења",
- "tooltip-pt-notifications-notice": "{{GENDER:|Ваша}} обавештења",
+ "tooltip-pt-notifications-notice": "{{GENDER:|Ваша}} ситна обавештења",
+ "echo-displaynotificationsconfiguration": "Конфигурација приказа обавештења",
+ "echo-displaynotificationsconfiguration-summary": "Ово је преглед о томе како су обавештења конфигурисана на овом викију.",
+ "echo-displaynotificationsconfiguration-notifications-by-category-header": "Обавештења по категоријама",
+ "echo-displaynotificationsconfiguration-sorting-by-section-header": "Сортирање по типовима",
+ "echo-displaynotificationsconfiguration-sorting-by-section-legend": "У којем ће се одељку сваки тип обавештења сортирати",
+ "echo-displaynotificationsconfiguration-available-notification-methods-header": "Дозвољени начини за обавештавање",
+ "echo-displaynotificationsconfiguration-available-notification-methods-by-category-legend": "Који начини за обавештавање су подржани за сваку категорију",
+ "echo-displaynotificationsconfiguration-available-notification-methods-by-type-legend": "Који начини за обавештавање су подржани за сваки тип; само се примењије на типове унутар категорија које су сакривене од подешавања",
+ "echo-displaynotificationsconfiguration-enabled-default-header": "Подразумевано омогућено",
+ "echo-displaynotificationsconfiguration-enabled-default-existing-users-legend": "Постојећи корисници",
+ "echo-displaynotificationsconfiguration-enabled-default-new-users-legend": "Нови корисници",
+ "echo-displaynotificationsconfiguration-mandatory-notification-methods-header": "Неопходни начини за обавештавање",
+ "echo-displaynotificationsconfiguration-mandatory-notification-methods-by-category-legend": "Који начини за обавештавање су обавезни за сваку категорију",
"echo-specialpage": "Обавештења",
"echo-specialpage-section-markread": "Означи групу као прочитану",
- "echo-specialpage-pagination-numnotifications": "{{PLURAL:$1|Обавештења}}: $1",
- "echo-specialpage-pagefilters-title": "Скорашње активности",
- "echo-specialpage-pagefilters-subtitle": "Странице с непрочитаним обавештењима",
- "notificationsmarkread-legend": "Означи обавештење прочитаним",
- "echo-anon": "Да бисте приступили овој страници морате се [$2 пријавити] или [$1 отворити налог].",
- "echo-none": "Немате обавештења",
+ "echo-specialpage-markasread": "Обавештење: Означавање као прочитано",
+ "echo-specialpage-markasread-invalid-id": "Неважећи ID дешавања",
+ "echo-specialpage-pagination-numnotifications": "$1 {{PLURAL:$1|обавeштење|обавештења}}",
+ "echo-specialpage-pagefilters-title": "Недавна активност",
+ "echo-specialpage-pagefilters-subtitle": "Странице са непрочитаним обавештењима",
+ "notificationsmarkread-legend": "Означавање обавештења као прочитано",
+ "echo-anon": "Да бисте примали обавештења, [$1 отворите налог] или [$2 се пријавите].",
+ "echo-none": "Немате обавештења.",
"echo-more-info": "Више информација",
"echo-feedback": "Повратне информације",
- "echo-api-failure": "Добављање обавештења није успело.",
- "echo-notification-placeholder": "Немате обавештења.",
- "echo-notification-placeholder-filters": "Нема обавештења по задатим критеријумима.",
- "echo-notification-loginrequired": "Морате се пријавити да би видели обавештења.",
- "echo-notification-popup-loginrequired": "Пријавите се да видите Ваша обавештења.",
+ "echo-api-failure": "Неуспело добављање обавештења.",
+ "echo-api-failure-cross-wiki": "Приступ удаљеном домену је одбијен.",
+ "echo-notification-placeholder": "Нема обавештења.",
+ "echo-notification-placeholder-filters": "Нема обавештења која одговарају овим критеријумима.",
+ "echo-notification-loginrequired": "Морате се пријавити да бисте видели своја обавештења.",
+ "echo-notification-popup-loginrequired": "Пријавите се да бисте видите своја обавештења.",
"echo-notification-markasread": "Означи као прочитано",
"echo-notification-markasunread": "Означи као непрочитано",
- "echo-notification-markasread-tooltip": "Означи као прочитано",
+ "echo-notification-markasread-tooltip": "Означите као прочитано",
"echo-notification-more-options-tooltip": "Више опција",
+ "notification-dynamic-actions-unwatch": "{{GENDER:$3|Престани}} да надгледаш нову активност на страници „$1”",
+ "notification-dynamic-actions-unwatch-confirmation": "Више {{GENDER:$3|не надгледате}} страницу „$1”",
+ "notification-dynamic-actions-unwatch-confirmation-description": "У било ком тренутку {{GENDER:$3|можете}} да надгледате [$2 ову страницу].",
+ "notification-dynamic-actions-watch": "{{GENDER:$3|Прати}} нову активност на страници „$1”",
+ "notification-dynamic-actions-watch-confirmation": "Сада {{GENDER:$3|надгледате}} страницу „$1”",
+ "notification-dynamic-actions-watch-confirmation-description": "У било ком тренутку {{GENDER:$3|можете}} престати да надгледате [$2 ову страницу].",
"notification-link-text-expand-all": "Прошири",
- "notification-link-text-expand-alert-count": "Прикажи {{PLURAL:$1|обавештења}} ($1)",
- "notification-link-text-expand-all-count": "Прикажи {{PLURAL:$1|обавештења}} ($1)",
- "notification-link-text-collapse-all": "Сакриј све",
+ "notification-link-text-expand-alert-count": "Погледај {{PLURAL:$1|$1 обавештење|$1 обавештења}}",
+ "notification-link-text-expand-notice-count": "Погледај {{PLURAL:$1|$1 ситно обавештење|$1 ситна обавештења}}",
+ "notification-link-text-expand-all-count": "Погледај {{PLURAL:$1|$1 обавештење|$1 обавештења}}",
+ "notification-link-text-collapse-all": "Скупи",
"notification-link-text-view-message": "Погледај поруку",
- "notification-link-text-view-mention": "Види помињање",
- "notification-link-text-view-changes": "{{GENDER:$1|Погледај}} измене",
+ "notification-link-text-view-mention": "Погледај спомињање",
+ "notification-link-text-view-mention-failure": "{{PLURAL:$1|Погледај спомињање|Погледај спомињања}}",
+ "notification-link-text-view-changes": "{{GENDER:$1|Погледај}} промене",
"notification-link-text-view-page": "Погледај страницу",
- "notification-header-edit-user-talk": "$1 Вам је {{GENDER:$2|оставио|оставила}} поруку {{GENDER:$3|на}} <strong>Вашој страници за разговор</strong>.",
- "notification-header-edit-user-talk-with-section": "$1 Вам је {{GENDER:$2|оставио|оставила}} поруку на <strong>{{GENDER:$3|Вашој}} страници за разговор</strong> у „<strong>$4</strong>“.",
+ "notification-header-edit-user-talk": "$1 је {{GENDER:$2|оставио|оставила}} поруку на <strong>{{GENDER:$3|вашој}} страници за разговор</strong>.",
+ "notification-header-edit-user-talk-with-section": "$1 је {{GENDER:$2|оставио|оставила}} поруку на <strong>{{GENDER:$3|вашој}} страници за разговор</strong> у одељку „<strong>$4</strong>”.",
+ "notification-compact-header-edit-user-talk": "$1 {{GENDER:$3|вам}} је {{GENDER:$2|оставио|оставила}} поруку.",
+ "notification-compact-header-edit-user-talk-with-section": "$1 вам је {{GENDER:$2|оставио|оставила}} {{GENDER:$3|поруку}} у одељку „<strong>$4</strong>”.",
"notification-header-page-linked": "Страница <strong>$3</strong> је повезана са <strong>$4</strong>.",
- "notification-compact-header-page-linked": "Повезана са <strong>$1</strong>.",
- "notification-bundle-header-page-linked": "Направљене су везе до <strong>$3</strong> са {{PLURAL:$5||$5 странице|$5 страница|100=>&thinsp;99 страница}}.",
- "notification-link-text-what-links-here": "Све везе ка овој страници",
- "notification-header-mention-other": "$1 Вас је {{GENDER:$2|поменуо|поменула}} {{GENDER:$3|на}} <strong>$4</strong> у „<strong>$5</strong>“.",
- "notification-header-mention-other-nosection": "$1 Вас је {{GENDER:$2|поменуо|поменула}} {{GENDER:$3|на}} <strong>$4</strong>.",
- "notification-header-mention-user-talkpage-v2": "$1 Вас је {{GENDER:$2|поменуо|поменула}} {{GENDER:$3|на}} <strong>страници за разговор {{GENDER:$5|корисника|кориснице}} $4</strong> у „<strong>$6</strong>“.",
- "notification-header-mention-user-talkpage-nosection": "$1 Вас је {{GENDER:$2|поменуо|поменула}} {{GENDER:$3|на}} <strong>страници за разговор {{GENDER:$5|корисника|кориснице}} $4</strong>.",
- "notification-header-mention-agent-talkpage": "$1 Вас је {{GENDER:$2|поменуо|поменула}} {{GENDER:$3|на}} <strong>својој страници за разговор</strong> у „<strong>$4</strong>“.",
- "notification-header-mention-agent-talkpage-nosection": "$1 Вас је {{GENDER:$2|поменуо|поменула}} {{GENDER:$3|на}} <strong>својој страници за разговор</strong>.",
- "notification-header-mention-article-talkpage": "$1 Вас је {{GENDER:$2|поменуо|поменула}} {{GENDER:$3|на}} страници за разговор <strong>$4</strong> у „<strong>$5</strong>“.",
- "notification-header-mention-article-talkpage-nosection": "$1 Вас је {{GENDER:$2|поменуо|поменула}} {{GENDER:$3|на}} страници за разговор <strong>$4</strong>.",
- "notification-header-mention-failure-too-many": "{{GENDER:$2|Покушали сте}} да поменете више од $3 {{PLURAL:$3|корисника}}. Сва помињања изнад лимита нису послата.",
+ "notification-compact-header-page-linked": "Повезана са странице <strong>$1</strong>.",
+ "notification-bundle-header-page-linked": "Линкови су направљени до странице <strong>$3</strong> са {{PLURAL:$5||$5 странице|$5 страница|100=>&thinsp;99 страница}}.",
+ "notification-header-article-reminder": "Страница о којој {{GENDER:$2|сте}} тражили да будете подсећени се зове <strong>$3</strong>",
+ "notification-link-text-what-links-here": "Сви линкови ка овој страници",
+ "notification-header-mention-other": "$1 {{GENDER:$3|вас}} је {{GENDER:$2|поменуо|поменула}} на страници <strong>$4</strong> у одељку „<strong>$5</strong>”.",
+ "notification-header-mention-other-nosection": "$1 {{GENDER:$3|вас}} је {{GENDER:$2|поменуо|поменула}} на страници strong>$4</strong>.",
+ "notification-header-mention-user-talkpage-v2": "$1 {{GENDER:$3|вас}} је {{GENDER:$2|поменуо|поменула}} на <strong>страници за разговор {{GENDER:$5|корисника|кориснице}} $4</strong> у одељку „<strong>$6</strong>”.",
+ "notification-header-mention-user-talkpage-nosection": "$1 {{GENDER:$3|вас}} је {{GENDER:$2|поменуо|поменула}} на <strong>страници за разговор {{GENDER:$5|корисника|кориснице}} $4</strong>.",
+ "notification-header-mention-agent-talkpage": "$1 {{GENDER:$3|вас}} је {{GENDER:$2|поменуо|поменула}} на <strong>својој страници за разговор</strong> у одељку „<strong>$4</strong>”.",
+ "notification-header-mention-agent-talkpage-nosection": "$1 {{GENDER:$3|вас}} је {{GENDER:$2|поменуо|поменула}} на <strong>својој страници за разговор</strong>.",
+ "notification-header-mention-article-talkpage": "$1 {{GENDER:$3|вас}} је {{GENDER:$2|поменуо|поменула}} на страници за разговор странице <strong>$4</strong> у одељку „<strong>$5</strong>”.",
+ "notification-header-mention-article-talkpage-nosection": "$1 {{GENDER:$3|вас}} је {{GENDER:$2|поменуо|поменула}} на страници за разговор странице „<strong>$4</strong>”.",
+ "notification-header-mention-failure-user-unknown": "{{GENDER:$2|Ваше}} спомињање корисника <strong>$3</strong> није послато јер корисничко име није пронађено.",
+ "notification-header-mention-failure-user-anonymous": "{{GENDER:$2|Ваше}} помињање корисника <strong>$3</strong> није послато јер је корисник анониман.",
+ "notification-header-mention-failure-too-many": "Покушали {{GENDER:$2|сте}} да поменете више од $3 {{PLURAL:$3|корисника}}. Сва помињања изнад тог ограничења нису послата.",
+ "notification-header-mention-failure-bundle": "{{PLURAL:$3|Не могу}} да пошаљем {{PLURAL:$3|Спомињање које|$3 спомињања која}} {{GENDER:$2|сте направили}} на страници за разговор „<strong>$4</strong>”.",
"notification-compact-header-mention-failure-user-unknown": "<strong>Корисничко име не постоји:</strong> $1",
- "notification-compact-header-mention-failure-user-anonymous": "<strong>Не можете спомињати ИП адресе:</strong> $1",
- "notification-header-mention-success": "{{GENDER:$2|Ваше}} спомињање {{GENDER:$3|корисника|кориснице|корисника}} <strong>$3</strong> је послато.",
- "notification-compact-header-mention-success": "<strong>{{GENDER:$2|Споменули сте}}:</strong> $3",
- "notification-header-user-rights-add-only": "{{GENDER:$4|Ваша}} корисничка права су {{GENDER:$1|промењена}}. Сада сте члан следећих група: $2.",
+ "notification-compact-header-mention-failure-user-anonymous": "<strong>Не можете да помињете IP-ове:</strong> $1",
+ "notification-header-mention-success": "{{GENDER:$2|Ваше}} спомињање {{GENDER:$3|корисника|кориснице}} <strong>$3</strong> је послато.",
+ "notification-header-mention-success-bundle": "{{PLURAL:$3|Спомињање које|$3 спомињања која}} {{GENDER:$2|сте направили}} на страници за разговор „<strong>$4</strong>” {{PLURAL:$3|је послато|су послата}}.",
+ "notification-compact-header-mention-success": "<strong>{{GENDER:$2|Споменули сте {{GENDER:$3|корисника|корисницу}}}}:</strong> $3",
+ "notification-header-mention-status-bundle": "{{PLURAL:$3|Обавештење|$3 обавештења}} о спомињањима која {{GENDER:$2|сте направили}} на страници за разговор „<strong>$4</strong>”: {{PLURAL:$5|$5 није послато|$5 нису послата}}, {{PLURAL:$6|$6 је послато|$6 су послата}}.",
+ "notification-header-user-rights-add-only": "{{GENDER:$4|Ваша}} корисничка права су {{GENDER:$1|промењена}}. Додати сте у следеће групе: $2.",
"notification-header-user-rights-remove-only": "{{GENDER:$4|Ваша}} корисничка права су {{GENDER:$1|промењена}}. Више нисте члан следећих група: $2.",
- "notification-header-user-rights-add-and-remove": "{{GENDER:$6|Ваша}} корисничка права су {{GENDER:$1|промењена}}. Додати сте у $2 а уклоњени из $4.",
- "notification-header-user-rights-expiry-change": "Истек {{GENDER:$4|Вашег}} чланства у {{PLURAL:$3|следећој групи|следећим групама}} је {{GENDER:$1|промењен}}: $2.",
- "notification-header-welcome": "{{GENDER:$2|Добро дошли}} на {{SITENAME}}, $1! Драго нам {{GENDER:$2|је}} што сте овде.",
+ "notification-header-user-rights-add-and-remove": "{{GENDER:$6|Ваша}} корисничка права су {{GENDER:$1|промењена}}. Додати сте у следеће групе: $2. Више нисте члан следећи група: $4.",
+ "notification-header-user-rights-expiry-change": "Истек {{GENDER:$4|вашег}} чланства у {{PLURAL:$3|следећој групи|следећим групама}} је {{GENDER:$1|промењен}}: $2.",
+ "notification-header-welcome": "{{GENDER:$2|Добро дошли}} на пројекат {{SITENAME}}, $1! Драго нам што {{GENDER:$2|сте}} овде.",
+ "notification-header-mention-summary": "$1 {{GENDER:$3|вас}} је {{GENDER:$2|поменуо|поменула}} у резимеу измене на страници <strong>$4</strong>.",
"notification-welcome-linktext": "Добро дошли",
- "notification-header-thank-you-1-edit": "Управо {{GENDER:$2|сте}} направили прву измену, хвала {{GENDER:$2|Вам}} и добро дошли!",
- "notification-header-thank-you-10-edit": "Управо {{GENDER:$2|сте}} направили {{GENDER:$2|своју}} десету измену; хвала {{GENDER:$2|Вам}} и само тако наставите!",
- "notification-header-thank-you-100-edit": "Управо {{GENDER:$2|сте}} направили {{GENDER:$2|своју}} стоту измену; пуно {{GENDER:$2|Вам}} хвала!",
- "notification-header-thank-you-1000-edit": "Управо {{GENDER:$2|сте}} направили хиљадиту измену; хвала {{GENDER:$2|Вам}} на фантастичном доприносу!",
+ "notification-header-thank-you-1-edit": "Управо {{GENDER:$2|сте}} направили {{GENDER:$2|своју}} прву измену. Хвала {{GENDER:$2|вам}} и добро дошли.",
+ "notification-header-thank-you-10-edit": "Управо {{GENDER:$2|сте}} направили {{GENDER:$2|своју}} десету измену. Хвала {{GENDER:$2|вам}} и само тако наставите!",
+ "notification-header-thank-you-100-edit": "Управо {{GENDER:$2|сте}} направили {{GENDER:$2|своју}} стоту измену. Хвала {{GENDER:$2|вам}} пуно.",
+ "notification-header-thank-you-1000-edit": "Управо {{GENDER:$2|сте}} направили хиљадиту измену. Хвала {{GENDER:$2|вам}} на фантастичном доприносу.",
+ "notification-header-thank-you-10000-edit": "Управо {{GENDER:$2|сте}} направили {{GENDER:$2|своју}} десет-хиљадиту измену. Хвала {{GENDER:$2|вам}} пуно.",
+ "notification-header-thank-you-100000-edit": "Управо {{GENDER:$2|сте}} направили {{GENDER:$2|своју}} сто-хиљадиту измену. Хвала {{GENDER:$2|вам}} на феноменалном доприносу.",
+ "notification-header-thank-you-1000000-edit": "Управо {{GENDER:$2|сте}} направили {{GENDER:$2|своју}} милиониту измену. Хвала {{GENDER:$2|вам}} на задивљујућем доприносу.",
"notification-link-thank-you-edit": "{{GENDER:$1|Ваша}} измена",
"notification-link-text-view-edit": "Погледај измену",
- "notification-header-reverted": "{{PLURAL:$4|Ваша измена на страници <strong>$3</strong> је поништена|Ваше измене на {{GENDER:$2|страници}} <strong>$3</strong> су поништене}}.",
- "notification-header-emailuser": "$1 Вам је {{GENDER:$2|послао|послала}} имејл.",
- "notification-edit-talk-page-email-subject2": "$1 Вам је {{GENDER:$1|оставио|оставила}} поруку на пројекту {{SITENAME}}",
- "notification-edit-talk-page-email-batch-body-with-section": "$1 Вам је {{GENDER:$1|оставио|оставила}} поруку на Вашој страници за разговор у „$2“.",
- "notification-page-linked-email-subject": "Ваша страница је повезана на пројекту {{SITENAME}}",
- "notification-reverted-email-subject2": "{{GENDER:$1|{{PLURAL:$3|Ваша измена је поништена|Ваше измене су поништене}}}} на пројекту {{SITENAME}}",
- "notification-mention-email-subject": "$1 Вас је {{GENDER:$1|поменуо|поменула}} {{GENDER:$2|на}} {{SITENAME}}",
- "notification-user-rights-email-subject": "Ваша корисничка права на пројекту {{SITENAME}} су промењена.",
+ "notification-link-article-reminder": "Погледај страницу",
+ "notification-header-reverted": "{{PLURAL:$4|Ваша измена на страници <strong>$3</strong> је враћена|Ваше измене на {{GENDER:$2|страници}} <strong>$3</strong> су враћене}}.",
+ "notification-header-emailuser": "$1 вам је {{GENDER:$2|послао|послала}} имејл.",
+ "notification-edit-talk-page-email-subject2": "$1 вам је {{GENDER:$1|оставио|оставила}} поруку на пројекту {{SITENAME}}",
+ "notification-edit-talk-page-email-batch-body-with-section": "$1 је {{GENDER:$1|оставио|оставила}} поруку на вашој страници за разговор у одељку „$2“.",
+ "notification-page-linked-email-subject": "Страница коју сте направили је повезана на пројекту {{SITENAME}}",
+ "notification-reverted-email-subject2": "{{PLURAL:$3|Ваша измена је {{GENDER:$1|враћена}}|Ваше измене су {{GENDER:$1|враћене}}}} на пројекту {{SITENAME}}.",
+ "notification-mention-email-subject": "$1 {{GENDER:$2|вас}} је {{GENDER:$1|поменуо|поменула}} на пројекту {{SITENAME}}",
+ "notification-user-rights-email-subject": "Ваша корисничка права су промењена на пројекту {{SITENAME}}.",
"notification-timestamp-ago-seconds": "{{PLURAL:$1|$1 сек.}}",
"notification-timestamp-ago-minutes": "{{PLURAL:$1|$1 мин.}}",
- "notification-timestamp-ago-hours": "{{PLURAL:$1|$1 h}}",
+ "notification-timestamp-ago-hours": "{{PLURAL:$1|$1 ч.}}",
"notification-timestamp-ago-days": "{{PLURAL:$1|$1 д.}}",
"notification-timestamp-ago-months": "{{PLURAL:$1|$1 мес.}}",
"notification-timestamp-ago-years": "{{PLURAL:$1|$1 год.}}",
"notification-timestamp-today": "Данас",
"notification-timestamp-yesterday": "Јуче",
- "notification-inbox-filter-read": "Прочитано",
- "notification-inbox-filter-unread": "Непрочитано",
- "notification-inbox-filter-all": "Све",
+ "notification-inbox-filter-read": "Прочитана",
+ "notification-inbox-filter-unread": "Непрочитана",
+ "notification-inbox-filter-all": "Сва",
"echo-email-body-default": "Имате ново обавештење на пројекту {{SITENAME}}:\n\n$1",
- "echo-email-footer-default-html": "Да бисте променили које поруке примате од нас идите у <a href=\"$2\" style=\"text-decoration:none; color: #3868B0;\">подешавања</a>.<br />\n$1",
- "echo-email-footer-default": "$2\n\nДа бисте променили које поруке примате од нас идите у подешавања:\n{{canonicalurl:{{#special:Preferences}}#mw-prefsection-echo}}\n\n$1",
- "echo-email-plain-footer": "Да бисте променили које поруке примате {{GENDER:$1|од}} нас идите у подешавања.",
- "echo-email-html-footer-preference-link-text": "{{GENDER:$1|Ваша}} подешавања",
- "echo-email-html-footer-with-link": "Да бисте променили које поруке примате {{GENDER:$2|од}} нас идите у $1.",
+ "echo-email-footer-default-html": "Да бисте контролисали које имејлове вам шаљемо, <a href=\"$2\" style=\"text-decoration:none; color: #3868B0;\">проверите своја подешавања</a>.<br />\n$1",
+ "echo-email-footer-default": "$2\n\nДа бисте контролисали које имејлове вам шаљемо, проверите своја подешавања:\n{{canonicalurl:{{#special:Preferences}}#mw-prefsection-echo}}\n\n$1",
+ "echo-email-plain-footer": "Да бисте контролисали које имејлове {{GENDER:$1|вам}} шаљемо, проверите {{GENDER:$1|своја}} подешавања.",
+ "echo-email-html-footer-preference-link-text": "проверите {{GENDER:$1|своја}} подешавања",
+ "echo-email-html-footer-with-link": "Да бисте контролисали које имејлове {{GENDER:$2|вам}} шаљемо, $1.",
"echo-notification-alert": "{{PLURAL:$1|Обавештење ($1)|Обавештања ($1)|100=Обавештања (99+)}}",
- "echo-notification-notice": "{{PLURAL:$1|Обавештење ($1)|Обавештења ($1)|100=Обавештења (99+)}}",
+ "echo-notification-notice": "{{PLURAL:$1|$1 ситно обавештење|$1 ситна обавештења |100=99+ ситних обавештења}}",
"echo-notification-alert-text-only": "Обавештења",
- "echo-notification-notice-text-only": "Обавештења",
+ "echo-notification-notice-text-only": "Ситна обавештења",
"echo-overlay-link": "Сва обавештења",
"echo-overlay-title": "<b>Обавештења</b>",
- "echo-overlay-title-overflow": "<b>{{PLURAL:$1|Обавештења}}</b> (приказ $1 од $2 непрочитаних)",
- "echo-mark-all-as-read": "Означи све прочитаним",
- "echo-mark-all-as-read-confirmation": "$1 {{PLURAL:$1|1=обавештење|обавештења}} као прочитано",
+ "echo-overlay-title-overflow": "<b>{{PLURAL:$1|Обавештење|Обавештења}}</b> (приказ $1 од $2 непрочитаних)",
+ "echo-mark-all-as-read": "Означи све као прочитано",
+ "echo-mark-all-as-read-confirmation": "$1 {{PLURAL:$1|1=обавештење означено као прочитано|обавештења означена као прочитана}}",
"echo-mark-wiki-as-read": "Означи све као прочитано у изабраном викију: $1",
"echo-date-today": "Данас",
"echo-date-yesterday": "Јуче",
"echo-load-more-error": "Дошло је до грешке при добављању више резултата.",
- "notification-bundle-header-edit-user-talk-v2": "{{PLURAL:$1|Једна нова порука|$1 нове поруке|$1 нових порука|100=≥100 нових порука}} на <strong>{{GENDER:$3|Вашој}} страници за разговор</strong>.",
+ "notification-bundle-header-edit-user-talk-v2": "{{PLURAL:$1|Једна нова порука|$1 нове поруке|$1 нових порука|100=≥100 нових порука}} на <strong>{{GENDER:$3|вашој}} страници за разговор</strong>.",
"echo-email-batch-subject-daily": "Имате {{PLURAL:$2|ново обавештење|нова обавештења}} на пројекту {{SITENAME}}",
"echo-email-batch-subject-weekly": "Имате {{PLURAL:$2|ново обавештење|нова обавештења}} на пројекту {{SITENAME}} ове седмице",
- "echo-email-batch-body-intro-daily": "Здраво $1,\nОво је дневни сажетак данашњих активности на пројекту {{SITENAME}} за вас.",
- "echo-email-batch-body-intro-weekly": "Здраво $1,\nОво је недељни сажетак активности на пројекту {{SITENAME}} за вас.",
+ "echo-email-batch-body-intro-daily": "Здраво, $1,\nОво је резиме данашњих активности на пројекту {{SITENAME}} за вас.",
+ "echo-email-batch-body-intro-weekly": "Здраво, $1,\nОво је резиме овонедељне активности на пројекту {{SITENAME}} за вас.",
"echo-email-batch-link-text-view-all-notifications": "Погледај сва обавештења",
- "notification-header-foreign-notice": "Још обавештења са {{PLURAL:$5|другог викија|$5 друга викија|$5 других викија}}"
+ "notification-header-foreign-alert": "Више обавештења са {{PLURAL:$5|другог викија|$5 друга викија|$5 других викија}}",
+ "notification-header-foreign-notice": "Више обавештења са {{PLURAL:$5|другог викија|$5 друга викија|$5 других викија}}",
+ "notification-header-foreign-all": "Више обавештења са {{PLURAL:$5|другог викија|$5 друга викија|$5 других викија}}"
}
diff --git a/Echo/i18n/sr-el.json b/Echo/i18n/sr-el.json
index 2b693ecc..1a08e8c8 100644
--- a/Echo/i18n/sr-el.json
+++ b/Echo/i18n/sr-el.json
@@ -5,7 +5,8 @@
"Srdjan m",
"Macofe",
"Сербијана",
- "Obsuser"
+ "Obsuser",
+ "Prevodim"
]
},
"echo-desc": "Sistem za obaveštavanje korisnika o dešavanjima i porukama",
@@ -14,7 +15,6 @@
"prefs-displaynotifications": "Postavke prikaza",
"prefs-echosubscriptions": "Obavesti me o ovim događajima",
"prefs-echocrosswiki": "Međuviki obaveštenja",
- "prefs-newmessageindicator": "Indikator za nove poruke",
"prefs-blocknotificationslist": "Ignorisani korisnici",
"echo-pref-send-me": "Pošalji mi:",
"echo-pref-send-to": "Pošalji na:",
@@ -28,8 +28,7 @@
"echo-pref-email-format-html": "HTML",
"echo-pref-email-format-plain-text": "Čist tekst",
"echo-pref-cross-wiki-notifications": "Prikaži obaveštenja sa drugih vikija",
- "echo-pref-notifications-blacklist": "Ne prikazuj obaveštenja od ovih korisnika. ([[mw:Help:Notifications#mute|saznaj više]])",
- "echo-pref-new-message-indicator": "Prikaži indikator kada dobijem poruku na stranici za razgovor",
+ "echo-pref-notifications-blacklist": "Ne prikazuj obaveštenja od ovih korisnika. ([[mw:Special:MyLanguage/Help:Notifications#mute|saznaj više]])",
"echo-learn-more": "Saznajte više",
"echo-new-messages": "Imate nove poruke",
"echo-category-title-edit-user-talk": "{{PLURAL:$1|Poruke}} na stranici za razgovor",
@@ -53,7 +52,7 @@
"echo-error-no-formatter": "Nije zadato oblikovanje za obaveštenja",
"notifications": "Obaveštenja",
"tooltip-pt-notifications-alert": "{{GENDER:|Vaša}} obaveštenja",
- "tooltip-pt-notifications-notice": "{{GENDER:|Vaša}} obaveštenja",
+ "tooltip-pt-notifications-notice": "{{GENDER:|Vaša}} sitna obaveštenja",
"echo-specialpage": "Obaveštenja",
"echo-anon": "Da biste pristupili ovoj stranici morate se [$2 prijaviti] ili [$1 otvoriti nalog].",
"echo-none": "Nemate obaveštenja",
@@ -86,6 +85,7 @@
"notification-header-mention-success": "{{GENDER:$2|Vaše}} spominjanje {{GENDER:$3|korisnika|korisnice|korisnika}} <strong>$3</strong> je poslato.",
"notification-header-user-rights-remove-only": "{{GENDER:$4|Vaša}} korisnička prava su {{GENDER:$1|promenjena}}. Više niste član sledećih grupa: $2.",
"notification-header-welcome": "{{GENDER:$2|Dobro došli}} na {{SITENAME}}, $1! Drago nam {{GENDER:$2|je}} što ste ovde.",
+ "notification-header-mention-summary": "$1 {{GENDER:$3|Vas}} je {{GENDER:$2|pomenuo|pomenula|pomenuo}} u opisu izmene na stranici <strong>$4</strong>.",
"notification-welcome-linktext": "Dobro došli",
"notification-header-thank-you-1-edit": "Upravo {{GENDER:$2|ste}} napravili prvu izmenu, hvala {{GENDER:$2|Vam}} i dobro došli!",
"notification-link-text-view-edit": "Pogledaj izmenu",
@@ -109,6 +109,7 @@
"echo-overlay-title": "<b>Obaveštenja</b>",
"echo-overlay-title-overflow": "<b>{{PLURAL:$1|Obaveštenja}}</b> (prikaz $1 od $2 nepročitanih)",
"echo-mark-all-as-read": "Označi sve pročitanim",
+ "echo-mark-all-as-read-confirmation": "$1 {{PLURAL:$1|1=obaveštenje označeno kao pročitano|obaveštenja označena kao pročitana}}",
"echo-date-today": "Danas",
"echo-date-yesterday": "Juče",
"echo-load-more-error": "Došlo je do greške pri dobavljanju više rezultata.",
diff --git a/Echo/i18n/sv.json b/Echo/i18n/sv.json
index 88a486f9..24f999aa 100644
--- a/Echo/i18n/sv.json
+++ b/Echo/i18n/sv.json
@@ -17,7 +17,8 @@
"Frisko",
"Macofe",
"Nemo bis",
- "Umeaboy"
+ "Umeaboy",
+ "Pipetricker"
]
},
"echo-desc": "System för att meddela användare om händelser och meddelanden",
@@ -26,7 +27,6 @@
"prefs-displaynotifications": "Visningsalternativ",
"prefs-echosubscriptions": "Meddela mig om dessa händelser",
"prefs-echocrosswiki": "Interwikiaviseringar",
- "prefs-newmessageindicator": "Indikator för nya meddelanden",
"prefs-blocknotificationslist": "Ignorerade användare",
"echo-pref-send-me": "Skicka mig:",
"echo-pref-send-to": "Skicka till:",
@@ -40,8 +40,7 @@
"echo-pref-email-format-html": "HTML",
"echo-pref-email-format-plain-text": "Oformaterad text",
"echo-pref-cross-wiki-notifications": "Visa aviseringar från andra wikis",
- "echo-pref-notifications-blacklist": "Visa inte aviseringar från dessa användare. ([[mw:Help:Notifications#mute|läs mer]])",
- "echo-pref-new-message-indicator": "Visa symbolen för diskussionssidemeddelanden i min verktygsrad",
+ "echo-pref-notifications-blacklist": "Visa inte aviseringar från dessa användare. ([[mw:Special:MyLanguage/Help:Notifications#mute|läs mer]])",
"echo-pref-beta-feature-cross-wiki-message": "Förbättrade aviseringar",
"echo-pref-beta-feature-cross-wiki-description": "Visa och organisera aviseringar mer lättare. Innehåller aviseringar som låter dig se meddelanden från andra wikis. (För att få interwikiaviseringar på en wiki måste du aktivera betafunktionen på wikin.)",
"echo-learn-more": "Läs mer",
@@ -50,7 +49,7 @@
"echo-category-title-edit-user-talk": "{{PLURAL:$1|Diskussionssidemeddelande|Diskussionssidemeddelanden}}",
"echo-category-title-article-linked": "Sid{{PLURAL:$1|länk|länkar}}",
"echo-category-title-reverted": "Redigerings{{PLURAL:$1|återställning|återställningar}}",
- "echo-category-title-mention": "{{PLURAL:$1|Omnämning|Omnämningar}}",
+ "echo-category-title-mention": "{{PLURAL:$1|Omnämnande|Omnämnanden}}",
"echo-category-title-mention-failure": "{{PLURAL:$1|Misslyckat omnämnande|Misslyckade omnämnanden}}",
"echo-category-title-mention-success": "{{PLURAL:$1|Genomfört omnämnande|Genomförda omnämnanden}}",
"echo-category-title-other": "{{PLURAL:$1|Annan|Andra}}",
@@ -69,7 +68,7 @@
"echo-pref-tooltip-article-reminder": "Meddela mig om denna sida när jag frågar.",
"echo-error-no-formatter": "Ingen formatering definierad för avisering.",
"notifications": "Aviseringar",
- "tooltip-pt-notifications-alert": "{{GENDER:|Dina}} systemmeddelanden",
+ "tooltip-pt-notifications-alert": "{{GENDER:|Dina}} notiser",
"tooltip-pt-notifications-notice": "{{GENDER:|Dina}} notiser",
"echo-displaynotificationsconfiguration": "Visa aviseringskonfiguration",
"echo-displaynotificationsconfiguration-summary": "Detta är en översikt av hur aviseringar är konfigurerade på denna wiki.",
@@ -96,8 +95,6 @@
"echo-none": "Du har inga aviseringar.",
"echo-more-info": "Mer information",
"echo-feedback": "Feedback",
- "echo-popup-footer-special-page-invitation": "<strong>Prova den omgjorda sidan för aviseringar.</strong> [$2 $1]",
- "echo-popup-footer-special-page-invitation-link": "Alla nya utseenden och funktioner.",
"echo-api-failure": "Kunde inte hämta aviseringar.",
"echo-api-failure-cross-wiki": "Åtkomst till fjärrdomänen nekades.",
"echo-notification-placeholder": "Det finns inga meddelanden.",
@@ -126,6 +123,8 @@
"notification-link-text-view-page": "Visa sida",
"notification-header-edit-user-talk": "$1 {{GENDER:$2|lämnade}} ett meddelande på <strong>{{GENDER:$3|din}} diskussionssida</strong>.",
"notification-header-edit-user-talk-with-section": "$1 {{GENDER:$2|lämnade}} ett meddelande på <strong>{{GENDER:$3|din}} diskussionssida</strong> i \"<strong>$4</strong>\".",
+ "notification-compact-header-edit-user-talk": "$1 {{GENDER:$2|skickade}} ett meddelande till {{GENDER:$3|dig}}.",
+ "notification-compact-header-edit-user-talk-with-section": "$1 {{GENDER:$2|skickade}} ett meddelande till {{GENDER:$3|dig}} i \"<strong>$4</strong>\".",
"notification-header-page-linked": "En länkning gjordes från <strong>$4</strong> till <strong>$3</strong>.",
"notification-compact-header-page-linked": "Länkades från <strong>$1</strong>.",
"notification-bundle-header-page-linked": "Länkar skapades från {{PLURAL:$5||$5 sidor|100=99+ sidor}} till <strong>$3</strong>.",
@@ -154,6 +153,7 @@
"notification-header-user-rights-add-and-remove": "{{GENDER:$6|Dina}} användarrättigheter har {{GENDER:$1|ändrats}}. Du har lagts till i: $2. Du är inte längre medlem i: $4.",
"notification-header-user-rights-expiry-change": "Utgången för {{GENDER:$4|ditt}} medlemskap i följande {{PLURAL:$3|grupp|grupper}} har {{GENDER:$1|ändrats}}: $2.",
"notification-header-welcome": "{{GENDER:$2|Välkommen}} till {{SITENAME}}, $1! Vi är glada över att {{GENDER:$2|du är}} här.",
+ "notification-header-mention-summary": "$1 {{GENDER:$2|nämnde}} {{GENDER:$3|dig}} i en redigeringssammanfattning på <strong>$4</strong>.",
"notification-welcome-linktext": "Välkommen",
"notification-header-thank-you-1-edit": "{{GENDER:$2|Du}} gjorde precis {{GENDER:$2|din}} första redigering; {{GENDER:$2|tack}} och välkommen!",
"notification-header-thank-you-10-edit": "{{GENDER:$2|Du}} gjorde precis {{GENDER:$2|din}} tionde redigering; {{GENDER:$2|tack}} och fortsätt i samma takt!",
diff --git a/Echo/i18n/ta.json b/Echo/i18n/ta.json
index 48cfdbe3..480f4bef 100644
--- a/Echo/i18n/ta.json
+++ b/Echo/i18n/ta.json
@@ -15,7 +15,6 @@
"prefs-emailsettings": "மின்னஞ்சல் விருப்பத்தேர்வுகள்",
"prefs-displaynotifications": "விருப்பத்தேர்வுகளைக் காட்டு",
"prefs-echosubscriptions": "இந்த நிகழ்வுகளை பற்றி எனக்கு அறிவி",
- "prefs-newmessageindicator": "புதிய செய்தி குறிகாட்டி",
"echo-pref-send-me": "எனக்கு இவற்றை அனுப்பவும்:",
"echo-pref-send-to": "இம்மின்னஞ்சல் முகவரிக்கு அனுப்பவும்:",
"echo-pref-email-format": "மின்னஞ்சல் வடிவமைப்பு:",
@@ -27,7 +26,6 @@
"echo-pref-email-frequency-weekly": "அறிவிப்புகளின் இவ்வார சுறுக்கம்",
"echo-pref-email-format-html": "HTML",
"echo-pref-email-format-plain-text": "வெற்று உரை",
- "echo-pref-new-message-indicator": "என் கருவிப்பட்டியில் பேச்சு பக்க செய்திகளின் குறிகாட்டியினை காட்டு",
"echo-learn-more": "மேலும் அறிய",
"echo-new-messages": "உங்களுக்கு புதிய செய்திகள் உள்ளன",
"echo-category-title-edit-user-talk": "பேச்சுப் பக்க {{PLURAL:$1|செய்தி|செய்திகள்}}",
diff --git a/Echo/i18n/tay.json b/Echo/i18n/tay.json
index 8eff8d61..3f246e19 100644
--- a/Echo/i18n/tay.json
+++ b/Echo/i18n/tay.json
@@ -8,23 +8,41 @@
},
"prefs-echo": "Ssbaq",
"prefs-emailsettings": "Zyusyo na e-meyo’ bruwiy",
- "prefs-newmessageindicator": "Kaikay na ppsbaq sa giqas na zayzyuwaw",
+ "prefs-displaynotifications": "Pkt’aniy bbzyagan",
+ "echo-pref-send-me": "Stwaniy kung:",
+ "echo-pref-send-to": "Stwaniy squw:",
"echo-pref-web": "Wangye’",
"echo-pref-email-frequency-daily": "Sbbaq ’pinkr’tung kkayal krayrax",
"echo-pref-email-frequency-weekly": "Sbbaq ’pinkr’tung kkayal qutux qutux rihay",
+ "echo-pref-email-format-html": "HTML",
"echo-pref-email-format-plain-text": "Biru’ mlmlux",
"echo-pref-beta-feature-cross-wiki-message": "Twangiy kinlawkah na smbbaq",
+ "echo-learn-more": "Pzyux na’ musa’ baqun",
+ "echo-log": "Pinkaykita’ sa kwara’ squliq na binrwan",
+ "echo-new-messages": "Kya giqas na pintkaykay su’",
"notifications": "Ssbaq",
"tooltip-pt-notifications-alert": "{{GENDER:|Rwa su’}}gmrhuw kmayal",
"echo-displaynotificationsconfiguration-notifications-by-category-header": "Sbbaq sa lalu’ kwara’ gluw na mmtnaq",
+ "echo-displaynotificationsconfiguration-sorting-by-section-header": "Smbbaq sa wal niya’ ptbcyun smlalu’",
+ "echo-displaynotificationsconfiguration-enabled-default-header": "Sni’ sa pnaynama’ ggyah na",
+ "echo-displaynotificationsconfiguration-enabled-default-existing-users-legend": "Cyux myzyuwaw misuw",
+ "echo-displaynotificationsconfiguration-enabled-default-new-users-legend": "Giqas na pptzyuwaw",
"echo-specialpage": "Ssbaq",
"echo-specialpage-markasread-invalid-id": "Ungat zyuwaw nquw sinbbaq na ID qaniy",
+ "echo-specialpage-pagefilters-title": "Pinhotung naha’ sa misuw qaniy",
+ "echo-more-info": "Pzyux na’ ggalan kinbbaq na zayzyuwaw",
+ "echo-feedback": "Iwan snyuk sa bniq naha’ kay’",
"echo-notification-placeholder": "ungat ana nanu’ sinbbaq.",
"echo-notification-markasread": "Sinbbaq sa wayal lpgun",
"echo-notification-markasunread": "Sinbbaq sa ini’ lpgiy na’",
"echo-notification-markasread-tooltip": "Sinbbaq sa wayal lpgun",
+ "echo-notification-more-options-tooltip": "Pzyux na’ na bbzyagan",
"notification-link-text-expand-all": "Psglabang",
"notification-link-text-collapse-all": "Qmuzyup",
+ "notification-link-text-view-message": "’nblaq mita’ pintkaykay’",
+ "notification-link-text-view-page": "’nblaq mita’ zzngazyan",
+ "notification-link-text-view-edit": "’nblaq mita’ sinr’zyut miru’",
+ "notification-link-article-reminder": "’nblaq mita’ zzngazyan",
"notification-timestamp-today": "Sawni’",
"notification-timestamp-yesterday": "Shira’",
"notification-inbox-filter-read": "Lpgun",
@@ -32,6 +50,7 @@
"notification-inbox-filter-all": "Kwara’",
"echo-notification-alert-text-only": "Kmayal",
"echo-notification-notice-text-only": "Ssbaq na kwara’ na",
+ "echo-overlay-link": "Kwara’ sinbbaq",
"echo-date-today": "Sawni’",
"echo-date-yesterday": "Shira’"
}
diff --git a/Echo/i18n/te.json b/Echo/i18n/te.json
index ac4eae68..4db3caae 100644
--- a/Echo/i18n/te.json
+++ b/Echo/i18n/te.json
@@ -14,7 +14,6 @@
"prefs-emailsettings": "ఈ-మెయిల్ ఐచ్ఛికాలు",
"prefs-displaynotifications": "ప్రదర్శన ఐచ్ఛికాలు",
"prefs-echosubscriptions": "ఈ సంఘటనల గురించి నాకు తెలియచేయి",
- "prefs-newmessageindicator": "కొత్త సందేశపు సూచిక",
"echo-pref-send-me": "నాకు పంపు:",
"echo-pref-send-to": "పంపించు:",
"echo-pref-email-format": "ఇమెయిల్ ఫార్మాట్:",
@@ -26,7 +25,6 @@
"echo-pref-email-frequency-weekly": "వారం మొత్తం మీద సూచనల సారాంశం",
"echo-pref-email-format-html": "హెచ్.టి.ఎం.ఎల్",
"echo-pref-email-format-plain-text": "సాదా పాఠ్యం",
- "echo-pref-new-message-indicator": "నా టూల్‌బార్‌లో చర్చా పేజీ సందేశ-సూచికను చూపించు",
"echo-learn-more": "మరింత తెలుసుకోండి",
"echo-new-messages": "మీకు కొత్త సందేశాలు ఉన్నాయి",
"echo-category-title-edit-user-talk": "చర్చా పేజి {{PLURAL:$1|సందేశం|సందేశాలు}}",
@@ -49,10 +47,13 @@
"echo-feedback": "ప్రతిస్పందన",
"notification-link-text-view-message": "సందేశాన్ని చూడు",
"notification-link-text-view-mention": "పేరెన్నికను చూడు",
- "notification-link-text-view-changes": "మార్పులు చూడు",
+ "notification-link-text-view-changes": "మార్పులను {{GENDER:$1|చూడండి}}",
"notification-link-text-view-page": "పేజీని చూడు",
+ "notification-header-page-linked": "<strong>$4</strong> నుండి <strong>$3</strong> కు లింకు ఏర్పరచాం.",
+ "notification-bundle-header-page-linked": "{{PLURAL:$5||$5 పేజీల|100=99+ పేజీల}} నుండి <strong>$3</strong> కు లింకులు ఏర్పరచాం.",
"notification-header-mention-failure-user-unknown": "$3 గురించిన {{GENDER:$2|మీ}} ప్రస్తావనను, ఆ వాడుకరి కనబడనందువలన పంపించలేదు.",
"notification-header-mention-failure-user-anonymous": "$3 గురించిన {{GENDER:$2|మీ}} ప్రస్తావనను, వారు అజ్ఞాతంగా ఉన్నందున పంపించలేకపోయాం.",
+ "notification-compact-header-mention-failure-user-unknown": "<strong>వాడుకరిపేరు ఉనికిలో లేదు:</strong> $1",
"notification-header-mention-success": "$3 గురించిన {{GENDER:$2|మీ}} ప్రస్తావనను పంపించాం.",
"notification-welcome-linktext": "స్వాగతం",
"notification-link-text-view-edit": "మార్పును చూడు",
diff --git a/Echo/i18n/th.json b/Echo/i18n/th.json
index 280b7975..d6f8721f 100644
--- a/Echo/i18n/th.json
+++ b/Echo/i18n/th.json
@@ -5,103 +5,194 @@
"Supasate",
"Horus",
"Bluegram",
- "Ans"
+ "Ans",
+ "Aefgh39622",
+ "Octahedron80"
]
},
- "echo-desc": "ระบบสำหรับแจ้งผู้ใช้เกี่ยวกับเหตุการณ์และสาร",
- "prefs-echo": "การแจ้งเตือน",
+ "echo-desc": "ระบบสำหรับแจ้งความผู้ใช้เกี่ยวกับเหตุการณ์และสาร",
+ "prefs-echo": "การแจ้งความ",
"prefs-emailsettings": "ตัวเลือกอีเมล",
"prefs-displaynotifications": "ตัวเลือกการแสดงผล",
- "prefs-echosubscriptions": "แจ้งให้ฉันทราบเกี่ยวกับเหตุการณ์เหล่านี้",
- "prefs-echocrosswiki": "การแจ้งเตือนข้ามวิกิ",
- "prefs-newmessageindicator": "ตัวบ่งชี้ข้อความใหม่",
+ "prefs-echosubscriptions": "แจ้งความให้ฉันทราบเกี่ยวกับเหตุการณ์เหล่านี้",
+ "prefs-echocrosswiki": "การแจ้งความข้ามวิกิ",
+ "prefs-blocknotificationslist": "ทำให้ผู้ใช้เงียบ",
"echo-pref-send-me": "ส่งหาฉัน:",
"echo-pref-send-to": "ส่งถึง:",
"echo-pref-email-format": "รูปแบบอีเมล:",
"echo-pref-web": "เว็บ",
"echo-pref-email": "อีเมล",
- "echo-pref-email-frequency-never": "ไม่ส่งการแจ้งเตือนทางอีเมลหาฉัน",
- "echo-pref-email-frequency-immediately": "การแจ้งเตือนแบบแยกสำหรับทุกเหตุการณ์ทันทีที่เกิดขึ้น",
- "echo-pref-email-frequency-daily": "การแจ้งเตือนแบบสรุปรายวัน",
- "echo-pref-email-frequency-weekly": "การแจ้งเตือนแบบสรุปรายสัปดาห์",
- "echo-pref-email-format-html": "HTML",
+ "echo-pref-email-frequency-never": "ไม่ส่งการแจ้งความทางอีเมลหาฉัน",
+ "echo-pref-email-frequency-immediately": "การแจ้งความแบบแยกสำหรับทุกเหตุการณ์ทันทีที่เกิดขึ้น",
+ "echo-pref-email-frequency-daily": "การแจ้งความแบบสรุปรายวัน",
+ "echo-pref-email-frequency-weekly": "การแจ้งความแบบสรุปรายสัปดาห์",
+ "echo-pref-email-format-html": "เอชทีเอ็มแอล",
"echo-pref-email-format-plain-text": "ข้อความล้วน",
- "echo-pref-cross-wiki-notifications": "แสดงการแจ้งเตือนจากวิกิอื่นๆ",
- "echo-pref-new-message-indicator": "แสดงตัวบ่งชี้ข้อความในหน้าพูดคุยในแถบเครื่องมือของฉัน",
+ "echo-pref-cross-wiki-notifications": "แสดงการแจ้งความจากวิกิอื่น",
+ "echo-pref-notifications-blacklist": "ไม่แสดงการแจ้งความจากผู้ใช้เหล่านี้\n([[mw:Special:MyLanguage/Help:Notifications#mute|เรียนรู้เพิ่ม]])",
+ "echo-pref-beta-feature-cross-wiki-message": "การแจ้งความแบบเพิ่มสมรรถนะ",
+ "echo-pref-beta-feature-cross-wiki-description": "ดูและจัดระเบียบการแจ้งความให้ง่ายขึ้น รวมการแจ้งความข้ามวิกิ ซึ่งอนุญาตให้คุณเห็นสารจากวิกิอื่นได้ (คุณต้องเปิดใช้งานคุณลักษณะ beta ในวิกินั้นก่อนเพื่อรับการแจ้งความข้ามวิกิในวิกินั้น ๆ)",
"echo-learn-more": "เรียนรู้เพิ่มเติม",
- "echo-new-messages": "คุณมีข้อความใหม่",
- "echo-category-title-edit-user-talk": "สารหน้าพูดคุย",
- "echo-category-title-article-linked": "การโยงหน้า",
- "echo-category-title-reverted": "การย้อนการแก้ไข",
+ "echo-log": "ปูมสาธารณะ",
+ "echo-new-messages": "คุณมีสารใหม่",
+ "echo-category-title-edit-user-talk": "{{PLURAL:$1|สาร}}หน้าคุย",
+ "echo-category-title-article-linked": "{{PLURAL:$1|การโยง}}หน้า",
+ "echo-category-title-reverted": "{{PLURAL:$1|การย้อน}}การแก้ไข",
"echo-category-title-mention": "{{PLURAL:$1|การกล่าวถึง}}",
"echo-category-title-mention-failure": "{{PLURAL:$1|การกล่าวถึง}}ที่ไม่ประสบผลสำเร็จ",
"echo-category-title-mention-success": "{{PLURAL:$1|การกล่าวถึง}}ที่ประสบผลสำเร็จ",
- "echo-category-title-other": "อื่น ๆ",
+ "echo-category-title-other": "{{PLURAL:$1|อื่น ๆ}}",
"echo-category-title-system": "{{PLURAL:$1|ระบบ}}",
- "echo-category-title-user-rights": "การเปลี่ยนแปลงสิทธิผู้ใช้",
- "echo-category-title-emailuser": "อีเมลจากผู้ใช้อื่น",
+ "echo-category-title-user-rights": "{{PLURAL:$1|การเปลี่ยนแปลงสิทธิผู้ใช้}}",
+ "echo-category-title-emailuser": "{{PLURAL:$1|อีเมลจากผู้ใช้อื่น}}",
"echo-category-title-article-reminder": "{{PLURAL:$1|ตัวแจ้งเตือน}}หน้า",
- "echo-pref-tooltip-edit-user-talk": "แจ้งเตือนเมื่อมีคนโพสต์ข้อความหรือตอบในหน้าพูดคุยของฉัน",
- "echo-pref-tooltip-article-linked": "แจ้งเตือนฉันเมื่อมีคนโยงจากหน้าบทความถึงหน้าที่ฉันสร้าง",
- "echo-pref-tooltip-reverted": "แจ้งเตือนฉันเมื่อมีคนย้อนการแก้ไขของฉัน โดยใช้เครื่องมือทำกลับหรือย้อนกลับการแก้ไข",
- "echo-pref-tooltip-mention": "แจ้งเตือนฉันเมื่อมีผู้โยงหาหน้าผู้ใช้ของฉัน",
- "echo-pref-tooltip-user-rights": "แจ้งเตือนฉันเมื่อมีผู้เปลี่ยนแปลงสิทธิผู้ใช้ของฉัน",
- "echo-pref-tooltip-emailuser": "แจ้งฉันเมื่อมีผู้ส่งอีเมลหาฉัน",
- "echo-error-no-formatter": "ไม่มีการกำหนดรูปแบบสำหรับการแจ้งเตือน",
- "notifications": "การแจ้งเตือน",
- "tooltip-pt-notifications-alert": "การแจ้งเตือนของคุณ",
- "echo-specialpage": "การแจ้งเตือน",
- "echo-anon": "เพื่อรับการแจ้งเตือน [$1 สร้างบัญชี] หรือ [$2 ล็อกอิน]",
- "echo-none": "คุณไม่มีการแจ้งเตือน",
- "echo-more-info": "ข้อมูลเพิ่มเติม",
+ "echo-pref-tooltip-edit-user-talk": "แจ้งเมื่อมีคนโพสต์สารหรือตอบในหน้าคุยของฉัน",
+ "echo-pref-tooltip-article-linked": "แจ้งเมื่อมีคนโยงจากหน้าบทความถึงหน้าที่ฉันสร้าง",
+ "echo-pref-tooltip-reverted": "แจ้งเมื่อมีผู้ย้อนการแก้ไขของฉัน โดยใช้เครื่องมือทำกลับหรือย้อนรวดเดียว",
+ "echo-pref-tooltip-mention": "แจ้งเมื่อมีผู้โยงหาหน้าผู้ใช้ของฉัน",
+ "echo-pref-tooltip-mention-failure": "แจ้งเมื่อฉันไม่สามารถส่งการกล่าวถึงบางคนได้",
+ "echo-pref-tooltip-mention-success": "แจ้งเมื่อฉันส่งการกล่าวถึงบางคน",
+ "echo-pref-tooltip-user-rights": "แจ้งเมื่อมีผู้เปลี่ยนแปลงสิทธิผู้ใช้ของฉัน",
+ "echo-pref-tooltip-emailuser": "แจ้งเมื่อมีผู้ส่งอีเมลหาฉัน",
+ "echo-pref-tooltip-article-reminder": "แจ้งเกี่ยวกับหน้านี้เมื่อฉันถาม",
+ "echo-error-no-formatter": "ไม่มีการกำหนดรูปแบบสำหรับการแจ้งความ",
+ "notifications": "การแจ้งความ",
+ "tooltip-pt-notifications-alert": "การเตือนของคุณ",
+ "tooltip-pt-notifications-notice": "ประกาศของคุณ",
+ "echo-displaynotificationsconfiguration": "แสดงโครงแบบแจ้งความ",
+ "echo-displaynotificationsconfiguration-summary": "นี่เป็นภาพรวมว่าจัดโครงแบบการแจ้งความในวิกินี้อย่างไร",
+ "echo-displaynotificationsconfiguration-notifications-by-category-header": "การแจ้งความแบ่งตามหมวดหมู่",
+ "echo-displaynotificationsconfiguration-sorting-by-section-header": "จำแนกประเภท",
+ "echo-displaynotificationsconfiguration-sorting-by-section-legend": "ส่วนใดที่จำแนกประเภทการแจ้งความเข้า",
+ "echo-displaynotificationsconfiguration-available-notification-methods-header": "วิธีแจ้งความที่อนุญาต",
+ "echo-displaynotificationsconfiguration-available-notification-methods-by-category-legend": "วิธีแจ้งความที่รองรับสำหรับแต่ละหมวดหมู่",
+ "echo-displaynotificationsconfiguration-enabled-default-header": "เปิดใช้งานโดยปริยาย",
+ "echo-displaynotificationsconfiguration-enabled-default-existing-users-legend": "ผู้ใช้ที่มีอยู่",
+ "echo-displaynotificationsconfiguration-enabled-default-new-users-legend": "ผู้ใช้ใหม่",
+ "echo-displaynotificationsconfiguration-mandatory-notification-methods-header": "วิธีแจ้งความที่กำหนด",
+ "echo-displaynotificationsconfiguration-mandatory-notification-methods-by-category-legend": "วิธีแจ้งความใดที่บังคับสำหรับแต่ละหมวดหมู่",
+ "echo-specialpage": "การแจ้งความ",
+ "echo-specialpage-section-markread": "ทำเครื่องหมายกลุ่มว่าอ่านแล้ว",
+ "echo-specialpage-markasread": "การแจ้งความ: ทำเครื่องหมายว่าอ่านแล้ว",
+ "echo-specialpage-pagination-numnotifications": "{{PLURAL:$1|การแจ้งเตือน}}ใหม่ $1 รายการ",
+ "echo-specialpage-pagefilters-title": "กิจกรรมล่าสุด",
+ "echo-specialpage-pagefilters-subtitle": "หน้าที่มีการแจ้งเตือนที่ยังไม่ได้อ่าน",
+ "notificationsmarkread-legend": "ทำเครื่องหมายการแจ้งความว่าอ่านแล้ว",
+ "echo-anon": "เพื่อรับการแจ้งความ [$1 สร้างบัญชี] หรือ [$2 ล็อกอิน]",
+ "echo-none": "คุณไม่มีการแจ้งความ",
+ "echo-more-info": "สารนิเทศเพิ่มเติม",
"echo-feedback": "ผลป้อนกลับ",
- "echo-api-failure": "ไม่สามารถดึงการแจ้ง กรุณาลองอีกครั้ง (ข้อผิดพลาด $1)",
- "echo-notification-placeholder": "ไม่มีการแจ้งเตือน",
+ "echo-api-failure": "ไม่สามารถดึงการแจ้งความ",
+ "echo-notification-placeholder": "ไม่มีการแจ้งความ",
+ "echo-notification-placeholder-filters": "ไม่มีการแจ้งความตรงตามเกณฑ์เหล่านี้",
"echo-notification-loginrequired": "คุณต้องล็อกอินเพื่อดูการแจ้งของคุณ",
"echo-notification-popup-loginrequired": "กรุณาล็อกอินเพื่อดูการแจ้งของคุณ",
- "notification-link-text-expand-all": "ขยายทั้งหมด",
- "notification-link-text-expand-alert-count": "ขยาย $1 การเตือน",
- "notification-link-text-expand-all-count": "ขยาย $1 การแจ้ง",
- "notification-link-text-collapse-all": "ยุบทั้งหมด",
- "notification-link-text-view-message": "ดูข้อความ",
+ "echo-notification-markasread": "ทำเครื่องหมายว่าอ่านแล้ว",
+ "echo-notification-markasunread": "ทำเครื่องหมายว่ายังไม่ได้อ่าน",
+ "echo-notification-markasread-tooltip": "ทำเครื่องหมายว่าอ่านแล้ว",
+ "echo-notification-more-options-tooltip": "ตัวเลือกเพิ่ม",
+ "notification-dynamic-actions-unwatch": "หยุดเฝ้าดูกิจกรรมใหม่ทาง \"$1\"",
+ "notification-dynamic-actions-unwatch-confirmation": "คุณเลิกเฝ้าดูหน้า \"$1\"",
+ "notification-dynamic-actions-unwatch-confirmation-description": "คุณสามารถดู[$2 หน้านี้]ได้ทุกเมื่อ",
+ "notification-dynamic-actions-watch": "ติดตามกิจกรรมใหม่ทาง \"$1\"",
+ "notification-dynamic-actions-watch-confirmation": "คุณกำลังเฝ้าดูหน้า \"$1\"",
+ "notification-dynamic-actions-watch-confirmation-description": "คุณสามารถเลิกเฝ้าดู[$2 หน้านี้]ได้ทุกเมื่อ",
+ "notification-link-text-expand-all": "ขยาย",
+ "notification-link-text-expand-alert-count": "ดู $1 การเตือน",
+ "notification-link-text-expand-notice-count": "ดูประกาศ",
+ "notification-link-text-expand-all-count": "ดู $1 การแจ้งความ",
+ "notification-link-text-collapse-all": "ยุบ",
+ "notification-link-text-view-message": "ดูสาร",
"notification-link-text-view-mention": "ดูการกล่าวถึง",
- "notification-link-text-view-changes": "ดูความเปลี่ยนแปลง",
+ "notification-link-text-view-mention-failure": "ดูการกล่าวถึง",
+ "notification-link-text-view-changes": "{{GENDER:$1|}}ดูการเปลี่ยนแปลง",
"notification-link-text-view-page": "ดูหน้า",
- "notification-header-edit-user-talk": "$1 ส่งสารบนหน้าพูดคุยของคุณ",
- "notification-header-edit-user-talk-with-section": "$1 ส่งสารบนหน้าพูดคุยของคุณใน \"$4\"",
- "notification-header-page-linked": "$3 ถูกโยงจาก $4",
- "notification-bundle-header-page-linked": "$3 ถูกโยงจาก $4 และหน้าอื่นอีก $5 หน้า",
- "notification-link-text-what-links-here": "ดูการโยงมาหน้านี้ทั้งหมด",
- "notification-header-welcome": "ยินดีต้อนรับสู่{{SITENAME}} $1 เรายินดีที่คุณอยู่ที่นี่",
+ "notification-header-edit-user-talk": "$1 {{GENDER:$2|}}ส่งสารบน<strong>หน้าคุยของ{{GENDER:$3|}}คุณ</strong>",
+ "notification-header-edit-user-talk-with-section": "$1 {{GENDER:$2|}}ส่งสารบน<strong>หน้าพูดคุยของ{{GENDER:$3|}}คุณ</strong>ใน \"<strong>$4</strong>\"",
+ "notification-compact-header-edit-user-talk": "$1 {{GENDER:$2|}}ส่งสารถึง{{GENDER:$3|}}คุณ",
+ "notification-compact-header-edit-user-talk-with-section": "$1 {{GENDER:$2|}}ส่งสารถึง{{GENDER:$3|}}คุณใน \"<strong>$4</strong>\"",
+ "notification-header-page-linked": "มีการสร้างลิงก์จาก <strong>$4</strong> ไป <strong>$3</strong>",
+ "notification-compact-header-page-linked": "ลิงก์จาก <strong>$1</strong>",
+ "notification-bundle-header-page-linked": "มีการลิงก์จาก{{PLURAL:$5||$5 หน้า|100=99+ หน้า}}มายัง <strong>$3</strong>",
+ "notification-header-article-reminder": "หน้าที่คุณขอให้เตือนอยู่ที่ <strong>$3</strong>",
+ "notification-link-text-what-links-here": "การโยงมาหน้านี้ทั้งหมด",
+ "notification-header-mention-other": "$1 กล่าวถึงคุณในหน้า <strong>$4</strong> ส่วน \"<strong>$5</strong>\"",
+ "notification-header-mention-other-nosection": "$1 กล่าวถึงคุณในหน้า <strong>$4</strong>",
+ "notification-header-mention-user-talkpage-v2": "$1 กล่าวถึงคุณในหน้า<strong>คุยกับผู้ใช้ของ $4</strong> ส่วน \"<strong>$6</strong>\"",
+ "notification-header-mention-user-talkpage-nosection": "$1 กล่าวถึงคุณในหน้า<strong>คุยกับผู้ใช้ของ $4</strong>",
+ "notification-header-mention-agent-talkpage": "$1 กล่าวถึงคุณในหน้า<strong>คุยกับผู้ใช้ของ{{GENDER:$2|เขา|เธอ|พวกเขา}}</strong> ส่วน\"<strong>$4</strong>\"",
+ "notification-header-mention-agent-talkpage-nosection": "$1 กล่าวถึงคุณในหน้า<strong>คุยกับผู้ใช้ของ{{GENDER:$2|เขา|เธอ|พวกเขา}}</strong>",
+ "notification-header-mention-article-talkpage": "$1 กล่าวถึงคุณในหน้าคุย <strong>$4</strong> ส่วน \"<strong>$5</strong>\"",
+ "notification-header-mention-article-talkpage-nosection": "$1 กล่าวถึงคุณในหน้าคุย <strong>$4</strong>",
+ "notification-header-mention-failure-user-unknown": "ไม่ส่งการกล่าวถึง <strong>$3</strong> ของคุณเพราะหาผู้ใช้ไม่พบ",
+ "notification-header-mention-failure-user-anonymous": "ไม่ส่งการกล่าวถึง <strong>$3</strong> ของคุณเพราะผู้ใช้นั้นเป็นผู้ใช้นิรนาม",
+ "notification-header-mention-failure-too-many": "คุณพยายามกล่าวถึงผู้ใช้มากกว่า $3 คน จะไม่ส่งการกล่าวถึงทั้งหมดที่เกินขีดจำกัดนั้น",
+ "notification-header-mention-failure-bundle": "ส่ง $3 การกล่าวถึงของคุณในหน้าคุย <strong>$4</strong> ไม่ได้",
+ "notification-compact-header-mention-failure-user-unknown": "<strong>ไม่มีชื่อผู้ใช้:</strong> $1",
+ "notification-compact-header-mention-failure-user-anonymous": "<strong>ไม่สามารถกล่าวถึงไอพี:</strong> $1",
+ "notification-header-mention-success": "ส่งการกล่าวถึง <strong>$3</strong> ของคุณแล้ว",
+ "notification-header-mention-success-bundle": "ส่ง $3 การกล่าวถึงของคุณในหน้าคุย <strong>$4</strong> แล้ว",
+ "notification-compact-header-mention-success": "<strong>คุณกล่าวถึง:</strong> $3",
+ "notification-header-mention-status-bundle": "$3 การแจ้งความเกี่ยวกับการกล่าวถึงของคุณทางหน้าคุย <strong>$4</strong>: $5 ไม่ได้ส่ง, $6 ส่งแล้ว",
+ "notification-header-user-rights-add-only": "มีการเปลี่ยนสิทธิผู้ใช้ของคุณ คุณถูกเพิ่มเข้า: $2",
+ "notification-header-user-rights-remove-only": "มีการเปลี่ยนสิทธิผู้ใช้ของคุณ คุณเลิกเป็นสมาชิกของ: $2",
+ "notification-header-user-rights-add-and-remove": "มีการเปลี่ยนสิทธิผู้ใช้ของคุณ คุณถูกเพิ่มเข้า: $2 คุณเลิกเป็นสมาชิกของ: $4.",
+ "notification-header-welcome": "ยินดีต้อนรับสู่{{SITENAME}} $1! เรายินดีที่คุณอยู่ที่นี่",
+ "notification-header-mention-summary": "$1 กล่าวถึงคุณในความย่อการแก้ไขใน <strong>$4</strong>",
"notification-welcome-linktext": "ยินดีต้อนรับ",
+ "notification-header-thank-you-1-edit": "คุณเพิ่งแก้ไขครั้งแรก; ขอบคุณและยินดีต้อนรับ!",
+ "notification-header-thank-you-10-edit": "คุณเพิ่งแก้ไขครบ 10 ครั้ง ขอบคุณและพยายามทำต่อ!",
+ "notification-header-thank-you-100-edit": "คุณเพิ่งแก้ไขครบ 100 ครั้ง ขอบคุณมาก ๆ!",
+ "notification-header-thank-you-1000-edit": "คุณเพิ่งแก้ไขครบ 1000 ครั้ง ขอบคุณที่เป็นผู้เข้ามีส่วนร่วมที่ยอดเยี่ยม!",
+ "notification-header-thank-you-10000-edit": "คุณเพิ่งแก้ไขครบ 10,000 ครั้ง ขอบคุณมาก ๆ!",
+ "notification-header-thank-you-100000-edit": "คุณเพิ่งแก้ไขครบ 100,000 ครั้ง ขอบคุณสำหรับการเข้ามีส่วนร่วมที่มหัศจรรย์!",
+ "notification-header-thank-you-1000000-edit": "คุณเพิ่งแก้ไขครบ 1,000,000 ครั้ง ขอบคุณสำหรับการเข้ามีส่วนร่วมที่มหัศจรรย์!",
+ "notification-link-thank-you-edit": "การแก้ไขของคุณ",
"notification-link-text-view-edit": "ดูการแก้ไข",
- "notification-header-reverted": "$1 ย้อนการแก้ไขใน $3 ของคุณ",
+ "notification-link-article-reminder": "ดูหน้า",
+ "notification-header-reverted": "การแก้ไขใน<strong>$3</strong>ของคุณถูกย้อน",
"notification-header-emailuser": "$1 ส่งอีเมลถึงคุณ",
"notification-edit-talk-page-email-subject2": "$1 ส่งข้อความถึงคุณบน {{SITENAME}}",
- "notification-edit-talk-page-email-batch-body-with-section": "$1 ส่งข้อความบนหน้าคุยกับผู้ใช้ของคุณใน \"$2\":",
+ "notification-edit-talk-page-email-batch-body-with-section": "$1 ส่งสารบนหน้าคุยกับผู้ใช้ของคุณใน \"$2\":",
"notification-page-linked-email-subject": "หน้าที่คุณสร้างถูกโยงบน {{SITENAME}}",
"notification-reverted-email-subject2": "การแก้ไขของคุณถูกย้อนใน {{SITENAME}}",
"notification-mention-email-subject": "$1 กล่าวถึงคุณบน {{SITENAME}}",
"notification-user-rights-email-subject": "สิทธิผู้ใช้ของคุณถูกเปลี่ยนบน {{SITENAME}}",
+ "notification-timestamp-ago-seconds": "{{PLURAL:$1|$1 วินาที}}",
+ "notification-timestamp-ago-minutes": "{{PLURAL:$1|$1 นาที}}",
+ "notification-timestamp-ago-hours": "{{PLURAL:$1|$1 ชม.}}",
+ "notification-timestamp-ago-days": "{{PLURAL:$1|$1 วัน}}",
+ "notification-timestamp-ago-months": "{{PLURAL:$1|$1 เดือน}}",
+ "notification-timestamp-ago-years": "{{PLURAL:$1|$1 ปี}}",
"notification-timestamp-today": "วันนี้",
"notification-timestamp-yesterday": "เมื่อวานนี้",
"notification-inbox-filter-read": "อ่านแล้ว",
"notification-inbox-filter-unread": "ยังไม่ได้อ่าน",
"notification-inbox-filter-all": "ทั้งหมด",
"echo-email-body-default": "คุณมีการแจ้งเตือนใหม่ที่ {{SITENAME}}:\n\n$1",
+ "echo-email-footer-default-html": "ในการควบคุมว่าจะให้เราส่งอีเมลใดถึงคุณ <a href=\"$2\" style=\"text-decoration:none; color: #3868B0;\">ให้ตรวจสอบการตั้งค่าของคุณ</a><br />\n$1",
"echo-email-footer-default": "$2\n\nในการควบคุมว่าจะให้เราส่งอีเมลใดถึงคุณ ให้ตรวจสอบการตั้งค่าของคุณ:\n{{canonicalurl:{{#special:Preferences}}#mw-prefsection-echo}}\n\n$1",
+ "echo-email-html-footer-preference-link-text": "ตรวจสอบการตั้งค่าของคุณ",
"echo-notification-alert": "{{PLURAL:$1|การเตือน ($1)|100=การเตือน (99+)}}",
+ "echo-notification-notice": "{{PLURAL:$1|ประกาศ ($1)|ประกาศ ($1)|100=ประกาศ (99+)}}",
"echo-notification-alert-text-only": "การเตือน",
- "echo-overlay-link": "การแจ้งเตือนทั้งหมด",
- "echo-overlay-title": "<b>การแจ้งเตือน</b>",
- "echo-overlay-title-overflow": "<b>{{PLURAL:$1|การแจ้งเตือน}}</b> (กำลังแสดงที่ยังไม่ได้อ่าน $1 จาก $2 การแจ้งเตือน)",
+ "echo-notification-notice-text-only": "ประกาศ",
+ "echo-overlay-link": "การแจ้งความทั้งหมด",
+ "echo-overlay-title": "<b>การแจ้งความ</b>",
+ "echo-overlay-title-overflow": "<b>{{PLURAL:$1|การแจ้งความ}}</b> (กำลังแสดงที่ยังไม่ได้อ่าน $1 จาก $2 การแจ้งความ)",
"echo-mark-all-as-read": "ทำเครื่องหมายทั้งหมดว่าอ่านแล้ว",
+ "echo-mark-all-as-read-confirmation": "ทำเครื่องหมาย $1 การแจ้งความว่าอ่านแล้ว",
+ "echo-mark-wiki-as-read": "ทำเครื่องหมายทั้งหมดว่าอ่านแล้วในวิกิที่เลือก: $1",
"echo-date-today": "วันนี้",
"echo-date-yesterday": "เมื่อวานนี้",
"echo-load-more-error": "เกิดข้อผิดพลาดขณะไปนำผลลัพธ์มาเพิ่ม",
- "echo-email-batch-subject-daily": "คุณมีการแจ้งใหม่ที่{{SITENAME}}",
- "echo-email-batch-subject-weekly": "คุณมีการแจ้งใหม่ที่{{SITENAME}}สัปดาห์นี้",
+ "notification-bundle-header-edit-user-talk-v2": "{{PLURAL:$1|$1 สารใหม่|$1 สารใหม่|100=99+ สารใหม่}}ทาง<strong>หน้าคุยของคุณ</strong>",
+ "echo-email-batch-subject-daily": "คุณมีการแจ้งความใหม่ที่{{SITENAME}}",
+ "echo-email-batch-subject-weekly": "คุณมีการแจ้งความใหม่ที่{{SITENAME}}สัปดาห์นี้",
"echo-email-batch-body-intro-daily": "สวัสดี $1\nนี่คือสรุปกิจกรรมของวันนี้ใน{{SITENAME}}สำหรับคุณ",
"echo-email-batch-body-intro-weekly": "สวัสดี $1\nนี่คือสรุปกิจกรรมของสัปดาห์นี้ใน{{SITENAME}}สำหรับคุณ",
- "echo-email-batch-link-text-view-all-notifications": "ดูการแจ้งเตือนทั้งหมด"
+ "echo-email-batch-link-text-view-all-notifications": "ดูการแจ้งความทั้งหมด",
+ "notification-header-foreign-alert": "การเตือนเพิ่มจาก $5 วิกิอื่น",
+ "notification-header-foreign-notice": "ประกาศเพิ่มจาก $5 วิกิอื่น",
+ "notification-header-foreign-all": "การแจ้งความเพิ่มจาก $5 วิกิอื่น"
}
diff --git a/Echo/i18n/tl.json b/Echo/i18n/tl.json
index 8d948ce4..ff387d6e 100644
--- a/Echo/i18n/tl.json
+++ b/Echo/i18n/tl.json
@@ -14,7 +14,6 @@
"prefs-emailsettings": "Mga kagustuhan para sa e-liham",
"prefs-displaynotifications": "Mga kagustuhan sa pagpapakita",
"prefs-echosubscriptions": "Ipabatid ako tungkol sa mga pangyayaring ito",
- "prefs-newmessageindicator": "Indikador ng mga bagong mensahe",
"echo-pref-send-me": "Ipadala sa akin:",
"echo-pref-send-to": "Ipadala kay:",
"echo-pref-email-format": "Kaanyuan ng e-liham:",
@@ -26,7 +25,6 @@
"echo-pref-email-frequency-weekly": "Isang lingguhang buod ng mga pabatid",
"echo-pref-email-format-html": "HTML",
"echo-pref-email-format-plain-text": "Purong teksto",
- "echo-pref-new-message-indicator": "Ipakita ang indikador ng mga mensaheng pampahinang usapan sa aking toolbar",
"echo-learn-more": "Matuto pa",
"echo-new-messages": "Mayroon kang mga bagong mensahe",
"echo-category-title-edit-user-talk": "{{PLURAL:$1|Mensahe|Mga mensahe}} sa pahinang usapan",
@@ -40,12 +38,13 @@
"echo-pref-tooltip-article-reminder": "PakiTawag-Pansin mo ako kapag ito ay naitanong.",
"echo-error-no-formatter": "Walang itinakdang anyo para sa pabatid.",
"notifications": "Mga pagpapabatid",
+ "tooltip-pt-notifications-alert": "{{GENDER:|Iyong}} mga babala",
"echo-specialpage": "Mga pabatid",
"echo-anon": "Upang makatanggap ng mga pagpapabatid, [$1 lumikha ng isang account] o [$2 lumagdang papasok].",
"echo-none": "Wala kang mga pabatid.",
"echo-more-info": "Karagdagang impormasyon",
"echo-feedback": "Komentaryo",
- "echo-notification-loginrequired": "Kailangan mong lumagda (login) upang makita ang iyong mga pabatid (notipikasyon)",
+ "echo-notification-loginrequired": "Kailangan mong mag-login upang makita ang iyong mga pabatid.",
"notification-link-text-view-message": "Ipakita ang mensahe",
"notification-link-text-view-mention": "Ipakita ang pagbanggit",
"notification-link-text-view-changes": "Ipakita ang pagbabago",
diff --git a/Echo/i18n/tr.json b/Echo/i18n/tr.json
index df24acca..b06e1b00 100644
--- a/Echo/i18n/tr.json
+++ b/Echo/i18n/tr.json
@@ -19,7 +19,9 @@
"Nemo bis",
"Serkanland",
"Ece Alpdeniz",
- "Kumkumuk"
+ "Kumkumuk",
+ "AliceJ",
+ "Diyapazon"
]
},
"echo-desc": "Kullanıcıları olaylar ve mesajlar hakkında bilgilendiren sistem",
@@ -28,7 +30,7 @@
"prefs-displaynotifications": "Görüntüleme seçenekleri",
"prefs-echosubscriptions": "Bu olaylar hakkında bana bildirim gönder",
"prefs-echocrosswiki": "Vikilerarası bildirimler",
- "prefs-newmessageindicator": "Yeni ileti göstergesi",
+ "prefs-blocknotificationslist": "Sessize alınmış kullanıcılar",
"echo-pref-send-me": "E-posta bildirim tercihi:",
"echo-pref-send-to": "Şuraya gönder:",
"echo-pref-email-format": "E-posta biçimi:",
@@ -41,7 +43,7 @@
"echo-pref-email-format-html": "HTML",
"echo-pref-email-format-plain-text": "Düz metin",
"echo-pref-cross-wiki-notifications": "Diğer vikilerden bildirimleri göster",
- "echo-pref-new-message-indicator": "Mesaj göstergesini araç çubuğumda göster",
+ "echo-pref-notifications-blacklist": "Bu kullanıcılardan gelen bildirimleri gösterme. ([[mw:Special:MyLanguage/Help:Notifications#mute|daha fazla bilgi edin]])",
"echo-pref-beta-feature-cross-wiki-message": "Gelişmiş bildirimler",
"echo-pref-beta-feature-cross-wiki-description": "Bildirimleri daha kolay görüntüleyin ve düzenleyin. Diğer vikilerdeki mesajlarınızı görmenize imkan veren vikilerarası bildirimleri destekler. (Vikilerarası bildirimleri almak için, bulunduğunuz vikide beta özelliği etkinleştirmeniz gerekir.)",
"echo-learn-more": "Daha fazla bilgi",
@@ -94,8 +96,6 @@
"echo-none": "Bildiriminiz bulunmuyor.",
"echo-more-info": "Daha fazla bilgi",
"echo-feedback": "Geri bildirim",
- "echo-popup-footer-special-page-invitation": "<strong>Yenilenen Bildirimler sayfasını deneyin.</strong> [$2 $1]",
- "echo-popup-footer-special-page-invitation-link": "Tamamen yeni görünüm ve özellikler.",
"echo-api-failure": "Bildirimler getirilemedi.",
"echo-api-failure-cross-wiki": "Uzak etki alanı için erişim engellendi.",
"echo-notification-placeholder": "Hiçbir bildirim yok.",
@@ -118,6 +118,7 @@
"notification-link-text-view-page": "Sayfayı görüntüle",
"notification-header-edit-user-talk": "$1, <strong>mesaj {{GENDER:$3|sayfanıza}}</strong> bir mesaj {{GENDER:$2|bıraktı}}.",
"notification-header-edit-user-talk-with-section": "$1, <strong>mesaj {{GENDER:$3|sayfanızdaki}}</strong> \"<strong>$4</strong>\" başlığına bir mesaj {{GENDER:$2|bıraktı}}.",
+ "notification-compact-header-edit-user-talk": "$1 {{GENDER:$3|size}} bir mesaj {{GENDER:$2|bıraktı}}.",
"notification-header-page-linked": "<strong>$4</strong> sayfasından <strong>$3</strong> sayfasına bağlantı verildi.",
"notification-compact-header-page-linked": "<strong>$1</strong> bağlantılı.",
"notification-bundle-header-page-linked": "'''$4''' ve $5 diğer {{ÇOĞUL:$6|sayfadan|sayfadan}}, '''$3''' sayfasına bağlantı verildi.",
@@ -136,6 +137,7 @@
"notification-header-user-rights-remove-only": "{{GENDER:$4|Kullanıcı}} haklarınız {{GENDER:$1|değiştirildi}}. Çıkarıldığınız yer: $2.",
"notification-header-user-rights-add-and-remove": "{{GENDER:$6|Kullanıcı}} haklarınız {{GENDER:$1|değiştirildi}}. Eklendiğiniz yer: $2. Çıkarıldığınız yer: $4.",
"notification-header-welcome": "{{SITENAME}}'ye {{GENDER:$2|hoş geldin}} $1! Burada olmandan çok memnunuz.",
+ "notification-header-mention-summary": "$1, <strong>$4</strong> sayfasının değişiklik özetinde sizden bahsetti.",
"notification-welcome-linktext": "Hoş geldiniz",
"notification-header-thank-you-1-edit": "İlk {{GENDER:$2|değişikliğinizi}} {{GENDER:$2|yaptınız}}; teşekkürler ve hoş geldiniz!",
"notification-header-thank-you-10-edit": "Onuncu {{GENDER:$2|değişikliğinizi}} {{GENDER:$2|yaptınız}}; teşekkürler, lütfen devam edin!",
@@ -184,5 +186,5 @@
"echo-email-batch-body-intro-weekly": "Merhaba $1,\nBurada {{SITENAME}} için bu haftaki etkinlik özetini bulabilirsiniz.",
"echo-email-batch-link-text-view-all-notifications": "Tüm bildirimleri göster",
"notification-header-foreign-alert": "{{PLURAL:$5|$5 diğer Viki projesinden}} uyarınız var",
- "notification-header-foreign-notice": "{{PLURAL:$5|diğer viki|$5 diğer viki}}den daha fazla sonuç"
+ "notification-header-foreign-notice": "{{PLURAL:$5|Diğer viki|$5 diğer viki}}den daha fazla bildirim"
}
diff --git a/Echo/i18n/tt-cyrl.json b/Echo/i18n/tt-cyrl.json
index 157f543a..cce78b9a 100644
--- a/Echo/i18n/tt-cyrl.json
+++ b/Echo/i18n/tt-cyrl.json
@@ -6,12 +6,11 @@
"Macofe"
]
},
- "prefs-echo": "Белдерүләр",
- "prefs-emailsettings": "E-mail көйләнмәләре",
+ "prefs-echo": "Хəбəрнамəләр",
+ "prefs-emailsettings": "Электрон почта көйләнмәләре",
"prefs-displaynotifications": "Күрсәтү көйләнмәләре",
"prefs-echosubscriptions": "Миңа бу вакыйгалар турында хәбәр итәргә",
- "prefs-echocrosswiki": "Кросс-вики белдерүләр",
- "prefs-newmessageindicator": "Яңа хатлар белдерүе",
+ "prefs-echocrosswiki": "Кросс-вики хәбәрнамәләр",
"echo-pref-send-me": "Миңа җибәрү:",
"echo-pref-send-to": "Җибәрер өчен:",
"echo-pref-email-format": "Хатлар төре:",
@@ -20,8 +19,7 @@
"echo-pref-email-format-html": "HTML",
"echo-pref-email-format-plain-text": "Гади текст",
"echo-pref-cross-wiki-notifications": "Бүтән викилардагы белдерүләрне күрсәтергә",
- "echo-pref-new-message-indicator": "Бәхәс битемдә хатлар килуе турында белдерүне кораллар өлгесендә күрсәтү",
- "echo-pref-beta-feature-cross-wiki-message": "Киңәйтелгән белдерүләр",
+ "echo-pref-beta-feature-cross-wiki-message": "Киңәйтелгән хәбәрнамәләр",
"echo-learn-more": "Күбрәк белү",
"echo-log": "Гомуми көндәлек",
"echo-new-messages": "Сезнең яңа хатларыгыз бар",
@@ -33,20 +31,20 @@
"echo-category-title-system": "{{PLURAL:$1|Системалы}}",
"echo-category-title-user-rights": "Кулланучы хокукларын {{PLURAL:$1|үзгәртү}}",
"echo-category-title-emailuser": "Башка {{PLURAL:$1|кулланучыдан|кулланучылардан}} электрон хат",
- "notifications": "Белдерүләр",
+ "notifications": "Хəбəрнамəләр",
"tooltip-pt-notifications-alert": "{{GENDER:|Сезнең}} искәртүләр",
- "tooltip-pt-notifications-notice": "{{GENDER:|Сезнең}} белдерүләр",
+ "tooltip-pt-notifications-notice": "{{GENDER:|Сезнең}} хәбәрнамәләр",
"echo-displaynotificationsconfiguration-enabled-default-new-users-legend": "Яңа кулланучылар",
- "echo-specialpage": "Белдерүләр",
+ "echo-specialpage": "Хəбəрнамəләр",
"echo-specialpage-section-markread": "Төркемне укылган дип санарга",
- "echo-specialpage-pagination-numnotifications": "$1 {{PLURAL:$1|белдерү}}",
+ "echo-specialpage-pagination-numnotifications": "$1 {{PLURAL:$1|хəбəрнамə}}",
"echo-specialpage-pagefilters-title": "Соңгы гамәлләр",
"echo-specialpage-pagefilters-subtitle": "Каралмаган белдерүле битләр",
"notificationsmarkread-legend": "Белдерүләрне укылган дип билгеләү",
- "echo-none": "Сез белдерүләр алмагансыз.",
+ "echo-none": "Сез хәбәрнамәләр алмагансыз.",
"echo-more-info": "Тулырак",
"echo-feedback": "Аралашу",
- "echo-notification-placeholder": "Белдерүләр юк.",
+ "echo-notification-placeholder": "Хəбəрнамəләр юк.",
"echo-notification-placeholder-filters": "Критерийларга туры килүче билдерүләр юк.",
"echo-notification-markasread": "Укылган итеп билгеләү",
"echo-notification-markasunread": "Укылмаган дип билгеләү",
@@ -64,11 +62,13 @@
"notification-header-edit-user-talk": "$1 <strong>{{GENDER:$3|сезнең}} бәхәс битегездә</strong> хат {{GENDER:$2|калдырды}}.",
"notification-header-edit-user-talk-with-section": "$1 <strong>{{GENDER:$3|сезнең}} бәхәс битегездә</strong> «<strong>$4</strong>» хат {{GENDER:$2|калдырды}}.",
"notification-header-mention-other": "$1 {{GENDER:$3|сезне}} <strong>$4</strong> битендәге «<strong>$5</strong>» бүлегендә {{GENDER:$2|телгә}} алды.",
+ "notification-header-mention-other-nosection": "$1 {{GENDER:$3|сезне}} <strong>$4</strong> битендә {{GENDER:$2||телгә}} алды.",
"notification-header-mention-user-talkpage-nosection": "$1 {{GENDER:$3|сезне}} <strong>{{GENDER:$5|$4}} бәхәс битендә</strong> {{GENDER:$2|телгә}} алды.",
"notification-header-mention-article-talkpage-nosection": "$1 {{GENDER:$3|сезне}} «$4» бәхәс битендә {{GENDER:$2|телгә}} алды.",
"notification-welcome-linktext": "Рәхим итегез!",
"notification-link-thank-you-edit": "{{GENDER:$1|Сезнең}} төзәтмә",
"notification-link-text-view-edit": "Үзгәртүне карау",
+ "notification-link-article-reminder": "Битне карау",
"notification-header-reverted": "Сезнең <strong>$3</strong> битендә ясалган {{PLURAL:$4|1=төзәтмәләгез|төзәтмәләрегез}} {{GENDER:$2|{{PLURAL:$4|кире кагылды}}}}.",
"notification-edit-talk-page-email-batch-body-with-section": "{{GENDER:$1|Кулланучы}} $1 сезгә «$2» темасының бәхәс битендә хат {{GENDER:$1|калдырды}}",
"notification-mention-email-subject": "$1 {{GENDER:$2|сезне}} на сайте «{{SITENAME}}» сәхтфәсендә {{GENDER:$1|искә алды}}",
@@ -85,11 +85,11 @@
"notification-inbox-filter-all": "Барысы",
"echo-email-body-default": "Сезнең «{{SITENAME}}» сайтында яңа белдерү бар:\n\n$1",
"echo-notification-alert": "{{PLURAL:$1|Искәртү ($1)|Искәртүләр ($1)|100=Искәртүләр (99+)}}",
- "echo-notification-notice": "{{PLURAL:$1|Белдерү ($1)|Белдерүләр ($1)|100=Белдерүләр (99+)}}",
+ "echo-notification-notice": "{{PLURAL:$1|Хәбәрнамә ($1)|Хәбәрнамәләр ($1)|100=Хәбәрнамәләр (99+)}}",
"echo-notification-alert-text-only": "Искәртүләр",
- "echo-notification-notice-text-only": "Белдерүләр",
- "echo-overlay-link": "Барлык белдерүләр",
- "echo-overlay-title": "<b>Белдерүләр</b>",
+ "echo-notification-notice-text-only": "Хәбәрнамәләр",
+ "echo-overlay-link": "Барлык хəбəрнамəләр",
+ "echo-overlay-title": "<b>Хəбəрнамəләр</b>",
"echo-mark-all-as-read": "Барсын да укылган итеп билгеләү",
"echo-date-today": "Бүген",
"echo-date-yesterday": "Кичә",
diff --git a/Echo/i18n/tt-latn.json b/Echo/i18n/tt-latn.json
index 36a97b55..356273dd 100644
--- a/Echo/i18n/tt-latn.json
+++ b/Echo/i18n/tt-latn.json
@@ -4,6 +4,5 @@
"Frhdkazan"
]
},
- "tooltip-pt-notifications-alert": "{{GENDER:|Sezneñ}} belderüläregez",
- "tooltip-pt-notifications-message": "{{GENDER:|Sezneñ}} xatlarığız"
+ "tooltip-pt-notifications-alert": "{{GENDER:|Sezneñ}} belderüläregez"
}
diff --git a/Echo/i18n/uk.json b/Echo/i18n/uk.json
index 0d3f0e4c..33ae45ba 100644
--- a/Echo/i18n/uk.json
+++ b/Echo/i18n/uk.json
@@ -25,7 +25,6 @@
"prefs-displaynotifications": "Опції відображення",
"prefs-echosubscriptions": "Повідомляти мене про ці події",
"prefs-echocrosswiki": "Крос-вікі сповіщення",
- "prefs-newmessageindicator": "Індикатор нових повідомлень",
"prefs-blocknotificationslist": "Ігноровані користувачі",
"echo-pref-send-me": "Надіслати мені:",
"echo-pref-send-to": "Надіслати до:",
@@ -39,8 +38,7 @@
"echo-pref-email-format-html": "HTML",
"echo-pref-email-format-plain-text": "Простий текст",
"echo-pref-cross-wiki-notifications": "Показувати сповіщення з інших вікі",
- "echo-pref-notifications-blacklist": "Не показувати сповіщень від цих користувачів. ([[mw:Help:Notifications#mute|дізнайтесь більше]])",
- "echo-pref-new-message-indicator": "Показувати індикатор повідомлень на сторінці обговорення у моїй панелі інструментів",
+ "echo-pref-notifications-blacklist": "Не показувати сповіщень від цих користувачів. ([[mw:Special:MyLanguage/Help:Notifications#mute|дізнайтесь більше]])",
"echo-pref-beta-feature-cross-wiki-message": "Розширені сповіщення",
"echo-pref-beta-feature-cross-wiki-description": "Переглядайте і сортуйте сповіщення простіше. Містить крос-вікі сповіщення, які дають змогу бачити повідомлення з інших вікі. (Щоб отримувати крос-вікі сповіщення у певній вікі, Ви маєте активувати бета-функцію у цій вікі).",
"echo-learn-more": "Дізнатися більше",
@@ -95,8 +93,6 @@
"echo-none": "У Вас немає сповіщень.",
"echo-more-info": "Детальніше",
"echo-feedback": "Зворотний зв'язок",
- "echo-popup-footer-special-page-invitation": "<strong>Випробуйте оновлену сторінку сповіщень.</strong> [$2 $1]",
- "echo-popup-footer-special-page-invitation-link": "Всі нові оновлення вигляду та функції.",
"echo-api-failure": "Не вдалося отримати сповіщення.",
"echo-api-failure-cross-wiki": "Відмовлено в доступі до віддаленого домену.",
"echo-notification-placeholder": "Сповіщень немає.",
@@ -125,8 +121,10 @@
"notification-link-text-view-page": "Переглянути сторінку",
"notification-header-edit-user-talk": "$1 {{GENDER:$2|залишив|залишила}} повідомлення на <strong>{{GENDER:$3|Вашій}} сторінці обговорення</strong>.",
"notification-header-edit-user-talk-with-section": "$1 {{GENDER:$2|залишив|залишила}} повідомлення на <strong>{{GENDER:$3|Вашій}} сторінці обговорення</strong> у «<strong>$4</strong>».",
+ "notification-compact-header-edit-user-talk": "$1 {{GENDER:$2|залишив|залишила}} {{GENDER:$3|Вам}} повідомлення.",
+ "notification-compact-header-edit-user-talk-with-section": "$1 {{GENDER:$2|залишив|залишила}} {{GENDER:$3|Вам}} повідомленя в «<strong>$4</strong>».",
"notification-body-edit-user-talk-with-section": "$1",
- "notification-header-page-linked": "На сторінку <strong>$4</strong> додано посилання на <strong>$3</strong>.",
+ "notification-header-page-linked": "На сторінці <strong>$4</strong> додано посилання на <strong>$3</strong>.",
"notification-compact-header-page-linked": "Посилання з <strong>$1</strong>.",
"notification-bundle-header-page-linked": "З {{PLURAL:$5||$5 сторінок|100=99+ сторінок}} було додано посилання на <strong>$3</strong>.",
"notification-header-article-reminder": "Сторінка, про яку {{GENDER:$2|Ви}} просили Вам нагадати — <strong>$3</strong>",
@@ -154,6 +152,7 @@
"notification-header-user-rights-add-and-remove": "{{GENDER:$6|Ваші}} права користувача {{GENDER:$1|змінилися}}. Вас було додано до: $2. Ви більше не належите до: $4.",
"notification-header-user-rights-expiry-change": "Термін завершення {{GENDER:$4|Вашого}} членства у {{PLURAL:$3|поданій групі|поданих групах}} {{GENDER:$1|змінено}}: $2.",
"notification-header-welcome": "{{GENDER:$2|Ласкаво просимо}} до {{GRAMMAR:genitive|{{SITENAME}}}}, $1! Ми раді бачити {{GENDER:$2|Вас}} тут.",
+ "notification-header-mention-summary": "$1 {{GENDER:$2|згадав|згадала}} {{GENDER:$3|Вас}} в описі редагування сторінки <strong>$4</strong>.",
"notification-welcome-linktext": "Ласкаво просимо!",
"notification-header-thank-you-1-edit": "{{GENDER:$2|Ви}} щойно зробили {{GENDER:$2|своє}} перше редагування; дякуємо {{GENDER:$2|Вам}} і ласкаво просимо!",
"notification-header-thank-you-10-edit": "{{GENDER:$2|Ви}} щойно зробили {{GENDER:$2|своє}} десяте редагування; дякуємо {{GENDER:$2|Вам}}, продовжуйте!",
@@ -172,7 +171,7 @@
"notification-page-linked-email-subject": "На сайті {{SITENAME}} з'явилось посилання на сторінку, яку Ви створили",
"notification-reverted-email-subject2": "{{PLURAL:$3|1=Ваше редагування|Ваші редагування}} на сайті {{SITENAME}} було {{GENDER:$1|скасовано}}",
"notification-mention-email-subject": "$1 {{GENDER:$1|згадав|згадала}} {{GENDER:$2|Вас}} на сайті «{{SITENAME}}».",
- "notification-user-rights-email-subject": "Змінились Ваші права користувача на {{GRAMMAR:locative|{{SITENAME}}}}.",
+ "notification-user-rights-email-subject": "Змінились Ваші права користувача на веб-сайті {{SITENAME}}.",
"notification-timestamp-ago-seconds": "{{PLURAL:$1|$1с}}",
"notification-timestamp-ago-minutes": "{{PLURAL:$1|$1хв}}",
"notification-timestamp-ago-hours": "{{PLURAL:$1|$1год}}",
diff --git a/Echo/i18n/ur.json b/Echo/i18n/ur.json
index da47d964..512b3c38 100644
--- a/Echo/i18n/ur.json
+++ b/Echo/i18n/ur.json
@@ -9,7 +9,9 @@
"Muhammad Shuaib",
"Obaid Raza",
"Hindustanilanguage",
- "امین اکبر"
+ "امین اکبر",
+ "BukhariSaeed",
+ "Abdulq"
]
},
"echo-desc": "نظام برائے اطلاع صارفین دربارہ تقریبات و پیغامات",
@@ -18,7 +20,7 @@
"prefs-displaynotifications": "اختیارات دکھائیں",
"prefs-echosubscriptions": "ان احوال کے متعلق مجھے آگاہ کریں",
"prefs-echocrosswiki": "دیگر ویکیوں کے اطلاع نامے",
- "prefs-newmessageindicator": "نئے پیغام کا اشارہ نما",
+ "prefs-blocknotificationslist": "خاموش کردہ صارفین",
"echo-pref-send-me": "مجھے ارسال کریں:",
"echo-pref-send-to": "مرسل الیہ:",
"echo-pref-email-format": "برقی ڈاک فارمیٹ",
@@ -31,7 +33,8 @@
"echo-pref-email-format-html": "ایچ ٹی ایم ایل",
"echo-pref-email-format-plain-text": "سادہ متن",
"echo-pref-cross-wiki-notifications": "دیگر ویکیوں کے اطلاع نامے دکھائیں",
- "echo-pref-new-message-indicator": "میرے خانہ آلات میں تبادلۂ خیال صفحے کے پیغامات کا اشارہ نما فعال کریں",
+ "echo-pref-notifications-blacklist": "ان صارفین کے اطلاع نامے نہ دکھائیں۔ [[mw:Special:MyLanguage/Help:Notifications#mute|مزید تفصیلات]]",
+ "echo-pref-beta-feature-cross-wiki-message": "اضافی اطلاع نامے",
"echo-learn-more": "مزید معلومات حاصل کریں",
"echo-log": "عوامی نوشتہ",
"echo-new-messages": "آپ کے لیے نئے پیغامات",
@@ -42,8 +45,10 @@
"echo-category-title-mention-failure": "{{PLURAL:$1|تذکرہ|تذکرے}} ناکام",
"echo-category-title-mention-success": "{{PLURAL:$1|تذکرہ|تذکرے}} کامیاب",
"echo-category-title-other": "{{PLURAL:$1|دیگر}}",
+ "echo-category-title-system": "{{PLURAL:$1|نظام}}",
"echo-category-title-user-rights": "{{PLURAL:$1|اختیارات صارف کی تبدیلی|اختیارات صارف کی تبدیلیاں}}",
"echo-category-title-emailuser": "{{PLURAL:$1|دوسرے صارف کا برقی خط|دیگر صارفین کے برقی خطوط}}",
+ "echo-category-title-article-reminder": "{{PLURAL:$1|یاد دہانی|یاد دہانیوں}} کا صفحہ",
"echo-pref-tooltip-edit-user-talk": "جب کوئی شخص میرے تبادلۂ خیال صفحہ پر پیغام لکھے یا کسی پیغام کا جواب دے تو مجھے آگاہ کریں۔",
"echo-pref-tooltip-article-linked": "جب کسی مضمون میں میرے تخلیق کردہ کسی صفحہ کا ربط دیا جائے تو مجھے آگاہ کریں۔",
"echo-pref-tooltip-reverted": "جب کوئی شخص میری ترمیم کو رد یا استرجع کرے تو مجھے آگاہ کریں۔",
@@ -52,19 +57,45 @@
"echo-pref-tooltip-mention-success": "جب میں کسی کا تذکرہ کروں تو مجھے آگاہ کریں۔",
"echo-pref-tooltip-user-rights": "جب کوئی شخص میرے اختیارات میں تبدیلی کرے تو مجھے آگاہ کریں۔",
"echo-pref-tooltip-emailuser": "جب کوئی شخص مجھے برقی خط بھیجے تو مجھے آگاہ کریں۔",
+ "echo-pref-tooltip-article-reminder": "جب میں پوچھوں تو مجھے اس صفحہ متعلق آگاہ کریں۔",
"notifications": "اطلاعات",
"tooltip-pt-notifications-alert": "{{GENDER:|آپ}}کی اطلاعات",
+ "tooltip-pt-notifications-notice": "{{GENDER:|آپ}} کے اعلانات",
+ "echo-displaynotificationsconfiguration": "ترتیب نمائش اطلاعات",
+ "echo-displaynotificationsconfiguration-summary": "اس ویکی پر اطلاع ناموں کو کس طرح مرتب کیا گیا ہے ذیل میں اس کی ایک جھلک دیکھیں۔",
+ "echo-displaynotificationsconfiguration-notifications-by-category-header": "اطلاع نامے بلحاظ زمرہ",
+ "echo-displaynotificationsconfiguration-sorting-by-section-header": "اقسام کی ترتیب",
+ "echo-displaynotificationsconfiguration-sorting-by-section-legend": "ہر قطعے میں اطلاع ناموں کی کونسی قسمیں مرتب ہیں",
+ "echo-displaynotificationsconfiguration-available-notification-methods-header": "اطلاع ناموں کے اجازت یافتہ طریقے",
+ "echo-displaynotificationsconfiguration-available-notification-methods-by-category-legend": "ہر زمرے میں اطلاع ناموں کے کونسے طریقے معاونت یافتہ ہیں",
+ "echo-displaynotificationsconfiguration-available-notification-methods-by-type-legend": "ہر قسم میں اطلاع ناموں کے کونسے طریقے معاونت یافتہ ہیں؛ ان میں محض ان زمروں کے اقسام شامل ہیں جنہیں ترجیحات ميں پوشیدہ کر دیا گیا ہو",
+ "echo-displaynotificationsconfiguration-enabled-default-header": "طے شدہ طور پر فعال",
+ "echo-displaynotificationsconfiguration-enabled-default-existing-users-legend": "موجودہ صارفین",
+ "echo-displaynotificationsconfiguration-enabled-default-new-users-legend": "نئے صارفین",
+ "echo-displaynotificationsconfiguration-mandatory-notification-methods-header": "اطلاع ناموں کے مطلوبہ طریقے",
+ "echo-displaynotificationsconfiguration-mandatory-notification-methods-by-category-legend": "ہر زمرے کے لیے اطلاع ناموں کے کون سے طریقے لازمی ہیں",
"echo-specialpage": "اطلاعات",
+ "echo-specialpage-section-markread": "اطلاعات کو بطور خواندہ نشان زد کریں",
+ "echo-specialpage-markasread": "اطلاع: بطورخواندہ نشان زدکریں",
+ "echo-specialpage-pagination-numnotifications": "$1 {{PLURAL:$1|اطلاع نامہ|اطلاع نامے}}",
"echo-specialpage-pagefilters-title": "حالیہ سرگرمی",
"echo-specialpage-pagefilters-subtitle": "صفحات جن کی اطلاعات نہیں پڑھی گئیں",
+ "notificationsmarkread-legend": "اطلاع نامہ کو خواندہ نشان زد کریں",
+ "echo-none": "آپ کے لیے کوئی نئی اطلاع نہیں ہے۔",
+ "echo-more-info": "مزید معلومات",
"echo-feedback": "آپ کی رائے",
"echo-api-failure": "اطلاعات حاصل کرنے میں ناکامی، دوبارہ کوشش کریں!",
"echo-notification-placeholder": "کوئی اطلاع موجود نہیں۔",
+ "echo-notification-placeholder-filters": "ان حالات و شرائط کی مناسبت سے کوئی اطلاعات موجود نہیں۔",
+ "echo-notification-loginrequired": "اطلاعات کو دیکھنے کے لیے آپ کو لاگ ان ہونا چاہیے۔",
+ "echo-notification-popup-loginrequired": "اطلاعات دیکھنے کے لیے براہ مہربانی لاگ ان ہوں۔",
"echo-notification-markasread": "بطور خواندہ شدہ نشان زد کریں",
"echo-notification-markasunread": "بطور ناخواندہ شدہ نشان زد کریں",
"echo-notification-markasread-tooltip": "بطور خواندہ شدہ نشان زد کریں",
"echo-notification-more-options-tooltip": "مزید اختیارات",
- "notification-link-text-expand-all": "پورا دکھائیں",
+ "notification-link-text-expand-all": "کھولیں",
+ "notification-link-text-expand-alert-count": "{{PLURAL:$1|$1انتباہ|$1 انتباہات}} دیکھیں",
+ "notification-link-text-expand-notice-count": "{{PLURAL:$1|$1 اطلاع|$1 اطلاعات}} دیکھیں",
"notification-link-text-expand-all-count": "{{PLURAL:$1|$1 اطلاع نامہ|$1 اطلاع نامے}} دیکھیں",
"notification-link-text-collapse-all": "چھپائیں",
"notification-link-text-view-message": "پیغام دیکھیں",
@@ -73,14 +104,34 @@
"notification-link-text-view-changes": "تبدیلیاں {{GENDER:$1|دیکھیں}}",
"notification-link-text-view-page": "صفحہ دیکھیں",
"notification-header-edit-user-talk": "$1 نے <strong>{{GENDER:$3|آپ کے}} تبادلۂ خیال پر </strong> {{GENDER:$2|ایک}} پیغام دیا۔",
+ "notification-header-edit-user-talk-with-section": "$1 نے <strong>{{GENDER:$3|آپ کے}} تبادلۂ خیال کے صفحے</strong> میں \"<strong>$4</strong>\" پر ایک {{GENDER:$2|پیغام دیا}} ہے۔",
+ "notification-compact-header-edit-user-talk": "$1 نے {{GENDER:$3|آپ کو}} {{GENDER:$2|ایک}} پیغام دیا۔",
+ "notification-compact-header-edit-user-talk-with-section": "$1 نے {{GENDER:$3|آپ کو}} \"<strong>$4</strong> میں {{GENDER:$2|ایک}} پیغام دیا۔",
"notification-header-page-linked": "صفحہ <strong>$3</strong> کا ربط صفحہ <strong>$4</strong> میں شامل کیا گیا ہے۔",
"notification-compact-header-page-linked": "<strong>$1</strong> سے مربوط ہوا۔",
- "notification-bundle-header-page-linked": "صفحہ <strong>$3</strong> میں {{PLURAL:$5||$5 صفحات|100=99+ صفحات}} کے روابط شامل کیے گیے۔",
+ "notification-bundle-header-page-linked": "صفحہ <strong>$3</strong> میں {{PLURAL:$5||$5 صفحات|100=99+ صفحات}} کے روابط شامل کیے گئے۔",
"notification-link-text-what-links-here": "اس صفحے سے مربوط تمام روابط",
+ "notification-header-mention-other": "$1 نے <strong>$4</strong> پر قطعہ \"<strong>$5</strong>\" میں {{GENDER:$3|آپ}} کا {{GENDER:$2|تذکرہ کیا}}۔",
+ "notification-header-mention-other-nosection": "$1 نے {{GENDER:$3|آپ کا}} <strong>$4</strong> میں {{GENDER:$2|تذکرہ}} کیا ہے۔",
+ "notification-header-mention-user-talkpage-v2": "$1 نے <strong>$4 {{GENDER:$5|کے}} تبادلہ خیال صفحے</strong> پر قطعہ \"<strong>$6</strong>\" میں {{GENDER:$3|آپ}} کا {{GENDER:$2|تذکرہ کیا}}۔",
+ "notification-header-mention-user-talkpage-nosection": "$1 نے {{GENDER:$3|آپ کا}} {{GENDER:$2|تذکرہ}} <strong>صارف تبادلہ خیال {{GENDER:$5|کے}} $4</strong> پر کیا ہے۔",
"notification-header-mention-agent-talkpage": "$1 نے {{GENDER:$3|آپ}} کا {{GENDER:$2|تذکرہ}} <strong>{{GENDER:$2|کے|کے|کے}} تبادلۂ خیال صفحہ</strong> پر \"<strong>$4</strong>\" میں کیا۔",
+ "notification-header-mention-agent-talkpage-nosection": "$1 نے <strong>{{GENDER:$2|اپنے}} تبادلہ خیال صفحے</strong> پر {{GENDER:$3|آپ}} کا {{GENDER:$2|تذکرہ کیا}}۔",
+ "notification-header-mention-article-talkpage": "$1 نے {{GENDER:$3|آپ کا}} {{GENDER:$2|تذکرہ}} <strong>$4</strong> تبادلہ خیال میں \"<strong>$5</strong>\" پر کیا ہے۔",
+ "notification-header-mention-article-talkpage-nosection": "$1 نے <strong>$4</strong> کے تبادلہ خیال پر {{GENDER:$3|آپ}} کا {{GENDER:$2|تذکرہ کیا}}۔",
"notification-header-user-rights-add-only": "{{GENDER:$4|آپ کے}} صارفی حقوق {{GENDER:$1|تبدیل}} کر کے آپ کو $2 گروہ صارفین میں شامل کر دیا گیا ہے۔",
"notification-header-user-rights-add-and-remove": "{{GENDER:$6|آپ کے}} صارفی حقوق {{GENDER:$1|تبدیل}} کر کے آپ کو $2 میں شامل کر دیا گیا ہے۔ اب آپ $4 کے ایک رکن ہیں۔",
+ "notification-header-welcome": "$1، {{SITENAME}} میں {{GENDER:$2|خوش آمدید}}! ہم {{GENDER:$2|آپ}} کی یہاں آمد سے بہت مسرور ہیں۔",
+ "notification-header-mention-summary": "$1 نے <strong>$4</strong> پر اپنے ایک خلاصہ ترمیم میں {{GENDER:$3|آپ}} کا {{GENDER:$2|ذکر کیا}}۔",
"notification-welcome-linktext": "خوش آمدید",
+ "notification-header-thank-you-1-edit": "شکریہ اور خوش آمدید! یہ {{GENDER:$2|آپ}} کی ویکیپیڈیا پر پہلی ترمیم تھی؛ براہ مہربانی یہ سلسلہ جاری رکھیں!",
+ "notification-header-thank-you-10-edit": "{{GENDER:$2|آپ}} نے {{GENDER:$2|اپنی}} دس ترامیم مکمل کر لی ہیں؛ براہ مہربانی تعاون جاری رکھیے {{GENDER:$2|آپ}} کا شکریہ!",
+ "notification-header-thank-you-100-edit": "یہ {{GENDER:$2|آپ}} کی سویں ترمیم تھی؛ {{GENDER:$2|آپ}} کا بہت بہت شکریہ!",
+ "notification-header-thank-you-1000-edit": "{{GENDER:$2|آپ}} نے {{GENDER:$2|اپنی}} ایک ہزار ترامیم مکمل کر لی ہیں؛ اس شاندار تعاون پر {{GENDER:$2|آپ}} کا شکریہ!",
+ "notification-header-thank-you-10000-edit": "{{GENDER:$2|آپ}} نے {{GENDER:$2|اپنی}} دس ہزار ترامیم مکمل کر لی ہیں؛ اس تعاون پر {{GENDER:$2|آپ}} کا بہت بہت شکریہ!",
+ "notification-header-thank-you-100000-edit": "{{GENDER:$2|آپ}} نے {{GENDER:$2|اپنی}} ایک لاکھ ترامیم مکمل کر لی ہیں؛ اس زبردست تعاون پر {{GENDER:$2|آپ}} کا شکریہ!",
+ "notification-header-thank-you-1000000-edit": "یہ {{GENDER:$2|آپ کی}} دس لاکھویں ترمیم تھی؛ اس حیرت انگیز اور شاندار تعاون پر ہم آپ کے شکر گزار ہیں!",
+ "notification-link-thank-you-edit": "{{GENDER:$1|آپ کی}} ترمیم",
"notification-link-text-view-edit": "ترمیم دیکھیں",
"notification-link-article-reminder": "صفحہ دیکھیں",
"notification-header-reverted": "{{PLURAL:$4| <strong>$3</strong> پر آپ کی ترمیم| <strong>$3</strong> پر آپ کی ترامیم}} {{GENDER:$2|نے رد کر دی ہے}}",
@@ -88,6 +139,8 @@
"notification-edit-talk-page-email-subject2": "{{SITENAME}} پر $1 نے آپ کو پیغام {{GENDER:$1|بھیجا ہے}}",
"notification-edit-talk-page-email-batch-body-with-section": "$1 نے آپ کے تبادلہ خیال صفحے پر قطعہ \"$2\" کے تحت آپ کو پیغام {{GENDER:$1|بھیجا ہے}}۔",
"notification-page-linked-email-subject": "{{SITENAME}} پر آپ کا تخلیق کردہ صفحہ مربوط ہوا",
+ "notification-reverted-email-subject2": "{{SITENAME}} پر آپ کی {{PLURAL:$3|ترمیم|ترامیم}} {{GENDER:$1|رد}} {{PLURAL:$3|کردی گئی ہے|کردی گئی ہیں}}۔",
+ "notification-mention-email-subject": "$1 نے {{SITENAME}} پر {{GENDER:$2|آپ}} کا {{GENDER:$1|تذکرہ کیا}}",
"notification-user-rights-email-subject": "{{SITENAME}} پر آپ کے صارفی اختیارات میں تبدیلی کی گئی ہے",
"notification-timestamp-ago-seconds": "{{PLURAL:$1|$1 سیکنڈ}}",
"notification-timestamp-ago-minutes": "{{PLURAL:$1|$1 منٹ}}",
@@ -101,10 +154,11 @@
"notification-inbox-filter-unread": "غیرمطالعہ شدہ",
"notification-inbox-filter-all": "تمام",
"echo-email-body-default": "آپ کے لیے {{SITENAME}} پر نیا اطلاع نامہ موجود ہے:\n\n$1",
+ "echo-email-footer-default-html": "ہماری جانب سے آپ کو ارسال کردہ برقی خطوط کی ترتیب و تنظیم کے لیے <a href=\"$2\" style=\"text-decoration:none; color: #3868B0;\">اپنی ترجیحات ملاحظہ کریں</a>۔<br />\n$1",
"echo-email-footer-default": "$2\n\nآپ کو ارسال کردہ برقی خطوط کی ترتیب و تنظیم کے لیے اپنی ترجیحات ملاحظہ کریں:\n{{canonicalurl:{{#special:Preferences}}#mw-prefsection-echo}}\n\n$1",
"echo-email-plain-footer": "{{GENDER:$1|آپ کو}} ارسال کردہ برقی خطوط کی ترتیب و تنظیم کے لیے {{GENDER:$1|اپنی}} ترجیحات ملاحظہ کریں:",
"echo-email-html-footer-preference-link-text": "{{GENDER:$1|اپنی}} ترجیحات ملاحظہ کریں",
- "echo-email-html-footer-with-link": "{{GENDER:$2|آپ}} کو ہم سے مرسلہ ای میلوں پر گرفت کے لیے",
+ "echo-email-html-footer-with-link": "ہماری جانب سے {{GENDER:$2|آپ}} کو ارسال کردہ برقی خطوط کی ترتیب و تنظیم کے لیے $1۔",
"echo-notification-alert": "{{PLURAL:$1|انتباہ ($1)|انتباہات ($1)|100=انتباہات (99+)}}",
"echo-notification-notice": "{{PLURAL:$1|اطلاع ($1)|اطلاعات($1)|100=اطلاعات(99+)}}",
"echo-notification-alert-text-only": "انتباہات",
@@ -112,10 +166,12 @@
"echo-overlay-link": "جملہ اطلاعات",
"echo-overlay-title": "<b>اطلاعات</b>",
"echo-overlay-title-overflow": "<b>{{PLURAL:$1|طلاع|اطلاعات}}</b> ($2 ناخواندہ پیغامات میں سے $1 زیر مشاہدہ)",
- "echo-mark-all-as-read": "جملہ اطلاعات کو خواندہ نشانزد کریں",
+ "echo-mark-all-as-read": "سب کو بطور خواندہ نشان زد کریں",
"echo-date-today": "آج",
"echo-date-yesterday": "گذشتہ کل",
+ "notification-bundle-header-edit-user-talk-v2": "<strong>{{GENDER:$3|آپ کے}} تبادلہ خیال صفحہ</strong> پر\n{{PLURAL:$1|ایک نیا پیغام|$1 نئے پیغامات|100=99+ نئے پیغامات}}۔",
"echo-email-batch-link-text-view-all-notifications": "تمام اطلاع نامے دیکھیں",
"notification-header-foreign-alert": "{{PLURAL:$5|دوسری ویکی|$5 دیگر ویکیوں}} کی مزید اطلاعات",
+ "notification-header-foreign-notice": "{{PLURAL:$5|دوسری ویکی|$5 دوسری ویکیوں}} سے مزید اطلاعات",
"notification-header-foreign-all": "{{PLURAL:$5|دوسری ویکی|$5 دیگر ویکیوں}} کے مزید اطلاع نامے"
}
diff --git a/Echo/i18n/uz.json b/Echo/i18n/uz.json
index d6d15b98..038c9eb4 100644
--- a/Echo/i18n/uz.json
+++ b/Echo/i18n/uz.json
@@ -11,7 +11,6 @@
"prefs-emailsettings": "Elektron pochta moslamalari",
"prefs-displaynotifications": "Tasvirlash moslamalari",
"prefs-echosubscriptions": "Quyidagi hodisalar haqida menga xabar berilsin",
- "prefs-newmessageindicator": "Yangi xabar indikatori",
"echo-pref-send-me": "Menga joʻnatilsin:",
"echo-pref-send-to": "Joʻnatilsin:",
"echo-pref-email-format": "Xatlar formati:",
@@ -23,7 +22,6 @@
"echo-pref-email-frequency-weekly": "Xabarlar haqida haftalik maʼlumot",
"echo-pref-email-format-html": "HTML",
"echo-pref-email-format-plain-text": "Quruq matn",
- "echo-pref-new-message-indicator": "Asboblar panelida munozara sahifasidagi xabarlar indikatori koʻrsatilsin",
"echo-learn-more": "Batafsil maʼlumot",
"echo-new-messages": "Sizda yangi xabarlar bor",
"echo-category-title-edit-user-talk": "Munozaramda {{PLURAL:$1|1=xabar|xabar}}",
diff --git a/Echo/i18n/vec.json b/Echo/i18n/vec.json
index ff328221..20cbed86 100644
--- a/Echo/i18n/vec.json
+++ b/Echo/i18n/vec.json
@@ -10,7 +10,6 @@
"prefs-displaynotifications": "Preferense de visualixassion",
"prefs-echosubscriptions": "Màndeme un aviso su de sti eventi",
"prefs-echocrosswiki": "Avisi tra na wiki e n'altra",
- "prefs-newmessageindicator": "Indicador de i mesaji novi",
"echo-pref-send-me": "Màndeme:",
"echo-pref-send-to": "Manda a:",
"echo-pref-email-format": "Formato email:",
@@ -23,7 +22,6 @@
"echo-pref-email-format-html": "HTML",
"echo-pref-email-format-plain-text": "Testo normal",
"echo-pref-cross-wiki-notifications": "Fà védar anca i avisi de chealtre wiki",
- "echo-pref-new-message-indicator": "Fà védar l'indicador in tea bara dei strumenti, par i mesaji novi in te la me pagina de discusion",
"echo-pref-beta-feature-cross-wiki-message": "Avisi fati mejo",
"echo-learn-more": "Par saverghine de pì",
"echo-log": "Rejistro pùblico",
diff --git a/Echo/i18n/vep.json b/Echo/i18n/vep.json
index a3871bce..65abdef4 100644
--- a/Echo/i18n/vep.json
+++ b/Echo/i18n/vep.json
@@ -4,6 +4,5 @@
"Sebranik"
]
},
- "tooltip-pt-notifications-alert": "Teiden tedotamižed",
- "tooltip-pt-notifications-message": "Teiden tedotused"
+ "tooltip-pt-notifications-alert": "Teiden tedotamižed"
}
diff --git a/Echo/i18n/vi.json b/Echo/i18n/vi.json
index 6c9e5f2d..b08f2f25 100644
--- a/Echo/i18n/vi.json
+++ b/Echo/i18n/vi.json
@@ -15,7 +15,7 @@
"prefs-displaynotifications": "Tùy chọn hiển thị",
"prefs-echosubscriptions": "Báo cho tôi biết về những sự kiện này",
"prefs-echocrosswiki": "Thông báo liên wiki",
- "prefs-newmessageindicator": "Đèn tin nhắn mới",
+ "prefs-blocknotificationslist": "Tắt tiếng người dùng",
"echo-pref-send-me": "Gửi thư cho tôi:",
"echo-pref-send-to": "Gửi đến:",
"echo-pref-email-format": "Định dạng thư điện tử:",
@@ -28,7 +28,7 @@
"echo-pref-email-format-html": "HTML",
"echo-pref-email-format-plain-text": "Văn bản thuần",
"echo-pref-cross-wiki-notifications": "Hiển thị thông báo từ wiki khác",
- "echo-pref-new-message-indicator": "Hiển thị đèn tin nhắn trên thanh công cụ của tôi",
+ "echo-pref-notifications-blacklist": "Ẩn thông báo từ những người dùng này. ([[mw:Special:MyLanguage/Help:Notifications#mute|Tìm hiểu thêm]])",
"echo-pref-beta-feature-cross-wiki-message": "Thông báo được cải tiến",
"echo-pref-beta-feature-cross-wiki-description": "Xem và quản lý các thông báo dễ dàng hơn. Bao gồm các thông báo liên wiki, cho phép bạn xem tin nhắn từ các wiki khác. (Để nhận thông báo liên wiki trên một wiki nào đó, bạn phải kích hoạt tính năng beta trên wiki đó.)",
"echo-learn-more": "Tìm hiểu thêm",
@@ -44,14 +44,16 @@
"echo-category-title-system": "{{PLURAL:$1}}Hệ thống",
"echo-category-title-user-rights": "{{PLURAL:$1|Các thay đổi|Thay đổi}} về quyền người dùng",
"echo-category-title-emailuser": "Thư điện tử nhận từ {{PLURAL:$1|người dùng|những người dùng}} khác",
+ "echo-category-title-article-reminder": "{{PLURAL:$1}}Nhắc nhở về trang",
"echo-pref-tooltip-edit-user-talk": "Báo cho tôi biết khi nào người ta nhắn tin hoặc trả lời trên trang thảo luận của tôi.",
- "echo-pref-tooltip-article-linked": "Báo cho tôi biết khi nào người ta đặt liên kết từ một bài đến một trang do tôi tạo ra.",
+ "echo-pref-tooltip-article-linked": "Báo cho tôi biết khi nào người ta đặt liên kết từ một trang đến một trang khác do tôi tạo ra.",
"echo-pref-tooltip-reverted": "Báo cho tôi khi nào người ta lùi lại một sửa đổi của tôi dùng chức năng Lùi sửa hoặc Lùi tất cả.",
"echo-pref-tooltip-mention": "Báo cho tôi biết khi có người đặt liên kết đến trang thành viên của tôi.",
"echo-pref-tooltip-mention-failure": "Báo cho tôi biết khi tôi không thể nhắc đến người khác.",
"echo-pref-tooltip-mention-success": "Báo cho tôi khi tôi nhắc đến người khác.",
"echo-pref-tooltip-user-rights": "Báo cho tôi biết khi có người thay đổi quyền người dùng của tôi.",
"echo-pref-tooltip-emailuser": "Báo cho tôi biết khi có người gửi thư cho tôi.",
+ "echo-pref-tooltip-article-reminder": "Báo cho tôi biết về trang này khi tôi yêu cầu lời nhắc nhở.",
"echo-error-no-formatter": "Thông báo không có định rõ định dạng",
"notifications": "Thông báo",
"tooltip-pt-notifications-alert": "Tin nhắn cho bạn",
@@ -74,6 +76,7 @@
"echo-specialpage-markasread": "Thông báo: Đánh dấu là đã đọc",
"echo-specialpage-markasread-invalid-id": "ID sự kiện không hợp lệ",
"echo-specialpage-pagination-numnotifications": "$1 thông báo",
+ "echo-specialpage-pagination-range": "$1 – $2",
"echo-specialpage-pagefilters-title": "Hoạt động gần đây",
"echo-specialpage-pagefilters-subtitle": "Trang có thông báo chưa đọc",
"notificationsmarkread-legend": "Đánh dấu thông báo là đã đọc",
@@ -81,8 +84,6 @@
"echo-none": "Bạn không có thông báo.",
"echo-more-info": "Thêm thông tin",
"echo-feedback": "Phản hồi",
- "echo-popup-footer-special-page-invitation": "<strong>Hãy thử trang Thông báo được sửa sang.</strong> [$2 $1]",
- "echo-popup-footer-special-page-invitation-link": "Có thiết kế và chức năng mới.",
"echo-quotation-marks": "“$1”",
"echo-api-failure": "Thất bại khi lấy thông báo.",
"echo-api-failure-cross-wiki": "Truy cập tới tên miền từ xa bị từ chối.",
@@ -112,9 +113,12 @@
"notification-link-text-view-page": "Xem trang",
"notification-header-edit-user-talk": "$1 {{GENDER:$2}}đã để lại một tin nhắn trên <strong>trang thảo luận {{GENDER:$3}}của bạn</strong>.",
"notification-header-edit-user-talk-with-section": "$1 {{GENDER:$2}}đã để lại một tin nhắn trên <strong>trang thảo luận {{GENDER:$3}}của bạn</strong> trong “<strong>$4</strong>”.",
+ "notification-compact-header-edit-user-talk": "$1 {{GENDER:$2}}đã nhắn tin cho {{GENDER:$3}}bạn.",
+ "notification-compact-header-edit-user-talk-with-section": "$1 {{GENDER:$2}}đã nhắn tin cho {{GENDER:$3}}bạn trong “<strong>$4</strong>”.",
"notification-header-page-linked": "Một liên kết đã được tạo từ <strong>$4</strong> tới <strong>$3</strong>.",
"notification-compact-header-page-linked": "Liên kết từ <strong>$1</strong>.",
"notification-bundle-header-page-linked": "Các liên kết đã được tạo từ {{PLURAL:$5|một trang|$5 trang|100=99+ trang}} tới <strong>$3</strong>.",
+ "notification-header-article-reminder": "Trước đây {{GENDER:$2}}bạn xin được nhắc nhở về trang <strong>$3</strong>",
"notification-link-text-what-links-here": "Mọi liên kết đến trang này",
"notification-header-mention-other": "$1 {{GENDER:$2}}đã nhắc đến {{GENDER:$3}}bạn tại trang <strong>$4</strong> trong “<strong>$5</strong>”.",
"notification-header-mention-other-nosection": "$1 {{GENDER:$2|đã nhắc đến}} {{GENDER:$3|bạn}} tại trang <strong>$4</strong>.",
@@ -126,7 +130,7 @@
"notification-header-mention-article-talkpage-nosection": "$1 {{GENDER:$2}}đã nhắc đến {{GENDER:$3}}bạn tại trang thảo luận của <strong>$4</strong>.",
"notification-header-mention-failure-user-unknown": "{{GENDER:$2}}Bạn đã nhắc đến <strong>$3</strong> nhưng người dùng này không tồn tại.",
"notification-header-mention-failure-user-anonymous": "{{GENDER:$2}}Bạn đã nhắc đến <strong>$3</strong> nhưng người dùng vô danh không nhận được thông báo về lời nhắc đến này.",
- "notification-header-mention-failure-too-many": "{{GENDER:$2}}Bạn đã nhắc đến người dùng nhưng họ sẽ không nhận được thông báo vì bạn đã vượt quá hạn chế $3 người dùng.",
+ "notification-header-mention-failure-too-many": "{{GENDER:$2}}Bạn đã thử nhắc đến hơn $3 người dùng. Không gửi được lời nhắc đến những người vượt quá hạn chế đó.",
"notification-header-mention-failure-bundle": "{{GENDER:$2}}Bạn đã nhắc đến {{PLURAL:$3|một người dùng|$3 người dùng}} trong trang thảo luận <strong>$4</strong> nhưng họ không nhận được thông báo.",
"notification-compact-header-mention-failure-user-unknown": "<strong>Tên người dùng không tồn tại:</strong> $1",
"notification-compact-header-mention-failure-user-anonymous": "<strong>Không thể thông báo địa chỉ IP về lời nhắc đến:</strong> $1",
@@ -137,7 +141,9 @@
"notification-header-user-rights-add-only": "Các quyền người dùng của {{GENDER:$4}}bạn đã được {{GENDER:$1}}thay đổi. Bạn đã được thêm vào: $2.",
"notification-header-user-rights-remove-only": "Các quyền người dùng của {{GENDER:$4}}bạn đã được {{GENDER:$1}}thay đổi. Bạn không còn là thành viên của: $2.",
"notification-header-user-rights-add-and-remove": "Các quyền người dùng của {{GENDER:$6}}bạn đã được {{GENDER:$1}}thay đổi. Bạn đã được thêm vào: $2. Bạn không còn là thành viên của: $4.",
+ "notification-header-user-rights-expiry-change": "Ngày hạn của {{GENDER:$4}}bạn trong {{PLURAL:$3|nhóm|các nhóm}} sau đã được {{GENDER:$1}}thay đổi: $2.",
"notification-header-welcome": "{{GENDER:$2}}Chào mừng $1 đã đến với {{SITENAME}}! Chúng tôi rất vui vì bạn đã tham gia.",
+ "notification-header-mention-summary": "$1 {{GENDER:$2}}đã nhắc đến {{GENDER:$3}}bạn trong lời tóm lược sửa đổi tại <strong>$4</strong>.",
"notification-welcome-linktext": "Chào mừng",
"notification-header-thank-you-1-edit": "{{GENDER:$2}}Bạn vừa thực hiện sửa đổi đầu tiên; cảm ơn và chào mừng!",
"notification-header-thank-you-10-edit": "{{GENDER:$2}}Bạn vừa thực hiện sửa đổi lần thứ 10; cảm ơn và xin hãy tiếp tục!",
@@ -148,6 +154,7 @@
"notification-header-thank-you-1000000-edit": "{{GENDER:$2}}Bạn vừa thực hiện sửa đổi lần thứ một triệu; cảm ơn bạn vì lượng đóng góp anh hùng!",
"notification-link-thank-you-edit": "{{GENDER:$1}}Sửa đổi của bạn",
"notification-link-text-view-edit": "Xem sửa đổi",
+ "notification-link-article-reminder": "Xem trang",
"notification-header-reverted": "{{PLURAL:$4|Sửa đổi|Các sửa đổi}} của bạn tại <strong>$3</strong> đã bị {{GENDER:$2}}lùi lại.",
"notification-header-emailuser": "$1 {{GENDER:$2}}đã gửi bạn bức thư điện tử.",
"notification-edit-talk-page-email-subject2": "$1 đã {{GENDER:$1}}nhắn tin cho bạn trên {{SITENAME}}",
@@ -170,9 +177,9 @@
"echo-email-body-default": "Bạn có thông báo mới tại {{SITENAME}}:\n\n$1",
"echo-email-footer-default-html": "Để kiểm soát các thư điện tử mà chúng tôi gửi cho bạn, hãy <a href=\"$2\" style=\"text-decoration:none; color: #3868B0;\">kiểm tra tùy chọn của bạn</a>.<br />\n$1",
"echo-email-footer-default": "$2\n\nĐể cấu hình hoặc tắt các thông báo qua thư điện tử, hãy xem tùy chọn của bạn:\n{{canonicalurl:{{#special:Preferences}}#mw-prefsection-echo}}\n\n$1",
- "echo-email-plain-footer": "Để kiểm soát các thư điện tử mà chúng tôi gửi cho bạn, hãy kiểm tra tùy chọn của bạn:",
- "echo-email-html-footer-preference-link-text": "kiểm tra tùy chọn của bạn",
- "echo-email-html-footer-with-link": "Để kiểm soát các thư điện tử mà chúng tôi gửi cho bạn, hãy $1.",
+ "echo-email-plain-footer": "Để kiểm soát các thư điện tử mà chúng tôi gửi cho {{GENDER:$1}}bạn, hãy kiểm tra tùy chọn của {{GENDER:$1}}bạn:",
+ "echo-email-html-footer-preference-link-text": "kiểm tra tùy chọn của {{GENDER:$1}}bạn",
+ "echo-email-html-footer-with-link": "Để kiểm soát các thư điện tử mà chúng tôi gửi cho {{GENDER:$2}}bạn, hãy $1.",
"echo-notification-alert": "{{PLURAL:$1|Tin nhắn ($1)|100=Tin nhắn (99+)}}",
"echo-notification-notice": "{{PLURAL:$1|Thông báo ($1)|100=Thông báo (99+)}}",
"echo-notification-alert-text-only": "Tin nhắn",
@@ -194,5 +201,6 @@
"echo-email-batch-link-text-view-all-notifications": "Xem tất cả thông báo",
"notification-header-foreign-alert": "Thêm thông báo từ {{PLURAL:$5|một wiki|$5 wiki}} khác",
"notification-header-foreign-notice": "Thêm thông báo từ {{PLURAL:$5|một wiki nữa|$5 wiki nữa}}",
- "notification-header-foreign-all": "Thêm thông báo từ {{PLURAL:$5|một wiki|$5 wiki}} khác"
+ "notification-header-foreign-all": "Thêm thông báo từ {{PLURAL:$5|một wiki|$5 wiki}} khác",
+ "echo-foreign-wiki-lang": "$1 – $2"
}
diff --git a/Echo/i18n/wa.json b/Echo/i18n/wa.json
index 6fd705c7..b2cc7ab6 100644
--- a/Echo/i18n/wa.json
+++ b/Echo/i18n/wa.json
@@ -5,6 +5,5 @@
]
},
"prefs-echo": "Notifiaedjes",
- "tooltip-pt-notifications-alert": "Vos abranles",
- "tooltip-pt-notifications-message": "Vos messaedjes"
+ "tooltip-pt-notifications-alert": "Vos abranles"
}
diff --git a/Echo/i18n/war.json b/Echo/i18n/war.json
index 07de6e2e..434fcb9e 100644
--- a/Echo/i18n/war.json
+++ b/Echo/i18n/war.json
@@ -7,6 +7,5 @@
"echo-pref-web": "Web",
"echo-pref-email": "Email",
"echo-pref-email-format-html": "HTML",
- "tooltip-pt-notifications-alert": "{{GENDER:|Your}} mga alerto",
- "tooltip-pt-notifications-message": "{{GENDER:|Imo}} mga mensahe"
+ "tooltip-pt-notifications-alert": "{{GENDER:|Your}} mga alerto"
}
diff --git a/Echo/i18n/wo.json b/Echo/i18n/wo.json
index 53d6d502..064b893f 100644
--- a/Echo/i18n/wo.json
+++ b/Echo/i18n/wo.json
@@ -4,6 +4,5 @@
"Ibou"
]
},
- "tooltip-pt-notifications-alert": "{{GENDER:|Say}} dànkaafu",
- "tooltip-pt-notifications-message": "{{GENDER:|Say}} bataaxal"
+ "tooltip-pt-notifications-alert": "{{GENDER:|Say}} dànkaafu"
}
diff --git a/Echo/i18n/wuu.json b/Echo/i18n/wuu.json
index 56b613c9..34725264 100644
--- a/Echo/i18n/wuu.json
+++ b/Echo/i18n/wuu.json
@@ -7,6 +7,5 @@
},
"echo-pref-send-me": "发畀我:",
"echo-pref-send-to": "发送到:",
- "tooltip-pt-notifications-alert": "{{GENDER:|侬}}个提示",
- "tooltip-pt-notifications-message": "{{GENDER:|侬个}}通知"
+ "tooltip-pt-notifications-alert": "{{GENDER:|侬}}个提示"
}
diff --git a/Echo/i18n/xmf.json b/Echo/i18n/xmf.json
index 6a5f1822..c1895567 100644
--- a/Echo/i18n/xmf.json
+++ b/Echo/i18n/xmf.json
@@ -5,7 +5,6 @@
]
},
"tooltip-pt-notifications-alert": "{{GENDER:|თქვანი}} მოშინუეფი",
- "tooltip-pt-notifications-message": "{{GENDER:|თქვანი}} გინაფეფი",
"echo-notification-markasread": "უკითხირო შანუა",
"echo-email-html-footer-preference-link-text": "გეგნაჯინით თქვანი პარამეტრეფს"
}
diff --git a/Echo/i18n/yi.json b/Echo/i18n/yi.json
index e57c6bfc..7b47764f 100644
--- a/Echo/i18n/yi.json
+++ b/Echo/i18n/yi.json
@@ -12,7 +12,6 @@
"prefs-displaynotifications": "ווײַזן אפציעס",
"prefs-echosubscriptions": "זיי מיך מודיע וועגן די דאזיקע געשעענישן",
"prefs-echocrosswiki": "איבערוויקי הודעות",
- "prefs-newmessageindicator": "נייער אנזאג ווייזער",
"echo-pref-send-me": "שיקט מיר:",
"echo-pref-send-to": "שיקט צו:",
"echo-pref-email-format": "ע־פאסט פֿארמאט",
@@ -25,7 +24,6 @@
"echo-pref-email-format-html": "HTML",
"echo-pref-email-format-plain-text": "פשוטער טעקסט",
"echo-pref-cross-wiki-notifications": "ווייזן מודעות פון אנדערע וויקיס",
- "echo-pref-new-message-indicator": "ווײַזן רעדן־בלאט מעלדונג סימן אין מײַן געצייג פאס",
"echo-pref-beta-feature-cross-wiki-message": "דערברייטערטע מודעות",
"echo-learn-more": "לערנען נאך",
"echo-log": "עפֿנטלעך לאגבוך",
@@ -65,7 +63,6 @@
"echo-none": "איר האט נישט קיין אנזאגן.",
"echo-more-info": "נאך אינפארמאציע",
"echo-feedback": "פֿידבעק",
- "echo-popup-footer-special-page-invitation-link": "ניי אױסזען און נייע פֿונקציעס.",
"echo-api-failure": "נישט געווען מעגלעך באקומען אנזאגן.",
"echo-notification-placeholder": "נישט פאראן קיין אנזאגן.",
"echo-notification-placeholder-filters": "קיין מודעות צוגעפאסט צו די קריטעריע.",
@@ -92,15 +89,20 @@
"notification-link-text-what-links-here": "אלע לינקען צו דעם דאזיקן בלאט",
"notification-header-mention-other": "$1 {{GENDER:$2|האט דערמאנט}} {{GENDER:$3|אייך}} אויף <strong>$4</strong> אין \"<strong>$5</strong>\".",
"notification-header-mention-other-nosection": "$1 {{GENDER:$2|האט דערמאנט}} {{GENDER:$3|אייך}} אויף <strong>$4</strong>.",
- "notification-header-mention-user-talkpage-v2": "$1 {{GENDER:$2|האט}} {{GENDER:$3|אײך}} דארמאַנט אױפֿן <strong>באַניצער רעדן־בלאַט {{GENDER:$5|פֿון}} $4</strong> אין \"<strong>$6</strong>\".",
+ "notification-header-mention-user-talkpage-v2": "$1 {{GENDER:$2|האט}} {{GENDER:$3|אײך}} דערמאַנט אױפֿן <strong>באַניצער רעדן־בלאַט {{GENDER:$5|פֿון}} $4</strong> אין \"<strong>$6</strong>\".",
"notification-header-mention-user-talkpage-nosection": "$1 {{GENDER:$2|האט דערמאנט}} {{GENDER:$3|אייך}} אויפֿן <strong>באניצער שמועס בלאט{{GENDER:$5|פֿון}} $4</strong>.",
"notification-header-mention-agent-talkpage": "$1 {{GENDER:$2|האט דערמאנט}} {{GENDER:$3|אייך}} אויף <strong>{{GENDER:$2|זיין|איר|זייער}} שמועס בלאט</strong> אין \"<strong>$4</strong>\".",
+ "notification-header-mention-agent-talkpage-nosection": "$1 {{GENDER:$2|האט דערמאנט}} {{GENDER:$3|אייך}} אויף <strong>{{GENDER:$2|זיין|איר|זייער}} שמועס בלאט</strong>.",
+ "notification-header-mention-article-talkpage": "$1 {{GENDER:$2|האט דערמאנט}} {{GENDER:$3|אייך}} אויפן <strong>$4</strong> שמועס בלאט אין \"<strong>$5</strong>\".",
+ "notification-header-mention-article-talkpage-nosection": "$1 {{GENDER:$2|האט דערמאנט}} {{GENDER:$3|אייך}} אויפן <strong>$4</strong> שמועס בלאט.",
"notification-compact-header-mention-failure-user-unknown": "<strong>באניצער־נאמען עקזיסטירט נישט:</strong> $1",
"notification-compact-header-mention-success": "<strong>{{GENDER:$2|איר האט דערמאנט}}:</strong> $3",
+ "notification-header-user-rights-remove-only": "{{GENDER:$4|אייערע}} באניצער־רעכטן זענען געווארן {{GENDER:$1|געענדערט}}. איר זענט מער נישט קיין מיטגליד אין: $2.",
"notification-header-welcome": "{{GENDER:$2|ברוך הבא}} צו {{SITENAME}}, $1! מיר פֿרייען זיך אז {{GENDER:$2|איר}} זענט דא.",
"notification-welcome-linktext": "ברוך הבא!",
"notification-link-thank-you-edit": "{{GENDER:$1|אייער}} רעדאקטירונג",
"notification-link-text-view-edit": "באקוקן רעדאקטירונג",
+ "notification-link-article-reminder": "באַקוקן בלאַט",
"notification-header-reverted": " {{PLURAL:$4|אייער רעדאקטירונג אויף <strong>$3</strong> איז|אייערע רעדאקטירונגען אויף <strong>$3</strong> זענען}} געווארן {{GENDER:$2|צוריקגעשטעלט}}.",
"notification-header-emailuser": "$1 {{GENDER:$2|האט אייך געשיקט}} א בליצבריוו.",
"notification-edit-talk-page-email-subject2": "$1 {{GENDER:$1|האט אייך געשריבן}} א נייע מעלדונג אינעם {{SITENAME}} וועבזייטל",
diff --git a/Echo/i18n/yue.json b/Echo/i18n/yue.json
index 22f2b4af..4be40839 100644
--- a/Echo/i18n/yue.json
+++ b/Echo/i18n/yue.json
@@ -3,7 +3,8 @@
"authors": [
"William915",
"Wong128hk",
- "Ktchankt"
+ "Ktchankt",
+ "Suzukaze-c"
]
},
"echo-desc": "通知系統",
@@ -11,7 +12,7 @@
"prefs-emailsettings": "電郵選項",
"prefs-displaynotifications": "顯示選項",
"prefs-echosubscriptions": "通知選項",
- "prefs-newmessageindicator": "新留言提示",
+ "prefs-echocrosswiki": "跨維基通知",
"echo-pref-send-me": "幾耐電郵通知一次",
"echo-pref-send-to": "發畀:",
"echo-pref-email-format": "郵件格式︰",
@@ -23,7 +24,6 @@
"echo-pref-email-frequency-weekly": "一個禮拜出一次",
"echo-pref-email-format-html": "HTML",
"echo-pref-email-format-plain-text": "純文字",
- "echo-pref-new-message-indicator": "喺工具列道出新留言提示",
"echo-learn-more": "了解多啲",
"echo-new-messages": "你有新信",
"echo-category-title-edit-user-talk": "傾偈版{{PLURAL:$1|新信}}",
diff --git a/Echo/i18n/zgh.json b/Echo/i18n/zgh.json
index 808f8cbd..ffe1aeb6 100644
--- a/Echo/i18n/zgh.json
+++ b/Echo/i18n/zgh.json
@@ -2,10 +2,12 @@
"@metadata": {
"authors": [
"Amara-Amaziɣ",
- "Aslmad mohamed belarhzali"
+ "Aslmad mohamed belarhzali",
+ "ⵕⴰⵊⵉ"
]
},
- "tooltip-pt-notifications-message": "ⵜⵓⵣⵉⵏⵉⵏ {{GENDER:|ⵏⵏⴽ|ⵏⵏⵎ}}",
+ "echo-new-messages": "ⵍⵍⴰⵏⵜ ⵖⵓⵔⴽ ⵜⵓⵣⵉⵏⵉⵏ ⵜⵉⵎⴰⵢⵏⵓⵜⵉⵏ",
+ "tooltip-pt-notifications-alert": "ⵜⵓⵣⵉⵏⵉⵏ {{GENDER:|ⵏⵏⴽ|ⵏⵏⵎ}}",
"notification-timestamp-today": "ⴰⵙⵙⴰ",
"notification-inbox-filter-read": "ⵖⵔ"
}
diff --git a/Echo/i18n/zh-hans.json b/Echo/i18n/zh-hans.json
index 641cac6e..ff33fc86 100644
--- a/Echo/i18n/zh-hans.json
+++ b/Echo/i18n/zh-hans.json
@@ -41,7 +41,6 @@
"prefs-displaynotifications": "显示选项",
"prefs-echosubscriptions": "通知我这些事件",
"prefs-echocrosswiki": "跨wiki通知",
- "prefs-newmessageindicator": "新消息提示器",
"prefs-blocknotificationslist": "禁言用户",
"echo-pref-send-me": "给我发送:",
"echo-pref-send-to": "发送至:",
@@ -55,8 +54,7 @@
"echo-pref-email-format-html": "HTML",
"echo-pref-email-format-plain-text": "纯文本",
"echo-pref-cross-wiki-notifications": "显示来自其他wiki的通知",
- "echo-pref-notifications-blacklist": "不显示来自这些用户的通知([[mw:Help:Notifications#mute|了解更多]])",
- "echo-pref-new-message-indicator": "在我的工具栏中显示讨论页留言提示器",
+ "echo-pref-notifications-blacklist": "不显示来自这些用户的通知([[mw:Special:MyLanguage/Help:Notifications#mute|了解更多]])",
"echo-pref-beta-feature-cross-wiki-message": "增强通知",
"echo-pref-beta-feature-cross-wiki-description": "使查看与组织通知更加容易。包括跨wiki通知,这将让您看到来自其他wiki的消息。(要接收在指定wiki上的跨wiki通知,您必须在那个wiki激活测试功能。)",
"echo-learn-more": "了解详情",
@@ -111,8 +109,6 @@
"echo-none": "您没有通知。",
"echo-more-info": "更多信息",
"echo-feedback": "反馈",
- "echo-popup-footer-special-page-invitation": "<strong>尝试重新设计的通知页面。</strong>[$2 $1]",
- "echo-popup-footer-special-page-invitation-link": "所有新外观和功能。",
"echo-quotation-marks": "“$1”",
"echo-api-failure": "检索通知失败。",
"echo-api-failure-cross-wiki": "对远程域名的访问已拒绝。",
@@ -142,6 +138,8 @@
"notification-link-text-view-page": "查看页面",
"notification-header-edit-user-talk": "$1在<strong>{{GENDER:$3|您}}的讨论页</strong>{{GENDER:$2|留言}}了。",
"notification-header-edit-user-talk-with-section": "$1在<strong>{{GENDER:$3|您}}的讨论页</strong>的“<strong>$4</strong>”段落{{GENDER:$2|留言}}了。",
+ "notification-compact-header-edit-user-talk": "$1向{{GENDER:$3|您}}{{GENDER:$2|留下}}了一条消息。",
+ "notification-compact-header-edit-user-talk-with-section": "$1在“<strong>$4</strong>”向{{GENDER:$3|您}}{{GENDER:$2|留下}}了一条消息。",
"notification-header-page-linked": "有人在<strong>$4</strong>中加入了<strong>$3</strong>的链接。",
"notification-compact-header-page-linked": "链接自<strong>$1</strong>。",
"notification-bundle-header-page-linked": "有人在{{PLURAL:$5||$5个页面|100=超过99个页面}}中加入了指向<strong>$3</strong>的链接。",
@@ -170,6 +168,7 @@
"notification-header-user-rights-add-and-remove": "{{GENDER:$6|您}}的用户权限已{{GENDER:$1|更改}}。您已被添加至:$2。您不再属于以下用户组的成员:$4。",
"notification-header-user-rights-expiry-change": "{{GENDER:$4|您}}的以下{{PLURAL:$3|用户组}}的成员逾期时间已被{{GENDER:$1|更改}}:$2。",
"notification-header-welcome": "{{GENDER:$2|欢迎}}来到{{SITENAME}},$1!我们很高兴{{GENDER:$2|您}}来到这里。",
+ "notification-header-mention-summary": "$1在<strong>$4</strong>的编辑摘要中{{GENDER:$2|提到}}了{{GENDER:$3|您}}。",
"notification-welcome-linktext": "欢迎",
"notification-header-thank-you-1-edit": "{{GENDER:$2|您}}刚刚作出了{{GENDER:$2|您}}的第一次编辑;感谢{{GENDER:$2|您}},并欢迎您!",
"notification-header-thank-you-10-edit": "{{GENDER:$2|您}}刚刚作出了{{GENDER:$2|您}}的第10次编辑;感谢{{GENDER:$2|您}},请继续保持!",
diff --git a/Echo/i18n/zh-hant.json b/Echo/i18n/zh-hant.json
index b49bad2a..13486ca0 100644
--- a/Echo/i18n/zh-hant.json
+++ b/Echo/i18n/zh-hant.json
@@ -32,7 +32,6 @@
"prefs-displaynotifications": "顯示選項",
"prefs-echosubscriptions": "通知我這些事件",
"prefs-echocrosswiki": "跨 wiki 通知",
- "prefs-newmessageindicator": "新訊息指示器",
"prefs-blocknotificationslist": "禁言用戶",
"echo-pref-send-me": "傳送給我:",
"echo-pref-send-to": "傳送至:",
@@ -46,8 +45,7 @@
"echo-pref-email-format-html": "HTML",
"echo-pref-email-format-plain-text": "純文字",
"echo-pref-cross-wiki-notifications": "顯示來自其他 wiki 的通知",
- "echo-pref-notifications-blacklist": "不顯示來自這些用戶的通知([[mw:Help:Notifications#mute|了解更多]])",
- "echo-pref-new-message-indicator": "在工具列中顯示對話頁面訊息提示工具",
+ "echo-pref-notifications-blacklist": "不顯示來自這些使用者的通知([[mw:Special:MyLanguage/Help:Notifications#mute|了解更多]])",
"echo-pref-beta-feature-cross-wiki-message": "增強通知功能",
"echo-pref-beta-feature-cross-wiki-description": "更容易地檢視與組織通知。此功能包含跨維基通知功能,令使用者可以檢視來自其他維基的訊息。(要在某維基上接收跨維基通知,須在該維基上啟用測試功能。)",
"echo-learn-more": "瞭解更多",
@@ -63,6 +61,7 @@
"echo-category-title-system": "{{PLURAL:$1|系統}}",
"echo-category-title-user-rights": "{{PLURAL:$1|使用者權限變更}}",
"echo-category-title-emailuser": "{{PLURAL:$1|來自其他使用者的郵件}}",
+ "echo-category-title-article-reminder": "頁面{{PLURAL:$1|提示}}",
"echo-pref-tooltip-edit-user-talk": "當有人在我的對話頁面上留下訊息或是回覆留言時通知我。",
"echo-pref-tooltip-article-linked": "當有人從另一頁面連結到我建立的頁面時通知我。",
"echo-pref-tooltip-reverted": "當有人使用還原或取消功能來還原我的編輯時通知我。",
@@ -71,6 +70,7 @@
"echo-pref-tooltip-mention-success": "當我提及某用戶時通知我。",
"echo-pref-tooltip-user-rights": "當有人更改我的使用者權限時通知我。",
"echo-pref-tooltip-emailuser": "當有人向我傳送郵件時通知我。",
+ "echo-pref-tooltip-article-reminder": "當我請求時,通知我有關該頁面的消息。",
"echo-error-no-formatter": "尚未定義通知格式。",
"notifications": "通知",
"tooltip-pt-notifications-alert": "{{GENDER:|您的}}提醒",
@@ -100,8 +100,6 @@
"echo-none": "您沒有任何通知。",
"echo-more-info": "更多資訊",
"echo-feedback": "意見回饋",
- "echo-popup-footer-special-page-invitation": "<strong>試試新設計的通知頁面。</strong> [$2 $1]",
- "echo-popup-footer-special-page-invitation-link": "全新的外觀及功能。",
"echo-api-failure": "擷取通知失敗。",
"echo-api-failure-cross-wiki": "對遠端網域的存取被拒絕。",
"echo-notification-placeholder": "無任何通知。",
@@ -130,9 +128,12 @@
"notification-link-text-view-page": "檢視頁面",
"notification-header-edit-user-talk": "$1 在<strong>{{GENDER:$3|您}}的使用者對話頁面</strong>{{GENDER:$2|留下了}}一則訊息。",
"notification-header-edit-user-talk-with-section": "$1 在<strong>{{GENDER:$3|您}}的使用者對話頁面</strong>中的「<strong>$4</strong>」{{GENDER:$2|留下了}}一則訊息。",
+ "notification-compact-header-edit-user-talk": "$1向{{GENDER:$3|您}}{{GENDER:$2|留下}}了一條訊息。",
+ "notification-compact-header-edit-user-talk-with-section": "$1在「<strong>$4</strong>」向{{GENDER:$3|您}}{{GENDER:$2|留下}}了一條訊息。",
"notification-header-page-linked": "有人在「<strong>$4</strong>」中加入了「<strong>$3</strong>」的連結。",
"notification-compact-header-page-linked": "<strong>$1</strong>連結至本頁。",
"notification-bundle-header-page-linked": "有人在 {{PLURAL:$5||$5 個頁面|100=99+ 個頁面}}中加入了指向「<strong>$3</strong>」的連結。",
+ "notification-header-article-reminder": "{{GENDER:$2|您}}請求提醒的頁面位於<strong>$3</strong>",
"notification-link-text-what-links-here": "連結至本頁的所有頁面",
"notification-header-mention-other": "$1在「<strong>$4</strong>」中的「<strong>$5</strong>」{{GENDER:$2|提到}}了{{GENDER:$3|您}}。",
"notification-header-mention-other-nosection": "$1在「<strong>$4</strong>」中{{GENDER:$2|提到}}了{{GENDER:$3|您}}。",
@@ -142,10 +143,10 @@
"notification-header-mention-agent-talkpage-nosection": "$1在<strong>{{GENDER:$2|他|她|他}}的對話頁</strong>上{{GENDER:$2|提到}}了{{GENDER:$3|您}}。",
"notification-header-mention-article-talkpage": "$1在<strong>$4</strong>討論頁上的「<strong>$5</strong>」{{GENDER:$2|提到}}了{{GENDER:$3|您}}。",
"notification-header-mention-article-talkpage-nosection": "$1在<strong>$4</strong>的討論頁上{{GENDER:$2|提到}}了{{GENDER:$3|您}}。",
- "notification-header-mention-failure-user-unknown": "無法發送{{GENDER:$2|您}}對<strong>$3</strong>的提及,因為找不到該使用者。",
- "notification-header-mention-failure-user-anonymous": "無法發送{{GENDER:$2|您}}對<strong>$3</strong>的提及,因為該使用者為匿名使用者。",
+ "notification-header-mention-failure-user-unknown": "無法傳送{{GENDER:$2|您}}對<strong>$3</strong>的提及,因為找不到該使用者。",
+ "notification-header-mention-failure-user-anonymous": "無法傳送{{GENDER:$2|您}}對<strong>$3</strong>的提及,因為該使用者為匿名使用者。",
"notification-header-mention-failure-too-many": "{{GENDER:$2|您}}試著提及超過 $3 位的{{PLURAL:$3|用戶}},但所有超過上限的提及,都不會發送。",
- "notification-header-mention-failure-bundle": "{{PLURAL:$3|無法}}發送{{GENDER:$2|您}}在<strong>$4</strong>討論頁上的{{PLURAL:$3|提及|$3個提及}}。",
+ "notification-header-mention-failure-bundle": "{{PLURAL:$3|無法}}傳送{{GENDER:$2|您}}在<strong>$4</strong>討論頁上的{{PLURAL:$3|提及|$3個提及}}。",
"notification-compact-header-mention-failure-user-unknown": "<strong>使用者名稱不存在:</strong>$1",
"notification-compact-header-mention-failure-user-anonymous": "<strong>IP是不能被提及的:</strong>$1",
"notification-header-mention-success": "已發出{{GENDER:$2|您}}對<strong>$3</strong>的提及。",
@@ -155,7 +156,9 @@
"notification-header-user-rights-add-only": "{{GENDER:$4|您的}}使用者權限已被{{GENDER:$1|更改}}。您已被添加至:$2。",
"notification-header-user-rights-remove-only": "{{GENDER:$4|您的}}使用者權限已被{{GENDER:$1|更改}}。您已不再是$2的成員。",
"notification-header-user-rights-add-and-remove": "{{GENDER:$6|您的}}使用者權限已被{{GENDER:$1|更改}}。您已被添加至:$2。您已不再是$4的成員。",
+ "notification-header-user-rights-expiry-change": "{{GENDER:$4|您}}以下的{{PLURAL:$3|使用者群組}}成員逾期時間已被{{GENDER:$1|更改}}:$2。",
"notification-header-welcome": "$1,{{GENDER:$2|歡迎}}來到{{SITENAME}}!很高興在這裡見到{{GENDER:$2|您}}。",
+ "notification-header-mention-summary": "$1在<strong>$4</strong>的編輯摘要中{{GENDER:$2|提到}}了{{GENDER:$3|您}}。",
"notification-welcome-linktext": "歡迎",
"notification-header-thank-you-1-edit": "{{GENDER:$2|您}}剛剛作出了{{GENDER:$2|您的}}第一次編輯。謝謝您,歡迎{{GENDER:$2|您}}!",
"notification-header-thank-you-10-edit": "{{GENDER:$2|您}}剛剛作出了{{GENDER:$2|您的}}第十次編輯。謝謝您,請繼續努力!",
@@ -166,6 +169,7 @@
"notification-header-thank-you-1000000-edit": "{{GENDER:$2|您}}剛剛作出了{{GENDER:$2|您的}}第一百萬次編輯。很感謝{{GENDER:$2|您}}驚人的貢獻!",
"notification-link-thank-you-edit": "{{GENDER:$1|您的}}編輯",
"notification-link-text-view-edit": "檢視編輯",
+ "notification-link-article-reminder": "檢視頁面",
"notification-header-reverted": "有人{{GENDER:$2|還原}}了您{{PLURAL:$4|對<strong>$3</strong>所作出的編輯}}。",
"notification-header-emailuser": "$1 向您{{GENDER:$2|傳送了}}一封郵件。",
"notification-edit-talk-page-email-subject2": "$1 在 {{SITENAME}} {{GENDER:$1|留下了}}一則訊息給您。",
diff --git a/Echo/images/betafeatures-icon-notifications-ltr.svg b/Echo/images/betafeatures-icon-notifications-ltr.svg
index 2a55cd92..71f58f56 100644
--- a/Echo/images/betafeatures-icon-notifications-ltr.svg
+++ b/Echo/images/betafeatures-icon-notifications-ltr.svg
@@ -1,27 +1,24 @@
-<?xml version="1.0" encoding="UTF-8" standalone="no"?>
-<svg xmlns="http://www.w3.org/2000/svg" width="264" height="162" viewBox="0 0 264 162" id="svg2">
- <defs id="defs78">
- <clipPath id="jagged-edge">
- <path id="path5121" d="M0 0v152l12 10 12-10 12 10 12-10 12 10 12-10 12 10 12-10 12 10 12-10 12 10 12-10 12 10 12-10 12 10 12-10 12 10 12-10 12 10 12-10 12 10 12-10V0z"/>
- </clipPath>
- </defs>
- <g id="screenshot" clip-path="url(#jagged-edge)">
- <path fill="#fff" d="M263.5 162.25l-263-.5V.5h263z" id="background"/>
- <path fill="#e5e5e5" d="M252 162.496V29H48v133.496z" id="article"/>
- <path fill="#e5e5e5" d="M11 22c0-7.732 6.268-14 14-14s14 6.268 14 14-6.268 14-14 14-14-6.268-14-14z" id="logo"/>
- <path fill="#e5e5e5" d="M38 163.807V58H13v105.807h25z" id="sidebar"/>
- <g fill="#e5e5e5" id="personal-tools">
- <path id="path5129" d="M233 5h26v6h-26V5zm-24 0h22v6h-22zm-24 0h22v6h-22zm-23 0h13v6h-13zm15 0h6v6h-6zm-23 0h6v6h-6z"/>
- </g>
- <g fill="#e5e5e5" id="search">
- <path d="M258 16v4h-92v-4h92m1-1h-94v6h94v-6z" id="path5717"/>
- <path d="M168 17h2v2h-2z" id="icon"/>
- </g>
- <path fill="#e5e5e5" d="M38 45v-5H13v5h25z" id="sitename"/>
- <path fill="#e5e5e5" id="border" d="M0 0v162h264V0zm1 1h262v150.533l-11 9.166-12-10-12 10-12-10-12 10-12-10-12 10-12-10-12 10-12-10-12 10-12-10-12 10-12-10-12 10-12-10-12 10-12-10-12 10-12-10-12 10-11-9.168z"/>
- <path id="path14" d="M177.02 5h6v6h-6z" fill="#36c"/>
- <rect id="rect16" y="18.566" x="140.812" ry=".099" rx=".106" height="93.208" width="78.835" fill="#36c"/>
- <path id="path18" d="M175.692 19l4.537-6 4.536 6" fill="#36c"/>
- <path id="path20" d="M180.23 44.254c-7.437 0-12.783 4.648-12.783 11.62v11.62c0 4.648 0 6.972-4.648 6.972v2.324h34.86v-2.324c-4.65 0-4.65-2.324-4.65-6.972v-11.62c0-6.972-5.344-11.62-12.78-11.62zm-6.973 37.184c0 2.324 3.72 4.648 6.972 4.648 3.253 0 6.97-2.324 6.97-4.648h-13.943z" fill="#fff"/>
- </g>
+<?xml version="1.0" encoding="UTF-8"?>
+<svg xmlns="http://www.w3.org/2000/svg" width="264" height="162" viewBox="0 0 264 162">
+ <defs>
+ <clipPath id="jagged-edge">
+ <path d="M0 0v152l12 10 12-10 12 10 12-10 12 10 12-10 12 10 12-10 12 10 12-10 12 10 12-10 12 10 12-10 12 10 12-10 12 10 12-10 12 10 12-10 12 10 12-10V0z"/>
+ </clipPath>
+ </defs>
+ <g fill="#eaecf0" clip-path="url(#jagged-edge)">
+ <path id="background" fill="#fff" d="M0 0h264v162H0"/>
+ <path id="logo" d="M11 22c0-8 6-14 14-14s14 6 14 14-6 14-14 14-14-6-14-14m27 23v-5H13v5h25"/>
+ <path id="sidebar" d="M38 163V58H13v106h25"/>
+ <path id="personal-tools" d="M233 5h26v6h-26V5zm-24 0h22v6h-22zm-24 0h22v6h-22zm-23 0h13v6h-13zm15 0h6v6h-6zm-23 0h6v6h-6z"/>
+ <g id="search">
+ <path id="input" d="M258 16v4h-92v-4h92m1-1h-94v6h94v-6z"/>
+ <path id="icon" d="M168 17h2v2h-2z"/>
+ </g>
+ <path id="article" d="M252 162V29H48v133z"/>
+ <path id="border" d="M0 0v162h264V0zm1 1h262v150.533l-11 9.166-12-10-12 10-12-10-12 10-12-10-12 10-12-10-12 10-12-10-12 10-12-10-12 10-12-10-12 10-12-10-12 10-12-10-12 10-12-10-12 10-11-9z"/>
+ <path fill="#36c" d="M177.02 5h6v6h-6z"/>
+ <rect fill="#36c" y="18.566" x="140.812" ry=".099" rx=".106" height="93.208" width="78.835"/>
+ <path fill="#36c" d="M175.692 19l4.537-6 4.536 6"/>
+ <path fill="#fff" d="M180.23 44.254c-7.437 0-12.783 4.648-12.783 11.62v11.62c0 4.648 0 6.972-4.648 6.972v2.324h34.86v-2.324c-4.65 0-4.65-2.324-4.65-6.972v-11.62c0-6.972-5.344-11.62-12.78-11.62zm-6.973 37.184c0 2.324 3.72 4.648 6.972 4.648 3.253 0 6.97-2.324 6.97-4.648h-13.943z"/>
+ </g>
</svg>
diff --git a/Echo/images/betafeatures-icon-notifications-rtl.svg b/Echo/images/betafeatures-icon-notifications-rtl.svg
index e6d2be7a..5a2aa0b3 100644
--- a/Echo/images/betafeatures-icon-notifications-rtl.svg
+++ b/Echo/images/betafeatures-icon-notifications-rtl.svg
@@ -1,27 +1,24 @@
-<?xml version="1.0" encoding="UTF-8" standalone="no"?>
-<svg xmlns="http://www.w3.org/2000/svg" width="264" height="162" viewBox="0 0 264 162" id="svg2">
- <defs id="defs78">
- <clipPath id="jagged-edge">
- <path id="path5121" d="M0 0v152l12 10 12-10 12 10 12-10 12 10 12-10 12 10 12-10 12 10 12-10 12 10 12-10 12 10 12-10 12 10 12-10 12 10 12-10 12 10 12-10 12 10 12-10V0z"/>
- </clipPath>
- </defs>
- <g transform="matrix(-1 0 0 1 264 0)" id="screenshot" clip-path="url(#jagged-edge)">
- <path d="M263.5 162.25l-263-.5V.5h263z" id="background" fill="#fff"/>
- <path d="M252 162.496V29H48v133.496z" id="article" fill="#e5e5e5"/>
- <path d="M11 22c0-7.732 6.268-14 14-14s14 6.268 14 14-6.268 14-14 14-14-6.268-14-14z" id="logo" fill="#e5e5e5"/>
- <path d="M38 163.807V58H13v105.807h25z" id="sidebar" fill="#e5e5e5"/>
- <g id="personal-tools" fill="#e5e5e5">
- <path id="path5129" d="M233 5h26v6h-26V5zm-24 0h22v6h-22zm-24 0h22v6h-22zm-23 0h13v6h-13zm15 0h6v6h-6zm-23 0h6v6h-6z"/>
- </g>
- <g id="search" fill="#e5e5e5">
- <path d="M258 16v4h-92v-4h92m1-1h-94v6h94v-6z" id="path5717"/>
- <path d="M168 17h2v2h-2z" id="icon"/>
- </g>
- <path d="M38 45v-5H13v5h25z" id="sitename" fill="#e5e5e5"/>
- <path id="border" d="M0 0v162h264V0zm1 1h262v150.533l-11 9.166-12-10-12 10-12-10-12 10-12-10-12 10-12-10-12 10-12-10-12 10-12-10-12 10-12-10-12 10-12-10-12 10-12-10-12 10-12-10-12 10-11-9.168z" fill="#e5e5e5"/>
- <path id="path14" d="M177.02 5h6v6h-6z" fill="#36c"/>
- <rect id="rect16" y="18.566" x="140.812" ry=".099" rx=".106" height="93.208" width="78.835" fill="#36c"/>
- <path id="path18" d="M175.692 19l4.537-6 4.536 6" fill="#36c"/>
- <path id="path20" d="M180.23 44.254c-7.437 0-12.783 4.648-12.783 11.62v11.62c0 4.648 0 6.972-4.648 6.972v2.324h34.86v-2.324c-4.65 0-4.65-2.324-4.65-6.972v-11.62c0-6.972-5.344-11.62-12.78-11.62zm-6.973 37.184c0 2.324 3.72 4.648 6.972 4.648 3.253 0 6.97-2.324 6.97-4.648h-13.943z" fill="#fff"/>
- </g>
+<?xml version="1.0" encoding="UTF-8"?>
+<svg xmlns="http://www.w3.org/2000/svg" width="264" height="162" viewBox="0 0 264 162">
+ <defs>
+ <clipPath id="jagged-edge">
+ <path d="M0 0v152l12 10 12-10 12 10 12-10 12 10 12-10 12 10 12-10 12 10 12-10 12 10 12-10 12 10 12-10 12 10 12-10 12 10 12-10 12 10 12-10 12 10 12-10V0z"/>
+ </clipPath>
+ </defs>
+ <g fill="#eaecf0" transform="matrix(-1 0 0 1 264 0)" clip-path="url(#jagged-edge)">
+ <path id="background" fill="#fff" d="M0 0h264v162H0"/>
+ <path id="logo" d="M11 22c0-8 6-14 14-14s14 6 14 14-6 14-14 14-14-6-14-14m27 23v-5H13v5h25"/>
+ <path id="sidebar" d="M38 163V58H13v106h25"/>
+ <path id="personal-tools" d="M233 5h26v6h-26V5zm-24 0h22v6h-22zm-24 0h22v6h-22zm-23 0h13v6h-13zm15 0h6v6h-6zm-23 0h6v6h-6z"/>
+ <g id="search">
+ <path id="input" d="M258 16v4h-92v-4h92m1-1h-94v6h94v-6z"/>
+ <path id="icon" d="M168 17h2v2h-2z"/>
+ </g>
+ <path id="article" d="M252 162V29H48v133z"/>
+ <path id="border" d="M0 0v162h264V0zm1 1h262v150.533l-11 9.166-12-10-12 10-12-10-12 10-12-10-12 10-12-10-12 10-12-10-12 10-12-10-12 10-12-10-12 10-12-10-12 10-12-10-12 10-12-10-12 10-11-9z"/>
+ <path fill="#36c" d="M177.02 5h6v6h-6z"/>
+ <rect fill="#36c" y="18.566" x="140.812" ry=".099" rx=".106" height="93.208" width="78.835"/>
+ <path fill="#36c" d="M175.692 19l4.537-6 4.536 6"/>
+ <path fill="#fff" d="M180.23 44.254c-7.437 0-12.783 4.648-12.783 11.62v11.62c0 4.648 0 6.972-4.648 6.972v2.324h34.86v-2.324c-4.65 0-4.65-2.324-4.65-6.972v-11.62c0-6.972-5.344-11.62-12.78-11.62zm-6.973 37.184c0 2.324 3.72 4.648 6.972 4.648 3.253 0 6.97-2.324 6.97-4.648h-13.943z"/>
+ </g>
</svg>
diff --git a/Echo/includes/AttributeManager.php b/Echo/includes/AttributeManager.php
index d918f196..72e609b3 100644
--- a/Echo/includes/AttributeManager.php
+++ b/Echo/includes/AttributeManager.php
@@ -7,36 +7,26 @@
class EchoAttributeManager {
/**
- * @var array
+ * @var array[]
*/
protected $notifications;
/**
- * @var array
+ * @var array[]
*/
protected $categories;
/**
- * @var array
+ * @var bool[]
*/
protected $defaultNotifyTypeAvailability;
/**
- * @var array
+ * @var array[]
*/
protected $notifyTypeAvailabilityByCategory;
/**
- * @var array
- */
- protected $dismissabilityByCategory;
-
- /**
- * @var array
- */
- protected $notifiers;
-
- /**
* Notification section constant
*/
const ALERT = 'alert';
@@ -47,7 +37,7 @@ class EchoAttributeManager {
/**
* Notifications are broken down to two sections, default is alert
- * @var array
+ * @var string[]
*/
public static $sections = [
self::ALERT,
@@ -62,32 +52,31 @@ class EchoAttributeManager {
/**
* An EchoAttributeManager instance created from global variables
- * @param EchoAttributeManager
+ * @var self
*/
protected static $globalVarInstance = null;
/**
- * @param array $notifications Notification attributes
- * @param array $categories Notification categories
- * @param array $defaultNotifyTypeAvailability Associative array with output
+ * @param array[] $notifications Notification attributes
+ * @param array[] $categories Notification categories
+ * @param bool[] $defaultNotifyTypeAvailability Associative array with output
* formats as keys and whether they are available as boolean values.
- * @param array $notifyTypeAvailabilityByCategory Associative array with
+ * @param array[] $notifyTypeAvailabilityByCategory Associative array with
* categories as keys and value an associative array as with
* $defaultNotifyTypeAvailability.
- * @param array $notifiers Associative array mapping notify types to notifier
- * that handles them
*/
- public function __construct( array $notifications, array $categories, array $defaultNotifyTypeAvailability, array $notifyTypeAvailabilityByCategory, array $notifiers ) {
+ public function __construct(
+ array $notifications,
+ array $categories,
+ array $defaultNotifyTypeAvailability,
+ array $notifyTypeAvailabilityByCategory
+ ) {
// Extensions can define their own notifications and categories
$this->notifications = $notifications;
$this->categories = $categories;
$this->defaultNotifyTypeAvailability = $defaultNotifyTypeAvailability;
$this->notifyTypeAvailabilityByCategory = $notifyTypeAvailabilityByCategory;
-
- $this->dismissabilityByCategory = null;
-
- $this->notifiers = $notifiers;
}
/**
@@ -95,11 +84,17 @@ class EchoAttributeManager {
* @return EchoAttributeManager
*/
public static function newFromGlobalVars() {
- global $wgEchoNotifications, $wgEchoNotificationCategories, $wgDefaultNotifyTypeAvailability, $wgNotifyTypeAvailabilityByCategory, $wgEchoNotifiers;
+ global $wgEchoNotifications, $wgEchoNotificationCategories,
+ $wgDefaultNotifyTypeAvailability, $wgNotifyTypeAvailabilityByCategory;
// Unit test may alter the global data for test purpose
if ( defined( 'MW_PHPUNIT_TEST' ) ) {
- return new self( $wgEchoNotifications, $wgEchoNotificationCategories, $wgDefaultNotifyTypeAvailability, $wgNotifyTypeAvailabilityByCategory, $wgEchoNotifiers );
+ return new self(
+ $wgEchoNotifications,
+ $wgEchoNotificationCategories,
+ $wgDefaultNotifyTypeAvailability,
+ $wgNotifyTypeAvailabilityByCategory
+ );
}
if ( self::$globalVarInstance === null ) {
@@ -107,8 +102,7 @@ class EchoAttributeManager {
$wgEchoNotifications,
$wgEchoNotificationCategories,
$wgDefaultNotifyTypeAvailability,
- $wgNotifyTypeAvailabilityByCategory,
- $wgEchoNotifiers
+ $wgNotifyTypeAvailabilityByCategory
);
}
@@ -181,7 +175,7 @@ class EchoAttributeManager {
*
* @param string $section Internal section name, one of the values from self::$sections
*
- * @return array Array of notification types in this section
+ * @return string[] Array of notification types in this section
*/
public function getEventsForSection( $section ) {
$events = [];
@@ -215,7 +209,7 @@ class EchoAttributeManager {
/**
* Gets array of internal category names
*
- * @return array All internal names
+ * @return string[] All internal names
*/
public function getInternalCategoryNames() {
return array_keys( $this->categories );
@@ -292,7 +286,7 @@ class EchoAttributeManager {
* Gets an associative array mapping categories to the notification types in
* the category
*
- * @return array Associative array with category as key
+ * @return array[] Associative array with category as key
*/
public function getEventsByCategory() {
$eventsByCategory = [];
@@ -305,7 +299,7 @@ class EchoAttributeManager {
$category = $notificationDetails['category'];
if ( isset( $eventsByCategory[$category] ) ) {
// Only real categories. Currently, this excludes the 'foreign'
- // psuedo-category.
+ // pseudo-category.
$eventsByCategory[$category][] = $notificationType;
}
}
diff --git a/Echo/includes/Bundleable.php b/Echo/includes/Bundleable.php
index 2469027f..1610328e 100644
--- a/Echo/includes/Bundleable.php
+++ b/Echo/includes/Bundleable.php
@@ -1,8 +1,6 @@
<?php
/**
- * Interface Bundleable
- *
* Indicates that an object can be bundled.
*/
interface Bundleable {
diff --git a/Echo/includes/ContainmentSet.php b/Echo/includes/ContainmentSet.php
deleted file mode 100644
index 4b6ce1f8..00000000
--- a/Echo/includes/ContainmentSet.php
+++ /dev/null
@@ -1,270 +0,0 @@
-<?php
-
-/**
- * Interface providing list of contained values and an optional cache key to go along with it.
- */
-interface EchoContainmentList {
- /**
- * @return array The values contained within this list.
- */
- public function getValues();
-
- /**
- * @return string A string suitable for appending to the cache key prefix to facilitate
- * cache busting when the underlying data changes, or a blank string if
- * not relevant.
- */
- public function getCacheKey();
-}
-
-/**
- * Utilizes EchoContainmentList interface to provide a fluent interface to whitelist/blacklist
- * from multiple sources like global variables, wiki pages, etc.
- *
- * Initialize:
- * $cache = ObjectCache::getLocalClusterIntance();
- * $set = new EchoContainmentSet;
- * $set->addArray( $wgSomeGlobalParameter );
- * $set->addOnWiki( NS_USER, 'Foo/bar-baz', $cache, 'some_user_specific_cache_key' );
- *
- * Usage:
- * if ( $set->contains( 'SomeUser' ) ) {
- * ...
- * }
- */
-class EchoContainmentSet {
- /**
- * @var EchoContainmentList[]
- */
- protected $lists = [];
-
- /**
- * @var User
- */
- protected $recipient;
-
- public function __construct( User $recipient ) {
- $this->recipient = $recipient;
- }
-
- /**
- * Add an EchoContainmentList to the set of lists checked by self::contains()
- *
- * @param EchoContainmentList $list
- */
- public function add( EchoContainmentList $list ) {
- $this->lists[] = $list;
- }
-
- /**
- * Add a php array to the set of lists checked by self::contains()
- *
- * @param array $list
- */
- public function addArray( array $list ) {
- $this->add( new EchoArrayList( $list ) );
- }
-
- /**
- * Add a list from a user preference to the set of lists checked by self::contains().
- *
- * @param string $preferenceName
- */
- public function addFromUserOption( $preferenceName ) {
- $preference = $this->recipient->getOption( $preferenceName );
-
- if ( $preference ) {
- $items = explode( "\n", $preference );
-
- $this->addArray( $items );
- }
- }
-
- /**
- * Add a list from a wiki page to the set of lists checked by self::contains(). Data
- * from wiki pages is cached via the BagOStuff. Caching is disabled when passing a null
- * $cache object.
- *
- * @param int $namespace An NS_* constant representing the mediawiki namespace of the page containing the list.
- * @param string $title The title of the page containing the list.
- * @param BagOStuff $cache An object to cache the page with or null for no cache.
- * @param string $cacheKeyPrefix A prefix to be combined with the pages latest revision id and used as a cache key.
- *
- * @throws MWException
- */
- public function addOnWiki( $namespace, $title, BagOStuff $cache = null, $cacheKeyPrefix = '' ) {
- $list = new EchoOnWikiList( $namespace, $title );
- if ( $cache ) {
- if ( $cacheKeyPrefix === '' ) {
- throw new MWException( 'Cache requires providing a cache key prefix.' );
- }
- $list = new EchoCachedList( $cache, $cacheKeyPrefix, $list );
- }
- $this->add( $list );
- }
-
- /**
- * Test the wrapped lists for existence of $value
- *
- * @param mixed $value The value to look for
- * @return bool True when the set contains the provided value
- */
- public function contains( $value ) {
- foreach ( $this->lists as $list ) {
- if ( array_search( $value, $list->getValues() ) !== false ) {
- return true;
- }
- }
-
- return false;
- }
-}
-
-/**
- * Implements the EchoContainmentList interface for php arrays. Possible source
- * of arrays includes $wg* global variables initialized from extensions or global
- * wiki config.
- */
-class EchoArrayList implements EchoContainmentList {
- /**
- * @var array
- */
- protected $list;
-
- /**
- * @param array $list
- */
- public function __construct( array $list ) {
- $this->list = $list;
- }
-
- /**
- * @inheritDoc
- */
- public function getValues() {
- return $this->list;
- }
-
- /**
- * @inheritDoc
- */
- public function getCacheKey() {
- return '';
- }
-}
-
-/**
- * Implements EchoContainmentList interface for sourcing a list of items from a wiki
- * page. Uses the pages latest revision ID as cache key.
- */
-class EchoOnWikiList implements EchoContainmentList {
- /**
- * @var Title|null A title object representing the page to source the list from,
- * or null if the page does not exist.
- */
- protected $title;
-
- /**
- * @param int $titleNs An NS_* constant representing the mediawiki namespace of the page
- * @param string $titleString String portion of the wiki page title
- */
- public function __construct( $titleNs, $titleString ) {
- $title = Title::newFromText( $titleString, $titleNs );
- if ( $title !== null && $title->getArticleId() ) {
- $this->title = $title;
- }
- }
-
- /**
- * @inheritDoc
- */
- public function getValues() {
- if ( !$this->title ) {
- return [];
- }
-
- $article = WikiPage::newFromID( $this->title->getArticleId() );
- if ( $article === null || !$article->exists() ) {
- return [];
- }
- $text = ContentHandler::getContentText( $article->getContent() );
- if ( $text === null ) {
- return [];
- }
- return array_filter( array_map( 'trim', explode( "\n", $text ) ) );
- }
-
- /**
- * @inheritDoc
- */
- public function getCacheKey() {
- if ( !$this->title ) {
- return '';
- }
-
- return $this->title->getLatestRevID();
- }
-}
-
-/**
- * Caches an EchoContainmentList within a BagOStuff(memcache, etc) to prevent needing
- * to load the nested list from a potentially slow source (mysql, etc).
- */
-class EchoCachedList implements EchoContainmentList {
- const ONE_WEEK = 4233600;
- const ONE_DAY = 86400;
-
- protected $cache;
- protected $partialCacheKey;
- protected $nestedList;
- protected $timeout;
- private $result;
-
- /**
- * @param BagOStuff $cache Bag to stored cached data in.
- * @param string $partialCacheKey Partial cache key, $nestedList->getCacheKey() will be appended
- * to this to construct the cache key used.
- * @param EchoContainmentList $nestedList The nested EchoContainmentList to cache the result of.
- * @param int $timeout How long in seconds to cache the nested list, defaults to 1 week.
- */
- public function __construct( BagOStuff $cache, $partialCacheKey, EchoContainmentList $nestedList, $timeout = self::ONE_WEEK ) {
- $this->cache = $cache;
- $this->partialCacheKey = $partialCacheKey;
- $this->nestedList = $nestedList;
- $this->timeout = $timeout;
- }
-
- /**
- * @inheritDoc
- */
- public function getValues() {
- if ( $this->result ) {
- return $this->result;
- }
-
- $cacheKey = $this->getCacheKey();
- $fetched = $this->cache->get( $cacheKey );
- if ( is_array( $fetched ) ) {
- return $this->result = $fetched;
- }
-
- $result = $this->nestedList->getValues();
- if ( !is_array( $result ) ) {
- throw new MWException( sprintf(
- "Expected array but received '%s' from '%s::getValues'",
- is_object( $result ) ? get_class( $result ) : gettype( $result ),
- get_class( $this->nestedList )
- ) );
- }
- $this->cache->set( $cacheKey, $result, $this->timeout );
-
- return $this->result = $result;
- }
-
- /**
- * @inheritDoc
- */
- public function getCacheKey() {
- return $this->partialCacheKey . '_' . $this->nestedList->getCacheKey();
- }
-}
diff --git a/Echo/includes/DataOutputFormatter.php b/Echo/includes/DataOutputFormatter.php
index 58eec3a1..7e0badd1 100644
--- a/Echo/includes/DataOutputFormatter.php
+++ b/Echo/includes/DataOutputFormatter.php
@@ -6,7 +6,7 @@
class EchoDataOutputFormatter {
/**
- * @var array type => class
+ * @var string[] type => class
*/
protected static $formatters = [
'flyout' => 'EchoFlyoutFormatter',
@@ -18,13 +18,23 @@ class EchoDataOutputFormatter {
/**
* Format a notification for a user in the format specified
*
+ * This method returns an array of data, some of it html
+ * escaped, some of it not. This confuses phan-taint-check,
+ * so mark it as safe for html and safe to be escaped again.
+ * @return-taint onlysafefor_htmlnoent
+ *
* @param EchoNotification $notification
- * @param string|bool $format output format, false to not format any notifications
+ * @param string|false $format Output format, false to not format any notifications
* @param User $user the target user viewing the notification
* @param Language $lang Language to format the notification in
- * @return array|bool false if it could not be formatted
+ * @return array|false False if it could not be formatted
*/
- public static function formatOutput( EchoNotification $notification, $format = false, User $user, Language $lang ) {
+ public static function formatOutput(
+ EchoNotification $notification,
+ $format = false,
+ User $user,
+ Language $lang
+ ) {
$event = $notification->getEvent();
$timestamp = $notification->getTimestamp();
$utcTimestampIso8601 = wfTimestamp( TS_ISO_8601, $timestamp );
@@ -70,6 +80,7 @@ class EchoDataOutputFormatter {
'id' => $event->getId(),
'type' => $event->getType(),
'category' => $event->getCategory(),
+ 'section' => $event->getSection(),
'timestamp' => [
// ISO 8601 is supposed to be the *only* format used for
// date output, but back-compat...
@@ -141,15 +152,20 @@ class EchoDataOutputFormatter {
}
$output['*'] = $formatted;
- if ( $notification->getBundledNotifications() && self::isBundleExpandable( $event->getType() ) ) {
- $output['bundledNotifications'] = array_values( array_filter( array_map( function ( EchoNotification $notification ) use ( $format, $user, $lang ) {
- // remove nested notifications to
- // - ensure they are formatted as single notifications (not bundled)
- // - prevent further re-entrance on the current notification
- $notification->setBundledNotifications( [] );
- $notification->getEvent()->setBundledEvents( [] );
- return self::formatOutput( $notification, $format, $user, $lang );
- }, array_merge( [ $notification ], $notification->getBundledNotifications() ) ) ) );
+ if ( $notification->getBundledNotifications() &&
+ self::isBundleExpandable( $event->getType() )
+ ) {
+ $output['bundledNotifications'] = array_values( array_filter( array_map(
+ function ( EchoNotification $notification ) use ( $format, $user, $lang ) {
+ // remove nested notifications to
+ // - ensure they are formatted as single notifications (not bundled)
+ // - prevent further re-entrance on the current notification
+ $notification->setBundledNotifications( [] );
+ $notification->getEvent()->setBundledEvents( [] );
+ return self::formatOutput( $notification, $format, $user, $lang );
+ },
+ array_merge( [ $notification ], $notification->getBundledNotifications() )
+ ) ) );
}
}
@@ -161,7 +177,7 @@ class EchoDataOutputFormatter {
* @param User $user
* @param string $format
* @param Language $lang
- * @return string|bool false if it could not be formatted
+ * @return string[]|string|false False if it could not be formatted
*/
protected static function formatNotification( EchoEvent $event, User $user, $format, $lang ) {
if ( isset( self::$formatters[$format] ) ) {
@@ -191,8 +207,8 @@ class EchoDataOutputFormatter {
/**
* Helper function for converting UTC timezone to a user's timezone
*
- * @param User
- * @param string
+ * @param User $user
+ * @param string $ts
* @param int $format output format
*
* @return string
@@ -210,7 +226,8 @@ class EchoDataOutputFormatter {
*/
public static function isBundleExpandable( $type ) {
global $wgEchoNotifications;
- return isset( $wgEchoNotifications[$type]['bundle']['expandable'] ) && $wgEchoNotifications[$type]['bundle']['expandable'];
+ return isset( $wgEchoNotifications[$type]['bundle']['expandable'] )
+ && $wgEchoNotifications[$type]['bundle']['expandable'];
}
}
diff --git a/Echo/includes/DeferredMarkAsDeletedUpdate.php b/Echo/includes/DeferredMarkAsDeletedUpdate.php
index 3a384466..8b0ba1a7 100644
--- a/Echo/includes/DeferredMarkAsDeletedUpdate.php
+++ b/Echo/includes/DeferredMarkAsDeletedUpdate.php
@@ -1,4 +1,5 @@
<?php
+
use MediaWiki\Logger\LoggerFactory;
/**
@@ -7,7 +8,7 @@ use MediaWiki\Logger\LoggerFactory;
*/
class EchoDeferredMarkAsDeletedUpdate implements DeferrableUpdate {
/**
- * @var array
+ * @var EchoEvent[]
*/
protected $events = [];
diff --git a/Echo/includes/DiscussionParser.php b/Echo/includes/DiscussionParser.php
index 11d5e7fe..f83e80f2 100644
--- a/Echo/includes/DiscussionParser.php
+++ b/Echo/includes/DiscussionParser.php
@@ -3,7 +3,7 @@
use MediaWiki\MediaWikiServices;
abstract class EchoDiscussionParser {
- const HEADER_REGEX = '^(==+)\s*([^=].*)\s*\1$';
+ const HEADER_REGEX = '^(==+)\h*([^=].*)\h*\1$';
static protected $timestampRegex;
static protected $revisionInterpretationCache = [];
@@ -14,16 +14,17 @@ abstract class EchoDiscussionParser {
* the discussion-related actions that occurred in that Revision.
*
* @param Revision $revision
+ * @param bool $isRevert
* @return null
*/
- static function generateEventsForRevision( Revision $revision ) {
+ static function generateEventsForRevision( Revision $revision, $isRevert ) {
global $wgEchoMentionsOnMultipleSectionEdits;
global $wgEchoMentionOnChanges;
// use slave database if there is a previous revision
if ( $revision->getPrevious() ) {
$title = Title::newFromID( $revision->getPage() );
- // use master database for new page
+ // use master database for new page
} else {
$title = Title::newFromID( $revision->getPage(), Title::GAID_FOR_UPDATE );
}
@@ -95,29 +96,64 @@ abstract class EchoDiscussionParser {
}
}
}
+
+ // Notify users mentioned in edit summary
+ global $wgEchoMaxMentionsInEditSummary;
+
+ if ( $wgEchoMaxMentionsInEditSummary > 0 && !$user->isBot() && !$isRevert ) {
+ $summaryParser = new EchoSummaryParser();
+ $usersInSummary = $summaryParser->parse( $revision->getComment() );
+
+ // Don't allow pinging yourself
+ unset( $usersInSummary[$userName] );
+
+ $count = 0;
+ $mentionedUsers = [];
+ foreach ( $usersInSummary as $summaryUser ) {
+ if ( $summaryUser->getTalkPage()->equals( $title ) ) {
+ // Users already get a ping when their talk page is edited
+ continue;
+ }
+ if ( $count >= $wgEchoMaxMentionsInEditSummary ) {
+ break;
+ }
+ $mentionedUsers[] = $summaryUser;
+ $count++;
+ }
+
+ if ( $mentionedUsers ) {
+ $info = [
+ 'type' => 'mention-summary',
+ 'title' => $title,
+ 'extra' => [
+ 'revid' => $revision->getId(),
+ 'mentioned-users' => $mentionedUsers,
+ ],
+ 'agent' => $user,
+ ];
+ EchoEvent::create( $info );
+ }
+ }
}
/**
* Attempts to determine what section title the edit was performed under (if any)
*
- * @param array $interpretation Results of self::getChangeInterpretationForRevision
- * @return array Array containing section title and text
- * @param Title $title
+ * @param array[] $interpretation Results of {@see getChangeInterpretationForRevision}
+ * @param Title|null $title
+ * @return string[] Array containing section title and text
*/
public static function detectSectionTitleAndText( array $interpretation, Title $title = null ) {
- global $wgLang;
$header = $snippet = '';
$found = false;
- StubObject::unstub( $wgLang );
-
foreach ( $interpretation as $action ) {
switch ( $action['type'] ) {
case 'add-comment':
$header = self::extractHeader( $action['full-section'] );
$snippet = self::getTextSnippet(
self::stripSignature( self::stripHeader( $action['content'] ), $title ),
- $wgLang,
+ RequestContext::getMain()->getLanguage(),
150,
$title );
break;
@@ -125,7 +161,7 @@ abstract class EchoDiscussionParser {
$header = self::extractHeader( $action['content'] );
$snippet = self::getTextSnippet(
self::stripSignature( self::stripHeader( $action['content'] ), $title ),
- $wgLang,
+ RequestContext::getMain()->getLanguage(),
150,
$title );
break;
@@ -151,7 +187,7 @@ abstract class EchoDiscussionParser {
* For an action taken on a talk page, notify users whose user pages
* are linked.
* @param string $header The subject line for the discussion.
- * @param array $userLinks
+ * @param int[] $userLinks
* @param string $content The content of the post, as a wikitext string.
* @param Revision $revision
* @param User $agent The user who made the comment.
@@ -273,6 +309,9 @@ abstract class EchoDiscussionParser {
}
/**
+ * @param Title $title
+ * @param int $revisionUserId
+ * @param int[] $userLinks
* @return array[]
* Set of arrays containing valid mentions and possible intended but failed mentions.
* - [validMentions]: An array of valid users to mention with ID => ID.
@@ -349,7 +388,9 @@ abstract class EchoDiscussionParser {
}
/**
- * @return bool|array
+ * @param string $content
+ * @param Title $title
+ * @return int[]|false
* Array of links in the user namespace with DBKey => ID.
*/
private static function getUserLinks( $content, Title $title ) {
@@ -401,7 +442,7 @@ abstract class EchoDiscussionParser {
*
* @param Revision $revision
* @see EchoDiscussionParser::interpretDiff
- * @return array see interpretDiff for details.
+ * @return array[] See {@see interpretDiff} for details.
*/
static function getChangeInterpretationForRevision( Revision $revision ) {
if ( $revision->getId() && isset( self::$revisionInterpretationCache[$revision->getId()] ) ) {
@@ -437,8 +478,8 @@ abstract class EchoDiscussionParser {
* @todo Expand recognisable actions.
*
* @param array $changes Output of EchoEvent::getMachineReadableDiff
- * @param string $username Username
- * @param Title $title
+ * @param string $username
+ * @param Title|null $title
* @return array[] Array of associative arrays.
*
* Each entry represents an action, which is classified in the 'action' field.
@@ -484,12 +525,12 @@ abstract class EchoDiscussionParser {
// The \A means the regex must match at the beginning of the string.
// This is slightly different than ^ which matches beginning of each
// line in multiline mode.
- $startSection = preg_match( "/\A" . self::HEADER_REGEX . '/um', $content );
+ $startSection = preg_match( '/\A' . self::HEADER_REGEX . '/um', $content );
$sectionCount = self::getSectionCount( $content );
$signedUsers = array_keys( self::extractSignatures( $content, $title ) );
if (
- count( $signedUsers ) == 1 &&
+ count( $signedUsers ) === 1 &&
in_array( $username, $signedUsers )
) {
if ( $sectionCount === 0 ) {
@@ -532,7 +573,7 @@ abstract class EchoDiscussionParser {
}
}
}
- } elseif ( count( $signedUsers ) >= 1 ) {
+ } elseif ( $signedUsers !== [] ) {
$actions[] = [
'type' => 'unknown-multi-signed-addition',
'content' => $content,
@@ -594,11 +635,11 @@ abstract class EchoDiscussionParser {
/**
* Converts actions of type "unknown-change" to "unknown-signed-change" if the change is in a signed section.
*
- * @param array $signedSections Array of arrays containing first and last line number of signed sections
- * @param array $actions
- * @return array converted actions
+ * @param array[] $signedSections Array of arrays containing first and last line number of signed sections
+ * @param array[] $actions
+ * @return array[] Converted actions
*/
- static function convertToUnknownSignedChanges( $signedSections, $actions ) {
+ static function convertToUnknownSignedChanges( array $signedSections, array $actions ) {
return array_map( function ( $action ) use( $signedSections ) {
if (
$action['type'] === 'unknown-change' &&
@@ -616,7 +657,7 @@ abstract class EchoDiscussionParser {
}, $actions );
}
- static function isInSignedSection( $line, $signedSections ) {
+ static function isInSignedSection( $line, array $signedSections ) {
foreach ( $signedSections as $section ) {
if ( $line > $section[0] && $line <= $section[1] ) {
return true;
@@ -644,9 +685,9 @@ abstract class EchoDiscussionParser {
/**
* Given a line number and a text, find the first and last line of the section the line number is in.
* If there are subsections, the last line index will be the line before the beginning of the first subsection.
- * @param $offset line number
- * @param $lines
- * @return array tuple [$firstLine, $lastLine]
+ * @param int $offset line number
+ * @param string[] $lines
+ * @return int[] Tuple [$firstLine, $lastLine]
*/
static function getSectionSpan( $offset, $lines ) {
return [
@@ -658,7 +699,7 @@ abstract class EchoDiscussionParser {
/**
* Finds the line number of the start of the section that $offset is in.
* @param int $offset
- * @param array $lines
+ * @param string[] $lines
* @return int
*/
static function getSectionStartIndex( $offset, array $lines ) {
@@ -768,7 +809,7 @@ abstract class EchoDiscussionParser {
* Strips out a signature if possible.
*
* @param string $text The wikitext to strip
- * @param Title $title
+ * @param Title|null $title
* @return string
*/
static function stripSignature( $text, Title $title = null ) {
@@ -779,11 +820,13 @@ abstract class EchoDiscussionParser {
return substr( $text, 0, $timestampPos );
}
- // Use truncate() instead of truncateHTML() because truncateHTML()
- // would not strip signature if the text contains < or &
- global $wgContLang;
-
- return $wgContLang->truncate( $text, $output[0], '' );
+ // Use truncateForDatabase() instead of truncateHTML() because
+ // truncateHTML() would not strip signature if the text contains
+ // < or &. (And we can't use truncateForVisual() because
+ // self::getUserFromLine() returns byte offsets, not character
+ // offsets.)
+ return MediaWikiServices::getInstance()->getContentLanguage()
+ ->truncateForDatabase( $text, $output[0], '' );
}
/**
@@ -803,7 +846,7 @@ abstract class EchoDiscussionParser {
* @param string $text The text to check.
* @param User|bool $user If set, will only return true if the comment is
* signed by this user.
- * @param Title $title
+ * @param Title|null $title
* @return bool
*/
static function isSignedComment( $text, $user = false, Title $title = null ) {
@@ -824,14 +867,13 @@ abstract class EchoDiscussionParser {
* Finds the start position, if any, of the timestamp on a line
*
* @param string $line The line to search for a signature on
- * @return int|bool Integer position
+ * @return int|false Integer position
*/
static function getTimestampPosition( $line ) {
$timestampRegex = self::getTimestampRegex();
- $endOfLine = self::getLineEndingRegex();
$tsMatches = [];
if ( !preg_match(
- "/$timestampRegex$endOfLine/mu",
+ "/$timestampRegex/mu",
$line,
$tsMatches,
PREG_OFFSET_CAPTURE
@@ -849,7 +891,7 @@ abstract class EchoDiscussionParser {
* @param string $oldText The "left hand side" of the diff.
* @param string $newText The "right hand side" of the diff.
* @throws MWException
- * @return array of changes.
+ * @return array[] Array of changes.
* Each change consists of:
* * An 'action', one of:
* - add
@@ -871,8 +913,8 @@ abstract class EchoDiscussionParser {
* Finds and extracts signatures in $text
*
* @param string $text The text in which to look for signed comments.
- * @param Title $title
- * @return array Associative array, the key is the username, the value
+ * @param Title|null $title
+ * @return string[] Associative array, the key is the username, the value
* is the last signature that was found.
*/
static function extractSignatures( $text, Title $title = null ) {
@@ -908,7 +950,7 @@ abstract class EchoDiscussionParser {
*
* @param string $line Line of text potentially including linked user, user talk,
* and contribution pages
- * @return array of usernames, empty array for none detected
+ * @return string[] array of usernames, empty array for none detected
*/
public static function extractUsersFromLine( $line ) {
/*
@@ -960,8 +1002,8 @@ abstract class EchoDiscussionParser {
* has signed it.
*
* @param string $line The line.
- * @param Title $title
- * @return bool|array false for none, Array for success.
+ * @param Title|null $title
+ * @return array|false False for none, array for success.
* - First element is the position of the signature.
* - Second element is the normalised user name.
*/
@@ -1006,7 +1048,7 @@ abstract class EchoDiscussionParser {
* @param string $line The line to search.
* @param string $linkPrefix The prefix to search for.
* @param bool $failureOffset
- * @return array|bool false for failure, array for success.
+ * @return array|false False for failure, array for success.
* - First element is the string offset of the link.
* - Second element is the user the link refers to.
*/
@@ -1079,26 +1121,6 @@ abstract class EchoDiscussionParser {
}
/**
- * Gets a regular expression fragmentmatching characters that
- * can appear in a line after the signature.
- *
- * @return string regular expression fragment.
- */
- static function getLineEndingRegex() {
- $ignoredEndings = [
- '\s*',
- preg_quote( '}' ),
- preg_quote( '{' ),
- '\<[^\>]+\>',
- preg_quote( '{{' ) . '[^}]+' . preg_quote( '}}' ),
- ];
-
- $regex = '(?:' . implode( '|', $ignoredEndings ) . ')*';
-
- return $regex;
- }
-
- /**
* Gets a regular expression that will match this wiki's
* timestamps as given by ~~~~.
*
@@ -1122,7 +1144,7 @@ abstract class EchoDiscussionParser {
// Step 2: Generalise it
// Trim off the timezone to replace at the end
$output = $exemplarTimestamp;
- $tzRegex = '/\s*\(\w+\)\s*$/';
+ $tzRegex = '/\h*\(\w+\)\h*$/';
$tzMatches = [];
if ( preg_match( $tzRegex, $output, $tzMatches ) ) {
$output = preg_replace( $tzRegex, '', $output );
@@ -1148,29 +1170,31 @@ abstract class EchoDiscussionParser {
* Parse wikitext into truncated plain text.
* @param string $text
* @param Language $lang
- * @param int $length default 150
+ * @param int $length Length in characters (not bytes); default 150
* @param Title|null $title Page from which the text snippet is being extracted
* @return string
*/
static function getTextSnippet( $text, Language $lang, $length = 150, $title = null ) {
// Parse wikitext
- $html = MessageCache::singleton()->parse( $text, $title )->getText();
+ $html = MessageCache::singleton()->parse( $text, $title )->getText( [
+ 'enableSectionEditLinks' => false
+ ] );
$plaintext = trim( Sanitizer::stripAllTags( $html ) );
- return $lang->truncate( $plaintext, $length );
+ return $lang->truncateForVisual( $plaintext, $length );
}
/**
* Parse an edit summary into truncated plain text.
* @param string $text
* @param Language $lang
- * @param int $length default 150
+ * @param int $length Length in characters (not bytes); default 150
* @return string
*/
static function getTextSnippetFromSummary( $text, Language $lang, $length = 150 ) {
// Parse wikitext with summary parser
$html = Linker::formatLinksInComment( Sanitizer::escapeHtmlAllowEntities( $text ) );
$plaintext = trim( Sanitizer::stripAllTags( $html ) );
- return $lang->truncate( $plaintext, $length );
+ return $lang->truncateForVisual( $plaintext, $length );
}
/**
@@ -1178,12 +1202,12 @@ abstract class EchoDiscussionParser {
*
* @param Revision $revision
* @param Language $lang
- * @param int $length
+ * @param int $length Length in characters (not bytes); default 150
* @return string
*/
public static function getEditExcerpt( Revision $revision, Language $lang, $length = 150 ) {
$interpretation = self::getChangeInterpretationForRevision( $revision );
$section = self::detectSectionTitleAndText( $interpretation );
- return $lang->truncate( $section['section-title'] . ' ' . $section['section-text'], $length );
+ return $lang->truncateForVisual( $section['section-title'] . ' ' . $section['section-text'], $length );
}
}
diff --git a/Echo/includes/EchoArrayList.php b/Echo/includes/EchoArrayList.php
new file mode 100644
index 00000000..7c220210
--- /dev/null
+++ b/Echo/includes/EchoArrayList.php
@@ -0,0 +1,34 @@
+<?php
+
+/**
+ * Implements the EchoContainmentList interface for php arrays. Possible source
+ * of arrays includes $wg* global variables initialized from extensions or global
+ * wiki config.
+ */
+class EchoArrayList implements EchoContainmentList {
+ /**
+ * @var array
+ */
+ protected $list;
+
+ /**
+ * @param array $list
+ */
+ public function __construct( array $list ) {
+ $this->list = $list;
+ }
+
+ /**
+ * @inheritDoc
+ */
+ public function getValues() {
+ return $this->list;
+ }
+
+ /**
+ * @inheritDoc
+ */
+ public function getCacheKey() {
+ return '';
+ }
+}
diff --git a/Echo/includes/EchoCachedList.php b/Echo/includes/EchoCachedList.php
new file mode 100644
index 00000000..b10342e8
--- /dev/null
+++ b/Echo/includes/EchoCachedList.php
@@ -0,0 +1,62 @@
+<?php
+
+/**
+ * Caches an EchoContainmentList within a BagOStuff(memcache, etc) to prevent needing
+ * to load the nested list from a potentially slow source (mysql, etc).
+ */
+class EchoCachedList implements EchoContainmentList {
+ const ONE_WEEK = 4233600;
+ const ONE_DAY = 86400;
+
+ protected $cache;
+ protected $partialCacheKey;
+ protected $nestedList;
+ protected $timeout;
+ private $result;
+
+ /**
+ * @param BagOStuff $cache Bag to stored cached data in.
+ * @param string $partialCacheKey Partial cache key, $nestedList->getCacheKey() will be appended
+ * to this to construct the cache key used.
+ * @param EchoContainmentList $nestedList The nested EchoContainmentList to cache the result of.
+ * @param int $timeout How long in seconds to cache the nested list, defaults to 1 week.
+ */
+ public function __construct( BagOStuff $cache, $partialCacheKey, EchoContainmentList $nestedList, $timeout = self::ONE_WEEK ) {
+ $this->cache = $cache;
+ $this->partialCacheKey = $partialCacheKey;
+ $this->nestedList = $nestedList;
+ $this->timeout = $timeout;
+ }
+
+ /**
+ * @inheritDoc
+ */
+ public function getValues() {
+ if ( $this->result ) {
+ return $this->result;
+ }
+ $this->result = $this->cache->getWithSetCallback(
+ $this->getCacheKey(),
+ $this->timeout,
+ function () {
+ $result = $this->nestedList->getValues();
+ if ( !is_array( $result ) ) {
+ throw new MWException( sprintf(
+ "Expected array but received '%s' from '%s::getValues'",
+ is_object( $result ) ? get_class( $result ) : gettype( $result ),
+ get_class( $this->nestedList )
+ ) );
+ }
+ return $result;
+ }
+ );
+ return $this->result;
+ }
+
+ /**
+ * @inheritDoc
+ */
+ public function getCacheKey() {
+ return $this->partialCacheKey . '_' . $this->nestedList->getCacheKey();
+ }
+}
diff --git a/Echo/includes/EchoContainmentList.php b/Echo/includes/EchoContainmentList.php
new file mode 100644
index 00000000..e9032557
--- /dev/null
+++ b/Echo/includes/EchoContainmentList.php
@@ -0,0 +1,18 @@
+<?php
+
+/**
+ * Interface providing list of contained values and an optional cache key to go along with it.
+ */
+interface EchoContainmentList {
+ /**
+ * @return string[] The values contained within this list.
+ */
+ public function getValues();
+
+ /**
+ * @return string A string suitable for appending to the cache key prefix to facilitate
+ * cache busting when the underlying data changes, or a blank string if
+ * not relevant.
+ */
+ public function getCacheKey();
+}
diff --git a/Echo/includes/EchoContainmentSet.php b/Echo/includes/EchoContainmentSet.php
new file mode 100644
index 00000000..986379c3
--- /dev/null
+++ b/Echo/includes/EchoContainmentSet.php
@@ -0,0 +1,108 @@
+<?php
+
+use MediaWiki\Preferences\MultiUsernameFilter;
+
+/**
+ * Utilizes EchoContainmentList interface to provide a fluent interface to whitelist/blacklist
+ * from multiple sources like global variables, wiki pages, etc.
+ *
+ * Initialize:
+ * $cache = ObjectCache::getLocalClusterIntance();
+ * $set = new EchoContainmentSet;
+ * $set->addArray( $wgSomeGlobalParameter );
+ * $set->addOnWiki( NS_USER, 'Foo/bar-baz', $cache, 'some_user_specific_cache_key' );
+ *
+ * Usage:
+ * if ( $set->contains( 'SomeUser' ) ) {
+ * ...
+ * }
+ */
+class EchoContainmentSet {
+ /**
+ * @var EchoContainmentList[]
+ */
+ protected $lists = [];
+
+ /**
+ * @var User
+ */
+ protected $recipient;
+
+ public function __construct( User $recipient ) {
+ $this->recipient = $recipient;
+ }
+
+ /**
+ * Add an EchoContainmentList to the set of lists checked by self::contains()
+ *
+ * @param EchoContainmentList $list
+ */
+ public function add( EchoContainmentList $list ) {
+ $this->lists[] = $list;
+ }
+
+ /**
+ * Add a php array to the set of lists checked by self::contains()
+ *
+ * @param array $list
+ */
+ public function addArray( array $list ) {
+ $this->add( new EchoArrayList( $list ) );
+ }
+
+ /**
+ * Add a list from a user preference to the set of lists checked by self::contains().
+ *
+ * @param string $preferenceName
+ */
+ public function addFromUserOption( $preferenceName ) {
+ $preference = $this->recipient->getOption( $preferenceName, [] );
+
+ if ( $preference ) {
+ $ids = MultiUsernameFilter::splitIds( $preference );
+ $lookup = CentralIdLookup::factory();
+ $names = $lookup->namesFromCentralIds( $ids, $this->recipient );
+ $this->addArray( $names );
+ }
+ }
+
+ /**
+ * Add a list from a wiki page to the set of lists checked by self::contains(). Data
+ * from wiki pages is cached via the BagOStuff. Caching is disabled when passing a null
+ * $cache object.
+ *
+ * @param int $namespace An NS_* constant representing the mediawiki namespace of the page containing the list.
+ * @param string $title The title of the page containing the list.
+ * @param BagOStuff|null $cache An object to cache the page with or null for no cache.
+ * @param string $cacheKeyPrefix A prefix to be combined with the pages latest revision id and used as a cache key.
+ *
+ * @throws MWException
+ */
+ public function addOnWiki( $namespace, $title, BagOStuff $cache = null, $cacheKeyPrefix = '' ) {
+ $list = new EchoOnWikiList( $namespace, $title );
+ if ( $cache ) {
+ if ( $cacheKeyPrefix === '' ) {
+ throw new MWException( 'Cache requires providing a cache key prefix.' );
+ }
+ $list = new EchoCachedList( $cache, $cacheKeyPrefix, $list );
+ }
+ $this->add( $list );
+ }
+
+ /**
+ * Test the wrapped lists for existence of $value
+ *
+ * @param mixed $value The value to look for
+ * @return bool True when the set contains the provided value
+ */
+ public function contains( $value ) {
+ foreach ( $this->lists as $list ) {
+ // Use strict comparison to prevent the number 0 from matching all strings (T177825)
+ if ( array_search( $value, $list->getValues(), true ) !== false ) {
+ return true;
+ }
+ }
+
+ return false;
+ }
+}
diff --git a/Echo/includes/EchoDbFactory.php b/Echo/includes/EchoDbFactory.php
index 12012632..608f1b0d 100644
--- a/Echo/includes/EchoDbFactory.php
+++ b/Echo/includes/EchoDbFactory.php
@@ -1,5 +1,7 @@
<?php
+
use MediaWiki\MediaWikiServices;
+use Wikimedia\Rdbms\LoadBalancer;
/**
* Database factory class, this will determine whether to use the main database
@@ -9,7 +11,7 @@ class MWEchoDbFactory {
/**
* The cluster for the database
- * @var string|bool
+ * @var string|false
*/
private $cluster;
@@ -18,9 +20,9 @@ class MWEchoDbFactory {
private $sharedCluster;
/**
- * @param string|bool $cluster
- * @param string|bool $shared
- * @param string|bool $sharedCluster
+ * @param string|false $cluster
+ * @param string|false $shared
+ * @param string|false $sharedCluster
*/
public function __construct( $cluster = false, $shared = false, $sharedCluster = false ) {
$this->cluster = $cluster;
@@ -42,6 +44,13 @@ class MWEchoDbFactory {
}
/**
+ * @return bool
+ */
+ public function isReadOnly() {
+ return ( $this->getLB()->getReadOnlyReason() !== false );
+ }
+
+ /**
* Get the database load balancer
* @return LoadBalancer
*/
@@ -71,18 +80,18 @@ class MWEchoDbFactory {
/**
* Get the database connection for Echo
- * @param $db int Index of the connection to get
- * @param $groups mixed Query groups.
- * @return IDatabase
+ * @param int $db Index of the connection to get
+ * @param mixed $groups Query groups.
+ * @return \Wikimedia\Rdbms\IDatabase
*/
public function getEchoDb( $db, $groups = [] ) {
return $this->getLB()->getConnection( $db, $groups );
}
/**
- * @param $db int Index of the connection to get
+ * @param int $db Index of the connection to get
* @param array $groups Query groups
- * @return bool|IDatabase false if no shared db is configured
+ * @return bool|\Wikimedia\Rdbms\IDatabase false if no shared db is configured
*/
public function getSharedDb( $db, $groups = [] ) {
if ( !$this->shared ) {
@@ -99,10 +108,10 @@ class MWEchoDbFactory {
* objects
*
* @deprecated Use newFromDefault() instead to create a db factory
- * @param $db int Index of the connection to get
- * @param $groups mixed Query groups.
- * @param $wiki string|bool The wiki ID, or false for the current wiki
- * @return IDatabase
+ * @param int $db Index of the connection to get
+ * @param mixed $groups Query groups.
+ * @param string|bool $wiki The wiki ID, or false for the current wiki
+ * @return \Wikimedia\Rdbms\IDatabase
*/
public static function getDB( $db, $groups = [], $wiki = false ) {
global $wgEchoCluster;
@@ -111,7 +120,7 @@ class MWEchoDbFactory {
// Use the external db defined for Echo
if ( $wgEchoCluster ) {
- $lb = $services->getDBLoadBalancerFactory()->getExternalLB( $wgEchoCluster, $wiki );
+ $lb = $services->getDBLoadBalancerFactory()->getExternalLB( $wgEchoCluster );
} else {
if ( $wiki === false ) {
$lb = $services->getDBLoadBalancer();
diff --git a/Echo/includes/EchoDiffGroup.php b/Echo/includes/EchoDiffGroup.php
new file mode 100644
index 00000000..bc6a14a4
--- /dev/null
+++ b/Echo/includes/EchoDiffGroup.php
@@ -0,0 +1,115 @@
+<?php
+/**
+ * MediaWiki Extension: Echo
+ *
+ * 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.
+ *
+ * This program is distributed WITHOUT ANY WARRANTY.
+ */
+
+/**
+ * @file
+ * @ingroup Extensions
+ * @author Erik Bernhardson
+ */
+
+/**
+ * Represents a single set of changes all effecting neighboring lines
+ */
+class EchoDiffGroup {
+ /**
+ * @var int[] The left and right position this change starts at
+ */
+ protected $position;
+
+ /**
+ * @var string[] The lines that have been added
+ */
+ protected $new = [];
+
+ /**
+ * @var string[] The lines that have been removed
+ */
+ protected $old = [];
+
+ /**
+ * @param int $leftPos The starting line number in the left text
+ * @param int $rightPos The starting line number in the right text
+ */
+ public function __construct( $leftPos, $rightPos ) {
+ // +1 due to the origional code use 1 indexing for this result
+ $this->position = [
+ 'right-pos' => $rightPos + 1,
+ 'left-pos' => $leftPos + 1,
+ ];
+ }
+
+ /**
+ * @param string $line Line in the right text but not in the left
+ */
+ public function add( $line ) {
+ $this->new[] = $line;
+ }
+
+ /**
+ * @param string $line Line in the left text but not in the right
+ */
+ public function subtract( $line ) {
+ $this->old[] = $line;
+ }
+
+ /**
+ * @return array[] set of changes
+ * Each change consists of:
+ * An 'action', one of:
+ * - add
+ * - subtract
+ * - change
+ * 'content' that was added or removed, or in the case
+ * of a change, 'old_content' and 'new_content'
+ * 'left_pos' and 'right_pos' (in 1-indexed lines) of the change.
+ */
+ public function getChangeSet() {
+ $old = implode( "\n", $this->old );
+ $new = implode( "\n", $this->new );
+ $position = $this->position;
+ $changeSet = [];
+
+ // The implodes must come first because we consider array( '' ) to also be false
+ // meaning a blank link replaced with content is an addition
+ if ( $old && $new ) {
+ $min = min( count( $this->old ), count( $this->new ) );
+ $changeSet[] = $position + [
+ 'action' => 'change',
+ 'old_content' => implode( "\n", array_slice( $this->old, 0, $min ) ),
+ 'new_content' => implode( "\n", array_slice( $this->new, 0, $min ) ),
+ ];
+ $position['left-pos'] += $min;
+ $position['right-pos'] += $min;
+ $old = implode( "\n", array_slice( $this->old, $min ) );
+ $new = implode( "\n", array_slice( $this->new, $min ) );
+ }
+
+ if ( $new ) {
+ $changeSet[] = $position + [
+ 'action' => 'add',
+ 'content' => $new,
+ ];
+ } elseif ( $old ) {
+ $changeSet[] = $position + [
+ 'action' => 'subtract',
+ 'content' => $old,
+ ];
+ }
+
+ return $changeSet;
+ }
+}
diff --git a/Echo/includes/DiffParser.php b/Echo/includes/EchoDiffParser.php
index 7b70fae6..0670ef45 100644
--- a/Echo/includes/DiffParser.php
+++ b/Echo/includes/EchoDiffParser.php
@@ -16,7 +16,6 @@
*/
/**
- *
* @file
* @ingroup Extensions
* @author Erik Bernhardson
@@ -37,7 +36,7 @@ class EchoDiffParser {
protected $prefixLength = 1;
/**
- * @var array $left The text of the left side of the diff operation
+ * @var string[] $left The text of the left side of the diff operation
*/
protected $left;
@@ -47,7 +46,7 @@ class EchoDiffParser {
protected $leftPos;
/**
- * @var array $right The text of the right side of the diff operation
+ * @var string[] $right The text of the right side of the diff operation
*/
protected $right;
@@ -96,7 +95,7 @@ class EchoDiffParser {
* If we add content to an empty page the changeSet can be composed straightaway
*
* @param string $right
- * @return array[] see getChangeSet()
+ * @return array[] See {@see getChangeSet}
*/
private function getChangeSetFromEmptyLeft( $right ) {
$rightLines = explode( "\n", $right );
@@ -168,7 +167,7 @@ class EchoDiffParser {
* Parse the next line of the unified diff output
*
* @param string $line The next line of the unified diff
- * @param EchoDiffGroup $change Changes the the immediately previous lines
+ * @param EchoDiffGroup|null $change Changes the immediately previous lines
*
* @throws MWException
* @return EchoDiffGroup Changes to this line and any changed lines immediately previous
@@ -239,96 +238,3 @@ class EchoDiffParser {
return $change;
}
}
-
-/**
- * Represents a single set of changes all effecting neighboring lines
- */
-class EchoDiffGroup {
- /**
- * @var array The left and right position this change starts at
- */
- protected $position;
-
- /**
- * @var array The lines that have been added
- */
- protected $new = [];
-
- /**
- * @var array The lines that have been removed
- */
- protected $old = [];
-
- /**
- * @param int $leftPos The starting line number in the left text
- * @param int $rightPos The starting line number in the right text
- */
- public function __construct( $leftPos, $rightPos ) {
- // +1 due to the origional code use 1 indexing for this result
- $this->position = [
- 'right-pos' => $rightPos + 1,
- 'left-pos' => $leftPos + 1,
- ];
- }
-
- /**
- * @param string $line Line in the right text but not in the left
- */
- public function add( $line ) {
- $this->new[] = $line;
- }
-
- /**
- * @param string $line Line in the left text but not in the right
- */
- public function subtract( $line ) {
- $this->old[] = $line;
- }
-
- /**
- * @return array[] set of changes
- * Each change consists of:
- * An 'action', one of:
- * - add
- * - subtract
- * - change
- * 'content' that was added or removed, or in the case
- * of a change, 'old_content' and 'new_content'
- * 'left_pos' and 'right_pos' (in 1-indexed lines) of the change.
- */
- public function getChangeSet() {
- $old = implode( "\n", $this->old );
- $new = implode( "\n", $this->new );
- $position = $this->position;
- $changeSet = [];
-
- // The implodes must come first because we consider array( '' ) to also be false
- // meaning a blank link replaced with content is an addition
- if ( $old && $new ) {
- $min = min( count( $this->old ), count( $this->new ) );
- $changeSet[] = $position + [
- 'action' => 'change',
- 'old_content' => implode( "\n", array_slice( $this->old, 0, $min ) ),
- 'new_content' => implode( "\n", array_slice( $this->new, 0, $min ) ),
- ];
- $position['left-pos'] += $min;
- $position['right-pos'] += $min;
- $old = implode( "\n", array_slice( $this->old, $min ) );
- $new = implode( "\n", array_slice( $this->new, $min ) );
- }
-
- if ( $new ) {
- $changeSet[] = $position + [
- 'action' => 'add',
- 'content' => $new,
- ];
- } elseif ( $old ) {
- $changeSet[] = $position + [
- 'action' => 'subtract',
- 'content' => $old,
- ];
- }
-
- return $changeSet;
- }
-}
diff --git a/Echo/Hooks.php b/Echo/includes/EchoHooks.php
index 8e3db35d..7a32f1fe 100644
--- a/Echo/Hooks.php
+++ b/Echo/includes/EchoHooks.php
@@ -3,32 +3,61 @@
use MediaWiki\Auth\AuthManager;
use MediaWiki\Logger\LoggerFactory;
use MediaWiki\MediaWikiServices;
+use MediaWiki\Preferences\MultiUsernameFilter;
class EchoHooks {
- public static function registerExtension() {
- global $wgNotificationSender, $wgPasswordSender, $wgAllowHTMLEmail,
- $wgEchoNotificationCategories, $wgDefaultUserOptions;
+ /**
+ * @var Revision
+ */
+ private static $lastRevertedRevision = null;
- $wgNotificationSender = $wgPasswordSender;
+ /**
+ * @param array &$defaults
+ */
+ public static function onUserGetDefaultOptions( array &$defaults ) {
+ global $wgAllowHTMLEmail, $wgEchoNotificationCategories;
if ( $wgAllowHTMLEmail ) {
- $wgDefaultUserOptions['echo-email-format'] = 'html'; /*EchoHooks::EMAIL_FORMAT_HTML*/
+ $defaults['echo-email-format'] = 'html'; /*EchoHooks::EMAIL_FORMAT_HTML*/
} else {
- $wgDefaultUserOptions['echo-email-format'] = 'plain-text'; /*EchoHooks::EMAIL_FORMAT_PLAIN_TEXT*/
+ $defaults['echo-email-format'] = 'plain-text'; /*EchoHooks::EMAIL_FORMAT_PLAIN_TEXT*/
}
- // Set all of the events to notify by web but not email by default (won't affect events that don't email)
+ $presets = [
+ // Set all of the events to notify by web but not email by default
+ // (won't affect events that don't email)
+ 'default' => [
+ 'email' => false,
+ 'web' => true,
+ ],
+ // most settings default to web on, email off, but override these
+ 'system' => [
+ 'email' => true,
+ ],
+ 'user-rights' => [
+ 'email' => true,
+ ],
+ 'article-linked' => [
+ 'web' => false,
+ ],
+ 'mention-failure' => [
+ 'web' => false,
+ ],
+ 'mention-success' => [
+ 'web' => false,
+ ],
+ ];
+
foreach ( $wgEchoNotificationCategories as $category => $categoryData ) {
- $wgDefaultUserOptions["echo-subscriptions-email-{$category}"] = false;
- $wgDefaultUserOptions["echo-subscriptions-web-{$category}"] = true;
+ if ( !isset( $defaults["echo-subscriptions-email-{$category}"] ) ) {
+ $defaults["echo-subscriptions-email-{$category}"] = $presets[$category]['email']
+ ?? $presets['default']['email'];
+ }
+ if ( !isset( $defaults["echo-subscriptions-web-{$category}"] ) ) {
+ $defaults["echo-subscriptions-web-{$category}"] = $presets[$category]['web']
+ ?? $presets['default']['web'];
+ }
}
-
- // most settings default to web on, email off, but override these
- $wgDefaultUserOptions['echo-subscriptions-email-system'] = true;
- $wgDefaultUserOptions['echo-subscriptions-email-user-rights'] = true;
- $wgDefaultUserOptions['echo-subscriptions-web-article-linked'] = false;
- $wgDefaultUserOptions['echo-subscriptions-web-mention-failure'] = false;
- $wgDefaultUserOptions['echo-subscriptions-web-mention-success'] = false;
}
/**
@@ -37,10 +66,11 @@ class EchoHooks {
*/
public static function initEchoExtension() {
global $wgEchoNotifications, $wgEchoNotificationCategories, $wgEchoNotificationIcons,
- $wgEchoEventLoggingSchemas, $wgEchoMentionStatusNotifications, $wgAllowArticleReminderNotification, $wgAPIModules;
+ $wgEchoMentionStatusNotifications, $wgAllowArticleReminderNotification, $wgAPIModules;
// allow extensions to define their own event
- Hooks::run( 'BeforeCreateEchoEvent', [ &$wgEchoNotifications, &$wgEchoNotificationCategories, &$wgEchoNotificationIcons ] );
+ Hooks::run( 'BeforeCreateEchoEvent',
+ [ &$wgEchoNotifications, &$wgEchoNotificationCategories, &$wgEchoNotificationIcons ] );
// Only allow mention status notifications when enabled
if ( !$wgEchoMentionStatusNotifications ) {
@@ -53,24 +83,6 @@ class EchoHooks {
unset( $wgEchoNotificationCategories['article-reminder'] );
unset( $wgAPIModules['echoarticlereminder'] );
}
-
- // turn schema off if eventLogging is not enabled
- if ( !class_exists( 'EventLogging' ) ) {
- foreach ( $wgEchoEventLoggingSchemas as $schema => $property ) {
- if ( $property['enabled'] ) {
- $wgEchoEventLoggingSchemas[$schema]['enabled'] = false;
- }
- }
- }
- }
-
- public static function getNotificationSenderName() {
- global $wgNotificationSenderName;
- if ( $wgNotificationSenderName === null ) {
- $wgNotificationSenderName = wfMessage( 'emailsender' )->inContentLanguage()->text();
- }
-
- return $wgNotificationSenderName;
}
/**
@@ -87,7 +99,7 @@ class EchoHooks {
global $wgResourceModules;
$testModuleBoilerplate = [
- 'localBasePath' => __DIR__,
+ 'localBasePath' => dirname( __DIR__ ),
'remoteExtPath' => 'Echo',
];
@@ -104,7 +116,7 @@ class EchoHooks {
}
}
// if test files exist for given module, create a corresponding test module
- if ( count( $testFiles ) > 0 ) {
+ if ( $testFiles !== [] ) {
$testModules['qunit']["$key.tests"] = $testModuleBoilerplate + [
'dependencies' => [ $key ],
'scripts' => $testFiles,
@@ -116,51 +128,11 @@ class EchoHooks {
return true;
}
- public static function onEventLoggingRegisterSchemas( array &$schemas ) {
- global $wgEchoEventLoggingSchemas;
- foreach ( $wgEchoEventLoggingSchemas as $schema => $property ) {
- if ( $property['enabled'] && $property['client'] ) {
- $schemas[$schema] = $property['revision'];
- }
- }
- }
-
/**
* Handler for ResourceLoaderRegisterModules hook
* @param ResourceLoader &$resourceLoader
*/
public static function onResourceLoaderRegisterModules( ResourceLoader &$resourceLoader ) {
- global $wgEchoEventLoggingSchemas;
-
- // ext.echo.logger is used by mobile notifications as well, so be sure not to add any
- // dependencies that do not target mobile.
- $definition = [
- 'position' => 'top',
- 'scripts' => [
- 'logger/mw.echo.Logger.js',
- ],
- 'dependencies' => [
- 'oojs'
- ],
- 'localBasePath' => __DIR__ . '/modules',
- 'remoteExtPath' => 'Echo/modules',
- 'targets' => [ 'desktop', 'mobile' ],
- ];
-
- $hasSchemas = false;
- foreach ( $wgEchoEventLoggingSchemas as $schema => $property ) {
- if ( $property['enabled'] && $property['client'] ) {
- $definition['dependencies'][] = 'schema.' . $schema;
- $hasSchemas = true;
- }
- }
-
- if ( $hasSchemas ) {
- $definition['dependencies'][] = 'ext.eventLogging';
- }
-
- $resourceLoader->register( 'ext.echo.logger', $definition );
-
global $wgExtensionDirectory, $wgEchoNotificationIcons, $wgEchoSecondaryIcons;
$resourceLoader->register( 'ext.echo.emailicons', [
'class' => 'ResourceLoaderEchoImageModule',
@@ -187,49 +159,72 @@ class EchoHooks {
// DatabaseUpdater does not support other databases, so skip
return;
}
- $dir = __DIR__;
+ $dir = dirname( __DIR__ );
$baseSQLFile = "$dir/echo.sql";
$updater->addExtensionTable( 'echo_event', $baseSQLFile );
$updater->addExtensionTable( 'echo_email_batch', "$dir/db_patches/echo_email_batch.sql" );
$updater->addExtensionTable( 'echo_target_page', "$dir/db_patches/echo_target_page.sql" );
if ( $updater->getDB()->getType() === 'sqlite' ) {
- $updater->modifyExtensionField( 'echo_event', 'event_agent', "$dir/db_patches/patch-event_agent-split.sqlite.sql" );
- $updater->modifyExtensionField( 'echo_event', 'event_variant', "$dir/db_patches/patch-event_variant_nullability.sqlite.sql" );
- $updater->addExtensionField( 'echo_target_page', 'etp_id', "$dir/db_patches/patch-multiple_target_pages.sqlite.sql" );
- $updater->dropExtensionField( 'echo_target_page', 'etp_user', "$dir/db_patches/patch-drop-echo_target_page-etp_user.sqlite.sql" );
+ $updater->modifyExtensionField( 'echo_event', 'event_agent',
+ "$dir/db_patches/patch-event_agent-split.sqlite.sql" );
+ $updater->modifyExtensionField( 'echo_event', 'event_variant',
+ "$dir/db_patches/patch-event_variant_nullability.sqlite.sql" );
+ $updater->addExtensionField( 'echo_target_page', 'etp_id',
+ "$dir/db_patches/patch-multiple_target_pages.sqlite.sql" );
+ $updater->dropExtensionField( 'echo_target_page', 'etp_user',
+ "$dir/db_patches/patch-drop-echo_target_page-etp_user.sqlite.sql" );
// There is no need to run the patch-event_extra-size or patch-event_agent_ip-size because
// sqlite ignores numeric arguments in parentheses that follow the type name (ex: VARCHAR(255))
// see http://www.sqlite.org/datatype3.html Section 2.2 for more info
} else {
- $updater->modifyExtensionField( 'echo_event', 'event_agent', "$dir/db_patches/patch-event_agent-split.sql" );
- $updater->modifyExtensionField( 'echo_event', 'event_variant', "$dir/db_patches/patch-event_variant_nullability.sql" );
- $updater->modifyExtensionField( 'echo_event', 'event_extra', "$dir/db_patches/patch-event_extra-size.sql" );
- $updater->modifyExtensionField( 'echo_event', 'event_agent_ip', "$dir/db_patches/patch-event_agent_ip-size.sql" );
- $updater->addExtensionField( 'echo_target_page', 'etp_id', "$dir/db_patches/patch-multiple_target_pages.sql" );
- $updater->dropExtensionField( 'echo_target_page', 'etp_user', "$dir/db_patches/patch-drop-echo_target_page-etp_user.sql" );
+ $updater->modifyExtensionField( 'echo_event', 'event_agent',
+ "$dir/db_patches/patch-event_agent-split.sql" );
+ $updater->modifyExtensionField( 'echo_event', 'event_variant',
+ "$dir/db_patches/patch-event_variant_nullability.sql" );
+ $updater->modifyExtensionField( 'echo_event', 'event_extra',
+ "$dir/db_patches/patch-event_extra-size.sql" );
+ $updater->modifyExtensionField( 'echo_event', 'event_agent_ip',
+ "$dir/db_patches/patch-event_agent_ip-size.sql" );
+ $updater->addExtensionField( 'echo_target_page', 'etp_id',
+ "$dir/db_patches/patch-multiple_target_pages.sql" );
+ $updater->dropExtensionField( 'echo_target_page', 'etp_user',
+ "$dir/db_patches/patch-drop-echo_target_page-etp_user.sql" );
}
$updater->addExtensionField( 'echo_notification', 'notification_bundle_base',
"$dir/db_patches/patch-notification-bundling-field.sql" );
- // This index was renamed twice, first from type_page to event_type and later from event_type to echo_event_type
+ // This index was renamed twice, first from type_page to event_type and
+ // later from event_type to echo_event_type
if ( $updater->getDB()->indexExists( 'echo_event', 'type_page', __METHOD__ ) ) {
- $updater->addExtensionIndex( 'echo_event', 'event_type', "$dir/db_patches/patch-alter-type_page-index.sql" );
+ $updater->addExtensionIndex( 'echo_event', 'event_type',
+ "$dir/db_patches/patch-alter-type_page-index.sql" );
}
- $updater->dropExtensionTable( 'echo_subscription', "$dir/db_patches/patch-drop-echo_subscription.sql" );
- $updater->dropExtensionField( 'echo_event', 'event_timestamp', "$dir/db_patches/patch-drop-echo_event-event_timestamp.sql" );
+ $updater->dropExtensionTable( 'echo_subscription',
+ "$dir/db_patches/patch-drop-echo_subscription.sql" );
+ $updater->dropExtensionField( 'echo_event', 'event_timestamp',
+ "$dir/db_patches/patch-drop-echo_event-event_timestamp.sql" );
$updater->addExtensionField( 'echo_email_batch', 'eeb_event_hash',
"$dir/db_patches/patch-email_batch-new-field.sql" );
- $updater->addExtensionField( 'echo_event', 'event_page_id', "$dir/db_patches/patch-add-echo_event-event_page_id.sql" );
- $updater->addExtensionIndex( 'echo_event', 'echo_event_type', "$dir/db_patches/patch-alter-event_type-index.sql" );
- $updater->addExtensionIndex( 'echo_notification', 'echo_user_timestamp', "$dir/db_patches/patch-alter-user_timestamp-index.sql" );
- $updater->addExtensionIndex( 'echo_notification', 'echo_notification_event', "$dir/db_patches/patch-add-notification_event-index.sql" );
+ $updater->addExtensionField( 'echo_event', 'event_page_id',
+ "$dir/db_patches/patch-add-echo_event-event_page_id.sql" );
+ $updater->addExtensionIndex( 'echo_event', 'echo_event_type',
+ "$dir/db_patches/patch-alter-event_type-index.sql" );
+ $updater->addExtensionIndex( 'echo_notification', 'echo_user_timestamp',
+ "$dir/db_patches/patch-alter-user_timestamp-index.sql" );
+ $updater->addExtensionIndex( 'echo_notification', 'echo_notification_event',
+ "$dir/db_patches/patch-add-notification_event-index.sql" );
$updater->addPostDatabaseUpdateMaintenance( 'RemoveOrphanedEvents' );
- $updater->addExtensionField( 'echo_event', 'event_deleted', "$dir/db_patches/patch-add-echo_event-event_deleted.sql" );
- $updater->addExtensionIndex( 'echo_notification', 'echo_notification_user_read_timestamp', "$dir/db_patches/patch-add-user_read_timestamp-index.sql" );
- $updater->addExtensionIndex( 'echo_target_page', 'echo_target_page_page_event', "$dir/db_patches/patch-add-page_event-index.sql" );
- $updater->addExtensionIndex( 'echo_event', 'echo_event_page_id', "$dir/db_patches/patch-add-event_page_id-index.sql" );
- $updater->dropExtensionIndex( 'echo_notification', 'user_event', "$dir/db_patches/patch-notification-pk.sql" );
+ $updater->addExtensionField( 'echo_event', 'event_deleted',
+ "$dir/db_patches/patch-add-echo_event-event_deleted.sql" );
+ $updater->addExtensionIndex( 'echo_notification', 'echo_notification_user_read_timestamp',
+ "$dir/db_patches/patch-add-user_read_timestamp-index.sql" );
+ $updater->addExtensionIndex( 'echo_target_page', 'echo_target_page_page_event',
+ "$dir/db_patches/patch-add-page_event-index.sql" );
+ $updater->addExtensionIndex( 'echo_event', 'echo_event_page_id',
+ "$dir/db_patches/patch-add-event_page_id-index.sql" );
+ $updater->dropExtensionIndex( 'echo_notification', 'user_event',
+ "$dir/db_patches/patch-notification-pk.sql" );
}
/**
@@ -312,22 +307,22 @@ class EchoHooks {
public static function getPreferences( $user, &$preferences ) {
global $wgEchoEnableEmailBatch,
$wgEchoNotifiers, $wgEchoNotificationCategories, $wgEchoNotifications,
- $wgEchoNewMsgAlert, $wgAllowHTMLEmail, $wgEchoUseCrossWikiBetaFeature,
- $wgEchoShowFooterNotice, $wgEchoCrossWikiNotifications, $wgEchoPerUserBlacklist;
+ $wgAllowHTMLEmail, $wgEchoUseCrossWikiBetaFeature,
+ $wgEchoCrossWikiNotifications, $wgEchoPerUserBlacklist;
$attributeManager = EchoAttributeManager::newFromGlobalVars();
// Show email frequency options
- $never = wfMessage( 'echo-pref-email-frequency-never' )->plain();
- $immediately = wfMessage( 'echo-pref-email-frequency-immediately' )->plain();
+ $never = wfMessage( 'echo-pref-email-frequency-never' )->escaped();
+ $immediately = wfMessage( 'echo-pref-email-frequency-immediately' )->escaped();
$freqOptions = [
$never => EchoEmailFrequency::NEVER,
$immediately => EchoEmailFrequency::IMMEDIATELY,
];
// Only show digest options if email batch is enabled
if ( $wgEchoEnableEmailBatch ) {
- $daily = wfMessage( 'echo-pref-email-frequency-daily' )->plain();
- $weekly = wfMessage( 'echo-pref-email-frequency-weekly' )->plain();
+ $daily = wfMessage( 'echo-pref-email-frequency-daily' )->escaped();
+ $weekly = wfMessage( 'echo-pref-email-frequency-weekly' )->escaped();
$freqOptions += [
$daily => EchoEmailFrequency::DAILY_DIGEST,
$weekly => EchoEmailFrequency::WEEKLY_DIGEST,
@@ -342,9 +337,9 @@ class EchoHooks {
// Display information about the user's currently set email address
$prefsTitle = SpecialPage::getTitleFor( 'Preferences', false, 'mw-prefsection-echo' );
- $link = Linker::link(
+ $link = MediaWikiServices::getInstance()->getLinkRenderer()->makeLink(
SpecialPage::getTitleFor( 'ChangeEmail' ),
- wfMessage( $user->getEmail() ? 'prefs-changeemail' : 'prefs-setemail' )->escaped(),
+ wfMessage( $user->getEmail() ? 'prefs-changeemail' : 'prefs-setemail' )->text(),
[],
[ 'returnto' => $prefsTitle->getFullText() ]
);
@@ -374,8 +369,8 @@ class EchoHooks {
'label-message' => 'echo-pref-email-format',
'section' => 'echo/emailsettings',
'options' => [
- wfMessage( 'echo-pref-email-format-html' )->plain() => EchoEmailFormat::HTML,
- wfMessage( 'echo-pref-email-format-plain-text' )->plain() => EchoEmailFormat::PLAIN_TEXT,
+ wfMessage( 'echo-pref-email-format-html' )->escaped() => EchoEmailFormat::HTML,
+ wfMessage( 'echo-pref-email-format-plain-text' )->escaped() => EchoEmailFormat::PLAIN_TEXT,
]
];
}
@@ -463,14 +458,6 @@ class EchoHooks {
];
}
- if ( $wgEchoNewMsgAlert ) {
- $preferences['echo-show-alert'] = [
- 'type' => 'toggle',
- 'label-message' => 'echo-pref-new-message-indicator',
- 'section' => 'echo/newmessageindicator',
- ];
- }
-
// If we're using Echo to handle user talk page post notifications,
// hide the old (non-Echo) preference for this. If Echo is moved to core
// we'll want to remove this old user option entirely. For now, though,
@@ -483,17 +470,12 @@ class EchoHooks {
unset( $preferences['enotifusertalkpages']['section'] );
}
- if ( $wgEchoShowFooterNotice ) {
- $preferences['echo-dismiss-special-page-invitation'] = [
- 'type' => 'api',
- ];
- }
-
if ( $wgEchoPerUserBlacklist ) {
$preferences['echo-notifications-blacklist'] = [
'type' => 'usersmultiselect',
'label-message' => 'echo-pref-notifications-blacklist',
'section' => 'echo/blocknotificationslist',
+ 'filter' => MultiUsernameFilter::class,
];
}
@@ -505,19 +487,14 @@ class EchoHooks {
* @return bool
*/
private static function isEmailChangeAllowed() {
- global $wgAuth, $wgDisableAuthManager;
-
- if ( class_exists( AuthManager::class ) && !$wgDisableAuthManager ) {
- return AuthManager::singleton()->allowsPropertyChange( 'emailaddress' );
- } else {
- return $wgAuth->allowPropChange( 'emailaddress' );
- }
+ return AuthManager::singleton()->allowsPropertyChange( 'emailaddress' );
}
/**
* Handler for PageContentSaveComplete hook
* @see http://www.mediawiki.org/wiki/Manual:Hooks/PageContentSaveComplete
- * @param Article &$article Article edited
+ *
+ * @param WikiPage &$wikiPage modified WikiPage
* @param User &$user User who edited
* @param Content $content New article text
* @param string $summary Edit summary
@@ -529,10 +506,23 @@ class EchoHooks {
* @param Status &$status
* @param int $baseRevId
* @param int $undidRevId
+ *
* @return bool true in all cases
*/
- public static function onPageContentSaveComplete( &$article, &$user, $content, $summary, $minoredit,
- $watchthis, $sectionanchor, &$flags, $revision, &$status, $baseRevId, $undidRevId = 0 ) {
+ public static function onPageContentSaveComplete(
+ WikiPage &$wikiPage,
+ &$user,
+ $content,
+ $summary,
+ $minoredit,
+ $watchthis,
+ $sectionanchor,
+ &$flags,
+ $revision,
+ &$status,
+ $baseRevId,
+ $undidRevId = 0
+ ) {
global $wgEchoNotifications;
if ( !$revision ) {
@@ -545,11 +535,16 @@ class EchoHooks {
return true;
}
- $title = $article->getTitle();
+ $title = $wikiPage->getTitle();
// Try to do this after the HTTP response
- DeferredUpdates::addCallableUpdate( function () use ( $revision ) {
- EchoDiscussionParser::generateEventsForRevision( $revision );
+ DeferredUpdates::addCallableUpdate( function () use ( $revision, $undidRevId ) {
+ // This check has to happen during deferred processing, otherwise $lastRevertedRevision
+ // will not be initialized.
+ $isRevert = $undidRevId > 0 ||
+ ( self::$lastRevertedRevision &&
+ self::$lastRevertedRevision->getId() === $revision->getId() );
+ EchoDiscussionParser::generateEventsForRevision( $revision, $isRevert );
} );
// If the user is not an IP and this is not a null edit,
@@ -643,7 +638,7 @@ class EchoHooks {
* Get overrides for new users. This allows changes that only apply going forward,
* without affecting existing users.
*
- * @return array Associative array mapping key to bool for whether it should be enabled
+ * @return bool[] Associative array mapping key to bool for whether it should be enabled
*/
public static function getNewUserPreferenceOverrides() {
return [
@@ -702,7 +697,7 @@ class EchoHooks {
* @return bool
*/
public static function onUserGroupsChanged( $user, $add, $remove, $performer,
- $reason, array $oldUGMs = [], array $newUGMs = [] ) {
+ $reason = false, array $oldUGMs = [], array $newUGMs = [] ) {
if ( !$performer ) {
// TODO: Implement support for autopromotion
return true;
@@ -794,14 +789,9 @@ class EchoHooks {
return true;
}
- if ( is_callable( [ $linksUpdate, 'getTriggeringUser' ] ) ) {
- $user = $linksUpdate->getTriggeringUser();
- } else {
- global $wgUser;
- $user = $wgUser;
- }
-
- $revid = $linksUpdate->getRevision() ? $linksUpdate->getRevision()->getId() : null;
+ $revision = $linksUpdate->getRevision();
+ $revid = $revision ? $revision->getId() : null;
+ $user = $revision ? $revision->getRevisionRecord()->getUser() : null;
// link notification is boundless as you can include infinite number of links in a page
// db insert is expensive, limit it to a reasonable amount, we can increase this limit
@@ -840,7 +830,7 @@ class EchoHooks {
/**
* Handler for BeforePageDisplay hook.
* @see http://www.mediawiki.org/wiki/Manual:Hooks/BeforePageDisplay
- * @param OutputPage $out OutputPage object
+ * @param OutputPage $out
* @param Skin $skin Skin being used.
* @return bool true in all cases
*/
@@ -858,74 +848,69 @@ class EchoHooks {
return true;
}
- /**
- * Handler for PersonalUrls hook.
- * Add a "Notifications" item to the user toolbar ('personal URLs').
- * @see http://www.mediawiki.org/wiki/Manual:Hooks/PersonalUrls
- * @param array &$personal_urls Array of URLs to append to.
- * @param Title &$title Title of page being visited.
- * @param SkinTemplate $sk
- * @return bool true in all cases
- */
- public static function onPersonalUrls( &$personal_urls, &$title, $sk ) {
- global $wgEchoNewMsgAlert, $wgEchoShowFooterNotice;
- $user = $sk->getUser();
- if ( $user->isAnon() ) {
- return true;
- }
+ private static function processMarkAsRead( User $user, WebRequest $request, Title $title ) {
+ global $wgEchoCrossWikiNotifications;
+ $subtractions = [
+ EchoAttributeManager::ALERT => 0,
+ EchoAttributeManager::MESSAGE => 0
+ ];
// Attempt to mark a notification as read when visiting a page
- $subtractAlerts = 0;
- $subtractMessages = 0;
$eventIds = [];
if ( $title->getArticleID() ) {
$eventMapper = new EchoEventMapper();
$events = $eventMapper->fetchUnreadByUserAndPage( $user, $title->getArticleID() );
- if ( $events ) {
- /* @var EchoEvent $event */
- foreach ( $events as $event ) {
- if ( $event->getSection() === EchoAttributeManager::MESSAGE ) {
- $subtractMessages++;
- } else {
- // ALERT
- $subtractAlerts++;
- }
- $eventIds[] = $event->getId();
- }
+ foreach ( $events as $event ) {
+ $subtractions[$event->getSection()]++;
+ $eventIds[] = $event->getId();
}
}
// Attempt to mark as read the event IDs in the ?markasread= parameter, if present
- $markAsReadIds = explode( '|', $sk->getOutput()->getRequest()->getText( 'markasread' ) );
+ $markAsReadIds = explode( '|', $request->getText( 'markasread' ) );
+ $markAsReadWiki = $request->getText( 'markasreadwiki', wfWikiID() );
+ $markAsReadLocal = !$wgEchoCrossWikiNotifications || $markAsReadWiki === wfWikiID();
if ( $markAsReadIds ) {
- // gather the IDs that we didn't already find with target_pages
- $eventsToMarkAsRead = [];
- foreach ( $markAsReadIds as $markAsReadId ) {
- $markAsReadId = intval( $markAsReadId );
- if ( $markAsReadId !== 0 && !in_array( $markAsReadId, $eventIds ) ) {
- $eventsToMarkAsRead[] = $markAsReadId;
+ if ( $markAsReadLocal ) {
+ // gather the IDs that we didn't already find with target_pages
+ $eventsToMarkAsRead = [];
+ foreach ( $markAsReadIds as $markAsReadId ) {
+ $markAsReadId = intval( $markAsReadId );
+ if ( $markAsReadId !== 0 && !in_array( $markAsReadId, $eventIds ) ) {
+ $eventsToMarkAsRead[] = $markAsReadId;
+ }
}
- }
- if ( $eventsToMarkAsRead ) {
- // fetch the notifications to adjust the counters
- $notifMapper = new EchoNotificationMapper();
- $notifs = $notifMapper->fetchByUserEvents( $user, $eventsToMarkAsRead );
-
- foreach ( $notifs as $notif ) {
- if ( !$notif->getReadTimestamp() ) {
- if ( $notif->getEvent()->getSection() === EchoAttributeManager::MESSAGE ) {
- $subtractMessages++;
- } else {
- $subtractAlerts++;
+ if ( $eventsToMarkAsRead ) {
+ // fetch the notifications to adjust the counters
+ $notifMapper = new EchoNotificationMapper();
+ $notifs = $notifMapper->fetchByUserEvents( $user, $eventsToMarkAsRead );
+
+ foreach ( $notifs as $notif ) {
+ if ( !$notif->getReadTimestamp() ) {
+ $subtractions[$notif->getEvent()->getSection()]++;
+ $eventIds[] = intval( $notif->getEvent()->getId() );
}
- $eventIds[] = intval( $notif->getEvent()->getId() );
}
}
+ } else {
+ // Look up the notifications on the foreign wiki
+ $notifUser = MWEchoNotifUser::newFromUser( $user );
+ $notifInfo = $notifUser->getForeignNotificationInfo( $markAsReadIds, $markAsReadWiki );
+ foreach ( $notifInfo as $id => $info ) {
+ $subtractions[$info['section']]++;
+ }
+
+ // Schedule a deferred update to mark these notifications as read on the foreign wiki
+ DeferredUpdates::addCallableUpdate( function () use ( $user, $markAsReadIds, $markAsReadWiki ) {
+ $notifUser = MWEchoNotifUser::newFromUser( $user );
+ $notifUser->markReadForeign( $markAsReadIds, $markAsReadWiki );
+ } );
}
}
+ // Schedule a deferred update to mark local target_page and ?markasread= notifications as read
if ( $eventIds ) {
DeferredUpdates::addCallableUpdate( function () use ( $user, $eventIds ) {
$notifUser = MWEchoNotifUser::newFromUser( $user );
@@ -933,10 +918,30 @@ class EchoHooks {
} );
}
+ return $subtractions;
+ }
+
+ /**
+ * Handler for PersonalUrls hook.
+ * Add a "Notifications" item to the user toolbar ('personal URLs').
+ * @see http://www.mediawiki.org/wiki/Manual:Hooks/PersonalUrls
+ * @param array &$personal_urls Array of URLs to append to.
+ * @param Title &$title Title of page being visited.
+ * @param SkinTemplate $sk
+ * @return bool true in all cases
+ */
+ public static function onPersonalUrls( &$personal_urls, &$title, $sk ) {
+ $user = $sk->getUser();
+ if ( $user->isAnon() ) {
+ return true;
+ }
+
+ $subtractions = self::processMarkAsRead( $user, $sk->getOutput()->getRequest(), $title );
+
// Add a "My notifications" item to personal URLs
$notifUser = MWEchoNotifUser::newFromUser( $user );
- $msgCount = $notifUser->getMessageCount() - $subtractMessages;
- $alertCount = $notifUser->getAlertCount() - $subtractAlerts;
+ $msgCount = $notifUser->getMessageCount() - $subtractions[EchoAttributeManager::MESSAGE];
+ $alertCount = $notifUser->getAlertCount() - $subtractions[EchoAttributeManager::ALERT];
// But make sure we never show a negative number (T130853)
$msgCount = max( 0, $msgCount );
$alertCount = max( 0, $alertCount );
@@ -957,13 +962,6 @@ class EchoHooks {
'notice' => $seenMsgTime,
] );
- if (
- $wgEchoShowFooterNotice &&
- !$user->getOption( 'echo-dismiss-special-page-invitation' )
- ) {
- $sk->getOutput()->addJsConfigVars( 'wgEchoShowSpecialPageInvitation', true );
- }
-
$msgFormattedCount = EchoNotificationController::formatNotificationCount( $msgCount );
$alertFormattedCount = EchoNotificationController::formatNotificationCount( $alertCount );
@@ -974,7 +972,8 @@ class EchoHooks {
// HACK: inverted icons only work in the "MediaWiki" OOUI theme
// Avoid flashes in skins that don't use it (T111821)
- $sk->getOutput()->setupOOUI( strtolower( $sk->getSkinName() ), $sk->getOutput()->getLanguage()->getDir() );
+ $sk->getOutput()->setupOOUI(
+ strtolower( $sk->getSkinName() ), $sk->getOutput()->getLanguage()->getDir() );
$msgLinkClasses = [ "mw-echo-notifications-badge", "mw-echo-notification-badge-nojs" ];
$alertLinkClasses = [ "mw-echo-notifications-badge", "mw-echo-notification-badge-nojs" ];
@@ -983,7 +982,9 @@ class EchoHooks {
if (
$msgCount != 0 && // no unread notifications
$msgNotificationTimestamp !== false && // should already always be false if count === 0
- ( $seenMsgTime === null || $seenMsgTime < $msgNotificationTimestamp->getTimestamp( TS_ISO_8601 ) ) // there are no unseen notifications
+ // there are no unseen notifications
+ ( $seenMsgTime === null ||
+ $seenMsgTime < $msgNotificationTimestamp->getTimestamp( TS_ISO_8601 ) )
) {
$msgLinkClasses[] = 'mw-echo-unseen-notifications';
$hasUnseen = true;
@@ -998,7 +999,9 @@ class EchoHooks {
if (
$alertCount != 0 && // no unread notifications
$alertNotificationTimestamp !== false && // should already always be false if count === 0
- ( $seenAlertTime === null || $seenAlertTime < $alertNotificationTimestamp->getTimestamp( TS_ISO_8601 ) ) // all notifications have already been seen
+ // all notifications have already been seen
+ ( $seenAlertTime === null ||
+ $seenAlertTime < $alertNotificationTimestamp->getTimestamp( TS_ISO_8601 ) )
) {
$alertLinkClasses[] = 'mw-echo-unseen-notifications';
$hasUnseen = true;
@@ -1047,14 +1050,10 @@ class EchoHooks {
// If the user has new messages, display a talk page alert
// We need to check:
- // * Orange alert is enabled in configuration
- // * Enabled in user preferences
// * User actually has new messages
// * User is not viewing their user talk page, as user_newtalk
// will not have been cleared yet. (bug T107655).
- if ( $wgEchoNewMsgAlert && $user->getOption( 'echo-show-alert' )
- && $user->getNewtalk() && !$user->getTalkPage()->equals( $title )
- ) {
+ if ( $user->getNewtalk() && !$user->getTalkPage()->equals( $title ) ) {
if ( Hooks::run( 'BeforeDisplayOrangeAlert', [ $user, $title ] ) ) {
$personal_urls['mytalk']['text'] = $sk->msg( 'echo-new-messages' )->text();
$personal_urls['mytalk']['class'] = [ 'mw-echo-alert' ];
@@ -1122,20 +1121,11 @@ class EchoHooks {
global $wgEchoEventLoggingSchemas, $wgEchoEventLoggingVersion;
$user = $outputPage->getUser();
- // Provide info for the Overlay
-
+ // Provide info for ext.echo.logger
if ( $user->isLoggedIn() ) {
- $vars['wgEchoEventLoggingSchemas'] = $wgEchoEventLoggingSchemas;
+ $vars['wgEchoInteractionLogging'] = $wgEchoEventLoggingSchemas['EchoInteraction']['enabled']
+ && ExtensionRegistry::getInstance()->isLoaded( 'EventLogging' );
$vars['wgEchoEventLoggingVersion'] = $wgEchoEventLoggingVersion;
- } elseif (
- $outputPage->getTitle()->equals( SpecialPage::getTitleFor( 'JavaScriptTest', 'qunit' ) ) ||
- // Also if running from /plain or /export
- $outputPage->getTitle()->isSubpageOf( SpecialPage::getTitleFor( 'JavaScriptTest', 'qunit' ) )
- ) {
- // For testing purposes
- $vars['wgEchoEventLoggingSchemas'] = [
- 'EchoInteraction' => [],
- ];
}
return true;
@@ -1166,7 +1156,7 @@ class EchoHooks {
* @param array $newtalks This will be empty if the user has no new messages
* or an Array containing links and revisions if there are new messages
* @param User $user The user who is loading the page
- * @param OutputPage $out Output object
+ * @param OutputPage $out
* @return bool Should return false to prevent the new messages alert (OBOD)
* or true to allow the new messages alert
*/
@@ -1189,14 +1179,18 @@ class EchoHooks {
/**
* Handler for ArticleRollbackComplete hook.
* @see http://www.mediawiki.org/wiki/Manual:Hooks/ArticleRollbackComplete
- * @param WikiPage $page The article that was edited
+ *
+ * @param WikiPage $wikiPage The article that was edited
* @param User $agent The user who did the rollback
* @param Revision $newRevision The revision the page was reverted back to
* @param Revision $oldRevision The revision of the top edit that was reverted
+ *
* @return bool true in all cases
*/
- public static function onRollbackComplete( $page, $agent, $newRevision, $oldRevision ) {
+ public static function onRollbackComplete( WikiPage $wikiPage, $agent, $newRevision, $oldRevision ) {
$victimId = $oldRevision->getUser();
+ $latestRevision = $wikiPage->getRevision();
+ self::$lastRevertedRevision = $latestRevision;
if (
$victimId && // No notifications for anonymous users
@@ -1204,9 +1198,9 @@ class EchoHooks {
) {
EchoEvent::create( [
'type' => 'reverted',
- 'title' => $page->getTitle(),
+ 'title' => $wikiPage->getTitle(),
'extra' => [
- 'revid' => $page->getRevision()->getId(),
+ 'revid' => $latestRevision->getId(),
'reverted-user-id' => $victimId,
'reverted-revision-id' => $oldRevision->getId(),
'method' => 'rollback',
@@ -1274,6 +1268,27 @@ class EchoHooks {
}
/**
+ * Convert all values in an array to integers and filter out zeroes.
+ *
+ * @param array $numbers
+ *
+ * @return int[]
+ */
+ protected static function mapToInt( array $numbers ) {
+ $data = [];
+
+ foreach ( $numbers as $value ) {
+ $int = intval( $value );
+ if ( $int === 0 ) {
+ continue;
+ }
+ $data[] = $int;
+ }
+
+ return $data;
+ }
+
+ /**
* Handler for UserClearNewTalkNotification hook.
* @see http://www.mediawiki.org/wiki/Manual:Hooks/UserClearNewTalkNotification
* @param User $user User whose talk page notification should be marked as read
@@ -1282,7 +1297,7 @@ class EchoHooks {
public static function onUserClearNewTalkNotification( User $user ) {
if ( !$user->isAnon() ) {
DeferredUpdates::addCallableUpdate( function () use ( $user ) {
- MWEchoNotifUser::newFromUser( $user )->clearTalkNotification();
+ MWEchoNotifUser::newFromUser( $user )->clearUserTalkNotifications();
} );
}
@@ -1291,7 +1306,7 @@ class EchoHooks {
/**
* Handler for ParserTestTables hook, makes sure that Echo's tables are present during tests
- * @see http://www.mediawiki.org/wiki/Manual:Hooks/UserClearNewTalkNotification
+ * @see http://www.mediawiki.org/wiki/Manual:Hooks/ParserTestTables
* @param array &$tables List of DB tables to be used for parser tests
* @return bool true in all cases
*/
@@ -1313,8 +1328,6 @@ class EchoHooks {
* @return bool true in all cases
*/
public static function onEmailUserComplete( $address, $from, $subject, $text ) {
- global $wgContLang;
-
if ( $from->name === $address->name ) {
// nothing to notify
return true;
@@ -1324,9 +1337,11 @@ class EchoHooks {
$autoSubject = wfMessage( 'defemailsubject', $from->name )->inContentLanguage()->text();
if ( $subject === $autoSubject ) {
- $autoFooter = "\n\n-- \n" . wfMessage( 'emailuserfooter', $from->name, $address->name )->inContentLanguage()->text();
+ $autoFooter = "\n\n-- \n" . wfMessage( 'emailuserfooter', $from->name, $address->name )
+ ->inContentLanguage()->text();
$textWithoutFooter = preg_replace( '/' . preg_quote( $autoFooter, '/' ) . '$/', '', $text );
- $preview = $wgContLang->truncate( $textWithoutFooter, 125 );
+ $preview = MediaWikiServices::getInstance()->getContentLanguage()
+ ->truncateForVisual( $textWithoutFooter, 125 );
} else {
$preview = $subject;
}
@@ -1361,9 +1376,9 @@ class EchoHooks {
public static function onMergeAccountFromTo( User &$oldUser, User &$newUser ) {
DeferredUpdates::addCallableUpdate( function () use ( $oldUser, $newUser ) {
- MWEchoNotifUser::newFromUser( $oldUser )->resetNotificationCount( DB_MASTER );
+ MWEchoNotifUser::newFromUser( $oldUser )->resetNotificationCount();
if ( !$newUser->isAnon() ) {
- MWEchoNotifUser::newFromUser( $newUser )->resetNotificationCount( DB_MASTER );
+ MWEchoNotifUser::newFromUser( $newUser )->resetNotificationCount();
}
} );
@@ -1390,15 +1405,19 @@ class EchoHooks {
}
public static function onResourceLoaderGetConfigVars( &$vars ) {
- global $wgEchoFooterNoticeURL;
-
$vars['wgEchoMaxNotificationCount'] = MWEchoNotifUser::MAX_BADGE_COUNT;
- $vars['wgEchoFooterNoticeURL'] = $wgEchoFooterNoticeURL;
return true;
}
- public static function onArticleDeleteComplete( WikiPage &$article, User &$user, $reason, $articleId, Content $content = null, LogEntry $logEntry ) {
+ public static function onArticleDeleteComplete(
+ WikiPage &$article,
+ User &$user,
+ $reason,
+ $articleId,
+ Content $content = null,
+ LogEntry $logEntry
+ ) {
\DeferredUpdates::addCallableUpdate( function () use ( $articleId ) {
$eventMapper = new EchoEventMapper();
$eventIds = $eventMapper->fetchIdsByPage( $articleId );
diff --git a/Echo/includes/EchoOnWikiList.php b/Echo/includes/EchoOnWikiList.php
new file mode 100644
index 00000000..5bdc4dd6
--- /dev/null
+++ b/Echo/includes/EchoOnWikiList.php
@@ -0,0 +1,54 @@
+<?php
+
+/**
+ * Implements EchoContainmentList interface for sourcing a list of items from a wiki
+ * page. Uses the pages latest revision ID as cache key.
+ */
+class EchoOnWikiList implements EchoContainmentList {
+ /**
+ * @var Title|null A title object representing the page to source the list from,
+ * or null if the page does not exist.
+ */
+ protected $title;
+
+ /**
+ * @param int $titleNs An NS_* constant representing the mediawiki namespace of the page
+ * @param string $titleString String portion of the wiki page title
+ */
+ public function __construct( $titleNs, $titleString ) {
+ $title = Title::newFromText( $titleString, $titleNs );
+ if ( $title !== null && $title->getArticleId() ) {
+ $this->title = $title;
+ }
+ }
+
+ /**
+ * @inheritDoc
+ */
+ public function getValues() {
+ if ( !$this->title ) {
+ return [];
+ }
+
+ $article = WikiPage::newFromID( $this->title->getArticleId() );
+ if ( $article === null || !$article->exists() ) {
+ return [];
+ }
+ $text = ContentHandler::getContentText( $article->getContent() );
+ if ( $text === null ) {
+ return [];
+ }
+ return array_filter( array_map( 'trim', explode( "\n", $text ) ) );
+ }
+
+ /**
+ * @inheritDoc
+ */
+ public function getCacheKey() {
+ if ( !$this->title ) {
+ return '';
+ }
+
+ return $this->title->getLatestRevID();
+ }
+}
diff --git a/Echo/includes/EchoSummaryParser.php b/Echo/includes/EchoSummaryParser.php
new file mode 100644
index 00000000..a701b101
--- /dev/null
+++ b/Echo/includes/EchoSummaryParser.php
@@ -0,0 +1,55 @@
+<?php
+
+class EchoSummaryParser {
+ /** @var callable */
+ private $userLookup;
+
+ /**
+ * @param callable|null $userLookup Function that receives User object and returns its id
+ * or 0 if the user doesn't exist. Passing null to this parameter will result in default
+ * implementation being used.
+ */
+ public function __construct( callable $userLookup = null ) {
+ $this->userLookup = $userLookup;
+ if ( !$this->userLookup ) {
+ $this->userLookup = function ( User $user ) {
+ return $user->getId();
+ };
+ }
+ }
+
+ /**
+ * Returns a list of registered users linked in an edit summary
+ *
+ * @param string $summary
+ * @return User[] Array of username => User object
+ */
+ public function parse( $summary ) {
+ // Remove section autocomments. Replace with characters that can't be in titles,
+ // to prevent fun stuff like "[[foo /* section */ bar]]".
+ $summary = preg_replace( '#/\*.*?\*/#', ' [] ', $summary );
+
+ $users = [];
+ $regex = '/\[\[([' . Title::legalChars() . ']*+)(?:\|.*?)?\]\]/';
+ if ( preg_match_all( $regex, $summary, $matches ) ) {
+ foreach ( $matches[1] as $match ) {
+ if ( preg_match( '/^:/', $match ) ) {
+ continue;
+ }
+ $title = Title::newFromText( $match );
+ if ( $title
+ && $title->isLocal()
+ && $title->getNamespace() === NS_USER
+ ) {
+ $user = User::newFromName( $title->getText() );
+ $lookup = $this->userLookup;
+ if ( $user && $lookup( $user ) > 0 ) {
+ $users[$user->getName()] = $user;
+ }
+ }
+ }
+ }
+
+ return $users;
+ }
+}
diff --git a/Echo/includes/EmailBatch.php b/Echo/includes/EmailBatch.php
index 7947fda0..df400013 100644
--- a/Echo/includes/EmailBatch.php
+++ b/Echo/includes/EmailBatch.php
@@ -1,5 +1,7 @@
<?php
+use Wikimedia\Rdbms\IResultWrapper;
+
/**
* Handle user email batch ( daily/ weekly )
*/
@@ -41,7 +43,7 @@ class MWEchoEmailBatch {
*/
public function __construct( User $user ) {
$this->mUser = $user;
- $this->language = wfGetLangObj( $this->mUser->getOption( 'language' ) );
+ $this->language = Language::factory( $this->mUser->getOption( 'language' ) );
}
/**
@@ -60,7 +62,7 @@ class MWEchoEmailBatch {
* configured to go out tonight or at the end of the week.
*
* When false, all pending notifications will be returned.
- * @return MWEchoEmailBatch/false
+ * @return MWEchoEmailBatch|false
*/
public static function newFromUserId( $userId, $enforceFrequency = true ) {
$user = User::newFromId( intval( $userId ) );
@@ -146,7 +148,7 @@ class MWEchoEmailBatch {
* @return bool true if event exists false otherwise
*/
protected function setLastEvent() {
- $dbr = MWEchoDbFactory::getDB( DB_SLAVE );
+ $dbr = MWEchoDbFactory::getDB( DB_REPLICA );
$res = $dbr->selectField(
[ 'echo_email_batch' ],
[ 'MAX( eeb_event_id )' ],
@@ -174,7 +176,7 @@ class MWEchoEmailBatch {
/**
* Get the events queued for the current user
- * @return array
+ * @return \stdClass[]
*/
protected function getEvents() {
global $wgEchoNotifications;
@@ -188,7 +190,7 @@ class MWEchoEmailBatch {
// composite index, favor insert performance, storage space over read
// performance in this case
if ( $validEvents ) {
- $dbr = MWEchoDbFactory::getDB( DB_SLAVE );
+ $dbr = MWEchoDbFactory::getDB( DB_REPLICA );
$conds = [
'eeb_user_id' => $this->mUser->getId(),
@@ -247,7 +249,7 @@ class MWEchoEmailBatch {
* Send the batch email
*/
public function sendEmail() {
- global $wgNotificationSender, $wgNotificationReplyName;
+ global $wgPasswordSender, $wgNoReplyAddress;
if ( $this->mUser->getOption( 'echo-email-frequency' ) == EchoEmailFrequency::WEEKLY_DIGEST ) {
$frequency = 'weekly';
@@ -280,8 +282,8 @@ class MWEchoEmailBatch {
}
$toAddress = MailAddress::newFromUser( $this->mUser );
- $fromAddress = new MailAddress( $wgNotificationSender, EchoHooks::getNotificationSenderName() );
- $replyTo = new MailAddress( $wgNotificationSender, $wgNotificationReplyName );
+ $fromAddress = new MailAddress( $wgPasswordSender, wfMessage( 'emailsender' )->inContentLanguage()->text() );
+ $replyTo = new MailAddress( $wgNoReplyAddress );
// @Todo Push the email to job queue or just send it out directly?
UserMailer::send( $toAddress, $fromAddress, $content['subject'], $content['body'], [ 'replyTo' => $replyTo ] );
@@ -327,10 +329,10 @@ class MWEchoEmailBatch {
* @param int $batchSize
*
* @throws MWException
- * @return ResultWrapper|bool
+ * @return IResultWrapper|bool
*/
public static function getUsersToNotify( $startUserId, $batchSize ) {
- $dbr = MWEchoDbFactory::getDB( DB_SLAVE );
+ $dbr = MWEchoDbFactory::getDB( DB_REPLICA );
$res = $dbr->select(
[ 'echo_email_batch' ],
[ 'eeb_user_id' ],
diff --git a/Echo/includes/EventLogging.php b/Echo/includes/EventLogging.php
index c7f0ba52..9ffba03a 100644
--- a/Echo/includes/EventLogging.php
+++ b/Echo/includes/EventLogging.php
@@ -5,6 +5,14 @@
*/
class MWEchoEventLogging {
+ private static $revisionIds = [
+ 'Echo' => 7731316,
+ 'EchoMail' => 5467650,
+ // Keep in sync with client-side revision
+ // in extension.json
+ 'EchoInteraction' => 15823738
+ ];
+
/**
* This is the only function that interacts with EventLogging
*
@@ -17,14 +25,17 @@ class MWEchoEventLogging {
global $wgEchoEventLoggingSchemas, $wgEchoEventLoggingVersion;
$schemaConfig = $wgEchoEventLoggingSchemas[$schema];
- if ( !$schemaConfig['enabled'] ) {
+ if ( !ExtensionRegistry::getInstance()->isLoaded( 'EventLogging' )
+ || !$schemaConfig['enabled']
+ ) {
// If logging for this schema is disabled, it's a no-op.
return;
}
+ $revision = self::$revisionIds[$schema];
$data['version'] = $wgEchoEventLoggingVersion;
- EventLogging::logEvent( $schema, $schemaConfig['revision'], $data );
+ EventLogging::logEvent( $schema, $revision, $data );
}
/**
diff --git a/Echo/includes/ForeignNotifications.php b/Echo/includes/ForeignNotifications.php
index 9b3846ac..f4299d95 100644
--- a/Echo/includes/ForeignNotifications.php
+++ b/Echo/includes/ForeignNotifications.php
@@ -3,7 +3,7 @@
/**
* Caches the result of EchoUnreadWikis::getUnreadCounts() and interprets the results in various useful ways.
*
- * If the user has disabled cross-wiki notifications in their preferences (see isEnabledByUser()), this class
+ * If the user has disabled cross-wiki notifications in their preferences (see {@see EchoForeignNotifications::isEnabledByUser}), this class
* won't do anything and will behave as if the user has no foreign notifications. For example, getCount() will
* return 0. If you need to get foreign notification information for a user even though they may not have
* enabled the preference, set $forceEnable=true in the constructor.
@@ -20,12 +20,12 @@ class EchoForeignNotifications {
protected $enabled = false;
/**
- * @var array [(str) section => (int) count, ...]
+ * @var int[] [(str) section => (int) count, ...]
*/
protected $counts = [ EchoAttributeManager::ALERT => 0, EchoAttributeManager::MESSAGE => 0 ];
/**
- * @var array [(str) section => (string[]) wikis, ...]
+ * @var array[] [(str) section => (string[]) wikis, ...]
*/
protected $wikis = [ EchoAttributeManager::ALERT => [], EchoAttributeManager::MESSAGE => [] ];
@@ -35,7 +35,7 @@ class EchoForeignNotifications {
protected $timestamps = [ EchoAttributeManager::ALERT => false, EchoAttributeManager::MESSAGE => false ];
/**
- * @var array [(str) wiki => [ (str) section => (MWTimestamp) timestamp, ...], ...]
+ * @var array[] [(str) wiki => [ (str) section => (MWTimestamp) timestamp, ...], ...]
*/
protected $wikiTimestamps = [];
@@ -218,13 +218,13 @@ class EchoForeignNotifications {
/**
* @param string $wikiId
- * @param array $siteFromDB $wgConf->siteFromDB( $wikiId ) result
+ * @param array|null $siteFromDB $wgConf->siteFromDB( $wikiId ) result
* @return mixed|string
*/
protected static function getWikiTitle( $wikiId, array $siteFromDB = null ) {
global $wgConf, $wgLang;
- $msg = wfMessage( 'project-localized-name-'.$wikiId );
+ $msg = wfMessage( 'project-localized-name-' . $wikiId );
// check if WikimediaMessages localized project names are available
if ( $msg->exists() ) {
return $msg->text();
diff --git a/Echo/includes/ForeignWikiRequest.php b/Echo/includes/ForeignWikiRequest.php
index c79ccdd7..b3daea33 100644
--- a/Echo/includes/ForeignWikiRequest.php
+++ b/Echo/includes/ForeignWikiRequest.php
@@ -6,28 +6,34 @@ use MediaWiki\Session\SessionManager;
class EchoForeignWikiRequest {
/**
- * @param User $user User object
+ * @param User $user
* @param array $params Request parameters
* @param array $wikis Wikis to send the request to
- * @param string $wikiParam Parameter name to set to the name of the wiki
+ * @param string|null $wikiParam Parameter name to set to the name of the wiki
+ * @param string|null $postToken If set, use POST requests and inject a token of this type;
+ * if null, use GET requests.
*/
- public function __construct( User $user, array $params, array $wikis, $wikiParam = null ) {
+ public function __construct( User $user, array $params, array $wikis, $wikiParam = null, $postToken = null ) {
$this->user = $user;
$this->params = $params;
$this->wikis = $wikis;
$this->wikiParam = $wikiParam;
+ $this->method = $postToken === null ? 'GET' : 'POST';
+ $this->tokenType = $postToken;
+
+ $this->csrfTokens = null;
}
/**
* Execute the request
- * @return array [ wiki => result ]
+ * @return array[] [ wiki => result ]
*/
public function execute() {
if ( !$this->canUseCentralAuth() ) {
return [];
}
- $reqs = $this->getRequestParams();
+ $reqs = $this->getRequestParams( $this->method, [ $this, 'getQueryParams' ] );
return $this->doRequests( $reqs );
}
@@ -66,7 +72,8 @@ class EchoForeignWikiRequest {
return $api->getResult()->getResultData( [ 'centralauthtoken', 'centralauthtoken' ] );
} catch ( Exception $ex ) {
LoggerFactory::getInstance( 'Echo' )->debug(
- 'Exception when fetching CentralAuth token: wiki: {wiki}, userName: {userName}, userId: {userId}, centralId: {centralId}, exception: {exception}',
+ 'Exception when fetching CentralAuth token: wiki: {wiki}, userName: {userName}, ' .
+ 'userId: {userId}, centralId: {centralId}, exception: {exception}',
[
'wiki' => wfWikiID(),
'userName' => $user->getName(),
@@ -83,9 +90,36 @@ class EchoForeignWikiRequest {
}
/**
- * @return array
+ * Get the CSRF token for a given wiki.
+ * This method fetches the tokens for all requested wikis at once and caches the result.
+ *
+ * @param string $wiki Name of the wiki to get a token for
+ * @return string Token
+ */
+ protected function getCsrfToken( $wiki ) {
+ if ( $this->csrfTokens === null ) {
+ $reqs = $this->getRequestParams( 'GET', [
+ 'action' => 'query',
+ 'meta' => 'tokens',
+ 'type' => $this->tokenType,
+ 'format' => 'json',
+ 'centralauthtoken' => $this->getCentralAuthToken( $this->user ),
+ ] );
+ $responses = $this->doRequests( $reqs );
+ foreach ( $responses as $w => $response ) {
+ $this->csrfTokens[$w] = $response['query']['tokens']['csrftoken'];
+ }
+ }
+ return $this->csrfTokens[$wiki];
+ }
+
+ /**
+ * @param string $method 'GET' or 'POST'
+ * @param array|callable $params Associative array of query string / POST parameters,
+ * or a callback that takes a wiki name and returns such an array
+ * @return array[] Array of request parameters to pass to doRequests(), keyed by wiki name
*/
- protected function getRequestParams() {
+ protected function getRequestParams( $method, $params ) {
$apis = EchoForeignNotifications::getApiEndpoints( $this->wikis );
if ( !$apis ) {
return [];
@@ -93,10 +127,11 @@ class EchoForeignWikiRequest {
$reqs = [];
foreach ( $apis as $wiki => $api ) {
+ $queryKey = $method === 'POST' ? 'body' : 'query';
$reqs[$wiki] = [
- 'method' => 'GET',
+ 'method' => $method,
'url' => $api['url'],
- 'query' => $this->getQueryParams( $wiki ),
+ $queryKey => is_callable( $params ) ? call_user_func( $params, $wiki ) : $params
];
}
@@ -114,6 +149,9 @@ class EchoForeignWikiRequest {
// cross-wiki api requests...
$extraParams[$this->wikiParam] = $wiki;
}
+ if ( $this->method === 'POST' ) {
+ $extraParams['token'] = $this->getCsrfToken( $wiki );
+ }
return [
'centralauthtoken' => $this->getCentralAuthToken( $this->user ),
@@ -128,7 +166,7 @@ class EchoForeignWikiRequest {
/**
* @param array $reqs API request params
- * @return array
+ * @return array[]
* @throws Exception
*/
protected function doRequests( array $reqs ) {
diff --git a/Echo/includes/NotifUser.php b/Echo/includes/NotifUser.php
index d55207c1..59dd68a0 100644
--- a/Echo/includes/NotifUser.php
+++ b/Echo/includes/NotifUser.php
@@ -1,4 +1,5 @@
<?php
+
use MediaWiki\MediaWikiServices;
/**
@@ -42,12 +43,17 @@ class MWEchoNotifUser {
private $foreignNotifications = null;
/**
- * @var array
+ * @var array[]|null
+ */
+ private $localCountsAndTimestamps;
+
+ /**
+ * @var array[]|null
*/
- private $cached;
+ private $globalCountsAndTimestamps;
/**
- * @var array|null
+ * @var array[]|null
*/
private $mForeignData = null;
@@ -60,6 +66,10 @@ class MWEchoNotifUser {
// i18n messages (100 and 99) in all repositories using Echo.
const MAX_BADGE_COUNT = 99;
+ const CACHE_TTL = 86400;
+ const CACHE_KEY = 'echo-notification-counts';
+ const CHECK_KEY = 'echo-notification-updated';
+
/**
* Usually client code doesn't need to initialize the object directly
* because it could be obtained from factory method newFromUser()
@@ -104,91 +114,43 @@ class MWEchoNotifUser {
}
/**
- * Clear talk page notification when users visit their talk pages. This
- * only resets if the notification count is less than max notification
- * count. If the user has 99+ notifications, decrementing 1 bundled talk
- * page notification would not really affect the count
+ * Mark all edit-user-talk notifications as read. This is called when a user visits their user talk page.
*/
- public function clearTalkNotification() {
- // There is no new talk notification
- if ( $this->cache->get( $this->getTalkNotificationCacheKey() ) === '0' ) {
- return;
- }
-
- // Do nothing if the count display meets the max 99+
- if ( $this->notifCountHasReachedMax() ) {
- return;
- }
-
- // Mark the talk page notification as read
+ public function clearUserTalkNotifications() {
$this->markRead(
$this->userNotifGateway->getUnreadNotifications(
'edit-user-talk'
)
);
-
- $this->flagCacheWithNoTalkNotification();
- }
-
- /**
- * Flag the cache with new talk notification
- */
- public function flagCacheWithNewTalkNotification() {
- $this->cache->set( $this->getTalkNotificationCacheKey(), '1', 86400 );
- }
-
- /**
- * Flag the cache with no talk notification
- */
- public function flagCacheWithNoTalkNotification() {
- $this->cache->set( $this->getTalkNotificationCacheKey(), '0', 86400 );
- }
-
- /**
- * Memcache key for talk notification
- * @return string
- */
- public function getTalkNotificationCacheKey() {
- global $wgEchoCacheVersion;
- return wfMemcKey( 'echo-new-talk-notification', $this->mUser->getId(), $wgEchoCacheVersion );
- }
-
- /**
- * Check if the user has more notification count than max count display
- * @return bool
- */
- public function notifCountHasReachedMax() {
- if ( $this->getLocalNotificationCount() >= self::MAX_BADGE_COUNT ) {
- return true;
- } else {
- return false;
- }
}
/**
* Get message count for this user.
*
- * @param bool $cached Set to false to bypass the cache. (Optional. Defaults to true)
- * @param int $dbSource Use master or slave database to pull count (Optional. Defaults to DB_SLAVE)
* @return int
*/
- public function getMessageCount( $cached = true, $dbSource = DB_SLAVE ) {
- return $this->getNotificationCount( $cached, $dbSource, EchoAttributeManager::MESSAGE );
+ public function getMessageCount() {
+ return $this->getNotificationCount( EchoAttributeManager::MESSAGE );
}
/**
* Get alert count for this user.
*
- * @param bool $cached Set to false to bypass the cache. (Optional. Defaults to true)
- * @param int $dbSource Use master or slave database to pull count (Optional. Defaults to DB_SLAVE)
* @return int
*/
- public function getAlertCount( $cached = true, $dbSource = DB_SLAVE ) {
- return $this->getNotificationCount( $cached, $dbSource, EchoAttributeManager::ALERT );
+ public function getAlertCount() {
+ return $this->getNotificationCount( EchoAttributeManager::ALERT );
}
- public function getLocalNotificationCount( $cached = true, $dbSource = DB_SLAVE, $section = EchoAttributeManager::ALL ) {
- return $this->getNotificationCount( $cached, $dbSource, $section, false );
+ /**
+ * Get the number of unread local notifications in a given section. This does not include
+ * foreign notifications, even if the user has cross-wiki notifications enabled.
+ *
+ * @param string $section Notification section
+ * @return int
+ */
+ public function getLocalNotificationCount( $section = EchoAttributeManager::ALL ) {
+ return $this->getNotificationCount( $section, false );
}
/**
@@ -197,13 +159,11 @@ class MWEchoNotifUser {
*
* If $wgEchoCrossWikiNotifications is disabled, the $global parameter is ignored.
*
- * @param bool $cached Set to false to bypass the cache. (Optional. Defaults to true)
- * @param int $dbSource Use master or slave database to pull count (Optional. Defaults to DB_SLAVE)
* @param string $section Notification section
* @param bool|string $global Whether to include foreign notifications. If set to 'preference', uses the user's preference.
* @return int
*/
- public function getNotificationCount( $cached = true, $dbSource = DB_SLAVE, $section = EchoAttributeManager::ALL, $global = 'preference' ) {
+ public function getNotificationCount( $section = EchoAttributeManager::ALL, $global = 'preference' ) {
if ( $this->mUser->isAnon() ) {
return 0;
}
@@ -218,51 +178,27 @@ class MWEchoNotifUser {
$global = $this->getForeignNotifications()->isEnabledByUser();
}
- $memcKey = $this->getMemcKey( 'echo-notification-count' . ( $section === EchoAttributeManager::ALL ? '' : ( '-' . $section ) ), $global );
- if ( $cached ) {
- $data = $this->getFromCache( $memcKey );
- if ( $data !== false && $data !== null ) {
- return (int)$data;
- }
- }
-
- $attributeManager = EchoAttributeManager::newFromGlobalVars();
- if ( $section === EchoAttributeManager::ALL ) {
- $eventTypesToLoad = $attributeManager->getUserEnabledEvents( $this->mUser, 'web' );
- } else {
- $eventTypesToLoad = $attributeManager->getUserEnabledEventsbySections( $this->mUser, 'web', [ $section ] );
- }
-
- $count = (int)$this->userNotifGateway->getCappedNotificationCount( $dbSource, $eventTypesToLoad, self::MAX_BADGE_COUNT + 1 );
-
- if ( $global ) {
- $count = self::capNotificationCount( $count + $this->getForeignCount( $section ) );
- }
-
- $this->setInCache( $memcKey, $count, 86400 );
- return $count;
+ $data = $this->getCountsAndTimestamps( $global );
+ $count = $data[$global ? 'global' : 'local'][$section]['count'];
+ return (int)$count;
}
/**
* Get the timestamp of the latest unread alert
*
- * @param bool $cached Set to false to bypass the cache. (Optional. Defaults to true)
- * @param int $dbSource Use master or slave database to pull count (Optional. Defaults to DB_SLAVE)
* @return bool|MWTimestamp Timestamp of latest unread alert, or false if there are no unread alerts.
*/
- public function getLastUnreadAlertTime( $cached = true, $dbSource = DB_SLAVE ) {
- return $this->getLastUnreadNotificationTime( $cached, $dbSource, EchoAttributeManager::ALERT );
+ public function getLastUnreadAlertTime() {
+ return $this->getLastUnreadNotificationTime( EchoAttributeManager::ALERT );
}
/**
* Get the timestamp of the latest unread message
*
- * @param bool $cached Set to false to bypass the cache. (Optional. Defaults to true)
- * @param int $dbSource Use master or slave database to pull count (Optional. Defaults to DB_SLAVE)
* @return bool|MWTimestamp
*/
- public function getLastUnreadMessageTime( $cached = true, $dbSource = DB_SLAVE ) {
- return $this->getLastUnreadNotificationTime( $cached, $dbSource, EchoAttributeManager::MESSAGE );
+ public function getLastUnreadMessageTime() {
+ return $this->getLastUnreadNotificationTime( EchoAttributeManager::MESSAGE );
}
/**
@@ -270,13 +206,11 @@ class MWEchoNotifUser {
*
* If $wgEchoCrossWikiNotifications is disabled, the $global parameter is ignored.
*
- * @param bool $cached Set to false to bypass the cache. (Optional. Defaults to true)
- * @param int $dbSource Use master or slave database to pull count (Optional. Defaults to DB_SLAVE)
* @param string $section Notification section
* @param bool|string $global Whether to include foreign notifications. If set to 'preference', uses the user's preference.
* @return bool|MWTimestamp Timestamp of latest unread message, or false if there are no unread messages.
*/
- public function getLastUnreadNotificationTime( $cached = true, $dbSource = DB_SLAVE, $section = EchoAttributeManager::ALL, $global = 'preference' ) {
+ public function getLastUnreadNotificationTime( $section = EchoAttributeManager::ALL, $global = 'preference' ) {
if ( $this->mUser->isAnon() ) {
return false;
}
@@ -291,66 +225,16 @@ class MWEchoNotifUser {
$global = $this->getForeignNotifications()->isEnabledByUser();
}
- $memcKey = $this->getMemcKey( 'echo-notification-timestamp' . ( $section === EchoAttributeManager::ALL ? '' : ( '-' . $section ) ), $global );
-
- // read from cache, if allowed
- if ( $cached ) {
- $timestamp = $this->getFromCache( $memcKey );
- if ( $timestamp === -1 ) {
- // -1 means the user has no notifications
- return false;
- } elseif ( $timestamp !== false ) {
- return new MWTimestamp( $timestamp );
- }
- // else cache miss
- }
-
- $timestamp = false;
-
- // Get timestamp of most recent local notification, if there is one
- $attributeManager = EchoAttributeManager::newFromGlobalVars();
- if ( $section === EchoAttributeManager::ALL ) {
- $eventTypesToLoad = $attributeManager->getUserEnabledEvents( $this->mUser, 'web' );
- } else {
- $eventTypesToLoad = $attributeManager->getUserEnabledEventsbySections( $this->mUser, 'web', [ $section ] );
- }
- $notifications = $this->notifMapper->fetchUnreadByUser( $this->mUser, 1, null, $eventTypesToLoad, null, $dbSource );
- if ( $notifications ) {
- $notification = reset( $notifications );
- $timestamp = new MWTimestamp( $notification->getTimestamp() );
- }
-
- // Use timestamp of most recent foreign notification, if it's more recent
- if ( $global ) {
- $foreignTime = $this->getForeignTimestamp( $section );
-
- if (
- $foreignTime !== false &&
- // $foreignTime < $timestamp = invert 0
- // $foreignTime > $timestamp = invert 1
- ( $timestamp === false || $foreignTime->diff( $timestamp )->invert === 1 )
- ) {
- $timestamp = $foreignTime;
- }
- }
-
- if ( $timestamp === false ) {
- // No notifications, so no timestamp
- $returnValue = false;
- $cacheValue = -1;
- } else {
- $returnValue = $timestamp;
- $cacheValue = $timestamp->getTimestamp( TS_MW );
- }
-
- $this->setInCache( $memcKey, $cacheValue, 86400 );
- return $returnValue;
+ $data = $this->getCountsAndTimestamps( $global );
+ $timestamp = $data[$global ? 'global' : 'local'][$section]['timestamp'];
+ return $timestamp === -1 ? false : new MWTimestamp( $timestamp );
}
/**
* Mark one or more notifications read for a user.
* @param array $eventIds Array of event IDs to mark read
- * @return bool
+ * @return bool Returns true when data has been updated in DB, false on
+ * failure, or when there was nothing to update
*/
public function markRead( $eventIds ) {
$eventIds = array_filter( (array)$eventIds, 'is_numeric' );
@@ -358,10 +242,10 @@ class MWEchoNotifUser {
return false;
}
- $res = $this->userNotifGateway->markRead( $eventIds );
- if ( $res ) {
+ $updated = $this->userNotifGateway->markRead( $eventIds );
+ if ( $updated ) {
// Update notification count in cache
- $this->resetNotificationCount( DB_MASTER );
+ $this->resetNotificationCount();
// After this 'mark read', is there any unread edit-user-talk
// remaining? If not, we should clear the newtalk flag.
@@ -370,19 +254,20 @@ class MWEchoNotifUser {
$categoryMap = $attributeManager->getEventsByCategory();
$usertalkTypes = $categoryMap['edit-user-talk'];
$unreadEditUserTalk = $this->notifMapper->fetchUnreadByUser( $this->mUser, 1, null, $usertalkTypes, null, DB_MASTER );
- if ( count( $unreadEditUserTalk ) === 0 ) {
+ if ( $unreadEditUserTalk === [] ) {
$this->mUser->setNewtalk( false );
}
}
}
- return $res;
+ return $updated;
}
/**
* Mark one or more notifications unread for a user.
* @param array $eventIds Array of event IDs to mark unread
- * @return bool
+ * @return bool Returns true when data has been updated in DB, false on
+ * failure, or when there was nothing to update
*/
public function markUnRead( $eventIds ) {
$eventIds = array_filter( (array)$eventIds, 'is_numeric' );
@@ -390,10 +275,10 @@ class MWEchoNotifUser {
return false;
}
- $res = $this->userNotifGateway->markUnRead( $eventIds );
- if ( $res ) {
+ $updated = $this->userNotifGateway->markUnRead( $eventIds );
+ if ( $updated ) {
// Update notification count in cache
- $this->resetNotificationCount( DB_MASTER );
+ $this->resetNotificationCount();
// After this 'mark unread', is there any unread edit-user-talk?
// If so, we should add the edit-user-talk flag
@@ -402,13 +287,13 @@ class MWEchoNotifUser {
$categoryMap = $attributeManager->getEventsByCategory();
$usertalkTypes = $categoryMap['edit-user-talk'];
$unreadEditUserTalk = $this->notifMapper->fetchUnreadByUser( $this->mUser, 1, null, $usertalkTypes, null, DB_MASTER );
- if ( count( $unreadEditUserTalk ) > 0 ) {
+ if ( $unreadEditUserTalk !== [] ) {
$this->mUser->setNewtalk( true );
}
}
}
- return $res;
+ return $updated;
}
/**
@@ -450,42 +335,119 @@ class MWEchoNotifUser {
}, $notifs )
);
- $res = $this->markRead( $eventIds );
- if ( $res ) {
+ $updated = $this->markRead( $eventIds );
+ if ( $updated ) {
// Delete records from echo_target_page
/**
* Keep the 'echo_target_page' records so they can be used for moderation.
*/
// $this->targetPageMapper->deleteByUserEvents( $this->mUser, $eventIds );
- if ( count( $notifs ) < $wgEchoMaxUpdateCount ) {
- $this->flagCacheWithNoTalkNotification();
- }
}
- return $res;
+ return $updated;
+ }
+
+ /**
+ * Mark one of more notifications as read on a foreign wiki.
+ *
+ * @param int[] $eventIds Event IDs to mark as read
+ * @param string $wiki Wiki name
+ */
+ public function markReadForeign( array $eventIds, $wiki ) {
+ $foreignReq = new EchoForeignWikiRequest(
+ $this->mUser,
+ [
+ 'action' => 'echomarkread',
+ 'list' => implode( '|', $eventIds ),
+ ],
+ [ $wiki ],
+ 'wikis',
+ 'csrf'
+ );
+ $foreignReq->execute();
+ }
+
+ /**
+ * Get information about a set of unread notifications on a foreign wiki.
+ *
+ * @param int[] $eventIds Event IDs to look up. Only unread notifications can be found.
+ * @param string $wiki Wiki name
+ * @return array[] Array of notification data as returned by api.php, keyed by event ID
+ */
+ public function getForeignNotificationInfo( array $eventIds, $wiki ) {
+ $foreignReq = new EchoForeignWikiRequest(
+ $this->mUser,
+ [
+ 'action' => 'query',
+ 'meta' => 'notifications',
+ 'notprop' => 'list',
+ 'notfilter' => '!read',
+ 'notlimit' => 'max'
+ ],
+ [ $wiki ],
+ 'notwikis'
+ );
+ $foreignResults = $foreignReq->execute();
+ $list = $foreignResults[$wiki]['query']['notifications']['list'] ?? [];
+
+ $result = [];
+ foreach ( $list as $notif ) {
+ if ( in_array( $notif['id'], $eventIds ) ) {
+ $result[$notif['id']] = $notif;
+ }
+ }
+ return $result;
}
/**
- * Invalidate cache and update echo_unread_wikis if x-wiki notifications is enabled
- * NOTE: Consider calling this function from a deferred update since it may access the db
+ * Invalidate cache and update echo_unread_wikis if x-wiki notifications is enabled.
+ *
+ * This updates the user's touched timestamp, as well as the value returned by getGlobalUpdateTime().
*
- * @param int $dbSource Use master or replica database to pull count
+ * NOTE: Consider calling this function from a deferred update, since it will read from and write to
+ * the master DB if cross-wiki notifications are enabled.
*/
- public function resetNotificationCount( $dbSource = DB_REPLICA ) {
+ public function resetNotificationCount() {
global $wgEchoCrossWikiNotifications;
+
+ // Delete cached local counts and timestamps
+ $localMemcKey = $this->getMemcKey( self::CACHE_KEY );
+ $this->cache->delete( $localMemcKey );
+
+ // Update the user touched timestamp for the local user
+ $this->mUser->invalidateCache();
+
if ( $wgEchoCrossWikiNotifications ) {
- // Schedule an update to the echo_unread_wikis table
+ // Delete cached global counts and timestamps
+ $globalMemcKey = $this->getGlobalMemcKey( self::CACHE_KEY );
+ if ( $globalMemcKey !== false ) {
+ $this->cache->delete( $globalMemcKey );
+ }
+
$uw = EchoUnreadWikis::newFromUser( $this->mUser );
if ( $uw ) {
- $alertCount = $this->getNotificationCount( false, $dbSource, EchoAttributeManager::ALERT, false );
- $msgCount = $this->getNotificationCount( false, $dbSource, EchoAttributeManager::MESSAGE, false );
- $alertUnread = $this->getLastUnreadNotificationTime( false, $dbSource, EchoAttributeManager::ALERT, false );
- $msgUnread = $this->getLastUnreadNotificationTime( false, $dbSource, EchoAttributeManager::MESSAGE, false );
- $uw->updateCount( wfWikiID(), $alertCount, $alertUnread, $msgCount, $msgUnread );
+ // Immediately compute new local counts and timestamps
+ $newLocalData = $this->computeLocalCountsAndTimestamps( DB_MASTER );
+ // Write the new values to the echo_unread_wikis table
+ $alertTs = $newLocalData[EchoAttributeManager::ALERT]['timestamp'];
+ $messageTs = $newLocalData[EchoAttributeManager::MESSAGE]['timestamp'];
+ $uw->updateCount(
+ wfWikiID(),
+ $newLocalData[EchoAttributeManager::ALERT]['count'],
+ $alertTs === -1 ? false : new MWTimestamp( $alertTs ),
+ $newLocalData[EchoAttributeManager::MESSAGE]['count'],
+ $messageTs === -1 ? false : new MWTimestamp( $messageTs )
+ );
+ // We could set() $newLocalData into the cache here, but we don't because that seems risky;
+ // instead we let it be recomputed on demand
}
- }
- $this->invalidateCache();
+ // Update the global touched timestamp
+ $checkKey = $this->getGlobalMemcKey( self::CHECK_KEY );
+ if ( $checkKey ) {
+ $this->cache->touchCheckKey( $checkKey );
+ }
+ }
}
/**
@@ -497,7 +459,7 @@ class MWEchoNotifUser {
* @return string|false MW timestamp of the last update, or false if the user is not attached
*/
public function getGlobalUpdateTime() {
- $key = $this->getGlobalMemcKey( 'echo-notification-updated' );
+ $key = $this->getGlobalMemcKey( self::CHECK_KEY );
if ( $key === false ) {
return false;
}
@@ -505,143 +467,159 @@ class MWEchoNotifUser {
}
/**
- * Invalidate user caches related to notification counts/timestamps.
+ * Get the number of notifications in each section, and the timestamp of the latest notification in
+ * each section. This returns the raw data structure that is stored in the cache; unless you want
+ * all of this information, you're probably looking for getNotificationCount(),
+ * getLastUnreadNotificationTime() or one of its wrappers.
*
- * This bumps the local user's touched timestamp as well as the timestamp returned by getGlobalUpdateTime().
- */
- protected function invalidateCache() {
- // Update the user touched timestamp for the local user
- $this->mUser->invalidateCache();
-
- $this->deleteFromCache( $this->getLocalKeys() );
-
- global $wgEchoCrossWikiNotifications;
- if ( $wgEchoCrossWikiNotifications ) {
- $this->deleteFromCache( $this->getGlobalKeys() );
-
- // Update the global touched timestamp
- $key = $this->getGlobalMemcKey( 'echo-notification-updated' );
- if ( $key ) {
- $this->cache->touchCheckKey( $key );
+ * The returned data structure looks like:
+ * [
+ * 'local' => [
+ * 'alert' => [ 'count' => N, 'timestamp' => TS ],
+ * 'message' => [ 'count' = N, 'timestamp' => TS ],
+ * 'all' => [ 'count' => N, 'timestamp' => TS ],
+ * ],
+ * 'global' => [
+ * 'alert' => [ 'count' => N, 'timestamp' => TS ],
+ * 'message' => [ 'count' = N, 'timestamp' => TS ],
+ * 'all' => [ 'count' => N, 'timestamp' => TS ],
+ * ],
+ * ]
+ * Where N is a number and TS is a timestamp in TS_MW format or -1. If $includeGlobal is false,
+ * the 'global' key will not be present.
+ *
+ * @param bool $includeGlobal Whether to include cross-wiki notifications as well
+ * @return array[]
+ */
+ public function getCountsAndTimestamps( $includeGlobal = false ) {
+ if ( $this->localCountsAndTimestamps === null ) {
+ $this->localCountsAndTimestamps = $this->cache->getWithSetCallback(
+ $this->getMemcKey( self::CACHE_KEY ),
+ self::CACHE_TTL,
+ function ( $oldValue, &$ttl, array &$setOpts ) {
+ $dbr = $this->userNotifGateway->getDB( DB_REPLICA );
+ $setOpts += Database::getCacheSetOptions( $dbr );
+ return $this->computeLocalCountsAndTimestamps();
+ }
+ );
+ }
+ $result = [ 'local' => $this->localCountsAndTimestamps ];
+
+ if ( $includeGlobal ) {
+ if ( $this->globalCountsAndTimestamps === null ) {
+ $memcKey = $this->getGlobalMemcKey( self::CACHE_KEY );
+ // If getGlobalMemcKey returns false, we don't have a global user ID
+ // In that case, don't compute data that we can't cache or store
+ if ( $memcKey !== false ) {
+ $this->globalCountsAndTimestamps = $this->cache->getWithSetCallback(
+ $memcKey,
+ self::CACHE_TTL,
+ function ( $oldValue, &$ttl, array &$setOpts ) {
+ $dbr = $this->userNotifGateway->getDB( DB_REPLICA );
+ $setOpts += Database::getCacheSetOptions( $dbr );
+ return $this->computeGlobalCountsAndTimestamps();
+ }
+ );
+ }
}
+ $result['global'] = $this->globalCountsAndTimestamps;
}
+ return $result;
}
/**
- * Get the user's email notification format
- * @return string
+ * Compute the counts and timestamps for the local notifications in each section.
+ * @param int $dbSource DB_REPLICA or DB_MASTER
+ * @return array[] [ 'alert' => [ 'count' => N, 'timestamp' => TS ], ... ]
*/
- public function getEmailFormat() {
- global $wgAllowHTMLEmail;
+ protected function computeLocalCountsAndTimestamps( $dbSource = DB_REPLICA ) {
+ $attributeManager = EchoAttributeManager::newFromGlobalVars();
+ $result = [];
+ $totals = [ 'count' => 0, 'timestamp' => -1 ];
- if ( $wgAllowHTMLEmail ) {
- return $this->mUser->getOption( 'echo-email-format' );
- } else {
- return EchoEmailFormat::PLAIN_TEXT;
+ foreach ( EchoAttributeManager::$sections as $section ) {
+ $eventTypesToLoad = $attributeManager->getUserEnabledEventsbySections( $this->mUser, 'web', [ $section ] );
+
+ $count = (int)$this->userNotifGateway->getCappedNotificationCount( $dbSource, $eventTypesToLoad, self::MAX_BADGE_COUNT + 1 );
+ $result[$section]['count'] = $count;
+ $totals['count'] += $count;
+
+ $notifications = $this->notifMapper->fetchUnreadByUser( $this->mUser, 1, null, $eventTypesToLoad, null, $dbSource );
+ if ( $notifications ) {
+ $notification = reset( $notifications );
+ $timestamp = $notification->getTimestamp();
+ } else {
+ $timestamp = -1;
+ }
+ $result[$section]['timestamp'] = $timestamp;
+ $totals['timestamp'] = max( $totals['timestamp'], $timestamp );
}
+ $totals['count'] = self::capNotificationCount( $totals['count'] );
+ $result[EchoAttributeManager::ALL] = $totals;
+ return $result;
}
/**
- * Get a cache entry from the cache, using a preloaded instance cache.
- * @param string|false $memcKey Cache key returned by getMemcKey()
- * @return mixed Cache value
+ * Compute the global counts and timestamps for each section.
+ *
+ * This calls getCountsAndTimestamps() to get data about local notifications, which may end up
+ * calling computeLocalCountsAndTimestamps() if there's a cache miss.
+ * @return array[] [ 'alert' => [ 'count' => N, 'timestamp' => TS ], ... ]
*/
- protected function getFromCache( $memcKey ) {
- // getMemcKey() can return false
- if ( $memcKey === false ) {
- return false;
- }
+ protected function computeGlobalCountsAndTimestamps() {
+ $localData = $this->getCountsAndTimestamps()['local'];
+ $result = [];
+ $totals = [ 'count' => 0, 'timestamp' => -1 ];
+ foreach ( EchoAttributeManager::$sections as $section ) {
+ $localCount = $localData[$section]['count'];
+ $globalCount = self::capNotificationCount( $localCount + $this->getForeignCount( $section ) );
+ $result[$section]['count'] = $globalCount;
+ $totals['count'] += $globalCount;
- // Populate the instance cache
- if ( $this->cached === null ) {
- $keys = $this->getPreloadKeys();
- $this->cached = $this->cache->getMulti( $keys );
- // also keep track of cache values that couldn't be found (getMulti
- // omits them...)
- $this->cached += array_fill_keys( $keys, false );
+ $localTimestamp = $localData[$section]['timestamp'];
+ $foreignTimestamp = $this->getForeignTimestamp( $section );
+ $globalTimestamp = max( $localTimestamp, $foreignTimestamp ? $foreignTimestamp->getTimestamp( TS_MW ) : -1 );
+ $result[$section]['timestamp'] = $globalTimestamp;
+ $totals['timestamp'] = max( $totals['timestamp'], $globalTimestamp );
}
-
- if ( isset( $this->cached[$memcKey] ) ) {
- return $this->cached[$memcKey];
- }
-
- return $this->cache->get( $memcKey );
+ $totals['count'] = self::capNotificationCount( $totals['count'] );
+ $result[EchoAttributeManager::ALL] = $totals;
+ return $result;
}
/**
- * Set a cache entry both in the cache and in the instance cache.
- * Use this to write to keys that were loaded with getFromCache().
- * @param string|false $memcKey Cache key returned by getMemcKey()
- * @param mixed $value Cache value to set
- * @param int $expiry Expiry, see BagOStuff::set()
+ * Get the user's email notification format
+ * @return string
*/
- protected function setInCache( $memcKey, $value, $expiry ) {
- // getMemcKey() can return false
- if ( $memcKey === false ) {
- return;
- }
-
- // Update the instance cache if it's already been populated
- if ( $this->cached !== null ) {
- $this->cached[$memcKey] = $value;
- }
-
- $this->cache->set( $memcKey, $value, $expiry );
- }
+ public function getEmailFormat() {
+ global $wgAllowHTMLEmail;
- protected function deleteFromCache( $keys ) {
- foreach ( $keys as $key ) {
- // Update the instance cache if it's already been populated
- if ( $this->cached !== null ) {
- unset( $this->cached[$key] );
- }
- $this->cache->delete( $key );
+ if ( $wgAllowHTMLEmail ) {
+ return $this->mUser->getOption( 'echo-email-format' );
+ } else {
+ return EchoEmailFormat::PLAIN_TEXT;
}
}
/**
- * Array of memcached keys to load at once.
+ * Build a cache key for local use (local to this wiki)
*
- * @return array
+ * @param string $key Key, typically prefixed with echo-notification-
+ * @return string Cache key
*/
- protected function getPreloadKeys() {
- return array_merge(
- $this->getLocalKeys(),
- $this->getGlobalKeys()
- );
- }
-
- protected function getLocalKeys() {
- return array_filter( array_map( [ $this, 'getMemcKey' ], $this->getKeySeeds() ) );
- }
-
- protected function getGlobalKeys() {
- return array_filter( array_map( [ $this, 'getGlobalMemcKey' ], $this->getKeySeeds() ) );
- }
-
- protected function getKeySeeds() {
- return [
- 'echo-notification-timestamp',
- 'echo-notification-timestamp-' . EchoAttributeManager::MESSAGE,
- 'echo-notification-timestamp-' . EchoAttributeManager::ALERT,
- 'echo-notification-count',
- 'echo-notification-count-' . EchoAttributeManager::MESSAGE,
- 'echo-notification-count-' . EchoAttributeManager::ALERT,
- ];
+ protected function getMemcKey( $key ) {
+ global $wgEchoCacheVersion;
+ return wfMemcKey( $key, $this->mUser->getId(), $wgEchoCacheVersion );
}
/**
- * Build a memcached key.
+ * Build a cache key for global use
+ *
* @param string $key Key, typically prefixed with echo-notification-
- * @param bool $global If true, return a global memc key; if false, return one local to this wiki
* @return string|false Memcached key, or false if one could not be generated
*/
- protected function getMemcKey( $key, $global = false ) {
+ protected function getGlobalMemcKey( $key ) {
global $wgEchoCacheVersion;
- if ( !$global ) {
- return wfMemcKey( $key, $this->mUser->getId(), $wgEchoCacheVersion );
- }
-
$lookup = CentralIdLookup::factory();
$globalId = $lookup->centralIdFromLocalUser( $this->mUser, CentralIdLookup::AUDIENCE_RAW );
if ( !$globalId ) {
@@ -650,10 +628,6 @@ class MWEchoNotifUser {
return wfGlobalCacheKey( $key, $globalId, $wgEchoCacheVersion );
}
- protected function getGlobalMemcKey( $key ) {
- return $this->getMemcKey( $key, true );
- }
-
/**
* Lazy-construct an EchoForeignNotifications instance. This instance is force-enabled, so it
* returns information about cross-wiki notifications even if the user has them disabled.
@@ -675,7 +649,7 @@ class MWEchoNotifUser {
* queries their APIs to find the per-section counts and timestamps for those wikis.
*
* The results of this function are cached in the NotifUser object.
- * @return array [ (str) wiki => [ (str) section => [ 'count' => (int) count, 'timestamp' => (str) ts ] ] ]
+ * @return array[] [ (str) wiki => [ (str) section => [ 'count' => (int) count, 'timestamp' => (str) ts ] ] ]
*/
protected function getForeignData() {
if ( $this->mForeignData ) {
@@ -715,6 +689,11 @@ class MWEchoNotifUser {
return $this->mForeignData;
}
+ /**
+ * Get the number of foreign notifications in a given section.
+ * @param string $section One of EchoAttributeManager::$sections
+ * @return int Number of foreign notifications
+ */
protected function getForeignCount( $section = EchoAttributeManager::ALL ) {
global $wgEchoSectionTransition, $wgEchoBundleTransition;
$count = 0;
@@ -744,6 +723,12 @@ class MWEchoNotifUser {
return self::capNotificationCount( $count );
}
+ /**
+ * Get the timestamp of the most recent foreign notification in a given section.
+ * @param string $section One of EchoAttributeManager::$sections
+ * @return MWTimestamp|false Timestamp of the most recent foreign notification, or false if
+ * there aren't any
+ */
protected function getForeignTimestamp( $section = EchoAttributeManager::ALL ) {
global $wgEchoSectionTransition, $wgEchoBundleTransition;
@@ -755,27 +740,20 @@ class MWEchoNotifUser {
( $wgEchoSectionTransition && $section !== EchoAttributeManager::ALL ) ||
$wgEchoBundleTransition
) {
- $foreignTime = false;
+ $foreignTime = -1;
$foreignData = $this->getForeignData();
foreach ( $foreignData as $data ) {
if ( $section === EchoAttributeManager::ALL ) {
foreach ( $data as $subData ) {
if ( isset( $subData['timestamp'] ) ) {
- $wikiTime = new MWTimestamp( $data[$section]['timestamp'] );
- // $wikiTime > $foreignTime = invert 1
- if ( $foreignTime === false || $wikiTime->diff( $foreignTime )->invert === 1 ) {
- $foreignTime = $wikiTime;
- }
+ $foreignTime = max( $foreignTime, $subData['timestamp'] );
}
}
} elseif ( isset( $data[$section]['timestamp'] ) ) {
- $wikiTime = new MWTimestamp( $data[$section]['timestamp'] );
- // $wikiTime > $foreignTime = invert 1
- if ( $foreignTime === false || $wikiTime->diff( $foreignTime )->invert === 1 ) {
- $foreignTime = $wikiTime;
- }
+ $foreignTime = max( $foreignTime, $data[$section]['timestamp'] );
}
}
+ $foreignTime = $foreignTime === -1 ? false : new MWTimestamp( $foreignTime );
} else {
$foreignTime = $this->getForeignNotifications()->getTimestamp( $section );
}
diff --git a/Echo/includes/Notifier.php b/Echo/includes/Notifier.php
index 6a05dcab..e00a3368 100644
--- a/Echo/includes/Notifier.php
+++ b/Echo/includes/Notifier.php
@@ -55,15 +55,18 @@ class EchoNotifier {
$userEmailNotifications = $attributeManager->getUserEnabledEvents( $user, 'email' );
// See if the user wants to receive emails for this category or the user is eligible to receive this email
if ( in_array( $event->getType(), $userEmailNotifications ) ) {
- global $wgEchoEnableEmailBatch, $wgEchoNotifications, $wgNotificationSender, $wgNotificationReplyName;
+ global $wgEchoEnableEmailBatch, $wgEchoNotifications, $wgPasswordSender, $wgNoReplyAddress;
$priority = $attributeManager->getNotificationPriority( $event->getType() );
$bundleString = $bundleHash = '';
- // We should have bundling for email digest as long as either web or email bundling is on, for example, talk page
- // email bundling is off, but if a user decides to receive email digest, we should bundle those messages
- if ( !empty( $wgEchoNotifications[$event->getType()]['bundle']['web'] ) || !empty( $wgEchoNotifications[$event->getType()]['bundle']['email'] ) ) {
+ // We should have bundling for email digest as long as either web or email bundling is on,
+ // for example, talk page email bundling is off, but if a user decides to receive email
+ // digest, we should bundle those messages
+ if ( !empty( $wgEchoNotifications[$event->getType()]['bundle']['web'] ) ||
+ !empty( $wgEchoNotifications[$event->getType()]['bundle']['email'] )
+ ) {
Hooks::run( 'EchoGetBundleRules', [ $event, &$bundleString ] );
}
if ( $bundleString ) {
@@ -86,8 +89,8 @@ class EchoNotifier {
// instant email notification
$toAddress = MailAddress::newFromUser( $user );
- $fromAddress = new MailAddress( $wgNotificationSender, EchoHooks::getNotificationSenderName() );
- $replyAddress = new MailAddress( $wgNotificationSender, $wgNotificationReplyName );
+ $fromAddress = new MailAddress( $wgPasswordSender, wfMessage( 'emailsender' )->inContentLanguage()->text() );
+ $replyAddress = new MailAddress( $wgNoReplyAddress );
// Since we are sending a single email, should set the bundle hash to null
// if it is set with a value from somewhere else
$event->setBundleHash( null );
@@ -109,11 +112,11 @@ class EchoNotifier {
/**
* @param EchoEvent $event
* @param User $user
- * @return bool|array An array of 'subject' and 'body', or false if things went wrong
+ * @return array|false An array of 'subject' and 'body', or false if things went wrong
*/
private static function generateEmail( EchoEvent $event, User $user ) {
$emailFormat = MWEchoNotifUser::newFromUser( $user )->getEmailFormat();
- $lang = wfGetLangObj( $user->getOption( 'language' ) );
+ $lang = Language::factory( $user->getOption( 'language' ) );
$formatter = new EchoPlainTextEmailFormatter( $user, $lang );
$content = $formatter->format( $event );
if ( !$content ) {
diff --git a/Echo/includes/SeenTime.php b/Echo/includes/SeenTime.php
index 3d521112..d008a52b 100644
--- a/Echo/includes/SeenTime.php
+++ b/Echo/includes/SeenTime.php
@@ -8,7 +8,7 @@ class EchoSeenTime {
/**
* Allowed notification types
- * @var array
+ * @var string[]
*/
private static $allowedTypes = [ 'alert', 'message' ];
@@ -56,7 +56,7 @@ class EchoSeenTime {
/**
* @param string $type Type of seen time to get
* @param int $format Format to return time in, defaults to TS_MW
- * @return string|bool Timestamp in specified format, or false if no stored time
+ * @return string|false Timestamp in specified format, or false if no stored time
*/
public function getTime( $type = 'all', $format = TS_MW ) {
$vals = [];
diff --git a/Echo/includes/UnreadWikis.php b/Echo/includes/UnreadWikis.php
index e5151187..f2b9441b 100644
--- a/Echo/includes/UnreadWikis.php
+++ b/Echo/includes/UnreadWikis.php
@@ -31,7 +31,7 @@ class EchoUnreadWikis {
* Use the user id provided by the CentralIdLookup
*
* @param User $user
- * @return EchoUnreadWikis|bool
+ * @return EchoUnreadWikis|false
*/
public static function newFromUser( User $user ) {
$lookup = CentralIdLookup::factory();
@@ -45,17 +45,17 @@ class EchoUnreadWikis {
/**
* @param int $index DB_* constant
- * @return bool|DatabaseBase
+ * @return bool|\Wikimedia\Rdbms\IDatabase
*/
private function getDB( $index ) {
return $this->dbFactory->getSharedDb( $index );
}
/**
- * @return array
+ * @return array[]
*/
public function getUnreadCounts() {
- $dbr = $this->getDB( DB_SLAVE );
+ $dbr = $this->getDB( DB_REPLICA );
if ( $dbr === false ) {
return [];
}
@@ -103,7 +103,7 @@ class EchoUnreadWikis {
*/
public function updateCount( $wiki, $alertCount, $alertTime, $msgCount, $msgTime ) {
$dbw = $this->getDB( DB_MASTER );
- if ( $dbw === false ) {
+ if ( $dbw === false || $dbw->isReadOnly() ) {
return;
}
@@ -115,11 +115,11 @@ class EchoUnreadWikis {
if ( $alertCount || $msgCount ) {
$values = [
'euw_alerts' => $alertCount,
- 'euw_alerts_ts' => $alertCount
+ 'euw_alerts_ts' => $alertTime
? $alertTime->getTimestamp( TS_MW )
: static::DEFAULT_TS,
'euw_messages' => $msgCount,
- 'euw_messages_ts' => $msgCount
+ 'euw_messages_ts' => $msgTime
? $msgTime->getTimestamp( TS_MW )
: static::DEFAULT_TS,
];
diff --git a/Echo/includes/UserLocator.php b/Echo/includes/UserLocator.php
index afe9a3d1..2e49e739 100644
--- a/Echo/includes/UserLocator.php
+++ b/Echo/includes/UserLocator.php
@@ -18,7 +18,7 @@ class EchoUserLocator {
}
$it = new BatchRowIterator(
- wfGetDB( DB_SLAVE, 'watchlist' ),
+ wfGetDB( DB_REPLICA, 'watchlist' ),
/* $table = */ 'watchlist',
/* $primaryKeys = */ [ 'wl_user' ],
$batchSize
@@ -83,24 +83,21 @@ class EchoUserLocator {
* @return User[]
*/
public static function locateArticleCreator( EchoEvent $event ) {
- $agent = $event->getAgent();
$title = $event->getTitle();
if ( !$title || $title->getArticleID() <= 0 ) {
return [];
}
- // why?
- if ( !$agent ) {
- return [];
- }
- $dbr = wfGetDB( DB_SLAVE );
+ $dbr = wfGetDB( DB_REPLICA );
+ $revQuery = Revision::getQueryInfo();
$res = $dbr->selectRow(
- [ 'revision' ],
- [ 'rev_user' ],
+ $revQuery['tables'],
+ [ 'rev_user' => $revQuery['fields']['rev_user'] ],
[ 'rev_page' => $title->getArticleID() ],
__METHOD__,
- [ 'LIMIT' => 1, 'ORDER BY' => 'rev_timestamp, rev_id' ]
+ [ 'LIMIT' => 1, 'ORDER BY' => 'rev_timestamp, rev_id' ],
+ $revQuery['joins']
);
if ( !$res || !$res->rev_user ) {
return [];
diff --git a/Echo/includes/api/ApiCrossWikiBase.php b/Echo/includes/api/ApiCrossWiki.php
index b9184da2..a4d0cba2 100644
--- a/Echo/includes/api/ApiCrossWikiBase.php
+++ b/Echo/includes/api/ApiCrossWiki.php
@@ -1,47 +1,48 @@
<?php
-use MediaWiki\Logger\LoggerFactory;
-
-abstract class ApiCrossWikiBase extends ApiQueryBase {
+/**
+ * Trait that adds cross-wiki functionality to an API module. For mixing into ApiBase subclasses.
+ *
+ * In addition to mixing in this trait, you have to do the following in your API module:
+ * - In your getAllowedParams() method, merge in the return value of getCrossWikiParams()
+ * - In your execute() method, call getFromForeign() somewhere and do something with the result
+ * - Optionally, override getForeignQueryParams() to customize what is sent to the foreign wikis
+ */
+trait ApiCrossWiki {
/**
* @var EchoForeignNotifications
*/
protected $foreignNotifications;
/**
- * @param ApiQuery $queryModule
- * @param string $moduleName
- * @param string $paramPrefix
- */
- public function __construct( ApiQuery $queryModule, $moduleName, $paramPrefix = '' ) {
- parent::__construct( $queryModule, $moduleName, $paramPrefix );
-
- $this->foreignNotifications = new EchoForeignNotifications( $this->getUser() );
- }
-
- /**
- * This will turn the current API call (with all of it's params) and execute
+ * This will take the current API call (with all of its params) and execute
* it on all foreign wikis, returning an array of results per wiki.
*
- * @param array $wikis List of wikis to query. Defaults to the result of getRequestedForeignWikis().
+ * @param array|null $wikis List of wikis to query. Defaults to the result of getRequestedForeignWikis().
* @param array $paramOverrides Request parameter overrides
- * @return array
+ * @return array[]
* @throws Exception
*/
protected function getFromForeign( $wikis = null, array $paramOverrides = [] ) {
+ $wikis = $wikis ?? $this->getRequestedForeignWikis();
+ if ( $wikis === [] ) {
+ return [];
+ }
+ $tokenType = $this->needsToken();
$foreignReq = new EchoForeignWikiRequest(
$this->getUser(),
$paramOverrides + $this->getForeignQueryParams(),
$wikis !== null ? $wikis : $this->getRequestedForeignWikis(),
- $this->getModulePrefix() . 'wikis'
+ $this->getModulePrefix() . 'wikis',
+ $tokenType !== false ? $tokenType : null
);
return $foreignReq->execute();
}
/**
* Get the query parameters to use for the foreign API requests.
- * Subclasses should override this if they need to customize the
- * parameters.
+ * Implementing classes should override this if they need to customize
+ * the parameters.
* @return array Query parameters
*/
protected function getForeignQueryParams() {
@@ -61,7 +62,7 @@ abstract class ApiCrossWikiBase extends ApiQueryBase {
* - `*` will expand to "all wikis with unread notifications"
* - if `$wgEchoCrossWikiNotifications` is off, foreign wikis will be excluded
*
- * @return array
+ * @return string[]
*/
protected function getRequestedWikis() {
$params = $this->extractRequestParams();
@@ -87,23 +88,33 @@ abstract class ApiCrossWikiBase extends ApiQueryBase {
}
/**
- * @return array Wiki names
+ * @return string[] Wiki names
*/
protected function getRequestedForeignWikis() {
return array_diff( $this->getRequestedWikis(), [ wfWikiID() ] );
}
/**
- * @return array Wiki names
+ * @return EchoForeignNotifications
+ */
+ protected function getForeignNotifications() {
+ if ( $this->foreignNotifications === null ) {
+ $this->foreignNotifications = new EchoForeignNotifications( $this->getUser() );
+ }
+ return $this->foreignNotifications;
+ }
+
+ /**
+ * @return string[] Wiki names
*/
protected function getForeignWikisWithUnreadNotifications() {
- return $this->foreignNotifications->getWikis();
+ return $this->getForeignNotifications()->getWikis();
}
/**
- * @return array
+ * @return array[]
*/
- public function getAllowedParams() {
+ public function getCrossWikiParams() {
global $wgConf;
$params = [];
diff --git a/Echo/includes/api/ApiEchoArticleReminder.php b/Echo/includes/api/ApiEchoArticleReminder.php
index 5ed26794..dcc779d5 100644
--- a/Echo/includes/api/ApiEchoArticleReminder.php
+++ b/Echo/includes/api/ApiEchoArticleReminder.php
@@ -91,6 +91,7 @@ class ApiEchoArticleReminder extends ApiBase {
/**
* @see ApiBase::getExamplesMessages()
+ * @return string[]
*/
protected function getExamplesMessages() {
$todayDate = new DateTime();
diff --git a/Echo/includes/api/ApiEchoMarkRead.php b/Echo/includes/api/ApiEchoMarkRead.php
index 551c183e..273d2b68 100644
--- a/Echo/includes/api/ApiEchoMarkRead.php
+++ b/Echo/includes/api/ApiEchoMarkRead.php
@@ -1,6 +1,7 @@
<?php
class ApiEchoMarkRead extends ApiBase {
+ use ApiCrossWiki;
public function execute() {
// To avoid API warning, register the parameter used to bust browser cache
@@ -9,38 +10,52 @@ class ApiEchoMarkRead extends ApiBase {
$user = $this->getUser();
if ( $user->isAnon() ) {
$this->dieWithError( 'apierror-mustbeloggedin-generic', 'login-required' );
+ } elseif ( MWEchoDbFactory::newFromDefault()->isReadOnly() ) {
+ $this->dieReadOnly();
}
$notifUser = MWEchoNotifUser::newFromUser( $user );
$params = $this->extractRequestParams();
- // There is no need to trigger markRead if all notifications are read
- if ( $notifUser->getLocalNotificationCount() > 0 ) {
- if ( count( $params['list'] ) ) {
+ // Mark as read/unread locally, if requested
+ if ( in_array( wfWikiID(), $this->getRequestedWikis() ) ) {
+ // There is no need to trigger markRead if all notifications are read
+ if ( $notifUser->getLocalNotificationCount() > 0 ) {
+ if ( $params['list'] ) {
+ // Make sure there is a limit to the update
+ $notifUser->markRead( array_slice( $params['list'], 0, ApiBase::LIMIT_SML2 ) );
+ // Mark all as read
+ } elseif ( $params['all'] ) {
+ $notifUser->markAllRead();
+ // Mark all as read for sections
+ } elseif ( $params['sections'] ) {
+ $notifUser->markAllRead( $params['sections'] );
+ }
+ }
+
+ // Mark as unread
+ if ( $params['unreadlist'] !== null && $params['unreadlist'] !== [] ) {
// Make sure there is a limit to the update
- $notifUser->markRead( array_slice( $params['list'], 0, ApiBase::LIMIT_SML2 ) );
- // Mark all as read
- } elseif ( $params['all'] ) {
- $notifUser->markAllRead();
- // Mark all as read for sections
- } elseif ( $params['sections'] ) {
- $notifUser->markAllRead( $params['sections'] );
+ $notifUser->markUnRead( array_slice( $params['unreadlist'], 0, ApiBase::LIMIT_SML2 ) );
}
}
- // Mark as unread
- if ( count( $params['unreadlist'] ) > 0 ) {
- // Make sure there is a limit to the update
- $notifUser->markUnRead( array_slice( $params['unreadlist'], 0, ApiBase::LIMIT_SML2 ) );
- }
+ $foreignResults = $this->getFromForeign();
$result = [
'result' => 'success'
];
+
+ foreach ( $foreignResults as $wiki => $foreignResult ) {
+ if ( isset( $foreignResult['error'] ) ) {
+ $result['errors'][$wiki] = $foreignResult['error'];
+ }
+ }
+
$rawCount = 0;
foreach ( EchoAttributeManager::$sections as $section ) {
- $rawSectionCount = $notifUser->getNotificationCount( /* $tryCache = */true, DB_SLAVE, $section );
+ $rawSectionCount = $notifUser->getNotificationCount( $section );
$result[$section]['rawcount'] = $rawSectionCount;
$result[$section]['count'] = EchoNotificationController::formatNotificationCount( $rawSectionCount );
$rawCount += $rawSectionCount;
@@ -50,11 +65,12 @@ class ApiEchoMarkRead extends ApiBase {
'rawcount' => $rawCount,
'count' => EchoNotificationController::formatNotificationCount( $rawCount ),
];
+
$this->getResult()->addValue( 'query', $this->getModuleName(), $result );
}
public function getAllowedParams() {
- return [
+ return $this->getCrossWikiParams() + [
'list' => [
ApiBase::PARAM_ISMULTI => true,
],
@@ -71,7 +87,7 @@ class ApiEchoMarkRead extends ApiBase {
],
'token' => [
ApiBase::PARAM_REQUIRED => true,
- ],
+ ]
];
}
@@ -93,6 +109,7 @@ class ApiEchoMarkRead extends ApiBase {
/**
* @see ApiBase::getExamplesMessages()
+ * @return string[]
*/
protected function getExamplesMessages() {
return [
diff --git a/Echo/includes/api/ApiEchoMarkSeen.php b/Echo/includes/api/ApiEchoMarkSeen.php
index d06852ac..46069166 100644
--- a/Echo/includes/api/ApiEchoMarkSeen.php
+++ b/Echo/includes/api/ApiEchoMarkSeen.php
@@ -66,6 +66,7 @@ class ApiEchoMarkSeen extends ApiBase {
/**
* @see ApiBase::getExamplesMessages()
+ * @return string[]
*/
protected function getExamplesMessages() {
return [
diff --git a/Echo/includes/api/ApiEchoNotifications.php b/Echo/includes/api/ApiEchoNotifications.php
index 121499c3..e549a702 100644
--- a/Echo/includes/api/ApiEchoNotifications.php
+++ b/Echo/includes/api/ApiEchoNotifications.php
@@ -1,6 +1,8 @@
<?php
-class ApiEchoNotifications extends ApiCrossWikiBase {
+class ApiEchoNotifications extends ApiQueryBase {
+ use ApiCrossWiki;
+
/**
* @var bool
*/
@@ -22,9 +24,11 @@ class ApiEchoNotifications extends ApiCrossWikiBase {
/* @deprecated */
if ( $params['format'] === 'flyout' ) {
- $this->addDeprecation( 'apiwarn-echo-deprecation-flyout', 'action=query&meta=notifications&notformat=flyout' );
+ $this->addDeprecation( 'apiwarn-echo-deprecation-flyout',
+ 'action=query&meta=notifications&notformat=flyout' );
} elseif ( $params['format'] === 'html' ) {
- $this->addDeprecation( 'apiwarn-echo-deprecation-html', 'action=query&meta=notifications&notformat=html' );
+ $this->addDeprecation( 'apiwarn-echo-deprecation-html',
+ 'action=query&meta=notifications&notformat=html' );
}
if ( $this->allowCrossWikiNotifications() ) {
@@ -141,12 +145,22 @@ class ApiEchoNotifications extends ApiCrossWikiBase {
* @param int $limit
* @param string $continue
* @param string $format
- * @param Title[] $titles
+ * @param Title[]|null $titles
* @param bool $unreadFirst
* @param bool $bundle
* @return array
*/
- protected function getSectionPropList( User $user, $section, $filter, $limit, $continue, $format, array $titles = null, $unreadFirst = false, $bundle = false ) {
+ protected function getSectionPropList(
+ User $user,
+ $section,
+ $filter,
+ $limit,
+ $continue,
+ $format,
+ array $titles = null,
+ $unreadFirst = false,
+ $bundle = false
+ ) {
$attributeManager = EchoAttributeManager::newFromGlobalVars();
$sectionEvents = $attributeManager->getUserEnabledEventsbySections( $user, 'web', [ $section ] );
@@ -174,12 +188,22 @@ class ApiEchoNotifications extends ApiCrossWikiBase {
* @param int $limit
* @param string $continue
* @param string $format
- * @param Title[] $titles
+ * @param Title[]|null $titles
* @param bool $unreadFirst
* @param bool $bundle
* @return array
*/
- protected function getPropList( User $user, array $eventTypes, $filter, $limit, $continue, $format, array $titles = null, $unreadFirst = false, $bundle = false ) {
+ protected function getPropList(
+ User $user,
+ array $eventTypes,
+ $filter,
+ $limit,
+ $continue,
+ $format,
+ array $titles = null,
+ $unreadFirst = false,
+ $bundle = false
+ ) {
$result = [
'list' => [],
'continue' => null
@@ -259,7 +283,7 @@ class ApiEchoNotifications extends ApiCrossWikiBase {
$notifs = $bundler->bundle( $notifs );
}
- while ( count( $notifs ) ) {
+ while ( $notifs !== [] ) {
/** @var EchoNotification $notif */
$notif = array_shift( $notifs );
$output = EchoDataOutputFormatter::formatOutput( $notif, $format, $user, $this->getLanguage() );
@@ -297,7 +321,7 @@ class ApiEchoNotifications extends ApiCrossWikiBase {
$totalRawCount = 0;
foreach ( $sections as $section ) {
- $rawCount = $notifUser->getNotificationCount( /* $tryCache = */true, DB_SLAVE, $section, $global );
+ $rawCount = $notifUser->getNotificationCount( $section, $global );
if ( $groupBySection ) {
$result[$section]['rawcount'] = $rawCount;
$result[$section]['count'] = EchoNotificationController::formatNotificationCount( $rawCount );
@@ -342,7 +366,11 @@ class ApiEchoNotifications extends ApiCrossWikiBase {
* @param string $section
* @return array|false A formatted notification, or false if there are no foreign notifications
*/
- protected function makeForeignNotification( User $user, $format, $section = EchoAttributeManager::ALL ) {
+ protected function makeForeignNotification(
+ User $user,
+ $format,
+ $section = EchoAttributeManager::ALL
+ ) {
global $wgEchoSectionTransition, $wgEchoBundleTransition;
if (
( $wgEchoSectionTransition && $section !== EchoAttributeManager::ALL ) ||
@@ -354,11 +382,13 @@ class ApiEchoNotifications extends ApiCrossWikiBase {
// and query them to find out what's really there.
// In bundle transition mode, we trust that notifications are classified correctly, but we don't
// trust the counts in the table.
- $potentialWikis = $this->foreignNotifications->getWikis( $wgEchoSectionTransition ? EchoAttributeManager::ALL : $section );
+ $potentialWikis = $this->getForeignNotifications()->getWikis(
+ $wgEchoSectionTransition ? EchoAttributeManager::ALL : $section );
if ( !$potentialWikis ) {
return false;
}
- $foreignResults = $this->getFromForeign( $potentialWikis, [ $this->getModulePrefix() . 'filter' => '!read' ] );
+ $foreignResults = $this->getFromForeign( $potentialWikis,
+ [ $this->getModulePrefix() . 'filter' => '!read' ] );
$countsByWiki = [];
$timestampsByWiki = [];
@@ -389,16 +419,16 @@ class ApiEchoNotifications extends ApiCrossWikiBase {
}, $timestampsByWiki );
} else {
// In non-transition mode, or when querying all sections, we can trust the euw table
- $wikis = $this->foreignNotifications->getWikis( $section );
- $count = $this->foreignNotifications->getCount( $section );
- $maxTimestamp = $this->foreignNotifications->getTimestamp( $section );
+ $wikis = $this->getForeignNotifications()->getWikis( $section );
+ $count = $this->getForeignNotifications()->getCount( $section );
+ $maxTimestamp = $this->getForeignNotifications()->getTimestamp( $section );
$timestampsByWiki = [];
foreach ( $wikis as $wiki ) {
- $timestampsByWiki[$wiki] = $this->foreignNotifications->getWikiTimestamp( $wiki, $section );
+ $timestampsByWiki[$wiki] = $this->getForeignNotifications()->getWikiTimestamp( $wiki, $section );
}
}
- if ( $count === 0 || count( $wikis ) === 0 ) {
+ if ( $count === 0 || $wikis === [] ) {
return false;
}
@@ -446,7 +476,7 @@ class ApiEchoNotifications extends ApiCrossWikiBase {
}
protected function getForeignQueryParams() {
- $params = parent::getForeignQueryParams();
+ $params = $this->getRequest()->getValues();
// don't request cross-wiki notification summaries
unset( $params['notcrosswikisummary'] );
@@ -529,7 +559,8 @@ class ApiEchoNotifications extends ApiCrossWikiBase {
foreach ( $results as $result ) {
$master[$section]['rawcount'] += $result[$section]['rawcount'];
}
- $master[$section]['count'] = EchoNotificationController::formatNotificationCount( $master[$section]['rawcount'] );
+ $master[$section]['count'] = EchoNotificationController::formatNotificationCount(
+ $master[$section]['rawcount'] );
}
}
@@ -548,8 +579,7 @@ class ApiEchoNotifications extends ApiCrossWikiBase {
public function getAllowedParams() {
$sections = EchoAttributeManager::$sections;
- $params = parent::getAllowedParams();
- $params += [
+ $params = $this->getCrossWikiParams() + [
'filter' => [
ApiBase::PARAM_ISMULTI => true,
ApiBase::PARAM_DFLT => 'read|!read',
diff --git a/Echo/includes/api/ApiEchoUnreadNotificationPages.php b/Echo/includes/api/ApiEchoUnreadNotificationPages.php
index 53c1f761..f085f3ca 100644
--- a/Echo/includes/api/ApiEchoUnreadNotificationPages.php
+++ b/Echo/includes/api/ApiEchoUnreadNotificationPages.php
@@ -1,6 +1,8 @@
<?php
-class ApiEchoUnreadNotificationPages extends ApiCrossWikiBase {
+class ApiEchoUnreadNotificationPages extends ApiQueryBase {
+ use ApiCrossWiki;
+
/**
* @var bool
*/
@@ -36,7 +38,7 @@ class ApiEchoUnreadNotificationPages extends ApiCrossWikiBase {
$result += $this->getUnreadNotificationPagesFromForeign();
}
- $apis = $this->foreignNotifications->getApiEndpoints( $this->getRequestedWikis() );
+ $apis = $this->getForeignNotifications()->getApiEndpoints( $this->getRequestedWikis() );
foreach ( $result as $wiki => $data ) {
$result[$wiki]['source'] = $apis[$wiki];
$result[$wiki]['pages'] = $data['pages'] ?: [];
@@ -54,7 +56,7 @@ class ApiEchoUnreadNotificationPages extends ApiCrossWikiBase {
$attributeManager = EchoAttributeManager::newFromGlobalVars();
$enabledTypes = $attributeManager->getUserEnabledEvents( $this->getUser(), 'web' );
- $dbr = MWEchoDbFactory::newFromDefault()->getEchoDb( DB_SLAVE );
+ $dbr = MWEchoDbFactory::newFromDefault()->getEchoDb( DB_REPLICA );
// If $groupPages is true, we need to fetch all pages and apply the ORDER BY and LIMIT ourselves
// after grouping.
$extraOptions = $groupPages ? [] : [ 'ORDER BY' => 'count DESC', 'LIMIT' => $limit ];
@@ -172,12 +174,12 @@ class ApiEchoUnreadNotificationPages extends ApiCrossWikiBase {
}
/**
- * @return array
+ * @return array[]
*/
public function getAllowedParams() {
global $wgEchoMaxUpdateCount;
- return parent::getAllowedParams() + [
+ return $this->getCrossWikiParams() + [
'grouppages' => [
ApiBase::PARAM_TYPE => 'boolean',
ApiBase::PARAM_DFLT => false,
@@ -199,6 +201,7 @@ class ApiEchoUnreadNotificationPages extends ApiCrossWikiBase {
/**
* @see ApiBase::getExamplesMessages()
+ * @return string[]
*/
protected function getExamplesMessages() {
return [
diff --git a/Echo/includes/cache/LocalCache.php b/Echo/includes/cache/LocalCache.php
index d951e307..069d0f44 100644
--- a/Echo/includes/cache/LocalCache.php
+++ b/Echo/includes/cache/LocalCache.php
@@ -15,40 +15,44 @@ abstract class EchoLocalCache {
/**
* Target object cache
- * @var HashBagOStuff
+ * @var MapCacheLRU
*/
protected $targets;
/**
* Lookup ids that have not been resolved for a target
- * @param int[]
+ * @var int[]
*/
- protected $lookups = [];
+ private $lookups = [];
/**
* Resolve ids in lookups to targets
+ *
+ * @param int[] $lookups
+ * @return Iterator
*/
- abstract protected function resolve();
+ abstract protected function resolve( array $lookups );
/**
- * Use Factory method like EchoTitleLocalCache::create()
+ * Use a factory method, such as EchoTitleLocalCache::create().
+ *
+ * @private
*/
- protected function __construct() {
- $this->targets = new HashBagOStuff( [ 'maxKeys' => self::TARGET_MAX_NUM ] );
+ public function __construct() {
+ $this->targets = new MapCacheLRU( self::TARGET_MAX_NUM );
}
/**
* Add a key to the lookup and the key is used to resolve cache target
*
* @param int $key
- * @param null $target
*/
- public function add( $key, $target = null ) {
+ public function add( $key ) {
if (
count( $this->lookups ) < self::TARGET_MAX_NUM
&& !$this->targets->get( $key )
) {
- $this->lookups[$key] = $key;
+ $this->lookups[$key] = true;
}
}
@@ -64,8 +68,13 @@ abstract class EchoLocalCache {
return $target;
}
- if ( isset( $this->lookups[$key] ) ) {
- $this->resolve();
+ if ( isset( $this->lookups[ $key ] ) ) {
+ // Resolve the lookup batch and store results in the cache
+ $targets = $this->resolve( array_keys( $this->lookups ) );
+ foreach ( $targets as $id => $val ) {
+ $this->targets->set( $id, $val );
+ }
+ $this->lookups = [];
$target = $this->targets->get( $key );
if ( $target ) {
return $target;
@@ -83,18 +92,4 @@ abstract class EchoLocalCache {
$this->lookups = [];
}
- /**
- * @return int[]
- */
- public function getLookups() {
- return $this->lookups;
- }
-
- /**
- * @return BagOStuff
- */
- public function getTargets() {
- return $this->targets;
- }
-
}
diff --git a/Echo/includes/cache/RevisionLocalCache.php b/Echo/includes/cache/RevisionLocalCache.php
index 9831de49..18183322 100644
--- a/Echo/includes/cache/RevisionLocalCache.php
+++ b/Echo/includes/cache/RevisionLocalCache.php
@@ -11,7 +11,6 @@ class EchoRevisionLocalCache extends EchoLocalCache {
private static $instance;
/**
- * Create a EchoRevisionLocalCache object
* @return EchoRevisionLocalCache
*/
public static function create() {
@@ -25,33 +24,19 @@ class EchoRevisionLocalCache extends EchoLocalCache {
/**
* @inheritDoc
*/
- protected function resolve() {
- if ( $this->lookups ) {
- // @Todo Add newFromIds() to Revision
- $dbr = wfGetDB( DB_SLAVE );
- $fields = array_merge(
- Revision::selectFields(),
- Revision::selectPageFields(),
- Revision::selectUserFields()
- );
- $res = $dbr->select(
- [ 'revision', 'page', 'user' ],
- $fields,
- [ 'rev_id' => $this->lookups ],
- __METHOD__,
- [],
- [
- 'page' => Revision::pageJoinCond(),
- 'user' => Revision::userJoinCond()
- ]
- );
- if ( $res ) {
- foreach ( $res as $row ) {
- $this->targets->set( $row->rev_id, new Revision( $row ) );
- }
- $this->lookups = [];
- }
+ protected function resolve( array $lookups ) {
+ $dbr = wfGetDB( DB_REPLICA );
+ $revQuery = Revision::getQueryInfo( [ 'page', 'user' ] );
+ $res = $dbr->select(
+ $revQuery['tables'],
+ $revQuery['fields'],
+ [ 'rev_id' => $lookups ],
+ __METHOD__,
+ [],
+ $revQuery['joins']
+ );
+ foreach ( $res as $row ) {
+ yield $row->rev_id => new Revision( $row );
}
}
-
}
diff --git a/Echo/includes/cache/TitleLocalCache.php b/Echo/includes/cache/TitleLocalCache.php
index 6c43790b..d896b012 100644
--- a/Echo/includes/cache/TitleLocalCache.php
+++ b/Echo/includes/cache/TitleLocalCache.php
@@ -11,7 +11,6 @@ class EchoTitleLocalCache extends EchoLocalCache {
private static $instance;
/**
- * Create a TitleLocalCache object
* @return EchoTitleLocalCache
*/
public static function create() {
@@ -25,13 +24,12 @@ class EchoTitleLocalCache extends EchoLocalCache {
/**
* @inheritDoc
*/
- protected function resolve() {
- if ( $this->lookups ) {
- $titles = Title::newFromIDs( $this->lookups );
+ protected function resolve( array $lookups ) {
+ if ( $lookups ) {
+ $titles = Title::newFromIDs( $lookups );
foreach ( $titles as $title ) {
- $this->targets->set( $title->getArticleId(), $title );
+ yield $title->getArticleId() => $title;
}
- $this->lookups = [];
}
}
diff --git a/Echo/includes/controller/ModerationController.php b/Echo/includes/controller/ModerationController.php
index 27241b49..b22090a8 100644
--- a/Echo/includes/controller/ModerationController.php
+++ b/Echo/includes/controller/ModerationController.php
@@ -1,4 +1,5 @@
<?php
+
use MediaWiki\MediaWikiServices;
/**
@@ -34,7 +35,7 @@ class EchoModerationController {
// users whose notifications have been moderated.
foreach ( $affectedUserIds as $userId ) {
$user = User::newFromId( $userId );
- MWEchoNotifUser::newFromUser( $user )->resetNotificationCount( DB_REPLICA );
+ MWEchoNotifUser::newFromUser( $user )->resetNotificationCount();
}
} );
}
diff --git a/Echo/includes/controller/NotificationController.php b/Echo/includes/controller/NotificationController.php
index 788a60fb..e6c47a2b 100644
--- a/Echo/includes/controller/NotificationController.php
+++ b/Echo/includes/controller/NotificationController.php
@@ -1,4 +1,7 @@
<?php
+use MediaWiki\Logger\LoggerFactory;
+use MediaWiki\MediaWikiServices;
+use MediaWiki\Revision\RevisionStore;
/**
* This class represents the controller for notifications
@@ -49,15 +52,15 @@ class EchoNotificationController {
}
/**
- * Format the notification count as a string. This should only be used for an
- * isolated string count, e.g. as displayed in personal tools or returned by the API.
- *
- * If using it in sentence context, pass the value from getCappedNotificationCount
- * into a message and use PLURAL. Example: notification-bundle-header-page-linked
- *
- * @param int $count Notification count
- * @return string Formatted count, after applying cap then formatting to string
- */
+ * Format the notification count as a string. This should only be used for an
+ * isolated string count, e.g. as displayed in personal tools or returned by the API.
+ *
+ * If using it in sentence context, pass the value from getCappedNotificationCount
+ * into a message and use PLURAL. Example: notification-bundle-header-page-linked
+ *
+ * @param int $count Notification count
+ * @return string Formatted count, after applying cap then formatting to string
+ */
public static function formatNotificationCount( $count ) {
$cappedCount = self::getCappedNotificationCount( $count );
@@ -99,15 +102,11 @@ class EchoNotificationController {
$userNotifyTypes = $notifyTypes;
// Respect the enotifminoredits preference
// @todo should this be checked somewhere else?
- if ( !$user->getOption( 'enotifminoredits' ) ) {
- $extra = $event->getExtra();
- if ( !empty( $extra['revid'] ) ) {
- $rev = Revision::newFromID( $extra['revid'], Revision::READ_LATEST );
-
- if ( $rev->isMinor() ) {
- $notifyTypes = array_diff( $notifyTypes, [ 'email' ] );
- }
- }
+ if (
+ !$user->getOption( 'enotifminoredits' ) &&
+ self::hasMinorRevision( $event )
+ ) {
+ $notifyTypes = array_diff( $notifyTypes, [ 'email' ] );
}
Hooks::run( 'EchoGetNotificationTypes', [ $user, $event, &$userNotifyTypes ] );
@@ -132,9 +131,38 @@ class EchoNotificationController {
}
/**
+ * Check if an event is associated with a minor revision.
+ *
+ * @param EchoEvent $event
+ * @return bool
+ */
+ private static function hasMinorRevision( EchoEvent $event ) {
+ $revId = $event->getExtraParam( 'revid' );
+ if ( !$revId ) {
+ return false;
+ }
+
+ $revisionStore = MediaWikiServices::getInstance()->getRevisionStore();
+ $rev = $revisionStore->getRevisionById( $revId, RevisionStore::READ_LATEST );
+ if ( !$rev ) {
+ $logger = LoggerFactory::getInstance( 'Echo' );
+ $logger->debug(
+ 'Notifying for event {eventId}. Revision \'{revId}\' not found.',
+ [
+ 'eventId' => $event->getId(),
+ 'revId' => $revId,
+ ]
+ );
+ return false;
+ }
+
+ return $rev->isMinor();
+ }
+
+ /**
* Schedule a job to check and delete older notifications
*
- * @param int $userIds
+ * @param int[] $userIds
* @param EchoEvent $event
*/
public static function enqueueDeleteJob( array $userIds, EchoEvent $event ) {
@@ -195,9 +223,7 @@ class EchoNotificationController {
$job = new EchoNotificationJob(
$event->getTitle() ?: Title::newMainPage(),
[
- 'event' => $event,
- 'masterPos' => MWEchoDbFactory::newFromDefault()
- ->getMasterPosition(),
+ 'eventId' => $event->getId(),
]
);
JobQueueGroup::singleton()->push( $job );
@@ -334,7 +360,7 @@ class EchoNotificationController {
throw new MWException( "Cannot notify anonymous user: {$user->getName()}" );
}
- call_user_func_array( $wgEchoNotifiers[$type], [ $user, $event ] );
+ ( $wgEchoNotifiers[$type] )( $user, $event );
}
/**
@@ -360,7 +386,7 @@ class EchoNotificationController {
$options = [ $event ];
}
if ( is_callable( $callable ) ) {
- $result[] = call_user_func_array( $callable, $options );
+ $result[] = $callable( ...$options );
} else {
wfDebugLog( __CLASS__, __FUNCTION__ . ": Invalid $locator returned for $type" );
}
@@ -406,9 +432,10 @@ class EchoNotificationController {
// Filter non-User, anon and duplicate users
$seen = [];
- $notify->addFilter( function ( $user ) use ( &$seen ) {
+ $fname = __METHOD__;
+ $notify->addFilter( function ( $user ) use ( &$seen, $fname ) {
if ( !$user instanceof User ) {
- wfDebugLog( __METHOD__, 'Expected all User instances, received:' .
+ wfDebugLog( $fname, 'Expected all User instances, received:' .
( is_object( $user ) ? get_class( $user ) : gettype( $user ) )
);
@@ -465,7 +492,7 @@ class EchoNotificationController {
* @param string $errfile
* @param int $errline
* @return bool
- * @throw EchoCatchableFatalErrorException
+ * @throws EchoCatchableFatalErrorException
*/
public static function formatterErrorHandler( $errno, $errstr, $errfile, $errline ) {
if ( $errno !== E_RECOVERABLE_ERROR ) {
diff --git a/Echo/includes/formatters/EchoEventDigestFormatter.php b/Echo/includes/formatters/EchoEventDigestFormatter.php
index 1fb1f765..c4a9d436 100644
--- a/Echo/includes/formatters/EchoEventDigestFormatter.php
+++ b/Echo/includes/formatters/EchoEventDigestFormatter.php
@@ -22,7 +22,7 @@ abstract class EchoEventDigestFormatter {
/**
* @var Message $msg
*/
- $msg = call_user_func_array( 'wfMessage', func_get_args() );
+ $msg = wfMessage( ...func_get_args() );
$msg->inLanguage( $this->language );
return $msg;
@@ -31,7 +31,7 @@ abstract class EchoEventDigestFormatter {
/**
* @param EchoEvent[] $events
* @param string $distributionType 'web' or 'email'
- * @return array|bool|string Output format depends on implementation, false if it cannot be formatted
+ * @return string[]|false Output format depends on implementation, false if it cannot be formatted
*/
final public function format( array $events, $distributionType ) {
$models = [];
@@ -47,7 +47,7 @@ abstract class EchoEventDigestFormatter {
/**
* @param EchoEventPresentationModel[] $models
- * @return string|array
+ * @return string[]|string
*/
abstract protected function formatModels( array $models );
}
diff --git a/Echo/includes/formatters/EchoEventFormatter.php b/Echo/includes/formatters/EchoEventFormatter.php
index c3d30413..f66b3ce9 100644
--- a/Echo/includes/formatters/EchoEventFormatter.php
+++ b/Echo/includes/formatters/EchoEventFormatter.php
@@ -1,4 +1,5 @@
<?php
+
use MediaWiki\Logger\LoggerFactory;
/**
@@ -28,7 +29,7 @@ abstract class EchoEventFormatter {
/**
* @var Message $msg
*/
- $msg = call_user_func_array( 'wfMessage', func_get_args() );
+ $msg = wfMessage( ...func_get_args() );
$msg->inLanguage( $this->language );
return $msg;
@@ -36,7 +37,7 @@ abstract class EchoEventFormatter {
/**
* @param EchoEvent $event
- * @return string|array|bool Output format depends on implementation, false if it cannot be formatted
+ * @return string[]|string|false Output format depends on implementation, false if it cannot be formatted
*/
final public function format( EchoEvent $event ) {
// Deleted events should have been filtered out before getting there.
@@ -46,8 +47,8 @@ abstract class EchoEventFormatter {
}
if ( !EchoEventPresentationModel::supportsPresentationModel( $event->getType() ) ) {
- LoggerFactory::getInstance( 'Echo' )->warning(
- "Ignoring event type \"{type}\" since it does not support Echo presentation model.",
+ LoggerFactory::getInstance( 'Echo' )->debug(
+ "No presentation model found for event type \"{type}\"",
[
'type' => $event->getType(),
]
@@ -65,7 +66,7 @@ abstract class EchoEventFormatter {
/**
* @param EchoEventPresentationModel $model
- * @return string|array
+ * @return string[]|string
*/
abstract protected function formatModel( EchoEventPresentationModel $model );
}
diff --git a/Echo/includes/formatters/EchoHtmlDigestEmailFormatter.php b/Echo/includes/formatters/EchoHtmlDigestEmailFormatter.php
index f2f96cc3..77ffe9c8 100644
--- a/Echo/includes/formatters/EchoHtmlDigestEmailFormatter.php
+++ b/Echo/includes/formatters/EchoHtmlDigestEmailFormatter.php
@@ -14,7 +14,7 @@ class EchoHtmlDigestEmailFormatter extends EchoEventDigestFormatter {
/**
* @param EchoEventPresentationModel[] $models
- * @return array of the following format:
+ * @return string[] Array of the following format:
* [ 'body' => formatted email body,
* 'subject' => formatted email subject ]
*/
@@ -54,9 +54,10 @@ class EchoHtmlDigestEmailFormatter extends EchoEventDigestFormatter {
private function renderBody( Language $language, $intro, $digestList, $action, $footer ) {
$alignStart = $language->alignStart();
- $langCode = $language->getCode();
+ $langCode = $language->getHtmlCode();
$langDir = $language->getDir();
+ // phpcs:disable Generic.Files.LineLength
return <<< EOF
<html><head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
@@ -127,6 +128,7 @@ class EchoHtmlDigestEmailFormatter extends EchoEventDigestFormatter {
</table>
</body></html>
EOF;
+ // phpcs:enable Generic.Files.LineLength
}
/**
@@ -216,7 +218,8 @@ EOF;
return Html::element(
'a',
[
- 'href' => SpecialPage::getTitleFor( 'Notifications' )->getFullURL( '', false, PROTO_CANONICAL ),
+ 'href' => SpecialPage::getTitleFor( 'Notifications' )
+ ->getFullURL( '', false, PROTO_CANONICAL ),
'style' => EchoHtmlEmailFormatter::PRIMARY_LINK_STYLE,
],
$this->msg( 'echo-email-batch-link-text-view-all-notifications' )->text()
diff --git a/Echo/includes/formatters/EchoHtmlEmailFormatter.php b/Echo/includes/formatters/EchoHtmlEmailFormatter.php
index 4c28fe65..9d5c65e3 100644
--- a/Echo/includes/formatters/EchoHtmlEmailFormatter.php
+++ b/Echo/includes/formatters/EchoHtmlEmailFormatter.php
@@ -2,8 +2,10 @@
class EchoHtmlEmailFormatter extends EchoEventFormatter {
+ // phpcs:disable Generic.Files.LineLength
const PRIMARY_LINK_STYLE = 'cursor:pointer; text-align:center; text-decoration:none; padding:.45em 0.6em .45em; color:#FFF; background:#36C; font-family: Arial, Helvetica, sans-serif;font-size: 13px;';
const SECONDARY_LINK_STYLE = 'text-decoration: none;font-size: 10px;font-family: Arial, Helvetica, sans-serif; color: #72777D;';
+ // phpcs:enable Generic.Files.LineLength
protected function formatModel( EchoEventPresentationModel $model ) {
$subject = $model->getSubjectMessage()->parse();
@@ -46,12 +48,13 @@ class EchoHtmlEmailFormatter extends EchoEventFormatter {
private function renderBody( Language $lang, $emailIcon, $summary, $action, $intro, $footer ) {
$alignStart = $lang->alignStart();
- $langCode = $lang->getCode();
+ $langCode = $lang->getHtmlCode();
$langDir = $lang->getDir();
$iconImgSrc = Sanitizer::encodeAttribute( $emailIcon );
global $wgCanonicalServer;
+ // phpcs:disable Generic.Files.LineLength
return <<< EOF
<html><head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
@@ -118,6 +121,7 @@ class EchoHtmlEmailFormatter extends EchoEventFormatter {
</table>
</body></html>
EOF;
+ // phpcs:enable Generic.Files.LineLength
}
/**
@@ -128,8 +132,10 @@ EOF;
$preferenceLink = $this->renderLink(
[
- 'label' => $this->msg( 'echo-email-html-footer-preference-link-text', $this->user )->text(),
- 'url' => SpecialPage::getTitleFor( 'Preferences', false, 'mw-prefsection-echo' )->getFullURL( '', false, PROTO_CANONICAL ),
+ 'label' => $this->msg( 'echo-email-html-footer-preference-link-text', $this->user )
+ ->text(),
+ 'url' => SpecialPage::getTitleFor( 'Preferences', false, 'mw-prefsection-echo' )
+ ->getFullURL( '', false, PROTO_CANONICAL ),
],
'text-decoration: none; color: #36C;'
);
diff --git a/Echo/includes/formatters/EchoIcon.php b/Echo/includes/formatters/EchoIcon.php
index 74b90f6a..5d1b186d 100644
--- a/Echo/includes/formatters/EchoIcon.php
+++ b/Echo/includes/formatters/EchoIcon.php
@@ -50,7 +50,7 @@ class EchoIcon {
* Get a link to a rasterized version of the icon
*
* @param string $icon Icon name
- * @param string $lang Language
+ * @param string $lang
* @return string URL to the rasterized version of the icon
*/
public static function getRasterizedUrl( $icon, $lang ) {
diff --git a/Echo/includes/formatters/EchoPlainTextDigestEmailFormatter.php b/Echo/includes/formatters/EchoPlainTextDigestEmailFormatter.php
index 88d9c5f5..55906b43 100644
--- a/Echo/includes/formatters/EchoPlainTextDigestEmailFormatter.php
+++ b/Echo/includes/formatters/EchoPlainTextDigestEmailFormatter.php
@@ -14,7 +14,7 @@ class EchoPlainTextDigestEmailFormatter extends EchoEventDigestFormatter {
/**
* @param EchoEventPresentationModel[] $models
- * @return array of the following format:
+ * @return string[] Array of the following format:
* [ 'body' => formatted email body,
* 'subject' => formatted email subject ]
*/
diff --git a/Echo/includes/formatters/EditUserTalkPresentationModel.php b/Echo/includes/formatters/EditUserTalkPresentationModel.php
index 1fd67369..b950bd46 100644
--- a/Echo/includes/formatters/EditUserTalkPresentationModel.php
+++ b/Echo/includes/formatters/EditUserTalkPresentationModel.php
@@ -56,6 +56,19 @@ class EchoEditUserTalkPresentationModel extends EchoEventPresentationModel {
}
}
+ public function getCompactHeaderMessage() {
+ $hasSection = $this->hasSection();
+ $key = $hasSection
+ ? "notification-compact-header-{$this->type}-with-section"
+ : "notification-compact-header-{$this->type}";
+ $msg = $this->getMessageWithAgent( $key );
+ $msg->params( $this->getViewingUserForGender() );
+ if ( $hasSection ) {
+ $msg->params( $this->getTruncatedSectionTitle() );
+ }
+ return $msg;
+ }
+
public function getBodyMessage() {
$sectionText = $this->event->getExtraParam( 'section-text' );
if ( !$this->isBundled() && $this->hasSection() && $sectionText !== null ) {
diff --git a/Echo/includes/formatters/EventPresentationModel.php b/Echo/includes/formatters/EventPresentationModel.php
index 766cb902..02c6e6e8 100644
--- a/Echo/includes/formatters/EventPresentationModel.php
+++ b/Echo/includes/formatters/EventPresentationModel.php
@@ -9,27 +9,32 @@ use Wikimedia\Timestamp\TimestampException;
abstract class EchoEventPresentationModel implements JsonSerializable {
/**
- * Recommended length of usernames included in messages
+ * Recommended length of usernames included in messages, in
+ * characters (not bytes).
*/
const USERNAME_RECOMMENDED_LENGTH = 20;
/**
- * Recommended length of usernames used as link label
+ * Recommended length of usernames used as link label, in
+ * characters (not bytes).
*/
const USERNAME_AS_LABEL_RECOMMENDED_LENGTH = 15;
/**
- * Recommended length of page names included in messages
+ * Recommended length of page names included in messages, in
+ * characters (not bytes).
*/
const PAGE_NAME_RECOMMENDED_LENGTH = 50;
/**
- * Recommended length of page names used as link label
+ * Recommended length of page names used as link label, in
+ * characters (not bytes).
*/
const PAGE_NAME_AS_LABEL_RECOMMENDED_LENGTH = 15;
/**
- * Recommended length of section titles included in messages
+ * Recommended length of section titles included in messages, in
+ * characters (not bytes).
*/
const SECTION_TITLE_RECOMMENDED_LENGTH = 50;
@@ -60,38 +65,49 @@ abstract class EchoEventPresentationModel implements JsonSerializable {
/**
* @param EchoEvent $event
- * @param Language|string $language
+ * @param Language $language
* @param User $user Only used for permissions checking and GENDER
* @param string $distributionType
*/
- protected function __construct( EchoEvent $event, $language, User $user, $distributionType ) {
+ protected function __construct(
+ EchoEvent $event,
+ Language $language,
+ User $user,
+ $distributionType
+ ) {
$this->event = $event;
$this->type = $event->getType();
- $this->language = wfGetLangObj( $language );
+ $this->language = $language;
$this->user = $user;
$this->distributionType = $distributionType;
}
/**
* Convenience function to detect whether the event type
- * has been updated to use the presentation model system
+ * has a presentation model available for rendering
*
* @param string $type event type
* @return bool
*/
public static function supportsPresentationModel( $type ) {
global $wgEchoNotifications;
- return isset( $wgEchoNotifications[$type]['presentation-model'] );
+ return isset( $wgEchoNotifications[$type]['presentation-model'] )
+ && class_exists( $wgEchoNotifications[$type]['presentation-model'] );
}
/**
* @param EchoEvent $event
- * @param Language|string $language
+ * @param Language $language
* @param User $user
* @param string $distributionType 'web' or 'email'
* @return EchoEventPresentationModel
*/
- public static function factory( EchoEvent $event, $language, User $user, $distributionType = 'web' ) {
+ public static function factory(
+ EchoEvent $event,
+ Language $language,
+ User $user,
+ $distributionType = 'web'
+ ) {
global $wgEchoNotifications;
// @todo don't depend upon globals
@@ -136,7 +152,7 @@ abstract class EchoEventPresentationModel implements JsonSerializable {
/**
* @var Message $msg
*/
- $msg = call_user_func_array( 'wfMessage', func_get_args() );
+ $msg = wfMessage( ...func_get_args() );
$msg->inLanguage( $this->language );
// Notifications are considered UI (and should be in UI language, not
@@ -156,7 +172,7 @@ abstract class EchoEventPresentationModel implements JsonSerializable {
/**
* Get the ids of the bundled notifications or false if it's not bundled
*
- * @return int[]|bool
+ * @return int[]|false
*/
public function getBundledIds() {
if ( $this->isBundled() ) {
@@ -188,7 +204,7 @@ abstract class EchoEventPresentationModel implements JsonSerializable {
* If $includeCurrent is false, all events in the same group as the current one will be ignored.
*
* @param bool $includeCurrent Include the current event (and its group)
- * @param callable $groupCallback Callback that takes an EchoEvent and returns a grouping value
+ * @param callable|null $groupCallback Callback that takes an EchoEvent and returns a grouping value
* @return int Number of bundled events or groups
* @throws InvalidArgumentException
*/
@@ -214,10 +230,10 @@ abstract class EchoEventPresentationModel implements JsonSerializable {
/**
* Return the count of notifications bundled together.
*
- * For parameters, see getBundleCount().
+ * For parameters, see {@see EchoEventPresentationModel::getBundleCount}.
*
* @param bool $includeCurrent
- * @param callable $groupCallback
+ * @param callable|null $groupCallback
* @return int count
*/
final protected function getNotificationCountForOutput( $includeCurrent = true, $groupCallback = null ) {
@@ -249,7 +265,7 @@ abstract class EchoEventPresentationModel implements JsonSerializable {
}
/**
- * @return array|bool ['wikitext to display', 'username for GENDER'], false if no agent
+ * @return string[]|false ['wikitext to display', 'username for GENDER'], false if no agent
*
* We have to display wikitext so we can add CSS classes for revision deleted user.
* The goal of this function is for callers not to worry about whether
@@ -413,7 +429,7 @@ abstract class EchoEventPresentationModel implements JsonSerializable {
/**
* Array of primary link details, with possibly-relative URL & label.
*
- * @return array|bool Array of link data, or false for no link:
+ * @return array|false Array of link data, or false for no link:
* ['url' => (string) url, 'label' => (string) link text (non-escaped)]
*/
abstract public function getPrimaryLink();
@@ -422,19 +438,27 @@ abstract class EchoEventPresentationModel implements JsonSerializable {
* Like getPrimaryLink(), but with the URL altered to add ?markasread=XYZ. When this link is followed,
* the notification is marked as read.
*
- * When the notification is a bundle, the notification IDs are added to the parameter value
- * separated by a "|".
+ * If the notification is a bundle, the notification IDs are added to the parameter value
+ * separated by a "|". If cross-wiki notifications are enabled, a markasreadwiki parameter is
+ * added.
*
- * @return array|bool
+ * @return array|false
*/
final public function getPrimaryLinkWithMarkAsRead() {
+ global $wgEchoCrossWikiNotifications;
$primaryLink = $this->getPrimaryLink();
if ( $primaryLink ) {
$eventIds = [ $this->event->getId() ];
if ( $this->getBundledIds() ) {
$eventIds = array_merge( $eventIds, $this->getBundledIds() );
}
- $primaryLink['url'] = wfAppendQuery( $primaryLink['url'], [ 'markasread' => implode( '|', $eventIds ) ] );
+
+ $queryParams = [ 'markasread' => implode( '|', $eventIds ) ];
+ if ( $wgEchoCrossWikiNotifications ) {
+ $queryParams['markasreadwiki'] = wfWikiID();
+ }
+
+ $primaryLink['url'] = wfAppendQuery( $primaryLink['url'], $queryParams );
}
return $primaryLink;
}
@@ -448,8 +472,13 @@ abstract class EchoEventPresentationModel implements JsonSerializable {
* 'label' => (string) link text (non-escaped),
* 'description' => (string) descriptive text (optional, non-escaped),
* 'icon' => (bool|string) symbolic ooui icon name (or false if there is none),
- * 'type' => (string) optional action type. Used to note a dynamic action, by setting it to 'dynamic-action'
- * 'data' => (array) optional array containing information about the dynamic action. It must include 'tokenType' (string), 'messages' (array) with messages supplied for the item and the confirmation dialog and 'params' (array) for the API operation needed to complete the action. For example:
+ * 'type' => (string) optional action type. Used to note a dynamic action,
+ * by setting it to 'dynamic-action'
+ * 'data' => (array) optional array containing information about the dynamic
+ * action. It must include 'tokenType' (string), 'messages' (array)
+ * with messages supplied for the item and the confirmation dialog
+ * and 'params' (array) for the API operation needed to complete the
+ * action. For example:
* 'data' => [
* 'tokenType' => 'watch',
* 'params' => [
@@ -463,8 +492,13 @@ abstract class EchoEventPresentationModel implements JsonSerializable {
* ]
* ]
* ]
- * 'prioritized' => (bool) true if the link should be outside the
- * action menu, false for inside)],
+ * 'prioritized' => (bool) true to request the link be placed outside the action menu.
+ * false or omitted for the default behavior. By default, a link will
+ * be placed inside the menu, unless there are maxPrioritizedActions
+ * or fewer secondary links. If there are maxPrioritizedActions or
+ * fewer secondary links, they will all appear outside the action menu.
+ * At most maxPrioritizedActions links will be placed outside the action menu.
+ * maxPrioritizedActions is 2 on desktop and 1 on mobile.
* ...]
*
* Note that you should call array_values(array_filter()) on the
@@ -506,7 +540,8 @@ abstract class EchoEventPresentationModel implements JsonSerializable {
* @return string
*/
protected function getTruncatedUsername( User $user ) {
- return $this->language->embedBidi( $this->language->truncate( $user->getName(), self::USERNAME_RECOMMENDED_LENGTH, '...', false ) );
+ return $this->language->embedBidi( $this->language->truncateForVisual(
+ $user->getName(), self::USERNAME_RECOMMENDED_LENGTH, '...', false ) );
}
/**
@@ -516,7 +551,8 @@ abstract class EchoEventPresentationModel implements JsonSerializable {
*/
protected function getTruncatedTitleText( Title $title, $includeNamespace = false ) {
$text = $includeNamespace ? $title->getPrefixedText() : $title->getText();
- return $this->language->embedBidi( $this->language->truncate( $text, self::PAGE_NAME_RECOMMENDED_LENGTH, '...', false ) );
+ return $this->language->embedBidi( $this->language->truncateForVisual(
+ $text, self::PAGE_NAME_RECOMMENDED_LENGTH, '...', false ) );
}
/**
@@ -537,7 +573,8 @@ abstract class EchoEventPresentationModel implements JsonSerializable {
: $user->getUserPage()->getFullURL();
$label = $user->getName();
- $truncatedLabel = $this->language->truncate( $label, self::USERNAME_AS_LABEL_RECOMMENDED_LENGTH, '...', false );
+ $truncatedLabel = $this->language->truncateForVisual(
+ $label, self::USERNAME_AS_LABEL_RECOMMENDED_LENGTH, '...', false );
$isTruncated = $label !== $truncatedLabel;
return [
@@ -569,7 +606,8 @@ abstract class EchoEventPresentationModel implements JsonSerializable {
return [
'url' => $title->getFullURL( $query ),
'label' => $this->language->embedBidi(
- $this->language->truncate( $title->getText(), self::PAGE_NAME_AS_LABEL_RECOMMENDED_LENGTH, '...', false )
+ $this->language->truncateForVisual(
+ $title->getText(), self::PAGE_NAME_AS_LABEL_RECOMMENDED_LENGTH, '...', false )
),
'tooltip' => $title->getPrefixedText(),
'description' => $description,
@@ -584,13 +622,20 @@ abstract class EchoEventPresentationModel implements JsonSerializable {
* @param Title $title Title relating to this action
* @param bool $icon Optional. Symbolic name of the OOUI icon to use
* @param string $label link text (non-escaped)
- * @param string $description descriptive text (optional, non-escaped)
+ * @param string|null $description descriptive text (optional, non-escaped)
* @param array $data Action data
* @param array $query
* @return array Array compatible with the structure of
* secondary links
*/
- final protected function getDynamicActionLink( Title $title, $icon, $label, $description = null, $data = [], $query = [] ) {
+ final protected function getDynamicActionLink(
+ Title $title,
+ $icon,
+ $label,
+ $description = null,
+ $data = [],
+ $query = []
+ ) {
if ( !$icon && $title->getNamespace() === NS_USER_TALK ) {
$icon = 'userSpeechBubble';
} elseif ( !$icon && $title->isTalkPage() ) {
diff --git a/Echo/includes/formatters/MentionInSummaryPresentationModel.php b/Echo/includes/formatters/MentionInSummaryPresentationModel.php
new file mode 100644
index 00000000..bda17118
--- /dev/null
+++ b/Echo/includes/formatters/MentionInSummaryPresentationModel.php
@@ -0,0 +1,59 @@
+<?php
+
+class EchoMentionInSummaryPresentationModel extends EchoEventPresentationModel {
+
+ public function getIconType() {
+ return 'mention';
+ }
+
+ public function canRender() {
+ return (bool)$this->event->getTitle();
+ }
+
+ public function getHeaderMessage() {
+ $msg = $this->getMessageWithAgent( 'notification-header-mention-summary' );
+ $msg->params( $this->getViewingUserForGender() );
+ $msg->params( $this->getTruncatedTitleText( $this->event->getTitle() ) );
+
+ return $msg;
+ }
+
+ public function getBodyMessage() {
+ if ( $this->userCan( Revision::DELETED_COMMENT ) ) {
+ $revision = $this->event->getRevision();
+ $summary = $revision->getComment();
+ $summary = Linker::formatComment( $summary );
+ $summary = Sanitizer::stripAllTags( $summary );
+
+ $msg = $this->msg( 'notification-body-mention' )
+ ->plaintextParams( $summary );
+ return $msg;
+ } else {
+ return false;
+ }
+ }
+
+ public function getPrimaryLink() {
+ return [
+ 'url' => $this->getDiffURL(),
+ 'label' => $this->msg( 'notification-link-text-view-changes', $this->getViewingUserForGender() )->text(),
+ ];
+ }
+
+ public function getSecondaryLinks() {
+ return [ $this->getAgentLink() ];
+ }
+
+ protected function getSubjectMessageKey() {
+ return 'notification-mention-email-subject';
+ }
+
+ private function getDiffURL() {
+ $title = $this->event->getTitle();
+
+ return $title->getLocalURL( [
+ 'oldid' => 'prev',
+ 'diff' => $this->event->getExtraParam( 'revid' )
+ ] );
+ }
+}
diff --git a/Echo/includes/formatters/PageLinkedPresentationModel.php b/Echo/includes/formatters/PageLinkedPresentationModel.php
index d6e41323..3941484b 100644
--- a/Echo/includes/formatters/PageLinkedPresentationModel.php
+++ b/Echo/includes/formatters/PageLinkedPresentationModel.php
@@ -91,7 +91,7 @@ class EchoPageLinkedPresentationModel extends EchoEventPresentationModel {
if ( isset( $extra['link-from-page-id'] ) ) {
return $extra['link-from-page-id'];
}
- // Backwards compatiblity for events from before https://gerrit.wikimedia.org/r/#/c/63076
+ // Backwards compatibility for events from before https://gerrit.wikimedia.org/r/#/c/63076
if ( isset( $extra['link-from-namespace'] ) && isset( $extra['link-from-title'] ) ) {
$title = Title::makeTitleSafe( $extra['link-from-namespace'], $extra['link-from-title'] );
if ( $title ) {
diff --git a/Echo/includes/formatters/PresentationModelSectionTrait.php b/Echo/includes/formatters/PresentationModelSectionTrait.php
index 7d0e6b9f..00f9e318 100644
--- a/Echo/includes/formatters/PresentationModelSectionTrait.php
+++ b/Echo/includes/formatters/PresentationModelSectionTrait.php
@@ -70,11 +70,7 @@ trait EchoPresentationModelSectionTrait {
protected function getTitleWithSection() {
$title = $this->event->getTitle();
$section = $this->getParsedSectionTitle();
- // Like Parser::guessSectionNameFromWikiText() but without the link stripping
- $fragment = Sanitizer::escapeId(
- Sanitizer::normalizeSectionNameWhitespace( $section ),
- 'noninitial'
- );
+ $fragment = substr( Parser::guessSectionNameFromStrippedText( $section ), 1 );
if ( $section ) {
$title = Title::makeTitle(
$title->getNamespace(),
@@ -86,7 +82,7 @@ trait EchoPresentationModelSectionTrait {
}
protected function getTruncatedSectionTitle() {
- return $this->language->embedBidi( $this->language->truncate(
+ return $this->language->embedBidi( $this->language->truncateForVisual(
$this->getParsedSectionTitle(),
self::SECTION_TITLE_RECOMMENDED_LENGTH,
'...',
diff --git a/Echo/includes/formatters/SpecialNotificationsFormatter.php b/Echo/includes/formatters/SpecialNotificationsFormatter.php
index d5e7d981..ca57ba90 100644
--- a/Echo/includes/formatters/SpecialNotificationsFormatter.php
+++ b/Echo/includes/formatters/SpecialNotificationsFormatter.php
@@ -23,7 +23,7 @@ class SpecialNotificationsFormatter extends EchoEventFormatter {
$markAsReadIcon = new OOUI\IconWidget( [
'icon' => 'close',
- 'title' => wfMessage( 'echo-notification-markasread' ),
+ 'title' => wfMessage( 'echo-notification-markasread' )->text(),
] );
$markAsReadForm = $markReadSpecialPage->getMinimalForm(
@@ -86,7 +86,7 @@ class SpecialNotificationsFormatter extends EchoEventFormatter {
);
}
- $pipe = wfMessage( 'pipe-separator' )->inLanguage( $this->language )->escaped();
+ $pipe = wfMessage( 'pipe-separator' )->inLanguage( $this->language )->text();
$html .= Xml::tags(
'div',
[ 'class' => 'mw-echo-notification-footer' ],
diff --git a/Echo/includes/formatters/UserRightsPresentationModel.php b/Echo/includes/formatters/UserRightsPresentationModel.php
index 53f20d03..ba29a3e4 100644
--- a/Echo/includes/formatters/UserRightsPresentationModel.php
+++ b/Echo/includes/formatters/UserRightsPresentationModel.php
@@ -58,7 +58,11 @@ class EchoUserRightsPresentationModel extends EchoEventPresentationModel {
public function getBodyMessage() {
$reason = $this->event->getExtraParam( 'reason' );
- return $reason ? $this->msg( 'notification-body-user-rights' )->params( $reason ) : false;
+ if ( $reason ) {
+ $text = EchoDiscussionParser::getTextSnippet( $reason, $this->language );
+ return new RawMessage( "$1", [ $text ] );
+ }
+ return false;
}
private function getLocalizedGroupNames( $names ) {
@@ -71,9 +75,9 @@ class EchoUserRightsPresentationModel extends EchoEventPresentationModel {
public function getPrimaryLink() {
$addedGroups = array_values( $this->event->getExtraParam( 'add', [] ) );
$removedGroups = array_values( $this->event->getExtraParam( 'remove', [] ) );
- if ( count( $addedGroups ) >= 1 && count( $removedGroups ) === 0 ) {
+ if ( $addedGroups !== [] && $removedGroups === [] ) {
$fragment = $addedGroups[0];
- } elseif ( count( $addedGroups ) === 0 && count( $removedGroups ) >= 1 ) {
+ } elseif ( $addedGroups === [] && $removedGroups !== [] ) {
$fragment = $removedGroups[0];
} else {
$fragment = '';
diff --git a/Echo/includes/gateway/UserNotificationGateway.php b/Echo/includes/gateway/UserNotificationGateway.php
index 28261a7c..7ee23704 100644
--- a/Echo/includes/gateway/UserNotificationGateway.php
+++ b/Echo/includes/gateway/UserNotificationGateway.php
@@ -18,75 +18,109 @@ class EchoUserNotificationGateway {
protected $user;
/**
- * The tables for this gateway
+ * The tables for this gateway.
+ *
+ * @var string
*/
protected static $eventTable = 'echo_event';
+
+ /**
+ * The tables for this gateway.
+ *
+ * @var string
+ */
protected static $notificationTable = 'echo_notification';
/**
- * @param User
- * @param MWEchoDbFactory
+ * @param User $user
+ * @param MWEchoDbFactory $dbFactory
*/
public function __construct( User $user, MWEchoDbFactory $dbFactory ) {
$this->user = $user;
$this->dbFactory = $dbFactory;
}
+ public function getDB( $dbSource ) {
+ return $this->dbFactory->getEchoDb( $dbSource );
+ }
+
/**
* Mark notifications as read
- * @param $eventIDs array
- * @return bool
+ * @param array $eventIDs
+ * @return bool Returns true when data has been updated in DB, false on
+ * failure, or when there was nothing to update
*/
public function markRead( array $eventIDs ) {
+ global $wgUpdateRowsPerQuery;
if ( !$eventIDs ) {
- return;
+ return false;
}
- $dbw = $this->dbFactory->getEchoDb( DB_MASTER );
+ $dbw = $this->getDB( DB_MASTER );
+ if ( $dbw->isReadOnly() ) {
+ return false;
+ }
- return $dbw->update(
- self::$notificationTable,
- [ 'notification_read_timestamp' => $dbw->timestamp( wfTimestampNow() ) ],
- [
- 'notification_user' => $this->user->getId(),
- 'notification_event' => $eventIDs,
- 'notification_read_timestamp' => null,
- ],
- __METHOD__
- );
+ $success = true;
+ foreach ( array_chunk( $eventIDs, $wgUpdateRowsPerQuery ) as $batch ) {
+ $success = $dbw->update(
+ self::$notificationTable,
+ [ 'notification_read_timestamp' => $dbw->timestamp( wfTimestampNow() ) ],
+ [
+ 'notification_user' => $this->user->getId(),
+ 'notification_event' => $batch,
+ 'notification_read_timestamp' => null,
+ ],
+ __METHOD__
+ ) && $success;
+ }
+
+ return $success;
}
/**
* Mark notifications as unread
- * @param $eventIDs array
- * @return bool
+ * @param array $eventIDs
+ * @return bool Returns true when data has been updated in DB, false on
+ * failure, or when there was nothing to update
*/
public function markUnRead( array $eventIDs ) {
+ global $wgUpdateRowsPerQuery;
if ( !$eventIDs ) {
- return;
+ return false;
}
- $dbw = $this->dbFactory->getEchoDb( DB_MASTER );
+ $dbw = $this->getDB( DB_MASTER );
+ if ( $dbw->isReadOnly() ) {
+ return false;
+ }
- return $dbw->update(
- self::$notificationTable,
- [ 'notification_read_timestamp' => null ],
- [
- 'notification_user' => $this->user->getId(),
- 'notification_event' => $eventIDs,
- 'notification_read_timestamp IS NOT NULL'
- ],
- __METHOD__
- );
+ $success = true;
+ foreach ( array_chunk( $eventIDs, $wgUpdateRowsPerQuery ) as $batch ) {
+ $success = $dbw->update(
+ self::$notificationTable,
+ [ 'notification_read_timestamp' => null ],
+ [
+ 'notification_user' => $this->user->getId(),
+ 'notification_event' => $batch,
+ 'notification_read_timestamp IS NOT NULL'
+ ],
+ __METHOD__
+ ) && $success;
+ }
+ return $success;
}
/**
- * Mark all notification as read, use MWEchoNotifUer::markAllRead() instead
+ * Mark all notification as read, use MWEchoNotifUser::markAllRead() instead
* @deprecated may need this when running in a job or revive this when we
* have updateJoin()
*/
public function markAllRead() {
- $dbw = $this->dbFactory->getEchoDb( DB_MASTER );
+ $dbw = $this->getDB( DB_MASTER );
+ if ( $dbw->isReadOnly() ) {
+ return false;
+ }
return $dbw->update(
self::$notificationTable,
@@ -108,15 +142,15 @@ class EchoUserNotificationGateway {
*/
public function getCappedNotificationCount( $dbSource, array $eventTypesToLoad = [], $cap = MWEchoNotifUser::MAX_BADGE_COUNT ) {
// double check
- if ( !in_array( $dbSource, [ DB_SLAVE, DB_MASTER ] ) ) {
- $dbSource = DB_SLAVE;
+ if ( !in_array( $dbSource, [ DB_REPLICA, DB_MASTER ] ) ) {
+ $dbSource = DB_REPLICA;
}
if ( !$eventTypesToLoad ) {
return 0;
}
- $db = $this->dbFactory->getEchoDb( $dbSource );
+ $db = $this->getDB( $dbSource );
return $db->selectRowCount(
[
self::$notificationTable,
@@ -141,11 +175,11 @@ class EchoUserNotificationGateway {
* IMPORTANT: should only call this function if the number of unread notification
* is reasonable, for example, unread notification count is less than the max
* display defined in MWEchoNotifUser::MAX_BADGE_COUNT
- * @param string
+ * @param string $type
* @return int[]
*/
public function getUnreadNotifications( $type ) {
- $dbr = $this->dbFactory->getEchoDb( DB_SLAVE );
+ $dbr = $this->getDB( DB_REPLICA );
$res = $dbr->select(
[
self::$notificationTable,
diff --git a/Echo/includes/iterator/FilteredSequentialIterator.php b/Echo/includes/iterator/FilteredSequentialIterator.php
index 246a0910..8ed5b2b1 100644
--- a/Echo/includes/iterator/FilteredSequentialIterator.php
+++ b/Echo/includes/iterator/FilteredSequentialIterator.php
@@ -45,6 +45,7 @@ class EchoFilteredSequentialIterator implements IteratorAggregate {
/**
* @param Iterator|IteratorAggregate|array $users
+ * @throws MWException
*/
public function add( $users ) {
if ( is_array( $users ) ) {
diff --git a/Echo/includes/jobs/NotificationDeleteJob.php b/Echo/includes/jobs/NotificationDeleteJob.php
index 2b6064ed..5efd410f 100644
--- a/Echo/includes/jobs/NotificationDeleteJob.php
+++ b/Echo/includes/jobs/NotificationDeleteJob.php
@@ -30,6 +30,7 @@ class EchoNotificationDeleteJob extends Job {
/**
* Run the job of finding & deleting older notifications
+ * @return true
*/
public function run() {
global $wgEchoMaxUpdateCount;
@@ -53,13 +54,11 @@ class EchoNotificationDeleteJob extends Job {
$user = User::newFromId( $userId );
$notif = $notifMapper->fetchByUserOffset( $user, $wgEchoMaxUpdateCount );
if ( $notif ) {
- $res = $notifMapper->deleteByUserEventOffset(
+ $notifMapper->deleteByUserEventOffset(
$user, $notif->getEvent()->getId()
);
- if ( $res ) {
- $notifUser = MWEchoNotifUser::newFromUser( $user );
- $notifUser->resetNotificationCount( DB_MASTER );
- }
+ $notifUser = MWEchoNotifUser::newFromUser( $user );
+ $notifUser->resetNotificationCount();
}
return true;
diff --git a/Echo/includes/jobs/NotificationJob.php b/Echo/includes/jobs/NotificationJob.php
index a736d3d3..00282c00 100644
--- a/Echo/includes/jobs/NotificationJob.php
+++ b/Echo/includes/jobs/NotificationJob.php
@@ -1,43 +1,18 @@
<?php
class EchoNotificationJob extends Job {
+ private $eventId;
+
function __construct( $title, $params ) {
parent::__construct( 'EchoNotificationJob', $title, $params );
- $this->event = $params['event'];
+ $this->eventId = $params['eventId'];
}
function run() {
- // back compat for jobs still in queue, new jobs
- // masterPos is always set. remove after deploy.
- if ( isset( $this->params['masterPos'] ) ) {
- $masterPos = $this->params['masterPos'];
- } else {
- $masterPos = $this->getMasterPosition();
- }
-
- MWEchoDbFactory::newFromDefault()->waitFor( $masterPos );
- EchoNotificationController::notify( $this->event, false );
+ MWEchoDbFactory::newFromDefault()->waitForSlaves();
+ $event = EchoEvent::newFromID( $this->eventId );
+ EchoNotificationController::notify( $event, false );
return true;
}
-
- /**
- * back compat detects masterPos from prior job params
- *
- * @return array
- */
- function getMasterPosition() {
- $masterPos = [
- 'wikiDb' => false,
- 'echoDb' => false,
- ];
- if ( !empty( $this->params['mainDbMasterPos'] ) ) {
- $masterPos['wikiDb'] = $this->params['mainDbMasterPos'];
- }
- if ( !empty( $this->params['echoDbMasterPos'] ) ) {
- $masterPos['echoDb'] = $this->params['echoDbMasterPos'];
- }
-
- return $masterPos;
- }
}
diff --git a/Echo/includes/mapper/AbstractMapper.php b/Echo/includes/mapper/AbstractMapper.php
index d9603e0d..d59bd8f1 100644
--- a/Echo/includes/mapper/AbstractMapper.php
+++ b/Echo/includes/mapper/AbstractMapper.php
@@ -13,7 +13,7 @@ abstract class EchoAbstractMapper {
/**
* Event listeners for method like insert/delete
- * @var array
+ * @var array[]
*/
protected $listeners;
@@ -61,7 +61,8 @@ abstract class EchoAbstractMapper {
/**
* Get the listener for a method
*
- * @return array
+ * @param string $method
+ * @return callable[]
* @throws MWException
*/
public function getMethodListeners( $method ) {
diff --git a/Echo/includes/mapper/EventMapper.php b/Echo/includes/mapper/EventMapper.php
index e5c3bac7..3ac84dc9 100644
--- a/Echo/includes/mapper/EventMapper.php
+++ b/Echo/includes/mapper/EventMapper.php
@@ -1,5 +1,7 @@
<?php
+use Wikimedia\Rdbms\IResultWrapper;
+
/**
* Database mapper for EchoEvent model, which is an immutable class, there should
* not be any update to it
@@ -10,7 +12,7 @@ class EchoEventMapper extends EchoAbstractMapper {
* Insert an event record
*
* @param EchoEvent $event
- * @return int|bool
+ * @return int|false
*/
public function insert( EchoEvent $event ) {
$dbw = $this->dbFactory->getEchoDb( DB_MASTER );
@@ -38,11 +40,11 @@ class EchoEventMapper extends EchoAbstractMapper {
*
* @param int $id
* @param bool $fromMaster
- * @return EchoEvent|bool false if it wouldn't load/unserialize
+ * @return EchoEvent|false False if it wouldn't load/unserialize
* @throws MWException
*/
public function fetchById( $id, $fromMaster = false ) {
- $db = $fromMaster ? $this->dbFactory->getEchoDb( DB_MASTER ) : $this->dbFactory->getEchoDb( DB_SLAVE );
+ $db = $fromMaster ? $this->dbFactory->getEchoDb( DB_MASTER ) : $this->dbFactory->getEchoDb( DB_REPLICA );
$row = $db->selectRow( 'echo_event', '*', [ 'event_id' => $id ], __METHOD__ );
@@ -59,7 +61,7 @@ class EchoEventMapper extends EchoAbstractMapper {
/**
* @param int[] $eventIds
* @param bool $deleted
- * @return bool|ResultWrapper
+ * @return bool|IResultWrapper
*/
public function toggleDeleted( $eventIds, $deleted ) {
$dbw = $this->dbFactory->getEchoDb( DB_MASTER );
@@ -90,7 +92,7 @@ class EchoEventMapper extends EchoAbstractMapper {
public function fetchByPage( $pageId ) {
$events = [];
- $dbr = $this->dbFactory->getEchoDb( DB_SLAVE );
+ $dbr = $this->dbFactory->getEchoDb( DB_REPLICA );
$res = $dbr->select(
[ 'echo_event', 'echo_target_page' ],
[ '*' ],
@@ -135,7 +137,7 @@ class EchoEventMapper extends EchoAbstractMapper {
* @return EchoEvent[]
*/
public function fetchUnreadByUserAndPage( User $user, $pageId ) {
- $dbr = $this->dbFactory->getEchoDb( DB_SLAVE );
+ $dbr = $this->dbFactory->getEchoDb( DB_REPLICA );
$res = $dbr->select(
[ 'echo_event', 'echo_notification', 'echo_target_page' ],
diff --git a/Echo/includes/mapper/NotificationMapper.php b/Echo/includes/mapper/NotificationMapper.php
index 6ec00a9a..3e9dc2f6 100644
--- a/Echo/includes/mapper/NotificationMapper.php
+++ b/Echo/includes/mapper/NotificationMapper.php
@@ -1,5 +1,8 @@
<?php
+use MediaWiki\MediaWikiServices;
+use Wikimedia\Rdbms\IDatabase;
+
/**
* Database mapper for EchoNotification model
*/
@@ -7,7 +10,7 @@ class EchoNotificationMapper extends EchoAbstractMapper {
/**
* Insert a notification record
- * @param EchoNotification
+ * @param EchoNotification $notification
* @return null
*/
public function insert( EchoNotification $notification ) {
@@ -52,7 +55,7 @@ class EchoNotificationMapper extends EchoAbstractMapper {
/**
* Extract the offset used for notification list
- * @param $continue String Used for offset
+ * @param string $continue String Used for offset
* @throws MWException
* @return int[]
*/
@@ -83,12 +86,19 @@ class EchoNotificationMapper extends EchoAbstractMapper {
* @param int $limit
* @param string $continue Used for offset
* @param string[] $eventTypes
- * @param Title[] $titles If set, only return notifications for these pages.
+ * @param Title[]|null $titles If set, only return notifications for these pages.
* To find notifications not associated with any page, add null as an element to this array.
* @param int $dbSource Use master or slave database
* @return EchoNotification[]
*/
- public function fetchUnreadByUser( User $user, $limit, $continue, array $eventTypes = [], array $titles = null, $dbSource = DB_SLAVE ) {
+ public function fetchUnreadByUser(
+ User $user,
+ $limit,
+ $continue,
+ array $eventTypes = [],
+ array $titles = null,
+ $dbSource = DB_REPLICA
+ ) {
$conds['notification_read_timestamp'] = null;
if ( $titles ) {
$conds['event_page_id'] = $this->getIdsForTitles( $titles );
@@ -109,12 +119,19 @@ class EchoNotificationMapper extends EchoAbstractMapper {
* @param int $limit
* @param string $continue Used for offset
* @param string[] $eventTypes
- * @param Title[] $titles If set, only return notifications for these pages.
+ * @param Title[]|null $titles If set, only return notifications for these pages.
* To find notifications not associated with any page, add null as an element to this array.
* @param int $dbSource Use master or slave database
* @return EchoNotification[]
*/
- public function fetchReadByUser( User $user, $limit, $continue, array $eventTypes = [], array $titles = null, $dbSource = DB_SLAVE ) {
+ public function fetchReadByUser(
+ User $user,
+ $limit,
+ $continue,
+ array $eventTypes = [],
+ array $titles = null,
+ $dbSource = DB_REPLICA
+ ) {
$conds = [ 'notification_read_timestamp IS NOT NULL' ];
if ( $titles ) {
$conds['event_page_id'] = $this->getIdsForTitles( $titles );
@@ -133,12 +150,19 @@ class EchoNotificationMapper extends EchoAbstractMapper {
* @param string $continue Used for offset
* @param array $eventTypes Event types to load
* @param array $excludeEventIds Event id's to exclude.
- * @param Title[] $titles If set, only return notifications for these pages.
+ * @param Title[]|null $titles If set, only return notifications for these pages.
* To find notifications not associated with any page, add null as an element to this array.
* @return EchoNotification[]
*/
- public function fetchByUser( User $user, $limit, $continue, array $eventTypes = [], array $excludeEventIds = [], array $titles = null ) {
- $dbr = $this->dbFactory->getEchoDb( DB_SLAVE );
+ public function fetchByUser(
+ User $user,
+ $limit,
+ $continue,
+ array $eventTypes = [],
+ array $excludeEventIds = [],
+ array $titles = null
+ ) {
+ $dbr = $this->dbFactory->getEchoDb( DB_REPLICA );
$conds = [];
if ( $excludeEventIds ) {
@@ -175,7 +199,14 @@ class EchoNotificationMapper extends EchoAbstractMapper {
* @param int $dbSource Use master or slave database
* @return EchoNotification[]
*/
- protected function fetchByUserInternal( User $user, $limit, $continue, array $eventTypes = [], array $conds = [], $dbSource = DB_SLAVE ) {
+ protected function fetchByUserInternal(
+ User $user,
+ $limit,
+ $continue,
+ array $eventTypes = [],
+ array $conds = [],
+ $dbSource = DB_REPLICA
+ ) {
$dbr = $this->dbFactory->getEchoDb( $dbSource );
if ( !$eventTypes ) {
@@ -200,7 +231,8 @@ class EchoNotificationMapper extends EchoAbstractMapper {
if ( $offset['timestamp'] && $offset['offset'] ) {
$ts = $dbr->addQuotes( $dbr->timestamp( $offset['timestamp'] ) );
// The offset and timestamp are those of the first notification we want to return
- $conds[] = "notification_timestamp < $ts OR ( notification_timestamp = $ts AND notification_event <= " . $offset['offset'] . " )";
+ $conds[] = "notification_timestamp < $ts OR " .
+ "( notification_timestamp = $ts AND notification_event <= " . $offset['offset'] . " )";
}
$res = $dbr->select(
@@ -222,6 +254,7 @@ class EchoNotificationMapper extends EchoAbstractMapper {
return [];
}
+ /** @var EchoNotification[] $allNotifications */
$allNotifications = [];
foreach ( $res as $row ) {
try {
@@ -237,7 +270,6 @@ class EchoNotificationMapper extends EchoAbstractMapper {
}
$data = [];
- /** @var EchoNotification $notification */
foreach ( $allNotifications as $notification ) {
$data[ $notification->getEvent()->getId() ] = $notification;
}
@@ -249,10 +281,10 @@ class EchoNotificationMapper extends EchoAbstractMapper {
* Get the last notification in a set of bundle-able notifications by a bundle hash
* @param User $user
* @param string $bundleHash The hash used to identify a set of bundle-able notifications
- * @return EchoNotification|bool
+ * @return EchoNotification|false
*/
public function fetchNewestByUserBundleHash( User $user, $bundleHash ) {
- $dbr = $this->dbFactory->getEchoDb( DB_SLAVE );
+ $dbr = $this->dbFactory->getEchoDb( DB_REPLICA );
$row = $dbr->selectRow(
[ 'echo_notification', 'echo_event' ],
@@ -279,10 +311,10 @@ class EchoNotificationMapper extends EchoAbstractMapper {
*
* @param User $user
* @param int[] $eventIds
- * @return EchoNotification[]|bool
+ * @return EchoNotification[]|false
*/
public function fetchByUserEvents( User $user, $eventIds ) {
- $dbr = $this->dbFactory->getEchoDb( DB_SLAVE );
+ $dbr = $this->dbFactory->getEchoDb( DB_REPLICA );
$result = $dbr->select(
[ 'echo_notification', 'echo_event' ],
@@ -314,10 +346,10 @@ class EchoNotificationMapper extends EchoAbstractMapper {
* know that passing a big number for offset is NOT going to work
* @param User $user
* @param int $offset
- * @return EchoNotification|bool
+ * @return EchoNotification|false
*/
public function fetchByUserOffset( User $user, $offset ) {
- $dbr = $this->dbFactory->getEchoDb( DB_SLAVE );
+ $dbr = $this->dbFactory->getEchoDb( DB_REPLICA );
$row = $dbr->selectRow(
[ 'echo_notification', 'echo_event' ],
[ '*' ],
@@ -350,17 +382,39 @@ class EchoNotificationMapper extends EchoAbstractMapper {
* @return bool
*/
public function deleteByUserEventOffset( User $user, $eventId ) {
+ global $wgUpdateRowsPerQuery;
+ $userId = $user->getId();
$dbw = $this->dbFactory->getEchoDb( DB_MASTER );
- $res = $dbw->delete(
+ $lbFactory = MediaWikiServices::getInstance()->getDBLoadBalancerFactory();
+ $ticket = $lbFactory->getEmptyTransactionTicket( __METHOD__ );
+ $domainId = $dbw->getDomainId();
+
+ $idsToDelete = $dbw->selectFieldValues(
'echo_notification',
+ 'notification_event',
[
- 'notification_user' => $user->getId(),
+ 'notification_user' => $userId,
'notification_event < ' . (int)$eventId
],
__METHOD__
);
-
- return $res;
+ if ( !$idsToDelete ) {
+ return true;
+ }
+ $success = true;
+ foreach ( array_chunk( $idsToDelete, $wgUpdateRowsPerQuery ) as $batch ) {
+ $success = $dbw->delete(
+ 'echo_notification',
+ [
+ 'notification_user' => $userId,
+ 'notification_event' => $batch,
+ ],
+ __METHOD__
+ ) && $success;
+ $lbFactory->commitAndWaitForReplication(
+ __METHOD__, $ticket, [ 'domain' => $domainId ] );
+ }
+ return $success;
}
/**
@@ -370,7 +424,7 @@ class EchoNotificationMapper extends EchoAbstractMapper {
* @return int[]|false
*/
public function fetchUsersWithNotificationsForEvents( $eventIds ) {
- $dbr = $this->dbFactory->getEchoDb( DB_SLAVE );
+ $dbr = $this->dbFactory->getEchoDb( DB_REPLICA );
$res = $dbr->select(
[ 'echo_notification' ],
diff --git a/Echo/includes/model/Event.php b/Echo/includes/model/Event.php
index ecc0941a..79a9b14b 100644
--- a/Echo/includes/model/Event.php
+++ b/Echo/includes/model/Event.php
@@ -97,7 +97,7 @@ class EchoEvent extends EchoAbstractEntity implements Bundleable {
* extra: Event-specific extra information (e.g. post content)
*
* @throws MWException
- * @return EchoEvent|bool false if aborted via hook or Echo DB is read-only
+ * @return EchoEvent|false False if aborted via hook or Echo DB is read-only
*/
public static function create( $info = [] ) {
global $wgEchoNotifications;
@@ -121,7 +121,7 @@ class EchoEvent extends EchoAbstractEntity implements Bundleable {
}
$obj->id = false;
- if ( isset( $info['timestamp'] ) ) {
+ if ( isset( $info['timestamp'] ) && $info[ 'timestamp' ] !== null ) {
$obj->timestamp = $info['timestamp'];
} else {
$obj->timestamp = wfTimestampNow();
@@ -145,16 +145,13 @@ class EchoEvent extends EchoAbstractEntity implements Bundleable {
if ( $obj->title ) {
if ( !$obj->title instanceof Title ) {
- throw new MWException( 'Invalid title parameter' );
+ throw new InvalidArgumentException( 'Invalid title parameter' );
}
$obj->setTitle( $obj->title );
}
- if ( $obj->agent && !
- ( $obj->agent instanceof User ||
- $obj->agent instanceof StubObject )
- ) {
- throw new MWException( "Invalid user parameter" );
+ if ( $obj->agent && ! $obj->agent instanceof User ) {
+ throw new InvalidArgumentException( "Invalid user parameter" );
}
if ( !Hooks::run( 'BeforeEchoEventInsert', [ $obj ] ) ) {
@@ -365,7 +362,7 @@ class EchoEvent extends EchoAbstractEntity implements Bundleable {
* Creates an EchoEvent from a row object
*
* @param stdClass $row row object from echo_event
- * @return EchoEvent|bool
+ * @return EchoEvent|false
*/
public static function newFromRow( $row ) {
$obj = new EchoEvent();
@@ -378,7 +375,7 @@ class EchoEvent extends EchoAbstractEntity implements Bundleable {
* Creates an EchoEvent from the database by ID
*
* @param int $id Event ID
- * @return EchoEvent|bool
+ * @return EchoEvent|false
*/
public static function newFromID( $id ) {
$obj = new EchoEvent();
@@ -492,7 +489,7 @@ class EchoEvent extends EchoAbstractEntity implements Bundleable {
}
/**
- * @return array|null
+ * @return array
*/
public function getExtra() {
return $this->extra;
@@ -520,15 +517,18 @@ class EchoEvent extends EchoAbstractEntity implements Bundleable {
$titleCache = EchoTitleLocalCache::create();
$title = $titleCache->get( $this->pageId );
if ( $title ) {
- return $this->title = $title;
+ $this->title = $title;
+ return $this->title;
}
- return $this->title = Title::newFromID( $this->pageId, $fromMaster ? Title::GAID_FOR_UPDATE : 0 );
+ $this->title = Title::newFromID( $this->pageId, $fromMaster ? Title::GAID_FOR_UPDATE : 0 );
+ return $this->title;
} elseif ( isset( $this->extra['page_title'], $this->extra['page_namespace'] ) ) {
- return $this->title = Title::makeTitleSafe(
+ $this->title = Title::makeTitleSafe(
$this->extra['page_namespace'],
$this->extra['page_title']
);
+ return $this->title;
}
return null;
@@ -544,10 +544,12 @@ class EchoEvent extends EchoAbstractEntity implements Bundleable {
$revisionCache = EchoRevisionLocalCache::create();
$revision = $revisionCache->get( $this->extra['revid'] );
if ( $revision ) {
- return $this->revision = $revision;
+ $this->revision = $revision;
+ return $this->revision;
}
- return $this->revision = Revision::newFromId( $this->extra['revid'] );
+ $this->revision = Revision::newFromId( $this->extra['revid'] );
+ return $this->revision;
}
return null;
diff --git a/Echo/includes/model/Notification.php b/Echo/includes/model/Notification.php
index 4c5f338d..282b3386 100644
--- a/Echo/includes/model/Notification.php
+++ b/Echo/includes/model/Notification.php
@@ -80,12 +80,12 @@ class EchoNotification extends EchoAbstractEntity implements Bundleable {
}
}
- if ( !$obj->user instanceof User && !$obj->user instanceof StubObject ) {
- throw new MWException( 'Invalid user parameter, expected: User/StubObject object' );
+ if ( !$obj->user instanceof User ) {
+ throw new InvalidArgumentException( 'Invalid user parameter, expected: User object' );
}
if ( !$obj->event instanceof EchoEvent ) {
- throw new MWException( 'Invalid event parameter, expected: EchoEvent object' );
+ throw new InvalidArgumentException( 'Invalid event parameter, expected: EchoEvent object' );
}
// Notification timestamp should be the same as event timestamp
@@ -136,14 +136,13 @@ class EchoNotification extends EchoAbstractEntity implements Bundleable {
// Add listener to refresh notification count upon insert
$notifMapper->attachListener( 'insert', 'refresh-notif-count',
function () use ( $notifUser, $section ) {
- $notifUser->resetNotificationCount( DB_MASTER );
+ $notifUser->resetNotificationCount();
}
);
$notifMapper->insert( $this );
if ( $this->event->getCategory() === 'edit-user-talk' ) {
- $notifUser->flagCacheWithNewTalkNotification();
$this->user->setNewtalk( true );
}
Hooks::run( 'EchoCreateNotificationComplete', [ $this ] );
@@ -153,7 +152,7 @@ class EchoNotification extends EchoAbstractEntity implements Bundleable {
* Load a notification record from std class
* @param stdClass $row
* @param EchoTargetPage[]|null $targetPages An array of EchoTargetPage instances, or null if not loaded.
- * @return EchoNotification|bool false if failed to load/unserialize
+ * @return EchoNotification|false False if failed to load/unserialize
*/
public static function newFromRow( $row, $targetPages = null ) {
$notification = new EchoNotification();
diff --git a/Echo/includes/model/TargetPage.php b/Echo/includes/model/TargetPage.php
index 2b371977..e9ea4d2b 100644
--- a/Echo/includes/model/TargetPage.php
+++ b/Echo/includes/model/TargetPage.php
@@ -8,7 +8,7 @@
class EchoTargetPage extends EchoAbstractEntity {
/**
- * @var Title|null|bool false if not initialized yet
+ * @var Title|null|false False if not initialized yet
*/
protected $title = false;
@@ -136,7 +136,7 @@ class EchoTargetPage extends EchoAbstractEntity {
/**
* Convert the properties to a database row
- * @return array
+ * @return int[]
*/
public function toDbArray() {
return [
diff --git a/Echo/includes/ooui/LabelIconWidget.php b/Echo/includes/ooui/LabelIconWidget.php
index e44e8ff9..6cceec2d 100644
--- a/Echo/includes/ooui/LabelIconWidget.php
+++ b/Echo/includes/ooui/LabelIconWidget.php
@@ -18,9 +18,9 @@ class LabelIconWidget extends Widget {
/**
* @param array $config Configuration options
- * @param string|HtmlSnippet $config['label'] Label text
- * @param string $config['title'] Title text
- * @param string $config['icon'] Icon key
+ * - string|HtmlSnippet $config['label'] Label text
+ * - string $config['title'] Title text
+ * - string $config['icon'] Icon key
*/
public function __construct( $config ) {
parent::__construct( $config );
diff --git a/Echo/includes/special/NotificationPager.php b/Echo/includes/special/NotificationPager.php
index 07a4e06c..9aa85cd8 100644
--- a/Echo/includes/special/NotificationPager.php
+++ b/Echo/includes/special/NotificationPager.php
@@ -4,13 +4,11 @@
* This pager is used by Special:Notifications (NO-JS).
* The heavy-lifting is done by IndexPager (grand-parent to this class).
* It paginates on notification_event for a specific user, only for the enabled event types.
- *
- * Class NotificationPager
*/
class NotificationPager extends ReverseChronologicalPager {
public function __construct() {
$dbFactory = MWEchoDbFactory::newFromDefault();
- $this->mDb = $dbFactory->getEchoDb( DB_SLAVE );
+ $this->mDb = $dbFactory->getEchoDb( DB_REPLICA );
parent::__construct();
}
diff --git a/Echo/includes/special/SpecialDisplayNotificationsConfiguration.php b/Echo/includes/special/SpecialDisplayNotificationsConfiguration.php
index 09be63ca..f5d71e24 100644
--- a/Echo/includes/special/SpecialDisplayNotificationsConfiguration.php
+++ b/Echo/includes/special/SpecialDisplayNotificationsConfiguration.php
@@ -1,4 +1,4 @@
-<?Php
+<?php
class SpecialDisplayNotificationsConfiguration extends UnlistedSpecialPage {
/**
@@ -18,23 +18,23 @@ class SpecialDisplayNotificationsConfiguration extends UnlistedSpecialPage {
/**
* Category names, mapping internal name to HTML-formatted name
*
- * @var array $categoryNames
+ * @var string[] $categoryNames
*/
protected $categoryNames;
// Should be one mapping text (friendly) name to internal name, but there
// is no friendly name
/**
- * Notification type names. Mapping internal name to internal name
+ * Notification type names. Mapping HTML-formatted internal name to internal name
*
- * @var array $notificationTypeNames
+ * @var string[] $notificationTypeNames
*/
protected $notificationTypeNames;
/**
- * Notify types, mapping internal name to text name
+ * Notify types, mapping internal name to HTML-formatted name
*
- * @var array $notifyTypes
+ * @var string[] $notifyTypes
*/
protected $notifyTypes;
@@ -42,14 +42,14 @@ class SpecialDisplayNotificationsConfiguration extends UnlistedSpecialPage {
/**
* Category names, mapping HTML-formatted name to internal name
*
- * @var array $flippedCategoryNames
+ * @var string[] $flippedCategoryNames
*/
protected $flippedCategoryNames;
/**
- * Notify types, mapping text name to internal name
+ * Notify types, mapping HTML-formatted name to internal name
*
- * @var array $flippedNotifyTypes
+ * @var string[] $flippedNotifyTypes
*/
protected $flippedNotifyTypes;
@@ -91,13 +91,16 @@ class SpecialDisplayNotificationsConfiguration extends UnlistedSpecialPage {
$this->notifyTypes = [];
foreach ( $wgEchoNotifiers as $notifyType => $notifier ) {
- $this->notifyTypes[$notifyType] = $this->msg( 'echo-pref-' . $notifyType )->text();
+ $this->notifyTypes[$notifyType] = $this->msg( 'echo-pref-' . $notifyType )->escaped();
}
$this->flippedNotifyTypes = array_flip( $this->notifyTypes );
$notificationTypes = array_keys( $wgEchoNotifications );
- $this->notificationTypeNames = array_combine( $notificationTypes, $notificationTypes );
+ $this->notificationTypeNames = array_combine(
+ array_map( 'htmlspecialchars', $notificationTypes ),
+ $notificationTypes
+ );
$this->getOutput()->setPageTitle( $this->msg( 'echo-displaynotificationsconfiguration' )->text() );
$this->outputHeader( 'echo-displaynotificationsconfiguration-summary' );
@@ -136,10 +139,10 @@ class SpecialDisplayNotificationsConfiguration extends UnlistedSpecialPage {
'disabled' => true,
]
],
- $this
+ $this->getContext()
);
- $form->setTitle( $this->getTitle() )
+ $form->setTitle( $this->getPageTitle() )
->prepareForm()
->suppressDefaultSubmit()
->setWrapperLegendMsg( $legendMsgKey )
@@ -153,13 +156,11 @@ class SpecialDisplayNotificationsConfiguration extends UnlistedSpecialPage {
$notificationsByCategory = $this->attributeManager->getEventsByCategory();
$out = $this->getOutput();
- $out->addHTML(
- Html::element(
- 'h2',
- [ 'id' => 'mw-echo-displaynotificationsconfiguration-notifications-by-category' ],
- $this->msg( 'echo-displaynotificationsconfiguration-notifications-by-category-header' )->text()
- )
- );
+ $out->addHTML( Html::element(
+ 'h2',
+ [ 'id' => 'mw-echo-displaynotificationsconfiguration-notifications-by-category' ],
+ $this->msg( 'echo-displaynotificationsconfiguration-notifications-by-category-header' )->text()
+ ) );
$out->addHTML( Html::openElement( 'ul' ) );
foreach ( $notificationsByCategory as $categoryName => $notificationTypes ) {
@@ -173,7 +174,7 @@ class SpecialDisplayNotificationsConfiguration extends UnlistedSpecialPage {
Html::rawElement(
'li',
[],
- $this->categoryNames[$categoryName] . $this->msg( 'colon-separator' )->text() . ' ' . $implodedTypes
+ $this->categoryNames[$categoryName] . $this->msg( 'colon-separator' )->escaped() . ' ' . $implodedTypes
)
);
}
@@ -184,7 +185,11 @@ class SpecialDisplayNotificationsConfiguration extends UnlistedSpecialPage {
* Output the notification types in each section (alert/message)
*/
protected function outputNotificationsInSections() {
- $this->getOutput()->addHTML( Html::element( 'h2', [ 'id' => 'mw-echo-displaynotificationsconfiguration-sorting-by-section' ], $this->msg( 'echo-displaynotificationsconfiguration-sorting-by-section-header' )->text() ) );
+ $this->getOutput()->addHTML( Html::element(
+ 'h2',
+ [ 'id' => 'mw-echo-displaynotificationsconfiguration-sorting-by-section' ],
+ $this->msg( 'echo-displaynotificationsconfiguration-sorting-by-section-header' )->text()
+ ) );
$bySectionValue = [];
@@ -194,13 +199,19 @@ class SpecialDisplayNotificationsConfiguration extends UnlistedSpecialPage {
$types = $this->attributeManager->getEventsForSection( $section );
// echo-notification-alert-text-only, echo-notification-notice-text-only
$msgSection = $section == 'message' ? 'notice' : $section;
- $flippedSectionNames[$this->msg( 'echo-notification-' . $msgSection . '-text-only' )->text()] = $section;
+ $flippedSectionNames[$this->msg( 'echo-notification-' . $msgSection . '-text-only' )->escaped()] = $section;
foreach ( $types as $type ) {
$bySectionValue[] = "$section-$type";
}
}
- $this->outputCheckMatrix( 'type-by-section', 'echo-displaynotificationsconfiguration-sorting-by-section-legend', $this->notificationTypeNames, $flippedSectionNames, $bySectionValue );
+ $this->outputCheckMatrix(
+ 'type-by-section',
+ 'echo-displaynotificationsconfiguration-sorting-by-section-legend',
+ $this->notificationTypeNames,
+ $flippedSectionNames,
+ $bySectionValue
+ );
}
/**
@@ -209,7 +220,11 @@ class SpecialDisplayNotificationsConfiguration extends UnlistedSpecialPage {
protected function outputAvailability() {
global $wgEchoNotifications;
- $this->getOutput()->addHTML( Html::element( 'h2', [ 'id' => 'mw-echo-displaynotificationsconfiguration-available-notification-methods' ], $this->msg( 'echo-displaynotificationsconfiguration-available-notification-methods-header' )->text() ) );
+ $this->getOutput()->addHTML( Html::element(
+ 'h2',
+ [ 'id' => 'mw-echo-displaynotificationsconfiguration-available-notification-methods' ],
+ $this->msg( 'echo-displaynotificationsconfiguration-available-notification-methods-header' )->text()
+ ) );
$byCategoryValue = [];
@@ -221,7 +236,13 @@ class SpecialDisplayNotificationsConfiguration extends UnlistedSpecialPage {
}
}
- $this->outputCheckMatrix( 'availability-by-category', 'echo-displaynotificationsconfiguration-available-notification-methods-by-category-legend', $this->flippedCategoryNames, $this->flippedNotifyTypes, $byCategoryValue );
+ $this->outputCheckMatrix(
+ 'availability-by-category',
+ 'echo-displaynotificationsconfiguration-available-notification-methods-by-category-legend',
+ $this->flippedCategoryNames,
+ $this->flippedNotifyTypes,
+ $byCategoryValue
+ );
$byTypeValue = [];
@@ -236,14 +257,24 @@ class SpecialDisplayNotificationsConfiguration extends UnlistedSpecialPage {
}
// No user-friendly label for rows yet
- $this->outputCheckMatrix( 'availability-by-type', 'echo-displaynotificationsconfiguration-available-notification-methods-by-type-legend', array_combine( $specialNotificationTypes, $specialNotificationTypes ), $this->flippedNotifyTypes, $byTypeValue );
+ $this->outputCheckMatrix(
+ 'availability-by-type',
+ 'echo-displaynotificationsconfiguration-available-notification-methods-by-type-legend',
+ array_combine( $specialNotificationTypes, $specialNotificationTypes ),
+ $this->flippedNotifyTypes,
+ $byTypeValue
+ );
}
/**
* Output which notification categories are turned on by default, for each notify type
*/
protected function outputEnabledDefault() {
- $this->getOutput()->addHTML( Html::element( 'h2', [ 'id' => 'mw-echo-displaynotificationsconfiguration-enabled-default' ], $this->msg( 'echo-displaynotificationsconfiguration-enabled-default-header' )->text() ) );
+ $this->getOutput()->addHTML( Html::element(
+ 'h2',
+ [ 'id' => 'mw-echo-displaynotificationsconfiguration-enabled-default' ],
+ $this->msg( 'echo-displaynotificationsconfiguration-enabled-default-header' )->text()
+ ) );
// In reality, anon users are not relevant to Echo, but this lets us easily query default options.
$anonUser = new User;
@@ -258,7 +289,13 @@ class SpecialDisplayNotificationsConfiguration extends UnlistedSpecialPage {
}
}
- $this->outputCheckMatrix( 'enabled-by-default-generic', 'echo-displaynotificationsconfiguration-enabled-default-existing-users-legend', $this->flippedCategoryNames, $this->flippedNotifyTypes, $byCategoryValueExisting );
+ $this->outputCheckMatrix(
+ 'enabled-by-default-generic',
+ 'echo-displaynotificationsconfiguration-enabled-default-existing-users-legend',
+ $this->flippedCategoryNames,
+ $this->flippedNotifyTypes,
+ $byCategoryValueExisting
+ );
$loggedInUser = new User;
// This might not catch if there are other hooks that do similar.
@@ -278,7 +315,13 @@ class SpecialDisplayNotificationsConfiguration extends UnlistedSpecialPage {
}
}
- $this->outputCheckMatrix( 'enabled-by-default-new', 'echo-displaynotificationsconfiguration-enabled-default-new-users-legend', $this->flippedCategoryNames, $this->flippedNotifyTypes, $byCategoryValueNew );
+ $this->outputCheckMatrix(
+ 'enabled-by-default-new',
+ 'echo-displaynotificationsconfiguration-enabled-default-new-users-legend',
+ $this->flippedCategoryNames,
+ $this->flippedNotifyTypes,
+ $byCategoryValueNew
+ );
}
/**
@@ -287,7 +330,11 @@ class SpecialDisplayNotificationsConfiguration extends UnlistedSpecialPage {
protected function outputMandatory() {
$byCategoryValue = [];
- $this->getOutput()->addHTML( Html::element( 'h2', [ 'id' => 'mw-echo-displaynotificationsconfiguration-mandatory-notification-methods' ], $this->msg( 'echo-displaynotificationsconfiguration-mandatory-notification-methods-header' )->text() ) );
+ $this->getOutput()->addHTML( Html::element(
+ 'h2',
+ [ 'id' => 'mw-echo-displaynotificationsconfiguration-mandatory-notification-methods' ],
+ $this->msg( 'echo-displaynotificationsconfiguration-mandatory-notification-methods-header' )->text()
+ ) );
foreach ( $this->notifyTypes as $notifyType => $displayNotifyType ) {
foreach ( $this->categoryNames as $category => $displayCategory ) {
@@ -297,6 +344,12 @@ class SpecialDisplayNotificationsConfiguration extends UnlistedSpecialPage {
}
}
- $this->outputCheckMatrix( 'mandatory', 'echo-displaynotificationsconfiguration-mandatory-notification-methods-by-category-legend', $this->flippedCategoryNames, $this->flippedNotifyTypes, $byCategoryValue );
+ $this->outputCheckMatrix(
+ 'mandatory',
+ 'echo-displaynotificationsconfiguration-mandatory-notification-methods-by-category-legend',
+ $this->flippedCategoryNames,
+ $this->flippedNotifyTypes,
+ $byCategoryValue
+ );
}
}
diff --git a/Echo/includes/special/SpecialNotifications.php b/Echo/includes/special/SpecialNotifications.php
index e6552ee8..aae26e4b 100644
--- a/Echo/includes/special/SpecialNotifications.php
+++ b/Echo/includes/special/SpecialNotifications.php
@@ -11,6 +11,10 @@ class SpecialNotifications extends SpecialPage {
parent::__construct( 'Notifications' );
}
+ /**
+ * @param string $par
+ * @suppress SecurityCheck-DoubleEscaped Different members of $notifArray being conflated
+ */
public function execute( $par ) {
$this->setHeaders();
@@ -124,7 +128,7 @@ class SpecialNotifications extends SpecialPage {
$markAllAsReadText = $this->msg( 'echo-mark-all-as-read' )->text();
$markAllAsReadLabelIcon = new EchoOOUI\LabelIconWidget( [
'label' => $markAllAsReadText,
- 'icon' => 'doubleCheck',
+ 'icon' => 'checkAll',
] );
$markAllAsReadForm = $markReadSpecialPage->getMinimalForm(
@@ -159,14 +163,14 @@ class SpecialNotifications extends SpecialPage {
$heading->appendContent( $dateTitle );
// Mark all read button
- if ( count( $data[ 'unread' ] ) > 0 ) {
+ if ( $data[ 'unread' ] !== [] ) {
// tell the UI to show 'unread' notifications only (instead of 'all')
$out->addJsConfigVars( 'wgEchoReadState', 'unread' );
$markReadSectionText = $this->msg( 'echo-specialpage-section-markread' )->text();
$markAsReadLabelIcon = new EchoOOUI\LabelIconWidget( [
'label' => $markReadSectionText,
- 'icon' => 'doubleCheck',
+ 'icon' => 'checkAll',
] );
// There are unread notices. Add the 'mark section as read' button
diff --git a/Echo/includes/special/SpecialNotificationsMarkRead.php b/Echo/includes/special/SpecialNotificationsMarkRead.php
index b69f6b02..1fb873a8 100644
--- a/Echo/includes/special/SpecialNotificationsMarkRead.php
+++ b/Echo/includes/special/SpecialNotificationsMarkRead.php
@@ -39,7 +39,7 @@ class SpecialNotificationsMarkRead extends FormSpecialPage {
/**
* Get an HTMLForm descriptor array
- * @return array
+ * @return array[]
*/
protected function getFormFields() {
return [
@@ -86,7 +86,7 @@ class SpecialNotificationsMarkRead extends FormSpecialPage {
$idValue = [ $idValue ];
}
- $idString = join( ',', $idValue );
+ $idString = implode( ',', $idValue );
$this->setParameter( $idString );
@@ -129,10 +129,9 @@ class SpecialNotificationsMarkRead extends FormSpecialPage {
/**
* Process the form on POST submission.
* @param array $data
- * @param HTMLForm $form
- * @return bool|string|array|Status As documented for HTMLForm::trySubmit.
+ * @return bool
*/
- public function onSubmit( array $data /* $form = null */ ) {
+ public function onSubmit( array $data ) {
$notifUser = MWEchoNotifUser::newFromUser( $this->getUser() );
// Allow for all IDs
diff --git a/Echo/maintenance/backfillReadBundles.php b/Echo/maintenance/backfillReadBundles.php
index db38ceeb..fa7067d6 100644
--- a/Echo/maintenance/backfillReadBundles.php
+++ b/Echo/maintenance/backfillReadBundles.php
@@ -20,7 +20,7 @@ class BackfillReadBundles extends Maintenance {
public function execute() {
$dbFactory = MWEchoDbFactory::newFromDefault();
$dbw = $dbFactory->getEchoDb( DB_MASTER );
- $dbr = $dbFactory->getEchoDb( DB_SLAVE );
+ $dbr = $dbFactory->getEchoDb( DB_REPLICA );
$iterator = new BatchRowIterator(
$dbr,
'echo_notification',
@@ -77,4 +77,4 @@ class BackfillReadBundles extends Maintenance {
}
$maintClass = "BackfillReadBundles";
-require_once DO_MAINTENANCE;
+require_once RUN_MAINTENANCE_IF_MAIN;
diff --git a/Echo/maintenance/backfillUnreadWikis.php b/Echo/maintenance/backfillUnreadWikis.php
index c89f24ea..432dc053 100644
--- a/Echo/maintenance/backfillUnreadWikis.php
+++ b/Echo/maintenance/backfillUnreadWikis.php
@@ -22,11 +22,15 @@ class BackfillUnreadWikis extends Maintenance {
$rebuild = $this->hasOption( 'rebuild' );
if ( $rebuild ) {
- $iterator = new BatchRowIterator( $dbFactory->getSharedDb( DB_SLAVE ), 'echo_unread_wikis', 'euw_user', $this->mBatchSize );
+ $iterator = new BatchRowIterator( $dbFactory->getSharedDb( DB_REPLICA ), 'echo_unread_wikis', 'euw_user', $this->mBatchSize );
$iterator->addConditions( [ 'euw_wiki' => wfWikiID() ] );
} else {
- $iterator = new BatchRowIterator( wfGetDB( DB_SLAVE ), 'user', 'user_id', $this->mBatchSize );
- $iterator->setFetchColumns( User::selectFields() );
+ $userQuery = User::getQueryInfo();
+ $iterator = new BatchRowIterator(
+ wfGetDB( DB_REPLICA ), $userQuery['tables'], 'user_id', $this->mBatchSize
+ );
+ $iterator->setFetchColumns( $userQuery['fields'] );
+ $iterator->addJoinConditions( $userQuery['joins'] );
}
$processed = 0;
@@ -44,11 +48,11 @@ class BackfillUnreadWikis extends Maintenance {
$notifUser = MWEchoNotifUser::newFromUser( $user );
$uw = EchoUnreadWikis::newFromUser( $user );
if ( $uw ) {
- $alertCount = $notifUser->getNotificationCount( true, DB_SLAVE, EchoAttributeManager::ALERT, false );
- $alertUnread = $notifUser->getLastUnreadNotificationTime( true, DB_SLAVE, EchoAttributeManager::ALERT, false );
+ $alertCount = $notifUser->getNotificationCount( EchoAttributeManager::ALERT, false );
+ $alertUnread = $notifUser->getLastUnreadNotificationTime( EchoAttributeManager::ALERT, false );
- $msgCount = $notifUser->getNotificationCount( true, DB_SLAVE, EchoAttributeManager::MESSAGE, false );
- $msgUnread = $notifUser->getLastUnreadNotificationTime( true, DB_SLAVE, EchoAttributeManager::MESSAGE, false );
+ $msgCount = $notifUser->getNotificationCount( EchoAttributeManager::MESSAGE, false );
+ $msgUnread = $notifUser->getLastUnreadNotificationTime( EchoAttributeManager::MESSAGE, false );
if ( ( $alertCount !== 0 && $alertUnread === false ) || ( $msgCount !== 0 && $msgUnread === false ) ) {
// If there are alerts, there should be an alert timestamp (same for messages).
@@ -70,4 +74,4 @@ class BackfillUnreadWikis extends Maintenance {
}
$maintClass = "BackfillUnreadWikis";
-require_once DO_MAINTENANCE;
+require_once RUN_MAINTENANCE_IF_MAIN;
diff --git a/Echo/maintenance/generateSampleNotifications.php b/Echo/maintenance/generateSampleNotifications.php
index ed6070c4..42081ca1 100644
--- a/Echo/maintenance/generateSampleNotifications.php
+++ b/Echo/maintenance/generateSampleNotifications.php
@@ -1,5 +1,9 @@
<?php
+// phpcs:disable Generic.Files.LineLength -- Long html test examples
+
+use Wikibase\Client\Hooks\EchoNotificationsHandlers;
+
$IP = getenv( 'MW_INSTALL_PATH' );
if ( $IP === false ) {
$IP = __DIR__ . '/../../..';
@@ -26,6 +30,8 @@ class GenerateSampleNotifications extends Maintenance {
'page-connection',
];
+ private $timestampCounter = 5;
+
public function __construct() {
parent::__construct();
$this->mDescription = "Generate sample notifications";
@@ -57,13 +63,16 @@ class GenerateSampleNotifications extends Maintenance {
true, true, 'o' );
$this->requireExtension( 'Echo' );
+
+ $this->addOption(
+ 'timestamp',
+ 'Add notification timestamps (Epoch time format). All notifications that are not ' .
+ 'related directly to edits will be created with a timestamp starting 5 minutes ' .
+ 'before the given timestamp, and increasing by 1 minute per notification.',
+ false, false, 'k' );
}
public function execute() {
- if ( !class_exists( 'EchoHooks' ) ) {
- $this->error( "Echo isn't enabled on this wiki\n", 1 );
- }
-
$user = $this->getOptionUser( 'user' );
$agent = $this->getOptionUser( 'agent' );
$otherUser = $this->getOptionUser( 'other' );
@@ -131,6 +140,35 @@ class GenerateSampleNotifications extends Maintenance {
$this->output( "Completed \n" );
}
+ /**
+ * Get the set timestamp of the event
+ *
+ * @param bool $getEpoch Get the epoch value
+ * @return int Timestamp for the operation
+ */
+ private function getTimestamp( $getEpoch = false ) {
+ $startTime = $this->getOption( 'timestamp' ) ?
+ $this->getOption( 'timestamp' ) : time();
+
+ // Incrementally decrease X minutes from start time
+ $timestamp = strtotime( '-' . $this->timestampCounter++ . ' minute', $startTime );
+
+ return $getEpoch ? $timestamp : wfTimestamp( TS_MW, $timestamp );
+ }
+
+ /**
+ * Add a timestamp string to the output, if a timestamp option was given,
+ * to note the time of the new generated event.
+ *
+ * @param string $output New output message with timestamp
+ */
+ private function addTimestampToOutput( $output ) {
+ if ( $this->getOption( 'timestamp' ) ) {
+ $output .= ' (Using timestamp: ' . date( 'Y-m-d H:i:s', $this->getTimestamp( true ) ) . ')';
+ }
+ return $output;
+ }
+
private function generateEditUserTalk( User $user, User $agent ) {
$this->output( "{$agent->getName()} is writing on {$user->getName()}'s user talk page\n" );
$editId = $this->generateRandomString();
@@ -262,12 +300,14 @@ class GenerateSampleNotifications extends Maintenance {
'agent' => $user,
'extra' => [
'notifyAgent' => true
- ]
+ ],
+ 'timestamp' => $this->getTimestamp(),
] );
}
private function generateEmail( User $user, User $agent ) {
- $this->output( "{$agent->getName()} is emailing {$user->getName()}\n" );
+ $output = $this->addTimestampToOutput( "{$agent->getName()} is emailing {$user->getName()}" );
+ $this->output( "$output\n" );
EchoEvent::create( [
'type' => 'emailuser',
'extra' => [
@@ -275,11 +315,13 @@ class GenerateSampleNotifications extends Maintenance {
'subject' => 'Long time no see',
],
'agent' => $agent,
+ 'timestamp' => $this->getTimestamp(),
] );
}
private function generateUserRights( User $user, User $agent ) {
- $this->output( "{$agent->getName()} is changing {$user->getName()}'s rights\n" );
+ $output = $this->addTimestampToOutput( "{$agent->getName()} is changing {$user->getName()}'s rights" );
+ $this->output( "$output\n" );
$this->createUserRightsNotification( $user, $agent, [ 'OnlyAdd-1' ], null );
$this->createUserRightsNotification( $user, $agent, null, [ 'JustRemove-1', 'JustRemove-2' ] );
$this->createUserRightsNotification( $user, $agent, [ 'Add-1', 'Add-2' ], [ 'Remove-1', 'Remove-2' ] );
@@ -293,15 +335,16 @@ class GenerateSampleNotifications extends Maintenance {
'user' => $user->getID(),
'add' => $add,
'remove' => $remove,
- 'reason' => 'This is the reason for changing your user rights.',
+ 'reason' => 'This is the [[reason]] for changing your user rights.',
],
'agent' => $agent,
+ 'timestamp' => $this->getTimestamp(),
]
);
}
private function generateContentTranslation( User $user ) {
- if ( !class_exists( 'ContentTranslationHooks' ) ) {
+ if ( !ExtensionRegistry::getInstance()->isLoaded( 'ContentTranslation' ) ) {
return;
}
@@ -313,6 +356,7 @@ class GenerateSampleNotifications extends Maintenance {
'extra' => [
'recipient' => $user->getId(),
],
+ 'timestamp' => $this->getTimestamp(),
]
);
}
@@ -324,6 +368,7 @@ class GenerateSampleNotifications extends Maintenance {
'recipient' => $user->getId(),
'lastTranslationTitle' => 'History of the People\'s Republic of China'
],
+ 'timestamp' => $this->getTimestamp(),
]
);
}
@@ -365,7 +410,8 @@ class GenerateSampleNotifications extends Maintenance {
'instanceName' => 'instance1',
'projectName' => 'TheProject',
'notifyAgent' => true,
- ]
+ ],
+ 'timestamp' => $this->getTimestamp(),
] );
}
@@ -374,6 +420,7 @@ class GenerateSampleNotifications extends Maintenance {
'title' => Title::newFromText( "Moai" ),
'agent' => $agent,
'extra' => [ 'userAdded' => $user->getId() ],
+ 'timestamp' => $this->getTimestamp(),
] );
}
@@ -387,7 +434,7 @@ class GenerateSampleNotifications extends Maintenance {
}
private function generateOneEditThanks( User $user, User $agent ) {
- if ( !class_exists( 'ThanksHooks' ) ) {
+ if ( !ExtensionRegistry::getInstance()->isLoaded( 'Thanks' ) ) {
return;
}
// make an edit, thank it once
@@ -402,11 +449,13 @@ class GenerateSampleNotifications extends Maintenance {
'source' => 'generateSampleNotifications.php',
],
'agent' => $agent,
+ 'timestamp' => $this->getTimestamp(),
] );
- $this->output( "{$agent->getName()} is thanking {$user->getName()} for edit {$revision->getId()} on {$title->getPrefixedText()}\n" );
+ $output = $this->addTimestampToOutput( "{$agent->getName()} is thanking {$user->getName()} for edit {$revision->getId()} on {$title->getPrefixedText()}" );
+ $this->output( "$output\n" );
}
private function generateMultipleEditThanks( User $user, User $agent, User $otherUser ) {
- if ( !class_exists( 'ThanksHooks' ) ) {
+ if ( !ExtensionRegistry::getInstance()->isLoaded( 'Thanks' ) ) {
return;
}
// make an edit, thank it twice
@@ -421,6 +470,7 @@ class GenerateSampleNotifications extends Maintenance {
'source' => 'generateSampleNotifications.php',
],
'agent' => $agent,
+ 'timestamp' => $this->getTimestamp(),
] );
EchoEvent::create( [
'type' => 'edit-thank',
@@ -431,8 +481,10 @@ class GenerateSampleNotifications extends Maintenance {
'source' => 'generateSampleNotifications.php',
],
'agent' => $otherUser,
+ 'timestamp' => $this->getTimestamp(),
] );
- $this->output( "{$agent->getName()} and {$otherUser->getName()} are thanking {$user->getName()} for edit {$revision->getId()} on {$title->getPrefixedText()}\n" );
+ $output = $this->addTimestampToOutput( "{$agent->getName()} and {$otherUser->getName()} are thanking {$user->getName()} for edit {$revision->getId()} on {$title->getPrefixedText()}" );
+ $this->output( "$output\n" );
}
private function generateEducationProgram( User $user, User $agent ) {
@@ -448,7 +500,8 @@ class GenerateSampleNotifications extends Maintenance {
$notificationManager = EducationProgram\Extension::globalInstance()->getNotificationsManager();
- $this->output( "{$agent->getName()} is adding {$user->getName()} to {$chem101->getPrefixedText()} as instructor, student, campus volunteer and online volunteer.\n" );
+ $output = $this->addTimestampToOutput( "{$agent->getName()} is adding {$user->getName()} to {$chem101->getPrefixedText()} as instructor, student, campus volunteer and online volunteer" );
+ $this->output( "$output\n" );
$types = [
'ep-instructor-add-notification',
@@ -472,8 +525,8 @@ class GenerateSampleNotifications extends Maintenance {
}
private function generateWikibase( User $user, User $agent ) {
- if ( !class_exists( 'Wikibase\Client\Hooks\EchoNotificationsHandlers' ) ) {
- $this->output( 'class Wikibase\Client\Hooks\EchoNotificationsHandlers not found' );
+ if ( !class_exists( EchoNotificationsHandlers::class ) ) {
+ $this->output( 'Class EchoNotificationsHandlers not found' );
return;
}
@@ -482,18 +535,20 @@ class GenerateSampleNotifications extends Maintenance {
$helpPage = Title::newFromText( 'Project:Wikidata' );
$this->addToPageContent( $helpPage, $user, "this is the help page" );
- $this->output( "{$agent->getName()} is connecting {$user->getName()}'s page {$title->getPrefixedText()} to an item\n" );
+ $output = $this->addTimestampToOutput( "{$agent->getName()} is connecting {$user->getName()}'s page {$title->getPrefixedText()} to an item" );
+ $this->output( "$output\n" );
EchoEvent::create( [
- 'type' => Wikibase\Client\Hooks\EchoNotificationsHandlers::NOTIFICATION_TYPE,
+ 'type' => EchoNotificationsHandlers::NOTIFICATION_TYPE,
'title' => $title,
'extra' => [
'url' => Title::newFromText( 'Item:Q1' )->getFullURL(),
'repoSiteName' => 'Wikidata'
],
'agent' => $agent,
+ 'timestamp' => $this->getTimestamp(),
] );
}
}
$maintClass = "GenerateSampleNotifications";
-require_once DO_MAINTENANCE;
+require_once RUN_MAINTENANCE_IF_MAIN;
diff --git a/Echo/maintenance/processEchoEmailBatch.php b/Echo/maintenance/processEchoEmailBatch.php
index 9ad95086..93b3e52a 100644
--- a/Echo/maintenance/processEchoEmailBatch.php
+++ b/Echo/maintenance/processEchoEmailBatch.php
@@ -32,10 +32,6 @@ class ProcessEchoEmailBatch extends Maintenance {
public function execute() {
global $wgEchoCluster;
- if ( !class_exists( 'EchoHooks' ) ) {
- $this->error( "Echo isn't enabled on this wiki\n", 1 );
- }
-
$ignoreConfiguredSchedule = $this->getOption( "ignoreConfiguredSchedule", 0 );
$this->output( "Started processing... \n" );
@@ -77,4 +73,4 @@ class ProcessEchoEmailBatch extends Maintenance {
}
$maintClass = "ProcessEchoEmailBatch";
-require_once DO_MAINTENANCE;
+require_once RUN_MAINTENANCE_IF_MAIN;
diff --git a/Echo/maintenance/removeInvalidNotification.php b/Echo/maintenance/removeInvalidNotification.php
index 58362b8b..04640f6c 100644
--- a/Echo/maintenance/removeInvalidNotification.php
+++ b/Echo/maintenance/removeInvalidNotification.php
@@ -33,7 +33,7 @@ class RemoveInvalidNotification extends Maintenance {
global $wgEchoCluster;
$dbw = MWEchoDbFactory::getDB( DB_MASTER );
- $dbr = MWEchoDbFactory::getDB( DB_SLAVE );
+ $dbr = MWEchoDbFactory::getDB( DB_REPLICA );
$count = $this->batchSize;
diff --git a/Echo/maintenance/removeOrphanedEvents.php b/Echo/maintenance/removeOrphanedEvents.php
index eb0cba23..585ddc27 100644
--- a/Echo/maintenance/removeOrphanedEvents.php
+++ b/Echo/maintenance/removeOrphanedEvents.php
@@ -32,7 +32,7 @@ class RemoveOrphanedEvents extends LoggedUpdateMaintenance {
public function doDBUpdates() {
$dbFactory = MWEchoDbFactory::newFromDefault();
$dbw = $dbFactory->getEchoDb( DB_MASTER );
- $dbr = $dbFactory->getEchoDb( DB_SLAVE );
+ $dbr = $dbFactory->getEchoDb( DB_REPLICA );
$iterator = new BatchRowIterator(
$dbr,
[ 'echo_event', 'echo_notification' ],
diff --git a/Echo/maintenance/testDiscussionParser.php b/Echo/maintenance/testDiscussionParser.php
index 4aef748e..0457b06f 100644
--- a/Echo/maintenance/testDiscussionParser.php
+++ b/Echo/maintenance/testDiscussionParser.php
@@ -41,7 +41,7 @@ class TestDiscussionParser extends Maintenance {
$pages = $data['query']['pages'];
foreach ( $pages as $page ) {
- if ( count( $page['revisions'] ) != 1 ) {
+ if ( count( $page['revisions'] ) !== 1 ) {
continue;
}
diff --git a/Echo/maintenance/updateEchoSchemaForSuppression.php b/Echo/maintenance/updateEchoSchemaForSuppression.php
index c6a6118c..dd8c966d 100644
--- a/Echo/maintenance/updateEchoSchemaForSuppression.php
+++ b/Echo/maintenance/updateEchoSchemaForSuppression.php
@@ -39,7 +39,7 @@ class UpdateEchoSchemaForSuppression extends LoggedUpdateMaintenance {
public function doDBUpdates() {
global $wgEchoCluster;
- $reader = new BatchRowIterator( MWEchoDbFactory::getDB( DB_SLAVE ), $this->table, $this->idField, $this->mBatchSize );
+ $reader = new BatchRowIterator( MWEchoDbFactory::getDB( DB_REPLICA ), $this->table, $this->idField, $this->mBatchSize );
$reader->addConditions( [
"event_page_title IS NOT NULL",
"event_page_id" => null,
diff --git a/Echo/maintenance/updatePerUserBlacklist.php b/Echo/maintenance/updatePerUserBlacklist.php
new file mode 100644
index 00000000..1ed9ac79
--- /dev/null
+++ b/Echo/maintenance/updatePerUserBlacklist.php
@@ -0,0 +1,93 @@
+<?php
+/**
+ * Update the Per User Blocklist from Usernames to User Ids.
+ *
+ * @ingroup Maintenance
+ */
+require_once getenv( 'MW_INSTALL_PATH' ) !== false
+ ? getenv( 'MW_INSTALL_PATH' ) . '/maintenance/Maintenance.php'
+ : __DIR__ . '/../../../maintenance/Maintenance.php';
+
+/**
+ * Maintenance script that changes the usernames to ids.
+ *
+ * @ingroup Maintenance
+ */
+class EchoUpdatePerUserBlacklist extends LoggedUpdateMaintenance {
+
+ public function __construct() {
+ parent::__construct();
+
+ $this->addDescription( 'Update echo-notifications-blacklist User Preference from Usernames to Ids' );
+ $this->setBatchSize( 100 );
+ $this->requireExtension( 'Echo' );
+ }
+
+ public function getUpdateKey() {
+ return __CLASS__;
+ }
+
+ public function doDBUpdates() {
+ $dbw = wfGetDB( DB_MASTER );
+ $dbr = wfGetDB( DB_REPLICA );
+ $iterator = new BatchRowIterator(
+ $dbr,
+ 'user_properties',
+ [ 'up_user', 'up_property' ],
+ $this->mBatchSize
+ );
+ $iterator->setFetchColumns( [
+ 'up_user',
+ 'up_value'
+ ] );
+ $iterator->addConditions( [
+ 'up_property' => 'echo-notifications-blacklist'
+ ] );
+
+ $this->output( "Updating Echo Notification Blacklist...\n" );
+
+ $lookup = CentralIdLookup::factory();
+ $processed = 0;
+ foreach ( $iterator as $batch ) {
+ foreach ( $batch as $row ) {
+ if ( !$row->up_value ) {
+ continue;
+ }
+
+ $value = explode( "\n", $row->up_value );
+ $names = array_filter( $value, function ( $item ) {
+ return !is_numeric( $item );
+ } );
+
+ // If all of the values are numeric then the user has already been
+ // converted.
+ if ( !$names ) {
+ continue;
+ }
+
+ $user = User::newFromId( $row->up_user );
+ $ids = $lookup->centralIdsFromNames( $names, $user );
+
+ $dbw->update(
+ 'user_properties',
+ [
+ 'up_value' => implode( "\n", $ids ),
+ ],
+ [
+ 'up_user' => $row->up_user,
+ 'up_property' => 'echo-notifications-blacklist',
+ ]
+ );
+ $processed += $dbw->affectedRows();
+ wfWaitForSlaves();
+ }
+
+ $this->output( "Updated $processed Users\n" );
+ }
+
+ return true;
+ }
+}
+
+$maintClass = 'EchoUpdatePerUserBlacklist';
+require_once RUN_MAINTENANCE_IF_MAIN;
diff --git a/Echo/modules/api/mw.echo.api.APIHandler.js b/Echo/modules/api/mw.echo.api.APIHandler.js
index ad45ceaf..06760ae2 100644
--- a/Echo/modules/api/mw.echo.api.APIHandler.js
+++ b/Echo/modules/api/mw.echo.api.APIHandler.js
@@ -182,6 +182,7 @@
/**
* Mark all notifications as read
*
+ * @param {string} source Wiki name
* @param {string|string[]} type Notification type 'message', 'alert' or 'all'.
* @return {jQuery.Promise} A promise that resolves when all notifications
* are marked as read.
@@ -192,6 +193,7 @@
* Mark multiple notification items as read using specific IDs
*
* @abstract
+ * @param {string} source Wiki name
* @param {string[]} itemIdArray An array of notification item IDs
* @param {boolean} [isRead] Item's new read state; true for marking the item
* as read, false for marking the item as unread
diff --git a/Echo/modules/api/mw.echo.api.EchoApi.js b/Echo/modules/api/mw.echo.api.EchoApi.js
index 44992183..80163d22 100644
--- a/Echo/modules/api/mw.echo.api.EchoApi.js
+++ b/Echo/modules/api/mw.echo.api.EchoApi.js
@@ -239,7 +239,8 @@
* for that type in the given source
*/
mw.echo.api.EchoApi.prototype.markItemsRead = function ( itemIds, source, isRead ) {
- return this.network.getApiHandler( source ).markItemsRead( itemIds, isRead );
+ // markasread is proxied via the local API
+ return this.network.getApiHandler( 'local' ).markItemsRead( source, itemIds, isRead );
};
/**
@@ -252,7 +253,8 @@
* for that type in the given source
*/
mw.echo.api.EchoApi.prototype.markAllRead = function ( source, type ) {
- return this.network.getApiHandler( source ).markAllRead( type );
+ // markasread is proxied via the local API
+ return this.network.getApiHandler( 'local' ).markAllRead( source, type );
};
/**
diff --git a/Echo/modules/api/mw.echo.api.ForeignAPIHandler.js b/Echo/modules/api/mw.echo.api.ForeignAPIHandler.js
index f80ea803..b1da5e82 100644
--- a/Echo/modules/api/mw.echo.api.ForeignAPIHandler.js
+++ b/Echo/modules/api/mw.echo.api.ForeignAPIHandler.js
@@ -16,7 +16,7 @@
config = config || {};
// Parent constructor
- mw.echo.api.ForeignAPIHandler.parent.call( this, config );
+ mw.echo.api.ForeignAPIHandler.super.call( this, config );
this.api = new mw.ForeignApi( apiUrl );
this.unreadOnly = config.unreadOnly !== undefined ? !!config.unreadOnly : false;
diff --git a/Echo/modules/api/mw.echo.api.LocalAPIHandler.js b/Echo/modules/api/mw.echo.api.LocalAPIHandler.js
index a33091ac..da86b1fe 100644
--- a/Echo/modules/api/mw.echo.api.LocalAPIHandler.js
+++ b/Echo/modules/api/mw.echo.api.LocalAPIHandler.js
@@ -9,10 +9,8 @@
* @param {Object} [config] Configuration object
*/
mw.echo.api.LocalAPIHandler = function MwEchoApiLocalAPIHandler( config ) {
- config = config || {};
-
// Parent constructor
- mw.echo.api.LocalAPIHandler.parent.call( this,
+ mw.echo.api.LocalAPIHandler.super.call( this,
new mw.Api( { ajax: { cache: false } } ),
config
);
@@ -55,13 +53,18 @@
/**
* @inheritdoc
*/
- mw.echo.api.LocalAPIHandler.prototype.markAllRead = function ( type ) {
+ mw.echo.api.LocalAPIHandler.prototype.markAllRead = function ( source, type ) {
+ var data;
type = Array.isArray( type ) ? type : [ type ];
-
- return this.api.postWithToken( 'csrf', {
+ data = {
action: 'echomarkread',
sections: type.join( '|' )
- } )
+ };
+ if ( !this.isSourceLocal( source ) ) {
+ data.wikis = source;
+ }
+
+ return this.api.postWithToken( 'csrf', data )
.then( function ( result ) {
return OO.getProp( result.query, 'echomarkread', type, 'rawcount' ) || 0;
} );
@@ -70,11 +73,15 @@
/**
* @inheritdoc
*/
- mw.echo.api.LocalAPIHandler.prototype.markItemsRead = function ( itemIdArray, isRead ) {
+ mw.echo.api.LocalAPIHandler.prototype.markItemsRead = function ( source, itemIdArray, isRead ) {
var data = {
action: 'echomarkread'
};
+ if ( !this.isSourceLocal( source ) ) {
+ data.wikis = source;
+ }
+
if ( isRead ) {
data.list = itemIdArray.join( '|' );
} else {
diff --git a/Echo/modules/controller/mw.echo.Controller.js b/Echo/modules/controller/mw.echo.Controller.js
index 52c095c1..5f857edb 100644
--- a/Echo/modules/controller/mw.echo.Controller.js
+++ b/Echo/modules/controller/mw.echo.Controller.js
@@ -482,11 +482,13 @@
localCounter.estimateChange( -itemIds.length );
return this.api.markAllRead(
- source,
- this.getTypes()
- )
- .then( this.refreshUnreadCount.bind( this ) )
- .then( localCounter.update.bind( localCounter, true ) );
+ source,
+ this.getTypes()
+ ).then(
+ this.refreshUnreadCount.bind( this )
+ ).then(
+ localCounter.update.bind( localCounter, true )
+ );
};
/**
@@ -715,8 +717,9 @@
// Synchronously remove this model from the widget
controller.removeCrossWikiItem();
- return mw.echo.api.NetworkHandler.static.waitForAllPromises( promises )
- .then( controller.refreshUnreadCount.bind( controller ) );
+ return mw.echo.api.NetworkHandler.static.waitForAllPromises( promises ).then(
+ controller.refreshUnreadCount.bind( controller )
+ );
} );
};
diff --git a/Echo/modules/echo.variables.less b/Echo/modules/echo.variables.less
index 1f22a160..a13776a4 100644
--- a/Echo/modules/echo.variables.less
+++ b/Echo/modules/echo.variables.less
@@ -24,6 +24,8 @@
@badge-distance-adjustment: 1em;
@badge-offscreen-offset: 1000px;
+@notification-item-background-read: #eaecf0;
+
@notification-background-unseen: #dce8ff;
@notification-background-unread: @background-color-base;
@notification-background-read: #eaecf0;
@@ -38,7 +40,7 @@
@bundle-group-padding: 0.7em;
@notification-popup-width: 500px;
-@opacity-low: 0.5;
+@opacity-low: 0.6;
@opacity-mid: 0.8;
@specialpage-separation-unit: 0.7em;
diff --git a/Echo/modules/ext.echo.init.js b/Echo/modules/ext.echo.init.js
index b5e09628..76eeda1c 100644
--- a/Echo/modules/ext.echo.init.js
+++ b/Echo/modules/ext.echo.init.js
@@ -5,6 +5,7 @@
var uri = new mw.Uri();
if ( uri.query.markasread !== undefined ) {
delete uri.query.markasread;
+ delete uri.query.markasreadwiki;
window.history.replaceState( null, document.title, uri );
}
@@ -26,8 +27,9 @@
hasUnseenMessages = $existingMessageLink.hasClass( 'mw-echo-unseen-notifications' ),
// Store links
links = {
- notifications: $( '#pt-notifications-alert a' ).attr( 'href' ),
- preferences: $( '#pt-preferences a' ).attr( 'href' ) + '#mw-prefsection-echo'
+ notifications: $( '#pt-notifications-alert a' ).attr( 'href' ) || mw.util.getUrl( 'Special:Notifications' ),
+ preferences: ( $( '#pt-preferences a' ).attr( 'href' ) || mw.util.getUrl( 'Special:Preferences' ) ) +
+ '#mw-prefsection-echo'
};
// Respond to click on the notification button and load the UI on demand
@@ -35,10 +37,12 @@
var time = mw.now(),
myType = $( this ).parent().prop( 'id' ) === 'pt-notifications-alert' ? 'alert' : 'message';
- if ( e.which !== 1 ) {
- return;
+ if ( e.which !== 1 || $( this ).data( 'clicked' ) ) {
+ return false;
}
+ $( this ).data( 'clicked', true );
+
// Dim the button while we load
$( this ).addClass( 'mw-echo-notifications-badge-dimmed' );
@@ -71,13 +75,13 @@
mw.echo.ui.messageWidget = new mw.echo.ui.NotificationBadgeWidget(
messageController,
messageModelManager,
+ links,
{
$overlay: mw.echo.ui.$overlay,
numItems: Number( numMessages ),
hasUnseen: hasUnseenMessages,
badgeIcon: 'tray',
convertedNumber: badgeLabelMessages,
- links: links,
href: $existingMessageLink.attr( 'href' )
}
);
@@ -91,12 +95,12 @@
mw.echo.ui.alertWidget = new mw.echo.ui.NotificationBadgeWidget(
alertController,
alertModelManager,
+ links,
{
numItems: Number( numAlerts ),
convertedNumber: badgeLabelAlerts,
hasUnseen: hasUnseenAlerts,
badgeIcon: 'bell',
- links: links,
$overlay: mw.echo.ui.$overlay,
href: $existingAlertLink.attr( 'href' )
}
diff --git a/Echo/modules/icons/articleCheck-progressive.svg b/Echo/modules/icons/articleCheck-progressive.svg
new file mode 100644
index 00000000..7fecf3f3
--- /dev/null
+++ b/Echo/modules/icons/articleCheck-progressive.svg
@@ -0,0 +1,7 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 20 20">
+ <title>
+ article check
+ </title>
+ <path fill="#36c" d="M9 17l-4.59-4.59L5.83 11 9 14.17l8-8V3a2 2 0 0 0-2-2H5a2 2 0 0 0-2 2v14a2 2 0 0 0 2 2h10a2 2 0 0 0 2-2V9z"/>
+</svg>
diff --git a/Echo/modules/icons/badgeicons.json b/Echo/modules/icons/badgeicons.json
index 1593a5ce..135261be 100644
--- a/Echo/modules/icons/badgeicons.json
+++ b/Echo/modules/icons/badgeicons.json
@@ -10,10 +10,6 @@
},
"tray": {
"file": "icons/tray.svg"
- },
- "doubleCheck": {
- "file": "icons/double-check.svg",
- "variants": [ "invert" ]
}
}
}
diff --git a/Echo/modules/icons/bell.svg b/Echo/modules/icons/bell.svg
index 787ed141..bab71465 100644
--- a/Echo/modules/icons/bell.svg
+++ b/Echo/modules/icons/bell.svg
@@ -1,4 +1,7 @@
-<?xml version="1.0" encoding="utf-8"?>
-<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24">
- <path d="M17.5 14V9c0-3-2.3-5-5.5-5S6.5 6 6.5 9v5c0 2 0 3-2 3v1h15v-1c-2 0-2-1-2-3zM12 20H9c0 1 1.6 2 3 2s3-1 3-2h-3z"/>
+<?xml version="1.0" encoding="UTF-8"?>
+<svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 20 20">
+ <title>
+ bell
+ </title>
+ <path d="M16 7a5.38 5.38 0 0 0-4.46-4.85C11.6 1.46 11.53 0 10 0S8.4 1.46 8.46 2.15A5.38 5.38 0 0 0 4 7v6l-2 2v1h16v-1l-2-2zm-6 13a3 3 0 0 0 3-3H7a3 3 0 0 0 3 3z"/>
</svg>
diff --git a/Echo/modules/icons/bellOn-ltr.svg b/Echo/modules/icons/bellOn-ltr.svg
deleted file mode 100644
index f68a8e0e..00000000
--- a/Echo/modules/icons/bellOn-ltr.svg
+++ /dev/null
@@ -1,4 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24">
- <path d="M17.8 14.7l1.7-4.7c1-2.8-.5-5.5-3.5-6.6s-5.9 0-6.9 2.8l-1.7 4.7c-.7 1.9-1 2.8-2.9 2.1l-.3 1 14.1 5.1.3-.9c-1.9-.7-1.5-1.6-.8-3.5zM12 19.8l-2.8-1c-.3.9.8 2.4 2.1 2.9s3.2.1 3.5-.9l-2.8-1z"/>
-</svg>
diff --git a/Echo/modules/icons/bellOn-rtl.svg b/Echo/modules/icons/bellOn-rtl.svg
deleted file mode 100644
index 92bcef54..00000000
--- a/Echo/modules/icons/bellOn-rtl.svg
+++ /dev/null
@@ -1,4 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24">
- <path d="M6.21 14.7L4.51 10c-1-2.8.5-5.5 3.5-6.6 3-1.1 5.9 0 6.9 2.8l1.7 4.7c.7 1.9 1 2.8 2.9 2.1l.3 1-14.1 5.1-.3-.9c1.9-.7 1.5-1.6.8-3.5zm5.8 5.1l2.8-1c.3.9-.8 2.4-2.1 2.9s-3.2.1-3.5-.9l2.8-1z"/>
-</svg>
diff --git a/Echo/modules/icons/changes.svg b/Echo/modules/icons/changes.svg
index efe65282..d90876f7 100644
--- a/Echo/modules/icons/changes.svg
+++ b/Echo/modules/icons/changes.svg
@@ -1,4 +1,8 @@
-<?xml version="1.0" encoding="utf-8"?>
-<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24">
- <path d="M1.6 4h18.72v2H3.68v12H1.6V4zm20.8 2.998V20H4.72V6.998H22.4z"/>
+<?xml version="1.0" encoding="UTF-8"?>
+<svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 20 20">
+ <title>
+ changes
+ </title>
+ <path d="M16 0H5v2h11v14h2V2a2 2 0 0 0-2-2"/>
+ <path d="M13 9.41l-.98.99L9.6 7.98l.99-.98a.51.51 0 0 1 .72 0L13 8.7a.51.51 0 0 1 0 .72M6.41 16H4v-2.42l5.06-5.06 2.42 2.42zM13 3H4a2 2 0 0 0-2 2v13a2 2 0 0 0 2 2h9a2 2 0 0 0 2-2V5a2 2 0 0 0-2-2"/>
</svg>
diff --git a/Echo/modules/icons/chat.svg b/Echo/modules/icons/chat.svg
deleted file mode 100644
index 61b69b2f..00000000
--- a/Echo/modules/icons/chat.svg
+++ /dev/null
@@ -1,4 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<svg width="30" height="30" viewBox="0 0 30 30" xmlns="http://www.w3.org/2000/svg">
- <path fill="#36c" d="M27.143 11.143V24L30 26.857H10V11.143h17.143zM2.857 4H20v5.714H8.57v10H0l2.857-2.857V4z" fill-rule="evenodd"/>
-</svg>
diff --git a/Echo/modules/icons/double-check.svg b/Echo/modules/icons/double-check.svg
deleted file mode 100644
index 4dd298d2..00000000
--- a/Echo/modules/icons/double-check.svg
+++ /dev/null
@@ -1,5 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24">
- <path d="M17 9.5L9.5 17 6 13.5 4.5 15l5 5L20 9.5c-.706-.706-2.294-.706-3 0z"/>
- <path d="M17 4.5L9.5 12 6 8.5 4.5 10l5 5L20 4.5c-.706-.706-2.294-.706-3 0z"/>
-</svg>
diff --git a/Echo/modules/icons/edit-progressive.svg b/Echo/modules/icons/edit-progressive.svg
new file mode 100644
index 00000000..8d30517b
--- /dev/null
+++ b/Echo/modules/icons/edit-progressive.svg
@@ -0,0 +1,7 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 20 20">
+ <title>
+ edit
+ </title>
+ <path fill="#36c" d="M16.77 8l1.94-2a1 1 0 0 0 0-1.41l-3.34-3.3a1 1 0 0 0-1.41 0L12 3.23zm-5.81-3.71L1 14.25V19h4.75l9.96-9.96-4.75-4.75z"/>
+</svg>
diff --git a/Echo/modules/icons/edit-user-talk-progressive.svg b/Echo/modules/icons/edit-user-talk-progressive.svg
new file mode 100644
index 00000000..eaa03de2
--- /dev/null
+++ b/Echo/modules/icons/edit-user-talk-progressive.svg
@@ -0,0 +1,10 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 20 20">
+ <title>
+ edit user talk
+ </title>
+ <g fill="#36c">
+ <path d="M18 4h-1v7a2 2 0 0 1-2 2H4v1c0 1.1.9 2 2 2h10l4 4V6a2 2 0 0 0-2-2"/>
+ <path d="M13 10H5v-.44c0-.9 1.37-2.45 4-2.45s4 1.56 4 2.45zM9 2a2.22 2.22 0 1 1 0 4.44A2.22 2.22 0 0 1 9 2m5-2H2a2 2 0 0 0-2 2v14l4-4h10a2 2 0 0 0 2-2V2a2 2 0 0 0-2-2"/>
+ </g>
+</svg>
diff --git a/Echo/modules/icons/edit-user-talk.svg b/Echo/modules/icons/edit-user-talk.svg
deleted file mode 100644
index c78c9c10..00000000
--- a/Echo/modules/icons/edit-user-talk.svg
+++ /dev/null
@@ -1,4 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<svg width="30" height="30" viewBox="0 0 30 30" xmlns="http://www.w3.org/2000/svg">
- <path fill="#36c" d="M27.143 10.143V23L30 25.857H10V10.143h17.143zM2.857 3H20v5.714H8.57v10H0l2.857-2.857V3zm18.007 17.636c-.49-.163-.49-.6-.546-1.09v-.055c.764-.65 1.364-1.74 1.364-2.94 0-2.564-1.09-3.546-2.727-3.546-1.146 0-2.728.656-2.728 3.546 0 1.145.6 2.236 1.364 2.945v.055c0 .49-.05.927-.54 1.09 0 0-1.58.6-2.18.82-.71.217-1.366.544-1.366 1.362v.546h10.91v-.546c0-.654-.436-1.09-1.364-1.363-.655-.22-2.18-.82-2.18-.82z" fill-rule="evenodd"/>
-</svg>
diff --git a/Echo/modules/icons/emailuser.svg b/Echo/modules/icons/emailuser.svg
deleted file mode 100644
index 03e6ad84..00000000
--- a/Echo/modules/icons/emailuser.svg
+++ /dev/null
@@ -1,4 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<svg width="30" height="30" viewBox="0 0 30 30" xmlns="http://www.w3.org/2000/svg">
- <path fill="#00af89" d="M15.05 14.6L27 8.95V6H3v2.925L15.05 14.6zm.025 3.3L3 12.25V24h24V12.25L15.075 17.9z" fill-rule="evenodd"/>
-</svg>
diff --git a/Echo/modules/icons/feedback-progressive.svg b/Echo/modules/icons/feedback-progressive.svg
new file mode 100644
index 00000000..fd0b90f1
--- /dev/null
+++ b/Echo/modules/icons/feedback-progressive.svg
@@ -0,0 +1,10 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 20 20">
+ <title>
+ feedback
+ </title>
+ <g fill="#36c">
+ <path d="M19 16L2 12a3.83 3.83 0 0 1-1-2.5A3.83 3.83 0 0 1 2 7l17-4z"/>
+ <rect width="4" height="8" x="4" y="9" rx="2" ry="2"/>
+ </g>
+</svg>
diff --git a/Echo/modules/icons/feedback.svg b/Echo/modules/icons/feedback.svg
deleted file mode 100644
index c0aad33e..00000000
--- a/Echo/modules/icons/feedback.svg
+++ /dev/null
@@ -1,4 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<svg xmlns="http://www.w3.org/2000/svg" width="30" height="30" viewBox="0 0 30 30">
- <path fill="#36c" d="M8.354 21.387l.993 3.567c.347 1.297 1.854 2.071 3.15 1.724 1.221-.327 1.969-1.669 1.621-2.965l-.666-2.327H29L24.15 3 1.27 15.987c-.746 1.293.155 4.664 1.442 5.4h5.642z"/>
-</svg>
diff --git a/Echo/modules/icons/generic.svg b/Echo/modules/icons/generic.svg
deleted file mode 100644
index e9c1b736..00000000
--- a/Echo/modules/icons/generic.svg
+++ /dev/null
@@ -1,7 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<svg xmlns="http://www.w3.org/2000/svg" width="30" height="30" viewBox="0 0 30 30">
- <g fill="#54595d">
- <path d="M15.5 1C9.713 1 5 5.71 5 11.5 5 17.285 9.713 22 15.5 22S26 17.285 26 11.5C26 5.71 21.287 1 15.5 1zm0 2c4.706 0 8.5 3.793 8.5 8.5 0 4.705-3.794 8.5-8.5 8.5A8.485 8.485 0 0 1 7 11.5C7 6.792 10.794 3 15.5 3z"/>
- <path d="M14.463 15.07h1.947v1.723h-1.947V15.07zm0-8.403h1.947v4.442l-.192 2.42h-1.554l-.2-2.42V6.666z"/>
- </g>
-</svg>
diff --git a/Echo/modules/icons/global-progressive.svg b/Echo/modules/icons/global-progressive.svg
new file mode 100644
index 00000000..5619ee3c
--- /dev/null
+++ b/Echo/modules/icons/global-progressive.svg
@@ -0,0 +1,7 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 20 20">
+ <title>
+ global
+ </title>
+ <path fill="#36c" d="M12.2 17.94c1.26-2 2-4.45 2.14-7.06h3.86a8.26 8.26 0 0 1-6 7.06M1.8 10.88h3.86c.14 2.6.88 5.06 2.14 7.06a8.26 8.26 0 0 1-6-7.06m6-8.82c-1.26 2-2 4.45-2.14 7.07H1.8a8.26 8.26 0 0 1 6-7.07m4.79 8.82A12.5 12.5 0 0 1 10 18a12.51 12.51 0 0 1-2.59-7.13zM7.4 9.13A12.51 12.51 0 0 1 10 1.99a12.5 12.5 0 0 1 2.59 7.14zm10.8 0h-3.87a14.79 14.79 0 0 0-2.14-7.07 8.26 8.26 0 0 1 6 7.07M10 0a10 10 0 1 0 0 20 10 10 0 0 0 0-20"/>
+</svg>
diff --git a/Echo/modules/icons/global.svg b/Echo/modules/icons/global.svg
deleted file mode 100644
index 5038a09c..00000000
--- a/Echo/modules/icons/global.svg
+++ /dev/null
@@ -1,4 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<svg width="30" height="30" viewBox="0 0 30 30" xmlns="http://www.w3.org/2000/svg">
- <path fill="#36c" d="M15 30C6.716 30 0 23.284 0 15 0 6.716 6.716 0 15 0c8.284 0 15 6.716 15 15 0 8.284-6.716 15-15 15zm.047-25.838c-1.188.034-3.375.315-3.375.315s.36.686.36.99c0 .304-.09 1.12-.09 1.485 0 .364 1.332.076 1.575-.045.243-.122 1.845-1.53 1.845-1.53s.587-.882.405-1.125c-.046-.06-.324-.1-.72-.09zM8.612 5.197c.086.945 1.215 1.575 1.215 1.575l.18-.63s-.966-.945-1.395-.945zm-1.125.63s-.585.5-1.53.585c-.355.032-1.073-.104-1.845-.225-1.71 1.972-2.873 4.41-3.285 7.11l.315-.45s1.108 1.988 1.71 2.16c.6.172 1.284.78 1.8 1.125.515.344.85 2.12.765 3.15-.086 1.03.695 1.158 1.125 1.845.43.687 1.366 4.79 1.71 5.22.343.43.683-1.804.855-2.835.172-1.03 2.43-2.93 2.43-3.96 0-1.03-2.59-2.5-3.105-3.015-.516-.516-2.128-.765-3.33-.765-1.203 0-1.22-1.624-2.25-1.71-1.03-.086.18-1.44.18-1.44s2.818-.45 3.42-.45c.6 0 .777-1.702 1.035-2.475.257-.773 2.168-.7 2.34-1.215.172-.516-.782-1.035-1.125-1.035-.344 0-1.813.524-2.07.18-.258-.344 1.485-1.395 1.485-1.395l-.63-.405zm13.05 0c-.284.022-.54.074-.63.135-.182.12-.673.31-.855.585-.182.273-.393.898-.18 1.08.212.182.373.226.495.135.12-.09 1.048-.887 1.17-.765.12.12.407.855.225.855-.182 0-1.485.405-1.485.405s-.005-.247-.09-.225c-.086.02-.005.338-.09.36-.086.02-1.215.54-1.215.54s-.143.127-.315.27l-.36.36c-.01.01-.04.036-.045.045-.086.15-.562.863-.54 1.035.02.172-.1.54.135.54.236 0 1.827-.982 1.935-.81.107.17.27.18.27.18s-.108-.225 0-.225c.107 0 .81.27.81.27s-.106-.448.045-.405c.15.043.84.855.99.855.15 0 .516-.01.495-.225-.022-.215-.1-.482.18-.675.28-.194 1.133-.333 1.305-.225.17.107.437.23.18.36-.258.13-.57-.02-.72.045-.15.064-.564.48-.585.63-.022.15.808.814.765.9-.043.086-.47.495-.9.495-.43 0-3.578-.787-4.05-.765-.473.02-.887.143-1.08.315-.194.17-1.018.933-1.125 1.17-.108.236-.573 1.378-.315 1.98.257.6.84 1.692 1.485 1.8.644.107 1.426.154 1.62.09.193-.065 1.238 1.095 1.26 1.89.02.794-.057 2.79.18 3.285.236.494.418 1.414 1.17 1.35.75-.065 1.362-.242 1.62-.585.257-.344.976-2.096 1.17-3.105.193-1.01 1.086-2.526 1.215-3.105.13-.58.146-.91-.09-1.08-.237-.172-.7-.167-.72-.36-.022-.194.3-.022.495 0 .193.02.908-.032 1.08-.225.17-.194.467-.823.36-1.08-.108-.258-.585-.81-.585-.81s1.926.232 2.7.855c.45.362.812.83 1.08 1.215-.067-3.546-1.433-6.775-3.645-9.225-.02.002-.078.045-.09.045-.334 0-2.925.495-2.925.495s-.565-.645-.99-.675c-.213-.016-.526-.023-.81 0zm-3.285 1.89s-.306 1.245.135 1.215c.44-.03-.135-1.215-.135-1.215zm-.585.54s-.527.268-.405.405c.12.137.374.21.45.09.076-.122-.045-.495-.045-.495zm8.235 11.655c-.175.038-.38.178-.495.315-.114.137-.286.62-.225.9.06.28.314.66.405.63.09-.03.33-.12.36-.63.03-.51.113-.966.045-1.08-.07-.114-.09-.135-.09-.135z" fill-rule="evenodd"/>
-</svg>
diff --git a/Echo/modules/icons/help.svg b/Echo/modules/icons/help.svg
index fcbefd12..94820366 100644
--- a/Echo/modules/icons/help.svg
+++ b/Echo/modules/icons/help.svg
@@ -1,10 +1,7 @@
-<?xml version="1.0" encoding="utf-8"?>
-<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24">
- <g>
- <path d="M12.001 2.085c-5.478 0-9.916 4.438-9.916 9.916 0 5.476 4.438 9.914 9.916 9.914 5.476 0 9.914-4.438 9.914-9.914 0-5.478-4.438-9.916-9.914-9.916zm.001 18c-4.465 0-8.084-3.619-8.084-8.083 0-4.465 3.619-8.084 8.084-8.084 4.464 0 8.083 3.619 8.083 8.084 0 4.464-3.619 8.083-8.083 8.083z"/>
- <g>
- <path d="M11.766 6.688c-2.5 0-3.219 2.188-3.219 2.188l1.411.854s.298-.791.901-1.229c.516-.375 1.625-.625 2.219.125.701.885-.17 1.587-1.078 2.719-.953 1.186-1 3.655-1 3.655h1.969s.135-2.318 1.041-3.381c.603-.707 1.443-1.338 1.443-2.494s-1.187-2.437-3.687-2.437z"/>
- <path d="M11 16h2v2h-2z"/>
- </g>
- </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">
+ <title>
+ help
+ </title>
+ <path d="M10 0a10 10 0 1 0 10 10A10 10 0 0 0 10 0zm1 16H9v-2h2zm2.71-7.6a2.63 2.63 0 0 1-.34.74 3.06 3.06 0 0 1-.48.55l-.54.48c-.21.18-.41.35-.59.52a3 3 0 0 0-.47.56A2.49 2.49 0 0 0 11 12a4.12 4.12 0 0 0-.11 1H9.08a8.68 8.68 0 0 1 .08-1.25 3.54 3.54 0 0 1 .24-.9 2.81 2.81 0 0 1 .41-.68 4.63 4.63 0 0 1 .58-.58l.51-.44a3 3 0 0 0 .44-.45 1.92 1.92 0 0 0 .3-.54 2.13 2.13 0 0 0 .11-.72 1.94 1.94 0 0 0-.18-.86 1.79 1.79 0 0 0-.43-.58 1.69 1.69 0 0 0-.54-.32 1.55 1.55 0 0 0-.5-.1 1.77 1.77 0 0 0-1.53.68 3 3 0 0 0-.49 1.82H6.16a4.84 4.84 0 0 1 .28-1.68 3.57 3.57 0 0 1 .8-1.29 3.62 3.62 0 0 1 1.27-.83A4.52 4.52 0 0 1 10.18 4a4.42 4.42 0 0 1 1.43.23 3.48 3.48 0 0 1 1.16.65 3 3 0 0 1 .78 1.06 3.49 3.49 0 0 1 .28 1.44 3.63 3.63 0 0 1-.12 1.02z"/>
</svg>
diff --git a/Echo/modules/icons/link-blue.svg b/Echo/modules/icons/link-blue.svg
deleted file mode 100644
index 6a37deb9..00000000
--- a/Echo/modules/icons/link-blue.svg
+++ /dev/null
@@ -1,7 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 30 30" width="30" height="30">
- <g fill="#36c">
- <path d="M20.437 2.69c-3.37 0-5.778 3.05-8.186 5.297.322 0 .804-.16 1.285-.16.803 0 1.605.16 2.408.48 1.284-1.283 2.568-2.727 4.494-2.727.963 0 2.087.48 2.89 1.123 1.605 1.605 1.605 4.174 0 5.78l-4.174 4.172c-.642.642-1.926 1.124-2.89 1.124-2.246 0-3.37-1.446-4.172-3.212l-2.086 2.087c1.284 2.408 3.21 4.173 6.1 4.173 1.926 0 3.69-.802 4.815-2.086l4.172-4.174c1.445-1.444 2.408-3.21 2.408-5.297-.32-3.53-3.53-6.58-7.063-6.58z"/>
- <path d="M13.535 22.113l-1.444 1.444c-.64.642-1.925 1.124-2.89 1.124-.962 0-2.085-.48-2.888-1.123-1.605-1.605-1.605-4.334 0-5.778l4.174-4.175c.642-.642 1.926-1.123 2.89-1.123 2.246 0 3.37 1.605 4.172 3.21l2.087-2.087c-1.284-2.407-3.21-4.173-6.1-4.173-1.926 0-3.692.803-4.815 2.087L4.547 15.69c-2.73 2.73-2.73 7.063 0 9.63 2.568 2.57 7.062 2.73 9.47 0l3.05-3.05c-.482.162-.963.162-1.445.162-.803 0-1.445 0-2.087-.32z"/>
- </g>
-</svg>
diff --git a/Echo/modules/icons/link-progressive.svg b/Echo/modules/icons/link-progressive.svg
new file mode 100644
index 00000000..065bca1f
--- /dev/null
+++ b/Echo/modules/icons/link-progressive.svg
@@ -0,0 +1,10 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 20 20">
+ <title>
+ link
+ </title>
+ <g fill="#36c">
+ <path d="M4.83 15h2.91a4.88 4.88 0 0 1-1.55-2H5a3 3 0 1 1 0-6h3a3 3 0 0 1 2.82 4h2.1a4.82 4.82 0 0 0 .08-.83v-.34A4.83 4.83 0 0 0 8.17 5H4.83A4.83 4.83 0 0 0 0 9.83v.34A4.83 4.83 0 0 0 4.83 15z"/>
+ <path d="M15.17 5h-2.91a4.88 4.88 0 0 1 1.55 2H15a3 3 0 1 1 0 6h-3a3 3 0 0 1-2.82-4h-2.1a4.82 4.82 0 0 0-.08.83v.34A4.83 4.83 0 0 0 11.83 15h3.34A4.83 4.83 0 0 0 20 10.17v-.34A4.83 4.83 0 0 0 15.17 5z"/>
+ </g>
+</svg>
diff --git a/Echo/modules/icons/mention-failure.svg b/Echo/modules/icons/mention-failure.svg
index 00c980b4..0dc4250a 100644
--- a/Echo/modules/icons/mention-failure.svg
+++ b/Echo/modules/icons/mention-failure.svg
@@ -1,4 +1,7 @@
-<?xml version="1.0" encoding="utf-8"?>
-<svg xmlns="http://www.w3.org/2000/svg" width="30" height="30" viewBox="0 0 188.36253 188.36253">
- <path d="M45.695 153.668h135.38l-23.01-22.484V41.298l30.298-30.297L177.362 0 0 177.362l11 11 34.695-34.694zM20.002 137.68V30.003H127.68L20.002 137.68z" fill="#54595d" fill-rule="evenodd"/>
+<?xml version="1.0" encoding="UTF-8"?>
+<svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 20 20">
+ <title>
+ mention failure
+ </title>
+ <path fill="#54595d" d="M18 13V5a2 2 0 0 0-2-2H5.99l11.42 11.42A2 2 0 0 0 18 13m-2.01 2H16L4.02 3H4L1.5.5l-1 1 2.1 2.08A2 2 0 0 0 2 5v14l4-4h8.01l3.5 3.5.98-1z"/>
</svg>
diff --git a/Echo/modules/icons/mention-progressive.svg b/Echo/modules/icons/mention-progressive.svg
new file mode 100644
index 00000000..c69b0df4
--- /dev/null
+++ b/Echo/modules/icons/mention-progressive.svg
@@ -0,0 +1,10 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 20 20">
+ <title>
+ mention
+ </title>
+ <g fill="#36c">
+ <path d="M18 4h-1v7a2 2 0 0 1-2 2H4v1c0 1.1.9 2 2 2h10l4 4V6a2 2 0 0 0-2-2m-10.02.7c-.2.1-.37.24-.51.4A1.98 1.98 0 0 0 7 6.38c0 .23.05.41.15.54.1.13.25.2.44.2.1 0 .2-.02.29-.05a.7.7 0 0 0 .28-.15c.09-.08.17-.18.24-.3.07-.13.14-.28.18-.47l.4-1.55a1.96 1.96 0 0 0-.36-.03c-.23 0-.44.05-.64.14"/>
+ <path d="M12 6.28a2.8 2.8 0 0 1-.48.9 2.19 2.19 0 0 1-1.65.81c-.25 0-.48-.06-.67-.18a.91.91 0 0 1-.4-.56 1.8 1.8 0 0 1-1.47.74 1.33 1.33 0 0 1-1.3-.96 2.69 2.69 0 0 1 1.92-3.21 3.47 3.47 0 0 1 2.2.14L9.64 6c-.06.23-.09.42-.09.57 0 .15.03.27.07.35.04.09.1.15.19.18a.75.75 0 0 0 .71-.1c.14-.1.26-.23.36-.4.1-.18.19-.39.25-.63s.09-.5.09-.8c0-.47-.08-.89-.23-1.25A2.49 2.49 0 0 0 9.4 2.46a3.8 3.8 0 0 0-2.55.09A3.3 3.3 0 0 0 5.07 4.4a4.14 4.14 0 0 0 .03 2.97 3.22 3.22 0 0 0 1.92 1.84c.44.15.92.23 1.43.23a6.34 6.34 0 0 0 1.47-.18 4.92 4.92 0 0 0 1.01-.4c.1-.05.18-.07.25-.05.08.03.13.08.16.17l.2.49a5.34 5.34 0 0 1-3.09.85c-.66 0-1.28-.11-1.84-.32a4.1 4.1 0 0 1-2.43-2.33 4.89 4.89 0 0 1 .23-4.07A4.53 4.53 0 0 1 7 1.56a4.25 4.25 0 0 1 2.68.1c.48.17.9.42 1.27.75a3.59 3.59 0 0 1 1.21 2.77c0 .39-.05.76-.17 1.1M14 0H2a2 2 0 0 0-2 2v14l4-4h10a2 2 0 0 0 2-2V2a2 2 0 0 0-2-2"/>
+ </g>
+</svg>
diff --git a/Echo/modules/icons/mention-status-bundle-progressive.svg b/Echo/modules/icons/mention-status-bundle-progressive.svg
new file mode 100644
index 00000000..0fb0b461
--- /dev/null
+++ b/Echo/modules/icons/mention-status-bundle-progressive.svg
@@ -0,0 +1,7 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 20 20">
+ <title>
+ mention status bundle
+ </title>
+ <path fill="#36c" d="M2 0a2 2 0 0 0-2 2v18l4-4h14a2 2 0 0 0 2-2V2a2 2 0 0 0-2-2H2zm7 3h2v6H9V3zm0 8h2v2H9v-2z"/>
+</svg>
diff --git a/Echo/modules/icons/mention-status-bundle.svg b/Echo/modules/icons/mention-status-bundle.svg
deleted file mode 100644
index 56295b29..00000000
--- a/Echo/modules/icons/mention-status-bundle.svg
+++ /dev/null
@@ -1,5 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<svg xmlns="http://www.w3.org/2000/svg" width="30" height="30" viewBox="0 0 241.12238 168.78567">
- <path d="M36.168 168.786h204.954l-36.168-36.169V0H0v132.617c0 20.496 15.673 36.169 36.168 36.169z" fill="#36c"/>
- <path d="M109.656 102.624H96.183l-2.185-68.481h17.842l-2.184 68.48zm-15.84 26.864v-13.601h17.66v13.601h-17.66z" fill="#fff"/>
-</svg>
diff --git a/Echo/modules/icons/mention-success-constructive.svg b/Echo/modules/icons/mention-success-constructive.svg
new file mode 100644
index 00000000..c0702929
--- /dev/null
+++ b/Echo/modules/icons/mention-success-constructive.svg
@@ -0,0 +1,7 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 20 20">
+ <title>
+ mention success
+ </title>
+ <path fill="#00af89" d="M2 0a2 2 0 0 0-2 2v18l4-4h14a2 2 0 0 0 2-2V2a2 2 0 0 0-2-2H2zm14.049 3l1.05 1.059L8.16 13 4 8.834l1.05-1.05 3.108 3.107L16.048 3z"/>
+</svg>
diff --git a/Echo/modules/icons/mention-success.svg b/Echo/modules/icons/mention-success.svg
deleted file mode 100644
index 843b81f5..00000000
--- a/Echo/modules/icons/mention-success.svg
+++ /dev/null
@@ -1,5 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<svg xmlns="http://www.w3.org/2000/svg" width="30" height="30" viewBox="0 0 213.37759 149.36432">
- <path d="M32.007 149.364h181.37l-32.006-32.006V0H0v117.358c0 18.137 13.87 32.006 32.007 32.006z" fill="#00af89"/>
- <path d="M134.904 42.575L78.27 99.207 49.955 70.89l-8.495 8.495 36.811 36.81 73.622-73.621c-4.53-4.531-12.459-4.531-16.99 0z" fill="#fff"/>
-</svg>
diff --git a/Echo/modules/icons/mention.svg b/Echo/modules/icons/mention.svg
deleted file mode 100644
index f090bf1c..00000000
--- a/Echo/modules/icons/mention.svg
+++ /dev/null
@@ -1,4 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<svg width="30" height="30" viewBox="0 0 30 30" xmlns="http://www.w3.org/2000/svg">
- <path fill="#36c" d="M27.143 23L30 25.857H10V10.143h17.143V23zM20 3v5.714H8.57v10H0l2.857-2.857V3H20zm5.016 14.242c0 .613-.083 1.16-.25 1.645-.167.484-.4.893-.7 1.226-.303.333-.655.586-1.058.758-.403.177-.836.26-1.298.26-.43 0-.783-.09-1.057-.28-.274-.19-.433-.44-.476-.75h-.064c-.15.248-.387.48-.71.7-.322.22-.726.33-1.21.33-.365 0-.69-.065-.975-.2-.285-.134-.527-.322-.726-.564-.2-.242-.352-.53-.46-.863-.107-.332-.16-.7-.16-1.096 0-.45.072-.895.217-1.33.14-.436.35-.823.624-1.162.274-.336.6-.61.976-.82.377-.21.8-.315 1.275-.315.408 0 .747.085 1.016.257.27.172.44.377.518.613h.015l.113-.548h1.74l-.5 2.532c-.053.257-.1.504-.144.74-.042.238-.064.436-.064.598 0 .15.033.285.097.403.065.12.188.18.37.18.324 0 .61-.186.864-.557.253-.37.38-.933.38-1.686 0-.623-.103-1.174-.307-1.653-.204-.48-.49-.88-.862-1.2-.37-.326-.81-.57-1.322-.737-.512-.168-1.074-.25-1.686-.25-.656 0-1.256.114-1.8.346-.54.23-1.007.547-1.394.95-.387.403-.688.885-.903 1.444-.215.56-.323 1.16-.323 1.807 0 .69.114 1.308.34 1.856.226.55.546 1.017.96 1.404.414.387.903.686 1.467.895.564.21 1.185.315 1.862.315.775 0 1.466-.12 2.074-.364.607-.24 1.153-.582 1.637-1.023l1.02 1.13c-.626.61-1.354 1.06-2.187 1.345-.833.285-1.74.427-2.717.427-.915 0-1.754-.148-2.517-.444-.765-.292-1.42-.704-1.97-1.23-.55-.527-.976-1.16-1.282-1.896-.306-.737-.46-1.54-.46-2.41 0-.86.165-1.658.493-2.39.327-.73.77-1.366 1.33-1.903.56-.54 1.215-.96 1.967-1.266.753-.306 1.56-.46 2.42-.46.752 0 1.48.11 2.185.33.704.22 1.323.553 1.855.994.532.44.96.986 1.282 1.637.32.65.48 1.41.48 2.283zm-4.984.355c0-.162-.013-.317-.04-.468-.027-.156-.073-.29-.137-.408-.065-.118-.156-.213-.274-.282-.114-.07-.264-.104-.45-.104-.2 0-.384.06-.55.184-.16.125-.3.286-.42.485-.113.2-.204.422-.27.67-.063.247-.096.49-.096.725 0 .27.063.525.187.767.123.24.357.362.7.362.238 0 .44-.066.614-.19.173-.123.313-.28.42-.475.108-.193.19-.402.243-.628.053-.227.08-.44.08-.646z" fill-rule="evenodd"/>
-</svg>
diff --git a/Echo/modules/icons/message-constructive.svg b/Echo/modules/icons/message-constructive.svg
new file mode 100644
index 00000000..c58a7af5
--- /dev/null
+++ b/Echo/modules/icons/message-constructive.svg
@@ -0,0 +1,10 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 20 20">
+ <title>
+ message
+ </title>
+ <g fill="#00af89">
+ <path d="M0 8v8a2 2 0 0 0 2 2h16a2 2 0 0 0 2-2V8l-10 4z"/>
+ <path d="M18 2H2a2 2 0 0 0-2 2v2l10 4 10-4V4a2 2 0 0 0-2-2z"/>
+ </g>
+</svg>
diff --git a/Echo/modules/icons/notice.svg b/Echo/modules/icons/notice.svg
new file mode 100644
index 00000000..06a7f5ec
--- /dev/null
+++ b/Echo/modules/icons/notice.svg
@@ -0,0 +1,7 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 20 20">
+ <title>
+ notice
+ </title>
+ <path d="M10 0a10 10 0 1 0 10 10A10 10 0 0 0 10 0zm1 16H9v-2h2zm0-4H9V4h2z"/>
+</svg>
diff --git a/Echo/modules/icons/ooui-edit-ltr-progressive.svg b/Echo/modules/icons/ooui-edit-ltr-progressive.svg
deleted file mode 100644
index bacc712f..00000000
--- a/Echo/modules/icons/ooui-edit-ltr-progressive.svg
+++ /dev/null
@@ -1,4 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24">
- <path d="M17 2L5 14l-1 5 5-1L21 6c0-2-2-4-4-4zM7.2 15.5c-.3-.3-.7-.6-1-.8C8.5 12.4 17.5 3.3 17.5 3.3c.4.1.7.3 1 .7L7.2 15.5z" fill="#36c"/>
-</svg>
diff --git a/Echo/modules/icons/ooui-edit-rtl-progressive.svg b/Echo/modules/icons/ooui-edit-rtl-progressive.svg
deleted file mode 100644
index 6f16aef9..00000000
--- a/Echo/modules/icons/ooui-edit-rtl-progressive.svg
+++ /dev/null
@@ -1,4 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24">
- <path d="M8 2l12 12 1 5-5-1L4 6c0-2 2-4 4-4zm9.8 13.5c.3-.3.7-.6 1-.8C16.5 12.4 7.5 3.3 7.5 3.3c-.4.1-.7.3-1 .7l11.3 11.5z" fill="#36c"/>
-</svg>
diff --git a/Echo/modules/icons/revert.svg b/Echo/modules/icons/revert.svg
index af0f2b49..d3914bc9 100644
--- a/Echo/modules/icons/revert.svg
+++ b/Echo/modules/icons/revert.svg
@@ -1,10 +1,7 @@
-<?xml version="1.0" encoding="utf-8"?>
-<svg xmlns="http://www.w3.org/2000/svg" width="30" height="30" viewBox="0 0 30 30">
- <g fill="#54595d" transform="translate(1.16 2.44) scale(.98216)">
- <rect width="11" height="1" rx=".5" ry=".5" x=".5" y="25"/>
- <g transform="rotate(38 8.548 27.52)">
- <rect width="10" height="7" rx="1" y="18"/>
- <path d="M0 14h10v1H0zm0 2h10v1H0zM0 0h10v13H0V0zm2 0h2v11H2V0z"/>
- </g>
- </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">
+ <title>
+ revert
+ </title>
+ <path fill="#54595d" d="M8.806 6.444L1 14.25V19h4.75l8.334-8.334zm4.908-3.515H13V.072L8 4l5 3.929V5.072h.714c2.286 0 4 1.428 4 4.285h2.143c0-4.285-3.857-6.428-6.143-6.428"/>
</svg>
diff --git a/Echo/modules/icons/reviewed.svg b/Echo/modules/icons/reviewed.svg
deleted file mode 100644
index cf406727..00000000
--- a/Echo/modules/icons/reviewed.svg
+++ /dev/null
@@ -1,4 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<svg width="30" height="30" viewBox="0 0 30 30" xmlns="http://www.w3.org/2000/svg">
- <path fill="#36c" d="M28.444 14.444l-9.333 10.89-6.22-6.223-1.553 1.56 7.778 7.778L30 16l-1.556-1.556zm-6.222 4.667V2H2v20.222c0 2.645 2.022 4.667 4.667 4.667h7.777l-4.666-4.67H5.11V20.66h4.046l1.555-1.556h-5.6V17.55h14v1.556H16l1.556 1.557h3.11l1.556-1.556zm-17.11-14h6.22v1.56h-6.22V5.11zm0 3.116h6.22V9.78h-6.22V8.22zm0 3.11h6.22v1.557h-6.22v-1.556zm14 4.668h-14V14.45h14V16zm-6.223-3.11V5.11h6.22v7.78h-6.22z" fill-rule="evenodd"/>
-</svg>
diff --git a/Echo/modules/icons/speechBubbles-ltr-progressive.svg b/Echo/modules/icons/speechBubbles-ltr-progressive.svg
new file mode 100644
index 00000000..de97021f
--- /dev/null
+++ b/Echo/modules/icons/speechBubbles-ltr-progressive.svg
@@ -0,0 +1,10 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 20 20">
+ <title>
+ speech bubbles
+ </title>
+ <g fill="#36c">
+ <path d="M18 4h-1v7a2 2 0 0 1-2 2H4v1a2 2 0 0 0 2 2h10l4 4V6a2 2 0 0 0-2-2z"/>
+ <path d="M14 0H2a2 2 0 0 0-2 2v14l4-4h10a2 2 0 0 0 2-2V2a2 2 0 0 0-2-2z"/>
+ </g>
+</svg>
diff --git a/Echo/modules/icons/speechBubbles-ltr.svg b/Echo/modules/icons/speechBubbles-ltr.svg
index d6832183..090f0a69 100644
--- a/Echo/modules/icons/speechBubbles-ltr.svg
+++ b/Echo/modules/icons/speechBubbles-ltr.svg
@@ -1,4 +1,8 @@
-<?xml version="1.0" encoding="utf-8"?>
-<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24">
- <path d="M20 9v9l2 2H8V9h12zM3 4h12v4H7v7H1l2-2V4z"/>
+<?xml version="1.0" encoding="UTF-8"?>
+<svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 20 20">
+ <title>
+ speech bubbles
+ </title>
+ <path d="M18 4h-1v7a2 2 0 0 1-2 2H4v1a2 2 0 0 0 2 2h10l4 4V6a2 2 0 0 0-2-2z"/>
+ <path d="M14 0H2a2 2 0 0 0-2 2v14l4-4h10a2 2 0 0 0 2-2V2a2 2 0 0 0-2-2z"/>
</svg>
diff --git a/Echo/modules/icons/speechBubbles-rtl-progressive.svg b/Echo/modules/icons/speechBubbles-rtl-progressive.svg
new file mode 100644
index 00000000..05421380
--- /dev/null
+++ b/Echo/modules/icons/speechBubbles-rtl-progressive.svg
@@ -0,0 +1,10 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 20 20">
+ <title>
+ speech bubbles
+ </title>
+ <g fill="#36c">
+ <path d="M0 6v14l4-4h10c1.1 0 2-.9 2-2v-1H5c-1.1 0-2-.9-2-2V4H2C.9 4 0 4.9 0 6z"/>
+ <path d="M4 2v8c0 1.1.9 2 2 2h10l4 4V2c0-1.1-.9-2-2-2H6C4.9 0 4 .9 4 2z"/>
+ </g>
+</svg>
diff --git a/Echo/modules/icons/speechBubbles-rtl.svg b/Echo/modules/icons/speechBubbles-rtl.svg
index db548a45..4d86fbde 100644
--- a/Echo/modules/icons/speechBubbles-rtl.svg
+++ b/Echo/modules/icons/speechBubbles-rtl.svg
@@ -1,4 +1,8 @@
-<?xml version="1.0" encoding="utf-8"?>
-<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24">
- <path d="M3 9v9l-2 2h14V9H3zm17-5H8v4h8v7h6l-2-2V4z"/>
+<?xml version="1.0" encoding="UTF-8"?>
+<svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 20 20">
+ <title>
+ speech bubbles
+ </title>
+ <path d="M0 6v14l4-4h10c1.1 0 2-.9 2-2v-1H5c-1.1 0-2-.9-2-2V4H2C.9 4 0 4.9 0 6z"/>
+ <path d="M4 2v8c0 1.1.9 2 2 2h10l4 4V2c0-1.1-.9-2-2-2H6C4.9 0 4 .9 4 2z"/>
</svg>
diff --git a/Echo/modules/icons/thanks-ltr.svg b/Echo/modules/icons/thanks-ltr.svg
deleted file mode 100644
index f277ce4d..00000000
--- a/Echo/modules/icons/thanks-ltr.svg
+++ /dev/null
@@ -1,4 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24">
- <path d="M5 6v11l-3 3h17c1.7 0 3-1.3 3-3V6H5zm11.2 2.5c.7 0 1.2.6 1.2 1.2s-.5 1.3-1.2 1.3-1.2-.6-1.2-1.2.6-1.3 1.2-1.3zm-5.4 0c.7 0 1.2.6 1.2 1.2s-.6 1.3-1.2 1.3-1.2-.6-1.2-1.2.5-1.3 1.2-1.3zm2.7 8.5c-5.1 0-6-5-6-5s2 1 6 1l6-1s-1 5-6 5z"/>
-</svg>
diff --git a/Echo/modules/icons/thanks-rtl.svg b/Echo/modules/icons/thanks-rtl.svg
deleted file mode 100644
index 0f9a6fb3..00000000
--- a/Echo/modules/icons/thanks-rtl.svg
+++ /dev/null
@@ -1,4 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24">
- <path d="M19 6v11l3 3H5c-1.7 0-3-1.3-3-3V6h17zM7.8 8.5c-.7 0-1.2.6-1.2 1.2S7.1 11 7.8 11 9 10.4 9 9.8s-.6-1.3-1.2-1.3zm5.4 0c-.7 0-1.2.6-1.2 1.2s.6 1.3 1.2 1.3 1.2-.6 1.2-1.2-.5-1.3-1.2-1.3zM10.5 17c5.1 0 6-5 6-5s-2 1-6 1l-6-1s1 5 6 5z"/>
-</svg>
diff --git a/Echo/modules/icons/trash.svg b/Echo/modules/icons/trash.svg
deleted file mode 100644
index 02bdcd69..00000000
--- a/Echo/modules/icons/trash.svg
+++ /dev/null
@@ -1,4 +0,0 @@
-<?xml version="1.0" encoding="UTF-8" standalone="no"?>
-<svg width="30" height="30" viewBox="0 0 30 30" xmlns="http://www.w3.org/2000/svg">
- <path fill="#54595d" fill-rule="evenodd" d="M7 8.25c0-1.558 1.275-2.833 2.833-2.833h2.834L14.083 4h2.834l1.416 1.417h2.834C22.725 5.417 24 6.692 24 8.25H7M8.417 9.667h14.166L21.167 25.25H9.833"/>
-</svg>
diff --git a/Echo/modules/icons/tray.svg b/Echo/modules/icons/tray.svg
index 7c617eec..b3209529 100644
--- a/Echo/modules/icons/tray.svg
+++ b/Echo/modules/icons/tray.svg
@@ -1,4 +1,7 @@
-<?xml version="1.0" encoding="utf-8"?>
-<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24">
- <path d="M3 13.35l1.8-7.2c.2-.996.81-1.8 1.8-1.8h10.8c.99 0 1.6.867 1.8 1.8l1.8 7.2v4.5c0 .99-.81 1.8-1.8 1.8H4.8c-.99 0-1.8-.81-1.8-1.8v-4.5zm6.96 1.8h4.08c-.49.557-1.212.9-2.04.9a2.68 2.68 0 0 1-2.04-.9h4.08c.414-.472.66-1.098.66-1.8h4.14l-1.44-7.2H6.6l-1.44 7.2H9.3c0 .702.246 1.328.66 1.8z"/>
+<?xml version="1.0" encoding="UTF-8"?>
+<svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 20 20">
+ <title>
+ tray
+ </title>
+ <path d="M17 1H3a2 2 0 0 0-2 2v14a2 2 0 0 0 2 2h14a2 2 0 0 0 2-2V3a2 2 0 0 0-2-2zm0 12h-4l-1 2H8l-1-2H3V3h14z"/>
</svg>
diff --git a/Echo/modules/icons/user-rights-progressive.svg b/Echo/modules/icons/user-rights-progressive.svg
new file mode 100644
index 00000000..0f5708b2
--- /dev/null
+++ b/Echo/modules/icons/user-rights-progressive.svg
@@ -0,0 +1,10 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 20 20">
+ <title>
+ user rights
+ </title>
+ <g fill="#36c">
+ <path d="M20 16.288v-1.632l-1.012-.168c-.057-.226-.17-.45-.338-.788l.619-.844-1.181-1.181-.844.619a3.006 3.006 0 0 0-.788-.338l-.112-1.012h-1.632l-.168 1.012c-.282.056-.507.169-.788.338l-.844-.619-1.18 1.181.562.844c-.169.281-.225.506-.338.787L11 14.6v1.631l1.012.169c.057.281.17.506.338.787l-.563.844 1.182 1.182.844-.563c.224.113.506.225.787.338L14.769 20h1.687l.169-1.012c.281-.057.506-.17.787-.338l.844.619 1.182-1.181-.62-.844c.17-.281.282-.563.338-.788zm-4.5.843a1.657 1.657 0 0 1-1.688-1.687c0-.956.732-1.688 1.688-1.688s1.688.732 1.688 1.688-.732 1.687-1.688 1.687z"/>
+ <path d="M1.03 18.28c.01-.526.025-.74.064-.878.143-.496.398-.994.758-1.48.256-.346 1-1.078 1.394-1.371 1.393-1.038 3.068-1.678 5.057-1.934.535-.069 1.596-.12 1.964-.096l.323.022-.084.088-.084.087.285.426c.184.274.271.43.245.438-.036.012-.883.112-.938.111-.013 0-.024.764-.024 1.699v1.698l.532.088c.292.048.53.095.53.105 0 .01-.128.212-.286.45l-.287.432.404.405.403.404H1.016zm8.226-7.35a5.05 5.05 0 0 1-3.548-2.4 5.214 5.214 0 0 1-.657-1.942 5.799 5.799 0 0 1 .076-1.628 4.984 4.984 0 0 1 5.707-3.87c1.547.256 2.91 1.27 3.623 2.694 1.232 2.457.225 5.452-2.245 6.677a4.455 4.455 0 0 1-1.145.407c-.324.074-.452.087-.967.095a5.545 5.545 0 0 1-.844-.031z"/>
+ </g>
+</svg>
diff --git a/Echo/modules/icons/user-rights.svg b/Echo/modules/icons/user-rights.svg
deleted file mode 100644
index 6903ea8a..00000000
--- a/Echo/modules/icons/user-rights.svg
+++ /dev/null
@@ -1,4 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<svg width="30" height="30" viewBox="0 0 30 30" xmlns="http://www.w3.org/2000/svg">
- <path fill="#36c" d="M14.086 16.562v-.105c1.465-1.256 2.617-3.35 2.617-5.653C16.703 5.884 14.61 4 11.468 4 9.27 4 6.234 5.256 6.234 10.804c0 2.2 1.152 4.293 2.617 5.653v.105c0 .942-.1 1.78-1.042 2.094 0 0-3.035 1.15-4.187 1.57-1.36.42-2.62 1.047-2.62 2.617v1.047h14.957l-.053-.053.455-.682L17 22l-1.164-.024-.836-.14v-3.23c-.81-.347-.815-1.148-.914-2.044zM29.6 21.075V18.61l-1.53-.255c-.085-.34-.255-.68-.51-1.19l.935-1.275-1.785-1.785-1.275.935c-.425-.255-.85-.425-1.19-.51l-.17-1.53H21.61l-.255 1.53c-.425.085-.765.255-1.19.51l-1.275-.935-1.785 1.785.85 1.275c-.255.425-.34.765-.51 1.19l-1.445.17v2.465l1.53.255c.085.425.255.765.51 1.19l-.85 1.275 1.785 1.785 1.275-.85c.34.17.765.34 1.19.51l.255 1.53h2.55l.255-1.53c.425-.085.765-.255 1.19-.51l1.275.935 1.785-1.785-.935-1.275c.255-.425.425-.85.51-1.19l1.275-.255zm-6.8 1.275c-1.445 0-2.55-1.105-2.55-2.55 0-1.445 1.105-2.55 2.55-2.55 1.445 0 2.55 1.105 2.55 2.55 0 1.445-1.105 2.55-2.55 2.55z" fill-rule="evenodd"/>
-</svg>
diff --git a/Echo/modules/icons/user-speech-bubble.svg b/Echo/modules/icons/user-speech-bubble.svg
index 12e60d42..ddf3d551 100644
--- a/Echo/modules/icons/user-speech-bubble.svg
+++ b/Echo/modules/icons/user-speech-bubble.svg
@@ -1,4 +1,8 @@
-<?xml version="1.0" encoding="UTF-8" standalone="no"?>
-<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24">
- <path d="M14 16.8c-.96-.32-3.2-1.2-3.2-1.2-.72-.24-.72-.88-.8-1.6v-.08c1.12-.96 2-2.56 2-4.32 0-3.76-1.6-5.2-4-5.2-1.68 0-4 .96-4 5.2 0 1.68.88 3.28 2 4.32V14c0 .72-.08 1.36-.8 1.6 0 0-2.32.88-3.2 1.2-1.04.32-2 .8-2 2v.8h16v-.8c0-.96-.64-1.6-2-2zm.367-5.46l-1.796 2.938H24V4.4h-9.633v6.94z"/>
+<?xml version="1.0" encoding="utf-8"?>
+<svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 20 20">
+ <title>
+ user speech bubble
+ </title>
+ <path d="M12.4 9.3l-1.8 2.9H22V2.4h-9.6v6.9zM6 13c-5.9 0-8 3-8 5v3h16v-3c0-2-2.1-5-8-5z"/>
+ <circle cx="6" cy="7.5" r="4.5"/>
</svg>
diff --git a/Echo/modules/icons/userTalk-ltr.svg b/Echo/modules/icons/userTalk-ltr.svg
new file mode 100644
index 00000000..990cfc39
--- /dev/null
+++ b/Echo/modules/icons/userTalk-ltr.svg
@@ -0,0 +1,7 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 20 20">
+ <title>
+ user talk
+ </title>
+ <path d="M18 0H2a2 2 0 0 0-2 2v18l4-4h14a2 2 0 0 0 2-2V2a2 2 0 0 0-2-2zm-4 4a1.5 1.5 0 1 1-1.5 1.5A1.5 1.5 0 0 1 14 4zM6 4a1.5 1.5 0 1 1-1.5 1.5A1.5 1.5 0 0 1 6 4zm4 8c-2.61 0-4.83-.67-5.65-3h11.3c-.82 2.33-3.04 3-5.65 3z"/>
+</svg>
diff --git a/Echo/modules/icons/userTalk-rtl.svg b/Echo/modules/icons/userTalk-rtl.svg
new file mode 100644
index 00000000..bd3dc9e1
--- /dev/null
+++ b/Echo/modules/icons/userTalk-rtl.svg
@@ -0,0 +1,7 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 20 20">
+ <title>
+ user talk
+ </title>
+ <path d="M0 2v12c0 1.1.9 2 2 2h14l4 4V2c0-1.1-.9-2-2-2H2C.9 0 0 .9 0 2zm7.5 3.5C7.5 6.3 6.8 7 6 7s-1.5-.7-1.5-1.5S5.2 4 6 4s1.5.7 1.5 1.5zm8 0c0 .8-.7 1.5-1.5 1.5s-1.5-.7-1.5-1.5S13.2 4 14 4s1.5.7 1.5 1.5zM4.4 9h11.3c-.8 2.3-3 3-5.6 3s-4.9-.7-5.7-3z"/>
+</svg>
diff --git a/Echo/modules/logger/mw.echo.Logger.js b/Echo/modules/logger/mw.echo.Logger.js
index 725c2d03..cf380bbb 100644
--- a/Echo/modules/logger/mw.echo.Logger.js
+++ b/Echo/modules/logger/mw.echo.Logger.js
@@ -15,18 +15,6 @@
this.clickThroughEnabled = config.clickThroughEnabled || this.constructor.static.clickThroughEnabled;
this.notificationsIdCache = [];
- if ( this.clickThroughEnabled ) {
- // This should usually already be loaded, but not always
- this.deferred = mw.loader.using( 'ext.eventLogging', function () {
- mw.eventLog.setDefaults( 'EchoInteraction', {
- version: mw.config.get( 'wgEchoEventLoggingVersion' ),
- userId: +mw.config.get( 'wgUserId' ),
- editCount: +mw.config.get( 'wgUserEditCount' )
- } );
- } );
- } else {
- this.deferred = $.Deferred().resolve();
- }
};
OO.initClass( mw.echo.Logger );
@@ -40,11 +28,7 @@
* @static
* @property {boolean}
*/
- mw.echo.Logger.static.clickThroughEnabled = OO.getProp(
- mw.config.get( 'wgEchoEventLoggingSchemas' ),
- 'EchoInteraction',
- 'enabled'
- );
+ mw.echo.Logger.static.clickThroughEnabled = !!mw.config.get( 'wgEchoInteractionLogging' );
/**
* Context definitions.
@@ -99,7 +83,10 @@
}
myEvt = {
- action: action
+ action: action,
+ version: mw.config.get( 'wgEchoEventLoggingVersion' ),
+ userId: +mw.config.get( 'wgUserId' ),
+ editCount: +mw.config.get( 'wgUserEditCount' )
};
// All the fields below are optional
@@ -120,9 +107,7 @@
myEvt.notifWiki = notifWiki;
}
- this.deferred.done( function () {
- mw.eventLog.logEvent( 'EchoInteraction', myEvt );
- } );
+ mw.track( 'event.EchoInteraction', myEvt );
};
/**
diff --git a/Echo/modules/model/mw.echo.dm.BundleNotificationItem.js b/Echo/modules/model/mw.echo.dm.BundleNotificationItem.js
index ec769ba1..60a42395 100644
--- a/Echo/modules/model/mw.echo.dm.BundleNotificationItem.js
+++ b/Echo/modules/model/mw.echo.dm.BundleNotificationItem.js
@@ -12,9 +12,8 @@
* @param {Object} [config] Configuration object
*/
mw.echo.dm.BundleNotificationItem = function MwEchoDmBundleNotificationItem( id, bundledNotificationModels, config ) {
- config = config || {};
-
- mw.echo.dm.BundleNotificationItem.parent.call( this, id, config );
+ // Parent constructor
+ mw.echo.dm.BundleNotificationItem.super.call( this, id, config );
this.getSecondaryUrls().forEach( function ( link ) {
// hack: put all secondary actions in the menu for now
diff --git a/Echo/modules/model/mw.echo.dm.CrossWikiNotificationItem.js b/Echo/modules/model/mw.echo.dm.CrossWikiNotificationItem.js
index 1183aee2..2ee599a8 100644
--- a/Echo/modules/model/mw.echo.dm.CrossWikiNotificationItem.js
+++ b/Echo/modules/model/mw.echo.dm.CrossWikiNotificationItem.js
@@ -15,7 +15,7 @@
mw.echo.dm.CrossWikiNotificationItem = function MwEchoDmCrossWikiNotificationItem( id, config ) {
config = config || {};
- mw.echo.dm.CrossWikiNotificationItem.parent.call( this, id, config );
+ mw.echo.dm.CrossWikiNotificationItem.super.call( this, id, config );
this.foreign = true;
this.source = null;
diff --git a/Echo/modules/model/mw.echo.dm.ModelManager.js b/Echo/modules/model/mw.echo.dm.ModelManager.js
index 213d4b59..367be286 100644
--- a/Echo/modules/model/mw.echo.dm.ModelManager.js
+++ b/Echo/modules/model/mw.echo.dm.ModelManager.js
@@ -262,7 +262,7 @@
var model;
for ( model in this.notificationModels ) {
- if ( this.notificationModels.hasOwnProperty( model ) ) {
+ if ( Object.prototype.hasOwnProperty.call( this.notificationModels, model ) ) {
this.notificationModels[ model ].disconnect( this );
delete this.notificationModels[ model ];
}
diff --git a/Echo/modules/model/mw.echo.dm.NotificationGroupsList.js b/Echo/modules/model/mw.echo.dm.NotificationGroupsList.js
index 639145f5..c4f99a44 100644
--- a/Echo/modules/model/mw.echo.dm.NotificationGroupsList.js
+++ b/Echo/modules/model/mw.echo.dm.NotificationGroupsList.js
@@ -18,7 +18,7 @@
config = config || {};
// Parent constructor
- mw.echo.dm.NotificationGroupsList.parent.call( this );
+ mw.echo.dm.NotificationGroupsList.super.call( this );
// Sorting callback
this.setSortingCallback( function ( a, b ) {
diff --git a/Echo/modules/model/mw.echo.dm.NotificationsList.js b/Echo/modules/model/mw.echo.dm.NotificationsList.js
index fa0fe020..341965da 100644
--- a/Echo/modules/model/mw.echo.dm.NotificationsList.js
+++ b/Echo/modules/model/mw.echo.dm.NotificationsList.js
@@ -20,13 +20,13 @@
* @cfg {string} [sourceURL] The URL for the article base of the remote
* group or wiki
* @cfg {string} [timestamp=0] A timestamp representing the latest item in
- * then list.
+ * the list.
*/
mw.echo.dm.NotificationsList = function MwEchoDmNotificationsList( config ) {
config = config || {};
// Parent constructor
- mw.echo.dm.NotificationsList.parent.call( this );
+ mw.echo.dm.NotificationsList.super.call( this );
this.name = config.name || 'local';
this.source = config.source || 'local';
@@ -200,10 +200,10 @@
var items = this.getItems();
return (
+ // In the cases where we want a single timestamp for a
+ // group, the group is usually all unread, which makes
+ // the first item its newest
items.length > 0 ?
- // In the cases where we want a single timestamp for a
- // group, the group is usually all unread, which makes
- // the first item its newest
items[ 0 ].getTimestamp() :
this.fallbackTimestamp
);
diff --git a/Echo/modules/model/mw.echo.dm.SourcePagesModel.js b/Echo/modules/model/mw.echo.dm.SourcePagesModel.js
index c305f7d9..4d0f56be 100644
--- a/Echo/modules/model/mw.echo.dm.SourcePagesModel.js
+++ b/Echo/modules/model/mw.echo.dm.SourcePagesModel.js
@@ -34,7 +34,7 @@
* The state of the source page model has changed
*/
- /* Methds */
+ /* Methods */
/**
* Set the current source and page.
@@ -83,7 +83,7 @@
this.reset();
for ( source in sourceData ) {
- if ( sourceData.hasOwnProperty( source ) ) {
+ if ( Object.prototype.hasOwnProperty.call( sourceData, source ) ) {
this.setSourcePagesDetails( source, sourceData[ source ] );
}
}
diff --git a/Echo/modules/nojs/mw.echo.badge.less b/Echo/modules/nojs/mw.echo.badge.less
index 3d267aff..130977d7 100644
--- a/Echo/modules/nojs/mw.echo.badge.less
+++ b/Echo/modules/nojs/mw.echo.badge.less
@@ -8,13 +8,16 @@
#pt-notifications-notice & {
position: relative;
display: block;
- width: 24px;
- height: 24px;
+ width: 20px;
+ height: 20px;
+ margin: 0 2px;
// Hide the text, but keep accessible for screen-readers
// Later we put the icons back onscreen with an opposite offset
top: -@badge-offscreen-offset - 5px;
cursor: pointer;
text-decoration: none;
+ line-height: normal;
+ .box-sizing( border-box );
&:hover,
&:active,
@@ -61,6 +64,7 @@
}
&.mw-echo-notifications-badge-long-label {
+ margin-right: 0.5em;
&:after {
left: 35%;
}
diff --git a/Echo/modules/nojs/mw.echo.badge.vector.less b/Echo/modules/nojs/mw.echo.badge.vector.less
index eba9aa56..0256eb62 100644
--- a/Echo/modules/nojs/mw.echo.badge.vector.less
+++ b/Echo/modules/nojs/mw.echo.badge.vector.less
@@ -16,6 +16,5 @@
#p-personal #pt-notifications-alert,
#p-personal #pt-notifications-notice {
- margin-top: 0.3em;
margin-right: 0.4em;
}
diff --git a/Echo/modules/nojs/mw.echo.special.less b/Echo/modules/nojs/mw.echo.special.less
index 87a76552..336635c6 100644
--- a/Echo/modules/nojs/mw.echo.special.less
+++ b/Echo/modules/nojs/mw.echo.special.less
@@ -119,9 +119,7 @@ ul.mw-echo-special-notifications {
background-color: #f8f9fa;
&:hover {
- /* Fallback for IE<=8 */
- background-color: #f6f6f6;
- background-color: rgba( 0, 0, 0, 0.035 );
+ background-color: #eaecf0;
}
&-unread {
diff --git a/Echo/modules/styles/LabelIconWidget.less b/Echo/modules/styles/LabelIconWidget.less
index 9aec81f5..bffd2a83 100644
--- a/Echo/modules/styles/LabelIconWidget.less
+++ b/Echo/modules/styles/LabelIconWidget.less
@@ -1,5 +1,6 @@
.oo-ui-labelIconWidget {
display: table;
+ padding-left: 1.5em;
}
.oo-ui-labelIconWidget-row {
@@ -10,4 +11,8 @@
display: table-cell;
vertical-align: middle;
}
+
+ .oo-ui-iconElement-icon {
+ left: 0.5em;
+ }
}
diff --git a/Echo/modules/styles/mw.echo.ui.ConfirmationPopupWidget.less b/Echo/modules/styles/mw.echo.ui.ConfirmationPopupWidget.less
index bede9d83..b0bd8398 100644
--- a/Echo/modules/styles/mw.echo.ui.ConfirmationPopupWidget.less
+++ b/Echo/modules/styles/mw.echo.ui.ConfirmationPopupWidget.less
@@ -5,12 +5,12 @@
text-align: center;
&-popup {
+ background-color: #222;
+ color: #fff;
display: inline-block;
- background-color: #333;
border-radius: 2px;
padding: 0.5em 1em;
text-align: left;
- color: #fff;
span {
vertical-align: middle;
diff --git a/Echo/modules/styles/mw.echo.ui.CrossWikiNotificationItemWidget.less b/Echo/modules/styles/mw.echo.ui.CrossWikiNotificationItemWidget.less
index deb8b70a..569aa327 100644
--- a/Echo/modules/styles/mw.echo.ui.CrossWikiNotificationItemWidget.less
+++ b/Echo/modules/styles/mw.echo.ui.CrossWikiNotificationItemWidget.less
@@ -1,3 +1,4 @@
+@import 'mediawiki.mixins';
@import '../echo.variables';
.mw-echo-ui-crossWikiNotificationItemWidget,
@@ -54,10 +55,7 @@
cursor: default;
padding: @bundle-group-padding;
background-color: #f8f9fa;
- -webkit-box-shadow: inset 0 -2px 0 0 rgba( 0, 0, 0, 0.05 ), inset 0 2px 0 0 rgba( 0, 0, 0, 0.05 );
- -moz-box-shadow: inset 0 -2px 0 0 rgba( 0, 0, 0, 0.05 ), inset 0 2px 0 0 rgba( 0, 0, 0, 0.05 );
- box-shadow: inset 0 -2px 0 0 rgba( 0, 0, 0, 0.05 ), inset 0 2px 0 0 rgba( 0, 0, 0, 0.05 );
- border-bottom: 1px solid #ddd;
+ .box-shadow( inset 0 -2px 0 0 rgba( 0, 0, 0, 0.05 ), inset 0 2px 0 0 rgba( 0, 0, 0, 0.05 ); );
margin-bottom: 0.4em;
}
diff --git a/Echo/modules/styles/mw.echo.ui.FooterNoticeWidget.less b/Echo/modules/styles/mw.echo.ui.FooterNoticeWidget.less
index 8bc9c7da..ff8cd7b5 100644
--- a/Echo/modules/styles/mw.echo.ui.FooterNoticeWidget.less
+++ b/Echo/modules/styles/mw.echo.ui.FooterNoticeWidget.less
@@ -3,7 +3,7 @@
.mw-echo-ui-footerNoticeWidget {
padding: 0.5em;
- border-bottom: 1px solid #ddd;
+ border-bottom: 1px solid #c8ccd1;
white-space: normal;
line-height: 16px;
diff --git a/Echo/modules/styles/mw.echo.ui.MenuItemWidget.less b/Echo/modules/styles/mw.echo.ui.MenuItemWidget.less
index 6c955fd6..5735dfbd 100644
--- a/Echo/modules/styles/mw.echo.ui.MenuItemWidget.less
+++ b/Echo/modules/styles/mw.echo.ui.MenuItemWidget.less
@@ -1,90 +1,49 @@
@import '../echo.variables';
@import '../echo.mixins';
+/* stylelint-disable no-descending-specificity */
.mw-echo-ui-menuItemWidget {
- &-icon {
- display: inline-block;
- // We have to override oojs-ui's width/height, which uses
- // a very specific selector
- width: 1.5em !important;
- height: 1.5em !important;
- min-width: 1.5em !important;
- min-height: 1.5em !important;
-
- position: absolute;
- top: 0;
+ &:hover {
+ text-decoration: none;
}
- &-content {
- display: inline-block;
- margin-left: 1.5em + 0.5em; // Icon width + 0.5em spacing
-
- // We have to override oojs-ui's color, which uses
- // a very specific selector
- font-weight: normal !important;
- color: @color-base !important;
+ > .oo-ui-labelElement-label {
+ // Override link colour
+ color: @color-base;
// Set max-width so buttons are truncated
max-width: 15em;
-
- &-description {
- color: #666 !important;
- }
}
&-prioritized {
.mw-echo-ui-mixin-hover-opacity();
display: inline-block;
- padding: 0;
+ // Remove left padding up to icon, 11/14
+ margin-left: -0.78571429em;
}
&-dynamic-action {
- padding: 1.5em;
-
&:hover {
background-color: @background-color-base;
}
- .mw-echo-ui-menuItemWidget-content {
- &-description {
- padding-top: 1em;
- }
-
- span.oo-ui-labelElement-label {
- white-space: normal;
- overflow: visible;
- }
+ > .oo-ui-labelElement-label {
+ white-space: normal;
+ overflow: visible;
}
- }
- // Correct for when inside the popup menu
- .mw-echo-ui-actionMenuPopupWidget-menu & {
- display: block;
- padding: 0.7em;
-
- &:hover {
- background-color: #eaecf0;
+ &.oo-ui-iconElement > .oo-ui-iconElement-icon {
+ // Limit to single line height, 32/14
+ height: 2.28571em;
}
- &-icon {
- // The icon should be 15px, which is 1.1em. However,
- // ooui icons are surrounded by whitespace. In this case,
- // the whitespace is about 6px out of the original 24px
- // so the non-whitespace dimensions are 3/4 of the total.
- // So to compensate, the new size should be 1.1em*4/3 = 1.4em
- width: 1.4em !important;
- height: 1.4em !important;
- // Take into account the padding and subtract half of
- // the whitespace adjustment of the icon
- top: 0.7em - 0.3em / 2;
+ .mw-echo-ui-menuItemWidget-description {
+ color: #54595d;
+ display: block;
+ padding-top: 1em;
}
+ }
- &-content {
- margin-left: 1.4em + 0.7em; // Icon width + 0.7em spacing
- font-weight: bold !important;
-
- span.oo-ui-labelElement-label {
- line-height: 1em;
- }
- }
+ .mw-echo-ui-actionMenuPopupWidget-menu:hover {
+ background-color: #eaecf0;
}
}
diff --git a/Echo/modules/styles/mw.echo.ui.NotificationBadgeWidget.less b/Echo/modules/styles/mw.echo.ui.NotificationBadgeWidget.less
index 183edf91..00b9a2e9 100644
--- a/Echo/modules/styles/mw.echo.ui.NotificationBadgeWidget.less
+++ b/Echo/modules/styles/mw.echo.ui.NotificationBadgeWidget.less
@@ -4,33 +4,34 @@
.mw-echo-ui-notificationBadgeButtonPopupWidget {
position: relative;
- > .oo-ui-popupWidget {
- // #p-personal li has a font-size of 0.75em, but we want the
- // font size here to be exactly 0.875em, so we must override
- // the parent em sizing by dividing.
- font-size: 0.875em / 0.75em;
-
+ &-popup {
> .oo-ui-popupWidget-popup {
> .oo-ui-popupWidget-head {
- height: 3.5em;
- border-bottom: 1px solid #ddd;
+ .box-sizing( border-box );
+ height: 3.1428571em; // = 44px as result of 44 / 16 (font-size browser) / 0.875 (OOUI WikimediaUI theme font-size)
+ border-bottom: 1px solid #c8ccd1;
> .oo-ui-iconWidget {
- /* ( 3.5 - 1.875 ) / 2 = 0.8125 */
- margin: 0.8125em 0 0.8125em 1em;
float: left;
+ height: 100%;
+ margin: 0 0 0 1.1428571em; // = 16px as result of 16 / 16 / 0.875
opacity: @opacity-mid;
}
> .oo-ui-labelElement-label {
+ margin: 0 0 0 0.4761905em; // = 8px as result of ≈0.5714286 / 1.2 (element's font-size)
font-size: 1.2em;
- padding: 0.3em;
- margin-left: 0;
font-weight: bold;
+ line-height: 2.6190476em; // = 44px as result of ≈3.1428571 / 1.2 (element's font-size)
}
.mw-echo-ui-notificationsWidget-markAllReadButton {
- margin-right: 1em;
+ margin-top: 0.4285714em; // = 6px as result of 6 / 16 / 0.875
+ margin-right: 0.5714286em; // = 8px as result of 8 / 16 / 0.875
+
+ .oo-ui-buttonElement-button {
+ padding-right: 0;
+ }
}
}
@@ -46,6 +47,7 @@
// item widget styles so that the edge borders of the items are not duplicated
border-left: 0;
border-right: 0;
+
&:last-child {
border-bottom: 0;
}
@@ -53,11 +55,9 @@
}
> .oo-ui-popupWidget-footer {
- border-top: 1px solid #ddd;
width: 100%;
-
- // Override the margins that OOUI suddenly added to popup footers (T171302)
- margin: 0;
+ margin: 0; // Override OOUI's popup footer margins (T171302)
+ border-top: 1px solid #c8ccd1;
> .oo-ui-buttonGroupWidget {
display: block;
@@ -69,20 +69,19 @@
.oo-ui-buttonElement {
display: table-cell;
white-space: normal;
- font-weight: bold;
width: @notification-popup-width / 2;
.box-sizing( border-box );
&:last-child {
- border-left: 1px solid #ddd;
+ border-left: 1px solid #c8ccd1;
}
> .oo-ui-buttonElement-button {
display: block;
- line-height: 2.6em;
+ line-height: 3.1428571em;
margin: 0;
border: 0;
- padding: 0.5em;
+ padding: 0 0.5em;
}
}
}
diff --git a/Echo/modules/styles/mw.echo.ui.NotificationBadgeWidget.monobook.less b/Echo/modules/styles/mw.echo.ui.NotificationBadgeWidget.monobook.less
index 9f408922..3320c953 100644
--- a/Echo/modules/styles/mw.echo.ui.NotificationBadgeWidget.monobook.less
+++ b/Echo/modules/styles/mw.echo.ui.NotificationBadgeWidget.monobook.less
@@ -4,9 +4,15 @@
text-transform: none;
font-weight: normal;
- &,
- .oo-ui-popupWidget a.oo-ui-buttonElement-button {
- color: #333;
+ &-popup {
+ // #p-personal li has a font-size of 0.75em, but we want the
+ // font size here to be exactly 0.875em, so we must override
+ // the parent em sizing by dividing.
+ font-size: 0.875em / 0.75em;
+
+ a.oo-ui-buttonElement-button {
+ color: #333;
+ }
}
a {
diff --git a/Echo/modules/styles/mw.echo.ui.NotificationItemWidget.less b/Echo/modules/styles/mw.echo.ui.NotificationItemWidget.less
index ccb21bcd..23f8e5ad 100644
--- a/Echo/modules/styles/mw.echo.ui.NotificationItemWidget.less
+++ b/Echo/modules/styles/mw.echo.ui.NotificationItemWidget.less
@@ -3,13 +3,13 @@
@import '../echo.mixins';
.mw-echo-ui-notificationItemWidget {
- background-color: #f1f1f1;
+ background-color: @notification-item-background-read;
position: relative;
white-space: normal;
padding: 0.8em 1em 0.5em 1em;
.box-sizing( border-box );
- border: 1px solid #ddd;
+ border: 1px solid #c8ccd1;
border-bottom: 0;
&:hover {
@@ -17,7 +17,7 @@
}
&:last-child {
- border-bottom: 1px solid #ddd;
+ border-bottom: 1px solid #c8ccd1;
}
&-unread {
@@ -105,11 +105,15 @@
vertical-align: bottom;
}
- &-button,
- .mw-echo-ui-menuItemWidget-prioritized {
+ &-button {
margin-right: 1.2em;
}
+ .mw-echo-ui-menuItemWidget-prioritized {
+ // Option widget already has some right padding
+ margin-right: 0.6em;
+ }
+
&-menu {
.mw-echo-ui-mixin-hover-opacity();
display: table-cell;
diff --git a/Echo/modules/styles/mw.echo.ui.NotificationsInboxWidget.less b/Echo/modules/styles/mw.echo.ui.NotificationsInboxWidget.less
index 2b29b68c..618804b6 100644
--- a/Echo/modules/styles/mw.echo.ui.NotificationsInboxWidget.less
+++ b/Echo/modules/styles/mw.echo.ui.NotificationsInboxWidget.less
@@ -11,7 +11,15 @@
}
&-toolbarWrapper {
- height: 4em;
+ height: 3.5em;
+ position: -webkit-sticky;
+ position: sticky;
+ padding-top: 0.5em;
+ margin-top: -0.5em;
+ top: 0;
+ z-index: 2;
+ background: #fff;
+ box-shadow: 0 2px 0 0 rgba( 0, 0, 0, 0.1 );
}
&-cell {
@@ -42,16 +50,6 @@
width: 100%;
}
- &-affixed {
- position: fixed;
- z-index: 2;
- top: 0;
- background: #fff;
- padding-top: 0.5em;
- padding-bottom: 0.5em;
- box-shadow: 0 2px 0 0 rgba( 0, 0, 0, 0.1 );
- }
-
&-settings {
padding-left: 1em;
}
@@ -88,7 +86,7 @@
}
}
&-toolbarWrapper {
- height: 8em;
+ height: 7em;
}
}
}
diff --git a/Echo/modules/styles/mw.echo.ui.PageFilterWidget.less b/Echo/modules/styles/mw.echo.ui.PageFilterWidget.less
index 8f22f272..ec60bc63 100644
--- a/Echo/modules/styles/mw.echo.ui.PageFilterWidget.less
+++ b/Echo/modules/styles/mw.echo.ui.PageFilterWidget.less
@@ -3,6 +3,7 @@
margin-top: 2 * @specialpage-separation-unit;
&-title {
+ padding-left: 0.5em;
font-weight: bold;
}
}
diff --git a/Echo/modules/styles/mw.echo.ui.PageNotificationsOptionWidget.less b/Echo/modules/styles/mw.echo.ui.PageNotificationsOptionWidget.less
index f2556b5e..304c0feb 100644
--- a/Echo/modules/styles/mw.echo.ui.PageNotificationsOptionWidget.less
+++ b/Echo/modules/styles/mw.echo.ui.PageNotificationsOptionWidget.less
@@ -26,24 +26,54 @@
}
}
- &-icon {
- float: left;
+ &-table {
+ display: table;
+ width: 100%;
+ }
+
+ &-row {
+ display: table-row;
+ }
+
+ &-cell {
+ display: table-cell;
+ vertical-align: middle;
+ }
+
+ &.oo-ui-iconElement &-icon {
+ width: 1em;
+
.oo-ui-iconElement-icon {
- display: inline-block;
+ position: relative;
}
}
&-title {
- padding: 0.2em 0;
+ padding: 0;
+ width: 100%;
+ line-height: 1em;
+
+ &-label {
+ display: inline-block;
+ white-space: nowrap;
+ overflow: hidden;
+ text-overflow: ellipsis;
+ // Sidebar width - icon width - twice padding - counter average width
+ max-width: calc( @specialpage-sidebar-width - 1.865em - 2 * @specialpage-separation-unit - 2em );
+ }
}
&-count {
+ width: 1em;
+ }
+
+ &-label-count {
background-color: #eaecf0;
color: @grey-medium;
- float: right;
padding: 0.2em 0.5em;
margin-left: 0.5em;
border-radius: 2px;
+ white-space: nowrap;
.oo-ui-optionWidget-selected & {
background: none; // `background-color: transparent` would be the goto value, but IE 8-9 introduces a bug
diff --git a/Echo/modules/styles/mw.echo.ui.SpecialHelpMenuWidget.less b/Echo/modules/styles/mw.echo.ui.SpecialHelpMenuWidget.less
index 83b71770..de1fcd1b 100644
--- a/Echo/modules/styles/mw.echo.ui.SpecialHelpMenuWidget.less
+++ b/Echo/modules/styles/mw.echo.ui.SpecialHelpMenuWidget.less
@@ -1,41 +1,8 @@
@import '../echo.variables';
-.mw-echo-ui-specialHelpMenuWidget {
- .oo-ui-popupWidget-body {
- // Override clippable inline rules
- overflow-y: hidden !important;
- overflow-x: hidden !important;
- }
-
- &-markAllRead-label {
- &-title {
- display: block;
- }
-
- &-subtitle {
- display: block;
- color: @grey-light;
- margin-top: 0.2em;
- }
- }
-
- &-menu {
- .oo-ui-buttonWidget {
- display: block;
- padding: 0.5em;
- margin-right: 0;
-
- .oo-ui-labelElement-label {
- white-space: normal;
- // Width of the popup (300px) minus the
- // width of the icon (1.875em) minus the
- // padding of the button (0.5em * 2)
- width: ~'calc(300px - 1.875em - 1em)';
- }
-
- &:hover {
- background-color: #ddd;
- }
- }
+.mw-echo-ui-specialHelpMenuWidget-menu {
+ a.oo-ui-menuOptionWidget {
+ color: inherit;
+ text-decoration: inherit;
}
}
diff --git a/Echo/modules/styles/mw.echo.ui.SubGroupListWidget.less b/Echo/modules/styles/mw.echo.ui.SubGroupListWidget.less
index f537c581..083efbfa 100644
--- a/Echo/modules/styles/mw.echo.ui.SubGroupListWidget.less
+++ b/Echo/modules/styles/mw.echo.ui.SubGroupListWidget.less
@@ -13,10 +13,14 @@
&-row {
display: table-row;
- &-title {
+ &-cell {
display: table-cell;
+ }
+
+ &-title {
width: 100%;
vertical-align: bottom;
+ white-space: nowrap;
.oo-ui-labelElement-label {
white-space: normal;
@@ -24,7 +28,6 @@
}
&-markAllReadButton {
- display: table-cell;
text-align: right;
}
}
diff --git a/Echo/modules/styles/mw.echo.ui.overlay.minerva.less b/Echo/modules/styles/mw.echo.ui.overlay.minerva.less
index 9007ab67..27177f7c 100644
--- a/Echo/modules/styles/mw.echo.ui.overlay.minerva.less
+++ b/Echo/modules/styles/mw.echo.ui.overlay.minerva.less
@@ -10,7 +10,7 @@
padding: 0.5em;
font-size: 1.5em;
box-shadow: none;
- border: 1px solid #666;
+ border: 1px solid #54595d;
// Override the positioning of the menu
// so it is "stuck" on the bottom of the
// notification overlay panel
diff --git a/Echo/modules/styles/mw.echo.ui.overlay.monobook.less b/Echo/modules/styles/mw.echo.ui.overlay.monobook.less
index da3e7d30..280a2250 100644
--- a/Echo/modules/styles/mw.echo.ui.overlay.monobook.less
+++ b/Echo/modules/styles/mw.echo.ui.overlay.monobook.less
@@ -2,7 +2,6 @@
// We need the overlay to be adjusted for:
// #globalWrapper 127%
// .pBody 95%
- // .portlet ul 95%
// .mw-echo-ui-notificationBadgeButtonPopupWidget > .oo-ui-popupWidget 0.875/0.75em
- font-size: 1.27 * 0.95 * 0.95 * 0.875 / 0.75 em;
+ font-size: 1.27 * 0.95 * 0.875 / 0.75em;
}
diff --git a/Echo/modules/ui/mw.echo.ui.ActionMenuPopupWidget.js b/Echo/modules/ui/mw.echo.ui.ActionMenuPopupWidget.js
index 70c07950..9d0a81de 100644
--- a/Echo/modules/ui/mw.echo.ui.ActionMenuPopupWidget.js
+++ b/Echo/modules/ui/mw.echo.ui.ActionMenuPopupWidget.js
@@ -24,7 +24,7 @@
config = config || {};
// Parent constructor
- mw.echo.ui.ActionMenuPopupWidget.parent.call( this, config );
+ mw.echo.ui.ActionMenuPopupWidget.super.call( this, config );
this.$overlay = config.$overlay || this.$element;
diff --git a/Echo/modules/ui/mw.echo.ui.BadgeLinkWidget.js b/Echo/modules/ui/mw.echo.ui.BadgeLinkWidget.js
index 8339e6b4..9eb67e6e 100644
--- a/Echo/modules/ui/mw.echo.ui.BadgeLinkWidget.js
+++ b/Echo/modules/ui/mw.echo.ui.BadgeLinkWidget.js
@@ -10,13 +10,14 @@
* @cfg {string} [type] The notification types this button represents;
* 'message', 'alert' or 'all'
* @cfg {string} [href] URL the badge links to
+ * @cfg {string} [numItems=0] The number of items that are in the button display
* @cfg {string} [convertedNumber] A converted version of the initial count
*/
mw.echo.ui.BadgeLinkWidget = function MwEchoUiBadgeLinkWidget( config ) {
config = config || {};
// Parent constructor
- mw.echo.ui.BadgeLinkWidget.parent.call( this, config );
+ mw.echo.ui.BadgeLinkWidget.super.call( this, config );
// Mixin constructors
OO.ui.mixin.LabelElement.call( this, $.extend( { $label: this.$element }, config ) );
@@ -29,7 +30,7 @@
this.count = 0;
this.type = config.type || 'alert';
- this.setCount( config.numItems, config.convertedNumber );
+ this.setCount( config.numItems || 0, config.convertedNumber );
if ( config.href !== undefined && OO.ui.isSafeUrl( config.href ) ) {
this.$element.attr( 'href', config.href );
diff --git a/Echo/modules/ui/mw.echo.ui.BundleNotificationItemWidget.js b/Echo/modules/ui/mw.echo.ui.BundleNotificationItemWidget.js
index aa98aa43..bdd07e06 100644
--- a/Echo/modules/ui/mw.echo.ui.BundleNotificationItemWidget.js
+++ b/Echo/modules/ui/mw.echo.ui.BundleNotificationItemWidget.js
@@ -12,17 +12,12 @@
* @param {mw.echo.dm.BundleNotificationItem} model Notification group model
* @param {Object} [config] Configuration object
* @cfg {boolean} [animateSorting=false] Animate the sorting of items
- * @cfg {jQuery} [$overlay] A jQuery element functioning as an overlay
- * for popups.
*/
mw.echo.ui.BundleNotificationItemWidget = function MwEchoUiBundleNotificationItemWidget( controller, model, config ) {
config = config || {};
// Parent constructor
- mw.echo.ui.BundleNotificationItemWidget.parent.call( this, controller, model, config );
-
- this.controller = controller;
- this.model = model;
+ mw.echo.ui.BundleNotificationItemWidget.super.call( this, controller, model, config );
this.toggleMarkAsReadButtons( true );
diff --git a/Echo/modules/ui/mw.echo.ui.ClonedNotificationItemWidget.js b/Echo/modules/ui/mw.echo.ui.ClonedNotificationItemWidget.js
index c2115c7e..37046c7e 100644
--- a/Echo/modules/ui/mw.echo.ui.ClonedNotificationItemWidget.js
+++ b/Echo/modules/ui/mw.echo.ui.ClonedNotificationItemWidget.js
@@ -18,8 +18,8 @@
mw.echo.ui.ClonedNotificationItemWidget = function MwEchoUiClonedNotificationItemWidget( $element, config ) {
config = config || {};
- // Parent
- mw.echo.ui.ClonedNotificationItemWidget.parent.call( this, config );
+ // Parent constructor
+ mw.echo.ui.ClonedNotificationItemWidget.super.call( this, config );
this.$element = $element;
this.timestamp = config.timestamp || moment.utc().format( 'YYYY-MM-DD[T]HH:mm:ss[Z]' );
diff --git a/Echo/modules/ui/mw.echo.ui.ConfirmationPopupWidget.js b/Echo/modules/ui/mw.echo.ui.ConfirmationPopupWidget.js
index 840366ca..e44354a8 100644
--- a/Echo/modules/ui/mw.echo.ui.ConfirmationPopupWidget.js
+++ b/Echo/modules/ui/mw.echo.ui.ConfirmationPopupWidget.js
@@ -2,12 +2,10 @@
/**
* Confirmation overlay widget, especially for mobile display.
* The behavior of this widget is to appear with a given confirmation
- * message and then disapear after a given interval.
+ * message and then disappear after a given interval.
*
* @class
* @extends OO.ui.Widget
- * @mixins OO.ui.mixin.LabelElement
- * @mixins OO.ui.mixin.IconElement
*
* @constructor
* @param {Object} [config] Configuration object
@@ -18,12 +16,10 @@
config = config || {};
// Parent constructor
- mw.echo.ui.ConfirmationPopupWidget.parent.call( this, config );
-
- // Mixin constructor
- OO.ui.mixin.LabelElement.call( this, config );
- OO.ui.mixin.IconElement.call( this, $.extend( { icon: 'doubleCheck' }, config ) );
+ mw.echo.ui.ConfirmationPopupWidget.super.call( this, config );
+ this.labelWidget = new OO.ui.LabelWidget( config );
+ this.iconWidget = new OO.ui.IconWidget( $.extend( { icon: 'checkAll' }, config ) );
this.interval = config.interval || 2000;
this.$element
@@ -31,7 +27,7 @@
.append(
$( '<div>' )
.addClass( 'mw-echo-ui-confirmationPopupWidget-popup' )
- .append( this.$icon, this.$label )
+ .append( this.iconWidget.$element, this.labelWidget.$element )
)
// We're using explicit hide here because the widget uses
// animated fadeOut
@@ -41,8 +37,6 @@
/* Initialization */
OO.inheritClass( mw.echo.ui.ConfirmationPopupWidget, OO.ui.Widget );
- OO.mixinClass( mw.echo.ui.ConfirmationPopupWidget, OO.ui.mixin.LabelElement );
- OO.mixinClass( mw.echo.ui.ConfirmationPopupWidget, OO.ui.mixin.IconElement );
/**
* Show the widget and then animate its fade out.
@@ -51,7 +45,7 @@
// OOUI removes the oo-ui-image-invert class when it is initialized
// without explicit flag classes, so we have to re-add this when we
// display the icon for the icon to be inverted
- this.$icon.addClass( 'oo-ui-image-invert' );
+ this.iconWidget.$element.addClass( 'oo-ui-image-invert' );
this.$element.show();
setTimeout( this.hide.bind( this ), this.interval );
};
@@ -64,4 +58,14 @@
mw.echo.ui.ConfirmationPopupWidget.prototype.hide = function () {
this.$element.fadeOut();
};
+
+ /**
+ * Delegate to labelWidget.setLabel()
+ *
+ * @param {jQuery|string|OO.ui.HtmlSnippet|Function|null} label Label nodes; text; a function that returns nodes or
+ * text; or null for no label
+ */
+ mw.echo.ui.ConfirmationPopupWidget.prototype.setLabel = function ( label ) {
+ this.labelWidget.setLabel( label );
+ };
}( mediaWiki, jQuery ) );
diff --git a/Echo/modules/ui/mw.echo.ui.CrossWikiNotificationItemWidget.js b/Echo/modules/ui/mw.echo.ui.CrossWikiNotificationItemWidget.js
index 64dff510..d96a5a65 100644
--- a/Echo/modules/ui/mw.echo.ui.CrossWikiNotificationItemWidget.js
+++ b/Echo/modules/ui/mw.echo.ui.CrossWikiNotificationItemWidget.js
@@ -17,20 +17,15 @@
* @param {mw.echo.dm.CrossWikiNotificationItem} model Notification group model
* @param {Object} [config] Configuration object
* @cfg {boolean} [animateSorting=false] Animate the sorting of items
- * @cfg {jQuery} [$overlay] A jQuery element functioning as an overlay
- * for popups.
*/
mw.echo.ui.CrossWikiNotificationItemWidget = function MwEchoUiCrossWikiNotificationItemWidget( controller, model, config ) {
config = config || {};
// Parent constructor
- mw.echo.ui.CrossWikiNotificationItemWidget.parent.call( this, controller, model, config );
+ mw.echo.ui.CrossWikiNotificationItemWidget.super.call( this, controller, model, config );
// Mixin constructors
OO.ui.mixin.PendingElement.call( this, config );
- this.controller = controller;
- this.model = model;
-
// In cross-wiki groups we only have 'mark as read'
this.toggleMarkAsReadButtons( true );
@@ -146,8 +141,8 @@
this.controller.getTypeString() // The type of the list in general
);
- // Parent
- return mw.echo.ui.CrossWikiNotificationItemWidget.parent.prototype.onMarkAsReadButtonClick.call( this );
+ // Parent method
+ return mw.echo.ui.CrossWikiNotificationItemWidget.super.prototype.onMarkAsReadButtonClick.call( this );
};
/**
@@ -279,8 +274,7 @@
this.toggleListDisplay( true );
// Query all sources
this.controller.fetchCrossWikiNotifications()
- .then(
- null,
+ .catch(
function ( result ) {
var loginPageTitle = mw.Title.newFromText( 'Special:UserLogin' );
// If failure, check if the failure is due to login
diff --git a/Echo/modules/ui/mw.echo.ui.CrossWikiUnreadFilterWidget.js b/Echo/modules/ui/mw.echo.ui.CrossWikiUnreadFilterWidget.js
index fe6d13f2..02807150 100644
--- a/Echo/modules/ui/mw.echo.ui.CrossWikiUnreadFilterWidget.js
+++ b/Echo/modules/ui/mw.echo.ui.CrossWikiUnreadFilterWidget.js
@@ -16,8 +16,8 @@
config = config || {};
- // Parent
- mw.echo.ui.CrossWikiUnreadFilterWidget.parent.call( this,
+ // Parent constructor
+ mw.echo.ui.CrossWikiUnreadFilterWidget.super.call( this,
// Sorting callback
function ( a, b ) {
var diff;
@@ -159,10 +159,10 @@
this.addItems( widgets );
// Select the current source
- selectedWidget = this.getItemFromData( selectedSource );
+ selectedWidget = this.findItemFromData( selectedSource );
if ( selectedPage ) {
// Select a specific page
- item = selectedWidget.getItemFromData( selectedPage );
+ item = selectedWidget.findItemFromData( selectedPage );
} else {
// The wiki title is selected
item = selectedWidget.getTitleItem();
diff --git a/Echo/modules/ui/mw.echo.ui.DatedNotificationsWidget.js b/Echo/modules/ui/mw.echo.ui.DatedNotificationsWidget.js
index fb015c33..09c5c5c9 100644
--- a/Echo/modules/ui/mw.echo.ui.DatedNotificationsWidget.js
+++ b/Echo/modules/ui/mw.echo.ui.DatedNotificationsWidget.js
@@ -17,7 +17,7 @@
config = config || {};
// Parent constructor
- mw.echo.ui.DatedNotificationsWidget.parent.call( this, config );
+ mw.echo.ui.DatedNotificationsWidget.super.call( this, config );
// Mixin constructors
OO.ui.mixin.PendingElement.call( this, config );
@@ -120,6 +120,11 @@
groupWidgets.push( subgroupWidget );
}
+ this.getList().getItems().forEach( function ( widget ) {
+ // Destroy all available widgets
+ widget.destroy();
+ } );
+
// Reset the list and re-add the items
this.getList().clearItems();
this.getList().addItems( groupWidgets );
diff --git a/Echo/modules/ui/mw.echo.ui.DatedSubGroupListWidget.js b/Echo/modules/ui/mw.echo.ui.DatedSubGroupListWidget.js
index 8196e0b8..4cbbc08a 100644
--- a/Echo/modules/ui/mw.echo.ui.DatedSubGroupListWidget.js
+++ b/Echo/modules/ui/mw.echo.ui.DatedSubGroupListWidget.js
@@ -22,10 +22,8 @@
.addClass( 'mw-echo-ui-datedSubGroupListWidget-title' )
.append( $primaryDate, $secondaryDate );
- config = config || {};
-
// Parent constructor
- mw.echo.ui.DatedSubGroupListWidget.parent.call( this, controller, listModel, $.extend( {
+ mw.echo.ui.DatedSubGroupListWidget.super.call( this, controller, listModel, $.extend( {
// Since this widget is defined as a dated list, we sort
// its items according to timestamp without consideration
// of read state or foreignness.
diff --git a/Echo/modules/ui/mw.echo.ui.FooterNoticeWidget.js b/Echo/modules/ui/mw.echo.ui.FooterNoticeWidget.js
index f61c87cf..185c3aec 100644
--- a/Echo/modules/ui/mw.echo.ui.FooterNoticeWidget.js
+++ b/Echo/modules/ui/mw.echo.ui.FooterNoticeWidget.js
@@ -8,7 +8,6 @@
* @constructor
* @param {Object} [config] Configuration object
* @cfg {string} [iconUrl] The source URL of the feedback icon
- * @cfg {string} [url] The URL for the survey
* @cfg {string} [message] The message to display, in HTML or jQuery object.
* The message should already be formatted properly.
*/
@@ -20,7 +19,7 @@
config = config || {};
// Parent constructor
- mw.echo.ui.FooterNoticeWidget.parent.call( this, config );
+ mw.echo.ui.FooterNoticeWidget.super.call( this, config );
if ( config.iconUrl ) {
$icon = $( '<div>' )
diff --git a/Echo/modules/ui/mw.echo.ui.MenuItemWidget.js b/Echo/modules/ui/mw.echo.ui.MenuItemWidget.js
index aa1219df..2a7785e4 100644
--- a/Echo/modules/ui/mw.echo.ui.MenuItemWidget.js
+++ b/Echo/modules/ui/mw.echo.ui.MenuItemWidget.js
@@ -1,30 +1,35 @@
-( function ( mw, $ ) {
+( function ( mw ) {
/**
* Secondary menu item
*
* @class
- * @extends OO.ui.Widget
- * @mixins OO.ui.mixin.IconElement
+ * @extends OO.ui.DecoratedOptionWidget
* @mixins OO.ui.mixin.PendingElement
*
* @constructor
* @param {Object} [config] Configuration object
+ * @cfg {string} [type] Optional action type. Used to note a dynamic action, by setting it to 'dynamic-action'
+ * @cfg {string} [url] Item URL for links
+ * @cfg {string} [tooltip] Tooltip for links
* @cfg {string} [description] An optional description for the item
- * @cfg {string} [icon] An optional icon for the item
+ * @cfg {Object} [actionData] Action data
* @cfg {boolean} [prioritized] The item is prioritized outside the
* popup menu.
*/
mw.echo.ui.MenuItemWidget = function MwEchoUiMenuItemWidget( config ) {
config = config || {};
+ this.dynamic = config.type === 'dynamic-action';
+ // Needs to be set before parent constructor is called
+ // as it changes the value of getTagName.
+ this.isLink = config.url && !this.isDynamicAction();
+
// Parent constructor
- mw.echo.ui.MenuItemWidget.parent.call( this, config );
+ mw.echo.ui.MenuItemWidget.super.call( this, config );
// Mixin constructors
- OO.ui.mixin.IconElement.call( this, config );
OO.ui.mixin.PendingElement.call( this, config );
- this.dynamic = config.type === 'dynamic-action';
this.prioritized = !!config.prioritized;
this.messages = this.isDynamicAction() ?
config.actionData.messages :
@@ -34,49 +39,30 @@
// Optional description
this.descriptionLabel = new OO.ui.LabelWidget( {
- classes: [ 'mw-echo-ui-menuItemWidget-content-description' ],
+ classes: [ 'mw-echo-ui-menuItemWidget-description' ],
label: config.description || ''
} );
this.descriptionLabel.toggle( !this.prioritized && config.description );
+ this.$label.append( this.descriptionLabel.$element );
+
// Build the option
this.$element
.addClass( 'mw-echo-ui-menuItemWidget' )
.toggleClass( 'mw-echo-ui-menuItemWidget-prioritized', this.prioritized )
- .toggleClass( 'mw-echo-ui-menuItemWidget-dynamic-action', this.isDynamicAction() )
- .append(
- this.$icon
- .addClass( 'mw-echo-ui-menuItemWidget-icon' ),
- $( '<div>' )
- .addClass( 'mw-echo-ui-menuItemWidget-content' )
- .append(
- this.$label
- .addClass( 'mw-echo-ui-menuItemWidget-content-label' ),
- this.descriptionLabel.$element
- )
- );
-
- if ( config.url && !this.isDynamicAction() ) {
- this.hasLink = true;
- this.$element.contents()
- .wrapAll(
- // HACK: Wrap the entire item with a link that takes
- // the user to the primary url. This is not perfect,
- // but it makes the behavior native to the browser rather
- // than us listening to click events and opening new
- // windows.
- $( '<a>' )
- .addClass( 'mw-echo-ui-menuItemWidget-linkWrapper' )
- .attr( 'href', config.url )
- .attr( 'title', config.tooltip )
- );
+ .toggleClass( 'mw-echo-ui-menuItemWidget-dynamic-action', this.isDynamicAction() );
+
+ if ( this.isLink ) {
+ this.$element.attr( {
+ href: config.url,
+ title: config.tooltip
+ } );
}
};
/* Initialization */
- OO.inheritClass( mw.echo.ui.MenuItemWidget, OO.ui.OptionWidget );
- OO.mixinClass( mw.echo.ui.MenuItemWidget, OO.ui.mixin.IconElement );
+ OO.inheritClass( mw.echo.ui.MenuItemWidget, OO.ui.DecoratedOptionWidget );
OO.mixinClass( mw.echo.ui.MenuItemWidget, OO.ui.mixin.PendingElement );
/* Static Properties */
@@ -86,11 +72,15 @@
/* Methods */
+ mw.echo.ui.MenuItemWidget.prototype.getTagName = function () {
+ return this.isLink ? 'a' : 'div';
+ };
+
mw.echo.ui.MenuItemWidget.prototype.isSelectable = function () {
// If we have a link force selectability to false, otherwise defer to parent method
// Without a link (for dynamic actions or specific internal actions) we need this widget
// to be selectable so it emits the 'choose' event
- return !this.hasLink && mw.echo.ui.MenuItemWidget.parent.prototype.isSelectable.apply( this, arguments );
+ return !this.isLink && mw.echo.ui.MenuItemWidget.super.prototype.isSelectable.apply( this, arguments );
};
/**
@@ -134,4 +124,4 @@
mw.echo.ui.MenuItemWidget.prototype.isDynamicAction = function () {
return this.dynamic;
};
-}( mediaWiki, jQuery ) );
+}( mediaWiki ) );
diff --git a/Echo/modules/ui/mw.echo.ui.NotificationBadgeWidget.js b/Echo/modules/ui/mw.echo.ui.NotificationBadgeWidget.js
index 1bf9981e..a07fa118 100644
--- a/Echo/modules/ui/mw.echo.ui.NotificationBadgeWidget.js
+++ b/Echo/modules/ui/mw.echo.ui.NotificationBadgeWidget.js
@@ -8,11 +8,13 @@
* @constructor
* @param {mw.echo.Controller} controller Echo notifications controller
* @param {mw.echo.dm.ModelManager} manager Model manager
- * @param {Object} [config] Configuration object
+ * @param {Object} links Links object, containing 'notifications' and 'preferences' URLs
+ * @param {Object} config Configuration object
* @cfg {string|string[]} [type='message'] The type or array of types of
* notifications that are in this model. They can be 'alert', 'message' or
* an array of both. Defaults to 'message'
* @cfg {number} [numItems=0] The number of items that are in the button display
+ * @cfg {string} [convertedNumber] A converted version of the initial count
* @cfg {string} [badgeLabel=0] The initial label for the badge. This is the
* formatted version of the number of items in the badge.
* @cfg {boolean} [hasUnseen=false] Whether there are unseen items
@@ -22,15 +24,14 @@
* @cfg {jQuery} [$overlay] A jQuery element functioning as an overlay
* for popups.
*/
- mw.echo.ui.NotificationBadgeWidget = function MwEchoUiNotificationBadgeButtonPopupWidget( controller, manager, config ) {
+ mw.echo.ui.NotificationBadgeWidget = function MwEchoUiNotificationBadgeButtonPopupWidget( controller, manager, links, config ) {
var buttonFlags, allNotificationsButton, preferencesButton, footerButtonGroupWidget, $footer,
- notice, adjustedTypeString;
+ adjustedTypeString;
config = config || {};
- config.links = config.links || {};
// Parent constructor
- mw.echo.ui.NotificationBadgeWidget.parent.call( this, config );
+ mw.echo.ui.NotificationBadgeWidget.super.call( this, config );
// Mixin constructors
OO.ui.mixin.PendingElement.call( this, config );
@@ -85,14 +86,14 @@
allNotificationsButton = new OO.ui.ButtonWidget( {
icon: 'next',
label: mw.msg( 'echo-overlay-link' ),
- href: config.links.notifications,
+ href: links.notifications,
classes: [ 'mw-echo-ui-notificationBadgeButtonPopupWidget-footer-allnotifs' ]
} );
preferencesButton = new OO.ui.ButtonWidget( {
- icon: 'advanced',
+ icon: 'settings',
label: mw.msg( 'mypreferences' ),
- href: config.links.preferences,
+ href: links.preferences,
classes: [ 'mw-echo-ui-notificationBadgeButtonPopupWidget-footer-preferences' ]
} );
@@ -104,34 +105,15 @@
.addClass( 'mw-echo-ui-notificationBadgeButtonPopupWidget-footer' )
.append( footerButtonGroupWidget.$element );
- // Footer notice
- if (
- mw.config.get( 'wgEchoShowSpecialPageInvitation' ) &&
- !mw.user.options.get( 'echo-dismiss-special-page-invitation' )
- ) {
- notice = new mw.echo.ui.FooterNoticeWidget( {
- // This is probably not the right way of doing this
- iconUrl: mw.config.get( 'wgExtensionAssetsPath' ) + '/Echo/modules/icons/feedback.svg',
- message: mw.message(
- 'echo-popup-footer-special-page-invitation',
- // Text
- mw.msg( 'echo-popup-footer-special-page-invitation-link' ),
- // Link
- mw.util.getUrl( 'Special:Notifications' )
- ).parse()
- } );
- // Event
- notice.connect( this, { dismiss: 'onFooterNoticeDismiss' } );
- // Prepend to the footer
- $footer.prepend( notice.$element );
- }
-
this.popup = new OO.ui.PopupWidget( {
$content: this.notificationsWidget.$element,
$footer: $footer,
width: config.popupWidth || 500,
+ hideWhenOutOfView: false,
+ autoFlip: false,
autoClose: true,
containerPadding: 20,
+ $floatableContainer: this.$element,
// Also ignore clicks from the nested action menu items, that
// actually exist in the overlay
$autoCloseIgnore: this.$element.add( this.$menuOverlay ),
@@ -145,6 +127,9 @@
),
classes: [ 'mw-echo-ui-notificationBadgeButtonPopupWidget-popup' ]
} );
+ // Append the popup to the overlay
+ this.$overlay.append( this.popup.$element );
+
// HACK: Add an icon to the popup head label
this.popupHeadIcon = new OO.ui.IconWidget( { icon: config.badgeIcon } );
this.popup.$head.prepend( this.popupHeadIcon.$element );
@@ -186,10 +171,7 @@
'mw-echo-ui-notificationBadgeButtonPopupWidget ' +
'mw-echo-ui-notificationBadgeButtonPopupWidget-' + adjustedTypeString
)
- .append(
- this.badgeButton.$element,
- this.popup.$element
- );
+ .append( this.badgeButton.$element );
};
/* Initialization */
@@ -225,16 +207,6 @@
this.popup.clip();
};
- mw.echo.ui.NotificationBadgeWidget.prototype.onFooterNoticeDismiss = function () {
- // Clip again to recalculate height
- this.popup.clip();
-
- // Save the preference in general
- new mw.Api().saveOption( 'echo-dismiss-special-page-invitation', 1 );
- // Save the preference for this session
- mw.user.options.set( 'echo-dismiss-special-page-invitation', 1 );
- };
-
/**
* Respond to badge button click
*/
diff --git a/Echo/modules/ui/mw.echo.ui.NotificationItemWidget.js b/Echo/modules/ui/mw.echo.ui.NotificationItemWidget.js
index 9dbebae4..fce6fb52 100644
--- a/Echo/modules/ui/mw.echo.ui.NotificationItemWidget.js
+++ b/Echo/modules/ui/mw.echo.ui.NotificationItemWidget.js
@@ -22,8 +22,8 @@
config = config || {};
- // Parent
- mw.echo.ui.NotificationItemWidget.parent.call( this, $.extend( { data: model.getId() }, config ) );
+ // Parent constructor
+ mw.echo.ui.NotificationItemWidget.super.call( this, $.extend( { data: model.getId() }, config ) );
this.controller = controller;
this.model = model;
@@ -130,7 +130,18 @@
// prioritized explicitly, *except* for items inside a bundle
// (where all actions are inside the menu) or there are more than
// two prioritized actions (all others go into the menu)
- isOutsideMenu = !this.bundle && urlObj.prioritized && outsideMenuItemCounter < mw.echo.config.maxPrioritizedActions;
+ isOutsideMenu = !this.bundle &&
+ (
+ (
+ // Make sure we don't have too many prioritized items
+ urlObj.prioritized &&
+ outsideMenuItemCounter < mw.echo.config.maxPrioritizedActions
+ ) ||
+ // If the number of total items are equal to or less than the
+ // maximum allowed, they all go outside the menu
+ // mw.echo.config.maxPrioritizedActions is 2 on desktop and 1 on mobile.
+ secondaryUrls.length <= mw.echo.config.maxPrioritizedActions
+ );
linkButton = new mw.echo.ui.MenuItemWidget( {
type: urlObj.type,
diff --git a/Echo/modules/ui/mw.echo.ui.NotificationsInboxWidget.js b/Echo/modules/ui/mw.echo.ui.NotificationsInboxWidget.js
index 8c29cb76..2c1a93e7 100644
--- a/Echo/modules/ui/mw.echo.ui.NotificationsInboxWidget.js
+++ b/Echo/modules/ui/mw.echo.ui.NotificationsInboxWidget.js
@@ -11,6 +11,8 @@
* @param {mw.echo.dm.ModelManager} manager Model manager
* @param {Object} [config] Configuration object
* @cfg {number} [limit=25] Limit the number of notifications per page
+ * @cfg {string} [helpLink] Link to help page
+ * @cfg {string} [prefLink] Link to preferences page
* @cfg {jQuery} [$overlay] An overlay for the popup menus
*/
mw.echo.ui.NotificationsInboxWidget = function MwEchoUiNotificationsInboxWidget( controller, manager, config ) {
@@ -18,8 +20,8 @@
config = config || {};
- // Parent
- mw.echo.ui.NotificationsInboxWidget.parent.call( this, config );
+ // Parent constructor
+ mw.echo.ui.NotificationsInboxWidget.super.call( this, config );
// Mixin constructors
OO.ui.mixin.PendingElement.call( this, config );
@@ -67,7 +69,8 @@
{
framed: true,
helpLink: config.helpLink,
- prefLink: config.prefLink
+ prefLink: config.prefLink,
+ $overlay: this.$overlay
}
);
@@ -92,7 +95,6 @@
this.topPaginationWidget.connect( this, { change: 'populateNotifications' } );
this.bottomPaginationWidget.connect( this, { change: 'populateNotifications' } );
this.settingsMenu.connect( this, { markAllRead: 'onSettingsMarkAllRead' } );
- $( window ).on( 'scroll resize', this.onWindowScroll.bind( this ) );
this.topPaginationWidget.setDisabled( true );
this.bottomPaginationWidget.setDisabled( true );
@@ -104,21 +106,21 @@
$( '<div>' )
.addClass( 'mw-echo-ui-notificationsInboxWidget-row' )
.append(
- $( '<div>' )
- .addClass( 'mw-echo-ui-notificationsInboxWidget-main-toolbar-readState' )
- .addClass( 'mw-echo-ui-notificationsInboxWidget-cell' )
- .append( this.readStateSelectWidget.$element ),
- $( '<div>' )
- .addClass( 'mw-echo-ui-notificationsInboxWidget-cell-placeholder' ),
- $( '<div>' )
- .addClass( 'mw-echo-ui-notificationsInboxWidget-main-toolbar-pagination' )
- .addClass( 'mw-echo-ui-notificationsInboxWidget-cell' )
- .append( this.topPaginationWidget.$element ),
- $( '<div>' )
- .addClass( 'mw-echo-ui-notificationsInboxWidget-main-toolbar-settings' )
- .addClass( 'mw-echo-ui-notificationsInboxWidget-cell' )
- .append( this.settingsMenu.$element )
- )
+ $( '<div>' )
+ .addClass( 'mw-echo-ui-notificationsInboxWidget-main-toolbar-readState' )
+ .addClass( 'mw-echo-ui-notificationsInboxWidget-cell' )
+ .append( this.readStateSelectWidget.$element ),
+ $( '<div>' )
+ .addClass( 'mw-echo-ui-notificationsInboxWidget-cell-placeholder' ),
+ $( '<div>' )
+ .addClass( 'mw-echo-ui-notificationsInboxWidget-main-toolbar-pagination' )
+ .addClass( 'mw-echo-ui-notificationsInboxWidget-cell' )
+ .append( this.topPaginationWidget.$element ),
+ $( '<div>' )
+ .addClass( 'mw-echo-ui-notificationsInboxWidget-main-toolbar-settings' )
+ .addClass( 'mw-echo-ui-notificationsInboxWidget-cell' )
+ .append( this.settingsMenu.$element )
+ )
);
this.$toolbarWrapper =
@@ -133,9 +135,9 @@
$main = $( '<div>' )
.addClass( 'mw-echo-ui-notificationsInboxWidget-main' )
.append(
- this.$toolbarWrapper,
- this.noticeMessageWidget.$element,
- this.datedListWidget.$element
+ this.$toolbarWrapper,
+ this.noticeMessageWidget.$element,
+ this.datedListWidget.$element
);
this.$element
@@ -169,7 +171,7 @@
*/
mw.echo.ui.NotificationsInboxWidget.prototype.updateReadStateSelectWidget = function () {
this.readStateSelectWidget
- .getItemFromData( this.manager.getFiltersModel().getReadState() )
+ .findItemFromData( this.manager.getFiltersModel().getReadState() )
.setSelected( true );
};
@@ -292,7 +294,7 @@
};
/**
- * Reset the the text of the error message that displays in place of the list
+ * Reset the text of the error message that displays in place of the list
* in case the list is empty.
*/
mw.echo.ui.NotificationsInboxWidget.prototype.resetMessageLabel = function () {
@@ -321,27 +323,4 @@
this.datedListWidget.toggle( !displayMessage );
};
- /**
- * Respond to window scroll
- */
- mw.echo.ui.NotificationsInboxWidget.prototype.onWindowScroll = function () {
- var scrollTop = $( window ).scrollTop(),
- isScrolledDown = scrollTop >= this.$topToolbar.parent().offset().top;
-
- // Fix the widget to the top when we scroll down below its original
- // location
- this.$topToolbar.toggleClass(
- 'mw-echo-ui-notificationsInboxWidget-main-toolbar-affixed',
- isScrolledDown
- );
- if ( isScrolledDown ) {
- // Copy width from parent, width: 100% doesn't do what we want when
- // position: fixed; is set
- this.$topToolbar.css( 'width', this.$topToolbar.parent().width() );
- } else {
- // Unset width when we no longer have position: fixed;
- this.$topToolbar.css( 'width', '' );
- }
- };
-
}( jQuery, mediaWiki ) );
diff --git a/Echo/modules/ui/mw.echo.ui.NotificationsListWidget.js b/Echo/modules/ui/mw.echo.ui.NotificationsListWidget.js
index 14348d5f..de08252e 100644
--- a/Echo/modules/ui/mw.echo.ui.NotificationsListWidget.js
+++ b/Echo/modules/ui/mw.echo.ui.NotificationsListWidget.js
@@ -11,13 +11,15 @@
* @param {mw.echo.dm.ModelManager} manager Model manager
* @param {Object} [config] Configuration object
* marked as read when they are seen.
+ * @cfg {string} [timestamp=0] A timestamp representing the latest item in
+ * the list.
* @cfg {jQuery} [$overlay] A jQuery element functioning as an overlay
* for popups.
*/
mw.echo.ui.NotificationsListWidget = function MwEchoUiNotificationsListWidget( controller, manager, config ) {
config = config || {};
// Parent constructor
- mw.echo.ui.NotificationsListWidget.parent.call(
+ mw.echo.ui.NotificationsListWidget.super.call(
this,
// Sorting callback
function ( a, b ) {
diff --git a/Echo/modules/ui/mw.echo.ui.NotificationsWrapper.js b/Echo/modules/ui/mw.echo.ui.NotificationsWrapper.js
index 8ea1405a..45ceaa8d 100644
--- a/Echo/modules/ui/mw.echo.ui.NotificationsWrapper.js
+++ b/Echo/modules/ui/mw.echo.ui.NotificationsWrapper.js
@@ -10,12 +10,14 @@
* @param {mw.echo.Controller} controller Echo controller
* @param {mw.echo.dm.ModelManager} model Notifications model manager
* @param {Object} [config] Configuration object
+ * @cfg {jQuery} [$overlay] A jQuery element functioning as an overlay
+ * for popups.
*/
mw.echo.ui.NotificationsWrapper = function MwEchoUiNotificationsWrapper( controller, model, config ) {
config = config || {};
// Parent constructor
- mw.echo.ui.NotificationsWrapper.parent.call( this, config );
+ mw.echo.ui.NotificationsWrapper.super.call( this, config );
// Mixin constructor
OO.ui.mixin.PendingElement.call( this, config );
@@ -65,7 +67,7 @@
this.pushPending();
return this.controller.fetchLocalNotifications( true )
- .then( null, function ( errorObj ) {
+ .catch( function ( errorObj ) {
if ( errorObj.errCode === 'notlogin-required' ) {
// Login required message
widget.notificationsWidget.resetLoadingOption( mw.msg( 'echo-notification-loginrequired' ) );
diff --git a/Echo/modules/ui/mw.echo.ui.PageFilterWidget.js b/Echo/modules/ui/mw.echo.ui.PageFilterWidget.js
index 710e919c..cfe89bea 100644
--- a/Echo/modules/ui/mw.echo.ui.PageFilterWidget.js
+++ b/Echo/modules/ui/mw.echo.ui.PageFilterWidget.js
@@ -17,8 +17,8 @@
mw.echo.ui.PageFilterWidget = function MwEchoUiPageFilterWidget( filterModel, source, config ) {
config = config || {};
- // Parent
- mw.echo.ui.PageFilterWidget.parent.call( this, config );
+ // Parent constructor
+ mw.echo.ui.PageFilterWidget.super.call( this, config );
this.model = filterModel;
this.source = source;
diff --git a/Echo/modules/ui/mw.echo.ui.PageNotificationsOptionWidget.js b/Echo/modules/ui/mw.echo.ui.PageNotificationsOptionWidget.js
index a4ac6bd7..d87f0106 100644
--- a/Echo/modules/ui/mw.echo.ui.PageNotificationsOptionWidget.js
+++ b/Echo/modules/ui/mw.echo.ui.PageNotificationsOptionWidget.js
@@ -13,12 +13,12 @@
* @cfg {boolean} [isCapped] The count for this widget is capped
*/
mw.echo.ui.PageNotificationsOptionWidget = function MwEchoUiPageNotificationsOptionWidget( config ) {
- var countLabel;
+ var countLabel, $row;
config = config || {};
- // Parent
- mw.echo.ui.PageNotificationsOptionWidget.parent.call( this, config );
+ // Parent constructor
+ mw.echo.ui.PageNotificationsOptionWidget.super.call( this, config );
// Mixin constructors
OO.ui.mixin.IconElement.call( this, config );
OO.ui.mixin.TitledElement.call( this, config );
@@ -37,21 +37,32 @@
label: countLabel
} );
+ $row = $( '<div>' )
+ .addClass( 'mw-echo-ui-pageNotificationsOptionWidget-row' )
+ .append(
+ $( '<div>' )
+ .addClass( 'mw-echo-ui-pageNotificationsOptionWidget-cell' )
+ .addClass( 'mw-echo-ui-pageNotificationsOptionWidget-title' )
+ .append( this.$label ),
+ $( '<div>' )
+ .addClass( 'mw-echo-ui-pageNotificationsOptionWidget-cell' )
+ .addClass( 'mw-echo-ui-pageNotificationsOptionWidget-count' )
+ .append( this.unreadCountLabel.$element )
+ );
+
// Initialization
this.$element
.addClass( 'mw-echo-ui-pageNotificationsOptionWidget' )
.append(
$( '<div>' )
- .addClass( 'mw-echo-ui-pageNotificationsOptionWidget-count' )
- .append( this.unreadCountLabel.$element ),
- $( '<div>' )
- .addClass( 'mw-echo-ui-pageNotificationsOptionWidget-title' )
- .append( this.$label )
+ .addClass( 'mw-echo-ui-pageNotificationsOptionWidget-table' )
+ .append( $row )
);
if ( this.getIcon() ) {
- this.$element.prepend(
+ $row.prepend(
$( '<div>' )
+ .addClass( 'mw-echo-ui-pageNotificationsOptionWidget-cell' )
.addClass( 'mw-echo-ui-pageNotificationsOptionWidget-icon' )
.append( this.$icon )
);
@@ -74,7 +85,7 @@
};
mw.echo.ui.PageNotificationsOptionWidget.prototype.setPressed = function ( state ) {
- mw.echo.ui.PageNotificationsOptionWidget.parent.prototype.setPressed.call( this, state );
+ mw.echo.ui.PageNotificationsOptionWidget.super.prototype.setPressed.call( this, state );
if ( this.pressed ) {
this.setFlags( 'progressive' );
} else if ( !this.selected ) {
@@ -84,7 +95,7 @@
};
mw.echo.ui.PageNotificationsOptionWidget.prototype.setSelected = function ( state ) {
- mw.echo.ui.PageNotificationsOptionWidget.parent.prototype.setSelected.call( this, state );
+ mw.echo.ui.PageNotificationsOptionWidget.super.prototype.setSelected.call( this, state );
if ( this.selected ) {
this.setFlags( 'progressive' );
} else {
diff --git a/Echo/modules/ui/mw.echo.ui.PaginationWidget.js b/Echo/modules/ui/mw.echo.ui.PaginationWidget.js
index 0a3208e3..fdfedde7 100644
--- a/Echo/modules/ui/mw.echo.ui.PaginationWidget.js
+++ b/Echo/modules/ui/mw.echo.ui.PaginationWidget.js
@@ -20,8 +20,8 @@
mw.echo.ui.PaginationWidget = function MwEchoUiPaginationWidget( paginationModel, config ) {
config = config || {};
- // Parent
- mw.echo.ui.PaginationWidget.parent.call( this, config );
+ // Parent constructor
+ mw.echo.ui.PaginationWidget.super.call( this, config );
this.model = paginationModel;
@@ -109,9 +109,9 @@
* Update the state - disabled and visibility - of the sub widgets.
*/
mw.echo.ui.PaginationWidget.prototype.updateWidgetState = function () {
- this.dirSelectWidget.getItemFromData( 'prev' )
+ this.dirSelectWidget.findItemFromData( 'prev' )
.setDisabled( this.isDisabled() || !this.model.hasPrevPage() );
- this.dirSelectWidget.getItemFromData( 'next' )
+ this.dirSelectWidget.findItemFromData( 'next' )
.setDisabled( this.isDisabled() || !this.model.hasNextPage() );
this.startButton.toggle(
@@ -135,8 +135,8 @@
* @chainable
*/
mw.echo.ui.PaginationWidget.prototype.setDisabled = function ( disabled ) {
- // Parent
- mw.echo.ui.PaginationWidget.parent.prototype.setDisabled.call( this, disabled );
+ // Parent method
+ mw.echo.ui.PaginationWidget.super.prototype.setDisabled.call( this, disabled );
if (
this.dirSelectWidget &&
diff --git a/Echo/modules/ui/mw.echo.ui.PlaceholderItemWidget.js b/Echo/modules/ui/mw.echo.ui.PlaceholderItemWidget.js
index b501dfd1..31ab206d 100644
--- a/Echo/modules/ui/mw.echo.ui.PlaceholderItemWidget.js
+++ b/Echo/modules/ui/mw.echo.ui.PlaceholderItemWidget.js
@@ -14,7 +14,7 @@
config = config || {};
// Parent constructor
- mw.echo.ui.PlaceholderItemWidget.parent.call( this, $.extend( { data: null }, config ) );
+ mw.echo.ui.PlaceholderItemWidget.super.call( this, $.extend( { data: null }, config ) );
// Mixin constructor
OO.ui.mixin.LabelElement.call( this, config );
@@ -30,7 +30,7 @@
/**
* Set (or unset) the main link url for this widget
*
- * @param {string} url The widget url
+ * @param {string} [url] The widget url
*/
mw.echo.ui.PlaceholderItemWidget.prototype.setLink = function ( url ) {
var $link;
diff --git a/Echo/modules/ui/mw.echo.ui.ReadStateButtonSelectWidget.js b/Echo/modules/ui/mw.echo.ui.ReadStateButtonSelectWidget.js
index 05ed8e70..09a01bff 100644
--- a/Echo/modules/ui/mw.echo.ui.ReadStateButtonSelectWidget.js
+++ b/Echo/modules/ui/mw.echo.ui.ReadStateButtonSelectWidget.js
@@ -9,10 +9,8 @@
* @param {Object} [config] Configuration object
*/
mw.echo.ui.ReadStateButtonSelectWidget = function MwEchoUiReadStateButtonSelectWidget( config ) {
- config = config || {};
-
- // Parent
- mw.echo.ui.ReadStateButtonSelectWidget.parent.call( this, $.extend( config, {
+ // Parent constructor
+ mw.echo.ui.ReadStateButtonSelectWidget.super.call( this, $.extend( config, {
items: [
new OO.ui.ButtonOptionWidget( {
data: 'all',
diff --git a/Echo/modules/ui/mw.echo.ui.SingleNotificationItemWidget.js b/Echo/modules/ui/mw.echo.ui.SingleNotificationItemWidget.js
index 38a8bece..e82ae161 100644
--- a/Echo/modules/ui/mw.echo.ui.SingleNotificationItemWidget.js
+++ b/Echo/modules/ui/mw.echo.ui.SingleNotificationItemWidget.js
@@ -18,7 +18,7 @@
config = config || {};
// Parent constructor
- mw.echo.ui.SingleNotificationItemWidget.parent.call( this, controller, model, config );
+ mw.echo.ui.SingleNotificationItemWidget.super.call( this, controller, model, config );
// Mixin constructors
OO.ui.mixin.PendingElement.call( this, config );
@@ -83,8 +83,8 @@
mw.echo.ui.SingleNotificationItemWidget.prototype.toggleRead = function ( read ) {
var oldState = this.read;
- // Parent
- mw.echo.ui.SingleNotificationItemWidget.parent.prototype.toggleRead.call( this, read );
+ // Parent method
+ mw.echo.ui.SingleNotificationItemWidget.super.prototype.toggleRead.call( this, read );
if ( oldState !== read ) {
this.emit( 'sortChange' );
diff --git a/Echo/modules/ui/mw.echo.ui.SortedListWidget.js b/Echo/modules/ui/mw.echo.ui.SortedListWidget.js
index 591c0ada..13a4d808 100644
--- a/Echo/modules/ui/mw.echo.ui.SortedListWidget.js
+++ b/Echo/modules/ui/mw.echo.ui.SortedListWidget.js
@@ -22,7 +22,7 @@
config = config || {};
// Parent constructor
- mw.echo.ui.SortedListWidget.parent.call( this, config );
+ mw.echo.ui.SortedListWidget.super.call( this, config );
// Mixin constructor
OO.SortedEmitterList.call( this, sortingCallback );
@@ -136,7 +136,7 @@
* @param {string} data Item data to search for
* @return {OO.ui.Element|null} Item with equivalent data, `null` if none exists
*/
- mw.echo.ui.SortedListWidget.prototype.getItemFromData = function ( data ) {
+ mw.echo.ui.SortedListWidget.prototype.findItemFromData = function ( data ) {
var i, len, item,
hash = OO.getHash( data );
diff --git a/Echo/modules/ui/mw.echo.ui.SpecialHelpMenuWidget.js b/Echo/modules/ui/mw.echo.ui.SpecialHelpMenuWidget.js
index 54a37252..d2ae205c 100644
--- a/Echo/modules/ui/mw.echo.ui.SpecialHelpMenuWidget.js
+++ b/Echo/modules/ui/mw.echo.ui.SpecialHelpMenuWidget.js
@@ -4,78 +4,83 @@
*
* @param {mw.echo.dm.ModelManager} manager Model manager
* @param {Object} config Configuration object
+ * @cfg {string} [helpLink] Link to help page
+ * @cfg {string} [prefLink] Link to preferences page
*/
mw.echo.ui.SpecialHelpMenuWidget = function MwEchoUiSpecialHelpMenuWidget( manager, config ) {
- var $menu = $( '<div>' )
- .addClass( 'mw-echo-ui-specialHelpMenuWidget-menu' );
+ var handle;
config = config || {};
// Parent constructor
- mw.echo.ui.SpecialHelpMenuWidget.parent.call( this, $.extend( {
- icon: 'advanced',
- indicator: 'down',
- popup: {
- $content: $menu,
- width: 300
+ mw.echo.ui.SpecialHelpMenuWidget.super.call( this, $.extend( {
+ // Icon and indicator set on handle button instead
+ indicator: '',
+ menu: {
+ classes: [ 'mw-echo-ui-specialHelpMenuWidget-menu' ],
+ horizontalPosition: 'end',
+ width: 'auto'
}
}, config ) );
- // Mixin constructors
- OO.ui.mixin.GroupWidget.call( this, $.extend( {}, config, { $group: $menu } ) );
- OO.ui.mixin.PendingElement.call( this, config );
+ // Replace handle with a button widget. Use this.$handle to preserve bindings.
+ this.$handle.empty().attr( 'class', '' );
+ handle = new OO.ui.ButtonWidget( {
+ $element: this.$handle,
+ icon: 'settings',
+ indicator: 'down'
+ } );
+ this.$element.append( handle.$element );
this.manager = manager;
- this.markAllReadButton = new OO.ui.ButtonWidget( {
- framed: false,
- icon: 'doubleCheck',
- label: this.getMarkAllReadButtonLabel()
+ this.markAllReadOption = new OO.ui.MenuOptionWidget( {
+ icon: 'checkAll',
+ label: this.getMarkAllReadOptionLabel(),
+ data: 'markAllRead'
} );
- this.setPendingElement( this.$element );
- this.markAllReadButton.toggle( false );
+ this.markAllReadOption.toggle( false );
- this.addItems( [ this.markAllReadButton ] );
+ this.menu.addItems( [ this.markAllReadOption ] );
if ( config.prefLink ) {
- this.addItems( [
+ this.menu.addItems( [
// Preferences link
- new OO.ui.ButtonWidget( {
- framed: false,
- icon: 'advanced',
+ new OO.ui.MenuOptionWidget( {
+ // Use link for accessibility
+ $element: $( '<a>' ).attr( 'href', config.prefLink ),
+ icon: 'settings',
label: mw.msg( 'mypreferences' ),
- href: config.prefLink
+ data: { href: config.prefLink }
} )
] );
}
if ( config.helpLink ) {
- this.addItems( [
+ this.menu.addItems( [
// Help link
- new OO.ui.ButtonWidget( {
- framed: false,
+ new OO.ui.MenuOptionWidget( {
+ // Use link for accessibility
+ $element: $( '<a>' ).attr( 'href', config.helpLink ),
icon: 'help',
label: mw.msg( 'echo-learn-more' ),
- href: config.helpLink
+ data: { href: config.helpLink }
} )
] );
}
// Events
- this.markAllReadButton.connect( this, { click: 'onMarkAllreadButtonClick' } );
this.manager.connect( this, {
localCountChange: 'onLocalCountChange'
} );
this.manager.getFiltersModel().getSourcePagesModel().connect( this, { update: 'onSourcePageUpdate' } );
+ this.menu.connect( this, { choose: 'onMenuChoose' } );
- this.$element
- .addClass( 'mw-echo-ui-specialHelpMenuWidget' );
+ this.$element.addClass( 'mw-echo-ui-specialHelpMenuWidget' );
};
/* Initialization */
- OO.inheritClass( mw.echo.ui.SpecialHelpMenuWidget, OO.ui.PopupButtonWidget );
- OO.mixinClass( mw.echo.ui.SpecialHelpMenuWidget, OO.ui.mixin.GroupElement );
- OO.mixinClass( mw.echo.ui.SpecialHelpMenuWidget, OO.ui.mixin.PendingElement );
+ OO.inheritClass( mw.echo.ui.SpecialHelpMenuWidget, OO.ui.DropdownWidget );
/* Events */
@@ -91,7 +96,7 @@
* Respond to source page change
*/
mw.echo.ui.SpecialHelpMenuWidget.prototype.onSourcePageUpdate = function () {
- this.markAllReadButton.setLabel( this.getMarkAllReadButtonLabel() );
+ this.markAllReadOption.setLabel( this.getMarkAllReadOptionLabel() );
};
@@ -101,25 +106,32 @@
* @param {number} count New count
*/
mw.echo.ui.SpecialHelpMenuWidget.prototype.onLocalCountChange = function ( count ) {
- this.markAllReadButton.toggle( count > 0 );
+ this.markAllReadOption.toggle( count > 0 );
};
/**
- * Respond to mark all read button click
+ * Handle dropdown menu choose events
+ *
+ * @param {OO.ui.MenuOptionWidget} item Chosen item
*/
- mw.echo.ui.SpecialHelpMenuWidget.prototype.onMarkAllreadButtonClick = function () {
- // Log this action
- mw.echo.logger.logInteraction(
- mw.echo.Logger.static.actions.markAllReadClick,
- mw.echo.Logger.static.context.archive,
- null, // Notification ID is irrelevant
- this.manager.getTypeString(), // The type of the list in general
- null, // The Logger has logic to decide whether this is mobile or not
- this.manager.getFiltersModel().getSourcePagesModel().getCurrentSource() // Source name
- );
-
- this.popup.toggle( false );
- this.emit( 'markAllRead' );
+ mw.echo.ui.SpecialHelpMenuWidget.prototype.onMenuChoose = function ( item ) {
+ var data = item.getData();
+ if ( data.href ) {
+ location.href = data.href;
+ } else if ( data === 'markAllRead' ) {
+ // Log this action
+ mw.echo.logger.logInteraction(
+ mw.echo.Logger.static.actions.markAllReadClick,
+ mw.echo.Logger.static.context.archive,
+ null, // Notification ID is irrelevant
+ this.manager.getTypeString(), // The type of the list in general
+ null, // The Logger has logic to decide whether this is mobile or not
+ this.manager.getFiltersModel().getSourcePagesModel().getCurrentSource() // Source name
+ );
+ this.emit( 'markAllRead' );
+ }
+ // Clear selection so handle doesn't change
+ this.menu.selectItem();
};
/**
@@ -127,7 +139,7 @@
*
* @return {string} Mark all read button label
*/
- mw.echo.ui.SpecialHelpMenuWidget.prototype.getMarkAllReadButtonLabel = function () {
+ mw.echo.ui.SpecialHelpMenuWidget.prototype.getMarkAllReadOptionLabel = function () {
var pageModel = this.manager.getFiltersModel().getSourcePagesModel(),
source = pageModel.getCurrentSource(),
sourceTitle = pageModel.getSourceTitle( source );
@@ -137,23 +149,4 @@
mw.msg( 'echo-mark-all-as-read' );
};
- /**
- * Extend the pushPending method to disable the mark all read button
- */
- mw.echo.ui.SpecialHelpMenuWidget.prototype.pushPending = function () {
- this.markAllReadButton.setDisabled( true );
-
- // Mixin method
- OO.ui.mixin.PendingElement.prototype.pushPending.call( this );
- };
-
- /**
- * Extend the popPending method to enable the mark all read button
- */
- mw.echo.ui.SpecialHelpMenuWidget.prototype.popPending = function () {
- this.markAllReadButton.setDisabled( false );
-
- // Mixin method
- OO.ui.mixin.PendingElement.prototype.popPending.call( this );
- };
}( jQuery, mediaWiki ) );
diff --git a/Echo/modules/ui/mw.echo.ui.SubGroupListWidget.js b/Echo/modules/ui/mw.echo.ui.SubGroupListWidget.js
index cf2f3442..0f9503ee 100644
--- a/Echo/modules/ui/mw.echo.ui.SubGroupListWidget.js
+++ b/Echo/modules/ui/mw.echo.ui.SubGroupListWidget.js
@@ -14,9 +14,10 @@
* for popups.
*/
mw.echo.ui.SubGroupListWidget = function MwEchoUiSubGroupListWidget( controller, listModel, config ) {
- var sourceURL,
- $header = $( '<div>' )
- .addClass( 'mw-echo-ui-subGroupListWidget-header' );
+ var sourceURL;
+
+ this.$header = $( '<div>' )
+ .addClass( 'mw-echo-ui-subGroupListWidget-header' );
config = config || {};
@@ -24,7 +25,7 @@
this.model = listModel;
// Parent constructor
- mw.echo.ui.SubGroupListWidget.parent.call( this, $.extend( { data: this.getSource() }, config ) );
+ mw.echo.ui.SubGroupListWidget.super.call( this, $.extend( { data: this.getSource() }, config ) );
this.showTitle = !!config.showTitle;
this.showMarkAllRead = !!config.showMarkAllRead;
@@ -56,12 +57,18 @@
if ( sourceURL ) {
this.title = new OO.ui.ButtonWidget( {
framed: false,
- classes: [ 'mw-echo-ui-subGroupListWidget-header-row-title' ],
+ classes: [
+ 'mw-echo-ui-subGroupListWidget-header-row-title',
+ 'mw-echo-ui-subGroupListWidget-header-row-cell'
+ ],
href: sourceURL
} );
} else {
this.title = new OO.ui.LabelWidget( {
- classes: [ 'mw-echo-ui-subGroupListWidget-header-row-title' ]
+ classes: [
+ 'mw-echo-ui-subGroupListWidget-header-row-title',
+ 'mw-echo-ui-subGroupListWidget-header-row-cell'
+ ]
} );
}
@@ -73,9 +80,12 @@
// Mark all as read button
this.markAllReadButton = new OO.ui.ButtonWidget( {
framed: true,
- icon: 'doubleCheck',
+ icon: 'checkAll',
label: mw.msg( 'echo-specialpage-section-markread' ),
- classes: [ 'mw-echo-ui-subGroupListWidget-header-row-markAllReadButton' ]
+ classes: [
+ 'mw-echo-ui-subGroupListWidget-header-row-markAllReadButton',
+ 'mw-echo-ui-subGroupListWidget-header-row-cell'
+ ]
} );
// Events
@@ -98,7 +108,7 @@
this.$element
.addClass( 'mw-echo-ui-subGroupListWidget' )
.append(
- $header.append(
+ this.$header.append(
$( '<div>' )
.addClass( 'mw-echo-ui-subGroupListWidget-header-row' )
.append(
@@ -108,6 +118,13 @@
),
this.listWidget.$element
);
+
+ this.$pageContentText = $( '#mw-content-text' );
+ $( window ).resize( this.resizeHeader.bind( this ) );
+
+ // Resize the header after the stack finishes loading
+ // so the widget is attached
+ setTimeout( this.resizeHeader.bind( this ), 0 );
};
/* Initialization */
@@ -117,6 +134,31 @@
/* Methods */
/**
+ * Respond to window resize event
+ */
+ mw.echo.ui.SubGroupListWidget.prototype.resizeHeader = function () {
+ var contentWidth = this.$pageContentText.width(),
+ screenTooNarrow = this.$header.width() > contentWidth;
+
+ // Screen too narrow, put the button under the date
+ this.title.$element.toggleClass(
+ 'mw-echo-ui-subGroupListWidget-header-row-cell',
+ !screenTooNarrow
+ );
+ this.markAllReadButton.$element.toggleClass(
+ 'mw-echo-ui-subGroupListWidget-header-row-cell',
+ !screenTooNarrow
+ );
+ };
+
+ /**
+ * Destroy the widget and disconnect events
+ */
+ mw.echo.ui.SubGroupListWidget.prototype.destroy = function () {
+ $( window ).off( 'resize' );
+ };
+
+ /**
* Toggle the visibility of the mark all read button for this group
* based on whether there are unread notifications
*/
diff --git a/Echo/modules/ui/mw.echo.ui.ToggleReadCircleButtonWidget.js b/Echo/modules/ui/mw.echo.ui.ToggleReadCircleButtonWidget.js
index 01ac164c..6df684fe 100644
--- a/Echo/modules/ui/mw.echo.ui.ToggleReadCircleButtonWidget.js
+++ b/Echo/modules/ui/mw.echo.ui.ToggleReadCircleButtonWidget.js
@@ -13,8 +13,8 @@
mw.echo.ui.ToggleReadCircleButtonWidget = function MwEchoUiToggleReadCircleButtonWidget( config ) {
config = config || {};
- // Parent
- mw.echo.ui.ToggleReadCircleButtonWidget.parent.call( this, config );
+ // Parent constructor
+ mw.echo.ui.ToggleReadCircleButtonWidget.super.call( this, config );
this.$circle = $( '<div>' )
.addClass( 'mw-echo-ui-toggleReadCircleButtonWidget-circle' );
diff --git a/Echo/package.json b/Echo/package.json
index bd5d5e98..cc79d9a9 100644
--- a/Echo/package.json
+++ b/Echo/package.json
@@ -5,17 +5,25 @@
"description": "Build tools for Echo.",
"scripts": {
"test": "grunt test",
- "doc": "jsduck"
+ "doc": "jsduck",
+ "selenium-test": "wdio tests/selenium/wdio.conf.js",
+ "selenium-daily": "npm run selenium-test"
},
"devDependencies": {
- "eslint-config-wikimedia": "0.4.0",
- "grunt": "1.0.1",
- "grunt-banana-checker": "0.5.0",
- "grunt-contrib-watch": "1.0.0",
- "grunt-eslint": "19.0.0",
- "grunt-jsonlint": "1.0.8",
- "grunt-stylelint": "0.7.0",
- "stylelint": "7.8.0",
- "stylelint-config-wikimedia": "0.4.1"
+ "eslint-config-wikimedia": "0.8.1",
+ "eslint-plugin-qunit": "3.3.1",
+ "grunt": "1.0.3",
+ "grunt-banana-checker": "0.6.0",
+ "grunt-contrib-watch": "1.1.0",
+ "grunt-eslint": "21.0.0",
+ "grunt-jsonlint": "1.1.0",
+ "grunt-stylelint": "0.10.1",
+ "grunt-svgmin": "5.0.0",
+ "stylelint": "9.2.0",
+ "stylelint-config-wikimedia": "0.4.3",
+ "wdio-mediawiki": "0.1.7",
+ "wdio-mocha-framework": "0.5.13",
+ "wdio-spec-reporter": "0.1.4",
+ "webdriverio": "4.12.0"
}
}
diff --git a/Echo/scripts/generatecss.php b/Echo/scripts/generatecss.php
deleted file mode 100644
index ed6496d8..00000000
--- a/Echo/scripts/generatecss.php
+++ /dev/null
@@ -1,28 +0,0 @@
-<?php
-if ( count( $argv ) < 3 ) {
- print "Call with 2 arguments: the path to the load url and the file to output to";
- exit();
-}
-$loadUrl = $argv[1];
-$outputFile = $argv[2];
-
-define( 'MEDIAWIKI', true );
-const NS_MAIN = 0;
-$wgVersion = 1.23;
-$wgSpecialPages = [];
-$wgResourceModules = [];
-
-include "Resources.php";
-
-$query = [];
-$blacklist = [];
-foreach ( $wgResourceModules as $moduleName => $def ) {
- if ( !in_array( $moduleName, $blacklist ) ) {
- $query[] = $moduleName;
- }
-}
-
-$url = $loadUrl . '?only=styles&skin=vector&modules=' . implode( $query, '|' );
-echo $url;
-$css = file_get_contents( $url );
-file_put_contents( $outputFile, $css );
diff --git a/Echo/tests/browser/README.md b/Echo/tests/browser/README.md
deleted file mode 100644
index 36319498..00000000
--- a/Echo/tests/browser/README.md
+++ /dev/null
@@ -1 +0,0 @@
-Please see https://github.com/wikimedia/mediawiki-selenium for instructions on how to run tests.
diff --git a/Echo/tests/browser/ci.yml b/Echo/tests/browser/ci.yml
deleted file mode 100644
index c2eca934..00000000
--- a/Echo/tests/browser/ci.yml
+++ /dev/null
@@ -1,9 +0,0 @@
-BROWSER:
- - chrome
- - firefox
-
-MEDIAWIKI_ENVIRONMENT:
- - beta
-
-PLATFORM:
- - Linux
diff --git a/Echo/tests/browser/environments.yml b/Echo/tests/browser/environments.yml
deleted file mode 100644
index c32e21bb..00000000
--- a/Echo/tests/browser/environments.yml
+++ /dev/null
@@ -1,48 +0,0 @@
-# Customize this configuration as necessary to provide defaults for various
-# test environments.
-#
-# The set of defaults to use is determined by the MEDIAWIKI_ENVIRONMENT
-# environment variable.
-#
-# export MEDIAWIKI_ENVIRONMENT=mw-vagrant-host
-# bundle exec cucumber
-#
-# Additional variables set by the environment will override the corresponding
-# defaults defined here.
-#
-# export MEDIAWIKI_ENVIRONMENT=mw-vagrant-host
-# export MEDIAWIKI_USER=Selenium_user2
-# bundle exec cucumber
-#
-mw-vagrant-host: &default
- user_factory: true
- mediawiki_url: http://127.0.0.1:8080/wiki/
-
-mw-vagrant-guest:
- user_factory: true
- mediawiki_url: http://127.0.0.1/wiki/
-
-local:
- mediawiki_user: Admin
- mediawiki_password: vagrant
- mediawiki_user_b: Selenium Echo user 2
- mediawiki_url: http://dev.wiki.local.wmftest.net:8080/wiki/
-
-beta:
- mediawiki_url: https://en.wikipedia.beta.wmflabs.org/wiki/
- mediawiki_user: Selenium_user
- mediawiki_user_b: Selenium Echo user 2
- # mediawiki_password: SET THIS IN THE ENVIRONMENT!
-
-test2:
- mediawiki_url: https://test2.wikipedia.org/wiki/
- mediawiki_user: Selenium_user
- mediawiki_user_b: Selenium Echo user 2
- # mediawiki_password: SET THIS IN THE ENVIRONMENT!
-
-integration:
- browser: chrome
- user_factory: true
- # mediawiki_url: THIS WILL BE SET BY JENKINS
-
-default: *default
diff --git a/Echo/tests/browser/features/no_javascript.feature b/Echo/tests/browser/features/no_javascript.feature
deleted file mode 100644
index a8b318ed..00000000
--- a/Echo/tests/browser/features/no_javascript.feature
+++ /dev/null
@@ -1,11 +0,0 @@
-@chrome @en.wikipedia.beta.wmflabs.org @firefox @localhost @vagrant
-Feature: Basic features for no-js functionality
-
- Background:
- Given I am using a nojs browser
-
- Scenario: Clicking alerts badge goes to Special:Notifications
- Given I am logged in
- When I click the alert badge
- And I wait for the page to load
- Then I am on Special Notifications page
diff --git a/Echo/tests/browser/features/notifications.feature b/Echo/tests/browser/features/notifications.feature
deleted file mode 100644
index 3d443a7d..00000000
--- a/Echo/tests/browser/features/notifications.feature
+++ /dev/null
@@ -1,22 +0,0 @@
-@chrome @en.wikipedia.beta.wmflabs.org @firefox @localhost @vagrant
-Feature: Testing notification types
-
- Background:
- Given I am logged in
- And all my notifications are read
-
- Scenario: Someone mentions me
- Given another user mentions me
- When I refresh the page
- Then the alert badge is showing unseen notifications
- And the alert badge value is "Alert (1)"
-
- @skip
- Scenario: Someone writes on my talk page
- Given another user writes on my talk page
- When I refresh the page
- Then the alert badge is showing unseen notifications
- And the alert badge value is "Alert (1)"
- When I click the alert badge
- And I see the alert popup
- Then there are "1" unread notifications in the alert popup
diff --git a/Echo/tests/browser/features/step_definition/badge_steps.rb b/Echo/tests/browser/features/step_definition/badge_steps.rb
deleted file mode 100644
index 82590cb1..00000000
--- a/Echo/tests/browser/features/step_definition/badge_steps.rb
+++ /dev/null
@@ -1,10 +0,0 @@
-# Steps related to clicking and interacting with the badge
-# Work in both nojs and js version
-
-Given(/^I click the alert badge$/) do
- on(ArticlePage).alerts_element.when_present.click
-end
-
-Given(/^I click the notice badge$/) do
- on(ArticlePage).notices_element.when_present.click
-end
diff --git a/Echo/tests/browser/features/step_definition/no_javascript.rb b/Echo/tests/browser/features/step_definition/no_javascript.rb
deleted file mode 100644
index 5cf97b1b..00000000
--- a/Echo/tests/browser/features/step_definition/no_javascript.rb
+++ /dev/null
@@ -1,21 +0,0 @@
-# This test has no javascript
-# Therefore this test has no AJAX
-# Therefore it should run without any "when_present" clauses
-# If you need a "when_present" to make the test run, that is a bug
-
-Given(/^I am using a nojs browser$/) do
- # The following user-agent string contains:
- # SymbianOS: for RL to NOT load the modern experience
- # SMART-TV-SamsungBrowser: to bypass mobile-frontend and stay on the desktop site
- browser_factory.override(browser_user_agent: 'SymbianOS,SMART-TV-SamsungBrowser')
-end
-
-Given(/^I wait for the page to load$/) do
- # Wait for the page to load. We're technically clicking the <li> rather than <a>,
- # so the special-case implicit wait after clicking links doesn't kick in.
- browser.wait
-end
-
-Given(/^I am on Special Notifications page$/) do
- expect(on(SpecialNotificationsPage).firstHeading).to match('Notifications')
-end
diff --git a/Echo/tests/browser/features/step_definition/notifications_steps.rb b/Echo/tests/browser/features/step_definition/notifications_steps.rb
deleted file mode 100644
index 5557c5db..00000000
--- a/Echo/tests/browser/features/step_definition/notifications_steps.rb
+++ /dev/null
@@ -1,76 +0,0 @@
-Given(/^all my notifications are read$/) do
- clear_unread_notifications(@username)
-end
-
-Given(/^I refresh the page$/) do
- on(ArticlePage) do |page|
- page.refresh
- end
-end
-
-Given(/^another user mentions me$/) do
- message = '===Mention test===\nI am mentioning [[User:' + user(nil) +
- ']] in this page to test Echo notifications. ~~~~'
- as_user(:b) do
- api.create_page(
- @data_manager.get('Echo_test_page'),
- message
- )
- end
-end
-
-Given(/^another user writes on my talk page$/) do
- talk_page = "User_talk:#{user}"
- message = '===Talk page test===\n' +
- 'I am writing a message in your user page to test Echo notifications. ~~~~'
- as_user(:b) do
- api.create_page(talk_page, message)
- end
-end
-
-Given(/^the alert badge is showing unseen notifications$/) do
- on(ArticlePage) do |page|
- page.refresh_until do
- page.alerts.badge_unseen_element.exists?
- end
- end
-end
-
-Given(/^the notice badge is showing unseen notifications$/) do
- on(ArticlePage) do |page|
- page.refresh_until do
- page.notices.badge_unseen_element.exists?
- end
- end
-end
-
-Given(/^the alert badge value is "(.+)"$/) do |num|
- on(ArticlePage) do |page|
- page.refresh_until do
- # `.text` doesn't work for invisible elements, and Selenium thinks the badge is invisible
- page.alerts.badge_element.attribute('innerText') == num
- end
- end
-end
-
-Given(/^the notice badge value is "(.+)"$/) do |num|
- on(ArticlePage) do |page|
- page.refresh_until do
- page.notices.badge_element.attribute('innerText') == num
- end
- end
-end
-
-Given(/^there are "(.+)" unread notifications in the notice popup$/) do |num|
- on(ArticlePage) do |page|
- page.notices.when_loaded
- expect(page.notices.num_unread_notifications).to eq(num.to_i)
- end
-end
-
-Given(/^there are "(.+)" unread notifications in the alert popup$/) do |num|
- on(ArticlePage) do |page|
- page.alerts.when_loaded
- expect(page.alerts.num_unread_notifications).to eq(num.to_i)
- end
-end
diff --git a/Echo/tests/browser/features/step_definition/popup_steps.rb b/Echo/tests/browser/features/step_definition/popup_steps.rb
deleted file mode 100644
index e6c8f0f0..00000000
--- a/Echo/tests/browser/features/step_definition/popup_steps.rb
+++ /dev/null
@@ -1,11 +0,0 @@
-Given(/^I see the alert popup$/) do
- on(ArticlePage) do |page|
- expect(page.alerts.title_element.when_present.text).to match('Alerts')
- end
-end
-
-Given(/^I see the message popup$/) do
- on(ArticlePage) do |page|
- expect(page.messages.title_element.when_present.text).to match('Messages')
- end
-end
diff --git a/Echo/tests/browser/features/support/components/notifications.rb b/Echo/tests/browser/features/support/components/notifications.rb
deleted file mode 100644
index 6f8d5ab8..00000000
--- a/Echo/tests/browser/features/support/components/notifications.rb
+++ /dev/null
@@ -1,21 +0,0 @@
-class Notifications
- include PageObject
-
- link(:badge, css: '.mw-echo-notifications-badge')
- link(:badge_unseen, css: '.mw-echo-unseen-notifications')
- link(:mark_all_as_read, css: '.mw-echo-ui-notificationsListWidget-markAllReadButton > a')
- div(:popup, css: '.mw-echo-ui-notificationBadgeButtonPopupWidget-popup')
- span(:title, css: '.oo-ui-popupWidget-head > .oo-ui-labelElement-label')
- div(
- :notifications_container,
- css: '.mw-echo-ui-notificationsListWidget > .mw-echo-ui-notificationItemWidget')
-
- def when_loaded
- title_element.when_present
- notifications_container_element.when_present
- end
-
- def num_unread_notifications
- div_elements(css: '.mw-echo-ui-notificationItemWidget-unread').size
- end
-end
diff --git a/Echo/tests/browser/features/support/data_manager.rb b/Echo/tests/browser/features/support/data_manager.rb
deleted file mode 100644
index 0ff6d66c..00000000
--- a/Echo/tests/browser/features/support/data_manager.rb
+++ /dev/null
@@ -1,11 +0,0 @@
-# Data manager for Echo tests
-class DataManager
- def initialize
- @data = {}
- end
-
- def get(part)
- @data[part] = "#{part}_#{Random.srand}" unless @data.key? part
- @data[part]
- end
-end
diff --git a/Echo/tests/browser/features/support/echo_api_helper.rb b/Echo/tests/browser/features/support/echo_api_helper.rb
deleted file mode 100644
index 77b7e5ab..00000000
--- a/Echo/tests/browser/features/support/echo_api_helper.rb
+++ /dev/null
@@ -1,25 +0,0 @@
-module EchoAPIHelper
- def create_page_with_user(title, text, username)
- as_user(username) do
- api.create_page title, text
- end
- end
-
- def clear_unread_notifications(username)
- as_user(username) do
- api.action('echomarkread', token_type: 'csrf', all: '1')
- end
- end
-
- def update_seentime(username, notificationType)
- as_user(username) do
- api.action('echomarkseen', token_type: 'csrf', type: notificationType)
- end
- end
-
- def watch_page(username, pageTitle)
- as_user(username) do
- api.action('watch', token_type: 'watch', title: pageTitle)
- end
- end
-end
diff --git a/Echo/tests/browser/features/support/echo_pageobject_extension.rb b/Echo/tests/browser/features/support/echo_pageobject_extension.rb
deleted file mode 100644
index 8e18a6e6..00000000
--- a/Echo/tests/browser/features/support/echo_pageobject_extension.rb
+++ /dev/null
@@ -1,9 +0,0 @@
-module PageObject
- def refresh_until(timeout = PageObject.default_page_wait, message = nil)
- platform.wait_until(timeout, message) do
- yield.tap do |result|
- refresh unless result
- end
- end
- end
-end
diff --git a/Echo/tests/browser/features/support/env.rb b/Echo/tests/browser/features/support/env.rb
deleted file mode 100644
index d7dbf3e0..00000000
--- a/Echo/tests/browser/features/support/env.rb
+++ /dev/null
@@ -1,10 +0,0 @@
-require 'mediawiki_selenium/cucumber'
-require 'mediawiki_selenium/pages'
-require 'mediawiki_selenium/step_definitions'
-
-def env_or_default(key, default)
- ENV[key].nil? ? default : ENV[key].to_i
-end
-
-PageObject.default_page_wait = env_or_default 'PAGE_WAIT_TIMEOUT', 60
-PageObject.default_element_wait = env_or_default 'ELEMENT_WAIT_TIMEOUT', 60
diff --git a/Echo/tests/browser/features/support/hooks.rb b/Echo/tests/browser/features/support/hooks.rb
deleted file mode 100644
index 0d84341d..00000000
--- a/Echo/tests/browser/features/support/hooks.rb
+++ /dev/null
@@ -1,10 +0,0 @@
-# Allow running of bundle exec cucumber --dry-run -f stepdefs
-require 'mediawiki_selenium'
-require 'page-object'
-require_relative 'echo_api_helper'
-require_relative 'echo_pageobject_extension'
-require_relative 'data_manager'
-
-World(EchoAPIHelper)
-
-Before { @data_manager = DataManager.new }
diff --git a/Echo/tests/browser/features/support/pages/article_page.rb b/Echo/tests/browser/features/support/pages/article_page.rb
deleted file mode 100644
index 25ffa043..00000000
--- a/Echo/tests/browser/features/support/pages/article_page.rb
+++ /dev/null
@@ -1,8 +0,0 @@
-class ArticlePage
- include PageObject
-
- li(:alerts, css: '#pt-notifications-alert')
- li(:notices, css: '#pt-notifications-notice')
- page_section(:alerts, Notifications, css: '#pt-notifications-alert')
- page_section(:notices, Notifications, css: '#pt-notifications-notice')
-end
diff --git a/Echo/tests/browser/features/support/pages/special_notifications_page.rb b/Echo/tests/browser/features/support/pages/special_notifications_page.rb
deleted file mode 100644
index 3f6f0c25..00000000
--- a/Echo/tests/browser/features/support/pages/special_notifications_page.rb
+++ /dev/null
@@ -1,8 +0,0 @@
-# Special:Notifications page
-class SpecialNotificationsPage
- include PageObject
-
- page_url 'Special:Notifications'
-
- h1(:firstHeading, css: '.firstHeading')
-end
diff --git a/Echo/tests/phpunit/AttributeManagerTest.php b/Echo/tests/phpunit/AttributeManagerTest.php
index f9b0c939..42ccb992 100644
--- a/Echo/tests/phpunit/AttributeManagerTest.php
+++ b/Echo/tests/phpunit/AttributeManagerTest.php
@@ -1,5 +1,8 @@
<?php
+/**
+ * @covers EchoAttributeManager
+ */
class EchoAttributeManagerTest extends MediaWikiTestCase {
public function testNewFromGlobalVars() {
@@ -55,7 +58,7 @@ class EchoAttributeManagerTest extends MediaWikiTestCase {
* @dataProvider getUserLocatorsProvider
*/
public function testGetUserLocators( $message, $expect, $type, $notifications ) {
- $manager = new EchoAttributeManager( $notifications, [], [], [], [] );
+ $manager = new EchoAttributeManager( $notifications, [], [], [] );
$result = $manager->getUserCallable( $type, EchoAttributeManager::ATTR_LOCATORS );
$this->assertEquals( $expect, $result, $message );
@@ -72,7 +75,7 @@ class EchoAttributeManagerTest extends MediaWikiTestCase {
'priority' => 10
]
];
- $manager = new EchoAttributeManager( $notif, $category, [], [], [] );
+ $manager = new EchoAttributeManager( $notif, $category, [], [] );
$this->assertTrue( $manager->getCategoryEligibility( $this->mockUser(), 'category_one' ) );
$category = [
'category_one' => [
@@ -82,7 +85,7 @@ class EchoAttributeManagerTest extends MediaWikiTestCase {
]
]
];
- $manager = new EchoAttributeManager( $notif, $category, [], [], [] );
+ $manager = new EchoAttributeManager( $notif, $category, [], [] );
$this->assertFalse( $manager->getCategoryEligibility( $this->mockUser(), 'category_one' ) );
}
@@ -97,10 +100,10 @@ class EchoAttributeManagerTest extends MediaWikiTestCase {
'priority' => 10
]
];
- $manager = new EchoAttributeManager( $notif, $category, [], [], [] );
+ $manager = new EchoAttributeManager( $notif, $category, [], [] );
$this->assertEquals( $manager->getNotificationCategory( 'event_one' ), 'category_one' );
- $manager = new EchoAttributeManager( $notif, [], [], [], [] );
+ $manager = new EchoAttributeManager( $notif, [], [], [] );
$this->assertEquals( $manager->getNotificationCategory( 'event_one' ), 'other' );
$notif = [
@@ -113,7 +116,7 @@ class EchoAttributeManagerTest extends MediaWikiTestCase {
'priority' => 10
]
];
- $manager = new EchoAttributeManager( $notif, $category, [], [], [] );
+ $manager = new EchoAttributeManager( $notif, $category, [], [] );
$this->assertEquals( $manager->getNotificationCategory( 'event_one' ), 'other' );
}
@@ -135,7 +138,7 @@ class EchoAttributeManagerTest extends MediaWikiTestCase {
],
'category_four' => []
];
- $manager = new EchoAttributeManager( $notif, $category, [], [], [] );
+ $manager = new EchoAttributeManager( $notif, $category, [], [] );
$this->assertEquals( 6, $manager->getCategoryPriority( 'category_one' ) );
$this->assertEquals( 10, $manager->getCategoryPriority( 'category_two' ) );
$this->assertEquals( 10, $manager->getCategoryPriority( 'category_three' ) );
@@ -169,7 +172,7 @@ class EchoAttributeManagerTest extends MediaWikiTestCase {
],
'category_four' => []
];
- $manager = new EchoAttributeManager( $notif, $category, [], [], [] );
+ $manager = new EchoAttributeManager( $notif, $category, [], [] );
$this->assertEquals( 6, $manager->getNotificationPriority( 'event_one' ) );
$this->assertEquals( 10, $manager->getNotificationPriority( 'event_two' ) );
$this->assertEquals( 10, $manager->getNotificationPriority( 'event_three' ) );
@@ -221,7 +224,7 @@ class EchoAttributeManagerTest extends MediaWikiTestCase {
* @dataProvider getEventsForSectionProvider
*/
public function testGetEventsForSection( $expected, $notificationTypes, $section, $message ) {
- $am = new EchoAttributeManager( $notificationTypes, [], [], [], [] );
+ $am = new EchoAttributeManager( $notificationTypes, [], [], [] );
$actual = $am->getEventsForSection( $section );
$this->assertEquals( $expected, $actual, $message );
}
@@ -255,8 +258,9 @@ class EchoAttributeManagerTest extends MediaWikiTestCase {
'priority' => 10,
],
];
- $manager = new EchoAttributeManager( $notif, $category, [], [], [] );
- $this->assertEquals( $manager->getUserEnabledEvents( $this->mockUser(), 'web' ), [ 'event_two', 'event_three' ] );
+ $manager = new EchoAttributeManager( $notif, $category, [], [] );
+ $this->assertEquals( $manager->getUserEnabledEvents( $this->mockUser(), 'web' ),
+ [ 'event_two', 'event_three' ] );
}
public function testGetUserEnabledEventsbySections() {
@@ -287,7 +291,7 @@ class EchoAttributeManagerTest extends MediaWikiTestCase {
'priority' => 10
],
];
- $manager = new EchoAttributeManager( $notif, $category, [], [], [] );
+ $manager = new EchoAttributeManager( $notif, $category, [], [] );
$expected = [ 'event_one', 'event_three', 'event_four' ];
$actual = $manager->getUserEnabledEventsBySections( $this->mockUser(), 'web', [ 'alert' ] );
sort( $expected );
@@ -301,7 +305,8 @@ class EchoAttributeManagerTest extends MediaWikiTestCase {
$this->assertEquals( $actual, $expected );
$expected = [ 'event_one', 'event_two', 'event_three', 'event_four' ];
- $actual = $manager->getUserEnabledEventsBySections( $this->mockUser(), 'web', [ 'message', 'alert' ] );
+ $actual = $manager->getUserEnabledEventsBySections( $this->mockUser(), 'web',
+ [ 'message', 'alert' ] );
sort( $expected );
sort( $actual );
$this->assertEquals( $actual, $expected );
@@ -352,8 +357,13 @@ class EchoAttributeManagerTest extends MediaWikiTestCase {
/**
* @dataProvider getEventsByCategoryProvider
*/
- public function testGetEventsByCategory( $message, $expectedMapping, $categories, $notifications ) {
- $am = new EchoAttributeManager( $notifications, $categories, [], [], [] );
+ public function testGetEventsByCategory(
+ $message,
+ $expectedMapping,
+ $categories,
+ $notifications
+ ) {
+ $am = new EchoAttributeManager( $notifications, $categories, [], [] );
$actualMapping = $am->getEventsByCategory();
$this->assertEquals( $expectedMapping, $actualMapping, $message );
}
@@ -398,8 +408,16 @@ class EchoAttributeManagerTest extends MediaWikiTestCase {
/**
@dataProvider isNotifyTypeAvailableForCategoryProvider
*/
- public function testIsNotifyTypeAvailableForCategory( $message, $expected, $categoryName, $notifyType, $defaultNotifyTypeAvailability, $notifyTypeAvailabilityByCategory ) {
- $am = new EchoAttributeManager( [], [], $defaultNotifyTypeAvailability, $notifyTypeAvailabilityByCategory, [] );
+ public function testIsNotifyTypeAvailableForCategory(
+ $message,
+ $expected,
+ $categoryName,
+ $notifyType,
+ $defaultNotifyTypeAvailability,
+ $notifyTypeAvailabilityByCategory
+ ) {
+ $am = new EchoAttributeManager( [], [], $defaultNotifyTypeAvailability,
+ $notifyTypeAvailabilityByCategory );
$actual = $am->isNotifyTypeAvailableForCategory( $categoryName, $notifyType );
$this->assertEquals( $expected, $actual, $message );
}
@@ -445,8 +463,14 @@ class EchoAttributeManagerTest extends MediaWikiTestCase {
/**
* @dataProvider isNotifyTypeDismissableForCategoryProvider
*/
- public function testIsNotifyTypeDismissableForCategory( $message, $expected, $categories, $categoryName, $notifyType ) {
- $am = new EchoAttributeManager( [], $categories, [], [], [] );
+ public function testIsNotifyTypeDismissableForCategory(
+ $message,
+ $expected,
+ $categories,
+ $categoryName,
+ $notifyType
+ ) {
+ $am = new EchoAttributeManager( [], $categories, [], [] );
$actual = $am->isNotifyTypeDismissableForCategory( $categoryName, $notifyType );
$this->assertEquals( $expected, $actual, $message );
}
diff --git a/Echo/tests/phpunit/BundlerTest.php b/Echo/tests/phpunit/BundlerTest.php
index bd2f4499..a4a2e258 100644
--- a/Echo/tests/phpunit/BundlerTest.php
+++ b/Echo/tests/phpunit/BundlerTest.php
@@ -1,5 +1,8 @@
<?php
+/**
+ * @covers Bundler
+ */
class BundlerTest extends MediaWikiTestCase {
public function testBundle() {
diff --git a/Echo/tests/phpunit/ContainmentSetTest.php b/Echo/tests/phpunit/ContainmentSetTest.php
index 077e235b..1f538291 100644
--- a/Echo/tests/phpunit/ContainmentSetTest.php
+++ b/Echo/tests/phpunit/ContainmentSetTest.php
@@ -1,7 +1,9 @@
<?php
/**
+ * @covers EchoContainmentSet
* @group Echo
+ * @group Database
*/
class ContainmentSetTest extends MediaWikiTestCase {
@@ -15,6 +17,9 @@ class ContainmentSetTest extends MediaWikiTestCase {
$list->addArray( [ 'whammo' ] );
$this->assertTrue( $list->contains( 'whammo' ) );
+
+ $list->addArray( [ 0 ] );
+ $this->assertFalse( $list->contains( 'baz' ) );
}
public function testCachedListInnerListIsOnlyCalledOnce() {
@@ -46,7 +51,7 @@ class ContainmentSetTest extends MediaWikiTestCase {
}
/**
- * @Database
+ * @group Database
*/
public function testOnWikiList() {
$this->editPage( 'User:Foo/Bar-baz', "abc\ndef\r\nghi\n\n\n" );
diff --git a/Echo/tests/phpunit/DiffParserTest.php b/Echo/tests/phpunit/DiffParserTest.php
index 14dc8a7d..aeecef67 100644
--- a/Echo/tests/phpunit/DiffParserTest.php
+++ b/Echo/tests/phpunit/DiffParserTest.php
@@ -1,6 +1,7 @@
<?php
/**
+ * @covers EchoDiffParser
* @group Echo
*/
class EchoDiffParserTest extends MediaWikiTestCase {
@@ -58,7 +59,7 @@ class EchoDiffParserTest extends MediaWikiTestCase {
],
[
- 'Adding content seperated by no change must generate multiple changes',
+ 'Adding content separated by no change must generate multiple changes',
// Expected change set
[
self::mockAction( 'add', 'b1', 3 ),
diff --git a/Echo/tests/phpunit/DiscussionParserTest.php b/Echo/tests/phpunit/DiscussionParserTest.php
index 35da3fae..391ff078 100644
--- a/Echo/tests/phpunit/DiscussionParserTest.php
+++ b/Echo/tests/phpunit/DiscussionParserTest.php
@@ -1,16 +1,17 @@
<?php
-use MediaWiki\MediaWikiServices;
-use Wikimedia\ScopedCallback;
+// phpcs:disable Generic.Files.LineLength -- Long html test examples
+
use Wikimedia\TestingAccessWrapper;
/**
+ * @covers EchoDiscussionParser
* @group Echo
* @group Database
*/
class EchoDiscussionParserTest extends MediaWikiTestCase {
/**
- * @var array
+ * @var string[]
*/
protected $tablesUsed = [ 'user', 'revision', 'ip_changes', 'text', 'page' ];
@@ -19,7 +20,7 @@ class EchoDiscussionParserTest extends MediaWikiTestCase {
* Can be setup one by one using the setupTestUser() method
* Or all at once using the setupAllTestUsers() method
*
- * @var array [username => [user preference => preference value]]
+ * @var array[] [username => [user preference => preference value]]
*/
protected $testUsers = [
'Werdna' => [
@@ -338,6 +339,23 @@ class EchoDiscussionParserTest extends MediaWikiTestCase {
'title' => 'MultipleSignatureMentions',
'expected' => [],
],
+ [
+ 'new' => 1234,
+ 'old' => 123,
+ 'username' => 'Admin',
+ 'lang' => 'en',
+ 'pages' => [],
+ 'title' => 'Pings in summary',
+ 'expected' => [
+ [
+ 'type' => 'mention-summary',
+ 'agent' => 'Admin',
+ 'section-title' => null,
+ ]
+ ],
+ 'precondition' => '',
+ 'summary' => 'Hey [[User:Werdna|Werdna]] and [[User:Jorm]], [[User:Admin]] here',
+ ],
];
}
@@ -345,7 +363,8 @@ class EchoDiscussionParserTest extends MediaWikiTestCase {
* @dataProvider generateEventsForRevisionData
*/
public function testGenerateEventsForRevision(
- $newId, $oldId, $username, $lang, $pages, $title, $expected, $precondition = ''
+ $newId, $oldId, $username, $lang, $pages, $title, $expected, $precondition = '',
+ $summary = ''
) {
if ( $precondition !== '' ) {
$result = $this->$precondition();
@@ -359,7 +378,7 @@ class EchoDiscussionParserTest extends MediaWikiTestCase {
$this->setupAllTestUsers();
$revision = $this->setupTestRevisionsForEventGeneration(
- $newId, $oldId, $username, $lang, $pages, $title
+ $newId, $oldId, $username, $lang, $pages, $title, $summary
);
$events = [];
$this->setupEventCallbackForEventGeneration(
@@ -373,10 +392,14 @@ class EchoDiscussionParserTest extends MediaWikiTestCase {
}
);
- // disable mention failure and success notifications
- $this->setMwGlobals( 'wgEchoMentionStatusNotifications', false );
+ $this->setMwGlobals( [
+ // disable mention failure and success notifications
+ 'wgEchoMentionStatusNotifications' => false,
+ // enable pings from summary
+ 'wgEchoMaxMentionsInEditSummary' => 5,
+ ] );
- EchoDiscussionParser::generateEventsForRevision( $revision );
+ EchoDiscussionParser::generateEventsForRevision( $revision, false );
$this->assertEquals( $expected, $events );
}
@@ -718,7 +741,7 @@ class EchoDiscussionParserTest extends MediaWikiTestCase {
// enable multiple sections mentions
$this->setMwGlobals( 'wgEchoMentionsOnMultipleSectionEdits', true );
- EchoDiscussionParser::generateEventsForRevision( $revision );
+ EchoDiscussionParser::generateEventsForRevision( $revision, false );
$this->assertEquals( $expected, $events );
}
@@ -920,39 +943,22 @@ TEXT
'wgEchoMaxMentionsCount' => 5
] );
- EchoDiscussionParser::generateEventsForRevision( $revision );
+ EchoDiscussionParser::generateEventsForRevision( $revision, false );
$this->assertEquals( $expected, $events );
}
- private function setupTestRevisionsForEventGeneration( $newId, $oldId, $username, $lang, $pages, $title ) {
- $langObj = Language::factory( $lang );
+ private function setupTestRevisionsForEventGeneration( $newId, $oldId, $username, $lang, $pages,
+ $title, $summary = ''
+ ) {
+ // Content language is used by the code that interprets the namespace part of titles
+ // (Title::getTitleParser), so should be the fake language ;)
+ $this->setContentLang( $lang );
$this->setMwGlobals( [
- // this global is used by the code that interprets the namespace part of
- // titles (Title::getTitleParser), so should be the fake language ;)
- 'wgContLang' => $langObj,
// this one allows Mediawiki:xyz pages to be set as messages
'wgUseDatabaseMessages' => true
] );
-
- // Since we reset the $wgContLang global, reset the TitleParser service
- $services = MediaWikiServices::getInstance();
- if ( is_callable( [ $services, 'getTitleParser' ] ) ) {
- // TODO: All of this should use $this->setService()
- $services->resetServiceForTesting( 'TitleParser' );
- $services->redefineService( 'TitleParser', function () use ( $langObj ) {
- global $wgLocalInterwikis;
- return new MediaWikiTitleCodec(
- $langObj,
- new GenderCache(),
- $wgLocalInterwikis
- );
- } );
- // Cleanup
- $lock = new ScopedCallback( function () use ( $services ) {
- $services->resetServiceForTesting( 'TitleParser' );
- } );
- }
+ $this->overrideMwServices();
// pages to be created: templates may be used to ping users (e.g.
// {{u|...}}) but if we don't have that template, it just won't work!
@@ -988,6 +994,7 @@ TEXT
'parent_id' => $oldId,
'text' => $newText,
'title' => $title,
+ 'comment' => $summary,
];
$revision = Revision::newFromRow( $row );
@@ -1501,9 +1508,13 @@ TEXT
];
}
- public static function getExemplarTimestamp() {
- $title = Title::newMainPage();
- $user = User::newFromName( 'Test' );
+ public function getExemplarTimestamp() {
+ $title = $this->getMockBuilder( Title::class )
+ ->getMock();
+
+ $user = $this->getMockBuilder( User::class )
+ ->getMock();
+
$options = new ParserOptions;
global $wgParser;
@@ -1795,7 +1806,7 @@ TEXT
}
protected function isParserFunctionsInstalled() {
- if ( class_exists( 'ExtParserFunctions' ) ) {
+ if ( ExtensionRegistry::getInstance()->isLoaded( 'ParserFunctions' ) ) {
return true;
} else {
return "ParserFunctions not enabled";
diff --git a/Echo/tests/phpunit/EchoDbFactoryTest.php b/Echo/tests/phpunit/EchoDbFactoryTest.php
index 18ac1170..337c92d3 100644
--- a/Echo/tests/phpunit/EchoDbFactoryTest.php
+++ b/Echo/tests/phpunit/EchoDbFactoryTest.php
@@ -1,5 +1,11 @@
<?php
+use Wikimedia\Rdbms\IDatabase;
+use Wikimedia\Rdbms\ILoadBalancer;
+
+/**
+ * @covers MWEchoDbFactory
+ */
class MWEchoDbFactoryTest extends MediaWikiTestCase {
public function testNewFromDefault() {
@@ -13,8 +19,8 @@ class MWEchoDbFactoryTest extends MediaWikiTestCase {
* @depends testNewFromDefault
*/
public function testGetEchoDb( MWEchoDbFactory $db ) {
- $this->assertInstanceOf( 'DatabaseBase', $db->getEchoDb( DB_MASTER ) );
- $this->assertInstanceOf( 'DatabaseBase', $db->getEchoDb( DB_SLAVE ) );
+ $this->assertInstanceOf( IDatabase::class, $db->getEchoDb( DB_MASTER ) );
+ $this->assertInstanceOf( IDatabase::class, $db->getEchoDb( DB_REPLICA ) );
}
/**
@@ -24,7 +30,7 @@ class MWEchoDbFactoryTest extends MediaWikiTestCase {
$reflection = new ReflectionClass( 'MWEchoDbFactory' );
$method = $reflection->getMethod( 'getLB' );
$method->setAccessible( true );
- $this->assertInstanceOf( 'LoadBalancer', $method->invoke( $db ) );
+ $this->assertInstanceOf( ILoadBalancer::class, $method->invoke( $db ) );
}
}
diff --git a/Echo/tests/phpunit/EchoHooksTest.php b/Echo/tests/phpunit/EchoHooksTest.php
new file mode 100644
index 00000000..d1f2ac56
--- /dev/null
+++ b/Echo/tests/phpunit/EchoHooksTest.php
@@ -0,0 +1,53 @@
+<?php
+
+class EchoHooksTest extends MediaWikiTestCase {
+ /**
+ * @covers \EchoHooks::onUserGetDefaultOptions()
+ */
+ public function testOnUserGetDefaultOptions() {
+ $this->setMwGlobals( [
+ 'wgEchoNotificationCategories' => [
+ 'emailuser' => [
+ 'priority' => 9,
+ 'tooltip' => 'echo-pref-tooltip-emailuser',
+ ],
+ 'mention' => [
+ 'priority' => 4,
+ 'tooltip' => 'echo-pref-tooltip-mention',
+ ],
+ 'system' => [
+ 'priority' => 9,
+ 'no-dismiss' => [
+ 'all'
+ ],
+ ],
+ 'some-custom-category' => [
+ 'priority' => 9001,
+ ],
+ ],
+ 'wgAllowHTMLEmail' => true,
+ ] );
+
+ $defaults = [
+ 'something' => 'unrelated',
+ // T174220: don't overwrite defaults set elsewhere
+ 'echo-subscriptions-web-mention' => false,
+ ];
+ EchoHooks::onUserGetDefaultOptions( $defaults );
+ self::assertEquals(
+ [
+ 'something' => 'unrelated',
+ 'echo-email-format' => 'html',
+ 'echo-subscriptions-email-mention' => false,
+ 'echo-subscriptions-web-mention' => false,
+ 'echo-subscriptions-email-emailuser' => false,
+ 'echo-subscriptions-web-emailuser' => true,
+ 'echo-subscriptions-email-system' => true,
+ 'echo-subscriptions-web-system' => true,
+ 'echo-subscriptions-email-some-custom-category' => false,
+ 'echo-subscriptions-web-some-custom-category' => true,
+ ],
+ $defaults
+ );
+ }
+}
diff --git a/Echo/tests/phpunit/EchoSummaryParserTest.php b/Echo/tests/phpunit/EchoSummaryParserTest.php
new file mode 100644
index 00000000..357036fc
--- /dev/null
+++ b/Echo/tests/phpunit/EchoSummaryParserTest.php
@@ -0,0 +1,68 @@
+<?php
+
+/**
+ * @group Echo
+ */
+class EchoSummaryParserTest extends MediaWikiTestCase {
+ private $existingUsers = [
+ 'Werdna',
+ 'Jorm',
+ 'Jim Carter',
+ ];
+ /**
+ * @covers EchoSummaryParser::parse
+ * @dataProvider provideParse
+ *
+ * @param string $summary
+ * @param string[] $expectedUsers
+ */
+ public function testParse( $summary, array $expectedUsers ) {
+ $parser = new EchoSummaryParser( function ( User $user ) {
+ if ( in_array( $user->getName(), $this->existingUsers ) ) {
+ return crc32( $user->getName() );
+ }
+ return 0;
+ } );
+
+ $users = $parser->parse( $summary );
+ foreach ( $users as $name => $user ) {
+ $this->assertType( User::class, $user );
+ $this->assertEquals( $name, $user->getName() );
+ }
+
+ $users = array_keys( $users );
+
+ $this->assertArrayEquals( $expectedUsers, $users );
+ }
+
+ public function provideParse() {
+ return [
+ [ '', [] ],
+ [ " \t\r\n ", [] ],
+ [ 'foo bar', [] ],
+ [ 'Werdna', [] ],
+ [ 'User:Werdna', [] ],
+ [ '[User:Werdna]', [] ],
+ [ '[[]]', [] ],
+ [ '[[:]]', [] ],
+ [ '[[|]]', [] ],
+ [ '[[:|]]', [] ],
+ [ '[[:|test]]', [] ],
+ [ '[[User:Nonexistent]]', [] ],
+ [ '/* [[User:Werdna */', [] ],
+ [ '[[User talk:Werdna]]', [] ],
+ [ '[[User:Werdna]]', [ 'Werdna' ] ],
+ [ 'this is [[ [[User:Werdna]] ]]', [ 'Werdna' ] ],
+ [ '[[User:Werdna|]]', [ 'Werdna' ] ],
+ [ '[[User:Werdna| ]]', [ 'Werdna' ] ],
+ [ '[[User:Werdna|Wer | d[n]a]]', [ 'Werdna' ] ],
+ [ '[[User:Werdna]][[User:Werdna]][[User:Werdna]]', [ 'Werdna' ] ],
+ [ '/**/[[User:Werdna]][[user:jorm]]', [ 'Werdna', 'Jorm' ] ],
+ [ '/* [[User:Werdna]] */ [[ user : jim_ Carter_]]', [ 'Jim Carter' ] ],
+ [ '[[User:/* Jorm */]][[User:/* remove me */Werdna]]', [] ],
+ [ '[[:User:Werdna]]', [] ],
+ [ '[[:User:Werdna|]]', [] ],
+ [ '[[:User:Werdna|foo]]', [] ],
+ ];
+ }
+}
diff --git a/Echo/tests/phpunit/NotifUserTest.php b/Echo/tests/phpunit/NotifUserTest.php
index d766a546..b25f3dc5 100644
--- a/Echo/tests/phpunit/NotifUserTest.php
+++ b/Echo/tests/phpunit/NotifUserTest.php
@@ -1,7 +1,9 @@
<?php
+
use MediaWiki\MediaWikiServices;
/**
+ * @covers MWEchoNotifUser
* @group Echo
*/
class MWEchoNotifUserTest extends MediaWikiTestCase {
@@ -33,45 +35,6 @@ class MWEchoNotifUserTest extends MediaWikiTestCase {
$this->assertInstanceOf( 'MWEchoNotifUser', $notifUser );
}
- public function testFlagCacheWithNewTalkNotification() {
- $notifUser = $this->newNotifUser();
-
- $notifUser->flagCacheWithNewTalkNotification();
- $this->assertEquals( '1', $this->cache->get( $notifUser->getTalkNotificationCacheKey() ) );
- }
-
- public function testFlagCacheWithNoTalkNotification() {
- $notifUser = $this->newNotifUser();
-
- $notifUser->flagCacheWithNoTalkNotification();
- $this->assertEquals( '0', $this->cache->get( $notifUser->getTalkNotificationCacheKey() ) );
- }
-
- public function testNotifCountHasReachedMax() {
- $notifUser = $this->newNotifUser();
-
- if ( $notifUser->getLocalNotificationCount() > MWEchoNotifUser::MAX_BADGE_COUNT ) {
- $this->assertTrue( $notifUser->notifCountHasReachedMax() );
- } else {
- $this->assertFalse( $notifUser->notifCountHasReachedMax() );
- }
- }
-
- public function testClearTalkNotification() {
- $notifUser = $this->newNotifUser();
-
- $notifUser->flagCacheWithNewTalkNotification();
-
- $hasMax = $notifUser->notifCountHasReachedMax();
-
- $notifUser->clearTalkNotification();
- if ( $hasMax ) {
- $this->assertEquals( '1', $this->cache->get( $notifUser->getTalkNotificationCacheKey() ) );
- } else {
- $this->assertEquals( '0', $this->cache->get( $notifUser->getTalkNotificationCacheKey() ) );
- }
- }
-
public function testGetEmailFormat() {
$user = User::newFromId( 2 );
$notifUser = MWEchoNotifUser::newFromUser( $user );
@@ -156,6 +119,12 @@ class MWEchoNotifUserTest extends MediaWikiTestCase {
$gateway->expects( $this->any() )
->method( 'markRead' )
->will( $this->returnValue( $dbResult['markRead'] ) );
+ $gateway->expects( $this->any() )
+ ->method( 'getDB' )
+ ->will( $this->returnValue(
+ $this->getMockBuilder( Database::class )
+ ->disableOriginalConstructor()->getMock()
+ ) );
return $gateway;
}
@@ -171,15 +140,10 @@ class MWEchoNotifUserTest extends MediaWikiTestCase {
return $mapper;
}
- public function mockEchoTargetPageMapper( array $result = [] ) {
- $mapper = $this->getMockBuilder( 'EchoTargetPageMapper' )
+ public function mockEchoTargetPageMapper() {
+ return $this->getMockBuilder( EchoTargetPageMapper::class )
->disableOriginalConstructor()
->getMock();
- $mapper->expects( $this->any() )
- ->method( 'deleteByUserEvents' )
- ->will( $this->returnValue( $result ) );
-
- return $mapper;
}
protected function mockEchoNotification() {
diff --git a/Echo/tests/phpunit/NotificationStructureTest.php b/Echo/tests/phpunit/NotificationStructureTest.php
new file mode 100644
index 00000000..17f5a5f3
--- /dev/null
+++ b/Echo/tests/phpunit/NotificationStructureTest.php
@@ -0,0 +1,40 @@
+<?php
+
+class NotificationStructureTest extends MediaWikiTestCase {
+ /**
+ * @coversNothing
+ * @dataProvider provideNotificationTypes
+ *
+ * @param string $type
+ * @param array $info
+ */
+ public function testNotificationTypes( $type, array $info ) {
+ if ( isset( $info['presentation-model'] ) ) {
+ self::assertTrue( class_exists( $info['presentation-model'] ),
+ "Presentation model class {$info['presentation-model']} for {$type} must exist"
+ );
+ }
+
+ if ( isset( $info['user-locators'] ) ) {
+ $locators = $info['user-locators'];
+ $locator = reset( $locators );
+ if ( is_array( $locator ) ) {
+ $locator = reset( $locator );
+ }
+ self::assertTrue( is_callable( $locator ),
+ 'User locator ' . print_r( $locator, true ) . " for {$type} must be callable"
+ );
+ }
+ }
+
+ public function provideNotificationTypes() {
+ global $wgEchoNotifications;
+
+ $result = [];
+ foreach ( $wgEchoNotifications as $type => $info ) {
+ $result[] = [ $type, $info ];
+ }
+
+ return $result;
+ }
+}
diff --git a/Echo/tests/NotificationsTest.php b/Echo/tests/phpunit/NotificationsTest.php
index cc7ddfe6..641e6bd0 100644
--- a/Echo/tests/NotificationsTest.php
+++ b/Echo/tests/phpunit/NotificationsTest.php
@@ -24,14 +24,15 @@ class NotificationsTest extends MediaWikiTestCase {
* @return EchoEvent
*/
public static function getLatestNotification( $user ) {
- $notifs = ApiEchoNotifications::getNotifications( $user );
- $index = array_keys( $notifs );
+ $notifMapper = new EchoNotificationMapper();
+ $notifs = $notifMapper->fetchUnreadByUser( $user, 1, '', [ 'user-rights' ] );
+ $notif = array_pop( $notifs );
- return EchoEvent::newFromID( $notifs[$index[0]]['id'] );
+ return $notif->getEvent();
}
/**
- * @covers EchoHooks::onUserRights
+ * @covers EchoHooks::onUserGroupsChanged
*/
public function testUserRightsNotif() {
$user = new User();
diff --git a/Echo/tests/phpunit/TalkPageFunctionalTest.php b/Echo/tests/phpunit/TalkPageFunctionalTest.php
index 4c80f2e0..f33e5020 100644
--- a/Echo/tests/phpunit/TalkPageFunctionalTest.php
+++ b/Echo/tests/phpunit/TalkPageFunctionalTest.php
@@ -2,22 +2,26 @@
/**
* @group Echo
- * @group DataBase
+ * @group Database
* @group medium
*/
class EchoTalkPageFunctionalTest extends ApiTestCase {
+ /**
+ * @var \Wikimedia\Rdbms\IDatabase
+ */
protected $dbr;
protected function setUp() {
parent::setUp();
- $this->dbr = MWEchoDbFactory::getDB( DB_SLAVE );
+ $this->dbr = MWEchoDbFactory::getDB( DB_REPLICA );
}
/**
* Creates and updates a user talk page a few times to ensure proper events are
* created. The user performing the edits is self::$users['sysop'].
* @group Broken
+ * @covers \EchoDiscussionParser
*/
public function testAddCommentsToTalkPage() {
$editor = self::$users['sysop']->getUser()->getName();
@@ -76,7 +80,7 @@ class EchoTalkPageFunctionalTest extends ApiTestCase {
}
/**
- * @return array All events in db sorted from oldest to newest
+ * @return \stdClass[] All events in db sorted from oldest to newest
*/
protected function fetchAllEvents() {
$res = $this->dbr->select( 'echo_event', [ '*' ], [], __METHOD__, [ 'ORDER BY' => 'event_id ASC' ] );
diff --git a/Echo/tests/phpunit/ThankYouEditTest.php b/Echo/tests/phpunit/ThankYouEditTest.php
index a573bdb1..5325c5cd 100644
--- a/Echo/tests/phpunit/ThankYouEditTest.php
+++ b/Echo/tests/phpunit/ThankYouEditTest.php
@@ -2,6 +2,7 @@
/**
* @group Echo
+ * @group Database
*/
class MWEchoThankYouEditTest extends MediaWikiTestCase {
@@ -17,6 +18,9 @@ class MWEchoThankYouEditTest extends MediaWikiTestCase {
$db->delete( 'echo_notification', '*', __METHOD__ );
}
+ /**
+ * @covers \EchoHooks::onPageContentSaveComplete
+ */
public function testFirstEdit() {
// setup
$this->deleteEchoData();
@@ -36,6 +40,9 @@ class MWEchoThankYouEditTest extends MediaWikiTestCase {
$this->assertEquals( 1, $notification->getEvent()->getExtraParam( 'editCount', 'not found' ) );
}
+ /**
+ * @covers \EchoHooks::onPageContentSaveComplete
+ */
public function testTenthEdit() {
// setup
$this->deleteEchoData();
diff --git a/Echo/tests/phpunit/UserLocatorTest.php b/Echo/tests/phpunit/UserLocatorTest.php
index f09f80a9..514c8226 100644
--- a/Echo/tests/phpunit/UserLocatorTest.php
+++ b/Echo/tests/phpunit/UserLocatorTest.php
@@ -1,7 +1,8 @@
<?php
/**
- * @Database
+ * @group Database
+ * @covers EchoUserLocator
*/
class EchoUserLocatorTest extends MediaWikiTestCase {
diff --git a/Echo/tests/phpunit/api/ApiEchoMarkReadTest.php b/Echo/tests/phpunit/api/ApiEchoMarkReadTest.php
index 135d1867..9c41ec37 100644
--- a/Echo/tests/phpunit/api/ApiEchoMarkReadTest.php
+++ b/Echo/tests/phpunit/api/ApiEchoMarkReadTest.php
@@ -4,15 +4,10 @@
* @group medium
* @group API
* @group Database
- * @covers ApiQuery
+ * @covers ApiEchoMarkRead
*/
class ApiEchoMarkReadTest extends ApiTestCase {
- protected function setUp() {
- parent::setUp();
- $this->doLogin();
- }
-
function getTokens() {
return $this->getTokenList( self::$users['sysop'] );
}
diff --git a/Echo/tests/phpunit/api/ApiEchoNotificationsTest.php b/Echo/tests/phpunit/api/ApiEchoNotificationsTest.php
index 9f86a6ef..cfcf5c90 100644
--- a/Echo/tests/phpunit/api/ApiEchoNotificationsTest.php
+++ b/Echo/tests/phpunit/api/ApiEchoNotificationsTest.php
@@ -3,7 +3,7 @@
/**
* @group medium
* @group API
- * @covers ApiQuery
+ * @covers ApiEchoNotifications
*/
class ApiEchoNotificationsTest extends ApiTestCase {
diff --git a/Echo/tests/phpunit/cache/TitleLocalCacheTest.php b/Echo/tests/phpunit/cache/TitleLocalCacheTest.php
index af255edb..fdd722d3 100644
--- a/Echo/tests/phpunit/cache/TitleLocalCacheTest.php
+++ b/Echo/tests/phpunit/cache/TitleLocalCacheTest.php
@@ -1,90 +1,85 @@
<?php
+use Wikimedia\TestingAccessWrapper;
+
+/**
+ * @covers EchoTitleLocalCache
+ * @group Database
+ */
class EchoTitleLocalCacheTest extends MediaWikiTestCase {
public function testCreate() {
$cache = EchoTitleLocalCache::create();
- $this->assertInstanceOf( 'EchoTitleLocalCache', $cache );
-
- return $cache;
+ $this->assertInstanceOf( EchoTitleLocalCache::class, $cache );
}
- /**
- * @depends testCreate
- */
- public function testAdd( $cache ) {
- $cache->clearAll();
+ public function testAdd() {
+ $cache = $this->getMockBuilder( EchoTitleLocalCache::class )
+ ->setMethods( [ 'resolve' ] )->getMock();
+
$cache->add( 1 );
- $this->assertEquals( count( $cache->getLookups() ), 1 );
- $this->assertArrayHasKey( 1, $cache->getLookups() );
+ $cache->add( 9 );
+
+ // Resolutions should be batched
+ $cache->expects( $this->exactly( 1 ) )->method( 'resolve' )
+ ->with( [ 1, 9 ] )->willReturn( [] );
+
+ // Trigger
+ $cache->get( 9 );
}
- /**
- * @depends testCreate
- */
- public function testGet( $cache ) {
- $map = new HashBagOStuff( [ 'maxKeys' => EchoLocalCache::TARGET_MAX_NUM ] );
- $titleIds = [];
+ public function testGet() {
+ $cache = $this->getMockBuilder( EchoTitleLocalCache::class )
+ ->setMethods( [ 'resolve' ] )->getMock();
+ $cachePriv = TestingAccessWrapper::newFromObject( $cache );
// First title included in cache
- $res = $this->insertPage( 'EchoTitleLocalCacheTest_testGet' );
- $titleIds[$res['id']] = $res['id'];
- $map->set( $res['id'], $res['title'] );
-
+ $res1 = $this->insertPage( 'EchoTitleLocalCacheTest_testGet1' );
+ $cachePriv->targets->set( $res1['id'], $res1['title'] );
// Second title not in internal cache, resolves from db.
- $res = $this->insertPage( 'EchoTitleLocalCacheTest_testGet2' );
- $titleIds[$res['id']] = $res['id'];
-
- $object = new \ReflectionObject( $cache );
-
- // Load our generated map in as the targets (known mapping from
- // title id to title object) into $cache
- $targets = $object->getProperty( 'targets' );
- $targets->setAccessible( true );
- $targets->setValue( $cache, $map );
-
- // Load both of the titles we are curious about into the list of titles
- // to be looked up
- $lookups = $object->getProperty( 'lookups' );
- $lookups->setAccessible( true );
- $lookups->setValue( $cache, $titleIds );
-
- // Requesting the first object, which is within the known targets, should
- // not resolve the pending lookups.
- $this->assertInstanceOf( 'Title', $cache->get( reset( $titleIds ) ) );
- $this->assertGreaterThan( 0, count( $cache->getLookups() ) );
-
- // Requesting the second object, which is not within the known targets, should
- // resolve the pending lookups and reset the list to lookup.
- $this->assertInstanceOf( 'Title', $cache->get( end( $titleIds ) ) );
- $this->assertEquals( 0, count( $cache->getLookups() ) );
+ $res2 = $this->insertPage( 'EchoTitleLocalCacheTest_testGet2' );
+ $cache->expects( $this->exactly( 1 ) )->method( 'resolve' )
+ ->with( [ $res2['id'] ] )
+ ->willReturn( [ $res2['id'] => $res2['title'] ] );
+
+ // Register demand for both
+ $cache->add( $res1['id'] );
+ $cache->add( $res2['id'] );
+
+ // Should not call resolve() for first title
+ $this->assertSame( $res1['title'], $cache->get( $res1['id'] ), 'First title' );
+
+ // Should resolve() for second title
+ $this->assertSame( $res2['title'], $cache->get( $res2['id'] ), 'Second title' );
}
- /**
- * @depends testCreate
- */
- public function testClearAll( $cache ) {
- $map = new HashBagOStuff( [ 'maxKeys' => EchoLocalCache::TARGET_MAX_NUM ] );
- $map->set( 1, $this->mockTitle() );
- $object = new \ReflectionObject( $cache );
- $targets = $object->getProperty( 'targets' );
- $targets->setAccessible( true );
- $targets->setValue( $cache, $map );
- $lookups = $object->getProperty( 'lookups' );
- $lookups->setAccessible( true );
- $lookups->setValue( $cache, [ '1' => '1', '2' => '2' ] );
+ public function testClearAll() {
+ $cache = $this->getMockBuilder( EchoTitleLocalCache::class )
+ ->setMethods( [ 'resolve' ] )->getMock();
+ // Add 1 to cache
+ $cachePriv = TestingAccessWrapper::newFromObject( $cache );
+ $cachePriv->targets->set( 1, $this->mockTitle() );
+ // Add 2 and 3 to demand
+ $cache->add( 2 );
+ $cache->add( 3 );
$cache->clearAll();
- $this->assertTrue( count( $cache->getLookups() ) == 0 );
- $this->assertEquals( false, $cache->getTargets()->get( 1 ) );
- $this->assertEquals( false, $cache->getTargets()->get( '1' ) );
+
+ $this->assertSame( null, $cache->get( 1 ), 'Cache was cleared' );
+
+ // Lookups batch was cleared
+ $cache->expects( $this->exactly( 1 ) )->method( 'resolve' )
+ ->with( [ 4 ] )
+ ->willReturn( [] );
+ $cache->add( 4 );
+ $cache->get( 4 );
}
/**
- * Mock object of Title
+ * @return Title
*/
protected function mockTitle() {
- $title = $this->getMockBuilder( 'Title' )
+ $title = $this->getMockBuilder( Title::class )
->disableOriginalConstructor()
->getMock();
diff --git a/Echo/tests/phpunit/controller/NotificationControllerTest.php b/Echo/tests/phpunit/controller/NotificationControllerTest.php
index 8a38a7e5..9e497024 100644
--- a/Echo/tests/phpunit/controller/NotificationControllerTest.php
+++ b/Echo/tests/phpunit/controller/NotificationControllerTest.php
@@ -1,5 +1,8 @@
<?php
+/**
+ * @covers EchoNotificationController
+ */
class NotificationControllerTest extends MediaWikiTestCase {
public function evaluateUserLocatorsProvider() {
diff --git a/Echo/tests/phpunit/gateway/UserNotificationGatewayTest.php b/Echo/tests/phpunit/gateway/UserNotificationGatewayTest.php
index 7e656e19..2cc4fd78 100644
--- a/Echo/tests/phpunit/gateway/UserNotificationGatewayTest.php
+++ b/Echo/tests/phpunit/gateway/UserNotificationGatewayTest.php
@@ -1,11 +1,14 @@
<?php
+/**
+ * @covers EchoUserNotificationGateway
+ */
class EchoUserNotificationGatewayTest extends MediaWikiTestCase {
public function testMarkRead() {
// no event ids to mark
$gateway = new EchoUserNotificationGateway( User::newFromId( 1 ), $this->mockMWEchoDbFactory() );
- $this->assertNull( $gateway->markRead( [] ) );
+ $this->assertFalse( $gateway->markRead( [] ) );
// successful update
$gateway = new EchoUserNotificationGateway( User::newFromId( 1 ), $this->mockMWEchoDbFactory( [ 'update' => true ] ) );
@@ -29,19 +32,19 @@ class EchoUserNotificationGatewayTest extends MediaWikiTestCase {
public function testGetNotificationCount() {
// unsuccessful select
$gateway = new EchoUserNotificationGateway( $this->mockUser(), $this->mockMWEchoDbFactory( [ 'selectRowCount' => 0 ] ) );
- $this->assertEquals( 0, $gateway->getCappedNotificationCount( DB_SLAVE, [ 'event_one' ] ) );
+ $this->assertEquals( 0, $gateway->getCappedNotificationCount( DB_REPLICA, [ 'event_one' ] ) );
// successful select of alert
$gateway = new EchoUserNotificationGateway( $this->mockUser(), $this->mockMWEchoDbFactory( [ 'selectRowCount' => 2 ] ) );
- $this->assertEquals( 2, $gateway->getCappedNotificationCount( DB_SLAVE, [ 'event_one', 'event_two' ] ) );
+ $this->assertEquals( 2, $gateway->getCappedNotificationCount( DB_REPLICA, [ 'event_one', 'event_two' ] ) );
// there is event, should return 0
$gateway = new EchoUserNotificationGateway( $this->mockUser(), $this->mockMWEchoDbFactory( [ 'selectRowCount' => 2 ] ) );
- $this->assertEquals( 0, $gateway->getCappedNotificationCount( DB_SLAVE, [] ) );
+ $this->assertEquals( 0, $gateway->getCappedNotificationCount( DB_REPLICA, [] ) );
// successful select
$gateway = new EchoUserNotificationGateway( $this->mockUser(), $this->mockMWEchoDbFactory( [ 'selectRowCount' => 3 ] ) );
- $this->assertEquals( 3, $gateway->getCappedNotificationCount( DB_SLAVE, [ 'event_one' ] ) );
+ $this->assertEquals( 3, $gateway->getCappedNotificationCount( DB_REPLICA, [ 'event_one' ] ) );
}
public function testGetUnreadNotifications() {
@@ -93,7 +96,8 @@ class EchoUserNotificationGatewayTest extends MediaWikiTestCase {
}
/**
- * Mock object of DatabaseMysql ( DatabaseBase )
+ * Returns a mock database object
+ * @return \Wikimedia\Rdbms\IDatabase
*/
protected function mockDb( array $dbResult = [] ) {
$dbResult += [
@@ -102,7 +106,7 @@ class EchoUserNotificationGatewayTest extends MediaWikiTestCase {
'selectRow' => '',
'selectRowCount' => '',
];
- $db = $this->getMockBuilder( 'DatabaseMysql' )
+ $db = $this->getMockBuilder( 'DatabaseMysqli' )
->disableOriginalConstructor()
->getMock();
$db->expects( $this->any() )
@@ -117,9 +121,10 @@ class EchoUserNotificationGatewayTest extends MediaWikiTestCase {
$db->expects( $this->any() )
->method( 'selectRowCount' )
->will( $this->returnValue( $dbResult['selectRowCount'] ) );
+ $numRows = is_array( $dbResult['select'] ) ? count( $dbResult['select'] ) : 0;
$db->expects( $this->any() )
->method( 'numRows' )
- ->will( $this->returnValue( count( $dbResult['select'] ) ) );
+ ->will( $this->returnValue( $numRows ) );
return $db;
}
diff --git a/Echo/tests/phpunit/iterator/FilteredSequentialIteratorTest.php b/Echo/tests/phpunit/iterator/FilteredSequentialIteratorTest.php
index b05e3229..7042d633 100644
--- a/Echo/tests/phpunit/iterator/FilteredSequentialIteratorTest.php
+++ b/Echo/tests/phpunit/iterator/FilteredSequentialIteratorTest.php
@@ -1,5 +1,9 @@
<?php
+/**
+ * @covers EchoCallbackIterator
+ * @covers EchoFilteredSequentialIterator
+ */
class FilteredSequentialIteratorTest extends MediaWikiTestCase {
public function testEchoCallbackIteratorDoesntBlowUp() {
diff --git a/Echo/tests/phpunit/maintenance/SupressionMaintenanceTest.php b/Echo/tests/phpunit/maintenance/SupressionMaintenanceTest.php
index 0a32d8af..029be88f 100644
--- a/Echo/tests/phpunit/maintenance/SupressionMaintenanceTest.php
+++ b/Echo/tests/phpunit/maintenance/SupressionMaintenanceTest.php
@@ -2,6 +2,7 @@
/**
* @group Echo
+ * @covers EchoSuppressionRowUpdateGenerator
*/
class SuppressionMaintenanceTest extends MediaWikiTestCase {
diff --git a/Echo/tests/phpunit/mapper/AbstractMapperTest.php b/Echo/tests/phpunit/mapper/AbstractMapperTest.php
index 5c3a5826..02194a02 100644
--- a/Echo/tests/phpunit/mapper/AbstractMapperTest.php
+++ b/Echo/tests/phpunit/mapper/AbstractMapperTest.php
@@ -1,5 +1,8 @@
<?php
+/**
+ * @covers EchoAbstractMapper
+ */
class EchoAbstractMapperTest extends MediaWikiTestCase {
public function testAttachListener() {
@@ -65,13 +68,3 @@ class EchoAbstractMapperTest extends MediaWikiTestCase {
}
}
-
-/**
- * Create a stub class for testing the abstract class
- */
-class EchoAbstractMapperStub extends EchoAbstractMapper {
-
- public function testMethod() {
- }
-
-}
diff --git a/Echo/tests/phpunit/mapper/EchoAbstractMapperStub.php b/Echo/tests/phpunit/mapper/EchoAbstractMapperStub.php
new file mode 100644
index 00000000..359e97ff
--- /dev/null
+++ b/Echo/tests/phpunit/mapper/EchoAbstractMapperStub.php
@@ -0,0 +1,11 @@
+<?php
+
+/**
+ * Create a stub class for testing the abstract class
+ */
+class EchoAbstractMapperStub extends EchoAbstractMapper {
+
+ public function testMethod() {
+ }
+
+}
diff --git a/Echo/tests/phpunit/mapper/EchoExecuteFirstArgumentStub.php b/Echo/tests/phpunit/mapper/EchoExecuteFirstArgumentStub.php
new file mode 100644
index 00000000..1e2889e7
--- /dev/null
+++ b/Echo/tests/phpunit/mapper/EchoExecuteFirstArgumentStub.php
@@ -0,0 +1,18 @@
+<?php
+
+class EchoExecuteFirstArgumentStub implements PHPUnit_Framework_MockObject_Stub {
+ public function invoke( PHPUnit_Framework_MockObject_Invocation $invocation ) {
+ if ( !$invocation instanceof PHPUnit_Framework_MockObject_Invocation_Static ) {
+ throw new PHPUnit_Framework_Exception( 'wrong invocation type' );
+ }
+ if ( !$invocation->arguments ) {
+ throw new PHPUnit_Framework_Exception( 'Method call must have an argument' );
+ }
+
+ return call_user_func( reset( $invocation->arguments ) );
+ }
+
+ public function toString() {
+ return 'return result of call_user_func on first invocation argument';
+ }
+}
diff --git a/Echo/tests/phpunit/mapper/EventMapperTest.php b/Echo/tests/phpunit/mapper/EventMapperTest.php
index e9528ca9..e81e183d 100644
--- a/Echo/tests/phpunit/mapper/EventMapperTest.php
+++ b/Echo/tests/phpunit/mapper/EventMapperTest.php
@@ -1,5 +1,8 @@
<?php
+/**
+ * @covers EchoEventMapper
+ */
class EchoEventMapperTest extends MediaWikiTestCase {
public function provideDataTestInsert() {
@@ -99,7 +102,8 @@ class EchoEventMapperTest extends MediaWikiTestCase {
}
/**
- * Mock object of DatabaseMysql ( DatabaseBase )
+ * Returns a mock database object
+ * @return \Wikimedia\Rdbms\IDatabase
*/
protected function mockDb( array $dbResult ) {
$dbResult += [
@@ -108,7 +112,7 @@ class EchoEventMapperTest extends MediaWikiTestCase {
'select' => '',
'selectRow' => ''
];
- $db = $this->getMockBuilder( 'DatabaseMysql' )
+ $db = $this->getMockBuilder( 'DatabaseMysqli' )
->disableOriginalConstructor()
->getMock();
$db->expects( $this->any() )
diff --git a/Echo/tests/phpunit/mapper/NotificationMapperTest.php b/Echo/tests/phpunit/mapper/NotificationMapperTest.php
index 420c0934..62359a9c 100644
--- a/Echo/tests/phpunit/mapper/NotificationMapperTest.php
+++ b/Echo/tests/phpunit/mapper/NotificationMapperTest.php
@@ -1,5 +1,8 @@
<?php
+/**
+ * @covers EchoNotificationMapper
+ */
class EchoNotificationMapperTest extends MediaWikiTestCase {
/**
@@ -39,8 +42,8 @@ class EchoNotificationMapperTest extends MediaWikiTestCase {
$notifMapper = new EchoNotificationMapper( $this->mockMWEchoDbFactory( [ 'select' => $dbResult ] ) );
$res = $notifMapper->fetchUnreadByUser( $this->mockUser(), 10, null, '', [ 'test_event' ] );
- $this->assertTrue( is_array( $res ) );
- $this->assertGreaterThan( 0, count( $res ) );
+ $this->assertInternalType( 'array', $res );
+ $this->assertNotEmpty( $res );
foreach ( $res as $row ) {
$this->assertInstanceOf( 'EchoNotification', $row );
}
@@ -90,8 +93,8 @@ class EchoNotificationMapperTest extends MediaWikiTestCase {
)
);
$res = $notifMapper->fetchByUser( $this->mockUser(), 10, '', [ 'test_event' ] );
- $this->assertTrue( is_array( $res ) );
- $this->assertGreaterThan( 0, count( $res ) );
+ $this->assertInternalType( 'array', $res );
+ $this->assertNotEmpty( $res );
foreach ( $res as $row ) {
$this->assertInstanceOf( 'EchoNotification', $row );
}
@@ -158,13 +161,36 @@ class EchoNotificationMapperTest extends MediaWikiTestCase {
}
public function testDeleteByUserEventOffset() {
- $dbResult = [ 'delete' => true ];
- $notifMapper = new EchoNotificationMapper( $this->mockMWEchoDbFactory( $dbResult ) );
- $this->assertTrue( $notifMapper->deleteByUserEventOffset( User::newFromId( 1 ), 500 ) );
+ $this->setMwGlobals( [ 'wgUpdateRowsPerQuery' => 4 ] );
+ $mockDb = $this->getMockBuilder( 'DatabaseMysqli' )
+ ->disableOriginalConstructor()
+ ->getMock();
+ $mockDb->expects( $this->any() )
+ ->method( 'selectFieldValues' )
+ ->will( $this->returnValue( [ 1, 2, 3, 5, 8, 13, 21, 34, 55, 89 ] ) );
+ $mockDb->expects( $this->exactly( 3 ) )
+ ->method( 'delete' )
+ ->withConsecutive(
+ [
+ $this->equalTo( 'echo_notification' ),
+ $this->equalTo( [ 'notification_user' => 1, 'notification_event' => [ 1, 2, 3, 5 ] ] ),
+ $this->anything()
+ ],
+ [
+ $this->equalTo( 'echo_notification' ),
+ $this->equalTo( [ 'notification_user' => 1, 'notification_event' => [ 8, 13, 21, 34 ] ] ),
+ $this->anything()
+ ],
+ [
+ $this->equalTo( 'echo_notification' ),
+ $this->equalTo( [ 'notification_user' => 1, 'notification_event' => [ 55, 89 ] ] ),
+ $this->anything()
+ ]
+ )
+ ->will( $this->returnValue( true ) );
- $dbResult = [ 'delete' => false ];
- $notifMapper = new EchoNotificationMapper( $this->mockMWEchoDbFactory( $dbResult ) );
- $this->assertFalse( $notifMapper->deleteByUserEventOffset( User::newFromId( 1 ), 500 ) );
+ $notifMapper = new EchoNotificationMapper( $this->mockMWEchoDbFactory( $mockDb ) );
+ $this->assertTrue( $notifMapper->deleteByUserEventOffset( User::newFromId( 1 ), 500 ) );
}
/**
@@ -203,20 +229,23 @@ class EchoNotificationMapperTest extends MediaWikiTestCase {
/**
* Mock object of MWEchoDbFactory
+ * @param array|\Wikimedia\Rdbms\IDatabase $dbResultOrMockDb
*/
- protected function mockMWEchoDbFactory( $dbResult ) {
+ protected function mockMWEchoDbFactory( $dbResultOrMockDb ) {
+ $mockDb = is_array( $dbResultOrMockDb ) ? $this->mockDb( $dbResultOrMockDb ) : $dbResultOrMockDb;
$dbFactory = $this->getMockBuilder( 'MWEchoDbFactory' )
->disableOriginalConstructor()
->getMock();
$dbFactory->expects( $this->any() )
->method( 'getEchoDb' )
- ->will( $this->returnValue( $this->mockDb( $dbResult ) ) );
+ ->will( $this->returnValue( $mockDb ) );
return $dbFactory;
}
/**
- * Mock object of DatabaseMysql ( DatabaseBase )
+ * Returns a mock database object
+ * @return \Wikimedia\Rdbms\IDatabase
*/
protected function mockDb( array $dbResult ) {
$dbResult += [
@@ -226,7 +255,7 @@ class EchoNotificationMapperTest extends MediaWikiTestCase {
'delete' => ''
];
- $db = $this->getMockBuilder( 'DatabaseMysql' )
+ $db = $this->getMockBuilder( 'DatabaseMysqli' )
->disableOriginalConstructor()
->getMock();
$db->expects( $this->any() )
@@ -249,20 +278,3 @@ class EchoNotificationMapperTest extends MediaWikiTestCase {
}
}
-
-class EchoExecuteFirstArgumentStub implements PHPUnit_Framework_MockObject_Stub {
- public function invoke( PHPUnit_Framework_MockObject_Invocation $invocation ) {
- if ( !$invocation instanceof PHPUnit_Framework_MockObject_Invocation_Static ) {
- throw new PHPUnit_Framework_Exception( 'wrong invocation type' );
- }
- if ( !$invocation->arguments ) {
- throw new PHPUnit_Framework_Exception( 'Method call must have an argument' );
- }
-
- return call_user_func( reset( $invocation->arguments ) );
- }
-
- public function toString() {
- return 'return result of call_user_func on first invocation argument';
- }
-}
diff --git a/Echo/tests/phpunit/mapper/TargetPageMapperTest.php b/Echo/tests/phpunit/mapper/TargetPageMapperTest.php
index 522ee34d..aaba3e3c 100644
--- a/Echo/tests/phpunit/mapper/TargetPageMapperTest.php
+++ b/Echo/tests/phpunit/mapper/TargetPageMapperTest.php
@@ -1,5 +1,8 @@
<?php
+/**
+ * @covers EchoTargetPageMapper
+ */
class EchoTargetPageMapperTest extends MediaWikiTestCase {
public function provideDataTestInsert() {
@@ -35,16 +38,13 @@ class EchoTargetPageMapperTest extends MediaWikiTestCase {
* Mock object of EchoTargetPage
*/
protected function mockEchoTargetPage() {
- $target = $this->getMockBuilder( 'EchoTargetPage' )
+ $target = $this->getMockBuilder( EchoTargetPage::class )
->disableOriginalConstructor()
->getMock();
$target->expects( $this->any() )
->method( 'toDbArray' )
->will( $this->returnValue( [] ) );
$target->expects( $this->any() )
- ->method( 'getUser' )
- ->will( $this->returnValue( User::newFromId( 1 ) ) );
- $target->expects( $this->any() )
->method( 'getPageId' )
->will( $this->returnValue( 2 ) );
$target->expects( $this->any() )
@@ -69,7 +69,8 @@ class EchoTargetPageMapperTest extends MediaWikiTestCase {
}
/**
- * Mock object of DatabaseMysql ( DatabaseBase )
+ * Returns a mock database object
+ * @return \Wikimedia\Rdbms\IDatabase
*/
protected function mockDb( array $dbResult ) {
$dbResult += [
@@ -78,7 +79,7 @@ class EchoTargetPageMapperTest extends MediaWikiTestCase {
'select' => '',
'delete' => ''
];
- $db = $this->getMockBuilder( 'DatabaseMysql' )
+ $db = $this->getMockBuilder( 'DatabaseMysqli' )
->disableOriginalConstructor()
->getMock();
$db->expects( $this->any() )
diff --git a/Echo/tests/phpunit/model/NotificationTest.php b/Echo/tests/phpunit/model/NotificationTest.php
index d6d45c3e..92522303 100644
--- a/Echo/tests/phpunit/model/NotificationTest.php
+++ b/Echo/tests/phpunit/model/NotificationTest.php
@@ -1,5 +1,8 @@
<?php
+/**
+ * @covers EchoNotification
+ */
class EchoNotificationTest extends MediaWikiTestCase {
public function testNewFromRow() {
@@ -28,7 +31,7 @@ class EchoNotificationTest extends MediaWikiTestCase {
$notif = EchoNotification::newFromRow( (object)$row, [
EchoTargetPage::newFromRow( (object)$this->mockTargetPageRow() )
] );
- $this->assertGreaterThan( 0, count( $notif->getTargetPages() ) );
+ $this->assertNotEmpty( $notif->getTargetPages() );
foreach ( $notif->getTargetPages() as $targetPage ) {
$this->assertInstanceOf( 'EchoTargetPage', $targetPage );
}
diff --git a/Echo/tests/phpunit/model/TargetPageTest.php b/Echo/tests/phpunit/model/TargetPageTest.php
index a7f7c035..f925cfeb 100644
--- a/Echo/tests/phpunit/model/TargetPageTest.php
+++ b/Echo/tests/phpunit/model/TargetPageTest.php
@@ -1,5 +1,8 @@
<?php
+/**
+ * @covers EchoTargetPage
+ */
class EchoTargetPageTest extends MediaWikiTestCase {
public function testCreate() {
diff --git a/Echo/tests/phpunit/revision_txt/123.txt b/Echo/tests/phpunit/revision_txt/123.txt
new file mode 100644
index 00000000..257cc564
--- /dev/null
+++ b/Echo/tests/phpunit/revision_txt/123.txt
@@ -0,0 +1 @@
+foo
diff --git a/Echo/tests/phpunit/revision_txt/1234.txt b/Echo/tests/phpunit/revision_txt/1234.txt
new file mode 100644
index 00000000..d675fa44
--- /dev/null
+++ b/Echo/tests/phpunit/revision_txt/1234.txt
@@ -0,0 +1 @@
+foo bar
diff --git a/Echo/tests/qunit/.eslintrc.json b/Echo/tests/qunit/.eslintrc.json
new file mode 100644
index 00000000..348a1b7f
--- /dev/null
+++ b/Echo/tests/qunit/.eslintrc.json
@@ -0,0 +1,6 @@
+{
+ "extends": [
+ "wikimedia/qunit",
+ "../../.eslintrc.json"
+ ]
+}
diff --git a/Echo/tests/qunit/model/test_mw.echo.dm.BundleNotificationItem.js b/Echo/tests/qunit/model/test_mw.echo.dm.BundleNotificationItem.js
index 66e259c6..22a4d59b 100644
--- a/Echo/tests/qunit/model/test_mw.echo.dm.BundleNotificationItem.js
+++ b/Echo/tests/qunit/model/test_mw.echo.dm.BundleNotificationItem.js
@@ -15,13 +15,13 @@
{ modelName: 'foo' }
);
- assert.equal(
+ assert.strictEqual(
bundle.getCount(),
5,
'Bundled items added to internal list'
);
- assert.equal(
+ assert.strictEqual(
bundle.getName(),
'foo',
'Bundle name stored'
@@ -33,13 +33,13 @@
'All ids present'
);
- assert.equal(
+ assert.strictEqual(
bundle.isRead(),
false,
'Bundle with all unread items is unread'
);
- assert.equal(
+ assert.strictEqual(
bundle.hasUnseen(),
true,
'Bundle has unseen items'
@@ -74,7 +74,7 @@
}
);
- assert.equal(
+ assert.strictEqual(
bundle.hasUnseen(),
true,
'Bundle has unseen'
@@ -85,20 +85,20 @@
bundledItems[ i ].toggleSeen( true );
}
- assert.equal(
+ assert.strictEqual(
bundle.hasUnseen(),
false,
'Bundle does not have unseen after all items marked as seen'
);
- assert.equal(
+ assert.strictEqual(
bundle.isRead(),
false,
'Bundle is unread'
);
// Mark one item as read
bundledItems[ 0 ].toggleRead( true );
- assert.equal(
+ assert.strictEqual(
bundle.isRead(),
false,
'Bundle is still unread if it has some unread items'
@@ -108,7 +108,7 @@
for ( i = 0; i < bundledItems.length; i++ ) {
bundledItems[ i ].toggleRead( true );
}
- assert.equal(
+ assert.strictEqual(
bundle.isRead(),
true,
'Bundle is marked as read if all items are read'
diff --git a/Echo/tests/qunit/model/test_mw.echo.dm.CrossWikiNotificationItem.js b/Echo/tests/qunit/model/test_mw.echo.dm.CrossWikiNotificationItem.js
index 6073a1a5..add303e2 100644
--- a/Echo/tests/qunit/model/test_mw.echo.dm.CrossWikiNotificationItem.js
+++ b/Echo/tests/qunit/model/test_mw.echo.dm.CrossWikiNotificationItem.js
@@ -116,7 +116,7 @@
[ 'baz', 'bar', 'foo' ],
'Model source names exist in order'
);
- assert.equal(
+ assert.strictEqual(
model.hasUnseen(),
true,
'hasUnseen is true if there are unseen items in any group'
@@ -129,14 +129,14 @@
}
}
groupDefinitions[ 0 ].items[ 0 ].toggleSeen( false );
- assert.equal(
+ assert.strictEqual(
model.hasUnseen(),
true,
'hasUnseen is true even if only one item in one group is unseen'
);
groupDefinitions[ 0 ].items[ 0 ].toggleSeen( true );
- assert.equal(
+ assert.strictEqual(
model.hasUnseen(),
false,
'hasUnseen is false if there are no unseen items in any of the groups'
@@ -209,7 +209,7 @@
numUnseenItems = model.getItems().filter( function ( item ) {
return !item.isSeen();
} ).length;
- assert.equal(
+ assert.strictEqual(
numUnseenItems,
numAllItems,
'Starting state: all items are unseen'
@@ -221,7 +221,7 @@
numUnseenItems = model.getItems().filter( function ( item ) {
return !item.isSeen();
} ).length;
- assert.equal(
+ assert.strictEqual(
numUnseenItems,
numAllItems - groupDefinitions[ 0 ].items.length,
'Only some items are seen'
@@ -233,7 +233,7 @@
numUnseenItems = model.getItems().filter( function ( item ) {
return !item.isSeen();
} ).length;
- assert.equal(
+ assert.strictEqual(
numUnseenItems,
0,
'All items are seen'
diff --git a/Echo/tests/qunit/model/test_mw.echo.dm.FiltersModel.js b/Echo/tests/qunit/model/test_mw.echo.dm.FiltersModel.js
index c080e242..2bc8146c 100644
--- a/Echo/tests/qunit/model/test_mw.echo.dm.FiltersModel.js
+++ b/Echo/tests/qunit/model/test_mw.echo.dm.FiltersModel.js
@@ -52,28 +52,28 @@
QUnit.test( 'Changing filters', function ( assert ) {
var model = new mw.echo.dm.FiltersModel();
- assert.equal(
+ assert.strictEqual(
model.getReadState(),
'all',
'Initial value: all'
);
model.setReadState( 'unread' );
- assert.equal(
+ assert.strictEqual(
model.getReadState(),
'unread',
'Changing state (unread)'
);
model.setReadState( 'read' );
- assert.equal(
+ assert.strictEqual(
model.getReadState(),
'read',
'Changing state (read)'
);
model.setReadState( 'foo' );
- assert.equal(
+ assert.strictEqual(
model.getReadState(),
'read',
'Ignoring invalid state (foo)'
diff --git a/Echo/tests/qunit/model/test_mw.echo.dm.NotificationGroupsList.js b/Echo/tests/qunit/model/test_mw.echo.dm.NotificationGroupsList.js
index 63c381e8..c30a8adc 100644
--- a/Echo/tests/qunit/model/test_mw.echo.dm.NotificationGroupsList.js
+++ b/Echo/tests/qunit/model/test_mw.echo.dm.NotificationGroupsList.js
@@ -4,7 +4,7 @@
QUnit.test( 'Constructing the model', function ( assert ) {
var model = new mw.echo.dm.NotificationGroupsList();
- assert.equal(
+ assert.strictEqual(
model.getTimestamp(),
0,
'Empty group has timestamp 0'
@@ -59,14 +59,14 @@
groupDefinitions[ i ].items
);
- assert.equal(
+ assert.strictEqual(
model.getItemCount(),
i + 1,
'Group number increases after addGroup ("' + groupDefinitions[ i ].name + '")'
);
group = model.getGroupByName( groupDefinitions[ i ].name );
- assert.equal(
+ assert.strictEqual(
group.getName(),
groupDefinitions[ i ].name,
'Group exists after addGroup ("' + groupDefinitions[ i ].name + '")'
@@ -76,12 +76,12 @@
// Remove group
model.removeGroup( groupDefinitions[ 0 ].name );
- assert.equal(
+ assert.strictEqual(
model.getItemCount(),
groupDefinitions.length - 1,
'Group number decreased after removeGroup'
);
- assert.equal(
+ assert.strictEqual(
model.getGroupByName( groupDefinitions[ 0 ] ),
null,
'Removed group is no longer in the list'
@@ -90,7 +90,7 @@
// Removing the last item from a group should remove the group
group = model.getGroupByName( 'baz' );
group.discardItems( groupDefinitions[ 2 ].items );
- assert.equal(
+ assert.strictEqual(
model.getGroupByName( 'baz' ),
null,
'Empty group is no longer in the list'
diff --git a/Echo/tests/qunit/model/test_mw.echo.dm.NotificationsList.js b/Echo/tests/qunit/model/test_mw.echo.dm.NotificationsList.js
index 107d4fc0..02de8bc4 100644
--- a/Echo/tests/qunit/model/test_mw.echo.dm.NotificationsList.js
+++ b/Echo/tests/qunit/model/test_mw.echo.dm.NotificationsList.js
@@ -69,24 +69,24 @@
new mw.echo.dm.NotificationItem( 5, { type: 'message', timestamp: '201609190500', read: true, seen: false } )
];
- assert.equal(
+ assert.strictEqual(
model.getCount(),
0,
'Model list starts empty'
);
- assert.equal(
+ assert.strictEqual(
model.getTimestamp(),
'200101010000',
'Model timestamp is its default'
);
model.setItems( items );
- assert.equal(
+ assert.strictEqual(
model.getCount(),
6,
'Item list setup'
);
- assert.equal(
+ assert.strictEqual(
model.getTimestamp(),
'201609190100',
'Model timestamp is the latest unread item\'s timestamp'
diff --git a/Echo/tests/qunit/model/test_mw.echo.dm.SourcePagesModel.js b/Echo/tests/qunit/model/test_mw.echo.dm.SourcePagesModel.js
index 53f9b9de..7c98fc6a 100644
--- a/Echo/tests/qunit/model/test_mw.echo.dm.SourcePagesModel.js
+++ b/Echo/tests/qunit/model/test_mw.echo.dm.SourcePagesModel.js
@@ -82,12 +82,12 @@
model.setAllSources( sources );
- assert.equal(
+ assert.strictEqual(
model.getCurrentSource(),
'local',
'Default source is local'
);
- assert.equal(
+ assert.strictEqual(
model.getCurrentPage(),
null,
'Default page is null'
@@ -97,12 +97,12 @@
[ 'local', 'hewiki' ],
'Source array includes all sources'
);
- assert.equal(
+ assert.strictEqual(
model.getSourceTitle( 'hewiki' ),
'Hebrew Wikipedia',
'Source title'
);
- assert.equal(
+ assert.strictEqual(
model.getSourceTotalCount( 'hewiki' ),
15,
'Source total count'
@@ -157,12 +157,12 @@
// Change source
model.setCurrentSourcePage( 'hewiki', 'User:Bar' );
- assert.equal(
+ assert.strictEqual(
model.getCurrentSource(),
'hewiki',
'Source changed successfully'
);
- assert.equal(
+ assert.strictEqual(
model.getCurrentPage(),
'User:Bar',
'Page changed successfully'
diff --git a/Echo/tests/qunit/model/test_mw.echo.dm.UnreadNotificationCounter.js b/Echo/tests/qunit/model/test_mw.echo.dm.UnreadNotificationCounter.js
index 8b2662e1..42eb47aa 100644
--- a/Echo/tests/qunit/model/test_mw.echo.dm.UnreadNotificationCounter.js
+++ b/Echo/tests/qunit/model/test_mw.echo.dm.UnreadNotificationCounter.js
@@ -15,7 +15,7 @@
];
for ( i = 0; i < cases.length; i++ ) {
- assert.equal(
+ assert.strictEqual(
model.getCappedNotificationCount( cases[ i ].input ),
cases[ i ].output,
'Capped notifications count: ' +
@@ -27,29 +27,29 @@
QUnit.test( 'Estimate change', function ( assert ) {
var model = new mw.echo.dm.UnreadNotificationCounter(
- null,
- 'all', // type
- 99 // max
- );
+ null,
+ 'all', // type
+ 99 // max
+ );
// Set initial
model.setCount( 50 );
model.estimateChange( -10 );
- assert.equal(
+ assert.strictEqual(
model.getCount(),
40, // 50-10
'Estimation within range'
);
model.estimateChange( 70 );
- assert.equal(
+ assert.strictEqual(
model.getCount(),
100, // Estimation reached above cap - cap is set
'Estimation brings count to cap'
);
model.estimateChange( -10 );
- assert.equal(
+ assert.strictEqual(
model.getCount(),
100, // We are already above cap, count will not change
'Estimation while counter is outside of cap - no change'
diff --git a/Echo/tests/qunit/overlay/test_ext.echo.overlay.js b/Echo/tests/qunit/overlay/test_ext.echo.overlay.js
index 213ffddd..aa0518a1 100644
--- a/Echo/tests/qunit/overlay/test_ext.echo.overlay.js
+++ b/Echo/tests/qunit/overlay/test_ext.echo.overlay.js
@@ -1,6 +1,6 @@
( function ( $, mw ) {
QUnit.module( 'ext.echo.overlay', {
- setup: function () {
+ beforeEach: function () {
var ApiStub;
this.$badge = $( '<a class="mw-echo-notifications-badge mw-echo-unseen-notifications">1</a>' );
@@ -198,7 +198,7 @@
}
} );
- QUnit.test( 'mw.echo.overlay.buildOverlay', 7, function ( assert ) {
+ QUnit.test( 'mw.echo.overlay.buildOverlay', function ( assert ) {
var $overlay;
this.sandbox.stub( mw.echo.overlay, 'api', new this.ApiStub() );
mw.echo.overlay.buildOverlay( function ( $o ) {
@@ -216,7 +216,7 @@
false, 'The badge no longer indicates new messages.' );
} );
- QUnit.test( 'mw.echo.overlay.buildOverlay with messages', 5, function ( assert ) {
+ QUnit.test( 'mw.echo.overlay.buildOverlay with messages', function ( assert ) {
var $overlay;
this.sandbox.stub( mw.echo.overlay, 'api', new this.ApiStub( 'no-new-messages' ) );
mw.echo.overlay.buildOverlay( function ( $o ) {
@@ -232,7 +232,7 @@
false, 'The notification button class is updated with the default switch to alert tab.' );
} );
- QUnit.test( 'Switch tabs on overlay. 1 unread alert, no unread messages.', 7, function ( assert ) {
+ QUnit.test( 'Switch tabs on overlay. 1 unread alert, no unread messages.', function ( assert ) {
var $overlay, $tabs;
this.sandbox.stub( mw.echo.overlay, 'api', new this.ApiStub( 'no-new-messages' ) );
@@ -259,7 +259,7 @@
true, 'Second tab has active class .as it is the only clickable tab' );
} );
- QUnit.test( 'Unread message behaviour', 5, function ( assert ) {
+ QUnit.test( 'Unread message behaviour', function ( assert ) {
var $overlay;
this.sandbox.stub( mw.echo.overlay, 'api', new this.ApiStub( 'with-new-messages' ) );
@@ -282,7 +282,7 @@
'There are no notifications now so no need for button.' );
} );
- QUnit.test( 'Mark as read.', 8, function ( assert ) {
+ QUnit.test( 'Mark as read.', function ( assert ) {
var $overlay;
this.$badge.text( '8' );
this.sandbox.stub( mw.echo.overlay, 'api', new this.ApiStub( 'with-new-messages' ) );
@@ -311,7 +311,7 @@
assert.strictEqual( this.$badge.text(), '6', 'Now 6 unread notifications.' );
} );
- QUnit.test( 'Tabs when there is overflow.', 2, function ( assert ) {
+ QUnit.test( 'Tabs when there is overflow.', function ( assert ) {
var $overlay;
this.sandbox.stub( mw.echo.overlay, 'api', new this.ApiStub( 'with-new-messages', 50 ) );
mw.echo.overlay.buildOverlay( function ( $o ) {
@@ -324,7 +324,7 @@
assert.strictEqual( $overlay.find( '.mw-echo-unread' ).length, 8, 'There are 8 unread notifications.' );
} );
- QUnit.test( 'Switching tabs visibility', 4, function ( assert ) {
+ QUnit.test( 'Switching tabs visibility', function ( assert ) {
var $overlay;
this.sandbox.stub( mw.echo.overlay, 'api', new this.ApiStub( 'with-new-messages' ) );
diff --git a/Echo/tests/rspec/README.md b/Echo/tests/rspec/README.md
deleted file mode 100644
index 5cf77fbf..00000000
--- a/Echo/tests/rspec/README.md
+++ /dev/null
@@ -1,7 +0,0 @@
-# Usage
-
- vagrant up
- vagrant roles enable echo flow wikimediaflow
- vagrant provision
- bundle install
- bundle exec rake spec
diff --git a/Echo/tests/rspec/notification_spec.rb b/Echo/tests/rspec/notification_spec.rb
deleted file mode 100644
index ff4b9a63..00000000
--- a/Echo/tests/rspec/notification_spec.rb
+++ /dev/null
@@ -1,55 +0,0 @@
-require 'mediawiki_api'
-
-describe 'Echo' do
- before(:all) do
- if ENV['JENKINS_HOME']
- # jenkins
- @mediawiki_api = "#{ENV['MW_SERVER']}#{ENV['MW_SCRIPT_PATH']}/api.php"
- @admin_username = 'WikiAdmin'
- @admin_password = 'testpass'
- else
- # mediawiki-vagrant
- @mediawiki_api = 'http://127.0.0.1:8080/w/api.php'
- @admin_username = 'Admin'
- @admin_password = 'vagrant'
- end
-
- @client = MediawikiApi::Client.new @mediawiki_api
- end
-
- before(:each) do
- @client.log_in @admin_username, @admin_password
-
- require 'securerandom'
- @random_username = "U#{SecureRandom.hex(5)}"
- @random_password = SecureRandom.hex(5)
- end
-
- it 'should notify a new user with welcome message' do
- @client.create_account(@random_username, @random_password)
-
- @client.log_in @random_username, @random_password
- notifications = @client.query(meta: 'notifications').data['notifications']['list']
-
- welcome_notification = notifications.first
- expect(welcome_notification['type']).to eq 'welcome'
- expect(welcome_notification['agent']['name']).to eq @random_username
- expect(welcome_notification['timestamp']['date']).to eq 'Today'
- end
-
- it 'should notify user about mention on wikitext page' do
- @client.create_account(@random_username, @random_password)
-
- page = SecureRandom.hex(5).capitalize
- @client.edit(title: page, text: "[[User:#{@random_username}]] ~~~~")
-
- @client.log_in @random_username, @random_password
- notifications = @client.query(meta: 'notifications').data['notifications']['list']
-
- mention_notification = notifications.last
- expect(mention_notification['type']).to eq 'mention'
- expect(mention_notification['agent']['name']).to eq @admin_username
- expect(mention_notification['title']['full']).to eq page
- end
-
-end
diff --git a/Echo/tests/selenium/.eslintrc.json b/Echo/tests/selenium/.eslintrc.json
new file mode 100644
index 00000000..5efe15d0
--- /dev/null
+++ b/Echo/tests/selenium/.eslintrc.json
@@ -0,0 +1,14 @@
+{
+ "extends": "wikimedia",
+ "env": {
+ "es6": true,
+ "mocha": true,
+ "node": true
+ },
+ "globals": {
+ "browser": false
+ },
+ "rules": {
+ "no-console": 0
+ }
+}
diff --git a/Echo/tests/selenium/README.md b/Echo/tests/selenium/README.md
new file mode 100644
index 00000000..59fa8eb4
--- /dev/null
+++ b/Echo/tests/selenium/README.md
@@ -0,0 +1,42 @@
+# Selenium tests
+
+Please see tests/selenium/README.md file in mediawiki/core repository, usually at mediawiki/vagrant/mediawiki folder.
+
+## Setup
+
+Set up MediaWiki-Vagrant:
+
+ cd mediawiki/vagrant
+ vagrant up
+ vagrant roles enable echo
+ vagrant provision
+ cd mediawiki
+ npm install
+
+## Start Chromedriver and run all tests
+
+Run both mediawiki/core and extension tests from mediawiki/core repository (usually at mediawiki/vagrant/mediawiki folder):
+
+ npm run selenium
+
+## Start Chromedriver
+
+To run only some tests, you first have to start Chromedriver in one terminal tab (or window):
+
+ chromedriver --url-base=wd/hub --port=4444
+
+## Run test(s) from one file
+
+Then, in another terminal tab (or window) run this from mediawiki/core repository (usually at mediawiki/vagrant/mediawiki folder):
+
+ ./node_modules/.bin/wdio tests/selenium/wdio.conf.js --spec extensions/EXTENSION-NAME/tests/selenium/specs/FILE-NAME.js
+
+`wdio` is a dependency of mediawiki/core that you have installed with `npm install`.
+
+## Run specific test(s)
+
+To run only test(s) which name contains string TEST-NAME, run this from mediawiki/core repository (usually at mediawiki/vagrant/mediawiki folder):
+
+ ./node_modules/.bin/wdio tests/selenium/wdio.conf.js --spec extensions/EXTENSION-NAME/tests/selenium/specs/FILE-NAME.js --mochaOpts.grep TEST-NAME
+
+Make sure Chromedriver is running when executing the above command.
diff --git a/Echo/tests/selenium/pageobjects/echo.page.js b/Echo/tests/selenium/pageobjects/echo.page.js
new file mode 100644
index 00000000..13a68e97
--- /dev/null
+++ b/Echo/tests/selenium/pageobjects/echo.page.js
@@ -0,0 +1,10 @@
+'use strict';
+const Page = require( 'wdio-mediawiki/Page' );
+
+class EchoPage extends Page {
+
+ get alerts() { return browser.element( '#pt-notifications-alert' ); }
+ get notices() { return browser.element( '#pt-notifications-notice' ); }
+
+}
+module.exports = new EchoPage();
diff --git a/Echo/tests/selenium/specs/echo.js b/Echo/tests/selenium/specs/echo.js
new file mode 100644
index 00000000..790109d0
--- /dev/null
+++ b/Echo/tests/selenium/specs/echo.js
@@ -0,0 +1,18 @@
+'use strict';
+
+var assert = require( 'assert' ),
+ EchoPage = require( '../pageobjects/echo.page' ),
+ UserLoginPage = require( 'wdio-mediawiki/LoginPage' );
+
+describe( 'Echo', function () {
+
+ it( 'alerts and notices are visible after logging in', function () {
+
+ UserLoginPage.login( browser.options.username, browser.options.password );
+
+ assert( EchoPage.alerts.isExisting() );
+ assert( EchoPage.notices.isExisting() );
+
+ } );
+
+} );
diff --git a/Echo/tests/selenium/wdio.conf.js b/Echo/tests/selenium/wdio.conf.js
new file mode 100644
index 00000000..3b58beb6
--- /dev/null
+++ b/Echo/tests/selenium/wdio.conf.js
@@ -0,0 +1,88 @@
+/**
+ * See also: http://webdriver.io/guide/testrunner/configurationfile.html
+ */
+const fs = require( 'fs' ),
+ saveScreenshot = require( 'wdio-mediawiki' ).saveScreenshot;
+
+exports.config = {
+ // ======
+ // Custom WDIO config specific to MediaWiki
+ // ======
+ // Use in a test as `browser.options.<key>`.
+ // Defaults are for convenience with MediaWiki-Vagrant
+
+ // Wiki admin
+ username: process.env.MEDIAWIKI_USER || 'Admin',
+ password: process.env.MEDIAWIKI_PASSWORD || 'vagrant',
+
+ // Base for browser.url() and Page#openTitle()
+ baseUrl: ( process.env.MW_SERVER || 'http://127.0.0.1:8080' ) + (
+ process.env.MW_SCRIPT_PATH || '/w'
+ ),
+
+ // ==================
+ // Test Files
+ // ==================
+ specs: [
+ __dirname + '/specs/*.js'
+ ],
+
+ // ============
+ // Capabilities
+ // ============
+ capabilities: [ {
+ // https://sites.google.com/a/chromium.org/chromedriver/capabilities
+ browserName: 'chrome',
+ maxInstances: 1,
+ chromeOptions: {
+ // If DISPLAY is set, assume developer asked non-headless or CI with Xvfb.
+ // Otherwise, use --headless (added in Chrome 59)
+ // https://chromium.googlesource.com/chromium/src/+/59.0.3030.0/headless/README.md
+ args: [
+ ...( process.env.DISPLAY ? [] : [ '--headless' ] ),
+ // Chrome sandbox does not work in Docker
+ ...( fs.existsSync( '/.dockerenv' ) ? [ '--no-sandbox' ] : [] )
+ ]
+ }
+ } ],
+
+ // ===================
+ // Test Configurations
+ // ===================
+
+ // Level of verbosity: silent | verbose | command | data | result | error
+ logLevel: 'error',
+
+ // Setting this enables automatic screenshots for when a browser command fails
+ // It is also used by afterTest for capturig failed assertions.
+ screenshotPath: process.env.LOG_DIR || __dirname + '/log',
+
+ // Default timeout for each waitFor* command.
+ waitforTimeout: 10 * 1000,
+
+ // See also: http://webdriver.io/guide/testrunner/reporters.html
+ reporters: [ 'spec' ],
+
+ // See also: http://mochajs.org
+ mochaOpts: {
+ ui: 'bdd',
+ timeout: 60 * 1000
+ },
+
+ // =====
+ // Hooks
+ // =====
+
+ /**
+ * Save a screenshot when test fails.
+ *
+ * @param {Object} test Mocha Test object
+ */
+ afterTest: function ( test ) {
+ var filePath;
+ if ( !test.passed ) {
+ filePath = saveScreenshot( test.title );
+ console.log( '\n\tScreenshot: ' + filePath + '\n' );
+ }
+ }
+};
diff --git a/Echo/version b/Echo/version
index b3cbabfb..d72acd1b 100644
--- a/Echo/version
+++ b/Echo/version
@@ -1,4 +1,4 @@
-Echo: REL1_30
-2018-08-23T23:04:30
+Echo: REL1_32
+2018-12-17T10:03:49
-d64a26d
+335389f