diff options
author | 2020-10-02 13:57:00 -0400 | |
---|---|---|
committer | 2020-10-02 13:57:00 -0400 | |
commit | ab2071c71446a71888e4c9762cdce102bf9e29a3 (patch) | |
tree | 9ce07fbfd979a5898f21239c8f8f5b3d3cbdfc21 | |
parent | Add PluggableAuth extension for OpenID Connect (diff) | |
download | extensions-ab2071c71446a71888e4c9762cdce102bf9e29a3.tar.gz extensions-ab2071c71446a71888e4c9762cdce102bf9e29a3.tar.bz2 extensions-ab2071c71446a71888e4c9762cdce102bf9e29a3.zip |
Update Echo to 1.35
Signed-off-by: Brian Evans <grknight@gentoo.org>
513 files changed, 18364 insertions, 5846 deletions
diff --git a/Echo/.eslintrc.json b/Echo/.eslintrc.json index 50ebfabf..742b306d 100644 --- a/Echo/.eslintrc.json +++ b/Echo/.eslintrc.json @@ -1,16 +1,15 @@ { - "extends": "wikimedia", + "root": true, + "extends": [ + "wikimedia/client", + "wikimedia/jquery", + "wikimedia/mediawiki" + ], "env": { - "browser": true, - "jquery": true, - "qunit": true - }, - "globals": { - "OO": false, - "mediaWiki": false + "commonjs": true }, "rules": { - "dot-notation": [ "error", { "allowKeywords": true } ], - "max-len": 0 + "max-len": "off", + "mediawiki/class-doc": "warn" } } diff --git a/Echo/.gitignore b/Echo/.gitignore index e8e8e3a8..b61d4e07 100644 --- a/Echo/.gitignore +++ b/Echo/.gitignore @@ -4,6 +4,7 @@ scripts/remotes/ /vendor /docs composer.lock +.eslintcache # Editors *.kate-swp diff --git a/Echo/.phan/config.php b/Echo/.phan/config.php new file mode 100644 index 00000000..c3247bd9 --- /dev/null +++ b/Echo/.phan/config.php @@ -0,0 +1,21 @@ +<?php + +$cfg = require __DIR__ . '/../vendor/mediawiki/mediawiki-phan-config/src/config.php'; + +$cfg['directory_list'] = array_merge( + $cfg['directory_list'], + [ + '../../extensions/EventLogging', + '../../extensions/CentralAuth' + ] +); + +$cfg['exclude_analysis_directory_list'] = array_merge( + $cfg['exclude_analysis_directory_list'], + [ + '../../extensions/EventLogging', + '../../extensions/CentralAuth' + ] +); + +return $cfg; diff --git a/Echo/.phpcs.xml b/Echo/.phpcs.xml index 555dcf8d..d463e42c 100644 --- a/Echo/.phpcs.xml +++ b/Echo/.phpcs.xml @@ -2,17 +2,13 @@ <ruleset name="MediaWiki"> <file>.</file> <rule ref="./vendor/mediawiki/mediawiki-codesniffer/MediaWiki"> + <exclude name="MediaWiki.Commenting.FunctionComment.MissingDocumentationPrivate" /> <exclude name="MediaWiki.Files.ClassMatchesFilename.NotMatch" /> <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> + <exclude name="PSR12.Properties.ConstantVisibility.NotFound" /> </rule> <arg name="encoding" value="UTF-8" /> <arg name="extensions" value="php,php5,inc" /> diff --git a/Echo/Gruntfile.js b/Echo/Gruntfile.js index 2df0b98d..bdf44714 100644 --- a/Echo/Gruntfile.js +++ b/Echo/Gruntfile.js @@ -1,22 +1,23 @@ -/* eslint-env node */ +/* eslint-env node, es6 */ module.exports = function ( grunt ) { var conf = grunt.file.readJSON( 'extension.json' ); grunt.loadNpmTasks( 'grunt-banana-checker' ); grunt.loadNpmTasks( 'grunt-contrib-watch' ); grunt.loadNpmTasks( 'grunt-eslint' ); - grunt.loadNpmTasks( 'grunt-jsonlint' ); grunt.loadNpmTasks( 'grunt-stylelint' ); grunt.loadNpmTasks( 'grunt-svgmin' ); grunt.initConfig( { eslint: { - src: [ - '**/*.js', - '!node_modules/**', - '!vendor/**', - '!tests/externals/**', - '!docs/**' + options: { + cache: true, + fix: grunt.option( 'fix' ) + }, + all: [ + '**/*.{js,json}', + '!{tests/externals,docs}/**', + '!{vendor,node_modules}/**' ] }, // Lint – Styling @@ -25,15 +26,14 @@ module.exports = function ( grunt ) { syntax: 'less' }, all: [ - 'modules/**/*.css', - 'modules/**/*.less' + 'modules/**/*.{css,less}' ] }, // SVG Optimization svgmin: { options: { js2svg: { - indent: ' ', + indent: '\t', pretty: true }, multipass: true, @@ -65,7 +65,10 @@ module.exports = function ( grunt ) { } ] } }, - banana: conf.MessagesDirs, + // eslint-disable-next-line es/no-object-assign + banana: Object.assign( { + options: { requireLowerCase: false } + }, conf.MessagesDirs ), watch: { files: [ '.{stylelintrc,eslintrc}.json', @@ -73,19 +76,11 @@ module.exports = function ( grunt ) { '<%= stylelint.all %>' ], tasks: 'test' - }, - jsonlint: { - all: [ - '**/*.json', - '!node_modules/**', - '!vendor/**', - '!docs/**' - ] } } ); grunt.registerTask( 'minify', 'svgmin' ); - grunt.registerTask( 'lint', [ 'eslint', 'stylelint', 'jsonlint', 'banana' ] ); + grunt.registerTask( 'lint', [ 'eslint', 'stylelint', 'banana' ] ); grunt.registerTask( 'test', 'lint' ); grunt.registerTask( 'default', [ 'minify', 'test' ] ); }; diff --git a/Echo/Makefile b/Echo/Makefile deleted file mode 100644 index b6e77015..00000000 --- a/Echo/Makefile +++ /dev/null @@ -1,57 +0,0 @@ -MW_INSTALL_PATH ?= ../.. -MEDIAWIKI_LOAD_URL ?= http://localhost:8080/w/load.php - -# mediawiki-vagrant default to hhvm rather than php5, which is mostly -# fine but really slow for commands like phplint -PHP=/usr/bin/php5 - -### -# Meta stuff -### - -remotes: - @scripts/remotecheck.sh - -# code review/pull patches/etc from command line -gerrit: remotes - @scripts/remotes/gerrit.py --project 'mediawiki/extensions/Echo' --gtscore -1 --ignorepattern 'WIP' - -# interactively make sure en.json and qqq.json have all the -# same message keys -message: remotes - @python scripts/remotes/message.py - -# non-interactive version of message outputs result via exit code -messagecheck: remotes - @python scripts/remotes/message.py check - -### -# Lints -### -lint: jshint phplint checkless messagecheck - -# Verify all php in the project has valid syntax -phplint: - @find ./ -type f -iname '*.php' -print0 | xargs -0 -P 12 -L 1 ${PHP} -l - -# Install nodejs dependencies for jshint -nodecheck: - @which npm > /dev/null && npm install \ - || (echo "You need to install Node.JS! See http://nodejs.org/" && false) - -# Verify all javascript in the project has valid syntax and follows jshint rules -jshint: nodecheck - @node_modules/.bin/jshint modules/ tests/qunit --config .jshintrc - -# Verify all less files are compilable -checkless: - @${PHP} ../../maintenance/checkLess.php - -### -# Testing -### -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 diff --git a/Echo/ServiceWiring.php b/Echo/ServiceWiring.php new file mode 100644 index 00000000..62558f25 --- /dev/null +++ b/Echo/ServiceWiring.php @@ -0,0 +1,49 @@ +<?php + +use EchoPush\NotificationServiceClient; +use EchoPush\SubscriptionManager; +use MediaWiki\Logger\LoggerFactory; +use MediaWiki\MediaWikiServices; +use MediaWiki\Storage\NameTableStore; + +return [ + + 'EchoPushNotificationServiceClient' => function ( MediaWikiServices $services ): + NotificationServiceClient { + $echoConfig = $services->getConfigFactory()->makeConfig( 'Echo' ); + $httpRequestFactory = $services->getHttpRequestFactory(); + $url = $echoConfig->get( 'EchoPushServiceBaseUrl' ); + $client = new NotificationServiceClient( $httpRequestFactory, $url ); + $client->setLogger( LoggerFactory::getInstance( 'Echo' ) ); + return $client; + }, + + 'EchoPushSubscriptionManager' => function ( MediaWikiServices $services ): SubscriptionManager { + $echoConfig = $services->getConfigFactory()->makeConfig( 'Echo' ); + // Use shared DB/cluster for push subscriptions + $cluster = $echoConfig->get( 'EchoSharedTrackingCluster' ); + $database = $echoConfig->get( 'EchoSharedTrackingDB' ); + $loadBalancerFactory = $services->getDBLoadBalancerFactory(); + $loadBalancer = $cluster + ? $loadBalancerFactory->getExternalLB( $cluster ) + : $loadBalancerFactory->getMainLB( $database ); + $dbw = $loadBalancer->getLazyConnectionRef( DB_MASTER, [], $database ); + $dbr = $loadBalancer->getLazyConnectionRef( DB_REPLICA, [], $database ); + + $centralIdLookup = CentralIdLookup::factory(); + + $pushProviderStore = new NameTableStore( + $loadBalancer, + $services->getMainWANObjectCache(), + LoggerFactory::getInstance( 'Echo' ), + 'echo_push_provider', + 'epp_id', + 'epp_name', + null, + $database + ); + + return new SubscriptionManager( $dbw, $dbr, $centralIdLookup, $pushProviderStore ); + } + +]; diff --git a/Echo/composer.json b/Echo/composer.json index 7a62b001..5fc76235 100644 --- a/Echo/composer.json +++ b/Echo/composer.json @@ -1,9 +1,10 @@ { "require-dev": { - "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" + "mediawiki/mediawiki-codesniffer": "31.0.0", + "mediawiki/mediawiki-phan-config": "0.10.2", + "mediawiki/minus-x": "1.1.0", + "php-parallel-lint/php-console-highlighter": "0.5.0", + "php-parallel-lint/php-parallel-lint": "1.2.0" }, "scripts": { "test": [ @@ -12,11 +13,8 @@ "minus-x check ." ], "fix": [ - "phpcbf", - "minus-x fix ." + "minus-x fix .", + "phpcbf" ] - }, - "extra": { - "phan-taint-check-plugin": "1.5.0" } } diff --git a/Echo/db_patches/echo_push_provider.sql b/Echo/db_patches/echo_push_provider.sql new file mode 100644 index 00000000..2e9f27b1 --- /dev/null +++ b/Echo/db_patches/echo_push_provider.sql @@ -0,0 +1,6 @@ +-- Table for normalizing push providers; intended for use with the NameTableStore construct. +CREATE TABLE /*_*/echo_push_provider ( + epp_id TINYINT UNSIGNED NOT NULL PRIMARY KEY, + -- push provider name; expected values are 'fcm' and 'apns' + epp_name TINYTEXT NOT NULL +) /*$wgDBTableOptions*/; diff --git a/Echo/db_patches/echo_push_subscription.sql b/Echo/db_patches/echo_push_subscription.sql new file mode 100644 index 00000000..94cab89e --- /dev/null +++ b/Echo/db_patches/echo_push_subscription.sql @@ -0,0 +1,20 @@ +-- Stores push subscriptions associated with wiki users. +CREATE TABLE /*_*/echo_push_subscription ( + eps_id INT UNSIGNED NOT NULL PRIMARY KEY auto_increment, + -- central user ID + eps_user INT UNSIGNED NOT NULL, + -- platform-provided push subscription token + eps_token TEXT NOT NULL, + -- SHA256 digest of the push subscription token (to be used as a uniqueness constraint, since + -- the tokens themselves may be large) + eps_token_sha256 CHAR(64) NOT NULL UNIQUE, + -- push provider ID, expected to reference values 'fcm' or 'apns' + eps_provider TINYINT UNSIGNED NOT NULL, + -- last updated timestamp + eps_updated TIMESTAMP NOT NULL, + -- push subscription metadata (e.g APNS notification topic) + eps_data BLOB, + FOREIGN KEY (eps_provider) REFERENCES /*_*/echo_push_provider(epp_id) +) /*$wgDBTableOptions*/; + +CREATE INDEX /*i*/echo_push_subscription_user_id ON /*_*/echo_push_subscription (eps_user); diff --git a/Echo/db_patches/echo_unread_wikis.sql b/Echo/db_patches/echo_unread_wikis.sql index 7af9a589..32f9c837 100644 --- a/Echo/db_patches/echo_unread_wikis.sql +++ b/Echo/db_patches/echo_unread_wikis.sql @@ -4,7 +4,7 @@ CREATE TABLE /*_*/echo_unread_wikis ( # Global user id euw_user INT UNSIGNED NOT NULL, # Name of wiki - euw_wiki VARCHAR(30) NOT NULL, + euw_wiki VARCHAR(64) NOT NULL, # unread alerts count on that wiki euw_alerts INT UNSIGNED NOT NULL, # Timestamp of the most recent unread alert diff --git a/Echo/db_patches/patch-drop-notification_bundle_base.sql b/Echo/db_patches/patch-drop-notification_bundle_base.sql new file mode 100644 index 00000000..0da891c3 --- /dev/null +++ b/Echo/db_patches/patch-drop-notification_bundle_base.sql @@ -0,0 +1,5 @@ +-- Drop unused field notification_bundle_base and the indexes that contain it +DROP INDEX /*i*/echo_notification_user_base_read_timestamp ON /*_*/echo_notification; +DROP INDEX /*i*/echo_notification_user_base_timestamp ON /*_*/echo_notification; +DROP INDEX /*i*/echo_notification_user_hash_base_timestamp ON /*_*/echo_notification; +ALTER TABLE /*_*/echo_notification DROP notification_bundle_base; diff --git a/Echo/db_patches/patch-drop-notification_bundle_display_hash.sql b/Echo/db_patches/patch-drop-notification_bundle_display_hash.sql new file mode 100644 index 00000000..7cbf8aa4 --- /dev/null +++ b/Echo/db_patches/patch-drop-notification_bundle_display_hash.sql @@ -0,0 +1,2 @@ +-- Drop unused field notification_bundle_display_hash +ALTER TABLE /*_*/echo_notification DROP notification_bundle_display_hash; diff --git a/Echo/db_patches/patch-drop-user-hash-timestamp-index.sql b/Echo/db_patches/patch-drop-user-hash-timestamp-index.sql new file mode 100644 index 00000000..83aae620 --- /dev/null +++ b/Echo/db_patches/patch-drop-user-hash-timestamp-index.sql @@ -0,0 +1,2 @@ +-- Drop unused index echo_notification_user_hash_timestamp +DROP INDEX /*i*/echo_notification_user_hash_timestamp ON /*_*/echo_notification; diff --git a/Echo/db_patches/patch-event_agent-split.sqlite.sql b/Echo/db_patches/patch-event_agent-split.sqlite.sql index 505af06a..3650e86c 100644 --- a/Echo/db_patches/patch-event_agent-split.sqlite.sql +++ b/Echo/db_patches/patch-event_agent-split.sqlite.sql @@ -13,16 +13,15 @@ CREATE TABLE /*_*/echo_event ( event_variant varchar(64) binary null, event_agent_id int unsigned null, -- The user who triggered it, if any event_agent_ip varchar(39) binary null, -- IP address who triggered it, if any - event_page_namespace int unsigned null, event_page_title varchar(255) binary null, event_extra BLOB NULL ) /*$wgDBTableOptions*/; -- Copy over all the old data into the new table INSERT INTO /*_*/echo_event - (event_id, event_type, event_variant, event_agent_id, event_page_namespace, event_page_title, event_extra) + (event_id, event_type, event_variant, event_agent_id, event_page_title, event_extra) SELECT - event_id, event_type, event_variant, event_agent, event_page_namespace, event_page_title, event_extra + event_id, event_type, event_variant, event_agent, event_page_title, event_extra FROM /*_*/temp_echo_event_split_event_agent; diff --git a/Echo/db_patches/patch-event_variant_nullability.sqlite.sql b/Echo/db_patches/patch-event_variant_nullability.sqlite.sql index 126e36cc..f5988f96 100644 --- a/Echo/db_patches/patch-event_variant_nullability.sqlite.sql +++ b/Echo/db_patches/patch-event_variant_nullability.sqlite.sql @@ -12,16 +12,16 @@ CREATE TABLE /*_*/echo_event ( event_variant varchar(64) binary null, event_agent_id int unsigned null, -- The user who triggered it, if any event_agent_ip varchar(39) binary null, -- IP address who triggered it, if any - event_page_namespace int unsigned null, - event_page_title varchar(255) binary null, - event_extra BLOB NULL + event_extra BLOB NULL, + event_page_id int unsigned null, + event_deleted tinyint unsigned not null default 0 ) /*$wgDBTableOptions*/; -- Copy over all the old data into the new table INSERT INTO /*_*/echo_event - (event_id, event_type, event_variant, event_agent_id, event_agent_ip, event_page_namespace, event_page_title, event_extra) + (event_id, event_type, event_variant, event_agent_id, event_agent_ip, event_extra, event_page_id, event_deleted) SELECT - event_id, event_type, event_variant, event_agent_id, event_agent_ip, event_page_namespace, event_page_title, event_extra + event_id, event_type, event_variant, event_agent_id, event_agent_ip, event_extra, event_page_id, event_deleted FROM /*_*/temp_echo_event_variant_nullability; diff --git a/Echo/db_patches/patch-increase-varchar-echo_unread_wikis-euw_wiki.sql b/Echo/db_patches/patch-increase-varchar-echo_unread_wikis-euw_wiki.sql new file mode 100644 index 00000000..7bcd037b --- /dev/null +++ b/Echo/db_patches/patch-increase-varchar-echo_unread_wikis-euw_wiki.sql @@ -0,0 +1,2 @@ +-- Increase varchar size to 64 +ALTER TABLE /*_*/echo_unread_wikis MODIFY euw_wiki VARCHAR(64) NOT NULL; diff --git a/Echo/echo.sql b/Echo/echo.sql index 9736c923..36316f93 100644 --- a/Echo/echo.sql +++ b/Echo/echo.sql @@ -1,56 +1,96 @@ -- Database Schema for Echo notification system +-- An event is a thing that happened that caused one or more users to be notified. +-- For every notified user, there is a corresponding row in the echo_notification table. CREATE TABLE /*_*/echo_event ( + -- Unique auto-increment ID event_id int unsigned not null primary key auto_increment, + -- Event type; one of the keys in $wgEchoNotifications event_type varchar(64) binary not null, + -- Unused, always null event_variant varchar(64) binary null, - event_agent_id int unsigned null, -- The user who triggered it, if any - event_agent_ip varchar(39) binary null, -- IP address who triggered it, if any - event_page_namespace int unsigned null, - event_page_title varchar(255) binary null, + -- The agent (user who triggered the event), if any. If the agent is a logged-in user, + -- event_agent_id contains their user ID and event_agent_ip is null. If the agent is + -- an anonymous user , event_agent_ip contains their IP address and event_agent_id is null. + -- If the event doesn't have an agent, both fields are null. + event_agent_id int unsigned null, + event_agent_ip varchar(39) binary null, + -- JSON blob with additional information about the event event_extra BLOB NULL, + -- Page ID of the page the event happened on, if any (key to page_id) event_page_id int unsigned null, + -- Whether the event pertains to a deleted page and should be hidden. Events are marked as + -- deleted when the related page is deleted, and unmarked as deleted when the related page + -- is undeleted event_deleted tinyint unsigned not null default 0 ) /*$wgDBTableOptions*/; +-- Index to get only "alert" types or only "message" types CREATE INDEX /*i*/echo_event_type ON /*_*/echo_event (event_type); +-- Index to find events for a specific page CREATE INDEX /*i*/echo_event_page_id ON /*_*/echo_event (event_page_id); +-- A notification is a user being notified about a certain event. Multiple users can be notified +-- about the same event. CREATE TABLE /*_*/echo_notification ( + -- Key to event_id notification_event int unsigned not null, + -- Key to user_id notification_user int unsigned not null, + -- Timestamp when the notification was created notification_timestamp binary(14) not null, + -- Timestamp when the user read the notification, or null if unread notification_read_timestamp binary(14) null, - notification_bundle_base boolean not null default 1, - notification_bundle_hash varchar(32) binary not null, -- The hash for bundling notifications regardless of timestamp - notification_bundle_display_hash varchar(32) binary not null, -- The hash for displaying bundle notifications with regard to timestamp, this is is a subset of notification_bundle_hash + -- Hash for bundling together similar notifications. Notifications that can be bundled together + -- will have the same hash + notification_bundle_hash varchar(32) binary not null, PRIMARY KEY (notification_user, notification_event) ) /*$wgDBTableOptions*/; +-- Index to get a user's notifications in chronological order CREATE INDEX /*i*/echo_user_timestamp ON /*_*/echo_notification (notification_user,notification_timestamp); -CREATE INDEX /*i*/echo_notification_user_base_read_timestamp ON /*_*/echo_notification (notification_user, notification_bundle_base, notification_read_timestamp); -CREATE INDEX /*i*/echo_notification_user_base_timestamp ON /*_*/echo_notification (notification_user, notification_bundle_base, notification_timestamp, notification_event); -CREATE INDEX /*i*/echo_notification_user_hash_timestamp ON /*_*/echo_notification (notification_user, notification_bundle_hash, notification_timestamp); -CREATE INDEX /*i*/echo_notification_user_hash_base_timestamp ON /*_*/echo_notification (notification_user, notification_bundle_display_hash, notification_bundle_base, notification_timestamp); +-- Used to get all notifications for a given event CREATE INDEX /*i*/echo_notification_event ON /*_*/echo_notification (notification_event); +-- Used to get read/unread notifications for a user CREATE INDEX /*i*/echo_notification_user_read_timestamp ON /*_*/echo_notification (notification_user, notification_read_timestamp); +-- Table gathering events for batch emails +-- If a user asks to receive batch emails, events are gathered in this table until it's time to +-- send an email. Once a user has been emailed about an event, it's deleted from this table. CREATE TABLE /*_*/echo_email_batch ( + -- Unique auto-increment ID eeb_id int unsigned not null primary key auto_increment, + -- Key to user_id eeb_user_id int unsigned not null, - eeb_event_priority tinyint unsigned not null default 10, -- event priority + -- Priority of the event as defined in $wgEchoNotifications; events with lower numbers are listed first + eeb_event_priority tinyint unsigned not null default 10, + -- Key to event_id eeb_event_id int unsigned not null, + -- Same value as notification_bundle_hash, or a unique value if notification_bundle_hash is empty eeb_event_hash varchar(32) binary not null ) /*$wgDBTableOptions*/; +-- Used to delete events once they have been processed, and to identify users with events to process CREATE UNIQUE INDEX /*i*/echo_email_batch_user_event ON /*_*/echo_email_batch (eeb_user_id,eeb_event_id); +-- Used to get a list of events for a user, grouping events with the same hash and ordering by priority CREATE INDEX /*i*/echo_email_batch_user_hash_priority ON /*_*/echo_email_batch (eeb_user_id, eeb_event_hash, eeb_event_priority); +-- A "target page" of an event is a page that, when the user visits it, causes the event to be +-- marked as read. Typically this is the same as the event's event_page_id, but some events +-- have multiple target pages, and many events don't set a target page at all. An event's +-- target pages are derived from the 'target-page' key in event_extra. +-- This table is also used for moderating events when the related page is deleted, +-- but this should use event_page_id instead (T217452). CREATE TABLE /*_*/echo_target_page ( + -- Unique auto-increment ID etp_id int unsigned not null primary key auto_increment, + -- Key to page_id etp_page int unsigned not null default 0, + -- Key to event_id etp_event int unsigned not null default 0 ) /*$wgDBTableOptions*/; +-- Not currently used CREATE INDEX /*i*/echo_target_page_event ON /*_*/echo_target_page (etp_event); +-- Used to get the events associated with a given page CREATE INDEX /*i*/echo_target_page_page_event ON /*_*/echo_target_page (etp_page, etp_event); diff --git a/Echo/extension.json b/Echo/extension.json index 6b728482..19fcf66d 100644 --- a/Echo/extension.json +++ b/Echo/extension.json @@ -15,7 +15,7 @@ "license-name": "MIT", "type": "specialpage", "requires": { - "MediaWiki": ">= 1.32.0" + "MediaWiki": ">= 1.35.0" }, "APIMetaModules": { "notifications": "ApiEchoNotifications", @@ -24,17 +24,20 @@ "APIModules": { "echomarkread": "ApiEchoMarkRead", "echomarkseen": "ApiEchoMarkSeen", - "echoarticlereminder": "ApiEchoArticleReminder" + "echoarticlereminder": "ApiEchoArticleReminder", + "echomute": "ApiEchoMute" }, "DefaultUserOptions": { - "echo-email-frequency": 0 + "echo-email-frequency": 0, + "echo-dont-email-read-notifications": false }, "ExtensionFunctions": [ "EchoHooks::initEchoExtension" ], "JobClasses": { "EchoNotificationJob": "EchoNotificationJob", - "EchoNotificationDeleteJob": "EchoNotificationDeleteJob" + "EchoNotificationDeleteJob": "EchoNotificationDeleteJob", + "EchoPushNotificationRequest": "EchoPush\\NotificationRequestJob" }, "SpecialPages": { "Notifications": "SpecialNotifications", @@ -50,13 +53,30 @@ "ExtensionMessagesFiles": { "EchoAliases": "Echo.alias.php" }, + "QUnitTestModule": { + "localBasePath": "", + "remoteExtPath": "Echo", + "templates": { + "NotificationBadge.mustache": "modules/mobile/NotificationBadge.mustache" + }, + "packageFiles": [ + "tests/qunit/mobile/index.js", + "tests/qunit/mobile/test_NotificationBadge.js", + "modules/mobile/NotificationBadge.js" + ] + }, "ResourceModules": { "ext.echo.logger": { - "scripts": [ - "logger/mw.echo.Logger.js" + "packageFiles": [ + "logger/mw.echo.Logger.js", + { + "name": "logger/config.json", + "callback": "EchoHooks::getLoggerConfigVars" + } ], "dependencies": [ - "oojs" + "oojs", + "mediawiki.user" ], "targets": [ "desktop", @@ -71,14 +91,6 @@ "styles": [ "styles/mw.echo.ui.NotificationBadgeWidget.less" ], - "skinStyles": { - "monobook": [ - "styles/mw.echo.ui.NotificationBadgeWidget.monobook.less" - ], - "modern": [ - "styles/mw.echo.ui.NotificationBadgeWidget.modern.less" - ] - }, "dependencies": [ "ext.echo.ui", "ext.echo.styles.badge", @@ -91,6 +103,7 @@ }, "ext.echo.ui": { "scripts": [ + "controller/mw.echo.Controller.js", "ui/mw.echo.ui.js", "ui/mw.echo.ui.SortedListWidget.js", "ui/mw.echo.ui.SubGroupListWidget.js", @@ -109,6 +122,7 @@ "ext.echo.moment-hack.js" ], "styles": [ + "styles/mw.echo.ui.mobile.less", "styles/mw.echo.ui.overlay.less", "styles/mw.echo.ui.NotificationItemWidget.less", "styles/mw.echo.ui.ToggleReadCircleButtonWidget.less", @@ -122,12 +136,11 @@ "styles/mw.echo.ui.ConfirmationPopupWidget.less" ], "skinStyles": { - "monobook": [ - "styles/mw.echo.ui.NotificationsListWidget.monobook.less", + "modern": [ "styles/mw.echo.ui.overlay.monobook.less" ], - "modern": [ - "styles/mw.echo.ui.NotificationItemWidget.modern.less" + "monobook": [ + "styles/mw.echo.ui.overlay.monobook.less" ], "vector": [ "styles/mw.echo.ui.overlay.vector.less" @@ -137,17 +150,17 @@ ] }, "dependencies": [ + "ext.echo.api", + "ext.echo.dm", "ext.echo.logger", - "ext.echo.styles.notifications", - "ext.echo.controller", "ext.echo.secondaryicons", + "oojs", "oojs-ui-core", "oojs-ui-widgets", "moment", "mediawiki.jqueryMsg", "mediawiki.language", "mediawiki.Title", - "mediawiki.notify", "oojs-ui.styles.icons-user", "oojs-ui.styles.icons-alerts", "oojs-ui.styles.icons-content", @@ -160,8 +173,6 @@ "echo-overlay-link", "echo-mark-all-as-read", "echo-mark-wiki-as-read", - "echo-more-info", - "echo-feedback", "echo-notification-alert", "echo-notification-notice", "echo-notification-loginrequired", @@ -206,7 +217,6 @@ }, "ext.echo.dm": { "scripts": [ - "mw.echo.js", "model/mw.echo.dm.js", "model/mw.echo.dm.SourcePagesModel.js", "model/mw.echo.dm.PaginationModel.js", @@ -223,6 +233,7 @@ ], "dependencies": [ "oojs", + "ext.echo.init", "ext.echo.api", "moment" ], @@ -256,39 +267,58 @@ "mobile" ] }, - "ext.echo.controller": { - "scripts": [ - "controller/mw.echo.Controller.js" + "ext.echo.mobile": { + "templates": { + "NotificationBadge.mustache": "mobile/NotificationBadge.mustache" + }, + "styles": [ + "mobile/overlay.less", + "mobile/notificationsFilterOverlay.less" + ], + "messages": [ + "notifications", + "echo-mobile-notifications-filter-title", + "echo-mark-all-as-read-confirmation" ], "dependencies": [ - "oojs", - "ext.echo.api", - "ext.echo.dm" + "mediawiki.util", + "mediawiki.router", + "ext.echo.ui", + "oojs-ui.styles.icons-interactions" + ], + "packageFiles": [ + "mobile/notifications.js", + "mobile/list.js", + "mobile/overlay.js", + "mobile/NotificationBadge.js", + "mobile/notificationsFilterOverlay.js" ], "targets": [ "desktop", "mobile" ] }, - "ext.echo.base": { - "targets": [ - "desktop", - "mobile" - ], - "dependencies": [ - "ext.echo.logger" - ] - }, "ext.echo.init": { - "scripts": [ - "ext.echo.init.js" + "packageFiles": [ + "ext.echo.init.js", + { + "name": "config.json", + "callback": "EchoHooks::getConfigVars" + } ], "dependencies": [ "ext.echo.api", + "mediawiki.jqueryMsg", "mediawiki.Uri" ], + "messages": [ + "echo-badge-count", + "echo-displaysnippet-title", + "parentheses" + ], "targets": [ - "desktop" + "desktop", + "mobile" ] }, "ext.echo.styles.badge": { @@ -296,14 +326,14 @@ "nojs/mw.echo.badge.less" ], "skinStyles": { + "minerva": [ + "nojs/mw.echo.badge.minerva.less" + ], "monobook": [ "nojs/mw.echo.badge.monobook.less" ], "vector": [ "nojs/mw.echo.badge.vector.less" - ], - "modern": [ - "nojs/mw.echo.badge.modern.less" ] }, "targets": [ @@ -328,9 +358,6 @@ "skinStyles": { "monobook": [ "nojs/mw.echo.alert.monobook.less" - ], - "modern": [ - "nojs/mw.echo.alert.modern.less" ] }, "targets": [ @@ -361,18 +388,12 @@ "styles/mw.echo.ui.CrossWikiUnreadFilterWidget.less", "styles/mw.echo.ui.SpecialHelpMenuWidget.less" ], - "skinStyles": { - "monobook": [ - "styles/mw.echo.ui.CrossWikiUnreadFilterWidget.monobook.less" - ] - }, "dependencies": [ "ext.echo.ui", "mediawiki.Uri", "ext.echo.styles.special" ], "messages": [ - "echo-load-more-error", "notification-inbox-filter-read", "notification-inbox-filter-unread", "notification-inbox-filter-all", @@ -382,11 +403,10 @@ "echo-specialpage-pagefilters-title", "echo-specialpage-pagefilters-subtitle", "echo-mark-all-as-read", - "echo-more-info", "echo-learn-more", "mypreferences", - "echo-feedback", - "echo-specialpage-section-markread" + "echo-specialpage-section-markread", + "echo-specialpage-pagefilterwidget-aria-label" ], "targets": [ "desktop", @@ -401,12 +421,6 @@ "desktop", "mobile" ] - }, - "ext.echo.badgeicons": { - "class": "ResourceLoaderImageModule", - "data": "icons/badgeicons.json", - "selectorWithoutVariant": ".oo-ui-icon-{name}", - "selectorWithVariant": ".oo-ui-image-{variant}.oo-ui-icon-{name}" } }, "ResourceFileModulePaths": { @@ -414,11 +428,11 @@ "remoteExtPath": "Echo/modules" }, "Hooks": { + "SkinMinervaReplaceNotificationsBadge": "EchoHooks::onSkinMinervaReplaceNotificationsBadge", "LoadExtensionSchemaUpdates": "EchoHooks::onLoadExtensionSchemaUpdates", "GetPreferences": "EchoHooks::getPreferences", "PersonalUrls": "EchoHooks::onPersonalUrls", "BeforePageDisplay": "EchoHooks::beforePageDisplay", - "MakeGlobalVariablesScript": "EchoHooks::makeGlobalVariablesScript", "ResourceLoaderRegisterModules": "EchoHooks::onResourceLoaderRegisterModules", "ResourceLoaderTestModules": "EchoHooks::onResourceLoaderTestModules", "UserGroupsChanged": "EchoHooks::onUserGroupsChanged", @@ -437,16 +451,23 @@ "UserMergeAccountDeleteTables": "EchoHooks::onUserMergeAccountDeleteTables", "EchoGetBundleRules": "EchoHooks::onEchoGetBundleRules", "EchoAbortEmailNotification": "EchoHooks::onEchoAbortEmailNotification", - "PageContentSaveComplete": "EchoHooks::onPageContentSaveComplete", + "PageSaveComplete": "EchoHooks::onPageSaveComplete", "LocalUserCreated": "EchoHooks::onLocalUserCreated", - "ArticleRollbackComplete": "EchoHooks::onRollbackComplete", + "RollbackComplete": "EchoHooks::onRollbackComplete", "UserSaveSettings": "EchoHooks::onUserSaveSettings", "AbortTalkPageEmailNotification": "EchoHooks::onAbortTalkPageEmailNotification", "SendWatchlistEmailNotification": "EchoHooks::onSendWatchlistEmailNotification", "GetNewMessagesAlert": "EchoHooks::abortNewMessagesAlert", "LinksUpdateAfterInsert": "EchoHooks::onLinksUpdateAfterInsert", - "GetBetaFeaturePreferences": "EchoHooks::getBetaFeaturePreferences", - "ResourceLoaderGetConfigVars": "EchoHooks::onResourceLoaderGetConfigVars" + "SpecialMuteModifyFormFields": "EchoHooks::onSpecialMuteModifyFormFields", + "RecentChange_save": "main", + "ApiMain::moduleManager": "EchoHooks::onApiMainModuleManager" + }, + "HookHandlers": { + "main": { + "class": "\\EchoHooks", + "services": [ "MainConfig" ] + } }, "config": { "EchoEnableEmailBatch": { @@ -467,11 +488,8 @@ "EchoSharedTrackingCluster": { "value": false }, - "EchoSectionTransition": { - "value": false - }, - "EchoBundleTransition": { - "value": false + "EchoSeenTimeCacheType": { + "value": null }, "EchoMaxUpdateCount": { "value": 2000 @@ -499,10 +517,22 @@ }, "NotifyTypeAvailabilityByCategory": { "value": { + "system-noemail": { + "web": true, + "email": false + }, + "system-emailonly": { + "web": false, + "email": true + }, "emailuser": { "web": true, "email": false }, + "article-linked": { + "web": true, + "email": false + }, "mention-failure": { "web": true, "email": false @@ -510,6 +540,10 @@ "mention-success": { "web": true, "email": false + }, + "thank-you-edit": { + "web": true, + "email": false } }, "merge_strategy": "array_plus_2d" @@ -541,9 +575,6 @@ "EchoCrossWikiNotifications": { "value": false }, - "EchoUseCrossWikiBetaFeature": { - "value": false - }, "EchoNotificationCategories": { "value": { "system": { @@ -552,6 +583,18 @@ "all" ] }, + "system-noemail": { + "priority": 9, + "no-dismiss": [ + "all" + ] + }, + "system-emailonly": { + "priority": 9, + "no-dismiss": [ + "all" + ] + }, "user-rights": { "priority": 9, "tooltip": "echo-pref-tooltip-user-rights" @@ -595,6 +638,18 @@ "article-reminder": { "priority": 1, "tooltip": "echo-pref-tooltip-article-reminder" + }, + "thank-you-edit": { + "priority": 9, + "tooltip": "echo-pref-tooltip-thank-you-edit" + }, + "watchlist": { + "priority": 5, + "tooltip": "echo-pref-tooltip-watchlist" + }, + "minor-watchlist": { + "priority": 6, + "tooltip": "echo-pref-tooltip-minor-watchlist" } }, "merge_strategy": "array_plus_2d" @@ -644,7 +699,10 @@ "path": "Echo/modules/icons/message-constructive.svg" }, "help": { - "path": "Echo/modules/icons/help.svg" + "path": { + "ltr": "Echo/modules/icons/helpNotice-ltr.svg", + "rtl": "Echo/modules/icons/helpNotice-rtl.svg" + } }, "global": { "path": "Echo/modules/icons/global-progressive.svg" @@ -672,6 +730,9 @@ "rtl": "Echo/modules/icons/userTalk-rtl.svg" } }, + "unbell": { + "path": "Echo/modules/icons/unbell.svg" + }, "userSpeechBubble": { "path": "Echo/modules/icons/user-speech-bubble.svg" } @@ -684,12 +745,10 @@ "user-locators": [ "EchoUserLocator::locateEventAgent" ], - "category": "system", + "canNotifyAgent": true, + "category": "system-noemail", "group": "positive", "section": "message", - "notify-type-availability": { - "email": false - }, "presentation-model": "EchoWelcomePresentationModel" }, "edit-user-talk": { @@ -735,6 +794,32 @@ "expandable": true } }, + "minor-watchlist-change": { + "user-locators": [ + "EchoUserLocator::locateUsersWatchingTitle" + ], + "category": "minor-watchlist", + "group": "interactive", + "presentation-model": "EchoWatchlistChangePresentationModel", + "bundle": { + "web": true, + "email": true, + "expandable": true + } + }, + "watchlist-change": { + "user-locators": [ + "EchoUserLocator::locateUsersWatchingTitle" + ], + "category": "watchlist", + "group": "interactive", + "presentation-model": "EchoWatchlistChangePresentationModel", + "bundle": { + "web": true, + "email": true, + "expandable": true + } + }, "mention": { "user-locators": [ [ @@ -769,6 +854,7 @@ "EchoUserLocator::locateEventAgent" ] ], + "canNotifyAgent": true, "category": "mention-failure", "bundle": { "web": true, @@ -784,6 +870,7 @@ "EchoUserLocator::locateEventAgent" ] ], + "canNotifyAgent": true, "category": "mention-failure", "group": "negative", "section": "alert", @@ -795,6 +882,7 @@ "EchoUserLocator::locateEventAgent" ] ], + "canNotifyAgent": true, "category": "mention-success", "bundle": { "web": true, @@ -845,10 +933,8 @@ "user-locators": [ "EchoUserLocator::locateEventAgent" ], - "category": "system", - "notify-type-availability": { - "email": false - }, + "canNotifyAgent": true, + "category": "thank-you-edit", "group": "positive", "presentation-model": "EchoEditThresholdPresentationModel", "section": "message" @@ -857,6 +943,7 @@ "user-locators": [ "EchoUserLocator::locateEventAgent" ], + "canNotifyAgent": true, "category": "article-reminder", "group": "positive", "presentation-model": "EchoArticleReminderPresentationModel", @@ -892,6 +979,26 @@ "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" + }, + "EchoPollForUpdates": { + "value": 0, + "description": "This is the polling rate i.e. the time after which we check for notifications count on the client side. It also controls whether notification count will be displayed in browser title. If polling rate is 0 this means polling is disabled and notification count is also not shown in browser title" + }, + "EchoWatchlistNotifications": { + "value": false, + "description": "Feature flag to enable Echo notifications whenever a page on a user's watchlist is changed, replacing the built-in preference to send emails in that circumstance." + }, + "EchoWatchlistEmailOncePerPage": { + "value": true, + "description": "Whether to send email notifications each time a watched page is edited (if false) or only the first time the page is changed before being visited again by the user (if true)" + }, + "EchoEnablePush": { + "value": false, + "description": "Whether to enable push notifications" + }, + "EchoPushServiceBaseUrl": { + "value": false, + "description": "Request endpoint URL for the push notification service" } }, "attributes": { @@ -906,24 +1013,17 @@ "ApiCrossWiki": "includes/api/ApiCrossWiki.php", "ApiEchoArticleReminder": "includes/api/ApiEchoArticleReminder.php", "ApiEchoMarkRead": "includes/api/ApiEchoMarkRead.php", - "ApiEchoMarkReadTest": "tests/phpunit/api/ApiEchoMarkReadTest.php", "ApiEchoMarkSeen": "includes/api/ApiEchoMarkSeen.php", + "ApiEchoMute": "includes/api/ApiEchoMute.php", "ApiEchoNotifications": "includes/api/ApiEchoNotifications.php", - "ApiEchoNotificationsTest": "tests/phpunit/api/ApiEchoNotificationsTest.php", "ApiEchoUnreadNotificationPages": "includes/api/ApiEchoUnreadNotificationPages.php", - "BackfillReadBundles": "maintenance/backfillReadBundles.php", "BackfillUnreadWikis": "maintenance/backfillUnreadWikis.php", "Bundleable": "includes/Bundleable.php", "Bundler": "includes/Bundler.php", - "BundlerTest": "tests/phpunit/BundlerTest.php", - "ContainmentSetTest": "tests/phpunit/ContainmentSetTest.php", "EchoAbstractEntity": "includes/model/AbstractEntity.php", "EchoAbstractMapper": "includes/mapper/AbstractMapper.php", - "EchoAbstractMapperStub": "tests/phpunit/mapper/EchoAbstractMapperStub.php", - "EchoAbstractMapperTest": "tests/phpunit/mapper/AbstractMapperTest.php", "EchoArrayList": "includes/EchoArrayList.php", "EchoAttributeManager": "includes/AttributeManager.php", - "EchoAttributeManagerTest": "tests/phpunit/AttributeManagerTest.php", "EchoCachedList": "includes/EchoCachedList.php", "EchoCallbackIterator": "includes/iterator/CallbackIterator.php", "EchoCatchableFatalErrorException": "includes/exception/CatchableFatalErrorException.php", @@ -933,9 +1033,7 @@ "EchoDeferredMarkAsDeletedUpdate": "includes/DeferredMarkAsDeletedUpdate.php", "EchoDiffGroup": "includes/EchoDiffGroup.php", "EchoDiffParser": "includes/EchoDiffParser.php", - "EchoDiffParserTest": "tests/phpunit/DiffParserTest.php", "EchoDiscussionParser": "includes/DiscussionParser.php", - "EchoDiscussionParserTest": "tests/phpunit/DiscussionParserTest.php", "EchoEditThresholdPresentationModel": "includes/formatters/EditThresholdPresentationModel.php", "EchoEditUserTalkPresentationModel": "includes/formatters/EditUserTalkPresentationModel.php", "EchoArticleReminderPresentationModel": "includes/formatters/ArticleReminderPresentationModel.php", @@ -946,9 +1044,7 @@ "EchoEventDigestFormatter": "includes/formatters/EchoEventDigestFormatter.php", "EchoEventFormatter": "includes/formatters/EchoEventFormatter.php", "EchoEventMapper": "includes/mapper/EventMapper.php", - "EchoEventMapperTest": "tests/phpunit/mapper/EventMapperTest.php", "EchoEventPresentationModel": "includes/formatters/EventPresentationModel.php", - "EchoExecuteFirstArgumentStub": "tests/phpunit/mapper/EchoExecuteFirstArgumentStub.php", "EchoFilteredSequentialIterator": "includes/iterator/FilteredSequentialIterator.php", "EchoFlyoutFormatter": "includes/formatters/EchoFlyoutFormatter.php", "EchoForeignNotifications": "includes/ForeignNotifications.php", @@ -972,47 +1068,35 @@ "EchoNotificationDeleteJob": "includes/jobs/NotificationDeleteJob.php", "EchoNotificationJob": "includes/jobs/NotificationJob.php", "EchoNotificationMapper": "includes/mapper/NotificationMapper.php", - "EchoNotificationMapperTest": "tests/phpunit/mapper/NotificationMapperTest.php", - "EchoNotificationTest": "tests/phpunit/model/NotificationTest.php", "EchoNotifier": "includes/Notifier.php", - "EchoOOUI\\LabelIconWidget": "includes/ooui/LabelIconWidget.php", "EchoOnWikiList": "includes/EchoOnWikiList.php", "EchoPageLinkedPresentationModel": "includes/formatters/PageLinkedPresentationModel.php", "EchoPlainTextDigestEmailFormatter": "includes/formatters/EchoPlainTextDigestEmailFormatter.php", "EchoPlainTextEmailFormatter": "includes/formatters/EchoPlainTextEmailFormatter.php", - "EchoPresentationModelSectionTrait": "includes/formatters/PresentationModelSectionTrait.php", + "EchoPresentationModelSection": "includes/formatters/PresentationModelSection.php", "EchoRevertedPresentationModel": "includes/formatters/RevertedPresentationModel.php", "EchoRevisionLocalCache": "includes/cache/RevisionLocalCache.php", "EchoSeenTime": "includes/SeenTime.php", + "EchoServices": "includes/EchoServices.php", "EchoSummaryParser": "includes/EchoSummaryParser.php", "EchoSuppressionRowUpdateGenerator": "includes/schemaUpdate.php", - "EchoTalkPageFunctionalTest": "tests/phpunit/TalkPageFunctionalTest.php", "EchoTargetPage": "includes/model/TargetPage.php", "EchoTargetPageMapper": "includes/mapper/TargetPageMapper.php", - "EchoTargetPageMapperTest": "tests/phpunit/mapper/TargetPageMapperTest.php", - "EchoTargetPageTest": "tests/phpunit/model/TargetPageTest.php", "EchoTitleLocalCache": "includes/cache/TitleLocalCache.php", - "EchoTitleLocalCacheTest": "tests/phpunit/cache/TitleLocalCacheTest.php", "EchoUnreadWikis": "includes/UnreadWikis.php", "EchoUserLocator": "includes/UserLocator.php", - "EchoUserLocatorTest": "tests/phpunit/UserLocatorTest.php", "EchoUserNotificationGateway": "includes/gateway/UserNotificationGateway.php", - "EchoUserNotificationGatewayTest": "tests/phpunit/gateway/UserNotificationGatewayTest.php", "EchoUserRightsPresentationModel": "includes/formatters/UserRightsPresentationModel.php", "EchoWelcomePresentationModel": "includes/formatters/WelcomePresentationModel.php", - "FilteredSequentialIteratorTest": "tests/phpunit/iterator/FilteredSequentialIteratorTest.php", + "EchoWatchlistChangePresentationModel": "includes/formatters/WatchlistChangePresentationModel.php", "GenerateSampleNotifications": "maintenance/generateSampleNotifications.php", "MWEchoDbFactory": "includes/EchoDbFactory.php", - "MWEchoDbFactoryTest": "tests/phpunit/EchoDbFactoryTest.php", "MWEchoEmailBatch": "includes/EmailBatch.php", "MWEchoEventLogging": "includes/EventLogging.php", "MWEchoNotifUser": "includes/NotifUser.php", - "MWEchoNotifUserTest": "tests/phpunit/NotifUserTest.php", - "MWEchoThankYouEditTest": "tests/phpunit/ThankYouEditTest.php", - "NotificationControllerTest": "tests/phpunit/controller/NotificationControllerTest.php", "NotificationPager": "includes/special/NotificationPager.php", - "NotificationsTest": "tests/phpunit/NotificationsTest.php", "ProcessEchoEmailBatch": "maintenance/processEchoEmailBatch.php", + "RecomputeNotifCounts": "maintenance/recomputeNotifCounts.php", "RemoveInvalidNotification": "maintenance/removeInvalidNotification.php", "RemoveOrphanedEvents": "maintenance/removeOrphanedEvents.php", "ResourceLoaderEchoImageModule": "includes/ResourceLoaderEchoImageModule.php", @@ -1020,9 +1104,22 @@ "SpecialNotifications": "includes/special/SpecialNotifications.php", "SpecialNotificationsFormatter": "includes/formatters/SpecialNotificationsFormatter.php", "SpecialNotificationsMarkRead": "includes/special/SpecialNotificationsMarkRead.php", - "SuppressionMaintenanceTest": "tests/phpunit/maintenance/SupressionMaintenanceTest.php", - "TestDiscussionParser": "maintenance/testDiscussionParser.php", "UpdateEchoSchemaForSuppression": "maintenance/updateEchoSchemaForSuppression.php", "EchoUpdatePerUserBlacklist": "maintenance/updatePerUserBlacklist.php" + }, + "AutoloadNamespaces": { + "EchoOOUI\\": "includes/ooui/", + "EchoPush\\": "includes/Push/", + "EchoPush\\Api\\": "includes/api/Push/" + }, + "TestAutoloadClasses": { + "EchoAbstractMapperStub": "tests/phpunit/mapper/EchoAbstractMapperStub.php", + "EchoExecuteFirstArgumentStub": "tests/phpunit/mapper/EchoExecuteFirstArgumentStub.php" + }, + "ServiceWiringFiles": [ + "ServiceWiring.php" + ], + "ConfigRegistry": { + "Echo": "GlobalVarConfig::newInstance" } } diff --git a/Echo/gitinfo.json b/Echo/gitinfo.json deleted file mode 100644 index 4cbb0cf7..00000000 --- a/Echo/gitinfo.json +++ /dev/null @@ -1 +0,0 @@ -{"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/ace.json b/Echo/i18n/ace.json index aeaec342..9b0165d4 100644 --- a/Echo/i18n/ace.json +++ b/Echo/i18n/ace.json @@ -4,5 +4,7 @@ "Si Gam Acèh" ] }, - "tooltip-pt-notifications-alert": "Beuneuri thèe" + "echo-new-messages": "Droeneuh na peusan barô", + "tooltip-pt-notifications-alert": "Bri thèe", + "notification-bundle-header-edit-user-talk-v2": "{{PLURAL:$1|Saboh peusan barô|$1 peusan barô|100=99+ peusan barô}} bak <strong>ôn marit {{GENDER:$3|droeneuh}}</strong>." } diff --git a/Echo/i18n/af.json b/Echo/i18n/af.json index 6148e463..916c9d39 100644 --- a/Echo/i18n/af.json +++ b/Echo/i18n/af.json @@ -1,16 +1,15 @@ { "@metadata": { "authors": [ - "Naudefj", - "Servien", + "Biggs ZA", "Fwolff", - "Biggs ZA" + "Naudefj", + "Servien" ] }, "echo-desc": "Kennisgewing-stelsel", "prefs-echo": "Kennisgewings", "prefs-emailsettings": "E-posopsies", - "prefs-displaynotifications": "Vertoonopsies", "prefs-echosubscriptions": "Hou my op hoogte oor hierdie gebeurtenisse", "prefs-echocrosswiki": "Kennisgewings van ander wiki's", "prefs-blocknotificationslist": "Stilgebruikers", @@ -44,8 +43,6 @@ "echo-specialpage-pagefilters-subtitle": "Bladsye met ongelese kennisgewings", "notificationsmarkread-legend": "Merk kennisgewing as gelees", "echo-none": "U het geen kennisgewings nie.", - "echo-more-info": "Meer inligting", - "echo-feedback": "Terugvoer", "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.", @@ -76,7 +73,6 @@ "notification-inbox-filter-read": "Gelees", "notification-inbox-filter-unread": "Ongelees", "notification-inbox-filter-all": "Alles", - "echo-email-body-default": "U het 'n nuwe kennisgewing op {{SITENAME}}:\n\n$1", "echo-notification-alert-text-only": "Kennisgewings", "echo-notification-notice-text-only": "Boodskappe", "echo-overlay-link": "Alle kennisgewings", diff --git a/Echo/i18n/am.json b/Echo/i18n/am.json index 954929af..b22949a6 100644 --- a/Echo/i18n/am.json +++ b/Echo/i18n/am.json @@ -7,7 +7,6 @@ }, "prefs-echo": "ማስታወቂያዎች", "prefs-emailsettings": "የኢ-ሜል ምርጫዎች", - "prefs-displaynotifications": "የማሳያ አማራጮች", "echo-pref-email": "ኢ-ሜል", "echo-pref-email-frequency-never": "ማስታወቂያዎችን በኢ-ሜል አትላክልኝ", "echo-pref-email-frequency-immediately": "ለእያንዳንዱ ማስታወቂያ", @@ -28,10 +27,7 @@ "echo-pref-tooltip-mention": "ማንኛውም ሰው ወደ እኔ ውይይት ገጽ በሌላ ውይይት ገጽ ላይ መያያዣ ሲያቀርብ አስታውቀኝ።", "notifications": "ማስታወቂያዎች", "echo-specialpage": "ማስታወቂያዎች", - "echo-anon": "ማስታወቂያዎችን ለማየት [$1 የብዕር ስም ያውጡ] ወይም [$2 በብዕር ስምዎ ይግቡ]።", "echo-none": "ምንም ማስታወቂያዎች የሎትም።", - "echo-more-info": "ተጨማሪ መረጃ", - "echo-feedback": "አስተያየት", "notification-link-text-view-message": "መልዕክት ለማየት", "notification-link-text-view-mention": "ስምዎ የተነሳበትን ገጽ ለማየት", "notification-link-text-view-changes": "ማነጻጸሪያ ለማየት", @@ -39,10 +35,8 @@ "notification-link-text-view-edit": "ማነጻጸሪያ ለማየት", "echo-overlay-link": "ሁሉም ማስታወቂያዎች", "echo-overlay-title": "<b>ማስታወቂያዎች</b>", - "echo-overlay-title-overflow": "<b>{{PLURAL:$1|ማስታወቂያ|ማስታወቂያዎች}}</b> (ከ$2 {{PLURAL:$2|ያልታየ|ያልታዩ}} ውስጥ {{PLURAL:$1|ዱ|ቱ}})", "echo-mark-all-as-read": "ሁሉንም ታይተዋል በል", "echo-date-today": "ዛሬ", "echo-date-yesterday": "ትላንትና", - "echo-load-more-error": "ተጨማሪ ውጤቶችን ሲያመጣ ስህተት ተከስቷል።", "echo-email-batch-link-text-view-all-notifications": "ሁሉንም ማስታወቂያዎች ለማየት" } diff --git a/Echo/i18n/ann.json b/Echo/i18n/ann.json new file mode 100644 index 00000000..d8ffaa89 --- /dev/null +++ b/Echo/i18n/ann.json @@ -0,0 +1,8 @@ +{ + "@metadata": { + "authors": [ + "Katelem" + ] + }, + "echo-pref-push": "Ebi kè Ekwu" +} diff --git a/Echo/i18n/api/ar.json b/Echo/i18n/api/ar.json index eabd2bb7..730c987b 100644 --- a/Echo/i18n/api/ar.json +++ b/Echo/i18n/api/ar.json @@ -7,8 +7,8 @@ "Maroen1990", "Meno25", "بدارين", - "محمد أحمد عبد الفتاح", - "ديفيد" + "ديفيد", + "محمد أحمد عبد الفتاح" ] }, "apihelp-echomarkread-description": "علم الإخطارات للقراءة للمستخدم الحالي.", @@ -17,6 +17,7 @@ "apihelp-echomarkread-param-unreadlist": "قائمة بأرقام الإخطارات للتعليم كغير مقروءة.", "apihelp-echomarkread-param-all": "لو مضبوطة؛ تعلم على كل إخطارات المستخدم كمقروءة.", "apihelp-echomarkread-param-sections": "قائمة الأقسام للتعليم كمقروءة.", + "apihelp-echomarkread-param-wikis": "قائمة الويكيات لتعليم الإشعار كمقروء (الإعدادات الافتراضية للويكي الحالي فقط).", "apihelp-echomarkread-example-1": "علم على الإخطار 8 كمقروء", "apihelp-echomarkread-example-2": "تعليم جميع الإشعارات كمقروءة", "apihelp-echomarkread-example-3": "علم على الإخطار 1 كمقروء", diff --git a/Echo/i18n/api/bg.json b/Echo/i18n/api/bg.json index 2d719035..e68e7644 100644 --- a/Echo/i18n/api/bg.json +++ b/Echo/i18n/api/bg.json @@ -6,42 +6,42 @@ ] }, "apihelp-echomarkread-description": "Отбелязване на съобщенията от този потребител като прочетени.", - "apihelp-echomarkread-param-list": "Списък на ID известията за маркиране като прочетени.", - "apihelp-echomarkread-param-unreadlist": "Списък на ID известията за маркиране като непрочетени", - "apihelp-echomarkread-param-all": "Ако е зададено, означи всички известия от потребители като прочетени.", - "apihelp-echomarkread-param-sections": "Списък на разделите за маркиране като прочетени.", + "apihelp-echomarkread-param-list": "Списък на ID-тата на известията за отбелязване като прочетено.", + "apihelp-echomarkread-param-unreadlist": "Списък на ID-тата на известията за отбелязване като непрочетени.", + "apihelp-echomarkread-param-all": "Ако е зададено, отбелязва всички известия от потребители като прочетени.", + "apihelp-echomarkread-param-sections": "Списък на разделите за отбелязване като прочетени.", "apihelp-echomarkread-example-1": "Отбелязване на известие 8 като прочетено", "apihelp-echomarkread-example-2": "Отбелязване на всички съобщения като прочетени", "apihelp-echomarkread-example-3": "Отбелязване на известие 1 като прочетено", "apihelp-echomarkseen-description": "Отбелязване на известията за този потребител като видяни.", "apihelp-echomarkseen-example-1": "Отбелязване на известията от всички видове като видяни", - "apihelp-echomarkseen-param-type": "Вид съобщения за маркиране като прочетени: 'предупреждение', 'съобщение' или 'всички'.", - "apihelp-echomarkseen-param-timestampFormat": "Формат за дата и време в изходните данни, „ISO_8601“ или „MW“. Тук „MW“ е отхвърлен, и всички клиенти трябва да се прехвърлят на „ISO_8601“. Този параметър ще бъде отстранен, а „ISO_8601“ ще стане единствения формат за изходни данни.", + "apihelp-echomarkseen-param-type": "Вид съобщения за отбелязване като прочетени: 'предупреждение', 'съобщение' или 'всички'.", + "apihelp-echomarkseen-param-timestampFormat": "Формат за дата и време в изходните данни, „ISO_8601“ или „MW“. Тук „MW“ е непрепоръчителен, и всички клиенти трябва да се прехвърлят на „ISO_8601“. Този параметър ще бъде отстранен, а „ISO_8601“ ще стане единствения формат за изходни данни.", "apihelp-query+notifications-description": "Получаване на известия, чакащи текущия потребител.", "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-format": "Ако е указано, известията ще се връщат форматирани по този начин.", "apihelp-query+notifications-paramvalue-format-model": "Необработени данни за съобщения", "apihelp-query+notifications-paramvalue-format-special": "Форматирано за служебната страница за известия (и само за това!) Не разчитайте на 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-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-crosswikisummary": "Право на включване в обобщено известие за известия от чужди уикита.", "apihelp-query+notifications-param-alertcontinue": "Използвайте тази опция за да продължите, когато са налице повече резултати за известия.", - "apihelp-query+notifications-param-unreadfirst": "Дали първоначално да се показват непрочетените известия (използва се само ако groupbysection не е зададено).", - "apihelp-query+notifications-param-alertunreadfirst": "Дали първоначално да се показват непрочетените известия (използва се само ако groupbysection е зададено).", + "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-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-description": "Получи страници, за които има непрочетени известия за текущия потребител.", - "apihelp-query+unreadnotificationpages-param-grouppages": "Групиране на беседи заедно с беседите им, и групиране на съобщенията, които не са свързани със страница, заедно със страницата на текущия потребител.", - "apihelp-query+unreadnotificationpages-param-limit": "Максимален брой на страници за връщане.", + "apihelp-query+unreadnotificationpages-description": "Получаване на страници, за които има непрочетени известия за текущия потребител.", + "apihelp-query+unreadnotificationpages-param-grouppages": "Групиране на беседи заедно с беседите им, и групиране на известията, които не са свързани със страница, заедно със страницата на текущия потребител.", + "apihelp-query+unreadnotificationpages-param-limit": "Максималният брой на страници за връщане.", "apihelp-query+unreadnotificationpages-param-wikis": "Списък на уикита с непрочетени известия (по подразбиране — само текущото уики).", - "apihelp-query+unreadnotificationpages-example-1": "Списък на страници с (брой) непрочетени съобщения" + "apihelp-query+unreadnotificationpages-example-1": "Списък на страници с (броя на) непрочетени известия" } diff --git a/Echo/i18n/api/de.json b/Echo/i18n/api/de.json index 93f7acf6..ca1a1dea 100644 --- a/Echo/i18n/api/de.json +++ b/Echo/i18n/api/de.json @@ -1,6 +1,7 @@ { "@metadata": { "authors": [ + "Hwboehm", "MGChecker", "Metalhead64", "Purodha", @@ -13,6 +14,7 @@ "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.", "apihelp-echomarkread-param-sections": "Eine Liste der Abschnitte, die als gelesen markiert werden sollen.", + "apihelp-echomarkread-param-wikis": "Liste der Wikis, um die Benachrichtigung als gelesen zu markieren (standardmäßig nur das aktuelle Wiki).", "apihelp-echomarkread-example-1": "Benachrichtigung 8 als gelesen markieren", "apihelp-echomarkread-example-2": "Alle Benachrichtigungen als gelesen markieren", "apihelp-echomarkread-example-3": "Markiert die Benachrichtigung 1 als ungelesen", @@ -21,6 +23,20 @@ "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-echomute-description": "Stummschalten oder Aufheben der Stummschaltung von Benachrichtigungen bestimmter Benutzer oder Seiten.", + "apihelp-echomute-summary": "Stummschalten oder Aufheben der Stummschaltung von Benachrichtigungen bestimmter Benutzer oder Seiten.", + "apihelp-echomute-param-type": "Welche Stummschaltliste soll hinzugefügt oder entfernt werden?", + "apihelp-echomute-param-mute": "Seiten oder Benutzer, die zur Stummschaltliste hinzugefügt werden", + "apihelp-echomute-param-unmute": "Aus der Stummschaltungsliste zu entfernende Seiten oder Benutzer", + "apihelp-echopushsubscriptions-summary": "Verwaltung der Push-Abonnements für den aktuellen Benutzer.", + "apihelp-echopushsubscriptions-param-command": "Die auszuführende Aktion.", + "apihelp-echopushsubscriptions+create-summary": "Registrieren eines Push-Abonnements für den aktuellen Benutzer.", + "apihelp-echopushsubscriptions+create-param-provider": "Der Push-Dienstleister, für den ein Token registriert werden soll.", + "apihelp-echopushsubscriptions+create-param-providertoken": "Das Token zur Registrierung.", + "apihelp-echopushsubscriptions+create-example": "Registrieren eines Push-Abonnements für den aktuellen Benutzer.", + "apihelp-echopushsubscriptions+delete-summary": "Aufheben der Registrierung von Push-Abonnements für den aktuellen Benutzer auf.", + "apihelp-echopushsubscriptions+delete-param-providertoken": "Das mit dem Push-Abonnement zur Abmeldung verbundene Token.", + "apihelp-echopushsubscriptions+delete-example": "Aufheben der Registrierung eines Push-Abonnements für den aktuellen Benutzer auf.", "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.", @@ -34,6 +50,7 @@ "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.", "apihelp-query+notifications-param-wikis": "Liste der Wikis, von denen Benachrichtigungen abgerufen werden sollen (standardmäßig nur das aktuelle Wiki).", + "apihelp-query+notifications-param-crosswikisummary": "True für das Opt-In in zu einer summarischen Benachrichtigung über Benachrichtigungen auf Dritt-Wikis.", "apihelp-query+notifications-param-alertcontinue": "Falls mehr Alarmergebnisse verfügbar sind, dies zum Fortfahren verwenden.", "apihelp-query+notifications-param-unreadfirst": "Ob ungelesene Benachrichtigungen zuerst angezeigt werden sollen (wird nur verwendet, wenn groupbysection nicht festgelegt ist).", "apihelp-query+notifications-param-alertunreadfirst": "Ob ungelesene Nachrichten zuerst angezeigt werden sollen (wird nur verwendet, wenn groupbysection festgelegt ist).", @@ -44,6 +61,7 @@ "apihelp-query+notifications-example-1": "Benachrichtigungen auflisten", "apihelp-query+notifications-example-2": "Benachrichtigungen auflisten, gruppiert nach Abschnitt, mit Zählern", "apihelp-query+unreadnotificationpages-description": "Ruft Seiten ab, für die es für den aktuellen Benutzer ungelesene Benachrichtigungen gibt.", + "apihelp-query+unreadnotificationpages-summary": "Ruft Seiten ab, für die es für den aktuellen Benutzer ungelesene Benachrichtigungen gibt.", "apihelp-query+unreadnotificationpages-param-grouppages": "Gruppiert Diskussionsseiten zusammen mit ihrer dazugehörigen Seite und Gruppenbenachrichtigungen, die nicht mit einer Seite zusammen mit der aktuellen Benutzerseite verknüpft sind.", "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).", @@ -58,5 +76,7 @@ "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>.", - "apierror-echo-event-creation-failed": "Es konnte kein Echo-Ereignis erstellt werden" + "apierror-echo-event-creation-failed": "Es konnte kein Echo-Ereignis erstellt werden", + "apierror-echo-push-token-exists": "Das angegebene Token ist bereits in der Datenbank vorhanden.", + "apierror-echo-push-token-not-found": "Das angegebene Token wurde in der Datenbank nicht gefunden." } diff --git a/Echo/i18n/api/en.json b/Echo/i18n/api/en.json index 4ca9fb1c..dff5fca5 100644 --- a/Echo/i18n/api/en.json +++ b/Echo/i18n/api/en.json @@ -15,6 +15,7 @@ "apihelp-echomarkread-param-unreadlist": "A list of notification IDs to mark as unread.", "apihelp-echomarkread-param-all": "If set, marks all of a user's notifications as read.", "apihelp-echomarkread-param-sections": "A list of sections to mark as read.", + "apihelp-echomarkread-param-wikis": "List of wikis to mark notification as read (defaults to only current wiki).", "apihelp-echomarkread-example-1": "Mark notification 8 as read", "apihelp-echomarkread-example-2": "Mark all notifications as read", "apihelp-echomarkread-example-3": "Mark notification 1 as unread", @@ -23,6 +24,20 @@ "apihelp-echomarkseen-example-1": "Mark notifications of all types as seen", "apihelp-echomarkseen-param-type": "Type of notifications to mark as seen: 'alert', 'message' or 'all'.", "apihelp-echomarkseen-param-timestampFormat": "Timestamp format to use for output, 'ISO_8601' or 'MW'. 'MW' is deprecated here, so all clients should switch to 'ISO_8601'. This parameter will be removed, and 'ISO_8601' will become the only output format.", + "apihelp-echomute-description": "Mute or unmute notifications from certain users or pages.", + "apihelp-echomute-summary": "Mute or unmute notifications from certain users or pages.", + "apihelp-echomute-param-type": "Which mute list to add to or remove from", + "apihelp-echomute-param-mute": "Pages or users to add to the mute list", + "apihelp-echomute-param-unmute": "Pages or users to remove from the mute list", + "apihelp-echopushsubscriptions-summary": "Manage push subscriptions for the current user.", + "apihelp-echopushsubscriptions-param-command": "Action to perform.", + "apihelp-echopushsubscriptions+create-summary": "Register push subscriptions for the current user.", + "apihelp-echopushsubscriptions+create-param-provider": "The push service provider for which to register a token.", + "apihelp-echopushsubscriptions+create-param-providertoken": "The token to register.", + "apihelp-echopushsubscriptions+create-example": "Register a push subscription for the current user.", + "apihelp-echopushsubscriptions+delete-summary": "Unegister push subscriptions for the current user.", + "apihelp-echopushsubscriptions+delete-param-providertoken": "The token associated with the push subscription to unregister.", + "apihelp-echopushsubscriptions+delete-example": "Unregister a push subscription for the current user.", "apihelp-query+notifications-description": "Get notifications waiting for the current user.", "apihelp-query+notifications-summary": "Get notifications waiting for the current user.", "apihelp-query+notifications-param-prop": "Details to request.", @@ -62,5 +77,7 @@ "apiwarn-echo-deprecation-timestampformat": "The MW timestamp output format is deprecated here. In the future, ISO 8601 will always be used for the output timestamp format. Adjust your client and set <var>timestampFormat</var> to <kbd>ISO_8601</kbd>.", "apiwarn-echo-deprecation-flyout": "<kbd>notformat=flyout</kbd> has been deprecated and will be removed soon. Use <kbd>notformat=model</kbd> to get the raw data or <kbd>notformat=special</kbd> for pre-rendered HTML.", "apiwarn-echo-deprecation-html": "<kbd>notformat=html</kbd> has been deprecated and will be removed soon. Use <kbd>notformat=special</kbd> instead.", - "apierror-echo-event-creation-failed": "Could not create Echo event" + "apierror-echo-event-creation-failed": "Could not create Echo event", + "apierror-echo-push-token-exists": "The provided token already exists in the database.", + "apierror-echo-push-token-not-found": "The provided token was not found in the database." } diff --git a/Echo/i18n/api/es.json b/Echo/i18n/api/es.json index e1524c5e..47e56308 100644 --- a/Echo/i18n/api/es.json +++ b/Echo/i18n/api/es.json @@ -2,12 +2,15 @@ "@metadata": { "authors": [ "Allan Aguilar", + "Dgstranz", "Fitoschido", "Jduranboger", - "Macofe" + "Macofe", + "Tiberius1701" ] }, "apihelp-echomarkread-description": "Marcar notificaciones como leídas para el usuario actual.", + "apihelp-echomarkread-summary": "Marcar las notificaciones del usuario actual como leídas.", "apihelp-echomarkread-param-list": "Lista de identificaciones de notificación para marcar como leídas.", "apihelp-echomarkread-param-unreadlist": "Una lista de identificadores de notificación para marcar como leídas.", "apihelp-echomarkread-param-all": "Si se establece, marca todas las notificaciones de un usuario como leídas.", @@ -16,10 +19,13 @@ "apihelp-echomarkread-example-2": "Marca todas las notificaciones como leídas", "apihelp-echomarkread-example-3": "Marca la notificación 1 como no leída", "apihelp-echomarkseen-description": "Marca las notificaciones como vistas para el usuario actual.", + "apihelp-echomarkseen-summary": "Marcar 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-echopushsubscriptions-param-command": "La acción que debe realizarse.", "apihelp-query+notifications-description": "Recibe notificaciones en espera para el usuario actual.", + "apihelp-query+notifications-summary": "Recibir notificaciones pendientes del 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.", @@ -40,8 +46,17 @@ "apihelp-query+notifications-example-1": "Lista de notificaciones", "apihelp-query+notifications-example-2": "Lista notificaciones, agrupadas por sección, incluyendo contadores", "apihelp-query+unreadnotificationpages-description": "Obtener las páginas para las que hay notificaciones sin leer para el usuario actual.", + "apihelp-query+unreadnotificationpages-summary": "Recibir páginas para las que hay notificaciones no leídas para el usuario actual.", + "apihelp-query+unreadnotificationpages-param-grouppages": "Agrupar páginas de discusión junto con su página de asunto asociada, y agrupar notificaciones no asociadas con una página junto con la página de usuario del 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-echoarticlereminder-summary": "Solicitar un recordatorio futuro sobre el artículo especificado", + "apihelp-echoarticlereminder-param-pageid": "Identificador del artículo sobre el cual recordar al usuario", + "apihelp-echoarticlereminder-param-title": "Título del artículo sobre el cual recordar al usuario", + "apihelp-echoarticlereminder-param-timestamp": "Marca de tiempo en la que recordar al usuario", + "apihelp-echoarticlereminder-param-comment": "Comentario opcional del usuario para incluir en el recordatorio", + "apihelp-echoarticlereminder-example-1": "Crear una notificación de recordatorio de artículo para mañana con comentario", + "apihelp-echoarticlereminder-example-2": "Crear una notificación de recordatorio de artículo para mañana sin comentario", "apierror-echo-event-creation-failed": "No se pudo crear el suceso de Echo" } diff --git a/Echo/i18n/api/fa.json b/Echo/i18n/api/fa.json index e62d6109..450d4c54 100644 --- a/Echo/i18n/api/fa.json +++ b/Echo/i18n/api/fa.json @@ -22,7 +22,7 @@ "apihelp-echomarkseen-summary": "علامت گذاری آگاهسازیها به عنوان دیده شده برای کاربر فعلی.", "apihelp-echomarkseen-example-1": "علامتگذاری همهٔ انواع اعلانها به عنوان دیدهشده", "apihelp-echomarkseen-param-type": "نوع اعلانهایی که خواندهشده علامت زده شوند: «آگاهسازی»، «پیام»، یا «همه»", - "apihelp-echomarkseen-param-timestampFormat": "ساختار تاریخ استفاده شده برای خروجی 'ISO_8601' یا 'MW' است. 'MW' در اینجا دیگر مورد استفاده نیست در نتیجه همهٔ کاربران باید از 'ISO_8601' استفاده کنند. این متغییر حذف خواهد شد و 'ISO_8601' به عنوان تنها ساختار خروجی انتخاب خواهد شد.", + "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/fr.json b/Echo/i18n/api/fr.json index 28b4332f..5feee802 100644 --- a/Echo/i18n/api/fr.json +++ b/Echo/i18n/api/fr.json @@ -5,11 +5,12 @@ "Gomoko", "Orlodrim", "Pols12", + "Thibaut120094", "Trial", - "Wladek92", - "Yasten", "Urhixidur", - "Verdy p" + "Verdy p", + "Wladek92", + "Yasten" ] }, "apihelp-echomarkread-description": "Marquer les notifications comme lues pour l’utilisateur actuel.", @@ -18,14 +19,29 @@ "apihelp-echomarkread-param-unreadlist": "Une liste des IDs de notification à marquer comme non lue.", "apihelp-echomarkread-param-all": "Si défini, marque toutes les notifications de l’utilisateur comme lues.", "apihelp-echomarkread-param-sections": "Une liste des sections à marquer comme lues.", + "apihelp-echomarkread-param-wikis": "Liste des wikis sur lesquels marquer la notification comme lue (par défaut, uniquement le wiki actuel).", "apihelp-echomarkread-example-1": "Marquer la notification 8 comme lue", "apihelp-echomarkread-example-2": "Marquer toutes les notifications comme lues", "apihelp-echomarkread-example-3": "Marquer la notification 1 comme non lue", "apihelp-echomarkseen-description": "Marquer les notifications comme vues pour l’utilisateur actuel.", - "apihelp-echomarkseen-summary": "Marquer les notifications comme vues pour l'utilisateur courant.", + "apihelp-echomarkseen-summary": "Marquer les notifications comme vues pour l’utilisateur courant.", "apihelp-echomarkseen-example-1": "Marquer les notifications de tous types comme vues.", "apihelp-echomarkseen-param-type": "Type de notifications à marquer comme vues : 'alert', 'message' ou 'all'.", "apihelp-echomarkseen-param-timestampFormat": "Format d’horodatage à utiliser pour la sortie, 'ISO_8601' ou 'MW'. 'MW' est ici désuet, donc tous les clients devraient basculer vers 'ISO_8601'. Ce paramètre sera supprimé, et 'ISO_8601' deviendra le seul format de sortie.", + "apihelp-echomute-description": "Faire taire ou non les notifications de certains utilisateurs ou pages.", + "apihelp-echomute-summary": "Faire taire ou non les notifications de certains utilisateurs ou pages.", + "apihelp-echomute-param-type": "Quelle liste de mise en silence à laquelle ajouter ou de laquelle supprimer", + "apihelp-echomute-param-mute": "Pages ou utilisateurs à ajouter à la liste de mise en silence", + "apihelp-echomute-param-unmute": "Pages ou utilisateurs à supprimer de la liste de mise en silence", + "apihelp-echopushsubscriptions-summary": "Garer les abonnements de poussée d’information pour l’utilisateur actuel.", + "apihelp-echopushsubscriptions-param-command": "Action à effectuer.", + "apihelp-echopushsubscriptions+create-summary": "Enregistrer les inscriptions de poussée d’information pour l’utilisateur actuel.", + "apihelp-echopushsubscriptions+create-param-provider": "Le fournisseur de service de poussée pour lequel enregistrer un jeton.", + "apihelp-echopushsubscriptions+create-param-providertoken": "Le jeton à enregistrer.", + "apihelp-echopushsubscriptions+create-example": "Enregistrer une inscription de poussée d’information pour l’utilisateur actuel.", + "apihelp-echopushsubscriptions+delete-summary": "Désinscrire les inscriptions de poussée d’information pour l’utilisateur actuel.", + "apihelp-echopushsubscriptions+delete-param-providertoken": "Le jeton associé avec l’inscription de poussée d’information à désinscrire.", + "apihelp-echopushsubscriptions+delete-example": "Désinscrire une inscription de poussée d’information pour l’utilisateur actuel.", "apihelp-query+notifications-description": "Obtenir les notifications en attente pour l’utilisateur courant.", "apihelp-query+notifications-summary": "Obtenir les notifications en attente pour l’utilisateur actuel.", "apihelp-query+notifications-param-prop": "Détails à demander.", @@ -55,15 +71,17 @@ "apihelp-query+unreadnotificationpages-param-limit": "Nombre maximal de pages à renvoyer.", "apihelp-query+unreadnotificationpages-param-wikis": "Liste des wikis pour télécharger les pages comportant des notifications non lues (par défaut, seulement pour le wiki courant).", "apihelp-query+unreadnotificationpages-example-1": "Liste des pages avec (leur quantité) de notifications non lues", - "apihelp-echoarticlereminder-summary": "Demander un rappel futur concernant l'article spécifié", - "apihelp-echoarticlereminder-param-pageid": "ID de l'article à rappeler à l'utilisateur", - "apihelp-echoarticlereminder-param-title": "Titre de l'article à rappeler à l'utilisateur", - "apihelp-echoarticlereminder-param-timestamp": "A quel moment rappeler l'utilisateur", + "apihelp-echoarticlereminder-summary": "Demander un rappel futur concernant l’article spécifié", + "apihelp-echoarticlereminder-param-pageid": "ID de l’article à rappeler à l’utilisateur", + "apihelp-echoarticlereminder-param-title": "Titre de l’article à rappeler à l’utilisateur", + "apihelp-echoarticlereminder-param-timestamp": "A quel moment rappeler l’utilisateur", "apihelp-echoarticlereminder-param-comment": "Commentaire optionnel utilisateur à inclure lors du rappel", - "apihelp-echoarticlereminder-example-1": "Créer une notification de rappel d'article pour demain avec commentaire", - "apihelp-echoarticlereminder-example-2": "Créer une notification de rappel d'article pour demain sans commentaire", + "apihelp-echoarticlereminder-example-1": "Créer une notification de rappel d’article pour demain avec commentaire", + "apihelp-echoarticlereminder-example-2": "Créer une notification de rappel d’article pour demain sans commentaire", "apiwarn-echo-deprecation-timestampformat": "Le format de sortie utilisant l’horodatage MW est désuet ici. À l’avenir, la norme ISO 8601 sera toujours utilisée pour le format d’horodatage en sortie. Ajustez votre client et mettez <var>timestampFormat</var> à <kbd>ISO_8601</kbd>.", "apiwarn-echo-deprecation-flyout": "<kbd>notformat=flyout</kbd> est devenu désuet et va être supprimé bientôt. Utiliser <kbd>notformat=model</kbd> pour avoir le format brut ou <kbd>notformat=special</kbd> pour le html préformaté.", "apiwarn-echo-deprecation-html": "<kbd>notformat=html</kbd> est désuet et sera bientôt supprimé. Utilisez <kbd>notformat=special</kbd> à la place.", - "apierror-echo-event-creation-failed": "Impossible de créer l'évènement Echo" + "apierror-echo-event-creation-failed": "Impossible de créer l’évènement Echo", + "apierror-echo-push-token-exists": "Le jeton fourni existe déjà dans la base de données.", + "apierror-echo-push-token-not-found": "Le jeton fourni n’a pas été trouvé dans la base de données." } diff --git a/Echo/i18n/api/he.json b/Echo/i18n/api/he.json index 3b28cc78..4f850c12 100644 --- a/Echo/i18n/api/he.json +++ b/Echo/i18n/api/he.json @@ -11,6 +11,7 @@ "apihelp-echomarkread-param-unreadlist": "רשימת מזהי הודעה לסימון כהודעות שלא נקראו.", "apihelp-echomarkread-param-all": "אם זה מוגדר, כל ההודעות של המשתמש תסומנה בתור הודעות שנקראו.", "apihelp-echomarkread-param-sections": "רשימת פסקאות שיש לסמן שהן נקראו.", + "apihelp-echomarkread-param-wikis": "רשימת אתרי ויקי שבהם יסומן שההתראה נקראה (ברירת המחדל היא הוויקי הנוכחי).", "apihelp-echomarkread-example-1": "לסמן שהודעה 8 נקראה", "apihelp-echomarkread-example-2": "לסמן שכל ההתראות נקראו", "apihelp-echomarkread-example-3": "סימון הודעה 1 כהודעה שלא נקראה", @@ -19,6 +20,20 @@ "apihelp-echomarkseen-example-1": "לסמן שהתראות מכל הסוגים נראו", "apihelp-echomarkseen-param-type": "סוג ההודעות לסמן בתור הודעות שנראו: 'alert', 'message' או 'all'.", "apihelp-echomarkseen-param-timestampFormat": "תסדיר חותם־זמן שישמש בפלט, 'ISO_8601' או 'MW'. תסדיר 'MW' מיושן כאן, אז כל הלקוחות אמורים לעבור ל־'ISO_8601'. הפרמטר הזה יוסר ותסדיר הפלט היחיד יהיה 'ISO_8601'.", + "apihelp-echomute-description": "השתקה או הפעלה של התראות ממשתמשים או מדפים מסוימים.", + "apihelp-echomute-summary": "השתקה או הפעלה של התראות ממשתמשים או מדפים מסוימים.", + "apihelp-echomute-param-type": "רשימת השתקה להוסיף אליה או להסיר ממנה", + "apihelp-echomute-param-mute": "דפים או משתמשים להוספה לרשימת ההשתקה", + "apihelp-echomute-param-unmute": "דפים או משתמשים להסרה מרשימת ההשתקה", + "apihelp-echopushsubscriptions-summary": "ניהול מינויי דחיפה עבור המשתמש הנוכחי.", + "apihelp-echopushsubscriptions-param-command": "איזו פעולה לבצע.", + "apihelp-echopushsubscriptions+create-summary": "רישום מינויים בדחיפה עבור המשתמש הנוכחי.", + "apihelp-echopushsubscriptions+create-param-provider": "ספק שירותי הדחיפה שצריך לרשום אסימון עבורו.", + "apihelp-echopushsubscriptions+create-param-providertoken": "האסימון שצריך לרשום.", + "apihelp-echopushsubscriptions+create-example": "רישום מינוי בדחיפה עבור המשתמש הנוכחי.", + "apihelp-echopushsubscriptions+delete-summary": "ביטול רישום מינויים בדחיפה עבור המשתמש הנוכחי.", + "apihelp-echopushsubscriptions+delete-param-providertoken": "האסימון המשויך עם המינוי בדחיפה שצריך לבטל את הרישום שלו.", + "apihelp-echopushsubscriptions+delete-example": "ביטול רישום מינוי בדחיפה עבור המשתמש הנוכחי.", "apihelp-query+notifications-description": "קבלת התראות שממתינות למשתמש הנוכחי.", "apihelp-query+notifications-summary": "קבלת התראות שממתינות למשתמש הנוכחי.", "apihelp-query+notifications-param-prop": "אילו פרטים לבקש.", @@ -31,7 +46,7 @@ "apihelp-query+notifications-paramvalue-format-flyout": "<span class=\"apihelp-deprecated\">מיושן</span>. נא להשתמש ב־<kbd dir=\"ltr\">$1format=model</kbd> לנתונים גולמיים", "apihelp-query+notifications-paramvalue-format-html": "<span class=\"apihelp-deprecated\">מיושן</span>. נא להשתמש ב־<kbd dir=\"ltr\">$1format=model</kbd> לנתונים גולמיים", "apihelp-query+notifications-param-limit": "המספר המרבי של ההודעות להחזיר.", - "apihelp-query+notifications-param-wikis": "רשימת אתרי הוויקי שמהם תאוחזרנה הודעות (בררת המחדל היא אתר הוויקי הנוכחי).", + "apihelp-query+notifications-param-wikis": "רשימת אתרי הוויקי שהודעות תאוחזרנה מהם (ברירת המחדל היא אתר הוויקי הנוכחי).", "apihelp-query+notifications-param-crosswikisummary": "הערך true יפעיל הודעה מסוכמת על הודעות מאתרי ויקי אחרים.", "apihelp-query+notifications-param-alertcontinue": "כשזמינות עוד תוצאות התראה, יש להשתמש בזה כדי להמשיך.", "apihelp-query+notifications-param-unreadfirst": "האם להציג הודעות שלא נקראו קודם (משמש רק אם groupbysection לא הוגדר).", @@ -55,8 +70,10 @@ "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-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> במקומו.", - "apierror-echo-event-creation-failed": "לא ניתן היה ליצור את פעולת ה־Echo" + "apierror-echo-event-creation-failed": "לא ניתן היה ליצור את פעולת ה־Echo", + "apierror-echo-push-token-exists": "האסימון שסופק כבר קיים במסד הנתונים.", + "apierror-echo-push-token-not-found": "האסימון שסופק לא נמצא במסד הנתונים." } diff --git a/Echo/i18n/api/hu.json b/Echo/i18n/api/hu.json index f32d27c9..06b98e8c 100644 --- a/Echo/i18n/api/hu.json +++ b/Echo/i18n/api/hu.json @@ -1,9 +1,9 @@ { "@metadata": { "authors": [ + "Bencemac", "Tacsipacsi", - "Tgr", - "Bencemac" + "Tgr" ] }, "apihelp-echomarkread-description": "Értesítések olvasottnak jelölése az aktuális felhasználó számára.", diff --git a/Echo/i18n/api/id.json b/Echo/i18n/api/id.json index 9fbc6880..524b28a1 100644 --- a/Echo/i18n/api/id.json +++ b/Echo/i18n/api/id.json @@ -1,10 +1,10 @@ { "@metadata": { "authors": [ - "Rachmat.Wahidi", - "William Surya Permana", "Kenrick95", - "Rachmat04" + "Rachmat.Wahidi", + "Rachmat04", + "William Surya Permana" ] }, "apihelp-echomarkread-description": "Tandai pemberitahuan dari pengguna ini sebagai telah dibaca.", diff --git a/Echo/i18n/api/io.json b/Echo/i18n/api/io.json new file mode 100644 index 00000000..e56327c7 --- /dev/null +++ b/Echo/i18n/api/io.json @@ -0,0 +1,8 @@ +{ + "@metadata": { + "authors": [ + "Joao Xavier" + ] + }, + "apihelp-echopushsubscriptions-param-command": "Agado facenda." +} diff --git a/Echo/i18n/api/it.json b/Echo/i18n/api/it.json index fdb9b95f..1af83416 100644 --- a/Echo/i18n/api/it.json +++ b/Echo/i18n/api/it.json @@ -16,6 +16,7 @@ "apihelp-echomarkread-example-2": "Contrassegna tutte le notifiche come lette", "apihelp-echomarkread-example-3": "Contrassegna la notifica 1 come non letta", "apihelp-echomarkseen-description": "Contrassegna le notifiche come viste per l'utente attuale.", + "apihelp-echomarkseen-summary": "Contrassegna le notifiche come viste per l'utente attuale.", "apihelp-echomarkseen-example-1": "Contrassegna le notifiche di tutti i tipi come viste", "apihelp-echomarkseen-param-type": "Tipo di notifiche da contrassegnare come viste: 'alert', 'message' or 'all'.", "apihelp-query+notifications-description": "Ottieni le notifiche in attesa per l'utente attuale.", @@ -43,5 +44,6 @@ "apihelp-query+unreadnotificationpages-summary": "Ottieni le pagine per le quali ci sono notifiche non lette per l'utente attuale.", "apihelp-query+unreadnotificationpages-param-limit": "Il numero massimo di pagine da restituire.", "apihelp-query+unreadnotificationpages-param-wikis": "Elenco di wiki da cui recuperare le pagine con notifiche non lette (predefinito solo il wiki attuale).", - "apihelp-query+unreadnotificationpages-example-1": "Elenca le pagine con (il loro numero di) notifiche non lette" + "apihelp-query+unreadnotificationpages-example-1": "Elenca le pagine con (il loro numero di) notifiche non lette", + "apierror-echo-event-creation-failed": "Impossibile creare evento Echo" } diff --git a/Echo/i18n/api/ja.json b/Echo/i18n/api/ja.json index 2312e93c..503a4c82 100644 --- a/Echo/i18n/api/ja.json +++ b/Echo/i18n/api/ja.json @@ -2,6 +2,7 @@ "@metadata": { "authors": [ "2nd-player", + "Ochaochaocha3", "Otokoume" ] }, @@ -13,6 +14,7 @@ "apihelp-echomarkread-example-1": "通知 8 を既読にする", "apihelp-echomarkread-example-2": "すべての通知を既読にする", "apihelp-echomarkread-example-3": "通知 1 を未読にする", + "apihelp-echomarkseen-param-type": "既読としてマークする通知の種類:'alert'、'message'、あるいは 'all'。", "apihelp-query+notifications-param-limit": "返す通知の最大数。", "apihelp-query+notifications-example-1": "通知を一覧表示する", "apihelp-query+notifications-example-2": "通知をセクションによりグループ化し、カウントで一覧表示する", diff --git a/Echo/i18n/api/kab.json b/Echo/i18n/api/kab.json new file mode 100644 index 00000000..f872b213 --- /dev/null +++ b/Echo/i18n/api/kab.json @@ -0,0 +1,9 @@ +{ + "@metadata": { + "authors": [ + "YouvaDjouadi" + ] + }, + "apihelp-echomute-description": "Sgugem neɣ kkes asgugem n telɣutin i d-yettekken seg kra n yimseqdac neɣ n yisebtar.", + "apihelp-echomute-summary": "Sgugem neɣ kkes asgugem n telɣutin i d-yettekken seg kra n yimseqdac neɣ n yisebtar." +} diff --git a/Echo/i18n/api/ko.json b/Echo/i18n/api/ko.json index 05afd8fc..7af88789 100644 --- a/Echo/i18n/api/ko.json +++ b/Echo/i18n/api/ko.json @@ -1,6 +1,7 @@ { "@metadata": { "authors": [ + "Ellif", "Hwangjy9", "Priviet", "Revi", @@ -22,6 +23,8 @@ "apihelp-echomarkseen-example-1": "모든 종류의 알림을 본 것으로 표시.", "apihelp-echomarkseen-param-type": "읽은 것으로 표시할 알림의 종류: 'alert', 'message' 또는 'all'.", "apihelp-echomarkseen-param-timestampFormat": "출력을 위해 사용할 타임스탬프 포맷 'ISO_8601' 또는 'MW'입니다. 'MW'는 구식이므로 모든 클라이언트는 'ISO_8601'로 전환하는 것이 좋습니다. 이 변수는 제거될 것이며 'ISO_8601'이 유일한 출력 포맷이 될 것입니다.", + "apihelp-echomute-description": "특정 사용자나 문서로부터 오는 알림을 끄거나 다시 켭니다.", + "apihelp-echomute-summary": "특정 사용자나 문서로부터 오는 알림을 끄거나 다시 켭니다.", "apihelp-query+notifications-description": "현재 사용자를 기다리고 있는 알림을 얻어옵니다.", "apihelp-query+notifications-summary": "현재 사용자를 기다리고 있는 알림을 가져옵니다.", "apihelp-query+notifications-param-prop": "상세한 요청 내용.", @@ -32,6 +35,7 @@ "apihelp-query+notifications-param-titles": "이 문서들의 알림만 반환합니다. 어떠한 문서에도 속하지 않은 알림을 받으려면 제목으로 []를 사용하세요.", "apihelp-query+notifications-param-bundle": "규칙을 묶는 알림 유형에 따라 묶음과 호환되는 읽지 않은 알림을 보여줄지의 여부.", "apihelp-query+notifications-example-1": "알림 리스트", + "apihelp-query+unreadnotificationpages-param-limit": "반환할 문서의 최대 수입니다.", "apihelp-query+unreadnotificationpages-param-wikis": "읽지 않은 알림 문서를 가져올 위키 목록입니다. (기본값으로는 현재 위키만)", "apierror-echo-event-creation-failed": "Echo 이벤트를 만들 수 없습니다" } diff --git a/Echo/i18n/api/lb.json b/Echo/i18n/api/lb.json index 26fb74cf..16719b1c 100644 --- a/Echo/i18n/api/lb.json +++ b/Echo/i18n/api/lb.json @@ -1,8 +1,8 @@ { "@metadata": { "authors": [ - "Robby", - "Les Meloures" + "Les Meloures", + "Robby" ] }, "apihelp-echomarkread-param-sections": "Eng Lëscht vun den Abschnitter déi als gelies markéiert solle ginn.", diff --git a/Echo/i18n/api/lv.json b/Echo/i18n/api/lv.json index 403ee453..c8b1ecc2 100644 --- a/Echo/i18n/api/lv.json +++ b/Echo/i18n/api/lv.json @@ -8,8 +8,10 @@ "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+notifications-param-alertcontinue": "Ja pieejami vēl paziņojumu rezultāti, izmanto šo, lai turpinā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", + "apihelp-echoarticlereminder-param-comment": "Neobligāts lietotāja komentārs, ko iekļaut atgādinājumā", "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 b60b2e70..9ef0b2c8 100644 --- a/Echo/i18n/api/mk.json +++ b/Echo/i18n/api/mk.json @@ -10,6 +10,7 @@ "apihelp-echomarkread-param-unreadlist": "Список на назнаки на известувањата што треба да се означат како непрочитани.", "apihelp-echomarkread-param-all": "Ако е зададено, ги означува сите известувања на еден корисник како прочитани.", "apihelp-echomarkread-param-sections": "Список на поднаслови што треба да се означат како прочитани.", + "apihelp-echomarkread-param-wikis": "Список на викија чии известувања треба да се означат како причитани (по основно: само тековното вики).", "apihelp-echomarkread-example-1": "Означи го известувањето 8 како прочитано", "apihelp-echomarkread-example-2": "Означиу ги сите известувања како прочитани", "apihelp-echomarkread-example-3": "Означи го известувањето 1 како прочитано", @@ -18,6 +19,20 @@ "apihelp-echomarkseen-example-1": "Означи ги известувањања од сите видови како прочитани", "apihelp-echomarkseen-param-type": "Видови известувања што треба да се означат како видени: „alert“, „message“ или „all“.", "apihelp-echomarkseen-param-timestampFormat": "Формат за датум и време во изводот, „ISO_8601“ или „MW“. Тука „MW“ е застарен, па така сите клиенти треба да се префрлат на „ISO_8601“. Овој параметар ќе биде отстранет, а „ISO_8601“ ќе стане единствениот формат на изводот.", + "apihelp-echomute-description": "Занемување или однемување на известувања од извесни корисници или страници.", + "apihelp-echomute-summary": "Занемување или однемување на известувања од извесни корисници или страници.", + "apihelp-echomute-param-type": "Во кој список на занемени да се стави или отстрани", + "apihelp-echomute-param-mute": "Страници или корисници за ставање на списокот на занемени", + "apihelp-echomute-param-unmute": "Страници или корисници за отстранување од списокот на занемени", + "apihelp-echopushsubscriptions-summary": "Раководење со претплати на наметнувања за тековниот корисник.", + "apihelp-echopushsubscriptions-param-command": "Дејство за вршење.", + "apihelp-echopushsubscriptions+create-summary": "Пријави претплати на наметнувања за тековниот корисник.", + "apihelp-echopushsubscriptions+create-param-provider": "Наметнувачкиот услужник за кој се пријавува шифра.", + "apihelp-echopushsubscriptions+create-param-providertoken": "Шифрата која се пријавува.", + "apihelp-echopushsubscriptions+create-example": "Пријави претплата на наметнувања за тековниот корисник.", + "apihelp-echopushsubscriptions+delete-summary": "Отпријави претплати на наметнувања за тековниот корисник.", + "apihelp-echopushsubscriptions+delete-param-providertoken": "Шифрата поврзана со претплатеното наметнување кое треба да се отстрани од пријавени.", + "apihelp-echopushsubscriptions+delete-example": "Отпријави претплата на наметнувања за тековниот корисинк.", "apihelp-query+notifications-description": "Дај ги известувањата што го исчекуваат тековниот корисник.", "apihelp-query+notifications-summary": "Дај ги известувањата што го исчекуваат тековниот корисник.", "apihelp-query+notifications-param-prop": "Подробности што треба да се побараат.", @@ -57,5 +72,7 @@ "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": "Не можев да направам настан за Ехо" + "apierror-echo-event-creation-failed": "Не можев да направам настан за Ехо", + "apierror-echo-push-token-exists": "Укажаната шифра веќе постои во базата.", + "apierror-echo-push-token-not-found": "Укажаната шифра не е пронајдена во базата." } diff --git a/Echo/i18n/api/ml.json b/Echo/i18n/api/ml.json index 2b36af2b..d0271b72 100644 --- a/Echo/i18n/api/ml.json +++ b/Echo/i18n/api/ml.json @@ -5,6 +5,7 @@ ] }, "apihelp-echomarkread-description": "ഇപ്പോഴത്തെ ഉപയോക്താവിന്റെ അറിയിപ്പുകൾ വായിച്ചതായി അടയാളപ്പെടുത്തുക.", + "apihelp-echomarkread-summary": "ഇപ്പോഴത്തെ ഉപയോക്താവിന്റെ അറിയിപ്പുകൾ വായിച്ചതായി അടയാളപ്പെടുത്തുക.", "apihelp-echomarkread-param-list": "വായിച്ചതായി അടയാളപ്പെടുത്തേണ്ട അറിയിപ്പ് ഐ.ഡി.കളുടെ പട്ടിക.", "apihelp-echomarkread-param-all": "സജ്ജമെങ്കിൽ ഉപയോക്താവിനുള്ള അറിയിപ്പുകളെല്ലാം വായിച്ചതായി അടയാളപ്പെടുത്തുക.", "apihelp-echomarkread-param-sections": "വായിച്ചതായി അടയാളപ്പെടുത്തേണ്ട ഭാഗങ്ങളുടെ പട്ടിക.", diff --git a/Echo/i18n/api/nap.json b/Echo/i18n/api/nap.json index 1b748e32..4108ab55 100644 --- a/Echo/i18n/api/nap.json +++ b/Echo/i18n/api/nap.json @@ -5,16 +5,16 @@ "Ruthven" ] }, - "apihelp-echomarkread-description": "Nzegna tutt' 'e notifiche comm'a fossero liggiute 'a ll'utente.", + "apihelp-echomarkread-description": "Nzegna tutt' 'e mmasciate comm'a leggiute pe ll'utente.", "apihelp-echomarkread-param-list": "N'elenco 'e ll'ID notifiche 'a nzegnare comme fossero lette.", "apihelp-echomarkread-param-unreadlist": "N'elenco 'e ll'ID notifiche 'a nzegnare comme nun fossero lette.", "apihelp-echomarkread-param-all": "Si mpustato, contrassegna tutte 'e notifiche 'e ll'utente comme fossero lette.", - "apihelp-echomarkread-param-sections": "N'elenco d' 'e sezine ca s'avesser'a nzegnà comme liggiute.", - "apihelp-echomarkread-example-1": "Nzegna 'a notifica 8 comme liggiuta", - "apihelp-echomarkread-example-2": "Nzegna tutt' 'e notifiche comme fossero liggiute", - "apihelp-echomarkread-example-3": "Nzegna 'a notifica 1 comme nun liggiuta", - "apihelp-echomarkseen-description": "Nzegna 'e notifiche comme fossero liggiute 'a ll'utente 'e mo'.", - "apihelp-echomarkseen-example-1": "Nzegna tutte 'e notifiche comme liggiute", + "apihelp-echomarkread-param-sections": "N'elenco d' 'e sseziune ca s'avesser' 'a nzegnà comme leggiute.", + "apihelp-echomarkread-example-1": "Nzegna 'a notifica 8 comme leggiuta", + "apihelp-echomarkread-example-2": "Nzegna tutt' 'e mmasciate comme fussero leggiute", + "apihelp-echomarkread-example-3": "Nzegna 'a notifica 1 comme nun leggiuta", + "apihelp-echomarkseen-description": "Nzegna 'e mmasciate comme fussero leggiute pe ll'utente.", + "apihelp-echomarkseen-example-1": "Nzegna tutte 'e mmasciate comme leggiute", "apihelp-echomarkseen-param-type": "Tipo 'e notifica pe' nzegnà visto comme: 'allerta', 'mmasciata' o 'tutto'.", "apihelp-query+notifications-description": "Piglia 'e notifiche ca stesser'aspettann'a ll'utente.", "apihelp-query+notifications-param-prop": "Dettaglie d' 'a richiesta.", @@ -30,8 +30,8 @@ "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).", - "apihelp-query+notifications-param-alertunreadfirst": "Si s'avess'a mmusta na mmasciata nun liggiuta 'e notifiche apprimma (ausato surtanto si groupbysection fosse mpustato).", + "apihelp-query+notifications-param-unreadfirst": "Si vulite fà vedé pe primma 'e mmasciate nun leggiute (ausato sulamente si groupbysection nun sta mpustato).", + "apihelp-query+notifications-param-alertunreadfirst": "Si s'ha dda mustrà na notifica 'e mmasciata nun leggiuta pprimma (ausato sulamente si groupbysection sta mpustato).", "apihelp-query+notifications-param-messagecontinue": "Quanno cchiù mmasciate sarranno a disposiziona, ausa chesto pe' cuntinuà.", "apihelp-query+notifications-param-messageunreadfirst": "Si vulite mmustà notifiche senza lieggere primma (ausato surtanto si groupbysection fosse mpustato).", "apihelp-query+notifications-param-titles": "Turnasse surtanto 'e notifiche pe' sti ppaggene. Pe' se puté piglià notifiche nun azzeccate a na paggena, ausate [] comme fosse 'o titolo.", @@ -40,6 +40,6 @@ "apihelp-query+unreadnotificationpages-description": "Piglià paggene p' 'e quale ce stanno notifiche ca nun fossero ancora ligiute 'a ll'utente 'e mò.", "apihelp-query+unreadnotificationpages-param-grouppages": "Paggene 'e chiacchiera 'e gruppo nziem'a ll'argomento suo, e notifiche 'e gruppo nun suòcie a na paggena nziem'a na paggena utente.", "apihelp-query+unreadnotificationpages-param-limit": "'O nummero massimo 'e paggene ca s'avess'a turnà.", - "apihelp-query+unreadnotificationpages-param-wikis": "Elenco 'e wiki addò se piglià paggene ch' 'e notifiche nun liggiute (predefinite surtanto a 'o wiki 'e mò).", + "apihelp-query+unreadnotificationpages-param-wikis": "Elenco 'e wiki addò se ponno piglià paggene ch' 'e mmasciate nun liggiute (predefinite p' 'o wiki 'e mo sulamente).", "apihelp-query+unreadnotificationpages-example-1": "Elenco 'e paggene cu ('o cunto 'e) notifche senza lieggere" } diff --git a/Echo/i18n/api/nb.json b/Echo/i18n/api/nb.json index 78cde5bd..f8899769 100644 --- a/Echo/i18n/api/nb.json +++ b/Echo/i18n/api/nb.json @@ -12,6 +12,7 @@ "apihelp-echomarkread-param-unreadlist": "En liste av beskjed-IDer som merkes som ulest.", "apihelp-echomarkread-param-all": "Merk alle brukerens beskjeder som lest.", "apihelp-echomarkread-param-sections": "En liste over seksjoner som skal markeres som leste.", + "apihelp-echomarkread-param-wikis": "Liste over wikier der varsel skal merkes som lest (standard er kun den gjeldende wikien).", "apihelp-echomarkread-example-1": "Merk beskjed 8 som lest", "apihelp-echomarkread-example-2": "Merk alle beskjeder som leste", "apihelp-echomarkread-example-3": "Merk beskjed 1 som ulest", diff --git a/Echo/i18n/api/ne.json b/Echo/i18n/api/ne.json index ce0678e9..c246a466 100644 --- a/Echo/i18n/api/ne.json +++ b/Echo/i18n/api/ne.json @@ -1,8 +1,10 @@ { "@metadata": { "authors": [ - "Nirjal stha" + "Nirjal stha", + "हिमाल सुबेदी" ] }, + "apihelp-echomarkread-example-2": "सबै जानकारीहरूलाई पढिएकाे रूपमा चिनाे लगाउनुहाेस्", "apihelp-echomarkseen-example-1": "सूचनालाई हेरेको भनि चिन्ह लगाउने" } diff --git a/Echo/i18n/api/nl.json b/Echo/i18n/api/nl.json index 0b02161b..fecb2c04 100644 --- a/Echo/i18n/api/nl.json +++ b/Echo/i18n/api/nl.json @@ -2,11 +2,11 @@ "@metadata": { "authors": [ "Catrope", + "Mainframe98", "MrLeopold", "Romaine", "Siebrand", - "Sjoerddebruin", - "Mainframe98" + "Sjoerddebruin" ] }, "apihelp-echomarkread-description": "Meldingen van de huidige gebruiker markeren als gelezen.", @@ -15,6 +15,7 @@ "apihelp-echomarkread-param-unreadlist": "Lijst van meldings-ID's om die als ongelezen gemarkeerd moeten worden.", "apihelp-echomarkread-param-all": "Indien ingesteld, worden alle meldingen van de gebruiker gemarkeerd als gelezen.", "apihelp-echomarkread-param-sections": "Een lijst van secties om te markeren als gelezen.", + "apihelp-echomarkread-param-wikis": "Lijst van wiki's om meldingen als gelezen te markeren (standaard alleen de huidige wiki).", "apihelp-echomarkread-example-1": "Melding 8 als gelezen markeren", "apihelp-echomarkread-example-2": "Alle meldingen als gelezen markeren", "apihelp-echomarkread-example-3": "Markeer melding 1 als ongelezen.", diff --git a/Echo/i18n/api/pl.json b/Echo/i18n/api/pl.json index 6d9bce76..3e34d358 100644 --- a/Echo/i18n/api/pl.json +++ b/Echo/i18n/api/pl.json @@ -2,6 +2,8 @@ "@metadata": { "authors": [ "Chrumps", + "Rail", + "Railfail536", "Woytecr" ] }, @@ -15,9 +17,11 @@ "apihelp-echomarkread-example-2": "Oznacz wszystkie powiadomienia jako przeczytane", "apihelp-echomarkread-example-3": "Oznacz powiadomienie 1 jako nieprzeczytane", "apihelp-echomarkseen-description": "Oznacz powiadomienia jako przeczytane dla bieżącego użytkownika.", + "apihelp-echomarkseen-summary": "Oznacz powiadomienia jako przeczytane dla bieżącego użytkownika.", "apihelp-echomarkseen-example-1": "Oznacz powiadomienia wszystkich typów jako przeczytane", "apihelp-echomarkseen-param-type": "Typ powiadomień do oznaczenia jako przeczytane: 'alert', 'message' lub 'all'.", "apihelp-query+notifications-description": "Pobierz powiadomienia oczekujące dla bieżącego użytkownika.", + "apihelp-query+notifications-summary": "Pobierz powiadomienia oczekujące dla bieżącego użytkownika.", "apihelp-query+notifications-param-prop": "Szczegóły żądania.", "apihelp-query+notifications-param-sections": "Sekcje powiadomień, o które zapytać (tj. jakieś połączenie 'alert' i 'message').", "apihelp-query+notifications-param-groupbysection": "Czy grupować wynik według sekcji. Każda sekcja jest pobierana osobno jeśli ustawiono.", @@ -31,5 +35,6 @@ "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." + "apihelp-query+unreadnotificationpages-param-limit": "Maksymalna liczba zwracanych stron.", + "apierror-echo-event-creation-failed": "Nie można utworzyć wydarzenia Echo" } diff --git a/Echo/i18n/api/pt-br.json b/Echo/i18n/api/pt-br.json index 11ed245b..222e2b9b 100644 --- a/Echo/i18n/api/pt-br.json +++ b/Echo/i18n/api/pt-br.json @@ -1,8 +1,9 @@ { "@metadata": { "authors": [ - "TheEduGobi", - "Felipe L. Ewald" + "Eduardo Addad de Oliveira", + "Felipe L. Ewald", + "TheEduGobi" ] }, "apihelp-echomarkread-description": "Marcar notificações como lidas para o usuário atual.", @@ -11,6 +12,7 @@ "apihelp-echomarkread-param-unreadlist": "Uma lista de IDs de notificação para marcar como não lido.", "apihelp-echomarkread-param-all": "Se habilitado, marca todas as notificações de um usuário como lidas.", "apihelp-echomarkread-param-sections": "Uma lista de seções para marcar como lidas.", + "apihelp-echomarkread-param-wikis": "Lista de wikis para marcar a notificação como lida (o padrão é apenas a wiki atual).", "apihelp-echomarkread-example-1": "Marcar a notificação 8 como lida", "apihelp-echomarkread-example-2": "Marcar todas as notificações como lidas", "apihelp-echomarkread-example-3": "Marcar a notificação 1 como não lida", @@ -19,6 +21,20 @@ "apihelp-echomarkseen-example-1": "Marcar notificações de todos os tipos como vistas", "apihelp-echomarkseen-param-type": "Tipo de notificações para marcar como vistas: 'alerta', 'mensagem' ou 'tudo'.", "apihelp-echomarkseen-param-timestampFormat": "Formato do carimbo de data/hora para usar para saída, 'ISO_8601' ou 'MW'. 'MW' está obsoleto aqui, então todos os clientes devem mudar para 'ISO_8601'. Este parâmetro será removido e 'ISO_8601' se tornará o único formato de saída.", + "apihelp-echomute-description": "Desativar ou desativar o som das notificações de determinados usuários ou páginas.", + "apihelp-echomute-summary": "Desativar ou desativar o som das notificações de determinados usuários ou páginas.", + "apihelp-echomute-param-type": "Qual lista muda para adicionar ou remover de", + "apihelp-echomute-param-mute": "Páginas ou usuários a serem adicionados à lista silenciosa", + "apihelp-echomute-param-unmute": "Páginas ou usuários a serem removidos da lista sem áudio", + "apihelp-echopushsubscriptions-summary": "Gerenciar assinaturas push para o usuário atual.", + "apihelp-echopushsubscriptions-param-command": "Ação a realizar.", + "apihelp-echopushsubscriptions+create-summary": "Registre assinaturas push para o usuário atual.", + "apihelp-echopushsubscriptions+create-param-provider": "O provedor de serviços push para o qual registrar um token.", + "apihelp-echopushsubscriptions+create-param-providertoken": "O token para registrar.", + "apihelp-echopushsubscriptions+create-example": "Registre uma assinatura push para o usuário atual.", + "apihelp-echopushsubscriptions+delete-summary": "Cancele o registro de assinaturas push para o usuário atual.", + "apihelp-echopushsubscriptions+delete-param-providertoken": "O token associado à assinatura push para cancelar o registro.", + "apihelp-echopushsubscriptions+delete-example": "Cancele o registro de uma assinatura push para o usuário atual.", "apihelp-query+notifications-description": "Receber notificações aguardando pelo usuário atual.", "apihelp-query+notifications-summary": "Receber notificações aguardando pelo usuário atual.", "apihelp-query+notifications-param-prop": "Detalhes para solicitar.", @@ -58,5 +74,7 @@ "apiwarn-echo-deprecation-timestampformat": "O formato de saída do timestamp do MW está obsoleto aqui. No futuro, o ISO 8601 sempre será usado para o formato do timestamp de saída. Ajuste seu cliente e defina <var>timestampFormat</var> para <kbd>ISO_8601</kbd>.", "apiwarn-echo-deprecation-flyout": "<kbd>notformat=flyout</kbd> foi depreciado e será removido em breve. Use <kbd>notformat=model</kbd> para obter os dados brutos ou <kbd>notformat=special</kbd> para o HTML pré-renderizado.", "apiwarn-echo-deprecation-html": "<kbd>notformat=html</kbd> foi depreciado e será removido em breve. Use <kbd>notformat=special</kbd> em vez disso.", - "apierror-echo-event-creation-failed": "Não foi possível criar evento Echo" + "apierror-echo-event-creation-failed": "Não foi possível criar evento Echo", + "apierror-echo-push-token-exists": "O token fornecido já existe no banco de dados.", + "apierror-echo-push-token-not-found": "O token fornecido não foi encontrado no banco de dados." } diff --git a/Echo/i18n/api/pt.json b/Echo/i18n/api/pt.json index 62d9b279..3299eac1 100644 --- a/Echo/i18n/api/pt.json +++ b/Echo/i18n/api/pt.json @@ -13,6 +13,7 @@ "apihelp-echomarkread-param-unreadlist": "Uma lista de identificadores de notificações a marcar como não lidas.", "apihelp-echomarkread-param-all": "Se definido, marca todas as notificações de um utilizador como lidas.", "apihelp-echomarkread-param-sections": "Uma lista de secções a marcar como lidas.", + "apihelp-echomarkread-param-wikis": "Lista das wikis nas quais marcar a notificação como lida (por omissão, só na wiki atual).", "apihelp-echomarkread-example-1": "Marcar a notificação 8 como lida", "apihelp-echomarkread-example-2": "Marcar todas as notificações como lidas", "apihelp-echomarkread-example-3": "Marcar a notificação 1 como não lida", diff --git a/Echo/i18n/api/qqq.json b/Echo/i18n/api/qqq.json index aaff6686..73507836 100644 --- a/Echo/i18n/api/qqq.json +++ b/Echo/i18n/api/qqq.json @@ -2,13 +2,13 @@ "@metadata": { "authors": [ "Brad Jorsch", + "Liuxinyu970226", "Matthew Flaschen", "Matthias Mullie", "Moriel Schottlender", "Roan Kattouw", "Stephane Bisson", - "Umherirrender", - "Liuxinyu970226" + "Umherirrender" ] }, "apihelp-echomarkread-description": "{{doc-apihelp-description|echomarkread}}", @@ -17,6 +17,7 @@ "apihelp-echomarkread-param-unreadlist": "{{doc-apihelp-param|echomarkread|unreadlist}}", "apihelp-echomarkread-param-all": "{{doc-apihelp-param|echomarkread|all}}", "apihelp-echomarkread-param-sections": "{{doc-apihelp-param|echomarkread|sections}}", + "apihelp-echomarkread-param-wikis": "{{doc-apihelp-param|echomarkread|wikis}}", "apihelp-echomarkread-example-1": "{{doc-apihelp-example|echomarkread}}", "apihelp-echomarkread-example-2": "{{doc-apihelp-example|echomarkread}}", "apihelp-echomarkread-example-3": "{{doc-apihelp-example|echomarkread}}", @@ -25,6 +26,20 @@ "apihelp-echomarkseen-example-1": "{{doc-apihelp-example|echomarkseen}}", "apihelp-echomarkseen-param-type": "{{doc-apihelp-param|echomarkseen|type}}", "apihelp-echomarkseen-param-timestampFormat": "{{doc-apihelp-param|echomarkseen|timestampFormat}}", + "apihelp-echomute-description": "{{doc-apihelp-description|echomute}}", + "apihelp-echomute-summary": "{{doc-apihelp-summary|echomute}}", + "apihelp-echomute-param-type": "{{doc-apihelp-param|echomute|type}}", + "apihelp-echomute-param-mute": "{{doc-apihelp-param|echomute|mute}}", + "apihelp-echomute-param-unmute": "{{doc-apihelp-param|echomute|unmute}}", + "apihelp-echopushsubscriptions-summary": "{{doc-apihelp-summary|echopushsubscriptions}}", + "apihelp-echopushsubscriptions-param-command": "{{doc-apihelp-param|echopushsubscriptions|command}}", + "apihelp-echopushsubscriptions+create-summary": "{{doc-apihelp-summary|echopushsubscriptions+create}}", + "apihelp-echopushsubscriptions+create-param-provider": "{{doc-apihelp-param|echopushsubscriptions+create|provider}}", + "apihelp-echopushsubscriptions+create-param-providertoken": "{{doc-apihelp-param|echopushsubscriptions+create|providertoken}}", + "apihelp-echopushsubscriptions+create-example": "{{doc-apihelp-example|echopushsubscriptions+create}}", + "apihelp-echopushsubscriptions+delete-summary": "{{doc-apihelp-summary|echopushsubscriptions+delete}}", + "apihelp-echopushsubscriptions+delete-param-providertoken": "{{doc-apihelp-param|echopushsubscriptions+delete|providertoken}}", + "apihelp-echopushsubscriptions+delete-example": "{{doc-apihelp-example|echopushsubscriptions+delete}}", "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}}", @@ -64,5 +79,7 @@ "apiwarn-echo-deprecation-timestampformat": "{{doc-apierror}}", "apiwarn-echo-deprecation-flyout": "{{doc-apierror}}", "apiwarn-echo-deprecation-html": "{{doc-apierror}}", - "apierror-echo-event-creation-failed": "{{doc-apierror}}" + "apierror-echo-event-creation-failed": "{{doc-apierror}}", + "apierror-echo-push-token-exists": "{{doc-apierror}}", + "apierror-echo-push-token-not-found": "{{doc-apierror}}" } diff --git a/Echo/i18n/api/roa-tara.json b/Echo/i18n/api/roa-tara.json index 0ad96c3e..c8610ad2 100644 --- a/Echo/i18n/api/roa-tara.json +++ b/Echo/i18n/api/roa-tara.json @@ -10,11 +10,53 @@ "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-param-wikis": "Elenghe de le uicchi da addò signà le notifeche cumme lette (predefinite sulamende 'a uicchi de mò).", "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" + "apihelp-echomarkseen-param-type": "Tipe de notifeche da signà cumme 'ndrucate: 'alert', 'message' o 'all'.", + "apihelp-echomarkseen-param-timestampFormat": "'U formate de l'orarie de stambe ausate pe l'immissione, 'ISO_8601' o 'MW'. 'MW' jè sconzigliate aqquà, accussì tutte le client ponne passà a 'ISO_8601'. Stu parametre avène luate, e 'ISO_8601' addevende luneche formate d'u resultate.", + "apihelp-query+notifications-description": "Pigghie tutte le notifeche in attese pe l'utende de mò.", + "apihelp-query+notifications-summary": "Pigghie tutte le notifeche in attese pe l'utende de mò.", + "apihelp-query+notifications-param-prop": "Dettaglie da cercà.", + "apihelp-query+notifications-param-sections": "Le seziune de le notifeche da 'nderrogà (pe esembie, 'na combinazione de 'alert' e 'message').", + "apihelp-query+notifications-param-groupbysection": "Ce a raggruppà le resultate pe sezione. Ogne sezione avène recuperate separatamende ce 'mbostate.", + "apihelp-query+notifications-param-filter": "Filtre le notifeche turnate.", + "apihelp-query+notifications-param-format": "Ce specificate, le notifeche avènene turnate formattate jndr'à stu mode.", + "apihelp-query+notifications-paramvalue-format-model": "Date grezze de notifeche", + "apihelp-query+notifications-paramvalue-format-special": "Formattate pa pàgene Special:notifications (e sule quedde!). No fà affidamende sus a l'HTML date ca pò cangià jndr'à qualungue mumende.", + "apihelp-query+notifications-paramvalue-format-flyout": "<span class=\"apihelp-deprecated\">Sconzigliate</span>. Ause <kbd>$1format=model</kbd> pe le date grezze", + "apihelp-query+notifications-paramvalue-format-html": "<span class=\"apihelp-deprecated\">Sconzigliate</span>. Ause <kbd>$1format=model</kbd> pe le date grezze", + "apihelp-query+notifications-param-limit": "'U numere massime de notifeche da turnà.", + "apihelp-query+notifications-param-wikis": "Elenghe de le uicchi da addò recuperà le notifeche (predefinite sulamende 'a uicchi de mò).", + "apihelp-query+notifications-param-crosswikisummary": "Vere pe scacchià 'na notifeche sommarie de notifeche sus a le uicchi furastire.", + "apihelp-query+notifications-param-alertcontinue": "Quanne cchiù resultate avvise sò disponibbele, ause quiste pe condinuà", + "apihelp-query+notifications-param-unreadfirst": "Ce a fà 'ndrucà le notifeche non lette apprime (ausate sulamende ce groupbysection non g'è 'mbostate).", + "apihelp-query+notifications-param-alertunreadfirst": "Ce fà 'ndrucà le notifeche de le messàgge non lette apprime (ausate sulamende ce groupbysection non g'è 'mbostate).", + "apihelp-query+notifications-param-messagecontinue": "Quanne cchiù resultate avvise sò disponibbele, ause quiste pe condinuà.", + "apihelp-query+notifications-param-messageunreadfirst": "Ce a fà 'ndrucà le notifeche de le avvise non lette apprime (ausate sulamende ce groupbysection non g'è 'mbostate).", + "apihelp-query+notifications-param-titles": "Torne sulamende le notifeche pe ste pàggene. Pe avè le notifeche non associate a nisciuna pàgene, ause [] cumme titole.", + "apihelp-query+notifications-param-bundle": "Ce a fà 'ndrucà le notifeche non lette combatibbele cu 'u pacchette in base a le regole de raggruppamende de le tipe de notifeche.", + "apihelp-query+notifications-example-1": "Elenghe de le notifiche", + "apihelp-query+notifications-example-2": "Elenghe le notifeche, raggruppate pe sezione, cu le condegge", + "apihelp-query+unreadnotificationpages-description": "Pigghie le pàggene pe le quale stonne notifeche non lette pe l'utende de mò.", + "apihelp-query+unreadnotificationpages-summary": "Pigghie le pàggene pe le quale stonne notifeche non lette pe l'utende de mò.", + "apihelp-query+unreadnotificationpages-param-grouppages": "Raggruppe le pàggene de le 'ngazzaminde 'nzieme cu le lore sottopàggene, e raggruppe le notifeche none associate cu 'na pàgene 'nzieme cu 'a pàgene utende de l'utende de mò.", + "apihelp-query+unreadnotificationpages-param-limit": "'U massime numere de pàggene da turnà.", + "apihelp-query+unreadnotificationpages-param-wikis": "Elenghe de le uicchi da addò recuperà le pàggene cu notifeche non lette (predefinite sulamende 'a uicchi de mò).", + "apihelp-query+unreadnotificationpages-example-1": "Elenghe le pàggene cu ('u numere lore de) notifeche non lette", + "apihelp-echoarticlereminder-summary": "Cirche 'nu promemorie future sus a 'na vôsce specificate", + "apihelp-echoarticlereminder-param-pageid": "ID d'a vôsce da arrecurdà a l'utende", + "apihelp-echoarticlereminder-param-title": "Titole d'a vôsce da arrecurdà a l'utende", + "apihelp-echoarticlereminder-param-timestamp": "Jndr'à ce ore a arrecurdà l'utende", + "apihelp-echoarticlereminder-param-comment": "Commende utende facoltative da 'ngludere jndr'à 'u promemorie", + "apihelp-echoarticlereminder-example-1": "Ccreje 'nu promemorie d'a vôsce pe ccreje cu 'u commende", + "apihelp-echoarticlereminder-example-2": "Ccreje 'nu promemorie d'a vôsce pe ccreje senze 'nu commende", + "apiwarn-echo-deprecation-timestampformat": "'U formate d'u resultate de l'orarie MW jè sconzigliate aqquà. Jndr'à 'u future, ISO 8601 avène ausate cumme formate d'u resultate. Regole 'u client tune e 'mboste <var>timestampFormat</var> a <kbd>ISO_8601</kbd>.", + "apiwarn-echo-deprecation-flyout": "<kbd>notformat=flyout</kbd> ha state sconzigliate e adda essere luate preste. Ause <kbd>notformat=model</kbd> pe pigghià le date grezze o <kbd>notformat=special</kbd> pe l'HTML pre renderizzate.", + "apiwarn-echo-deprecation-html": "<kbd>notformat=html</kbd> ha state sconzigliate e adda essere luate preste. Invece ause <kbd>notformat=special</kbd>.", + "apierror-echo-event-creation-failed": "Non ge pozze ccrejà l'avvenimende Echo" } diff --git a/Echo/i18n/api/ru.json b/Echo/i18n/api/ru.json index cf5c1fb2..12107b7a 100644 --- a/Echo/i18n/api/ru.json +++ b/Echo/i18n/api/ru.json @@ -1,12 +1,13 @@ { "@metadata": { "authors": [ + "Diralik", "Mailman", "Marina Melik-Adamyan", + "Mouse21", "Okras", "Putnik", - "Sunpriat", - "Mouse21" + "Sunpriat" ] }, "apihelp-echomarkread-description": "Отметить уведомления как прочитанные для текущего пользователя.", @@ -15,6 +16,7 @@ "apihelp-echomarkread-param-unreadlist": "Список ID уведомлений для отметки непрочитанными.", "apihelp-echomarkread-param-all": "Если задано, отметает все уведомления пользователя как прочитанные.", "apihelp-echomarkread-param-sections": "Список разделов для пометки как прочитанных.", + "apihelp-echomarkread-param-wikis": "Список вики для отметки уведомления как прочитаного (по умолчанию только для текущей вики).", "apihelp-echomarkread-example-1": "Пометить уведомление 8 как прочитанное", "apihelp-echomarkread-example-2": "Отметить все уведомления как прочитанные", "apihelp-echomarkread-example-3": "Пометить уведомление 1 как непрочитанное", @@ -22,7 +24,21 @@ "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-echomarkseen-param-timestampFormat": "Формат временной отметки для вывода на печать, 'ISO_8601' или 'MW'. 'MW' устарел здесь, поэтому все клиенты должны переключиться на 'ISO_8601'. Этот параметр будет удалён, а 'ISO_8601' станет единственным выходным форматом.", + "apihelp-echomute-description": "Игнорировать или убрать из игнорируемых уведомления от определённых участников или страниц.", + "apihelp-echomute-summary": "Игнорировать или убрать из игнорируемых уведомления от определённых участников или страниц.", + "apihelp-echomute-param-type": "Из которого списка игнорируемых удалить или добавить", + "apihelp-echomute-param-mute": "Страницы или участники для добавления в список игнорируемых", + "apihelp-echomute-param-unmute": "Страницы или участники для удаления из списка игнорируемых", + "apihelp-echopushsubscriptions-summary": "Управление push-подписками для текущего участника.", + "apihelp-echopushsubscriptions-param-command": "Действие, которое необходимо выполнить.", + "apihelp-echopushsubscriptions+create-summary": "Регистрация push-подписок для текущего участника.", + "apihelp-echopushsubscriptions+create-param-provider": "Поставщик push-сервиса для которого регистрируется токен.", + "apihelp-echopushsubscriptions+create-param-providertoken": "Токен для регистрации.", + "apihelp-echopushsubscriptions+create-example": "Регистрация push-подписки для текущего участника.", + "apihelp-echopushsubscriptions+delete-summary": "Разрегистрация push-подписок для текущего участника.", + "apihelp-echopushsubscriptions+delete-param-providertoken": "Токен ассоциирован с push-подпиской к разрегистрации.", + "apihelp-echopushsubscriptions+delete-example": "Разрегистрация push-подписки для текущего участника.", "apihelp-query+notifications-description": "Получать уведомления, ожидающие текущего пользователя.", "apihelp-query+notifications-summary": "Получать уведомления, ожидающие текущего пользователя.", "apihelp-query+notifications-param-prop": "Подробности для запроса.", @@ -60,7 +76,9 @@ "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" + "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", + "apierror-echo-push-token-exists": "Предоставленный токен уже существует в базе данных.", + "apierror-echo-push-token-not-found": "Предоставленный токен не был найден в базе данных." } diff --git a/Echo/i18n/api/sh.json b/Echo/i18n/api/sh.json new file mode 100644 index 00000000..82d46175 --- /dev/null +++ b/Echo/i18n/api/sh.json @@ -0,0 +1,29 @@ +{ + "@metadata": { + "authors": [ + "Vlad5250" + ] + }, + "apihelp-echomarkread-description": "Označi sva obavještenja kao pročitana za trenutni korisnik.", + "apihelp-echomarkread-summary": "Označi sva obavještenja kao pročitana za trenutni korisnik.", + "apihelp-echomarkread-param-list": "Spisak naznaka obavještenja što treba da se označe kao pročitana.", + "apihelp-echomarkread-param-unreadlist": "Spisak naznaka obavještenja što treba da se označe kao nepročitana.", + "apihelp-echomarkread-param-all": "Ako je zadano, označava sva obavještenja jednog korisnika kao pročitana.", + "apihelp-echomarkread-param-sections": "Spisak podnaslova što treba da se označe kao pročitani.", + "apihelp-echomarkread-example-1": "Označi obavještenje 8 kao pročitano", + "apihelp-echomarkread-example-2": "Označiu sva obaveštenja pročitanim", + "apihelp-echomarkread-example-3": "Označi obavještenje 1 kao pročitano", + "apihelp-echomarkseen-description": "Označi obavještenja kao pročitana za trenutni korisnik.", + "apihelp-echomarkseen-summary": "Označi obavještenja kao pročitana za trenutni korisnik.", + "apihelp-echomarkseen-example-1": "Označi obavještenja svih vrsta kao pročitana", + "apihelp-echomarkseen-param-type": "Vrste obavještenja što treba da se označe kao viđena: „alert“, „message“ ili „all“.", + "apihelp-query+notifications-description": "Daj obavještenja što isčekavaju trenutnoga korisnika.", + "apihelp-query+notifications-summary": "Daj obavještenja što isčekavaju trenutnoga korisnika.", + "apihelp-query+notifications-param-prop": "Pojedinosti što treba da se potraže.", + "apihelp-query+notifications-param-sections": "Obavjestiteljne podnaslove što treba da se potraže (tj. neka kombinacija „alert“ i „message“).", + "apihelp-query+notifications-param-groupbysection": "Da li grupira se ishod po podnaslovima. Ako je zadano, svaki podnaslov daje se zasebno.", + "apihelp-query+notifications-param-filter": "Filtriraj obavještenja u ishodu.", + "apihelp-query+notifications-param-format": "Ako je zadano, obavještenja će se dati kao formatirana ovim načinom.", + "apihelp-query+notifications-paramvalue-format-model": "Sirovo obavještenje", + "apihelp-query+notifications-example-1": "Ispiši obavještenja" +} diff --git a/Echo/i18n/api/sl.json b/Echo/i18n/api/sl.json index 18acb345..2f67f3a7 100644 --- a/Echo/i18n/api/sl.json +++ b/Echo/i18n/api/sl.json @@ -5,6 +5,7 @@ ] }, "apihelp-echomarkread-description": "Označi obvestila kot prebrana za trenutnega uporabnika.", + "apihelp-echomarkread-summary": "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 kot prebrana.", @@ -13,9 +14,13 @@ "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-summary": "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.", - "apihelp-query+notifications-param-prop": "Zahtevane podrobnosti." + "apihelp-query+notifications-param-prop": "Zahtevane podrobnosti.", + "apihelp-query+notifications-paramvalue-format-model": "Surovi podatki obvestil", + "apihelp-query+notifications-param-limit": "Največje število prikazanih obvestil.", + "apihelp-query+unreadnotificationpages-param-limit": "Največje število prikazanih strani." } diff --git a/Echo/i18n/api/sr-ec.json b/Echo/i18n/api/sr-ec.json index abae1467..7169f955 100644 --- a/Echo/i18n/api/sr-ec.json +++ b/Echo/i18n/api/sr-ec.json @@ -1,8 +1,8 @@ { "@metadata": { "authors": [ - "Milicevic01", - "BadDog" + "BadDog", + "Milicevic01" ] }, "apihelp-echomarkread-example-2": "Означи сва обавештења као прочитана", diff --git a/Echo/i18n/api/sv.json b/Echo/i18n/api/sv.json index e89f7c2b..56cd8d7e 100644 --- a/Echo/i18n/api/sv.json +++ b/Echo/i18n/api/sv.json @@ -12,6 +12,7 @@ "apihelp-echomarkread-param-unreadlist": "En lista över aviserings-ID att markera som olästa.", "apihelp-echomarkread-param-all": "Om angiven, markerar en användares alla aviseringar som lästa.", "apihelp-echomarkread-param-sections": "En lista över avsnitt att markera som lästa.", + "apihelp-echomarkread-param-wikis": "Lista över wikis att markera aviseringar som lästa (är endast aktuell wiki som standard).", "apihelp-echomarkread-example-1": "Markera avisering 8 som läst", "apihelp-echomarkread-example-2": "Markera alla aviseringar som lästa", "apihelp-echomarkread-example-3": "Markera avisering 1 som oläst", @@ -20,6 +21,7 @@ "apihelp-echomarkseen-example-1": "Märk alla sorters aviseringar som lästa", "apihelp-echomarkseen-param-type": "Aviseringstypen att märka som läst: 'alert', 'message' eller 'all'.", "apihelp-echomarkseen-param-timestampFormat": "Tidstämpelformat att använda som utmatning, 'ISO_8601' eller 'MW'. 'MW' är föråldrat här, så alla klienter bör byta till 'ISO_8601'. Denna parameter kommer att tas bort och 'ISO_8601' kommer att bli det enda utmatningsformatet.", + "apihelp-echopushsubscriptions-param-command": "Åtgärd att utföra.", "apihelp-query+notifications-description": "Hämta aviseringar som väntar på aktuell användare.", "apihelp-query+notifications-summary": "Hämta aviseringar som väntar på aktuell användare.", "apihelp-query+notifications-param-prop": "Detaljer som ska begäras.", diff --git a/Echo/i18n/api/tr.json b/Echo/i18n/api/tr.json index e8ad6c71..9d16df14 100644 --- a/Echo/i18n/api/tr.json +++ b/Echo/i18n/api/tr.json @@ -2,30 +2,81 @@ "@metadata": { "authors": [ "Arystanbek", + "BaRaN6161 TURK", "KorkmazO", "McAang", "Sayginer" ] }, - "apihelp-echomarkread-description": "Geçerli kullanıcı için okundu olarak işaretle bildirimleri.", + "apihelp-echomarkread-description": "Bildirimleri geçerli kullanıcı için okundu olarak işaretleyin.", + "apihelp-echomarkread-summary": "Bildirimleri geçerli kullanıcı için okundu olarak işaretleyin.", "apihelp-echomarkread-param-list": "Okundu olarak işaretlemek için bildirim Kimliklerinin bir listesini.", + "apihelp-echomarkread-param-unreadlist": "Okunmamış olarak işaretlenecek bildirim kimlikleri listesi.", "apihelp-echomarkread-param-all": "Set, okumak gibi bir kullanıcı Bildirimleri tüm işaretler.", "apihelp-echomarkread-param-sections": "Okundu olarak işaretlemek için bölümler bir listesini.", + "apihelp-echomarkread-param-wikis": "Bildirimi okundu olarak işaretlemek için vikilerin listesi (varsayılan olarak yalnızca geçerli vikidir).", "apihelp-echomarkread-example-1": "Mark bildirim 8 gibi okumak", "apihelp-echomarkread-example-2": "Tüm bildirimleri okunmuş olarak işaretle", - "apihelp-echomarkseen-description": "Geçerli kullanıcı için görüldüğü gibi Mark bildirimleri.", + "apihelp-echomarkread-example-3": "Bildirim 1'i okunmadı olarak işaretle", + "apihelp-echomarkseen-description": "Bildirimleri geçerli kullanıcı için göründüğü gibi işaretleyin.", + "apihelp-echomarkseen-summary": "Bildirimleri geçerli kullanıcı için göründüğü gibi işaretleyin.", "apihelp-echomarkseen-example-1": "Her tür bildirimi okundu olarak işaretle", "apihelp-echomarkseen-param-type": "'Uyarı', 'mesaj' ya da 'tümü' olarak işaretlemek için bildirimlerin türü.", + "apihelp-echomarkseen-param-timestampFormat": "'ISO_8601' veya 'MW' çıkışı için kullanılacak zaman damgası biçimi. 'MW' burada kullanımdan kaldırılmıştır, bu nedenle tüm istemciler 'ISO_8601' e geçmelidir. Bu parametre kaldırılacak ve 'ISO_8601' tek çıkış biçimi olacak.", + "apihelp-echomute-description": "Belirli kullanıcılardan veya sayfalardan gelen bildirimlerin sesini kapatın veya açın.", + "apihelp-echomute-summary": "Belirli kullanıcılardan veya sayfalardan gelen bildirimlerin sesini kapatın veya açın.", + "apihelp-echomute-param-type": "Sessiz listesine eklenecek veya listeden kaldırılacağı", + "apihelp-echomute-param-mute": "Sessiz listesine eklenecek sayfalar veya kullanıcılar", + "apihelp-echomute-param-unmute": "Sessiz listesine eklenecek sayfalar veya kullanıcılar", + "apihelp-echopushsubscriptions-summary": "Geçerli kullanıcı için push aboneliklerini yönetin.", + "apihelp-echopushsubscriptions-param-command": "Gerçekleştirilecek eylem.", + "apihelp-echopushsubscriptions+create-summary": "Geçerli kullanıcı için push abonelikleri kaydedin.", + "apihelp-echopushsubscriptions+create-param-provider": "Anahtar kaydedilecek push servis sağlayıcısı.", + "apihelp-echopushsubscriptions+create-param-providertoken": "Kaydedilecek anahtar.", + "apihelp-echopushsubscriptions+create-example": "Geçerli kullanıcı için push aboneliği kaydedin.", + "apihelp-echopushsubscriptions+delete-summary": "Geçerli kullanıcı için push aboneliklerin kaydını kaldırın.", + "apihelp-echopushsubscriptions+delete-param-providertoken": "Kaydı silmek için push aboneliği ile ilişkili anahtar.", + "apihelp-echopushsubscriptions+delete-example": "Geçerli kullanıcı için push aboneliğinin kaydını kaldırın.", "apihelp-query+notifications-description": "Bildirimler, geçerli kullanıcı için bekliyor.", + "apihelp-query+notifications-summary": "Bildirimler, geçerli kullanıcı için bekliyor.", "apihelp-query+notifications-param-prop": "İstek detayları.", "apihelp-query+notifications-param-sections": "Sorgu için bildirim bölümleri (örneğin bazı 'uyarı' ve 'mesaj'kombinasyonu)", "apihelp-query+notifications-param-groupbysection": "Olsun bölüm sonuç grup için. Her bölüm set halinde ayrı ayrı getirildi.", + "apihelp-query+notifications-param-filter": "Filtre bildirimleri döndürüldü.", "apihelp-query+notifications-param-format": "Belirtilmişse, bildirimleri biçimlendirilmiş bu şekilde iade edilecektir.", + "apihelp-query+notifications-paramvalue-format-model": "Ham bildirim verileri", + "apihelp-query+notifications-paramvalue-format-special": "Special:Notifications sayfası için biçimlendirilmiş (ve yalnızca bu!) HTML'ye güvenmeyin, çünkü herhangi bir zamanda değişebilir.", + "apihelp-query+notifications-paramvalue-format-flyout": "<span class=\"apihelp-deprecated\">Kaldırıldı</span>. Ham veriler için <kbd>$1format=model</kbd> kullanın", + "apihelp-query+notifications-paramvalue-format-html": "<span class=\"apihelp-deprecated\">Kaldırıldı</span>. Ham veriler için <kbd>$1format=model</kbd> kullanın", "apihelp-query+notifications-param-limit": "Gösterilebilecek azami bildirim sayısı.", + "apihelp-query+notifications-param-wikis": "Adlı kullanıcıdan bildirim alınacak wikilerin listesi (varsayılan olarak yalnızca geçerli wikidir).", + "apihelp-query+notifications-param-crosswikisummary": "Yabancı wikilerle ilgili bildirimlerin özet bildirimini seçmek doğrudur.", "apihelp-query+notifications-param-alertcontinue": "Daha uyanık sonuçlar mevcut olduğunda, bu devam etmek için kullanın.", + "apihelp-query+notifications-param-unreadfirst": "Önce okunmamış bildirimlerin gösterilip gösterilmeyeceği (yalnızca groupbysection ayarlanmamışsa kullanılır).", "apihelp-query+notifications-param-alertunreadfirst": "İster okunmamış mesaj bildirimlerini göstermek.", "apihelp-query+notifications-param-messagecontinue": "Daha fazla ileti sonuçlar mevcut olduğunda, bu devam etmek için kullanın.", "apihelp-query+notifications-param-messageunreadfirst": "İster okunmamış uyarı bildirimleri göstermek.", + "apihelp-query+notifications-param-titles": "Yalnızca bu sayfalar için bildirimler gönderin. Herhangi bir sayfa ile ilişkili olmayan bildirimler almak için başlık olarak [] kullanın.", + "apihelp-query+notifications-param-bundle": "Bildirim türlerine göre gruplama kurallarına göre paket uyumlu okunmamış bildirimlerin gösterilip gösterilmeyeceği.", "apihelp-query+notifications-example-1": "Liste bildirimleri", - "apihelp-query+notifications-example-2": "Sayılarla birlikte bölümlere göre gruplandırılmış bildirimler listesi" + "apihelp-query+notifications-example-2": "Sayılarla birlikte bölümlere göre gruplandırılmış bildirimler listesi", + "apihelp-query+unreadnotificationpages-description": "Geçerli kullanıcı için okunmamış bildirimlerin bulunduğu sayfaları alın.", + "apihelp-query+unreadnotificationpages-summary": "Geçerli kullanıcı için okunmamış bildirimlerin bulunduğu sayfaları alın.", + "apihelp-query+unreadnotificationpages-param-grouppages": "Konuşma sayfalarını konu sayfalarıyla birlikte gruplandırın ve bir sayfayla ilişkili olmayan grup bildirimlerini geçerli kullanıcının kullanıcı sayfasıyla birlikte gruplandırın.", + "apihelp-query+unreadnotificationpages-param-limit": "Döndürülecek maksimum sayfa sayısı.", + "apihelp-query+unreadnotificationpages-param-wikis": "Sitesinden okunmamış bildirimleri olan sayfaları getirecek wikilerin listesi (varsayılan olarak yalnızca geçerli wikidir).", + "apihelp-query+unreadnotificationpages-example-1": "Okunmayan bildirimleri olan (miktarlarını) sayfalar listele", + "apihelp-echoarticlereminder-summary": "Belirtilen madde hakkında gelecekteki bir hatırlatma iste", + "apihelp-echoarticlereminder-param-pageid": "Kullanıcıyı hatırlatmak için makalenin kimliği", + "apihelp-echoarticlereminder-param-title": "Kullanıcıya hatırlatmak için makalenin başlığı", + "apihelp-echoarticlereminder-param-timestamp": "Kullanıcıya hangi zaman damgasını hatırlatması", + "apihelp-echoarticlereminder-param-comment": "Hatırlatıcıya dahil edilecek isteğe bağlı kullanıcı yorumu", + "apihelp-echoarticlereminder-example-1": "Yorum ile yarın için bir madde hatırlatıcı bildirimi oluşturun", + "apihelp-echoarticlereminder-example-2": "Yorum ile yarın için bir madde hatırlatıcı bildirimi oluşturun", + "apiwarn-echo-deprecation-timestampformat": "MW zaman damgası çıkış formatı burada kullanımdan kaldırılmıştır. Gelecekte, çıkış zaman damgası biçimi için daima ISO 8601 kullanılacaktır. İstemcinizi ayarlayın ve <var>timestampFormat</var> öğesini <kbd>ISO_8601</kbd> olarak ayarlayın.", + "apiwarn-echo-deprecation-flyout": "<kbd>notformat=flyout</kbd> kullanımdan kaldırıldı ve yakında kaldırılacak. Ham verileri almak için <kbd>notformat=model</kbd> veya önceden oluşturulmuş HTML için <kbd>notformat=special</kbd> kullanın.", + "apiwarn-echo-deprecation-html": "<kbd>notformat=html</kbd> kullanımdan kaldırıldı ve yakında kaldırılacak. Bunun yerine <kbd>notformat=special</kbd> kullanın.", + "apierror-echo-event-creation-failed": "Echo etkinliği oluşturulamadı", + "apierror-echo-push-token-exists": "Sağlanan simge veritabanında zaten var.", + "apierror-echo-push-token-not-found": "Sağlanan anahtar veritabanında bulunamadı." } diff --git a/Echo/i18n/api/uk.json b/Echo/i18n/api/uk.json index 92b8a67f..b08690ef 100644 --- a/Echo/i18n/api/uk.json +++ b/Echo/i18n/api/uk.json @@ -12,6 +12,7 @@ "apihelp-echomarkread-param-unreadlist": "Список ідентифікаторів сповіщень, які треба позначити як непрочитані", "apihelp-echomarkread-param-all": "Якщо встановлено, позначає всі сповіщення користувача прочитаними.", "apihelp-echomarkread-param-sections": "Список розділів, які позначити як прочитані.", + "apihelp-echomarkread-param-wikis": "Список вікі, на яких слід позначити сповіщення як прочитане (стандартно — лише поточна вікі)", "apihelp-echomarkread-example-1": "Позначити сповіщення 8 як прочитане.", "apihelp-echomarkread-example-2": "Позначити всі сповіщення як прочитані", "apihelp-echomarkread-example-3": "Позначити сповіщення 1 як непрочитане", @@ -20,6 +21,13 @@ "apihelp-echomarkseen-example-1": "Позначити сповіщення усіх типів як переглянуті", "apihelp-echomarkseen-param-type": "Тип сповіщення, яке позначити переглянутим: «alert», «message» або «all».", "apihelp-echomarkseen-param-timestampFormat": "Формат мітки часу, що має бути використаний на виході: 'ISO_8601' або 'MW'. 'MW' тут є застарілим, тому всі клієнти повинні перейти на 'ISO_8601'. Цей параметр буде усунуто, а формат 'ISO_8601' стане єдиним вихідним форматом.", + "apihelp-echomute-description": "Приглушити або повернути сповіщення від деяких сторінок чи користувачів.", + "apihelp-echomute-summary": "Приглушити або повернути сповіщення від деяких сторінок чи користувачів.", + "apihelp-echomute-param-type": "До якого списку приглушення додати чи з якого забрати", + "apihelp-echomute-param-mute": "Сторінки чи користувачі, яких додати до списку приглушення", + "apihelp-echomute-param-unmute": "Сторінки чи користувачі, яких прибрати зі списку приглушення", + "apihelp-echopushsubscriptions-summary": "Керувати пуш-підписками для поточного користувача.", + "apihelp-echopushsubscriptions-param-command": "Дія, яку потрібно виконати.", "apihelp-query+notifications-description": "Отримати сповіщення, які чекають поточного користувача.", "apihelp-query+notifications-summary": "Отримувати сповіщення, що очікують на дію поточного користувача.", "apihelp-query+notifications-param-prop": "Деталі запиту.", diff --git a/Echo/i18n/api/zh-hant.json b/Echo/i18n/api/zh-hant.json index 19a374cf..cb382972 100644 --- a/Echo/i18n/api/zh-hant.json +++ b/Echo/i18n/api/zh-hant.json @@ -2,8 +2,8 @@ "@metadata": { "authors": [ "Cwlin0416", - "Winstonyin", - "Kly" + "Kly", + "Winstonyin" ] }, "apihelp-echomarkread-description": "把目前使用者的通知標記為已讀。", @@ -12,6 +12,7 @@ "apihelp-echomarkread-param-unreadlist": "要標記為未讀的通知 ID 清單。", "apihelp-echomarkread-param-all": "一旦設定,將會把某個使用者的所有通知標記為已讀。", "apihelp-echomarkread-param-sections": "要標記為已讀的章節清單。", + "apihelp-echomarkread-param-wikis": "要標記為已讀取的 wiki 清單(預設為目前的 wiki)。", "apihelp-echomarkread-example-1": "把通知 8 標記為已讀", "apihelp-echomarkread-example-2": "把所有通知標記為已讀", "apihelp-echomarkread-example-3": "把通知 1 標記為未讀", @@ -20,6 +21,20 @@ "apihelp-echomarkseen-example-1": "把所有類型的通知標記為已讀", "apihelp-echomarkseen-param-type": "標記為已讀的通知類型:'alert'、'message' 或 'all'。", "apihelp-echomarkseen-param-timestampFormat": "用於輸出的時間戳格式 'ISO_8601' 或 'MW'。'MW' 將被棄用,因此所有客戶端都應改用 'ISO_8601'。此參數將會被移除,而 'ISO_8601' 將會成為唯一的輸出格式。", + "apihelp-echomute-description": "取消或是恢復來自某些使用者或頁面的通知。", + "apihelp-echomute-summary": "取消或是恢復來自某些使用者或頁面的通知。", + "apihelp-echomute-param-type": "要添加或移除的取消通知清單", + "apihelp-echomute-param-mute": "添加到取消通知清單裡的頁面或使用者", + "apihelp-echomute-param-unmute": "要從取消通知清單裡移除的頁面或使用者", + "apihelp-echopushsubscriptions-summary": "管理目前使用者的推送訂閱。", + "apihelp-echopushsubscriptions-param-command": "要執行的動作。", + "apihelp-echopushsubscriptions+create-summary": "註銷目前使用者的推送訂閱。", + "apihelp-echopushsubscriptions+create-param-provider": "註冊權杖的推送服務提供者。", + "apihelp-echopushsubscriptions+create-param-providertoken": "註冊的權杖。", + "apihelp-echopushsubscriptions+create-example": "為目前使用者註冊推送訂閱。", + "apihelp-echopushsubscriptions+delete-summary": "註銷目前使用者的推送訂閱。", + "apihelp-echopushsubscriptions+delete-param-providertoken": "關聯註銷推送訂閱的權杖。", + "apihelp-echopushsubscriptions+delete-example": "註銷目前使用者的推送訂閱。", "apihelp-query+notifications-description": "取得目前使用者等待的通知。", "apihelp-query+notifications-summary": "取得目前使用者等待的通知。", "apihelp-query+notifications-param-prop": "請求的詳細資料。", @@ -59,5 +74,7 @@ "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 事件" + "apierror-echo-event-creation-failed": "無法建立 Echo 事件", + "apierror-echo-push-token-exists": "提供的權杖已存在於資料庫。", + "apierror-echo-push-token-not-found": "在資料庫裡找不到提供的權杖。" } diff --git a/Echo/i18n/ar.json b/Echo/i18n/ar.json index 9cb73229..259ac814 100644 --- a/Echo/i18n/ar.json +++ b/Echo/i18n/ar.json @@ -1,44 +1,51 @@ { "@metadata": { "authors": [ + "Abanima", "Achraf94", + "Antime", "Asaifm", + "Catrope", "Ciphers", + "Hiba Alshawi", + "Izoozo", + "Khaled", + "Macofe", + "Maroen1990", "Meno25", "Mido", - "Zanatos", - "زكريا", - "مشعل الحربي", - "Abanima", + "Moud hosny", + "Omar Ghrida", "Omda4wady", - "Khaled", - "محمد أحمد عبد الفتاح", - "Hiba Alshawi", "Shbib Al-Subaie", - "Macofe", "Sonic N800", - "Maroen1990", - "Catrope", - "علاء", + "Zanatos", + "البراء صالح", "بدارين", - "Izoozo", - "Moud hosny", "ديفيد", - "Antime" + "زكريا", + "علاء", + "محمد أحمد عبد الفتاح", + "مشعل الحربي" ] }, "echo-desc": "نظام لإخطار المستخدمين عن الأحداث والرسائل", "prefs-echo": "إشعارات", "prefs-emailsettings": "خيارات البريد الإلكتروني", - "prefs-displaynotifications": "خيارات العرض", "prefs-echosubscriptions": "أعلمني بشأن هذه الأحداث", "prefs-echocrosswiki": "إشعارات عابرة للويكي", "prefs-blocknotificationslist": "المستخدمون الممنوعون", + "prefs-mutedpageslist": "صفحات صامتة لإشعارات وصلة صفحة", + "prefs-echopollupdates": "الإخطارات الحية", + "echo-mobile-notifications-filter-title": "إخطارات المرشح", + "echo-pref-show-poll-updates": "عرض الإخطارات الجديدة فور وصولها", + "echo-pref-show-poll-updates-help": "عرض عدد الإشعارات غير المقروءة في شريط العنوان، وعرض مقتطف من كل إخطار فور وصوله.", "echo-pref-send-me": "أرسل لي:", "echo-pref-send-to": "أرسل إلى:", "echo-pref-email-format": "صيغة البريد الإلكتروني:", "echo-pref-web": "ويب", "echo-pref-email": "بريد إلكتروني", + "echo-pref-push": "التطبيقات", "echo-pref-email-frequency-never": "لا ترسل لي أي إشعارات بالبريد الإلكتروني", "echo-pref-email-frequency-immediately": "الإشعارات الفردية حال ورودها", "echo-pref-email-frequency-daily": "ملخصا يوميا للإشعارات", @@ -47,8 +54,8 @@ "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-pref-notifications-page-linked-title-muted-list": "لا تعرض إشعارات \"وصلة صفحة\" لهذه الصفحات. ([[mw:Special:MyLanguage/Help:Notifications#mute|معرفة المزيد]])", + "echo-pref-dont-email-read-notifications": "لا تقم بتضمين إشعارات القراءة في رسائل البريد الإلكتروني الموجزة", "echo-learn-more": "معرفة المزيد", "echo-log": "السجل العلني", "echo-new-messages": "لديك رسائل جديدة", @@ -60,9 +67,14 @@ "echo-category-title-mention-success": "نجحت {{PLURAL:$1|الإشارة|الإشارات}}", "echo-category-title-other": "{{PLURAL:$1|أخرى}}", "echo-category-title-system": "{{PLURAL:$1|النظام}}", + "echo-category-title-system-noemail": "{{PLURAL:$1|نظام|أنظمة}}", + "echo-category-title-system-emailonly": "{{PLURAL:$1|نظام|أنظمة}}", "echo-category-title-user-rights": "{{PLURAL:$1|تغيير صلاحيات المستخدم|تغييرات صلاحيات المستخدم}}", "echo-category-title-emailuser": "{{PLURAL:$1|بريد إلكتروني من مسخدم آخر|بريد إلكتروني من مستخدمين آخرين}}", "echo-category-title-article-reminder": "{{PLURAL:$1|تذكير|تذكيرات}} الصفحة", + "echo-category-title-thank-you-edit": "تحرير {{PLURAL:$1|الإنجاز|الإنجازات}}", + "echo-category-title-watchlist": "تعديل لصفحة مراقبة", + "echo-category-title-minor-watchlist": "تعديل طفيف لصفحة مراقبة", "echo-pref-tooltip-edit-user-talk": "أعلمني عندما توضع رسائل أو ردود في صفحة نقاشي.", "echo-pref-tooltip-article-linked": "أعلمني عندما توضع في صفحة أخرى وصلة لصفحة أنشأتها.", "echo-pref-tooltip-reverted": "أعلمني عندما إلغاء تعديل أجريته، بواسطة أداة الرجوع أو الاسترجاع.", @@ -70,9 +82,11 @@ "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": "لم يحدد للإشعارات أي تنسيق.", + "echo-pref-tooltip-thank-you-edit": "إخطاري عندما أصل إلى تعديلي الأول، العاشر، المئة....", + "echo-pref-tooltip-watchlist": "أعلمني عندما يقوم شخص ما بإجراء تعديل (غير طفيف) لصفحة في قائمة مراقبتي.", + "echo-pref-tooltip-minor-watchlist": "أعلمني عندما يقوم شخص ما بإجراء تعديل طفيف لصفحة في قائمة مراقبتي.", "notifications": "إشعارات", "tooltip-pt-notifications-alert": "{{GENDER:|تنبيهاتك}}", "tooltip-pt-notifications-notice": "{{GENDER:|إخطاراتك}}", @@ -83,7 +97,6 @@ "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": "المستخدمون الجدد", @@ -97,14 +110,11 @@ "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-placeholder-filters": "لا توجد إشعارات تنطبق عليها الخيارات المحددة.", "echo-notification-loginrequired": "يجب عليك تسجيل الدخول للاطلاع على إشعاراتك.", "echo-notification-popup-loginrequired": "من فضلك سجل الدخول لعرض إشعاراتك.", "echo-notification-markasread": "علّم كمقروءة", @@ -146,7 +156,7 @@ "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|أنت}} حاولت أن تذكر أكثر من\n $3 {{PLURAL:$3|مستخدم|مستخدمين}}، جميع ما ذُكِرت أعلاه فوق الحد لم تُرسَل.", + "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": "<strong>اسم المستخدم غير موجود:</strong> $1", "notification-compact-header-mention-failure-user-anonymous": "<strong>الأيبيهات لا يمكن إخطارها:</strong> $1", @@ -154,31 +164,40 @@ "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> talk page: {{PLURAL:$5|$5 لم يتم إرسالها}}، {{PLURAL:$6|$6 أرسلت}}.", - "notification-header-user-rights-add-only": "{{GENDER:$1|غُيرت|غُيرت}} صلاحيات المستخدم الخاصة {{GENDER:$4|بك|بكِ}}. أضفت إلى: $2.", + "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-mention-summary": "$1 {{GENDER:$2|ذكر|ذكرت}}{{GENDER:$3|ك}} في ملخص تعديل في <strong>$4</strong>.", + "notification-header-watchlist-changed": "$1 {{GENDER:$2|غير|غيرت}} <strong>$3</strong>، صفحة في {{GENDER:$4|قائمة مراقبتك}} {{PLURAL:$5||، $5 مرات}}.", + "notification-header-watchlist-created": "$1 {{GENDER:$2|أنشأ|أنشأت}} <strong>$3</strong>، صفحة في {{GENDER:$4|قائمة مراقبتك}} {{PLURAL:$5||، $5 مرات}}.", + "notification-header-watchlist-deleted": "$1 {{GENDER:$2|حذف|حذفت}} <strong>$3</strong>، صفحة في {{GENDER:$4|قائمة مراقبتك}} {{PLURAL:$5||، $5 مرات}}.", + "notification-header-watchlist-moved": "$1 {{GENDER:$2|نقل|نقلت}} <strong>$3</strong>، صفحة في {{GENDER:$4|قائمة مراقبتك}} {{PLURAL:$5||، $5 مرات}}.", + "notification-header-watchlist-restored": "$1 {{GENDER:$2|استرجع|استرجعت}} <strong>$3</strong>، صفحة في {{GENDER:$4|قائمة مراقبتك}} {{PLURAL:$5||، $5 مرات}}.", + "notification-header-watchlist-multiuser-changed": "<strong>$1</strong>، صفحة في {{GENDER:$2|قائمة مراقبتك}}، تم تغييرها $3 {{PLURAL:$3|مرة|مرات}}.", + "notification-header-watchlist-multiuser-created": "<strong>$1</strong>، صفحة في {{GENDER:$2|قائمة مراقبتك}}، تم إنشاؤها $3 {{PLURAL:$3|مرة|مرات}}.", + "notification-header-watchlist-multiuser-deleted": "<strong>$1</strong>، صفحة في {{GENDER:$2|قائمة مراقبتك}}، تم حذفها $3 {{PLURAL:$3|مرة|مرات}}.", + "notification-header-watchlist-multiuser-moved": "<strong>$1</strong>، صفحة في {{GENDER:$2|قائمة مراقبتك}}، تم نقلها $3 {{PLURAL:$3|مرة|مرات}}.", + "notification-header-watchlist-multiuser-restored": "<strong>$1</strong>، صفحة في {{GENDER:$2|قائمة مراقبتك}}، تم استرجاعها $3 {{PLURAL:$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|بتعديلك|بتعديلكِ}} العاشر؛ شكرًا {{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-100000-edit": "لقد قُمت حالًا {{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>|تعديلاتك في <strong>$3</strong>}} {{GENDER:$2|ألغيت|ألغيت}}", + "notification-header-reverted": "{{PLURAL:$4|تعديلاتك}} في <strong>$3</strong> {{GENDER:$2|أُلغِيت}}", "notification-header-emailuser": "{{GENDER:$2|أرسل|أرسلت}} $1 بريدا إلكترونيا إليك.", - "notification-edit-talk-page-email-subject2": "{{GENDER:$1|بعث|بعثت}} لك $1 برسالة في {{SITENAME}}", - "notification-edit-talk-page-email-batch-body-with-section": "{{GENDER:$1|بعث|بعثت}} لك $1 برسالة في صفحة نقاشك في \"$2\".", - "notification-page-linked-email-subject": "وضعت وصلة لصفحة أنشأتها في {{SITENAME}}", - "notification-reverted-email-subject2": "{{GENDER:$1|ألغي{{PLURAL:$3||ت}}}} {{PLURAL:$3|تعديلك|تعديلاتك}} في {{SITENAME}}", - "notification-mention-email-subject": "{{GENDER:$1|أشار|أشارت}} $1 {{GENDER:$2|إليك}} في {{SITENAME}}", - "notification-user-rights-email-subject": "غيرت صلاحياتك في {{SITENAME}}", + "notification-edit-talk-page-email-subject2": "{{GENDER:$2|بعث|بعثت}} $1 {{GENDER:$3|لك}} رسالة في {{SITENAME}}", + "notification-page-linked-email-subject": "وُصِلت صفحة {{GENDER:$3|أنشأتها}} في {{SITENAME}}", + "notification-reverted-email-subject2": "{{GENDER:$2|ألغي{{PLURAL:$4||ت}}}} {{PLURAL:$4|تعديلك|تعديلاتك}} في {{SITENAME}}", + "notification-mention-email-subject": "{{GENDER:$2|أشار|أشارت}} $1 {{GENDER:$3|إليك}} في {{SITENAME}}", + "notification-user-rights-email-subject": "غُيِّرت {{GENDER:$3|صلاحياتك}} في {{SITENAME}}", "notification-timestamp-ago-seconds": "{{PLURAL:$1|ثانية واحدة|ثانيتين|$1 ثوان|$1 ثانية}}", "notification-timestamp-ago-minutes": "{{PLURAL:$1|دقيقة واحدة|دقيقتين|$1 دقائق|$1 دقيقة}}", "notification-timestamp-ago-hours": "{{PLURAL:$1|ساعة واحدة|ساعتين|$1 ساعات|$1 ساعة}}", @@ -190,9 +209,7 @@ "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-specialmute-label-mute-notifications": "تجاهل الإشعارات من هذا المستخدم", "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.", @@ -202,13 +219,12 @@ "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|إخطار|إخطارات}} تم التعليم عليها كمقروءة", "echo-mark-wiki-as-read": "علّم الكل كمقروء في الويكي المحددة: $1", + "echo-displaysnippet-title": "إشعار جديد", "echo-date-today": "اليوم", "echo-date-yesterday": "أمس", - "echo-load-more-error": "وقع خطأ أثناء جلب المزيد من النتائج.", "notification-bundle-header-edit-user-talk-v2": "{{PLURAL:$1|لا رسائل|رسالة جديدة|رسالتان جديدتان|$1 رسائل جديدة|$1 رسالة جديدة}} على </strong>صفحة {{GENDER:$3|نقاشك|نقاشكِ}}.<strong>", "echo-email-batch-subject-daily": "لديك {{PLURAL:$2|إشعار جديد|إشعارات جديدة}} في {{SITENAME}}", "echo-email-batch-subject-weekly": "لديك {{PLURAL:$2|إشعار جديد|إشعارات جديدة}} في {{SITENAME}} هذا الأسبوع", @@ -218,5 +234,5 @@ "notification-header-foreign-alert": "إخطارات أكثر من {{PLURAL:$5|لا موقع ويكي|موقع ويكي آخر|موقعين ويكي آخرين|$5 مواقع ويكي أخرى}}", "notification-header-foreign-notice": "مزيد من الإشعارات من {{PLURAL:$5|ويكي أخر|$5 ويكيات أخرى}}", "notification-header-foreign-all": "المزيد من الإخطارات من {{PLURAL:$5|ويكي أخرى|$5 ويكيات أخرى}}", - "echo-badge-count": "{{PLURAL:$1|$1|100=٩٩+}}" + "echo-badge-count": "{{PLURAL:$1|$1|100={{formatnum:99}}+}}" } diff --git a/Echo/i18n/arq.json b/Echo/i18n/arq.json index fe1fd0cf..ef47ca35 100644 --- a/Echo/i18n/arq.json +++ b/Echo/i18n/arq.json @@ -1,8 +1,8 @@ { "@metadata": { "authors": [ - "Oldstoneage", - "GeekEmad" + "GeekEmad", + "Oldstoneage" ] }, "tooltip-pt-notifications-alert": "إخطاراتك" diff --git a/Echo/i18n/ary.json b/Echo/i18n/ary.json index bbd8d929..66b4667c 100644 --- a/Echo/i18n/ary.json +++ b/Echo/i18n/ary.json @@ -1,8 +1,11 @@ { "@metadata": { "authors": [ - "Reda Benkhadra" + "Reda Benkhadra", + "SADIQUI" ] }, + "echo-new-messages": "عندك ميساجات جداد", + "tooltip-pt-notifications-alert": "{{GENDER:|تنبيهاتك}}", "notification-inbox-filter-all": "كلشي" } diff --git a/Echo/i18n/as.json b/Echo/i18n/as.json index 59d59348..e50ee236 100644 --- a/Echo/i18n/as.json +++ b/Echo/i18n/as.json @@ -1,10 +1,13 @@ { "@metadata": { "authors": [ - "Gitartha.bordoloi" + "Gitartha.bordoloi", + "Simbu123" ] }, + "prefs-echo": "জাননী", "echo-new-messages": "আপোনালৈ নতুন বাৰ্তা আহিছে", "notifications": "জাননী", - "tooltip-pt-notifications-alert": "{{GENDER:|আপোনাৰ}} জাননী" + "tooltip-pt-notifications-alert": "{{GENDER:|আপোনাৰ}} জাননী", + "echo-specialpage": "জাননী" } diff --git a/Echo/i18n/ast.json b/Echo/i18n/ast.json index d325d108..8e4cd300 100644 --- a/Echo/i18n/ast.json +++ b/Echo/i18n/ast.json @@ -1,17 +1,20 @@ { "@metadata": { "authors": [ - "Xuacu", - "Macofe" + "Macofe", + "Xuacu" ] }, "echo-desc": "Sistema p'avisar a los usuarios sobre actividaes y mensaxes", "prefs-echo": "Avisos", "prefs-emailsettings": "Opciones de corréu", - "prefs-displaynotifications": "Opciones de vista", "prefs-echosubscriptions": "Avisame d'estos socesos", "prefs-echocrosswiki": "Notificaciones ente wikis", "prefs-blocknotificationslist": "Usuarios callaos", + "prefs-echopollupdates": "Avisos en direuto", + "echo-mobile-notifications-filter-title": "Filtriar avisos", + "echo-pref-show-poll-updates": "Amosar los avisos nuevos según lleguen", + "echo-pref-show-poll-updates-help": "Amosar el númberu d'avisos ensin lleer na barra de títulu, y ver un trozu de cada avisu de la que llega.", "echo-pref-send-me": "Unviame:", "echo-pref-send-to": "Unviar a:", "echo-pref-email-format": "Formatu del corréu:", @@ -25,8 +28,6 @@ "echo-pref-email-format-plain-text": "Testu simple", "echo-pref-cross-wiki-notifications": "Amosar notificaciones d'otres wikis", "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", "echo-log": "Rexistru públicu", "echo-new-messages": "Tien mensaxes nuevos", @@ -38,9 +39,12 @@ "echo-category-title-mention-success": "{{PLURAL:$1|Mención correuta|Menciones correutes}}", "echo-category-title-other": "{{PLURAL:$1|Otros}}", "echo-category-title-system": "{{PLURAL:$1|Sistema}}", + "echo-category-title-system-noemail": "{{PLURAL:$1|Sistema}}", + "echo-category-title-system-emailonly": "{{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|Recordatorios}} de la páxina", + "echo-category-title-thank-you-edit": "{{PLURAL:$1|Finxu|Finxos}} d'edición", "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 otra páxina.", "echo-pref-tooltip-reverted": "Avisame cuando dalguién revierta una edición fecha por min, usando les ferramientes desfacer o revertir.", @@ -50,7 +54,7 @@ "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": "Avisame d'esta páxina cuando lo pida.", - "echo-error-no-formatter": "Nun se definió formatu dalu pal avisu", + "echo-pref-tooltip-thank-you-edit": "Avisame cuando faiga la 1ª, 10ª, 100ª... edición", "notifications": "Avisos", "tooltip-pt-notifications-alert": "{{GENDER:|Les tos}} alertes", "tooltip-pt-notifications-notice": "{{GENDER:|Los tos}} avisos", @@ -61,7 +65,6 @@ "echo-displaynotificationsconfiguration-sorting-by-section-legend": "En que sección s'ordena cada tipu de notificación", "echo-displaynotificationsconfiguration-available-notification-methods-header": "Métodos de notificación permitíos", "echo-displaynotificationsconfiguration-available-notification-methods-by-category-legend": "Cuálos métodos de notificación s'almiten pa cada categoría", - "echo-displaynotificationsconfiguration-available-notification-methods-by-type-legend": "Cuálos métodos de notificación s'almiten pa cada tipu; namái s'aplica a los tipos dientro de les categoríes que tán tapecíes nes preferencies", "echo-displaynotificationsconfiguration-enabled-default-header": "Activaes de mou predetermináu", "echo-displaynotificationsconfiguration-enabled-default-existing-users-legend": "Usuarios esistentes", "echo-displaynotificationsconfiguration-enabled-default-new-users-legend": "Usuarios nuevos", @@ -75,10 +78,7 @@ "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 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-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.", @@ -151,12 +151,11 @@ "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}}", - "notification-edit-talk-page-email-batch-body-with-section": "$1 {{GENDER:$1|dexó}} un mensaxe na so páxina d'alderique en «$2».", - "notification-page-linked-email-subject": "Una páxina que creasti enllazóse'n {{SITENAME}}", - "notification-reverted-email-subject2": "{{PLURAL:$3|Desfizose la so edición|Desficieronse les sos ediciones}} {{GENDER:$1|en}} {{SITENAME}}", - "notification-mention-email-subject": "$1 {{GENDER:$2|fíxote}} una {{GENDER:$1|mención}} en {{SITENAME}}", - "notification-user-rights-email-subject": "Camudaron los sos permisos d'usuariu en {{SITENAME}}", + "notification-edit-talk-page-email-subject2": "$1 {{GENDER:$2|dexó-y}} un mensaxe en {{SITENAME}}", + "notification-page-linked-email-subject": "Una páxina que {{GENDER:$3|creasti}} enllazóse'n {{SITENAME}}", + "notification-reverted-email-subject2": "$2 {{GENDER:$2|desfizo}} {{PLURAL:$4|la {{GENDER:$3|to}} edición|les {{GENDER:$3|tos}} ediciones}} en {{SITENAME}}", + "notification-mention-email-subject": "$1 {{GENDER:$3|te}} {{GENDER:$2|mentó}} en {{SITENAME}}", + "notification-user-rights-email-subject": "Camudaron los {{GENDER:$3|tos}} permisos d'usuariu en {{SITENAME}}", "notification-timestamp-ago-seconds": "{{PLURAL:$1|$1s}}", "notification-timestamp-ago-minutes": "{{PLURAL:$1|$1m}}", "notification-timestamp-ago-hours": "{{PLURAL:$1|$1h}}", @@ -168,9 +167,7 @@ "notification-inbox-filter-read": "Lleer", "notification-inbox-filter-unread": "Non lleíes", "notification-inbox-filter-all": "Toes", - "echo-email-body-default": "Tien un nuevu avisu en {{SITENAME}}:\n\n$1", - "echo-email-footer-default-html": "Para controlar qué correos electrónicos t'unviamos, <a href=\"$2\" style=\"text-decoration:none; color: #3868B0;\">revisa les preferencies</a>.<br />\n$1", - "echo-email-footer-default": "$2\n\nPa controlar qué correos t'unviamos, comprueba les preferencies:\n{{canonicalurl:{{#special:Preferences}}#mw-prefsection-echo}}\n\n$1", + "echo-specialmute-label-mute-notifications": "Silenciar los avisos d'esti usuariu", "echo-email-plain-footer": "Para controlar qué correos electrónicos {{GENDER:$1|t}}'unviamos, revisa les {{GENDER:$1|tos}} preferencies:", "echo-email-html-footer-preference-link-text": "comprueba les {{GENDER:$1|tos}} preferencies", "echo-email-html-footer-with-link": "Pa controlar qué mensaxes de corréu electrónicu {{GENDER:$2|t'unviamos}}, $1.", @@ -180,13 +177,12 @@ "echo-notification-notice-text-only": "Avisos", "echo-overlay-link": "Tolos avisos", "echo-overlay-title": "<b>Avisos</b>", - "echo-overlay-title-overflow": "<b>{{PLURAL:$1|Avisu|Avisos}}</b> (amosando $1 de $2 ensin lleer)", "echo-mark-all-as-read": "Marcar too como lleío", "echo-mark-all-as-read-confirmation": "$1 {{PLURAL:$1|avisu marcáu como lleíu|avisos marcaos como lleíos}}", "echo-mark-wiki-as-read": "Marcar toes como lleíes na wiki seleccionada: $1", + "echo-displaysnippet-title": "Avisu nuevu", "echo-date-today": "Güei", "echo-date-yesterday": "Ayeri", - "echo-load-more-error": "Hubo un error al descargar más resultaos.", "notification-bundle-header-edit-user-talk-v2": "{{PLURAL:$1|Un mensaxe nuevu|$1 mensaxes nuevos|100=99+ mensaxes nuevos}} na <strong>{{GENDER:$3|to}} páxina d'alderique</strong>.", "echo-email-batch-subject-daily": "Tien {{PLURAL:$2|un avisu nuevu|avisos nuevos}} en {{SITENAME}}", "echo-email-batch-subject-weekly": "Tien {{PLURAL:$2|un avisu nuevu|avisos nuevos}} en {{SITENAME}} esta selmana", diff --git a/Echo/i18n/atj.json b/Echo/i18n/atj.json index bddee72e..86cdfa7e 100644 --- a/Echo/i18n/atj.json +++ b/Echo/i18n/atj.json @@ -1,8 +1,8 @@ { "@metadata": { "authors": [ - "Dereckson", "Benoit Rochon", + "Dereckson", "Ninmeka" ] }, diff --git a/Echo/i18n/avk.json b/Echo/i18n/avk.json new file mode 100644 index 00000000..1de24bb3 --- /dev/null +++ b/Echo/i18n/avk.json @@ -0,0 +1,8 @@ +{ + "@metadata": { + "authors": [ + "Axel xadolik" + ] + }, + "tooltip-pt-notifications-alert": "Jinaf elogareem" +} diff --git a/Echo/i18n/awa.json b/Echo/i18n/awa.json index f33bd76c..40077308 100644 --- a/Echo/i18n/awa.json +++ b/Echo/i18n/awa.json @@ -1,18 +1,44 @@ { "@metadata": { "authors": [ - "1AnuraagPandey" + "1AnuraagPandey", + "1PandeyAnurag", + "Ajeetsinghawadh", + "Ajeetsinghawadhi" ] }, + "prefs-echo": "सूचना", + "echo-pref-send-me": "हम्मै भेजो:", + "echo-pref-send-to": "हिँया भेजव:", + "echo-pref-email-frequency-never": "कवनो अधिसूचना ना पठओ", + "echo-pref-email-frequency-immediately": "सूचना अवतै", + "echo-pref-email-frequency-daily": "अधिसूचना कय दिन भरे कै सारांश", + "echo-pref-email-frequency-weekly": "अधिसूचना कय हफ्ता भरे कै सारांश", + "echo-new-messages": "आप कय खातिर नवाँ सन्देश अहै", "notifications": "अधिसूचना", - "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", + "tooltip-pt-notifications-alert": "{{GENDER:|आपका}} जागरूकता संदेश", + "echo-displaynotificationsconfiguration-enabled-default-existing-users-legend": "वर्तमान सदस्य", + "echo-displaynotificationsconfiguration-enabled-default-new-users-legend": "नये सदस्य", + "echo-specialpage": "अधिसूचना", + "echo-specialpage-markasread-invalid-id": "अमान्य आयोजन आईडी", + "echo-specialpage-pagefilters-title": "हाल कय गतिविधि", + "echo-specialpage-pagefilters-subtitle": "न पढ़े सूचना के साथ पन्ना", + "notificationsmarkread-legend": "सूचना का पढ़ी गय चिन्हित करैं", + "notification-link-text-view-message": "संदेश देखैं", + "notification-link-text-view-mention": "उल्लेख देखैं", + "notification-link-text-view-page": "पृष्ठ देखा जाय", + "notification-header-thank-you-1-edit": "{{GENDER:$2|आप}} अबहिनै {{GENDER:$2|आपन}} पहिला सम्पादन करा गै; {{GENDER:$2|आप कै}} धन्यवाद, औ स्वागत है !", + "notification-link-text-view-edit": "सम्पादन देखैं", + "notification-link-article-reminder": "पृष्ठ देखा जाय", + "notification-timestamp-today": "आज", + "notification-timestamp-yesterday": "कल्हिँया", + "notification-inbox-filter-read": "पढा जाय", + "notification-inbox-filter-unread": "बिना पढ़े", + "notification-inbox-filter-all": "सगरौ", "echo-notification-alert-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": "कुल पढ़ल चिन्हित कीन जाय", "echo-date-today": "आज", - "echo-date-yesterday": "कल्हिँया", - "echo-load-more-error": "अधिक परिणाम प्राप्त करते समय एक त्रुटि हुई।" + "echo-date-yesterday": "कल्हिँया" } diff --git a/Echo/i18n/ay.json b/Echo/i18n/ay.json index 4ec0cda3..db02099b 100644 --- a/Echo/i18n/ay.json +++ b/Echo/i18n/ay.json @@ -7,7 +7,6 @@ "echo-desc": "Sistema de notificaciones", "prefs-echo": "Notificaciones", "prefs-emailsettings": "Opciones de correo electrónico", - "prefs-displaynotifications": "Opciones de visualización", "prefs-echosubscriptions": "Notificarme sobre estos eventos", "echo-pref-send-me": "Enviarme:", "echo-pref-send-to": "Enviar a:", diff --git a/Echo/i18n/az.json b/Echo/i18n/az.json index 6d76412d..795b65d9 100644 --- a/Echo/i18n/az.json +++ b/Echo/i18n/az.json @@ -1,23 +1,29 @@ { "@metadata": { "authors": [ + "Dağlı95", "Interfase", "Khan27", + "Serkanland", + "Toghrul Rahimli", + "Vesely35", "Wertuose", - "Dağlı95", - "Serkanland" + "Zoranzoki21" ] }, "echo-desc": "Bildiriş sistemi", "prefs-echo": "Bildirişlər", "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-echosubscriptions": "Bu hadisələr barədə mənə bildiriş göndərilsin", + "prefs-echocrosswiki": "Digər vikilərdən bildirişlər", + "prefs-blocknotificationslist": "Səssizə alınmış istifadəçilər", + "echo-mobile-notifications-filter-title": "Bildirişlərin süzgəci", "echo-pref-send-me": "Mənə göndər:", "echo-pref-send-to": "Göndər", "echo-pref-email-format": "Elektron məktub formatı", "echo-pref-web": "Veb", "echo-pref-email": "Elektron məktub", + "echo-pref-push": "Tətbiqlər", "echo-pref-email-frequency-never": "Bildirişlər mənə elektron məktubla göndərilməsin", "echo-pref-email-frequency-immediately": "Ayrı-ayrılıqda bildirişlər", "echo-pref-email-frequency-daily": "Gündəlik bildirişlər", @@ -25,11 +31,30 @@ "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-notifications-blacklist": "Bu istifadəçilərdən gələn bildirişləri göstərmə. ([[mw:Special:MyLanguage/Help:Notifications#mute|daha ətraflı]])", "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}}", + "echo-category-title-edit-user-talk": "Müzakirə səhifəsi {{PLURAL:$1|mesajı|mesajları}}", "echo-category-title-article-linked": "Səhifəyə {{PLURAL:$1|keçid|keçidlər}}", - "echo-category-title-reverted": "Redaktələrin {{PLURAL:$1|1=ləğv|ləğvi}}", + "echo-category-title-reverted": "Redaktələrin geri qaytarılması", + "echo-category-title-mention": "{{PLURAL:$1|Ad qeydetmə|Ad qeydetmələri}}", + "echo-category-title-mention-failure": "Uğursuz {{PLURAL:$1|ad qeydetmə|ad qeydetmələr}}", + "echo-category-title-mention-success": "Uğurlu {{PLURAL:$1|ad qeydetmə|ad qeydetmələr}}", + "echo-category-title-other": "{{PLURAL:$1|Digər}}", + "echo-category-title-system": "{{PLURAL:$1|Sistem}}", + "echo-category-title-user-rights": "{{PLURAL:$1|İstifadəçi hüquqları dəyişikliyi|İstifadəçi hüquqları dəyişiklikləri}}", + "echo-category-title-emailuser": "{{PLURAL:$1|Başqa istifadəçidən gələn elektron məktub|Başqa istifadəçilərdən gələn elektron məktublar}}", + "echo-category-title-thank-you-edit": "Əlamətdar {{PLURAL:$1|redaktə|redaktələr}}", + "echo-pref-tooltip-edit-user-talk": "Müzakirəmə səhifəm redaktə olunduğunda mənə bildiriş göndər.", + "echo-pref-tooltip-article-linked": "Başqa səhifədən yaratdığım səhifəyə keçid verildikdə mənə bildiriş göndər.", + "echo-pref-tooltip-reverted": "Etdiyim redaktə geri qaytarıldıqda mənə bildiriş göndər.", + "echo-pref-tooltip-mention": "İstifadəçi səhifəmə keçid verildikdə mənə bildiriş göndər.", + "echo-pref-tooltip-mention-failure": "Hansısa istifadəçinin adını qeyd edə bilmədiyim zaman mənə bildiriş göndər.", + "echo-pref-tooltip-mention-success": "Başqa istifadəçinin adını qeyd etdikdə mənə bildiriş göndər.", + "echo-pref-tooltip-user-rights": "İstifadəçi hüquqlarımın dəyişdirilməsi barədə mənə bildiriş göndər.", + "echo-pref-tooltip-emailuser": "Kimsə mənə elektron məktub göndərdikdə mənə bildiriş göndər.", + "echo-pref-tooltip-article-reminder": "Soruşduğum zaman bu səhifə haqqında mənə bildiriş göndər.", + "echo-pref-tooltip-thank-you-edit": "Redaktə sayım 1, 10, 100... kimi xüsusi saylara çatdıqda mənə bildiriş göndər.", "notifications": "Bildirişlər", "tooltip-pt-notifications-alert": "Xəbərdarlıqlarınız", "tooltip-pt-notifications-notice": "Bildirişləriniz", @@ -38,44 +63,64 @@ "echo-specialpage-pagefilters-title": "Son hərəkətlər", "echo-specialpage-pagefilters-subtitle": "Oxunmamış bildirişlər olan səhifələr", "echo-none": "Sizə bildiriş yoxdur", - "echo-more-info": "Daha ətraflı", - "echo-feedback": "Rəy", "echo-notification-placeholder-filters": "Bu kriteriyaya uyğun bildirişlər yoxdur.", "echo-notification-markasread-tooltip": "Oxunulmuş kimi işarələ", "echo-notification-more-options-tooltip": "Digər parametrlər", "notification-link-text-expand-all": "Aç", + "notification-link-text-expand-all-count": "$1 bildirişi göstər", "notification-link-text-collapse-all": "Bağla", "notification-link-text-view-message": "Məktuba bax", "notification-link-text-view-mention": "Qeydə bax", "notification-link-text-view-changes": "Dəyişikliklərə bax", "notification-link-text-view-page": "Səhifəyə bax", "notification-header-edit-user-talk": "$1 <strong>müzakirə {{GENDER:$3|səhifənizə}}</strong> bir mesaj {{GENDER:$2|qoyub}}.", + "notification-header-edit-user-talk-with-section": "[[User:$1|$1]] müzakirə səhifənizdə \"[[User talk:$2#$3|$4]]\" başlıqlı mesaj {{GENDER:$1|qoyub}}.", "notification-header-page-linked": "<strong>$4</strong> səhifəsindən <strong>$3</strong> səhifəsinə keçid verildi.", "notification-bundle-header-page-linked": "{{PLURAL:$5||$5 səhifə|100=99+ səhifə}}dən <strong>$3</strong> səhifəsinə keçid verildi.", "notification-link-text-what-links-here": "Bu səhifəyə olan bütün keçidlər", - "notification-header-welcome": "{{SITENAME}} saytına {{GENDER:$2|xoş gəldiniz}}, $1! Sizi burada görməyimizə çox şadıq.", + "notification-header-mention-other": "$1 {{GENDER:$3|sizi}} <strong>$4</strong> səhifəsinin \"<strong>$5</strong>\" bölməsində {{GENDER:$2|qeyd etdi}}.", + "notification-header-mention-other-nosection": "$1 {{GENDER:$3|sizi}} <strong>$4</strong> səhifəsində {{GENDER:$2|qeyd etdi}}.", + "notification-header-mention-user-talkpage-v2": "$1 {{GENDER:$3|sizi}} <strong> $4 adlı {{GENDER:$5|istifadəçinin}} müzakirə səhifəsindəki</strong> \"<strong>$6</strong>\" bölməsində qeyd etdi.", + "notification-header-mention-user-talkpage-nosection": "$1 {{GENDER:$3|sizi}} <strong>$4 adlı {{GENDER:$5|istifadəçinin}} müzakirə səhifəsində</strong> {{GENDER:$2|qeyd etdi}}.", + "notification-header-mention-agent-talkpage": "$1 {{GENDER:$3|sizi}} <strong>öz müzakirə səhifəsindəki</strong> \"<strong>$4</strong>\" bölməsində qeyd etdi.", + "notification-header-mention-agent-talkpage-nosection": "$1 {{GENDER:$3|sizi}} <strong>öz müzakirə səhifəsində</strong> qeyd etdi.", + "notification-header-mention-article-talkpage": "$1 {{GENDER:$3|sizi}} <strong>$4</strong> müzakirə səhifəsinin \"<strong>$5</strong>\" bölməsində {{GENDER:$2|qeyd etdi}}.", + "notification-header-mention-article-talkpage-nosection": "$1 {{GENDER:$3|sizi}} <strong>$4</strong> müzakirə səhifəsində {{GENDER:$2|qeyd etdi}}.", + "notification-header-mention-failure-user-unknown": "<strong>$3</strong> adlı istifadəçi mövcud olmadığından qeyd etmə uğursuz oldu.", + "notification-header-mention-failure-user-anonymous": "<strong>$3</strong> adlı istifadəçi anonim olduğundan qeyd etmə uğursuz oldu.", + "notification-header-mention-success": "{{GENDER:$2|Siz}} <strong>$3</strong> adlı istifadəçini qeyd etdiniz.", + "notification-header-welcome": "{{SITENAME}} saytına {{GENDER:$2|xoş gəldiniz}}, $1! Sizi burada görməyimizə çox şadıq!", + "notification-header-mention-summary": "$1 {{GENDER:$3|sizi}} <strong>$4</strong> səhifəsinin qısa məzmununda {{GENDER:$2|qeyd etdi}}.", "notification-link-text-view-edit": "Redaktəyə bax", "notification-edit-talk-page-email-subject2": "İstifadəçi $1 \"{{SITENAME}}\" saytındakı müzakirə səhifənizdə sizə mesaj yazıb", - "notification-edit-talk-page-email-batch-body-with-section": "{{GENDER:$1|İstifadəçi}} sizin müzakirə səhifənizdə «$2» bölməsində məktub $1 {{GENDER:$1|yazıb}}", - "notification-mention-email-subject": "{{GENDER:$1|İstifadəçi}} sizin adınızı «{{SITENAME}}» səhifəsində $1 {{GENDER:$1|qeyd edib}}", + "notification-mention-email-subject": "{{GENDER:$2|İstifadəçi}} sizi «{{SITENAME}}» səhifəsində $1 {{GENDER:$2|qeyd etdi}}", + "notification-timestamp-ago-seconds": "{{PLURAL:$1|$1 sn}}", + "notification-timestamp-ago-minutes": "{{PLURAL:$1|$1 dq}}", + "notification-timestamp-ago-hours": "{{PLURAL:$1|$1 st}}", + "notification-timestamp-ago-days": "{{PLURAL:$1|$1 g}}", + "notification-timestamp-ago-months": "{{PLURAL:$1|$1 ay}}", + "notification-timestamp-ago-years": "{{PLURAL:$1|$1 il}}", "notification-timestamp-today": "Bu gün", + "notification-timestamp-yesterday": "Dünən", "notification-inbox-filter-read": "Oxunmuş", "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-specialmute-label-mute-notifications": "Bundan gələn bildirişləri səssizləşdirin {{GENDER:$1|istifadəçi}}", + "echo-email-html-footer-preference-link-text": "nizamlamalarınızı nəzərdən keçirin.", + "echo-email-html-footer-with-link": "{{GENDER:$2|Sizə}} hansı e-meylləri göndərdiyimizə nəzarət etmək üçü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", "echo-notification-notice-text-only": "Bildirişlər", "echo-overlay-link": "Bütün bildirişlər", "echo-overlay-title": "<b>Bildirişlər</b>", - "echo-overlay-title-overflow": "<b>Bildirişlər</b> $2 {{PLURAL|$2|oxunmamış|oxunmamışlar}})dan $1 ({{PLURAL|$1|göstərilib|göstəriliblər}}", "echo-mark-all-as-read": "Hamısını oxunmuş kimi qeyd et", + "echo-mark-all-as-read-confirmation": "$1 {{PLURAL:$1|bildiriş|bildiriş}} oxunmuş kimi işarələndi", + "echo-mark-wiki-as-read": "$1da hamısını oxunmuş kimi qeyd et", "echo-date-today": "Bu gün", "echo-date-yesterday": "Dünən", "echo-email-batch-subject-daily": "Sizin {{SITENAME}}-da {{PLURAL:$2|yeni bildiriş|yeni bildirişləriniz|}} var", "echo-email-batch-subject-weekly": "Sizin bu həftə {{SITENAME}}-da {{PLURAL:$2|yeni bildiriş|yeni bildirişləriniz|}} var", - "echo-email-batch-link-text-view-all-notifications": "Bütün bildirişlərə bax" + "echo-email-batch-link-text-view-all-notifications": "Bütün bildirişlərə bax", + "notification-header-foreign-all": "Digər {{PLURAL:$5|vikidən|$5 vikidən}} bildirişlər" } diff --git a/Echo/i18n/azb.json b/Echo/i18n/azb.json index 7b3a6ba3..daa01624 100644 --- a/Echo/i18n/azb.json +++ b/Echo/i18n/azb.json @@ -1,18 +1,17 @@ { "@metadata": { "authors": [ - "Mousa", + "Alp Er Tunqa", "Amir a57", - "Koroğlu", "Ebrahimi-amir", - "Alp Er Tunqa", - "Ilğım" + "Ilğım", + "Koroğlu", + "Mousa" ] }, "echo-desc": "بیلدیریش سیستِمی", "prefs-echo": "بیلدیریلر", "prefs-emailsettings": "ایمیل تنظیملری", - "prefs-displaynotifications": "گؤرونوش سئچَنکلری", "prefs-echosubscriptions": "منه بۇ اوْلایلاری بیلدیر", "echo-pref-send-me": "منه گؤندریلسین:", "echo-pref-send-to": "بۇرایا گؤندریلسین:", @@ -30,30 +29,34 @@ "echo-category-title-article-linked": "صفحه {{PLURAL:$1|باغلانتیسی|باغلانتیلاری}}", "echo-category-title-reverted": "دییشدیرمه قایتاریشی", "echo-category-title-emailuser": "{{PLURAL:$1|آیری ایشلدندن ایمئیل|آیری ایشلدنلردن ایمئیل}}", - "echo-error-no-formatter": "بیلدیری اوچون بیر فورمت تعریفی یوخدور", "notifications": "بیلدیریلر", "tooltip-pt-notifications-alert": "سیزین {{GENDER:|بیلدیریشلرینیز}}", + "tooltip-pt-notifications-notice": "بیلدیریلرینیز", "echo-specialpage": "بیلدیریلر", - "echo-anon": "بیلدیریلری آلماق اوچون، [$1 بیر حساب یارادین] یادا [$2 گیریش ائدین].", + "echo-specialpage-pagefilters-title": "سوْن چالیشمالار", "echo-none": "سیزین بیلدیرینیز یوخدور.", - "echo-more-info": "آرتیقراق بیلگی", - "echo-feedback": "فیدبک", + "notification-link-text-view-changes": "دییشیکلره {{GENDER:$1|باخ}}", "notification-header-edit-user-talk-with-section": "$1 <strong>{{GENDER:$3|سیزین}} دانیشیق صفحهنیزین \"</strong>$4\"<strong>-ده </strong> بیر مساژ {{GENDER:$2|یازیبدیر}}.", "notification-header-mention-other-nosection": "$1 {{GENDER:$3|سیزه}} <strong>$4</strong>-ده {{GENDER:$2|ایشاره ائتدی}}.", + "notification-header-mention-user-talkpage-nosection": "$1, '''$4 {{GENDER:$5|-نین}} دانیشیق صفحهسینده''' {{GENDER:$3|سیزه}} {{GENDER:$2|ایشاره ائتدی}}.", + "notification-header-mention-agent-talkpage": "$1 {{GENDER:$3|سیزه}} <strong> {{GENDER:$2|دانیشیق صفحهسینده}}</strong> <strong>«$4»</strong>بؤلومونده {{GENDER:$2|ایشاره ائتدی}}.", + "notification-header-mention-article-talkpage-nosection": "$1 <strong>$4</strong> دانیشیق صفحهسینده {{GENDER:$3|سیزه}} {{GENDER:$2|ایشاره ائتدی}}.", "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-mention-summary": "$1 {{GENDER:$3|سیزه}} <strong>$4</strong> دییشیک قیساسیندا {{GENDER:$2|ایشاره ائتدی}}.", + "notification-header-thank-you-1-edit": "{{GENDER:$2|سیز}} بیرینجی دییشدیرمهنیزی {{GENDER:$2|ائتدینیز}}؛ {{GENDER:$2|چوخ ساغولون}} و خوش گلدینیز!", + "notification-header-thank-you-1000-edit": "{{GENDER:$2|سیز}} مینیمجی دییشدیرمهنیزی {{GENDER:$2|ائتدینیز}}؛ بؤیوک چالیشمالارینیز اۆچون {{GENDER:$2|ساغ اولون}}.", "notification-header-reverted": "<strong>$3</strong> صفحهسینده {{PLURAL:$4|ائتدیگینیز دییشیکلیک|ائتدیگینیز دییشیکلیکلر}} {{GENDER:$2|قایتاریلیبدیر}}.", - "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", + "notification-inbox-filter-read": "اوْخونموش", + "notification-inbox-filter-unread": "اوْخونمامیش", "echo-notification-alert-text-only": "بیلدیریلر", "echo-notification-notice-text-only": "بیلدیریلر", "echo-overlay-link": "بوتون بیلدیریلر", "echo-overlay-title": "منیم بیلدیریلریم", - "echo-overlay-title-overflow": "منیم بیلدیریلریم ($2 اوخونمامیشدان $1-ی گؤستریلیر)", + "echo-mark-all-as-read": "بۆتونونو اوْخونموش کیمی علامتله", "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> دۇرور.", "echo-email-batch-subject-daily": "سیزین بوگون $1 {{PLURAL:$2|بیلدیرینیز}} واردیر", "echo-email-batch-subject-weekly": "سیزین بو هفته $1 {{PLURAL:$2|بیلدیرینیز}} واردیر" diff --git a/Echo/i18n/ba.json b/Echo/i18n/ba.json index 920caddf..6143e7ea 100644 --- a/Echo/i18n/ba.json +++ b/Echo/i18n/ba.json @@ -1,23 +1,22 @@ { "@metadata": { "authors": [ - "Ләйсән", + "Lizalizaufa", "Sagan", "Азат Хәлилов", - "Танзиля Кутлугильдина", - "Вильданова Гюзель", "Айсар", - "Янмурза Баки", - "Lizalizaufa", "Банат Валеева-Яубасарова", + "Вильданова Гюзель", "Лилиә", - "Рустам Нурыев" + "Ләйсән", + "Рустам Нурыев", + "Танзиля Кутлугильдина", + "Янмурза Баки" ] }, "echo-desc": "Ҡатнашыусыларҙың ваҡиғалар һәм хәбәрҙәр тураһында белдереүҙәр системаһы", "prefs-echo": "Белдереүҙәр", "prefs-emailsettings": "Электрон почта көйләүҙәре", - "prefs-displaynotifications": "Күренеш көйләүҙәре", "prefs-echosubscriptions": "Миңә был ваҡиғалар тураһында хәбәр итергә", "prefs-echocrosswiki": "Кросс-вики белдереүҙәре", "echo-pref-send-me": "миңә ебәрергә", @@ -32,8 +31,6 @@ "echo-pref-email-format-html": "HTML", "echo-pref-email-format-plain-text": "ғәҙәти яҙма", "echo-pref-cross-wiki-notifications": "Башҡа викилар белдереүҙәрен күрһәтергә", - "echo-pref-beta-feature-cross-wiki-message": "Киңәйтелгән белдереүҙәр", - "echo-pref-beta-feature-cross-wiki-description": "Белдереүҙәрҙе ябайыраҡ ҡарарға һәм ойошторорға ярҙам итә. Башҡа викилар хәбәрҙәрен күреү мөмкинлеген биргән кросс-вики белдереүҙәрҙе үҙ эсенә ала. (Был вики-проектта шундай хәбәрҙәр алыр өсөн, тейешле бета-функцияны ҡабыҙыр кәрәк.)", "echo-learn-more": "Күберәк белергә", "echo-log": "һәр кем аңларлыҡ журнал", "echo-new-messages": "Һеҙгә яңы хәбәрҙәр бар", @@ -51,17 +48,13 @@ "echo-pref-tooltip-mention": "Минең ҡатнашыусы битенә башҡалар һылтанған осраҡта миңә хәбәр итергә.", "echo-pref-tooltip-user-rights": "Минең ҡатнашыусы хоҡуҡтарын үҙгәрткән осраҡта миңә хәбәр итергә.", "echo-pref-tooltip-emailuser": "Башҡалар миңә электрон хат ебәргән осраҡта миңә хәбәр итергә.", - "echo-error-no-formatter": "Форматлау белдереү ебәреү өсөн билдәләнмәгән.", "notifications": "Белдереүҙәр", "tooltip-pt-notifications-alert": "{{GENDER:|Һеҙгә}} хәбәр итәләр", "tooltip-pt-notifications-notice": "{{GENDER:|Һеҙҙең}} хәбәрҙәр", "echo-displaynotificationsconfiguration": "Белдереү көйләүҙәрен күрһәтергә", "echo-displaynotificationsconfiguration-notifications-by-category-header": "Категориялар буйынса белдереүҙәр", "echo-specialpage": "Белдереүҙәр", - "echo-anon": "Белдереү алыу өсөн, [$1 иҫәп яҙмаһы булдырығыҙ] йәки [$2 танылығыҙ].", "echo-none": "Һеҙ белдереүҙәр алманығыҙ.", - "echo-more-info": "Ентекләберәк", - "echo-feedback": "Кире бәйләнеш", "echo-api-failure": "Белдереү алып булманы.", "echo-api-failure-cross-wiki": "Юйылған доменға инеү тыйылды.", "echo-notification-placeholder": "Белдереү юҡ.", @@ -106,11 +99,10 @@ "notification-link-text-view-edit": "Үҙгәртеүҙе ҡарарға", "notification-header-reverted": "{{PLURAL:$4|1=Һеҙҙең}} <strong>$3</strong> битендәге төҙәтмә {{GENDER:$2|{{PLURAL:$4|кире ҡағылды}}}}.", "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-edit-talk-page-email-subject2": "{{GENDER:$2|Ҡатнашыусы}} $1 «{{SITENAME}}» сайтында һеҙгә хәбәр ҡалдырҙы.", "notification-page-linked-email-subject": "Һеҙ төҙөгән биткә «{{SITENAME}}» сайтында һылтанма яһалды", - "notification-reverted-email-subject2": "«{{SITENAME}}» Сайттағы {{PLURAL:$3|1=һеҙҙең үҙгәртеүҙәрҙе}} {{GENDER:$1|кемдер}} кире алды.", - "notification-mention-email-subject": "«{{SITENAME}}» сайтында {{GENDER:$2|һеҙҙе}} $1 телгә алды {{GENDER:$1}}", + "notification-reverted-email-subject2": "«{{SITENAME}}» Сайттағы {{PLURAL:$4|1=һеҙҙең үҙгәртеүҙәрҙе}} {{GENDER:$2|кемдер}} кире алды.", + "notification-mention-email-subject": "«{{SITENAME}}» сайтында {{GENDER:$3|һеҙҙе}} $1 телгә алды {{GENDER:$2}}", "notification-user-rights-email-subject": "Һеҙҙең хоҡуҡтарығыҙ сайтта «{{SITENAME}}» үҙгәртелде", "notification-timestamp-ago-seconds": "{{PLURAL:$1|Системалы}}", "notification-timestamp-ago-minutes": "{{PLURAL:$1|$1 мин}}", @@ -123,17 +115,13 @@ "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-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> ({{PLURAL:$1|күрһәтелгән|күрһәтелгәндәр}} $1 $2-нән {{PLURAL:$2|уҡылмағанды|уҡылмағандарҙы}})", "echo-mark-all-as-read": "Барыһын да уҡылған тип билдәләргә", "echo-date-today": "Бөгөн", "echo-date-yesterday": "Кисә", - "echo-load-more-error": "Өҫтәлмә яңылыҡтар алғанда хата сыҡты", "notification-bundle-header-edit-user-talk-v2": "$1 {{PLURAL:$1|яңы хәбәр|100=99+ яңы хәбәр}} һеҙҙең <strong>{{GENDER:$3|фекерләшеү}} битендә</strong>.", "echo-email-batch-subject-daily": "Проектта «{{SITENAME}}» һеҙ {{PLURAL:$2|$2 яңы белдереү|$2 яңы белдереүҙәр|$2 яңы белдереүҙәрҙең|1=яңы белдереү}} алдығыҙ", "echo-email-batch-subject-weekly": "Проектта «{{SITENAME}}» был аҙнала {{PLURAL:$2|$2 яңы белдереү|$2 яңы белдереүҙәр|$2 яңы белдереүҙәрҙең|1=яңы белдереү}} алдығыҙ", diff --git a/Echo/i18n/ban.json b/Echo/i18n/ban.json new file mode 100644 index 00000000..81f9a58d --- /dev/null +++ b/Echo/i18n/ban.json @@ -0,0 +1,8 @@ +{ + "@metadata": { + "authors": [ + "Luh Gede Krismayanti" + ] + }, + "tooltip-pt-notifications-alert": "Atur piuning {{GENDER:|ragané}}" +} diff --git a/Echo/i18n/bbc-latn.json b/Echo/i18n/bbc-latn.json index 2e5a47c7..b322b752 100644 --- a/Echo/i18n/bbc-latn.json +++ b/Echo/i18n/bbc-latn.json @@ -1,8 +1,10 @@ { "@metadata": { "authors": [ + "Salomo Christian Hutajulu", "WBT001Erin" ] }, - "echo-category-title-article-linked": "Alaman pangait" + "echo-category-title-article-linked": "Alaman pangait", + "tooltip-pt-notifications-alert": "Boaboa {{GENDER:|Hamu}}" } diff --git a/Echo/i18n/bcc.json b/Echo/i18n/bcc.json index 19ed6bee..68b81b5e 100644 --- a/Echo/i18n/bcc.json +++ b/Echo/i18n/bcc.json @@ -1,10 +1,12 @@ { "@metadata": { "authors": [ - "Baloch Afghanistan" + "BaRaN6161 TURK", + "Baloch Afghanistan", + "Sultanselim baloch" ] }, - "echo-notification-alert": "{{جمع:$1|هشداران ($1)|هشداران ($1)|100=هشداران (99+)}}", - "echo-date-today": "مروچی", + "echo-notification-alert": "{{PLURAL:$1|هشداران ($1)|هشداران ($1)|100=هشداران (99+)}}", + "echo-date-today": "مرۏچی", "echo-date-yesterday": "زئ" } diff --git a/Echo/i18n/bcl.json b/Echo/i18n/bcl.json index aeb04e22..a3fbc532 100644 --- a/Echo/i18n/bcl.json +++ b/Echo/i18n/bcl.json @@ -1,9 +1,11 @@ { "@metadata": { "authors": [ + "Brazal.dang", "Geopoet", "ShimunUfesoj" ] }, - "tooltip-pt-notifications-alert": "{{GENDER:|Saimong}} mga alerto" + "tooltip-pt-notifications-alert": "{{GENDER:|Saimong}} mga alerto", + "echo-displaysnippet-title": "Bagong notipikasyon" } diff --git a/Echo/i18n/be-tarask.json b/Echo/i18n/be-tarask.json index fffa04f8..c2be2966 100644 --- a/Echo/i18n/be-tarask.json +++ b/Echo/i18n/be-tarask.json @@ -2,19 +2,20 @@ "@metadata": { "authors": [ "Base", - "Renessaince", - "Wizardist", + "Macofe", "Red Winged Duck", - "Macofe" + "Renessaince", + "Vlad5250", + "Wizardist" ] }, "echo-desc": "Сыстэма апавяшчэньня ўдзельнікаў пра падзеі і паведамленьні", "prefs-echo": "Абвесткі", "prefs-emailsettings": "Налады e-mail", - "prefs-displaynotifications": "Налады паказу", "prefs-echosubscriptions": "Паведамляць мне пра гэтыя падзеі", "prefs-echocrosswiki": "Міжвікі-апавяшчэньні", - "prefs-blocknotificationslist": "Ігнаруемыя ўдзельнікі", + "prefs-blocknotificationslist": "Ігнараваныя ўдзельнікі", + "prefs-mutedpageslist": "Старонкі з заглушанымі паведамленьнямі пра спасылкі", "echo-pref-send-me": "Даслаць мне:", "echo-pref-send-to": "Даслаць да:", "echo-pref-email-format": "Фармат e-mail:", @@ -28,22 +29,23 @@ "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-pref-notifications-page-linked-title-muted-list": "Не паказваць паведамленьні «Спасылкі на старонку» для гэтых старонак ([[mw:Special:MyLanguage/Help:Notifications#mute|даведацца болей]]).", "echo-learn-more": "Даведацца болей", "echo-log": "Публічны журнал", "echo-new-messages": "Вы маеце новыя паведамленьні", "echo-category-title-edit-user-talk": "{{PLURAL:$1|1=Паведамленьне|Паведамленьні}} ў гутарках", "echo-category-title-article-linked": "{{PLURAL:$1|1=Спасылка|Спасылкі}} на старонку", - "echo-category-title-reverted": "{{PLURAL:$1|1=Адкат праўкі|Адкаты правак}}", + "echo-category-title-reverted": "{{PLURAL:$1|1=Адкат рэдагаваньня|Адкаты рэдагаваньняў}}", "echo-category-title-mention": "{{PLURAL:$1|1=Згадваньне|Згадваньні}}", "echo-category-title-mention-failure": "{{PLURAL:$1|1=Няўдалая згадка|Няўдалыя згадкі}}", "echo-category-title-mention-success": "{{PLURAL:$1|1=Удалая згадка|Удалыя згадкі}}", "echo-category-title-other": "{{PLURAL:$1|1=Іншае|Іншыя}}", "echo-category-title-system": "{{PLURAL:$1|1=Сыстэмнае|Сыстэмныя}}", + "echo-category-title-system-noemail": "{{PLURAL:$1|1=Сыстэмнае|Сыстэмныя}}", "echo-category-title-user-rights": "{{PLURAL:$1|1=Зьмена|Зьмены}} правоў удзельніка", "echo-category-title-emailuser": "{{PLURAL:$1|1=Ліст электроннай пошты ад іншага ўдзельніка|Лісты электроннай пошты ад іншых удзельнікаў}}", "echo-category-title-article-reminder": "{{PLURAL:$1|напамін з старонкі|напаміны з старонак}}", + "echo-category-title-thank-you-edit": "{{PLURAL:$1|Дасягненьне|Дасягненьні}} рэдагаваньняў", "echo-pref-tooltip-edit-user-talk": "Паведамляць, калі нехта пакідае паведамленьне або адказ на маёй старонцы гутарак.", "echo-pref-tooltip-article-linked": "Паведамляць, калі нехта спасылаецца на створаную мной старонку зь іншай старонкі.", "echo-pref-tooltip-reverted": "Паведамляць, калі нехта адмяняе зробленую мной праўку з дапамогай функцыі адмены ці адкату.", @@ -53,7 +55,6 @@ "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:|Вашыя}} абвесткі", @@ -64,7 +65,6 @@ "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": "Новыя ўдзельнікі", @@ -78,10 +78,7 @@ "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": "Няма паведамленьняў.", @@ -149,17 +146,16 @@ "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-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-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}}", - "notification-edit-talk-page-email-batch-body-with-section": "$1 {{GENDER:$1|пакінуў|пакінула}} паведамленьне на Вашай старонцы гутарак у «$2».", - "notification-page-linked-email-subject": "На старонку, якую вы стварылі, спаслаліся ў {{GRAMMAR:месны|{{SITENAME}}}}", - "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-edit-talk-page-email-subject2": "$1 {{GENDER:$2|пакінуў|пакінула}} Вам паведамленьне на {{SITENAME}}", + "notification-page-linked-email-subject": "На старонку, якую {{GENDER:$3|вы}} стварылі, спаслаліся ў {{GRAMMAR:месны|{{SITENAME}}}}", + "notification-reverted-email-subject2": "$1 {{GENDER:$2|скасаваў|скасавала}} {{PLURAL:$4|1=Вашую праўку|Вашыя праўкі}} на сайце {{SITENAME}}", + "notification-mention-email-subject": "$1 {{GENDER:$2|згадаў|згадала}} {{GENDER:$3|вас}} у {{GRAMMAR:месны|{{SITENAME}}}}", + "notification-user-rights-email-subject": "{{GENDER:$3|Вашыя}} правы ў {{GRAMMAR:месны|{{SITENAME}}}} былі зьмененыя", "notification-timestamp-ago-seconds": "{{PLURAL:$1|$1 с}}", "notification-timestamp-ago-minutes": "{{PLURAL:$1|$1 хв}}", "notification-timestamp-ago-hours": "{{PLURAL:$1|$1 гадз}}", @@ -171,9 +167,6 @@ "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.", @@ -183,13 +176,11 @@ "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}}", diff --git a/Echo/i18n/be.json b/Echo/i18n/be.json index e465eb3d..ca7daabc 100644 --- a/Echo/i18n/be.json +++ b/Echo/i18n/be.json @@ -1,18 +1,17 @@ { "@metadata": { "authors": [ - "Дзяніс Тутэйшы", - "Чаховіч Уладзіслаў", - "Mikalai Udodau", - "Macofe", "Artsiom91", - "Matěj Suchánek" + "Macofe", + "Matěj Suchánek", + "Mikalai Udodau", + "Дзяніс Тутэйшы", + "Чаховіч Уладзіслаў" ] }, "echo-desc": "Сістэма апавяшчэння ўдзельнікаў пра падзеі і паведамленні", "prefs-echo": "Паведамленні", "prefs-emailsettings": "Настройкі эл. пошты", - "prefs-displaynotifications": "Настройкі адлюстравання", "prefs-echosubscriptions": "Паведамляць мне пра гэтыя падзеі", "prefs-echocrosswiki": "Паведамленні з некалькіх вікі-праектаў («крос-вікі»)", "prefs-blocknotificationslist": "Адключаныя ўдзельнікі", @@ -30,6 +29,7 @@ "echo-pref-cross-wiki-notifications": "Паказваць паведамленні з іншых вікі-праектаў", "echo-pref-notifications-blacklist": "Не паказваць паведамленні ад гэтых удзельнікаў ([[mw:Special:MyLanguage/Help:Notifications#mute|даведацца больш]]):", "echo-learn-more": "Даведацца больш", + "echo-log": "Агульнадаступны журнал", "echo-new-messages": "У Вас ёсць новыя паведамленні", "echo-category-title-edit-user-talk": "{{PLURAL:$1|паведамленне|паведамленні}} на старонцы размоў", "echo-category-title-article-linked": "{{PLURAL:$1|спасылка|спасылкі}} на старонкі", @@ -39,8 +39,10 @@ "echo-category-title-mention-success": "{{PLURAL:$1|Паспяховае згадванне|Паспяховыя згадванні}}", "echo-category-title-other": "{{PLURAL:$1|Іншае|Іншыя}}", "echo-category-title-system": "{{PLURAL:$1|Сістэмнае|Сістэмныя}}", + "echo-category-title-system-noemail": "{{PLURAL:$1|Сістэмныя}}", "echo-category-title-user-rights": "{{PLURAL:$1|Змяненне доступаў удзельніка|Змяненні доступаў удзельніка}}", "echo-category-title-emailuser": "{{PLURAL:$1|1=Ліст электроннай пошты ад іншага ўдзельніка|Лісты электроннай пошты ад іншых удзельнікаў}}", + "echo-category-title-thank-you-edit": "{{PLURAL:$1|Дасягненне|Дасягненні}} ў праўках", "echo-pref-tooltip-edit-user-talk": "Паведамляць мне, калі хтосьці пакідае паведамленне ці адказвае на маёй старонцы размоў.", "echo-pref-tooltip-article-linked": "Паведамляць мне, калі хтосьці спасылаецца ў артыкулах на створаную мной старонку", "echo-pref-tooltip-reverted": "Паведамляць мне, калі хтосьці адмяніў маю праўку, выкарыстаўшы функцыю адмены ці адкату.", @@ -50,7 +52,7 @@ "echo-pref-tooltip-user-rights": "Паведамляць мне, калі хтосьці змяняе мае правы доступу.", "echo-pref-tooltip-emailuser": "Паведамляць мне, калі нехта шле мне ліст электроннай поштай.", "echo-pref-tooltip-article-reminder": "Паведаміць мне аб гэтай старонцы, калі я папрашу.", - "echo-error-no-formatter": "Фарматаванне не вызначана для паведамлення", + "echo-pref-tooltip-thank-you-edit": "Паведамляць пра дасягненне мной 1-й, 10-й, 100-й... праўкі.", "notifications": "Паведамленні", "tooltip-pt-notifications-alert": "{{GENDER:|Вашы}} апавяшчэнні", "tooltip-pt-notifications-notice": "{{GENDER:|Вашы}} апавяшчэнні", @@ -61,19 +63,18 @@ "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-cross-wiki": "Доступ к аддаленаму дамену забаронены.", "echo-notification-placeholder": "Няма апавяшчэнняў.", + "echo-notification-placeholder-filters": "Няма апавяшчэнняў, якія адпавядаюць уведзеным крытэрыям.", "echo-notification-loginrequired": "Вы павінны ўвайсці, каб пабачыць паведамленні.", "echo-notification-markasread": "Адзначыць як прачытанае", "echo-notification-markasunread": "Адзначыць як нечытанае", "echo-notification-markasread-tooltip": "Адзначыць як прачытанае", "notification-link-text-expand-all": "Разгарнуць", "notification-link-text-expand-alert-count": "Паказаць {{PLURAL:$1|$1 папярэджанне|$1 папярэджанні|$1 папярэджанняў}}", + "notification-link-text-expand-notice-count": "Паказаць {{PLURAL:$1|$1 паведамленне|$1 паведамленні|$1 паведамленняў}}", "notification-link-text-expand-all-count": "Разгарнуць {{PLURAL:$1|$1 апавяшчэнне|$1 апавяшчэнні|$1 апавяшчэнняў}}", "notification-link-text-collapse-all": "Згарнуць", "notification-link-text-view-message": "Прагляд паведамленняў", @@ -84,37 +85,53 @@ "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": "$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-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-bundle": "{{PLURAL:$3|Згадка|$3 згадкі|$3 згадак}} {{PLURAL:$3|зробленая|зробленыя|зробленых}} {{GENDER:$2|вамі}} на старонцы размоў <strong>$4</strong> не {{PLURAL:$3|можа|могуць}} быць адпраўлены.", + "notification-header-mention-success-bundle": "{{PLURAL:$3|Згадка, зробленая|$3 згадкі, зробленыя|$3 згадак, зробленых}} {{GENDER:$2|вамі}} на старонцы размоў <strong>$4</strong>, адпраўлен{{PLURAL:$3|а|ы}}.", + "notification-header-mention-status-bundle": "{{PLURAL:$3|Абвестка|$3 абвесткі|$3 абвестак}} аб згадцы, {{PLURAL:$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-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|Вам}} за гэта, працягвайце ў тым жа духу!", + "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|Вы}} толькі што зрабілі {{GENDER:$2|сваю}} мільённую праўку; дзякуй {{GENDER:$2|Вам}} за неверагодны ўнёсак!", "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}}»", - "notification-edit-talk-page-email-batch-body-with-section": "{{GENDER:$1|Удзельнік|Удзельніца}} $1 {{GENDER:$1|пакінуў|пакінула}} вам паведамленне на вашай старонцы размоў у раздзеле (тэме) «$2»", + "notification-header-emailuser": "$1 {{GENDER:$1|даслаў|даслала}} Вам ліст.", + "notification-edit-talk-page-email-subject2": "{{GENDER:$2|Удзельнік|Удзельніца}} $1 {{GENDER:$2|пакінуў|пакінула}} вам паведамленне на пляцоўцы «{{SITENAME}}»", "notification-page-linked-email-subject": "На сайце «{{SITENAME}}» з'явілася спасылка на вашу старонку ўдзельніка", - "notification-reverted-email-subject2": "{{GENDER:$1|Хтосьці}} адмяніў {{PLURAL:$3|вашу праўку|вашы праўкі}} на сайце «{{SITENAME}}»", - "notification-mention-email-subject": "{{GENDER:$1|Удзельнік|Удзельніца}} $1 {{GENDER:$1|згадаў|згадала}} вас на сайце «{{SITENAME}}»", + "notification-reverted-email-subject2": "{{GENDER:$2|Хтосьці}} адмяніў {{PLURAL:$4|вашу праўку|вашы праўкі}} на сайце «{{SITENAME}}»", + "notification-mention-email-subject": "{{GENDER:$2|Удзельнік|Удзельніца}} $1 {{GENDER:$2|згадаў|згадала}} вас на сайце «{{SITENAME}}»", "notification-user-rights-email-subject": "Вашы правы на сайце «{{SITENAME}}» былі зменены", "notification-timestamp-today": "Сёння", "notification-timestamp-yesterday": "Учора", "notification-inbox-filter-read": "Чытаныя", "notification-inbox-filter-unread": "Непрачытаныя", "notification-inbox-filter-all": "Усе", - "echo-email-body-default": "У вас ёсць новае паведамленне на сайце «{{SITENAME}}»: $1", - "echo-email-footer-default": "$2 Для кантролю за тым, якія паведамленні адпраўляюцца вам па эл. пошце, праверце свае персанальныя настройкі: {{canonicalurl:{{#special:Preferences}}#mw-prefsection-echo}} $1", + "echo-specialmute-label-mute-notifications": "Не паказваць апавяшчэнні ад гэтага ўдзельніка", "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-mark-all-as-read": "Пазначыць усе як прачытаныя", "echo-mark-wiki-as-read": "Пазначыць усе як прачытаныя ў выбранай вікі: $1", "echo-date-today": "Сёння", "echo-date-yesterday": "Учора", - "echo-load-more-error": "Адбылася памылка пры атрыманні дадатковых вынікаў.", "echo-email-batch-subject-daily": "Вы атрымалі $2 {{PLURAL:$2|новае паведамленне ў|новых паведамлення ў|новых паведамленняў у}} праекце «{{SITENAME}}»", "echo-email-batch-subject-weekly": "На гэтым тыдні вы атрымалі $2 {{PLURAL:$2|новае паведамленне ў|новых паведамлення ў|новых паведамленняў у}} праекце «{{SITENAME}}»", "echo-email-batch-body-intro-daily": "Прывітанне, $1! Вось кароткі агляд сённяшняй дзейнасці ў {{SITENAME}} для вас.", diff --git a/Echo/i18n/bg.json b/Echo/i18n/bg.json index 2e869464..416a5f74 100644 --- a/Echo/i18n/bg.json +++ b/Echo/i18n/bg.json @@ -2,26 +2,31 @@ "@metadata": { "authors": [ "Aceofhearts1968", - "DCLXVI", - "Termininja", "Borislav", - "Лорд Бъмбъри", - "Vodnokon4e", - "V111P", - "Spiritia", + "DCLXVI", + "Iliev", "Ket", - "StanProg", "ShockD", - "Iliev" + "Spiritia", + "StanProg", + "Ted Masters", + "Termininja", + "V111P", + "Vodnokon4e", + "Лорд Бъмбъри" ] }, "echo-desc": "Система за уведомяване на потребителите за събития и съобщения", "prefs-echo": "Известия", "prefs-emailsettings": "Настройки за е-поща", - "prefs-displaynotifications": "Настройки за показване", "prefs-echosubscriptions": "Получаване на известие за следните събития", "prefs-echocrosswiki": "Известия от други уикита", "prefs-blocknotificationslist": "Заглушени потребители", + "prefs-mutedpageslist": "Заглушени страници за известия за връзки към страница", + "prefs-echopollupdates": "Известия на живо", + "echo-mobile-notifications-filter-title": "Филтриране на известията", + "echo-pref-show-poll-updates": "Показване на новите известия веднага след като пристигнат", + "echo-pref-show-poll-updates-help": "Показване броя на непрочетените известия в заглавната лента и показване фрагмент от всяко известие веднага, след като пристигне.", "echo-pref-send-me": "Съдържание на е-писмата:", "echo-pref-send-to": "Адрес за получаване:", "echo-pref-email-format": "Формат на е-писмата:", @@ -35,8 +40,7 @@ "echo-pref-email-format-plain-text": "обикновен текст", "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": "Наблюдавайте и организирайте по-лесно известията си. Включва „cross-wiki“ известия, които ви позволяват да видите съобщенията си от други уикипроекти на едно място. (За да получaвате тези известия в даден уикипроект, трябва да активирате бета функцията в него.)", + "echo-pref-notifications-page-linked-title-muted-list": "Да не се показват известия за връзки към страница за следните страници. ([[mw:Special:MyLanguage/Help:Notifications#mute|научете повече]])", "echo-learn-more": "Повече подробности", "echo-log": "Публичен дневник", "echo-new-messages": "Имате нови съобщения", @@ -48,19 +52,22 @@ "echo-category-title-mention-success": "{{PLURAL:$1|Успешно споменаване|Успешни споменавания}}", "echo-category-title-other": "{{PLURAL:$1|Други}}", "echo-category-title-system": "{{PLURAL:$1|Системни известия}}", + "echo-category-title-system-noemail": "{{PLURAL:$1|Системни известия}}", + "echo-category-title-system-emailonly": "{{PLURAL:$1|Системни известия}}", "echo-category-title-user-rights": "{{PLURAL:$1|Промяна|Промени}} на потребителските права", "echo-category-title-emailuser": "{{PLURAL:$1|Писмо от друг потребител|Писма от други потребители}}", "echo-category-title-article-reminder": "{{PLURAL:$1|напомняне|напомняния}} за страницата", + "echo-category-title-thank-you-edit": "Редактиране на {{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-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": "Не е посочено форматиране на известията.", + "echo-pref-tooltip-thank-you-edit": "Известяване при достигане на 1-вата, 10-ата, 100-тната... ми редакция.", "notifications": "Известия", "tooltip-pt-notifications-alert": "{{GENDER:|Вашите}} известия", "tooltip-pt-notifications-notice": "{{GENDER:|Вашите}} уведомления", @@ -71,7 +78,6 @@ "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": "Нови потребители", @@ -82,13 +88,11 @@ "echo-specialpage-markasread": "Известие: Отбелязване като прочетено", "echo-specialpage-markasread-invalid-id": "Номер на невалидно събитие", "echo-specialpage-pagination-numnotifications": "$1 {{PLURAL:$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-api-failure": "Неуспешно извличане на известия.", "echo-api-failure-cross-wiki": "Отказан е достъп до външен домейн.", "echo-notification-placeholder": "Няма известия.", @@ -119,6 +123,7 @@ "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": "Направена е препратка от $<strong>$1</strong>.", "notification-bundle-header-page-linked": "Направени са препратки от {{PLURAL:$5||$5 страници|100=чрез 99 страници}} до <strong>$3</strong>.", @@ -147,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|Добре дошли}} в {{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|Благодарим}} Ви и моля, продължавайте все така!", @@ -159,13 +165,13 @@ "notification-link-text-view-edit": "Преглед на редакцията", "notification-link-article-reminder": "Преглед на страницата", "notification-header-reverted": "{{PLURAL:$4|Ваша редакция|Ваши редакции}} на страницата <strong>$3</strong> {{GENDER:$2|{{PLURAL:$4|е върната|са върнати}}}}.", + "notification-body-reverted": "$1", "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}} {{PLURAL:$3|бе върната|бяха върнати}}", - "notification-mention-email-subject": "$1 {{GENDER:$2|Ви}} {{GENDER:$1|спомена}} в {{SITENAME}}", - "notification-user-rights-email-subject": "Потребителските Ви права в {{SITENAME}} бяха променени", + "notification-edit-talk-page-email-subject2": "$1 {{GENDER:$3|Ви}} {{GENDER:$2|остави}} съобщение на {{SITENAME}}", + "notification-page-linked-email-subject": "Страницата, създадена от {{GENDER:$3|вас}}, бе свързана с {{SITENAME}}", + "notification-reverted-email-subject2": "{{PLURAL:$3|Вашата редакция|Вашите редакции}} {{PLURAL:$4}} на {{SITENAME}} {{PLURAL:$2|бе върната|бяха върнати}}", + "notification-mention-email-subject": "$1 {{GENDER:$3|Ви}} {{GENDER:$2|спомена}} в {{SITENAME}}", + "notification-user-rights-email-subject": "Потребителските {{GENDER:$3|Ви}} права в {{SITENAME}} бяха променени", "notification-timestamp-ago-seconds": "{{PLURAL:$1|$1 сек}}", "notification-timestamp-ago-minutes": "{{PLURAL:$1|$1 мин}}", "notification-timestamp-ago-hours": "{{PLURAL:$1|$1 ч}}", @@ -177,9 +183,7 @@ "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-specialmute-label-mute-notifications": "Спиране на известията от този потребител", "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.", @@ -189,14 +193,14 @@ "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|Съобщение|Съобщения}}, маркирани като прочетени", "echo-mark-wiki-as-read": "Отбелязване на всички като прочетени в избраната уики: $1", + "echo-displaysnippet-title": "Ново известие", "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>.", + "echo-email-batch-bullet": "•", "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}} за днес.", @@ -204,5 +208,7 @@ "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-foreign-wiki-lang": "$1 – $2", + "echo-badge-count": "{{PLURAL:$1|$1|100=99+}}" } diff --git a/Echo/i18n/bjn.json b/Echo/i18n/bjn.json new file mode 100644 index 00000000..3946bbc4 --- /dev/null +++ b/Echo/i18n/bjn.json @@ -0,0 +1,8 @@ +{ + "@metadata": { + "authors": [ + "Ezagren" + ] + }, + "tooltip-pt-notifications-alert": "Pamadahan {{GENDER:|Pian}}" +} diff --git a/Echo/i18n/bn.json b/Echo/i18n/bn.json index 144108ca..95c7978f 100644 --- a/Echo/i18n/bn.json +++ b/Echo/i18n/bn.json @@ -2,29 +2,33 @@ "@metadata": { "authors": [ "Aftab1995", + "Aftabuzzaman", "Bellayet", + "Bodhisattwa", "Jayantanth", + "Kayser Ahmad", + "Macofe", "Nasir8891", "Sayak Sarkar", - "Aftabuzzaman", - "Macofe", - "Kayser Ahmad", - "Bodhisattwa", "আফতাবুজ্জামান" ] }, "echo-desc": "ঘটনা এবং বার্তা সম্পর্কে ব্যবহারকারীদের বিজ্ঞপ্তি দেয়ার জন্য ব্যবস্থা", "prefs-echo": "বিজ্ঞপ্তি", "prefs-emailsettings": "ইমেইল বিকল্প", - "prefs-displaynotifications": "প্রদর্শনের বিকল্প", "prefs-echosubscriptions": "এই ঘটনা সম্পর্কে আমাকে অবহিত করুন", "prefs-echocrosswiki": "আন্তঃ-উইকি বিজ্ঞপ্তি", "prefs-blocknotificationslist": "নিঃশব্দকৃত ব্যবহারকারী", + "prefs-echopollupdates": "সরাসরি বিজ্ঞপ্তি", + "echo-mobile-notifications-filter-title": "বিজ্ঞপ্তি ছাঁকুন", + "echo-pref-show-poll-updates": "বিজ্ঞপ্তি আসা মাত্র সাথে সাথে তা প্রদর্শন", + "echo-pref-show-poll-updates-help": "শিরোনাম দণ্ডে অপঠিত বিজ্ঞপ্তিগুলির সংখ্যা দেখায় এবং বিজ্ঞপ্তি আসা মাত্র সাথে সাথে তার একটি টুকরো প্রদর্শন করে।", "echo-pref-send-me": "আমাকে পাঠান:", "echo-pref-send-to": "প্রাপক:", "echo-pref-email-format": "ইমেইল বিন্যাস:", "echo-pref-web": "ওয়েব", "echo-pref-email": "ইমেইল", + "echo-pref-push": "অ্যাপ", "echo-pref-email-frequency-never": "আমাকে কোনো ইমেইল বিজ্ঞপ্তি পাঠাবেন না", "echo-pref-email-frequency-immediately": "স্বতন্ত্র বিজ্ঞপ্তি আসা মাত্রই", "echo-pref-email-frequency-daily": "দৈনিক বিজ্ঞপ্তির একটি সারাংশ", @@ -33,8 +37,7 @@ "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-pref-dont-email-read-notifications": "সারসংক্ষেপের ইমেলগুলিতে পঠিত বিজ্ঞপ্তিগুলি অন্তর্ভুক্ত করবেন না", "echo-learn-more": "আরও জানুন", "echo-log": "প্রকাশ্য লগ", "echo-new-messages": "আপনার নতুন বার্তা এসেছে", @@ -43,12 +46,15 @@ "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-mention-success": "{{PLURAL:$1|উল্লেখ|উল্লেখসমূহ}} সফল হলে", "echo-category-title-other": "{{PLURAL:$1|অন্য}}", "echo-category-title-system": "{{PLURAL:$1|সিস্টেম}}", + "echo-category-title-system-noemail": "{{PLURAL:$1|সিস্টেম}}", + "echo-category-title-system-emailonly": "{{PLURAL:$1|সিস্টেম}}", "echo-category-title-user-rights": "{{PLURAL:$1|ব্যবহারকারীর অধিকার পরিবর্তন}}", "echo-category-title-emailuser": "{{PLURAL:$1|অন্য ব্যবহারকারীর কাছ থেকে ইমেইল|অন্যান্য ব্যবহারকারীর কাছ থেকে ইমেইলসমূহ}}", "echo-category-title-article-reminder": "পাতা {{PLURAL:$1|স্মরণ}}", + "echo-category-title-thank-you-edit": "সম্পাদনা {{PLURAL:$1|মাইলফলক|মাইলফলকগুলি}}", "echo-pref-tooltip-edit-user-talk": "আমার আলাপ পাতায় কেউ বার্তা রাখলে বা উত্তর দিলে আমাকে বিজ্ঞপ্তি দিন।", "echo-pref-tooltip-article-linked": "কেউ অন্য পাতায় আমার তৈরি কোনো পাতার লিঙ্ক প্রদান করলে আমাকে বিজ্ঞপ্তি দিন।", "echo-pref-tooltip-reverted": "পূর্বাবস্থা বা রোলব্যাক সরঞ্জাম দিয়ে কেউ আমার সম্পাদনা ফেরত নিলে আমাকে বিজ্ঞপ্তি দিন।", @@ -58,7 +64,7 @@ "echo-pref-tooltip-user-rights": "কেউ আমার ব্যবহারকারীর অধিকার পরিবর্তন করলে আমাকে বিজ্ঞপ্তি দিন।", "echo-pref-tooltip-emailuser": "কেউ আমাকে একটি ইমেল প্রেরণ করলে আমাকে বিজ্ঞপ্তি দিন।", "echo-pref-tooltip-article-reminder": "এই পাতা সম্পর্কে আমাকে অবহিত করুন যখন আমি জিজ্ঞেস করব।", - "echo-error-no-formatter": "বিজ্ঞপ্তির জন্য কোন বিন্যাস সংজ্ঞায়িত করা হয়নি।", + "echo-pref-tooltip-thank-you-edit": "আমি ১ম, ১০ম, ১০০তম... সম্পাদনায় পৌঁছলে আমাকে অবহিত করুন।", "notifications": "বিজ্ঞপ্তি", "tooltip-pt-notifications-alert": "{{GENDER:|আপনার}} অবহিতি", "tooltip-pt-notifications-notice": "{{GENDER:|আপনার}} বিজ্ঞপ্তি", @@ -69,7 +75,6 @@ "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": "নতুন ব্যবহারকারী", @@ -79,21 +84,18 @@ "echo-specialpage-section-markread": "গ্রুপ পঠিত হিসেবে চিহ্নিত করুন", "echo-specialpage-markasread": "বিজ্ঞপ্তি: পঠিত হিসেবে চিহ্নিত করুন", "echo-specialpage-markasread-invalid-id": "অবৈধ ঘটনা আইডি", + "echo-specialpage-pagefilterwidget-aria-label": "উইকি ও পাতার শিরোনাম অনুসারে ছাঁকুন", "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-quotation-marks": "“$1”", "echo-api-failure": "বিজ্ঞপ্তি আনতে ব্যর্থ হয়েছে।", "echo-api-failure-cross-wiki": "রিমোট ডোমেইনে প্রবেশ অস্বীকৃত হয়েছে।", "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": "পঠিত হিসেবে চিহ্নিত করুন", @@ -129,7 +131,7 @@ "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 ''$4'''-এর আলাপ পাতায় {{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|ব্যবহারকারীকে}} উল্লেখ করার চেষ্টা করেছেন। উপরে উল্লেখিত যেগুলি এই সীমা অতিক্রম করেছে সেগুলি পাঠানো হয়নি।", @@ -159,12 +161,11 @@ "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-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 {{GENDER:$2|আপনাকে}} {{SITENAME}}-এ {{GENDER:$1|উল্লেখ করেছেন}}", - "notification-user-rights-email-subject": "{{SITENAME}}-এ আপনার ব্যবহারকারী অধিকার পরিবর্তন হয়েছে", + "notification-edit-talk-page-email-subject2": "$1 {{SITENAME}}-এ {{GENDER:$3|আপনাকে}} একটি বার্তা {{GENDER:$2|দিয়েছেন}}", + "notification-page-linked-email-subject": "{{GENDER:$3|আপনার}} তৈরিকৃত একটি পাতা {{SITENAME}} সাইটে সংযুক্ত হয়েছে।", + "notification-reverted-email-subject2": "{{SITENAME}}-এ {{GENDER:$3|আপনার}} করা {{PLURAL:$4|সম্পাদনা|সম্পাদনাগুলি}} {{GENDER:$2|পূর্বাবস্থায়}} নেয়া হয়েছে", + "notification-mention-email-subject": "$1 {{GENDER:$2|আপনাকে}} {{SITENAME}} সাইটে {{GENDER:$3|উল্লেখ করেছেন}}", + "notification-user-rights-email-subject": "{{SITENAME}}-এ {{GENDER:$3|আপনার}} ব্যবহারকারী অধিকার পরিবর্তিত হয়েছে", "notification-timestamp-ago-seconds": "{{PLURAL:$1|$1 সে}}", "notification-timestamp-ago-minutes": "{{PLURAL:$1|$1 মি}}", "notification-timestamp-ago-hours": "{{PLURAL:$1|$1 ঘণ্টা}}", @@ -176,9 +177,7 @@ "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-specialmute-label-mute-notifications": "এই {{GENDER:$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।", @@ -188,18 +187,17 @@ "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": "$1টি {{PLURAL:$1|বিজ্ঞপ্তি}} পঠিত হিসেবে করা হয়েছে", "echo-mark-wiki-as-read": "নির্বাচিত উইকিতে সব পঠিত হিসেবে চিহ্নিত করুন: $1", + "echo-displaysnippet-title": "নতুন বিজ্ঞপ্তি", "echo-date-today": "আজ", "echo-date-yesterday": "গতকাল", - "echo-load-more-error": "আরও ফলাফল আনার সময় কোনো ত্রুটি হয়েছে।", "notification-bundle-header-edit-user-talk-v2": "আপনি <strong>{{GENDER:$3|আপনার}} আলাপ পাতায়</strong> {{PLURAL:$1|একটি|$1টি|100=৯৯+টি}} নতুন বার্তা পেয়েছেন।", - "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-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": "সকল বিজ্ঞপ্তি দেখান", "notification-header-foreign-alert": "{{PLURAL:$5|আরেকটি উইকি থেকে|$5টি উইকি থেকে}} আরো অবহিতি", "notification-header-foreign-notice": "{{PLURAL:$5|আরেকটি উইকি|$5টি উইকি}} থেকে আরো বিজ্ঞপ্তি", diff --git a/Echo/i18n/bqi.json b/Echo/i18n/bqi.json index 64f27430..a392be60 100644 --- a/Echo/i18n/bqi.json +++ b/Echo/i18n/bqi.json @@ -4,5 +4,68 @@ "Mogoeilor" ] }, - "tooltip-pt-notifications-alert": "{{GENDER:|ايسا}} آلشدا" + "prefs-echo": "ڤارسیاریٱل", + "prefs-emailsettings": "گوزیناْیٱل ٱنجوماناماْ", + "echo-pref-send-me": "بیٛسی کو سیم:", + "echo-pref-send-to": "بیٛسی کو سی:", + "echo-pref-email-format": "فورمت ٱنجوماناماْ:", + "echo-pref-web": "دیارگٱ", + "echo-pref-email": "ٱنجوماناماْ", + "echo-pref-email-format-html": "اْچ تی اْم اْل", + "echo-pref-email-format-plain-text": "نفشداْ ساڌاْ", + "echo-learn-more": "بیشتر یاڌ بگرین", + "echo-log": "پهرستنوماْ کولی", + "echo-new-messages": "ایسا یٱ پاٛیغوم تازاْ دارین", + "echo-category-title-edit-user-talk": "بٱلگاْ چٱک چناْ {{PLURAL:$1|پیغوم|پیغومٱل}}", + "echo-category-title-article-linked": "$1 {{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|سیستوم}}", + "notifications": "ڤارسیاریٱل", + "tooltip-pt-notifications-alert": "{{GENDER:|ایسا}} آلشدکاریٱل", + "tooltip-pt-notifications-notice": "{{GENDER:|ڤارسیاریٱل}} ایسا", + "echo-displaynotificationsconfiguration-sorting-by-section-header": "میزوݩ کردن ری جۊر", + "echo-displaynotificationsconfiguration-enabled-default-existing-users-legend": "کاریارٱلی کاْ هڌسوݩ", + "echo-displaynotificationsconfiguration-enabled-default-new-users-legend": "کاریارٱل تازاْ", + "echo-specialpage": "ڤارسیاریٱل", + "echo-specialpage-pagination-numnotifications": "$1 {{PLURAL:$1|ڤارسیاری|ڤارسیاریٱل}}", + "echo-specialpage-pagefilters-title": "کونشتکاریٱل ایسنی", + "echo-none": "ایسا هیژ ڤارسیاری نارین.", + "echo-notification-markasread": "نشوݩ دار کردن چی یٱ چی خونداْ ڤابیڌاْ", + "echo-notification-markasunread": "نشوݩ دار کردن چی یٱ چی خونداْ نٱڤابیڌاْ", + "echo-notification-markasread-tooltip": "نشوݩ دار کردن چی یٱ چی خونداْ ڤابیڌاْ", + "echo-notification-more-options-tooltip": "گوزیناْیٱل بیشتر", + "notification-link-text-expand-all": "گٱپ کلوݩ کردن", + "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-page": "دیڌن بٱلگاْ", + "notification-compact-header-page-linked": "هومپاٛیڤٱند ڤابیڌاْ ز <strong>$1</strong>.", + "notification-link-text-what-links-here": "تٱموم هومپاٛیڤٱندٱل ای بٱلگاْ", + "notification-compact-header-mention-failure-user-unknown": "<strong>چونو نوم کاریاریی نیڌس:</strong> $1", + "notification-welcome-linktext": "خوش ٱڤوڌین", + "notification-link-thank-you-edit": "{{GENDER:$1|ایسا}} آلشدکاری اْکونین", + "notification-link-text-view-edit": "دیڌن آلشدکاری", + "notification-link-article-reminder": "دیڌن بٱلگاْ", + "notification-header-emailuser": "$1 {{GENDER:$2|یٱ ٱنجوماناماْ}} سی ایسا بیٛسی ڤابیڌ.", + "notification-user-rights-email-subject": "هوقۊق کاریاری ایسا میٛن {{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|$1mo}}", + "notification-timestamp-ago-years": "{{PLURAL:$1|$1yr}}", + "notification-timestamp-today": "ٱمرۊ", + "notification-timestamp-yesterday": "دۊش", + "notification-inbox-filter-read": "خوندن", + "notification-inbox-filter-unread": "نٱخونداْ", + "notification-inbox-filter-all": "هٱماْ", + "echo-notification-notice-text-only": "ڤارسیاری کردن", + "echo-overlay-link": "تٱموم ڤارسیاریٱل", + "echo-overlay-title": "<b>ڤارسیاریٱل</b>", + "echo-date-today": "ٱمرۊ", + "echo-date-yesterday": "دۊش" } diff --git a/Echo/i18n/br.json b/Echo/i18n/br.json index 81edc522..9d142a92 100644 --- a/Echo/i18n/br.json +++ b/Echo/i18n/br.json @@ -3,15 +3,15 @@ "authors": [ "Fohanno", "Fulup", - "Y-M D", "Gwenn-Ael", - "Pymouss" + "Huñvreüs", + "Pymouss", + "Y-M D" ] }, "echo-desc": "Reizhiad da gas keloù d'an implijerien diwar-benn darvoudoù ha kemennadennoù", "prefs-echo": "Kemennoù", "prefs-emailsettings": "Dibarzhioù postel", - "prefs-displaynotifications": "Dibarzhioù diskwel", "prefs-echosubscriptions": "Kas keloù din diwar-benn an darvoudoù-mañ", "prefs-echocrosswiki": "Kemennoù etrewiki", "echo-pref-send-me": "Kas din :", @@ -26,22 +26,24 @@ "echo-pref-email-format-html": "HTML", "echo-pref-email-format-plain-text": "Testenn blaen", "echo-pref-cross-wiki-notifications": "Diskouez kemennoù eus wikioù all", - "echo-pref-beta-feature-cross-wiki-message": "Kemennoù gwellaet", "echo-learn-more": "Gouzout hiroc'h", "echo-new-messages": "Kemennadennoù nevez hoc'h eus", "echo-category-title-edit-user-talk": "{{PLURAL:$1|Ur gemennadenn|Kemennadennoù}} er bajenn gaozeal", "echo-category-title-article-linked": "Pajenn {{PLURAL:$1|link}}", "echo-category-title-reverted": "{{PLURAL:$1|Kemm|Kemmoù}} nullet", "echo-category-title-mention": "{{PLURAL:$1|Meneg}}", + "echo-category-title-mention-failure": "Menegoù c’hwitet", + "echo-category-title-mention-success": "Menegoù deuet da benn", "echo-category-title-other": "{{PLURAL:$1|All}}", "echo-category-title-system": "{{PLURAL:$1|Sistem}}", "echo-category-title-emailuser": "{{PLURAL:$1|Postel digant un implijer all|Posteloù digant implijerien all}}", + "echo-category-title-thank-you-edit": "{{PLURAL:$1|Maen-bonn|Vein-bonn}} kemmañ", "echo-pref-tooltip-edit-user-talk": "Kemenn din pa vez postet ur gemennadenn pe pa vez respontet din gant unan bennak war ma fajenn gaozeal.", "echo-pref-tooltip-article-linked": "Ma c'hemenn pa vez graet ul liamm war-du ur bajennn am eus krouet gant unan bennak adalek pajenn ur pennad.", "echo-pref-tooltip-reverted": "Kemenn din pa vez distaolet ur c'hemm graet ganin, en ur ober gant an ostilh disteurel pe distreiñ.", "echo-pref-tooltip-mention": "Kelaouiñ ac'hanon pa vez menneget va fajenn implijer gant unan bennak.", + "echo-pref-tooltip-mention-failure": "Kemenn ac’hanon pa n’am eus ket gallet menegiñ unan bennak.", "echo-pref-tooltip-user-rights": "Kelaouiñ ac'hanon pa vez kemmet va gwirioù implijer gant unan bennak.", - "echo-error-no-formatter": "N'eus bet spisaet furmad ebet evit ar c'hemennadennoù.", "notifications": "Kemennoù", "tooltip-pt-notifications-alert": "{{GENDER:|Ho}} kemennoù-diwall", "tooltip-pt-notifications-notice": "{{GENDER:|Ho}} kemennoù", @@ -54,12 +56,10 @@ "echo-displaynotificationsconfiguration-mandatory-notification-methods-header": "Rekis eo kaout hentennoù kemenn", "echo-specialpage": "Kemennoù", "echo-specialpage-markasread": "Kemenn : merket evel lennet", + "echo-specialpage-pagefilterwidget-aria-label": "Silañ dre wiki ha titloù pajennoù", "echo-specialpage-pagination-numnotifications": "$1 {{PLURAL:$1|c'hemenn|kemenn}}", "echo-specialpage-pagefilters-subtitle": "Pajennoù enno kemennoù n'int ket bet lennet", - "echo-anon": "Evit resev kemennoù, [$1 krouit ur gont] pe [$2 kevreit].", "echo-none": "N'ho peus resevet kemenn ebet.", - "echo-more-info": "Gouzout hiroc'h", - "echo-feedback": "Sonjoù", "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ù.", @@ -68,33 +68,36 @@ "notification-link-text-collapse-all": "Pakañ", "notification-link-text-view-message": "Gwelet ar gemennadenn", "notification-link-text-view-mention": "Gwelet ar meneg", + "notification-link-text-view-mention-failure": "Gweloat {{PLURAL:$1|menegoù|meneg}}", "notification-link-text-view-changes": "Diskouez ar c'hemmoù", "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-edit-user-talk-with-section": "$1 {{GENDER:$2|en deus|he deus}} skrivet ur gemennadenn war <strong>{{GENDER:$3|ho}} pajenn gaozeal</strong> er rann \"<strong>$4</strong>\".", + "notification-header-mention-other": "Meneget oc’h bet gant $1 war bajenn <strong>$4</strong> e \"<strong>$5</strong>\".", + "notification-header-mention-user-talkpage-v2": "Meneget oc’h bet gant $1 war <strong>bajenn gaozeal $4</strong> e \"<strong>$6</strong>\".", + "notification-header-mention-agent-talkpage": "Meneget oc’h bet gant $1 war <strong>{{GENDER:$2|e bajenn|he fajenn|ar bajenn}} kaozeal e rannbennad \"<strong>$4</strong>\".", + "notification-header-mention-article-talkpage": "Meneget oc’h bet gant $1 war ar bajenn gaozeaz <strong>$4</strong> e \"<strong>$5</strong>\".", + "notification-compact-header-mention-failure-user-anonymous": "<strong>IPoù ne c’hell ket bezañ meneget:</strong> $1", + "notification-compact-header-mention-success": "<strong>Meneget ho peus:</strong> $3", "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-mention-summary": "Meneget oc’h bet gant $1 e diverradenn ur c’hemm war bajenn <strong>$4</strong>.", "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\".", + "notification-edit-talk-page-email-subject2": "$1 {{GENDER:$2|en|he}} deus laosket ur gemennadenn ganeoc’h war {{SITENAME}}", "notification-page-linked-email-subject": "Liammet eo bet ho pajenn ouzh {{SITENAME}}", - "notification-mention-email-subject": "$1 {{GENDER:$1|en deus|he deus}} ho meneget war {{SITENAME}}", + "notification-mention-email-subject": "Meneget oc’h bet gant $1 war {{SITENAME}}", "notification-user-rights-email-subject": "Cheñchet eo ho kwirioù implijer war {{SITENAME}}", "notification-inbox-filter-read": "Lennet", "notification-inbox-filter-unread": "Anlennet", - "echo-email-body-default": "Ur gemennadenn nevez zo ganeoc'h war {{SITENAME}}:\n\n$1", - "echo-email-footer-default": "$2\n\nEvit kontrollañ peseurt posteloù a gasomp deoc'h, gwiriit ho penndibaboù : {{canonicalurl:{{#special:Preferences}}#mw-prefsection-echo}}\n\n$1", "echo-notification-alert-text-only": "Kemennoù-diwall", "echo-overlay-link": "An holl gemennoù", "echo-overlay-title": "<b>Kemennoù</b>", - "echo-overlay-title-overflow": "<b>{{PLURAL:$1|Kemenn|Kemennoù}}</b> (o tiskouez $1 diwar $2 hep lenn)", "echo-mark-all-as-read": "Merkañ an holl evel lennet", "echo-mark-all-as-read-confirmation": "$1 {{PLURAL:$1|c'hemenn|kemenn}} merket evel lennet", "echo-date-today": "Hiziv", "echo-date-yesterday": "Dec'h", - "echo-load-more-error": "Ur fazi zo bet en ur glask disoc'hoù all.", "echo-email-batch-subject-daily": "{{PLURAL:$2|Ur c'hemenn|Kemennoù}} nevez hoc'h eus war {{SITENAME}}", "echo-email-batch-subject-weekly": "{{PLURAL:$2|Ur c'hemenn|Kemennoù}} nevez hoc'h eus war {{SITENAME}} er sizhun-mañ", "echo-email-batch-body-intro-daily": "Demat deoc'h $1,\nSetu amañ un diverradur eus obererezh an deiz war {{SITENAME}} evidoc'h.", diff --git a/Echo/i18n/bs.json b/Echo/i18n/bs.json index 0990332f..8ea30304 100644 --- a/Echo/i18n/bs.json +++ b/Echo/i18n/bs.json @@ -4,20 +4,19 @@ "CERminator", "DzWiki", "Edinwiki", - "Palapa", "KWiki", + "Macofe", + "Palapa", "Semso98", - "Srdjan m", - "Macofe" + "Srdjan m" ] }, "echo-desc": "Sistem za obavještavanje korisnika o dešavanjima i porukama", "prefs-echo": "Obavještenja", "prefs-emailsettings": "Opcije e-pošte", - "prefs-displaynotifications": "Opcije prikaza", "prefs-echosubscriptions": "Obavijesti me o ovim događajima", "prefs-echocrosswiki": "Obavještenja s drugih wikija", - "prefs-blocknotificationslist": "Crna lista", + "prefs-blocknotificationslist": "Ignorirani korisnici", "echo-pref-send-me": "Pošalji mi:", "echo-pref-send-to": "Pošalji na:", "echo-pref-email-format": "Format e-pošte:", @@ -30,9 +29,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: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-pref-notifications-blacklist": "Ne prikazuj obavještenja od ovih korisnika. ([[mw:Special:MyLanguage/Help:Notifications#mute|detaljnije]])", "echo-learn-more": "Saznajte više", "echo-log": "Javni zapisnik", "echo-new-messages": "Imate nove poruke", @@ -54,7 +51,6 @@ "echo-pref-tooltip-mention-success": "Obavijesti me kad neko uspješno dobije obavještenje nakon što ih spomenem.", "echo-pref-tooltip-user-rights": "Obavijesti me kad neko promijeni moja korisnička prava.", "echo-pref-tooltip-emailuser": "Obavijesti me kad mi neko pošalje e-poruku.", - "echo-error-no-formatter": "Nema formatiranja određenog za obavještavanje.", "notifications": "Obavještenja", "tooltip-pt-notifications-alert": "{{GENDER:|Vaša}} obavještenja", "tooltip-pt-notifications-notice": "{{GENDER:|Vaša}} sitna obavještenja", @@ -65,7 +61,6 @@ "echo-displaynotificationsconfiguration-sorting-by-section-legend": "U koji će se dio svaka vrsta obavještenja sortirati", "echo-displaynotificationsconfiguration-available-notification-methods-header": "Dozvoljene metode za obavještavanje", "echo-displaynotificationsconfiguration-available-notification-methods-by-category-legend": "Koje su metode dozvoljene za svaku kategoriju", - "echo-displaynotificationsconfiguration-available-notification-methods-by-type-legend": "Koje su metode podržane za svaku vrstu; odnosi se samo na vrste unutar kategorija koje su sakrivene od postavki", "echo-displaynotificationsconfiguration-enabled-default-header": "Uključeno po podrazumijevanim postavkama", "echo-displaynotificationsconfiguration-enabled-default-existing-users-legend": "Postojeći korisnici", "echo-displaynotificationsconfiguration-enabled-default-new-users-legend": "Novi korisnici", @@ -79,10 +74,7 @@ "echo-specialpage-pagefilters-title": "Nedavna aktivnost", "echo-specialpage-pagefilters-subtitle": "Stranice s nepročitanim obavještenjima", "notificationsmarkread-legend": "Označi obavještenje kao pročitano", - "echo-anon": "Da biste primili obaveštenja, morate se [[Special:UserLogin|prijaviti]] ili [[Special:Userlogin/signup|napraviti račun]].", "echo-none": "Nemate obavještenja", - "echo-more-info": "Više informacija", - "echo-feedback": "Povratna informacija", "echo-api-failure": "Dobavljanje obavještenja nije uspjelo.", "echo-api-failure-cross-wiki": "Odbijen pristup vanjskoj domeni.", "echo-notification-placeholder": "Nema obavještenja.", @@ -150,11 +142,10 @@ "notification-link-text-view-edit": "Prikaži izmjenu", "notification-header-reverted": "{{PLURAL:$4|Vaša izmjena na <strong>$3</strong> {{GENDER:$2|poništena}} je|Vaše izmjene na <strong>$3</strong> {{GENDER:$2|poništene}} su}}.", "notification-header-emailuser": "$1 Vam je {{GENDER:$2|poslao|poslala}} e-poruku.", - "notification-edit-talk-page-email-subject2": "$1 Vam je {{GENDER:$1|ostavio|ostavila}} poruku na {{GRAMMAR:dativ|{{SITENAME}}}}", - "notification-edit-talk-page-email-batch-body-with-section": "$1 Vam je {{GENDER:$1|ostavio|ostavila}} poruku na Vašoj stranici za razgovor u \"$2\".", + "notification-edit-talk-page-email-subject2": "$1 Vam je {{GENDER:$2|ostavio|ostavila}} poruku na {{GRAMMAR:dativ|{{SITENAME}}}}", "notification-page-linked-email-subject": "Stranica koju ste napravila povezana je na {{GRAMMAR:dativ|{{SITENAME}}}}", - "notification-reverted-email-subject2": "{{PLURAL:$3|Vaša izmjena je {{GENDER:$1|poništena}}|Vaše izmjene su {{GENDER:$1|poništene}}}} na {{GRAMMAR:dativ|{{SITENAME}}}}", - "notification-mention-email-subject": "$1 {{GENDER:$2|Vas}} je {{GENDER:$1|spomenuo|spomenula}} na {{GRAMMAR:dativ|{{SITENAME}}}}", + "notification-reverted-email-subject2": "{{PLURAL:$4|Vaša izmjena je {{GENDER:$2|poništena}}|Vaše izmjene su {{GENDER:$2|poništene}}}} na {{GRAMMAR:dativ|{{SITENAME}}}}", + "notification-mention-email-subject": "$1 {{GENDER:$3|Vas}} je {{GENDER:$2|spomenuo|spomenula}} na {{GRAMMAR:dativ|{{SITENAME}}}}", "notification-user-rights-email-subject": "Vaša korisnička prava na {{GRAMMAR:dativ|{{SITENAME}}}} su promijenjena", "notification-timestamp-ago-seconds": "{{PLURAL:$1|$1 sek.}}", "notification-timestamp-ago-minutes": "{{PLURAL:$1|$1 min.}}", @@ -167,9 +158,7 @@ "notification-inbox-filter-read": "Pročitano", "notification-inbox-filter-unread": "Nepročitano", "notification-inbox-filter-all": "Sve", - "echo-email-body-default": "Imate novo obavještenje na {{GRAMMAR:dativ|{{SITENAME}}}}: \n\n$1", - "echo-email-footer-default-html": "Da biste promijenili koje Vam e-poruke šaljemo, <a href=\"$2\" style=\"text-decoration:none; color: #3868B0;\">provjerite svoje postavke</a>.<br />\n$1", - "echo-email-footer-default": "$2\n\nDa biste promijenili koje Vam e-poruke šaljemo, provjerite svoje postavke:\n{{canonicalurl:{{#special:Preferences}}#mw-prefsection-echo}}\n\n$1", + "echo-specialmute-label-mute-notifications": "Utišaj obavještenja od korisnika", "echo-email-plain-footer": "Da biste promijenili koje {{GENDER:$1|Vam}} e-poruke šaljemo, provjerite {{GENDER:$1|svoje}} postavke:", "echo-email-html-footer-preference-link-text": "provjerite {{GENDER:$1|svoje}} postavke", "echo-email-html-footer-with-link": "Da biste promijenili koje {{GENDER:$2|Vam}} e-poruke šaljemo, $1.", @@ -179,13 +168,11 @@ "echo-notification-notice-text-only": "Sitna obavještenja", "echo-overlay-link": "Sva obavještenja", "echo-overlay-title": "<b>Obavještenja</b>", - "echo-overlay-title-overflow": "<b>{{PLURAL:$1|Obavještenja}}</b> (prikaz $1 od $2 nepročitanih)", "echo-mark-all-as-read": "Označi sve kao pročitano", "echo-mark-all-as-read-confirmation": "$1 {{PLURAL:$1|obavještenje označeno kao pročitano|obavještenja označena kao pročitana}}", "echo-mark-wiki-as-read": "Označi sve kao pročitano u izabranom wikiju: $1", "echo-date-today": "Danas", "echo-date-yesterday": "Jučer", - "echo-load-more-error": "Greška se pojavila za vrijeme dobavljanja više rezultata.", "notification-bundle-header-edit-user-talk-v2": "Imate {{PLURAL:$1|1=jednu novu poruku|$1 nove poruke|$1 novih poruka|100=više od 99 novih poruka}} na <strong>{{GENDER:$3|Vašoj}} stranici za razgovor</strong>.", "echo-email-batch-subject-daily": "Imate {{PLURAL:$2|novo obavještenje|nova obavještenja}} na {{GRAMMAR:dativ|{{SITENAME}}}}", "echo-email-batch-subject-weekly": "Imate {{PLURAL:$2|novo obavještenje|nova obavještenja}} na {{GRAMMAR:dativ|{{SITENAME}}}} ove sedmice", diff --git a/Echo/i18n/ca.json b/Echo/i18n/ca.json index d882c8a8..cf0892eb 100644 --- a/Echo/i18n/ca.json +++ b/Echo/i18n/ca.json @@ -2,22 +2,21 @@ "@metadata": { "authors": [ "Arnaugir", + "Fitoschido", + "Lluis tgn", + "Nemo bis", "Papapep", "Pitort", "QuimGil", - "Vriullop", - "පසිඳු කාවින්ද", - "Fitoschido", "Ssola", - "Nemo bis", "Toniher", - "Lluis tgn" + "Vriullop", + "පසිඳු කාවින්ද" ] }, "echo-desc": "Sistema per notificar als usuaris sobre esdeveniments i missatges", "prefs-echo": "Notificacions", "prefs-emailsettings": "Opcions de correu electrònic", - "prefs-displaynotifications": "Opcions de visualització", "prefs-echosubscriptions": "Notifica'm sobre aquests esdeveniments", "prefs-echocrosswiki": "Notificacions interwiki", "prefs-blocknotificationslist": "Usuaris silenciats", @@ -33,8 +32,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-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ó", "echo-log": "Registre públic", "echo-new-messages": "Teniu nous missatges", @@ -58,7 +55,6 @@ "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", "tooltip-pt-notifications-notice": "{{GENDER:|Els vostres}} avisos", @@ -69,7 +65,6 @@ "echo-displaynotificationsconfiguration-sorting-by-section-legend": "En quina secció es classifica cada tipus de notificació", "echo-displaynotificationsconfiguration-available-notification-methods-header": "Mètodes de notificació permesos", "echo-displaynotificationsconfiguration-available-notification-methods-by-category-legend": "Quins mètodes de notificació s'usen per a cada categoria", - "echo-displaynotificationsconfiguration-available-notification-methods-by-type-legend": "Quins mètodes de notificació s'usen per a cada tipus; només s'aplica als tipus en categories que estan ocultes en les preferències", "echo-displaynotificationsconfiguration-enabled-default-header": "Habilitat per defecte", "echo-displaynotificationsconfiguration-enabled-default-existing-users-legend": "Usuaris existents", "echo-displaynotificationsconfiguration-enabled-default-new-users-legend": "Usuaris nous", @@ -83,10 +78,7 @@ "echo-specialpage-pagefilters-title": "Activitat recent", "echo-specialpage-pagefilters-subtitle": "Pàgines amb notificacions sense llegir", "notificationsmarkread-legend": "Marca la notificació com a llegida", - "echo-anon": "Per a rebre notificacions, [[Special:Userlogin/signup|creeu un compte]] o [[Special:UserLogin|registreu-vos]].", "echo-none": "No teniu cap notificació.", - "echo-more-info": "Més informació", - "echo-feedback": "Comentaris", "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ó.", @@ -152,11 +144,10 @@ "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».", + "notification-edit-talk-page-email-subject2": "$1 us {{GENDER:$2|ha deixat}} un missatge al projecte {{SITENAME}}", "notification-page-linked-email-subject": "Una pàgina que vau crear s'ha enllaçat en el projecte {{SITENAME}}", - "notification-reverted-email-subject2": "{{PLURAL:$3|S'ha revertit la vostra edició|S'han revertit les vostres edicions}} {{GENDER:$1|al projecte}} {{SITENAME}}", - "notification-mention-email-subject": "$1 {{GENDER:$2|us}} ha {{GENDER:$1|mencionat}} en el projecte {{SITENAME}}", + "notification-reverted-email-subject2": "{{PLURAL:$4|S'ha revertit la vostra edició|S'han revertit les vostres edicions}} {{GENDER:$2|al projecte}} {{SITENAME}}", + "notification-mention-email-subject": "$1 {{GENDER:$3|us}} ha {{GENDER:$2|mencionat}} en el projecte {{SITENAME}}", "notification-user-rights-email-subject": "Els vostres permisos d'usuari han canviat a {{SITENAME}}", "notification-timestamp-ago-seconds": "{{PLURAL:$1|$1 s}}", "notification-timestamp-ago-minutes": "{{PLURAL:$1|$1m}}", @@ -169,8 +160,6 @@ "notification-inbox-filter-read": "Llegides", "notification-inbox-filter-unread": "No llegides", "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)}}", @@ -179,13 +168,11 @@ "echo-notification-notice-text-only": "Avisos", "echo-overlay-link": "Totes les notificacions", "echo-overlay-title": "<b>Notificacions</b>", - "echo-overlay-title-overflow": "<b>{{PLURAL:$1|Notificació|Notificacions}}</b> (mostrant $1 de $2 no llegides)", "echo-mark-all-as-read": "Marca'ls tots com a llegits", "echo-mark-all-as-read-confirmation": "$1 {{PLURAL:$1|notificació marcada com a llegida|notificacions marcades com a llegides}}", "echo-mark-wiki-as-read": "Marca-les totes com a llegides en el wiki seleccionat: $1", "echo-date-today": "Avui", "echo-date-yesterday": "Ahir", - "echo-load-more-error": "S'ha produït un error en obtenir més resultats.", "echo-email-batch-subject-daily": "Teniu {{PLURAL:$2|una nova notificació|noves notificacions}} al projecte {{SITENAME}}", "echo-email-batch-subject-weekly": "Teniu {{PLURAL:$2|una nova notificació|noves notificacions}} d'aquesta setmana al projecte {{SITENAME}}", "echo-email-batch-body-intro-daily": "Hola $1,\nAquí teniu un resum de l'activitat d'avui a {{SITENAME}}.", diff --git a/Echo/i18n/cdo.json b/Echo/i18n/cdo.json index e510b4df..4df94f5c 100644 --- a/Echo/i18n/cdo.json +++ b/Echo/i18n/cdo.json @@ -2,15 +2,14 @@ "@metadata": { "authors": [ "Amire80", + "Davidzdh", "Yejianfei", - "唐吉訶德的侍從", - "Davidzdh" + "唐吉訶德的侍從" ] }, "echo-desc": "通知系統", "prefs-echo": "通知", "prefs-emailsettings": "電批選項", - "prefs-displaynotifications": "顯示選項", "prefs-echosubscriptions": "通知我茲幾萆事計", "echo-pref-send-me": "發送給我:", "echo-pref-send-to": "發送遘:", @@ -35,35 +34,26 @@ "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": "汝無通知。", - "echo-more-info": "更更価其信息", - "echo-feedback": "反饋", "notification-link-text-view-message": "看蜀看信息", "notification-link-text-view-mention": "看提遘其乇", "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-edit-talk-page-email-subject2": "$1敆{{SITENAME}}𡅏給汝{{GENDER:$2|留下}}蜀條信息", "notification-page-linked-email-subject": "汝創建其頁面鏈遘{{SITENAME}}", - "notification-reverted-email-subject2": "汝其{{PLURAL:$3|修改}}敆{{SITENAME}}𡅏乞{{GENDER:$1|回滾}}去", - "notification-mention-email-subject": "$1敆{{SITENAME}}𡅏{{GENDER:$1|提遘}}{{GENDER:$2|汝}}", + "notification-reverted-email-subject2": "汝其{{PLURAL:$4|修改}}敆{{SITENAME}}𡅏乞{{GENDER:$2|回滾}}去", + "notification-mention-email-subject": "$1敆{{SITENAME}}𡅏{{GENDER:$2|提遘}}{{GENDER:$3|汝}}", "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", "echo-overlay-link": "全部通知", "echo-overlay-title": "<b>通知</b>", - "echo-overlay-title-overflow": "<b>通知</b>(未讀其通知顯示出$1條,共總有$2條)", "echo-mark-all-as-read": "全部標記成已讀", "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|新其通知}}", "echo-email-batch-body-intro-daily": "嘿$1,\n這是汝其今旦敆{{SITENAME}}懸頂其活動。", diff --git a/Echo/i18n/ce.json b/Echo/i18n/ce.json index e163e40f..daf21104 100644 --- a/Echo/i18n/ce.json +++ b/Echo/i18n/ce.json @@ -1,15 +1,14 @@ { "@metadata": { "authors": [ - "Умар", "Macofe", - "Исмаил Садуев" + "Исмаил Садуев", + "Умар" ] }, "echo-desc": "Декъашхойн хиларг а, хаамаш а болу дӀахаийтаран система", "prefs-echo": "ДӀахаийтарш", "prefs-emailsettings": "Электронан поштан гӀирс нисбар", - "prefs-displaynotifications": "Гуш болу гӀирсаш", "prefs-echosubscriptions": "ХӀокху хиларах лаьцна хаийта", "prefs-echocrosswiki": "Кросс-вики дӀахаийтарш", "prefs-blocknotificationslist": "Ӏаьржа могӀам", @@ -26,8 +25,6 @@ "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": "Хьуна кхаьчна керла хаам", @@ -39,15 +36,16 @@ "echo-category-title-mention-success": "{{PLURAL:$1|Кхиамца хьахор|Кхиамца хьахорш}}", "echo-category-title-other": "{{PLURAL:$1|кхин долу|кхин дерш}}", "echo-category-title-system": "{{PLURAL:$1|Системан}}", + "echo-category-title-system-emailonly": "{{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-error-no-formatter": "Хааман формат билгалйина яц", "notifications": "ДӀахаийтарш", "tooltip-pt-notifications-alert": "{{GENDER:|Хьан}} дӀахаийтарш", "tooltip-pt-notifications-notice": "{{GENDER:|Хьан}} хаамаш", @@ -70,10 +68,7 @@ "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": "ДӀахаийтарш дац.", @@ -106,6 +101,7 @@ "notification-header-mention-agent-talkpage-nosection": "$1 {{GENDER:$2|хьахийна}} {{GENDER:$3|хьо}} {{GENDER:$2|шен}} дийцаре агӀонгахь.", "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-header-user-rights-add-only": "{{GENDER:$4|Хьан}} декъашхо санна йолу бакъонаш {{GENDER:$1|хийцина}}. Хьо юкъатоьхна тобанна: $2.", "notification-welcome-linktext": "Марша догӀийла", "notification-header-thank-you-1-edit": "Маршалла, {{GENDER:$2|ахьа}} хӀинца дина {{GENDER:$2|хьай}} духхьара нисдар. Баркалла {{GENDER:$2|хьуна}}!", "notification-link-thank-you-edit": "{{GENDER:$1|Хьан}} нисдар", @@ -113,11 +109,10 @@ "notification-link-article-reminder": "АгӀоне хьажар", "notification-header-reverted": "{{PLURAL:$4|АгӀонехь $3 хьан нисдар}} {{GENDER:$2|юхадаькхина}}.", "notification-header-emailuser": "$1 {{GENDER:$2|баийтина}} хьога хаам.", - "notification-edit-talk-page-email-subject2": "{{GENDER:$1|Декъашхочо}} $1 «{{SITENAME}}» сайтехь хьуна хаам {{GENDER:$1|биттина}}", - "notification-edit-talk-page-email-batch-body-with-section": "Хьан дийцаре агӀонехь {{GENDER:$1|декъашхочо}} $1 {{GENDER:$1|битина}} хаам (темехь) «$2»", + "notification-edit-talk-page-email-subject2": "{{GENDER:$2|Декъашхочо}} $1 «{{SITENAME}}» сайтехь хьуна хаам {{GENDER:$2|биттина}}", "notification-page-linked-email-subject": "«{{SITENAME}}» сайтехь ахьа кхоьллина агӀона тӀе хьажорг хӀоттина", - "notification-reverted-email-subject2": "{{GENDER:$1|Цхьам}} «{{SITENAME}}» сайтехь хьан {{PLURAL:$3|нисдар юхадаькхина|нисдарш юхадаьхина}}", - "notification-mention-email-subject": "$1 {{GENDER:$1|Декъашхочо}} «{{SITENAME}}» сайтехь {{GENDER:$2|хьо}} хьахийна", + "notification-reverted-email-subject2": "{{GENDER:$2|Цхьам}} «{{SITENAME}}» сайтехь хьан {{PLURAL:$4|нисдар юхадаькхина|нисдарш юхадаьхина}}", + "notification-mention-email-subject": "$1 {{GENDER:$2|Декъашхочо}} «{{SITENAME}}» сайтехь {{GENDER:$3|хьо}} хьахийна", "notification-user-rights-email-subject": "Сайтехь «{{SITENAME}}» хьан бакъонаш хийцина", "notification-timestamp-ago-seconds": "{{PLURAL:$1|$1 с}}", "notification-timestamp-ago-minutes": "{{PLURAL:$1|$1 м.}}", @@ -130,23 +125,20 @@ "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-specialmute-label-mute-notifications": "ХӀокху декъашхочунгара хаамаш дӀабайа", "echo-email-html-footer-preference-link-text": "хьажа {{GENDER:$1|хьайн}} нисдаран гӀирсе", - "echo-email-html-footer-with-link": "Оха {{GENDER:$2|хьайга}}, $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": "ДӀахаийтарш", "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-mark-all-as-read": "Массо билгалъе ешна сана", "echo-mark-wiki-as-read": "Хаьржинчу вики чура ерриге ешна санна билгалъе: $1", + "echo-displaysnippet-title": "Керла хаам", "echo-date-today": "Тахана", "echo-date-yesterday": "Селхана", - "echo-load-more-error": "Кхин тӀе хилам схьаоьцуш гӀалат хила", "notification-bundle-header-edit-user-talk-v2": "{{PLURAL:$1|керла хаам бу}} <strong>{{GENDER:$3|хьан}} дийцаре агӀонгахь</strong>.", "echo-email-batch-subject-daily": "Хьоьга кхаьчна $2 {{PLURAL:$2|керла хаам|керла хаамаш}} «{{SITENAME}}» проектехь", "echo-email-batch-subject-weekly": "ХӀокху кӀиран чохь хьоьга кхаьчна $2 {{PLURAL:$2|керла хаам|керла хаамаш}} «{{SITENAME}}» проектехь", diff --git a/Echo/i18n/ckb.json b/Echo/i18n/ckb.json index 94c408f6..80c0d6e1 100644 --- a/Echo/i18n/ckb.json +++ b/Echo/i18n/ckb.json @@ -1,22 +1,24 @@ { "@metadata": { "authors": [ - "Calak", "Asoxor", + "Calak", + "Lost Whispers", "Macofe", - "Sarchia", "Muhammed taha", - "Lost Whispers", - "Épine" + "Sarchia", + "Épine", + "ئارام بکر" ] }, "echo-desc": "سیستەمی ئاگادارکردنەوەی بەکارھێنەران سەبارەت بە ڕووداوەکان و پەیامەکان", "prefs-echo": "ئاگادارییەکان", "prefs-emailsettings": "ھەڵبژاردەکانی ئیمەیل", - "prefs-displaynotifications": "ھەڵبژاردەکانی پێشاندان", "prefs-echosubscriptions": "سەبارەت بەم ڕووداوانە ئاگادارم بکە", "prefs-echocrosswiki": "ھۆشداری سەرانسەری", "prefs-blocknotificationslist": "بەکارھێنەرە بێدەنگکراوەکان", + "prefs-echopollupdates": "ھۆشدارە ڕاستەوخۆکان", + "echo-mobile-notifications-filter-title": "پاڵاوتنی ھۆشدارەکان", "echo-pref-send-me": "بۆم بنێرە:", "echo-pref-send-to": "بنێرە بۆ:", "echo-pref-email-format": "جۆری ئیمەیل:", @@ -30,7 +32,6 @@ "echo-pref-email-format-plain-text": "دەقی ساکار", "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": "پەیامی نوێت ھەیە", @@ -38,13 +39,16 @@ "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-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-system-noemail": "{{PLURAL:$1|سیستم}}", + "echo-category-title-system-emailonly": "{{PLURAL:$1|سیستم}}", "echo-category-title-user-rights": "{{PLURAL:$1|گۆڕانی مافەکانی بەکارھێنەر}}", "echo-category-title-emailuser": "{{PLURAL:$1|ئیمێل لە بەکارھێنەرێکی ترەوە|ئیمێلەکان لە بەکارھێنارانی ترەوە}}", - "echo-category-title-article-reminder": "بیرھێنانەوەی پەڕەکان", + "echo-category-title-article-reminder": "{{PLURAL:$1|بیرھێنانەوەی پەڕەکە|بیرھێنانەوەی پەڕەکان}}", + "echo-category-title-thank-you-edit": "{{PLURAL:$1|ئاماژەدەر|ئاماژەدەرەکان}}ی دەستکاری", "echo-pref-tooltip-edit-user-talk": "کاتێک کەسێک لە پەڕەی لێدوانمدا پەیامێکی نارد یان وەڵامی دامەوە، ئاگادارم بکە.", "echo-pref-tooltip-article-linked": "ئاگادارم بکەرەوە کاتێک یەکێک لە پەڕەیەکەوە بەستەر دەدات بە پەڕەیەک کە من دروستم کردووە.", "echo-pref-tooltip-reverted": "کاتێک کەسێک دەستکارییەکی من کردوومە بە ئامرازی پووچەڵکردنەوە یان گەڕاندنەوە دەگەڕێنێتەوە، ئاگادارم بکە.", @@ -54,7 +58,8 @@ "echo-pref-tooltip-user-rights": "ئاگاداردم بکەرەوە، کاتێک کە کەسێک مافە بەکارھێنەرییەکانم دەگۆڕێت.", "echo-pref-tooltip-emailuser": "ئاگادارم بەکەرەوە کاتێک کە کەسێک ئیمێلێکم بۆ دەنێرێت.", "echo-pref-tooltip-article-reminder": "لەبارەی ئەم پەڕەیەوە ئاگادارم بکەرەوە کە پرسیم.", - "echo-error-no-formatter": "ھیچ شێوازێک بۆ ئاگاداری دیاری نەکراوە.", + "echo-pref-tooltip-thank-you-edit": "کاتێک گەیشتم بە ١ەم، ١٠یەم، ١٠٠ەم... دەستکاریم ئاگادارم بکەرەوە.", + "echo-pref-tooltip-minor-watchlist": "کاتێک کەسێک دەستکارییەکی بچووکی پەڕەیەکی لەسەر پێڕستی چاودێرییەکەم کرد ئاگادارم بکەرەوە.", "notifications": "ئاگادارییەکان", "tooltip-pt-notifications-alert": "{{GENDER:|ھۆشدارەکانت}}", "tooltip-pt-notifications-notice": "{{GENDER:|پەیامەکانت}}", @@ -65,16 +70,12 @@ "echo-specialpage": "ئاگادارییەکان", "echo-specialpage-section-markread": "کۆمەڵەکە وەک خوێندراوە نیشانی بکە", "echo-specialpage-markasread": "ھۆشدار: وەک خوێندراوە نیشانی بکە", - "echo-specialpage-pagination-numnotifications": "$1 ھۆشدار", + "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": "تکایە بچۆ ژوورەوە بۆ بینینی ھۆشدارەکانت.", @@ -87,7 +88,7 @@ "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-alert-count": "بینینی {{PLURAL:$1|$1 ئاگاداری|$1 ئاگاداری}}", "notification-link-text-expand-notice-count": "بینینی $1 ھۆشدار", "notification-link-text-collapse-all": "کۆکردنەوە", "notification-link-text-view-message": "پەیام ببینە", @@ -97,7 +98,7 @@ "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": "$1 پەیامێکی بۆ {{GENDER:$2|نارد}}{{GENDER:$3|یت}}.", "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>ەوە.", @@ -113,13 +114,15 @@ "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-bundle": "{{PLURAL:$3|بانگکردنێک|$3 بانگکردن}} کە لەسەر پەڕەی وتووێژی <strong>$4</strong> {{GENDER:$2|کردت}} {{PLURAL:$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": "بانگکردنەکەی $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-mention-success-bundle": "{{PLURAL:$3|بانگکردنێک|$3 بانگکردن}} کە لەسەر پەڕەی وتووێژی <strong>$4</strong> {{GENDER:$2|کردت}} {{PLURAL:$3|نێردران}}.", + "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-user-rights-add-and-remove": "{{GENDER:$6|مافەکانی بەکارھێنەرت}} {{GENDER:$1|گۆڕان}}. تۆ بۆ $2 زیادکرایت، بەڵام چی تر ئەندامی $4 نیت.", "notification-header-welcome": "$1، {{GENDER:$2|بەخێربێیت}} بۆ {{SITENAME}}! خۆشحاڵین کە {{GENDER:$2|ھاتوویت}} بۆ ئێرە.", "notification-header-mention-summary": "$1 لە کورتەی دەستکارییەکان بانگی کردیت لە <strong>$4</strong>دا.", "notification-welcome-linktext": "بەخێربێیت", @@ -135,25 +138,22 @@ "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»دا پەیامێکی نارد.", "notification-page-linked-email-subject": "پەڕەکەت لە {{SITENAME}}دا بەستەر درا.", - "notification-reverted-email-subject2": "{{PLURAL:$3|دەستکارییەکەت|دەستکارییەکانت}} لە {{SITENAME}}دا {{GENDER:$1|گەڕێنرایەوە}}", + "notification-reverted-email-subject2": "{{PLURAL:$4|دەستکارییەکەت|دەستکارییەکانت}} لە {{SITENAME}}دا {{GENDER:$2|گەڕێنرایەوە}}", "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-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-specialmute-label-mute-notifications": "ھۆشدارەکان لەم بەکارھێنەرەوە کپ بکە", "echo-email-plain-footer": "بۆ کۆنترۆڵکردنی ئەو پۆستە ئەلیکترۆنییانەی بۆتی دەنێرین، سەیری ھەڵبژاردەکانت بکە:", "echo-email-html-footer-preference-link-text": "{{GENDER:$1|ھەڵبژاردەکانت}} ببینە", "echo-email-html-footer-with-link": "بۆ کۆنترۆڵکردنی ئەو پۆستە ئەلیکترۆنییانەی بۆتی دەنێرین، $1.", @@ -161,12 +161,12 @@ "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-displaysnippet-title": "ھۆشداری نوێ", "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-bullet": "•", "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/cnr-latn.json b/Echo/i18n/cnr-latn.json new file mode 100644 index 00000000..e64ce6f8 --- /dev/null +++ b/Echo/i18n/cnr-latn.json @@ -0,0 +1,8 @@ +{ + "@metadata": { + "authors": [ + "Bellatrix10" + ] + }, + "tooltip-pt-notifications-alert": "Vaša obavještenja" +} diff --git a/Echo/i18n/cs.json b/Echo/i18n/cs.json index 84f5fcc1..938ca767 100644 --- a/Echo/i18n/cs.json +++ b/Echo/i18n/cs.json @@ -2,32 +2,39 @@ "@metadata": { "authors": [ "Chmee2", - "Jkjk", - "Mormegil", - "Vks", - "Matěj Suchánek", "Cvanca", - "Teslaton", - "Kvetoslav47", - "Dvorapa", "Danny B.", - "Meliganai", + "Dvorapa", + "Ilimanaq29", + "Jkjk", + "Kvetoslav47", "Martin Urbanec", - "Ilimanaq29" + "Matěj Suchánek", + "Meliganai", + "Mormegil", + "MrJaroslavik", + "Patriccck", + "Teslaton", + "Vks" ] }, "echo-desc": "Systém pro upozorňování uživatelů na události a zprávy", "prefs-echo": "Upozornění", "prefs-emailsettings": "Nastavení e-mailu", - "prefs-displaynotifications": "Možnosti zobrazení", "prefs-echosubscriptions": "Upozorněte mě na…", "prefs-echocrosswiki": "Upozornění napříč projekty", "prefs-blocknotificationslist": "Ztlumení uživatelé", + "prefs-mutedpageslist": "Ztlumené stránky pro upozornění na odkazy", + "prefs-echopollupdates": "Živá upozornění", + "echo-mobile-notifications-filter-title": "Filtrovat upozornění", + "echo-pref-show-poll-updates": "Zobrazovat nová upozornění, jakmile dorazí", + "echo-pref-show-poll-updates-help": "Zobrazovat počet nepřečtených upozornění v nadpisu a zobrazit úryvek každého upozornění hned, jak dorazí.", "echo-pref-send-me": "Posílejte mi:", "echo-pref-send-to": "Posílat na:", "echo-pref-email-format": "Formát e-mailu:", "echo-pref-web": "Web", "echo-pref-email": "E-mail", + "echo-pref-push": "Push (jen aplikace)", "echo-pref-email-frequency-never": "Neposílejte mi žádná upozornění e-mailem", "echo-pref-email-frequency-immediately": "Jednotlivá upozornění, jakmile se objeví", "echo-pref-email-frequency-daily": "Denní souhrn upozornění", @@ -36,8 +43,8 @@ "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: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-pref-notifications-page-linked-title-muted-list": "Nezobrazovat notifikace ohledně odkazů na tyto stránky. ([[mw:Special:MyLanguage/Help:Notifications#mute|dozvědět se více]])", + "echo-pref-dont-email-read-notifications": "V souhrnech neposílat přečtená upozornění", "echo-learn-more": "Další informace", "echo-log": "Veřejný záznam", "echo-new-messages": "Máte nové zprávy", @@ -49,9 +56,14 @@ "echo-category-title-mention-success": "{{PLURAL:$1|úspěšnou zmínku|úspěšné zmínky}}", "echo-category-title-other": "{{PLURAL:$1|jinou událost|jiné události}}", "echo-category-title-system": "{{PLURAL:$1|systémovou událost|systémové události}}", + "echo-category-title-system-noemail": "{{PLURAL:$1|systémovou událost|systémové události}}", + "echo-category-title-system-emailonly": "{{PLURAL:$1|systémovou událost|systémové události}}", "echo-category-title-user-rights": "{{PLURAL:$1|změnu|změny}} uživatelských práv", "echo-category-title-emailuser": "{{PLURAL:$1|e-mail od jiného uživatele|e-maily od jiných uživatelů}}", "echo-category-title-article-reminder": "{{PLURAL:$1|upomínku|upomínky}} ke stránkám", + "echo-category-title-thank-you-edit": "editační {{PLURAL:$1|milník|milníky}}", + "echo-category-title-watchlist": "editaci sledované stránky", + "echo-category-title-minor-watchlist": "malou editaci sledované stránky", "echo-pref-tooltip-edit-user-talk": "Upozorněte mě, když mi někdo na mé diskusní stránce napíše zprávu nebo odpoví.", "echo-pref-tooltip-article-linked": "Upozorněte mě, když někdo na stránku, kterou jsem {{GENDER:|založil|založila}}, odkáže z jiné stránky.", "echo-pref-tooltip-reverted": "Upozorněte mě, když někdo úpravu, kterou jsem {{GENDER:|provedl|provedla}}, vrátí pomocí nástrojů pro zrušení editace nebo vrácení zpět.", @@ -61,7 +73,9 @@ "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í.", + "echo-pref-tooltip-thank-you-edit": "Upozorněte mě, když dosáhnu první, desáté, sté... editace.", + "echo-pref-tooltip-watchlist": "Upozorněte mě, když někdo provede (nemalou) editaci stránky na mém seznamu sledovaných.", + "echo-pref-tooltip-minor-watchlist": "Upozorněte mě, když někdo provede malou editaci stránky na mém seznamu sledovaných.", "notifications": "Upozornění", "tooltip-pt-notifications-alert": "{{GENDER:|Vaše}} upozornění", "tooltip-pt-notifications-notice": "{{GENDER:|Vaše}} oznámení", @@ -72,7 +86,6 @@ "echo-displaynotificationsconfiguration-sorting-by-section-legend": "Do které sekce se každý typ notifikace zařadí", "echo-displaynotificationsconfiguration-available-notification-methods-header": "Povolené notifikační metody", "echo-displaynotificationsconfiguration-available-notification-methods-by-category-legend": "Které notifikační metody jsou podporovány pro každou kategorii", - "echo-displaynotificationsconfiguration-available-notification-methods-by-type-legend": "Které notifikační metody jsou podporovány pro každý typ; platí pouze pro typy v rámci kategorií, které jsou v nastavení skryty", "echo-displaynotificationsconfiguration-enabled-default-header": "Implicitně zapnuté", "echo-displaynotificationsconfiguration-enabled-default-existing-users-legend": "Stávající uživatelé", "echo-displaynotificationsconfiguration-enabled-default-new-users-legend": "Noví uživatelé", @@ -82,15 +95,13 @@ "echo-specialpage-section-markread": "Označit skupinu jako přečtenou", "echo-specialpage-markasread": "Oznámení: Označit jako přečtené", "echo-specialpage-markasread-invalid-id": "Chybné ID události", + "echo-specialpage-pagefilterwidget-aria-label": "Filtrovat podle wiki a názvu stránky", + "echo-specialpage-special-help-menu-widget-aria-label": "Další možnosti a nastavení upozornění.", "echo-specialpage-pagination-numnotifications": "$1 {{PLURAL:$1|upozornění}}", "echo-specialpage-pagefilters-title": "Nedávná aktivita", "echo-specialpage-pagefilters-subtitle": "Stránky s nepřečtenými upozorněními", "notificationsmarkread-legend": "Označit oznámení jako přečtené", - "echo-anon": "Pro zobrazování upozornění je nutné [$1 vytvořit si účet] nebo [$2 se přihlásit].", "echo-none": "Nemáte žádná upozornění.", - "echo-more-info": "Více informací", - "echo-feedback": "Názor", - "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.", "echo-notification-placeholder": "Nemáte žádná upozornění.", @@ -101,6 +112,12 @@ "echo-notification-markasunread": "Označit jako nepřečtené", "echo-notification-markasread-tooltip": "Označit jako přečtené", "echo-notification-more-options-tooltip": "Více možností", + "notification-dynamic-actions-mute-page-linked": "{{GENDER:$2|Ztlumit}} upozornění na odkazy na „$1“", + "notification-dynamic-actions-mute-page-linked-confirmation": "Upozornění „odkaz na stránku“ jsou nyní pro stránku „$1“ vypnuta.", + "notification-dynamic-actions-mute-page-linked-confirmation-description": "Ztlumené stránky {{GENDER:$2|můžete}} kdykoli spravovat ve [$1 svém nastavení].", + "notification-dynamic-actions-unmute-page-linked": "{{GENDER:$2|Zrušit ztlumení}} upozornění na odkazy na „$1“", + "notification-dynamic-actions-unmute-page-linked-confirmation": "Upozornění „odkaz na stránku“ jsou nyní pro stránku „$1“ zapnuta.", + "notification-dynamic-actions-unmute-page-linked-confirmation-description": "Ztlumené stránky {{GENDER:$2|můžete}} kdykoli spravovat ve [$1 svém nastavení].", "notification-dynamic-actions-unwatch": "{{GENDER:$3|Přestat}} sledovat novou aktivitu na stránce „$1“", "notification-dynamic-actions-unwatch-confirmation": "Stránku „$1“ už nadále {{GENDER:$3|nesledujete}}", "notification-dynamic-actions-unwatch-confirmation-description": "[$2 Tuto stránku] můžete kdykoli {{GENDER:$3|sledovat}}.", @@ -136,7 +153,7 @@ "notification-header-mention-article-talkpage": "$1 {{GENDER:$3|vás}} {{GENDER:$2|zmínil|zmínila}} v diskusi k článku <strong>$4</strong> u „<strong>$5</strong>“.", "notification-header-mention-article-talkpage-nosection": "$1 {{GENDER:$3|vás}} {{GENDER:$2|zmínil|zmínila}} v diskusi k článku <strong>$4</strong>.", "notification-header-mention-failure-user-unknown": "{{GENDER:$2|Vaše}} zmínka uživatele <strong>$3</strong> nemohla být odeslána, protože uživatel nebyl nalezen.", - "notification-header-mention-failure-user-anonymous": "{{GENDER:$2|Vaše}} zmínka uživatele <strong>$3</strong> nemohla být odeslána, protože uživatel je anonymní.", + "notification-header-mention-failure-user-anonymous": "{{GENDER:$2|Vaše}} zmínka uživatele <strong>$3</strong> nemohla být odeslána, protože se jedná o neregistrovaného uživatele.", "notification-header-mention-failure-too-many": "{{GENDER:$2|Pokusil|Pokusila|Pokusil(a)}} jste se zmínit více než {{PLURAL:$3|jednoho uživatele|$3 uživatele|$3 uživatelů}}. Všechny zmínky nad tento limit nebyly odeslány.", "notification-header-mention-failure-bundle": "{{PLURAL:$3|Jednu vaši zmínku|$3 vaše zmínky|$3 vašich zmínek}} na diskusní stránce <strong>$4</strong> {{GENDER:$2|nebylo}} možné odeslat.", "notification-compact-header-mention-failure-user-unknown": "<strong>Uživatelské jméno neexistuje:</strong> $1", @@ -159,17 +176,17 @@ "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ě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-header-thank-you-10000000-edit": "Právě jste {{GENDER:$2|provedl|provedla}} svou desetimiliontou editaci. Děkujeme za váš brilantní 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", "notification-header-reverted": "Vaše editace stránky <strong>$3</strong> {{PLURAL:$4|byla vrácena|byly vráceny}} {{GENDER:$2|zpět}}.", "notification-header-emailuser": "$1 vám {{GENDER:$2|poslal|poslala}} e-mail.", - "notification-edit-talk-page-email-subject2": "$1 vám na {{grammar:6sg|{{SITENAME}}}} {{GENDER:$1|napsal|napsala}} zprávu", - "notification-edit-talk-page-email-batch-body-with-section": "$1 vám {{GENDER:$1|napsal|napsala}} na vaši diskusní stránku k „$2“.", - "notification-page-linked-email-subject": "Na {{grammar:6sg|{{SITENAME}}}} někdo odkázal na vámi založenou stránku", - "notification-reverted-email-subject2": "$1 {{GENDER:$1|revertoval|revertovala}} {{PLURAL:$3|vaši editaci|vaše editace}} na {{grammar:6sg|{{SITENAME}}}}", - "notification-mention-email-subject": "$1 {{GENDER:$2|vás}} na {{grammar:6sg|{{SITENAME}}}} {{GENDER:$1|zmínil|zmínila}}", - "notification-user-rights-email-subject": "Na {{grammar:6sg|{{SITENAME}}}} byla změněna vaše uživatelská práva", + "notification-edit-talk-page-email-subject2": "$1 {{GENDER:$3|vám}} na {{grammar:6sg|{{SITENAME}}}} {{GENDER:$2|napsal|napsala|napsal(a)}} zprávu", + "notification-page-linked-email-subject": "Na {{grammar:6sg|{{SITENAME}}}} někdo odkázal na {{GENDER:$3|vámi}} založenou stránku", + "notification-reverted-email-subject2": "Někdo {{GENDER:$2|revertoval}} {{PLURAL:$4|{{GENDER:$3|vaši}} editaci|{{GENDER:$3|vaše}} editace}} na {{grammar:6sg|{{SITENAME}}}}", + "notification-mention-email-subject": "$1 {{GENDER:$3|vás}} na {{grammar:6sg|{{SITENAME}}}} {{GENDER:$2|zmínil|zmínila|zmínil(a)}}", + "notification-user-rights-email-subject": "Na {{grammar:6sg|{{SITENAME}}}} byla změněna {{GENDER:$3|vaše}} uživatelská práva", "notification-timestamp-ago-seconds": "{{PLURAL:$1|$1 s}}", "notification-timestamp-ago-minutes": "{{PLURAL:$1|$1 min}}", "notification-timestamp-ago-hours": "{{PLURAL:$1|$1 h}}", @@ -181,9 +198,7 @@ "notification-inbox-filter-read": "Přečtená", "notification-inbox-filter-unread": "Nepřečtená", "notification-inbox-filter-all": "Všechna", - "echo-email-body-default": "Na {{grammar:6sg|{{SITENAME}}}} máte nové upozornění:\n\n$1", - "echo-email-footer-default-html": "Posílání e-mailů si můžete přizpůsobit v <a href=\"$2\" style=\"text-decoration: none; color: #3868B0;\">nastavení</a>.<br />\n$1", - "echo-email-footer-default": "$2\n\nPosílání e-mailů si můžete přizpůsobit v nastavení:\n{{canonicalurl:{{#special:Preferences}}#mw-prefsection-echo}}\n\n$1", + "echo-specialmute-label-mute-notifications": "Ignorovat upozornění od tohoto uživatele", "echo-email-plain-footer": "Posílání e-mailů si {{GENDER:$1|můžete}} přizpůsobit v nastavení:", "echo-email-html-footer-preference-link-text": "{{GENDER:$1|nastavení}}", "echo-email-html-footer-with-link": "Posílání e-mailů si {{GENDER:$2|můžete}} přizpůsobit v $1.", @@ -193,18 +208,17 @@ "echo-notification-notice-text-only": "Oznámení", "echo-overlay-link": "Všechna upozornění", "echo-overlay-title": "<b>Upozornění</b>", - "echo-overlay-title-overflow": "<b>{{PLURAL:$1|Upozornění}}</b> ({{PLURAL:$1|zobrazuje|zobrazují|zobrazuje}} se $1 z $2 {{PLURAL:$2|nepřečteného|nepřečtených}})", "echo-mark-all-as-read": "Označit vše jako přečtené", "echo-mark-all-as-read-confirmation": "$1 oznámení {{PLURAL:$1|označeno jako přečtené|označena jako přečtená|označeno jako přečtená}}", "echo-mark-wiki-as-read": "Označit všechno za přečtené ve vybrané wiki: $1", + "echo-displaysnippet-title": "Nové upozornění", "echo-date-today": "Dnes", "echo-date-yesterday": "Včera", - "echo-load-more-error": "Při načítání dalších výsledků došlo k chybě.", "notification-bundle-header-edit-user-talk-v2": "{{PLURAL:$1|$1 nová zpráva|$1 nové zprávy|$1 nových zpráv|100=Více než 99 nových zpráv}} na <strong>{{GENDER:$3|vaší}} diskusní stránce</strong>.", "echo-email-batch-subject-daily": "Na {{grammar:6sg|{{SITENAME}}}} dnes máte {{PLURAL:$2|nové|nová}} upozornění", "echo-email-batch-subject-weekly": "Na {{grammar:6sg|{{SITENAME}}}} máte tento týden {{PLURAL:$2|nové|nová}} upozornění", "echo-email-batch-body-intro-daily": "Ahoj, uživateli $1,\n\nzde pro vás máme shrnutí dnešní aktivity na {{grammar:6sg|{{SITENAME}}}}.", - "echo-email-batch-body-intro-weekly": "Ahoj, uživateli $1,\n\nzde pro vás máme shrnutí aktivity na {{grammar:6sg|{{SITENAME}}}} za tento týden", + "echo-email-batch-body-intro-weekly": "Ahoj, uživateli $1,\n\nzde pro vás máme shrnutí aktivity na {{grammar:6sg|{{SITENAME}}}} za tento týden.", "echo-email-batch-link-text-view-all-notifications": "Zobrazit všechna upozornění", "notification-header-foreign-alert": "Více upozornění z {{PLURAL:$5|další wiki|$5 dalších wiki}}", "notification-header-foreign-notice": "Více oznámení z {{PLURAL:$5|další wiki|$5 dalších wiki}}", diff --git a/Echo/i18n/cy.json b/Echo/i18n/cy.json index c842d501..491d9709 100644 --- a/Echo/i18n/cy.json +++ b/Echo/i18n/cy.json @@ -1,15 +1,14 @@ { "@metadata": { "authors": [ + "Diafol", "Lloffiwr", - "Robin Owain", - "Diafol" + "Robin Owain" ] }, "echo-desc": "Sustem hysbysu", "prefs-echo": "Hysbysiadau", "prefs-emailsettings": "Dewisiadau ebost", - "prefs-displaynotifications": "Dewisiadau arddangos", "prefs-echosubscriptions": "Hysbyswch fi am y digwyddiadau hyn", "echo-pref-send-me": "Anfon ataf:", "echo-pref-send-to": "Anfon at:", @@ -34,35 +33,26 @@ "echo-pref-tooltip-article-linked": "Fy hysbysu pan fo rhywun yn gosod cyswllt o ryw erthygl i dudalen a ddechreuais i.", "echo-pref-tooltip-reverted": "Hysbyswch fi pan fo rhywun yn dadwneud golygiad o'm heiddo i, drwy ddefnyddio'r teclynnau dadwneud neu wrthdroi.", "echo-pref-tooltip-mention": "Hysbyswch fi pan fo rhywun yn gosod cyswllt at fy nhudalen defnyddiwr oddi wrth rhyw dudalen sgwrs.", - "echo-error-no-formatter": "Ni phenwyd unrhyw fformat i'r hysbysiad.", "notifications": "Hysbysiadau", "tooltip-pt-notifications-alert": "Eich hysbysiadau", "echo-specialpage": "Hysbysiadau", - "echo-anon": "Er mwyn derbyn hysbysiadau, [$1 dechreuwch gyfrif] neu [$2 mewngofnodwch].", "echo-none": "Nid oes unrhyw hysbysiadau gennych.", - "echo-more-info": "Mwy o wybodaeth", - "echo-feedback": "Adborth", "notification-link-text-view-message": "Gweld y neges", "notification-link-text-view-mention": "Gweld y crybwyll", "notification-link-text-view-changes": "Gweld y newidiadau", "notification-link-text-view-page": "Gweld y dudalen", "notification-link-text-view-edit": "Gweld y golygiad", "notification-header-reverted": "{{GENDER:$2|Dadwneuthpwyd}} eich {{PLURAL:$4||golygiad ar $3|golygiadau ar $3}} gan $1.", - "notification-edit-talk-page-email-subject2": "{{GENDER:$1|Gosododd}} $1 neges i chi ar {{SITENAME}}", - "notification-edit-talk-page-email-batch-body-with-section": "{{GENDER:$1|Gosododd}} $1 neges ar eich tudalen sgwrs yn \"$2\".", + "notification-edit-talk-page-email-subject2": "{{GENDER:$2|Gosododd}} $1 neges i chi ar {{SITENAME}}", "notification-page-linked-email-subject": "Cysylltwyd i'ch tudalen ar {{SITENAME}}", - "notification-reverted-email-subject2": "{{GENDER:$1|Dadwnaethpwyd}} eich {{PLURAL:$3||golygiad|golygiadau}} ar {{SITENAME}}", - "notification-mention-email-subject": "{{GENDER:$1|Cyfeiriodd}} $1 atoch ar {{SITENAME}}", + "notification-reverted-email-subject2": "{{GENDER:$2|Dadwnaethpwyd}} eich {{PLURAL:$4||golygiad|golygiadau}} ar {{SITENAME}}", + "notification-mention-email-subject": "{{GENDER:$2|Cyfeiriodd}} $1 atoch ar {{SITENAME}}", "notification-user-rights-email-subject": "Newidiodd eich galluoedd fel defnyddiwr ar {{SITENAME}}", - "echo-email-body-default": "Mae hysbysiad newydd gennych ar {{SITENAME}}:\n\n$1", - "echo-email-footer-default": "$2\n\nOs am reoli yr ebyst y cewch gennym, ewch i'ch dewisiadau:\n{{canonicalurl:{{#special:Preferences}}#mw-prefsection-echo}}\n\n$1", "echo-overlay-link": "Pob hysbysiad", "echo-overlay-title": "<b>Hysbysiadau</b>", - "echo-overlay-title-overflow": "<b>{{PLURAL:$1|Hysbysiadau}}</b> (yn dangos $1 o $2 heb eu darllen)", "echo-mark-all-as-read": "Marcio bod y cwbl wedi eu darllen", "echo-date-today": "Heddiw", "echo-date-yesterday": "Ddoe", - "echo-load-more-error": "Cafwyd gwall wrth nôl rhagor o ganlyniadau.", "echo-email-batch-subject-daily": "Mae {{PLURAL:$2||hysbysiad|hysbysiadau}} newydd gennych ar {{SITENAME}}", "echo-email-batch-subject-weekly": "Mae {{PLURAL:$2||hysbysiad|hysbysiadau}} newydd gennych yr wythnos hon ar {{SITENAME}}", "echo-email-batch-body-intro-daily": "Sut mae $1,\nDyma grynodeb i chi o weithgaredd heddiw ar {{SITENAME}}.", diff --git a/Echo/i18n/da.json b/Echo/i18n/da.json index 923b0594..52dfd0e4 100644 --- a/Echo/i18n/da.json +++ b/Echo/i18n/da.json @@ -2,25 +2,30 @@ "@metadata": { "authors": [ "Byrial", + "Cgtdk", "Christian List", + "EeveeSylveon", + "Macofe", "Palnatoke", + "Saederup92", "Sarrus", - "Tjernobyl", - "Thomsen", - "Cgtdk", - "Macofe", "Simeondahl", "SimmeD", - "EeveeSylveon", - "Saederup92" + "Thomsen", + "Tjernobyl", + "Weblars" ] }, "echo-desc": "System til at give brugere besked om handlinger og meddelelser", "prefs-echo": "Meddelelser", "prefs-emailsettings": "E-mailindstillinger", - "prefs-displaynotifications": "Indstillinger for visning", "prefs-echosubscriptions": "Giv mig en meddelelse ved følgende hændelser", + "prefs-echocrosswiki": "Interwiki-meddelelser", "prefs-blocknotificationslist": "Ignorerede brugere", + "prefs-echopollupdates": "Live-notifikationer", + "echo-mobile-notifications-filter-title": "Filtrér notifikationer", + "echo-pref-show-poll-updates": "Vis nye notifikationer så snart de kommer", + "echo-pref-show-poll-updates-help": "Vis antallet af ulæste notifikationer i titellinjen, og vis et uddrag af hver notifikation.", "echo-pref-send-me": "Send mig:", "echo-pref-send-to": "Send til:", "echo-pref-email-format": "E-mailformat:", @@ -31,8 +36,9 @@ "echo-pref-email-frequency-daily": "En daglig oversigt over meddelelser", "echo-pref-email-frequency-weekly": "En ugentlig oversigt over meddelelser", "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-email-format-plain-text": "Uformateret tekst", + "echo-pref-cross-wiki-notifications": "Vis meddelelser fra andre wikier", + "echo-pref-notifications-blacklist": "Vis ikke beskeder (notifikationer) fra disse brugere. ([[mw:Special:MyLanguage/Help:Notifications#mute|læs mere]])", "echo-learn-more": "Find ud af mere", "echo-log": "Offentlig log", "echo-new-messages": "Du har nye beskeder", @@ -40,47 +46,64 @@ "echo-category-title-article-linked": "{{PLURAL:$1|Sidehenvisning|Sidehenvisninger}}", "echo-category-title-reverted": "Tilbagestilling af {{PLURAL:$1|redigering|redigeringer}}", "echo-category-title-mention": "{{PLURAL:$1|Omtale|Omtaler}}", + "echo-category-title-mention-failure": "{{PLURAL:$1|Mislykket ping|Mislykkede ping}}", + "echo-category-title-mention-success": "{{PLURAL:$1|Vellykket ping|Vellykkede ping}}", "echo-category-title-other": "{{PLURAL:$1|Anden|Andre}}", "echo-category-title-system": "{{PLURAL:$1|System}}", + "echo-category-title-system-noemail": "{{PLURAL:$1|System}}", + "echo-category-title-system-emailonly": "{{PLURAL:$1|System}}", "echo-category-title-user-rights": "{{PLURAL:$1|Ændring af brugerrettighed|Ændring af brugerrettigheder}}", + "echo-category-title-emailuser": "{{PLURAL:$1|E-mail fra anden bruger|E-mails fra andre brugere}}", + "echo-category-title-thank-you-edit": "{{PLURAL:$1|Milepæl|Milepæle}}", "echo-pref-tooltip-edit-user-talk": "Giv mig besked, når nogen skriver en besked eller et svar på min diskussionsside.", "echo-pref-tooltip-article-linked": "Giv mig besked, når nogen henviser til en side, som jeg har oprettet, fra en artikelside.", "echo-pref-tooltip-reverted": "Giv mig besked, når nogen tilbagestiller en redigering, som jeg lavet, ved at bruge \"fjern redigering\" eller \"rul tilbage\".", "echo-pref-tooltip-mention": "Giv mig besked når nogen henviser til min brugerside.", + "echo-pref-tooltip-mention-failure": "Giv mig besked, når jeg forsøger at pinge nogen, men det ikke fungerer.", + "echo-pref-tooltip-mention-success": "Giv mig besked, når jeg pinger nogen, f.eks. ved at linke til nogens brugerside.", "echo-pref-tooltip-user-rights": "Giv mig besked, når nogen ændrer mine brugerrettigheder.", "echo-pref-tooltip-emailuser": "Giv mig besked, når nogen sender mig en email.", - "echo-error-no-formatter": "Der er ikke defineret et format for meddelelsen", + "echo-pref-tooltip-thank-you-edit": "Giv mig besked når jeg foretager min første, tiende, hundrede... redigering.", "notifications": "Meddelelser", "tooltip-pt-notifications-alert": "{{GENDER:|Dine}} alarmer", "tooltip-pt-notifications-notice": "{{GENDER:|Dine}} meddelelser", + "echo-displaynotificationsconfiguration-sorting-by-section-header": "Sortering af typer", "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-pagination-numnotifications": "$1 {{PLURAL:$1|meddelelse|meddelelser}}", "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-markasread": "Marker 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-expand-alert-count": "Vis {{PLURAL:$1|$1 alarm|$1 alarmer}}", + "notification-link-text-expand-notice-count": "Vis {{PLURAL:$1|$1 meddelelse|$1 meddelelser}}", + "notification-link-text-expand-all-count": "Vis {{PLURAL:$1|$1 meddelelse|$1 meddelelser}}", "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": "{{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-edit-user-talk-with-section": "$1 {{GENDER:$2|skrev}} en besked på <strong>{{GENDER:$3|din}} diskussionsside</strong> under \"<strong>$4</strong>\".", + "notification-compact-header-edit-user-talk": "$1 {{GENDER:$2|efterlod}} en besked til {{GENDER:$3|dig}}.", + "notification-compact-header-edit-user-talk-with-section": "$1 {{GENDER:$2|efterlod}} en besked til {{GENDER:$3|dig}} i \"<strong>$4</strong>\".", "notification-header-page-linked": "Der blev oprettet et link fra <strong>$4</strong> til <strong>$3</strong>", "notification-header-mention-other": "$1 {{GENDER:$2|nævnte}} {{GENDER:$3|dig}} på <strong>$4</strong> i \"<strong>$5</strong>\".", "notification-header-mention-other-nosection": "$1 {{GENDER:$2|nævnte}} {{GENDER:$3|dig}} på <strong>$4</strong>.", + "notification-header-mention-user-talkpage-v2": "$1 {{GENDER:$2|nævnte}} {{GENDER:$3|dig}} på <strong>brugerdiskussionssiden {{GENDER:$5|for}} $4</strong> i \"<strong>$6</strong>\".", + "notification-header-mention-agent-talkpage": "$1 {{GENDER:$2|nævnte}} {{GENDER:$3|dig}} på <strong>{{GENDER:$2|sin|sin|deres}} diskussionsside</strong> under \"<strong>$4</strong>\".", "notification-header-mention-agent-talkpage-nosection": "$1 {{GENDER:$2|nævnte}} {{GENDER:$3|dig}} på <strong>{{GENDER:$2|sin|sin|sin}} diskussionsside</strong>.", "notification-header-mention-article-talkpage": "$1 {{GENDER:$2|nævnte}} {{GENDER:$3|dig}} på <strong>$4</strong>s diskussionsside i \"<strong>$5</strong>\".", + "notification-compact-header-mention-failure-user-unknown": "<strong>Brugernavnet findes ikke:</strong> $1", + "notification-compact-header-mention-failure-user-anonymous": "<strong>IP adresser kan ikke blive nævnt:</strong> $1", "notification-header-user-rights-add-only": "{{GENDER:$4|Dine}} brugerrettigheder blev {{GENDER:$1|ændret}}. Du er blevet tilføjet til: $2.", "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.", @@ -88,36 +111,48 @@ "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-header-thank-you-10-edit": "{{GENDER:$2|Du}} har lige lavet {{GENDER:$2|din}} tiende redigering; mange {{GENDER:$2|tak}}, og fortsæt endelig!", + "notification-header-thank-you-100-edit": "{{GENDER:$2|Du}} har lige lavet {{GENDER:$2|din}} redigering nummer hundrede; mange {{GENDER:$2|tak}}!", + "notification-header-thank-you-1000-edit": "{{GENDER:$2|Du}} har lige lavet {{GENDER:$2|din}} redigering nummer tusind; {{GENDER:$2|tak}} for at bidrage så meget!", + "notification-header-thank-you-10000-edit": "{{GENDER:$2|Du}} har lige lavet {{GENDER:$2|din}} redigering nummer ti tusind; mange {{GENDER:$2|tak}}!", + "notification-header-thank-you-100000-edit": "{{GENDER:$2|Du}} har lige lavet {{GENDER:$2|din}} redigering nummer hundrede tusind; {{GENDER:$2|tak}} for din utrolige indsats!", + "notification-header-thank-you-1000000-edit": "{{GENDER:$2|Du}} har lige lavet {{GENDER:$2|din}} redigering nummer en million; {{GENDER:$2|tak}} for en forbløffende indsats!", + "notification-link-thank-you-edit": "{{GENDER:$1|Din}} redigering", "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 {{GENDER:$1|omtalte}} {{GENDER:$2|dig}} på {{SITENAME}}", + "notification-reverted-email-subject2": "{{PLURAL:$4|Din redigering blev|Dine redigeringer blev}} {{GENDER:$2|omgjort}} på {{SITENAME}}", + "notification-mention-email-subject": "$1 {{GENDER:$2|omtalte}} {{GENDER:$3|dig}} på {{SITENAME}}", "notification-user-rights-email-subject": "Dine brugerrettigheder er blevet ændret på {{SITENAME}}", + "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}}", + "notification-timestamp-ago-months": "{{PLURAL:$1|$1må}}", + "notification-timestamp-ago-years": "{{PLURAL:$1|$1år}}", "notification-timestamp-today": "I dag", "notification-timestamp-yesterday": "I går", - "notification-inbox-filter-read": "Læs", + "notification-inbox-filter-read": "Læste", "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-specialmute-label-mute-notifications": "Tillad ikke denne bruger at sende mig beskeder (notifikationer)", "echo-notification-alert": "{{PLURAL:$1|Meddelelse ($1)|Meddelelser ($1)|100=Meddelelser (99+)}}", + "echo-notification-alert-text-only": "Alarmer", + "echo-notification-notice-text-only": "Meddelelser", "echo-overlay-link": "Alle meddelelser", "echo-overlay-title": "<b>Meddelelser</b>", - "echo-overlay-title-overflow": "<b>{{PLURAL:$1|Meddelelser}}<b> (viser $1 af $2 ulæste)", "echo-mark-all-as-read": "Markér alle som læste", + "echo-mark-all-as-read-confirmation": "$1 {{PLURAL:$1|meddelelse|meddelelser}} markeret som læst", "echo-date-today": "I dag", "echo-date-yesterday": "I går", - "echo-load-more-error": "Der skete en fejl under hentningen af flere resultater.", "notification-bundle-header-edit-user-talk-v2": "{{PLURAL:$1|En ny besked|$1 nye beskeder|100=99+ nye beskeder}} på <strong>{{GENDER:$3|din}} diskussionsside</strong>.", "echo-email-batch-subject-daily": "Du har {{PLURAL:$2|en ny meddelelse|$2 nye meddelelser}} på {{SITENAME}}", "echo-email-batch-subject-weekly": "Du har {{PLURAL:$2|en ny meddelelse|$2 nye meddelelser}} på {{SITENAME}} i denne uge", "echo-email-batch-body-intro-daily": "Hej $1,\nHer er en oversigt over dagens aktivitet på {{SITENAME}} for dig.", "echo-email-batch-body-intro-weekly": "Hej $1,\nHer er et resumé af denne uges aktivitet på {{SITENAME}} for dig.", - "echo-email-batch-link-text-view-all-notifications": "Se alle meddelelser" + "echo-email-batch-link-text-view-all-notifications": "Se alle meddelelser", + "notification-header-foreign-alert": "Flere alarmer fra {{PLURAL:$5|en anden wiki|$5 andre wikier}}" } diff --git a/Echo/i18n/de-formal.json b/Echo/i18n/de-formal.json index daeb3b57..ff5b7db9 100644 --- a/Echo/i18n/de-formal.json +++ b/Echo/i18n/de-formal.json @@ -7,6 +7,5 @@ "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-email-subject": "Ihre Benutzerrechte auf „{{SITENAME}}“ wurden geändert.", - "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" + "notification-user-rights-email-subject": "Ihre Benutzerrechte auf „{{SITENAME}}“ wurden geändert." } diff --git a/Echo/i18n/de.json b/Echo/i18n/de.json index d189967e..afe3acf5 100644 --- a/Echo/i18n/de.json +++ b/Echo/i18n/de.json @@ -1,33 +1,41 @@ { "@metadata": { "authors": [ + "ChrisiPK", + "DerHexer", + "FriedhelmW", "Kghbln", + "Lucas Werkmeister", + "MGChecker", "Metalhead64", + "PiefPafPier", + "Predatorix", + "Purodha", "Se4598", - "TMg", - "ChrisiPK", "Suriyaa Kudo", - "Purodha", + "TMg", "Tiin", - "Predatorix", - "FriedhelmW", - "MGChecker", - "Vogone", - "DerHexer" + "Tobi 406", + "Vogone" ] }, - "echo-desc": "Stellt ein System zur Benachrichtigung von Benutzern über Ereignisse und Nachrichten bereit", + "echo-desc": "Erweitert das Wiki um ein System zur Benachrichtigung von Benutzern zu Ereignissen und Nachrichten", "prefs-echo": "Benachrichtigungen", "prefs-emailsettings": "E-Mail-Optionen", - "prefs-displaynotifications": "Anzeigeoptionen", "prefs-echosubscriptions": "Bei diesen Ereignissen benachrichtigen", "prefs-echocrosswiki": "Wikiübergreifende Benachrichtigungen", "prefs-blocknotificationslist": "Ignorierte Benutzer", + "prefs-mutedpageslist": "Stummgeschaltete Seiten für Seitenverlinkungs-Benachrichtigungen", + "prefs-echopollupdates": "Live-Benachrichtigungen", + "echo-mobile-notifications-filter-title": "Benachrichtigungen filtern", + "echo-pref-show-poll-updates": "Anzeigen neuer Benachrichtigungen sofort nach Eingang", + "echo-pref-show-poll-updates-help": "Zeige die Anzahl ungelesener Benachrichtigungen in der Überschrift und einen Anriss jeder Benachrichtigung sofort nach Eingang an.", "echo-pref-send-me": "Sende mir:", "echo-pref-send-to": "Sende an:", "echo-pref-email-format": "E-Mail-Format:", "echo-pref-web": "Wiki", "echo-pref-email": "E-Mail", + "echo-pref-push": "Apps", "echo-pref-email-frequency-never": "Keine Benachrichtigungen", "echo-pref-email-frequency-immediately": "Individuelle Benachrichtigung zu jedem Ereignis", "echo-pref-email-frequency-daily": "Tägliche Zusammenfassung der Benachrichtigungen", @@ -36,8 +44,8 @@ "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: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-pref-notifications-page-linked-title-muted-list": "Zeige keine „Seitenverlinkung“-Benachrichtigungen für diese Seiten an. ([[mw:Special:MyLanguage/Help:Notifications#mute|mehr erfahren]])", + "echo-pref-dont-email-read-notifications": "Gelesene Benachrichtigungen nicht in den Zusammenfassungmails einschließen", "echo-learn-more": "Mehr erfahren", "echo-log": "Öffentliches Logbuch", "echo-new-messages": "Du hast neue Nachrichten", @@ -49,9 +57,14 @@ "echo-category-title-mention-success": "Erfolgreiche {{PLURAL:$1|Erwähnung|Erwähnungen}}", "echo-category-title-other": "{{PLURAL:$1|Andere}}", "echo-category-title-system": "{{PLURAL:$1|System}}", + "echo-category-title-system-noemail": "{{PLURAL:$1|System}}", + "echo-category-title-system-emailonly": "{{PLURAL:$1|System}}", "echo-category-title-user-rights": "{{PLURAL:$1|Benutzerrechteänderung|Benutzerrechteänderungen}}", "echo-category-title-emailuser": "{{PLURAL:$1|E-Mail von einem anderen Benutzer|E-Mails von anderen Benutzern}}", "echo-category-title-article-reminder": "{{PLURAL:$1|Seitenerinnerung|Seitenerinnerungen}}", + "echo-category-title-thank-you-edit": "{{PLURAL:$1|Bearbeitungsmeilenstein|Bearbeitungsmeilensteine}}", + "echo-category-title-watchlist": "Bearbeitung an beobachteter Seite", + "echo-category-title-minor-watchlist": "Kleine Bearbeitung an beobachteter Seite", "echo-pref-tooltip-edit-user-talk": "Benachrichtige mich, wenn jemand eine Nachricht oder eine Antwort auf meiner Diskussionsseite hinterlässt.", "echo-pref-tooltip-article-linked": "Benachrichtige mich, wenn jemand auf einer Seite auf eine andere von mir erstellte Seite verlinkt.", "echo-pref-tooltip-reverted": "Benachrichtige mich, wenn jemand eine von mir gemachte Bearbeitung rückgängig macht oder zurücksetzt.", @@ -61,7 +74,9 @@ "echo-pref-tooltip-user-rights": "Benachrichtige mich, wenn jemand meine Benutzerrechte ändert.", "echo-pref-tooltip-emailuser": "Benachrichtige mich, wenn mir jemand eine E-Mail sendet.", "echo-pref-tooltip-article-reminder": "Benachrichtige mich über diese Seite, wenn ich dies verlange.", - "echo-error-no-formatter": "Keine Formatierung zur Benachrichtigung definiert", + "echo-pref-tooltip-thank-you-edit": "Benachrichtige mich, wenn ich meine 1., 10., 100., … Bearbeitung erreiche.", + "echo-pref-tooltip-watchlist": "Benachrichtige mich, wenn jemand eine (nicht-kleine) Bearbeitung an einer Seite auf meiner Beobachtungsliste macht.", + "echo-pref-tooltip-minor-watchlist": "Benachrichtige mich, wenn jemand eine kleine Bearbeitung an einer Seite auf meiner Beobachtungsliste macht.", "notifications": "Benachrichtigungen", "tooltip-pt-notifications-alert": "{{GENDER:|Deine}} Meldungen", "tooltip-pt-notifications-notice": "{{GENDER:|Deine}} Mitteilungen", @@ -72,7 +87,6 @@ "echo-displaynotificationsconfiguration-sorting-by-section-legend": "Welcher Abschnitt jedes Benachrichtigungstyps einsortiert ist", "echo-displaynotificationsconfiguration-available-notification-methods-header": "Erlaubte Benachrichtigungsmethoden", "echo-displaynotificationsconfiguration-available-notification-methods-by-category-legend": "Welche Benachrichtigungsmethoden für jede Kategorie unterstützt werden", - "echo-displaynotificationsconfiguration-available-notification-methods-by-type-legend": "Welche Benachrichtigungsmethoden für jeden Typ unterstützt werden. Nur auf die Typen innerhalb Kategorien zutreffend, die in den Einstellungen ausgeblendet sind.", "echo-displaynotificationsconfiguration-enabled-default-header": "Standardmäßig aktiviert", "echo-displaynotificationsconfiguration-enabled-default-existing-users-legend": "Vorhandene Benutzer", "echo-displaynotificationsconfiguration-enabled-default-new-users-legend": "Neue Benutzer", @@ -82,14 +96,13 @@ "echo-specialpage-section-markread": "Gruppe als gelesen markieren", "echo-specialpage-markasread": "Benachrichtigung: Als gelesen markieren", "echo-specialpage-markasread-invalid-id": "Ungültige Ereigniskennung", + "echo-specialpage-pagefilterwidget-aria-label": "Nach Wiki und Seitentitel filtern", + "echo-specialpage-special-help-menu-widget-aria-label": "Zusätzliche Optionen und Benachrichtigungseinstellungen.", "echo-specialpage-pagination-numnotifications": "{{PLURAL:$1|Eine Benachrichtigung|$1 Benachrichtigungen}}", "echo-specialpage-pagefilters-title": "Letzte Aktivität", "echo-specialpage-pagefilters-subtitle": "Seiten mit ungelesenen Benachrichtigungen", "notificationsmarkread-legend": "Benachrichtigung als gelesen markieren", - "echo-anon": "Um Benachrichtigungen erhalten zu können, muss man ein [$1 Benutzerkonto anlegen] oder sich [$2 anmelden].", "echo-none": "Du hast keine Benachrichtigungen.", - "echo-more-info": "Mehr Informationen", - "echo-feedback": "Rückmeldungen", "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.", @@ -100,6 +113,12 @@ "echo-notification-markasunread": "Als ungelesen markieren", "echo-notification-markasread-tooltip": "Als gelesen markieren", "echo-notification-more-options-tooltip": "Weitere Optionen", + "notification-dynamic-actions-mute-page-linked": "{{GENDER:$2|Stummschalten}} der Seitenverlinkungs-Benachrichtigung für „$1“", + "notification-dynamic-actions-mute-page-linked-confirmation": "Die Seitenverlinkungs-Benachrichtigung für die Seite „$1“ ist nun abgeschaltet.", + "notification-dynamic-actions-mute-page-linked-confirmation-description": "{{GENDER:$2|Du}} kannst deine stummgeschalteten Seiten jederzeit in [$1 deinen Benutzereinstellungen] verwalten.", + "notification-dynamic-actions-unmute-page-linked": "{{GENDER:$2|Aufhebung der Stummschaltung}} der Seitenverlinkungs-Benachrichtigung für „$1“", + "notification-dynamic-actions-unmute-page-linked-confirmation": "Die Seitenverlinkungs-Benachrichtigung für die Seite „$1“ ist nun eingeschaltet.", + "notification-dynamic-actions-unmute-page-linked-confirmation-description": "{{GENDER:$2|Du}} kannst deine stummgeschalteten Seiten jederzeit in [$1 deinen Benutzereinstellungen] verwalten.", "notification-dynamic-actions-unwatch": "Neue Aktivitäten zu „$1“ {{GENDER:$3|nicht}} mehr beobachten", "notification-dynamic-actions-unwatch-confirmation": "{{GENDER:$3|Du}} beobachtest nicht mehr die Seite „$1“", "notification-dynamic-actions-unwatch-confirmation-description": "{{GENDER:$3|Du}} kannst jederzeit [$2 diese Seite] beobachten.", @@ -130,8 +149,8 @@ "notification-header-mention-other-nosection": "$1 {{GENDER:$2|erwähnte}} {{GENDER:$3|dich}} auf <strong>$4</strong>.", "notification-header-mention-user-talkpage-v2": "$1 {{GENDER:$2|erwähnte}} {{GENDER:$3|dich}} auf der <strong>Benutzerdiskussionsseite {{GENDER:$5|von}} $4</strong> in „<strong>$6</strong>“.", "notification-header-mention-user-talkpage-nosection": "$1 {{GENDER:$2|erwähnte}} {{GENDER:$3|dich}} auf der <strong>Benutzerdiskussionsseite {{GENDER:$5|von}} $4</strong>.", - "notification-header-mention-agent-talkpage": "$1 {{GENDER:$2|erwähnte}} {{GENDER:$3|dich}} auf <strong>{{GENDER:$2|seiner|ihrer}} Diskussionsseite</strong> in „<strong>$4</strong>“.", - "notification-header-mention-agent-talkpage-nosection": "$1 {{GENDER:$2|erwähnte}} {{GENDER:$3|dich}} auf <strong>{{GENDER:$2|seiner|ihrer}} Diskussionsseite</strong>.", + "notification-header-mention-agent-talkpage": "$1 {{GENDER:$2|erwähnte}} {{GENDER:$3|dich}} auf <strong>{{GENDER:$2|seiner|ihrer|Benutzers}} Diskussionsseite</strong> in „<strong>$4</strong>“.", + "notification-header-mention-agent-talkpage-nosection": "$1 {{GENDER:$2|erwähnte}} {{GENDER:$3|dich}} auf <strong>{{GENDER:$2|seiner|ihrer|Benutzers}} Diskussionsseite</strong>.", "notification-header-mention-article-talkpage": "$1 {{GENDER:$2|erwähnte}} {{GENDER:$3|dich}} auf der Diskussionsseite von <strong>$4</strong> in „<strong>$5</strong>“.", "notification-header-mention-article-talkpage-nosection": "$1 {{GENDER:$2|erwähnte}} {{GENDER:$3|dich}} auf der Diskussionsseite von <strong>$4</strong>.", "notification-header-mention-failure-user-unknown": "{{GENDER:$2|Deine}} Erwähnung von <strong>$3</strong> wurde nicht gesendet, da der Benutzer nicht gefunden wurde.", @@ -150,6 +169,16 @@ "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-header-watchlist-changed": "$1 {{GENDER:$2|änderte}} <strong>$3</strong>, eine Seite auf {{GENDER:$4|deiner}} Beobachtungsliste {{PLURAL:$5||, $5x}}.", + "notification-header-watchlist-created": "$1 {{GENDER:$2|erstellte}} <strong>$3</strong>, eine Seite auf {{GENDER:$4|deiner}} Beobachtungsliste {{PLURAL:$5||, $5x}}.", + "notification-header-watchlist-deleted": "$1 {{GENDER:$2|löschte}} <strong>$3</strong>, eine Seite auf {{GENDER:$4|deiner}} Beobachtungsliste {{PLURAL:$5||, $5x}}.", + "notification-header-watchlist-moved": "$1 {{GENDER:$2|verschob}} <strong>$3</strong>, eine Seite auf {{GENDER:$4|deiner}} Beobachtungsliste {{PLURAL:$5||, $5x}}.", + "notification-header-watchlist-restored": "$1 {{GENDER:$2|stellte wieder her}} <strong>$3</strong>, eine Seite auf {{GENDER:$4|deiner}} Beobachtungsliste {{PLURAL:$5||, $5x}}.", + "notification-header-watchlist-multiuser-changed": "<strong>$1</strong>, eine Seite auf {{GENDER:$2|deiner}} Beobachtungsliste, wurde {{PLURAL:$3|einmal|$3x}} geändert.", + "notification-header-watchlist-multiuser-created": "<strong>$1</strong>, eine Seite auf {{GENDER:$2|deiner}} Beobachtungsliste, wurde {{PLURAL:$3||$3x}} erstellt.", + "notification-header-watchlist-multiuser-deleted": "<strong>$1</strong>, eine Seite auf {{GENDER:$2|deiner}} Beobachtungsliste, wurde {{PLURAL:$3|einmal|$3x}} gelöscht.", + "notification-header-watchlist-multiuser-moved": "<strong>$1</strong>, eine Seite auf {{GENDER:$2|deiner}} Beobachtungsliste, wurde {{PLURAL:$3||$3x}} verschoben.", + "notification-header-watchlist-multiuser-restored": "<strong>$1</strong>, eine Seite auf {{GENDER:$2|deiner}} Beobachtungsliste, wurde {{PLURAL:$3||$3x}} wiederhergestellt.", "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!", @@ -158,17 +187,17 @@ "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!", + "notification-header-thank-you-10000000-edit": "{{GENDER:$2|Du}} hast gerade {{GENDER:$2|deine}} zehnmillionste Bearbeitung durchgeführt. {{GENDER:$2|Vielen}} Dank für einen brillanten Beitrag!", "notification-link-thank-you-edit": "{{GENDER:$1|Deine}} Bearbeitung", "notification-link-text-view-edit": "Bearbeitung ansehen", "notification-link-article-reminder": "Seite ansehen", "notification-header-reverted": "Deine {{PLURAL:$4|Bearbeitung an der Seite <strong>$3</strong> wurde|Bearbeitungen an der Seite <strong>$3</strong> wurden}} {{GENDER:$2|rückgängig}} gemacht.", "notification-header-emailuser": "$1 hat dir eine E-Mail {{GENDER:$2|gesendet}}.", - "notification-edit-talk-page-email-subject2": "$1 {{GENDER:$1|hinterließ}} dir eine Nachricht auf {{SITENAME}}", - "notification-edit-talk-page-email-batch-body-with-section": "„$1“ {{GENDER:$1|hinterließ}} eine Nachricht auf deiner Diskussionsseite zum Thema „$2“.", - "notification-page-linked-email-subject": "Eine Seite, die du erstellt hast, wurde auf {{SITENAME}} verlinkt", - "notification-reverted-email-subject2": "Deine {{PLURAL:$3|Bearbeitung auf {{SITENAME}} wurde|Bearbeitungen auf {{SITENAME}} wurden}} {{GENDER:$1|rückgängig}} gemacht", - "notification-mention-email-subject": "$1 {{GENDER:$1|erwähnte}} {{GENDER:$2|dich}} auf {{SITENAME}}", - "notification-user-rights-email-subject": "Deine Benutzerrechte auf „{{SITENAME}}“ wurden geändert.", + "notification-edit-talk-page-email-subject2": "$1 {{GENDER:$2|hinterließ}} {{GENDER:$3|dir}} eine Nachricht auf {{SITENAME}}", + "notification-page-linked-email-subject": "Eine Seite, die {{GENDER:$3|du}} erstellt hast, wurde auf {{SITENAME}} verlinkt", + "notification-reverted-email-subject2": "{{GENDER:$3|Deine}} {{PLURAL:$4|Bearbeitung auf {{SITENAME}} wurde|Bearbeitungen auf {{SITENAME}} wurden}} {{GENDER:$2|rückgängig}} gemacht", + "notification-mention-email-subject": "$1 {{GENDER:$2|erwähnte}} {{GENDER:$3|dich}} auf {{SITENAME}}", + "notification-user-rights-email-subject": "{{GENDER:$3|Deine}} Benutzerrechte auf „{{SITENAME}}“ wurden geändert.", "notification-timestamp-ago-seconds": "{{PLURAL:$1|Eine Sekunde|$1 Sekunden}}", "notification-timestamp-ago-minutes": "{{PLURAL:$1|Eine Minute|$1 Minuten}}", "notification-timestamp-ago-hours": "{{PLURAL:$1|Eine Stunde|$1 Stunden}}", @@ -180,9 +209,7 @@ "notification-inbox-filter-read": "Gelesen", "notification-inbox-filter-unread": "Ungelesen", "notification-inbox-filter-all": "Alle", - "echo-email-body-default": "Es gibt eine neue Benachrichtigung auf {{SITENAME}}:\n\n$1", - "echo-email-footer-default-html": "Um zu steuern, welche E-Mails wir dir senden, <a href=\"$2\" style=\"text-decoration:none; color: #3868B0;\">nutze deine Einstellungen</a>.<br />\n$1", - "echo-email-footer-default": "$2\n\nUm zu steuern, welche E-Mails wir dir senden, nutze deine Einstellungen:\n{{canonicalurl:{{#special:Preferences}}#mw-prefsection-echo}}\n\n$1", + "echo-specialmute-label-mute-notifications": "Benachrichtigungen {{GENDER:$1|dieses Benutzers|dieser Benutzerin}} stumm schalten", "echo-email-plain-footer": "Um zu steuern, welche E-Mails wir {{GENDER:$1|dir}} senden, überprüfe {{GENDER:$1|deine}} Einstellungen:", "echo-email-html-footer-preference-link-text": "überprüfe {{GENDER:$1|deine}} Einstellungen", "echo-email-html-footer-with-link": "Um zu steuern, welche E-Mails wir {{GENDER:$2|dir}} senden, $1.", @@ -192,13 +219,12 @@ "echo-notification-notice-text-only": "Mitteilungen", "echo-overlay-link": "Alle Benachrichtigungen", "echo-overlay-title": "<b>Benachrichtigungen</b>", - "echo-overlay-title-overflow": "<b>{{PLURAL:$1|Benachrichtigungen}}</b> ($1 von $2 ungelesenen werden angezeigt)", "echo-mark-all-as-read": "Alle als gelesen markieren", "echo-mark-all-as-read-confirmation": "{{PLURAL:$1|Eine Benachrichtigung|$1 Benachrichtigungen}} als gelesen markiert", "echo-mark-wiki-as-read": "Alle als gelesen markieren in dem ausgewählten Wiki: $1", + "echo-displaysnippet-title": "Neue Benachrichtigung", "echo-date-today": "Heute", "echo-date-yesterday": "Gestern", - "echo-load-more-error": "Beim Abrufen weiterer Ergebnisse ist ein Fehler aufgetreten.", "notification-bundle-header-edit-user-talk-v2": "{{PLURAL:$1|Eine neue Nachricht|$1 neue Nachrichten|100=Mehr als 99 neue Nachrichten}} auf <strong>{{GENDER:$3|deiner}} Diskussionsseite</strong>.", "echo-email-batch-subject-daily": "Du hast {{PLURAL:$2|eine neue Benachrichtigung|neue Benachrichtigungen}} auf {{SITENAME}}", "echo-email-batch-subject-weekly": "Du hast diese Woche {{PLURAL:$2|eine neue Benachrichtigung|neue Benachrichtigungen}} auf {{SITENAME}}", diff --git a/Echo/i18n/din.json b/Echo/i18n/din.json index 9ffe5315..b3dfc43a 100644 --- a/Echo/i18n/din.json +++ b/Echo/i18n/din.json @@ -1,8 +1,8 @@ { "@metadata": { "authors": [ - "Dinkawiki", - "Amire80" + "Amire80", + "Dinkawiki" ] }, "notifications": "Notifications", diff --git a/Echo/i18n/diq.json b/Echo/i18n/diq.json index 9a71cfc7..3c1a1759 100644 --- a/Echo/i18n/diq.json +++ b/Echo/i18n/diq.json @@ -1,31 +1,44 @@ { "@metadata": { "authors": [ + "1917 Ekim Devrimi", "Asmen", "Erdemaslancan", + "Gorizon", + "Gırd", + "Kumkumuk", "Marmase", "Mirzali", - "Gorizon", + "Orbot707", "Sayginer", - "Kumkumuk", - "Velg", - "Gırd" + "Velg" ] }, "echo-desc": "Karbera heqdê weqan u mesavan malumat dayen sisten", - "prefs-echo": "Mengeney", + "prefs-echo": "Tebliği", "prefs-emailsettings": "Opsiyona e-posta", - "prefs-displaynotifications": "Weçinayışa mocnayışi", + "prefs-echosubscriptions": "Serva na weqayi mı rê pêhesnayışi bırışe", + "prefs-echocrosswiki": "Mabênê wikiya pêhesnayışi", + "prefs-blocknotificationslist": "Karberê peysiyayê", + "prefs-echopollupdates": "Pêhesnayışanê ganıni", + "echo-mobile-notifications-filter-title": "Nasnameyên parzûni", + "echo-pref-show-poll-updates": "Pêhesnayışanê neweya hema bımocne", "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:", "echo-pref-web": "Web", - "echo-pref-email": "E-posta", + "echo-pref-email": "E-poste", + "echo-pref-push": "Appi", "echo-pref-email-frequency-never": "Mı rê tebliğê e-postey merışe", "echo-pref-email-frequency-immediately": "Tebliğê pela abıryayiye", + "echo-pref-email-frequency-daily": "Xulasay roca pêhesnayışan bırışe", + "echo-pref-email-frequency-weekly": "Xulasay hewtekê pêhesnayışa bırışe", "echo-pref-email-format-html": "HTML", "echo-pref-email-format-plain-text": "Metno pan", - "echo-learn-more": "Zewbi", + "echo-pref-cross-wiki-notifications": "Wikiyanê binan ra pêhesnayışa bımocne", + "echo-pref-notifications-blacklist": "Nê karberan ra a ayê pêhesnayışa memocne. ([[mw:Special:MyLanguage/Help:Notifications#mute|tayêna melumat bıgêrê ]])", + "echo-pref-dont-email-read-notifications": "Epostayane xısusiyan rê pêhesnayışê wanayışi merışe", + "echo-learn-more": "Tayêna bımuse", "echo-log": "Qeydê umumi", "echo-new-messages": "Şımaré mesaco newe esto", "echo-category-title-edit-user-talk": "{{PLURAL:$1|Mesacê|Mesacên}} pela werênayışi", @@ -33,41 +46,66 @@ "echo-category-title-reverted": "Timara {{PLURAL:$1|terknayış|terknayışi}}", "echo-category-title-mention": "{{PLURAL:$1|Bahs kerden|Bahs kerdeni}}", "echo-category-title-mention-failure": "{{PLURAL:$1|Bahs kerden|Bahs kerdeni}} xeta bı", - "echo-category-title-other": "{{PLURAL:$1|Zewbi}}", + "echo-category-title-mention-success": "{{PLURAL:$1|Behs şayo|Behsi şayê}}", + "echo-category-title-other": "{{PLURAL:$1|Sewbi}}", "echo-category-title-system": "{{PLURAL:$1|sistem}}", - "notifications": "Mengene", + "echo-category-title-system-noemail": "{{PLURAL:$1|Sistem}}", + "echo-category-title-system-emailonly": "{{PLURAL:$1|Sistem}}", + "echo-category-title-user-rights": "{{PLURAL:$1|Vurnayışa heqa karberi|Vurnayışê heqanê karberi }}", + "echo-category-title-emailuser": "{{PLURAL:$1|Karberê bıni ra eposta |Karberanê binan ra eposta}}", + "echo-category-title-article-reminder": "Pele {{PLURAL:$1|virardoğ|virardoği }}", + "echo-category-title-thank-you-edit": "{{PLURAL:$1|Siyanê sewiyay }} bıvurnê", + "echo-category-title-watchlist": "Temaşeyaye pela de vurnayış", + "echo-category-title-minor-watchlist": "Temaşeyaye pela de vurnayışo werdı", + "notifications": "Tebliği", "tooltip-pt-notifications-alert": "Hayê {{GENDER:|şıma}}", - "tooltip-pt-notifications-notice": "Pêhesnayışé {{GENDER:|şıma}}", + "tooltip-pt-notifications-notice": "Pêhesnayışê {{GENDER:|şıma}}", "echo-displaynotificationsconfiguration": "Eyaranê pêhesnayışa bıasne", + "echo-displaynotificationsconfiguration-notifications-by-category-header": "Gorey kategoriya pêhesnayışi", + "echo-displaynotificationsconfiguration-sorting-by-section-header": "Rêziya tewra", "echo-displaynotificationsconfiguration-enabled-default-header": "Hesıbyaye deyne aktiv", "echo-displaynotificationsconfiguration-enabled-default-existing-users-legend": "Karberê mewcudi", "echo-displaynotificationsconfiguration-enabled-default-new-users-legend": "Karberê neweyi", - "echo-specialpage": "Mengeney", - "echo-specialpage-pagination-numnotifications": "$1 {{PLURAL:$1|mengene|mengeney}}", + "echo-specialpage": "Tebliği", + "echo-specialpage-section-markread": "Grubê wanıyaye nışan bıkerê", + "echo-specialpage-markasread": "Pêhesnayış: wanaye nışan bıkerê", + "echo-specialpage-markasread-invalid-id": "Xırab ID'a serameyi", + "echo-specialpage-pagefilterwidget-aria-label": "Gorey wiki serekê pela parzûn ke", + "echo-specialpage-pagination-numnotifications": "$1 {{PLURAL:$1|tebliğ|tebliği}}", "echo-specialpage-pagefilters-title": "Aktiviteya peyêne", + "notificationsmarkread-legend": "Pêhesnayışi wanaye nışan bıkerê", "echo-none": "Pêhesnayışê şıma çıniyê.", - "echo-more-info": "Tayêna melumat", - "echo-feedback": "Peydrışten", + "echo-api-failure": "Pêhesnayışi nêardê", + "echo-notification-placeholder": "Qet pêhesnayış çıniyo", + "echo-notification-placeholder-filters": "Gorey nê kriteri pêhesnayış çıniyo", + "echo-notification-loginrequired": "Serva pêhesnayışa mocnayışi rê ronıştış akerê", + "echo-notification-popup-loginrequired": "Pêhesnayışanê ho vinayışi rê ronıştış akerê", "echo-notification-markasread": "Wanaye nışan ke", "echo-notification-markasunread": "Nêwanaye nışan ke", "echo-notification-markasread-tooltip": "Wanaye nışan ke", "echo-notification-more-options-tooltip": "Dehana zaf weçenegi", - "notification-link-text-expand-all": "Hera ke", + "notification-dynamic-actions-unwatch": "\"$1\" sera temaşeyi ektivitey neweyi {{GENDER:$3|veradê}}", + "notification-dynamic-actions-unwatch-confirmation": "{{GENDER:$3|şıma}} yê hêni pela \"$1\" temaşe nêkenê", + "notification-dynamic-actions-unwatch-confirmation-description": "{{GENDER:$3|şıma}}, çı wext wazenê se şenê [$2 na pela ] temaşe kerê .", + "notification-dynamic-actions-watch": "\"$1\" sera aktiviteyanê neweya {{GENDER:$3|teqib kerê }}", + "notification-dynamic-actions-watch-confirmation": "{{GENDER:$3|Şıma }} yê enewke pela \"$1\" temaşe kenê", + "notification-link-text-expand-all": "Hera kerê", "notification-link-text-expand-alert-count": "{{PLURAL:$1|$1 iqazi|$1 iqazan}} bıvin", "notification-link-text-expand-notice-count": "{{PLURAL:$1|$1 beyanati|$1 beyanatan}} bıvin", "notification-link-text-expand-all-count": "$1 {{PLURAL:$1|mengene|mengeneyan}} bıvin", - "notification-link-text-collapse-all": "Teng kı", + "notification-link-text-collapse-all": "Teng ke", "notification-link-text-view-message": "Qaytê mesaci ke", "notification-link-text-view-mention": "Qayt ke, cao ke qalê to biyo", "notification-link-text-view-mention-failure": "{{PLURAL:$1|Behsi bıasne|Bahsan bıasne }}", "notification-link-text-view-changes": "Vurriyayışa {{GENDER:$1|bıvin}}", "notification-link-text-view-page": "Bewne perre", "notification-compact-header-page-linked": "<strong>$1</strong> ra gıre biyo.", - "notification-link-text-what-links-here": "Ena perre rê pêro linki", + "notification-link-text-what-links-here": "Linkê pêroyê ena perer", "notification-header-mention-other": "$1 zerreyê <strong>$4</strong> \"<strong>$5</strong>\" de {{GENDER:$3|şıma sero}} {{GENDER:$2|qal kerd}}.", "notification-header-mention-other-nosection": "$1, per da <strong>$4</strong> dı {{GENDER:$3|tora}} {{GENDER:$2|bahs kerd}}.", "notification-header-user-rights-remove-only": "Heqa karberiya {{GENDER:$4|şıma}} {{GENDER:$1|vurriye}}. Şıma ezayê ena grube niyê: $2.", "notification-header-welcome": "{{GENDER:$2|Xeyr ameyê}} be {{SITENAME}}, $1! Tiya de {{GENDER:$2|biyena şıma}} ra zerreweşime.", + "notification-header-watchlist-multiuser-changed": "<strong>$1</strong>, lista temaşeyi da {{GENDER:$2|şıma }} dê yew pela $3 {{PLURAL:$3|fın|fıni}} vurneyê.", "notification-welcome-linktext": "Xeyr amey", "notification-header-thank-you-1-edit": "Şıma {{GENDER:$2|vurnayışa}} xoya sıfteyëna {{GENDER:$2|kerd a. }}; teşekur kem u şıma xeyr ameyê!", "notification-header-thank-you-10-edit": "Şıma {{GENDER:$2|vurnayışa}} 10 yi {{GENDER:$2|kerd a. }}; teşekur kem. Dewam kerê!", @@ -78,11 +116,11 @@ "notification-header-thank-you-1000000-edit": "Şıma {{GENDER:$2|vurnayışa}} milyoni {{GENDER:$2|kerd a }}; teşekur kem. Şıma ra ata kes çıni yo", "notification-link-thank-you-edit": "Vurnayışê {{GENDER:$1|şıma}}", "notification-link-text-view-edit": "Qaytê vırnayışi ke", - "notification-header-reverted": "{{PLURAL:$4|Vurnayışê <strong>$3</strong> |vurnayışê <strong>$3</strong> }} şıma karber $1 {{GENDER:$2|peyser gırewt}}", + "notification-link-article-reminder": "Pela vıcenep", + "notification-header-reverted": "{{PLURAL:$4|Vurnayışê <strong>$3</strong> |vurnayışê <strong>$3</strong> }} şıma karber {{GENDER:$2|peyser gırewt}}", "notification-header-emailuser": "$1 şıma rê yew e-poste {{GENDER:$2|rışt}}.", - "notification-edit-talk-page-email-subject2": "$1 to rê {{SITENAME}} de yew mesac {{GENDER:$1|caverda}}", - "notification-edit-talk-page-email-batch-body-with-section": "$1, pela werênayışê şıma de be sernameyê \"$2\" ra yew mesac {{GENDER:$1|caverda}}.", - "notification-page-linked-email-subject": "Perer rê {{SITENAME}} ra gıre deya yo", + "notification-edit-talk-page-email-subject2": "$1 {{GENDER:$3|to}} rê {{SITENAME}} de yew mesac {{GENDER:$2|caverda}}", + "notification-page-linked-email-subject": "Pela {{GENDER:$3|to}} rê {{SITENAME}} ra gıre deya yo", "notification-timestamp-ago-seconds": "{{PLURAL:$1|$1s}}", "notification-timestamp-ago-minutes": "{{PLURAL:$1|$1d}}", "notification-timestamp-ago-hours": "{{PLURAL:$1|$1sa}}", @@ -91,19 +129,19 @@ "notification-timestamp-ago-years": "{{PLURAL:$1|$1ser}}", "notification-timestamp-today": "Noroc", "notification-timestamp-yesterday": "Vızér", - "notification-inbox-filter-read": "Bıwanê", + "notification-inbox-filter-read": "Bıwane", "notification-inbox-filter-unread": "Nêwaniya ya", "notification-inbox-filter-all": "Pêro", - "echo-email-body-default": "{{SITENAME}} de beyanatê do newe esto:\n\n$1", - "echo-email-html-footer-preference-link-text": "tercihanê xo kontrol ke", - "echo-notification-alert": "{{PLURAL:$1|($1) iqaz|($1) iqaza|100= (99+) iqazan}}", + "echo-specialmute-label-mute-notifications": "Nê karberi ra a ayê pêhesnayışa bıpeysne", + "echo-email-html-footer-preference-link-text": "tercihanê {{GENDER:$1|xo}} kontrol ke", + "echo-notification-alert": "{{PLURAL:$1|($1) iqaz|($1) iqazi|100= (99+) iqazan}}", "echo-notification-alert-text-only": "İqazi", "echo-notification-notice-text-only": "Mengeney", - "echo-overlay-link": "Pêro beyanati", - "echo-overlay-title": "<b>Mengeney </b>", - "echo-overlay-title-overflow": "<b>{{PLURAL:$1|Mengen|$1 Mengeney }}</b> ($2 nêwaneya ra $1 teney asenê)", + "echo-overlay-link": "Tebliği pêro", + "echo-overlay-title": "<b>Tebliği</b>", "echo-mark-all-as-read": "Pêron waniyaye nışan bık", "echo-mark-wiki-as-read": "Wiki dı pêron wanaye nışan bık:$1", + "echo-displaysnippet-title": "Pêhesnayışê newey", "echo-date-today": "Ewro", "echo-date-yesterday": "Vızér", "echo-email-batch-link-text-view-all-notifications": "Qaytê beyanatan pêrine ke", diff --git a/Echo/i18n/dsb.json b/Echo/i18n/dsb.json index 3a92009f..d2e78a5f 100644 --- a/Echo/i18n/dsb.json +++ b/Echo/i18n/dsb.json @@ -7,7 +7,6 @@ "echo-desc": "System powěźeńkow", "prefs-echo": "Powěźeńki", "prefs-emailsettings": "E-mailowe nastajenja", - "prefs-displaynotifications": "Zwobraznjowańske nastajenja", "prefs-echosubscriptions": "Mě wó toś tych tšojenjach informěrowaś", "echo-pref-send-me": "Pósćel mě:", "echo-pref-send-to": "Pósłaś na:", @@ -32,34 +31,25 @@ "echo-pref-tooltip-article-linked": "Informěruj mě, gaž něchten wótkazujo na bok, kótaryž som z nastawka napórał.", "echo-pref-tooltip-reverted": "Informěruj mě, gaž něchten z pomocu anulěrowanja abo rěda anulěrujo změnu, kótaruž som cynił.", "echo-pref-tooltip-mention": "Informěruj mě, gaž něchten wótkazujo z někakego diskusijnego boka k mójomu wužywarskemu bokoju.", - "echo-error-no-formatter": "Za powěźeńku njejo se formatěrowanje definěrowało.", "notifications": "Powěźeńki", "echo-specialpage": "Powěźeńki", - "echo-anon": "Aby powěźeńki dostał, [$1 napóraj konto] abo [$2 pśizjaw se].", "echo-none": "Njamaš powěźeńki", - "echo-more-info": "Dalšne informacije", - "echo-feedback": "Komentary", "notification-link-text-view-message": "Powěsć pokazaś", "notification-link-text-view-mention": "Naspomnjenje pokazaś", "notification-link-text-view-changes": "Změny pokazaś", "notification-link-text-view-page": "Bok se woglědaś", "notification-link-text-view-edit": "Změnu pokazaś", "notification-header-reverted": "$1 jo {{PLURAL:$4|změnu na $3|změnje na $3|změny na $3}} {{GENDER:$2|anulěrował|anulěrowała}}.", - "notification-edit-talk-page-email-subject2": "$1 jo śi powěsć na {{GRAMMAR:lokatiw|{{SITENAME}}}} {{GENDER:$1|zawóstajił|zawóstajiła}}", - "notification-edit-talk-page-email-batch-body-with-section": "$1 jo powěsć wó \"$2\" na twójom diskusijnem boku {{GENDER:$1|zawóstajił|zawóstajiła}}.", + "notification-edit-talk-page-email-subject2": "$1 jo śi powěsć na {{GRAMMAR:lokatiw|{{SITENAME}}}} {{GENDER:$2|zawóstajił|zawóstajiła}}", "notification-page-linked-email-subject": "Twój bok jo se na {{GRAMMAR:lokatiw|{{SITENAME}}}} wótkazał.", - "notification-reverted-email-subject2": "{{PLURAL:$3|Twója změna jo|Twójej změnje stej|Twóje změny su}} se na {{GRAMMAR:lokatiw|{{SITENAME}}}}{{GENDER:$1|{{PLURAL:$3|anulěrowała|anulěrowałej|anulěrowali}}}}", - "notification-mention-email-subject": "$1 jo śi na {{GRAMMAR:lokatiw|{{SITENAME}}}} {{GENDER:$1|naspomnjeł|naspomnjeła}}", + "notification-reverted-email-subject2": "{{PLURAL:$4|Twója změna jo|Twójej změnje stej|Twóje změny su}} se na {{GRAMMAR:lokatiw|{{SITENAME}}}}{{GENDER:$2|{{PLURAL:$4|anulěrowała|anulěrowałej|anulěrowali}}}}", + "notification-mention-email-subject": "$1 jo śi na {{GRAMMAR:lokatiw|{{SITENAME}}}} {{GENDER:$2|naspomnjeł|naspomnjeła}}", "notification-user-rights-email-subject": "Twóje wužywarske pšawa su se na {{GRAMMAR:lokatiw|{{SITENAME}}}} změnili", - "echo-email-body-default": "Maš nowu powěźeńku na {{GRAMMAR:lokatiw|{{SITENAME}}}}:\n\n$1", - "echo-email-footer-default": "$2\n\nAby kontrěrolował, kótare e-maile śi sćelomy, pśeglědaj swóje nastajenja:\n{{canonicalurl:{{#special:Preferences}}#mw-prefsection-echo}}\n\n$1", "echo-overlay-link": "Wšykne powěźeńki", "echo-overlay-title": "<b>Powěźeńki</b>", - "echo-overlay-title-overflow": "<b>{{PLURAL:$1|Poěźeńka|Powěźeńce|Powěźeńki}}</b> ($1 z $2 {{PLURAL:$2|njepśecytaneje|njepśecytaneju|njepśecytanych}} se {{PLURAL:$1|pokazujo|pokazujotej|pokazuju|pokazujo}})", "echo-mark-all-as-read": "Wšykne ako pśecytane markěrowaś", "echo-date-today": "Źinsa", "echo-date-yesterday": "Cora", - "echo-load-more-error": "Pśi wobstarowanju dalšnych wuslědkow jo zmólka nastała.", "echo-email-batch-subject-daily": "Maš {{PLURAL:$2|nowu powěźeńku|nowej powěźeńce|nowe powěźeńki}} na {{GRAMMAR:lokatiw|{{SITENAME}}}}", "echo-email-batch-subject-weekly": "Maš {{PLURAL:$2|nowu powěźeńku|nowej powěźeńce|nowe powěźeńki}} na {{GRAMMAR:lokatiw|{{SITENAME}}}} toś ten tyźeń", "echo-email-batch-body-intro-daily": "Witaj $1,\n\nhow jo zespominanje źinsajšnych aktiwitow na {{GRAMMAR:lokatiw|{{SITENAME}}}} za tebje.", diff --git a/Echo/i18n/dty.json b/Echo/i18n/dty.json index 26cc9e79..d915365a 100644 --- a/Echo/i18n/dty.json +++ b/Echo/i18n/dty.json @@ -1,10 +1,10 @@ { "@metadata": { "authors": [ - "रमेश सिंह बोहरा", + "Nirajan pant", "जनक राज भट्ट", - "राम प्रसाद जोशी", - "Nirajan pant" + "रमेश सिंह बोहरा", + "राम प्रसाद जोशी" ] }, "tooltip-pt-notifications-alert": "{{GENDER:|तमरा}} अलर्टहरू", diff --git a/Echo/i18n/el.json b/Echo/i18n/el.json index 134df7ab..485e4d93 100644 --- a/Echo/i18n/el.json +++ b/Echo/i18n/el.json @@ -2,30 +2,35 @@ "@metadata": { "authors": [ "Aitolos", + "Auslaender", "Dipa1965", "Geraki", + "Giorgos456", "Glavkos", + "Nikosgranturismogt", + "Norhorn", "Protnet", + "Tsoukali", "Xaris333", "ZaDiak", - "Auslaender", - "Giorgos456", - "Tsoukali", "Ανώνυμος Βικιπαιδιστής" ] }, "echo-desc": "Σύστημα για την ενημέρωση των χρηστών σχετικά με τα γεγονότα και τα μηνύματα", "prefs-echo": "Ενημερώσεις", "prefs-emailsettings": "Επιλογές ηλεκτρονικού ταχυδρομείου", - "prefs-displaynotifications": "Επιλογές εμφάνισης", "prefs-echosubscriptions": "Να ειδοποιούμαι σχετικά με αυτά τα γεγονότα", "prefs-echocrosswiki": "Cross-wiki ενημερώσεις", "prefs-blocknotificationslist": "Σιγασμένοι χρήστες", + "prefs-echopollupdates": "Ζωντανές ενημερώσεις", + "echo-mobile-notifications-filter-title": "Φιλτράρισμα ενημερώσεων", + "echo-pref-show-poll-updates": "Εμφάνιση νέων ενημερώσεων καθώς έρχονται", "echo-pref-send-me": "Στείλτε μου:", "echo-pref-send-to": "Αποστολή σε:", "echo-pref-email-format": "Μορφή ηλεκτρονικού ταχυδρομείου:", "echo-pref-web": "Ιστοσελίδα", "echo-pref-email": "Ηλεκτρονικό ταχυδρομείο", + "echo-pref-push": "Εφαρμογές", "echo-pref-email-frequency-never": "Μην μου στέλνετε ενημερώσεις μέσω ηλεκτρονικού ταχυδρομείου", "echo-pref-email-frequency-immediately": "Μεμονωμένες ενημερώσεις, καθώς έρχονται", "echo-pref-email-frequency-daily": "Ημερήσια σύνοψη ενημερώσεων", @@ -34,8 +39,6 @@ "echo-pref-email-format-plain-text": "Απλό κείμενο", "echo-pref-cross-wiki-notifications": "Εμφάνιση ενημερώσεων από άλλα wiki", "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": "Μάθετε περισσότερα", "echo-log": "Δημόσια καταγραφή", "echo-new-messages": "Έχετε νέα μηνύματα", @@ -47,9 +50,14 @@ "echo-category-title-mention-success": "{{PLURAL:$1|Επιτυχημένη αναφορά|Επιτυχημένες αναφορές}}", "echo-category-title-other": "{{PLURAL:$1|Άλλα}}", "echo-category-title-system": "{{PLURAL:$1|Σύστημα}}", + "echo-category-title-system-noemail": "{{PLURAL:$1|Σύστημα}}", + "echo-category-title-system-emailonly": "{{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-category-title-thank-you-edit": "{{PLURAL:$1|Ορόσημο|Ορόσημα}} επεξεργασιών", + "echo-category-title-watchlist": "Επεξεργασία σε παρακολουθούμενη σελίδα", + "echo-category-title-minor-watchlist": "Μικρή επεξεργασία σε παρακολουθούμενη σελίδα", "echo-pref-tooltip-edit-user-talk": "Να ενημερώνομαι όταν κάποιος δημοσιεύσει ένα μήνυμα ή απαντήσεις στη σελίδα συζήτησής μου.", "echo-pref-tooltip-article-linked": "Να ενημερώνομαι όταν κάποιος συνδέει τη σελίδα που δημιούργησα σε μια σελίδα λήμματος.", "echo-pref-tooltip-reverted": "Να ενημερώνομαι όταν κάποιος αναστρέφει μια επεξεργασία που έκανα, χρησιμοποιώντας το εργαλείο αναίρεσης ή επαναφοράς.", @@ -59,7 +67,7 @@ "echo-pref-tooltip-user-rights": "Να ενημερώνομαι με όταν κάποιος αλλάζει τα δικαιώματα χρήστη μου.", "echo-pref-tooltip-emailuser": "Να ενημερώνομαι όταν κάποιος μου στέλνει email.", "echo-pref-tooltip-article-reminder": "Να ειδοποιούμαι για αυτή τη σελίδα όταν το ζητάω.", - "echo-error-no-formatter": "Δεν έχει οριστεί μορφοποίηση για την ενημέρωση.", + "echo-pref-tooltip-thank-you-edit": "Ενημερώστε με όταν φτάσω στην 1η, 10η, 100η ... επεξεργασία.", "notifications": "Ενημερώσεις", "tooltip-pt-notifications-alert": "Οι ειδοποιήσεις {{GENDER:|σας}}", "tooltip-pt-notifications-notice": "Οι ενημερώσεις {{GENDER:|σας}}", @@ -70,7 +78,6 @@ "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": "Νέοι χρήστες", @@ -83,10 +90,7 @@ "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": "Δεν υπάρχουν ενημερώσεις.", @@ -97,6 +101,8 @@ "echo-notification-markasunread": "Σήμανση ως αδιάβαστο", "echo-notification-markasread-tooltip": "Σήμανση ως διαβασμένο", "echo-notification-more-options-tooltip": "Περισσότερες επιλογές", + "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 ενημερώσεων}}", @@ -109,6 +115,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": "{{GENDER:$2|Ο|Η}} $1 {{GENDER:$3|σου}} άφησε ένα μήνυμα.", + "notification-compact-header-edit-user-talk-with-section": "{{GENDER:$2|Ο|Η}} $1 {{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>.", @@ -128,6 +136,9 @@ "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-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-header-mention-summary": "{{GENDER:$2|Ο|Η}} $1 {{GENDER:$3|σας}} ανάφερε στη σύνοψη επεξεργασίας στην <strong>$4</strong>.", "notification-welcome-linktext": "Καλώς ήρθατε", "notification-header-thank-you-1-edit": "Μόλις {{GENDER:$2|έκανες}} την πρώτη σου επεξεργασία. Σε ευχαριστούμε, και καλώς ήρθες!", @@ -142,33 +153,35 @@ "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}}", - "notification-edit-talk-page-email-batch-body-with-section": "{{GENDER:$1|Ο|Η}} $1 άφησε ένα μήνυμα στην σελίδα συζήτησής σας στην \"$2\"", - "notification-page-linked-email-subject": "Μια σελίδα που δημιουργήσατε συνθέθηκε σε {{SITENAME}}", - "notification-mention-email-subject": "{{GENDER:$1|Ο|Η}} $1 {{GENDER:$2|σας}} ανέφερε στη {{SITENAME}}", - "notification-user-rights-email-subject": "Τα δικαιώματα χρήστη σας έχουν αλλάξει στη {{SITENAME}}", + "notification-edit-talk-page-email-subject2": "{{GENDER:$2|Ο|Η}} $1 σας άφησε ένα μήνυμα στη {{SITENAME}}", + "notification-page-linked-email-subject": "Μια σελίδα που {{GENDER:$3|δημιουργήσατε}} συνδέθηκε σε {{SITENAME}}", + "notification-reverted-email-subject2": "{{PLURAL:$4|Η επεξεργασία|Οι επεξεργασίες}} {{GENDER:$3|σου}} {{GENDER:$2|αναιρέθηκαν}} σε {{SITENAME}}", + "notification-mention-email-subject": "{{GENDER:$2|Ο|Η}} $1 {{GENDER:$3|σας}} ανέφερε στη {{SITENAME}}", + "notification-user-rights-email-subject": "Τα δικαιώματα χρήστη {{GENDER:$3|σας}} έχουν αλλάξει στη {{SITENAME}}", + "notification-timestamp-ago-seconds": "{{PLURAL:$1|$1δ}}", + "notification-timestamp-ago-minutes": "{{PLURAL:$1|$1λ}}", + "notification-timestamp-ago-hours": "{{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\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-specialmute-label-mute-notifications": "Σίγαση ειδοποιήσεων από αυτόν τον χρήστη", + "echo-email-plain-footer": "Για να ελέγξετε ποια email {{GENDER:$1|σας}} στέλνουμε, ελέγξτε τις προτιμήσεις {{GENDER:$1|σας}}.", "echo-email-html-footer-preference-link-text": "ελέγξτε τις προτιμήσεις {{GENDER:$1|σας}}", + "echo-email-html-footer-with-link": "Για να ελέγξετε ποια email {{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": "Ειδοποιήσεις", "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|ειδοποίηση σημάνθηκε ως αναγνωσμένη|ειδοποιήσεις σημάνθηκαν ως αναγνωσμένες}}", "echo-mark-wiki-as-read": "Σήμανση ως αναγνωσμένο στο επιλεγμένο wiki: $1", + "echo-displaysnippet-title": "Νέα ενημέρωση", "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>.", "echo-email-batch-subject-daily": "Έχετε {{PLURAL:$2|μια νέα ενημέρωση|νέες ενημερώσεις}} στη {{SITENAME}}", "echo-email-batch-subject-weekly": "Έχετε {{PLURAL:$2|μια νέα ενημέρωση|νέες ενημερώσεις}} στη {{SITENAME}} αυτή την εβδομάδα", diff --git a/Echo/i18n/en.json b/Echo/i18n/en.json index 5c14a87e..ca1290aa 100644 --- a/Echo/i18n/en.json +++ b/Echo/i18n/en.json @@ -38,15 +38,20 @@ "echo-desc": "System for notifying users about events and messages", "prefs-echo": "Notifications", "prefs-emailsettings": "Email options", - "prefs-displaynotifications": "Display options", "prefs-echosubscriptions": "Notify me about these events", "prefs-echocrosswiki": "Cross-wiki notifications", "prefs-blocknotificationslist": "Muted users", + "prefs-mutedpageslist": "Muted pages for page link notifications", + "prefs-echopollupdates": "Live notifications", + "echo-mobile-notifications-filter-title": "Filter notifications", + "echo-pref-show-poll-updates": "Display new notifications as they arrive", + "echo-pref-show-poll-updates-help": "Show the number of unread notifications in the title bar, and show a snippet of each notification immediately when it arrives.", "echo-pref-send-me": "Send me:", "echo-pref-send-to": "Send to:", "echo-pref-email-format": "Email format:", "echo-pref-web": "Web", "echo-pref-email": "Email", + "echo-pref-push": "Apps", "echo-pref-email-frequency-never": "Do not send me any email notifications", "echo-pref-email-frequency-immediately": "Individual notifications as they come in", "echo-pref-email-frequency-daily": "A daily summary of notifications", @@ -55,8 +60,8 @@ "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: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-pref-notifications-page-linked-title-muted-list": "Do not display \"Page link\" notifications for these pages. ([[mw:Special:MyLanguage/Help:Notifications#mute|learn more]])", + "echo-pref-dont-email-read-notifications": "Don't include read notifications in summary emails", "echo-learn-more": "Learn more", "echo-log": "Public log", "echo-new-messages": "You have new messages", @@ -68,9 +73,14 @@ "echo-category-title-mention-success": "Successful {{PLURAL:$1|mention|mentions}}", "echo-category-title-other": "{{PLURAL:$1|Other}}", "echo-category-title-system": "{{PLURAL:$1|System}}", + "echo-category-title-system-noemail": "{{PLURAL:$1|System}}", + "echo-category-title-system-emailonly": "{{PLURAL:$1|System}}", "echo-category-title-user-rights": "{{PLURAL:$1|User rights change|User rights changes}}", "echo-category-title-emailuser": "{{PLURAL:$1|Email from other user|Emails from other users}}", "echo-category-title-article-reminder": "Page {{PLURAL:$1|reminder|reminders}}", + "echo-category-title-thank-you-edit": "Edit {{PLURAL:$1|milestone|milestones}}", + "echo-category-title-watchlist": "Edit to watched page", + "echo-category-title-minor-watchlist": "Minor edit to watched page", "echo-pref-tooltip-edit-user-talk": "Notify me when someone posts a message or replies on my talk page.", "echo-pref-tooltip-article-linked": "Notify me when someone links to a page I created from another page.", "echo-pref-tooltip-reverted": "Notify me when someone reverts an edit I made, by using the undo or rollback tool.", @@ -80,7 +90,9 @@ "echo-pref-tooltip-user-rights": "Notify me when someone changes my user rights.", "echo-pref-tooltip-emailuser": "Notify me when someone sends me an email.", "echo-pref-tooltip-article-reminder": "Notify me about this page when I ask.", - "echo-error-no-formatter": "No formatting defined for notification.", + "echo-pref-tooltip-thank-you-edit": "Notify me when I reach my 1st, 10th, 100th... edit.", + "echo-pref-tooltip-watchlist": "Notify me when someone makes a (non-minor) edit to a page on my watchlist.", + "echo-pref-tooltip-minor-watchlist": "Notify me when someone makes a minor edit to a page on my watchlist.", "notifications": "Notifications", "tooltip-pt-notifications-alert": "{{GENDER:|Your}} alerts", "tooltip-pt-notifications-notice": "{{GENDER:|Your}} notices", @@ -91,7 +103,6 @@ "echo-displaynotificationsconfiguration-sorting-by-section-legend": "Which section each notification type is sorted into", "echo-displaynotificationsconfiguration-available-notification-methods-header": "Allowed notification methods", "echo-displaynotificationsconfiguration-available-notification-methods-by-category-legend": "Which notification methods are supported for each category", - "echo-displaynotificationsconfiguration-available-notification-methods-by-type-legend": "Which notification methods are supported for each type; only applies to types within categories that are hidden from preferences", "echo-displaynotificationsconfiguration-enabled-default-header": "Enabled by default", "echo-displaynotificationsconfiguration-enabled-default-existing-users-legend": "Existing users", "echo-displaynotificationsconfiguration-enabled-default-new-users-legend": "New users", @@ -101,16 +112,14 @@ "echo-specialpage-section-markread": "Mark group as read", "echo-specialpage-markasread": "Notification: Mark as read", "echo-specialpage-markasread-invalid-id": "Invalid event ID", + "echo-specialpage-pagefilterwidget-aria-label": "Filter by wiki and page title", + "echo-specialpage-special-help-menu-widget-aria-label": "Additional options and Notifications preferences.", "echo-specialpage-pagination-numnotifications": "$1 {{PLURAL:$1|notification|notifications}}", "echo-specialpage-pagination-range": "$1 - $2", "echo-specialpage-pagefilters-title": "Recent activity", "echo-specialpage-pagefilters-subtitle": "Pages with unread notifications", "notificationsmarkread-legend": "Mark notification as read", - "echo-anon": "To receive notifications, [$1 create an account] or [$2 log in].", "echo-none": "You have no notifications.", - "echo-more-info": "More info", - "echo-feedback": "Feedback", - "echo-quotation-marks": "\"$1\"", "echo-api-failure": "Failed to fetch notifications.", "echo-api-failure-cross-wiki": "Access to the remote domain was denied.", "echo-notification-placeholder": "There are no notifications.", @@ -121,6 +130,12 @@ "echo-notification-markasunread": "Mark as unread", "echo-notification-markasread-tooltip": "Mark as read", "echo-notification-more-options-tooltip": "More options", + "notification-dynamic-actions-mute-page-linked": "{{GENDER:$2|Mute}} link notifications on \"$1\"", + "notification-dynamic-actions-mute-page-linked-confirmation": "\"Page link\" notifications are now disabled for the page \"$1\"", + "notification-dynamic-actions-mute-page-linked-confirmation-description": "{{GENDER:$2|You}} can manage your muted pages in [$1 your preferences] anytime.", + "notification-dynamic-actions-unmute-page-linked": "{{GENDER:$2|Unmute}} link notifications on \"$1\"", + "notification-dynamic-actions-unmute-page-linked-confirmation": "\"Page link\" notifications are now enabled for the page \"$1\"", + "notification-dynamic-actions-unmute-page-linked-confirmation-description": "{{GENDER:$2|You}} can manage your muted pages in [$1 your preferences] anytime.", "notification-dynamic-actions-unwatch": "{{GENDER:$3|Stop}} watching new activity on \"$1\"", "notification-dynamic-actions-unwatch-confirmation": "{{GENDER:$3|You}} are no longer watching the page \"$1\"", "notification-dynamic-actions-unwatch-confirmation-description": "{{GENDER:$3|You}} can watch [$2 this page] anytime.", @@ -172,6 +187,16 @@ "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-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-header-watchlist-changed": "$1 {{GENDER:$2|changed}} <strong>$3</strong>, a page on {{GENDER:$4|your}} watchlist{{PLURAL:$5||, $5 times}}.", + "notification-header-watchlist-created": "$1 {{GENDER:$2|created}} <strong>$3</strong>, a page on {{GENDER:$4|your}} watchlist{{PLURAL:$5||, $5 times}}.", + "notification-header-watchlist-deleted": "$1 {{GENDER:$2|deleted}} <strong>$3</strong>, a page on {{GENDER:$4|your}} watchlist{{PLURAL:$5||, $5 times}}.", + "notification-header-watchlist-moved": "$1 {{GENDER:$2|moved}} <strong>$3</strong>, a page on {{GENDER:$4|your}} watchlist{{PLURAL:$5||, $5 times}}.", + "notification-header-watchlist-restored": "$1 {{GENDER:$2|restored}} <strong>$3</strong>, a page on {{GENDER:$4|your}} watchlist{{PLURAL:$5||, $5 times}}.", + "notification-header-watchlist-multiuser-changed": "<strong>$1</strong>, a page on {{GENDER:$2|your}} watchlist, was changed $3 {{PLURAL:$3|time|times}}.", + "notification-header-watchlist-multiuser-created": "<strong>$1</strong>, a page on {{GENDER:$2|your}} watchlist, was created $3 {{PLURAL:$3|time|times}}.", + "notification-header-watchlist-multiuser-deleted": "<strong>$1</strong>, a page on {{GENDER:$2|your}} watchlist, was deleted $3 {{PLURAL:$3|time|times}}.", + "notification-header-watchlist-multiuser-moved": "<strong>$1</strong>, a page on {{GENDER:$2|your}} watchlist, was moved $3 {{PLURAL:$3|time|times}}.", + "notification-header-watchlist-multiuser-restored": "<strong>$1</strong>, a page on {{GENDER:$2|your}} watchlist, was restored $3 {{PLURAL:$3|time|times}}.", "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!", @@ -181,6 +206,7 @@ "notification-header-thank-you-10000-edit": "{{GENDER:$2|You}} just made {{GENDER:$2|your}} ten thousandth edit; thank {{GENDER:$2|you}} so very much!", "notification-header-thank-you-100000-edit": "{{GENDER:$2|You}} just made {{GENDER:$2|your}} hundred thousandth edit; thank {{GENDER:$2|you}} for an amazing contribution!", "notification-header-thank-you-1000000-edit": "{{GENDER:$2|You}} just made {{GENDER:$2|your}} millionth edit; thank {{GENDER:$2|you}} for an astonishing contribution!", + "notification-header-thank-you-10000000-edit": "{{GENDER:$2|You}} just made {{GENDER:$2|your}} ten millionth edit; thank {{GENDER:$2|you}} for your brilliant dedication!", "notification-link-thank-you-edit": "{{GENDER:$1|Your}} edit", "notification-link-text-view-edit": "View edit", "notification-link-article-reminder": "View page", @@ -188,12 +214,11 @@ "notification-body-reverted": "$1", "notification-header-emailuser": "$1 {{GENDER:$2|sent}} you an email.", "notification-body-emailuser": "$1", - "notification-edit-talk-page-email-subject2": "$1 {{GENDER:$1|left}} you a message on {{SITENAME}}", - "notification-edit-talk-page-email-batch-body-with-section": "$1 {{GENDER:$1|left}} a message on your talk page in \"$2\".", - "notification-page-linked-email-subject": "A page you created was linked on {{SITENAME}}", - "notification-reverted-email-subject2": "Your {{PLURAL:$3|edit was|edits were}} {{GENDER:$1|reverted}} on {{SITENAME}}", - "notification-mention-email-subject": "$1 {{GENDER:$1|mentioned}} {{GENDER:$2|you}} on {{SITENAME}}", - "notification-user-rights-email-subject": "Your user rights have changed on {{SITENAME}}", + "notification-edit-talk-page-email-subject2": "$1 {{GENDER:$2|left}} {{GENDER:$3|you}} a message on {{SITENAME}}", + "notification-page-linked-email-subject": "A page {{GENDER:$3|you}} created was linked on {{SITENAME}}", + "notification-reverted-email-subject2": "{{GENDER:$3|Your}} {{PLURAL:$4|edit was|edits were}} {{GENDER:$2|reverted}} on {{SITENAME}}", + "notification-mention-email-subject": "$1 {{GENDER:$2|mentioned}} {{GENDER:$3|you}} on {{SITENAME}}", + "notification-user-rights-email-subject": "{{GENDER:$3|Your}} user rights have changed on {{SITENAME}}", "notification-timestamp-ago-seconds": "{{PLURAL:$1|$1s}}", "notification-timestamp-ago-minutes": "{{PLURAL:$1|$1m}}", "notification-timestamp-ago-hours": "{{PLURAL:$1|$1h}}", @@ -205,9 +230,7 @@ "notification-inbox-filter-read": "Read", "notification-inbox-filter-unread": "Unread", "notification-inbox-filter-all": "All", - "echo-email-body-default": "You have a new notification at {{SITENAME}}:\n\n$1", - "echo-email-footer-default-html": "To control which emails we send you, <a href=\"$2\" style=\"text-decoration:none; color: #3868B0;\">check your preferences</a>.<br />\n$1", - "echo-email-footer-default": "$2\n\nTo control which emails we send you, check your preferences:\n{{canonicalurl:{{#special:Preferences}}#mw-prefsection-echo}}\n\n$1", + "echo-specialmute-label-mute-notifications": "Mute notifications from this {{GENDER:$1|user}}", "echo-email-plain-footer": "To control which emails we send {{GENDER:$1|you}}, check {{GENDER:$1|your}} preferences:", "echo-email-html-footer-preference-link-text": "check {{GENDER:$1|your}} preferences", "echo-email-html-footer-with-link": "To control which emails we send {{GENDER:$2|you}}, $1.", @@ -217,15 +240,13 @@ "echo-notification-notice-text-only": "Notices", "echo-overlay-link": "All notifications", "echo-overlay-title": "<b>Notifications</b>", - "echo-overlay-title-overflow": "<b>{{PLURAL:$1|Notification|Notifications}}</b> (showing $1 of $2 unread)", "echo-mark-all-as-read": "Mark all as read", "echo-mark-all-as-read-confirmation": "$1 {{PLURAL:$1|notification|notifications}} marked as read", "echo-mark-wiki-as-read": "Mark all as read in selected wiki: $1", + "echo-displaysnippet-title": "New notification", "echo-date-today": "Today", "echo-date-yesterday": "Yesterday", - "echo-load-more-error": "An error occurred while fetching more results.", "notification-bundle-header-edit-user-talk-v2": "{{PLURAL:$1|One new message|$1 new messages|100=99+ new messages}} on <strong>{{GENDER:$3|your}} talk page</strong>.", - "echo-email-batch-separator": "--", "echo-email-batch-bullet": "•", "echo-email-batch-subject-daily": "You have {{PLURAL:$2|a new notification|new notifications}} at {{SITENAME}}", "echo-email-batch-subject-weekly": "You have {{PLURAL:$2|a new notification|new notifications}} at {{SITENAME}} this week", @@ -237,5 +258,6 @@ "notification-header-foreign-all": "More notifications from {{PLURAL:$5|another wiki|$5 other wikis}}", "notification-body-foreign": "$1", "echo-foreign-wiki-lang": "$1 - $2", - "echo-badge-count": "{{PLURAL:$1|$1|100=99+}}" + "echo-badge-count": "{{PLURAL:$1|$1|100={{formatnum:99}}+}}", + "echo-blacklist": "" } diff --git a/Echo/i18n/eo.json b/Echo/i18n/eo.json index 692a815a..d2bd4121 100644 --- a/Echo/i18n/eo.json +++ b/Echo/i18n/eo.json @@ -1,23 +1,24 @@ { "@metadata": { "authors": [ + "Gamliel Fishkin", + "Joao Xavier", "KuboF", - "Tlustulimu", - "Yekrats", - "Robin van der Vliet", "Lucas", "Macofe", - "Gamliel Fishkin", + "Mirin", "NMaia", - "Joao Xavier" + "Robin van der Vliet", + "Tlustulimu", + "Yekrats" ] }, "echo-desc": "Sistemo por sciigado uzantojn pri okazaĵoj kaj mesaĝoj", "prefs-echo": "Sciigoj", "prefs-emailsettings": "Retpoŝtaj opcioj", - "prefs-displaynotifications": "Montraj opcioj", "prefs-echosubscriptions": "Sciigu min pri tiuj ĉi okazaĵoj", "prefs-echocrosswiki": "Transvikiaj sciigoj", + "prefs-blocknotificationslist": "Silentigitaj uzantoj", "echo-pref-send-me": "Sendadi al mi:", "echo-pref-send-to": "Sendadi al:", "echo-pref-email-format": "Formo de retpoŝto:", @@ -30,7 +31,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-beta-feature-cross-wiki-message": "Plibonigitaj sciigoj", "echo-learn-more": "Lerni plu", "echo-log": "Publika protokolo", "echo-new-messages": "Vi havas novajn mesaĝojn", @@ -42,8 +42,10 @@ "echo-category-title-mention-success": "{{PLURAL:$1|Sukcesa mencio|Sukcesaj mencioj}}", "echo-category-title-other": "{{PLURAL:$1|Aliaj}}", "echo-category-title-system": "{{PLURAL:$1|Sistemo}}", + "echo-category-title-system-noemail": "{{PLURAL:$1|Sistemo}}", "echo-category-title-user-rights": "{{PLURAL:$1|Ŝanĝo de uzanto-rajto|Ŝanĝoj de uzanto-rajtoj}}", "echo-category-title-emailuser": "{{PLURAL:$1|Retpoŝta mesaĝo de alia uzanto|Retpoŝtaj mesaĝoj de aliaj uzantoj}}", + "echo-category-title-thank-you-edit": "Redakti {{PLURAL:$1|mejloŝtonon|mejloŝtonojn}}", "echo-pref-tooltip-edit-user-talk": "Sciigu min kiam iu komencas diskuton aŭ respondas en mia diskutpaĝo.", "echo-pref-tooltip-article-linked": "Sciigu min kiam iu de artikolo ligas al paĝo kiun mi kreis.", "echo-pref-tooltip-reverted": "Sciigu min kiam iu malfaras mian redakton per ilo por malfari aŭ amasmalfari.", @@ -52,21 +54,27 @@ "echo-pref-tooltip-mention-success": "Sciigi al mi kiam mi sendas mencion al iu.", "echo-pref-tooltip-user-rights": "Sciigu min, se iu ŝanĝas miajn rajtojn de uzanto.", "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.", + "echo-pref-tooltip-thank-you-edit": "Sciigi min kiam mi atingas mian 1an, 10an, 100an... redaktojn.", "notifications": "Sciigoj", "tooltip-pt-notifications-alert": "{{GENDER:|Viaj}} atentigoj", "tooltip-pt-notifications-notice": "{{GENDER:|Viaj}} sciigoj", + "echo-displaynotificationsconfiguration": "Montri agordejon pri Sciigoj", + "echo-displaynotificationsconfiguration-notifications-by-category-header": "Sciigoj laŭ kategorio", + "echo-displaynotificationsconfiguration-sorting-by-section-header": "Ordigado de tipoj", + "echo-displaynotificationsconfiguration-available-notification-methods-header": "Permesataj sciigaj metodoj", + "echo-displaynotificationsconfiguration-enabled-default-header": "Implicite ŝaltita", "echo-displaynotificationsconfiguration-enabled-default-existing-users-legend": "Estantaj uzantoj", "echo-displaynotificationsconfiguration-enabled-default-new-users-legend": "Novaj uzantoj", + "echo-displaynotificationsconfiguration-mandatory-notification-methods-header": "Postulataj metodoj de sciigo", "echo-specialpage": "Sciigoj", + "echo-specialpage-section-markread": "Marki grupon kiel legitan", + "echo-specialpage-markasread": "Sciigo: Marki kiel legitan", + "echo-specialpage-markasread-invalid-id": "Ne valida identigilo de evento", "echo-specialpage-pagination-numnotifications": "$1 {{PLURAL:$1|sciigo|sciigoj}}", "echo-specialpage-pagefilters-title": "Antaŭnelongaj aktivaĵoj", "echo-specialpage-pagefilters-subtitle": "Paĝoj kun nelegitaj sciigoj", "notificationsmarkread-legend": "Marki sciigon kiel legite", - "echo-anon": "Po ricevadi sciigojn oni bezonas [$1 krei konton] aŭ [$2 ensaluti].", "echo-none": "Vi ne havas sciigojn.", - "echo-more-info": "Pliaj informoj", - "echo-feedback": "Rimarkoj", "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.", @@ -76,16 +84,22 @@ "echo-notification-markasunread": "Marki kiel nelegitan", "echo-notification-markasread-tooltip": "Marki kiel legite", "echo-notification-more-options-tooltip": "Pliaj agordoj", + "notification-dynamic-actions-watch": "{{GENDER:$3|Aboni}} novan aktivecon je \"$1\"", + "notification-dynamic-actions-watch-confirmation": "{{GENDER:$3|Vi}} nun abonas la paĝon \"$1\"", "notification-link-text-expand-all": "Etendi", "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-expand-all-count": "Vidi {{PLURAL:$1|$1 sciigon|$1 sciigojn}}", "notification-link-text-collapse-all": "Kaŝi", "notification-link-text-view-message": "Montri mesaĝon", "notification-link-text-view-mention": "Montri mencion", + "notification-link-text-view-mention-failure": "{{PLURAL:$1|Vidi mencion|Vidi menciojn}}", "notification-link-text-view-changes": "{{GENDER:$1|Montri}} ŝanĝojn", "notification-link-text-view-page": "Montri paĝon", "notification-header-edit-user-talk": "$1 {{GENDER:$2|lasis}} mesaĝon sur <strong>{{GENDER:$3|via}} diskutpaĝo</strong>.", "notification-header-edit-user-talk-with-section": "$1 {{GENDER:$2|lasis}} mesaĝon sur <strong>{{GENDER:$3|via}} diskutpaĝo</strong> en «<strong>$4</strong>».", + "notification-compact-header-edit-user-talk": "$1 {{GENDER:$2|sendis}} {{GENDER:$3|al vi}} mesaĝono.", + "notification-compact-header-edit-user-talk-with-section": "$1 {{GENDER:$2|sendis}} {{GENDER:$3|al vi}} mesaĝon ĉe \"<strong>$4</strong>\".", "notification-header-page-linked": "Ligilo estis kreita de <strong>$4</strong> al <strong>$3</strong>.", "notification-compact-header-page-linked": "Ligita el <strong>$1</strong>.", "notification-bundle-header-page-linked": "Ligiloj estis kreitaj el {{PLURAL:$5||$5 paĝoj|100=pli ol 99 aliaj paĝoj}} al <strong>$3</strong>.", @@ -98,6 +112,8 @@ "notification-header-mention-agent-talkpage-nosection": "$1 {{GENDER:$2|menciis}} {{GENDER:$3|vin}} sur <strong>{{GENDER:$2|sia}} diskutopaĝo</strong>.", "notification-header-mention-article-talkpage": "$1 {{GENDER:$2|menciis}} {{GENDER:$3|vin}} sur la diskutopaĝo de <strong>$4</strong> en \"<strong>$5</strong>\".", "notification-header-mention-article-talkpage-nosection": "$1 {{GENDER:$2|menciis}} {{GENDER:$3|vin}} sur la diskutopaĝo de <strong>$4</strong>.", + "notification-compact-header-mention-failure-user-unknown": "<strong>Uzantnomo ne ekzistas:</strong> $1", + "notification-compact-header-mention-failure-user-anonymous": "<strong>Oni ne povas mencii IP-adreson:</strong> $1", "notification-header-mention-success": "{{GENDER:$2|Via}} mencio de <strong>$3</strong> estis sendita.", "notification-header-mention-success-bundle": "{{PLURAL:$3|Mencio, kiu|$3 mencioj, kiuj}}n {{GENDER:$2|vi faris}} en la diskutpaĝo <strong>$4</strong>, estis sendita{{PLURAL:$3||j}}.", "notification-compact-header-mention-success": "<strong>{{GENDER:$2|Vi menciis}}:</strong> $3", @@ -115,13 +131,13 @@ "notification-header-thank-you-1000000-edit": "{{GENDER:$2|Vi}} ĵus faris {{GENDER:$2|vian}} milionan redakton. Dankegon al {{GENDER:$2|vi}} por mire multaj kontribuoj!", "notification-link-thank-you-edit": "{{GENDER:$1|Via}} redakto", "notification-link-text-view-edit": "Montri redakton", + "notification-link-article-reminder": "Vidi paĝon", "notification-header-reverted": "{{PLURAL:$4|Via redakto sur $3 estis {{GENDER:$2|malfarita}}|Viaj redaktoj sur $3 estis {{GENDER:$2|malfaritaj}}}}.", "notification-header-emailuser": "$1 {{GENDER:$2|sendis}} al vi retpoŝtan mesaĝon.", - "notification-edit-talk-page-email-subject2": "$1 {{GENDER:$1|lasis}} al vi mesaĝon sur {{SITENAME}}", - "notification-edit-talk-page-email-batch-body-with-section": "$1 {{GENDER:$1|lasis}} mesaĝon sur via diskutopaĝo pri \"$2\".", + "notification-edit-talk-page-email-subject2": "$1 {{GENDER:$2|lasis}} al vi mesaĝon sur {{SITENAME}}", "notification-page-linked-email-subject": "Paĝo kiun vi kreis estas ligita en {{SITENAME}}", - "notification-reverted-email-subject2": "{{PLURAL:$3|Via redakto estis {{GENDER:$1|malfarita}}|Viaj redaktoj estis {{GENDER:$1|malfaritaj}}}} sur {{SITENAME}}", - "notification-mention-email-subject": "$1 {{GENDER:$1|menciis}} {{GENDER:$2|vin}} sur {{SITENAME}}", + "notification-reverted-email-subject2": "{{PLURAL:$4|Via redakto estis {{GENDER:$2|malfarita}}|Viaj redaktoj estis {{GENDER:$2|malfaritaj}}}} sur {{SITENAME}}", + "notification-mention-email-subject": "$1 {{GENDER:$2|menciis}} {{GENDER:$3|vin}} sur {{SITENAME}}", "notification-user-rights-email-subject": "Viaj uzantorajtoj estis ŝanĝitaj sur {{SITENAME}}", "notification-timestamp-ago-seconds": "{{PLURAL:$1|sekundo|$1 sekundoj}}", "notification-timestamp-ago-minutes": "{{PLURAL:$1|minuto|$1 minutoj}}", @@ -134,19 +150,20 @@ "notification-inbox-filter-read": "Legita", "notification-inbox-filter-unread": "Nelegita", "notification-inbox-filter-all": "Ĉiuj", - "echo-email-body-default": "Vi havas novan noton ĉe {{SITENAME}}:\n\n$1", - "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-specialmute-label-mute-notifications": "Silentigi sciigojn el ĉi tiu uzanto", "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-notice": "{{PLURAL:$1|Avizo ($1)|Avizoj ($1)|100=Avizoj (99+)}}", "echo-notification-alert-text-only": "Atentigoj", "echo-notification-notice-text-only": "Sciigoj", "echo-overlay-link": "Ĉiuj sciigoj", "echo-overlay-title": "<b>Sciigoj</b>", - "echo-overlay-title-overflow": "<b>{{PLURAL:$1|Sciigo|Sciigoj}}</b> (montrante $1 de $2 {{PLURAL:$2|nelegita|nelegitaj}})", "echo-mark-all-as-read": "Marki ĉiujn kiel legitaj", + "echo-mark-all-as-read-confirmation": "$1 {{PLURAL:$1|sciigo estis markita kiel legita|sciigoj estis markitaj kiel legitaj}}", + "echo-mark-wiki-as-read": "Marki ĉion kiel legitan en elektita vikio: $1", + "echo-displaysnippet-title": "Nova sciigo", "echo-date-today": "Hodiaŭ", "echo-date-yesterday": "Hieraŭ", - "echo-load-more-error": "Okazis eraro dum venigo de pliaj rezultoj.", "notification-bundle-header-edit-user-talk-v2": "{{PLURAL:$1|Nova mesaĝo|$1 novaj mesaĝoj|100=pli ol 99 novaj mesaĝoj}} sur <strong>{{GENDER:$3|via}} diskutopaĝo</strong>.", "echo-email-batch-subject-daily": "Vi havas {{PLURAL:$2|novan sciigon|novajn sciigojn}} sur {{SITENAME}}", "echo-email-batch-subject-weekly": "Vi ĉisemajne havas {{PLURAL:$2|novan sciigon|novajn sciigojn}} sur {{SITENAME}}", @@ -154,5 +171,6 @@ "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 atentigoj de {{PLURAL:$5|alia vikio|$5 aliaj vikioj}}", - "notification-header-foreign-notice": "Pliaj sciigoj el {{PLURAL:$5|alia vikio|$5 aliaj vikioj}}" + "notification-header-foreign-notice": "Pliaj sciigoj el {{PLURAL:$5|alia vikio|$5 aliaj vikioj}}", + "notification-header-foreign-all": "Pli da sciigoj el {{PLURAL:$5|alia vikio|$5 aliaj vikioj}}" } diff --git a/Echo/i18n/es.json b/Echo/i18n/es.json index 1ed48c16..259bd990 100644 --- a/Echo/i18n/es.json +++ b/Echo/i18n/es.json @@ -2,41 +2,41 @@ "@metadata": { "authors": [ "-jem-", + "2axterix2", + "Allan Aguilar", + "Amitie 10g", "Armando-Martin", + "Ciencia Al Poder", "DJ Nietzsche", + "DannyS712", + "Dgstranz", "Fitoschido", "Hahc21", + "Hamilton Abreu", "Invadinado", + "Javiersanp", "Jduranboger", "Larjona", + "Lemondoge", + "Macofe", + "MarcoAurelio", + "Matiia", + "Mgpena", "Miguel2706", + "Peter Bowman", "PoLuX124", "Ralgis", + "Rubentl134", + "Savh", "The Anonymouse", "TheBITLINK", - "Vivaelcelta", "Themasterriot", - "Macofe", - "Amitie 10g", - "Peter Bowman", - "Allan Aguilar", - "Mgpena", - "Ciencia Al Poder", - "Lemondoge", - "Rubentl134", - "2axterix2", - "Dgstranz", - "Hamilton Abreu", - "Matiia", - "Javiersanp", - "MarcoAurelio", - "Savh" + "Vivaelcelta" ] }, "echo-desc": "Sistema para notificar a los usuarios sobre eventos y mensajes", "prefs-echo": "Notificaciones", "prefs-emailsettings": "Opciones de correo electrónico", - "prefs-displaynotifications": "Opciones de visualización", "prefs-echosubscriptions": "Notificarme sobre estos eventos", "prefs-echocrosswiki": "Notificaciones de varios wikis", "prefs-blocknotificationslist": "Usuarios silenciados", @@ -45,6 +45,7 @@ "echo-pref-email-format": "Formato del correo electrónico:", "echo-pref-web": "Web", "echo-pref-email": "Correo electrónico", + "echo-pref-push": "Aplicaciones", "echo-pref-email-frequency-never": "No enviarme notificaciones por correo electrónico", "echo-pref-email-frequency-immediately": "Enviarme las notificaciones individuales en cuanto lleguen", "echo-pref-email-frequency-daily": "Resumen diario de notificaciones", @@ -53,8 +54,6 @@ "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: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", "echo-log": "Registro público", "echo-new-messages": "Tienes mensajes nuevos", @@ -66,9 +65,12 @@ "echo-category-title-mention-success": "{{PLURAL:$1|Mención exitosa|Menciones exitosas}}", "echo-category-title-other": "{{PLURAL:$1|Otro|Otros}}", "echo-category-title-system": "{{PLURAL:$1|Sistema}}", + "echo-category-title-system-noemail": "{{PLURAL:$1|Sistema}}", + "echo-category-title-system-emailonly": "{{PLURAL:$1|Sistema}}", "echo-category-title-user-rights": "{{PLURAL:$1|Cambio de permisos de usuario|Cambios de permisos de usuarios}}", "echo-category-title-emailuser": "{{PLURAL:$1|Correo electrónico de otro usuario|Correos electrónicos de otros usuarios}}", "echo-category-title-article-reminder": "{{PLURAL:$1|Recordatorio de páginas|Recordatorios de páginas}}", + "echo-category-title-thank-you-edit": "{{PLURAL:$1|Hito|Hitos}} de edición", "echo-pref-tooltip-edit-user-talk": "Notificarme cuando alguien publique un mensaje o responda en mi página de discusión.", "echo-pref-tooltip-article-linked": "Notificarme cuando alguien enlace a una página creada a partir de otra página.", "echo-pref-tooltip-reverted": "Notificarme cuando alguien revierta una edición mía mediante las herramientas de deshacer o revertir.", @@ -78,7 +80,7 @@ "echo-pref-tooltip-user-rights": "Notificarme cuando alguien cambie mis derechos de {{GENDER:|usuario|usuaria}}.", "echo-pref-tooltip-emailuser": "Notificarme cuando alguien me envíe un correo electrónico.", "echo-pref-tooltip-article-reminder": "Notificarme sobre esta página cuando lo solicite.", - "echo-error-no-formatter": "No se definió ningún formato para las notificaciones.", + "echo-pref-tooltip-thank-you-edit": "Notifícame cuando alcance mi primera, décima, centésima... edición.", "notifications": "Notificaciones", "tooltip-pt-notifications-alert": "{{GENDER:|Tus}} alertas", "tooltip-pt-notifications-notice": "{{GENDER:|Tus}} avisos", @@ -89,7 +91,6 @@ "echo-displaynotificationsconfiguration-sorting-by-section-legend": "Sección en la que se clasificará cada tipo de notificación", "echo-displaynotificationsconfiguration-available-notification-methods-header": "Métodos de notificación permitidos", "echo-displaynotificationsconfiguration-available-notification-methods-by-category-legend": "Cuáles métodos de notificación están admitidos para cada categoría", - "echo-displaynotificationsconfiguration-available-notification-methods-by-type-legend": "Cuáles métodos de notificación están admitidos para cada tipo; sólo se aplica a los tipos dentro de las categorías que están ocultos de las preferencias", "echo-displaynotificationsconfiguration-enabled-default-header": "Activadas predeterminadamente", "echo-displaynotificationsconfiguration-enabled-default-existing-users-legend": "Usuarios existentes", "echo-displaynotificationsconfiguration-enabled-default-new-users-legend": "Usuarios nuevos", @@ -99,14 +100,12 @@ "echo-specialpage-section-markread": "Marcar sección como leída", "echo-specialpage-markasread": "Notificación: marcar como leída", "echo-specialpage-markasread-invalid-id": "Identificador de evento no válido", + "echo-specialpage-pagefilterwidget-aria-label": "Filtrar por wiki y título de página", "echo-specialpage-pagination-numnotifications": "$1 {{PLURAL:$1|notificación|notificaciones}}", "echo-specialpage-pagefilters-title": "Actividad reciente", "echo-specialpage-pagefilters-subtitle": "Páginas con notificaciones sin leer", "notificationsmarkread-legend": "Marcar la notificación como leída", - "echo-anon": "Para recibir notificaciones, [$1 regístrate] o [$2 accede a tu cuenta].", "echo-none": "No tienes notificaciones.", - "echo-more-info": "Más información", - "echo-feedback": "Comentarios", "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.", @@ -158,6 +157,7 @@ "notification-header-user-rights-add-only": "{{GENDER:$4|Tus}} permisos de usuario han sido {{GENDER:$1|modificados}}. Ahora perteneces a: $2.", "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-user-rights-expiry-change": "Se ha {{GENDER:$1|modificado}} la duración de {{GENDER:$4|tu}} pertenencia en {{PLURAL:$3|el siguiente grupo|los siguientes grupos}} de usuario: $2.", "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", @@ -173,12 +173,11 @@ "notification-link-article-reminder": "Ver página", "notification-header-reverted": "{{PLURAL:$4|Tu edición en <strong>$3</strong> fue {{GENDER:$2|revertida}}|Tus ediciones en <strong>$3</strong> fueron {{GENDER:$2|revertidas}}}}.", "notification-header-emailuser": "$1 te ha {{GENDER:$2|enviado}} un correo electrónico.", - "notification-edit-talk-page-email-subject2": "$1 te ha {{GENDER:$1|dejado}} un mensaje en {{SITENAME}}", - "notification-edit-talk-page-email-batch-body-with-section": "$1 te {{GENDER:$1|ha dejado}} un mensaje en tu página de discusión sobre «$2».", - "notification-page-linked-email-subject": "Se ha enlazado una página creada por ti en {{SITENAME}}", - "notification-reverted-email-subject2": "{{PLURAL:$3|Tu edición fue {{GENDER:$1|revertida}}|Tus ediciones fueron {{GENDER:$1|revertidas}}}} en {{SITENAME}}", - "notification-mention-email-subject": "$1 {{GENDER:$2|te}} ha {{GENDER:$1|mencionado}} en {{SITENAME}}", - "notification-user-rights-email-subject": "Tus permisos de usuario en {{SITENAME}} han sido modificados.", + "notification-edit-talk-page-email-subject2": "$1 {{GENDER:$3|te}} ha {{GENDER:$2|dejado}} un mensaje en {{SITENAME}}", + "notification-page-linked-email-subject": "Se ha enlazado una página creada por {{GENDER:$3|ti}} en {{SITENAME}}", + "notification-reverted-email-subject2": "{{PLURAL:$4|{{GENDER:$3|Tu}} edición fue {{GENDER:$2|revertida}}|{{GENDER:$3|Tus}} ediciones fueron {{GENDER:$2|revertidas}}}} en {{SITENAME}}", + "notification-mention-email-subject": "$1 {{GENDER:$3|te}} ha {{GENDER:$2|mencionado}} en {{SITENAME}}", + "notification-user-rights-email-subject": "{{GENDER:$3|Tus}} permisos de usuario en {{SITENAME}} han sido modificados.", "notification-timestamp-ago-seconds": "{{PLURAL:$1|$1 s}}", "notification-timestamp-ago-minutes": "{{PLURAL:$1|$1 m}}", "notification-timestamp-ago-hours": "{{PLURAL:$1|$1 h}}", @@ -190,9 +189,7 @@ "notification-inbox-filter-read": "Leídas", "notification-inbox-filter-unread": "No leídas", "notification-inbox-filter-all": "Todas", - "echo-email-body-default": "Tienes una nueva notificación en {{SITENAME}}:\n\n$1", - "echo-email-footer-default-html": "Para controlar cuáles correos electrónicos te enviamos, <a href=\"$2\" style=\"text-decoration:none; color: #3868B0;\">revisa tus preferencias</a>.<br />\n$1", - "echo-email-footer-default": "$2\n\nPara controlar cuáles correos electrónicos te enviamos, revisa tus preferencias:\n{{canonicalurl:{{#special:Preferences}}#mw-prefsection-echo}}\n\n$1", + "echo-specialmute-label-mute-notifications": "Silenciar notificaciones de este usuario", "echo-email-plain-footer": "Para controlar cuáles correos electrónicos {{GENDER:$1|te}} enviamos, revisa {{GENDER:$1|tus}} preferencias:", "echo-email-html-footer-preference-link-text": "revisa {{GENDER:$1|tus}} preferencias", "echo-email-html-footer-with-link": "Para controlar qué correos electrónicos {{GENDER:$2|te}} enviamos, $1.", @@ -202,13 +199,12 @@ "echo-notification-notice-text-only": "Avisos", "echo-overlay-link": "Todas las notificaciones", "echo-overlay-title": "<b>Notificaciones</b>", - "echo-overlay-title-overflow": "<b>{{PLURAL:$1|Notificación|Notificaciones}}</b> (se {{PLURAL:$1|muestra|muestran}} $1 de $2 sin leer)", "echo-mark-all-as-read": "Marcar todo como leído", "echo-mark-all-as-read-confirmation": "$1 {{PLURAL:$1|notificación marcada como leída|notificaciones marcadas como leídas}}", "echo-mark-wiki-as-read": "Marcar como leídas todas las notificaciones del wiki seleccionado: $1", + "echo-displaysnippet-title": "Notificación nueva", "echo-date-today": "Hoy", "echo-date-yesterday": "Ayer", - "echo-load-more-error": "Se ha producido un error al intentar obtener más resultados.", "notification-bundle-header-edit-user-talk-v2": "{{PLURAL:$1|Un mensaje nuevo|$1 mensajes nuevos|100=99+ mensajes nuevos}} en <strong>{{GENDER:$3|tu}} página de discusión</strong>.", "echo-email-batch-subject-daily": "Tienes {{PLURAL:$2|una nueva notificación|nuevas notificaciones}} en {{SITENAME}}", "echo-email-batch-subject-weekly": "Tienes {{PLURAL:$2|una nueva notificación|nuevas notificaciones}} en {{SITENAME}} esta semana", diff --git a/Echo/i18n/et.json b/Echo/i18n/et.json index 938dedf4..e0a96472 100644 --- a/Echo/i18n/et.json +++ b/Echo/i18n/et.json @@ -2,25 +2,29 @@ "@metadata": { "authors": [ "Avjoska", + "Cumbril", "Kyng", - "Pikne", - "Игорь Бродский", "Macofe", - "Cumbril" + "Pikne", + "Игорь Бродский" ] }, "echo-desc": "Süsteem, millega teavitatakse kasutajaid sündmustest ja sõnumitest", "prefs-echo": "Teavitused", "prefs-emailsettings": "E-posti suvandid", - "prefs-displaynotifications": "Kuvaseaded", "prefs-echosubscriptions": "Teavita mind neist sündmustest", "prefs-echocrosswiki": "Vikideülesed teavitused", "prefs-blocknotificationslist": "Vaigistatud kasutajad", + "prefs-mutedpageslist": "Vaigistatud linkimisteavitusega leheküljed", + "prefs-echopollupdates": "Reaalajas teavitused", + "echo-pref-show-poll-updates": "Kuva teavitused nende saabumisel", + "echo-pref-show-poll-updates-help": "Näita tiitliribal lugemata teavituste arvu ja näita lõigendit igast teavitusest kohe, kui see saabub.", "echo-pref-send-me": "Saada mulle:", "echo-pref-send-to": "Saada aadressile:", "echo-pref-email-format": "E-posti vorming:", "echo-pref-web": "Veeb", "echo-pref-email": "E-post", + "echo-pref-push": "Rakendus", "echo-pref-email-frequency-never": "Ära saada mulle ühtegi e-posti teavitust", "echo-pref-email-frequency-immediately": "Üksikud teavitused nende ilmumisel", "echo-pref-email-frequency-daily": "Teavituste päevakokkuvõte", @@ -29,6 +33,7 @@ "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:Special:MyLanguage/Help:Notifications#mute|lisateave]])", + "echo-pref-notifications-page-linked-title-muted-list": "Ära kuva tüübi \"Leheküljelink\" teavitusi nende lehekülgede kohta. ([[mw:Special:MyLanguage/Help:Notifications#mute|lisateave]])", "echo-learn-more": "Lisateave", "echo-log": "Avalik logi", "echo-new-messages": "Sulle on uusi sõnumeid", @@ -40,8 +45,10 @@ "echo-category-title-mention-success": "{{PLURAL:$1|Edukas mainimine|Edukad mainimised}}", "echo-category-title-other": "{{PLURAL:$1|Muu}}", "echo-category-title-system": "{{PLURAL:$1|Süsteem}}", + "echo-category-title-system-noemail": "{{PLURAL:$1|Süsteem}}", "echo-category-title-user-rights": "{{PLURAL:$1|Kasutajaõiguste muutmine|Kasutajaõiguste muutmised}}", "echo-category-title-emailuser": "{{PLURAL:$1|E-kiri teiselt kasutajalt|E-kiri teistelt kasutajatelt}}", + "echo-category-title-thank-you-edit": "Kaastöö {{PLURAL:$1|verstapost|verstapostid}}", "echo-pref-tooltip-edit-user-talk": "Teavita mind, kui keegi postitab või vastab minu aruteluleheküljel.", "echo-pref-tooltip-article-linked": "Teavita mind, kui keegi lingib teiselt leheküljelt minu alustatud leheküljele.", "echo-pref-tooltip-reverted": "Teavita mind, kui keegi tühistab minu muudatuse, kasutades eemaldus- või tühistusfunktsiooni.", @@ -50,7 +57,7 @@ "echo-pref-tooltip-mention-success": "Teavita mind, kui saadan kellelegi mainimise.", "echo-pref-tooltip-user-rights": "Teavita mind, kui keegi muudab minu kasutajaõigusi.", "echo-pref-tooltip-emailuser": "Teavita mind, kui keegi saadab mulle e-kirja.", - "echo-error-no-formatter": "Teavituse vormindusviis on määramata.", + "echo-pref-tooltip-thank-you-edit": "Teavita mind, kui teen oma esimese, kümnenda, sajanda... muudatuse.", "notifications": "Teavitused", "tooltip-pt-notifications-alert": "Sinu märguanded", "tooltip-pt-notifications-notice": "{{GENDER:|Sinu}} märkused", @@ -61,7 +68,6 @@ "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", @@ -76,18 +82,22 @@ "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", - "echo-feedback": "Tagasiside", "echo-api-failure": "Teavitusi ei õnnestunud hankida.", "echo-notification-placeholder": "Teavitused puuduvad.", "echo-notification-placeholder-filters": "Neile kriteeriumitele vastavad teavitused puuduvad.", "echo-notification-loginrequired": "Teavituste nägemiseks pead sisse logima.", + "echo-notification-popup-loginrequired": "Palun logi sisse, et vaadata oma teavitusi.", "echo-notification-markasread": "Märgi loetuks", "echo-notification-markasunread": "Märgi lugemata teavituseks", "echo-notification-markasread-tooltip": "Märgi loetuks", "echo-notification-more-options-tooltip": "Veel valikuid", + "notification-dynamic-actions-mute-page-linked": "{{GENDER:$2|Vaigista}} linkimisteavitused lehekülje \"$1\" kohta", + "notification-dynamic-actions-mute-page-linked-confirmation": "Linkimisteavitused lehekülje \"$1\" kohta on nüüd keelatud.", + "notification-dynamic-actions-mute-page-linked-confirmation-description": "{{GENDER:$2|Saad}} hallata vaigistatud lehekülgi igal ajal [$1 enda eelistustes].", + "notification-dynamic-actions-unmute-page-linked": "{{GENDER:$2|Tühista}} linkimisteavituste vaigistamine lehekülje \"$1\" kohta.", + "notification-dynamic-actions-unmute-page-linked-confirmation": "Linkimisteavitused lehekülje \"$1\" kohta on nüüd lubatud.", + "notification-dynamic-actions-unmute-page-linked-confirmation-description": "{{GENDER:$2|Saad}} hallata vaigistatud lehekülgi igal ajal [$1 enda eelistustes].", "notification-link-text-expand-all": "Näita", "notification-link-text-expand-alert-count": "Vaata {{PLURAL:$1|üht|$1}} märguannet", "notification-link-text-expand-notice-count": "Vaata {{PLURAL:$1|üht|$1}} märkust", @@ -101,7 +111,7 @@ "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-compact-header-edit-user-talk-with-section": "$1 {{GENDER:$2|jättis}} {{GENDER:$3|sulle}} sõnumi arutelu alaossa \"<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}}.", @@ -138,16 +148,17 @@ "notification-header-thank-you-10000-edit": "{{GENDER:$2|Tegid}} just oma kümnetuhandenda muudatuse. Suur-suur tänu!", "notification-header-thank-you-100000-edit": "{{GENDER:$2|Tegid}} just oma sajatuhandenda muudatuse. Aitäh tohutu kaastöö eest!", "notification-header-thank-you-1000000-edit": "{{GENDER:$2|Tegid}} just oma miljonenda muudatuse. Aitäh imetlusväärse kaastöö eest!", + "notification-header-thank-you-10000000-edit": "{{GENDER:$2|Tegid}} just oma kümnemiljonenda muudatuse. Aitäh hiilgava pühendumuse eest!", "notification-link-thank-you-edit": "{{GENDER:$1|Sinu}} muudatus", "notification-link-text-view-edit": "Vaata muudatust", + "notification-link-article-reminder": "Vaata lehekülge", "notification-header-reverted": "Sinu {{PLURAL:$4|muudatus|muudatused}} leheküljel \"<strong>$3</strong>\" on {{GENDER:$2|tühistatud}}.", "notification-header-emailuser": "$1 {{GENDER:$2|saatis}} sulle e-kirja.", - "notification-edit-talk-page-email-subject2": "$1 jättis sulle {{GRAMMAR:inessive|{{SITENAME}}}} sõnumi", - "notification-edit-talk-page-email-batch-body-with-section": "$1 {{GENDER:$1|jättis}} sinu arutelulehele sõnumi \"$2\":", - "notification-page-linked-email-subject": "{{GRAMMAR:inessive|{{SITENAME}}}} lingiti sinu alustatud leheküljele", - "notification-reverted-email-subject2": "Sinu {{PLURAL:$3|muudatus|muudatused}} {{GRAMMAR:inessive|{{SITENAME}}}} {{GENDER:$1|tühistati}}", - "notification-mention-email-subject": "$1 mainis {{GRAMMAR:inessive|{{SITENAME}}}} {{GENDER:$2|sind}}", - "notification-user-rights-email-subject": "{{GRAMMAR:inessive|{{SITENAME}}}} muudeti sinu kasutajaõigusi", + "notification-edit-talk-page-email-subject2": "$1 {{GENDER:$2|jättis}} {{GENDER:$3|sulle}} {{GRAMMAR:inessive|{{SITENAME}}}} sõnumi", + "notification-page-linked-email-subject": "{{GRAMMAR:inessive|{{SITENAME}}}} lingiti {{GENDER:$3|sinu}} alustatud leheküljele", + "notification-reverted-email-subject2": "Sinu {{PLURAL:$4|muudatus|muudatused}} {{GRAMMAR:inessive|{{SITENAME}}}} {{GENDER:$2|tühistati}}", + "notification-mention-email-subject": "$1 {{GENDER:$2|mainis}} {{GRAMMAR:inessive|{{SITENAME}}}} {{GENDER:$3|sind}}", + "notification-user-rights-email-subject": "{{GRAMMAR:inessive|{{SITENAME}}}} muudeti {{GENDER:$3|sinu}} kasutajaõigusi", "notification-timestamp-ago-seconds": "{{PLURAL:$1|$1 s}}", "notification-timestamp-ago-minutes": "{{PLURAL:$1|$1 min}}", "notification-timestamp-ago-hours": "{{PLURAL:$1|$1 t}}", @@ -159,9 +170,7 @@ "notification-inbox-filter-read": "Loetud", "notification-inbox-filter-unread": "Lugemata", "notification-inbox-filter-all": "Kõik", - "echo-email-body-default": "Võrgukohas {{SITENAME}} on sulle uus teavitus:\n\n$1", - "echo-email-footer-default-html": "Et määrata, milliseid kirju sulle saadetakse, <a href=\"$2\" style=\"text-decoration:none; color: #3868B0;\">vaata üle oma eelistused</a>.<br />\n$1", - "echo-email-footer-default": "$2\n\nEt valida, milliseid e-kirju sulle saadetakse, sea oma eelistusi:\n{{canonicalurl:{{#special:Preferences}}#mw-prefsection-echo}}\n\n$1", + "echo-specialmute-label-mute-notifications": "Keela teavitused sellelt {{GENDER:$1|kasutajalt}}", "echo-email-plain-footer": "Et määrata, milliseid kirju {{GENDER:$1|sulle}} saadetakse, vaata üle oma eelistused:", "echo-email-html-footer-preference-link-text": "vaata üle {{GENDER:$1|oma}} eelistused", "echo-email-html-footer-with-link": "Et määrata, milliseid kirju {{GENDER:$2|sulle}} saadetakse, $1.", @@ -171,13 +180,12 @@ "echo-notification-notice-text-only": "Märkused", "echo-overlay-link": "Kõik teavitused", "echo-overlay-title": "<b>Teavitused</b>", - "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-displaysnippet-title": "Uus teavitus", "echo-date-today": "Täna", "echo-date-yesterday": "Eile", - "echo-load-more-error": "Rohkemate tulemuste laadimisel ilmnes tõrge.", "notification-bundle-header-edit-user-talk-v2": "{{PLURAL:$1|Üks uus sõnum|$1 uut sõnumit|100=Üle 99 uue sõnumi}} <strong>{{GENDER:$3|sinu}} aruteluleheküljel</strong>.", "echo-email-batch-subject-daily": "Sulle on {{GRAMMAR:inessive|{{SITENAME}}}} {{PLURAL:$2|uus teavitus|uusi teavitusi}}", "echo-email-batch-subject-weekly": "Sulle on sellel nädalal {{GRAMMAR:inessive|{{SITENAME}}}} {{PLURAL:$2|uus teavitus|uusi teavitusi}}", diff --git a/Echo/i18n/eu.json b/Echo/i18n/eu.json index ccffb998..18520003 100644 --- a/Echo/i18n/eu.json +++ b/Echo/i18n/eu.json @@ -1,15 +1,15 @@ { "@metadata": { "authors": [ - "Subi", - "Xabier Armendaritz", + "An13sa", + "Mikel Ibaiba", "Sator", - "Mikel Ibaiba" + "Subi", + "Xabier Armendaritz" ] }, "prefs-echo": "Jakinarazpenak", "prefs-emailsettings": "E-posta aukerak", - "prefs-displaynotifications": "Aukerak erakutsi", "prefs-echosubscriptions": "Gertaera hauen inguruan jakinarazi nazazue", "prefs-echocrosswiki": "Wikien arteko jakinarazpenak", "echo-pref-send-me": "Bidali niri:", @@ -24,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-beta-feature-cross-wiki-message": "Jakinarazpen hobetuak", "echo-learn-more": "Gehiago ikasi", "echo-new-messages": "Mezu berriak dituzu", "echo-category-title-edit-user-talk": "{{PLURAL:$1|mezu}} eztabaida orrian", @@ -45,15 +44,13 @@ "tooltip-pt-notifications-notice": "{{GENDER:|Zure}} mezuak", "echo-displaynotificationsconfiguration-enabled-default-new-users-legend": "Erabiltzaile berriak", "echo-specialpage": "Jakinarazpenak", - "echo-specialpage-section-markread": "Markatu taldea irakurrita bezala", - "echo-specialpage-markasread": "Jakinarazpena: Markatu irakurrita bezala", + "echo-specialpage-section-markread": "Markatu taldea irakurritzat", + "echo-specialpage-markasread": "Jakinarazpena: Markatu irakurritzat", "echo-specialpage-pagination-numnotifications": "{{PLURAL:$1|jakinarazpen $1|$1 jakinarazpen}}", "echo-specialpage-pagefilters-title": "Azken jarduerak", "echo-specialpage-pagefilters-subtitle": "Irakurri gabeko jakinarazpenak dituzten orriak", - "notificationsmarkread-legend": "Markatu jakinarazpena irakurrita bezala", - "echo-anon": "Jakinarazpenak jasotzeko, [$1 kontua sortu] edo[$2 saioa hasi].", + "notificationsmarkread-legend": "Markatu jakinarazpena irakurritzat", "echo-none": "Ez duzu jakinarazpenik.", - "echo-more-info": "Informazio gehiago", "echo-notification-placeholder": "Ez dago jakinarazpenik.", "echo-notification-placeholder-filters": "Ez dago irizpide horiek betetzen dituen jakinarazpenik.", "echo-notification-markasread": "Markatu irakurritzat", @@ -71,7 +68,7 @@ "notification-link-text-view-page": "Orrialdea ikusi", "notification-header-edit-user-talk": "$1(e)k mezu bat {{GENDER:$2|utzi}} dizu <strong>{{GENDER:$3|zure}} eztabaida orrian</strong>.", "notification-header-edit-user-talk-with-section": "$1(e)k mezu bat {{GENDER:$2|utzi}} dizu <strong>{{GENDER:$3|zure}} eztabaida orrian</strong>, \"<strong>$4</strong>\" atalean.", - "notification-header-article-reminder": "Orrialde batek {{GENDER:$2|you}} <strong>$3</strong> gogoraraztea eskatu du.", + "notification-header-article-reminder": "{{GENDER:$2|Zeuk}} gogoraraztea eskatutako orri bat duzu hemen: <strong>$3</strong>", "notification-header-mention-other": "$1(e)k {{GENDER:$2|aipamena}} egin {{GENDER:$3|dizu}} <strong>$4</strong>(e)an \"<strong>$5</strong>\" harian.", "notification-header-mention-other-nosection": "$1 {{GENDER:$2|lankideak}} aipatu {{GENDER:$3|zaitu}} <strong>$4</strong> orrian.", "notification-header-mention-user-talkpage-v2": "$1(e)k {{GENDER:$2|aipamena}} egin {{GENDER:$3|dizu}} <strong>$4{{GENDER:$5|ren}} lankide eztabaida orrian</strong>, \"<strong>$6</strong>\" atalean.", @@ -90,10 +87,9 @@ "notification-link-text-view-edit": "Ikusi aldaketa", "notification-link-article-reminder": "Orrialdea ikusi", "notification-header-emailuser": "$1 lankideak email bat {{GENDER:$2|bidali}} dizu.", - "notification-edit-talk-page-email-subject2": "$1(e)k mezu bat {{GENDER:$1|utzi}} dizu {{SITENAME}} gunean", - "notification-edit-talk-page-email-batch-body-with-section": "$1(e)k mezu bat {{GENDER:$1|utzi}} dizu zure eztabaida orriko ''$2'' atalean.", - "notification-reverted-email-subject2": "Zure {{PLURAL:$3|aldaketa {{GENDER:$1|desegina izan da}}|aldaketak {{GENDER:$1|deseginak izan dira}}}} {{SITENAME}} gunean", - "notification-mention-email-subject": "$1(e)k {{GENDER:$1|aipatu}} {{GENDER:$2|zaitu}} {{SITENAME}} gunean", + "notification-edit-talk-page-email-subject2": "$1(e)k mezu bat {{GENDER:$2|utzi}} dizu {{SITENAME}} gunean", + "notification-reverted-email-subject2": "{{GENDER:$3|Zure}} {{PLURAL:$4|aldaketa {{GENDER:$2|desegina izan da}}|aldaketak {{GENDER:$2|deseginak izan dira}}}} {{SITENAME}} gunean", + "notification-mention-email-subject": "$1(e)k {{GENDER:$2|aipatu}} {{GENDER:$3|zaitu}} {{SITENAME}} gunean", "notification-timestamp-ago-seconds": "{{PLURAL:$1|$1s}}", "notification-timestamp-ago-minutes": "{{PLURAL:$1|$1m}}", "notification-timestamp-ago-hours": "{{PLURAL:$1|$1 ord}}", @@ -105,7 +101,6 @@ "notification-inbox-filter-read": "Irakurriak", "notification-inbox-filter-unread": "irakurri gabe", "notification-inbox-filter-all": "Denak", - "echo-email-body-default": "Jakinarazpen berri bat duzu {{SITENAME}} gunean:\n\n$1", "echo-notification-alert": "{{PLURAL:$1|Alerta ($1)|($1) Alerta|100=Alerta (99+)}}", "echo-notification-notice": "{{PLURAL:$1|Mezu($1)|($1) mezu|100=Mezuak(99+)}}", "echo-notification-alert-text-only": "Alertak", diff --git a/Echo/i18n/fa.json b/Echo/i18n/fa.json index e8ed6837..81705359 100644 --- a/Echo/i18n/fa.json +++ b/Echo/i18n/fa.json @@ -1,38 +1,44 @@ { "@metadata": { "authors": [ + "4nn1l2", "A.R.Rostamzade", + "Ahmad252", + "Alirezaaa", + "Americophile", + "Amirsara", + "Amjad Khan", + "Arian Ar", + "Baloch Khan", + "Bersam", + "Calak", "Dalba", "Ebraminio", + "FarsiNevis", + "Hosseinblue", + "Huji", + "Koroğlu", "Ladsgroup", + "Macofe", + "Mahdy Saffar", "Mjbmr", "Omidh", "Reza1615", "Rtemis", - "درفش کاویانی", - "فلورانس", - "Alirezaaa", - "Bersam", "Saeidpourbabak", - "Koroğlu", - "Calak", - "Americophile", - "Hosseinblue", - "Huji", - "Arian Ar", - "Macofe", - "Mahdy Saffar", - "4nn1l2", - "Baloch Khan" + "درفش کاویانی", + "فلورانس" ] }, "echo-desc": "سامانهٔ آگاهسازی کاربران از رویدادها و پیامها", "prefs-echo": "اعلانها", "prefs-emailsettings": "تنظیمات ایمیل", - "prefs-displaynotifications": "گزینههای نمایش", "prefs-echosubscriptions": "مرا از این رویدادها آگاه کن", "prefs-echocrosswiki": "آگاهسازی همه ویکیها", "prefs-blocknotificationslist": "کاربران خاموششده", + "prefs-echopollupdates": "آگاهسازیهای زنده", + "echo-mobile-notifications-filter-title": "پالایش آگاهسازیها", + "echo-pref-show-poll-updates": "نمایش آگاهسازیهای جدید بهمحض رسیدن", "echo-pref-send-me": "برایم فرستاده شود:", "echo-pref-send-to": "فرستادهشود به:", "echo-pref-email-format": "قالب ایمیل:", @@ -46,8 +52,6 @@ "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": "پیامهای جدیدی دارید", @@ -59,9 +63,13 @@ "echo-category-title-mention-success": "{{PLURAL:$1|اشاره|اشارههای}} موفق", "echo-category-title-other": "{{PLURAL:$1|سایر}}", "echo-category-title-system": "{{PLURAL:$1|سامانه}}", + "echo-category-title-system-noemail": "{{PLURAL:$1|سامانه}}", "echo-category-title-user-rights": "{{PLURAL:$1|تغییر دسترسیهای کاربری|تغییرات دسترسیهای کاربری}}", "echo-category-title-emailuser": "{{PLURAL:$1|ایمیل از کاربری دیگر|ایمیلهایی از دیگر کاربران}}", "echo-category-title-article-reminder": "صفحهٔ {{PLURAL:$1|یادآوری|یادآوری}}", + "echo-category-title-thank-you-edit": "ویرایش {{PLURAL:$1|رویداد مهم|رویدادهای مهم}}", + "echo-category-title-watchlist": "ویرایش در صفحهٔ محافظتشده", + "echo-category-title-minor-watchlist": "ویرایش جزئی در صفحهٔ محافظتشده", "echo-pref-tooltip-edit-user-talk": "وقتی کسی برایم پیام فرستاد یا جواب پیام مرا در صفحهٔ بحثم داد، مرا آگاه کن.", "echo-pref-tooltip-article-linked": "وقتی کسی به صفحهای که ایجاد کردهام پیوند داد، مرا آگاه کن.", "echo-pref-tooltip-reverted": "وقتی کسی ویرایش مرا با ابزار خثنیسازی یا واگردانی، خثنی کرد، مرا آگاه کن.", @@ -71,7 +79,7 @@ "echo-pref-tooltip-user-rights": "وقتی کسی دسترسیهای کاربری من را تغییر داد مرا آگاه کن.", "echo-pref-tooltip-emailuser": "وقتی کسی به من ایمیل فرستاد، مرا آگاه کن.", "echo-pref-tooltip-article-reminder": "زمانی که درخواست دادم، دربارهٔ این صفحه مرا آگاه کن.", - "echo-error-no-formatter": "هیچ قالبی برای آگاهسازی تعریف نشدهاست.", + "echo-pref-tooltip-thank-you-edit": "زمانی که به اولین، دهمین، صدمین و... ویرایش رسیدم من را مطلع کن.", "notifications": "اعلانها", "tooltip-pt-notifications-alert": "هشدارهای {{GENDER:|شما}}", "tooltip-pt-notifications-notice": "آگاهیهای {{GENDER:|شما}}", @@ -82,7 +90,6 @@ "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": "کاربران جدید", @@ -92,15 +99,12 @@ "echo-specialpage-section-markread": "علامتزدن گروه به عنوان خوانده شده", "echo-specialpage-markasread": "آگاهسازی: انتخاب به عنوان خوانده شده", "echo-specialpage-markasread-invalid-id": "شناسهٔ رویداد نامعتبر", + "echo-specialpage-pagefilterwidget-aria-label": "پالایش بر حسب ویکی و عنوان صفحه", "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-quotation-marks": "«$1»", "echo-api-failure": "ناتوان از دریافت آگاهسازیها.", "echo-api-failure-cross-wiki": "اجازهٔ دسترسی به دامنه دور داده نشد.", "echo-notification-placeholder": "آگاهسازی ندارید.", @@ -140,8 +144,8 @@ "notification-header-mention-other-nosection": "$1 به {{GENDER:$3|شما}} در <strong>$4</strong> {{GENDER:$2|اشاره کرد}}.", "notification-header-mention-user-talkpage-v2": "$1 به {{GENDER:$3|شما}} در <strong>صفحهٔ {{GENDER:$5|بحث}} $4</strong> در <strong>«$6»</strong> {{GENDER:$2|اشاره کرد}}.", "notification-header-mention-user-talkpage-nosection": "$1 به {{GENDER:$3|شما}} در <strong>صفحهٔ {{GENDER:$5|بحث}} $4</strong> {{GENDER:$2|اشاره کرد}}.", - "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>صفحهٔ {{GENDER:$2|بحثش|بحثش|بحثشان}}</strong> {{GENDER:$2|اشاره کرد}}.", + "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>صفحهٔ {{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> ارسال نشد چون کاربر یافت نشد.", @@ -160,8 +164,10 @@ "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-watchlist-multiuser-moved": "صفحهٔ <strong>$1</strong> که در فهرست پیگیریهای {{GENDER:$2|شما}} حضور دارد، $3 {{PLURAL:$3|بار|بار}} منتقل شده است.", + "notification-header-watchlist-multiuser-restored": "صفحهٔ <strong>$1</strong> که در فهرست پیگیریهای {{GENDER:$2|شما}} حضور دارد، $3 {{PLURAL:$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|انجام دادید}}؛ {{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|ممنون}} از بابت اینکه ویرایشگر بزرگی هستید!", @@ -171,14 +177,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>|ویرایشهای شما بر روی <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}} دارید.", - "notification-edit-talk-page-email-batch-body-with-section": "$1 یک پیام در بحث شما در «$2» {{GENDER:$1|گذاشتهاست}}.", - "notification-page-linked-email-subject": "صفحهای که شما آغازگر آن بودید در {{SITENAME}} پیوند شد.", - "notification-reverted-email-subject2": "{{PLURAL:$3|ویرایش|ویرایشهای}} شما در {{SITENAME}} {{GENDER:$1|واگردانی شدهاست}}", - "notification-mention-email-subject": "$1 {{GENDER:$2|شما}} را در {{SITENAME}} {{GENDER:$1|ذکر کردهاست}}", - "notification-user-rights-email-subject": "دسترسیهای شما در {{SITENAME}} تغییر یافتهاست", + "notification-edit-talk-page-email-subject2": "{{GENDER:$3|شما}} یک پیام تازه از طرف $1 در صفحهٔ بحث {{SITENAME}} {{GENDER:$2|دارید}}", + "notification-page-linked-email-subject": "صفحهای که {{GENDER:$3|شما}} آغازگر آن بودید در {{SITENAME}} پیوند شد.", + "notification-reverted-email-subject2": "{{PLURAL:$4|ویرایش|ویرایشهای}} {{GENDER:$3|شما}} در {{SITENAME}} {{GENDER:$2|واگردانی شدهاست}}", + "notification-mention-email-subject": "$1 {{GENDER:$3|شما}} را در {{SITENAME}} {{GENDER:$2|ذکر کردهاست}}", + "notification-user-rights-email-subject": "دسترسیهای {{GENDER:$3|شما}} در {{SITENAME}} تغییر یافتهاست", "notification-timestamp-ago-seconds": "{{PLURAL:$1|$1 ثانیه}}", "notification-timestamp-ago-minutes": "{{PLURAL:$1|$1 دقیقه}}", "notification-timestamp-ago-hours": "{{PLURAL:$1|$1 ساعت}}", @@ -190,9 +195,7 @@ "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-specialmute-label-mute-notifications": "بیصدا کردن آگاهسازیهای از سوی این کاربر", "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.", @@ -202,13 +205,12 @@ "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|خورد|خوردند}}", "echo-mark-wiki-as-read": "انتخاب همهٔ موارد در ویکی انتخاب شده به عنوان خوانده شده:$1", + "echo-displaysnippet-title": "آگاهسازی جدید", "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}} در این هفته هستید", diff --git a/Echo/i18n/ff.json b/Echo/i18n/ff.json new file mode 100644 index 00000000..282d2ad8 --- /dev/null +++ b/Echo/i18n/ff.json @@ -0,0 +1,8 @@ +{ + "@metadata": { + "authors": [ + "Ibrahima" + ] + }, + "tooltip-pt-notifications-alert": "Jeertine {{GENDER:|maa}}" +} diff --git a/Echo/i18n/fi.json b/Echo/i18n/fi.json index fdd87c2e..df010f37 100644 --- a/Echo/i18n/fi.json +++ b/Echo/i18n/fi.json @@ -1,26 +1,26 @@ { "@metadata": { "authors": [ + "01miki10", "Crt", + "Kyykaarme", + "McSalama", + "Mikahama", "Nedergard", "Nike", "Olli", + "Pitke", "Pxos", + "Pyscowicz", "Samoasambia", "Silvonen", "Stryn", - "VezonThunder", - "Pitke", - "McSalama", - "Mikahama", - "01miki10", - "Pyscowicz" + "VezonThunder" ] }, "echo-desc": "Järjestelmä jonka avulla käyttäjille voi lähettää ilmoituksia tapahtumista ja viesteistä", "prefs-echo": "Ilmoitukset", "prefs-emailsettings": "Sähköpostiasetukset", - "prefs-displaynotifications": "Näyttöasetukset", "prefs-echosubscriptions": "Ilmoita minulle näistä tapahtumista", "prefs-echocrosswiki": "Wikienväliset ilmoitukset", "prefs-blocknotificationslist": "Hiljennetyt käyttäjät", @@ -37,8 +37,6 @@ "echo-pref-email-format-plain-text": "Pelkkä teksti", "echo-pref-cross-wiki-notifications": "Näytä ilmoituksia muista wikeistä", "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 beetaominaisuus on käytössä.)", "echo-learn-more": "Lue lisää aiheesta", "echo-log": "Julkinen loki", "echo-new-messages": "Sinulle on uusia viestejä", @@ -50,8 +48,11 @@ "echo-category-title-mention-success": "{{PLURAL:$1|Onnistunut maininta|Onnistuneet maininnat}}", "echo-category-title-other": "{{PLURAL:$1|Muu|Muut}}", "echo-category-title-system": "{{PLURAL:$1|Järjestelmä}}", + "echo-category-title-system-noemail": "{{PLURAL:$1|Järjestelmä}}", + "echo-category-title-system-emailonly": "{{PLURAL:$1|Järjestelmä}}", "echo-category-title-user-rights": "{{PLURAL:$1|Käyttöoikeusmuutos|Käyttöoikeusmuutokset}}", "echo-category-title-emailuser": "{{PLURAL:$1|Sähköposti toiselta käyttäjältä|Sähköpostia toisilta käyttäjiltä}}", + "echo-category-title-thank-you-edit": "{{PLURAL:$1|Muokkausvirstanpylväs|Muokkausvirstanpylväät}}", "echo-pref-tooltip-edit-user-talk": "Ilmoita, kun joku kirjoittaa viestin tai vastaa viestiini keskustelusivullani.", "echo-pref-tooltip-article-linked": "Ilmoita, kun joku linkittää luomaani sivuun toiselta sivulta.", "echo-pref-tooltip-reverted": "Ilmoita, kun joku kumoaa tekemäni muokkauksen käyttäen kumoa- tai palauta-työkalua.", @@ -60,7 +61,6 @@ "echo-pref-tooltip-mention-success": "Ilmoita minulle, kun maininnan lähettäminen toiselle käyttäjälle onnistui.", "echo-pref-tooltip-user-rights": "Ilmoita, kun joku muuttaa käyttöoikeuksiani.", "echo-pref-tooltip-emailuser": "Ilmoita, kun joku lähettää minulle sähköpostia.", - "echo-error-no-formatter": "Tälle ilmoitukselle ei ole määritelty esitystapaa.", "notifications": "Ilmoitukset", "tooltip-pt-notifications-alert": "{{GENDER:|Hälytyksesi}}", "tooltip-pt-notifications-notice": "{{GENDER:|Ilmoituksesi}}", @@ -71,7 +71,6 @@ "echo-displaynotificationsconfiguration-sorting-by-section-legend": "Mihin osioon mikäkin ilmoitustyyppi kuuluu", "echo-displaynotificationsconfiguration-available-notification-methods-header": "Sallitut ilmoitusmenetelmät", "echo-displaynotificationsconfiguration-available-notification-methods-by-category-legend": "Sallitut ilmoitusmenetelmät luokittain", - "echo-displaynotificationsconfiguration-available-notification-methods-by-type-legend": "Sallitut ilmoitusmenetelmät luokittain. Koskee vain luokkia, jotka on piilotettu asetuksista", "echo-displaynotificationsconfiguration-enabled-default-header": "Käytössä oletuksena", "echo-displaynotificationsconfiguration-enabled-default-existing-users-legend": "Nykyiset käyttäjät", "echo-displaynotificationsconfiguration-enabled-default-new-users-legend": "Uudet käyttäjät", @@ -85,10 +84,7 @@ "echo-specialpage-pagefilters-title": "Viimeaikainen toiminta", "echo-specialpage-pagefilters-subtitle": "Lukemattomia ilmoituksia sisältävät sivut", "notificationsmarkread-legend": "Merkitse ilmoitus luetuksi", - "echo-anon": "Jos haluat saada ilmoituksia, [$1 luo käyttäjätunnus] tai [$2 kirjaudu sisään].", "echo-none": "Sinulla ei ole ilmoituksia.", - "echo-more-info": "Lisätietoja", - "echo-feedback": "Palaute", "echo-api-failure": "Ilmoitusten hakeminen epäonnistui.", "echo-api-failure-cross-wiki": "Pääsy etäkoneeseen on estetty.", "echo-notification-placeholder": "Ei ilmoituksia.", @@ -143,17 +139,18 @@ "notification-header-thank-you-100-edit": "{{GENDER:$2|Teit}} juuri sadannen muokkauksesi. Lämpimät onnittelut!", "notification-header-thank-you-1000-edit": "{{GENDER:$2|Teit}} juuri tuhannennen muokkauksesi. Kiitos siitä, että olet tarmokas muokkaaja!", "notification-header-thank-you-10000-edit": "{{GENDER:$2|Teit}} juuri kymmenennentuhannennen muokkauksesi. Kiitos erittäin paljon!", + "notification-header-thank-you-100000-edit": "{{GENDER:$2|Teit}} juuri sadannentuhannennen muokkauksesi. Kiitos\nuskomattomasta työstä!", + "notification-header-thank-you-1000000-edit": "{{GENDER:$2|Teit}} juuri miljoonannen muokkauksesi. Kiitos hämmästyttävästä työstä!", "notification-link-thank-you-edit": "{{GENDER:$1|Muokkauksesi}}", "notification-link-text-view-edit": "Näytä muokkaus", "notification-link-article-reminder": "Näytä sivu", "notification-header-reverted": "{{PLURAL:$4|Tekemäsi muokkaus|Tekemäsi muokkaukset}} sivulla <strong>$3</strong> on {{GENDER:$2|kumottu}}.", "notification-header-emailuser": "$1 {{GENDER:$2|lähetti}} sinulle sähköpostia.", - "notification-edit-talk-page-email-subject2": "$1 {{GENDER:$1|jätti}} sinulle viestin sivustolla {{SITENAME}}", - "notification-edit-talk-page-email-batch-body-with-section": "$1 {{GENDER:$1|jätti}} viestin keskustelusivullesi osioon ”$2”.", - "notification-page-linked-email-subject": "Luomasi sivu linkitettiin sivustolla {{SITENAME}}", - "notification-reverted-email-subject2": "Tekemäsi {{PLURAL:$3|muokkaus|muokkaukset}} sivustolla {{SITENAME}} on {{GENDER:$1|kumottu}}.", - "notification-mention-email-subject": "$1 {{GENDER:$1|mainitsi}} {{GENDER:$2|sinut}} sivustolla {{SITENAME}}", - "notification-user-rights-email-subject": "Käyttöoikeutesi ovat muuttuneet sivustolla {{SITENAME}}", + "notification-edit-talk-page-email-subject2": "$1 {{GENDER:$2|jätti}} {{GENDER:$3|sinulle}} viestin {{GRAMMAR:inessive|{{SITENAME}}}}", + "notification-page-linked-email-subject": "{{GENDER:$3|Luomasi}} sivu linkitettiin {{GRAMMAR:inessive|{{SITENAME}}}}", + "notification-reverted-email-subject2": "{{GENDER:$3|Tekemäsi}} {{PLURAL:$4|muokkaus|muokkaukset}} {{GRAMMAR:inessive|{{SITENAME}}}} on {{GENDER:$2|kumottu}}.", + "notification-mention-email-subject": "$1 {{GENDER:$2|mainitsi}} {{GENDER:$3|sinut}} {{GRAMMAR:inessive|{{SITENAME}}}}", + "notification-user-rights-email-subject": "{{GENDER:$3|Käyttöoikeutesi}} ovat muuttuneet {{GRAMMAR:inessive|{{SITENAME}}}}", "notification-timestamp-ago-seconds": "{{PLURAL:$1|$1 s}}", "notification-timestamp-ago-minutes": "{{PLURAL:$1|$1 min}}", "notification-timestamp-ago-hours": "{{PLURAL:$1|$1 t}}", @@ -165,27 +162,27 @@ "notification-inbox-filter-read": "Luetut", "notification-inbox-filter-unread": "Lukemattomat", "notification-inbox-filter-all": "Kaikki", - "echo-email-body-default": "Sinulle on uusi ilmoitus sivustolla {{SITENAME}}:\n\n$1", - "echo-email-footer-default": "$2\n\nMääritä, mitä sähköposteja lähetämme sinulle. Voit tehdä sen omissa asetuksissasi:\n{{canonicalurl:{{#special:Preferences}}#mw-prefsection-echo}}\n\n$1", + "echo-specialmute-label-mute-notifications": "Vaimenna ilmoitukset tältä käyttäjältä", + "echo-email-plain-footer": "Valitaksesi mitä sähköposteja lähetämme {{GENDER:$1|sinulle}}, tarkista asetuksesi:", "echo-email-html-footer-preference-link-text": "tarkista {{GENDER:$1|asetuksesi}}", + "echo-email-html-footer-with-link": "Valitaksesi mitä sähköposteja lähetämme {{GENDER:$2|sinulle}}, $1.", "echo-notification-alert": "{{PLURAL:$1|Hälytysilmoitukset ($1)|100=Hälytysilmoitukset (yli 99)}}", "echo-notification-notice": "{{PLURAL:$1|Ilmoitus ($1)|Ilmoitukset ($1)|100=Ilmoitukset (99+)}}", "echo-notification-alert-text-only": "Hälytysilmoitukset", "echo-notification-notice-text-only": "Ilmoitukset", "echo-overlay-link": "Kaikki ilmoitukset", "echo-overlay-title": "<b>Ilmoitukset</b>", - "echo-overlay-title-overflow": "<b>{{PLURAL:$1|Ilmoitukset}}</b> (näytetään $1 ($2) lukematonta)", "echo-mark-all-as-read": "Merkitse kaikki luetuiksi", "echo-mark-all-as-read-confirmation": "$1 {{PLURAL:$1|ilmoitus|ilmoitusta}} merkitty luetuksi", "echo-mark-wiki-as-read": "Merkitse kaikki luetuiksi valitsemassasi wikissä: $1", + "echo-displaysnippet-title": "Uusi ilmoitus", "echo-date-today": "Tänään", "echo-date-yesterday": "Eilen", - "echo-load-more-error": "Virhe ilmeni, kun haettiin lisää tuloksia.", "notification-bundle-header-edit-user-talk-v2": "{{PLURAL:$1|Yksi uusi viesti|$1 uutta viestiä|100=yli 99 uutta viestiä}} <strong>{{GENDER:$3|keskustelusivullasi}}</strong>.", - "echo-email-batch-subject-daily": "Sinulle on {{PLURAL:$2|yksi uusi ilmoitus|$2 uutta ilmoitusta}} sivustolla {{SITENAME}}", - "echo-email-batch-subject-weekly": "Sinulle on {{PLURAL:$2|yksi uusi ilmoitus|$2 uutta ilmoitusta}} tällä viikolla sivustolla {{SITENAME}}", - "echo-email-batch-body-intro-daily": "Hei $1.\nTässä on sinulle kooste tämän päivän tapahtumista sivustolla {{SITENAME}}.", - "echo-email-batch-body-intro-weekly": "Hei $1.\nTässä on sinulle kooste tämän viikon tapahtumista sivustolla {{SITENAME}}.", + "echo-email-batch-subject-daily": "Sinulle on {{PLURAL:$2|yksi uusi ilmoitus|$2 uutta ilmoitusta}} {{GRAMMAR:inessive|{{SITENAME}}}}", + "echo-email-batch-subject-weekly": "Sinulle on {{PLURAL:$2|yksi uusi ilmoitus|$2 uutta ilmoitusta}} tällä viikolla {{GRAMMAR:inessive|{{SITENAME}}}}", + "echo-email-batch-body-intro-daily": "Hei $1.\nTässä on sinulle kooste tämän päivän tapahtumista {{GRAMMAR:inessive|{{SITENAME}}}}.", + "echo-email-batch-body-intro-weekly": "Hei $1.\nTässä on sinulle kooste tämän viikon tapahtumista {{GRAMMAR:inessive|{{SITENAME}}}}.", "echo-email-batch-link-text-view-all-notifications": "Näytä kaikki ilmoitukset", "notification-header-foreign-alert": "Muita hälytysilmoituksia {{PLURAL:$5|toisesta wikistä|$5 muista wikeistä}}", "notification-header-foreign-notice": "Lisää ilmoituksia {{PLURAL:$5|toisesta wikistä|$5 muusta wikistä}}", diff --git a/Echo/i18n/fit.json b/Echo/i18n/fit.json new file mode 100644 index 00000000..0ffb8db1 --- /dev/null +++ b/Echo/i18n/fit.json @@ -0,0 +1,92 @@ +{ + "@metadata": { + "authors": [ + "Palmtree222", + "Pyscowicz" + ] + }, + "prefs-echo": "Ilmotukset", + "prefs-emailsettings": "E-posti inställninkit", + "prefs-echosubscriptions": "Ilmota minule näistä tapahtumista", + "echo-pref-send-me": "Lähätä minule:", + "echo-pref-send-to": "Lähätä atressiin:", + "echo-pref-email-format": "E-postin muoto:", + "echo-pref-email": "E-posti", + "echo-pref-cross-wiki-notifications": "Näytä ilmotuksia muista wikeistä", + "echo-pref-notifications-blacklist": "Älä näytä ilmotuksia näiltä käyttäjiltä. ([[mw:Special:MyLanguage/Help:Notifications#mute|lisätietoja]])", + "echo-learn-more": "Lue lissää aiheesta", + "echo-new-messages": "Sinule oon uusia viestejä", + "echo-category-title-edit-user-talk": "Keskustelusivun {{PLURAL:$1|viesti|viestit}}", + "echo-category-title-article-linked": "{{PLURAL:$1|Sivun länkki|Sivujen länkit}}", + "echo-category-title-reverted": "{{PLURAL:$1|Mookkauksen kumoaminen|Mookkausten kumoamiset}}", + "echo-category-title-mention": "{{PLURAL:$1|Maininta|Maininnat}}", + "echo-category-title-system": "{{PLURAL:$1|Systeemi}}", + "echo-category-title-system-noemail": "{{PLURAL:$1|Systeemi}}", + "echo-category-title-system-emailonly": "{{PLURAL:$1|Systeemi}}", + "echo-category-title-thank-you-edit": "{{PLURAL:$1|Mookkausvirstanpylväs|Mookkausvirstanpylväät}}", + "notifications": "Ilmotukset", + "tooltip-pt-notifications-alert": "{{GENDER:|Hälytyksesi}}", + "echo-specialpage": "Ilmotukset", + "notificationsmarkread-legend": "Markeeraa ilmotus luetuksi", + "echo-notification-placeholder": "Ei ilmotuksia.", + "echo-notification-placeholder-filters": "Ei hakua vastaavia ilmotuksia.", + "echo-notification-loginrequired": "Näet ilmotukset lokkaamalla sisäle.", + "echo-notification-popup-loginrequired": "Näe ilmotukset lokkaamalla sisäle.", + "echo-notification-markasread": "Markeeraa luetuksi", + "echo-notification-markasunread": "Markeeraa lukemattomaksi", + "echo-notification-markasread-tooltip": "Markeeraa luetuksi", + "echo-notification-more-options-tooltip": "Lissää valintoja", + "notification-link-text-expand-all-count": "Näytä {{PLURAL:$1|$1 ilmotus|$1 ilmotusta}}", + "notification-welcome-linktext": "Tervetuloa", + "notification-header-thank-you-1-edit": "{{GENDER:$2|Teit}} juuri ensimmäisen mookkauksesi. Kiitos ja tervetuloa!", + "notification-header-thank-you-10-edit": "{{GENDER:$2|Teit}} juuri kymmenennen mookkauksesi. Kiitos ja jatka mookkaamista!", + "notification-header-thank-you-100-edit": "{{GENDER:$2|Teit}} juuri sadannen mookkauksesi. Lämpimät onnittelut!", + "notification-header-thank-you-1000-edit": "{{GENDER:$2|Teit}} juuri tuhannennen mookkauksesi. Kiitos siitä, ette olet tarmokas mookkaaja!", + "notification-header-thank-you-10000-edit": "{{GENDER:$2|Teit}} juuri kymmenennentuhannennen mookkauksesi. Kiitos erittäin paljon!", + "notification-header-thank-you-100000-edit": "{{GENDER:$2|Teit}} juuri sadannentuhannennen mookkauksesi. Kiitos\nuskomattomasta työstä!", + "notification-header-thank-you-1000000-edit": "{{GENDER:$2|Teit}} juuri miljoonannen mookkauksesi. Kiitos hämmästyttävästä työstä!", + "notification-link-thank-you-edit": "{{GENDER:$1|Sinun}} mookkaus", + "notification-link-text-view-edit": "Näytä mookkaus", + "notification-header-reverted": "{{PLURAL:$4|Tekemäsi mookkaus|Tekemäsi mookkaukset}} sivula <strong>$3</strong> oon {{GENDER:$2|kumottu}}.", + "notification-header-emailuser": "$1 {{GENDER:$2|lähätti}} sinule e-postia.", + "notification-edit-talk-page-email-subject2": "$1 {{GENDER:$2|jätti}} {{GENDER:$3|sinule}} viestin {{GRAMMAR:inessive|{{SITENAME}}}}", + "notification-page-linked-email-subject": "{{GENDER:$3|Luomasi}} sivu länkitethiin {{GRAMMAR:inessive|{{SITENAME}}}}", + "notification-reverted-email-subject2": "{{GENDER:$3|Tekemäsi}} {{PLURAL:$4|mookkaus|mookkaukset}} {{GRAMMAR:inessive|{{SITENAME}}}} oon {{GENDER:$2|kumottu}}.", + "notification-mention-email-subject": "$1 {{GENDER:$2|mainitsi}} {{GENDER:$3|sinut}} {{GRAMMAR:inessive|{{SITENAME}}}}", + "notification-user-rights-email-subject": "{{GENDER:$3|Käyttöoikeutesi}} ovat muuttuneet {{GRAMMAR:inessive|{{SITENAME}}}}", + "notification-timestamp-ago-seconds": "{{PLURAL:$1|$1 s}}", + "notification-timestamp-ago-minutes": "{{PLURAL:$1|$1 min}}", + "notification-timestamp-ago-hours": "{{PLURAL:$1|$1 t}}", + "notification-timestamp-ago-days": "{{PLURAL:$1|$1 pv}}", + "notification-timestamp-ago-months": "{{PLURAL:$1|$1 kk}}", + "notification-timestamp-ago-years": "{{PLURAL:$1|$1 v}}", + "notification-timestamp-today": "Tänään", + "notification-timestamp-yesterday": "Eilen", + "notification-inbox-filter-read": "Luetut", + "notification-inbox-filter-unread": "Lukemattomat", + "notification-inbox-filter-all": "Kaikki", + "echo-specialmute-label-mute-notifications": "Vaimenna ilmotukset tältä käyttäjältä", + "echo-email-plain-footer": "Valitaksesi mitä e-posteja lähätämme {{GENDER:$1|sinule}}, tarkista {{GENDER:$1|sinun}} inställninkit:", + "echo-email-html-footer-preference-link-text": "tarkista {{GENDER:$1|sinun}} inställninkit", + "echo-email-html-footer-with-link": "Valitaksesi mitä e-posteja lähätämme {{GENDER:$2|sinule}}, $1.", + "echo-notification-alert": "{{PLURAL:$1|Hälytysilmotukset ($1)|100=Hälytysilmotukset (yli 99)}}", + "echo-notification-notice": "{{PLURAL:$1|Ilmotus ($1)|Ilmotukset ($1)|100=Ilmotukset (99+)}}", + "echo-notification-notice-text-only": "Ilmotukset", + "echo-overlay-link": "Kaikki ilmotukset", + "echo-overlay-title": "<b>Ilmotukset</b>", + "echo-mark-all-as-read": "Markeeraa kaikki luetuksi", + "echo-mark-all-as-read-confirmation": "$1 {{PLURAL:$1|ilmotus|ilmotusta}} markeerattu luetuksi", + "echo-mark-wiki-as-read": "Markeeraa kaikki luetuiksi valitsemassasi wikissä: $1", + "echo-displaysnippet-title": "Uusi ilmotus", + "echo-date-today": "Tänään", + "echo-date-yesterday": "Eilen", + "notification-bundle-header-edit-user-talk-v2": "{{PLURAL:$1|Yksi uusi viesti|$1 uutta viestiä|100=yli 99 uutta viestiä}} <strong>{{GENDER:$3|keskustelusivulasi}}</strong>.", + "echo-email-batch-subject-daily": "Sinule oon {{PLURAL:$2|yksi uusi ilmotus|$2 uutta ilmotusta}} {{GRAMMAR:inessive|{{SITENAME}}}}", + "echo-email-batch-subject-weekly": "Sinule oon {{PLURAL:$2|yksi uusi ilmotus|$2 uutta ilmotusta}} tälä viikola {{GRAMMAR:inessive|{{SITENAME}}}}", + "echo-email-batch-body-intro-daily": "Hei $1.\nTäsä oon sinule kooste tämän päivän tapahtumista {{GRAMMAR:inessive|{{SITENAME}}}}.", + "echo-email-batch-body-intro-weekly": "Hei $1.\nTäsä oon sinule kooste tämän viikon tapahtumista {{GRAMMAR:inessive|{{SITENAME}}}}.", + "echo-email-batch-link-text-view-all-notifications": "Näytä kaikki ilmotukset", + "notification-header-foreign-alert": "Muita hälytysilmotuksia {{PLURAL:$5|toisesta wikistä|$5 muista wikeistä}}", + "notification-header-foreign-notice": "Lissää ilmotuksia {{PLURAL:$5|toisesta wikistä|$5 muusta wikistä}}", + "notification-header-foreign-all": "Lissää ilmotuksia {{PLURAL:$5|toisesta wikistä|$5 toisesta wikistä}}" +} diff --git a/Echo/i18n/fo.json b/Echo/i18n/fo.json index f29b31ed..b46451d2 100644 --- a/Echo/i18n/fo.json +++ b/Echo/i18n/fo.json @@ -7,7 +7,6 @@ "echo-desc": "Fráboðanarskipan", "prefs-echo": "Fráboðanir", "prefs-emailsettings": "T-post innstillingar", - "prefs-displaynotifications": "Innstillingar fyri sýning", "prefs-echosubscriptions": "Gev mær boð um hesar hendingar", "echo-pref-send-me": "Send mær:", "echo-pref-send-to": "Send til:", @@ -19,7 +18,6 @@ "notification-link-text-view-edit": "Vís rætting", "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)", "echo-mark-all-as-read": "Merk alt sum lisið", "echo-date-today": "Í dag", "echo-date-yesterday": "Í gjár" diff --git a/Echo/i18n/fr.json b/Echo/i18n/fr.json index c73357e6..9fce9e44 100644 --- a/Echo/i18n/fr.json +++ b/Echo/i18n/fr.json @@ -1,106 +1,120 @@ { "@metadata": { "authors": [ + "Ash Crow", "Automatik", + "Cedric31", "Crochet.david", "DavidL", + "Eihel", + "GeekEmad", "Gomoko", "Hello71", + "Huñvreüs", "IAlex", + "Jdforrester", "Jean-Frédéric", + "Jules78120", + "Kvardek du", "Ltrlg", + "Macofe", + "Mattflaschen", + "Mattho69", "Metroitendo", + "Momo50WM", + "NemesisIII", + "Nemo bis", + "Od1n", + "Orlodrim", + "Pamputt", "Peter17", + "PifyZ", + "Pols12", "Sherbrooke", + "The RedBurn", + "Thibaut120094", "Tititou36", + "Trial", + "Trizek", + "Trizek (WMF)", + "Tuxxic", "Urhixidur", "Verdy p", + "Wladek92", "Wyz", "Y-M D", - "Kvardek du", - "NemesisIII", - "Od1n", - "Mattho69", - "Wladek92", - "Momo50WM", - "Orlodrim", - "Jules78120", - "Jdforrester", - "Thibaut120094", - "Ash Crow", - "Zebulon84", - "PifyZ", - "Macofe", - "Cedric31", - "Trizek", - "GeekEmad", - "Mattflaschen", - "Trizek (WMF)", - "Pols12", "Yasten", - "Trial", - "Tuxxic", - "Nemo bis", - "The RedBurn" + "Zebulon84" ] }, "echo-desc": "Système pour avertir les utilisateurs des événements et messages", "prefs-echo": "Notifications", "prefs-emailsettings": "Options de courriel", - "prefs-displaynotifications": "Options d'affichage", "prefs-echosubscriptions": "Me prévenir de ces événements", "prefs-echocrosswiki": "Notifications inter-wikis", - "prefs-blocknotificationslist": "Utilisateurs occultés", + "prefs-blocknotificationslist": "Utilisateurs que vous avez bloqués", + "prefs-mutedpageslist": "Pages muettes pour les notifications de lien de page", + "prefs-echopollupdates": "Notifications en direct", + "echo-mobile-notifications-filter-title": "Filtrer les notifications", + "echo-pref-show-poll-updates": "Afficher les nouvelles notifications quand elles arrivent", + "echo-pref-show-poll-updates-help": "Afficher le nombre de notifications non lues dans la barre de titre et afficher un extrait de chacune immédiatement quand elle arrive.", "echo-pref-send-me": "M’envoyer :", "echo-pref-send-to": "Envoyer à :", - "echo-pref-email-format": "Format de courriel :", + "echo-pref-email-format": "Format des courriels :", "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": "Les notifications individuelles dès leur arrivée", + "echo-pref-push": "Applications", + "echo-pref-email-frequency-never": "Ne pas m’envoyer de notification par courriel", + "echo-pref-email-frequency-immediately": "Les notifications individuelles sans délai", "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: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-pref-notifications-page-linked-title-muted-list": "Ne pas afficher les notifications « Lien de page » pour ces pages. ([[mw:Special:MyLanguage/Help:Notifications#mute|en savoir plus]])", + "echo-pref-dont-email-read-notifications": "Ne pas inclure les notifications de lecture dans les courriels de résumé", "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}} 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-edit-user-talk": "Message{{PLURAL:$1||s}} sur ma page de discussion", + "echo-category-title-article-linked": "Article{{PLURAL:$1||s}} lié{{PLURAL:$1||s}}", + "echo-category-title-reverted": "Modification{{PLURAL:$1||s}} annulée{{PLURAL:$1||s}}", + "echo-category-title-mention": "Mention{{PLURAL:$1||s}}", "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|Autre|Autres}}", - "echo-category-title-system": "{{PLURAL:$1|Système}}", + "echo-category-title-other": "Autre{{PLURAL:$1||s}}", + "echo-category-title-system": "Système{{PLURAL:$1|}}", + "echo-category-title-system-noemail": "Système{{PLURAL:$1|}}", + "echo-category-title-system-emailonly": "{{PLURAL:$1|}}Système", "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-category-title-emailuser": "Courriel{{PLURAL:$1||s}} {{PLURAL:$1|d’un autre|d’autres}} utilisateur{{PLURAL:$1||s}}", + "echo-category-title-article-reminder": "Rappel{{PLURAL:$1||s}} de page{{PLURAL:$1||s}}", + "echo-category-title-thank-you-edit": "Jalon{{PLURAL:$1||s}} de modifications", + "echo-category-title-watchlist": "Modification d’une page suivie", + "echo-category-title-minor-watchlist": "Modification mineure d’une page suivie", "echo-pref-tooltip-edit-user-talk": "Me prévenir quand quelqu’un publie un message ou répond sur ma page de discussion.", "echo-pref-tooltip-article-linked": "Me prévenir quand quelqu’un depuis une autre page fait référence à une page que j’ai créée.", "echo-pref-tooltip-reverted": "Me prévenir quand quelqu’un annule une modification que j’ai faite, en utilisant l’outil d’annulation ou de révocation.", "echo-pref-tooltip-mention": "Me prévenir quand quelqu’un fait référence à ma page utilisateur.", - "echo-pref-tooltip-mention-failure": "M’avertir dans le cas où une mention pourrait n'avoir pas fonctionné.", - "echo-pref-tooltip-mention-success": "M’avertir lorsqu’une mention que j’ai effectuée a bien fonctionné.", + "echo-pref-tooltip-mention-failure": "M’avertir si quelqu’un n’est pas notifié alors que je l’ai mentionné.", + "echo-pref-tooltip-mention-success": "M’avertir quand une personne est notifiée parce que je l’ai mentionnée.", "echo-pref-tooltip-user-rights": "Me notifier quand quelqu’un modifie mes droits utilisateur.", "echo-pref-tooltip-emailuser": "Me notifier quand quelqu’un m’envoie un courriel.", "echo-pref-tooltip-article-reminder": "Me prévenir de cette page quand je le demande.", - "echo-error-no-formatter": "Aucune mise en forme définie pour la notification", + "echo-pref-tooltip-thank-you-edit": "Me notifier quand j’atteins ma première, dixième, centième, millième… modification.", + "echo-pref-tooltip-watchlist": "Me notifier quand quelqu’un effectue une modification (non mineure) d’une page sur ma liste de suivi.", + "echo-pref-tooltip-minor-watchlist": "Me notifier quand quelqu’un effectue une modification mineure d’une page sur ma liste de suivi.", "notifications": "Notifications", - "tooltip-pt-notifications-alert": "Vos alertes", - "tooltip-pt-notifications-notice": "{{GENDER:|Vos}} notifications", + "tooltip-pt-notifications-alert": "{{GENDER:|}}Vos alertes", + "tooltip-pt-notifications-notice": "{{GENDER:|}}Vos notifications", "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-summary": "Ceci est un aperçu de la façon dont sont configurées les notifications sur ce wiki.", "echo-displaynotificationsconfiguration-notifications-by-category-header": "Notifications par catégorie", - "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-sorting-by-section-header": "Classement des types", + "echo-displaynotificationsconfiguration-sorting-by-section-legend": "Dans quelle section chaque type de notification est classé", "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", - "echo-displaynotificationsconfiguration-available-notification-methods-by-type-legend": "Quelles méthodes de notification sont prises en charge pour chaque type ; s’applique seulement aux types dans les catégories qui sont masquées dans les préférences", "echo-displaynotificationsconfiguration-enabled-default-header": "Activé par défaut", "echo-displaynotificationsconfiguration-enabled-default-existing-users-legend": "Utilisateurs existants", "echo-displaynotificationsconfiguration-enabled-default-new-users-legend": "Nouveaux utilisateurs", @@ -109,130 +123,141 @@ "echo-specialpage": "Notifications", "echo-specialpage-section-markread": "Marquer la section comme lue", "echo-specialpage-markasread": "Notification : marquer comme lue", - "echo-specialpage-markasread-invalid-id": "ID d'événement invalide", - "echo-specialpage-pagination-numnotifications": "$1 {{PLURAL:$1|notification|notifications}}", + "echo-specialpage-markasread-invalid-id": "ID d’événement non valide", + "echo-specialpage-pagefilterwidget-aria-label": "Filtrer par wiki et par titre de page", + "echo-specialpage-special-help-menu-widget-aria-label": "Options supplémentaires et préférences de notification.", + "echo-specialpage-pagination-numnotifications": "$1 notification{{PLURAL:$1||s}}", "echo-specialpage-pagefilters-title": "Activité récente", "echo-specialpage-pagefilters-subtitle": "Pages avec des notifications non lues", - "notificationsmarkread-legend": "Marquer une notification comme lue", - "echo-anon": "Pour recevoir des notifications, [$1 créez un compte] ou [$2 connectez-vous].", - "echo-none": "Vous n'avez reçu aucune notification.", - "echo-more-info": "Plus d’informations", - "echo-feedback": "Avis", - "echo-quotation-marks": "« $1 »", + "notificationsmarkread-legend": "Marquer la notification comme lue", + "echo-none": "Vous n’avez reçu aucune notification.", "echo-api-failure": "Impossible de récupérer les notifications.", - "echo-api-failure-cross-wiki": "L'accès au domaine distant a été refusé.", + "echo-api-failure-cross-wiki": "L’accès au domaine distant a été refusé.", "echo-notification-placeholder": "Il n’y a aucune notification.", - "echo-notification-placeholder-filters": "Il n'y a aucune notification correspondant à ces critères.", + "echo-notification-placeholder-filters": "Il n’y a aucune notification correspondant à ces critères.", "echo-notification-loginrequired": "Vous devez vous connecter pour voir vos notifications.", "echo-notification-popup-loginrequired": "Veuillez vous connecter pour voir vos notifications.", - "echo-notification-markasread": "Marquer comme lu", - "echo-notification-markasunread": "Marquer comme non lu", - "echo-notification-markasread-tooltip": "Marquer comme lu", + "echo-notification-markasread": "Marquer comme lue", + "echo-notification-markasunread": "Marquer comme non lue", + "echo-notification-markasread-tooltip": "Marquer comme lue", "echo-notification-more-options-tooltip": "Plus d’options", - "notification-dynamic-actions-unwatch": "{{GENDER:$3|Arrêter}} de suivre de nouvelles activités sur « $1 »", - "notification-dynamic-actions-unwatch-confirmation": "{{GENDER:$3|Vous}} ne suivez plus la page « $1 »", + "notification-dynamic-actions-mute-page-linked": "{{GENDER:$2|Mettre en sourdine}} les notifications de lien sur « $1 ».", + "notification-dynamic-actions-mute-page-linked-confirmation": "Les notifications « Lien de page » sont désormais désactivées pour la page « $1 »", + "notification-dynamic-actions-mute-page-linked-confirmation-description": "{{GENDER:$2|Vous}} pouvez gérer vos pages mises en sourdine dans [$1 vos préférences] à tout moment.", + "notification-dynamic-actions-unmute-page-linked": "{{GENDER:$2|Rétablir}} les notifications de lien sur « $1 ».", + "notification-dynamic-actions-unmute-page-linked-confirmation": "Les notifications « Lien de page » sont désormais activées pour la page « $1 »", + "notification-dynamic-actions-unmute-page-linked-confirmation-description": "{{GENDER:$2|Vous}} pouvez gérer vos pages mises en sourdine dans [$1 vos préférences] à tout moment.", + "notification-dynamic-actions-unwatch": "Arrêter{{GENDER:$3|}} de suivre les nouvelles activités sur « $1 »", + "notification-dynamic-actions-unwatch-confirmation": "Vous{{GENDER:$3|}} ne suivez plus la page « $1 »", "notification-dynamic-actions-unwatch-confirmation-description": "{{GENDER:$3|Vous}} pouvez suivre [$2 cette page] à nouveau à tout moment.", - "notification-dynamic-actions-watch": "{{GENDER:$3|Suivre}} la nouvelle activité sur « $1 »", - "notification-dynamic-actions-watch-confirmation": "{{GENDER:$3|Vous}} suivez désormais la page « $1 »", - "notification-dynamic-actions-watch-confirmation-description": "{{GENDER:$3|Vous}} pouvez arrêter de suivre [$2 cette page] à tout moment.", + "notification-dynamic-actions-watch": "Suivre{{GENDER:$3|}} l’évolution de « $1 »", + "notification-dynamic-actions-watch-confirmation": "Vous{{GENDER:$3|}} suivez désormais la page « $1 »", + "notification-dynamic-actions-watch-confirmation-description": "Vous{{GENDER:$3|}} pouvez arrêter de suivre [$2 cette page] à tout moment.", "notification-link-text-expand-all": "Développer", - "notification-link-text-expand-alert-count": "Afficher {{PLURAL:$1|$1 alerte|$1 alertes}}", - "notification-link-text-expand-notice-count": "Afficher {{PLURAL:$1|$1 notification|$1 notifications}}", - "notification-link-text-expand-all-count": "Afficher {{PLURAL:$1|$1 notification|$1 notifications}}", - "notification-link-text-collapse-all": "Réduire", + "notification-link-text-expand-alert-count": "Afficher $1 alerte{{PLURAL:$1||s}}", + "notification-link-text-expand-notice-count": "Afficher $1 notification{{PLURAL:$1||s}}", + "notification-link-text-expand-all-count": "Afficher $1 notification{{PLURAL:$1||s}}", + "notification-link-text-collapse-all": "Replier", "notification-link-text-view-message": "Afficher le message", "notification-link-text-view-mention": "Afficher la mention", - "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-mention-failure": "Afficher l{{PLURAL:$1|a|es}} mention{{PLURAL:$1||s}}", + "notification-link-text-view-changes": "Afficher{{GENDER:$1|}} 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-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-header-edit-user-talk": "{{GENDER:$2|}}$1 a laissé un message sur <strong>{{GENDER:$3|}}votre page de discussion</strong>.", + "notification-header-edit-user-talk-with-section": "{{GENDER:$2|}}$1 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": "{{GENDER:$2|}}$1 {{GENDER:$3|}}vous a laissé un message.", + "notification-compact-header-edit-user-talk-with-section": "{{GENDER:$2|}}$1 {{GENDER:$3|}}vous 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>.", - "notification-bundle-header-page-linked": "Des liens vers « <strong>$3</strong> » ont été insérés dans {{PLURAL:$5||$5 pages|100=plus de 100 pages}}.", - "notification-header-article-reminder": "Une page dont {{GENDER:$2|vous}} avez demandé le rappel est disponible sur <strong>$3</strong>", + "notification-bundle-header-page-linked": "Des liens vers « <strong>$3</strong> » ont été insérés dans {{PLURAL:$5|$5 page|$5 pages|100=plus de 100 pages}}.", + "notification-header-article-reminder": "Une page dont {{GENDER:$2|}}vous avez demandé le rappel est disponible sur <strong>$3</strong>.", "notification-link-text-what-links-here": "Tous les liens vers cette page", - "notification-header-mention-other": "$1 {{GENDER:$2|vous}} {{GENDER:$3|a mentionné|a mentionnée}} sur <strong>$4</strong> dans « <strong>$5</strong> ».", - "notification-header-mention-other-nosection": "$1 {{GENDER:$2|vous}} {{GENDER:$3|a mentionné|a mentionnée}} sur <strong>$4</strong>.", - "notification-header-mention-user-talkpage-v2": "$1 {{GENDER:$2|vous}} {{GENDER:$3|a mentionné|a mentionnée}} sur la <strong>page de discussion {{GENDER:$5|de}} $4</strong> dans « <strong>$6</strong> ».", - "notification-header-mention-user-talkpage-nosection": "$1 {{GENDER:$2|vous}} {{GENDER:$3|a mentionné|a mentionnée}} sur la <strong>page de discussion {{GENDER:$5|de}} $4</strong>.", - "notification-header-mention-agent-talkpage": "$1 {{GENDER:$2|vous}} {{GENDER:$3|a mentionné|a mentionnée}} sur <strong>{{GENDER:$2|sa|sa|sa}} page de discussion</strong> dans « <strong>$4</strong> ».", - "notification-header-mention-agent-talkpage-nosection": "$1 {{GENDER:$2|vous}} {{GENDER:$3|a mentionné|a mentionnée}} sur <strong>sa page de discussion</strong>.", - "notification-header-mention-article-talkpage": "$1 {{GENDER:$2|vous}} {{GENDER:$3|a mentionné|a mentionnée}} sur la page de discussion de <strong>$4</strong> dans « <strong> $5</strong> ».", - "notification-header-mention-article-talkpage-nosection": "$1 {{GENDER:$2|vous}} {{GENDER:$3|a mentionné|a mentionnée}} sur la page de discussion de <strong>$4</strong>.", - "notification-header-mention-failure-user-unknown": "{{GENDER:$2|Votre}} mention de <strong>$3</strong> n’a pas été envoyée parce que l’utilisateur n’a pas été trouvé.", - "notification-header-mention-failure-user-anonymous": "{{GENDER:$2|Votre}} mention de <strong>$3</strong> n’a pas été envoyée parce que l’utilisateur est anonyme.", - "notification-header-mention-failure-too-many": "{{GENDER:$2|}}Vous avez essayé de mentionner plus de $3 utilisateur{{PLURAL:$3||s}}. Toutes les mentions au-dessus de cette limite ne leur ont pas été notifiées.", + "notification-header-mention-other": "$1{{GENDER:$2|}} vous a mentionné{{GENDER:$3||e}} sur <strong>$4</strong> dans « <strong>$5</strong> ».", + "notification-header-mention-other-nosection": "$1{{GENDER:$2|}} vous a mentionné{{GENDER:$3||e}} sur <strong>$4</strong>.", + "notification-header-mention-user-talkpage-v2": "$1{{GENDER:$2|}} vous a mentionné{{GENDER:$3||e}} sur la <strong>page de discussion de l’utilisat{{GENDER:$5|eur|rice}} $4</strong> dans « <strong>$6</strong> ».", + "notification-header-mention-user-talkpage-nosection": "$1{{GENDER:$2|}} vous a mentionné{{GENDER:$3||e}} sur la <strong>page de discussion de l’utilisat{{GENDER:$5|eur|rice}} $4</strong>.", + "notification-header-mention-agent-talkpage": "$1{{GENDER:$2|}} vous a mentionné{{GENDER:$3||e}} sur <strong>{{GENDER:$2|}}sa page de discussion</strong> dans « <strong>$4</strong> ».", + "notification-header-mention-agent-talkpage-nosection": "$1{{GENDER:$2|}} vous a mentionné{{GENDER:$3||e}} sur <strong>{{GENDER:$2|}}sa page de discussion</strong>", + "notification-header-mention-article-talkpage": "$1{{GENDER:$2|}} vous a mentionné{{GENDER:$3||e}} sur la page de discussion de <strong>$4</strong> dans « <strong> $5</strong> ».", + "notification-header-mention-article-talkpage-nosection": "$1{{GENDER:$2|}} vous a mentionné{{GENDER:$3||e}} sur la page de discussion de <strong>$4</strong>.", + "notification-header-mention-failure-user-unknown": "Aucune notification n’a été envoyée lorsque vous avez {{GENDER:$2|mentionné}} <strong>$3</strong> car cet utilisateur n’a pas été trouvé.", + "notification-header-mention-failure-user-anonymous": "Aucune notification n’a été envoyée lorsque vous avez {{GENDER:$2|mentionné}} <strong>$3</strong> car cet utilisateur est anonyme.", + "notification-header-mention-failure-too-many": "{{GENDER:$2|}}Vous avez mentionné plus de $3 utilisateur{{PLURAL:$3||s}}. Tous les utilisateurs mentionnés au-delà de cette limite n’ont pas été notifiés.", "notification-header-mention-failure-bundle": "Concernant {{PLURAL:$3|l’utilisat{{GENDER:$2|eur|rice}} que vous avez mentionné{{GENDER:$2||e}}|les $3 utilisateurs que vous avez mentionnés}} sur la page de discussion <strong>$4</strong>, {{PLURAL:$3|une notification n’a pas pu lui être envoyée|$3 notifications n’ont pas pu leur être envoyées}}.", - "notification-compact-header-mention-failure-user-unknown": "<strong>Utilisateur inconnu :</strong> « $1 »", + "notification-compact-header-mention-failure-user-unknown": "<strong>Utilisateur inconnu :</strong> « $1 »", "notification-compact-header-mention-failure-user-anonymous": "<strong>Les adresses IP ne peuvent pas être notifiées :</strong> $1", - "notification-header-mention-success": "{{GENDER:$2|Votre}} mention de <strong>$3</strong> a été envoyée.", - "notification-header-mention-success-bundle": "{{PLURAL:$3|Une mention|$3 mentions}} {{GENDER:$2|que vous avez faite}}{{PLURAL:$3||s}} sur la page de discussion de <strong>$4</strong> {{PLURAL:$3|a été envoyée|ont été envoyées}}.", - "notification-compact-header-mention-success": "<strong>{{GENDER:$2|Vous avez mentionné}} :</strong> $3", - "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=| et }}}}{{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:$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-mention-success": "L’utilisat{{GENDER:$3|eur|rice}} <strong>$3</strong> que {{GENDER:$2|vous}} avez mentionné{{GENDER:$3||e}} a été notifié{{GENDER:$3||e}}.", + "notification-header-mention-success-bundle": "{{PLURAL:$3|Une mention|$3 mentions}} que {{GENDER:$2|}}vous avez faite{{PLURAL:$3||s}} sur la page de discussion de <strong>$4</strong> {{PLURAL:$3|a été envoyée|ont été envoyées}}.", + "notification-compact-header-mention-success": "<strong>{{GENDER:$2|}}Vous avez mentionné :</strong> $3", + "notification-header-mention-status-bundle": "{{PLURAL:$3|Une notification|$3 notifications}} concernant les mentions que {{GENDER:$2|}}vous avez faites sur la page de discussion <strong>$4</strong> : $5 non envoyée{{PLURAL:$5||s}}, $6 envoyée{{PLURAL:$6||s}}.", + "notification-header-user-rights-add-only": "Vos droits d’utilisat{{GENDER:$4|eur|rice}} ont été modifiés{{GENDER:$1|}}. Vous avez été ajouté{{GENDER:$4||e}} à : $2.", + "notification-header-user-rights-remove-only": "Vos droits d’utilisat{{GENDER:$4|eur|rice}} ont été modifiés{{GENDER:$1|}}. Vous n’êtes désormais plus membre de : $2.", + "notification-header-user-rights-add-and-remove": "{{GENDER:$6|}}Vos droits d’utilisat{{GENDER:$4|eur|rice}} ont été modifiés{{GENDER:$1|}}. Vous avez été ajouté{{GENDER:$6||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-header-watchlist-changed": "$1{{GENDER:$2|}} a modifié <strong>$3</strong>, une page sur votre{{GENDER:$4|}} liste de suivi{{PLURAL:$5||, $5 fois}}.", + "notification-header-watchlist-created": "$1{{GENDER:$2|}} a créé <strong>$3</strong>, une page sur votre{{GENDER:$4|}} liste de suivi{{PLURAL:$5||, $5 fois}}.", + "notification-header-watchlist-deleted": "$1{{GENDER:$2|}} a modifié <strong>$3</strong>, une page sur votre{{GENDER:$4|}} liste de suivi{{PLURAL:$5||, $5 fois}}.", + "notification-header-watchlist-moved": "$1{{GENDER:$2|}} a renommé <strong>$3</strong>, une page sur votre{{GENDER:$4|}} liste de suivi{{PLURAL:$5||, $5 fois}}.", + "notification-header-watchlist-restored": "$1{{GENDER:$2|}} a restauré <strong>$3</strong>, une page sur votre{{GENDER:$4|}} liste de suivi{{PLURAL:$5||, $5 fois}}.", + "notification-header-watchlist-multiuser-changed": "<strong>$1</strong>, une page sur {{GENDER:$2|}}votre liste de suivi, a été modifiée $3 fois{{PLURAL:$3|}}.", + "notification-header-watchlist-multiuser-created": "<strong>$1</strong>, une page sur {{GENDER:$2|}}votre liste de suivi, a été créée $3 fois{{PLURAL:$3|}}.", + "notification-header-watchlist-multiuser-deleted": "<strong>$1</strong>, une page sur {{GENDER:$2|}}votre liste de suivi, a été supprimée $3 fois{{PLURAL:$3|}}.", + "notification-header-watchlist-multiuser-moved": "<strong>$1</strong>, une page sur {{GENDER:$2|}}votre liste de suivi, a été renommée $3 fois{{PLURAL:$3|}}.", + "notification-header-watchlist-multiuser-restored": "<strong>$1</strong>, une page sur {{GENDER:$2|}}votre liste de suivi, a été restaurée $3 fois{{PLURAL:$3|}}.", "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-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-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 !", - "notification-header-thank-you-1000000-edit": "{{GENDER:$2|Vous}} venez de faire {{GENDER:$2|votre}} millionième modification, merci à {{GENDER:$2|vous}} pour votre participation exceptionnelle !", - "notification-link-thank-you-edit": "{{GENDER:$1|Votre}} modification", + "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-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 !", + "notification-header-thank-you-1000000-edit": "{{GENDER:$2|Vous}} venez de faire {{GENDER:$2|votre}} millionième modification, merci à {{GENDER:$2|vous}} pour votre participation exceptionnelle !", + "notification-header-thank-you-10000000-edit": "{{GENDER:$2|Vous}} venez de faire {{GENDER:$2|votre}} dix millionième modification ; merci à {{GENDER:$2|vous}} pour votre engagement brillant !", + "notification-link-thank-you-edit": "{{GENDER:$1|}}Votre modification", "notification-link-text-view-edit": "Afficher la modification", "notification-link-article-reminder": "Afficher la page", - "notification-header-reverted": "{{PLURAL:$4|Votre modification sur <strong>$3</strong> a|Vos modifications sur <strong>$3</strong> ont}} été {{GENDER:$2|annulée}}{{PLURAL:$4||s}}.", - "notification-header-emailuser": "$1 vous {{GENDER:$2|a envoyé}} un courriel.", - "notification-edit-talk-page-email-subject2": "$1 {{GENDER:$1|a laissé}} un message sur votre page de discussion sur {{SITENAME}}.", - "notification-edit-talk-page-email-batch-body-with-section": "$1 a laissé un message sur votre page de discussion dans « $2 ».", - "notification-page-linked-email-subject": "Un lien vers une page que vous avez créée a été inséré sur {{SITENAME}}", - "notification-reverted-email-subject2": "{{PLURAL:$3|Votre modification a été {{GENDER:$1|annulée}}|Vos modifications ont été {{GENDER:$1|annulées}}}} sur {{SITENAME}}", - "notification-mention-email-subject": "$1 vous a mentionné{{GENDER:$2||e}} sur {{SITENAME}}", - "notification-user-rights-email-subject": "Vos droits d’utilisateur ont été modifiés sur {{SITENAME}}", - "notification-timestamp-ago-seconds": "{{PLURAL:$1|$1 s}}", - "notification-timestamp-ago-minutes": "{{PLURAL:$1|$1mi}}", - "notification-timestamp-ago-hours": "{{PLURAL:$1|$1h}}", - "notification-timestamp-ago-days": "{{PLURAL:$1|$1j}}", - "notification-timestamp-ago-months": "{{PLURAL:$1|$1mo}}", - "notification-timestamp-ago-years": "{{PLURAL:$1|$1an}}", + "notification-header-reverted": "{{PLURAL:$4|Votre modification|Vos modifications}} sur <strong>$3</strong> {{PLURAL:$4|a été annulée|ont été annulées}}{{GENDER:$2|}}.", + "notification-header-emailuser": "$1 {{GENDER:$2|}}vous a envoyé un courriel.", + "notification-edit-talk-page-email-subject2": "$1{{GENDER:$2|}} a laissé un message sur {{GENDER:$3|}}votre page de discussion sur {{SITENAME}}.", + "notification-page-linked-email-subject": "Un lien vers une page que {{GENDER:$3|}}vous avez créée a été inséré sur {{SITENAME}}", + "notification-reverted-email-subject2": "{{GENDER:$3|}}{{PLURAL:$4|Votre modification a été annulée|Vos modifications ont été annulées}}{{GENDER:$2|}} sur {{SITENAME}}", + "notification-mention-email-subject": "$1{{GENDER:$2|}} vous a mentionné{{GENDER:$3||e}} sur {{SITENAME}}", + "notification-user-rights-email-subject": "{{GENDER:$3|}}Vos droits utilisateur ont été modifiés sur {{SITENAME}}", + "notification-timestamp-ago-seconds": "$1 s{{PLURAL:$1|}}", + "notification-timestamp-ago-minutes": "$1 min{{PLURAL:$1|}}", + "notification-timestamp-ago-hours": "$1 h{{PLURAL:$1|}}", + "notification-timestamp-ago-days": "$1 j{{PLURAL:$1|}}", + "notification-timestamp-ago-months": "$1 mois{{PLURAL:$1|}}", + "notification-timestamp-ago-years": "$1 an{{PLURAL:$1||s}}", "notification-timestamp-today": "Aujourd’hui", "notification-timestamp-yesterday": "Hier", "notification-inbox-filter-read": "Lus", "notification-inbox-filter-unread": "Non lus", "notification-inbox-filter-all": "Tous", - "echo-email-body-default": "Vous avez une nouvelle notification sur {{SITENAME}} :\n\n$1", - "echo-email-footer-default-html": "Pour contrôler les courriels que nous vous envoyons, <a href=\"$2\" style=\"text-decoration:none; color: #3868B0;\">vérifier vos préférences</a>.<br />\n$1", - "echo-email-footer-default": "$2\n\nPour contrôler quels courriels nous vous envoyons, vérifiez vos préférences :\n{{canonicalurl:{{#special:Preferences}}#mw-prefsection-echo}}\n\n$1", - "echo-email-plain-footer": "Pour choisir quels courriels nous {{GENDER:$1|vous}} envoyons, vérifiez {{GENDER:$1|vos}} préférences :", - "echo-email-html-footer-preference-link-text": "vérifiez {{GENDER:$1|vos}} préférences", - "echo-email-html-footer-with-link": "Pour contrôler quels courriels nous {{GENDER:$2|vous}} envoyons, $1.", - "echo-notification-alert": "{{PLURAL:$1|Alerte ($1)|100=Alertes (99+)}}", - "echo-notification-notice": "{{PLURAL:$1|Notifications ($1)|100=Notifications (100 et plus)}}", + "echo-specialmute-label-mute-notifications": "Faire taire les notifications de {{GENDER:$1|cet utilisateur|cette utilisatrice}}", + "echo-email-plain-footer": "Pour choisir quels courriels nous {{GENDER:$1|}}vous envoyons, vérifiez {{GENDER:$1|}}vos préférences :", + "echo-email-html-footer-preference-link-text": "vérifiez {{GENDER:$1|}}vos préférences", + "echo-email-html-footer-with-link": "Pour contrôler quels courriels nous {{GENDER:$2|}}vous envoyons, $1.", + "echo-notification-alert": "{{PLURAL:$1|Alerte ($1)|Alertes ($1)|100=Alertes (99+)}}", + "echo-notification-notice": "{{PLURAL:$1|Notification ($1)|Notifications ($1)|100=Notifications (99+)}}", "echo-notification-alert-text-only": "Alertes", "echo-notification-notice-text-only": "Notifications", "echo-overlay-link": "Toutes les notifications", "echo-overlay-title": "<b>Notifications</b>", - "echo-overlay-title-overflow": "<b>{{PLURAL:$1|Notification|Notifications}}</b> ($1 {{PLURAL:$1|affichée|affichées}} sur $2 {{PLURAL:$1|non lue|non lues}})", "echo-mark-all-as-read": "Tout marquer comme lu", "echo-mark-all-as-read-confirmation": "$1 {{PLURAL:$1|notification marquée comme lue|notifications marquées comme lues}}", "echo-mark-wiki-as-read": "Marquer le tout comme étant lu pour les wiki sélectionnés : $1", + "echo-displaysnippet-title": "Nouvelle notification", "echo-date-today": "Aujourd’hui", "echo-date-yesterday": "Hier", - "echo-load-more-error": "Une erreur s'est produite en recherchant plus de résultats.", - "notification-bundle-header-edit-user-talk-v2": "{{PLURAL:$1|Un nouveau message|$1 nouveaux messages|100=plus de 100 nouveaux messages}} sur <strong>{{GENDER:$3|votre}} page de discussion</strong> .", - "echo-email-batch-subject-daily": "Vous avez {{PLURAL:$2|une nouvelle notification|de nouvelles notifications}} aujourd'hui sur {{SITENAME}}", + "notification-bundle-header-edit-user-talk-v2": "{{PLURAL:$1|Un nouveau message|$1 nouveaux messages|100=Plus de 99 nouveaux messages}} sur <strong>{{GENDER:$3|}}votre page de discussion</strong>.", + "echo-email-batch-subject-daily": "Vous avez {{PLURAL:$2|une nouvelle notification|de nouvelles notifications}} sur {{SITENAME}}", "echo-email-batch-subject-weekly": "Vous avez {{PLURAL:$2|une nouvelle notification|de nouvelles notifications}} sur {{SITENAME}} cette semaine", - "echo-email-batch-body-intro-daily": "Bonjour $1,\nVoici pour vous un résumé de l’activité d’aujourd’hui sur {{SITENAME}}", - "echo-email-batch-body-intro-weekly": "Bonjour $1,\nVoici pour vous un résumé de l’activité de la semaine sur {{SITENAME}}", + "echo-email-batch-body-intro-daily": "Bonjour $1,\nVoici pour vous un résumé de l’activité d’aujourd’hui sur {{SITENAME}}.", + "echo-email-batch-body-intro-weekly": "Bonjour $1,\nVoici pour vous un résumé de l’activité de la semaine sur {{SITENAME}}.", "echo-email-batch-link-text-view-all-notifications": "Voir toutes les notifications", "notification-header-foreign-alert": "Davantage d’alertes {{PLURAL:$5|d’un autre wiki|de $5 autres wikis}}", "notification-header-foreign-notice": "Davantage de notifications {{PLURAL:$5|d’un autre wiki|de $5 autres wikis}}", diff --git a/Echo/i18n/frp.json b/Echo/i18n/frp.json index 2e726788..4778d885 100644 --- a/Echo/i18n/frp.json +++ b/Echo/i18n/frp.json @@ -6,19 +6,14 @@ }, "echo-desc": "Sistèmo de notificacions", "prefs-echo": "Notificacions", - "prefs-displaynotifications": "Chouèx de visualisacion", "notifications": "Notificacions", "tooltip-pt-notifications-alert": "{{GENDER:|Voutres}} alèrtes", "echo-specialpage": "Mes notificacions", "echo-none": "Vos éd reçu gins de notificacion.", - "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", "echo-overlay-title": "Mes notificacions", - "echo-overlay-title-overflow": "Mes notificacions (montrent $1 sur $2 pas liesues)", "echo-date-today": "Houé", "echo-date-yesterday": "Hièr", - "echo-load-more-error": "Na fôta est arrevâye pendent la rècupèracion de més de rèsultats.", "echo-email-batch-subject-daily": "Vos avéd $1 notificacion{{PLURAL:$2||s}} houé", "echo-email-batch-subject-weekly": "Vos avéd $1 notificacion{{PLURAL:$2||s}} ceta semana" } diff --git a/Echo/i18n/frr.json b/Echo/i18n/frr.json index 02db94a4..c52bc39d 100644 --- a/Echo/i18n/frr.json +++ b/Echo/i18n/frr.json @@ -7,7 +7,6 @@ "echo-desc": "Bööd-süsteem för brükern auer neis", "prefs-echo": "Bööd", "prefs-emailsettings": "E-mail iinstelangen", - "prefs-displaynotifications": "Mögelkhaiden för't uunwisin", "prefs-echosubscriptions": "Schüür mi diar en bööd am", "echo-pref-send-me": "Schüür mi:", "echo-pref-send-to": "Schüür tu:", @@ -36,37 +35,28 @@ "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", "echo-specialpage": "Bööd", - "echo-anon": "Am bööd tu fun, skel dü en [$1 brükerkonto] iinracht of di [$2 uunmelde].", "echo-none": "Dü heest nian bööd.", - "echo-more-info": "Muar diartu", - "echo-feedback": "Ragmeldang", "notification-link-text-view-message": "Bööd/en uunwise", "notification-link-text-view-mention": "Henwis/er uunwise", "notification-link-text-view-changes": "Feranrang/en uunwise", "notification-link-text-view-page": "Sidj uunwise", "notification-link-text-view-edit": "Feranrang uunwise", "notification-header-reverted": "Din {{PLURAL:$4|feranrang üüb $3 as|feranrangen üüb $3 san}} {{GENDER:$2|turagsaat}} wurden faan $1.", - "notification-edit-talk-page-email-subject2": "$1 {{GENDER:$1|hää}} di en bööd schüürd üüb {{SITENAME}}.", - "notification-edit-talk-page-email-batch-body-with-section": "$1 {{GENDER:$1|hää}} en bööd üüb din diskuschuunsidj skrewen auer \"$2\".", + "notification-edit-talk-page-email-subject2": "$1 {{GENDER:$2|hää}} di en bööd schüürd üüb {{SITENAME}}.", "notification-page-linked-email-subject": "Üüb ian sidj faan di as faan {{SITENAME}} ferwiset wurden.", - "notification-reverted-email-subject2": "Din {{PLURAL:$3|feranrang as|feranrangen san}} {{GENDER:$1|turagsaat}} wurden üüb {{SITENAME}}.", - "notification-mention-email-subject": "$1 {{GENDER:$1|näämd}} di üüb {{SITENAME}}.", + "notification-reverted-email-subject2": "Din {{PLURAL:$4|feranrang as|feranrangen san}} {{GENDER:$2|turagsaat}} wurden üüb {{SITENAME}}.", + "notification-mention-email-subject": "$1 {{GENDER:$2|näämd}} di üüb {{SITENAME}}.", "notification-user-rights-email-subject": "Din brükerrochten san feranert wurden üüb {{SITENAME}}.", - "echo-email-body-default": "Dü heest nei bööd üüb {{SITENAME}}:\n\n$1", - "echo-email-footer-default": "$2\n\nAm iintustelen, hük e-mails tu di schüürd wurd, brük din iinstelangs-sidj:\n{{canonicalurl:{{#special:Preferences}}#mw-prefsection-echo}}\n\n$1", "echo-notification-alert": "{{PLURAL:$1|Ian bööd|$1 bööden|100=99+ bööden}}", "echo-notification-alert-text-only": "Bööden", "echo-overlay-link": "Aal din bööd", "echo-overlay-title": "<b>Bööd</b>", - "echo-overlay-title-overflow": "<b>{{PLURAL:$1|Bööden}}</b> (Uunwiset wurd $1 faan $2, diar noch ei leesen wurden san)", "echo-mark-all-as-read": "Aaltumaal üs leesen kääntiakne", "echo-date-today": "Daalang", "echo-date-yesterday": "Jister", - "echo-load-more-error": "Bi't ufrepen as wat skiaf gingen.", "echo-email-batch-subject-daily": "Dü heest {{PLURAL:$2|en nei bööd|nei bööden}} üüb {{SITENAME}}.", "echo-email-batch-subject-weekly": "Dü heest das weg {{PLURAL:$2|ian nei bööd|nei bööden}} üüb {{SITENAME}}.", "echo-email-batch-body-intro-daily": "Hoi $1,\ndiar as en auersicht för di auer feranrangen üüb {{SITENAME}} faan daalang.", diff --git a/Echo/i18n/fy.json b/Echo/i18n/fy.json index 2d4e067d..25bc6167 100644 --- a/Echo/i18n/fy.json +++ b/Echo/i18n/fy.json @@ -1,20 +1,214 @@ { "@metadata": { "authors": [ - "Robin0van0der0vliet", "PiefPafPier", - "Robin van der Vliet" + "Robin van der Vliet", + "Robin0van0der0vliet" ] }, - "prefs-emailsettings": "E-mailynstellingen", + "echo-desc": "Systeem om meidoggers barrens en berjochten te melden", + "prefs-echo": "Meldingen", + "prefs-emailsettings": "E-mailopsjes", + "prefs-echosubscriptions": "Meld oan my dizze barrens", + "prefs-echocrosswiki": "Meldingen tusken wiki's", + "prefs-blocknotificationslist": "Stilholden meidoggers", + "prefs-mutedpageslist": "Stilholden siden", + "prefs-echopollupdates": "Fuort melden", + "echo-mobile-notifications-filter-title": "Meldingen filterje", + "echo-pref-show-poll-updates": "Nije meldingen daliks by ynkomst werjaan", + "echo-pref-show-poll-updates-help": "Lit it tal net-lêzen meldingen sjen yn 'e titelbalke, en op it stuit fan ûntfangen ek in stikje fan alle meldingen.", + "echo-pref-send-me": "Stjoer my:", + "echo-pref-send-to": "Stjoer nei:", + "echo-pref-email-format": "E-mailyndieling:", + "echo-pref-web": "Web", "echo-pref-email": "E-mail", + "echo-pref-email-frequency-never": "Gjin meldingen mei de e-mail", + "echo-pref-email-frequency-immediately": "Aparte meldingen daliks by ynkomst", + "echo-pref-email-frequency-daily": "Deis in oersjoch fan 'e meldingen", + "echo-pref-email-frequency-weekly": "Wyks in oersjoch fan 'e meldingen", "echo-pref-email-format-html": "HTML", + "echo-pref-email-format-plain-text": "Platte tekst", + "echo-pref-cross-wiki-notifications": "Meldingen fan oare wiki's sjen litte", + "echo-pref-notifications-blacklist": "Gjin meldingen sjen litte fan dizze meidoggers. ([[mw:Special:MyLanguage/Help:Notifications#mute|mear witte]])", + "echo-pref-notifications-page-linked-title-muted-list": "Gjin meldingen oer sidekeppeling sjen litte foar dizze siden. ([[mw:Special:MyLanguage/Help:Notifications#mute|mear witte]])", + "echo-pref-dont-email-read-notifications": "Lêzen meldingen net opnimme yn 'e oersjochmails", + "echo-learn-more": "Mear witte", + "echo-log": "Iepenbier loch", + "echo-new-messages": "Jo hawwe nije berjochten", + "echo-category-title-edit-user-talk": "{{PLURAL:$1|Boadskip|Boadskippen}} op myn oerlisside", + "echo-category-title-article-linked": "Keppele {{PLURAL:$1|side|siden}}", + "echo-category-title-reverted": "Ungedien makke {{PLURAL:$1|wiziging|wizigings}}", + "echo-category-title-mention": "{{PLURAL:$1|Neamd wurde}}", + "echo-category-title-mention-failure": "{{PLURAL:$1|Neamen}} mislearre", + "echo-category-title-mention-success": "{{PLURAL:$1|Neamen}} slagge", + "echo-category-title-other": "{{PLURAL:$1|Oar}}", + "echo-category-title-system": "{{PLURAL:$1|Systeem}}", + "echo-category-title-system-noemail": "{{PLURAL:$1|Systeem}}", + "echo-category-title-system-emailonly": "{{PLURAL:$1|Systeem}}", + "echo-category-title-user-rights": "{{PLURAL:$1|Wiziging|Wizigings}} yn meidoggerrjochten", + "echo-category-title-emailuser": "{{PLURAL:$1|E-mail fan oare meidogger|E-mails fan oare meidoggers}}", + "echo-category-title-article-reminder": "Yn 't sin te bringen {{PLURAL:$1|side|siden}}", + "echo-category-title-thank-you-edit": "Bewurkings{{PLURAL:$1|mylpeal|mylpeallen}}", + "echo-category-title-watchlist": "Bewurking oan folchlistside", + "echo-category-title-minor-watchlist": "Lytse feroaring oan folchlistside", + "echo-pref-tooltip-edit-user-talk": "Meld my wannear't immen in berjocht of antwurden pleatst op myn oerlisside.", + "echo-pref-tooltip-article-linked": "Meld my wannear't immen in keppeling makket, fan 'e iene nei in troch my oanmakke side.", + "echo-pref-tooltip-reverted": "Meld my wannear't immen in wiziging fan my ûngedien makket mei it weromset- of weromdraaiark.", + "echo-pref-tooltip-mention": "Meld my wannear't immen in keppeling nei myn meidoggerside makket.", + "echo-pref-tooltip-mention-failure": "Meld my at it neamen fan immen troch my net ferstjoerd wurde koe.", + "echo-pref-tooltip-mention-success": "Meld my at it neamen fan immen troch my ferstjoerd is.", + "echo-pref-tooltip-user-rights": "Meld my wannear't immen myn meidoggerrjochten wiziget.", + "echo-pref-tooltip-emailuser": "Meld my wannear't immen my in e-mail tastjoert.", + "echo-pref-tooltip-article-reminder": "Meld my oangeande dizze side at ik dat freegje.", + "echo-pref-tooltip-thank-you-edit": "Meld my wannear't ik myn 1e, 10e, 100e ... bewurking berikt haw.", + "echo-pref-tooltip-watchlist": "Meld my wannear't immen in feroaring makket (net lyts) yn in side op myn folchlist.", + "echo-pref-tooltip-minor-watchlist": "Meld my wannear't immen in feroaring fan lytse betsjutting makket, yn in side op myn folchlist.", "notifications": "Meldingen", + "tooltip-pt-notifications-alert": "{{GENDER:|Jo}} seintsjes", + "tooltip-pt-notifications-notice": "{{GENDER:|Jo}} meidielings", + "echo-displaynotificationsconfiguration": "Ynstellings fan skermmeldingen", + "echo-displaynotificationsconfiguration-summary": "Dit is in oersjoch fan hoe't de Meldingen ynsteld steane op dizze wiki.", + "echo-displaynotificationsconfiguration-notifications-by-category-header": "Meldingen op kategory", + "echo-displaynotificationsconfiguration-sorting-by-section-header": "Yndieling meldtypen", + "echo-displaynotificationsconfiguration-sorting-by-section-legend": "By hokker ûnderdiel elts meldtype yndield wurdt", + "echo-displaynotificationsconfiguration-available-notification-methods-header": "Fakultative meldmetoaden", + "echo-displaynotificationsconfiguration-available-notification-methods-by-category-legend": "Hokker meldmetoaden stipe wurde foar eltse kategory", + "echo-displaynotificationsconfiguration-enabled-default-header": "Standert ynskeakele", + "echo-displaynotificationsconfiguration-enabled-default-existing-users-legend": "Besteande meidoggers", + "echo-displaynotificationsconfiguration-enabled-default-new-users-legend": "Nije meidoggers", + "echo-displaynotificationsconfiguration-mandatory-notification-methods-header": "Ferplichte meldmetoaden", + "echo-displaynotificationsconfiguration-mandatory-notification-methods-by-category-legend": "Hokker meldmetoaden ferplichte binne foar eltse kategory", "echo-specialpage": "Meldingen", - "echo-feedback": "Weromkeppeling", + "echo-specialpage-section-markread": "Groep as lêzen markearje", + "echo-specialpage-markasread": "Melding: As lêzen markearje", + "echo-specialpage-markasread-invalid-id": "Barren hat ûnjildich nûmer", + "echo-specialpage-pagefilterwidget-aria-label": "Wiki en sidetitel filterje", + "echo-specialpage-pagination-numnotifications": "$1 {{PLURAL:$1|melding|meldingen}}", + "echo-specialpage-pagefilters-title": "Warberens koartlyn", + "echo-specialpage-pagefilters-subtitle": "Siden mei net-lêzen meldingen", + "notificationsmarkread-legend": "Melding as lêzen markearje", + "echo-none": "Jo hawwe gjin meldingen.", + "echo-api-failure": "Meldingen opheljen mislearre.", + "echo-api-failure-cross-wiki": "Tagong ta it eksterne domein is wegere.", + "echo-notification-placeholder": "Der binne gjin meldingen.", + "echo-notification-placeholder-filters": "Der binne gjin meldingen dy't oan dizze kritearia foldwaan.", + "echo-notification-loginrequired": "Jo moatte jo oanmelde om jo meldingen sjen te kinnen.", + "echo-notification-popup-loginrequired": "Jo moatte jo oanmelde om jo meldingen besjen te kinnen.", + "echo-notification-markasread": "As lêzen markearje", + "echo-notification-markasunread": "As net-lêzen markearje", + "echo-notification-markasread-tooltip": "As lêzen markearje", + "echo-notification-more-options-tooltip": "Mear opsjes", + "notification-dynamic-actions-unwatch": "Nije warberens op \"$1\" {{GENDER:$3|ophâlde}} te folgjen", + "notification-dynamic-actions-unwatch-confirmation": "{{GENDER:$3|Jo}} folgje de side \"$1\" net mear", + "notification-dynamic-actions-unwatch-confirmation-description": "{{GENDER:$3|Jo}} kinne [$2 de side] altyd wer folgje.", + "notification-dynamic-actions-watch": "Nije warberens op \"$1\" {{GENDER:$3|folgje}}", + "notification-dynamic-actions-watch-confirmation": "{{GENDER:$3|Jo}} folgje fan no ôf de side \"$1\"", + "notification-dynamic-actions-watch-confirmation-description": "{{GENDER:$3|Jo}} kinne altyd ophâlde [$2 de side] te folgjen.", "notification-link-text-expand-all": "Utklappe", + "notification-link-text-expand-alert-count": "{{PLURAL:$1|$1 seintsje|$1 seintsjes}} besjen", + "notification-link-text-expand-notice-count": "{{PLURAL:$1|$1 meidieling|$1 meidielings}} besjen", + "notification-link-text-expand-all-count": "{{PLURAL:$1|$1 melding|$1 meldingen}} besjen", "notification-link-text-collapse-all": "Ynklappe", + "notification-link-text-view-message": "Berjocht besjen", + "notification-link-text-view-mention": "Neamen besjen", + "notification-link-text-view-mention-failure": "{{PLURAL:$1|Neamen besjen}}", + "notification-link-text-view-changes": "Feroarings {{GENDER:$1|besjen}}", + "notification-link-text-view-page": "Side besjen", + "notification-header-edit-user-talk": "$1 {{GENDER:$2|hat}} in berjocht efterlitten op <strong>{{GENDER:$3|jo}} oerlisside</strong>.", + "notification-header-edit-user-talk-with-section": "$1 {{GENDER:$2|hat}} in berjocht efterlitten op <strong>{{GENDER:$3|jo}} oerlisside</strong> yn \"<strong>$4</strong>\".", + "notification-compact-header-edit-user-talk": "$1 {{GENDER:$2|hat}} in berjocht foar {{GENDER:$3|jo}} efterlitten.", + "notification-compact-header-edit-user-talk-with-section": "$1 {{GENDER:$2|hat}} in berjocht foar {{GENDER:$3|jo}} efterlitten yn \"<strong>$4</strong>\".", + "notification-header-page-linked": "Der is op <strong>$4</strong> in keppeling makke nei <strong>$3</strong>.", + "notification-compact-header-page-linked": "Keppele op <strong>$1</strong>.", + "notification-bundle-header-page-linked": "Der binne op {{PLURAL:$5||$5 siden|100=99+ siden}} keppelings makke nei <strong>$3</strong>.", + "notification-header-article-reminder": "In side wêrfan't {{GENDER:$2|jo}} frege hawwe dy yn 't sin te bringen, stiet op <strong>$3</strong>", + "notification-link-text-what-links-here": "Alle keppelings nei dizze side", + "notification-header-mention-other": "$1 {{GENDER:$2|hat}} {{GENDER:$3|jo}} neamd op <strong>$4</strong> yn \"<strong>$5</strong>\".", + "notification-header-mention-other-nosection": "$1 {{GENDER:$2|hat}} {{GENDER:$3|jo}} neamd op <strong>$4</strong>.", + "notification-header-mention-user-talkpage-v2": "$1 {{GENDER:$2|hat}} {{GENDER:$3|jo}} neamd op de <strong>meidoggeroerlisside {{GENDER:$5|fan}} $4</strong> yn \"<strong>$6</strong>\".", + "notification-header-mention-user-talkpage-nosection": "$1 {{GENDER:$2|hat}} {{GENDER:$3|jo}} neamd op de <strong>meidoggeroerlisside {{GENDER:$5|fan}} $4</strong>.", + "notification-header-mention-agent-talkpage": "$1 {{GENDER:$2|hat}} {{GENDER:$3|jo}} neamd op <strong>{{GENDER:$2|syn|har|meidoggers}} oerlisside</strong> yn \"<strong>$4</strong>\".", + "notification-header-mention-agent-talkpage-nosection": "$1 {{GENDER:$2|hat}} {{GENDER:$3|jo}} neamd op <strong>{{GENDER:$2|syn|har|meidoggers}} oerlisside</strong>.", + "notification-header-mention-article-talkpage": "$1 {{GENDER:$2|hat}} {{GENDER:$3|jo}} neamd op de oerlisside fan <strong>$4</strong> yn \"<strong>$5</strong>\".", + "notification-header-mention-article-talkpage-nosection": "$1 {{GENDER:$2|hat}} {{GENDER:$3|jo}} neamd op de oerlisside fan <strong>$4</strong>.", + "notification-header-mention-failure-user-unknown": "{{GENDER:$2|Jo}} neamen fan <strong>$3</strong> is net ferstjoerd, om't de meidogger ûnbekend is.", + "notification-header-mention-failure-user-anonymous": "{{GENDER:$2|Jo}} neamen fan <strong>$3</strong> is net ferstjoerd, om't de meidogger anonym is.", + "notification-header-mention-failure-too-many": "{{GENDER:$2|Jo}} hawwe besocht mear as $3 {{PLURAL:$3|meidogger|meidoggers}} te neamen. Al it neamen boppe dy limyt is net ferstjoerd.", + "notification-header-mention-failure-bundle": "{{PLURAL:$3|It neamen|$3 kear neamen}} troch {{GENDER:$2|jo}} op de oerlisside fan <strong>$4</strong> {{PLURAL:$3|koe}} net ferstjoerd wurde.", + "notification-compact-header-mention-failure-user-unknown": "<strong>Meidochnamme bestiet net:</strong> $1", + "notification-compact-header-mention-failure-user-anonymous": "<strong>IP's kinne net neamd wurde:</strong> $1", + "notification-header-mention-success": "{{GENDER:$2|Jo}} neamen fan <strong>$3</strong> is ferstjoerd.", + "notification-header-mention-success-bundle": "{{PLURAL:$3|It neamen|$3 kear neamen}} troch {{GENDER:$2|jo}} op de oerlisside fan <strong>$4</strong> {{PLURAL:$3|is}} ferstjoerd.", + "notification-compact-header-mention-success": "<strong>{{GENDER:$2|Jo hawwe}} neamd:</strong> $3", + "notification-header-mention-status-bundle": "{{PLURAL:$3|In melding|$3 meldingen}} oer it neamen troch {{GENDER:$2|jo}} op de oerlisside fan <strong>$4</strong>: {{PLURAL:$5|$5 net ferstjoerd}}, {{PLURAL:$6|$6 ferstjoerd}}.", + "notification-header-user-rights-add-only": "{{GENDER:$4|Jo}} meidoggerrjochten binne {{GENDER:$1|wizige}}. Jo binne taheakke oan: $2.", + "notification-header-user-rights-remove-only": "{{GENDER:$4|Jo}} meidoggerrjochten binne {{GENDER:$1|wizige}}. Jo binne gjin lid mear fan: $2.", + "notification-header-user-rights-add-and-remove": "{{GENDER:$6|Jo}} meidoggerrjochten binne {{GENDER:$1|wizige}}. Jo binne taheakke oan: $2. Jo binne gjin lid mear fan: $4.", + "notification-header-user-rights-expiry-change": "De ferrintiid fan {{GENDER:$4|jo}} lidmaatskip fan 'e neikommende {{PLURAL:$3|groep|groepen}} is {{GENDER:$1|wizige}}: $2.", + "notification-header-welcome": "{{GENDER:$2|Wolkom}} by {{GRAMMAR:lidw|{{SITENAME}}}}, $1! Wy binne bliid dat {{GENDER:$2|jo}} der binne.", + "notification-header-mention-summary": "$1 {{GENDER:$2|hat}} {{GENDER:$3|jo}} neamd yn in bewurkingsgearfetting fan <strong>$4</strong>.", + "notification-header-watchlist-changed": "$1 {{GENDER:$2|hat}} <strong>$3</strong>, in side op {{GENDER:$4|jo}} folchlist{{PLURAL:$5|,|, $5 kear}} feroare.", + "notification-header-watchlist-created": "$1 {{GENDER:$2|hat}} <strong>$3</strong>, in side op {{GENDER:$4|jo}} folchlist{{PLURAL:$5|,|, $5 kear}} oanmakke.", + "notification-header-watchlist-deleted": "$1 {{GENDER:$2|hat}} <strong>$3</strong>, in side op {{GENDER:$4|jo}} folchlist{{PLURAL:$5|,|, $5 kear}} wiske.", + "notification-header-watchlist-moved": "$1 {{GENDER:$2|hat}} <strong>$3</strong>, in side op {{GENDER:$4|jo}} folchlist{{PLURAL:$5|,|, $5 kear}} omneamd.", + "notification-header-watchlist-restored": "$1 {{GENDER:$2|hat}} <strong>$3</strong>, in side op {{GENDER:$4|jo}} folchlist{{PLURAL:$5|,|, $5 kear}} wer teplak set.", + "notification-header-watchlist-multiuser-changed": "<strong>$1</strong>, in side op {{GENDER:$2|jo}} folchlist, is $3 {{PLURAL:$3|kear}} feroare.", + "notification-header-watchlist-multiuser-created": "<strong>$1</strong>, in side op {{GENDER:$2|jo}} folchlist, is $3 {{PLURAL:$3|kear}} oanmakke.", + "notification-header-watchlist-multiuser-deleted": "<strong>$1</strong>, in side op {{GENDER:$2|jo}} folchlist, is $3 {{PLURAL:$3|kear}} wiske.", + "notification-header-watchlist-multiuser-moved": "<strong>$1</strong>, in side op {{GENDER:$2|jo}} folchlist, is $3 {{PLURAL:$3|kear}} omneamd.", + "notification-header-watchlist-multiuser-restored": "<strong>$1</strong>, in side op {{GENDER:$2|jo}} folchlist, is $3 {{PLURAL:$3|kear}} wer teplak set.", + "notification-welcome-linktext": "Wolkom", + "notification-header-thank-you-1-edit": "{{GENDER:$2|Jo}} hawwe sakrekt {{GENDER:$2|jo}} earste bewurking dien; tankjewol, en wolkom!", + "notification-header-thank-you-10-edit": "{{GENDER:$2|Jo}} hawwe sakrekt {{GENDER:$2|jo}} tsiende bewurking dien; tankjewol, en gean sa troch!", + "notification-header-thank-you-100-edit": "{{GENDER:$2|Jo}} hawwe sakrekt {{GENDER:$2|jo}} hûndertste bewurking dien; tige tank!", + "notification-header-thank-you-1000-edit": "{{GENDER:$2|Jo}} hawwe sakrekt {{GENDER:$2|jo}} tûzenste bewurking dien; tankjewol, geweldige meidogger!", + "notification-header-thank-you-10000-edit": "{{GENDER:$2|Jo}} hawwe sakrekt {{GENDER:$2|jo}} tsientûzenste bewurking dien; tige, tige tank!", + "notification-header-thank-you-100000-edit": "{{GENDER:$2|Jo}} hawwe sakrekt {{GENDER:$2|jo}} hûnderttûzenste bewurking dien; tankjewol foar de grandioaze bydrage!", + "notification-header-thank-you-1000000-edit": "{{GENDER:$2|Jo}} hawwe sakrekt {{GENDER:$2|jo}} miljoenste bewurking dien; tankjewol foar de bjusterbaarlike bydrage!", + "notification-link-thank-you-edit": "{{GENDER:$1|Jo}} bewurking", + "notification-link-text-view-edit": "Bewurking besjen", + "notification-link-article-reminder": "Side besjen", + "notification-header-reverted": "Jo {{PLURAL:$4|bewurking oan <strong>$3</strong> is|bewurkings oan <strong>$3</strong> binne}} ûngedien {{GENDER:$2|makke}}.", + "notification-header-emailuser": "$1 {{GENDER:$2|hat}} jo in e-mail tastjoerd.", + "notification-edit-talk-page-email-subject2": "$1 {{GENDER:$2|hat}} in berjocht foar {{GENDER:$3|jo}} efterlitten op {{GRAMMAR:lidw|{{SITENAME}}}}", + "notification-page-linked-email-subject": "{{GENDER:$3|Jo}} oanmakke side is keppele op {{GRAMMAR:lidw|{{SITENAME}}}}", + "notification-reverted-email-subject2": "{{GENDER:$3|Jo}} {{PLURAL:$4|bewurking is|bewurkings binne}} ûngedien {{GENDER:$2|makke}} op {{GRAMMAR:lidw|{{SITENAME}}}}", + "notification-mention-email-subject": "$1 {{GENDER:$2|hat}} {{GENDER:$3|jo}} neamd op {{GRAMMAR:lidw|{{SITENAME}}}}", + "notification-user-rights-email-subject": "{{GENDER:$3|Jo}} meidoggerrjochten binne wizige op {{GRAMMAR:lidw|{{SITENAME}}}}", + "notification-timestamp-ago-seconds": "{{PLURAL:$1|$1 sek.}}", + "notification-timestamp-ago-minutes": "{{PLURAL:$1|$1 min.}}", + "notification-timestamp-ago-hours": "{{PLURAL:$1|$1 o.}}", + "notification-timestamp-ago-days": "{{PLURAL:$1|$1 dei|$1 dgn.}}", + "notification-timestamp-ago-months": "{{PLURAL:$1|$1 mo.}}", + "notification-timestamp-ago-years": "{{PLURAL:$1|$1 jr.}}", + "notification-timestamp-today": "Hjoed", + "notification-timestamp-yesterday": "Juster", + "notification-inbox-filter-read": "Lêzen", + "notification-inbox-filter-unread": "Net-lêzen", + "notification-inbox-filter-all": "Alles", + "echo-specialmute-label-mute-notifications": "Gjin meldingen sjen litte fan dizze meidogger", + "echo-email-plain-footer": "Besjoch {{GENDER:$1|jo}} foarkarren en regelje hokker e-mails wy {{GENDER:$1|jo}} tastjoere:", + "echo-email-html-footer-preference-link-text": "Besjoch {{GENDER:$1|jo}} foarkarren", + "echo-email-html-footer-with-link": "$1 en regelje hokker e-mails wy {{GENDER:$2|jo}} tastjoere.", + "echo-notification-alert": "{{PLURAL:$1|Seintsje ($1)|Seintsjes ($1)|100=Seintsjes (99+)}}", + "echo-notification-notice": "{{PLURAL:$1|Meidieling ($1)|Meidielings ($1)|100=Meidielings (99+)}}", + "echo-notification-alert-text-only": "Seintsjes", + "echo-notification-notice-text-only": "Meidielings", "echo-overlay-link": "Alle meldingen", + "echo-overlay-title": "<b>Meldingen</b>", + "echo-mark-all-as-read": "Alles as lêzen markearje", + "echo-mark-all-as-read-confirmation": "$1 {{PLURAL:$1|melding|meldingen}} as lêzen markearre", + "echo-mark-wiki-as-read": "Alles as lêzen markearje yn 'e wiki: $1", + "echo-displaysnippet-title": "Nije melding", "echo-date-today": "Hjoed", - "echo-date-yesterday": "Juster" + "echo-date-yesterday": "Juster", + "notification-bundle-header-edit-user-talk-v2": "{{PLURAL:$1|Ien nij berjocht|$1 nije berjochten|100=99+ nije berjochten}} op <strong>{{GENDER:$3|jo}} oerlisside</strong>.", + "echo-email-batch-subject-daily": "Jo hawwe {{PLURAL:$2|in nije melding|nije meldingen}} op {{GRAMMAR:lidw|{{SITENAME}}}}", + "echo-email-batch-subject-weekly": "Jo hawwe {{PLURAL:$2|in nije melding|nije meldingen}} dizze wike op {{GRAMMAR:lidw|{{SITENAME}}}}", + "echo-email-batch-body-intro-daily": "Goeie $1,\nHjir is jo oersjoch fan 'e warberens fan hjoed op {{GRAMMAR:lidw|{{SITENAME}}}}.", + "echo-email-batch-body-intro-weekly": "Goeie $1,\nHjir is jo oersjoch fan 'e warberens fan dizze wike op {{GRAMMAR:lidw|{{SITENAME}}}}.", + "echo-email-batch-link-text-view-all-notifications": "Alle meldingen besjen", + "notification-header-foreign-alert": "Mear seintsjes fan {{PLURAL:$5|in oare wiki|$5 oare wiki's}}", + "notification-header-foreign-notice": "Mear meidielings fan {{PLURAL:$5|in oare wiki|$5 oare wiki's}}", + "notification-header-foreign-all": "Mear meldingen fan {{PLURAL:$5|in oare wiki|$5 oare wiki's}}" } diff --git a/Echo/i18n/gcr.json b/Echo/i18n/gcr.json index ae283177..0c420fc3 100644 --- a/Echo/i18n/gcr.json +++ b/Echo/i18n/gcr.json @@ -4,5 +4,5 @@ "LeGuyanaisPure" ] }, - "tooltip-pt-notifications-alert": "Zòt alèrt" + "tooltip-pt-notifications-alert": "{{GENDER:|}}Ou alèrt" } diff --git a/Echo/i18n/gd.json b/Echo/i18n/gd.json index 2759103f..4423260c 100644 --- a/Echo/i18n/gd.json +++ b/Echo/i18n/gd.json @@ -1,14 +1,13 @@ { "@metadata": { "authors": [ - "GunChleoc", - "Akerbeltz" + "Akerbeltz", + "GunChleoc" ] }, "echo-desc": "Siostam gus brathan a chur chan luchd-cleachdaidh mu thachartasan is naidheachdan", "prefs-echo": "Brathan-naidheachd", "prefs-emailsettings": "Roghainnean a' phuist-d", - "prefs-displaynotifications": "Roghainnean an t-seallaidh", "prefs-echosubscriptions": "Cuir brath thugam mu na tachartasan seo", "echo-pref-send-me": "Cuir thugam:", "echo-pref-send-to": "Cuir gu:", @@ -34,15 +33,10 @@ "echo-pref-tooltip-reverted": "Cuir brath-naidheachd thugam nuair a thilleas cuideigin deasachadh a rinn mi le inneal an neo-dhèanaimh no an tillidh.", "echo-pref-tooltip-mention": "Cuir brath-naidheachd thugam nuair a cheanglas cuideigin ris duilleag a' chleachdaiche agam o dhuilleag na deasbaireachd sam bith.", "echo-pref-tooltip-user-rights": "Cuir brath-naidheachd thugam nuair a dh'atharraicheas cuideigin ceadan a' chleachdaiche agam.", - "echo-error-no-formatter": "Tha deach fòrmatadh a shònrachadh airson a' bhratha-naidheachd.", "notifications": "Brathan-naidheachd", "tooltip-pt-notifications-alert": "Na caismeachdan {{GENDER:|agad}}", "echo-specialpage": "Brathan-naidheachd", - "echo-anon": "[$1 Cruthaich cunntas] no [$2 log a-steach] gus brathan-naidheachd fhaighinn.", "echo-none": "Chan eil brath-naidheachd agad.", - "echo-more-info": "Barrachd fiosrachaidh", - "echo-feedback": "Beachd thugainn", - "echo-quotation-marks": "\"$1\"", "notification-link-text-view-message": "Seall an teachdaireachd", "notification-link-text-view-mention": "Seall an t-iomradh", "notification-link-text-view-changes": "{{GENDER:$1|Seall}} na h-atharraichean", @@ -50,21 +44,16 @@ "notification-header-edit-user-talk": "Dh’fhàg $1 teachdaireachd dhut air <strong>an duilleag deasbaireachd agad</strong>.", "notification-link-text-view-edit": "Seall an deasachadh", "notification-header-reverted": "Chaidh {{PLURAL:$4|an deasachadh agad air <strong>$3</strong> |na deasachaidhean agad air <strong>$3</strong>}} {{GENDER:$2|a thilleadh}}.", - "notification-edit-talk-page-email-subject2": "Dh'fhag $1 {{GENDER:$1|}} teachdaireachd dhut air {{SITENAME}}", - "notification-edit-talk-page-email-batch-body-with-section": "Dh'fhàg $1 {{GENDER:$1|}} teachdaireachd air duilleag na deasbaireachd agad ann an \"$2\".", + "notification-edit-talk-page-email-subject2": "Dh'fhag $1 {{GENDER:$2|}} teachdaireachd dhut air {{SITENAME}}", "notification-page-linked-email-subject": "Chaidh ceangal ri duilleag a chruthaich thu air {{SITENAME}}", - "notification-reverted-email-subject2": "Chaidh {{PLURAL:$3|an deasachadh agad|na deasachaidhean agad}} {{GENDER:$1|a thilleadh}} air {{SITENAME}}", - "notification-mention-email-subject": "Thug $1 {{GENDER:$1|iomradh}} {{GENDER:$2|ort}} air {{SITENAME}}", + "notification-reverted-email-subject2": "Chaidh {{PLURAL:$4|an deasachadh agad|na deasachaidhean agad}} {{GENDER:$2|a thilleadh}} air {{SITENAME}}", + "notification-mention-email-subject": "Thug $1 {{GENDER:$2|iomradh}} {{GENDER:$3|ort}} air {{SITENAME}}", "notification-user-rights-email-subject": "Chaidh ceadan a' chleachdaiche agad atharrachadh air {{SITENAME}}", - "echo-email-body-default": "Tha brath-naidheachd ùr agad air {{SITENAME}}:\n\n$1", - "echo-email-footer-default": "$2\n\nThoir sùil air na roghainnean agad gus taghadh dè na puist-d a chuireas sinn thugad:\n{{canonicalurl:{{#special:Preferences}}#mw-prefsection-echo}}\n\n$1", "echo-overlay-link": "A h-uile brath-naidheachd", "echo-overlay-title": "<b>Brathan-naidheachd</b>", - "echo-overlay-title-overflow": "<b>{{PLURAL:$1|Brath-naidheachd|Brathan-naidheachd}}</b> (a' sealltainn $1 à $2 gun leughadh)", "echo-mark-all-as-read": "Cuir comharra gun deach iad uile a leughadh", "echo-date-today": "An-diugh", "echo-date-yesterday": "An-dè", - "echo-load-more-error": "Thachair mearachd nuair a bha sinn a' faighinn barrachd thoraidhean.", "echo-email-batch-bullet": "•", "echo-email-batch-subject-daily": "Tha {{PLURAL:$2|bràth-naidheachd ùr|brathan-naidheachd ùra}} agad air {{SITENAME}}", "echo-email-batch-subject-weekly": "Tha {{PLURAL:$2|bràth-naidheachd ùr|brathan-naidheachd ùra}} agad air {{SITENAME}} an t-seachdain seo", diff --git a/Echo/i18n/gl.json b/Echo/i18n/gl.json index 870962dd..d0826685 100644 --- a/Echo/i18n/gl.json +++ b/Echo/i18n/gl.json @@ -1,21 +1,24 @@ { "@metadata": { "authors": [ - "Elisardojm", - "Toliño", - "Vivaelcelta", "Banjo", + "Elisardojm", + "Iváns", "Macofe", - "Navhy" + "Toliño", + "Vivaelcelta" ] }, "echo-desc": "Sistema para notificar aos usuarios sobre eventos e mensaxes", "prefs-echo": "Notificacións", "prefs-emailsettings": "Opcións de correo electrónico", - "prefs-displaynotifications": "Opcións de visualización", "prefs-echosubscriptions": "Notificádeme sobre estes eventos", "prefs-echocrosswiki": "Notificatións entre wikis", "prefs-blocknotificationslist": "Usuarios ocultados", + "prefs-echopollupdates": "Notificacións activas", + "echo-mobile-notifications-filter-title": "Filtrar notificacións", + "echo-pref-show-poll-updates": "Amosar novas notificacións a medida que se reciben", + "echo-pref-show-poll-updates-help": "Amosar o número de notificacións non lidas na barra de título, e amosar un fragmento de cada notificación inmediatamente cando chega.", "echo-pref-send-me": "Enviádeme:", "echo-pref-send-to": "Enviar a:", "echo-pref-email-format": "Formato do correo:", @@ -29,8 +32,7 @@ "echo-pref-email-format-plain-text": "Texto simple", "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-pref-dont-email-read-notifications": "Non incluir notificacións lidas nos correos electrónicos de resumo", "echo-learn-more": "Máis información", "echo-log": "Rexistro público", "echo-new-messages": "Ten mensaxes novas", @@ -42,9 +44,14 @@ "echo-category-title-mention-success": "{{PLURAL:$1|Mención exitosa|Mencións exitosas}}", "echo-category-title-other": "{{PLURAL:$1|Outra|Outras}}", "echo-category-title-system": "{{PLURAL:$1|Sistema}}", + "echo-category-title-system-noemail": "{{PLURAL:$1|Sistema}}", + "echo-category-title-system-emailonly": "{{PLURAL:$1|Sistema}}", "echo-category-title-user-rights": "{{PLURAL:$1|Cambio|Cambios}} nos dereitos de usuario", "echo-category-title-emailuser": "{{PLURAL:$1|Correo electrónico doutro usuario|Correos electrónicos doutros usuarios}}", "echo-category-title-article-reminder": "{{PLURAL:$1|Notificación|Notificacións}} de páxinas", + "echo-category-title-thank-you-edit": "Editar {{PLURAL:$1|fito|fitos}}", + "echo-category-title-watchlist": "Edición en páxina vixiada", + "echo-category-title-minor-watchlist": "Edición menor en páxina vixiada", "echo-pref-tooltip-edit-user-talk": "Notificádeme cando alguén deixe unha mensaxe ou responda na miña páxina de conversa.", "echo-pref-tooltip-article-linked": "Notificádeme cando alguén engada desde outra páxina unha ligazón cara a unha páxina creada por min.", "echo-pref-tooltip-reverted": "Notificádeme cando alguén reverta unha edición feita por min usando a ferramenta de reversión ou de desfacer.", @@ -54,7 +61,9 @@ "echo-pref-tooltip-user-rights": "Notificádeme cando alguén modifique os meus dereitos de usuario.", "echo-pref-tooltip-emailuser": "Notificádeme cando alguén me envíe un correo electrónico.", "echo-pref-tooltip-article-reminder": "Notificarse sobre esta páxina cando pregunte.", - "echo-error-no-formatter": "Non se definiu formato ningún para a notificación", + "echo-pref-tooltip-thank-you-edit": "Notificarme cando acade a edición número 1, 10, 100...", + "echo-pref-tooltip-watchlist": "Notificarme cando alguén fai unha edición (non menor) nunha páxina da miña lista de vixiancia.", + "echo-pref-tooltip-minor-watchlist": "Notificarme cando alguén fai unha edición menor nunha páxina da miña lista de vixiancia.", "notifications": "Notificacións", "tooltip-pt-notifications-alert": "{{GENDER:|As súas}} alertas", "tooltip-pt-notifications-notice": "{{GENDER:|Os seus}} avisos", @@ -65,7 +74,6 @@ "echo-displaynotificationsconfiguration-sorting-by-section-legend": "Sección na que se clasifica cada tipo de notificación", "echo-displaynotificationsconfiguration-available-notification-methods-header": "Métodos de notificación permitidos", "echo-displaynotificationsconfiguration-available-notification-methods-by-category-legend": "Métodos de notificación admitidos para cada categoría", - "echo-displaynotificationsconfiguration-available-notification-methods-by-type-legend": "Métodos de notificación admitidos para cada tipo; só se aplica aos tipos dentro das categorías que están ocultos nas preferencias", "echo-displaynotificationsconfiguration-enabled-default-header": "Activadas por defecto", "echo-displaynotificationsconfiguration-enabled-default-existing-users-legend": "Usuarios existentes", "echo-displaynotificationsconfiguration-enabled-default-new-users-legend": "Novos usuarios", @@ -75,14 +83,12 @@ "echo-specialpage-section-markread": "Marcar o grupo como lido", "echo-specialpage-markasread": "Notificaciónː Marcar como lida", "echo-specialpage-markasread-invalid-id": "ID de evento incorrecto", + "echo-specialpage-pagefilterwidget-aria-label": "Filtrar por wiki e título de páxina", "echo-specialpage-pagination-numnotifications": "$1 {{PLURAL:$1|notificación|notificacións}}", "echo-specialpage-pagefilters-title": "Actividade recente", "echo-specialpage-pagefilters-subtitle": "Páxinas con notificacións sen ler", "notificationsmarkread-legend": "Marcar a notificación como lida", - "echo-anon": "Para recibir notificacións, [$1 cree unha conta] ou [$2 acceda ao sistema].", "echo-none": "Non ten ningunha notificación.", - "echo-more-info": "Máis información", - "echo-feedback": "Comentarios", "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.", @@ -111,8 +117,8 @@ "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-compact-header-edit-user-talk": "$1 {{GENDER:$2|deixou}}{{GENDER:$3|che}} unha mensaxe.", + "notification-compact-header-edit-user-talk-with-section": "$1 {{GENDER:$2|deixou}}{{GENDER:$3|che}} 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>\".", @@ -156,12 +162,11 @@ "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.", - "notification-edit-talk-page-email-subject2": "$1 {{GENDER:$1|deixoulle}} unha mensaxe en {{SITENAME}}", - "notification-edit-talk-page-email-batch-body-with-section": "$1 {{GENDER:$1|deixou}} unha mensaxe na súa páxina de conversa na sección \"$2\"", + "notification-edit-talk-page-email-subject2": "$1 {{GENDER:$2|deixoulle}} unha mensaxe en {{SITENAME}}", "notification-page-linked-email-subject": "Unha páxina creada por vostede foi ligada en {{SITENAME}}", - "notification-reverted-email-subject2": "{{PLURAL:$3|Reverteuse a súa edición|Revertéronse as súas edicións}} {{GENDER:$1|en}} {{SITENAME}}", - "notification-mention-email-subject": "$1 {{GENDER:$1|fíxolle}} unha {{GENDER:$2|mención}} en {{SITENAME}}", - "notification-user-rights-email-subject": "Os seus dereitos de usuario cambiaron en {{SITENAME}}", + "notification-reverted-email-subject2": "{{PLURAL:$4|Reverteuse a súa edición|Revertéronse as súas edicións}} {{GENDER:$2|en}} {{SITENAME}}", + "notification-mention-email-subject": "$1 {{GENDER:$2|fíxolle}} unha {{GENDER:$3|mención}} en {{SITENAME}}", + "notification-user-rights-email-subject": "{{GENDER:$3|Os seus}} dereitos de usuario cambiaron en {{SITENAME}}", "notification-timestamp-ago-seconds": "{{PLURAL:$1|$1 s}}", "notification-timestamp-ago-minutes": "{{PLURAL:$1|$1 min}}", "notification-timestamp-ago-hours": "{{PLURAL:$1|$1 h}}", @@ -173,9 +178,7 @@ "notification-inbox-filter-read": "Lidas", "notification-inbox-filter-unread": "Non lidas", "notification-inbox-filter-all": "Todas", - "echo-email-body-default": "Ten unha nova notificación en {{SITENAME}}:\n\n$1", - "echo-email-footer-default-html": "Para controlar que correos electrónicos lle enviamos, <a href=\"$2\" style=\"text-decoration:none; color: #3868B0;\">revise as súas preferenzas</a>.<br />\n$1", - "echo-email-footer-default": "$2\n\nPara controlar os correos electrónicos que lle enviamos, comprobe as súas preferencias:\n{{canonicalurl:{{#special:Preferences}}#mw-prefsection-echo}}\n\n$1", + "echo-specialmute-label-mute-notifications": "Silenciar notificacións deste usuario", "echo-email-plain-footer": "Para controlar os emais que {{GENDER:$1|lle}} mandamos, {{GENDER:$1|revise}} as súas preferenciasː", "echo-email-html-footer-preference-link-text": "{{GENDER:$1|comprobe}} as súas preferencias", "echo-email-html-footer-with-link": "Para controlar que correos electrónicos {{GENDER:$2|lle}} enviamos, $1.", @@ -185,13 +188,12 @@ "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> (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", + "echo-displaysnippet-title": "Nova notificación", "echo-date-today": "Hoxe", "echo-date-yesterday": "Onte", - "echo-load-more-error": "Houbo un erro ao procurar máis resultados.", "notification-bundle-header-edit-user-talk-v2": "{{PLURAL:$1|Mensaxe nova|$1 mensaxes novas|100=Máis de 99 mensaxes novas}} na <strong>{{GENDER:$3|súa}} páxina de conversa</strong>.", "echo-email-batch-subject-daily": "Ten {{PLURAL:$2|unha nova notificación|novas notificacións}} en {{SITENAME}}", "echo-email-batch-subject-weekly": "Esta semana ten {{PLURAL:$2|unha nova notificación|novas notificacións}} en {{SITENAME}}", diff --git a/Echo/i18n/gn.json b/Echo/i18n/gn.json index 7e591943..47b09a8e 100644 --- a/Echo/i18n/gn.json +++ b/Echo/i18n/gn.json @@ -7,7 +7,6 @@ "echo-desc": "Maranduha reko", "prefs-echo": "Maranduha", "prefs-emailsettings": "E-mail jeporavo", - "prefs-displaynotifications": "Jehecha jeporavo", "prefs-echosubscriptions": "Tomomarandu chéve kóva rehegua", "echo-pref-send-me": "Chemombe'ukarãː", "echo-pref-send-to": "Mombe'ukaː", @@ -18,8 +17,6 @@ "notifications": "Maranduha", "echo-specialpage": "Maranduha", "echo-none": "Nderereko maranduha pyahu.", - "echo-more-info": "Maranduve", - "echo-feedback": "Ñeimo'ã", "notification-link-text-view-message": "Mombe'ukaha jehecha", "notification-link-text-view-changes": "Ñemoambue jehecha", "notification-link-text-view-page": "Kuatiarogue jehecha", diff --git a/Echo/i18n/gom-deva.json b/Echo/i18n/gom-deva.json index 978e4085..951ad60e 100644 --- a/Echo/i18n/gom-deva.json +++ b/Echo/i18n/gom-deva.json @@ -6,6 +6,7 @@ "Vaishali Parab" ] }, + "tooltip-pt-notifications-alert": "{{GENDER:|तुज्यो}} चत्रायो", "notification-timestamp-today": "आयज", "notification-timestamp-yesterday": "काल", "notification-inbox-filter-read": "वाचचें", diff --git a/Echo/i18n/gom-latn.json b/Echo/i18n/gom-latn.json index d1909cf8..f2a34aef 100644 --- a/Echo/i18n/gom-latn.json +++ b/Echo/i18n/gom-latn.json @@ -4,6 +4,7 @@ "The Discoverer" ] }, + "echo-learn-more": "Odik xikun ghe", "tooltip-pt-notifications-alert": "{{GENDER:|Tujeo}} chotraio", "notification-timestamp-today": "Aiz", "notification-timestamp-yesterday": "Kal", diff --git a/Echo/i18n/gsw.json b/Echo/i18n/gsw.json index bd70c7ca..6b7e4081 100644 --- a/Echo/i18n/gsw.json +++ b/Echo/i18n/gsw.json @@ -32,37 +32,28 @@ "echo-pref-tooltip-reverted": "Hiwyse, wen en Änderig vo mir isch rückgängig gmacht oder zrügggsetzt worde.", "echo-pref-tooltip-mention": "Hiwyse, we öpper e Link uf mys Konto (Benutzersyte) het gschribe.", "echo-pref-tooltip-user-rights": "Hiwyse, we myni Berächtigunge hei g’änderet.", - "echo-error-no-formatter": "Formatierig füre Hiwys fählt.", "notifications": "Hiwyse", "tooltip-pt-notifications-alert": "{{GENDER:|Dyni}} Hiwyse", "echo-specialpage": "Hiwyse", - "echo-anon": "Für Hiwyse z übercho, muesch di [$1 registrieren] oder [$2 amälde].", "echo-none": "Du hesch kener Hiwyse.", - "echo-more-info": "Meh Information", - "echo-feedback": "Rückmäldig", "notification-link-text-view-message": "Nachricht aluege", "notification-link-text-view-mention": "Erwähnig aluege", "notification-link-text-view-changes": "Änderigen aluege", "notification-link-text-view-page": "Syten aluege", "notification-link-text-view-edit": "Änderig aluege", "notification-header-reverted": "{{GENDER:$2|Der $1|D $1|$1}} het dyni {{PLURAL:$4|Änderig|Änderigen}} ar Syte $3 rückgängig gemacht.", - "notification-edit-talk-page-email-subject2": "{{GENDER:$1|Der $1|D $1|$1}} het der e Nachricht uf {{SITENAME}} gschribe", - "notification-edit-talk-page-email-batch-body-with-section": "{{GENDER:$1|Der $1|D $1|$1}} het uf dyre Diskussion e Nachricht über «$2» gschribe.", + "notification-edit-talk-page-email-subject2": "{{GENDER:$2|Der $1|D $1|$1}} het der e Nachricht uf {{SITENAME}} gschribe", "notification-page-linked-email-subject": "E Syte vo dir het uf {{SITENAME}} e Link übercho", - "notification-reverted-email-subject2": "{{GENDER:$1|Der $1|D $1|$1}} het {{PLURAL:$3|e Veränderig|Veränderige}} vo dir uf {{SITENAME}} rückgängig gmacht", - "notification-mention-email-subject": "{{GENDER:$1|Der $1|D $1|$1}} het di uf {{SITENAME}} erwähnt", + "notification-reverted-email-subject2": "{{GENDER:$2|Der $1|D $1|$1}} het {{PLURAL:$4|e Veränderig|Veränderige}} vo dir uf {{SITENAME}} rückgängig gmacht", + "notification-mention-email-subject": "{{GENDER:$2|Der $1|D $1|$1}} het di uf {{SITENAME}} erwähnt", "notification-user-rights-email-subject": "Dyni Rächt uf {{SITENAME}} hei gänderet", - "echo-email-body-default": "Du hesch e nöüe Hiwys uf {{SITENAME}} übercho:\n\n$1", - "echo-email-footer-default": "$2\n\nDu chasch i dynen Ystellige bestimme, weli Hiwyse das du per E-Mail überchunsch:\n{{canonicalurl:{{#special:Preferences}}#mw-prefsection-echo}}\n\n$1", "echo-notification-alert": "{{PLURAL:$1|Ei Hiwys|$1 Hiwyse|100=Hiwyse (99+)}}", "echo-notification-alert-text-only": "Hiwyse", "echo-overlay-link": "Alli Hiwyse", "echo-overlay-title": "<b>Hiwyse</b>", - "echo-overlay-title-overflow": "<b>{{PLURAL:$1|Hiwys|Hiwyse}}</b> ($1 {{PLURAL:$1|Hiwys vo $2 ungläsnige wird|Hiwyse vo $2 ungläsnige wärden}} azeigt)", "echo-mark-all-as-read": "Alli als gläse markiere", "echo-date-today": "Hüt", "echo-date-yesterday": "Gester", - "echo-load-more-error": "Bim Abrüeffe vo de Resultat het’s e Fähler ’gä.", "echo-email-batch-subject-daily": "Du hesch {{PLURAL:$2|e nöüe Hiwys|nöüi Hiwysen}} uf {{SITENAME}}", "echo-email-batch-subject-weekly": "Du hesch {{PLURAL:$2|e nöüe Hiwys|nöüi Hiwysen}} us der letste Wuchen uf {{SITENAME}}", "echo-email-batch-body-intro-daily": "{{GENDER:$1|Liebe $1|Liebi $1|Hallo $1}}\n\nHie isch e Zämefassig vo den Ereignis hüt uf {{SITENAME}}.", diff --git a/Echo/i18n/gu.json b/Echo/i18n/gu.json index c3622e8e..6de84536 100644 --- a/Echo/i18n/gu.json +++ b/Echo/i18n/gu.json @@ -1,17 +1,16 @@ { "@metadata": { "authors": [ + "Drashti4", "Dsvyas", "KartikMistry", - "Rangilo Gujarati", "NehalDaveND", - "Drashti4" + "Rangilo Gujarati" ] }, "echo-desc": "સભ્યોને ઘટનાઓ અને સંદેશાઓનું સૂચન કરતી સેવા", "prefs-echo": "સૂચનાઓ", "prefs-emailsettings": "ઈમેલ વિકલ્પો", - "prefs-displaynotifications": "પ્રદર્શન વિકલ્પો", "prefs-echosubscriptions": "મને આ ઘટનાઓ વિશે જાણ કરવી", "prefs-echocrosswiki": "આંતર-વિકિ સૂચનાઓ", "echo-pref-send-me": "મને મોકલો:", @@ -41,16 +40,12 @@ "echo-pref-tooltip-article-linked": "જ્યારે કોઇ મારા દ્વારા બનાવવામાં આવેલ લેખ સાથે કોઇ કડી કરે ત્યારે સૂચના મોકલો.", "echo-pref-tooltip-reverted": "જ્યારે કોઈ મારું સંપાદન રદ કરે કે કોઈ રોલબેક ઉપકરણ વાપરે ત્યારે મને સૂચના મોકલો.", "echo-pref-tooltip-mention": "મારા સભ્ય પાનાને જ્યારે કોઈ કડી વડે જોડે ત્યારે સૂચના મોકલો.", - "echo-error-no-formatter": "સૂચનાઓ માટે કોઈ માળખું નિયત નથી કર્યું.", "notifications": "સૂચનાઓ", "tooltip-pt-notifications-alert": "{{GENDER:|તમારી}} ચેતવણીઓ", "tooltip-pt-notifications-notice": "{{GENDER:|તમારી}} સૂચનાઓ", "echo-displaynotificationsconfiguration-enabled-default-new-users-legend": "નવા સભ્યો", "echo-specialpage": "સૂચનાઓ", - "echo-anon": "સૂચનાઓ પ્રાપ્ત કરવા, [$1 નવું ખાતું ખોલો] અથવા [$2 પ્રવેશ કરો].", "echo-none": "તમારા માટે કોઈ સૂચનાઓ નથી.", - "echo-more-info": "વધારે જાણકારી", - "echo-feedback": "અભિપ્રાય", "echo-notification-placeholder": "કોઇ નવી સૂચનાઓ નથી.", "echo-notification-markasread": "વાંચેલી તરીકે અંકિત કરો", "echo-notification-markasunread": "ન વાંચેલી તરીકે અંકિત કરો", @@ -70,34 +65,30 @@ "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": "$1એ તમારા ચર્ચાનાં પાને ''$2'' હેઠળ તમારા માટે સંદેશો {{GENDER:$1|મૂક્યો}} છે.", + "notification-edit-talk-page-email-subject2": "{{SITENAME}} પર તમારા માટે $1એ સંદેશ {{GENDER:$2|મૂક્યો}} છે.", "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-reverted-email-subject2": "{{SITENAME}} પર {{PLURAL:$4|તમારો ફેરફાર|તમારા ફેરફારો}} {{GENDER:$2|પાછો વાળ્યો|પાછા વાળ્યા}} છે.", + "notification-mention-email-subject": "$1એ {{SITENAME}} પર {{GENDER:$3|તમારો}} {{GENDER:$2|ઉલ્લેખ}} કર્યો છે", "notification-user-rights-email-subject": "તમારાં {{SITENAME}} પરનાં અધિકારો બદલાયા છે", - "notification-timestamp-ago-seconds": "{{PLURAL:$1|$1s}}", - "notification-timestamp-ago-minutes": "{{PLURAL:$1|$1m}}", + "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|$1mo}}", + "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-overlay-title": "<b>સૂચનાઓ</b>", - "echo-overlay-title-overflow": "<b>{{PLURAL:$1|સુચનાઓ}}</b> ($2 પૈકીની નહિવાંચેલી $1 દર્શાવી છે)", "echo-mark-all-as-read": "બધીને વાંચેલી તરીકે અંકિત કરો", "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|નવી સુચના|નવી સુચનાઓ}} છે", "echo-email-batch-body-intro-daily": "નમસ્કાર $1,\n{{SITENAME}} પર તમારી ક્રિયાઓનો આજનો સારાંશ આ પ્રમાણે છે.", diff --git a/Echo/i18n/hak.json b/Echo/i18n/hak.json index a83c71c7..98a7a814 100644 --- a/Echo/i18n/hak.json +++ b/Echo/i18n/hak.json @@ -1,8 +1,11 @@ { "@metadata": { "authors": [ - "Hakka" + "Hakka", + "唐吉訶德的侍從" ] }, - "tooltip-pt-notifications-alert": "{{GENDER:|ngì ke}} thì-siáng" + "tooltip-pt-notifications-alert": "{{GENDER:|ngì ke}} thì-siáng", + "notification-link-text-expand-all": "Chán-khôi", + "notification-link-text-collapse-all": "Chap-thia̍p" } diff --git a/Echo/i18n/haw.json b/Echo/i18n/haw.json index c57ac4ef..5c5a7955 100644 --- a/Echo/i18n/haw.json +++ b/Echo/i18n/haw.json @@ -7,7 +7,6 @@ "echo-desc": "‘Ōnaehana notikala", "prefs-echo": "Notikala", "prefs-emailsettings": "Koho leka uila", - "prefs-displaynotifications": "Koho hō‘ike", "echo-pref-send-me": "Ho‘ouna ia‘u:", "echo-pref-send-to": "Ho‘ouna iā:", "echo-pref-email-format": "Hulu leka uila:", @@ -21,6 +20,5 @@ "notifications": "Notikala", "echo-specialpage": "Notikala", "echo-none": "‘A‘ohe notikala.", - "echo-more-info": "‘Ike ‘ē a‘e", "notification-link-text-view-message": "Nānā memo" } diff --git a/Echo/i18n/he.json b/Echo/i18n/he.json index 51a3c217..674ee679 100644 --- a/Echo/i18n/he.json +++ b/Echo/i18n/he.json @@ -4,29 +4,35 @@ "Amire80", "Guycn1", "Guycn2", + "IKhitron", + "Ijon", "Inkbug", + "Macofe", "Orsa", "Ypnypn", + "דגש חזק", "דולב", "חיים", - "ערן", - "Ijon", - "IKhitron", - "Macofe" + "ערן" ] }, "echo-desc": "מערכת לשליחת התראות למשתמשים על אירועים והודעות", "prefs-echo": "הודעות", "prefs-emailsettings": "אפשרויות דוא\"ל", - "prefs-displaynotifications": "אפשרויות תצוגה", "prefs-echosubscriptions": "להודיע לי על האירועים הבאים", "prefs-echocrosswiki": "הודעות מאתרי ויקי אחרים", "prefs-blocknotificationslist": "משתמשים מושתקים", + "prefs-mutedpageslist": "דפים מושתקים להתראות על קישורים", + "prefs-echopollupdates": "התראות חיות", + "echo-mobile-notifications-filter-title": "סינון התראות", + "echo-pref-show-poll-updates": "הצגת התראות חדשות כשהן מגיעות", + "echo-pref-show-poll-updates-help": "הצגת מספר ההתראות שלא נקראו בסרגל הכותרת, והצגת קטע קצר מתוך כל התראה מייד כשהיא מגיעה.", "echo-pref-send-me": "מה לשלוח לי:", "echo-pref-send-to": "לשלוח אל:", "echo-pref-email-format": "תסדיר דוא\"ל:", "echo-pref-web": "באתר", "echo-pref-email": "בדוא\"ל", + "echo-pref-push": "יישומים", "echo-pref-email-frequency-never": "לא לשלוח לי שום הודעות בדואר אלקטרוני", "echo-pref-email-frequency-immediately": "הודעות בודדות כשהן מגיעות", "echo-pref-email-frequency-daily": "סיכום יומי של הודעות", @@ -35,8 +41,8 @@ "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-pref-notifications-page-linked-title-muted-list": "לא להציג התראות \"קישור מדף\" מהדפים האלה. ([[mw:Special:MyLanguage/Help:Notifications#mute|מידע נוסף]])", + "echo-pref-dont-email-read-notifications": "לא לכלול הודעות שנקראו במכתבים עם סיכומים", "echo-learn-more": "מידע נוסף", "echo-log": "יומן ציבורי", "echo-new-messages": "יש לך הודעות חדשות", @@ -48,9 +54,14 @@ "echo-category-title-mention-success": "{{PLURAL:$1|אזכור שהצליח|אזכורים שהצליחו}}", "echo-category-title-other": "{{PLURAL:$1|אחר}}", "echo-category-title-system": "{{PLURAL:$1|מערכת}}", + "echo-category-title-system-noemail": "{{PLURAL:$1|מערכת}}", + "echo-category-title-system-emailonly": "{{PLURAL:$1|מערכת}}", "echo-category-title-user-rights": "{{PLURAL:$1|שינוי|שינויים}} בהרשאות שלי", "echo-category-title-emailuser": "{{PLURAL:$1|דוא\"ל ממשתמש אחר|דוא\"ל ממשתמשים אחרים}}", "echo-category-title-article-reminder": "{{PLURAL:$1|תזכורת על דף|תזכורות על דפים}}", + "echo-category-title-thank-you-edit": "{{PLURAL:$1|אבן דרך|אבני דרך}} בעריכה", + "echo-category-title-watchlist": "עריכה של דף ברשימת מעקב", + "echo-category-title-minor-watchlist": "עריכה משנית של דף ברשימת מעקב", "echo-pref-tooltip-edit-user-talk": "להודיע לי כשמישהו שולח הודעה או תגובה בדף השיחה שלי.", "echo-pref-tooltip-article-linked": "להודיע לי כשמישהו מקשר לדף שיצרתי מתוך דף אחר.", "echo-pref-tooltip-reverted": "להודיע לי כשמישהו משחזר עריכה שלי באמצעות כלי השחזור או הביטול.", @@ -60,7 +71,9 @@ "echo-pref-tooltip-user-rights": "להודיע לי כשמישהו משנה את הרשאות המשתמש שלי.", "echo-pref-tooltip-emailuser": "להודיע לי כשמישהו שולח לי דואר אלקטרוני.", "echo-pref-tooltip-article-reminder": "להודיע לי על הדף הזה כשאני מבקש.", - "echo-error-no-formatter": "לא הוגדר עיצוב להודעה.", + "echo-pref-tooltip-thank-you-edit": "להודיע לי כשאני מגיע לעריכה הראשונה, העשירית, המאה וכו' שלי.", + "echo-pref-tooltip-watchlist": "להודיע לי כשמישהו עושה עריכה (לא משנית) לדף ברשימת המעקב שלי.", + "echo-pref-tooltip-minor-watchlist": "להודיע לי כשמישהו עושה עריכה משנית לדף ברשימת המעקב שלי.", "notifications": "הודעות", "tooltip-pt-notifications-alert": "ההתראות שלך", "tooltip-pt-notifications-notice": "ההודעות {{GENDER:|שלך}}", @@ -71,7 +84,6 @@ "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": "משתמשים חדשים", @@ -81,16 +93,15 @@ "echo-specialpage-section-markread": "סימון כקבוצה שנקראה", "echo-specialpage-markasread": "הודעה: סימון כהודעה שנקראה", "echo-specialpage-markasread-invalid-id": "מזהה אירוע בלתי־תקין", + "echo-specialpage-pagefilterwidget-aria-label": "סינון לפי ויקי וכותרת דף", + "echo-specialpage-special-help-menu-widget-aria-label": "אפשרויות נוספות והעדפות התראות.", "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": "לא ניתן היה לאחזר הודעות.", - "echo-api-failure-cross-wiki": "לא ניתנה גישה למתחם המרוחק.", + "echo-api-failure-cross-wiki": "לא ניתנה גישה לתחום המרוחק.", "echo-notification-placeholder": "אין הודעות.", "echo-notification-placeholder-filters": "אין הודעות שמתאימות לסינון הזה.", "echo-notification-loginrequired": "יש להיכנס לחשבון כדי לצפות בהודעות.", @@ -99,6 +110,12 @@ "echo-notification-markasunread": "סימון כהודעה שלא נקראה", "echo-notification-markasread-tooltip": "סימון כהודעה שנקראה", "echo-notification-more-options-tooltip": "אפשרויות נוספות", + "notification-dynamic-actions-mute-page-linked": "{{GENDER:$2|להשתיק}} התראות על קישורים מהדף \"$1\"", + "notification-dynamic-actions-mute-page-linked-confirmation": "התראות \"קישור מדף\" כבויות עכשיו עבור הדף \"$1\"", + "notification-dynamic-actions-mute-page-linked-confirmation-description": "{{GENDER:$2|אתה יכול|את יכולה}} לנהל את הדפים המושתקים שלך ב[$1 העדפות שלך] בכל זמן.", + "notification-dynamic-actions-unmute-page-linked": "{{GENDER:$2|להפעיל}} התראות על קישורים מהדף \"$1\"", + "notification-dynamic-actions-unmute-page-linked-confirmation": "התראות \"קישור מדף\" מופעלות עכשיו עבור הדף \"$1\"", + "notification-dynamic-actions-unmute-page-linked-confirmation-description": "{{GENDER:$2|אתה יכול|את יכולה}} לנהל את הדפים המושתקים שלך ב[$1 העדפות שלך] בכל זמן.", "notification-dynamic-actions-unwatch": "{{GENDER:$3|הפסקת}} המעקב אחרי פעילות חדשה בדף \"$1\"", "notification-dynamic-actions-unwatch-confirmation": "{{GENDER:$3|אתה כבר לא עוקב|את כבר לא עוקבת|אתם כבר לא עוקבים}} יותר אחרי הדף \"$1\"", "notification-dynamic-actions-unwatch-confirmation-description": "{{GENDER:$3|באפשרותך|באפשרותך|באפשרותכם}} לעקוב אחרי [$2 הדף הזה] בכל עת.", @@ -148,6 +165,16 @@ "notification-header-user-rights-expiry-change": "תפוגת החברות {{GENDER:$4|שלך}} {{PLURAL:$3|בקבוצה הבאה|בקבוצות הבאות}} {{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-header-watchlist-changed": "$1 {{GENDER:$2|שינה|שינתה}} את <strong>$3</strong>, דף ברשימת המעקב {{PLURAL:$5||{{GENDER:$4|שלך}}|שלך פעמיים|שלך $5 פעמים}}.", + "notification-header-watchlist-created": "$1 {{GENDER:$2|יצר|יצרה}} את <strong>$3</strong>, דף ברשימת המעקב {{PLURAL:$5||{{GENDER:$4|שלך}}|שלך פעמיים|שלך $5 פעמים}}.", + "notification-header-watchlist-deleted": "$1 {{GENDER:$2|מחק|מחקה}} את <strong>$3</strong>, דף ברשימת המעקב {{PLURAL:$5||{{GENDER:$4|שלך}}|שלך פעמיים|שלך $5 פעמים}}.", + "notification-header-watchlist-moved": "$1 {{GENDER:$2|העביר|העבירה}} את <strong>$3</strong>, דף ברשימת המעקב {{PLURAL:$5||{{GENDER:$4|שלך}}|שלך פעמיים|שלך $5 פעמים}}.", + "notification-header-watchlist-restored": "$1 {{GENDER:$2|שחזר|שחזרה}} ממחיקה את <strong>$3</strong>, דף ברשימת המעקב {{PLURAL:$5||{{GENDER:$4|שלך}}|שלך פעמיים|שלך $5 פעמים}}.", + "notification-header-watchlist-multiuser-changed": "<strong>$1</strong>, דף ברשימת המעקב {{GENDER:$2|שלך}}, שוּנה {{PLURAL:$3|פעם אחת|פעמיים|$3 פעמים}}.", + "notification-header-watchlist-multiuser-created": "<strong>$1</strong>, דף ברשימת המעקב {{GENDER:$2|שלך}}, נוצר {{PLURAL:$3|פעם אחת|פעמיים|$3 פעמים}}.", + "notification-header-watchlist-multiuser-deleted": "<strong>$1</strong>, דף ברשימת המעקב {{GENDER:$2|שלך}}, נמחק {{PLURAL:$3|פעם אחת|פעמיים|$3 פעמים}}.", + "notification-header-watchlist-multiuser-moved": "<strong>$1</strong>, דף ברשימת המעקב {{GENDER:$2|שלך}}, הועבר {{PLURAL:$3|פעם אחת|פעמיים|$3 פעמים}}.", + "notification-header-watchlist-multiuser-restored": "<strong>$1</strong>, דף ברשימת המעקב {{GENDER:$2|שלך}}, שוחזר ממחיקה {{PLURAL:$3|פעם אחת|פעמיים|$3 פעמים}}.", "notification-welcome-linktext": "ברוך בואך", "notification-header-thank-you-1-edit": "זה עתה {{GENDER:$2|עשית}} את העריכה הראשונה שלך; תודה ו{{GENDER:$2|ברוך הבא|ברוכה הבאה|ברוך בואך}}!", "notification-header-thank-you-10-edit": "זה עתה {{GENDER:$2|עשית}} את העריכה העשירית שלך; תודה, {{GENDER:$2|המשך|המשיכי}} כך!", @@ -156,17 +183,17 @@ "notification-header-thank-you-10000-edit": "{{GENDER:$2|עשית}} את העריכה העשרת אלפים שלך; תודה רבה־רבה!", "notification-header-thank-you-100000-edit": "{{GENDER:$2|עשית}} את העריכה המאה אלף שלך; תודה על התרומה המדהימה הזאת!", "notification-header-thank-you-1000000-edit": "{{GENDER:$2|עשית}} את העריכה המיליון שלך; תודה על התרומה המדהימה הזאת!", + "notification-header-thank-you-10000000-edit": "{{GENDER:$2|עשית}} את העריכה העשרה מיליון שלך; תודה על המסירות המבריקה שלך!", "notification-link-thank-you-edit": "עריכה {{GENDER:$1|שלך}}", "notification-link-text-view-edit": "הצגת העריכה", "notification-link-article-reminder": "הצגת הדף", - "notification-header-reverted": "{{PLURAL:$4|העריכה {{GENDER:$2|שלך}} בדף <strong>$3</strong> שוחזרה|העריכות שלך בדף <strong>$3</strong> שוחזרו}}.", + "notification-header-reverted": "{{PLURAL:$4|העריכה {{GENDER:$2|שלך}} בדף <strong>$3</strong> בוטלה|העריכות שלך בדף <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|שלך}}|עריכות שלך}} באתר {{SITENAME}} {{PLURAL:$3|שוחזרה|שוחזרו}}", - "notification-mention-email-subject": "$1 {{GENDER:$1|הזכיר|הזכירה}} {{GENDER:$2|אותך}} באתר {{SITENAME}}", - "notification-user-rights-email-subject": "ההרשאות שלך באתר {{SITENAME}} שונו", + "notification-edit-talk-page-email-subject2": "$1 {{GENDER:$2|כתב|כתבה}} {{GENDER:$3|לך}} הודעה באתר {{SITENAME}}", + "notification-page-linked-email-subject": "נוצר קישור לדף {{GENDER:$3|שיצרת}} באתר {{SITENAME}}", + "notification-reverted-email-subject2": "{{PLURAL:$4|עריכה {{GENDER:$3|שלך}}|עריכות שלך}} באתר {{SITENAME}} {{PLURAL:$4|{{GENDER:$2|בוטלה}}|בוטלו}}", + "notification-mention-email-subject": "$1 {{GENDER:$2|הזכיר|הזכירה}} {{GENDER:$3|אותך}} באתר {{SITENAME}}", + "notification-user-rights-email-subject": "ההרשאות {{GENDER:$3|שלך}} באתר {{SITENAME}} שונו", "notification-timestamp-ago-seconds": "{{PLURAL:$1|שנייה|$1 שניות}}", "notification-timestamp-ago-minutes": "{{PLURAL:$1|דקה|$1 דקות}}", "notification-timestamp-ago-hours": "{{PLURAL:$1|שעה|שעתיים|$1 שעות}}", @@ -178,9 +205,7 @@ "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-specialmute-label-mute-notifications": "להשתיק התראות {{GENDER:$1|מהמשתמש הזה|מהמשתמשת הזאת}}", "echo-email-plain-footer": "כדי לבחור אילו מכתבים נשלח {{GENDER:$1|אליך|אלייך|אליכם}}, אנא {{GENDER:$1|בדוק|בִדקי|בִדקו}} את ההעדפות {{GENDER:$1|שלך|שלך|שלכם}}:", "echo-email-html-footer-preference-link-text": "{{GENDER:$1|בדוק|בִדקי|בִדקו}} את ההעדפות {{GENDER:$1|שלך|שלך|שלכם}}", "echo-email-html-footer-with-link": "כדי לבחור אילו מכתבים נשלח {{GENDER:$2|אליך|אלייך|אליכם}}, אנא $1.", @@ -190,13 +215,12 @@ "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 שלא נקראו)", "echo-mark-all-as-read": "לסמן שהכול נקרא", "echo-mark-all-as-read-confirmation": "{{PLURAL:$1|הודעה אחת סומנה כהודעה שנקראה|$1 הודעות סומנו כהודעות שנקראו}}", "echo-mark-wiki-as-read": "סימון כל ההודעות מאתר הוויקי שנבחר כנקראות: $1", + "echo-displaysnippet-title": "התראה חדשה", "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>.", "echo-email-batch-subject-daily": "קיבלת {{PLURAL:$2|הודעה חדשה|הודעות חדשות}} באתר {{SITENAME}}", "echo-email-batch-subject-weekly": "יש לך {{PLURAL:$2|הודעה חדשה|הודעות חדשות}} באתר {{SITENAME}} השבוע", diff --git a/Echo/i18n/hi.json b/Echo/i18n/hi.json index f018925b..51c27d58 100644 --- a/Echo/i18n/hi.json +++ b/Echo/i18n/hi.json @@ -2,27 +2,26 @@ "@metadata": { "authors": [ "Akash.bhargude", + "Anamdas", + "Angpradesh", "Ansumang", "Bill william compton", "Hindustanilanguage", - "Shubhamkanodia", - "Siddhartha Ghai", "NehalDaveND", - "राम प्रसाद जोशी", - "Angpradesh", + "Sachinkatiyar", "Sfic", + "Shahjad ansari", + "Shubhamkanodia", + "Siddhartha Ghai", "चक्रपाणी", + "राम प्रसाद जोशी", "संजीव कुमार", - "Shahjad ansari", - "Anamdas", - "हिंदुस्थान वासी", - "Sachinkatiyar" + "हिंदुस्थान वासी" ] }, "echo-desc": "अधिसूचना प्रणाली", "prefs-echo": "सूचनायें", "prefs-emailsettings": "ईमेल विकल्प", - "prefs-displaynotifications": "प्रदर्शन विकल्प", "prefs-echosubscriptions": "मुझे इन घटनाओं के बारे में सूचित करें", "prefs-echocrosswiki": "क्रॉस-विकी नोटिफिकेशन", "prefs-blocknotificationslist": "मूक उपयोगकर्ता", @@ -38,7 +37,6 @@ "echo-pref-email-format-html": "एच॰टी॰एम॰एल॰", "echo-pref-email-format-plain-text": "सादा पाठ", "echo-pref-cross-wiki-notifications": "दूसरे विकीज़ से नोटिफिकेशन दिखाएँ", - "echo-pref-beta-feature-cross-wiki-message": "बढ़ा सूचना", "echo-learn-more": "अधिक जानिए", "echo-log": "सार्वजनिक लॉग", "echo-new-messages": "आपके लिए नए संदेश हैं", @@ -60,7 +58,6 @@ "echo-pref-tooltip-mention-success": "किसी के नाम का उल्लेख करने पर मुझे सूचित करें।", "echo-pref-tooltip-user-rights": "यदि कोई मेरे सदस्य अधिकार परिवर्तित करता है तो मुझे सूचित करें।", "echo-pref-tooltip-emailuser": "जब मुझे कोई ईमेल करें तो मुझे सूचना दें।", - "echo-error-no-formatter": "अधिसूचना के लिए कोई स्वरूपण परिभाषित नहीं है।", "notifications": "सूचनायें", "tooltip-pt-notifications-alert": "{{GENDER:|आपका}} जागरूकता संदेश", "tooltip-pt-notifications-notice": "{{GENDER:|आपकी}} सूचना", @@ -82,10 +79,7 @@ "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": "कोई सूचना नहीं है।", @@ -129,11 +123,10 @@ "notification-link-article-reminder": "लेख देखें", "notification-header-reverted": "$3 पर आपके {{PLURAL:$4|सम्पादन|सम्पादनों}} को $1 द्वारा {{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-edit-talk-page-email-subject2": "$1 ने आपके लिए {{SITENAME}} पर संदेश {{GENDER:$2|छोड़ा है}}", "notification-page-linked-email-subject": "आपका पृष्ठ {{SITENAME}} पर लिंक किया गया", - "notification-reverted-email-subject2": "{{SITENAME}} पर आपके {{PLURAL:$3|सम्पादन|सम्पादनों}} को {{GENDER:$1|पूर्ववत}} किया गया।", - "notification-mention-email-subject": "$1 ने {{SITENAME}} पर आपका {{GENDER:$1|उल्लेख}} किया", + "notification-reverted-email-subject2": "{{SITENAME}} पर आपके {{PLURAL:$4|सम्पादन|सम्पादनों}} को {{GENDER:$2|पूर्ववत}} किया गया।", + "notification-mention-email-subject": "$1 ने {{SITENAME}} पर आपका {{GENDER:$2|उल्लेख}} किया", "notification-user-rights-email-subject": "{{SITENAME}} पर आपके सदस्य अधिकार बदले गए हैं", "notification-timestamp-ago-seconds": "{{PLURAL:$1|$1से}}", "notification-timestamp-ago-minutes": "{{PLURAL:$1|$1 मि}}", @@ -146,20 +139,16 @@ "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-html-footer-preference-link-text": "{{GENDER:$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> ($2 अपठित में से $1 दिख रहा)", "echo-mark-all-as-read": "सभी पढ़ी गयी चिन्हित करें", "echo-mark-wiki-as-read": "चुने विकियों के सभी को पढ़ा चिन्हित करें: $1", "echo-date-today": "आज", "echo-date-yesterday": "कल", - "echo-load-more-error": "अधिक परिणाम प्राप्त करते समय एक त्रुटि हुई।", "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|अधिसूचना है|अधिसूचनाएँ हैं}}।", diff --git a/Echo/i18n/hil.json b/Echo/i18n/hil.json new file mode 100644 index 00000000..48cd5c33 --- /dev/null +++ b/Echo/i18n/hil.json @@ -0,0 +1,14 @@ +{ + "@metadata": { + "authors": [ + "Pare Mo" + ] + }, + "echo-pref-web": "Web", + "echo-pref-email": "Sulat-e", + "tooltip-pt-notifications-alert": "{{GENDER:|Imong}} mga alerta", + "echo-displaynotificationsconfiguration-enabled-default-new-users-legend": "Mga bag·ong manuggamit", + "notification-link-text-expand-all": "Palaparon", + "notification-inbox-filter-all": "Tanan", + "echo-notification-alert-text-only": "Mga alerta" +} diff --git a/Echo/i18n/hr.json b/Echo/i18n/hr.json index 9618b596..dd37f828 100644 --- a/Echo/i18n/hr.json +++ b/Echo/i18n/hr.json @@ -2,25 +2,30 @@ "@metadata": { "authors": [ "Amire80", + "Bugoslav", + "Ex13", "MaGa", "Roberta F.", - "Ex13", - "Bugoslav", "Wumbolo" ] }, "echo-desc": "Sustav obavješćivanja suradnika o događajima i porukama", "prefs-echo": "Obavijesti", "prefs-emailsettings": "Mogućnosti elektroničke pošte", - "prefs-displaynotifications": "Opcije prikaza", - "prefs-echosubscriptions": "Obavijesti me o događajima", + "prefs-echosubscriptions": "Obavijesti me o ovim događajima", "prefs-echocrosswiki": "Obavijesti s drugih wikija", "prefs-blocknotificationslist": "Suradnici čije obavijesti i vijestice ne želite primati", + "prefs-mutedpageslist": "Utišavanje obavijesti o povezivanju stranica wikipoveznicom", + "prefs-echopollupdates": "Obavijesti uživo", + "echo-mobile-notifications-filter-title": "Filtriraj obavijesti", + "echo-pref-show-poll-updates": "Pokaži nove obavijesti čim stignu", + "echo-pref-show-poll-updates-help": "Prikaži broj nepročitanih obavijesti u naslovnoj traci, kao i izvadak svake obavijesti čim stigne.", "echo-pref-send-me": "Pošalji mi:", "echo-pref-send-to": "Pošalji na:", "echo-pref-email-format": "Oblik e-poruke:", "echo-pref-web": "Mreža", "echo-pref-email": "Elektronička pošta", + "echo-pref-push": "Aplikacije", "echo-pref-email-frequency-never": "ne šalji mi nikakve obavijesti e-mailom", "echo-pref-email-frequency-immediately": "pojedinačne obavijesti po redoslijedu", "echo-pref-email-frequency-daily": "dnevni sažetak obavijesti", @@ -29,20 +34,26 @@ "echo-pref-email-format-plain-text": "obični tekst", "echo-pref-cross-wiki-notifications": "Prikaži obavijesti s drugih wikija", "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. Da biste primali obavijesti s drugih wikija, morate omogućiti beta mogućnost na tom wikiju.", + "echo-pref-notifications-page-linked-title-muted-list": "Ne prikazuj obavijesti »Stavljanja poveznica na stranicu« za ove stranice. ([[mw:Special:MyLanguage/Help:Notifications#mute|saznaj više]])", "echo-learn-more": "Saznajte više", - "echo-log": "Javni očevidnik", + "echo-log": "Javna evidencija", "echo-new-messages": "Imate nove poruke", - "echo-category-title-edit-user-talk": "{{PLURAL:$1|Poruka}} na stranici za razgovor", + "echo-category-title-edit-user-talk": "{{PLURAL:$1|Poruka|Poruke|Poruka}} na stranici za razgovor", "echo-category-title-article-linked": "Stavljanja {{PLURAL:$1|poveznica|poveznice|poveznica}} na stranicu", "echo-category-title-reverted": "Uklanjanje {{PLURAL:$1|uređivanja}}", "echo-category-title-mention": "{{PLURAL:$1|Spominjanje|Spominjanja}}", "echo-category-title-mention-failure": "{{PLURAL:$1|Neuspješno spominjanje|Neuspješna spominjanja|Neuspješnih spominjanja}}", "echo-category-title-mention-success": "{{PLURAL:$1|Uspješno spominjanje|Uspješna spominjanja|Uspješnih spominjanja}}", + "echo-category-title-other": "{{PLURAL:$1|Ostalo}}", "echo-category-title-system": "{{PLURAL:$1|Sustav}}", + "echo-category-title-system-noemail": "{{PLURAL:$1|Sustav}}", + "echo-category-title-system-emailonly": "{{PLURAL:$1|Sustavska poruka|Sustavske poruke}}", "echo-category-title-user-rights": "{{PLURAL:$1|Promjena suradničkih prava}}", "echo-category-title-emailuser": "{{PLURAL:$1|E-poruka od drugog suradnika|E-poruke od drugih suradnika}}", + "echo-category-title-article-reminder": "{{PLURAL:$1|podsjetnik|podsjetnika}} o stranicama", + "echo-category-title-thank-you-edit": "{{PLURAL:$1|Miljokaz|Miljokazi}} uređivanja", + "echo-category-title-watchlist": "Uređivanje praćene stranice", + "echo-category-title-minor-watchlist": "Manje uređivanje praćene stranice", "echo-pref-tooltip-edit-user-talk": "Obavijesti me kad netko snimi poruku ili odgovori na mojoj stranici za razgovor.", "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.", @@ -51,79 +62,112 @@ "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.", + "echo-pref-tooltip-article-reminder": "Obavijesti me o ovoj stranici kad to zatražim.", + "echo-pref-tooltip-thank-you-edit": "Obavijesti me kad ostvarim moje 1., 10., 100... uređivanje.", + "echo-pref-tooltip-watchlist": "Obavijesti me kad netko napravi uređivanje stranice s mog popisa praćenja.", + "echo-pref-tooltip-minor-watchlist": "Obavijesti me kad netko napravi manje uređivanje stranice s mog popisa praćenja.", "notifications": "Obavijesti", "tooltip-pt-notifications-alert": "{{GENDER:|Vaše}} obavijesti", "tooltip-pt-notifications-notice": "{{GENDER:|Vaše}} vijestice", + "echo-displaynotificationsconfiguration": "Prikaži postavke obavijesti", + "echo-displaynotificationsconfiguration-summary": "Ovo je pretpregled postavki obavijesti na ovom wikiju.", + "echo-displaynotificationsconfiguration-notifications-by-category-header": "Obavijesti po kategorijama", + "echo-displaynotificationsconfiguration-sorting-by-section-header": "Vrsta sortiranja", + "echo-displaynotificationsconfiguration-sorting-by-section-legend": "U koji će se odlomak svaka vrsta obavijesti sortirati", + "echo-displaynotificationsconfiguration-available-notification-methods-header": "Dopušteni načini obavješćivanja", + "echo-displaynotificationsconfiguration-available-notification-methods-by-category-legend": "Koji su načini dopušteni za svaku kategoriju", + "echo-displaynotificationsconfiguration-enabled-default-header": "Zadano omogućeno", + "echo-displaynotificationsconfiguration-enabled-default-existing-users-legend": "Postojeći suradnici", + "echo-displaynotificationsconfiguration-enabled-default-new-users-legend": "Novi suradnici", + "echo-displaynotificationsconfiguration-mandatory-notification-methods-header": "Zahtijevani načini obavješćivanja", + "echo-displaynotificationsconfiguration-mandatory-notification-methods-by-category-legend": "Koji su načini obvezni za svaku kategoriju", "echo-specialpage": "Obavijesti i vijestice", "echo-specialpage-section-markread": "Označi grupu kao pročitanu", "echo-specialpage-markasread": "Obavijest: označi kao pročitano", + "echo-specialpage-markasread-invalid-id": "Neispravan ID događaja", "echo-specialpage-pagination-numnotifications": "$1 {{PLURAL:$1|obavijest|obavijesti}}", + "echo-specialpage-pagination-range": "$1 - $2", "echo-specialpage-pagefilters-title": "Nedavna aktivnost", "echo-specialpage-pagefilters-subtitle": "Stranice s nepročitanim obavijestima", - "echo-anon": "Da biste primali obavijesti, [$1 otvorite račun] ili se [$2 prijavite].", + "notificationsmarkread-legend": "Označi obavijest pročitanom", "echo-none": "Nemate obavijesti.", - "echo-more-info": "Više informacija", - "echo-feedback": "Povratna informacija", "echo-api-failure": "Dobavljanje obavijesti/vijestica nije bilo uspješno!", + "echo-api-failure-cross-wiki": "Pristup vanjskoj domeni je odbijen.", "echo-notification-placeholder": "Nema obavijesti.", - "echo-notification-placeholder-filters": "Nema obavijesti prema zadanom kriteriju.", - "echo-notification-loginrequired": "Morate biti prijavljeni da biste vidjeli vaše obavijesti.", + "echo-notification-placeholder-filters": "Nema obavijesti prema zadanim kriterijima.", + "echo-notification-loginrequired": "Morate biti prijavljeni da biste vidjeli Vaše obavijesti.", "echo-notification-popup-loginrequired": "Da biste vidjeli vaše obavijesti, molimo prijavite se.", "echo-notification-markasread": "Označi kao pročitano", "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-dynamic-actions-unwatch-confirmation": "Više {{GENDER:$3|ne pratite}} stranicu \"$1\"", + "notification-dynamic-actions-unwatch-confirmation-description": "{{GENDER:$3|Možete}} bilo kada pratiti [$2 ovu stranicu].", + "notification-dynamic-actions-watch": "{{GENDER:$3|Prati}} novu aktivnost na \"$1\"", + "notification-dynamic-actions-watch-confirmation": "Od sada {{GENDER:$3|pratite}} stranicu \"$1\"", + "notification-dynamic-actions-watch-confirmation-description": "{{GENDER:$3|Možete}} bilo kada prestati pratiti [$2 ovu stranicu].", "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}}", "notification-link-text-expand-all-count": "Vidi {{PLURAL:$1|$1 obavijest|$1 obavijesti}}", "notification-link-text-collapse-all": "Sažmi", - "notification-link-text-view-message": "Pogledajte poruku", + "notification-link-text-view-message": "Pogledaj 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.", - "notification-header-edit-user-talk-with-section": "$1 {{GENDER:$2|Vam je ostavio|Vam je ostavila}} poruku na {{GENDER:$3|Vašoj}} stranici za razgovor u odlomku \"$4\".", - "notification-header-page-linked": "{{GENDER:$2|Suradnik|Suradnica}} $1 {{GENDER:$2|načinio je|načinila je}} poveznicu na stranici <strong>$4</strong> prema <strong>$3</strong>.", + "notification-header-edit-user-talk": "$1 {{GENDER:$2|Vam je ostavio|Vam je ostavila}} poruku na <strong>{{GENDER:$3|Vašoj}} stranici za razgovor</strong>.", + "notification-header-edit-user-talk-with-section": "$1 {{GENDER:$2|Vam je ostavio|Vam je ostavila}} poruku na <strong>{{GENDER:$3|Vašoj}} stranici za razgovor</strong> u odlomku \"<strong>$4</strong>\".", + "notification-compact-header-edit-user-talk": "$1 {{GENDER:$3|Vam}} je {{GENDER:$2|ostavio|ostavila}} poruku.", + "notification-compact-header-edit-user-talk-with-section": "$1 {{GENDER:$3|Vam}} je {{GENDER:$2|ostavio|ostavila}} poruku u \"<strong>$4</strong>\".", + "notification-header-page-linked": "Stranica <strong>$3</strong> povezana je sa stranicom <strong>$4</strong>.", "notification-compact-header-page-linked": "Povezano sa stranice <strong>$1</strong>.", - "notification-bundle-header-page-linked": "Stranica $3 je {{GENDER:$2|povezana}} sa stranicom $4 i s još $5 {{PLURAL:$6|stranicom|stranice|stranica}}.", + "notification-bundle-header-page-linked": "Stranica <strong>$3</strong> povezana je s/sa {{PLURAL:$5|1=jednom stranicom|$5 stranicom|$5 stranice|$5 stranica|100=preko 99 stranica}}.", + "notification-header-article-reminder": "Stranica za koju {{GENDER:$2|ste}} tražili podsjetnik nalazi se na <strong>$3</strong>", "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-agent-talkpage-nosection": "$1 {{GENDER:$3|Vas}} je {{GENDER:$2|spomenuo|spomenula}} na <strong>{{GENDER:$2|njegovoj|njenoj}} stranici za razgovor</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-too-many": "Pokušali {{GENDER:$2|ste}} spomenuti više od $3 {{PLURAL:$3|suradnik|suradnika}}. Spominjanja iznad tog ograničenja nisu poslana.", "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}}.", "notification-compact-header-mention-failure-user-unknown": "<strong>Suradničko ime nije pronađeno:</strong> $1", "notification-compact-header-mention-failure-user-anonymous": "<strong>Neprijavljeni suradnici ne mogu biti spomenuti:</strong> $1", "notification-header-mention-success": "<strong>$3</strong> je {{GENDER:$3|obaviješten|obaviještena}} da {{GENDER:$2|ste}} {{GENDER:$3|ga|je}} spomenuli.", "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-mention-status-bundle": "{{PLURAL:$3|Obavijest|$3 obavijesti}} o spominjanju koja {{GENDER:$2|ste učinili}} na <strong>$4</strong> stranici za razgovor: {{PLURAL:$5|$5 nije poslano|$5 nisu poslana|$5 nije poslano}}, {{PLURAL:$6|$6 je poslano|$6 su poslana|$6 je poslano}}.", "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-user-rights-remove-only": "{{GENDER:$4|Vaša}} suradnička prava su {{GENDER:$1|promijenjena}}. Niste više član sljedećih grupa: $2.", + "notification-header-user-rights-add-and-remove": "{{GENDER:$6|Vaša}} suradnička prava su {{GENDER:$1|promijenjena}}. Dodani ste u sljedeće grupe: $2. Više niste član grupa: $4.", + "notification-header-user-rights-expiry-change": "Istek {{GENDER:$4|Vašeg}} članstva u {{PLURAL:$3|sljedećoj grupi|sljedećim grupama}} je {{GENDER:$1|promijenjen}}: $2.", + "notification-header-welcome": "{{GENDER:$2|Dobro došli}} na projekt {{SITENAME}}, $1! Drago nam je da {{GENDER:$2|ste}} ovdje.", "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!", "notification-header-thank-you-100-edit": "Upravo {{GENDER:$2|ste}} načinili {{GENDER:$2|Vaše}} stoto uređivanje, zahvaljujemo {{GENDER:$2|Vam}} i očekujemo da ćete nastaviti tako i dalje!", - "notification-header-thank-you-1000-edit": "{{GENDER:$2|Poštovani|Poštovana}}, upravo {{GENDER:$2|ste}} načinili {{GENDER:$2|Vaše}} tisućito uređivanje, zahvaljujemo {{GENDER:$2|Vam}} i molimo Vas da nastavite biti {{GENDER:$2|odličnim doprinositeljom|odličnom doprinositeljicom}}!", - "notification-header-thank-you-10000-edit": "{{GENDER:$2|Poštovani|Poštovana}}, upravo {{GENDER:$2|ste}} načinili {{GENDER:$2|Vaše}} desettisućito uređivanje, neizmjerno {{GENDER:$2|Vam}} zahvaljujemo i molimo Vas da nastavite biti {{GENDER:$2|izvrsnim doprinositeljom|izvrsnom doprinositeljicom}}!", + "notification-header-thank-you-1000-edit": "{{GENDER:$2|Poštovani|Poštovana}}, upravo {{GENDER:$2|ste}} načinili {{GENDER:$2|Vaše}} tisućito uređivanje, zahvaljujemo {{GENDER:$2|Vam}} i molimo Vas da nastavite biti {{GENDER:$2|odličnim doprinositeljem|odličnom doprinositeljicom}}!", + "notification-header-thank-you-10000-edit": "{{GENDER:$2|Poštovani|Poštovana}}, upravo {{GENDER:$2|ste}} načinili {{GENDER:$2|Vaše}} desettisućito uređivanje, neizmjerno {{GENDER:$2|Vam}} zahvaljujemo i molimo Vas da nastavite biti {{GENDER:$2|izvrsnim doprinositeljem|izvrsnom doprinositeljicom}}!", "notification-header-thank-you-100000-edit": "{{GENDER:$2|Poštovani|Poštovana}}, upravo {{GENDER:$2|ste}} načinili {{GENDER:$2|Vaše}} stotisućito uređivanje, zahvaljujemo {{GENDER:$2|Vam}} na iznimnom doprinosu te Vas molimo da nastavite biti {{GENDER:$2|izvanrednim doprinositeljom|izvanrednom doprinositeljicom}}!", "notification-header-thank-you-1000000-edit": "{{GENDER:$2|Poštovani|Poštovana}}, upravo {{GENDER:$2|ste}} načinili {{GENDER:$2|Vaše}} milijunto uređivanje, zahvaljujemo {{GENDER:$2|Vam}} na tom nevjerojatno zadivljujućem doprinosu!", + "notification-link-thank-you-edit": "{{GENDER:$1|Vaše}} uređivanje", "notification-link-text-view-edit": "Prikaži promjene", + "notification-link-article-reminder": "Vidi stranicu", "notification-header-reverted": "{{PLURAL:$4|Vaše uređivanje na stranici $3|Vaša uređivanja na stranici $3}} {{GENDER:$2|uklonio je suradnik|uklonila je suradnica}} $2.", "notification-header-emailuser": "$1 Vam je {{GENDER:$2|poslao|poslala}} e-poštu.", - "notification-edit-talk-page-email-subject2": "$1 Vam je {{GENDER:$1|ostavio|ostavila}} poruku na projektu {{SITENAME}}", - "notification-edit-talk-page-email-batch-body-with-section": "$1 je {{GENDER:$1|ostavio|ostavila}} poruku na Vašoj stranici za razgovor u odlomku \"$2\".", - "notification-page-linked-email-subject": "Na projektu {{SITENAME}} dodana je poveznica na stranicu koju ste stvorili", - "notification-reverted-email-subject2": "{{PLURAL:$3|Vaša izmjena je {{GENDER:$1|uklonjena}}|Vaše izmjene su {{GENDER:$1|uklonjene}}}} na projektu {{SITENAME}}", - "notification-mention-email-subject": "$1 {{GENDER:$2|Vas}} je {{GENDER:$1|spomenuo|spomenula}} na projektu {{SITENAME}}", - "notification-user-rights-email-subject": "Vaša suradnička prava su promijenjena na projektu {{SITENAME}}", + "notification-edit-talk-page-email-subject2": "$1 {{GENDER:$3|Vam}} je {{GENDER:$2|ostavio|ostavila}} poruku na projektu {{SITENAME}}", + "notification-page-linked-email-subject": "Na projektu {{SITENAME}} dodana je poveznica na stranicu koju {{GENDER:$3|ste}} stvorili", + "notification-reverted-email-subject2": "{{PLURAL:$4|{{GENDER:$3|Vaša}} izmjena je {{GENDER:$2|uklonjena}}|Vaše izmjene su {{GENDER:$2|uklonjene}}}} na projektu {{SITENAME}}", + "notification-mention-email-subject": "$1 {{GENDER:$2|spomenuo|spomenula}} {{GENDER:$3|Vas}} je na projektu {{SITENAME}}", + "notification-user-rights-email-subject": "{{GENDER:$3|Vaša}} suradnička prava promijenjena su na projektu {{SITENAME}}", "notification-timestamp-ago-seconds": "{{PLURAL:$1|$1 sek.}}", "notification-timestamp-ago-minutes": "{{PLURAL:$1|$1 min.}}", "notification-timestamp-ago-hours": "{{PLURAL:$1|$1 sat|$1 sata|$1 sati}}", @@ -135,27 +179,31 @@ "notification-inbox-filter-read": "Pročitane", "notification-inbox-filter-unread": "Nepročitane", "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, 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-specialmute-label-mute-notifications": "Ne prikazuj (''utišaj'') obavijesti od {{GENDER:$1|ovoga suradnika|ove suradnice|ovoga suradnika / ove suradnice}}", + "echo-email-plain-footer": "Da biste promijenili koje {{GENDER:$1|Vam}} e-poruke šaljemo, provjerite {{GENDER:$1|svoje}} 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-email-html-footer-with-link": "Da biste promijenili koje {{GENDER:$2|Vam}} e-poruke šaljemo, $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", "echo-notification-notice-text-only": "Vijestice", "echo-overlay-link": "Sve obavijesti", "echo-overlay-title": "<b>Obavijesti</b>", - "echo-overlay-title-overflow": "<b>{{PLURAL:$1|Obavijesti}}</b> (prikazano $1 od $2 {{PLURAL:$1|nepročitana|nepročitane|nepročitanih}})", "echo-mark-all-as-read": "Označi sve pročitanim", + "echo-mark-all-as-read-confirmation": "$1 {{PLURAL:$1|obavijest|obavijesti}} označeno je pročitanim", + "echo-mark-wiki-as-read": "Označi sve pročitanim u označenom wikiju: $1", + "echo-displaysnippet-title": "Nova obavijest", "echo-date-today": "Danas", "echo-date-yesterday": "Jučer", - "notification-bundle-header-edit-user-talk-v2": "$1 {{PLURAL:$2|nova poruka|nove poruke|novih poruka}} na {{GENDER:$3|Vašoj}} stranici za razgovor.", + "notification-bundle-header-edit-user-talk-v2": "{{PLURAL:$1|Jedna nova poruka|$1 nove poruke|$1 novih poruka|100=99 i više novih poruka}} na <strong>{{GENDER:$3|Vašoj}} stranici za razgovor</strong>.", "echo-email-batch-subject-daily": "Imate {{PLURAL:$2|novu obavijest|nove obavijesti}} na projektu {{SITENAME}}", "echo-email-batch-subject-weekly": "Ovog tjedna imate {{PLURAL:$2|obavijest|obavijesti}} na projektu {{SITENAME}}", + "echo-email-batch-body-intro-daily": "Pozdrav $1,\novo je sažetak Vaše današnje aktivnosti na projektu {{SITENAME}}.", + "echo-email-batch-body-intro-weekly": "Pozdrav $1,\novo je sažetak Vaše tjedne aktivnosti na projektu {{SITENAME}}.", "echo-email-batch-link-text-view-all-notifications": "Prikaži sve obavijesti", "notification-header-foreign-alert": "Više obavijesti na {{PLURAL:$5|drugom wikiju|$5 druga wikija|$5 drugih wikija}}", "notification-header-foreign-notice": "Više obavijesti na {{PLURAL:$5|drugom wikiju|$5 druga wikija|$5 drugih wikija}}", - "notification-header-foreign-all": "Više obavijesti na {{PLURAL:$5|drugom wikiju|$5 druga wikija|$5 drugih wikija}}" + "notification-header-foreign-all": "Više obavijesti na {{PLURAL:$5|drugom wikiju|$5 druga wikija|$5 drugih wikija}}", + "echo-foreign-wiki-lang": "$1 - $2", + "echo-badge-count": "{{PLURAL:$1|$1|100={{formatnum:99}}+}}" } diff --git a/Echo/i18n/hsb.json b/Echo/i18n/hsb.json index bdca0301..cee39b22 100644 --- a/Echo/i18n/hsb.json +++ b/Echo/i18n/hsb.json @@ -1,14 +1,13 @@ { "@metadata": { "authors": [ - "Michawiki", - "J budissin" + "J budissin", + "Michawiki" ] }, "echo-desc": "Zdźělenski system", "prefs-echo": "Zdźělenki", "prefs-emailsettings": "E-mejlowe nastajenja", - "prefs-displaynotifications": "Zwobraznjenske opcije", "prefs-echosubscriptions": "Mje wo tutych podawkach informować", "echo-pref-send-me": "Pósćel mi:", "echo-pref-send-to": "Pósłać na:", @@ -33,36 +32,26 @@ "echo-pref-tooltip-article-linked": "Informuj mje, hdyž něchtó na stronu wotkazuje, kotruž sym z nastawka wutworił.", "echo-pref-tooltip-reverted": "Informuj mje, hdyž něchtó z pomocu cofnjenja abo nastroja změnu anuluje, kotruž sym činił.", "echo-pref-tooltip-mention": "Informuj mje, hdyž něchtó z někajkeje diskusijneje strony k mojej wužiwarskej stronje wotkazuje.", - "echo-error-no-formatter": "Za zdźělenje njeje so formatowanje definowało.", "notifications": "Zdźělenki", "tooltip-pt-notifications-alert": "{{GENDER:|Twoje}} powěsće", "echo-specialpage": "Zdźělenki", - "echo-anon": "Zo by zdźělenki dóstał, dyrbiš [$1 konto załožić] abo [$2 so přizjewić].", "echo-none": "Nimaš zdźělenki.", - "echo-more-info": "Dalše informacije", - "echo-feedback": "Komentary", - "echo-quotation-marks": "\"$1\"", "notification-link-text-view-message": "Powěsć pokazać", "notification-link-text-view-mention": "Naspomnjenje pokazać", "notification-link-text-view-changes": "Změny pokazać", "notification-link-text-view-page": "Stronu pokazać", "notification-link-text-view-edit": "Změnu pokazać", "notification-header-reverted": "$1 je {{PLURAL:$4|změnu na $3|změnje na $3|změny na $3}} {{GENDER:$2|anulował|anulowała}}.", - "notification-edit-talk-page-email-subject2": "$1 je ći powěsć na {{GRAMMAR:lokatiw|{{SITENAME}}}} {{GENDER:$1|zawostajił|zawostajiła}}", - "notification-edit-talk-page-email-batch-body-with-section": "$1 je powěsć wo \"$2\" na twojej diskusijnej stronje {{GENDER:$1|zawostajił|zawostajiła}}.", + "notification-edit-talk-page-email-subject2": "$1 je ći powěsć na {{GRAMMAR:lokatiw|{{SITENAME}}}} {{GENDER:$2|zawostajił|zawostajiła}}", "notification-page-linked-email-subject": "Twoja strona je so na {{GRAMMAR:lokatiw|{{SITENAME}}}} wotkazała.", - "notification-reverted-email-subject2": "{{PLURAL:$3|Twoja změna je|Twojej změnje stej|Twoje změny su}} so na {{GRAMMAR:lokatiw|{{SITENAME}}}}{{GENDER:$1|{{PLURAL:$3|anulowała|anulowałoj|anulowali}}}}", - "notification-mention-email-subject": "$1 je će na {{GRAMMAR:lokatiw|{{SITENAME}}}} {{GENDER:$1|naspomnił|naspomniła}}", + "notification-reverted-email-subject2": "{{PLURAL:$4|Twoja změna je|Twojej změnje stej|Twoje změny su}} so na {{GRAMMAR:lokatiw|{{SITENAME}}}}{{GENDER:$2|{{PLURAL:$4|anulowała|anulowałoj|anulowali}}}}", + "notification-mention-email-subject": "$1 je će na {{GRAMMAR:lokatiw|{{SITENAME}}}} {{GENDER:$2|naspomnił|naspomniła}}", "notification-user-rights-email-subject": "Twoje wužiwarske prawa su so na {{GRAMMAR:lokatiw|{{SITENAME}}}} změnili", - "echo-email-body-default": "Maš nowu zdźělenku na {{GRAMMAR:lokatiw|{{SITENAME}}}}:\n\n$1", - "echo-email-footer-default": "$2\n\nZo by kontrolował, kotre e-mejle ći sćelemy, přepruwuj swoje nastajenja:\n{{canonicalurl:{{#special:Preferences}}#mw-prefsection-echo}}\n\n$1", "echo-overlay-link": "Wšě zdźělenki", "echo-overlay-title": "<b>Zdźělenki</b>", - "echo-overlay-title-overflow": "<b>{{PLURAL:$1|Zdźělenka|Zdźělence|Zdźělenki}}</b> ($1 z $2 {{PLURAL:$2|njepřitaneje|njepřečitaneju|njepřečitanych}} so {{PLURAL:$1|pokazuje|pokazujetej|pokazuja|pokazuje}})", "echo-mark-all-as-read": "Wšě jako přečitane markěrować", "echo-date-today": "Dźensa", "echo-date-yesterday": "Wčera", - "echo-load-more-error": "Při wobstarowanju dalšich wuslědkow je zmylk wustupił.", "echo-email-batch-bullet": "•", "echo-email-batch-subject-daily": "Maš {{PLURAL:$2|nowu zdźělenku|nowej zdźělence|nowe zdźělenki}} na {{GRAMMAR:lokatiw|{{SITENAME}}}}", "echo-email-batch-subject-weekly": "Maš {{PLURAL:$2|nowu zdźělenku|nowej zdźělence|nowe zdźělenki}} na {{GRAMMAR:lokatiw|{{SITENAME}}}} tutón tydźeń", diff --git a/Echo/i18n/hsn.json b/Echo/i18n/hsn.json index fe753da3..01df4a5f 100644 --- a/Echo/i18n/hsn.json +++ b/Echo/i18n/hsn.json @@ -6,7 +6,6 @@ }, "echo-displaynotificationsconfiguration": "显示通知配置", "echo-displaynotificationsconfiguration-notifications-by-category-header": "嗯类通知", - "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": "新用户" diff --git a/Echo/i18n/hu.json b/Echo/i18n/hu.json index a2ce8532..6ef457c5 100644 --- a/Echo/i18n/hu.json +++ b/Echo/i18n/hu.json @@ -1,27 +1,28 @@ { "@metadata": { "authors": [ + "BanKris", + "Bencemac", + "Bináris", "BáthoryPéter", "Dj", + "Macofe", "Misibacsi", + "R-Joe", + "Samat", "TK-999", - "Tgr", "Tacsipacsi", - "Samat", - "Bináris", - "Macofe", - "R-Joe", - "BanKris", - "Bencemac" + "Tgr" ] }, "echo-desc": "Értesíti a felhasználókat az eseményekről és üzenetekről", "prefs-echo": "Értesítések", "prefs-emailsettings": "E-mail beállítások", - "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-blocknotificationslist": "Lenémított felhasználók", + "prefs-echopollupdates": "Élő értesítések", + "echo-pref-show-poll-updates": "Új értesítések azonnali megjelenítése", "echo-pref-send-me": "Gyakoriság:", "echo-pref-send-to": "Erre a címre:", "echo-pref-email-format": "A levél formátuma:", @@ -35,7 +36,7 @@ "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/hu#mute|további információk]])", - "echo-pref-beta-feature-cross-wiki-message": "Fejlettebb értesítések", + "echo-pref-dont-email-read-notifications": "Az összefoglaló e-mailek ne tartalmazzák a már olvasott értesítéseket", "echo-learn-more": "Tudj meg többet", "echo-log": "Nyilvános napló", "echo-new-messages": "Új üzeneted van", @@ -47,9 +48,13 @@ "echo-category-title-mention-success": "Sikeres {{PLURAL:$1|említés|említések}}", "echo-category-title-other": "{{PLURAL:$1|Más}}", "echo-category-title-system": "{{PLURAL:$1|rendszerüzenet|rendszerüzenetek}}", + "echo-category-title-system-noemail": "{{PLURAL:$1|Rendszerüzenet}}", "echo-category-title-user-rights": "{{PLURAL:$1|Felhasználói jogok változása|Felhasználói jogok változásai}}", "echo-category-title-emailuser": "{{PLURAL:$1|E-mail másik szerkesztőtől|E-mailek más szerkesztőktől}}", "echo-category-title-article-reminder": "{{PLURAL:$1|lapértesítés|lapértesítések}}", + "echo-category-title-thank-you-edit": "Szerkesztési {{PLURAL:$1|mérföldkő|mérföldkövek}}", + "echo-category-title-watchlist": "Szerkesztés egy általam figyelt lapon", + "echo-category-title-minor-watchlist": "Apró szerkesztés egy általam figyelt lapon", "echo-pref-tooltip-edit-user-talk": "Értesítést kérek, ha valaki üzen vagy válaszol a vitalapomon.", "echo-pref-tooltip-article-linked": "Értesítést kérek, ha valaki hivatkozik egy általam írt szócikkre egy másik cikkben.", "echo-pref-tooltip-reverted": "Értesítést kérek, ha valaki visszaállítja egy szerkesztésemet a visszavonás vagy a visszaállítás eszközzel.", @@ -59,7 +64,9 @@ "echo-pref-tooltip-user-rights": "Értesítést kérek, ha valaki megváltoztatja a felhasználói jogaimat.", "echo-pref-tooltip-emailuser": "Értesítést kérek, ha valaki küld nekem egy e-mailt.", "echo-pref-tooltip-article-reminder": "Értesítést kérek erről a lapról, amikor kérdezek.", - "echo-error-no-formatter": "Nincs értesítési formátum definiálva", + "echo-pref-tooltip-thank-you-edit": "Értesítést kérek, ha elértem az első, tizedik, századik... szerkesztésemet.", + "echo-pref-tooltip-watchlist": "Értesítést kérek, amikor valaki (nem apró) szerkesztést végez egy figyelőlistámon szereplő lapon.", + "echo-pref-tooltip-minor-watchlist": "Értesítést kérek, amikor valaki apró szerkesztést végez egy figyelőlistámon szereplő lapon.", "notifications": "Értesítések", "tooltip-pt-notifications-alert": "Értesítéseid", "tooltip-pt-notifications-notice": "Értesítéseid", @@ -81,10 +88,7 @@ "echo-specialpage-pagefilters-title": "Friss tevékenység", "echo-specialpage-pagefilters-subtitle": "Lapok olvasatlan értesítésekkel", "notificationsmarkread-legend": "Értesítés megjelölése olvasottként", - "echo-anon": "Értesítések fogadásához [$1 hozz létre egy fiókot] vagy [$2 jelentkezz be].", "echo-none": "Nincsenek értesítéseid.", - "echo-more-info": "További információ", - "echo-feedback": "Visszajelzés", "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.", @@ -137,9 +141,10 @@ "notification-header-mention-success-bundle": "{{PLURAL:$3|Egy|$3}} {{GENDER:$2|említésed}} a(z) <strong>$4</strong> vitalapról elküldve.", "notification-compact-header-mention-success": "<strong>{{GENDER:$2|Megemlítetted}}:</strong> $3", "notification-header-mention-status-bundle": "{{PLURAL:$3|Egy|$3}} értesítés a(z) <strong>$4</strong> vitalapon lévő {{GENDER:$2|említéseidről}}: $5 nincs elküldve, $6 elküldve.", - "notification-header-user-rights-add-only": "{{GENDER:$1|Megváltoztak}} a {{GENDER:$4|jogosultságaid}}. Tagja lettél {{PLURAL:$3|ennek a csoportnak|ezeknek a csoportoknak}}: $2", - "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-only": "{{GENDER:$1|Megváltoztak}} a {{GENDER:$4|jogosultságaid}}. Tagja lettél {{PLURAL:$3|ennek a csoportnak|ezeknek a csoportoknak}}: $2.", + "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-user-rights-expiry-change": "Ideiglenes {{GENDER:$4|tagságod}} határideje a következő {{PLURAL:$3|csoportban|csoportokban}} {{GENDER:$1|megváltozott}}: $2.", "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", @@ -155,12 +160,11 @@ "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", - "notification-edit-talk-page-email-batch-body-with-section": "$1 üzenetet hagyott a vitalapodon a(z) „$2” szakaszban.", - "notification-page-linked-email-subject": "Hivatkoztak egy általad létrehozott oldalra a(z) {{SITENAME}} wikin", - "notification-reverted-email-subject2": "Visszavonták a {{PLURAL:$3|szerkesztésedet|szerkesztéseidet}} a(z) {{SITENAME}} wikin", - "notification-mention-email-subject": "$1 {{GENDER:$2|megemlített}} a(z) {{SITENAME}} wikin", - "notification-user-rights-email-subject": "Megváltoztak a jogosultságaid a(z) {{SITENAME}} wikin", + "notification-edit-talk-page-email-subject2": "$1 üzenetet {{GENDER:$2|hagyott}} {{GENDER:$3|neked}} a(z) {{SITENAME}} wikin", + "notification-page-linked-email-subject": "Hivatkoztak egy {{GENDER:$3|általad}} létrehozott oldalra a(z) {{SITENAME}} wikin", + "notification-reverted-email-subject2": "{{GENDER:$2|Visszavonták}} a {{GENDER:$3|{{PLURAL:$4|szerkesztésedet|szerkesztéseidet}}}} a(z) {{SITENAME}} wikin", + "notification-mention-email-subject": "$1 {{GENDER:$2$3|megemlített}} a(z) {{SITENAME}} wikin", + "notification-user-rights-email-subject": "Megváltoztak a {{GENDER:$3|jogosultságaid}} a(z) {{SITENAME}} wikin", "notification-timestamp-ago-seconds": "$1 mp", "notification-timestamp-ago-minutes": "$1 p", "notification-timestamp-ago-hours": "$1 ó", @@ -172,9 +176,7 @@ "notification-inbox-filter-read": "Olvasott", "notification-inbox-filter-unread": "Olvasatlan", "notification-inbox-filter-all": "Mind", - "echo-email-body-default": "Új értesítést kaptál a(z) {{SITENAME}} wikin:\n\n$1", - "echo-email-footer-default-html": "A <a href=\"$2\" style=\"text-decoration:none; color:#3868B0;\">beállításaidnál</a> módosíthatod, mikor küldjünk e-mailt.<br />\n$1", - "echo-email-footer-default": "$2\n\nA beállításaidnál módosíthatod, mikor küldjünk e-mailt:\n{{canonicalurl:{{#special:Preferences}}#mw-prefsection-echo}}\n\n$1", + "echo-specialmute-label-mute-notifications": "Értesítések némítása ettől a felhasználótól", "echo-email-plain-footer": "A {{GENDER:$1|beállításaidnál}} módosíthatod, mikor küldjünk e-mailt:", "echo-email-html-footer-preference-link-text": "{{GENDER:$1|beállításaidnál}}", "echo-email-html-footer-with-link": "A $1 {{GENDER:$2|módosíthatod}}, mikor küldjünk e-mailt.", @@ -184,13 +186,12 @@ "echo-notification-notice-text-only": "Értesítések", "echo-overlay-link": "Összes értesítés", "echo-overlay-title": "<b>Értesítéseim</b>", - "echo-overlay-title-overflow": "<b>Értesítéseim</b> ($2 olvasatlanból $1 mutatva)", "echo-mark-all-as-read": "Összes olvasottnak jelölése", "echo-mark-all-as-read-confirmation": "$1 értesítés olvasottnak jelölve", "echo-mark-wiki-as-read": "Minden elolvasva a kiválasztott wikin: $1", + "echo-displaysnippet-title": "Új értesítés", "echo-date-today": "Ma", "echo-date-yesterday": "Tegnap", - "echo-load-more-error": "Hiba történt a további eredmények lekérdezése során.", "notification-bundle-header-edit-user-talk-v2": "{{PLURAL:$1|Egy|$1|100=99+}} új üzenet a <strong>{{GENDER:$3|vitalapodon}}</strong>", "echo-email-batch-subject-daily": "Új {{PLURAL:$2|értesítést|értesítéseket}} kaptál a(z) {{SITENAME}} wikin", "echo-email-batch-subject-weekly": "A héten új {{PLURAL:$2|értesítést|értesítéseket}} kaptál a(z) {{SITENAME}} wikin", diff --git a/Echo/i18n/hy.json b/Echo/i18n/hy.json index 0a4df19e..d36ce804 100644 --- a/Echo/i18n/hy.json +++ b/Echo/i18n/hy.json @@ -1,20 +1,22 @@ { "@metadata": { "authors": [ - "Xelgen", - "Lilitik22", - "Դավիթ Սարոյան", + "23artashes", "Aram1985", + "GeoO", + "Kareyac", + "Lilitik22", + "Xelgen", "Աշոտ1997", - "23artashes" + "Դավիթ Սարոյան" ] }, "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": "Նամակի ձևաչափ․", @@ -27,7 +29,7 @@ "echo-pref-email-format-html": "ԷյչԹիԷմԷլ", "echo-pref-email-format-plain-text": "Պարզ տեքստ", "echo-pref-cross-wiki-notifications": "Ցուցադրել այլ վիքիների ծանուցումները", - "echo-pref-beta-feature-cross-wiki-message": "Բարելավված ծանուցումներ", + "echo-pref-notifications-blacklist": "Հետևյալ մասնակիցներից ծանուցումներ ցույց չտալ․\n([[mw:Special:MyLanguage/Help:Notifications#mute|իմանալ ավելին]])", "echo-learn-more": "Իմանալ ավելին", "echo-log": "Հանրամատչելի գրանցամատյան", "echo-new-messages": "Դուք նոր ուղերձներ ունեք", @@ -39,15 +41,16 @@ "echo-category-title-mention-success": "Հաջողված {{PLURAL:$1|հիշատակում|հիշատակումներ}}", "echo-category-title-other": "{{PLURAL:$1|Այլ}}", "echo-category-title-system": "{{PLURAL:$1|Համակարգ}}", + "echo-category-title-system-emailonly": "{{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-error-no-formatter": "Ծանուցումների համար ֆորմատավորման ձև որոշված չէ:", "notifications": "Ծանուցումներ", "tooltip-pt-notifications-alert": "Ձեր ծանուցումները", "tooltip-pt-notifications-notice": "{{GENDER:|Ձեր}} ծանուցումները", @@ -64,13 +67,11 @@ "echo-specialpage-markasread": "Ծանուցում. նշել որպես ընթերցված", "echo-specialpage-markasread-invalid-id": "Իրադարձության սխալ ID", "echo-specialpage-pagination-numnotifications": "$1 {{PLURAL:$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-api-failure": "Չի հաջողվել ստանալ ծանուցումները:", "echo-notification-placeholder": "Ծանուցումներ չկան", "echo-notification-placeholder-filters": "Այս չափորոշչին համապատասխան ծանուցում չկա", @@ -96,14 +97,14 @@ "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-ը {{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-ի քննարկման {{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>:", - "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-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-ի քննարկման {{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>:", + "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": "{{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-ից շատ էին։", @@ -120,7 +121,7 @@ "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-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|Ձեր}} խմբագրումը", @@ -128,10 +129,9 @@ "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}}-ում:", - "notification-edit-talk-page-email-batch-body-with-section": "$1-ը հաղորդագրություն է {{GENDER:$1|թողել}} ձեր մասնակցային էջի «$2» բաժնում:", + "notification-edit-talk-page-email-subject2": "$1-ը հաղորդագրություն է {{GENDER:$2|թողել}} {{SITENAME}}-ում:", "notification-page-linked-email-subject": "Ձեր ստեղծած էջը հղվում է դեպի {{SITENAME}} կայքը", - "notification-mention-email-subject": "$1 մասնակիցը հիշատակել է {{GENDER:$2|քեզ}} {{SITENAME}} էջում", + "notification-mention-email-subject": "$1 մասնակիցը հիշատակել է {{GENDER:$3|Ձեզ}} {{SITENAME}} էջում", "notification-timestamp-ago-seconds": "{{PLURAL:$1|$1 վ}}", "notification-timestamp-ago-minutes": "{{PLURAL:$1|$1 ր}}", "notification-timestamp-ago-hours": "{{PLURAL:$1|$1 ժ}}", @@ -143,13 +143,22 @@ "notification-inbox-filter-read": "Ընթերցված", "notification-inbox-filter-unread": "Չընթերցված", "notification-inbox-filter-all": "Բոլորը", - "echo-email-body-default": "Դուք ունեք նոր ծանուցումներ «{{SITENAME}}» կայքից:\n\n$1", - "echo-notification-alert-text-only": "Ծանուցումներ", + "echo-notification-alert-text-only": "Հաղորդագրություններ", "echo-notification-notice-text-only": "Ծանուցումներ", "echo-overlay-link": "Բոլոր ծանուցումները", "echo-overlay-title": "<b>Ծանուցումներ</b>", - "echo-mark-all-as-read": "Բոլոր նշել որպես ընթերցված", + "echo-mark-all-as-read": "Բոլորը նշել որպես ընթերցված", "echo-date-today": "Այսօր", "echo-date-yesterday": "Երեկ", - "echo-email-batch-link-text-view-all-notifications": "Դիտել բոլոր ծանուցումները" + "echo-email-batch-bullet": "•", + "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": "Դիտել բոլոր ծանուցումները", + "notification-header-foreign-alert": "Հաղորդագրություններ {{PLURAL:$5|այլ վիքիից|$5 տարբեր վիքիներից}}", + "notification-header-foreign-notice": "Ծանուցումներ {{PLURAL:$5|այլ վիքիից|$5 տարբեր վիքիներից}}", + "notification-header-foreign-all": "Ծանուցումներ {{PLURAL:$5|այլ վիքիից|$5 տարբեր վիքիներից}}", + "echo-foreign-wiki-lang": "$1 - $2", + "echo-badge-count": "{{PLURAL:$1|$1|100=99+}}" } diff --git a/Echo/i18n/hyw.json b/Echo/i18n/hyw.json index be4388c7..eee6abbb 100644 --- a/Echo/i18n/hyw.json +++ b/Echo/i18n/hyw.json @@ -1,8 +1,100 @@ { "@metadata": { "authors": [ - "Rajemian" + "Kareyac", + "Rajemian", + "Դավիթ Սարոյան" ] }, - "tooltip-pt-notifications-alert": "{{GENDER:|Ձեր}} զգուշացումները" + "prefs-echo": "Ծանուցումներ", + "prefs-emailsettings": "Ե-նամակի կարգաւորումներ", + "prefs-blocknotificationslist": "Անջատուած մասնակիցներ", + "echo-pref-send-me": "Ինծի ուղարկել․", + "echo-pref-send-to": "Ուղարկել․", + "echo-pref-email-format": "Ե-նամակի ձեւ․", + "echo-pref-web": "Ցանց", + "echo-pref-email": "Ելեկտրոնային նամակ", + "echo-pref-email-format-plain-text": "Պարզ բնաբան", + "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-system-noemail": "{{PLURAL:$1|Համակարգ}}", + "echo-category-title-system-emailonly": "{{PLURAL:$1|Համակարգ}}", + "echo-category-title-article-reminder": "{{PLURAL:$1|Յիշեցում|Յիշեցումներ}}", + "echo-category-title-thank-you-edit": "Խմբագրումներու {{PLURAL:$1|նուաճում|նուաճումներ}}", + "notifications": "Ծանուցումներ", + "tooltip-pt-notifications-alert": "{{GENDER:|Ձեր}} յայտարարութիւնները", + "tooltip-pt-notifications-notice": "{{GENDER:|Ձեր}} նշումները", + "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": "$2 $1", + "notificationsmarkread-legend": "Ծանուցումը ընթերցուած համարել", + "echo-none": "Դուք ծանուցումներ չունիք։", + "echo-notification-placeholder": "Ծանուցումներ չկան։", + "echo-notification-markasread": "Ընթերցուած համարել", + "echo-notification-markasunread": "Չընթերցուած համարել", + "echo-notification-markasread-tooltip": "Ընթերցուած համարել", + "echo-notification-more-options-tooltip": "Այլ ընտրանքներ", + "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|Ձեր}} քննարկման էջին $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> էջին։", + "notification-bundle-header-page-linked": "Յղումներ կատարուած են {{PLURAL:$5||$5 էջերէն|100=99+ էջերէն}} <strong>$1</strong> էջին։", + "notification-link-text-what-links-here": "Այս էջին կատարուած բոլոր յղումները", + "notification-header-welcome": "$1, {{GENDER:$2|բարի՜ եկաք}} {{SITENAME}}։ Ուրախ ենք {{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|Ձեր}} հազարերորդ խմբագրումը կատարեցիք, շնորհակալութիւն Ձեր արդիւնաւէտ ներդրումին համար։", + "notification-link-thank-you-edit": "{{GENDER:$1|Ձեր}} խմբագրումը", + "notification-link-text-view-edit": "Խմբագրումը կարդալ", + "notification-link-article-reminder": "Էջը ցոյց տալ", + "notification-body-reverted": "$1", + "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-notification-alert-text-only": "Յայտարարութիւններ", + "echo-notification-notice-text-only": "Նշումներ", + "echo-overlay-link": "Բոլոր ծանուցումները", + "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": "$2 $1" } diff --git a/Echo/i18n/ia.json b/Echo/i18n/ia.json index a2b1df63..c3b2ec48 100644 --- a/Echo/i18n/ia.json +++ b/Echo/i18n/ia.json @@ -1,15 +1,20 @@ { "@metadata": { "authors": [ - "McDutchie", - "Julian Mendez" + "Julian Mendez", + "McDutchie" ] }, "echo-desc": "Systema pro notificar usatores super eventos e messages", "prefs-echo": "Notificationes", "prefs-emailsettings": "Optiones de e-mail", - "prefs-displaynotifications": "Optiones de presentation", "prefs-echosubscriptions": "Notificar me de iste eventos", + "prefs-echocrosswiki": "Notificationes inter wikis", + "prefs-blocknotificationslist": "Usatores silentiate", + "prefs-echopollupdates": "Notificationes in directo", + "echo-mobile-notifications-filter-title": "Filtrar notificationes", + "echo-pref-show-poll-updates": "Monstrar nove notificationes al momento que illos arriva", + "echo-pref-show-poll-updates-help": "Monstrar le numero de notificationes non legite in le barra de titulo, e monstrar immediatemente un fragmento de cata notification quando illo arriva.", "echo-pref-send-me": "Inviar me:", "echo-pref-send-to": "Inviar a:", "echo-pref-email-format": "Formato de e-mail:", @@ -21,56 +26,171 @@ "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-cross-wiki-notifications": "Monstrar notificationes de altere wikis", + "echo-pref-notifications-blacklist": "Non monstrar notificationes ab iste usatores. ([[mw:Special:MyLanguage/Help:Notifications#mute|leger plus]])", "echo-learn-more": "Leger plus", + "echo-log": "Registro public", "echo-new-messages": "Tu ha nove messages", "echo-category-title-edit-user-talk": "{{PLURAL:$1|Message|Messages}} del pagina de discussion", "echo-category-title-article-linked": "{{PLURAL:$1|Ligamine|Ligamines}} a un pagina", "echo-category-title-reverted": "{{PLURAL:$1|Modification|Modificationes}} revertite", "echo-category-title-mention": "{{PLURAL:$1|Mention|Mentiones}}", + "echo-category-title-mention-failure": "{{PLURAL:$1|Mention|Mentiones}} fallite", + "echo-category-title-mention-success": "{{PLURAL:$1|Mention|Mentiones}} succedite", "echo-category-title-other": "{{PLURAL:$1|Altere|Alteres}}", - "echo-category-title-system": "{{PLURAL:$1|Systema|Systemas}}", + "echo-category-title-system": "{{PLURAL:$1|Systema}}", + "echo-category-title-system-noemail": "{{PLURAL:$1|Systema}}", + "echo-category-title-system-emailonly": "{{PLURAL:$1|Systema}}", + "echo-category-title-user-rights": "Cambio{{PLURAL:$1||s}} de derectos de usator", + "echo-category-title-emailuser": "Message{{PLURAL:$1||s}} de e-mail ab {{PLURAL:$1|un altere usator|altere usatores}}", + "echo-category-title-article-reminder": "Rememoration{{PLURAL:$1||es}} de pagina", + "echo-category-title-thank-you-edit": "Petra{{PLURAL:$1||s}} milliari de modification", "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 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-mention-failure": "Notificar me quando io non ha potite inviar un mention a un persona.", + "echo-pref-tooltip-mention-success": "Notificar me quando io invia un mention a un persona.", + "echo-pref-tooltip-user-rights": "Notificar me quando alcuno modifica mi derectos de usator.", + "echo-pref-tooltip-emailuser": "Notificar me quando alcuno invia me un message de e-mail.", "echo-pref-tooltip-article-reminder": "Notificar me sur iste pagina quando io lo demanda.", - "echo-error-no-formatter": "Nulle formato definite pro notification", + "echo-pref-tooltip-thank-you-edit": "Notificar me quando io attinge mi 1me, 10me, 100me... modification.", "notifications": "Notificationes", "tooltip-pt-notifications-alert": "Tu alertas", + "tooltip-pt-notifications-notice": "{{GENDER:|Tu}} avisos", + "echo-displaynotificationsconfiguration": "Monstrar le configuration de notificationes", + "echo-displaynotificationsconfiguration-summary": "Ecce un summario del configuration de notificationes sur iste wiki.", + "echo-displaynotificationsconfiguration-notifications-by-category-header": "Notificationes per categoria", + "echo-displaynotificationsconfiguration-sorting-by-section-header": "Ordinamento de typos", + "echo-displaynotificationsconfiguration-sorting-by-section-legend": "Le section in le qual cata typo de notification se classifica", + "echo-displaynotificationsconfiguration-available-notification-methods-header": "Methodos de notification permittite", + "echo-displaynotificationsconfiguration-available-notification-methods-by-category-legend": "Le methodos de notification supportate pro cata categoria", + "echo-displaynotificationsconfiguration-enabled-default-header": "Activate per predefinition", + "echo-displaynotificationsconfiguration-enabled-default-existing-users-legend": "Usatores existente", + "echo-displaynotificationsconfiguration-enabled-default-new-users-legend": "Nove usatores", + "echo-displaynotificationsconfiguration-mandatory-notification-methods-header": "Methodos de notification obligatori", + "echo-displaynotificationsconfiguration-mandatory-notification-methods-by-category-legend": "Le methodos de notification obligatori pro cata categoria", "echo-specialpage": "Notificationes", + "echo-specialpage-section-markread": "Marcar gruppo como legite", + "echo-specialpage-markasread": "Notification: Marcar como legite", + "echo-specialpage-markasread-invalid-id": "ID de evento non valide", + "echo-specialpage-pagefilterwidget-aria-label": "Filtrar per wiki e titulo de pagina", "echo-specialpage-pagination-numnotifications": "$1 {{PLURAL:$1|notification|notificationes}}", - "echo-anon": "Pro reciper notificationes, [$1 crea un conto] o [$2 aperi session].", + "echo-specialpage-pagefilters-title": "Activitate recente", + "echo-specialpage-pagefilters-subtitle": "Paginas con notificationes non legite", + "notificationsmarkread-legend": "Marcar notification como legite", "echo-none": "Tu non ha notificationes.", - "echo-more-info": "Plus info", - "echo-feedback": "Commentario", + "echo-api-failure": "Impossibile obtener notificationes.", + "echo-api-failure-cross-wiki": "Le accesso al dominio remote ha essite refusate.", + "echo-notification-placeholder": "Il non ha notificationes.", "echo-notification-placeholder-filters": "Il non ha notificationes correspondente a iste criterios.", + "echo-notification-loginrequired": "Tu debe aperir session pro vider tu notificationes.", + "echo-notification-popup-loginrequired": "Per favor aperi session pro vider tu notificationes.", + "echo-notification-markasread": "Marcar como legite", "echo-notification-markasunread": "Marcar como non legite", + "echo-notification-markasread-tooltip": "Marcar como legite", + "echo-notification-more-options-tooltip": "Plus optiones", + "notification-dynamic-actions-unwatch": "{{GENDER:$3|Cessar}} de observar le nove activitate sur \"$1\"", + "notification-dynamic-actions-unwatch-confirmation": "{{GENDER:$3|Tu}} non plus observa le pagina \"$1\"", + "notification-dynamic-actions-unwatch-confirmation-description": "{{GENDER:$3|Tu}} pote observar [$2 iste pagina] a qualcunque momento.", + "notification-dynamic-actions-watch": "{{GENDER:$3|Sequer}} le nove activitate sur \"$1\"", + "notification-dynamic-actions-watch-confirmation": "{{GENDER:$3|Tu}} observa ora le pagina \"$1\"", + "notification-dynamic-actions-watch-confirmation-description": "{{GENDER:$3|Tu}} pote cessar de observar [$2 iste pagina] a qualcunque momento.", + "notification-link-text-expand-all": "Displicar", + "notification-link-text-expand-alert-count": "Vider {{PLURAL:$1|$1 alerta|$1 alertas}}", + "notification-link-text-expand-notice-count": "Vider {{PLURAL:$1|$1 aviso|$1 avisos}}", + "notification-link-text-expand-all-count": "Vider {{PLURAL:$1|$1 notification|$1 notificationes}}", + "notification-link-text-collapse-all": "Plicar", "notification-link-text-view-message": "Vider message", "notification-link-text-view-mention": "Vider mention", + "notification-link-text-view-mention-failure": "Vider {{PLURAL:$1|mention|mentiones}}", "notification-link-text-view-changes": "{{GENDER:$1|Vider}} modificationes", "notification-link-text-view-page": "Vider pagina", + "notification-header-edit-user-talk": "$1 {{GENDER:$2|ha lassate}} un message osurn <strong>{{GENDER:$3|tu}} pagina de discussion</strong>.", + "notification-header-edit-user-talk-with-section": "$1 {{GENDER:$2|ha lassate}} un message sur <strong>{{GENDER:$3|tu}} pagina de discussion</strong> in le section \"<strong>$4</strong>\".", + "notification-compact-header-edit-user-talk": "$1 {{GENDER:$3|te}} {{GENDER:$2|ha lassate}} un message.", + "notification-compact-header-edit-user-talk-with-section": "$1 {{GENDER:$3|te}} {{GENDER:$2|ha lassate}} un message in le section \"<strong>$4</strong>\".", + "notification-header-page-linked": "Un ligamine ha essite create desde <strong>$4</strong> verso <strong>$3</strong>.", + "notification-compact-header-page-linked": "Ligate desde <strong>$1</strong>.", + "notification-bundle-header-page-linked": "Ligamines ha essite create desde {{PLURAL:$5||$5 paginas|100=plus de 99 paginas}} verso <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-what-links-here": "Tote le ligamines a iste pagina", + "notification-header-mention-other": "$1 {{GENDER:$3|te}} {{GENDER:$2|ha mentionate}} sur <strong>$4</strong> in le section \"<strong>$5</strong>\".", + "notification-header-mention-other-nosection": "$1 {{GENDER:$3|te}} {{GENDER:$2|ha mentionate}} sur <strong>$4</strong>.", + "notification-header-mention-user-talkpage-v2": "$1 {{GENDER:$3|te}} {{GENDER:$2|ha mentionate}} sur le <strong>pagina de discussion {{GENDER:$5|de}} $4</strong> in le section \"<strong>$6</strong>\".", + "notification-header-mention-user-talkpage-nosection": "$1 {{GENDER:$3|te}} {{GENDER:$2|ha mentionate}} sur le <strong>pagina de discussion {{GENDER:$5|de}} $4</strong>.", + "notification-header-mention-agent-talkpage": "$1 {{GENDER:$3|te}} {{GENDER:$2|ha mentionate}} sur <strong>{{GENDER:$2|su}} pagina de discussion</strong> in le section \"<strong>$4</strong>\".", + "notification-header-mention-agent-talkpage-nosection": "$1 {{GENDER:$3|te}} {{GENDER:$2|ha mentionate}} sur <strong>{{GENDER:$2|su}} pagina de discussion</strong>.", + "notification-header-mention-article-talkpage": "$1 {{GENDER:$3|te}} {{GENDER:$2|ha mentionate}} sur le pagina de discussion del articulo <strong>$4</strong> in le section \"<strong>$5</strong>\".", + "notification-header-mention-article-talkpage-nosection": "$1 {{GENDER:$3|te}} {{GENDER:$2|ha mentionate}} sur le pagina de discussion del articulo <strong>$4</strong>.", + "notification-header-mention-failure-user-unknown": "{{GENDER:$2|Tu}} mention de <strong>$3</strong> non ha essite inviate perque le usator non ha essite trovate.", + "notification-header-mention-failure-user-anonymous": "{{GENDER:$2|Tu}} mention de <strong>$3</strong> non ha essite inviate perque le usator es anonyme.", + "notification-header-mention-failure-too-many": "{{GENDER:$2|Tu}} ha tentate de mentionar plus de $3 usator{{PLURAL:$3||es}}. Tote le mentiones que excede iste limite non ha essite inviate.", + "notification-header-mention-failure-bundle": "{{PLURAL:$3|Un mention|$3 mentiones}} que {{GENDER:$2|tu ha facite}} sur le pagina de discussion del articulo <strong>$4</strong> non {{PLURAL:$3|pote}} esser inviate.", + "notification-compact-header-mention-failure-user-unknown": "<strong>Nomine de usator non existe:</strong> $1", + "notification-compact-header-mention-failure-user-anonymous": "<strong>Adresses IP non es mentionabile:</strong> $1", + "notification-header-mention-success": "{{GENDER:$2|Tu}} mention de <strong>$3</strong> ha essite inviate.", + "notification-header-mention-success-bundle": "{{PLURAL:$3|Un mention|$3 mentiones}} que {{GENDER:$2|tu ha facite}} sur le pagina de discussion del articulo <strong>$4</strong> {{PLURAL:$3|ha essite}} inviate.", + "notification-compact-header-mention-success": "<strong>{{GENDER:$2|Tu ha mentionate}}:</strong> $3", + "notification-header-mention-status-bundle": "{{PLURAL:$3|Un notification|$3 notificationes}} sur mentiones que {{GENDER:$2|tu ha facite}} sur le pagina de discussion del articulo <strong>$4</strong>: {{PLURAL:$5|$5 non inviate}}, {{PLURAL:$6|$6 inviate}}.", + "notification-header-user-rights-add-only": "{{GENDER:$4|Tu}} derectos de usator ha {{GENDER:$1|cambiate}}. Tu ha essite addite a: $2.", + "notification-header-user-rights-remove-only": "{{GENDER:$4|Tu}} derectos de usator ha {{GENDER:$1|cambiate}}. Tu non plus es membro de: $2.", + "notification-header-user-rights-add-and-remove": "{{GENDER:$6|Tu}} derectos de usator ha {{GENDER:$1|cambiate}}. Tu ha essite addite a: $2. Tu non plus es membro de: $4.", + "notification-header-user-rights-expiry-change": "Le expiration de {{GENDER:$4|tu}} appertinentia al sequente {{PLURAL:$3|gruppo|gruppos}} ha {{GENDER:$1|cambiate}}: $2.", + "notification-header-welcome": "{{GENDER:$2|Benvenite}} a {{SITENAME}}, $1! Nos es felice que {{GENDER:$2|tu es}} hic.", + "notification-header-mention-summary": "$1 {{GENDER:$3|te}} {{GENDER:$2|ha mentionate}} in un summario de modification sur <strong>$4</strong>.", + "notification-welcome-linktext": "Benvenite", + "notification-header-thank-you-1-edit": "{{GENDER:$2|Tu}} ha justo ora facite tu prime modification; gratias, e benvenite!", + "notification-header-thank-you-10-edit": "{{GENDER:$2|Tu}} ha justo ora facite tu decime modification; gratias, e per favor continua!", + "notification-header-thank-you-100-edit": "{{GENDER:$2|Tu}} ha justo ora facite tu centesime modification; multe gratias!", + "notification-header-thank-you-1000-edit": "Tu ha justo ora facite tu millesime modification; gratias pro esser un grande {{GENDER:$2|contributor|contributrice}}!", + "notification-header-thank-you-10000-edit": "{{GENDER:$2|Tu}} ha justo ora facite tu dece-millesime modification; multissime gratias!", + "notification-header-thank-you-100000-edit": "{{GENDER:$2|Tu}} ha justo ora facite tu cento-millesime modification; gratias a te pro un contribution incredibile!", + "notification-header-thank-you-1000000-edit": "{{GENDER:$2|Tu}} ha justo ora facite tu millionesime modification; gratias pro un contribution phenomenal!", + "notification-link-thank-you-edit": "{{GENDER:$1|Tu}} modification", "notification-link-text-view-edit": "Vider modification", "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\".", - "notification-page-linked-email-subject": "Un pagina create per te ha essite ligate in {{SITENAME}}", - "notification-reverted-email-subject2": "Tu {{PLURAL:$3|modification|modificationes}} ha essite {{GENDER:$1|revertite}} in {{SITENAME}}", - "notification-mention-email-subject": "$1 {{GENDER:$2|te}} {{GENDER:$1|ha mentionate}} in {{SITENAME}}", - "notification-user-rights-email-subject": "Tu derectos de usator ha cambiate in {{SITENAME}}", - "echo-email-body-default": "Tu ha un nove notification in {{SITENAME}}:\n\n$1", - "echo-email-footer-default": "$2\n\nPro seliger le e-mails que nos te invia, controla tu preferentias:\n{{canonicalurl:{{#special:Preferences}}#mw-prefsection-echo}}\n\n$1", + "notification-header-emailuser": "$1 te {{GENDER:$2|ha inviate}} un message de e-mail.", + "notification-edit-talk-page-email-subject2": "$1 {{GENDER:$3|te}} {{GENDER:$2|ha lassate}} un message in {{SITENAME}}", + "notification-page-linked-email-subject": "Un pagina create per {{GENDER:$3|te}} ha essite ligate in {{SITENAME}}", + "notification-reverted-email-subject2": "Tu {{PLURAL:$4|modification|modificationes}} ha essite {{GENDER:$2|revertite}} in {{SITENAME}}", + "notification-mention-email-subject": "$1 {{GENDER:$3|te}} {{GENDER:$2|ha mentionate}} in {{SITENAME}}", + "notification-user-rights-email-subject": "{{GENDER:$3|Tu}} derectos de usator ha cambiate in {{SITENAME}}", + "notification-timestamp-ago-seconds": "{{PLURAL:$1|$1 sec}}", + "notification-timestamp-ago-minutes": "{{PLURAL:$1|$1 min}}", + "notification-timestamp-ago-hours": "{{PLURAL:$1|$1 hr}}", + "notification-timestamp-ago-days": "{{PLURAL:$1|$1 di}}", + "notification-timestamp-ago-months": "{{PLURAL:$1|$1 mns}}", + "notification-timestamp-ago-years": "{{PLURAL:$1|$1 an}}", + "notification-timestamp-today": "Hodie", + "notification-timestamp-yesterday": "Heri", + "notification-inbox-filter-read": "Legite", + "notification-inbox-filter-unread": "Non legite", + "notification-inbox-filter-all": "Totes", + "echo-specialmute-label-mute-notifications": "Silentiar le notificationes de iste usator", + "echo-email-plain-footer": "Pro eliger qual messages nos {{GENDER:$1|te}} invia, revide {{GENDER:$1|tu}} preferentias:", + "echo-email-html-footer-preference-link-text": "revide {{GENDER:$1|tu}} preferentias", + "echo-email-html-footer-with-link": "Pro eliger qual messages nos {{GENDER:$2|te}} invia, $1.", + "echo-notification-alert": "{{PLURAL:$1|Alerta ($1)|Alertas ($1)|100=Alertas (99+)}}", + "echo-notification-notice": "{{PLURAL:$1|Aviso ($1)|Avisos ($1)|100=Avisos (99+)}}", + "echo-notification-alert-text-only": "Alertas", + "echo-notification-notice-text-only": "Avisos", "echo-overlay-link": "Tote le notificationes", "echo-overlay-title": "<b>Notificationes</b>", - "echo-overlay-title-overflow": "<b>{{PLURAL:$1|Notificationes}}</b> ($1 monstrate de $2 non legite)", "echo-mark-all-as-read": "Marcar toto como legite", + "echo-mark-all-as-read-confirmation": "$1 notification{{PLURAL:$1||es}} marcate como legite", + "echo-mark-wiki-as-read": "Marcar toto como legite in le wiki seligite: $1", + "echo-displaysnippet-title": "Nove notification", "echo-date-today": "Hodie", "echo-date-yesterday": "Heri", - "echo-load-more-error": "Un error ha occurrite durante le obtention de altere resultatos.", + "notification-bundle-header-edit-user-talk-v2": "{{PLURAL:$1|Un nove message|$1 nove messages|100=99+ nove messages}} sur <strong>{{GENDER:$3|tu}} pagina de discussion</strong>.", "echo-email-batch-subject-daily": "Tu ha {{PLURAL:$2|un nove notification|nove notificationes}} in {{SITENAME}}", "echo-email-batch-subject-weekly": "Tu ha {{PLURAL:$2|un nove notification|nove notificationes}} in {{SITENAME}} iste septimana", "echo-email-batch-body-intro-daily": "Salute $1,\nEcce un summario del activitate de hodie in {{SITENAME}} pro te.", "echo-email-batch-body-intro-weekly": "Salute $1,\nEcce un summario del activitate de iste septimana in {{SITENAME}} pro te.", - "echo-email-batch-link-text-view-all-notifications": "Vider tote le notificationes" + "echo-email-batch-link-text-view-all-notifications": "Vider tote le notificationes", + "notification-header-foreign-alert": "Plus alertas ab {{PLURAL:$5|un altere wiki|$5 altere wikis}}", + "notification-header-foreign-notice": "Plus avisos ab {{PLURAL:$5|un altere wiki|$5 altere wikis}}", + "notification-header-foreign-all": "Plus notificationes ab {{PLURAL:$5|un altere wiki|$5 altere wikis}}" } diff --git a/Echo/i18n/id.json b/Echo/i18n/id.json index 6153d708..4f91fc28 100644 --- a/Echo/i18n/id.json +++ b/Echo/i18n/id.json @@ -2,25 +2,26 @@ "@metadata": { "authors": [ "Amire80", - "Farras", - "William Surya Permana", - "පසිඳු කාවින්ද", "Bennylin", - "WongKentir", + "Farras", + "Gombang", + "Iwan Novirion", + "Kenrick95", "Mbrt", "Rachmat.Wahidi", - "Kenrick95", - "Gombang", - "Rachmat04" + "Rachmat04", + "William Surya Permana", + "WongKentir", + "පසිඳු කාවින්ද" ] }, "echo-desc": "Sistem pemberitahuan ke pengguna tentang pesan dan peristiwa", "prefs-echo": "Pemberitahuan", "prefs-emailsettings": "Opsi surel", - "prefs-displaynotifications": "Opsi tampilan", "prefs-echosubscriptions": "Beritahu saya mengenai peristiwa berikut", "prefs-echocrosswiki": "Pemberitahuan antar-wiki", "prefs-blocknotificationslist": "Pengguna yang dibisukan.", + "echo-pref-show-poll-updates": "Tampilkan pemberitahuan baru begitu sampai", "echo-pref-send-me": "Kirimi saya:", "echo-pref-send-to": "Kirimkan ke:", "echo-pref-email-format": "Format surel:", @@ -33,23 +34,23 @@ "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-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-pref-notifications-blacklist": "Jangan tampilkan pemberitahuan dari pengguna ini. \n([[mw:Special:MyLanguage/Help:Notifications#mute|pelajari lebih lanjut]])", "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-reverted": "{{PLURAL:$1|Pengembalian}} 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-system-noemail": "{{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-category-title-thank-you-edit": "{{PLURAL:$1|sejarah}} suntingan", "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.", @@ -59,18 +60,16 @@ "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)", + "notifications": "Pemberitahuan", "tooltip-pt-notifications-alert": "Pemberitahuan {{GENDER:|Anda}}", "tooltip-pt-notifications-notice": "Pemberitahuan {{GENDER:|Anda}}", - "echo-displaynotificationsconfiguration": "Perlihatkan konfigurasi Pemberitahuan", + "echo-displaynotificationsconfiguration": "Konfigurasi tampilan 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", @@ -84,11 +83,7 @@ "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.", @@ -160,12 +155,11 @@ "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}} {{GENDER:$2|Anda}} di {{SITENAME}}", - "notification-user-rights-email-subject": "Hak pengguna Anda telah diubah di {{SITENAME}}", + "notification-edit-talk-page-email-subject2": "$1 {{GENDER:$2|meninggalkan}} {{GENDER:$3|Anda}} sebuah pesan di {{SITENAME}}", + "notification-page-linked-email-subject": "Pranala ke halaman yang {{GENDER:$3|Anda}} buat ditambahkan di {{SITENAME}}", + "notification-reverted-email-subject2": "{{PLURAL:$4|Suntingan}} {{GENDER:$3|Anda}} telah {{GENDER:$2|dibalikkan}} di {{SITENAME}}", + "notification-mention-email-subject": "$1 {{GENDER:$2|menyebut}} {{GENDER:$3|Anda}} di {{SITENAME}}", + "notification-user-rights-email-subject": "Hak pengguna {{GENDER:$3|Anda}} telah diubah di {{SITENAME}}", "notification-timestamp-ago-seconds": "{{PLURAL:$1|$1d}}", "notification-timestamp-ago-minutes": "{{PLURAL:$1|$1m}}", "notification-timestamp-ago-hours": "{{PLURAL:$1|$1j}}", @@ -177,9 +171,7 @@ "notification-inbox-filter-read": "Sudah dibaca", "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-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-specialmute-label-mute-notifications": "Bisukan pemberitahuan dari pengguna ini", "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.", @@ -189,13 +181,12 @@ "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-displaysnippet-title": "Pemberitahuan baru", "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", diff --git a/Echo/i18n/ilo.json b/Echo/i18n/ilo.json index 37ab3973..37185533 100644 --- a/Echo/i18n/ilo.json +++ b/Echo/i18n/ilo.json @@ -7,7 +7,6 @@ "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", "echo-pref-send-me": "Patulodannak:", "echo-pref-send-to": "Ipatulod kenni:", @@ -34,35 +33,26 @@ "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 kadagiti karbengak.", - "echo-error-no-formatter": "Awan ti naipalawag a panagporma para iti pakaammo.", "notifications": "Dagiti pakaammo", "tooltip-pt-notifications-alert": "{{GENDER:|Dagiti}} pakaammom", "echo-specialpage": "Dagiti pakaammo", - "echo-anon": "Tapno makaawat kadagiti pakaammo, [$1 agpartuat ti pakabilangan] wenno [$2 sumrek].", "echo-none": "Awan dagiti pakaammom.", - "echo-more-info": "Adu pay a pakaammo", - "echo-feedback": "Feedback", "notification-link-text-view-message": "Kitaen ti mensahe", "notification-link-text-view-mention": "Kitaen ti naibaga", "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": "{{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-edit-talk-page-email-subject2": "Ni $1 ket {{GENDER:$2|nangibati}} kenka ti mensahe 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 ket {{GENDER:$1|inbaganaka}} idiay {{SITENAME}}", + "notification-reverted-email-subject2": "{{PLURAL:$4|Ti inurnosmo ket|Dagiti inurnosmo ket}} {{GENDER:$2|naisubli}} idiay {{SITENAME}}", + "notification-mention-email-subject": "Ni $1 ket {{GENDER:$2|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", "echo-overlay-link": "Dagiti amin a pakaaammo", "echo-overlay-title": "<b>Dagiti pakaammo</b>", - "echo-overlay-title-overflow": "<b>{{PLURAL:$1|Dagiti pakaammo}}</b> (agipakpakita ti $1 iti $2 a saan pay a nabasa)", "echo-mark-all-as-read": "Markaan amin a kas nabasa", "echo-date-today": "Ita nga aldaw", "echo-date-yesterday": "Idi kalman", - "echo-load-more-error": "Adda biddut a rimsua bayat nga agal-ala kadagiti ad-adu a resulta.", "echo-email-batch-subject-daily": "Addaanka {{PLURAL:$2|ti baro a pakaammo|kadagiti baro a pakaammo}} idiay {{SITENAME}}", "echo-email-batch-subject-weekly": "Addaanka {{PLURAL:$2|ti baro a pakaammo|kadagiti baro a pakaammo}} idiay {{SITENAME}} ita a lawas", "echo-email-batch-body-intro-daily": "Kumusta $1,\nAdda ditoy ti pakapukpukan ti aktibidad ita nga aldaw idiay {{SITENAME}} para kenka.", diff --git a/Echo/i18n/inh.json b/Echo/i18n/inh.json index e49211b6..047075de 100644 --- a/Echo/i18n/inh.json +++ b/Echo/i18n/inh.json @@ -9,7 +9,7 @@ "prefs-emailsettings": "Электронни пошта оттамаш", "prefs-echosubscriptions": "Акхарех лаьца хоамбар", "prefs-echocrosswiki": "Массехк вики-проекташкара хоамбар («кросс-вики»)", - "prefs-blocknotificationslist": "ДIабоабаь доакъашхой («Iаьржа хьаязъяьр»)", + "prefs-blocknotificationslist": "Теркал ца бу доакъашхой («Iаьржа мугIам»)", "echo-pref-send-me": "Ахийта сога:", "echo-pref-send-to": "Ахийта укх цIайна тIа:", "echo-pref-email-format": "Хоамбара формат:", @@ -21,5 +21,7 @@ "echo-pref-cross-wiki-notifications": "Хьахьувкха кхыйолча викешкара хоамбар", "echo-pref-notifications-blacklist": "Ма гойта хоамаш укх доакъашхошкара ([[mw:Special:MyLanguage/Help:Notifications#mute|дукхагIа хá]])", "notifications": "Хоамбар", - "tooltip-pt-notifications-alert": "{{GENDER:|Хьога}} дéна дӀахайтар" + "tooltip-pt-notifications-alert": "{{GENDER:|Хьога}} дéна дӀахайтар", + "echo-specialmute-label-mute-notifications": "Хьа ма гойта укх доакъашхочунгара хоамаш", + "echo-notification-alert-text-only": "Хабар дáр" } diff --git a/Echo/i18n/io.json b/Echo/i18n/io.json index 93567ad6..e294c96f 100644 --- a/Echo/i18n/io.json +++ b/Echo/i18n/io.json @@ -7,15 +7,29 @@ }, "prefs-echo": "Avizi", "prefs-emailsettings": "Selekti pri e-posto (e-mail)", + "prefs-echosubscriptions": "Informez me pri ca eventi", "prefs-echocrosswiki": "Avizi de altra Wiki", + "prefs-blocknotificationslist": "Uzeri tacigata", + "echo-pref-send-me": "Sendez me:", + "echo-pref-email-format": "Formato di e-posto:", "echo-pref-web": "Per reto", "echo-pref-email": "Per e-posto", + "echo-pref-push": "Push (nur ''app''-i)", + "echo-pref-email-frequency-never": "Sendez nula avizo a me per e-posto", + "echo-pref-email-frequency-immediately": "Individual avizi kande li arivos", "echo-pref-email-frequency-daily": "Diala rezumo pri avizi", "echo-pref-email-frequency-weekly": "Semanala rezumo pri avizi", + "echo-pref-email-format-plain-text": "Nur texto sen formato", "echo-pref-cross-wiki-notifications": "Montrez notifiki de altra Wiki", - "echo-pref-beta-feature-cross-wiki-message": "Plubonigita avizi", + "echo-pref-notifications-blacklist": "Ne montrez avizi pri ca uzeri. ([[mw:Special:MyLanguage/Help:Notifications#mute|lernez pluse]])", + "echo-learn-more": "Lernez pluse", "echo-new-messages": "Vu havas nova mesaji", "echo-category-title-edit-user-talk": "{{PLURAL:$1|Mesajo|Mesaji}} en la diskuto-pagino", + "echo-category-title-article-linked": "{{PLURAL:$1|Ligilo|Ligili}} di la pagino", + "echo-category-title-mention": "{{PLURAL:$1|Menciono|Mencioni}}", + "echo-category-title-mention-success": "{{PLURAL:$1|Menciono|Mencioni}} sucesoza", + "echo-category-title-emailuser": "{{PLURAL:$1|E-posto de altra uzero|E-posti de altra uzeri}}", + "echo-category-title-article-reminder": "{{PLURAL:$1|Memorohelpilo|Memorohelpili}} di la pagino", "notifications": "Avizi", "tooltip-pt-notifications-alert": "{{GENDER:|Vua}} informi", "tooltip-pt-notifications-notice": "{{GENDER:|Vua}} informi", @@ -28,12 +42,20 @@ "echo-notification-placeholder-filters": "Ne existas avizi segun ica kriterii.", "echo-notification-markasread": "Indikez \"lektita\"", "echo-notification-markasunread": "Indikez quale \"ne lektita\"", + "echo-notification-more-options-tooltip": "Plusa selekti", "notification-link-text-expand-alert-count": "Vidar {{PLURAL:$1|$1 avizo|$1 avizi}}", + "notification-link-text-collapse-all": "Celez", "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-bundle-header-page-linked": "Ligili kreesis de {{PLURAL:$5||$5 pagini|100=plu kam 99 pagini}} a <strong>$3</strong>.", + "notification-link-text-what-links-here": "Omna ligili a ca pagino", + "notification-header-mention-agent-talkpage": "$1 {{GENDER:$2|mencionis}} {{GENDER:$3|vu}} che <strong>{{GENDER:$2|ilua|elua|lia}} diskuto-pagino</strong> en \"<strong>$4</strong>\".", "notification-header-mention-success": "{{GENDER:$2|Vua}} menciono pri <strong>$3</strong> sendesis.", + "notification-header-user-rights-add-only": "{{GENDER:$4|Vua}} uzero-yuri {{GENDER:$1|modifikesis}}. Vu nun esas $2.", + "notification-header-user-rights-remove-only": "{{GENDER:$4|Vua}} uzero-yuri {{GENDER:$1|modifikesis}}. Vu ne pluse esas membro de: $2.", + "notification-header-user-rights-add-and-remove": "{{GENDER:$6|Vua}} uzero-yuri {{GENDER:$1|modifikesis}}. Vu nun esas $2. Vu ne pluse esas membro de $4.", "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!", @@ -45,20 +67,23 @@ "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-edit-talk-page-email-subject2": "$1 {{GENDER:$2|skriptis}} mesajo a vu en {{SITENAME}}", + "notification-reverted-email-subject2": "Vua {{PLURAL:$4|redakto|redakti}} {{GENDER:$2|desfacesis}} en {{SITENAME}}", + "notification-mention-email-subject": "$1 {{GENDER:$2|mencionis}} {{GENDER:$3|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-timestamp-today": "Hodie", "notification-inbox-filter-all": "Omna", "echo-notification-alert": "{{PLURAL:$1|($1) avizo|($1) avizi|100=(99+) avizi}}", + "echo-notification-notice": "{{PLURAL:$1|($1) avizo|($1) avizi|100= Avizi (99+)}}", "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\"", + "echo-date-today": "Hodie", + "notification-bundle-header-edit-user-talk-v2": "Existas {{PLURAL:$1|1 nova mesajo|$1 nova mesaji|100=plu kam 99 nova mesaji}} en <strong>{{GENDER:$3|vua}} diskuto-pagino</strong>.", "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 01d307d7..9978e58c 100644 --- a/Echo/i18n/is.json +++ b/Echo/i18n/is.json @@ -1,18 +1,17 @@ { "@metadata": { "authors": [ + "Hjalmtyr", + "Macofe", "Snævar", - "පසිඳු කාවින්ද", "Sveinki", - "Macofe", - "Hjalmtyr", - "Sveinn í Felli" + "Sveinn í Felli", + "පසිඳු කාවින්ද" ] }, "echo-desc": "Kerfi til að tilkynna notendum um viðburði og skilaboð", "prefs-echo": "Tilkynningar", "prefs-emailsettings": "Tölvupósts stillingar", - "prefs-displaynotifications": "Útlits möguleikar", "prefs-echosubscriptions": "Gefðu mér tilkynningar fyrir eftirfarandi viðburði", "echo-pref-send-me": "Sentu mér:", "echo-pref-send-to": "Senda til:", @@ -42,7 +41,6 @@ "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": "Tilkynningar til {{GENDER:|þín}}", "tooltip-pt-notifications-notice": "Athugasemdir {{GENDER:|þínar}}", @@ -51,11 +49,7 @@ "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ð", @@ -85,11 +79,10 @@ "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-edit-talk-page-email-subject2": "$1 {{GENDER:$2|skildi}} eftir skilaboð handa þér á {{SITENAME}}", "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-reverted-email-subject2": "{{PLURAL:$4|Breytingin þín var tekin aftur|Breytingarnar þínar voru teknar}} {{GENDER:$2|aftur}} á {{SITENAME}}", + "notification-mention-email-subject": "$1 {{GENDER:$2|minntist}} á {{GENDER:$3|þ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}}", @@ -106,11 +99,9 @@ "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)", "echo-mark-all-as-read": "Merkja allt sem lesið", "echo-date-today": "Í dag", "echo-date-yesterday": "Í gær", - "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}}", diff --git a/Echo/i18n/it.json b/Echo/i18n/it.json index 69c7fd44..d8bf382e 100644 --- a/Echo/i18n/it.json +++ b/Echo/i18n/it.json @@ -1,37 +1,40 @@ { "@metadata": { "authors": [ + "Alexmar983", + "Anto", "Beta16", + "Catrope", + "Daimona Eaytoy", "Darth Kule", "Eleonora negri", "Elitre", - "Nemo bis", - "Pietrodn", - "Raoli", - "Vituzzu", - "Horcrux92", - "Alexmar983", "Fringio", - "Catrope", + "Gianfranco", + "Horcrux92", "Macofe", "Matteocng", - "Anto", + "Nemo bis", "Pequod76", - "Sakretsu" + "Pietrodn", + "Raoli", + "Sakretsu", + "Vituzzu" ] }, "echo-desc": "Sistema per notificare agli utenti messaggi ed eventi", "prefs-echo": "Notifiche", "prefs-emailsettings": "Opzioni email", - "prefs-displaynotifications": "Opzioni di visualizzazione", "prefs-echosubscriptions": "Inviami una notifica su questi eventi", "prefs-echocrosswiki": "Notifiche cross-wiki", "prefs-blocknotificationslist": "Utenti silenziati", + "prefs-mutedpageslist": "Pagine silenziate per le notifiche di collegamento pagina", "echo-pref-send-me": "Inviami:", "echo-pref-send-to": "Invia a:", "echo-pref-email-format": "Formato email:", "echo-pref-web": "Web", "echo-pref-email": "Email", + "echo-pref-push": "App", "echo-pref-email-frequency-never": "Non inviarmi alcuna notifica via e-mail", "echo-pref-email-frequency-immediately": "Notifiche singole per ogni evento", "echo-pref-email-frequency-daily": "Un riepilogo giornaliero delle notifiche", @@ -39,9 +42,8 @@ "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: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-pref-notifications-blacklist": "Non mostrare notifiche di questi utenti ([[mw:Special:MyLanguage/Help:Notifications#mute|ulteriori informazioni]])", + "echo-pref-notifications-page-linked-title-muted-list": "Non mostrare le notifiche \"Collegamento a una pagina\" per queste pagine ([[mw:Special:MyLanguage/Help:Notifications#mute|ulteriori informazioni]])", "echo-learn-more": "Ulteriori informazioni", "echo-log": "Registro pubblico", "echo-new-messages": "Hai nuovi messaggi", @@ -53,8 +55,11 @@ "echo-category-title-mention-success": "{{PLURAL:$1|Menzione corretta|Menzioni corrette}}", "echo-category-title-other": "{{PLURAL:$1|Altro}}", "echo-category-title-system": "{{PLURAL:$1|Sistema}}", + "echo-category-title-system-noemail": "{{PLURAL:$1|Sistema}}", + "echo-category-title-system-emailonly": "{{PLURAL:$1|Sistema}}", "echo-category-title-user-rights": "{{PLURAL:$1|Modifica diritto|Modifiche diritti}} utente", "echo-category-title-emailuser": "{{PLURAL:$1|Email da un altro utente|Email da altri utenti}}", + "echo-category-title-thank-you-edit": "{{PLURAL:$1|Traguardo|Traguardi}} modifiche", "echo-pref-tooltip-edit-user-talk": "Avvisami quando qualcuno mi scrive un messaggio o risponde nella mia pagina di discussione.", "echo-pref-tooltip-article-linked": "Avvisami quando qualcuno collega una pagina che ho creato da un'altra pagina.", "echo-pref-tooltip-reverted": "Avvisami quando qualcuno annulla una modifica che ho fatto, usando le funzioni annulla o rollback.", @@ -63,7 +68,7 @@ "echo-pref-tooltip-mention-success": "Avvisami quando invio una menzione a qualcuno.", "echo-pref-tooltip-user-rights": "Avvisami quando qualcuno modifica i miei diritti di utente.", "echo-pref-tooltip-emailuser": "Avvisami quando qualcuno mi invia una email.", - "echo-error-no-formatter": "Nessuna formattazione definita per le notifiche", + "echo-pref-tooltip-thank-you-edit": "Avvisami quando raggiungo la 1ª, 10ª, 100ª... modifica.", "notifications": "Notifiche", "tooltip-pt-notifications-alert": "{{GENDER:|I tuoi}} avvisi", "tooltip-pt-notifications-notice": "{{GENDER:|Le tue}} notizie", @@ -74,7 +79,6 @@ "echo-displaynotificationsconfiguration-sorting-by-section-legend": "In quale sezione ogni tipo di notifica è ordinato", "echo-displaynotificationsconfiguration-available-notification-methods-header": "Metodi di notifica consentiti", "echo-displaynotificationsconfiguration-available-notification-methods-by-category-legend": "Quali metodi di notifica sono supportati per ogni categoria", - "echo-displaynotificationsconfiguration-available-notification-methods-by-type-legend": "Quali metodi di notifica sono supportati per ogni tipo; si applica solo ai tipi all'interno delle categorie che sono nascosti dalle preferenze", "echo-displaynotificationsconfiguration-enabled-default-header": "Abilitato per impostazione predefinita", "echo-displaynotificationsconfiguration-enabled-default-existing-users-legend": "Utenti esistenti", "echo-displaynotificationsconfiguration-enabled-default-new-users-legend": "Nuovi utenti", @@ -88,10 +92,7 @@ "echo-specialpage-pagefilters-title": "Attività recente", "echo-specialpage-pagefilters-subtitle": "Pagine con notifiche non lette", "notificationsmarkread-legend": "Contrassegna la notifica come letta", - "echo-anon": "Per ricevere le notifiche, [$1 registrati] o [$2 accedi].", "echo-none": "Non hai notifiche.", - "echo-more-info": "Altre informazioni", - "echo-feedback": "Commenti", "echo-api-failure": "Non è stato possibile recuperare le notifiche.", "echo-api-failure-cross-wiki": "L'accesso al dominio remoto è stato negato.", "echo-notification-placeholder": "Non ci sono notifiche.", @@ -142,6 +143,7 @@ "notification-compact-header-mention-failure-user-anonymous": "<strong>Non possono essere inviate menzioni ad IP:</strong> $1", "notification-header-mention-success": "{{GENDER:$2|La tua}} menzione di <strong>$3</strong> è stata inviata.", "notification-header-mention-success-bundle": "{{PLURAL:$3|Una menzione|$3 menzioni}} che {{GENDER:$2|hai fatto}} nella pagina di discussione <strong>$4</strong> {{PLURAL:$3|è stata inviata|sono state inviate}}.", + "notification-compact-header-mention-success": "<strong>{{GENDER:$2|Hai menzionato}}:</strong> $3", "notification-header-mention-status-bundle": "{{PLURAL:$3|Una notifica|$3 notifiche}} riguardo a menzioni che {{GENDER:$2|hai fatto}} nella pagina di discussione <strong>$4</strong>: $5 non {{PLURAL:$5|inviata|inviate}}, $6 {{PLURAL:$6|inviata|inviate}}.", "notification-header-user-rights-add-only": "I tuoi diritti utente sono stati {{GENDER:$1|modificati}}. Sei {{GENDER:$4|stato aggiunto|stata aggiunta}} a: $2.", "notification-header-user-rights-remove-only": "I {{GENDER:$4|tuoi}} diritti utente sono stati {{GENDER:$1|modificati}}. Non sei più un membro di: $2.", @@ -159,14 +161,14 @@ "notification-header-thank-you-1000000-edit": "Hai appena fatto la tua milionesima modifica; grazie per il {{GENDER:$2|tuo}} strabiliante contributo!", "notification-link-thank-you-edit": "La {{GENDER:$1|tua}} modifica", "notification-link-text-view-edit": "Vedi modifica", + "notification-link-article-reminder": "Vedi pagina", "notification-header-reverted": "{{PLURAL:$4|La tua modifica|Le tue modifiche}} su <strong>$3</strong> {{PLURAL:$4|è stata annullata|sono state annullate}}{{GENDER:$2|}}", "notification-header-emailuser": "$1 ti {{GENDER:$2|ha inviato}} una email.", - "notification-edit-talk-page-email-subject2": "$1 ti {{GENDER:$1|ha lasciato}} un messaggio in {{SITENAME}}", - "notification-edit-talk-page-email-batch-body-with-section": "$1 {{GENDER:$1|ha lasciato}} un messaggio sulla tua pagina di discussione in '$2'.", - "notification-page-linked-email-subject": "Una pagina che hai creato è stata collegata su {{SITENAME}}", - "notification-reverted-email-subject2": "{{PLURAL:$3|La tua modifica è stata annullata|Le tue modifiche sono state annullate}} {{GENDER:$1|su}} {{SITENAME}}", - "notification-mention-email-subject": "$1 {{GENDER:$1|ti}} ha {{GENDER:$2|menzionato|menzionata|menzionato/a}} su {{SITENAME}}", - "notification-user-rights-email-subject": "I tuoi diritti utente sono stati modificati su {{SITENAME}}", + "notification-edit-talk-page-email-subject2": "$1 {{GENDER:$3|ti}} {{GENDER:$2|ha lasciato}} un messaggio in {{SITENAME}}", + "notification-page-linked-email-subject": "Una pagina che {{GENDER:$3|hai creato}} è stata collegata su {{SITENAME}}", + "notification-reverted-email-subject2": "{{PLURAL:$4|La {{GENDER:$3|tua}} modifica è stata annullata|Le tue modifiche sono state annullate}} {{GENDER:$2|su}} {{SITENAME}}", + "notification-mention-email-subject": "$1 {{GENDER:$2|ti}} ha {{GENDER:$3|menzionato|menzionata|menzionato/a}} su {{SITENAME}}", + "notification-user-rights-email-subject": "I {{GENDER:$3|tuoi}} diritti utente sono stati modificati su {{SITENAME}}", "notification-timestamp-ago-seconds": "{{PLURAL:$1|$1 s}}", "notification-timestamp-ago-minutes": "$1 {{PLURAL:$1|min}}", "notification-timestamp-ago-hours": "$1 {{PLURAL:$1|ora|ore}}", @@ -178,9 +180,7 @@ "notification-inbox-filter-read": "Lette", "notification-inbox-filter-unread": "Non lette", "notification-inbox-filter-all": "Tutte", - "echo-email-body-default": "Hai una nuova notifica su {{SITENAME}}:\n\n$1", - "echo-email-footer-default-html": "Per controllare quali email ti vengono inviate, <a href=\"$2\" style=\"text-decoration:none; color: #3868B0;\">verifica le tue preferenze</a>.<br />\n$1", - "echo-email-footer-default": "$2\n\nPer controllare quali email ti vengono inviate, controlla le tue preferenze:\n{{canonicalurl:{{#special:Preferences}}#mw-prefsection-echo}}\n\n$1", + "echo-specialmute-label-mute-notifications": "Silenzia le notifiche da {{GENDER:$1|questo|questa}} utente", "echo-email-plain-footer": "Per controllare quali email {{GENDER:$1|ti}} vengono inviate, verifica le {{GENDER:$1|tue}} preferenze:", "echo-email-html-footer-preference-link-text": "verifica le {{GENDER:$1|tue}} preferenze", "echo-email-html-footer-with-link": "Per controllare quali email {{GENDER:$2|ti}} vengono inviate, $1.", @@ -190,12 +190,12 @@ "echo-notification-notice-text-only": "Notizie", "echo-overlay-link": "Tutte le notifiche", "echo-overlay-title": "<b>Notifiche</b>", - "echo-overlay-title-overflow": "<b>{{PLURAL:$1|Notifica|Notifiche}}</b> (mostrate $1 di $2 non lette)", "echo-mark-all-as-read": "Segna tutte come lette", "echo-mark-all-as-read-confirmation": "$1 {{PLURAL:$1|notifica contrassegnata come letta|notifiche contrassegnate come lette}}", + "echo-mark-wiki-as-read": "Contrassegna tutte come lette nel wiki selezionato: $1", + "echo-displaysnippet-title": "Nuova notifica", "echo-date-today": "Oggi", "echo-date-yesterday": "Ieri", - "echo-load-more-error": "Si è verificato un errore nel recupero di ulteriori risultati.", "notification-bundle-header-edit-user-talk-v2": "{{PLURAL:$1|Un nuovo messaggio|$1 nuovi messaggi|100=Più di 99 nuovi messaggi}} sulla <strong>{{GENDER:$3|tua}} pagina di discussione</strong>.", "echo-email-batch-subject-daily": "Hai {{PLURAL:$2|una nuova notifica|nuove notifiche}} su {{SITENAME}}", "echo-email-batch-subject-weekly": "Hai {{PLURAL:$2|una nuova notifica|nuove notifiche}} su {{SITENAME}} questa settimana", diff --git a/Echo/i18n/ja.json b/Echo/i18n/ja.json index 6d3bda50..e2a53b95 100644 --- a/Echo/i18n/ja.json +++ b/Echo/i18n/ja.json @@ -1,29 +1,37 @@ { "@metadata": { "authors": [ + "2nd-player", + "Afaz", "Fryed-peach", - "Shirayuki", - "Whym", + "Kkairri", + "Marine-Blue", + "Ochaochaocha3", + "Omotecho", + "Otokoume", "Penn Station", + "Shirayuki", + "Suchichi02", "Sujiniku", - "2nd-player", "Takot", - "Otokoume", - "Vigorous action", "Thibaut120094", - "Marine-Blue", + "Tmv", "Translatealcd", - "Omotecho", + "Vigorous action", + "Whym", "Yusuke1109" ] }, - "echo-desc": "イベントおよびメッセージについて、ユーザーに通知するシステム", + "echo-desc": "イベントおよびメッセージについて、利用者に通知するシステム", "prefs-echo": "通知", "prefs-emailsettings": "メールの設定", - "prefs-displaynotifications": "表示の設定", "prefs-echosubscriptions": "以下の場合に通知を受け取る", "prefs-echocrosswiki": "ウィキ横断通知", "prefs-blocknotificationslist": "ミュートした利用者", + "prefs-mutedpageslist": "ページリンク通知をミュートにしているページ", + "prefs-echopollupdates": "ライブ通知", + "echo-mobile-notifications-filter-title": "フィルター通知", + "echo-pref-show-poll-updates": "新着通知を表示", "echo-pref-send-me": "受け取る頻度:", "echo-pref-send-to": "送信先:", "echo-pref-email-format": "メールの形式:", @@ -37,8 +45,7 @@ "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-pref-notifications-page-linked-title-muted-list": "以下のページからのページリンク通知は表示されません ([[mw:Special:MyLanguage/Help:Notifications#mute|詳細]])。", "echo-learn-more": "詳細", "echo-log": "公開記録", "echo-new-messages": "新着メッセージがあります", @@ -50,9 +57,14 @@ "echo-category-title-mention-success": "{{PLURAL:$1|言及}}の成功", "echo-category-title-other": "{{PLURAL:$1|その他}}", "echo-category-title-system": "{{PLURAL:$1|システム}}", + "echo-category-title-system-noemail": "{{PLURAL:$1|システム}}", + "echo-category-title-system-emailonly": "{{PLURAL:$1|システム}}", "echo-category-title-user-rights": "{{PLURAL:$1|利用者権限の変更}}", "echo-category-title-emailuser": "{{PLURAL:$1|他の利用者からのメール}}", "echo-category-title-article-reminder": "ページ{{PLURAL:$1|リマインダー}}", + "echo-category-title-thank-you-edit": "編集{{PLURAL:$1|マイルストーン}}", + "echo-category-title-watchlist": "ウォッチページへの編集", + "echo-category-title-minor-watchlist": "ウォッチページの細部の編集", "echo-pref-tooltip-edit-user-talk": "誰かが私のトークページでメッセージの投稿または返信をしたときに通知する。", "echo-pref-tooltip-article-linked": "誰かが自分の作成したページに記事からリンクしたときに通知する。", "echo-pref-tooltip-reverted": "誰かが取り消しや巻き戻しの機能で私の編集を差し戻したときに通知する。", @@ -61,9 +73,12 @@ "echo-pref-tooltip-mention-success": "利用者へ言及したときに通知する。", "echo-pref-tooltip-user-rights": "誰かが私の利用者権限を変更したときに通知する。", "echo-pref-tooltip-emailuser": "誰かが私にメールを送ったときに通知する。", - "echo-error-no-formatter": "通知の書式が定義されていません。", + "echo-pref-tooltip-article-reminder": "このページは、私が質問したときに通知される仕組みになっています。", + "echo-pref-tooltip-thank-you-edit": "編集回数が1回、10回、100回などに到達したときに通知する。", + "echo-pref-tooltip-watchlist": "誰かが自分のウォッチリスト上のページを(細部の編集にチェックをつけずに)編集したときに通知する。", + "echo-pref-tooltip-minor-watchlist": "誰かが自分のウォッチリスト上のページを細部の編集にチェックをつけて編集したときに通知する。", "notifications": "通知", - "tooltip-pt-notifications-alert": "{{GENDER:|あなた}}への通知", + "tooltip-pt-notifications-alert": "{{GENDER:|あなた}}へのアラート", "tooltip-pt-notifications-notice": "{{GENDER:|あなた}}への通知", "echo-displaynotificationsconfiguration": "通知の構成状況の表示", "echo-displaynotificationsconfiguration-summary": "こちらは通知機能がこのウィキでどのように構成されているかの概観です。", @@ -72,7 +87,6 @@ "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": "新しい利用者", @@ -82,15 +96,13 @@ "echo-specialpage-section-markread": "まとめて既読にする", "echo-specialpage-markasread": "通知: 既読にする", "echo-specialpage-markasread-invalid-id": "無効なイベントID", + "echo-specialpage-pagefilterwidget-aria-label": "Wikiとページのタイトルで絞り込み", + "echo-specialpage-special-help-menu-widget-aria-label": "追加の選択肢と通知の設定。", "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-quotation-marks": "「$1」", "echo-api-failure": "通知を取得できませんでした。", "echo-api-failure-cross-wiki": "リモートドメインへのアクセスが拒否されました。", "echo-notification-placeholder": "通知はありません。", @@ -101,6 +113,13 @@ "echo-notification-markasunread": "未読にする", "echo-notification-markasread-tooltip": "既読にする", "echo-notification-more-options-tooltip": "その他の操作", + "notification-dynamic-actions-mute-page-linked": "「$1」のリンク通知を{{GENDER:$2|ミュートする}}", + "notification-dynamic-actions-mute-page-linked-confirmation": "ページ「$1」に対する「ページリンク」通知は無効になりました", + "notification-dynamic-actions-mute-page-linked-confirmation-description": "{{GENDER:$2|あなた}}は、[$1 設定]からいつでもミュートしたページを管理することができます。", + "notification-dynamic-actions-unmute-page-linked": "「$1」のリンク通知の{{GENDER:$2|ミュートを解除する}}", + "notification-dynamic-actions-unmute-page-linked-confirmation": "ページ「$1」に対する「ページリンク」通知は有効になりました", + "notification-dynamic-actions-unmute-page-linked-confirmation-description": "{{GENDER:$2|あなた}}は、[$1 設定]からいつでもミュートしたページを管理することができます。", + "notification-dynamic-actions-unwatch-confirmation-description": "{{GENDER:$3|あなた}}はいつでも[$2 このページ]を閲覧できます。", "notification-link-text-expand-all": "展開", "notification-link-text-expand-alert-count": "{{PLURAL:$1|$1件のアラート}}を表示", "notification-link-text-expand-notice-count": "{{PLURAL:$1|$1件の通知}}を見る", @@ -154,13 +173,12 @@ "notification-link-text-view-edit": "編集内容を閲覧", "notification-link-article-reminder": "ページを閲覧", "notification-header-reverted": "{{PLURAL:$4|<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": "$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-user-rights-email-subject": "{{SITENAME}}での利用者権限が変更されました", + "notification-header-emailuser": "$1 があなたにメールを{{GENDER:$2|送信しました}}。", + "notification-edit-talk-page-email-subject2": "{{SITENAME}}で $1 があなたのトークページにメッセージを{{GENDER:$2|投稿しました}}", + "notification-page-linked-email-subject": "{{GENDER:$3|あなた}}の作成したページが{{SITENAME}}でリンクされました", + "notification-reverted-email-subject2": "{{SITENAME}}でのあなたの{{PLURAL:$4|編集}}が{{GENDER:$2|差し戻されました}}", + "notification-mention-email-subject": "$1 が{{SITENAME}}で{{GENDER:$3|あなた}}に{{GENDER:$2|言及しました}}", + "notification-user-rights-email-subject": "{{SITENAME}}での{{GENDER:$3|あなたの}}利用者権限が変更されました", "notification-timestamp-ago-seconds": "{{PLURAL:$1|$1秒前}}", "notification-timestamp-ago-minutes": "{{PLURAL:$1|$1分前}}", "notification-timestamp-ago-hours": "{{PLURAL:$1|$1時間前}}", @@ -172,31 +190,29 @@ "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-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-specialmute-label-mute-notifications": "この利用者からの通知をミュートする", + "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-notification-alert": "{{PLURAL:$1|アラート ($1)|100=アラート (99件以上)}}", "echo-notification-notice": "{{PLURAL:$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>", - "echo-overlay-title-overflow": "<b>{{PLURAL:$1|通知}}</b> (未読 $2 件中 $1 件を表示中)", "echo-mark-all-as-read": "すべて既読にする", "echo-mark-all-as-read-confirmation": "$1件の{{PLURAL:$1|通知}}を既読にしました", "echo-mark-wiki-as-read": "選択したウィキですべて既読にする: $1", + "echo-displaysnippet-title": "新規通知", "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": "{{SITENAME}}で{{PLURAL:$2|新たな通知}}が届いています", "echo-email-batch-subject-weekly": "{{SITENAME}}でこの1週間に{{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": "すべての通知を閲覧", - "notification-header-foreign-alert": "{{PLURAL:$5|他のウィキ|$5件のウィキ}}からの通知があります", - "notification-header-foreign-notice": "{{PLURAL:$5|他のウィキ|$5件の他のウィキ}}からの通知があります", - "notification-header-foreign-all": "{{PLURAL:$5|他のウィキ|$5件の他のウィキ}}からの通知があります" + "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/jv.json b/Echo/i18n/jv.json index 9a4c0711..06c70744 100644 --- a/Echo/i18n/jv.json +++ b/Echo/i18n/jv.json @@ -3,13 +3,14 @@ "authors": [ "Anggoro", "Bennylin", - "NoiX180" + "Diki Ananta", + "NoiX180", + "Sumbukompor" ] }, - "echo-desc": "Sistem sing ngabari panganggo ngenani anané layang lan kagiyatan", + "echo-desc": "Sistem sing ngabari naraguna ngenani anané layang lan kagiyatan", "prefs-echo": "Pambiwara", "prefs-emailsettings": "Opsi layang-èl", - "prefs-displaynotifications": "Opsi pitontonan", "prefs-echosubscriptions": "Kabari aku ngenani kagiyatan iki", "prefs-echocrosswiki": "Pambiwara antarawiki", "echo-pref-send-me": "Kirimi aku:", @@ -24,8 +25,6 @@ "echo-pref-email-format-html": "HTML", "echo-pref-email-format-plain-text": "Tèks barès", "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", @@ -37,18 +36,17 @@ "echo-category-title-mention-success": "{{PLURAL:$1|Panyebutan}} sing kasil", "echo-category-title-other": "{{PLURAL:$1|Liyané}}", "echo-category-title-system": "{{PLURAL:$1|Sistem}}", - "echo-category-title-user-rights": "{{PLURAL:$1|Owah-owahané haké panganggo}}", - "echo-category-title-emailuser": "{{PLURAL:$1|Layang-èl saka panganggo liya}}", + "echo-category-title-user-rights": "{{PLURAL:$1|Owah-owahané haké naraguna}}", + "echo-category-title-emailuser": "{{PLURAL:$1|Layang-èl saka naraguna liya}}", "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-article-linked": "Kandhani aku manawa ana kang nggayutaké kaca menyang kaca kang dakgawé.", "echo-pref-tooltip-reverted": "Kabari aku manawa ana sing mbalèkaké besutanku lumantar tombol-balèkaké.", - "echo-pref-tooltip-mention": "Kabari aku manawa ana kang nggayutaké menyang kaca panganggoku.", + "echo-pref-tooltip-mention": "Kabari aku manawa ana kang nggayutaké menyang kaca naragunaku.", "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-user-rights": "Kabari aku manawa ana sing ngowahi hak naragunaku.", "echo-pref-tooltip-emailuser": "Kabari aku manawa ana sing ngirimi layang-èl.", "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": "Pambiwarané {{GENDER:|panjenengan}}", @@ -58,8 +56,8 @@ "echo-displaynotificationsconfiguration-sorting-by-section-header": "Urutané jinis", "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-enabled-default-existing-users-legend": "Naraguna sing ana", + "echo-displaynotificationsconfiguration-enabled-default-new-users-legend": "Naraguna anyar", "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", @@ -70,11 +68,7 @@ "echo-specialpage-pagefilters-title": "Kagiyatan mentas waé", "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-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": "Ora ana pambiwara.", @@ -120,9 +114,9 @@ "notification-header-mention-article-talkpage-nosection": "$1 {{GENDER:$2|nyebut}} {{GENDER:$3|panjenengan}} ing kaca parambugané <strong>$4</strong>.", "notification-header-mention-failure-user-unknown": "Panyebuté {{GENDER:$2|panjenengan}} tumrap <strong>$3</strong> ora kakirim amarga wongé ora katemu.", "notification-header-mention-failure-user-anonymous": "Panyebuté {{GENDER:$2|panjenengan}} tumrap <strong>$3</strong> ora kakirim amarga wongé anonim.", - "notification-header-mention-failure-too-many": "Panyebuté {{GENDER:$2|panjenengan}} ora kakirim amarga cacahé munjuli watesé panyebutan cacah $3.", + "notification-header-mention-failure-too-many": "{{GENDER:$2|Kowé}} mbudidaya nyebut luwih saka $3 {{PLURAL:$3|naraguna|naraguna}}. Kabèh panyebut kang ngluwihi watesan iku ora bakal kinirim.", "notification-header-mention-failure-bundle": "{{PLURAL:$3|Panybutan|$3 panyebutan}} sing {{GENDER:$2|digawé panjenengan}} ing kaca parembugané <strong>$4</strong> ora {{PLURAL:$3|bisa}} dikirim.", - "notification-compact-header-mention-failure-user-unknown": "<strong>Jeneng panganggo ora ana:</strong> $1", + "notification-compact-header-mention-failure-user-unknown": "<strong>Jeneng naraguna ora ana:</strong> $1", "notification-compact-header-mention-failure-user-anonymous": "<strong>Ora bisa nyebut IP:</strong> $1", "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.", @@ -146,12 +140,11 @@ "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\".", - "notification-page-linked-email-subject": "Kaca sing panjenengan ripta digayutaké menyang {{SITENAME}}", - "notification-reverted-email-subject2": "{{PLURAL:$3|Besutané panjenengan}} ing {{SITENAME}} {{GENDER:$1|dibalèkaké}}", - "notification-mention-email-subject": "$1 {{GENDER:$1|nyebut}} {{GENDER:$2|panjenengan}} ing {{SITENAME}}", - "notification-user-rights-email-subject": "Haké panjenengan ing {{SITENAME}} wis diowahi", + "notification-edit-talk-page-email-subject2": "$1 {{GENDER:$2|ngirimi}} panjenengan layang ing {{SITENAME}}", + "notification-page-linked-email-subject": "Kaca kang {{GENDER:$3|ko}}gawé kagayut marang {{SITENAME}}", + "notification-reverted-email-subject2": "{{PLURAL:$4|Besutané panjenengan}} ing {{SITENAME}} {{GENDER:$2|dibalèkaké}}", + "notification-mention-email-subject": "$1 {{GENDER:$2|nyebut}} {{GENDER:$3|kowé}} ing {{SITENAME}}", + "notification-user-rights-email-subject": "Hak naraguna{{GENDER:$3|mu}} ing {{SITENAME}} wis owah.", "notification-timestamp-ago-seconds": "{{PLURAL:$1|$1dh}}", "notification-timestamp-ago-minutes": "{{PLURAL:$1|$1m}}", "notification-timestamp-ago-hours": "{{PLURAL:$1|$1j}}", @@ -163,9 +156,6 @@ "notification-inbox-filter-read": "Wis diwaca", "notification-inbox-filter-unread": "Durung diwaca", "notification-inbox-filter-all": "Kabèh", - "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}}:", "echo-email-html-footer-preference-link-text": "priksa préferènsiné {{GENDER:$1|panjenengan}}", "echo-email-html-footer-with-link": "Kanggo ngatur layang-èl endi waé sing kudu kita kirim nyang {{GENDER:$2|panjenengan}}, $1.", @@ -175,13 +165,11 @@ "echo-notification-notice-text-only": "Wara-wara", "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|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-bullet": "•", "echo-email-batch-subject-daily": "Panjenengan olèh {{PLURAL:$2|pambiwara anyar}} ing {{SITENAME}}", diff --git a/Echo/i18n/ka.json b/Echo/i18n/ka.json index 455d528f..c8fdcc1c 100644 --- a/Echo/i18n/ka.json +++ b/Echo/i18n/ka.json @@ -1,24 +1,24 @@ { "@metadata": { "authors": [ + "BRUTE", "David1010", + "Dawid Deutschland", "MIKHEIL", + "Macofe", "Nodar Kherkheulidze", - "Tokoko", "Otogi", - "BRUTE", - "Dawid Deutschland", - "Macofe", - "Sopopruidze" + "Sopopruidze", + "Tokoko" ] }, "echo-desc": "შეტყობინებებისა და მოვლენების სისტემა", "prefs-echo": "შეტყობინებები", "prefs-emailsettings": "ელ-ფოსტის პარამეტრები", - "prefs-displaynotifications": "გამოსახვის პარამეტრები", "prefs-echosubscriptions": "შემატყობინეთ ამ ღონისძიებების შესახებ", "prefs-echocrosswiki": "კროს-ვიკის შეტყობინებები", "prefs-blocknotificationslist": "გათიშული მომხმარებლები", + "prefs-mutedpageslist": "იგნორირებული გვერდები გვერდის ბმულის შეტყობინებაზე", "echo-pref-send-me": "გამომიგზავნეთ:", "echo-pref-send-to": "გასაგზავნი მისამართი:", "echo-pref-email-format": "ელ.ფოსტის ფორმატი:", @@ -32,8 +32,7 @@ "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-pref-notifications-page-linked-title-muted-list": "არ აჩვენო „გვერდის ბმულის“ შეტყობინება ამ გვერდზე. ([[mw:Special:MyLanguage/Help:Notifications#mute|მეტის გაგება]])", "echo-learn-more": "გაიგეთ მეტი", "echo-new-messages": "თქვენ გაქვთ ახალი შეტყობინება", "echo-category-title-edit-user-talk": "განხილვის გვერდის {{PLURAL:$1|შეტყობინება}}", @@ -46,6 +45,7 @@ "echo-category-title-system": "{{PLURAL:$1|სისტემა}}", "echo-category-title-user-rights": "{{PLURAL:$1|მომხმარებლის უფლებების ცვლილება|მომხმარებლის უფლებების ცვლილებები}}", "echo-category-title-emailuser": "{{PLURAL:$1|იმეილი სხვა მომხმარებლისაგან|იმეილი სხვა მომხმარებლებისაგან}}", + "echo-category-title-thank-you-edit": "{{PLURAL:$1|საფეხურის|საფეხურის}} რედაქტირება", "echo-pref-tooltip-edit-user-talk": "შემატყობინე, როდესაც ვინმე დაარედაქტირებს ჩემს განხილვის გვერდს.", "echo-pref-tooltip-article-linked": "შემატყობინე, როდესაც ვინმე უკავშირდება სტატიებს ჩემ მიერ შექმნილ გვერდზე", "echo-pref-tooltip-reverted": "შემატყობინე, როდესაც ვინმე ჩემს რედაქტირებას გააუქმებს.", @@ -54,7 +54,6 @@ "echo-pref-tooltip-mention-success": "შემატყობინე, როდესაც მე ვუგზავნი ვინმეს მოხსენებას", "echo-pref-tooltip-user-rights": "შემატყობინე, როდესაც ვინმე შეცვლის ჩემს მომხმარებლის უფლებებს.", "echo-pref-tooltip-emailuser": "შემატყობინე, როდესაც ვინმე მომწერს ელექტრონულ მეილს.", - "echo-error-no-formatter": "შეტყობინებისთვის ფორმატირება განსაზღვრული არ არის.", "notifications": "შეტყობინებები", "tooltip-pt-notifications-alert": "{{GENDER:|თქვენი}} მოხსენებები", "tooltip-pt-notifications-notice": "თქვენი შეტყობინებები", @@ -65,10 +64,7 @@ "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": "შეტყობინებას ვერ ვპოულობთ.", "echo-api-failure-cross-wiki": "მანძილზე მოქმედ დომეინზე წვდომა უარყოფილია.", "echo-notification-placeholder": "ახალი შეტყობინებები არ არის.", @@ -103,8 +99,7 @@ "notification-link-thank-you-edit": "{{GENDER:$1|თქვენი}} რედაქტირება", "notification-link-text-view-edit": "რედაქტირების ნახვა", "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-subject2": "$1-მ {{GENDER:$2|მოგწერათ}} {{SITENAME}}-ზე", "notification-user-rights-email-subject": "თქვენი მომხარებლის უფლებები შეიცვალა {{SITENAME}}-ზე", "notification-timestamp-ago-seconds": "{{PLURAL:$1|$1 წამ.}}", "notification-timestamp-ago-minutes": "{{PLURAL:$1|$1 წუთ.}}", @@ -117,7 +112,7 @@ "notification-inbox-filter-read": "კითხვა", "notification-inbox-filter-unread": "წაუკითხავი", "notification-inbox-filter-all": "ყველა", - "echo-email-body-default": "თქვენგაქვთ ახალიშეტყობინება {{SITENAME}}-ზე:\n\n$1", + "echo-specialmute-label-mute-notifications": "არ აჩვენო შეტყობინება ამ მომხმარებლისგან", "echo-notification-alert-text-only": "მოხსენება", "echo-notification-notice-text-only": "შეტყობინებები", "echo-overlay-link": "შეტყობინება", diff --git a/Echo/i18n/kab.json b/Echo/i18n/kab.json index f47344e5..d5315f76 100644 --- a/Echo/i18n/kab.json +++ b/Echo/i18n/kab.json @@ -1,12 +1,14 @@ { "@metadata": { "authors": [ - "Belkacem77" + "Belkacem77", + "YouvaDjouadi" ] }, "echo-new-messages": "Ɣur-k iznan imaynuten", "tooltip-pt-notifications-alert": "Ilɣa-ik", "echo-displaynotificationsconfiguration-enabled-default-new-users-legend": "Iseqdacen imaynuten", + "notification-dynamic-actions-mute-page-linked-confirmation": "\"Page link\" ttwasgugment tura telɣutin n usebter \"$1\"", "notification-dynamic-actions-unwatch": "{{GENDER:$3|Seḥbes}} aḍfaṛ n irmuden imaynuten di \"$1\"", "notification-link-text-view-message": "Sken izen" } diff --git a/Echo/i18n/kjp.json b/Echo/i18n/kjp.json index d7048bdb..d21d3c76 100644 --- a/Echo/i18n/kjp.json +++ b/Echo/i18n/kjp.json @@ -4,11 +4,20 @@ "Rul1902" ] }, + "prefs-echo": "ဍာဖှ်ေသှ်ေယာ့လ်ုဖး", + "echo-category-title-other": "{{PLURAL:$1|ၰာႋၰံင်}}", + "notifications": "ဍာဖှ်ေသှ်ေယာ့လ်ုဖး", "tooltip-pt-notifications-alert": "{{GENDER:|ၮ်ု}} ဖှ်ေလင်ဆ်ုတ်ုတိုဒ်သယ်", + "echo-specialpage": "ဖှ်ေသှ်ေယာ့လ်ုဖး", + "echo-specialpage-pagination-numnotifications": "$1 {{PLURAL:$1|ဍာဖှ်ေသှ်ေယာ့|ဍာဖှ်ေသှ်ေယာ့လ်ုဖး}}", + "notification-link-text-expand-all": "မာလာဲ", + "notification-link-text-collapse-all": "မာအိင်း", "notification-welcome-linktext": "အင်းၯးလင်ဖဝ့်", "notification-timestamp-today": "လ်ုၮီယိုဝ်", "notification-timestamp-yesterday": "လ်ုမူႋၯး", "notification-inbox-filter-read": "ပဝ်ႋ", "notification-inbox-filter-unread": "ပဝ်ႋအေး", - "notification-inbox-filter-all": "လုက်ဆိင့်" + "notification-inbox-filter-all": "လုက်ဆိင့်", + "echo-overlay-link": "ဖှ်ေသှ်ေယာ့လ်ုဖး လုက်ကာ", + "echo-overlay-title": "<b>ဖှ်ေသှ်ေယာ့လ်ုဖး</b>" } diff --git a/Echo/i18n/kk-cyrl.json b/Echo/i18n/kk-cyrl.json index c88d7879..0582a6a1 100644 --- a/Echo/i18n/kk-cyrl.json +++ b/Echo/i18n/kk-cyrl.json @@ -8,7 +8,6 @@ "echo-desc": "Оқиғалар мен хабарламалар туралы қатысушыларға ескерту \nжүйесі", "prefs-echo": "Хабарландырулар", "prefs-emailsettings": "Е-пошта баптаулары", - "prefs-displaynotifications": "Көрсету бапталымдары", "prefs-echosubscriptions": "Бұл оқиғалар туралы маған хабарландыр", "prefs-echocrosswiki": "Уикиаралық ескетпелер", "echo-pref-send-me": "Маған жіберу:", @@ -23,8 +22,6 @@ "echo-pref-email-format-html": "HTML", "echo-pref-email-format-plain-text": "Қалыпты мәтін", "echo-pref-cross-wiki-notifications": "Басқа уикилерден ескертпелерді көрсету", - "echo-pref-beta-feature-cross-wiki-message": "Кеңейтілген хабарландырулар", - "echo-pref-beta-feature-cross-wiki-description": "Ескетпелерді қарау және басқару бұрыңғыдан да жеңілірек. Сіз басқа уикилерден хабарламалар көруге мүмкіндік береді, ол уикиаралық хабарландыруларын қамтиды.", "echo-learn-more": "Көбірек білу", "echo-log": "Барлығы көре алатын журнал", "echo-new-messages": "Сізге жаңа хабарламалар келді", @@ -42,17 +39,13 @@ "echo-pref-tooltip-mention": "Әлдекім менің қатысушы бетімді сілтеген кезде маған ескерт.", "echo-pref-tooltip-user-rights": "Әлдекім менің қатысушы құқықтарымды өзгерткен кезде маған ескерт", "echo-pref-tooltip-emailuser": "Маған электронды хат жібергенде маған ескерт.", - "echo-error-no-formatter": "Ескертпелер үшін форматтау анықталмайды.", "notifications": "Хабарландырулар", "tooltip-pt-notifications-alert": "{{GENDER:|Сіздегі}} дабылдар", "echo-displaynotificationsconfiguration-enabled-default-new-users-legend": "Жаңа қатысушылар", "echo-specialpage": "Хабарландырулар", "echo-specialpage-pagination-numnotifications": "{{PLURAL:$1|$1 ескертпе|$1 ескертпе}}", "notificationsmarkread-legend": "Ескертпені оқылды деп белгілеу", - "echo-anon": "Ескертпелерді қабылдау үшін [$1 тіркеліңіз] немесе [$2 кіріңіз].", "echo-none": "Сізде ескертпелер жоқ.", - "echo-more-info": "Көбірек ақпарат", - "echo-feedback": "Кері байланыс", "echo-api-failure": "Хабарлама алынбады. Қайталап көріңіз (Қате: $1)", "echo-api-failure-cross-wiki": "Қашықтағы домен қатынастан бас тартты.", "echo-notification-placeholder": "Мұнда ескертпелер жоқ.", @@ -98,11 +91,10 @@ "notification-link-text-view-edit": "Өңдемені көру", "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-edit-talk-page-email-subject2": "$1 {{SITENAME}} сайтында сізге хабарлама {{GENDER:$2|қалдырды}}", "notification-page-linked-email-subject": "{{SITENAME}} сайтында сіз бастаған бет сілтенді", - "notification-reverted-email-subject2": "{{SITENAME}} сайтында сіздің {{PLURAL:$3|өңдемеңіз|өңдемелеріңіз}}{{GENDER:$1|қайтарылды}}", - "notification-mention-email-subject": "{{SITENAME}} сайтында $1 сізді {{GENDER:$2|атап өтті}}", + "notification-reverted-email-subject2": "{{SITENAME}} сайтында сіздің {{PLURAL:$4|өңдемеңіз|өңдемелеріңіз}}{{GENDER:$2|қайтарылды}}", + "notification-mention-email-subject": "{{SITENAME}} сайтында $1 сізді {{GENDER:$3|атап өтті}}", "notification-user-rights-email-subject": "{{SITENAME}} сайтында сіздің қатысушы құқықтарыңыз өзгерілді.", "notification-timestamp-ago-seconds": "{{PLURAL:$1|$1 м}}", "notification-timestamp-ago-minutes": "{{PLURAL:$1|$1 м}}", @@ -115,17 +107,13 @@ "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-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-mark-all-as-read": "Барлығын оқылды деп белгіле", "echo-date-today": "Бүгін", "echo-date-yesterday": "Кеше", - "echo-load-more-error": "Қосымша нәтижелерді алуда қателік кездесті.", "notification-bundle-header-edit-user-talk-v2": "{{GENDER:$3|Талқылау бетіңіздегі}} {{PLURAL:$1|бір жаңа хабарлама|басқа $1 хабарлама|100=басқа 99+ хабарлама}}.", "echo-email-batch-subject-daily": "Сізге {{SITENAME}} сайтында {{PLURAL:$2|жаңа ескертпе|жаңа ескертпелер}} келді", "echo-email-batch-subject-weekly": "Сізге осы аптада {{SITENAME}} сайтында {{PLURAL:$2|жаңа ескертпе|жаңа ескертпелер}} келді", diff --git a/Echo/i18n/km.json b/Echo/i18n/km.json index 2157ed98..86aac028 100644 --- a/Echo/i18n/km.json +++ b/Echo/i18n/km.json @@ -1,13 +1,13 @@ { "@metadata": { "authors": [ + "Pichnat Thong", "គីមស៊្រុន" ] }, "echo-desc": "ប្រព័ន្ធសម្រាប់ផ្ដល់ដំណឹងដល់អ្នកប្រើប្រាស់អំពីព្រឹត្តិការណ៍និងសារនានា", "prefs-echo": "សារជូនដំណឹង", "prefs-emailsettings": "ជម្រើសទាក់ទិននឹងអ៊ីមែល", - "prefs-displaynotifications": "ជម្រើសទាក់ទិននឹងការបង្ហាញ", "prefs-echosubscriptions": "ជូនដំណឹងដល់ខ្ញុំពីព្រឹត្តិការណ៍ខាងក្រោមនេះ", "prefs-echocrosswiki": "សារជូនដំណឹងអន្តរវិគី", "prefs-blocknotificationslist": "អ្នកប្រើប្រាស់បិតមាត់រួច", @@ -16,6 +16,7 @@ "echo-pref-email-format": "ទម្រង់អ៊ីមែល៖", "echo-pref-web": "វិបសាយ", "echo-pref-email": "អ៊ីមែល", + "echo-pref-push": "កម្មវិធី", "echo-pref-email-frequency-never": "កុំផ្ញើសារជូនដំណឹងមកខ្ញុំអោយសោះ", "echo-pref-email-frequency-immediately": "សារជូនដំណឹងមួយៗពេលដែលគេផ្ញើចូលមក", "echo-pref-email-frequency-daily": "សារជូនដំណឹងសង្ខេបសរុបប្រចាំថ្ងៃ", @@ -24,8 +25,6 @@ "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": "អ្នកមានសារថ្មីៗ", @@ -37,9 +36,12 @@ "echo-category-title-mention-success": "{{PLURAL:$1|ការហៅឈ្មោះ|ការហៅឈ្មោះ}}បានសម្រេច", "echo-category-title-other": "{{PLURAL:$1|ផ្សេងទៀត}}", "echo-category-title-system": "{{PLURAL:$1|ប្រព័ន្ធ}}", + "echo-category-title-system-noemail": "{{PLURAL:$1|ប្រព័ន្ធ}}", + "echo-category-title-system-emailonly": "{{PLURAL:$1|ប្រព័ន្ធ}}", "echo-category-title-user-rights": "{{PLURAL:$1|ការផ្លាស់ប្ដូរសិទ្ធិអ្នកប្រើប្រាស់|ការផ្លាស់ប្ដូរសិទ្ធិអ្នកប្រើប្រាស់}}", "echo-category-title-emailuser": "{{PLURAL:$1|អ៊ីមែលពីអ្នកប្រើប្រាស់ដទៃ|អ៊ីមែលពីអ្នកប្រើប្រាស់ដទៃ}}", "echo-category-title-article-reminder": "ទំព័រ{{PLURAL:$1|ក្រើនរំលឹក|ក្រើនរំលឹក}}", + "echo-category-title-thank-you-edit": "{{PLURAL:$1|សមិទ្ធិផល|សមិទ្ធិផល}}កែប្រែ", "echo-pref-tooltip-edit-user-talk": "ជូនដំណឹងមកខ្ញុំពេលនរណាម្នាក់បិទសារឬឆ្លើយតបលើទំព័រពិភាក្សារបស់ខ្ញុំ", "echo-pref-tooltip-article-linked": "ជូនដំណឹងមកខ្ញុំពេលនរណាម្នាក់ដាក់តំណភ្ជាប់ក្នុងទំព័រមួយទៀត ដែលតភ្ជាប់មកទំព័រដែលខ្ញុំបានបង្កើត។", "echo-pref-tooltip-reverted": "ជូនដំណឹងមកខ្ញុំពេលនរណាម្នាក់មួលត្រឡប់កំណែប្រែដែលខ្ញុំបានធ្វើ ដោយប្រើប្រាស់ឧបករណ៍ធ្វើឡើងវិញឬមួលត្រឡប់។", @@ -49,7 +51,7 @@ "echo-pref-tooltip-user-rights": "ជូនដំណឹងមកខ្ញុំពេលនរណាម្នាក់ផ្លាស់ប្ដូរសិទ្ធិអ្នកប្រើប្រាស់របស់ខ្ញុំ។", "echo-pref-tooltip-emailuser": "ជូនដំណឹងមកខ្ញុំពេលនរណាម្នាក់ផ្ញើអ៊ីមែលមកកាន់ខ្ញុំ។", "echo-pref-tooltip-article-reminder": "ជូនដំណឹងមកខ្ញុំអំពីទំព័រនេះពេលខ្ញុំសួរ។", - "echo-error-no-formatter": "គ្មានទម្រង់កំណត់សម្រាប់សារជូនដំណឹងទេ។", + "echo-pref-tooltip-thank-you-edit": "ជូនដំណឹងមកខ្ញុំពេលខ្ញុំសម្រេចការកែប្រែទី១ ទី១០ ទី១០០ ...។", "notifications": "សារជូនដំណឹង", "tooltip-pt-notifications-alert": "សារជូនដំណឹងសំខាន់{{GENDER:|មកអ្នក}}", "tooltip-pt-notifications-notice": "សារជូនដំណឹងធម្មតា{{GENDER:|មកអ្នក}}", @@ -60,7 +62,6 @@ "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": "អ្នកប្រើប្រាស់ថ្មី", @@ -74,10 +75,7 @@ "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": "គ្មានសារជូនដំណឹងទេ។", @@ -150,12 +148,11 @@ "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-edit-talk-page-email-subject2": "$1 {{GENDER:$2|បានសរសេរ}}សារមួយមក{{GENDER:$3|អ្នក}}នៅក្នុង{{SITENAME}}", + "notification-page-linked-email-subject": "ទំព័រមួយដែល{{GENDER:$3|អ្នក}}បានបង្កើតត្រូវបានដាក់តំណភ្ជាប់នៅក្នុង{{SITENAME}}", + "notification-reverted-email-subject2": "{{PLURAL:$4|កំណែប្រែ|កំណែប្រែ}}{{GENDER:$3|របស់អ្នក}}ត្រូវបាន{{GENDER:$2|មួលត្រឡប់}} នៅក្នុង{{SITENAME}}", + "notification-mention-email-subject": "$1 {{GENDER:$2|បានហៅឈ្មោះ}}{{GENDER:$3|អ្នក}} នៅក្នុង{{SITENAME}}", + "notification-user-rights-email-subject": "សិទ្ធិអ្នកប្រើប្រាស់{{GENDER:$3|របស់អ្នក}}នៅក្នុង{{SITENAME}}ត្រូវបានផ្លាស់ប្ដូរ", "notification-timestamp-ago-seconds": "{{PLURAL:$1|$1វិនាទីមុន}}", "notification-timestamp-ago-minutes": "{{PLURAL:$1|$1នាទីមុន}}", "notification-timestamp-ago-hours": "{{PLURAL:$1|$1ម៉ោងមុន}}", @@ -167,9 +164,6 @@ "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។", @@ -179,13 +173,12 @@ "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-displaysnippet-title": "សារជូនដំណឹងថ្មី", "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}}", diff --git a/Echo/i18n/kn.json b/Echo/i18n/kn.json index 2569df2d..30ccc16c 100644 --- a/Echo/i18n/kn.json +++ b/Echo/i18n/kn.json @@ -9,7 +9,6 @@ "echo-desc": "ಸೂಚನಾ ವ್ಯವಸ್ಥೆ", "prefs-echo": "ಸೂಚನೆಗಳು", "prefs-emailsettings": "ಇಮೈಲ್ ಆಯ್ಕೆಗಳು", - "prefs-displaynotifications": "ಪ್ರದರ್ಶನ ಆಯ್ಕೆಗಳು", "prefs-echosubscriptions": "ಈ ಘಟನೆಗಳ ಬಗ್ಗೆ ನನಗೆ ತಿಳಿಸಿ", "echo-pref-send-me": "ನನಗೆ ಕಳುಹಿಸಿ:", "echo-pref-send-to": "ಇವರಿಗೆ ಕಳುಹಿಸಿ:", @@ -34,13 +33,9 @@ "echo-pref-tooltip-article-linked": "ನಾನು ತಯಾರಿಸಿದ ಲೇಖನಪುಟಕ್ಕೆ ಯಾರಾದರೂ ಕೊಂಡಿ ನೀಡಿದರೆ ನನಗೆ ತಿಳಿಸಿ", "echo-pref-tooltip-reverted": "ನಾನು ಮಾಡಿದ ಸಂಪಾದನೆಯನ್ನು ಯಾರಾದರು ಹಿಂದಿನಂತೆ ಮಾಡಿದರೆ ನನಗೆ ತಿಳಿಸಿ", "echo-pref-tooltip-mention": "ನನ್ನ ಸದಸ್ಯ ಪುಟಕ್ಕೆ ಯಾರಾದರು ಯಾವುದಾದರು ಚರ್ಚಾಪುಟದಿಂದ ಕೊಂಡಿ ನೀಡಿದರೆ ನನಗೆ ತಿಳಿಸಿ", - "echo-error-no-formatter": "ಸೂಚನೆಗಳಿಗೆ ಯಾವುದೇ ನಮೂನೆ ನಿರ್ಧರಿಸಿಲ್ಲ", "notifications": "ಸೂಚನೆಗಳು", "echo-specialpage": "ಸೂಚನೆಗಳು", - "echo-anon": "ಸೂಚನೆಗಳನ್ನು ಸ್ವೀಕರಿಸಲು [ಖಾತೆ ಸೃಷ್ಟಿಸಿ $1] ಅಥವಾ [ಲಾಗಿನ್ $2]", "echo-none": "ನಿಮಗೆ ಯಾವುದೇ ಸೂಚನೆಗಳಿಲ್ಲ", - "echo-more-info": "ಹೆಚ್ಚಿನ ಮಾಹಿತಿ", - "echo-feedback": "ಹಿಂಮಾಹಿತಿ", "notification-link-text-view-message": "ಸಂದೇಶ ನೋಡಿ", "notification-link-text-view-mention": "ಸಂಬೋಧನೆ ನೋಡಿ", "notification-link-text-view-changes": "ಬದಲಾವಣೆ ನೋಡಿ", @@ -48,14 +43,11 @@ "notification-link-text-view-edit": "ಸಂಪಾದನೆ ನೋಡಿ", "notification-page-linked-email-subject": "ನಿಮ್ಮ ಪುಟವು {{SITENAME}} ಜಾಲತಾಣಕ್ಕೆ ಸಂಪರ್ಕಿಸಲ್ಪಟ್ಟಿದೆ", "notification-user-rights-email-subject": "{{SITENAME}} ಜಾಲತಾಣದಲ್ಲಿ ನಿಮ್ಮ ಬಳಕೆದಾರ ಹಕ್ಕುಗಳನ್ನು ಬದಲಿಸಲಾಗಿದೆ", - "echo-email-body-default": "{{SITENAME}} ಜಾಲತಾಣದಲ್ಲಿ ನಿಮಗೆ ಈ ಸೂಚನೆ ಇದೆ: $1", "echo-overlay-link": "ಎಲ್ಲ ಸೂಚನೆಗಳು", "echo-overlay-title": "<b>ಸೂಚನೆಗಳು</b>", - "echo-overlay-title-overflow": "<b>ಸೂಚನೆಗಳು</b> ($2 ರಲ್ಲಿ $1 ಓದದವುಗಳನ್ನು ತೋರಿಸಲಾಗುತ್ತಿದೆ)", "echo-mark-all-as-read": "ಎಲ್ಲವನ್ನೂ ಓದಿದೆ ಎಂದು ಆಯ್ಕೆ ಮಾಡಿ", "echo-date-today": "ಇಂದು", "echo-date-yesterday": "ನಿನ್ನೆ", - "echo-load-more-error": "ಹೆಚ್ಚು ಫಲಿತಾಂಶಗಳನ್ನು ಪಡೆಯುವಾಗ ದೋಷವೊಂದು ಆಯಿತು", "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": "ಎಲ್ಲ ಸೂಚನೆಗಳನ್ನು ನೋಡಿ" diff --git a/Echo/i18n/ko.json b/Echo/i18n/ko.json index 3e776676..d83ae241 100644 --- a/Echo/i18n/ko.json +++ b/Echo/i18n/ko.json @@ -1,37 +1,42 @@ { "@metadata": { "authors": [ + "Bluemersen", "Daisy2002", + "Ellif", "Freebiekr", + "Garam", + "HDNua", + "Hwangjy9", "Hym411", + "IRTC1015", + "Jonghaya", "Kwj2772", + "MemphisA5", + "Nuevo Paso", "Priviet", - "관인생략", - "아라", "Revi", - "IRTC1015", - "Hwangjy9", - "HDNua", - "Bluemersen", "Ykhwong", - "Jonghaya", - "Ellif", + "관인생략", "렌즈", - "Garam" + "밝은소년", + "아라" ] }, "echo-desc": "이벤트와 메시지를 사용자에게 알리는 시스템", "prefs-echo": "알림", "prefs-emailsettings": "이메일 옵션", - "prefs-displaynotifications": "표시 옵션", "prefs-echosubscriptions": "다음의 경우에 내게 알림", "prefs-echocrosswiki": "여러 위키의 알림", "prefs-blocknotificationslist": "알림에서 제외된 사용자", + "prefs-mutedpageslist": "문서 링크 알림 표시를 하지 않는 문서", + "echo-mobile-notifications-filter-title": "필터 알림", "echo-pref-send-me": "다음 방식으로 보내기:", "echo-pref-send-to": "다음 주소로 보내기:", "echo-pref-email-format": "이메일 형식:", "echo-pref-web": "웹", "echo-pref-email": "이메일", + "echo-pref-push": "앱", "echo-pref-email-frequency-never": "내게 어떠한 이메일 알림도 보내지 않기", "echo-pref-email-frequency-immediately": "알릴 내용이 있는 대로 개별적으로 알림", "echo-pref-email-frequency-daily": "매일 알림 요약", @@ -39,9 +44,8 @@ "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-pref-notifications-blacklist": "이 사용자의 알림을 표시하지 않습니다. ([[mw:Special:MyLanguage/Help:Notifications#mute|더 알아보기]])", + "echo-pref-notifications-page-linked-title-muted-list": "이 문서에 대한 '문서 링크' 알림을 표시하지 않습니다. ([[mw:Special:MyLanguage/Help:Notifications#mute|더 알아보기]])", "echo-learn-more": "더 알아보기", "echo-log": "공개 기록", "echo-new-messages": "새 메시지가 있습니다", @@ -53,9 +57,14 @@ "echo-category-title-mention-success": "{{PLURAL:$1|언급}} 성공", "echo-category-title-other": "{{PLURAL:$1|기타}}", "echo-category-title-system": "{{PLURAL:$1|시스템}}", + "echo-category-title-system-noemail": "{{PLURAL:$1|시스템}}", + "echo-category-title-system-emailonly": "{{PLURAL:$1|시스템}}", "echo-category-title-user-rights": "{{PLURAL:$1|사용자 권한 바꾸기}}", "echo-category-title-emailuser": "{{PLURAL:$1|다른 사용자로부터의 이메일}}", "echo-category-title-article-reminder": "문서 {{PLURAL:$1|알리미}}", + "echo-category-title-thank-you-edit": "편집 {{PLURAL:$1|이정표}}", + "echo-category-title-watchlist": "주시 중인 문서의 편집", + "echo-category-title-minor-watchlist": "주시 중인 문서의 사소한 편집", "echo-pref-tooltip-edit-user-talk": "내 토론 문서에 누군가가 글이나 답글을 남길 때 내게 알립니다.", "echo-pref-tooltip-article-linked": "누군가가 다른 문서에서 내가 만든 문서를 링크할 때 내게 알립니다.", "echo-pref-tooltip-reverted": "누군가가 편집 취소나 되돌리기 도구를 사용하여 내 편집을 되돌릴 때 내게 알립니다.", @@ -65,9 +74,11 @@ "echo-pref-tooltip-user-rights": "다른 사용자가 내 사용자 권한을 바꿀 때 내게 알립니다.", "echo-pref-tooltip-emailuser": "누군가 나에게 이메일을 보낼 때 내게 알립니다.", "echo-pref-tooltip-article-reminder": "내가 요청할 때 이 문서를 내게 알립니다.", - "echo-error-no-formatter": "알림에 대해 정의된 형식이 없습니다.", + "echo-pref-tooltip-thank-you-edit": "1번째, 10번째, 100번째... 편집을 달성할 때 내게 알립니다.", + "echo-pref-tooltip-watchlist": "누군가가 내 주시문서 목록에 (사소하지 않은) 편집을 하면 내게 알립니다.", + "echo-pref-tooltip-minor-watchlist": "누군가가 내 주시문서 목록의 문서에 사소한 편집을 하면 내게 알립니다.", "notifications": "알림", - "tooltip-pt-notifications-alert": "{{GENDER:|당신}}의 경보", + "tooltip-pt-notifications-alert": "{{GENDER:|당신}}의 중요 알림", "tooltip-pt-notifications-notice": "{{GENDER:|당신의}} 알림", "echo-displaynotificationsconfiguration": "알림 표시 설정", "echo-displaynotificationsconfiguration-summary": "이 위키에서 알림이 어떻게 설정되었는지에 관한 개요입니다.", @@ -81,14 +92,12 @@ "echo-specialpage-section-markread": "그룹을 읽은 것으로 표시", "echo-specialpage-markasread": "알림: 읽은 것으로 표시", "echo-specialpage-markasread-invalid-id": "유효하지 않은 이벤트 ID", + "echo-specialpage-special-help-menu-widget-aria-label": "추가 옵션과 알림 환경 설정입니다.", "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": "알림을 받아올 수 없었습니다.", "echo-api-failure-cross-wiki": "원격 도메인으로의 연결은 거부되었습니다.", "echo-notification-placeholder": "알림이 없습니다.", @@ -99,6 +108,9 @@ "echo-notification-markasunread": "읽지 않은 것으로 표시", "echo-notification-markasread-tooltip": "읽은 것으로 표시", "echo-notification-more-options-tooltip": "옵션 더 보기", + "notification-dynamic-actions-mute-page-linked": "\"$1의 링크 알림 {{GENDER:$2|미표시}}", + "notification-dynamic-actions-unmute-page-linked": "\"$1의 링크 알림 {{GENDER:$2|표시}}", + "notification-dynamic-actions-unmute-page-linked-confirmation": "이제 \"$1\" 문서에 대한 \"문서 링크\" 알림이 표시됩니다", "notification-dynamic-actions-unwatch": "\"$1\"의 새로운 활동 주시를 {{GENDER:$3|해제}}", "notification-dynamic-actions-unwatch-confirmation": "{{GENDER:$3|당신은}} 더 이상 \"$1\" 문서를 주시하지 않습니다", "notification-dynamic-actions-unwatch-confirmation-description": "{{GENDER:$3|당신은}} 언제든지 [$2 이 문서]를 주시할 수 있습니다.", @@ -106,7 +118,7 @@ "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-alert-count": "{{PLURAL:$1|중요 알림 $1개}} 보기", "notification-link-text-expand-notice-count": "{{PLURAL:$1|공지 $1}}개", "notification-link-text-expand-all-count": "$1개의 알림을 보기", "notification-link-text-collapse-all": "접기", @@ -117,14 +129,14 @@ "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-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-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|언급했습니다}}.", @@ -160,11 +172,10 @@ "notification-link-article-reminder": "문서 보기", "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-edit-talk-page-email-subject2": "$1 님이 {{SITENAME}}에서 {{GENDER:$3|당신}}에게 글을 {{GENDER:$2|남겼습니다}}", + "notification-page-linked-email-subject": "{{SITENAME}}에서 {{GENDER:$3|당신}}이 만든 문서가 링크되었습니다", + "notification-reverted-email-subject2": "{{SITENAME}}의 {{GENDER:$3|당신}}의 {{PLURAL:$4|편집}}이 {{GENDER:$2|되돌려졌습니다}}", + "notification-mention-email-subject": "$1님이 {{SITENAME}}에서 {{GENDER:$3|나를}} {{GENDER:$2|언급했습니다}}", "notification-user-rights-email-subject": "{{SITENAME}}에서 당신의 사용자 권한이 바뀌었습니다", "notification-timestamp-ago-seconds": "$1초 전", "notification-timestamp-ago-minutes": "$1분 전", @@ -177,32 +188,29 @@ "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-specialmute-label-mute-notifications": "이 {{GENDER:$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": "{{PLURAL:$1|중요 알림 ($1)|중요 알림 ($1)|100=중요 알림 (99+)}}", "echo-notification-notice": "{{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>", - "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-displaysnippet-title": "새 알림", "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+개의 새 메시지}}가 있습니다.", "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": "모든 알림 보기", - "notification-header-foreign-alert": "{{PLURAL:$5|다른 위키|$5개의 다른 위키}}의 경보 더 보기", + "notification-header-foreign-alert": "{{PLURAL:$5|다른 위키|$5개의 다른 위키}}의 중요 알림 더 보기", "notification-header-foreign-notice": "{{PLURAL:$5|다른 위키|$5개의 다른 위키}}의 더 많은 알림", "notification-header-foreign-all": "$5개의 다른 위키로부터 알림 더 보기" } diff --git a/Echo/i18n/krc.json b/Echo/i18n/krc.json index 24e1292e..a1510a9f 100644 --- a/Echo/i18n/krc.json +++ b/Echo/i18n/krc.json @@ -1,15 +1,14 @@ { "@metadata": { "authors": [ - "Iltever", "Ernác", + "Iltever", "Matěj Suchánek" ] }, "echo-desc": "Къошулуучуланы болууланы юсюнден эмда джазылгъанланы юсюнден система билдириуле", "prefs-echo": "Билдириуле", "prefs-emailsettings": "Эл. почтаны джарашдырыулары", - "prefs-displaynotifications": "Кёрюнюуню джарашдырыулары", "prefs-echosubscriptions": "Бу болууланы юсюнден билдире тур", "echo-pref-send-me": "Меннге джибер:", "echo-pref-send-to": "Былайгъа джибер:", @@ -38,25 +37,20 @@ "echo-pref-tooltip-reverted": "Ким болса да, ызына алыу неда дженгил къайтарыу функция бла мени тюрлендириуюмю ызына алса, меннге билдир.", "echo-pref-tooltip-mention": "Ким болса да, къайсы болса да сюзюу бетде мени къошулуучу бетиме джибериу салса, меннге билдир.", "echo-pref-tooltip-user-rights": "Мени къошулуучу хакъларыма ким болса да тюрлендирсе, билдир", - "echo-error-no-formatter": "Билдириу ючюн форматланыу белгиленмегенди.", "notifications": "Билдириуле", "tooltip-pt-notifications-alert": "{{GENDER:|Билдириуле}}", "echo-specialpage": "Билдириуле", - "echo-anon": "Билдириуле алыр ючюн, [$1 тергеу джазыу къурагъыз] неда [$2 системагъа киригиз].", "echo-none": "Билдириуюгюз болмагъанды.", - "echo-more-info": "Толу билги", - "echo-feedback": "Ызына билдириу", "notification-link-text-view-message": "Билдириуню кёр", "notification-link-text-view-mention": "Сагъыныуну кёр", "notification-link-text-view-changes": "Тюрлениулени кёр", "notification-link-text-view-page": "Бетни кёр", "notification-link-text-view-edit": "Тюрлендириуню кёр", "notification-header-reverted": "{{PLURAL:$4|$3 бетде сизни тюрлендириуюгюзню|$3 бетде сизни тюрлендириулеригизни}} $1 {{GENDER:$2|ызына алды}}.", - "notification-edit-talk-page-email-subject2": "$1 {{GENDER:$1|къошулуучу}} сизге «{{SITENAME}}» сайтда билдириу {{GENDER:$1|къойду}}", - "notification-edit-talk-page-email-batch-body-with-section": "$1 {{GENDER:$1|къошулуучу}}, сюзюу бетигизни «$2» бёлюмюнде (темасында) билдириу {{GENDER:$1|къойду}}.", + "notification-edit-talk-page-email-subject2": "$1 {{GENDER:$2|къошулуучу}} сизге «{{SITENAME}}» сайтда билдириу {{GENDER:$2|къойду}}", "notification-page-linked-email-subject": "«{{SITENAME}}» сайтда сиз къурагъан бетге джибериу салынды", - "notification-reverted-email-subject2": "{{GENDER:$1|Ким эсе да}}, сизни «{{SITENAME}}» сайтда {{PLURAL:$3|тюрлендириуюгюзню|тюрлендириулеригизни}} ызына алды", - "notification-mention-email-subject": "$1, {{SITENAME}} сайтда сизни {{GENDER:$1|сагъынды}}", + "notification-reverted-email-subject2": "{{GENDER:$2|Ким эсе да}}, сизни «{{SITENAME}}» сайтда {{PLURAL:$4|тюрлендириуюгюзню|тюрлендириулеригизни}} ызына алды", + "notification-mention-email-subject": "$1, {{SITENAME}} сайтда сизни {{GENDER:$2|сагъынды}}", "notification-user-rights-email-subject": "Сизни «{{SITENAME}}» сайтда хакъларыгъыз тюрлендирилдиле", "notification-timestamp-ago-seconds": "{{PLURAL:$1|$1 с}}", "notification-timestamp-ago-minutes": "{{PLURAL:$1|$1 мин}}", @@ -69,18 +63,14 @@ "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-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> ($2 {{PLURAL:$2|окъулмагъандан}} $1 саны {{PLURAL:$1|кёргюзюлгенди}})", "echo-mark-all-as-read": "Барысын да окъулгъанлача белгиле", "echo-date-today": "Бюгюн", "echo-date-yesterday": "Тюнене", - "echo-load-more-error": "Къошакъ эсеблени алгъан сагъатда халат чыкъды.", "echo-email-batch-subject-daily": "«{{SITENAME}}» проектде сизни {{PLURAL:$2|джангы билдириуюгюз|джангы билдириулеригиз}} барды", "echo-email-batch-subject-weekly": "«{{SITENAME}}» проектде бу ыйыкъда сизге $2 {{PLURAL:$2|джангы билдириу}} келди.", "echo-email-batch-body-intro-daily": "Салам, $1!\nСизге {{SITENAME}} сайтда бюгюннгю турумну юсюнден къысха хапар.", diff --git a/Echo/i18n/ksh.json b/Echo/i18n/ksh.json index 3ca8a490..b9b68782 100644 --- a/Echo/i18n/ksh.json +++ b/Echo/i18n/ksh.json @@ -1,14 +1,13 @@ { "@metadata": { "authors": [ - "Purodha", - "Matěj Suchánek" + "Matěj Suchánek", + "Purodha" ] }, "echo-desc": "Süßtehm för de Metmaacher ze benohreeschteje övver wat paßehrd es un övver Meddeijlonge un Nohreeschte.", "prefs-echo": "Benohreeschtejonge", "prefs-emailsettings": "Enschtällonge för de <i lang=\"en\" xml:lang=\"en\" dir=\"ltr\">e-mail</i>", - "prefs-displaynotifications": "Enschtällonge för_t Aanzeije", "prefs-echosubscriptions": "Donn mesch enfommehre övver:", "prefs-echocrosswiki": "Meddeijlonge uß anndere Wikkis", "echo-pref-send-me": "Scheck mer:", @@ -23,8 +22,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-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", "echo-log": "Öffentlesch Logbohch", "echo-new-messages": "Do häs neu Meddeijlonge", @@ -42,7 +39,6 @@ "echo-pref-tooltip-mention": "Dom_mesch benohreeschteje, wann eine ene Lengk noh minge Klaafsigg säz.", "echo-pref-tooltip-user-rights": "Dom_mesch benohreeschteje, wann eine ming Rääschde ändert.", "echo-pref-tooltip-emailuser": "Dom_mesch benohreeschteje, wam_mer eijne en <i lang=\"en\" xml:lang=\"en\" dir=\"ltr\" title=\"„de eläktrohnesche Poß“\">e-mail</i> schek.", - "echo-error-no-formatter": "Mer künne di Meddeijlong nit aanzeije.\nMer weße de Manier nit, wih.", "notifications": "Benohreeschtejonge", "tooltip-pt-notifications-alert": "Ding Benohreeschtejonge", "tooltip-pt-notifications-notice": "Ding Benohreeschtejonge{{GENDER:|}}", @@ -64,11 +60,7 @@ "echo-specialpage-pagefilters-title": "Zeläz jedonn", "echo-specialpage-pagefilters-subtitle": "Sigge med onjelässe Meddeijlonge", "notificationsmarkread-legend": "Donn en Meddijlong als jelässe mekkehre", - "echo-anon": "Do moß Desch [$1 aanmälde] udder [$2 enlogge], öm Benohreeschtejonge krijje ze künne.", "echo-none": "De häß kein Meddeijlonge.", - "echo-more-info": "Mih Enfommazjuhne", - "echo-feedback": "Rökmäldong", - "echo-quotation-marks": "„$1“", "echo-api-failure": "Mer kunne kein Medeijonge affrohfe.", "echo-api-failure-cross-wiki": "Der Zohjreff noh ußerhallef wood nit zohjelohße.", "echo-notification-placeholder": "Mer han kein neuje Meddeijlonge.", @@ -103,11 +95,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 {{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-edit-talk-page-email-subject2": "{{GENDER:$2|Dä|Dat|Dä Metmaacher|De|Dat}} „$1“ hät Der op {{GRAMMAR:Dative|{{SITENAME}}}} en Metdeilong jeschek.", "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-reverted-email-subject2": "{{GENDER:$2|Dä|Dat|Dä Metmaacher|De|Dat}} „$1“ häd op {{GRAMMAR:Dative|{{SITENAME}}}} {{PLURAL:$4|en Änderong|$3 Änderonge|kein Änderonge}} vun Der retuhr jemaht.", + "notification-mention-email-subject": "{{GENDER:$2|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.}}", "notification-timestamp-ago-minutes": "{{PLURAL:$1|$1 Min.}}", @@ -120,8 +111,6 @@ "notification-inbox-filter-read": "Jelässe", "notification-inbox-filter-unread": "Nit jelässe", "notification-inbox-filter-all": "All", - "echo-email-body-default": "Do häss_en neue Meddeijlong op {{GRAMMAR:dative|{{ucfirst:{{SITENAME}}}}}}:\n\n$1", - "echo-email-footer-default": "$2\n\nDonn op:\n{{canonicalurl:{{#special:Preferences}}#mw-prefsection-echo}}\nenschtälle, wat mer Der schecke sulle.\n\n$1", "echo-email-html-footer-preference-link-text": "Lohr noh Ding Ennschschtällonge", "echo-notification-alert": "{{PLURAL:$1|Eine Henwihß|$1 Henwihse|Keine Henwihß|100=Övver 99 Henwihse}}", "echo-notification-notice": "{{PLURAL:$1|Benohreeschtejong ($1)|Benohreeschtejonge ($1)|100=Benohreeschtejonge (99+)}}", @@ -129,12 +118,10 @@ "echo-notification-notice-text-only": "Meddeijlonge", "echo-overlay-link": "Alle Meddeijlonge", "echo-overlay-title": "<b>Meddeijlonge</b>", - "echo-overlay-title-overflow": "<b>Meddeijlonge</b> ($1 vun $2 wähde aanjezeijsch){{PLURAL:$1|}}", "echo-mark-all-as-read": "Alle als jelässe makehre", "echo-mark-wiki-as-read": "Makkehr alles als jelässe em usjesöhk Wikki: $1", "echo-date-today": "Hück", "echo-date-yesterday": "Jäßtere", - "echo-load-more-error": "Ene Fähler es opjetrodde beim Versohch, mih ze holle vun dämm wadd_erus kohm.", "echo-email-batch-bullet": "•", "echo-email-batch-subject-daily": "Do häs {{PLURAL:$2|en neuje Meddeijlong|$2 neuje Meddeijlong|kein neuje Meddeijlonge}} {{GRAMMAR:em|{{ucfirst:{{SITENAME}}}}}}.", "echo-email-batch-subject-weekly": "Do häs en dä Woch {{PLURAL:$2|en neuje Meddeijlong|$2 neuje Meddeijlong|kein neuje Meddeijlonge}} {{GRAMMAR:em|{{ucfirst:{{SITENAME}}}}}}.", diff --git a/Echo/i18n/ksw.json b/Echo/i18n/ksw.json new file mode 100644 index 00000000..a53ad270 --- /dev/null +++ b/Echo/i18n/ksw.json @@ -0,0 +1,8 @@ +{ + "@metadata": { + "authors": [ + "SawJaemin" + ] + }, + "tooltip-pt-notifications-alert": "{{GENDER:|န}} ဟ့ၣ်ပလီၢ်" +} diff --git a/Echo/i18n/ku-latn.json b/Echo/i18n/ku-latn.json index 7d7fb75f..7d2b9511 100644 --- a/Echo/i18n/ku-latn.json +++ b/Echo/i18n/ku-latn.json @@ -1,8 +1,8 @@ { "@metadata": { "authors": [ - "George Animal", "Bikarhêner", + "George Animal", "Ghybu" ] }, diff --git a/Echo/i18n/la.json b/Echo/i18n/la.json index 94977be2..dceb50b9 100644 --- a/Echo/i18n/la.json +++ b/Echo/i18n/la.json @@ -3,15 +3,14 @@ "authors": [ "Amire80", "Autokrator", - "UV", "Laurentianus", - "Lesgles" + "Lesgles", + "UV" ] }, "echo-desc": "Modus nuntiorum mittendarum", "prefs-echo": "Nuntia", "prefs-emailsettings": "Modi nuntiorum", - "prefs-displaynotifications": "Nuntiorum modi", "prefs-echosubscriptions": "Haec indicare", "echo-pref-send-me": "Mihi mittantur:", "echo-pref-send-to": "Mittantur per:", @@ -36,26 +35,19 @@ "notifications": "Nuntia", "tooltip-pt-notifications-alert": "Conclamationes ad te pertinentes", "echo-specialpage": "Nuntia", - "echo-anon": "Ut nuntia accipere possis, [$1 nomen tibi impones] aut [$2 nomen tuum des] rogamus.", "echo-none": "Nulla nuntia.", - "echo-more-info": "Plura legere", - "echo-feedback": "Responsa", "notification-link-text-view-message": "Nuntium spectare", "notification-link-text-view-mention": "Mentionem spectare", "notification-link-text-view-changes": "Mutata ostendere", "notification-link-text-view-page": "Vide paginam", "notification-link-text-view-edit": "Vide recensionem", "notification-page-linked-email-subject": "Pagina tua annexa est apud {{grammar:accusative|{{SITENAME}}}}", - "notification-mention-email-subject": "$1 tui {{GENDER:$1|mentionem fecit}} apud {{grammar:accusative|{{SITENAME}}}}", - "echo-email-body-default": "Habes nova nuntia apud {{grammar:accusative|{{SITENAME}}}}:\n\n$1", - "echo-email-footer-default": "$2\n\nAd deligendum, quales litterae electronicae tibi mittantur, vide modos tuos:\n{{canonicalurl:{{#special:Preferences}}#mw-prefsection-echo}}\n\n$1", + "notification-mention-email-subject": "$1 tui {{GENDER:$2|mentionem fecit}} apud {{grammar:accusative|{{SITENAME}}}}", "echo-overlay-link": "Omnia nuntia", "echo-overlay-title": "<b>Nuntia</b>", - "echo-overlay-title-overflow": "<b>{{PLURAL:$1|Nuntium|Nuntia}}</b> (monstrans $1 de $2 inlectis)", "echo-mark-all-as-read": "Omnia perlecta indicare", "echo-date-today": "Hodie", "echo-date-yesterday": "Heri", - "echo-load-more-error": "Error in plura eventa quaerendo.", "echo-email-batch-subject-daily": "Habes {{PLURAL:$2|novum nuntium|nova nuntia}} apud {{grammar:accusative|{{SITENAME}}}}", "echo-email-batch-subject-weekly": "Habes {{PLURAL:$2|novum nuntium|nova nuntia}} apud {{grammar:accusative|{{SITENAME}}}} hac hebdomada", "echo-email-batch-body-intro-daily": "Salve $1,\nHoc est summarium actionum hodiernarum apud {{grammar:accusative|{{SITENAME}}}}.", diff --git a/Echo/i18n/lad.json b/Echo/i18n/lad.json index 9631fc29..3c29deef 100644 --- a/Echo/i18n/lad.json +++ b/Echo/i18n/lad.json @@ -2,8 +2,8 @@ "@metadata": { "authors": [ "Menachem.Moreira", - "Universal Life", - "StevenJ81" + "StevenJ81", + "Universal Life" ] }, "prefs-emailsettings": "Opsyones del korreo elektroniko", diff --git a/Echo/i18n/lb.json b/Echo/i18n/lb.json index 9e4b87d9..5d8a5520 100644 --- a/Echo/i18n/lb.json +++ b/Echo/i18n/lb.json @@ -1,16 +1,15 @@ { "@metadata": { "authors": [ - "Robby", - "Soued031", + "Les Meloures", "Macofe", - "Les Meloures" + "Robby", + "Soued031" ] }, "echo-desc": "System fir Benotzer iwwer Evenementer a Messagen z'informéieren", "prefs-echo": "Notifikatiounen", "prefs-emailsettings": "E-Mail-Astellungen", - "prefs-displaynotifications": "Optioune vum Affichage", "prefs-echosubscriptions": "Mech iwwer dës Evenementer informéieren", "prefs-echocrosswiki": "Cross-Wiki Notifikatiounen", "prefs-blocknotificationslist": "Verstoppt Benotzer", @@ -19,6 +18,7 @@ "echo-pref-email-format": "E-Mail-Format:", "echo-pref-web": "Web", "echo-pref-email": "E-Mail", + "echo-pref-push": "Appen", "echo-pref-email-frequency-never": "Schéckt mir keng E-Mail-Notifikatiounen", "echo-pref-email-frequency-immediately": "Individuell Notifikatiounen sou wéi s'erakommen", "echo-pref-email-frequency-daily": "All Dag e Resumé vun den Notifikatiounen", @@ -27,8 +27,6 @@ "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: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", "echo-log": "Ëffentlecht Logbuch", "echo-new-messages": "Dir hutt nei Messagen", @@ -40,6 +38,8 @@ "echo-category-title-mention-success": "{{PLURAL:$1|Mentioun|Mentioune}} mat Succès", "echo-category-title-other": "{{PLURAL:$1|Aneren|Anerer}}", "echo-category-title-system": "{{PLURAL:$1|System}}", + "echo-category-title-system-noemail": "{{PLURAL:$1|System}}", + "echo-category-title-system-emailonly": "{{PLURAL:$1|System}}", "echo-category-title-user-rights": "{{PLURAL:$1|Ännerung vu Benotzerrechter|Ännerunge vu Benotzerrechter}}", "echo-category-title-emailuser": "{{PLURAL:$1|E-Mail vun engem anere Benotzer|E-Maile vun anere Benotzer}}", "echo-category-title-article-reminder": "Säit {{PLURAL:$1|Erënnerung|Erënnerungen}}", @@ -52,7 +52,6 @@ "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}} Meldungen", "tooltip-pt-notifications-notice": "{{GENDER:|Är}} Notifikatiounen", @@ -63,7 +62,6 @@ "echo-displaynotificationsconfiguration-sorting-by-section-legend": "A Wat fir een Abschnitt all Typ vun Notifikatioun azortéiert gëtt", "echo-displaynotificationsconfiguration-available-notification-methods-header": "Erlaabt Methode fir Notifikatiounen", "echo-displaynotificationsconfiguration-available-notification-methods-by-category-legend": "Wat fir eng Notifikatunsmethode fir jidder Kategorie ënnerstëtzt ginn", - "echo-displaynotificationsconfiguration-available-notification-methods-by-type-legend": "Wat fir eng Notifikatiounsmethode gi fir jiddwer Typ ënnerstëtzt; bezitt sech nëmmen op Typpe vu Kategorien déi an den Astellunge verstoppt sinn", "echo-displaynotificationsconfiguration-enabled-default-header": "Als Standard aktivéiert", "echo-displaynotificationsconfiguration-enabled-default-existing-users-legend": "Lëscht vun de Benotzer", "echo-displaynotificationsconfiguration-enabled-default-new-users-legend": "Nei Benotzer", @@ -73,22 +71,19 @@ "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-pagefilterwidget-aria-label": "No Wiki a Säitentitel filteren", "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 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-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-popup-loginrequired": "Loggt Iech wgl. a fir Är Notifikatiounen ze gesinn.", "echo-notification-markasread": "Als gelies markéieren", "echo-notification-markasunread": "Als net-gelies markéieren", "echo-notification-markasread-tooltip": "Als gelies markéieren", @@ -152,12 +147,11 @@ "notification-link-article-reminder": "Säit weisen", "notification-header-reverted": "Är {{PLURAL:$4|Ännerung op <strong>$3</strong> gouf|Ännerungen op <strong>$3</strong> goufen}} {{GENDER:$2|zréckgesat}}.", "notification-header-emailuser": "$1 huet {{GENDER:$2|Iech}} eng E-Mail geschéckt.", - "notification-edit-talk-page-email-subject2": "$1 {{GENDER:$1|huet}} Iech en neie Message op Ärer Diskussiounssäit op {{SITENAME}} hannerlooss", - "notification-edit-talk-page-email-batch-body-with-section": "$1 {{GENDER:$1|huet}} ee Message op Är Diskussiounssäit op \"$2\" geschriwwen.", - "notification-page-linked-email-subject": "Eng Säit déi Dir op {{SITENAME}} ugeluecht hutt gouf verlinkt", - "notification-reverted-email-subject2": "Är {{PLURAL:$3|Ännerung|Ännerungen}} op {{SITENAME}} {{PLURAL:$3|gouf|goufen}} {{GENDER:$1|zréckgesat}}", - "notification-mention-email-subject": "$1 {{GENDER:$1|huet}} {{GENDER:$2|Iech}} op {{SITENAME}} ernimmt", - "notification-user-rights-email-subject": "Är Benotzerrechter op {{SITENAME}} hu geännert", + "notification-edit-talk-page-email-subject2": "$1 {{GENDER:$2|huet}} Iech en neie Message op Ärer Diskussiounssäit op {{SITENAME}} hannerlooss", + "notification-page-linked-email-subject": "Eng Säit déi {{GENDER:$3|Dir}} op {{SITENAME}} ugeluecht hutt gouf verlinkt", + "notification-reverted-email-subject2": "{{GENDER:$3|Är}} {{PLURAL:$4|Ännerung|Ännerungen}} op {{SITENAME}} {{PLURAL:$4|gouf|goufen}} {{GENDER:$2|zréckgesat}}", + "notification-mention-email-subject": "$1 {{GENDER:$2|huet}} {{GENDER:$3|Iech}} op {{SITENAME}} ernimmt", + "notification-user-rights-email-subject": "{{GENDER:$3|Är}} Benotzerrechter op {{SITENAME}} hu geännert", "notification-timestamp-ago-seconds": "{{PLURAL:$1|En Sekonn|$1 Sekonnen}}", "notification-timestamp-ago-minutes": "{{PLURAL:$1|Eng Minutt|$1 Minutten}}", "notification-timestamp-ago-hours": "{{PLURAL:$1|Eng Stonn|$1 Stonnen}}", @@ -169,9 +163,7 @@ "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", - "echo-email-footer-default": "$2\n\nFir ze kontrolléiere wat fir eng E-Maile mir Iech schécken, kuckt Är Preferenzen no:\n{{canonicalurl:{{#special:Preferences}}#mw-prefsection-echo}}\n\n$1", + "echo-specialmute-label-mute-notifications": "Notifikatioune vun dësem Benotzer net méi weisen", "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.", @@ -181,13 +173,12 @@ "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 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-displaysnippet-title": "Nei Notifikatioun", "echo-date-today": "Haut", "echo-date-yesterday": "Gëschter", - "echo-load-more-error": "Am Sichen no méi Resultater ass e Feeler geschitt.", "notification-bundle-header-edit-user-talk-v2": "{{PLURAL:$1|Een neie Message|$1 nei Messagen|100=méi wéi 99 Messagen}} op <strong>{{GENDER:$3|Ärer}} Diskussiounssäit</strong>.", "echo-email-batch-subject-daily": "Dir hutt haut {{PLURAL:$2|eng nei Notifikatioun|nei Notifikatiounen}} op {{SITENAME}}", "echo-email-batch-subject-weekly": "Dir hutt dës Woch {{PLURAL:$2|eng nei Notifikatioun|nei Notifikatiounen}} op {{SITENAME}}", diff --git a/Echo/i18n/lij.json b/Echo/i18n/lij.json index 358433ea..defe51a0 100644 --- a/Echo/i18n/lij.json +++ b/Echo/i18n/lij.json @@ -8,9 +8,13 @@ "echo-desc": "Scistema pe notificâ a-i utenti messaggi e eventi", "prefs-echo": "Notiffiche", "prefs-emailsettings": "Opçioin e-mail", - "prefs-displaynotifications": "Opçioin de vixualizaçion", "prefs-echosubscriptions": "Mandime 'na notiffica insce questi eventi", "prefs-echocrosswiki": "Notiffiche cross-wiki", + "prefs-blocknotificationslist": "Utenti amutii", + "prefs-echopollupdates": "Notiffiche in diretta", + "echo-mobile-notifications-filter-title": "Filtrâ e notiffiche", + "echo-pref-show-poll-updates": "Mostra e notiffiche amanaman ch'arivan", + "echo-pref-show-poll-updates-help": "Mostra o nummero de notiffiche da arvî inta bara do tittolo, e mostra 'n squarso de ogni notiffica non apen-a a l'ariva.", "echo-pref-send-me": "Mandime:", "echo-pref-send-to": "Manda a:", "echo-pref-email-format": "Formato e-mail:", @@ -23,8 +27,8 @@ "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-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-pref-notifications-blacklist": "No mostrâ e notiffiche de questi utenti ([[mw:Special:MyLanguage/Help:Notifications#mute|pe saveine de ciu]])", + "echo-pref-dont-email-read-notifications": "No inciode e notiffiche lezue inte email de sonto", "echo-learn-more": "Pe saveine de ciu", "echo-log": "Registro pubbrico", "echo-new-messages": "Ti g'hæ di noeuvi messaggi", @@ -36,17 +40,26 @@ "echo-category-title-mention-success": "{{PLURAL:$1|Mençion|Mençioin}} corrette", "echo-category-title-other": "{{PLURAL:$1|Atro}}", "echo-category-title-system": "{{PLURAL:$1|Scistema}}", + "echo-category-title-system-noemail": "{{PLURAL:$1|Scistema}}", + "echo-category-title-system-emailonly": "{{PLURAL:$1|Scistema}}", "echo-category-title-user-rights": "{{PLURAL:$1|Modiffica|Modiffiche}} driti utente", "echo-category-title-emailuser": "{{PLURAL:$1|E-mail da 'n atro utente|E-mail da di atri utenti}}", + "echo-category-title-article-reminder": "Page {{PLURAL:$1|tegnitamente}}", + "echo-category-title-thank-you-edit": "Modiffica {{PLURAL:$1|a tacca|e tacche}}", + "echo-category-title-watchlist": "Modiffica de 'na paggina sotta oservassion", + "echo-category-title-minor-watchlist": "Modiffica menô de 'na paggina sotta oservassion", "echo-pref-tooltip-edit-user-talk": "Notiffichime quande quarchidun me scrive un messaggio ò risponde inta mæ paggina de discuscion.", - "echo-pref-tooltip-article-linked": "Avvixime quande quarcun o conliga, da 'na voxe, una paggina che ho creou.", + "echo-pref-tooltip-article-linked": "Avvixime quande quarchedun o l'ingancia 'na paggina che ho creou da 'n'atra paggina.", "echo-pref-tooltip-reverted": "Avvixime quande quarcun o l'annulla 'na modiffica ch'ho fatto, doeuviando e fonçioin anulla ò rollback.", "echo-pref-tooltip-mention": "Avixime quande quarcun o l'ingancia a mæ paggina utente.", "echo-pref-tooltip-mention-failure": "Avvixime quande no ho posciuo inviâ 'na mençion a quarchedun.", "echo-pref-tooltip-mention-success": "Avvixime quande invio 'na mençion a quarchedun.", "echo-pref-tooltip-user-rights": "Avvixime quande quarcun o modiffica i mæ driti d'utente.", "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", + "echo-pref-tooltip-article-reminder": "Mandime di avixi insce questa paggina quande o domando.", + "echo-pref-tooltip-thank-you-edit": "Avvixime quande arivo a-a 1ª, 10ª, 100ª... modiffica.", + "echo-pref-tooltip-watchlist": "Mandime 'n avizo quande quarchedun o fa 'na modiffica (non menô) a 'na paggina che tegno sotta oservassion.", + "echo-pref-tooltip-minor-watchlist": "Mandime 'n avizo quande quarchedun o fa 'na modiffica menô a 'na paggina che tegno sotta oservassion.", "notifications": "Notiffiche", "tooltip-pt-notifications-alert": "{{GENDER:|I teu}} avîsi", "tooltip-pt-notifications-notice": "{{GENDER:|I teu}} avixi", @@ -57,7 +70,6 @@ "echo-displaynotificationsconfiguration-sorting-by-section-legend": "Inte quæ seçion l'è amerçou ogni tipo de notiffica", "echo-displaynotificationsconfiguration-available-notification-methods-header": "Mettodi de notifica consentii", "echo-displaynotificationsconfiguration-available-notification-methods-by-category-legend": "Quæ mettodi de notiffica son supportæ pe ogni categoria", - "echo-displaynotificationsconfiguration-available-notification-methods-by-type-legend": "Quæ mettodi de notiffica son supportæ pe ogni tipo; a s'apprica solo a-i tipi che, inte categorie, son nascosti da-e preferençe", "echo-displaynotificationsconfiguration-enabled-default-header": "Abilitou pe impostaçion predefinia", "echo-displaynotificationsconfiguration-enabled-default-existing-users-legend": "Utenti existenti", "echo-displaynotificationsconfiguration-enabled-default-new-users-legend": "Noeuvi utenti", @@ -67,14 +79,12 @@ "echo-specialpage-section-markread": "Marca groppo comme lezuo", "echo-specialpage-markasread": "Notiffica: marca comme lezua", "echo-specialpage-markasread-invalid-id": "ID evento non vallido", + "echo-specialpage-pagefilterwidget-aria-label": "Filtro da wiki e tittolo da paggina", "echo-specialpage-pagination-numnotifications": "$1 {{PLURAL:$1|notiffica|notiffiche}}", "echo-specialpage-pagefilters-title": "Attivitæ reçente", "echo-specialpage-pagefilters-subtitle": "Paggine con notiffiche non lezue", "notificationsmarkread-legend": "Contrasegna a notiffica comme lezua", - "echo-anon": "Pe riçeive e notiffiche, [$1 registrite] ò [$2 accedi].", "echo-none": "Notiffiche no ti ghe n'hæ .", - "echo-more-info": "Atre informaçioin", - "echo-feedback": "Commenti", "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'è.", @@ -103,9 +113,12 @@ "notification-link-text-view-page": "Amia a paggina", "notification-header-edit-user-talk": "$1 {{GENDER:$2|o|a}} l'ha lasciou un messaggio insciâ <strong>{{GENDER:$3|to}} paggina de discuscion</strong>.", "notification-header-edit-user-talk-with-section": "$1 {{GENDER:$2|o|a}} l'ha lasciou un messaggio inta <strong>{{GENDER:$3|to}} paggina de discuscion</strong> in \"<strong>$4</strong>\".", + "notification-compact-header-edit-user-talk": "$1 {{GENDER:$3|o|a}} {{GENDER:$2|}} t'ha lasciou un messaggio.", + "notification-compact-header-edit-user-talk-with-section": "$1 {{GENDER:$3|o|a}} {{GENDER:$2|}} t'ha lasciou un messaggio in \"<strong>$4</strong>\".", "notification-header-page-linked": "L'è stæto creou un ingancio da <strong>$4</strong> a <strong>$3</strong>.", "notification-compact-header-page-linked": "Conligâ da <strong>$1</strong>.", "notification-bundle-header-page-linked": "L'è stæto creou di inganci da {{PLURAL:$5||$5 paggine|100=ciù de 99 pagine}} a <strong>$3</strong>.", + "notification-header-article-reminder": "Una paggina che {{GENDER:$2|}} ti t'hæ domandou che te foise aregordâ a l'è in <strong>$3</strong>", "notification-link-text-what-links-here": "Tutti i inganci a questa paggina", "notification-header-mention-other": "$1 {{GENDER:$2|o|a}} t'ha {{GENDER:$3|mençunou|mençunâ|mençunou/â}} inte <strong>$4</strong> in \"<strong>$5</strong>\".", "notification-header-mention-other-nosection": "$1 {{GENDER:$2|o|a}} t'ha {{GENDER:$3|mençunou|mençunâ|mençunou/â}} inte <strong>$4</strong>.", @@ -117,12 +130,82 @@ "notification-header-mention-article-talkpage-nosection": "$1 {{GENDER:$2|o|a}} t'ha {{GENDER:$3|mençunou|mençunâ|mençunou/â}} inta åaggina de discuscion de <strong>$4</strong>.", "notification-header-mention-failure-user-unknown": "{{GENDER:$2|A to}} mençion de <strong>$3</strong> a no l'è stæta inviâ perchè l'utente o no l'è stæto trovou.", "notification-header-mention-failure-user-anonymous": "{{GENDER:$2|A to}} mençion de <strong>$3</strong> a no l'è stæta inviâ perché l'utente o l'è anonnimo.", - "notification-header-mention-failure-too-many": "{{GENDER:$2|E to}} mençioin no son stæte inviæ perché han superou o limmite de $3.", + "notification-header-mention-failure-too-many": "{{GENDER:$2|T'hæ mensunou}} ciù de $3 {{PLURAL:$3|utente|utenti}}. Tutte e mensuin ch'han superou sto limmite no son stæte inviæ.", "notification-header-mention-failure-bundle": "{{PLURAL:$3|Una mençion|$3 mençioin}} che {{GENDER:$2|t'hæ fæto}} inta paggina de discuscion <strong>$4</strong> {{PLURAL:$3|a no poeu ese inviâ| no poeuan ese inviæ}}.", "notification-compact-header-mention-failure-user-unknown": "<strong>O nomme utente o no l'existe:</strong> $1", "notification-compact-header-mention-failure-user-anonymous": "<strong>I IP no poeuan ese mençunæ:</strong> $1", "notification-header-mention-success": "{{GENDER:$2|A to}} mençion de <strong>$3</strong> a l'è stæta inviâ.", "notification-header-mention-success-bundle": "{{PLURAL:$3|Una mençion|$3 mençioin}} che {{GENDER:$2|t'hæ fæto}} inta paggina de discuscion <strong>$4</strong> {{PLURAL:$3|a l'è stæta inviâ| son stæte inviæ}}.", + "notification-compact-header-mention-success": "<strong>{{GENDER:$2|T'hæ mensunou}}:</strong> $3", + "notification-header-mention-status-bundle": "{{PLURAL:$3|Una notiffica|$3 notiffiche}} riguardo a de mensuin che {{GENDER:$2|t'hæ fæto}} inta paggina de discuscion <strong>$4</strong>: $5 non {{PLURAL:$5|inviâ|inviæ}}, $6 {{PLURAL:$6|inviâ|inviæ}}.", + "notification-header-user-rights-add-only": "I to driti utente son stæti {{GENDER:$1|modificæ}}. T'ê {{GENDER:$4|stæto azonto|sæta azonta}} a: $2.", + "notification-header-user-rights-remove-only": "I {{GENDER:$4|to}} driti utente son stæti {{GENDER:$1|modificæ}}. No t'ê ciù un membro de: $2.", + "notification-header-user-rights-add-and-remove": "I to driti utente son stæti {{GENDER:$1|modificæ}}. T'ê {{GENDER:$6|stæto azonto|stæta azonta}} a: $2. No t'ê ciù un membro de: $4.", + "notification-header-user-rights-expiry-change": "O terme da {{GENDER:$4|to}} apartenensa {{PLURAL:$3|a-o segoente groppo|a-i segoenti groppi}} a l'è stæta {{GENDER:$1|modificâ}}: $2.", + "notification-header-welcome": "{{GENDER:$2|Benvegnuo|Benvegnua|Benvegnuo/a}} a {{SITENAME}}, $1! Semmo contenti {{GENDER:$2|d'aveite}} chie.", + "notification-header-mention-summary": "$1 {{GENDER:$2|o|a}} t'ha {{GENDER:$3|mençunou|mençunâ|mençunou/â}} inte 'n ogetto de modifica insce <strong>$4</strong>.", + "notification-header-watchlist-changed": "$1 {{GENDER:$2|o|a}} l'ha cangiou <strong>$3</strong>, a paggina inta {{GENDER:$4|to}} lista d'oservassion{{PLURAL:$5||, $5 votte}}.", + "notification-header-watchlist-created": "$1 {{GENDER:$2|o|a}} l'ha creou <strong>$3</strong>, 'na paggina inta {{GENDER:$4|to}} lista d'oservassion{{PLURAL:$5||, $5 votte}}.", + "notification-header-watchlist-deleted": "$1 {{GENDER:$2|o|a}} l'ha scassou <strong>$3</strong>, 'na paggina inta {{GENDER:$4|to}} lista d'oservassion{{PLURAL:$5||, $5 votte}}.", + "notification-header-watchlist-moved": "$1 {{GENDER:$2|o|a}} l'ha mesciou <strong>$3</strong>, 'na paggina inta {{GENDER:$4|to}} lista d'oservassion{{PLURAL:$5||, $5 votte}}.", + "notification-header-watchlist-restored": "$1 {{GENDER:$2|o|a}} l'ha ripristinou <strong>$3</strong>, 'na paggina inta {{GENDER:$4|to}} lista d'oservassion{{PLURAL:$5||, $5 votte}}.", + "notification-header-watchlist-multiuser-changed": "<strong>$1</strong>, 'na paggina inta {{GENDER:$2|to}} lista d'oservassion, a l'è stæta cangiâ $3 {{PLURAL:$3|votta|votte}}.", + "notification-header-watchlist-multiuser-created": "<strong>$1</strong>, 'na paggina inta {{GENDER:$2|to}} lista d'oservassion, a l'è stæta creâ $3 {{PLURAL:$3|votta|votte}}.", + "notification-header-watchlist-multiuser-deleted": "<strong>$1</strong>, 'na paggina inta {{GENDER:$2|to}} lista d'oservassion, a l'è stæta scassâ $3 {{PLURAL:$3|votta|votte}}.", + "notification-header-watchlist-multiuser-moved": "<strong>$1</strong>, 'na paggina inta {{GENDER:$2|to}} lista d'oservassion, a l'è stæta mesciâ $3 {{PLURAL:$3|votta|votte}}.", + "notification-header-watchlist-multiuser-restored": "<strong>$1</strong>, 'na paggina inta {{GENDER:$2|to}} lista d'oservassion, a l'è stæta ripristinâ $3 {{PLURAL:$3|votta|votte}}.", "notification-welcome-linktext": "Benvegnuo", - "echo-overlay-link": "Tutte e notiffiche" + "notification-header-thank-you-1-edit": "T'hæ apen-a fæto a to primma modiffica; grassie e {{GENDER:$2|benvegnuo|benvegnua|benvegnuo/a}}!", + "notification-header-thank-you-10-edit": "{{GENDER:$2|}} T'hæ apen-a fæto a to dexima modiffica; grassie e continnoa coscie!", + "notification-header-thank-you-100-edit": "{{GENDER:$2|}} T'hæ apen-a fæto a to sentexima modiffica; grassie mille!", + "notification-header-thank-you-1000-edit": "T'hæ apen-a fæto a to milexima modiffica; grassie pe ese {{GENDER:$2|un gran contributô|una gran contributoa}}!", + "notification-header-thank-you-10000-edit": "{{GENDER:$2|}} T'hæ apen-a fæto a to dexemilexima modiffica; grassie mille!", + "notification-header-thank-you-100000-edit": "T'hæ apen-a fæto a to sentomilexima modiffica; grassie pe-o {{GENDER:$2|}} to incredibbile contributo!", + "notification-header-thank-you-1000000-edit": "T'hæ apen-a fæto a to milionexima modiffica; grassie pe-o {{GENDER:$2|}} to abarlugante contributo!", + "notification-link-thank-you-edit": "A {{GENDER:$1|to}} modiffica", + "notification-link-text-view-edit": "Amia a modiffica", + "notification-link-article-reminder": "Amia a paggina", + "notification-header-reverted": "{{PLURAL:$4|A to modiffica|E to modiffiche}} insce <strong>$3</strong> {{PLURAL:$4|a l'è stæta anulâ|son stæte anulæ}}{{GENDER:$2|}}", + "notification-header-emailuser": "$1 {{GENDER:$2|o|a}}t'ha mandou 'n'email.", + "notification-edit-talk-page-email-subject2": "$1 {{GENDER:$2|o|a}} {{GENDER:$3|}}t'ha lasciou un messaggio in {{SITENAME}}", + "notification-page-linked-email-subject": "'Na paggina che {{GENDER:$3|t'hæ creou}} a l'è stæta conligâ a {{SITENAME}}", + "notification-reverted-email-subject2": "{{PLURAL:$4|A {{GENDER:$3|to}} modiffica a l'è stæta anulâ|E to modiffiche son stæte anulæ}} {{GENDER:$2|insce}} {{SITENAME}}", + "notification-mention-email-subject": "$1 {{GENDER:$2|o|a}} t'ha {{GENDER:$3|mensunou|mensunâ|mensunou/â}} insce {{SITENAME}}", + "notification-user-rights-email-subject": "I {{GENDER:$3|to}} driti utente son stæti modificæ insce {{SITENAME}}", + "notification-timestamp-ago-seconds": "{{PLURAL:$1|$1 s}}", + "notification-timestamp-ago-minutes": "$1 {{PLURAL:$1|min}}", + "notification-timestamp-ago-hours": "$1 {{PLURAL:$1|oa|oe}}", + "notification-timestamp-ago-days": "$1 {{PLURAL:$1|g|gg}}", + "notification-timestamp-ago-months": "$1 {{PLURAL:$1|meize|meixi}}", + "notification-timestamp-ago-years": "$1 {{PLURAL:$1|anno|anni}}", + "notification-timestamp-today": "Ancoeu", + "notification-timestamp-yesterday": "Vei", + "notification-inbox-filter-read": "Lezue", + "notification-inbox-filter-unread": "Non lezue", + "notification-inbox-filter-all": "Tutte", + "echo-specialmute-label-mute-notifications": "Amutisci e notiffiche da questo utente", + "echo-email-plain-footer": "Pe controlâ quæ email {{GENDER:$1|te}} vegnan inviæ, veriffica e {{GENDER:$1|to}} preferense:", + "echo-email-html-footer-preference-link-text": "veriffica e {{GENDER:$1|to}} preferense", + "echo-email-html-footer-with-link": "Pe controlâ quæ email {{GENDER:$2|te}} te mandemmo, $1.", + "echo-notification-alert": "{{PLURAL:$1|Alerta ($1)|Alerte ($1)|100=Alerte (99+)}}", + "echo-notification-notice": "{{PLURAL:$1|Avizo ($1)|Avixi ($1)|100=Avixi (99+)}}", + "echo-notification-alert-text-only": "Alerte", + "echo-notification-notice-text-only": "Avixi", + "echo-overlay-link": "Tutte e notiffiche", + "echo-overlay-title": "<b>Notiffiche</b>", + "echo-mark-all-as-read": "Marchili tutti comme lezui", + "echo-mark-all-as-read-confirmation": "$1 {{PLURAL:$1|notiffica marcâ comme lezua|notiffiche marcæ comme lezue}}", + "echo-mark-wiki-as-read": "Marchile tutte comme lezue into wiki selessionou: $1", + "echo-displaysnippet-title": "Noeuva notiffica", + "echo-date-today": "Ancoeu", + "echo-date-yesterday": "Vei", + "notification-bundle-header-edit-user-talk-v2": "{{PLURAL:$1|Un noeuvo messaggio|$1 noeuvi messaggi|100=Ciù chi 99 noeuvi messaggi}} in sciâ <strong>{{GENDER:$3|to}} paggina de discuscion</strong>.", + "echo-email-batch-subject-daily": "Ti g'hæ {{PLURAL:$2|'na noeuva notiffica|noeuve notiffiche}} in {{SITENAME}}", + "echo-email-batch-subject-weekly": "Sta seteman-a ti g'hæ {{PLURAL:$2|'na noeuva notiffica|noeuve notiffiche}} in {{SITENAME}}", + "echo-email-batch-body-intro-daily": "Ciao $1,\nTechì 'na scintexi di attivitæ d'ancoeu in {{SITENAME}}.", + "echo-email-batch-body-intro-weekly": "Ciao $1,\nTechì 'na scintexi di attivitæ de sta seteman-a in {{SITENAME}}.", + "echo-email-batch-link-text-view-all-notifications": "Amia tutte e notiffiche", + "notification-header-foreign-alert": "Di atre alerte da {{PLURAL:$5|'n atra wiki|di atre $5 wiki}}", + "notification-header-foreign-notice": "Di atri avixi da {{PLURAL:$5|'n atra wiki|di atre $5 wiki}}", + "notification-header-foreign-all": "Di atre notificassuin da {{PLURAL:$5|'n atra wiki|di atre $5 wiki}}" } diff --git a/Echo/i18n/lki.json b/Echo/i18n/lki.json index fcc27217..781911c5 100644 --- a/Echo/i18n/lki.json +++ b/Echo/i18n/lki.json @@ -2,14 +2,13 @@ "@metadata": { "authors": [ "Hosseinblue", - "Reza1615", - "Lakzon" + "Lakzon", + "Reza1615" ] }, "echo-desc": "سامانهٔ آگاهسازی کاربران از رویدادها و پیامها", "prefs-echo": "اعلانها", "prefs-emailsettings": "تنظیمات ایمیل", - "prefs-displaynotifications": "گزینههای نمایش", "prefs-echosubscriptions": "مرا از این رویدادها آگاه کن", "echo-pref-send-me": "برایم فرستاده شود:", "echo-pref-send-to": "فرستادهشود به:", @@ -38,14 +37,10 @@ "echo-pref-tooltip-mention": "وقتی کسی به صفحهٔ کاربریام پیوند داد، مرا آگاه کن.", "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-more-info": "اطلاعات بیشتر", - "echo-feedback": "بازخورد", "echo-api-failure": "اعلانها بازیابی نشد. لطفاً دوباره سعی کنید. (خطا $1)", "echo-notification-placeholder": "اعلانی ندارید.", "notification-link-text-view-message": "نمایش پیام", @@ -58,21 +53,16 @@ "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» {{GENDER:$1|گذاشتهاست}}.", "notification-page-linked-email-subject": "صفحهای که شما آغازگر آن بودید در {{SITENAME}} پیوند شد.", - "notification-reverted-email-subject2": "{{PLURAL:$3|ویرایش|ویرایشهای}} شما در {{SITENAME}} {{GENDER:$1|واگردانی شدهاست}}", + "notification-reverted-email-subject2": "{{PLURAL:$4|ویرایش|ویرایشهای}} شما در {{SITENAME}} {{GENDER:$2|واگردانی شدهاست}}", "notification-user-rights-email-subject": "دسترسیهای شما در {{SITENAME}} تغییر یافتهاست", - "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-notification-alert": "{{PLURAL:$1|هشدار ($1)|هشدارها ($1)|100=هشدارها (۹۹+)}}{{PLURAL:$1|}}", "echo-notification-alert-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-date-today": "ایمڕۆ", "echo-date-yesterday": "دؤئنۀ-دؤۀکۀ", - "echo-load-more-error": "دریافت نتیجههای بیشتر با خطا مواجه شدهاست.", "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/lld.json b/Echo/i18n/lld.json new file mode 100644 index 00000000..b1a4f6ce --- /dev/null +++ b/Echo/i18n/lld.json @@ -0,0 +1,8 @@ +{ + "@metadata": { + "authors": [ + "Starladin" + ] + }, + "tooltip-pt-notifications-alert": "{{GENDER:|Tü}}avisc" +} diff --git a/Echo/i18n/lrc.json b/Echo/i18n/lrc.json index d70c6804..42b19b8c 100644 --- a/Echo/i18n/lrc.json +++ b/Echo/i18n/lrc.json @@ -1,14 +1,15 @@ { "@metadata": { "authors": [ + "BaRaN6161 TURK", "Bonevarluri", + "Lorestani", "Mogoeilor" ] }, "echo-desc": "وارسیاریا سامونه", "prefs-echo": "وارسیاریا", "prefs-emailsettings": "چیا هنی انجومانامه", - "prefs-displaynotifications": "گزینه یا نه نشو بیه", "prefs-echosubscriptions": "مه نه سی ای رخ ونیا خوردار کو", "echo-pref-send-me": "کل کو سیم:", "echo-pref-send-to": "کل کو سی:", @@ -34,26 +35,21 @@ "echo-pref-tooltip-mention": "هرگاتی که کسی وه بلگه کاریاری مه هوم پیوند بی مه نه وارسیاری بک", "echo-pref-tooltip-user-rights": "هرگاتی که کسی حقوق کاریاری مه نا آلشت ده مه نه وارسیاری بک.", "notifications": "وارسیاریا", - "tooltip-pt-notifications-alert": "هوشداریا", + "tooltip-pt-notifications-alert": "هوشدارؽا", "echo-specialpage": "وارسیاریا", "echo-none": "شما هیژ وارسیاری ناریت.", - "echo-more-info": "دونسمنیا هنی", - "echo-feedback": "بازحرد", "notification-link-text-view-message": "دیئن پیغوما", "notification-link-text-view-mention": "گوته نه بیئنیت.", "notification-link-text-view-changes": "دیئن آلشتیا", "notification-link-text-view-page": "بلگه بوینیت", "notification-link-text-view-edit": "ویرایشت نه بوینیت", - "notification-edit-talk-page-email-subject2": "$1 {{GENDER:$1|یه گل پیغوم}} د {{نوم دیارگه}} نیائه.", - "notification-edit-talk-page-email-batch-body-with-section": "$1 {{GENDER:$1|یه گل پیغوم د بلگه چک چنه شما د \"$2\"}} نیائه.", + "notification-edit-talk-page-email-subject2": "$1 {{GENDER:$2|یه گل پیغوم}} د {{SITENAME}} نیائه.", "notification-page-linked-email-subject": "بلگه شما د {{نوم مالگه}} هوم پیوند بیه", - "notification-mention-email-subject": "$1 {{GENDER:$1|گوته}} د {{SITENAME}} شما", - "notification-user-rights-email-subject": "حقوق کاریاری شما د {{نوم دیارگه}} آلشت دئیه بیه", - "echo-email-body-default": "شما یه گل وارسیاری تاز د {{SITENAME}} داریتو\n\n$1", + "notification-mention-email-subject": "$1 {{GENDER:$2|گوته}} د {{SITENAME}} شما", + "notification-user-rights-email-subject": "هوقۊق کاریاری شاٛما د {{SITENAME}} آلشت دٱئٱ بیٱ", "echo-notification-alert-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-date-today": "امرو", "echo-date-yesterday": "دوش،دیرو", diff --git a/Echo/i18n/lt.json b/Echo/i18n/lt.json index 6fab96b4..c23bd151 100644 --- a/Echo/i18n/lt.json +++ b/Echo/i18n/lt.json @@ -1,23 +1,24 @@ { "@metadata": { "authors": [ + "Albertas", "Eitvys200", + "Homo", "Hugo.arg", - "Mantak111", - "Albertas", - "Zygimantus", "Macofe", - "Homo", - "Manvydasz" + "Mantak111", + "Manvydasz", + "Tomasdd", + "Zygimantus" ] }, "echo-desc": "Sistema, skirta naudotojų informavimui apie įvykius ir žinutes", "prefs-echo": "Pranešimai", "prefs-emailsettings": "El. pašto nustatymai", - "prefs-displaynotifications": "Rodymo nuostatos", "prefs-echosubscriptions": "Pranešti man apie šiuos įvykius", "prefs-echocrosswiki": "Kitų projektų pranešimai", "prefs-blocknotificationslist": "Užblokuoti naudotojai", + "echo-pref-show-poll-updates": "Rodyti naujus pranešimus, kai jie gaunami", "echo-pref-send-me": "Siųskite man:", "echo-pref-send-to": "Siųsti:", "echo-pref-email-format": "Elektroninių laškų pavidalas:", @@ -31,8 +32,6 @@ "echo-pref-email-format-plain-text": "Paprastas tekstas", "echo-pref-cross-wiki-notifications": "Rodyti pranešimus iš kitų viki", "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", "echo-log": "Viešas žurnalas", "echo-new-messages": "Turite naujų žinučių", @@ -55,7 +54,6 @@ "echo-pref-tooltip-mention-success": "Pranešti man, kai aš kažkam išsiunčiu paminėjimą.", "echo-pref-tooltip-user-rights": "Pranešti man, kai kas nors pakeičia mano naudotojo teises.", "echo-pref-tooltip-emailuser": "Pranešti, kai kas nors atsiunčia man el. laišką.", - "echo-error-no-formatter": "Pranešimo formatavimas nėra apibrėžtas.", "notifications": "Pranešimai", "tooltip-pt-notifications-alert": "{{GENDER:|Jūsų}} perspėjimai", "tooltip-pt-notifications-notice": "{{GENDER:|Jūsų}} pranešimai", @@ -66,7 +64,6 @@ "echo-displaynotificationsconfiguration-sorting-by-section-legend": "Į kurį skyrių kiekvienas pranešimų tipas yra rūšiuojamas", "echo-displaynotificationsconfiguration-available-notification-methods-header": "Leidžiami pranešimo metodai", "echo-displaynotificationsconfiguration-available-notification-methods-by-category-legend": "Kokie pranešimų metodai yra palaikomi kiekvienai kategorijai", - "echo-displaynotificationsconfiguration-available-notification-methods-by-type-legend": "Kokie pranešimų metodai yra palaikomi kiekvienam tipui; taikoma tik tipams, kurie yra kategorijose, bet paslėpti nuo pasirinkčių", "echo-displaynotificationsconfiguration-enabled-default-header": "Įjungta pagal nutylėjimą", "echo-displaynotificationsconfiguration-enabled-default-existing-users-legend": "Esami naudotojai", "echo-displaynotificationsconfiguration-enabled-default-new-users-legend": "Nauji naudotojai", @@ -77,13 +74,11 @@ "echo-specialpage-markasread": "Pranešimas: žymėti kaip skaityta", "echo-specialpage-markasread-invalid-id": "Negalimas įvykio ID", "echo-specialpage-pagination-numnotifications": "$1 {{PLURAL:$1|pranešimas|pranešimai}}", + "echo-specialpage-pagination-range": "$1 - $2", "echo-specialpage-pagefilters-title": "Naujausia veikla", "echo-specialpage-pagefilters-subtitle": "Puslapiai su neskaitytais pranešimais", "notificationsmarkread-legend": "Žymėti pranešimą kaip perskaityta", - "echo-anon": "Norėdami gauti pranešimus [$1 susikurkite paskyrą] arba [$2 prisijunkite].", "echo-none": "Jūs turite jokių pranešimų.", - "echo-more-info": "Daugiau informacijos", - "echo-feedback": "Atsiliepimas", "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.", @@ -112,6 +107,7 @@ "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>\".", + "notification-body-edit-user-talk-with-section": "$1", "notification-header-page-linked": "Buvo sukurta nuoroda iš <strong>$4</strong> į <strong>$3</strong>.", "notification-bundle-header-page-linked": "$4 ir $5 kiti {{PLURAL:$6|puslapis|puslapiai}} dabar nurodo į $3.", "notification-link-text-what-links-here": "Visos nuorodos į šį puslapį", @@ -149,12 +145,12 @@ "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 {{PLURAL:$4|atmestas|atmesti}}.", + "notification-body-reverted": "$1", "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\".", + "notification-edit-talk-page-email-subject2": "$1 {{GENDER:$2|paliko}} žinutę jums svetainėje {{SITENAME}}", "notification-page-linked-email-subject": "Puslapis, kurį sukūrėte buvo susietas {{SITENAME}} tinklapyje", - "notification-reverted-email-subject2": "Jūsų {{PLURAL:$3|pakeitimas buvo|pakeitimai buvo}} {{GENDER:$1|atšaukti}} {{SITENAME}} tinklapyje", - "notification-mention-email-subject": "$1 {{GENDER:$1|paminėjo}} {{GENDER:$2|jus}} {{SITENAME}}", + "notification-reverted-email-subject2": "Jūsų {{PLURAL:$4|pakeitimas buvo|pakeitimai buvo}} {{GENDER:$2|atšaukti}} {{SITENAME}} tinklapyje", + "notification-mention-email-subject": "$1 {{GENDER:$2|paminėjo}} {{GENDER:$3|jus}} {{SITENAME}}", "notification-user-rights-email-subject": "Jūsų naudotojo teisės buvo pakeistos {{SITENAME}} tinklapyje", "notification-timestamp-ago-seconds": "{{PLURAL:$1|$1s}}", "notification-timestamp-ago-minutes": "{{PLURAL:$1|$1m}}", @@ -167,9 +163,6 @@ "notification-inbox-filter-read": "Skaitytas", "notification-inbox-filter-unread": "Neskaitytas", "notification-inbox-filter-all": "Visi", - "echo-email-body-default": "Turite naują pranešimą {{SITENAME}} tinklapyje:\n\n$1", - "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 {{GENDER:$1|savo}} nustatymus", "echo-email-html-footer-with-link": "Kontroliuoti, kuriuos el. laiškus jums {{GENDER:$2|siunčiame}}, $1.", @@ -179,14 +172,14 @@ "echo-notification-notice-text-only": "Pranešimai", "echo-overlay-link": "Visi pranešimai", "echo-overlay-title": "<b>Pranešimai</b>", - "echo-overlay-title-overflow": "<b>{{PLURAL:$1|Pranešimas|Pranešimai}}</b> (rodoma $1 iš $2 neperskaitytų)", "echo-mark-all-as-read": "Pažymėti visus kaip skaitytus", "echo-mark-all-as-read-confirmation": "$1 {{PLURAL:$1|pranešimas pažymėtas|pranešimai pažymėti}} kaip perskaityti", "echo-mark-wiki-as-read": "Pažymėti visus kaip skaitytus pasirinktoje viki: $1", + "echo-displaysnippet-title": "Naujas pranešimas", "echo-date-today": "Šiandien", "echo-date-yesterday": "Vakar", - "echo-load-more-error": "Įvyko klaida gaunant daugiau rezultatų.", "notification-bundle-header-edit-user-talk-v2": "{{PLURAL:$1|Vienas naujas pranešimas|$1 nauji pranešimai|100=99+ nauji pranešimai}} <strong>{{PLURAL:$3|jūsų}} aptarimo puslapyje</strong>.", + "echo-email-batch-bullet": "•", "echo-email-batch-subject-daily": "Jūs gavote {{PLURAL:$2|naują pranešimą|naujų pranešimų}} {{SITENAME}} tinklapyje", "echo-email-batch-subject-weekly": "Jūs gavote {{PLURAL:$2|naują pranešimą|naujų pranešimų}} {{SITENAME}} tinklapyje šią savaitę", "echo-email-batch-body-intro-daily": "Sveiki $1,\nPateikiame Jums šiandienos aktyvumo {{SITENAME}} tinklapyje santrauką.", @@ -194,5 +187,7 @@ "echo-email-batch-link-text-view-all-notifications": "Peržiūrėti visus pranešimus", "notification-header-foreign-alert": "Daugiau įspėjimų iš {{PLURAL:$5|kitos viki|$5 kitų viki}}", "notification-header-foreign-notice": "Daugiau pranešimų iš {{PLURAL:$5|kitos viki|$5 kitų viki}}", - "notification-header-foreign-all": "Daugiau žinučių iš {{PLURAL:$5|kitos viki|$5 kitų viki}}" + "notification-header-foreign-all": "Daugiau žinučių iš {{PLURAL:$5|kitos viki|$5 kitų viki}}", + "echo-foreign-wiki-lang": "$1 - $2", + "echo-badge-count": "{{PLURAL:$1|$1|100={{formatnum:99}}+}}" } diff --git a/Echo/i18n/lv.json b/Echo/i18n/lv.json index 88de8c83..6aa111ba 100644 --- a/Echo/i18n/lv.json +++ b/Echo/i18n/lv.json @@ -4,17 +4,19 @@ "Admresdeserv.", "Edgars2007", "Papuass", - "Zuiks", - "Silraks" + "Silraks", + "Zuiks" ] }, "echo-desc": "Sistēma dalībnieku informēšanai par notikumiem un ziņojumiem", "prefs-echo": "Paziņojumi", "prefs-emailsettings": "E-pasta iestatījumi", - "prefs-displaynotifications": "Attēlošanas uzstādījumi", "prefs-echosubscriptions": "Paziņot man par šiem notikumiem", "prefs-echocrosswiki": "Starpprojektu paziņojumi", "prefs-blocknotificationslist": "Apklusinātie dalībnieki", + "prefs-echopollupdates": "Tūlītēji paziņojumi", + "echo-mobile-notifications-filter-title": "Filtrēt paziņojumus", + "echo-pref-show-poll-updates": "Rādīt jaunus paziņojumus tūlīt pēc to saņemšanas", "echo-pref-send-me": "Nosūtīt man:", "echo-pref-send-to": "Nosūtīt uz:", "echo-pref-email-format": "E-pasta formāts:", @@ -28,6 +30,7 @@ "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-notifications-blacklist": "Nerādīt paziņojumus no šiem dalībniekiem. ([[mw:Special:MyLanguage/Help:Notifications#mute|uzzināt vairāk]])", + "echo-pref-dont-email-read-notifications": "Neiekļaut izlasītos paziņojumus kopsavilkuma e-pastos", "echo-learn-more": "Uzzināt vairāk", "echo-log": "Publiskais žurnāls", "echo-new-messages": "tev ir jauni paziņojumi", @@ -39,6 +42,8 @@ "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-system-noemail": "{{PLURAL:$1|Sistēmas|Sistēma|Sistēmas}}", + "echo-category-title-system-emailonly": "{{PLURAL:$1|Sistēmas|Sistēma|Sistēmas}}", "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}}", @@ -48,10 +53,10 @@ "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.", - "echo-error-no-formatter": "Paziņojumam nav norādīts formatējums", "notifications": "Paziņojumi", "tooltip-pt-notifications-alert": "{{GENDER:|Tavi}} brīdinājumi", "tooltip-pt-notifications-notice": "{{GENDER:|Tavi}} paziņojumi", + "echo-displaynotificationsconfiguration": "Rādāmo paziņojumu konfigurācija", "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", @@ -67,10 +72,7 @@ "echo-specialpage-pagefilters-title": "Nesena aktivitāte", "echo-specialpage-pagefilters-subtitle": "Lapas ar nelasītiem paziņojumiem", "notificationsmarkread-legend": "Atzīmēt paziņojumu kā izlasītu", - "echo-anon": "Lai saņemtu paziņojumus, [$1 izveidojiet dalībnieka kontu] vai [$2 pieslēdzietes].", "echo-none": "Jums nav paziņojumu.", - "echo-more-info": "Vairāk informācijas", - "echo-feedback": "Atsauksmes", "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.", @@ -78,6 +80,9 @@ "echo-notification-markasunread": "Atzīmēt kā nelasītu", "echo-notification-markasread-tooltip": "Atzīmēt kā lasītu", "echo-notification-more-options-tooltip": "Vairāk iespēju", + "notification-dynamic-actions-unwatch-confirmation-description": "{{GENDER:$3|Tu}} vari jebkurā brīdī sākt uzraudzīt [$2 šo lapu].", + "notification-dynamic-actions-watch-confirmation": "{{GENDER:$3|Tu}} tagad uzraugi lapu \"$1\"", + "notification-dynamic-actions-watch-confirmation-description": "{{GENDER:$3|Tu}} vari jebkurā brīdī pārtraukt uzraudzīt [$2 šo lapu].", "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}}", @@ -124,11 +129,10 @@ "notification-link-article-reminder": "Skatīt lapu", "notification-header-reverted": "{{PLURAL:$4|Tavi labojumi lapā <strong>$3</strong> {{GENDER:$2|tika atcelti}}|Tavs labojums lapā <strong>$3</strong> {{GENDER:$2|tika atcelts}}|Tavi labojumi lapā <strong>$3</strong> {{GENDER:$2|tika atcelti}}}}.", "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 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-edit-talk-page-email-subject2": "$1 {{GENDER:$2|atstāja}} tev ziņojumu {{SITENAME}}", + "notification-page-linked-email-subject": "Uz {{GENDER:$3|tevis}} veidotu lapu vietnē {{SITENAME}} tika izveidota saite", + "notification-reverted-email-subject2": "Jūsu {{PLURAL:$4|atcelts|labojums tika {{GENDER:$2|atcelts}}|labojumi tika {{GENDER:$2|atcelti}}}} {{SITENAME}}", + "notification-mention-email-subject": "$1 {{GENDER:$2|pieminēja}} {{GENDER:$3|tevi}} vietnē {{SITENAME}}", "notification-user-rights-email-subject": "Jūsu dalībnieka tiesības tika izmainītas {{SITENAME}}", "notification-timestamp-ago-seconds": "{{PLURAL:$1|$1 s}}", "notification-timestamp-ago-minutes": "{{PLURAL:$1|$1 m}}", @@ -141,20 +145,22 @@ "notification-inbox-filter-read": "Izlasītie", "notification-inbox-filter-unread": "Nelasītie", "notification-inbox-filter-all": "Visi", - "echo-email-body-default": "Jums ir jauns paziņojums par {{SITENAME}}:\n\n$1", - "echo-email-footer-default": "$2\n\nLai kontrolētu, kurus e-pastus mēs Jums sūtām, pārbaudiet savus uzstādījumus:\n{{canonicalurl:{{#special:Preferences}}#mw-prefsection-echo}}\n\n$1", + "echo-specialmute-label-mute-notifications": "Apklusināt paziņojumus no šī dalībnieka", + "echo-email-plain-footer": "Lai kontrolētu, kādus e-pastus mēs {{GENDER:$1|tev}} sūtām, pārbaudi {{GENDER:$1|savas}} izvēles:", "echo-email-html-footer-preference-link-text": "pārbaudi {{GENDER:$1|savas}} izvēles", + "echo-email-html-footer-with-link": "Lai kontrolētu, kādus e-pastus mēs {{GENDER:$1|tev}} sūtām, $1.", + "echo-notification-alert": "{{PLURAL:$1|Brīdinājumi ($1)|Brīdinājums ($1)|Brīdinājumi ($1)|100=Brīdinājumi (99+)}}", + "echo-notification-notice": "{{PLURAL:$1|Paziņojumi ($1)|Paziņojums ($1)|Paziņojumi($1)|100=Paziņojumi(99+)}}", "echo-notification-alert-text-only": "Brīdinājumi", "echo-notification-notice-text-only": "Paziņojumi", "echo-overlay-link": "Visi paziņojumi", "echo-overlay-title": "<b>Paziņojumi</b>", - "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-displaysnippet-title": "Jauns paziņojums", "echo-date-today": "Šodien", "echo-date-yesterday": "Vakar", - "echo-load-more-error": "Ielasot vairāk rezultātus, notika kļūda.", "echo-email-batch-subject-daily": "Jums ir {{PLURAL:$2|jauni paziņojumi|jauns paziņojums|jauni paziņojumi}} par {{SITENAME}}", "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.", diff --git a/Echo/i18n/lzh.json b/Echo/i18n/lzh.json index 99995844..53c67b86 100644 --- a/Echo/i18n/lzh.json +++ b/Echo/i18n/lzh.json @@ -1,12 +1,12 @@ { "@metadata": { "authors": [ - "Yanteng3", - "Jason924tw", - "SolidBlock", "Davidzdh", + "Itsmine", + "Jason924tw", "LNDDYL", - "Itsmine" + "SolidBlock", + "Yanteng3" ] }, "prefs-echo": "告示", diff --git a/Echo/i18n/lzz.json b/Echo/i18n/lzz.json new file mode 100644 index 00000000..72af363a --- /dev/null +++ b/Echo/i18n/lzz.json @@ -0,0 +1,8 @@ +{ + "@metadata": { + "authors": [ + "Cem Rize" + ] + }, + "tooltip-pt-notifications-alert": "{{GENDER:|Uyarılarınız}}" +} diff --git a/Echo/i18n/mai.json b/Echo/i18n/mai.json index 769e9681..1415e07a 100644 --- a/Echo/i18n/mai.json +++ b/Echo/i18n/mai.json @@ -7,7 +7,6 @@ }, "prefs-echo": "सूचनासभ", "prefs-emailsettings": "इमेल विकल्प", - "prefs-displaynotifications": "प्रदर्शन विकल्पसभ", "prefs-echosubscriptions": "हमरा ई घटनासभक बारेमे सूचित करी", "prefs-echocrosswiki": "क्रस-विकी सूचना", "echo-pref-send-me": "हमरा भेजी:", @@ -27,7 +26,6 @@ "echo-category-title-other": "{{PLURAL:$1|अन्य}}", "echo-category-title-system": "{{PLURAL:$1|प्रणाली}}", "echo-category-title-user-rights": "{{PLURAL:$1|प्रयोगकर्ता अधिकार परिवर्तन|प्रयोगकर्ता अधिकार परिवर्तन भेल}}", - "echo-error-no-formatter": "अधिसूचनाक लेल कोनो स्वरूपण परिभाषित नै अछि ।", "notifications": "अधिसूचनासभ", "tooltip-pt-notifications-alert": "{{GENDER:|अहाँक}} सूचना", "echo-displaynotificationsconfiguration-enabled-default-header": "स्वचालित रुपसँ सक्षम करी", @@ -40,8 +38,6 @@ "echo-specialpage-pagination-numnotifications": "$1 {{PLURAL:$1|सूचना|सूचनासभ}}", "echo-specialpage-pagefilters-title": "लगक क्रिया", "echo-none": "अहाँक लेल कोनो अधिसूचना नै अछि।", - "echo-more-info": "अधिक जानकारी", - "echo-feedback": "अहाँक सुझाव", "echo-api-failure": "अधिसूचना आनैमे असफल।", "echo-api-failure-cross-wiki": "स्वचालित डोमेनक प्रयास विफल।", "echo-notification-placeholder": "कोनो सूचना नै अछि।", @@ -74,8 +70,8 @@ "notification-link-text-view-edit": "सम्पादन देखी", "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-reverted-email-subject2": "{{SITENAME}} पर अहाँक {{PLURAL:$3|सम्पादन|सम्पादनसभ}}के {{GENDER:$1|पूर्ववत}} कएल गेल।", + "notification-edit-talk-page-email-subject2": "$1 अहाँक लेल {{SITENAME}}पर सन्देश {{GENDER:$2|छोडलक अछि}}", + "notification-reverted-email-subject2": "{{SITENAME}} पर अहाँक {{PLURAL:$4|सम्पादन|सम्पादनसभ}}के {{GENDER:$2|पूर्ववत}} कएल गेल।", "notification-user-rights-email-subject": "{{SITENAME}} पर अहाँक प्रयोगकर्ता अधिकार परिवर्तन कएल गेल", "notification-timestamp-ago-seconds": "{{PLURAL:$1|$1सँ}}", "notification-timestamp-ago-minutes": "{{PLURAL:$1|$1 मि}}", @@ -88,16 +84,13 @@ "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-notification-alert-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-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|अधिसूचना अछि|अधिसूचनासभ अछि}}।", "echo-email-batch-body-intro-daily": "नमस्कार $1,\n{{SITENAME}} पर आजुक गतिविधिक सारांश निम्न अछि।", diff --git a/Echo/i18n/mg.json b/Echo/i18n/mg.json index 8b447ae4..d7652549 100644 --- a/Echo/i18n/mg.json +++ b/Echo/i18n/mg.json @@ -8,7 +8,6 @@ "echo-desc": "Rafitra fampilazana", "prefs-echo": "Filazana", "prefs-emailsettings": "Safidin'ny mailaka", - "prefs-displaynotifications": "Safidin-tseho", "prefs-echosubscriptions": "Ampandreneso momba ireo zava-mitranga ireo aho", "echo-pref-send-me": "Andefaso ahy:", "echo-pref-send-to": "Alefaso any amy:", @@ -29,22 +28,17 @@ "notifications": "Fampilazana", "tooltip-pt-notifications-alert": "Fanairana anao", "echo-specialpage": "Fampilazana", - "echo-more-info": "Fampahalalana fanampiny", - "echo-feedback": "Famoahan-kevitra", "notification-link-text-view-message": "Hijery hafatra", "notification-link-text-view-mention": "Hijery ny zava-boamarika", "notification-link-text-view-changes": "Hijery ny fiovana", "notification-link-text-view-page": "Hijery ny pejy", "notification-link-text-view-edit": "Hijery ny fanovàna", "notification-edit-talk-page-email-subject2": "Nametraka hafatra teo amin'ny pejin-dresakao teo amin'i {{SITENAME}} i $1", - "notification-edit-talk-page-email-batch-body-with-section": "Namela hafatra teo amin'ny pejin-dresakao tanatin'i \"$2\" i $1", "notification-user-rights-email-subject": "Voaova teo amin'i {{SITENAME}} ny zom-pikambanao", - "echo-email-body-default": "Manana fampilazana vaovao ianao any amin'i {{SITENAME}}:\n\n$1", "echo-overlay-link": "Fampilazana rehetra", "echo-overlay-title": "<b>Fampilazana</b>", "echo-mark-all-as-read": "Marihana ho voavaky", "echo-date-today": "Androany", "echo-date-yesterday": "Omaly", - "echo-load-more-error": "Nisy hadisoana nitranga tam-panaovana fetch ny valiny.", "echo-email-batch-link-text-view-all-notifications": "Hijery ny fampilazana rehetra" } diff --git a/Echo/i18n/min.json b/Echo/i18n/min.json index 6a415c86..2ee9edeb 100644 --- a/Echo/i18n/min.json +++ b/Echo/i18n/min.json @@ -1,8 +1,128 @@ { "@metadata": { "authors": [ + "Ardzun", "Iwan Novirion" ] }, - "echo-new-messages": "Sanak ado pasan baru" + "prefs-echo": "Pambaritauan", + "prefs-emailsettings": "Piliahan surel", + "prefs-echosubscriptions": "Agiah tau Ambo tantang iko", + "prefs-echocrosswiki": "Pambaritauan antar-wiki", + "prefs-blocknotificationslist": "Bisukan pangguno", + "echo-pref-show-poll-updates": "Tampilkan pambaritauan baru sangkek tibo", + "echo-pref-send-me": "Kirimkan ambo:", + "echo-pref-send-to": "Kirim ka:", + "echo-pref-email-format": "Format surel:", + "echo-pref-email": "Surel", + "echo-pref-email-frequency-never": "Jan kirim pambaritauan surel apopun", + "echo-pref-email-frequency-immediately": "Pambaritauan surel tiok tibo", + "echo-pref-email-frequency-daily": "Pambaritauan ringkeh tiok ari", + "echo-pref-email-frequency-weekly": "Pambaritauan ringkeh tiok minggu", + "echo-pref-email-format-html": "HTML", + "echo-pref-email-format-plain-text": "Teks polos", + "echo-pref-cross-wiki-notifications": "Tunjuakan pambaritauan dari wiki lain", + "echo-pref-notifications-blacklist": "Jan tampak pambaritauan dari pangguno ko. ([[mw:Special:MyLanguage/Help:Notifications#mute|labiah lanjuik]])", + "echo-learn-more": "Labiah lanjuik", + "echo-log": "Catatan publik", + "echo-new-messages": "Sanak ado pasan baru", + "echo-category-title-edit-user-talk": "{{PLURAL:$1|Pasan}} di laman maota", + "echo-category-title-article-linked": "{{PLURAL:$1|Pautan}} laman", + "echo-category-title-reverted": "{{PLURAL:$1|Pangambalian}} suntiangan", + "echo-category-title-mention": "{{PLURAL:$1|Panggia}}", + "echo-category-title-mention-failure": "Gagal {{PLURAL:$1|mamanggia}}", + "echo-category-title-mention-success": "Bahasil {{PLURAL:$1|mamanggia}}", + "echo-category-title-other": "{{PLURAL:$1|Nan lain}}", + "echo-category-title-system": "{{PLURAL:$1|Sistem}}", + "echo-category-title-system-noemail": "{{PLURAL:$1|Sistem}}", + "echo-category-title-user-rights": "{{PLURAL:$1|Parubahan hak pangguno}}", + "echo-category-title-emailuser": "{{PLURAL:$1|Surel dari pangguno lain}}", + "echo-category-title-article-reminder": "Laman {{PLURAL:$1|pangingek}}", + "echo-category-title-thank-you-edit": "{{PLURAL:$1|Pancapaian}} suntiangan", + "echo-pref-tooltip-edit-user-talk": "Agiah tau jikok sasaurang mangirimkan pasan atau balehan pado laman maota Ambo.", + "echo-pref-tooltip-emailuser": "Agiah tau jikok sasaurang mangirimkan surel.", + "notifications": "Pambaritauan", + "tooltip-pt-notifications-alert": "Pambaritauan {{GENDER:|Sanak}}", + "tooltip-pt-notifications-notice": "Pambaritauan {{GENDER:|Sanak}}", + "echo-displaynotificationsconfiguration": "Konfigurasi tampilan Pambaritauan", + "echo-displaynotificationsconfiguration-enabled-default-new-users-legend": "Pangguno baru", + "echo-displaynotificationsconfiguration-mandatory-notification-methods-header": "Metode pambaritauan nan dibutuahkan", + "echo-specialpage": "Pambaritauan", + "echo-specialpage-section-markread": "Tandoi grup alah dibaco", + "echo-specialpage-markasread": "Pambaritauan: Tandoi alah dibaco", + "echo-specialpage-pagination-numnotifications": "$1 {{PLURAL:$1|pambaritauan}}", + "echo-specialpage-pagefilters-title": "Aktivitas kini ko", + "echo-specialpage-pagefilters-subtitle": "Laman jo pambaritauan nan alun dibaco", + "notificationsmarkread-legend": "Tandoi pambaritauan alah dibaco", + "echo-none": "Sanak indak ado pambaritauan.", + "echo-api-failure": "Gagal maambiak pambaritauan.", + "echo-notification-placeholder": "Indak ado pambaritauan.", + "echo-notification-markasread": "Tandoi alah dibaco", + "echo-notification-markasunread": "Tandoi alun dibaco", + "echo-notification-markasread-tooltip": "Tandoi alah dibaco", + "echo-notification-more-options-tooltip": "Piliahan lain", + "notification-dynamic-actions-unwatch": "{{GENDER:$3|Baranti}} mamantau aktivitas baru pado \"$1\"", + "notification-dynamic-actions-unwatch-confirmation": "{{GENDER:$3|Sanak}} indak lai mamantau laman \"$1\"", + "notification-link-text-expand-alert-count": "Caliak {{PLURAL:$1|$1 pambaritauan}}", + "notification-link-text-expand-notice-count": "Caliak {{PLURAL:$1|$1 pambaritauan}}", + "notification-link-text-expand-all-count": "Caliak {{PLURAL:$1|$1 pambaritauan}}", + "notification-link-text-collapse-all": "Tutuik", + "notification-link-text-view-message": "Caliak pasan", + "notification-link-text-view-mention": "Caliak nan mamanggia", + "notification-link-text-view-mention-failure": "{{PLURAL:$1|Caliak nan mamanggia}}", + "notification-link-text-view-changes": "{{GENDER:$1|Caliak}} parubahan", + "notification-link-text-view-page": "Caliak laman", + "notification-header-edit-user-talk": "$1 {{GENDER:$2|maninggakan}} pasan di <strong>laman maota {{GENDER:$3|Sanak}}</strong>.", + "notification-header-edit-user-talk-with-section": "$1 {{GENDER:$2|maninggakan}} pasan di <strong>laman maota {{GENDER:$3|Sanak}}</strong> di \"<strong>$4</strong>\".", + "notification-compact-header-edit-user-talk": "$1 {{GENDER:$2|maninggakan}} {{GENDER:$3|Sanak}} sabuah pasan.", + "notification-compact-header-edit-user-talk-with-section": "$1 {{GENDER:$2|maninggakan}} {{GENDER:$3|Sanak}} pasan di \"<strong>$4</strong>\".", + "notification-header-page-linked": "Sabuah pautan alah dibuek dari <strong>$4</strong> ka <strong>$3</strong>.", + "notification-compact-header-page-linked": "Dipautkan dari <strong>$1</strong>", + "notification-bundle-header-page-linked": "Pautan dibuek dari {{PLURAL:$5||$5 laman}} ka <strong>$3</strong>.", + "notification-link-text-what-links-here": "Sado pautan ka laman ko", + "notification-header-mention-other": "$1 {{GENDER:$2|mamanggia}} {{GENDER:$3|Sanak}} di <strong>$4</strong> dalam \"<strong>$5</strong>\".", + "notification-header-mention-other-nosection": "$1 {{GENDER:$2|mamanggia}} {{GENDER:$3|Sanak}} di <strong>$4</strong>.", + "notification-header-mention-user-talkpage-v2": "$1 {{GENDER:$2|mamanggia}} {{GENDER:$3|Sanak}} di <strong>laman maota pangguno {{GENDER:$5|dari}} $4</strong> di \"<strong>$6</strong>\".", + "notification-header-mention-user-talkpage-nosection": "$1 {{GENDER:$2|mamanggia}} {{GENDER:$3|Sanak}} di <strong>laman maota pangguno {{GENDER:$5|dari}} $4</strong>.", + "notification-header-mention-agent-talkpage": "$1 {{GENDER:$2|mamanggia}} {{GENDER:$3|Sanak}} di <strong>laman maota{{GENDER:$2|nyo}}</strong> di \"<strong>$4</strong>\".", + "notification-header-mention-agent-talkpage-nosection": "$1 {{GENDER:$2|mamanggia}} {{GENDER:$3|Sanak}} di <strong>laman maota{{GENDER:$2|nyo}}</strong>.", + "notification-header-mention-article-talkpage": "$1 {{GENDER:$2|mamanggia}} {{GENDER:$3|Sanak}} di <strong>$4</strong> laman maota dalam \"<strong>$5</strong>\".", + "notification-header-mention-article-talkpage-nosection": "$1 {{GENDER:$2|mamanggia}} {{GENDER:$3|Sanak}} di <strong>$4</strong> laman maota.", + "notification-header-mention-success": "Panggilan {{GENDER:$2|Sanak}} ka <strong>$3</strong> alah takirim.", + "notification-header-mention-success-bundle": "{{PLURAL:$3|Panggilan}} {{GENDER:$2|nan Sanak buek}} di laman maota <strong>$4</strong> {{PLURAL:$3|alah}} takirim.", + "notification-compact-header-mention-success": "<strong>{{GENDER:$2|Sanak mamanggia}}:</strong> $3", + "notification-header-welcome": "{{GENDER:$2|Salamaik datang}} di {{SITENAME}}, $1! Kami sanang {{GENDER:$2|Sanak}} bagabuang.", + "notification-header-mention-summary": "$1 {{GENDER:$2|mamanggia}} {{GENDER:$3|Sanak}} dalam riwayaik suntiangan di <strong>$4</strong>.", + "notification-welcome-linktext": "Salamaik datang", + "notification-header-thank-you-1-edit": "{{GENDER:$2|Sanak}} baru sajo mambuek suntiangan patamo; tarimo kasih dan salamaik datang!", + "notification-header-thank-you-10-edit": "{{GENDER:$2|Sanak}} baru sajo mambuek suntiangan ka-10; tarimo kasih dan taruihlah manyuntiang!", + "notification-header-thank-you-100-edit": "{{GENDER:$2|Sanak}} baru sajo mambuek suntiangan ka-100; tarimo kasih banyak!", + "notification-link-thank-you-edit": "Suntiangan {{GENDER:$1|Sanak}}", + "notification-link-text-view-edit": "Caliak suntiangan", + "notification-link-article-reminder": "Caliak laman", + "notification-header-emailuser": "$1 {{GENDER:$2|mangirimkan}} Sanak sabuah surel.", + "notification-edit-talk-page-email-subject2": "$1 {{GENDER:$2|maninggakan}} {{GENDER:$3|Sanak}} pasan pado {{SITENAME}}", + "notification-timestamp-ago-seconds": "{{PLURAL:$1|$1d}}", + "notification-timestamp-ago-minutes": "{{PLURAL:$1|$1m}}", + "notification-timestamp-ago-hours": "{{PLURAL:$1|$1j}}", + "notification-timestamp-ago-days": "{{PLURAL:$1|$1h}}", + "notification-timestamp-ago-months": "{{PLURAL:$1|$1bln}}", + "notification-timestamp-ago-years": "{{PLURAL:$1|$1thn}}", + "notification-timestamp-today": "Hari ko", + "notification-timestamp-yesterday": "Kapatang", + "notification-inbox-filter-read": "Alah dibaco", + "notification-inbox-filter-unread": "Alun dibaco", + "notification-inbox-filter-all": "Sadonyo", + "echo-specialmute-label-mute-notifications": "Bisukan pambaritauan dari pangguno ko", + "echo-overlay-title": "<b>Pambaritauan</b>", + "echo-mark-all-as-read": "Tandoi sadonyo alah dibaco", + "echo-mark-all-as-read-confirmation": "$1 {{PLURAL:$1|pambaritauan}} ditandoi alah dibaco", + "echo-mark-wiki-as-read": "Tandoi sadonyo alah dibaco pado wiki: $1", + "echo-displaysnippet-title": "Pambaritauan baru", + "echo-date-today": "Hari ko", + "echo-date-yesterday": "Kapatang", + "notification-bundle-header-edit-user-talk-v2": "{{PLURAL:$1|$1 pasan baru}} di <strong>laman maota {{GENDER:$3|Sanak}}</strong>.", + "echo-email-batch-subject-daily": "Sanak ado {{PLURAL:$2|pambaritauan baru}} di {{SITENAME}}", + "echo-email-batch-subject-weekly": "Sanak ado {{PLURAL:$2|pambaritauan baru}} di {{SITENAME}} minggu ko", + "echo-email-batch-link-text-view-all-notifications": "Caliak kasado pambaritauan" } diff --git a/Echo/i18n/mk.json b/Echo/i18n/mk.json index 3636d38a..be8422c8 100644 --- a/Echo/i18n/mk.json +++ b/Echo/i18n/mk.json @@ -8,15 +8,20 @@ "echo-desc": "Систем за известување на корисници во врска со настани и пораки", "prefs-echo": "Известувања", "prefs-emailsettings": "Можности за е-пошта", - "prefs-displaynotifications": "Нагодувања на приказот", "prefs-echosubscriptions": "Известувај ме за следниве настани", "prefs-echocrosswiki": "Известувања од други викија", "prefs-blocknotificationslist": "Занемени корисници", + "prefs-mutedpageslist": "Занемени страници за известувања за врски", + "prefs-echopollupdates": "Известувања во живо", + "echo-mobile-notifications-filter-title": "Филтрирање на известувања", + "echo-pref-show-poll-updates": "Прикажува нови известувања како што пристигаат", + "echo-pref-show-poll-updates-help": "Прикажи број на непрочитани известувања во насловната лента, како и извадок од секое известување веднаш штом ќе пристигне.", "echo-pref-send-me": "Испрати ми:", "echo-pref-send-to": "Испрати на:", "echo-pref-email-format": "Формат на е-поштата:", "echo-pref-web": "На вики", "echo-pref-email": "Е-пошта", + "echo-pref-push": "Наметни (само прилози)", "echo-pref-email-frequency-never": "Не ми праќај известувања на е-пошта", "echo-pref-email-frequency-immediately": "Поединечни известувања, едно по едно", "echo-pref-email-frequency-daily": "Дневен преглед на известувањата", @@ -25,12 +30,12 @@ "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-pref-notifications-page-linked-title-muted-list": "Не прикажува известувања „Врска до страницата“ за овие страници. ([[mw:Special:MyLanguage/Help:Notifications#mute|дознајте повеќе]])", + "echo-pref-dont-email-read-notifications": "Не вклучувај прочитани известувања во резимираната е-пошта", "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|Вратено уредување|Вратени уредувања}}", "echo-category-title-mention": "{{PLURAL:$1|Споменување|Споменувања}}", @@ -38,9 +43,14 @@ "echo-category-title-mention-success": "{{PLURAL:$1|Успешно споменување|Успешни споменувања}}", "echo-category-title-other": "{{PLURAL:$1|Друго}}", "echo-category-title-system": "{{PLURAL:$1|Систем}}", + "echo-category-title-system-noemail": "{{PLURAL:$1|Систем}}", + "echo-category-title-system-emailonly": "{{PLURAL:$1|Систем}}", "echo-category-title-user-rights": "{{PLURAL:$1|Промена во корисничките права|Промени во корисничките права}}", "echo-category-title-emailuser": "{{PLURAL:$1|Е-пошта од друг корисник|Е-пошта од други корисници}}", "echo-category-title-article-reminder": "{{PLURAL:$1|Потсетник за страница|Потсетници за страниците}}", + "echo-category-title-thank-you-edit": "{{PLURAL:$1|Уредувачко достигнување|Уредувачки достигнувања}}", + "echo-category-title-watchlist": "Уредување на набљудувана страница", + "echo-category-title-minor-watchlist": "Ситно уредување на набљудувана страница", "echo-pref-tooltip-edit-user-talk": "Извести ме кога некој ќе остави порака или ќе одговори на мојата разговорна страница.", "echo-pref-tooltip-article-linked": "Извести ме кога некој ќе се повика на страница што ја имам создадено од друга страница.", "echo-pref-tooltip-reverted": "Извести ме кога некој ќе откаже уредување што го имам направено користејќи ја алатката за отповикување или враќање.", @@ -50,7 +60,9 @@ "echo-pref-tooltip-user-rights": "Извести ме кога некој ќе ми ги смени корисничките права.", "echo-pref-tooltip-emailuser": "Извести ме кога некој ќе ми испрати е-пошта.", "echo-pref-tooltip-article-reminder": "Извести ме за страницава кога ќе побарам.", - "echo-error-no-formatter": "Нема зададено форматирање за ова известување", + "echo-pref-tooltip-thank-you-edit": "Известувај ме кога ќе направам 1, 10, 100... уредувања.", + "echo-pref-tooltip-watchlist": "Извести ме кога некој ќе направи (неситно) уредување на страница од моите набљудувања.", + "echo-pref-tooltip-minor-watchlist": "Извести ме кога некој ќе направи ситно уредување на страница од моите набљудувања.", "notifications": "Известувања", "tooltip-pt-notifications-alert": "{{GENDER:|Ваши}} напомени", "tooltip-pt-notifications-notice": "{{GENDER:|Ваши}} известувања", @@ -61,7 +73,6 @@ "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": "Нови корисници", @@ -71,16 +82,14 @@ "echo-specialpage-section-markread": "Означи ја групата како прочитана", "echo-specialpage-markasread": "Известување: Означување како прочитано", "echo-specialpage-markasread-invalid-id": "Неважечка назнака на настанот", + "echo-specialpage-pagefilterwidget-aria-label": "Филтрирај по вики или наслов на страница", + "echo-specialpage-special-help-menu-widget-aria-label": "Дополнителни можности и Нагодувања на известувањата.", "echo-specialpage-pagination-numnotifications": "$1 {{PLURAL:$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-api-failure": "Не успеав да ги добијам известувањата.", "echo-api-failure-cross-wiki": "Пристапот до далечински домен е одбиен.", "echo-notification-placeholder": "Нема известувања.", @@ -91,6 +100,12 @@ "echo-notification-markasunread": "Означи како непрочитано", "echo-notification-markasread-tooltip": "Означи како прочитано", "echo-notification-more-options-tooltip": "Повеќе можности", + "notification-dynamic-actions-mute-page-linked": "{{GENDER:$2|Занеми}} известувања за врски на „$1“", + "notification-dynamic-actions-mute-page-linked-confirmation": "Известувањата за „Врска до страница“ сега се оневозможени за страницата „$1“", + "notification-dynamic-actions-mute-page-linked-confirmation-description": "{{GENDER:$2|Можете}} да раководите со вашите занемени страници во [$1 нагодувањата] во секое време.", + "notification-dynamic-actions-unmute-page-linked": "{{GENDER:$2|Однеми}} известувања за врски на „$1“", + "notification-dynamic-actions-unmute-page-linked-confirmation": "Известувањата за „Врска до страница“ сега се овозможени за страницата „$1“", + "notification-dynamic-actions-unmute-page-linked-confirmation-description": "{{GENDER:$2|Можете}} да раководите со вашите занемени страници во [$1 нагодувањата] во секое време.", "notification-dynamic-actions-unwatch": "{{GENDER:$3|Престани}} со набљудување на новите активности на „$1“", "notification-dynamic-actions-unwatch-confirmation": "Повеќе не {{GENDER:$3|ја набљудувате}} страницата „$1“", "notification-dynamic-actions-unwatch-confirmation-description": "Можете да {{GENDER:$3|ја набљудувате}} [$2 страницава] во секое време.", @@ -141,6 +156,16 @@ "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-header-watchlist-changed": "$1 {{GENDER:$2|ја измени}} страницата <strong>$3</strong> од {{GENDER:$4|вашите}} набљудувања{{PLURAL:$5||, $5 пати}}.", + "notification-header-watchlist-created": "$1 {{GENDER:$2|ја создаде}} страницата <strong>$3</strong> од {{GENDER:$4|вашите}} набљудувања{{PLURAL:$5||, $5 пати}}.", + "notification-header-watchlist-deleted": "$1 {{GENDER:$2|ја избриша}} страницата <strong>$3</strong> од {{GENDER:$4|вашите}} набљудувања{{PLURAL:$5||, $5 пати}}.", + "notification-header-watchlist-moved": "$1 {{GENDER:$2|ја премести}} страницата <strong>$3</strong> од {{GENDER:$4|вашите}} набљудувања{{PLURAL:$5||, $5 пати}}.", + "notification-header-watchlist-restored": "$1 {{GENDER:$2|ја поврати}} страницата <strong>$3</strong> од {{GENDER:$4|вашите}} набљудувања{{PLURAL:$5||, $5 пати}}.", + "notification-header-watchlist-multiuser-changed": "<strong>$1</strong>, страница од {{GENDER:$2|вашите}} набљудувања, е изменета {{PLURAL:$3|еднаш|$3 пати}}.", + "notification-header-watchlist-multiuser-created": "<strong>$1</strong>, страница од {{GENDER:$2|вашите}} набљудувања, е создадена {{PLURAL:$3|еднаш|$3 пати}}.", + "notification-header-watchlist-multiuser-deleted": "<strong>$1</strong>, страница од {{GENDER:$2|вашите}} набљудувања, е избришана {{PLURAL:$3|еднаш|$3 пати}}.", + "notification-header-watchlist-multiuser-moved": "<strong>$1</strong>, страница од {{GENDER:$2|вашите}} набљудувања, е преместена {{PLURAL:$3|еднаш|$3 пати}}.", + "notification-header-watchlist-multiuser-restored": "<strong>$1</strong>, страница од {{GENDER:$2|вашите}} набљудувања, е повратена {{PLURAL:$3|еднаш|$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|вашето}} десетто уредување. {{GENDER:$2|Ви}} благодариме, и продолжете така!", @@ -149,17 +174,17 @@ "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-header-thank-you-10000000-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> е {{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-page-linked-email-subject": "Ваша страница беше наведена на {{SITENAME}}", - "notification-reverted-email-subject2": "{{GENDER:$1|На}} {{SITENAME}} {{PLURAL:$3|е вратено ваше уредување|се вратени ваши уредувања}}", - "notification-mention-email-subject": "$1 {{GENDER:$1|ве}} {{GENDER:$2|спомна}} на {{SITENAME}}", - "notification-user-rights-email-subject": "Вашите кориснички права на {{SITENAME}} се изменети", + "notification-edit-talk-page-email-subject2": "$1 {{GENDER:$3|ви}} {{GENDER:$2|остави}} порака на {{SITENAME}}", + "notification-page-linked-email-subject": "{{GENDER:$3|Ваша}} страница беше наведена на {{SITENAME}}", + "notification-reverted-email-subject2": "{{GENDER:$2|На}} {{SITENAME}} {{PLURAL:$4|е вратено ваше уредување|се вратени ваши уредувања}}", + "notification-mention-email-subject": "$1 {{GENDER:$3|ве}} {{GENDER:$2|спомна}} на {{SITENAME}}", + "notification-user-rights-email-subject": "{{GENDER:$3|Вашите}} кориснички права на {{SITENAME}} се изменети", "notification-timestamp-ago-seconds": "{{PLURAL:$1|$1 с}}", "notification-timestamp-ago-minutes": "{{PLURAL:$1|$1 м}}", "notification-timestamp-ago-hours": "{{PLURAL:$1|$1 ч}}", @@ -171,9 +196,7 @@ "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-specialmute-label-mute-notifications": "Исклучи известувања од корисников", "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.", @@ -183,13 +206,12 @@ "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 непрочитани)", "echo-mark-all-as-read": "Означи ги сите како прочитани", "echo-mark-all-as-read-confirmation": "{{PLURAL:$1|Означено $1 известување|Означени $1 известувања}} како прочитани", "echo-mark-wiki-as-read": "Означи ги сите како прочитани на избраното вики: $1", + "echo-displaysnippet-title": "Ново известување", "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>.", "echo-email-batch-subject-daily": "Имате {{PLURAL:$2|ново известување|нови известувања}} на {{SITENAME}}", "echo-email-batch-subject-weekly": "Неделава имате {{PLURAL:$2|ново известување|нови известувања}} на {{SITENAME}}", diff --git a/Echo/i18n/ml.json b/Echo/i18n/ml.json index 6d284124..f8544839 100644 --- a/Echo/i18n/ml.json +++ b/Echo/i18n/ml.json @@ -1,20 +1,22 @@ { "@metadata": { "authors": [ + "Adithyak1997", + "Macofe", "Praveenp", "Santhosh.thottingal", "Sidharthan", - "Vssun", - "Macofe" + "Vssun" ] }, "echo-desc": "സംഭവങ്ങളെക്കുറിച്ചും സന്ദേശങ്ങളെക്കുറിച്ചും ഉപയോക്താക്കളെ അറിയിക്കാനുള്ള സംവിധാനം", "prefs-echo": "വിജ്ഞാപനങ്ങൾ", "prefs-emailsettings": "ഇമെയിൽ ഐച്ഛികങ്ങൾ", - "prefs-displaynotifications": "പ്രദർശന ഐച്ഛികങ്ങൾ", "prefs-echosubscriptions": "ഈ സംഭവങ്ങളെക്കുറിച്ച് എന്നെ അറിയിക്കുക", "prefs-echocrosswiki": "അന്തർവിക്കി വിജ്ഞാപനങ്ങൾ", "prefs-blocknotificationslist": "നിശ്ശബ്ദരാക്കിയ ഉപയോക്താക്കൾ", + "prefs-echopollupdates": "തത്സമയ അറിയിപ്പുകൾ", + "echo-pref-show-poll-updates": "അറിയിപ്പുകൾ വരുന്ന മുറയ്ക്ക് പ്രദർശിപ്പിക്കുക", "echo-pref-send-me": "എനിക്ക് അയയ്ക്കേണ്ട രീതി:", "echo-pref-send-to": "അയക്കേണ്ട വിലാസം:", "echo-pref-email-format": "ഇമെയിൽ എഴുത്തുരീതി:", @@ -28,8 +30,6 @@ "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": "താങ്കൾക്ക് പുതിയ സന്ദേശങ്ങൾ ഉണ്ട്", @@ -41,9 +41,11 @@ "echo-category-title-mention-success": "വിജയകരമായ {{PLURAL:$1|പരാമർശം|പരാമർശങ്ങൾ}}", "echo-category-title-other": "{{PLURAL:$1|മറ്റുള്ളവ}}", "echo-category-title-system": "{{PLURAL:$1|വ്യവസ്ഥ}}", + "echo-category-title-system-noemail": "{{PLURAL:$1|വ്യവസ്ഥ}}", "echo-category-title-user-rights": "ഉപയോക്തൃ അവകാശ {{PLURAL:$1|മാറ്റം|മാറ്റങ്ങൾ}}", "echo-category-title-emailuser": "{{PLURAL:$1|മറ്റൊരു ഉപയോക്താവ് അയച്ച ഇമെയിൽ|മറ്റ് ഉപയോക്താക്കൾ അയച്ച ഇമെയിലുകൾ}}", "echo-category-title-article-reminder": "താളിലെ {{PLURAL:$1|ഓർമ്മപ്പെടുത്തൽ|ഓർമ്മപ്പെടുത്തലുകൾ}}", + "echo-category-title-thank-you-edit": "തിരുത്തിന്റെ {{PLURAL:$1|നാഴികക്കല്ല്|നാഴികക്കല്ലുകൾ}}", "echo-pref-tooltip-edit-user-talk": "ആരെങ്കിലും എന്റെ സംവാദത്താളിൽ ഒരു സന്ദേശമോ മറുപടിയോ ഇട്ടാൽ എന്നെ അറിയിക്കുക.", "echo-pref-tooltip-article-linked": "ഞാൻ സൃഷ്ടിച്ച ഒരു താളിൽ ആരെങ്കിലും കണ്ണി ചേർത്താൽ എന്നെ അറിയിക്കുക.", "echo-pref-tooltip-reverted": "തിരസ്കരണ അല്ലെങ്കിൽ തിരിച്ചാക്കൽ ഉപകരണമുപയോഗിച്ച് ആരെങ്കിലും ഞാൻ വരുത്തിയ തിരുത്ത് ഒഴിവാക്കിയാൽ എന്നെ അറിയിക്കുക.", @@ -53,7 +55,7 @@ "echo-pref-tooltip-user-rights": "എന്റെ ഉപയോക്തൃ അവകാശങ്ങളിൽ ആരെങ്കിലും മാറ്റം വരുത്തിയാൽ എന്നെ അറിയിക്കുക.", "echo-pref-tooltip-emailuser": "ആരെങ്കിലും എനിക്ക് ഇമെയിൽ അയച്ചാൽ എന്നെ അറിയിക്കുക.", "echo-pref-tooltip-article-reminder": "ഞാനാവശ്യപ്പെടുമ്പോൾ ഈ താളിനെക്കുറിച്ച് അറിയിക്കുക.", - "echo-error-no-formatter": "വിജ്ഞാപനത്തിനായി യാതൊരു രൂപവും നിർവ്വചിച്ചിട്ടില്ല", + "echo-pref-tooltip-thank-you-edit": "എന്റെ ഒന്നാമത്തെ, പത്താമത്തെ, നൂറാമത്തെ...തിരുത്തിനെക്കുറിച്ച് എന്നെ അറിയിക്കുക", "notifications": "വിജ്ഞാപനങ്ങൾ", "tooltip-pt-notifications-alert": "{{GENDER:|താങ്കൾ}} ശ്രദ്ധിക്കേണ്ടവ", "tooltip-pt-notifications-notice": "{{GENDER:|താങ്കൾക്കുള്ള}} അറിയിപ്പുകൾ", @@ -72,10 +74,7 @@ "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": "വിജ്ഞാപനങ്ങൾ ഒന്നുമില്ല.", @@ -147,12 +146,11 @@ "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|ചേർത്തിട്ടുണ്ട്}}.", - "notification-page-linked-email-subject": "താങ്കൾ സൃഷ്ടിച്ച ഒരു താൾ {{SITENAME}} സംരംഭത്തിൽ കണ്ണിചേർക്കപ്പെട്ടിരിക്കുന്നു", - "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-edit-talk-page-email-subject2": "{{SITENAME}} സംരംഭത്തിൽ, താങ്കൾക്കൊരു സന്ദേശം $1 {{GENDER:$2|ചേർത്തിട്ടുണ്ട്}}", + "notification-page-linked-email-subject": "{{GENDER:$3|താങ്കൾ}} സൃഷ്ടിച്ച ഒരു താൾ {{SITENAME}} സംരംഭത്തിൽ കണ്ണിചേർക്കപ്പെട്ടിരിക്കുന്നു", + "notification-reverted-email-subject2": "{{SITENAME}} സംരംഭത്തിൽ താങ്കൾ വരുത്തിയ {{PLURAL:$4|തിരുത്ത്|തിരുത്തുകൾ}} {{GENDER:$2|മുൻപ്രാപനം ചെയ്തിരിക്കുന്നു}}", + "notification-mention-email-subject": "{{GENDER:$3|താങ്കളെ}} {{SITENAME}} സംരംഭത്തിൽ $1 {{GENDER:$2|പരാമർശിച്ചിരിക്കുന്നു}}", + "notification-user-rights-email-subject": "{{SITENAME}} സംരംഭത്തിൽ {{GENDER:$3|താങ്കളുടെ}} അവകാശങ്ങളിൽ മാറ്റമുണ്ടായിരിക്കുന്നു", "notification-timestamp-ago-seconds": "{{PLURAL:$1|$1 സെ.}}", "notification-timestamp-ago-minutes": "{{PLURAL:$1|$1 മി.}}", "notification-timestamp-ago-hours": "{{PLURAL:$1|$1 മ.}}", @@ -164,9 +162,6 @@ "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.", @@ -176,13 +171,12 @@ "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-displaysnippet-title": "പുതിയ അറിയിപ്പ്", "echo-date-today": "ഇന്ന്", "echo-date-yesterday": "ഇന്നലെ", - "echo-load-more-error": "കൂടുതൽ ഫലങ്ങൾ എടുക്കുന്നതിനിടെ ഒരു പിഴവുണ്ടായി.", "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|പുതിയ ഒരു വിജ്ഞാപനം|പുതിയ വിജ്ഞാപനങ്ങൾ}} ഉണ്ട്", diff --git a/Echo/i18n/mn.json b/Echo/i18n/mn.json index da28645d..533b1586 100644 --- a/Echo/i18n/mn.json +++ b/Echo/i18n/mn.json @@ -1,8 +1,8 @@ { "@metadata": { "authors": [ - "Wisdom", - "Munkhzaya.E" + "Munkhzaya.E", + "Wisdom" ] }, "echo-notification-markasread": "Уншсанаар тэмдэглэх", diff --git a/Echo/i18n/mni.json b/Echo/i18n/mni.json index 0ee74f64..626193f1 100644 --- a/Echo/i18n/mni.json +++ b/Echo/i18n/mni.json @@ -4,5 +4,20 @@ "Awangba Mangang" ] }, - "tooltip-pt-notifications-alert": "{{GENDER:|ꯅꯪꯒꯤ}} ꯈꯪꯍꯟꯕꯥ" + "echo-pref-email": "ꯏꯃꯦꯜ", + "echo-pref-email-format-html": "ꯑꯩꯆꯇꯤꯑꯦꯝꯑꯦꯜ", + "echo-pref-email-format-plain-text": "ꯑꯆꯝꯕ ꯋꯥꯍꯩ ꯋꯥꯇꯥ", + "echo-category-title-other": "{{PLURAL:$1|ꯑꯇꯩ}}", + "echo-category-title-system": "{{PLURAL:$1|ꯊꯧꯁꯤꯜ}}", + "echo-category-title-system-noemail": "{{PLURAL:$1|ꯊꯧꯁꯤꯜ}}", + "tooltip-pt-notifications-alert": "{{GENDER:|ꯅꯪꯒꯤ}} ꯈꯪꯍꯟꯕꯥ", + "echo-displaynotificationsconfiguration-enabled-default-new-users-legend": "ꯑꯅꯧꯕ ꯁꯤꯖꯤꯟꯅꯔꯤꯕꯁꯤꯡ", + "echo-notification-markasread": "ꯄꯥꯔꯦ ꯍꯥꯏꯅꯥ ꯎꯠꯂꯣ", + "echo-notification-markasunread": "ꯄꯥꯗꯀꯤ ꯍꯥꯏꯅꯥ ꯎꯠꯂꯣ", + "echo-notification-markasread-tooltip": "ꯄꯥꯔꯦ ꯍꯥꯏꯅꯥ ꯎꯠꯂꯣ", + "echo-notification-more-options-tooltip": "ꯑꯍꯦꯟꯕ ꯈꯟꯕꯤꯌꯨ", + "notification-link-text-expand-all": "ꯄꯥꯛꯊꯣꯛꯄ", + "notification-link-text-collapse-all": "ꯁꯨꯞꯆꯤꯟꯕꯥ", + "notification-link-text-view-message": "ꯄꯥꯎꯖꯦꯜ ꯎꯠꯂꯨ", + "notification-link-text-view-mention": "ꯃꯤꯡ ꯄꯟꯕꯗꯨ ꯎꯠꯂꯨ" } diff --git a/Echo/i18n/mr.json b/Echo/i18n/mr.json index 7ed93a8d..58f989ce 100644 --- a/Echo/i18n/mr.json +++ b/Echo/i18n/mr.json @@ -2,20 +2,19 @@ "@metadata": { "authors": [ "Amire80", + "Macofe", "Nikhil.kawale", "Niraj Suryawanshi", "Prabodh1987", "Sankoswal", + "Susheelkasab", "V.narsikar", - "संतोष दहिवळ", - "Macofe", - "Susheelkasab" + "संतोष दहिवळ" ] }, "echo-desc": "सदस्यांना घडामोडी व संदेश देणारी अधिसूचना प्रणाली", "prefs-echo": "अधिसूचना", "prefs-emailsettings": "विपत्र ऐच्छिके", - "prefs-displaynotifications": "प्रदर्शित करण्याचे पर्याय", "prefs-echosubscriptions": "या उपक्रमाबद्दल कळवावे", "prefs-echocrosswiki": "आंतर-विकि अधिसूचना", "prefs-blocknotificationslist": "मूक करण्यात आलेले सदस्य", @@ -32,8 +31,6 @@ "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": "तुमच्यासाठी नवीन संदेश आहेत", @@ -57,7 +54,6 @@ "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:|आपल्या}} सूचना", @@ -79,11 +75,7 @@ "echo-specialpage-pagefilters-title": "अलीकडील क्रियाकलाप", "echo-specialpage-pagefilters-subtitle": "न वाचलेल्या अधिसूचनांची पाने", "notificationsmarkread-legend": "अधिसूचना वाचल्यात अशी खूण करा", - "echo-anon": "अधिसूचना मिळण्यास, [$1 create an account] किंवा [$2 log in].", "echo-none": "आपल्यासाठी काहीच अधिसूचना नाहीत.", - "echo-more-info": "अधिक माहिती", - "echo-feedback": "प्रतिक्रिया", - "echo-quotation-marks": "\"$1\"", "echo-api-failure": "अधिसूचना पुरविण्यात अयशस्वी.", "echo-api-failure-cross-wiki": "दूरवरच्या विदागारास पोहोच नाकारण्यात आली आहे.", "echo-notification-placeholder": "अधिसूचना नाहीत.", @@ -156,11 +148,10 @@ "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-edit-talk-page-email-subject2": "$1 ने {{SITENAME}}वर आपल्यासाठी एक संदेश {{GENDER:$2|टाकला}}", "notification-page-linked-email-subject": " आपण तयार केलेले पान {{SITENAME}}वर जोडल्या गेले आहे", - "notification-reverted-email-subject2": "आपले {{SITENAME}} वरील {{PLURAL:$3|संपादन|संपादने}}{{GENDER:$1|उलटविले गेले|उलटविल्या गेलीत}}", - "notification-mention-email-subject": "$1 ने {{GENDER:$2|आपला}} {{SITENAME}} वर {{GENDER:$1|उल्लेख केला}}", + "notification-reverted-email-subject2": "आपले {{SITENAME}} वरील {{PLURAL:$4|संपादन|संपादने}}{{GENDER:$2|उलटविले गेले|उलटविल्या गेलीत}}", + "notification-mention-email-subject": "$1 ने {{GENDER:$3|आपला}} {{SITENAME}} वर {{GENDER:$2|उल्लेख केला}}", "notification-user-rights-email-subject": "{{SITENAME}} वर आपले सदस्य अधिकार बदलले आहेत", "notification-timestamp-ago-seconds": "{{PLURAL:$1|$1से}}", "notification-timestamp-ago-minutes": "{{PLURAL:$1|$1मि}}", @@ -173,9 +164,6 @@ "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.", @@ -185,13 +173,11 @@ "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": "$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 नविन संदेश|100=99+ नविन संदेश}} <strong>{{GENDER:$3|आपल्या}} चर्चा पानावर आहेत</strong>.", "echo-email-batch-bullet": "•", "echo-email-batch-subject-daily": "आपल्यासाठी {{SITENAME}}वर {{PLURAL:$2|एक नविन अधिसूचना आहे|नविन अधिसूचना आहेत}}", diff --git a/Echo/i18n/mrh.json b/Echo/i18n/mrh.json new file mode 100644 index 00000000..9bc3e454 --- /dev/null +++ b/Echo/i18n/mrh.json @@ -0,0 +1,8 @@ +{ + "@metadata": { + "authors": [ + "Laitei" + ] + }, + "tooltip-pt-notifications-alert": "{{GENDER:|Your}} pahnosanazy" +} diff --git a/Echo/i18n/ms.json b/Echo/i18n/ms.json index dc593088..9643a60b 100644 --- a/Echo/i18n/ms.json +++ b/Echo/i18n/ms.json @@ -2,16 +2,16 @@ "@metadata": { "authors": [ "Anakmalaysia", - "Pizza1016", "Aviator", + "Jeluang Terluang", "Kurniasan", - "Jeluang Terluang" + "Pizza1016", + "Tofeiku" ] }, "echo-desc": "Sistem pemberitahuan", "prefs-echo": "Pemberitahuan", "prefs-emailsettings": "Pilihan e-mel", - "prefs-displaynotifications": "Pilihan paparan", "prefs-echosubscriptions": "Beritahu saya tentang peristiwa-peristiwa ini", "echo-pref-send-me": "Hantarkan saya:", "echo-pref-send-to": "Hantar ke:", @@ -38,37 +38,29 @@ "echo-pref-tooltip-reverted": "Beritahu saya apabila seseorang mengundurkan suntingan saya dengan menggunakan alat 'batalkan' atau 'undur'.", "echo-pref-tooltip-mention": "Beritahu saya apaila seseorang membuat pautan ke laman pengguna saya.", "echo-pref-tooltip-user-rights": "Beritahu saya apabila seseorang mengubah hak-hak pengguna saya.", - "echo-error-no-formatter": "Tiada pemformatan ditetap untuk pemberitahuan.", "notifications": "Pemberitahuan", "tooltip-pt-notifications-alert": "Notis {{GENDER:|anda}}", "echo-specialpage": "Pemberitahuan", - "echo-anon": "Untuk menerima pemberitahuan, sila [$1 buka akaun] atau [$2 log masuk].", "echo-none": "Tiada pemberitahuan untuk anda.", - "echo-more-info": "Maklumat lanjut", - "echo-feedback": "Maklum balas", "notification-link-text-view-message": "Lihat pesanan", "notification-link-text-view-mention": "Lihat sebutan", "notification-link-text-view-changes": "Lihat perubahan", "notification-link-text-view-page": "Lihat laman", "notification-link-text-view-edit": "Lihat suntingan", "notification-header-reverted": "{{PLURAL:$4|Suntingan|Suntingan-suntingan}} anda di $3 telah {{GENDER:$2|dibalikkan}} oleh $1", - "notification-edit-talk-page-email-subject2": "$1 telah {{GENDER:$1|meninggalkan}} pesanan untuk anda di {{SITENAME}}", - "notification-edit-talk-page-email-batch-body-with-section": "$1 telah {{GENDER:$1|meninggalkan}} sebuah pesanan pada laman perbincangan anda di \"$2\".", + "notification-edit-talk-page-email-subject2": "$1 telah {{GENDER:$2|meninggalkan}} pesanan untuk anda di {{SITENAME}}", "notification-page-linked-email-subject": "Laman ciptaan anda telah dipautkan dengan {{SITENAME}}", - "notification-reverted-email-subject2": "{{PLURAL:$3|Suntingan|Suntingan-suntingan}} telah {{GENDER:$1|diundurkan}} di {{SITENAME}}", - "notification-mention-email-subject": "$1 {{GENDER:$1|menyebut}} anda di {{SITENAME}}", + "notification-reverted-email-subject2": "{{PLURAL:$4|Suntingan|Suntingan-suntingan}} telah {{GENDER:$2|diundurkan}} di {{SITENAME}}", + "notification-mention-email-subject": "$1 {{GENDER:$2|menyebut}} anda di {{SITENAME}}", "notification-user-rights-email-subject": "Hak-hak pengguna anda telah berubah di {{SITENAME}}", - "echo-email-body-default": "Anda menerima pemberitahuan baru di {{SITENAME}}:\n\n$1", - "echo-email-footer-default": "$2\n\nUntuk mengubah pesanan-pesanan e-mel yang anda hendak kami hantar, semak keutamaan anda:\n{{canonicalurl:{{#special:Preferences}}#mw-prefsection-echo}}\n\n$1", "echo-notification-alert": "{{PLURAL:$1|Pesanan ($1)|100=Pesanan (99+)}}", "echo-notification-alert-text-only": "Peringatan", "echo-overlay-link": "Semua pemberitahuan", "echo-overlay-title": "<b>Pemberitahuan</b>", - "echo-overlay-title-overflow": "<b>Pemberitahuan</b> (memaparkan $1 daripada $2 yang belum dibaca)", "echo-mark-all-as-read": "Tanda semua sebagai dibaca", + "echo-displaysnippet-title": "Pemberitahuan baru", "echo-date-today": "Hari ini", "echo-date-yesterday": "Semalam", - "echo-load-more-error": "Ralat berlaku ketika mengambil lebih banyak hasil.", "echo-email-batch-subject-daily": "Anda ada {{PLURAL:$2|satu|beberapa}} pemberitahuan baru di {{SITENAME}}", "echo-email-batch-subject-weekly": "Anda ada {{PLURAL:$2|satu|beberapa}} pemberitahuan baru di {{SITENAME}} minggu ini", "echo-email-batch-body-intro-daily": "$1,\nYang berikut ialah ringkasan kegiatan hari ini di {{SITENAME}} untuk rujukan anda.", diff --git a/Echo/i18n/mt.json b/Echo/i18n/mt.json index 0e30df0f..74e2c93c 100644 --- a/Echo/i18n/mt.json +++ b/Echo/i18n/mt.json @@ -10,7 +10,6 @@ "echo-desc": "Sistema ta' notifika", "prefs-echo": "Notifiki", "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", "echo-pref-send-me": "Ibgħatli:", "echo-pref-send-to": "Ibgħat lil:", @@ -35,35 +34,26 @@ "echo-pref-tooltip-article-linked": "Għarrafni meta xi ħadd joħloq ħolqa minn artiklu għal xi paġna li ħlaqt jien.", "echo-pref-tooltip-reverted": "Għarrafni meta xi ħadd permezz tal-għodda tal-annullament (undo) jew tat-treġġigħ lura (rollback) jannulla xi modifika li għamilt jien.", "echo-pref-tooltip-mention": "Għarrafni meta xi ħadd joħloq ħolqa minn xi paġna tad-diskussjoni għall-paġna tal-utent tiegħi.", - "echo-error-no-formatter": "L-ebda formattazzjoni definita għan-notifiki", "notifications": "Notifiki", "tooltip-pt-notifications-alert": "L-avviżi tiegħek", "echo-specialpage": "Notifiki", - "echo-anon": "Sabiex tirċievi n-notifiki, [$1 oħloq kont] jew [$2 idħol fil-kont].", "echo-none": "M'għandek l-ebda notifika", - "echo-more-info": "Aktar informazzjoni", - "echo-feedback": "Kummenti", "notification-link-text-view-message": "Ara l-messaġġ", "notification-link-text-view-mention": "Ara fejn issemmejt", "notification-link-text-view-changes": "Ara l-bidliet", "notification-link-text-view-page": "Ara l-paġna", "notification-link-text-view-edit": "Ara l-modifika", "notification-header-reverted": "Il-{{PLURAL:$4|modifika|modifiki}} tiegħek fuq $3 {{PLURAL:$4|ġiet annullata|ġew annullati}} {{GENDER:$2|minn}} $1.", - "notification-edit-talk-page-email-subject2": "$1 {{GENDER:$1|ħallielek|ħallietlek}} messaġġ fuq {{SITENAME}}", - "notification-edit-talk-page-email-batch-body-with-section": "$1 {{GENDER:$1|ħalla|ħalliet}} messaġġ fil-paġna tad-diskussjoni tiegħek f' \"$2\".", + "notification-edit-talk-page-email-subject2": "$1 {{GENDER:$2|ħallielek|ħallietlek}} messaġġ fuq {{SITENAME}}", "notification-page-linked-email-subject": "Inħolqot ħolqa għall-paġna tiegħek fuq {{SITENAME}}", - "notification-reverted-email-subject2": "Il-{{PLURAL:$3|modifika tiegħek ġiet annullata|modifiki tiegħek ġew annullati}} {{GENDER:$1|fuq}} {{SITENAME}}", - "notification-mention-email-subject": "$1 {{GENDER:$1|semmiek|semmietek}} fuq {{SITENAME}}$1", + "notification-reverted-email-subject2": "Il-{{PLURAL:$4|modifika tiegħek ġiet annullata|modifiki tiegħek ġew annullati}} {{GENDER:$2|fuq}} {{SITENAME}}", + "notification-mention-email-subject": "$1 {{GENDER:$2|semmiek|semmietek}} fuq {{SITENAME}}$1", "notification-user-rights-email-subject": "Id-drittijiet tiegħek ta' utent fuq {{SITENAME}} inbidlu.", - "echo-email-body-default": "Għandek notifika ġdida fuq {{SITENAME}}:\n\n$1", - "echo-email-footer-default": "$2\n\nBiex tkun taf liema posta elettronika tasallek, iċċekkja l-preferenzi tiegħek: \n{{canonicalurl:{{#special:Preferences}}#mw-prefsection-echo}}\n\n$1", "echo-overlay-link": "In-notifiki kollha", "echo-overlay-title": "<b>Notifiki</b>", - "echo-overlay-title-overflow": "<b>{{PLURAL:$1|Notifiki}}</b> (qegħdin jidhru $1 minn $2 li ma nqrawx)", "echo-mark-all-as-read": "Immarkahom kollha bħala li nqraw", "echo-date-today": "Illum", "echo-date-yesterday": "Ilbieraħ", - "echo-load-more-error": "Sar żball waqt li kienu qegħdin jinkisbu iktar riżultati.", "echo-email-batch-subject-daily": "Għandek {{PLURAL:$2|notifika ġdida|notifiki ġodda}} fuq {{SITENAME}}", "echo-email-batch-subject-weekly": "Għandek {{PLURAL:$2|notifika ġdida|notifiki ġodda}} fuq {{SITENAME}} dil-Ġimgħa", "echo-email-batch-body-intro-daily": "X'hemm $1,\nDan hu s-sommarju tal-attività tal-lum fuq {{SITENAME}} biex tista' tarah.", diff --git a/Echo/i18n/mwl.json b/Echo/i18n/mwl.json index b60c60ab..adc5e9a8 100644 --- a/Echo/i18n/mwl.json +++ b/Echo/i18n/mwl.json @@ -1,13 +1,12 @@ { "@metadata": { "authors": [ - "MokaAkashiyaPT", - "Athena in Wonderland" + "Athena in Wonderland", + "MokaAkashiyaPT" ] }, "prefs-echo": "Notificaçones", "prefs-emailsettings": "Oupçones de correio eiletrónico", - "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-blocknotificationslist": "Lhista de bloqueios", diff --git a/Echo/i18n/my.json b/Echo/i18n/my.json index 2ca5e936..defb19a7 100644 --- a/Echo/i18n/my.json +++ b/Echo/i18n/my.json @@ -1,22 +1,27 @@ { "@metadata": { "authors": [ - "Ninjastrikers", "9.sinistra", - "Dr Lotus Black" + "Dr Lotus Black", + "Ninjastrikers", + "Teitei Para" ] }, "prefs-echo": "အသိပေးချက်များ", "prefs-emailsettings": "အီးမေးအတွက် ရွေးချယ်စရာ", - "prefs-displaynotifications": "ပြသရန် ရွေးချယ်မှု", "prefs-echosubscriptions": "ဤဖြစ်ရပ်များကို ကျွန်ုပ်အားအသိပေးပါ", "prefs-echocrosswiki": "ဝီကီများအနှံ့ အသိပေးချက်များ", "prefs-blocknotificationslist": "အသံတိတ်သွားသော အသုံးပြုသူများ", + "prefs-mutedpageslist": "စာမျက်နှာလင့်ခ်ချိတ်မှုအသိပေးချက်များအတွက် အသံတိတ်သွားသောစာမျက်နှာများ", + "prefs-echopollupdates": "အချိန်နှင့်တပြေးညီ အသိပေးချက်များ", + "echo-mobile-notifications-filter-title": "စိစစ်မှု အသိပေးချက်များ", + "echo-pref-show-poll-updates": "အသိပေးချက်အသစ်များကို ရောက်ရှိသည်နှင့် ပြသရန်", "echo-pref-send-me": "ပို့ပေးပါ:", "echo-pref-send-to": "ပို့ရန်:", "echo-pref-email-format": "အီးမေးလ်ပုံစံ:", "echo-pref-web": "ဝဘ်", "echo-pref-email": "အီးမေးလ်", + "echo-pref-push": "အပ်များ", "echo-pref-email-frequency-never": "မည်သည့်အီးမေးလ် အသိပေးချက်မျှ မပို့ပါနှင့်", "echo-pref-email-frequency-immediately": "ဝင်လာသော သီးသန့်အသိပေးချက်များ", "echo-pref-email-frequency-daily": "နေ့စဉ်အကျဉ်းချုပ် အသိပေးချက်များ", @@ -25,14 +30,23 @@ "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-notifications-page-linked-title-muted-list": "ဤစာမျက်နှာများအတွက် \"စာမျက်နှာလင့်ခ်ချိတ်မှု\" အသိပေးချက်များကို မဖော်ပြပါနှင့်။\n([[mw:Special:MyLanguage/Help:Notifications#mute|ပိုမိုလေ့လာရန်]])", "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-system-noemail": "{{PLURAL:$1|စနစ်}}", + "echo-category-title-system-emailonly": "{{PLURAL:$1|စနစ်}}", + "echo-category-title-user-rights": "{{PLURAL:$1|အသုံးပြုသူအခွင့်ရေး ပြောင်းလဲမှု|အသုံးပြုသူအခွင့်ရေး ပြောင်းလဲမှုများ}}", "echo-category-title-emailuser": "{{PLURAL:$1|အခြားအသုံးပြုသူမှ အီးမေးလ်|အခြားအသုံးပြုသူမှ အီးမေးလ်များ}}", + "echo-category-title-thank-you-edit": "{{PLURAL:$1|မိုင်တိုင်|မိုင်တိုင်များ}} ပြင်ဆင်ရန်", "echo-pref-tooltip-edit-user-talk": "တစ်ယောက်ယောက်က မိမိ၏ဆွေးနွေးစာမျက်နှာတွင် မက်ဆေ့တစ်စောင်ပို့ပါက သို့မဟုတ် အကြောင်းပြန်ပါက အသိပေးရန်။", "echo-pref-tooltip-user-rights": "မိမိ၏အသုံးပြုသူအခွင့်ရေးကို တစ်ယောက်ယောက်မှ ပြောင်းလဲလိုက်ပါက အသိပေးရန်။", "echo-pref-tooltip-emailuser": "တစ်ယောက်ယောက်က ကျွန်ုပ်အား အီးမေးလ်ပို့ပါက အသိပေးရန်။", @@ -41,16 +55,20 @@ "tooltip-pt-notifications-notice": "{{GENDER:|သင်၏}} အသိပေးစာများ", "echo-displaynotificationsconfiguration-notifications-by-category-header": "ကဏ္ဍအလိုက် အသိပေးချက်များ", "echo-displaynotificationsconfiguration-available-notification-methods-header": "ခွင့်ပြုထားသော အသိပေးချက်နည်းလမ်းများ", + "echo-displaynotificationsconfiguration-enabled-default-existing-users-legend": "ရှိနှင့်ပြီးသား အသုံးပြုသူများ", "echo-displaynotificationsconfiguration-enabled-default-new-users-legend": "အသုံးပြုသူ အသစ်များ", "echo-displaynotificationsconfiguration-mandatory-notification-methods-header": "လိုအပ်သော အသိပေးချက်နည်းလမ်းများ", "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-notification-placeholder": "အသိပေးချက်များ မရှိပါ။", + "echo-notification-placeholder-filters": "ဤသတ်မှတ်ချက်နှင့်ကိုက်ညီသော အသိပေးချက်များ မရှိပါ။", "echo-notification-loginrequired": "သင်၏အသိပေးချက်များကို ကြည့်ရန် အကောင့်ထဲသို့ဝင်ရပါမည်။", "echo-notification-popup-loginrequired": "သင်၏အသိပေးချက်များကို ကြည့်ရှုရန် အကောင့်ထဲသို့ဝင်ပါ။", "echo-notification-markasread": "ဖတ်ပြီးကြောင်း မှတ်သားရန်", @@ -64,14 +82,22 @@ "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": "<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-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-compact-header-mention-failure-user-unknown": "<strong>အသုံးပြုသူအမည် မတည်ရှိပါ:</strong> $1", + "notification-compact-header-mention-failure-user-anonymous": "<strong>အိုင်ပီများကို ရည်ညွှန်းမပြောနိုင်ပါ:</strong> $1", + "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-add-and-remove": "{{GENDER:$6|သင်၏}} အသုံးပြုသူအခွင့်အရေးများ {{GENDER:$1|ပြောင်းလဲသွားသည်}}။ သင့်ကို $2သို့ ပေါင်းထည့်လိုက်သည်။ သင်သည် $4၏ အဖွဲ့ဝင် မဟုတ်တော့ပါ။", "notification-header-welcome": "{{SITENAME}} က {{GENDER:$2|ကြိုဆိုပါတယ်}}၊ $1! ဒီနေရာကို {{GENDER:$2|သင်}}ရောက်လာတဲ့အတွက် ကျွန်ုပ်တို့ ဝမ်းသာပါတယ်။", "notification-welcome-linktext": "ကြိုဆိုပါသည်", "notification-header-thank-you-1-edit": "{{GENDER:$2|သင့်ရဲ့}} ပထမဆုံး တည်းဖြတ်မှုကို {{GENDER:$2|သင်}} ပြုလုပ်ခဲ့ပါပြီ၊ {{GENDER:$2|ကျေးဇူးတင်ပြီး}} ကြိုဆိုလိုက်ပါတယ်!", @@ -86,11 +112,10 @@ "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-edit-talk-page-email-subject2": "$1 က {{SITENAME}}တွင် မက်ဆေ့တစ်စောင် {{GENDER:$2|ချန်ထားခဲ့သည်}}", + "notification-page-linked-email-subject": "{{GENDER:$3|သင်}}ဖန်တီးခဲ့သော စာမျက်နှာတစ်ခုသည် {{SITENAME}} တွင် လင့်ခ်ချိတ်ခဲ့ပါသည်", + "notification-reverted-email-subject2": "{{SITENAME}} ရှိ {{GENDER:$3|သင့်}} {{PLURAL:$4|တည်းဖြတ်မှု|တည်းဖြတ်မှုများ}}ကို {{GENDER:$2|နောက်ပြန်ပြင်ခဲ့သည်}}", + "notification-user-rights-email-subject": "{{SITENAME}}တွင် {{GENDER:$3|သင်၏}}အသုံးပြုသူအခွင့်ရေး ပြောင်းလဲသွားပါသည်", "notification-timestamp-ago-seconds": "{{PLURAL:$1|$1စက္ကန့်}}", "notification-timestamp-ago-minutes": "{{PLURAL:$1|$1မိနစ်}}", "notification-timestamp-ago-hours": "{{PLURAL:$1|$1နာရီ}}", @@ -102,15 +127,23 @@ "notification-inbox-filter-read": "ဖတ်ပြီး", "notification-inbox-filter-unread": "မဖတ်ရသေး", "notification-inbox-filter-all": "အားလုံး", - "echo-email-body-default": "{{SITENAME}} တွင် အသိပေးချက်တစ်ခု ရောက်နေသည်:\n\n$1", + "echo-specialmute-label-mute-notifications": "ဤ {{GENDER:$1|user}}မှ သတိပေးချက်ကို ရပ်ဆိုင်းပါ", + "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-alert-text-only": "အသိပေးချက်များ", "echo-notification-notice-text-only": "ကြော်ငြာသင်ပုန်း", "echo-overlay-link": "အသိပေးချက်များ အားလုံး", "echo-overlay-title": "<b>အသိပေးချက်များ</b>", "echo-mark-all-as-read": "အကုန်လုံး ဖတ်ရှုပြီးဖြစ်ကြောင်း မှတ်သားရန်", + "echo-mark-wiki-as-read": "ရွေးချယ်ထားသည့်ဝီကီထဲတွင် အားလုံးကို ဖတ်ရှုပြီးသားအဖြစ် သတ်မှတ်ရန်: $1", + "echo-displaysnippet-title": "အသိပေးချက်အသစ်", "echo-date-today": "ယနေ့", "echo-date-yesterday": "မနေ့", + "echo-email-batch-subject-daily": "{{SITENAME}}၌ သင့်အတွက် {{PLURAL:$2|အသိပေးချက်အသစ် ၁ ခု|အသိပေးချက်အသစ်များ}} ရှိနေသည်", + "echo-email-batch-subject-weekly": "ဤအပတ်တွင် {{SITENAME}}၌ သင့်အတွက် {{PLURAL:$2|အသိပေးချက်အသစ် ၁ ခု|အသိပေးချက်အသစ်များ}} ရှိနေသည်", "echo-email-batch-link-text-view-all-notifications": "အသိပေးချက်များ အားလုံးကို ကြည့်ရန်", "notification-header-foreign-alert": "{{PLURAL:$5|အခြားဝီကီ|$5 အခြားဝီကီများ}}မှ သတိပေးချက်များ ပို၍", "notification-header-foreign-notice": "{{PLURAL:$5|အခြားဝီကီ|$5 အခြားဝီကီများ}}မှ အသိပေးချက်များ ပို၍", diff --git a/Echo/i18n/myv.json b/Echo/i18n/myv.json new file mode 100644 index 00000000..15b1e9b7 --- /dev/null +++ b/Echo/i18n/myv.json @@ -0,0 +1,8 @@ +{ + "@metadata": { + "authors": [ + "Rueter" + ] + }, + "tooltip-pt-notifications-alert": "{{GENDER:|Тонть}} «Ванок!» пачтямнеть" +} diff --git a/Echo/i18n/nah.json b/Echo/i18n/nah.json new file mode 100644 index 00000000..37c632ab --- /dev/null +++ b/Echo/i18n/nah.json @@ -0,0 +1,8 @@ +{ + "@metadata": { + "authors": [ + "Akapochtli" + ] + }, + "notification-welcome-linktext": "Ximopanoltih" +} diff --git a/Echo/i18n/nan.json b/Echo/i18n/nan.json index a3715650..430c02ef 100644 --- a/Echo/i18n/nan.json +++ b/Echo/i18n/nan.json @@ -1,6 +1,7 @@ { "@metadata": { "authors": [ + "A-lú-mih", "Luuva" ] }, diff --git a/Echo/i18n/nap.json b/Echo/i18n/nap.json index a18e989e..bf43db45 100644 --- a/Echo/i18n/nap.json +++ b/Echo/i18n/nap.json @@ -2,9 +2,9 @@ "@metadata": { "authors": [ "C.R.", + "Catrope", "Chelin", "Macofe", - "Catrope", "Nemo bis", "Ruthven" ] @@ -12,7 +12,6 @@ "echo-desc": "Sistema pe' notificà ll'utente ncopp'a ll'evente e li mmasciate", "prefs-echo": "Mmasciate", "prefs-emailsettings": "Opziune e-mail", - "prefs-displaynotifications": "Opziune 'e visualizzazione", "prefs-echosubscriptions": "Famme sapè ncopp'a sti avvenimente", "prefs-echocrosswiki": "Nutifiche cross-wiki", "echo-pref-send-me": "Manna a mme:", @@ -27,8 +26,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-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ù", "echo-log": "Riggistro pubbreco", "echo-new-messages": "Avite mmasciate nove", @@ -50,7 +47,6 @@ "echo-pref-tooltip-mention-success": "Famme 'a notifica si mannasse fòre na menziona a coccheruno.", "echo-pref-tooltip-user-rights": "Famme nu tuzzuleo si coccheruno cagnasse 'e deritte utente mieie.", "echo-pref-tooltip-emailuser": "Famme notifica si coccheruno me mannasse na mail.", - "echo-error-no-formatter": "Nisciuna furmattazione è stata definita p' 'e tuzzulee.", "notifications": "Mmasciate", "tooltip-pt-notifications-alert": "L'allerte {{GENDER:|vuoste}}", "tooltip-pt-notifications-notice": "'E communicaziune {{GENDER:|vuoste}}", @@ -61,33 +57,29 @@ "echo-displaynotificationsconfiguration-sorting-by-section-legend": "Int'a quale seziona ogne tipo 'e cagnamiento fosse sistimato", "echo-displaynotificationsconfiguration-available-notification-methods-header": "Metode 'e notifica cunzentute", "echo-displaynotificationsconfiguration-available-notification-methods-by-category-legend": "Qualu metodo 'e notifica se suppurtasse p'ogne categurìa", - "echo-displaynotificationsconfiguration-available-notification-methods-by-type-legend": "Quali metodi 'e cagnamiento songo suppurtate p'ogne tipo; s'apprecasse surtanto a 'e tipe 'e ll'interno d' 'e categurìe ca songo annascunnute 'a 'e preferenze", "echo-displaynotificationsconfiguration-enabled-default-header": "Appicciato predefinito", "echo-displaynotificationsconfiguration-enabled-default-existing-users-legend": "Utente esistente", "echo-displaynotificationsconfiguration-enabled-default-new-users-legend": "Utente nuove", "echo-displaynotificationsconfiguration-mandatory-notification-methods-header": "Metode 'e notifica richieste", "echo-displaynotificationsconfiguration-mandatory-notification-methods-by-category-legend": "Quali metodi so' obbligatori p'ogne categurìa", "echo-specialpage": "Mmasciate", - "echo-specialpage-section-markread": "Nzegna stu gruppo comme fosse letto", + "echo-specialpage-section-markread": "Nzegna stu gruppo comme fosse leggiuto", "echo-specialpage-markasread": "Notifica: Nzegna comme fosse letta", "echo-specialpage-markasread-invalid-id": "ID evento nun è buono", "echo-specialpage-pagination-numnotifications": "{{PLURAL:$1|$1 notifica|$1 notifiche}}", "echo-specialpage-pagefilters-title": "Attività ricente", - "echo-specialpage-pagefilters-subtitle": "Paggene cu' notifiche nun liggiute", - "notificationsmarkread-legend": "Nzegna 'a notifica comme liggiuta", - "echo-anon": "Pe' ricevere notifiche, <span class=\"plainlinks\">[$1 criate nu cunto] o <span class=\"plainlinks\">[$2 trasite].", + "echo-specialpage-pagefilters-subtitle": "Paggene co mmasciate nun leggiute", + "notificationsmarkread-legend": "Nzegna 'a notifica comme leggiuta", "echo-none": "Nun tiene notifiche.", - "echo-more-info": "Cchiù nfurmaziune", - "echo-feedback": "Commenti", "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.", "echo-notification-placeholder-filters": "Nun ce stanno notifiche ca currispunnessero a sti criterie.", "echo-notification-loginrequired": "Avit'a trasì pe' puté vede' 'e mmasciate voste.", "echo-notification-popup-loginrequired": "Pe' piacere, trasite pe' vedé 'e notifiche vuoste.", - "echo-notification-markasread": "Nzegna comme fosse letto", - "echo-notification-markasunread": "Nzegna comme fosse nun letto", - "echo-notification-markasread-tooltip": "Nzegna comme fosse letto", + "echo-notification-markasread": "Nzegna comme leggiuto", + "echo-notification-markasunread": "Nzegna comme nun leggiuto", + "echo-notification-markasread-tooltip": "Nzegna comme leggiuto", "echo-notification-more-options-tooltip": "Cchiù opziune", "notification-dynamic-actions-unwatch": "{{GENDER:$3|Ferniscela}} 'e cuntrullà attività nuova ncopp' 'o \"$1\"", "notification-dynamic-actions-unwatch-confirmation": "{{GENDER:$3|Vedite ca}} nun state cchiù a cuntrullà 'a paggena \"$1\"", @@ -146,11 +138,10 @@ "notification-link-text-view-edit": "Vire 'o cagnamiento", "notification-header-reverted": "{{PLURAL:$4|'O cagnamiento ncopp'a <strong>$3</strong> vuosto è stato|'E cagnamiente vuoste ncopp' 'a <strong>$3</strong> so state}} {{GENDER:$2|annullate}}", "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-edit-talk-page-email-subject2": "$1 {{GENDER:$2|t'ha lassato}} na mmasciata {{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-reverted-email-subject2": "{{PLURAL:$4|'O cangiamento vuosto è stato|'E cangiamiente vuoste so'}} state {{GENDER:$2|annullate}} ncopp'a {{SITENAME}}", + "notification-mention-email-subject": "$1 {{GENDER:$2|facette 'o nomme}} {{GENDER:$3|vuosto}} ncopp'a {{SITENAME}}", "notification-user-rights-email-subject": "'E deritte utente vuoste so' state cagnate ncopp'a {{SITENAME}}", "notification-timestamp-ago-seconds": "{{PLURAL:$1|$1 s}}", "notification-timestamp-ago-minutes": "{{PLURAL:$1|$1m}}", @@ -161,11 +152,8 @@ "notification-timestamp-today": "Ogge", "notification-timestamp-yesterday": "Aiere", "notification-inbox-filter-read": "Liegge", - "notification-inbox-filter-unread": "Nun liggiuto", + "notification-inbox-filter-unread": "Nun leggiuto", "notification-inbox-filter-all": "Tutte", - "echo-email-body-default": "Avite na notifica nova ncopp'a {{SITENAME}}:\n\n$1", - "echo-email-footer-default-html": "Pe' putè cuntrullà le mail ca ve mannammo, <a href=\"$2\" style=\"text-decoration:none; color: #3868B0;\">cuntrullate 'e preferenze voste</a>.<br />\n$1", - "echo-email-footer-default": "$2\n\nPe' puté cuntrullà 'e mmasciate mail ca te mannammo, vedite nu poco 'e preferenze vuoste::\n{{canonicalurl:{{#special:Preferences}}#mw-prefsection-echo}}\n\n$1", "echo-email-plain-footer": "Pe' puté cuntrullà quali 'email ve mannammo, cuntrullate 'e preferenze:", "echo-email-html-footer-preference-link-text": "cuntrulate 'e preferenze d' 'e voste", "echo-email-html-footer-with-link": "Pe' puté cuntrullà quali email ve véneno mannate, $1.", @@ -175,13 +163,11 @@ "echo-notification-notice-text-only": "Notifiche", "echo-overlay-link": "Tutt' 'e notifiche vuoste", "echo-overlay-title": "<b>Notifiche</b>", - "echo-overlay-title-overflow": "<b>{{PLURAL:$1|Notifica|Notifiche}}</b> (mmustanno $1 'e $2 nun liggiute)", "echo-mark-all-as-read": "Nzegna tutte cumme fossero lette", - "echo-mark-all-as-read-confirmation": "$1 {{PLURAL:$1|notifica|nutifiche}} nzegnate comm'a liggiute", - "echo-mark-wiki-as-read": "Nzegna comme liggiuta dint'a wiki scigliuta: $1", + "echo-mark-all-as-read-confirmation": "$1 {{PLURAL:$1|'mmasciata|mmasciate}} nzegnate comme leggiute", + "echo-mark-wiki-as-read": "Nzegna comme leggiuta dint' 'a wiki scigliuta: $1", "echo-date-today": "Ogge", "echo-date-yesterday": "Aiere", - "echo-load-more-error": "Ascette n'errore pe' tramente ca s'arrepigliaveno cchiù risultate.", "notification-bundle-header-edit-user-talk-v2": "{{PLURAL:$1|Na masciata nuova|$1 mmasciate nnove|100=99+ mmasciate nnove}} dint' 'a <strong>paggena 'e chiacchiera {{GENDER:$3|d' 'a toja}}.</strong>", "echo-email-batch-subject-daily": "Avite {{PLURAL:$2|na notifica nova|d' 'e notifiche nnove}} dint'a {{SITENAME}}", "echo-email-batch-subject-weekly": "Avite {{PLURAL:$2|na notifica nova|d' 'e notifiche nnove}} dint'a {{SITENAME}} sta semmana", diff --git a/Echo/i18n/nb.json b/Echo/i18n/nb.json index 6a56f96a..d51370b5 100644 --- a/Echo/i18n/nb.json +++ b/Echo/i18n/nb.json @@ -1,24 +1,27 @@ { "@metadata": { "authors": [ + "Chameleon222", "Danmichaelo", "Jeblad", + "Jon Harald Søby", "Laaknor", - "Njardarlogar", - "Chameleon222", - "SuperPotato", "Macofe", "Nemo bis", - "Jon Harald Søby" + "Njardarlogar", + "SuperPotato" ] }, "echo-desc": "System for å gi brukere beskjed om hendelser og meldinger", "prefs-echo": "Beskjeder", "prefs-emailsettings": "E-postinnstillinger", - "prefs-displaynotifications": "Visningsvalg", "prefs-echosubscriptions": "Gi meg beskjed om disse hendelsene", "prefs-echocrosswiki": "Interwikivarsler", "prefs-blocknotificationslist": "Ignorerte brukere", + "prefs-echopollupdates": "Direkte varsler", + "echo-mobile-notifications-filter-title": "Filtrer varsler", + "echo-pref-show-poll-updates": "Vis nye varsler når de kommer", + "echo-pref-show-poll-updates-help": "Vis antall uleste varsler i tittellinja, og vis et utdrag av hvert varsel med én gang det kommer.", "echo-pref-send-me": "Send meg:", "echo-pref-send-to": "Send til:", "echo-pref-email-format": "Epost-format:", @@ -32,8 +35,7 @@ "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: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-pref-dont-email-read-notifications": "Ikke inkluder lesevarsler i sammendragseposter", "echo-learn-more": "Lær mer", "echo-log": "Offentlig logg", "echo-new-messages": "Du har nye meldinger", @@ -45,9 +47,14 @@ "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-system-noemail": "{{PLURAL:$1|System}}", + "echo-category-title-system-emailonly": "{{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-category-title-thank-you-edit": "Rediger {{PLURAL:$1|milepæl|milepæler}}", + "echo-category-title-watchlist": "Redigering av overvåket side", + "echo-category-title-minor-watchlist": "Mindre redigering av overvåket side", "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": "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.", @@ -57,7 +64,9 @@ "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.", - "echo-error-no-formatter": "Ingen formatering definert for beskjeden.", + "echo-pref-tooltip-thank-you-edit": "Varsle meg når jeg gjør min 1., 10., 100., osv. redigering.", + "echo-pref-tooltip-watchlist": "Varsle meg når noen gjør en (ikke mindre) redigering til en side på overvåkningslisten min.", + "echo-pref-tooltip-minor-watchlist": "Varsle meg når noen gjør en mindre redigering av en side på overvåkningslisten min.", "notifications": "Beskjeder", "tooltip-pt-notifications-alert": "{{GENDER:|Dine}} varsler", "tooltip-pt-notifications-notice": "{{GENDER:|Dine}} notiser", @@ -68,7 +77,6 @@ "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": "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", @@ -78,14 +86,13 @@ "echo-specialpage-section-markread": "Merk gruppen som lest", "echo-specialpage-markasread": "Beskjed: Merk som lest", "echo-specialpage-markasread-invalid-id": "Ugyldig hendelses-ID", + "echo-specialpage-pagefilterwidget-aria-label": "Filtrer etter wiki og sidetittel", "echo-specialpage-pagination-numnotifications": "$1 {{PLURAL:$1|beskjed|beskjeder}}", + "echo-specialpage-pagination-range": "$1–$2", "echo-specialpage-pagefilters-title": "Nylig aktivitet", "echo-specialpage-pagefilters-subtitle": "Sider med uleste beskjeder", "notificationsmarkread-legend": "Merk beskjed som lest", - "echo-anon": "For å motta beskjeder, [$1 opprett en konto] eller [$2 logg inn].", "echo-none": "Du har ingen beskjeder.", - "echo-more-info": "Mer informasjon", - "echo-feedback": "Tilbakemelding", "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.", @@ -145,6 +152,16 @@ "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-header-watchlist-changed": "$1 {{GENDER:$2|endret}} <strong>$3</strong>, ei side på overvåkningslista {{GENDER:$4|di}}{{PLURAL:$5||, $5 ganger}}.", + "notification-header-watchlist-created": "$1 {{GENDER:$2|opprettet}} <strong>$3</strong>, ei side på overvåkningslista {{GENDER:$4|di}}{{PLURAL:$5||, $5 ganger}}.", + "notification-header-watchlist-deleted": "$1 {{GENDER:$2|slettet}} <strong>$3</strong>, ei side på overvåkningslista {{GENDER:$4|di}}{{PLURAL:$5||, $5 ganger}}.", + "notification-header-watchlist-moved": "$1 {{GENDER:$2|flyttet}} <strong>$3</strong>, ei side på overvåkningslista {{GENDER:$4|di}}{{PLURAL:$5||, $5 ganger}}.", + "notification-header-watchlist-restored": "$1 {{GENDER:$2|gjenopprettet}} <strong>$3</strong>, ei side på overvåkningslista {{GENDER:$4|di}}{{PLURAL:$5||, $5 ganger}}.", + "notification-header-watchlist-multiuser-changed": "<strong>$1</strong>, ei side på overvåkningslista {{GENDER:$2|di}}, ble endret {{PLURAL:$3|$3 gang|$3 ganger}}.", + "notification-header-watchlist-multiuser-created": "<strong>$1<strong>, ei side på overvåkningslista {{GENDER:$2|di}}, ble opprettet $3 {{PLURAL:$3|gang|ganger}}.", + "notification-header-watchlist-multiuser-deleted": "<strong>$1</strong>, ei side på overvåkningslista {{GENDER:$2|di}}, ble slettet $3 {{PLURAL:$3|gang|ganger}}.", + "notification-header-watchlist-multiuser-moved": "<strong>$1</strong>, ei side på overvåkningslista {{GENDER:$2|di}}, ble flyttet $3 {{PLURAL:$3|gang|ganger}}.", + "notification-header-watchlist-multiuser-restored": "<strong>$1</strong>, ei side på overvåkningslista {{GENDER:$2|di}}, ble gjenopprettet $3 {{PLURAL:$3|gang|ganger}}.", "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!", @@ -158,12 +175,11 @@ "notification-link-article-reminder": "Vis siden", "notification-header-reverted": "{{PLURAL:$4|Redigeringen din|Redigeringene dine}} på <strong>$3</strong> har blitt {{GENDER:$2|tilbakestilt}}.", "notification-header-emailuser": "$1 {{GENDER:$2|sendte}} deg en epost.", - "notification-edit-talk-page-email-subject2": "$1 {{GENDER:$1|skrev}} en melding til deg på {{SITENAME}}", - "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|nevnte}} {{GENDER:$2|deg}} på {{SITENAME}}", - "notification-user-rights-email-subject": "Brukerrettighetene dine ble endret på {{SITENAME}}", + "notification-edit-talk-page-email-subject2": "$1 {{GENDER:$2|skrev}} en melding til deg på {{SITENAME}}", + "notification-page-linked-email-subject": "En side {{GENDER:$3|du}} opprettet ble lenket til på {{SITENAME}}", + "notification-reverted-email-subject2": "{{PLURAL:$4|Redigeringen din|Redigeringene dine}} på {{SITENAME}} ble {{GENDER:$2|tilbakestilt}}", + "notification-mention-email-subject": "$1 {{GENDER:$2|nevnte}} {{GENDER:$3|deg}} på {{SITENAME}}", + "notification-user-rights-email-subject": "Brukerrettighetene {{GENDER:$3|dine}} har blitt endret på {{SITENAME}}", "notification-timestamp-ago-seconds": "{{PLURAL:$1|$1s}}", "notification-timestamp-ago-minutes": "{{PLURAL:$1|$1m}}", "notification-timestamp-ago-hours": "{{PLURAL:$1|$1t}}", @@ -175,9 +191,7 @@ "notification-inbox-filter-read": "Leste", "notification-inbox-filter-unread": "Uleste", "notification-inbox-filter-all": "Alle", - "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-specialmute-label-mute-notifications": "Demp varsler fra denne brukeren", "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 å styre hvilke eposter vi sender {{GENDER:$2|deg}}, $1.", @@ -187,13 +201,12 @@ "echo-notification-notice-text-only": "Notiser", "echo-overlay-link": "Alle beskjeder", "echo-overlay-title": "<b>Beskjeder</b>", - "echo-overlay-title-overflow": "<b>{{PLURAL:$1|Beskjed|Beskjeder}}</b> (viser $1 av $2 uleste)", "echo-mark-all-as-read": "Merk alle som leste", "echo-mark-all-as-read-confirmation": "$1 {{PLURAL:$1|varsel|varsler}} markert som lest", "echo-mark-wiki-as-read": "Merk alle som lest på den valgte wikien: $1", + "echo-displaysnippet-title": "Nytt varsel", "echo-date-today": "I dag", "echo-date-yesterday": "I går", - "echo-load-more-error": "En feil oppsto under henting av flere resultater.", "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", @@ -202,5 +215,6 @@ "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}}", - "notification-header-foreign-all": "Flere beskjeder fra {{PLURAL:$5|én annen wiki|$5 andre wikier}}" + "notification-header-foreign-all": "Flere beskjeder fra {{PLURAL:$5|én annen wiki|$5 andre wikier}}", + "echo-foreign-wiki-lang": "$1 – $2" } diff --git a/Echo/i18n/nds-nl.json b/Echo/i18n/nds-nl.json index 6241f00b..7a6c820e 100644 --- a/Echo/i18n/nds-nl.json +++ b/Echo/i18n/nds-nl.json @@ -4,10 +4,9 @@ "Servien" ] }, - "echo-desc": "Systeem veur t informeren van gebrukers over evenementen en berichten", - "prefs-echo": "Melding", + "echo-desc": "Systeem vöär et informeren van gebrukers oaver evenementen en berichten", + "prefs-echo": "Meldingen", "prefs-emailsettings": "Netpostinstellingen", - "prefs-displaynotifications": "Weergave-instellingen", "prefs-echosubscriptions": "Stel mien op de heugte van disse gebeurtenissen", "prefs-echocrosswiki": "Meldingen van aandere wiki's", "echo-pref-send-me": "Stuur mien:", @@ -24,7 +23,7 @@ "echo-pref-cross-wiki-notifications": "Meldingen van aandere wiki's laoten zien", "echo-learn-more": "Meer lezen", "echo-log": "Openbaor logboek", - "echo-new-messages": "Jy hebben nye berichten", + "echo-new-messages": "Jy hebbet 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", @@ -35,18 +34,14 @@ "echo-pref-tooltip-article-linked": "Stuur m'n n melding as der ene n verwiezing maakt naor n zied die'k an-emaakt hebbe.", "echo-pref-tooltip-reverted": "Stuur m'n n melding as der ene n bewarking die'k an-ebröcht hebbe weerummedreit mit de funksie ongedaonmaken of weerummedreien.", "echo-pref-tooltip-mention": "Stuur m'n n melding as der ene n verwiezing maakt naor mien gebrukerszied vanaof n overlegzied.", - "echo-error-no-formatter": "Der is gien opmaak in-esteld veur de melding.", "notifications": "Meldingen", - "tooltip-pt-notifications-alert": "{{GENDER:|Oew}} meldingen", + "tooltip-pt-notifications-alert": "{{GENDER:|Juw}} meldingen", "tooltip-pt-notifications-notice": "{{GENDER:|Joew}} mededelingen", "echo-specialpage": "Meldingen", "echo-specialpage-pagefilters-title": "Leste aktiviteit", "echo-specialpage-pagefilters-subtitle": "Ziejen mit meldingen die niet elezen bin", "notificationsmarkread-legend": "Markeer melding as elezen", - "echo-anon": "[$1 Maak n gebrukerskonto n] of [$2 meld je eigen an] a'j meldingen ontvangen willen.", "echo-none": "Je hebben gien meldingen.", - "echo-more-info": "Meer informasie", - "echo-feedback": "Kommentaar", "echo-api-failure": "Kan meldingen niet ophaolen.", "echo-notification-placeholder": "Der bin gien berichten.", "echo-notification-markasread": "Markeer as elezen", @@ -58,18 +53,18 @@ "notification-link-text-expand-notice-count": "Bekiek {{PLURAL:$1|$1 mededeling|$1 mededelingen}}", "notification-link-text-expand-all-count": "{{PLURAL:$1|$1 melding|$1 meldingen}} bekieken", "notification-link-text-collapse-all": "Inklappen", - "notification-link-text-view-message": "Bericht bekieken", + "notification-link-text-view-message": "Bericht bekyken", "notification-link-text-view-mention": "Vermelding bekieken", - "notification-link-text-view-changes": "Verschil bekieken", + "notification-link-text-view-changes": "Wysigingen {{GENDER:$1|bekyken}}", "notification-link-text-view-page": "Zied bekieken", + "notification-header-edit-user-talk": "$1 hevt een bericht up <strong>{{GENDER:$3|juw}} oaverlegsyde</strong> {{GENDER:$2|achterlåten}}.", "notification-welcome-linktext": "Welkom", "notification-link-text-view-edit": "Bewarking bekieken", "notification-header-reverted": "Joew {{PLURAL:$4|bewarking op $3 is|bewarkingen op $3 bin}} {{GENDER:$2|weerummedreid}} deur $1", - "notification-edit-talk-page-email-subject2": "$1 {{GENDER:$1|hef}} n bericht veur joe achtereleuten op {{SITENAME}}", - "notification-edit-talk-page-email-batch-body-with-section": "$1 {{GENDER:$1|hef}} n bericht achtereleuten op joew overlegzied in \"$2\".", + "notification-edit-talk-page-email-subject2": "$1 {{GENDER:$2|hevt}} een bericht vöär {{GENDER:$3|ju}} achterlåten up {{SITENAME}}", "notification-page-linked-email-subject": "n Zied die'j an-emaakt hebbe is ekoppeld op {{SITENAME}}", - "notification-reverted-email-subject2": "Joew {{PLURAL:$3|bewarking op {{SITENAME}} is|bewarkingen op {{SITENAME}} bin}} {{GENDER:$1|weerummedreid}}", - "notification-mention-email-subject": "$1 {{GENDER:$1|hef}} joe eneumd op {{SITENAME}}", + "notification-reverted-email-subject2": "Joew {{PLURAL:$4|bewarking op {{SITENAME}} is|bewarkingen op {{SITENAME}} bin}} {{GENDER:$2|weerummedreid}}", + "notification-mention-email-subject": "$1 {{GENDER:$2|hef}} joe eneumd op {{SITENAME}}", "notification-user-rights-email-subject": "Joew gebrukersrechten op {{SITENAME}} bin ewiezigd", "notification-timestamp-ago-seconds": "{{PLURAL:$1|$1 s}}", "notification-timestamp-ago-minutes": "{{PLURAL:$1|$1m}}", @@ -82,17 +77,16 @@ "notification-inbox-filter-read": "Elezen", "notification-inbox-filter-unread": "Niet elezen", "notification-inbox-filter-all": "Alles", - "echo-email-body-default": "Je hebben n nieje melding op {{SITENAME}}:\n\n$1", - "echo-email-footer-default": "$2\n\nVolg de volgende verwiezing um te bepaolen hokken netberichten wie joe sturen:\n{{canonicalurl:{{#special:Preferences}}#mw-prefsection-echo}}\n\n$1", + "echo-email-plain-footer": "Kontroleer {{GENDER:$1|juw}} instellingen üm te bepålen welke netberichten wy {{GENDER:$1|ju}} stüren:", + "echo-email-html-footer-preference-link-text": "kontroleer {{GENDER:$1|juw}} instellingen", + "echo-email-html-footer-with-link": "Üm te bepålen welke netberichten wy {{GENDER:$2|ju}} stüren, $1.", "echo-notification-alert-text-only": "Meldingen", "echo-notification-notice-text-only": "Mededelingen", "echo-overlay-link": "Alle meldingen", "echo-overlay-title": "<b>Meldingen</b>", - "echo-overlay-title-overflow": "<b>{{PLURAL:$1|Meldingen}}</b> ($1 van $2 he'j nog niet elezen)", "echo-mark-all-as-read": "Alles as elezen markeren", "echo-date-today": "Vandage", "echo-date-yesterday": "Gisteren", - "echo-load-more-error": "Der is wat mis egaon bie t ophaolen van meer resultaoten.", "echo-email-batch-subject-daily": "Je hebben {{PLURAL:$2|n nieje melding|nieje meldingen}} op {{SITENAME}}", "echo-email-batch-subject-weekly": "Je hebben disse weke {{PLURAL:$2|n nieje melding|nieje meldingen}} op {{SITENAME}}", "echo-email-batch-body-intro-daily": "Huj $1,\nHier he'j n samenvatting van de aktiviteiten op {{SITENAME}} van vandage", diff --git a/Echo/i18n/ne.json b/Echo/i18n/ne.json index e915ac5a..a02c64a5 100644 --- a/Echo/i18n/ne.json +++ b/Echo/i18n/ne.json @@ -1,19 +1,24 @@ { "@metadata": { "authors": [ - "सरोज कुमार ढकाल", - "Nirjal stha", "NehalDaveND", - "राम प्रसाद जोशी", + "Nirjal stha", + "जनक राज भट्ट", + "पर्वत सुबेदी", "बिप्लब आनन्द", - "जनक राज भट्ट" + "राम प्रसाद जोशी", + "सरोज कुमार ढकाल", + "हिमाल सुबेदी" ] }, "echo-desc": "प्रयोगकर्तालाई सम्मेलन तथा सन्देश सूचना दिने जानकारी प्रणाली", "prefs-echo": "जानकारीहरू", "prefs-emailsettings": "इमेल विकल्पहरू", - "prefs-displaynotifications": "प्रदर्शन विकल्पहरू", "prefs-echosubscriptions": "निम्न घटनाहरूबारे मलाई जानकारी गराउने", + "prefs-echocrosswiki": "बहु-विकि जानकारीहरू", + "prefs-echopollupdates": "प्रत्यक्ष जानकारीहरू", + "echo-mobile-notifications-filter-title": "सूचनाहरू छनाेट गर्नुहाेस्", + "echo-pref-show-poll-updates": "नयाँ जानकरीहरू देखा परे पछि तिनलाई प्रदर्शन गर्नुहोस्", "echo-pref-send-me": "मलाई पठाउने:", "echo-pref-send-to": "पठाउने:", "echo-pref-email-format": "इमेल ढाँचा :", @@ -31,53 +36,111 @@ "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-system-noemail": "{{PLURAL:$1|प्रणाली}}", + "echo-category-title-system-emailonly": "{{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-error-no-formatter": "जानकारीको लागि कुनै पनि ढाँचा खुलाइएको छैन ।", + "echo-category-title-article-reminder": "{{PLURAL:$1|अनुस्मारक|अनुस्मारकहरू}} पृष्ठ", + "echo-category-title-thank-you-edit": "{{PLURAL:$1|काेशेढुङ्गा|काेशेढुङ्गाहरू}} सम्पादन", + "echo-category-title-watchlist": "अवलाेकन पृष्ठमा सम्पादन गर्नुहोस्", + "echo-category-title-minor-watchlist": "अवलाेकन पृष्ठमा सामान्य सम्पादन गर्नुहोस्", + "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": "जब कसैले मलाई डाँक पठाउँदछ भने मलाई सूचित गर्नुहोस्", "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-displaynotificationsconfiguration-mandatory-notification-methods-header": "जानकारी विधिहरू आवश्यक", "echo-specialpage": "जानकारीहरू", - "echo-anon": "जानकारीहरू प्राप्त गर्न, [$1 एउटा खाता खोल्नुहोस्] वा [$2 प्रवेश गर्नुहोस्]", + "echo-specialpage-section-markread": "समूहलाई पढिएकाे रूपमा चिनाे लगाउनुहाेस्", + "echo-specialpage-markasread": "जानकारी: पढिएकाे रूपमा चिनाे लगाउनुहाेस्", + "echo-specialpage-pagination-numnotifications": "$1 {{PLURAL:$1|$1 जानकारी|$1 जानकारीहरू}}", + "echo-specialpage-pagination-range": "$1 - $2", + "echo-specialpage-pagefilters-title": "हालको गतिविधि", + "echo-specialpage-pagefilters-subtitle": "नपठिएका सूचनाहरूको साथ पृष्ठहरू", + "notificationsmarkread-legend": "जानकारीलाई पढिएकाे रूपमा चिनाे लगाउनुहाेस्", "echo-none": "तपाईंको लागि कुनै नयाँ जानकारी छैन ।", - "echo-more-info": "थप जानकारी", - "echo-feedback": "प्रतिक्रिया", "echo-notification-placeholder": "तपाईंको लागि कुनै सूचना छैन ।", + "echo-notification-placeholder-filters": "यी मापदण्डसँग मेल खाने यहाँ कुनै सूचनाहरू छैनन्।", + "echo-notification-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-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": "परिवर्तन हेर्ने", + "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-compact-header-edit-user-talk-with-section": "{{GENDER:$3|तपाईलाई}} एक सन्देश $1 {{GENDER:$2|छाेड्नुभएकाे छ}} \"<strong>$4</strong>\".", + "notification-body-edit-user-talk-with-section": "$1", + "notification-compact-header-page-linked": "<strong>$1</strong> बाट सूत्रबद्ध", + "notification-link-text-what-links-here": "यस पृष्ठका सबै सूत्रहरू", + "notification-compact-header-mention-failure-user-unknown": "<strong>प्रयाेगकर्ता नाम हाल अस्तित्वमा छैन:</strong> $1", + "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-link-thank-you-edit": "{{GENDER:$1|तपाईकाे}} सम्पादन", "notification-link-text-view-edit": "सम्पादन हेर्ने", + "notification-link-article-reminder": "पृष्ठ हेर्नुहाेस्", "notification-header-reverted": "तपाईंको {{PLURAL:$4|सम्पादन $3 मा |सम्पादनहरू $3}} द्वारा {{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": "तपाईंको {{PLURAL:$3|सम्पादन |सम्पादनहरू}} {{SITENAME}} मा {{GENDER:$1|उल्ट्याइयो}}", - "notification-mention-email-subject": "$1 ले {{GENDER:$2|तपाईंलाई}} {{SITENAME}} मा {{GENDER:$1|उल्लेख गर्नुभयो}}", - "notification-user-rights-email-subject": "तपाईंको प्रयोगकर्ता अधिकारहरू {{SITENAME}} मा परिवर्तन भएका छन्।", + "notification-body-reverted": "$1", + "notification-header-emailuser": "$1 {{GENDER:$2|ले}} डाँक पठाउनुभएको छ", + "notification-edit-talk-page-email-subject2": "$1 ले {{GENDER:$3|तपाईलाई}} {{SITENAME}}मा एउटा सन्देश {{GENDER:$2|छोड्नुभएको छ}}", + "notification-page-linked-email-subject": "{{GENDER:$3|तपाईद्वारा}} निर्माण गरिएको पृष्ठ {{SITENAME}}मा जोडियो", + "notification-reverted-email-subject2": "{{GENDER:$3|तपाईको}} {{PLURAL:$4|सम्पादन |सम्पादनहरू}} {{SITENAME}}मा {{GENDER:$2|उल्ट्याइयो}}", + "notification-mention-email-subject": "$1 ले {{GENDER:$3|तपाईलाई}} {{SITENAME}} मा {{GENDER:$2|उल्लेख गर्नुभएकाे छ}}", + "notification-user-rights-email-subject": "{{GENDER:$3|तपाईको}} प्रयोगकर्ता अधिकारहरू {{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": "$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=सूचनाहरू (९९+)}}", + "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> ($2 मध्येका $1 नहेरिएका जानकारीहरू )", "echo-mark-all-as-read": "सबै पढिएको भनि चिनो लगाउने", + "echo-displaysnippet-title": "नयाँ जानकारी", "echo-date-today": "आज", "echo-date-yesterday": "हिजो", - "echo-load-more-error": "थप नतिजाहरू प्राप्त गर्दा त्रुटि हुन गयो ।", + "echo-email-batch-bullet": "।", "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": "सबै सूचनाहरू हेर्नुहोस्", + "echo-foreign-wiki-lang": "$1 - $2" } diff --git a/Echo/i18n/nl-informal.json b/Echo/i18n/nl-informal.json index fc569dd8..90dd7f41 100644 --- a/Echo/i18n/nl-informal.json +++ b/Echo/i18n/nl-informal.json @@ -5,8 +5,6 @@ ] }, "echo-none": "Je hebt geen meldingen.", - "echo-email-body-default": "Je hebt een nieuwe melding op {{SITENAME}}:\n\n$1", - "echo-email-footer-default": "$2\n\nVolg de volgende koppeling om je e-mailvoorkeuren te wijzigen of om je uit te schrijven:\n{{canonicalurl:{{#special:Preferences}}#mw-prefsection-echo}}\n\n$1", "echo-email-batch-subject-daily": "Je hebt vandaag {{PLURAL:$2|0=geen meldingen|één melding|$1 meldingen}}", "echo-email-batch-subject-weekly": "Je hebt deze week {{PLURAL:$2|0=geen meldingen|één melding|$1 meldingen}}" } diff --git a/Echo/i18n/nl.json b/Echo/i18n/nl.json index 574c62f0..29ae3bad 100644 --- a/Echo/i18n/nl.json +++ b/Echo/i18n/nl.json @@ -1,38 +1,45 @@ { "@metadata": { "authors": [ + "Catrope", + "Dinosaur918", "Edokter", + "Encycloon", + "Esketti", + "HanV", + "JurgenNL", "Kippenvlees1", + "Macofe", + "Mainframe98", + "Mar(c)", "Mathonius", + "Mbch331", + "McDutchie", + "MrLeopold", "Nemo bis", + "PiefPafPier", + "PonkoSasuke", "Rcdeboer", "Romaine", "SPQRobin", "Siebrand", + "Sjoerddebruin", "Southparkfan", "User555", - "Whaledad", - "JurgenNL", - "Sjoerddebruin", - "Mar(c)", - "Esketti", - "HanV", "Valhallasw", - "Macofe", - "Mbch331", - "Dinosaur918", - "Catrope", - "MrLeopold", - "Mainframe98" + "Whaledad" ] }, - "echo-desc": "Systeem voor het informeren van gebruikers over evenementen en berichten", + "echo-desc": "Systeem om gebruikers gebeurtenissen en berichten te melden", "prefs-echo": "Meldingen", "prefs-emailsettings": "E-mailinstellingen", - "prefs-displaynotifications": "Weergaveopties", - "prefs-echosubscriptions": "Informeer mij over deze gebeurtenissen", + "prefs-echosubscriptions": "Meld aan mij deze gebeurtenissen", "prefs-echocrosswiki": "Meldingen van andere wiki's", "prefs-blocknotificationslist": "Genegeerde gebruikers", + "prefs-echopollupdates": "Direct melden", + "echo-mobile-notifications-filter-title": "Meldingen filteren", + "echo-pref-show-poll-updates": "Nieuwe meldingen weergeven op het moment dat ze binnen komen", + "echo-pref-show-poll-updates-help": "Laat het aantal niet-gelezen meldingen zien in de titelbalk, en op het moment van ontvangen ook een stukje van elke melding.", "echo-pref-send-me": "Stuur mij:", "echo-pref-send-to": "Verzenden naar:", "echo-pref-email-format": "E-mailopmaak:", @@ -46,8 +53,7 @@ "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: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-pref-dont-email-read-notifications": "Gelezen meldingen niet opnemen in overzichtsmails", "echo-learn-more": "Meer lezen", "echo-log": "Openbaar logboek", "echo-new-messages": "U hebt nieuwe berichten", @@ -59,30 +65,36 @@ "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-system-noemail": "{{PLURAL:$1|Systeem}}", + "echo-category-title-system-emailonly": "{{PLURAL:$1|Systeem}}", "echo-category-title-user-rights": "{{PLURAL:$1|Gebruikersrechtenwijziging|Gebruikersrechtenwijzigingen}}", "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": "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.", - "echo-error-no-formatter": "Er is geen opmaak ingesteld voor deze melding.", + "echo-category-title-thank-you-edit": "Bewerkings{{PLURAL:$1|mijlpaal|mijlpalen}}", + "echo-category-title-watchlist": "Bewerking aan volglijstpagina", + "echo-category-title-minor-watchlist": "Kleine bewerking aan volglijstpagina", + "echo-pref-tooltip-edit-user-talk": "Meld mij wanneer iemand een bericht of antwoord op mijn overlegpagina plaatst.", + "echo-pref-tooltip-article-linked": "Meld mij wanneer iemand een koppeling aanbrengt naar een pagina die ik heb aangemaakt.", + "echo-pref-tooltip-reverted": "Meld mij wanneer iemand een bewerking van mij terugdraait met behulp van \"ongedaan maken\" of \"terugdraaien\".", + "echo-pref-tooltip-mention": "Meld mij wanneer iemand een koppeling naar mijn gebruikerspagina plaatst.", + "echo-pref-tooltip-mention-failure": "Meld mij wanneer mijn vermelding van iemand niet verzonden kon worden.", + "echo-pref-tooltip-mention-success": "Meld mij wanneer mijn vermelding van iemand is verzonden.", + "echo-pref-tooltip-user-rights": "Meld mij wanneer iemand mijn gebruikersrechten wijzigt.", + "echo-pref-tooltip-emailuser": "Meld mij wanneer iemand mij een e-mail stuurt.", + "echo-pref-tooltip-article-reminder": "Meld mij aangaande deze pagina wanneer ik erom vraag.", + "echo-pref-tooltip-thank-you-edit": "Meld mij wanneer ik mijn 1ste, 10de, 100de... bewerking maak.", + "echo-pref-tooltip-watchlist": "Meld mij wanneer iemand een bewerking doet (niet klein) aan een pagina op mijn volglijst.", + "echo-pref-tooltip-minor-watchlist": "Meld mij wanneer iemand een kleine bewerking doet aan een pagina op mijn volglijst.", "notifications": "Meldingen", "tooltip-pt-notifications-alert": "{{GENDER:|Uw}} meldingen", - "tooltip-pt-notifications-notice": "{{GENDER:|Uw}} notificaties", - "echo-displaynotificationsconfiguration": "Toon meldingsconfiguratie", + "tooltip-pt-notifications-notice": "{{GENDER:|Uw}} mededelingen", + "echo-displaynotificationsconfiguration": "Instellingen van schermmeldingen", "echo-displaynotificationsconfiguration-summary": "Dit overzicht geeft aan hoe meldingen zijn geconfigureerd op deze wiki.", "echo-displaynotificationsconfiguration-notifications-by-category-header": "Meldingen per categorie", - "echo-displaynotificationsconfiguration-sorting-by-section-header": "Hoe types gesorteerd zijn", + "echo-displaynotificationsconfiguration-sorting-by-section-header": "Hoe types ingedeeld zijn", "echo-displaynotificationsconfiguration-sorting-by-section-legend": "In welke sectie elk type geplaatst wordt", "echo-displaynotificationsconfiguration-available-notification-methods-header": "Toegestane meldingsmethoden", "echo-displaynotificationsconfiguration-available-notification-methods-by-category-legend": "Welke meldingsmethoden ondersteund worden per categorie", - "echo-displaynotificationsconfiguration-available-notification-methods-by-type-legend": "Welke meldingsmethoden ondersteund worden per type; alleen van toepassing op meldingstypes in categorieën die niet zichtbaar zijn in het voorkeurenscherm.", "echo-displaynotificationsconfiguration-enabled-default-header": "Standaard ingeschakeld", "echo-displaynotificationsconfiguration-enabled-default-existing-users-legend": "Bestaande gebruikers", "echo-displaynotificationsconfiguration-enabled-default-new-users-legend": "Nieuwe gebruikers", @@ -92,20 +104,18 @@ "echo-specialpage-section-markread": "Markeer groep als gelezen", "echo-specialpage-markasread": "Notificatie: Markeer als gelezen", "echo-specialpage-markasread-invalid-id": "Ongeldige gebeurtenis-ID", + "echo-specialpage-pagefilterwidget-aria-label": "Filter met wiki en paginatitel", "echo-specialpage-pagination-numnotifications": "$1 {{PLURAL:$1|melding|meldingen}}", "echo-specialpage-pagefilters-title": "Recente activiteit", "echo-specialpage-pagefilters-subtitle": "Pagina's met ongelezen meldingen", "notificationsmarkread-legend": "Markeer notificatie als gelezen", - "echo-anon": "[$1 Maak een account aan] of [$2 meld u aan] als u meldingen wilt ontvangen.", "echo-none": "U hebt geen meldingen.", - "echo-more-info": "Meer info", - "echo-feedback": "Terugkoppeling", "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.", "echo-notification-placeholder-filters": "Er zijn geen meldingen binnen deze criteria.", "echo-notification-loginrequired": "U moet zich aanmelden om uw meldingen te bekijken.", - "echo-notification-popup-loginrequired": "Meld u aan om uw notificaties te weergeven.", + "echo-notification-popup-loginrequired": "Meld u aan om uw notificaties te bekijken.", "echo-notification-markasread": "Als gelezen markeren", "echo-notification-markasunread": "Als ongelezen markeren", "echo-notification-markasread-tooltip": "Als gelezen markeren", @@ -117,9 +127,9 @@ "notification-dynamic-actions-watch-confirmation": "{{GENDER:$3|U}} volgt nu de pagina \"$1\"", "notification-dynamic-actions-watch-confirmation-description": "{{GENDER:$3|U}} kunt op elk moment stoppen met het volgen van [$2 deze pagina].", "notification-link-text-expand-all": "Uitvouwen", - "notification-link-text-expand-alert-count": "{{PLURAL:$1|$1 melding|$1 meldingen}} weergeven", - "notification-link-text-expand-notice-count": "Toon {{PLURAL:$1|$1 notificatie|$1 notificaties}}", - "notification-link-text-expand-all-count": "{{PLURAL:$1|$1 melding|$1 meldingen}} weergeven", + "notification-link-text-expand-alert-count": "{{PLURAL:$1|$1 melding|$1 meldingen}} bekijken", + "notification-link-text-expand-notice-count": "{{PLURAL:$1|$1 notificatie|$1 notificaties}} bekijken", + "notification-link-text-expand-all-count": "{{PLURAL:$1|$1 melding|$1 meldingen}} bekijken", "notification-link-text-collapse-all": "Samenvouwen", "notification-link-text-view-message": "Bericht bekijken", "notification-link-text-view-mention": "Vermelding bekijken", @@ -132,88 +142,95 @@ "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>.", + "notification-bundle-header-page-linked": "Er zijn koppelingen gemaakt vanuit {{PLURAL:$5|één andere pagina|$5 andere pagina's|100=99+ andere pagina's}} naar <strong>$3</strong>.", "notification-header-article-reminder": "Een pagina waarvoor {{GENDER:$2|u}} hebt verzocht te worden herinnerd is op <strong>$3</strong>", "notification-link-text-what-links-here": "Alle links naar deze pagina", "notification-header-mention-other": "$1 heeft {{GENDER:$3|u}} {{GENDER:$2|genoemd}} op <strong>$4</strong> onder \"<strong>$5</strong>\".", "notification-header-mention-other-nosection": "$1 heeft {{GENDER:$3|u}} {{GENDER:$2|genoemd}} op <strong>$4</strong>.", "notification-header-mention-user-talkpage-v2": "$1 heeft {{GENDER:$3|u}} {{GENDER:$2|genoemd}} op de <strong>overlegpagina {{GENDER:$5|van}} $4</strong> onder \"<strong>$6</strong>\".", "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-agent-talkpage": "$1 heeft {{GENDER:$3|u}} {{GENDER:$2|genoemd}} op <strong>{{GENDER:$2|zijn|haar|de eigen}} 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|de eigen}} overlegpagina</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.", - "notification-header-mention-failure-too-many": "{{GENDER:$2|U}} probeerde meer dan $3 {{PLURAL:$3|gebruiker|gebruikers}} te vermelden. Alle vermeldingen boven de limiet zijn niet verzonden.", + "notification-header-mention-failure-too-many": "{{GENDER:$2|U}} probeerde meer dan $3 {{PLURAL:$3|gebruiker|gebruikers}} te vermelden. Alle vermeldingen boven die limiet zijn niet verzonden.", "notification-header-mention-failure-bundle": "{{PLURAL:$3|Een vermelding|$3 vermeldingen}} die {{GENDER:$2|u hebt gemaakt}} op de <strong>$4</strong> overlegpagina {{PLURAL:$3|kon}} niet worden verzonden.", "notification-compact-header-mention-failure-user-unknown": "<strong>Gebruikersnaam bestaat niet:</strong> $1", - "notification-compact-header-mention-failure-user-anonymous": "<strong>IPs kan niet worden genoemd:</strong> $1", + "notification-compact-header-mention-failure-user-anonymous": "<strong>IP's kunnen niet worden genoemd:</strong> $1", "notification-header-mention-success": "{{GENDER:$2|Uw}} vermelding van <strong>$3</strong> is verzonden.", "notification-header-mention-success-bundle": "{{PLURAL:$3|Een vermelding|$3 vermeldingen}} die {{GENDER:$2|u maakte}} op de overlegpagina van <strong>$4</strong> {{PLURAL:$3|zijn}} verzonden.", "notification-compact-header-mention-success": "<strong>{{GENDER:$2|U noemde}}:</strong> $3", - "notification-header-mention-status-bundle": "{{PLURAL:$3|Een melding|$3 meldingen}} over vermeldingen die {{GENDER:$2|u hebt gemaakt}} op de <strong>$4</strong> overlegpagina: {{PLURAL:$5|$5 niet verstuurd}}, {{PLURAL:$6|verstuurd}}.", - "notification-header-user-rights-add-only": "{{GENDER:$4|Uw}} gebruikersrechten zijn {{GENDER:$1|veranderd}}. U bent lid van $2.", - "notification-header-user-rights-remove-only": "{{GENDER:$4|Uw}} gebruikersrechten zijn {{GENDER:$1|veranderd}}. U bent niet langer lid meer van $2.", - "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-mention-status-bundle": "{{PLURAL:$3|Een melding|$3 meldingen}} over vermeldingen die {{GENDER:$2|u hebt gemaakt}} op de overlegpagina van <strong>$4</strong>: {{PLURAL:$5|$5 niet verstuurd}}, {{PLURAL:$6|$6 verstuurd}}.", + "notification-header-user-rights-add-only": "{{GENDER:$4|Uw}} gebruikersrechten zijn {{GENDER:$1|veranderd}}. U bent toegevoegd aan: $2.", + "notification-header-user-rights-remove-only": "{{GENDER:$4|Uw}} gebruikersrechten zijn {{GENDER:$1|veranderd}}. U bent niet langer lid meer van: $2.", + "notification-header-user-rights-add-and-remove": "{{GENDER:$6|Uw}} gebruikersrechten zijn {{GENDER:$1|veranderd}}. U bent toegevoegd aan: $2. U bent niet langer lid meer 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-header-mention-summary": "$1 heeft {{GENDER:$3|u}} {{GENDER:$2|genoemd}} in een bewerkingssamenvatting van <strong>$4</strong>.", + "notification-header-watchlist-changed": "$1 {{GENDER:$2|heeft}} <strong>$3</strong>, een pagina op {{GENDER:$4|uw}} volglijst{{PLURAL:$5|| $5 maal}} gewijzigd.", + "notification-header-watchlist-created": "$1 {{GENDER:$2|heeft}} <strong>$3</strong>, een pagina op {{GENDER:$4|uw}} volglijst{{PLURAL:$5|| $5 maal}} aangemaakt.", + "notification-header-watchlist-deleted": "$1 {{GENDER:$2|heeft}} <strong>$3</strong>, een pagina op {{GENDER:$4|uw}} volglijst{{PLURAL:$5|| $5 maal}} verwijderd.", + "notification-header-watchlist-moved": "$1 {{GENDER:$2|heeft}} <strong>$3</strong>, een pagina op {{GENDER:$4|uw}} volglijst{{PLURAL:$5|| $5 maal}} hernoemd.", + "notification-header-watchlist-restored": "$1 {{GENDER:$2|heeft}} <strong>$3</strong>, een pagina op {{GENDER:$4|uw}} volglijst{{PLURAL:$5|| $5 maal}} teruggeplaatst.", + "notification-header-watchlist-multiuser-changed": "<strong>$1</strong>, een pagina op {{GENDER:$2|uw}} volglijst is $3 {{PLURAL:$3|keer}} gewijzigd.", + "notification-header-watchlist-multiuser-created": "<strong>$1</strong>, een pagina op {{GENDER:$2|uw}} volglijst is $3 {{PLURAL:$3|keer}} aangemaakt.", + "notification-header-watchlist-multiuser-deleted": "<strong>$1</strong>, een pagina op {{GENDER:$2|uw}} volglijst is $3 {{PLURAL:$3|keer}} verwijderd.", + "notification-header-watchlist-multiuser-moved": "<strong>$1</strong>, een pagina op {{GENDER:$2|uw}} volglijst is $3 {{PLURAL:$3|keer}} hernoemd.", + "notification-header-watchlist-multiuser-restored": "<strong>$1</strong>, een pagina op {{GENDER:$2|uw}} volglijst is $3 {{PLURAL:$3|keer}} teruggeplaatst.", "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!", - "notification-header-thank-you-100-edit": "{{GENDER:$2|U}} hebt uw honderdste bewerking gemaakt; hartelijk bedankt!", - "notification-header-thank-you-1000-edit": "{{GENDER:$2|U}} hebt uw duizendste bewerking gemaakt; dank u voor uw geweldige bijdrage!", - "notification-header-thank-you-10000-edit": "{{GENDER:$2|U}} hebt uw tienduizendste bewerking gemaakt; heel erg bedankt!", - "notification-header-thank-you-100000-edit": "{{GENDER:$2|U}} hebt uw honderdduizendste bewerking gemaakt; dank u voor uw fantastische bijdrage!", - "notification-header-thank-you-1000000-edit": "{{GENDER:$2|U}} hebt uw miljoenste bewerking gemaakt; dank u voor uw schitterende bijdrage!", + "notification-header-thank-you-1-edit": "{{GENDER:$2|U}} hebt {{GENDER:$2|uw}} eerste bewerking gemaakt; dank {{GENDER:$2|u}} wel, en welkom!", + "notification-header-thank-you-10-edit": "{{GENDER:$2|U}} hebt {{GENDER:$2|uw}} tiende bewerking gemaakt; dank {{GENDER:$2|u}} wel, en ga zo door!", + "notification-header-thank-you-100-edit": "{{GENDER:$2|U}} hebt {{GENDER:$2|uw}} honderdste bewerking gemaakt; hartelijk bedankt!", + "notification-header-thank-you-1000-edit": "{{GENDER:$2|U}} hebt {{GENDER:$2|uw}} duizendste bewerking gemaakt; dank {{GENDER:$2|u}} voor {{GENDER:$2|uw}} geweldige bijdrage!", + "notification-header-thank-you-10000-edit": "{{GENDER:$2|U}} hebt {{GENDER:$2|uw}} tienduizendste bewerking gemaakt; heel erg bedankt!", + "notification-header-thank-you-100000-edit": "{{GENDER:$2|U}} hebt {{GENDER:$2|uw}} honderdduizendste bewerking gemaakt; dank {{GENDER:$2|u}} voor {{GENDER:$2|uw}} fantastische bijdrage!", + "notification-header-thank-you-1000000-edit": "{{GENDER:$2|U}} hebt {{GENDER:$2|uw}} miljoenste bewerking gemaakt; dank {{GENDER:$2|u}} voor {{GENDER:$2|uw}} schitterende bijdrage!", + "notification-header-thank-you-10000000-edit": "{{GENDER:$2|U}} hebt {{GENDER:$2|uw}} tien miljoenste bewerking gemaakt; dank {{GENDER:$2|u}} voor {{GENDER:$2|uw}} uitmuntende toewijding!", "notification-link-thank-you-edit": "{{GENDER:$1|Uw}} bewerking", "notification-link-text-view-edit": "Bewerking bekijken", "notification-link-article-reminder": "Pagina bekijken", "notification-header-reverted": "Uw {{PLURAL:$4|bewerking op <strong>$3</strong> is|bewerkingen op <strong>$3</strong> zijn}} {{GENDER:$2|teruggedraaid}}.", "notification-header-emailuser": "$1 heeft u een e-mail {{GENDER:$2|gestuurd}}.", - "notification-edit-talk-page-email-subject2": "$1 {{GENDER:$1|heeft}} een bericht voor u achtergelaten op {{SITENAME}}", - "notification-edit-talk-page-email-batch-body-with-section": "$1 {{GENDER:$1|heeft}} een bericht achtergelaten op uw overlegpagina onder \"$2\".", - "notification-page-linked-email-subject": "Er is een verwijzing gemaakt op {{SITENAME}} naar een pagina die u hebt gemaakt", - "notification-reverted-email-subject2": "Uw {{PLURAL:$3|bewerking op {{SITENAME}} is|bewerkingen op {{SITENAME}} zijn}} {{GENDER:$1|teruggedraaid}}", - "notification-mention-email-subject": "$1 heeft {{GENDER:$2|u}} {{GENDER:$1|genoemd}} op {{SITENAME}}", - "notification-user-rights-email-subject": "Uw gebruikersrechten op {{SITENAME}} zijn gewijzigd", + "notification-edit-talk-page-email-subject2": "$1 {{GENDER:$2|heeft}} een bericht voor {{GENDER:$3|u}} achtergelaten op {{SITENAME}}", + "notification-page-linked-email-subject": "Er is een verwijzing gemaakt op {{SITENAME}} naar een pagina die {{GENDER:$3|u}} hebt gemaakt", + "notification-reverted-email-subject2": "{{GENDER:$3|Uw}} {{PLURAL:$4|bewerking op {{SITENAME}} is|bewerkingen op {{SITENAME}} zijn}} {{GENDER:$2|teruggedraaid}}", + "notification-mention-email-subject": "$1 heeft {{GENDER:$3|u}} {{GENDER:$2|genoemd}} op {{SITENAME}}", + "notification-user-rights-email-subject": "{{GENDER:$3|Uw}} gebruikersrechten op {{SITENAME}} zijn gewijzigd", "notification-timestamp-ago-seconds": "{{PLURAL:$1|$1 s}}", - "notification-timestamp-ago-minutes": "{{PLURAL:$1|$1m}}", - "notification-timestamp-ago-hours": "{{PLURAL:$1|$1u}}", - "notification-timestamp-ago-days": "{{PLURAL:$1|$1d}}", - "notification-timestamp-ago-months": "{{PLURAL:$1|$1mnd}}", - "notification-timestamp-ago-years": "{{PLURAL:$1|$1jr}}", + "notification-timestamp-ago-minutes": "{{PLURAL:$1|$1 min}}", + "notification-timestamp-ago-hours": "{{PLURAL:$1|$1 u}}", + "notification-timestamp-ago-days": "{{PLURAL:$1|$1 dg}}", + "notification-timestamp-ago-months": "{{PLURAL:$1|$1 mnd}}", + "notification-timestamp-ago-years": "{{PLURAL:$1|$1 jr}}", "notification-timestamp-today": "Vandaag", "notification-timestamp-yesterday": "Gisteren", "notification-inbox-filter-read": "Gelezen", "notification-inbox-filter-unread": "Ongelezen", "notification-inbox-filter-all": "Alle", - "echo-email-body-default": "U hebt een nieuwe melding op {{SITENAME}}:\n\n$1", - "echo-email-footer-default-html": "Open <a href=\"$2\" style=\"text-decoration:none; color: #3868B0;\">uw voorkeuren</a> om te bepalen welke e-mails wij u versturen.<br />\n$1", - "echo-email-footer-default": "$2\n\nOm te bepalen welke e-mails wij u zenden, controleert u uw voorkeuren:\n{{canonicalurl:{{#special:Preferences}}#mw-prefsection-echo}}\n\n$1", + "echo-specialmute-label-mute-notifications": "Verberg meldingen van deze gebruiker", "echo-email-plain-footer": "Controleer {{GENDER:$1|uw}} voorkeuren om te bepalen welke e-mails wij {{GENDER:$1|u}} sturen:", "echo-email-html-footer-preference-link-text": "controleer {{GENDER:$1|uw}} voorkeuren", - "echo-email-html-footer-with-link": "Om te bepalen welke e-mails we {{GENDER:$2|u}} sturen, $1.", + "echo-email-html-footer-with-link": "Om te bepalen welke e-mails wij {{GENDER:$2|u}} sturen, $1.", "echo-notification-alert": "{{PLURAL:$1|Melding ($1)|Meldingen ($1)|100=Meldingen (99+)}}", - "echo-notification-notice": "{{PLURAL:$1|Melding ($1)|Meldingen ($1)|100=Meldingen (99+)}}", + "echo-notification-notice": "{{PLURAL:$1|Notificatie ($1)|Notificaties ($1)|100=Notificaties (99+)}}", "echo-notification-alert-text-only": "Meldingen", "echo-notification-notice-text-only": "Notificaties", "echo-overlay-link": "Alle meldingen", "echo-overlay-title": "<b>Meldingen</b>", - "echo-overlay-title-overflow": "<b>{{PLURAL:$1|Melding|Meldingen}}</b> ($1 van $2 ongelezen)", "echo-mark-all-as-read": "Alles als gelezen markeren", "echo-mark-all-as-read-confirmation": "$1 {{PLURAL:$1|melding|meldingen}} gemarkeerd als gelezen", "echo-mark-wiki-as-read": "Markeer alles als gelezen in de geselecteerde wiki: $1", + "echo-displaysnippet-title": "Nieuwe notificatie", "echo-date-today": "Vandaag", "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 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", + "notification-bundle-header-edit-user-talk-v2": "{{PLURAL:$1|Eén nieuw bericht|$1 nieuwe berichten|100=99+ nieuwe berichten}} op <strong>{{GENDER:$3|uw}} overlegpagina</strong>.", + "echo-email-batch-subject-daily": "U hebt {{PLURAL:$2|een nieuwe melding|nieuwe meldingen}} op {{SITENAME}}", + "echo-email-batch-subject-weekly": "U hebt deze week {{PLURAL:$2|een nieuwe melding|nieuwe meldingen}} op {{SITENAME}}", "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", + "echo-email-batch-link-text-view-all-notifications": "Alle meldingen bekijken", "notification-header-foreign-alert": "Meer meldingen van {{PLURAL:$5|een andere wiki|$5 andere wiki's}}", "notification-header-foreign-notice": "Meer notificaties van {{PLURAL:$5|een andere wiki|$5 andere wiki's}}", "notification-header-foreign-all": "Meer meldingen van {{PLURAL:$5|een andere wiki|$5 andere wiki's}}" diff --git a/Echo/i18n/nn.json b/Echo/i18n/nn.json index a671b0c8..b9ad0931 100644 --- a/Echo/i18n/nn.json +++ b/Echo/i18n/nn.json @@ -2,15 +2,14 @@ "@metadata": { "authors": [ "Amire80", - "Njardarlogar", "Jon Harald Søby", + "Njardarlogar", "Ranveig" ] }, "echo-desc": "Meldingssystem", "prefs-echo": "Meldingar og varsel", "prefs-emailsettings": "E-postval", - "prefs-displaynotifications": "Visingsval", "prefs-echosubscriptions": "Meld meg om desse hendingane", "prefs-echocrosswiki": "Krosswikivarsel", "prefs-blocknotificationslist": "Ignorerte brukarar", @@ -38,12 +37,13 @@ "echo-category-title-system": "{{PLURAL:$1|System}}", "echo-category-title-user-rights": "{{PLURAL:$1|Endring}} av brukarrettar", "echo-category-title-emailuser": "Epost frå {{PLURAL:$1|annan brukar|andre brukarar}}", + "echo-category-title-thank-you-edit": "{{PLURAL:$1|Milepåla|Milepålar}} for tal endringar du har gjort", "echo-pref-tooltip-edit-user-talk": "Meld meg når nokon skriv ei melding eller svarar på diskusjonssida mi.", "echo-pref-tooltip-article-linked": "Meld meg når nokon lenkjar til ei side eg har oppretta frå ei anna side.", "echo-pref-tooltip-reverted": "Meld meg når nokon fjernar ei endring eg gjorde ved bruk av angre- eller attenderullingsverktøyet.", "echo-pref-tooltip-mention": "Meld meg når nokon lenkjar til brukarsida mi.", "echo-pref-tooltip-user-rights": "Meld meg når nokon endrar brukarrettane mine.", - "echo-error-no-formatter": "Inga formatering definert for meldinga.", + "echo-pref-tooltip-thank-you-edit": "Send meg eit varsel når eg har gjort den fyrste, tiande, hundrede … endringa mi.", "notifications": "Meldingar og varsel", "tooltip-pt-notifications-alert": "Varsla {{GENDER:|dine}}", "tooltip-pt-notifications-notice": "Notisane {{GENDER:|dine}}", @@ -52,15 +52,17 @@ "echo-specialpage-pagination-numnotifications": "{{PLURAL:$1|éin notis eller eitt varsel|$1 notisar og varsel}}", "echo-specialpage-pagefilters-title": "Nyleg aktivitet", "echo-specialpage-pagefilters-subtitle": "Sider med ulesne notisar eller varsel", - "echo-anon": "For å få meldingar og varsel, [$1 opprett ein konto] eller [$2 logg inn].", "echo-none": "Du har ingen meldingar eller varsel.", - "echo-more-info": "Meir info", - "echo-feedback": "Attendemelding", "echo-notification-placeholder": "Det er ingen meldingar eller varsel.", "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)", + "echo-notification-more-options-tooltip": "Fleire val", + "notification-dynamic-actions-mute-page-linked": "{{GENDER:$2|Slå av}} lenkjenotisar for «$1»", + "notification-dynamic-actions-mute-page-linked-confirmation": "Notisar for sidelenkjer er no avslegne for sida «$1»", + "notification-dynamic-actions-unwatch": "{{GENDER:$3|Slutt}} å fylgja med på ny aktivitet på «$1»", "notification-link-text-expand-all": "Vis", + "notification-link-text-expand-alert-count": "Sjå {{PLURAL:$1|varsel|$1 varsel}}", "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", @@ -99,11 +101,10 @@ "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|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-edit-talk-page-email-subject2": "$1 {{GENDER:$2|la att}} ei melding til deg på {{SITENAME}}", "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-reverted-email-subject2": "{{PLURAL:$4|Endringa di|Endringane dine}} vart {{GENDER:$2|fjerna}} på {{SITENAME}}", + "notification-mention-email-subject": "$1 {{GENDER:$2|nemnde}} {{GENDER:$3|deg}} på {{SITENAME}}", "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.}}", @@ -116,19 +117,18 @@ "notification-inbox-filter-read": "Lesne", "notification-inbox-filter-unread": "Ulesne", "notification-inbox-filter-all": "Alle", - "echo-email-body-default": "Du har ei ny melding på {{SITENAME}}: $1", - "echo-email-footer-default": "$2\n\nFor å styra kva for e-postar me sender til deg, sjå til innstillingane dine:\n{{canonicalurl:{{#special:Preferences}}#mw-prefsection-echo}}\n\n$1", + "echo-email-plain-footer": "For å styra kva e-postar me sender {{GENDER:$2|deg}}, sjekk innstillingane dine:", + "echo-email-html-footer-preference-link-text": "sjekk innstillingane {{GENDER:$1|dine}}", + "echo-email-html-footer-with-link": "For å styra kva e-postar me sender {{GENDER:$2|deg}}, $1.", "echo-notification-alert": "{{PLURAL:$1|Varsel ($1)|100=Varsel (99+)}}", "echo-notification-notice": "{{PLURAL:$1|Notis ($1)|Notisar ($1)|100=Notisar (99+)}}", "echo-notification-alert-text-only": "Varsel", "echo-notification-notice-text-only": "Notisar", "echo-overlay-link": "Alle meldingar og varsel", "echo-overlay-title": "<b>Meldingar og varsel</b>", - "echo-overlay-title-overflow": "<b>Meldingar</b> (viser $1 av $2 ulesne)", "echo-mark-all-as-read": "Merk alle som lesne", "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", diff --git a/Echo/i18n/nqo.json b/Echo/i18n/nqo.json new file mode 100644 index 00000000..1bc6afd4 --- /dev/null +++ b/Echo/i18n/nqo.json @@ -0,0 +1,10 @@ +{ + "@metadata": { + "authors": [ + "Amire80", + "Lancine.kounfantoh.fofana", + "Youssoufkadialy" + ] + }, + "tooltip-pt-notifications-alert": "{{GENDER:|ߌ ߟߊ߫}} ߟߊ߬ߛߏ߬ߓߌ߬ߟߌ ߟߎ߬" +} diff --git a/Echo/i18n/oc.json b/Echo/i18n/oc.json index 5289c2fa..8ee1933b 100644 --- a/Echo/i18n/oc.json +++ b/Echo/i18n/oc.json @@ -9,7 +9,6 @@ "echo-desc": "Sistèma per avertir los utilizaires dels eveniments e messatges", "prefs-echo": "Notificacions", "prefs-emailsettings": "Opcions del corrièr electronic", - "prefs-displaynotifications": "Opcions d'afichatge", "prefs-echosubscriptions": "M'avisar d'aqueles eveniments", "echo-pref-send-me": "Me mandar :", "echo-pref-send-to": "Mandar a :", @@ -40,7 +39,6 @@ "echo-pref-tooltip-reverted": "M'avisar quand qualqu’un anulla una modificacion qu’ai faita, en utilizant l’aisina anullacion o de revocacion.", "echo-pref-tooltip-mention": "M'avisar quand qualqu’un fa referéncia a ma pagina d'utilizaire.", "echo-pref-tooltip-emailuser": "Me notificar quand qualqu’un me manda un corrièr electronic.", - "echo-error-no-formatter": "Cap de mesa en forma pas definida per la notificacion", "notifications": "Notificacions", "tooltip-pt-notifications-alert": "{{GENDER:|Vòstras}} alèrtas", "tooltip-pt-notifications-notice": "{{GENDER:|Vòstras}} notificacions", @@ -48,10 +46,7 @@ "echo-specialpage-section-markread": "Marcar la seccion coma legida", "echo-specialpage-markasread": "Notificacion : marcar coma legida", "echo-specialpage-pagefilters-subtitle": "Paginas amb de notificacions pas legidas", - "echo-anon": "Per recebre de notificacions, [$1 creatz un compte] o [$2 connectatz-vos].", "echo-none": "Avètz pas recebut cap de notificacion.", - "echo-more-info": "Mai d'informacion", - "echo-feedback": "Vejaires", "echo-notification-placeholder": "I a pas cap de notificacion.", "echo-notification-markasread": "Marcar coma legit", "echo-notification-markasunread": "Marcar coma pas legit", @@ -81,11 +76,10 @@ "notification-link-text-view-edit": "Afichar la modificacion", "notification-header-reverted": "{{PLURAL:$4|Vòstra modificacion sus <strong>$3</strong> es estada|Vòstras modificacions sus <strong>$3</strong> son estadas}} {{GENDER:$2|anullada}}{{PLURAL:$4||s}}", "notification-header-emailuser": "$1 vos {{GENDER:$2|a mandat}} un corrièr electronic.", - "notification-edit-talk-page-email-subject2": "$1 {{GENDER:$1|a daissat}} un messatge sus vòstra pagina de discussion sus {{SITENAME}}", - "notification-edit-talk-page-email-batch-body-with-section": "$1 a daissat un messatge sus vòstra pagina de discussion dins « $2 ».", + "notification-edit-talk-page-email-subject2": "$1 {{GENDER:$2|a daissat}} un messatge sus vòstra pagina de discussion sus {{SITENAME}}", "notification-page-linked-email-subject": "Un ligam cap a una pagina qu'avètz creada es estada inserida sus {{SITENAME}}", - "notification-reverted-email-subject2": "{{PLURAL:$3|Vòstra modificacion es estada anullada|Vòstras modificacions son estadas anulladas}} {{GENDER:$1|}} sus {{SITENAME}}", - "notification-mention-email-subject": "$1 vos {{GENDER:$2|a mencionat|a mencionada}} sus {{SITENAME}}", + "notification-reverted-email-subject2": "{{PLURAL:$4|Vòstra modificacion es estada anullada|Vòstras modificacions son estadas anulladas}} {{GENDER:$2|}} sus {{SITENAME}}", + "notification-mention-email-subject": "$1 vos {{GENDER:$3|a mencionat|a mencionada}} sus {{SITENAME}}", "notification-user-rights-email-subject": "Vòstres dreits d’utilizaire son estats modificats sus {{SITENAME}}", "notification-timestamp-ago-seconds": "{{PLURAL:$1|$1 s}}", "notification-timestamp-ago-minutes": "{{PLURAL:$1|$1 m}}", @@ -98,8 +92,6 @@ "notification-inbox-filter-read": "Legidas", "notification-inbox-filter-unread": "Pas legidas", "notification-inbox-filter-all": "Totes", - "echo-email-body-default": "Avètz una novèla notificacion sus {{SITENAME}} :\n\n$1", - "echo-email-footer-default": "$2\n\nPer contrarotlar quines corrièrs electronics vos mandam, verificatz vòstras preferéncias :\n{{canonicalurl:{{#special:Preferences}}#mw-prefsection-echo}}\n\n$1", "echo-email-html-footer-with-link": "Per contrarotlar quines corrièrs electronics {{GENDER:$2|vos}} mandam, $1.", "echo-notification-alert": "{{PLURAL:$1|Alèrta ($1)|100=Alèrtas (99+)}}", "echo-notification-notice": "{{PLURAL:$1|Notificacions ($1)|100=Notificacions (100 e mai)}}", @@ -107,13 +99,11 @@ "echo-notification-notice-text-only": "Notificacions", "echo-overlay-link": "Totas las notificacions", "echo-overlay-title": "<b>Notificacions</b>", - "echo-overlay-title-overflow": "<b>{{PLURAL:$1|Notificacion|Notificacions}}</b> ($1 sus $2 {{PLURAL:$1|pas legida d'afichada|pas legidas d'afichadas}})", "echo-mark-all-as-read": "Marcar tot coma legit", "echo-mark-all-as-read-confirmation": "$1 {{PLURAL:$1|notificacion marcada coma legida|notificacions marcadas coma legidas}}", "echo-mark-wiki-as-read": "Marcar tot coma essent legit pels wiki seleccionats : $1", "echo-date-today": "Uèi", "echo-date-yesterday": "Ièr", - "echo-load-more-error": "Una error s'es produita en analisant mai de resultats.", "notification-bundle-header-edit-user-talk-v2": "{{PLURAL:$1|Un novèl messatge|$1 novèls messatges|100=mai de 100 novèls messatges}} sur <strong>{{GENDER:$3|vòstra}} pagina de discussion</strong> .", "echo-email-batch-subject-daily": "Avètz {{PLURAL:$2|una novèla notificacion|de novèlas notificacions}} uèi sus {{SITENAME}}", "echo-email-batch-subject-weekly": "Avètz {{PLURAL:$2|una novèla notificacion|de novèlas notificacions}} sus {{SITENAME}} aquesta setmana", diff --git a/Echo/i18n/olo.json b/Echo/i18n/olo.json index 64d37e91..f3868530 100644 --- a/Echo/i18n/olo.json +++ b/Echo/i18n/olo.json @@ -1,9 +1,9 @@ { "@metadata": { "authors": [ - "Mashoi7", "Ilja.mos", - "Macofe" + "Macofe", + "Mashoi7" ] }, "echo-pref-send-me": "Työnnä minule:", @@ -19,19 +19,16 @@ "echo-category-title-other": "{{PLURAL:$1|Muu|Muut}}", "echo-category-title-system": "{{PLURAL:$1|Sistiemu}}", "tooltip-pt-notifications-alert": "{{GENDER:|Sinun}} hälytykset", - "echo-more-info": "Ližätieduo", - "echo-feedback": "Työndö", "notification-link-text-view-message": "Ozuta viesti", "notification-link-text-view-changes": "{{GENDER:$1|Ozuta}} muutokset", "notification-link-text-view-page": "Ozuta sivu", "notification-link-text-view-edit": "Ozuta kohendus", "notification-header-reverted": "{{PLURAL:$4|Sinun kohendus|Sinun kohendukset}} sivul <strong>$3</strong> {{GENDER:$2|{{PLURAL:$4|on kumottu|oldih kumottu}}}}", "notification-header-emailuser": "$1 {{GENDER:$2|työndi}} sinule sähköpoštan.", - "notification-edit-talk-page-email-subject2": "$1 {{GENDER:$1|kirjutti}} sinule viestin sivul {{SITENAME}}", - "notification-edit-talk-page-email-batch-body-with-section": "$1 {{GENDER:$1|jätti}} viestin sinun paginsivule sektah \"$2\".", + "notification-edit-talk-page-email-subject2": "$1 {{GENDER:$2|kirjutti}} sinule viestin sivul {{SITENAME}}", "notification-page-linked-email-subject": "Sinun luajittu sivu linkitettih saital {{SITENAME}}", - "notification-reverted-email-subject2": "Sinun {{PLURAL:$3|luajittu kohendus|luajitut kohendukset}} saital {{SITENAME}} on {{GENDER:$1|kumattu}}.", - "notification-mention-email-subject": "$1 {{GENDER:$1|mainičči}} {{GENDER:$2|sinuu}} saital {{SITENAME}}", + "notification-reverted-email-subject2": "Sinun {{PLURAL:$4|luajittu kohendus|luajitut kohendukset}} saital {{SITENAME}} on {{GENDER:$2|kumattu}}.", + "notification-mention-email-subject": "$1 {{GENDER:$2|mainičči}} {{GENDER:$3|sinuu}} saital {{SITENAME}}", "notification-user-rights-email-subject": "Sinun käyttöoigevuot ollah muutunnuot saital {{SITENAME}}", "echo-mark-all-as-read": "Merkiče kai luvettuloikse", "echo-date-today": "Tänäpäi", diff --git a/Echo/i18n/or.json b/Echo/i18n/or.json index a8006dbe..699d5841 100644 --- a/Echo/i18n/or.json +++ b/Echo/i18n/or.json @@ -1,15 +1,14 @@ { "@metadata": { "authors": [ + "DareDevil", "MKar", - "Psubhashish", - "DareDevil" + "Psubhashish" ] }, "echo-desc": "ସୂଚନା ପ୍ରଣାଳି", "prefs-echo": "ସୂଚନା ସମୂହ", "prefs-emailsettings": "ଇମେଲ ବିକଳ୍ପ", - "prefs-displaynotifications": "ଦେଖଣା ବିକଳ୍ପ", "prefs-echosubscriptions": "ଏହି ଘଟଣା ସଂପର୍କରେ ମତେ ସୂଚନା ଦିଅନ୍ତୁ", "echo-pref-send-me": "ମୋ ପାଖକୁ ପଠାନ୍ତୁ", "echo-pref-send-to": "ଏହାଙ୍କ ପାଖକୁ ପଠାନ୍ତୁ", @@ -33,14 +32,10 @@ "echo-pref-tooltip-article-linked": "ମୁଁ ତିଆରି କରିଥିବା ପୃଷ୍ଠାକୁ କେହି ପ୍ରସଙ୍ଗ ପୃଷ୍ଠାରେ ସଂଯୋଗ କଲେ ମୋତେ ସୂଚିତ କରନ୍ତୁ", "echo-pref-tooltip-reverted": "ମୋର ସଂପାଦନାକୁ କେହି ରୋଲବ୍ୟାକ ଟୁଲ ବା ପଛକୁ ଫେରାଇବା ଟୁଲ ବ୍ୟବହାର କରି ପଶ୍ଚାତକରଣ କଲେ ମୋତେ ସୂଚନା ଦିଅନ୍ତୁ", "echo-pref-tooltip-mention": "ମୋର ବ୍ୟବହାରକାରୀ ପୃଷ୍ଠାକୁ କେହି ଜଣେ କୌଣସି ଆଲୋଚନା ପୃଷ୍ଠାରୁ ସଂଯୋଗ କଲେ ମୋତେ ସୂଚୀତ କରନ୍ତୁ", - "echo-error-no-formatter": "ସୂଚନା ନିମନ୍ତେ କୌଣସି ନିର୍ଦ୍ଦିଷ୍ଟ ଶୈଳୀ ନାହିଁ", "notifications": "ସୂଚନା", "tooltip-pt-notifications-alert": "{{GENDER:|ଆପଣଙ୍କ}} ପାଇଁ ସୂଚନା", "echo-specialpage": "ସୂଚନା", - "echo-anon": "ସୂଚନା ପ୍ରାପ୍ତି ନିମନ୍ତେ, [$1 ନୂଆ ଖାତା ଖୋଲନ୍ତୁ] କିମ୍ବା [$2 ଲଗ ଇନ କରନ୍ତୁ].", "echo-none": "ଆପଣଙ୍କ ନିମନ୍ତେ କୌଣସି ସୂଚନା ନାହିଁ", - "echo-more-info": "ଅଧିକ ତଥ୍ୟ", - "echo-feedback": "ମତାମତ", "notification-link-text-view-message": "ସନ୍ଦେଶ ଦେଖନ୍ତୁ", "notification-link-text-view-mention": "ସୂଚିତ ହୋଇଥିବା ପୃଷ୍ଠା ଦେଖନ୍ତୁ", "notification-link-text-view-changes": "ସମସ୍ତ ବଦଳ ଦେଖନ୍ତୁ", @@ -52,7 +47,6 @@ "echo-mark-all-as-read": "ସବୁ ପଢ଼ା ସରିଛି ବୋଲି ଚିହ୍ନ ଦିଅନ୍ତୁ", "echo-date-today": "ଆଜି", "echo-date-yesterday": "ଗତ କାଲି", - "echo-load-more-error": "ଅଧିକ ଫଳଗୁଡ଼ିକୁ ଖୋଜୁଥିବା ବେଳେ କିଛିଗୋଟେ ଅସୁବିଧା ହେଲା ।", "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}}ରେ ଏହି ସପ୍ତାହର କାର୍ଯ୍ୟାବଳୀର ସାରମର୍ମ", diff --git a/Echo/i18n/pa.json b/Echo/i18n/pa.json index 97d3accb..ec6b1869 100644 --- a/Echo/i18n/pa.json +++ b/Echo/i18n/pa.json @@ -1,17 +1,16 @@ { "@metadata": { "authors": [ - "Satdeep gill", "Babanwalia", - "ਪ੍ਰਚਾਰਕ", "Jimidar", - "Tow" + "Satdeep gill", + "Tow", + "ਪ੍ਰਚਾਰਕ" ] }, "echo-desc": "ਸੂਚਨਾ ਪ੍ਰਣਾਲੀ", "prefs-echo": "ਸੂਚਨਾਵਾਂ", "prefs-emailsettings": "ਈ-ਮੇਲ ਆਪਸ਼ਨ", - "prefs-displaynotifications": "ਪ੍ਰਗਟਾਓ ਆਪਸ਼ਨ", "prefs-echosubscriptions": "ਮੈਨੂੰ ਇਸ ਤਰ੍ਹਾਂ ਦੇ ਸਬੱਬਾਂ ਬਾਰੇ ਨੋਟੀਫਾਈ ਕਰੋ", "echo-pref-send-me": "ਮੈਨੂੰ ਭੇਜੋ:", "echo-pref-send-to": "ਭੇਜੋ:", @@ -36,15 +35,11 @@ "echo-pref-tooltip-article-linked": "ਜਦ ਕੋਈ ਉਸ ਪੰਨੇ ਨਾਲ ਜੁੜਦਾ ਹੈ ਜੋ ਮੈਂ ਕਿਸੇ ਲੇਖ ਦੇ ਪੰਨੇ ਤੋਂ ਬਣਾਇਆ ਸੀ ਤਾਂ ਮੈਨੂੰ ਸੂਚਨਾ ਦੇਵੋ।", "echo-pref-tooltip-reverted": "ਜਦ ਕੋਈ ਮੇਰੀ ਕੀਤੀ ਸੋਧ ਨੂੰ, ਕੋਈ ਟੂਲ ਵਰਤ ਕੇ ਰੱਦ ਕਰ ਦਿੰਦਾ ਹੈ ਤਾਂ ਮੈਨੂੰ ਸੂਚਨਾ ਦੇਵੋ।", "echo-pref-tooltip-mention": "ਜਦ ਕੋਈ ਕਿਸੇ ਗੱਲ-ਬਾਤ ਪੰਨੇ ਤੋਂ ਮੇਰੇ ਵਰਤੋਂਕਾਰ ਪੰਨੇ ਤੇ ਜੁੜਦਾ ਹੈ ਤਾਂ ਮੈਨੂੰ ਸੂਚਨਾ ਦੇਵੋ।", - "echo-error-no-formatter": "ਸੂਚਨਾ ਲਈ ਕੋਈ ਫਾਰਮੈਟ ਨਹੀਂ ਹੈ।", "notifications": "ਸੂਚਨਾਵਾਂ", "tooltip-pt-notifications-alert": "ਤੁਹਾਡੀਆਂ ਸੂਚਨਾਵਾਂ", "echo-displaynotificationsconfiguration-enabled-default-new-users-legend": "ਨਵੇਂ ਵਰਤੋਂਕਾਰ", "echo-specialpage": "ਸੂਚਨਾਵਾਂ", - "echo-anon": "ਸੂਚਨਾਵਾਂ ਪ੍ਰਾਪਤ ਕਰਨ ਲਈ, [$1 ਖਾਤਾ ਬਣਾਉ] ਜਾਂ [$2 ਲਾਗ ਇਨ ਕਰੋ]।", "echo-none": "ਤੁਹਾਡੇ ਲਈ ਕੋਈ ਸੂਚਨਾ ਨਹੀਂ ਹੈ।", - "echo-more-info": "ਹੋਰ ਜਾਣਕਾਰੀ", - "echo-feedback": "ਫ਼ੀਡਬੈਕ", "notification-link-text-expand-all": "ਫੈਲਾਓ", "notification-link-text-collapse-all": "ਸਮੇਟੋ", "notification-link-text-view-message": "ਸੁਨੇਹਾ ਵੇਖੋ", @@ -56,11 +51,10 @@ "notification-link-thank-you-edit": "{{GENDER:$1|ਤੁਹਾਡਾ}} ਸੋਧ", "notification-link-text-view-edit": "ਸੋਧ ਦੇਖੋ", "notification-header-reverted": "ਤੁਹਾਡੀ {{PLURAL:$4|$3 ਉੱਤੇ ਸੋਧ|$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-edit-talk-page-email-subject2": "$1 ਨੇ {{SITENAME}} ਉੱਤੇ ਤੁਹਾਡੇ ਲਈ ਇੱਕ ਸੁਨੇਹਾ {{GENDER:$2|ਛੱਡਿਆ ਹੈ}}", "notification-page-linked-email-subject": "{{SITENAME}} ਉੱਤੇ ਤੁਹਾਡਾ ਪੰਨਾ ਜੁੜਦਾ ਹੈ", - "notification-reverted-email-subject2": "ਤੁਹਾਡੀ {{SITENAME}} ਉੱਤੇ {{PLURAL:$3|ਸੋਧ|ਸੋਧਾਂ}} ਨੂੰ {{GENDER:$1|ਰੱਦ ਕਰ ਦਿੱਤਾ}} ਸੀ।", - "notification-mention-email-subject": "$1 ਨੇ {{SITENAME}} ਉੱਤੇ ਤੁਹਾਡਾ {{GENDER:$1|ਜ਼ਿਕਰ ਕੀਤਾ ਹੈ}}", + "notification-reverted-email-subject2": "ਤੁਹਾਡੀ {{SITENAME}} ਉੱਤੇ {{PLURAL:$4|ਸੋਧ|ਸੋਧਾਂ}} ਨੂੰ {{GENDER:$2|ਰੱਦ ਕਰ ਦਿੱਤਾ}} ਸੀ।", + "notification-mention-email-subject": "$1 ਨੇ {{SITENAME}} ਉੱਤੇ ਤੁਹਾਡਾ {{GENDER:$2|ਜ਼ਿਕਰ ਕੀਤਾ ਹੈ}}", "notification-user-rights-email-subject": "{{SITENAME}} ਉੱਤੇ ਤੁਹਾਡੇ ਵਰਤੋਂਕਾਰ ਅਧਿਕਾਰ ਬਦਲ ਗਏ ਹਨ", "notification-timestamp-ago-seconds": "{{PLURAL:$1|$1s}}", "notification-timestamp-ago-minutes": "{{PLURAL:$1|$1m}}", @@ -72,16 +66,12 @@ "notification-timestamp-yesterday": "ਕੱਲ੍ਹ", "notification-inbox-filter-read": "ਪੜ੍ਹੇ ਹੋਏ", "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-notification-alert": "{{PLURAL:$1|ਚੌਕਸੀ ($1)|ਚੌਕਸੀਆਂ ($1)|100=ਚੌਕਸੀਆਂ (99+)}}", "echo-overlay-link": "ਸਾਰੀਆਂ ਸੂਚਨਾਵਾਂ", "echo-overlay-title": "<b>ਸੂਚਨਾਵਾਂ</b>", - "echo-overlay-title-overflow": "<b>{{PLURAL:$1|ਸੂਚਨਾ|ਸੂਚਨਾਵਾਂ}}</b> ($2 ਨਾ-ਪੜ੍ਹੀਆਂ 'ਚੋਂ $1 ਵਿਖਾ ਰਿਹਾ ਹੈ)", "echo-mark-all-as-read": "ਸਾਰੀਆਂ ਨੂੰ ਪੜ੍ਹਿਆਂ ਵਜੋਂ ਨਿਸ਼ਾਨੀ ਲਾਓ", "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|ਇੱਕ ਨਵੀਂ ਸੂਚਨਾ|ਨਵੀਆਂ ਸੂਚਨਾਵਾਂ}} ਹਨ।", "echo-email-batch-body-intro-daily": "ਸਤਿ ਸ਼੍ਰੀ ਅਕਾਲ $1,\nਤੁਹਾਡੇ ਲਈ {{SITENAME}} ਉੱਤੇ ਅੱਜ ਦੀ ਸਰਗਰਮੀ ਦਾ ਸਾਰ।", diff --git a/Echo/i18n/pam.json b/Echo/i18n/pam.json index 6e2b15c1..1b34bfd2 100644 --- a/Echo/i18n/pam.json +++ b/Echo/i18n/pam.json @@ -1,8 +1,8 @@ { "@metadata": { "authors": [ - "Leeheonjin", - "Amiel Guanlao" + "Amiel Guanlao", + "Leeheonjin" ] }, "echo-notification-loginrequired": "Dapot kang mibuklat ba mong akit ding pakiwari keka.", diff --git a/Echo/i18n/pcd.json b/Echo/i18n/pcd.json new file mode 100644 index 00000000..f5e7ba96 --- /dev/null +++ b/Echo/i18n/pcd.json @@ -0,0 +1,9 @@ +{ + "@metadata": { + "authors": [ + "Geoleplubo" + ] + }, + "notifications": "Notificacions", + "tooltip-pt-notifications-alert": "Vos alértes" +} diff --git a/Echo/i18n/pl.json b/Echo/i18n/pl.json index e2bd6f2d..3f5c30c3 100644 --- a/Echo/i18n/pl.json +++ b/Echo/i18n/pl.json @@ -6,34 +6,42 @@ "BeginaFelicysym", "Chrumps", "Faren", + "FunPL", + "InternerowyGołąb", "Matma Rex", "Odie2", + "Peter Bowman", + "PiotrekD", "Przemub", + "Rail", + "Railfail536", + "Rzuwig", + "Sethakill", "Tar Lócesilion", + "The Polish", + "Tsca", "WTM", "Woytecr", - "Wpedzich", - "Tsca", - "Peter Bowman", - "The Polish", - "Rzuwig", - "Sethakill", - "PiotrekD", - "InternerowyGołąb" + "Wpedzich" ] }, "echo-desc": "System powiadomień użytkowników o zdarzeniach i komunikatach", "prefs-echo": "Powiadomienia", "prefs-emailsettings": "Opcje e-maila", - "prefs-displaynotifications": "Opcje wyświetlania", "prefs-echosubscriptions": "Powiadom mnie o tych zdarzeniach", "prefs-echocrosswiki": "Powiadomienia z innych projektów", - "prefs-blocknotificationslist": "Ignorowanie od użytkowników", + "prefs-blocknotificationslist": "Ignorowanie użytkowników", + "prefs-mutedpageslist": "Strony z wyciszonymi powiadomieniami dotyczącymi linków", + "prefs-echopollupdates": "Powiadomienia na żywo", + "echo-mobile-notifications-filter-title": "Filtruj powiadomienia", + "echo-pref-show-poll-updates": "Wyświetlaj nowe powiadomienia, gdy się pojawią", + "echo-pref-show-poll-updates-help": "Pokazuj liczbę nieprzeczytanych powiadomień w pasku tytułu i wyświetlaj fragment każdego powiadomienia, gdy tylko się pojawi.", "echo-pref-send-me": "Wysyłaj mi:", "echo-pref-send-to": "Wyślij na adres:", "echo-pref-email-format": "Format e-maila:", "echo-pref-web": "Na stronie", "echo-pref-email": "Przez e‐mail", + "echo-pref-push": "W telefonie (tylko aplikacje)", "echo-pref-email-frequency-never": "Nie wysyłaj powiadomień e-mailem", "echo-pref-email-frequency-immediately": "Każde powiadomienie osobno", "echo-pref-email-frequency-daily": "Podsumowanie dzienne", @@ -42,8 +50,8 @@ "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: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-pref-notifications-page-linked-title-muted-list": "Nie wyświetlaj powiadomień „Link do moich artykułów” dla tych stron. ([[mw:Special:MyLanguage/Help:Notifications#mute|dowiedz się więcej]])", + "echo-pref-dont-email-read-notifications": "Nie uwzględniaj przeczytanych powiadomień w mailach podsumowujących", "echo-learn-more": "Dowiedz się więcej", "echo-log": "Rejestr publiczny", "echo-new-messages": "Masz nowe wiadomości", @@ -55,19 +63,26 @@ "echo-category-title-mention-success": "{{PLURAL:$1|Udana wzmianka|Udane wzmianki}}", "echo-category-title-other": "{{PLURAL:$1|Inne zdarzenie|Inne zdarzenia}}", "echo-category-title-system": "{{PLURAL:$1|Zdarzenie systemowe|Zdarzenia systemowe}}", + "echo-category-title-system-noemail": "{{PLURAL:$1|System}}", + "echo-category-title-system-emailonly": "{{PLURAL:$1|System}}", "echo-category-title-user-rights": "{{PLURAL:$1|Zmiana uprawnień|Zmiany uprawnień}}", "echo-category-title-emailuser": "{{PLURAL:$1|E-mail od innego użytkownika|E-maile od innych użytkowników}}", "echo-category-title-article-reminder": "{{PLURAL:$1|Przypomnienie|Przypomnienia}} o stronach", + "echo-category-title-thank-you-edit": "{{PLURAL:$1|Kamień milowy|Kamienie milowe}} edycji", + "echo-category-title-watchlist": "Edycja w obserwowanej stronie", + "echo-category-title-minor-watchlist": "Drobna zmiana w obserwowanej stronie", "echo-pref-tooltip-edit-user-talk": "Powiadom mnie, kiedy ktoś napisze nową wiadomość albo odpowie na mojej stronie dyskusji.", "echo-pref-tooltip-article-linked": "Powiadom mnie, kiedy ktoś umieści na innej stronie link do strony utworzonej przeze mnie.", - "echo-pref-tooltip-reverted": "Powiadom mnie, kiedy ktoś wycofa moją edycję korzystając z narzędzia „anuluj” albo „cofnij”.", + "echo-pref-tooltip-reverted": "Powiadom mnie, kiedy ktoś cofnie moją edycję korzystając z narzędzia „cofnij” albo „wycofaj”.", "echo-pref-tooltip-mention": "Powiadom mnie, kiedy ktoś umieści link do mojej strony użytkownika.", "echo-pref-tooltip-mention-failure": "Powiadom mnie, kiedy nie udało się wysłać do kogoś informacji o wzmiance.", "echo-pref-tooltip-mention-success": "Powiadom mnie, kiedy wyślę do kogoś informacje o wzmiance.", "echo-pref-tooltip-user-rights": "Powiadamiaj mnie, gdy ktoś zmieni moje uprawnienia.", "echo-pref-tooltip-emailuser": "Powiadom mnie, gdy ktoś wyśle mi e-mail.", "echo-pref-tooltip-article-reminder": "Powiadom mnie o tej stronie, gdy zapytam.", - "echo-error-no-formatter": "Nie określono formatowania dla powiadomień", + "echo-pref-tooltip-thank-you-edit": "Powiadom mnie, gdy osiągnę 1, 10, 100… edycji.", + "echo-pref-tooltip-watchlist": "Powiadom mnie, gdy ktoś wykona (nie drobną) edycję na stronie z mojej listy obserwowanych", + "echo-pref-tooltip-minor-watchlist": "Powiadom mnie, gdy ktoś wykona drobną edycję na stronie z mojej listy obserwowanych", "notifications": "Powiadomienia", "tooltip-pt-notifications-alert": "Moje powiadomienia", "tooltip-pt-notifications-notice": "Moje komunikaty", @@ -78,7 +93,6 @@ "echo-displaynotificationsconfiguration-sorting-by-section-legend": "Do której sekcji każdy rodzaj powiadomienia jest przydzielany", "echo-displaynotificationsconfiguration-available-notification-methods-header": "Akceptowane sposoby powiadamiania", "echo-displaynotificationsconfiguration-available-notification-methods-by-category-legend": "Jakie metody powiadamiania są obsługiwane dla każdej z kategorii", - "echo-displaynotificationsconfiguration-available-notification-methods-by-type-legend": "Jakie metody powiadamiania są obsługiwane dla każdego z rodzajów; ma tylko zastosowanie do rodzajów zawartych w kategoriach, które są ukryte z preferencji.", "echo-displaynotificationsconfiguration-enabled-default-header": "Domyślnie włączone", "echo-displaynotificationsconfiguration-enabled-default-existing-users-legend": "Istniejący użytkownicy", "echo-displaynotificationsconfiguration-enabled-default-new-users-legend": "Nowi użytkownicy", @@ -88,14 +102,13 @@ "echo-specialpage-section-markread": "Oznacz grupę jako przeczytaną", "echo-specialpage-markasread": "Powiadomienie: Oznacz jako przeczytane", "echo-specialpage-markasread-invalid-id": "Nieprawidłowy identyfikator zdarzenia", + "echo-specialpage-pagefilterwidget-aria-label": "Filtruj wiki i tytuły stron", + "echo-specialpage-special-help-menu-widget-aria-label": "Dodatkowe opcje i preferencje powiadomień.", "echo-specialpage-pagination-numnotifications": "{{PLURAL:$1|$1 powiadomienie|$1 powiadomienia|$1 powiadomień}}", "echo-specialpage-pagefilters-title": "Ostatnia aktywność", "echo-specialpage-pagefilters-subtitle": "Strony z nieodczytanymi powiadomieniami", "notificationsmarkread-legend": "Oznacz powiadomienie jako przeczytane", - "echo-anon": "Aby otrzymywać powiadomienia, [$1 załóż konto] lub [$2 zaloguj się].", "echo-none": "Nie masz żadnych powiadomień.", - "echo-more-info": "Więcej informacji", - "echo-feedback": "Opinie", "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ń.", @@ -106,6 +119,12 @@ "echo-notification-markasunread": "Oznacz jako nieprzeczytane", "echo-notification-markasread-tooltip": "Oznacz jako przeczytane", "echo-notification-more-options-tooltip": "Więcej opcji", + "notification-dynamic-actions-mute-page-linked": "{{GENDER:$2|Wycisz}} powiadomienia o linkach na „$1”", + "notification-dynamic-actions-mute-page-linked-confirmation": "Powiadomienia o linkach do strony „$1” są teraz wyłączone", + "notification-dynamic-actions-mute-page-linked-confirmation-description": "W każdej chwili {{GENDER:$2|możesz}} zarządzać swoimi wyciszonymi stronami w [$1 preferencjach].", + "notification-dynamic-actions-unmute-page-linked": "{{GENDER:$2|Ponownie włącz}} powiadomienia o linkach na „$1”", + "notification-dynamic-actions-unmute-page-linked-confirmation": "Powiadomienia o linkach do strony „$1” są teraz włączone", + "notification-dynamic-actions-unmute-page-linked-confirmation-description": "W każdej chwili {{GENDER:$2|możesz}} zarządzać swoimi wyciszonymi stronami w [$1 preferencjach].", "notification-dynamic-actions-unwatch": "{{GENDER:$3|Zatrzymaj}} obserwowanie nowej aktywności na \"$1\"", "notification-dynamic-actions-unwatch-confirmation": "{{GENDER:$3|Przestałeś|Przestałaś}} obserwować stronę „$1”", "notification-dynamic-actions-unwatch-confirmation-description": "{{GENDER:$3|Możesz}} wznowić obserwowanie [$2 tej strony] w dowolnym momencie.", @@ -154,6 +173,16 @@ "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-header-watchlist-changed": "$1 {{GENDER:$2|zmienił|zmieniła|zmienił(a)}}{{PLURAL:$5|| $5 razy}} <strong>$3</strong>, stronę znajdującą się na {{GENDER:$4|twojej}} liście obserwowanych.", + "notification-header-watchlist-created": "$1 {{GENDER:$2|stworzył|stworzyła|stworzył(a)}}{{PLURAL:$5|| $5 razy}} <strong>$3</strong>, stronę znajdującą się na {{GENDER:$4|twojej}} liście obserwowanych.", + "notification-header-watchlist-deleted": "$1 {{GENDER:$2|usunął|usunęła}}{{PLURAL:$5|| $5 razy}} <strong>$3</strong>, stronę znajdującą się na {{GENDER:$4|twojej}} liście obserwowanych.", + "notification-header-watchlist-moved": "$1 {{GENDER:$2|przeniósł|przeniosła}}{{PLURAL:$5|| $5 razy}} <strong>$3</strong>, stronę znajdującą się na {{GENDER:$4|twojej}} liście obserwowanych.", + "notification-header-watchlist-restored": "$1 {{GENDER:$2|przywrócił|przywróciła|przywrócił(a)}}{{PLURAL:$5|| $5 razy}} <strong>$3</strong>, stronę znajdującą się na {{GENDER:$4|twojej}} liście obserwowanych.", + "notification-header-watchlist-multiuser-changed": "Strona <strong>$1</strong> na {{GENDER:$2|twojej}} liście obserwowanych została zmieniona $3 {{PLURAL:$3|raz|razy}}", + "notification-header-watchlist-multiuser-created": "Strona <strong>$1</strong> na {{GENDER:$2|twojej}} liście obserwowanych została utworzona $3 {{PLURAL:$3|raz|razy}}", + "notification-header-watchlist-multiuser-deleted": "Strona <strong>$1</strong> na {{GENDER:$2|twojej}} liście obserwowanych została usunięta $3 {{PLURAL:$3|raz|razy}}", + "notification-header-watchlist-multiuser-moved": "Strona <strong>$1</strong> na {{GENDER:$2|twojej}} liście obserwowanych została przeniesiona $3 {{PLURAL:$3|raz|razy}}", + "notification-header-watchlist-multiuser-restored": "Strona <strong>$1</strong> na {{GENDER:$2|twojej}} liście obserwowanych została przywrócona $3 {{PLURAL:$3|raz|razy}}", "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!", @@ -162,17 +191,17 @@ "notification-header-thank-you-10000-edit": "Właśnie {{GENDER:$2|dokonałeś|dokonałaś}} swojej dziesięciotysięcznej edycji; jesteśmy Ci ogromnie wdzięczni!", "notification-header-thank-you-100000-edit": "Właśnie {{GENDER:$2|dokonałeś|dokonałaś}} swojej stutysięcznej edycji; dziękujemy Ci za niesamowity wkład!", "notification-header-thank-you-1000000-edit": "Właśnie {{GENDER:$2|dokonałeś|dokonałaś}} swojej milionowej edycji; dziękujemy Ci za Twój zadziwiający wkład!", + "notification-header-thank-you-10000000-edit": "Właśnie {{GENDER:$2|dokonałeś|dokonałaś}} swojej dziesięciomilionowej edycji; dziękujemy Ci za Twoje zadziwiające poświęcenie!", "notification-link-thank-you-edit": "{{GENDER:$1|Twoja}} edycja", "notification-link-text-view-edit": "Zobacz edycję", "notification-link-article-reminder": "Zobacz stronę", "notification-header-reverted": "{{GENDER:$2|Wycofano}} {{PLURAL:$4|twoją edycję|twoje edycje}} na stronie <strong>$3</strong>.", "notification-header-emailuser": "$1 {{GENDER:$2|wysłał|wysłała|wysłał(a)}} Ci e-mail.", - "notification-edit-talk-page-email-subject2": "$1 {{GENDER:$1|napisał|napisała}} do Ciebie w projekcie {{SITENAME}}", - "notification-edit-talk-page-email-batch-body-with-section": "$1 {{GENDER:$1|napisał|napisała|napisał}} do ciebie na twojej stronie dyskusji w wątku „$2”.", - "notification-page-linked-email-subject": "Na stronie {{SITENAME}} pojawił się link do utworzonej przez Ciebie strony", - "notification-reverted-email-subject2": "$1 {{GENDER:$1|wycofał|wycofała}} {{PLURAL:$3|Twoją edycję|Twoje edycje}} w {{grammar:MS.lp|{{SITENAME}}}}", - "notification-mention-email-subject": "$1 {{GENDER:$1|wspomniał|wspomniała|wspomniał(a)}} o {{GENDER:$2|Tobie}} w {{grammar:MS.lp|{{SITENAME}}}}", - "notification-user-rights-email-subject": "W {{grammar:MS.lp|{{SITENAME}}}} zostały zmienione twoje uprawnienia", + "notification-edit-talk-page-email-subject2": "$1 {{GENDER:$2|napisał|napisała}} do {{GENDER:$3|Ciebie}} w projekcie {{SITENAME}}", + "notification-page-linked-email-subject": "Na stronie {{SITENAME}} pojawił się link do utworzonej przez {{GENDER:$3|Ciebie}} strony", + "notification-reverted-email-subject2": "{{PLURAL:$4|{{GENDER:$3|Twoja}} edycja została {{GENDER:$2|wycofana}}|{{GENDER:$3|Twoje}} edycje zostały {{GENDER:$2|wycofane}}}} w {{grammar:MS.lp|{{SITENAME}}}}", + "notification-mention-email-subject": "$1 {{GENDER:$2|wspomniał|wspomniała|wspomniał(a)}} o {{GENDER:$3|Tobie}} w {{grammar:MS.lp|{{SITENAME}}}}", + "notification-user-rights-email-subject": "{{GENDER:$3|Twoje}} uprawnienia w {{grammar:MS.lp|{{SITENAME}}}} zostały zmienione", "notification-timestamp-ago-seconds": "{{PLURAL:$1|$1 s}}", "notification-timestamp-ago-minutes": "{{PLURAL:$1|$1 min}}", "notification-timestamp-ago-hours": "{{PLURAL:$1|$1 godz.}}", @@ -184,9 +213,7 @@ "notification-inbox-filter-read": "Przeczytane", "notification-inbox-filter-unread": "Nieprzeczytane", "notification-inbox-filter-all": "Wszystkie", - "echo-email-body-default": "Masz nowe powiadomienie w {{grammar:MS.lp|{{SITENAME}}}}:\n\n$1", - "echo-email-footer-default-html": "Aby określić, jakie e-maile wysyłamy do Ciebie, <a href=\"$2\" style=\"text-decoration:none; color: #3868B0;\">sprawdź swoje preferencje</a>.<br />\n$1", - "echo-email-footer-default": "$2\n\nMożesz wybrać, jakie e-maile chcesz otrzymywać, w swoich preferencjach: {{canonicalurl:{{#special:Preferences}}#mw-prefsection-echo}}\n\n$1", + "echo-specialmute-label-mute-notifications": "Wycisz powiadomienia od tego użytkownika", "echo-email-plain-footer": "Aby kontrolować e-maile, które wysyłamy do {{GENDER:$1|Ciebie}}, sprawdź swoje ustawienia:", "echo-email-html-footer-preference-link-text": "sprawdź {{GENDER:$1|swoje}} preferencje", "echo-email-html-footer-with-link": "Aby kontrolować, jakie e-maile wysyłamy do {{GENDER:$2|Ciebie}}, $1.", @@ -196,13 +223,12 @@ "echo-notification-notice-text-only": "Komunikaty", "echo-overlay-link": "Wszystkie powiadomienia", "echo-overlay-title": "<b>Powiadomienia</b>", - "echo-overlay-title-overflow": "<b>{{PLURAL:$1|Powiadomienie|Powiadomienia}}</b> (wyświetlono $1 z $2 nieprzeczytanych)", "echo-mark-all-as-read": "Oznacz wszystkie jako przeczytane", "echo-mark-all-as-read-confirmation": "$1 {{PLURAL:$1|powiadomienie oznaczone|powiadomienia oznaczone|powiadomień oznaczonych}} jako przeczytane", "echo-mark-wiki-as-read": "Oznacz wszystko jako przeczytane w wybranej wiki: $1", + "echo-displaysnippet-title": "Nowe powiadomienie", "echo-date-today": "Dzisiaj", "echo-date-yesterday": "Wczoraj", - "echo-load-more-error": "Wystąpił błąd przy pobieraniu kolejnych wyników.", "notification-bundle-header-edit-user-talk-v2": "{{PLURAL:$1|Jedna nowa wiadomość|$1 nowe wiadomości|$1 nowych wiadomości|100=99+ nowych wiadomości}} na <strong>{{GENDER:$3|twojej}} stronie dyskusji</strong>.", "echo-email-batch-subject-daily": "Masz {{PLURAL:$2|nowe powiadomienie|nowe powiadomienia}} w {{grammar:MS.lp|{{SITENAME}}}}", "echo-email-batch-subject-weekly": "Masz {{PLURAL:$2|nowe powiadomienie|nowe powiadomienia}} w {{grammar:MS.lp|{{SITENAME}}}} z tego tygodnia", diff --git a/Echo/i18n/pms.json b/Echo/i18n/pms.json index b1adaa24..0f111162 100644 --- a/Echo/i18n/pms.json +++ b/Echo/i18n/pms.json @@ -8,7 +8,6 @@ "echo-desc": "Sistema ëd notìfiche", "prefs-echo": "Notìfiche", "prefs-emailsettings": "Opsion ëd pòsta eletrònica", - "prefs-displaynotifications": "Opsion ëd visualisassion", "prefs-echosubscriptions": "Aviseme ëd si eveniment", "echo-pref-send-me": "Mandeme:", "echo-pref-send-to": "Mandé a:", @@ -35,37 +34,28 @@ "echo-pref-tooltip-reverted": "Aviseme cand cheidun a anula na modìfica che mi i l'hai fàit, an dovrand l'utiss d'anulament o d'artorn andaré.", "echo-pref-tooltip-mention": "Aviseme cand cheidun a buta na liura vers mia pàgina d'utent.", "echo-pref-tooltip-user-rights": "Aviseme cand cheidun a modìfica ij mè drit d'utent.", - "echo-error-no-formatter": "Gnun formà definì për la notìfica", "notifications": "Notìfiche", "tooltip-pt-notifications-alert": "{{GENDER:|Soe}} alerte", "echo-specialpage": "Notìfiche", - "echo-anon": "Për arseive dle notìfiche, <span class=\"plainlinks\">[$1 ch'a crea un cont] o <span class=\"plainlinks\">[$2 ch'a intra ant ël sistema].", "echo-none": "A l'ha gnun-e notìfiche.", - "echo-more-info": "Pi d'anformassion", - "echo-feedback": "Opinion", "notification-link-text-view-message": "Smon-e ël mëssagi", "notification-link-text-view-mention": "Smon-e la rëspondensa", "notification-link-text-view-changes": "Smon-e le modìfiche", "notification-link-text-view-page": "Smon-e la pàgina", "notification-link-text-view-edit": "Smon-e la modìfica", "notification-header-reverted": "{{PLURAL:$4|Soa modìfica dzor $3 a l'é stàita|Soe modìfiche dzor $3 a son stàite}} {{GENDER:$2|ripristinà}} da $1", - "notification-edit-talk-page-email-subject2": "$1 a l'ha {{GENDER:$1|lassaje}} un mëssagi su {{SITENAME}}", - "notification-edit-talk-page-email-batch-body-with-section": "$1 {{GENDER:$1|a l'ha lassà}} un mëssagi su soa pàgina ëd discussion an «$2».", + "notification-edit-talk-page-email-subject2": "$1 a l'ha {{GENDER:$2|lassaje}} un mëssagi su {{SITENAME}}", "notification-page-linked-email-subject": "Soa pàgina a l'é stàita sità su {{SITENAME}}", - "notification-reverted-email-subject2": "{{PLURAL:$3|Soa modìfica a l'é stàita|Soe modìfiche a son ëstàite}} {{GENDER:$1|anulà}} su {{SITENAME}}", - "notification-mention-email-subject": "$1 a l'ha {{GENDER:$1|massionalo|massionala}} su {{SITENAME}}", + "notification-reverted-email-subject2": "{{PLURAL:$4|Soa modìfica a l'é stàita|Soe modìfiche a son ëstàite}} {{GENDER:$2|anulà}} su {{SITENAME}}", + "notification-mention-email-subject": "$1 a l'ha {{GENDER:$2|massionalo|massionala}} su {{SITENAME}}", "notification-user-rights-email-subject": "Ij sò drit d'utent a son ëstàit modificà su {{SITENAME}}", - "echo-email-body-default": "It l'has na notìfica neuva a {{SITENAME}}:\n\n$1", - "echo-email-footer-default": "$2\n\nPër controlé che mëssagi i-j mandoma, ch'a contròla ij sò gust:\n{{canonicalurl:{{#special:Preferences}}#mw-prefsection-echo}}\n\n$1", "echo-notification-alert": "{{PLURAL:$1|Avis ($1)|100=Avis (99+)}}", "echo-notification-alert-text-only": "Avis", "echo-overlay-link": "Tute le notìfiche", "echo-overlay-title": "<b>Notìfiche</b>", - "echo-overlay-title-overflow": "<b>{{PLURAL:$1|Notìfiche}}</b> (as na mostro $1 ëd $2 nen lesùe)", "echo-mark-all-as-read": "Marché tut tanme lesù", "echo-date-today": "Ancheuj", "echo-date-yesterday": "Jer", - "echo-load-more-error": "A l'é capitaje n'eror an recuperand pi d'arzultà.", "echo-email-batch-subject-daily": "A l'ha {{PLURAL:$2|na notìfica neuva|dle notìfiche neuve}} su {{SITENAME}}", "echo-email-batch-subject-weekly": "A l'ha {{PLURAL:$2|na notìfica neuva|dle notìfiche neuve}} su {{SITENAME}} sta sman-a", "echo-email-batch-body-intro-daily": "Cerea $1\nValà un resumé dl'atività d'ancheuj su {{SITENAME}} për chiel.", diff --git a/Echo/i18n/pnb.json b/Echo/i18n/pnb.json index 1998d6fb..c697e103 100644 --- a/Echo/i18n/pnb.json +++ b/Echo/i18n/pnb.json @@ -1,10 +1,10 @@ { "@metadata": { "authors": [ - "Khalid Mahmood", - "Saanvel", "Abbas dhothar", - "BukhariSaeed" + "BukhariSaeed", + "Khalid Mahmood", + "Saanvel" ] }, "notifications": "اطلاعات", diff --git a/Echo/i18n/ps.json b/Echo/i18n/ps.json index dd86f462..596acc1c 100644 --- a/Echo/i18n/ps.json +++ b/Echo/i18n/ps.json @@ -2,13 +2,13 @@ "@metadata": { "authors": [ "Ahmed-Najib-Biabani-Ibrahimkhel", + "Amjad Khan", "Baloch Khan" ] }, "echo-desc": "د پیښو او پیغامونو په اړه د کاروونکو د خبرتیا سیسټم", "prefs-echo": "يادگيرنې", "prefs-emailsettings": "د برېښليک خوښنې", - "prefs-displaynotifications": "د ښکارېدنې خوښنې", "prefs-echosubscriptions": "د دغو پېښو په اړه دې خبر شم", "prefs-echocrosswiki": "د ويکي دباندې خبرتیاوې", "prefs-blocknotificationslist": "باوري کارنان", @@ -25,8 +25,6 @@ "echo-pref-email-format-plain-text": "ساده متن", "echo-pref-cross-wiki-notifications": "له نورو ويکي گانو څخه خبرونې ښکاره کول", "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": "تاسې نوي پيغامونه لرئ", @@ -50,7 +48,6 @@ "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:|ستاسې}} خبرونې", @@ -61,7 +58,6 @@ "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": "نوي کارنان", @@ -75,10 +71,7 @@ "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": "کومې خبرونې نشته.", @@ -150,11 +143,10 @@ "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-edit-talk-page-email-subject2": "$1 {{GENDER:$2|تاسو}} تي په {{SITENAME}} کي پيغام پريښود", "notification-page-linked-email-subject": "يو مخ چې تاسې جوړ کړی، په {{SITENAME}} يې تړنه جوړه شوه", - "notification-reverted-email-subject2": "ستاسو {{PLURAL:$3|سمون|سمونې}} په {{SITENAME}} کي\n{{GENDER:$1|دسره راوګرځول}} شوي", - "notification-mention-email-subject": "$1 په {{SITENAME}} کي {{GENDER:$2|ستاسو}} {{GENDER:$1|يادونه}} وکړه", + "notification-reverted-email-subject2": "ستاسو {{PLURAL:$4|سمون|سمونې}} په {{SITENAME}} کي\n{{GENDER:$2|دسره راوګرځول}} شوي", + "notification-mention-email-subject": "$1 په {{SITENAME}} کي {{GENDER:$3|ستاسو}} {{GENDER:$2|يادونه}} وکړه", "notification-user-rights-email-subject": "ستاسو د کارن حقوق په {{SITENAME}} کي بدل شوه", "notification-timestamp-ago-seconds": "{{PLURAL:$1|$1 ثانیه}}", "notification-timestamp-ago-minutes": "{{PLURAL:$1|$1دقیقه}}", @@ -167,9 +159,6 @@ "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.", @@ -179,13 +168,11 @@ "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|خبرتیا|خبرتیاوې}} لکه لوستل شوي په نښه شوي", "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=تر ۹۹ زيات نوي پيغامونه}} {{GENDER:$3|ستاسو}} د<strong>خبرو اترو په مخ </strong> کي ځای پر ځای شوي دي.", "echo-email-batch-subject-daily": "ستاسو لپاره په {{SITENAME}} کي {{PLURAL:$2|یو نوی خبرتیا|نوی خبرتیاوي}} موجودی دي", "echo-email-batch-subject-weekly": "تاسو په {{SITENAME}} کي په دي هفته کي يوه {{PLURAL:$2|يوه نوی خبرتیا|نوی خبرتیاوي}} لري", diff --git a/Echo/i18n/pt-br.json b/Echo/i18n/pt-br.json index 4b014764..1259fa0e 100644 --- a/Echo/i18n/pt-br.json +++ b/Echo/i18n/pt-br.json @@ -1,41 +1,48 @@ { "@metadata": { "authors": [ + "Almondega", + "Anderson Costa", "Cainamarques", + "Chicocvenancio", + "Cristofer Alves", + "Dianakc", + "Eduardo Addad de Oliveira", + "Felipe L. Ewald", + "Hamilton Abreu", + "He7d3r", "Helder.wiki", "HenriqueCrang", "Luckas", + "Luk3", + "Macofe", + "McDutchie", + "Opraco", + "Peter Fernando", + "Rafaelff", "Raylton P. Sousa", - "TheGabrielZaum", "Rodrigo codignoli", - "Dianakc", - "He7d3r", - "Almondega", "TheEduGobi", - "Macofe", - "Luk3", - "Anderson Costa", - "Peter Fernando", - "Cristofer Alves", - "Hamilton Abreu", - "Felipe L. Ewald", - "Chicocvenancio", - "Eduardo Addad de Oliveira", - "Opraco" + "TheGabrielZaum" ] }, "echo-desc": "Sistema para notificar usuários sobre eventos e mensagens", "prefs-echo": "Notificações", "prefs-emailsettings": "Opções de e-mail", - "prefs-displaynotifications": "Opções de exibição", "prefs-echosubscriptions": "Notificar-me sobre estes eventos", "prefs-echocrosswiki": "Notificações entre-wikis", "prefs-blocknotificationslist": "Usuários silenciados", + "prefs-mutedpageslist": "Páginas silenciadas para notificações de links de páginas", + "prefs-echopollupdates": "Notificações ao vivo", + "echo-mobile-notifications-filter-title": "Filtrar notificações", + "echo-pref-show-poll-updates": "Apresentar notificações novas à medida que chegam", + "echo-pref-show-poll-updates-help": "Mostrar o número de notificações não lidas na barra de título, e mostrar imediatamente um fragmento de cada notificação quando ela chega.", "echo-pref-send-me": "Envie-me:", "echo-pref-send-to": "Envie para:", "echo-pref-email-format": "Formato de e-mail:", "echo-pref-web": "Web", "echo-pref-email": "E-mail", + "echo-pref-push": "Aplicativos", "echo-pref-email-frequency-never": "Não me envie notificações por e-mail", "echo-pref-email-frequency-immediately": "Notificações individuais conforme cheguem", "echo-pref-email-frequency-daily": "Um resumo diário das notificações", @@ -44,8 +51,8 @@ "echo-pref-email-format-plain-text": "Texto simples", "echo-pref-cross-wiki-notifications": "Mostrar notificações de outras wikis", "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-pref-notifications-page-linked-title-muted-list": "Não exibir notificações \"Link da página\" para essas páginas. ([[mw:Special:MyLanguage/Help:Notifications#mute|Saber mais]])", + "echo-pref-dont-email-read-notifications": "Não inclua notificações de leitura em emails de resumo", "echo-learn-more": "Saiba mais", "echo-log": "Registro Público", "echo-new-messages": "Você tem novas mensagens", @@ -57,9 +64,14 @@ "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-system-noemail": "{{PLURAL:$1|Sistema|Sistemas}}", + "echo-category-title-system-emailonly": "{{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}}", "echo-category-title-emailuser": "{{PLURAL:$1|E-mail de outro usuário|E-mails de outros usuários}}", "echo-category-title-article-reminder": "{{PLURAL:$1|Lembrete|Lembretes}} de página", + "echo-category-title-thank-you-edit": "{{PLURAL:$1|marco|marcos}} de edição", + "echo-category-title-watchlist": "Editar na página vigiadas", + "echo-category-title-minor-watchlist": "Edição menores na página vigiadas", "echo-pref-tooltip-edit-user-talk": "Notifique-me quando alguém publicar uma mensagem ou respostas na minha página de discussão.", "echo-pref-tooltip-article-linked": "Notifique-me quando alguém criar um link para uma página que criei a partir de uma página de artigo.", "echo-pref-tooltip-reverted": "Notifique-me quando alguém reverter uma edição que fiz usando desfazer ou a ferramenta de reversão.", @@ -69,7 +81,9 @@ "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 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.", + "echo-pref-tooltip-thank-you-edit": "Notificar-me quando eu atingir a primeira, décima, centésima... edição.", + "echo-pref-tooltip-watchlist": "Notifique-me quando alguém fizer uma edição (não menor) em uma página da minha lista de páginas vigiadas.", + "echo-pref-tooltip-minor-watchlist": "Notifique-me quando alguém fizer uma edição menor em uma página da minha lista de páginas vigiadas.", "notifications": "Notificações", "tooltip-pt-notifications-alert": "{{GENDER:|Seus}} alertas", "tooltip-pt-notifications-notice": "{{GENDER:|Suas}} notificações", @@ -80,7 +94,6 @@ "echo-displaynotificationsconfiguration-sorting-by-section-legend": "Qual seção cada tipo de notificação é classificada em", "echo-displaynotificationsconfiguration-available-notification-methods-header": "Métodos de notificação permitidos", "echo-displaynotificationsconfiguration-available-notification-methods-by-category-legend": "Quais os métodos de notificação são suportados para cada categoria", - "echo-displaynotificationsconfiguration-available-notification-methods-by-type-legend": "Quais métodos de notificação são suportados para cada tipo; Aplica-se apenas a tipos dentro de categorias escondidas das preferências", "echo-displaynotificationsconfiguration-enabled-default-header": "Habilitado por padrão", "echo-displaynotificationsconfiguration-enabled-default-existing-users-legend": "Usuários existentes", "echo-displaynotificationsconfiguration-enabled-default-new-users-legend": "Novos usuários", @@ -90,16 +103,14 @@ "echo-specialpage-section-markread": "Marcar como grupo como lido", "echo-specialpage-markasread": "Notificação: Marcar como lida", "echo-specialpage-markasread-invalid-id": "ID do evento inválido", + "echo-specialpage-pagefilterwidget-aria-label": "Filtrar por wiki e título da página", + "echo-specialpage-special-help-menu-widget-aria-label": "Opções adicionais e preferências de notificações.", "echo-specialpage-pagination-numnotifications": "$1 {{PLURAL:$1|notificação|notificações}}", "echo-specialpage-pagination-range": "$1 - $2", "echo-specialpage-pagefilters-title": "Atividades recentes", "echo-specialpage-pagefilters-subtitle": "Páginas com notificações não lidas", "notificationsmarkread-legend": "Marcar a notificação como lida", - "echo-anon": "Para receber notificações, [$1 crie uma conta] ou [$2 registre-se].", "echo-none": "Você não tem notificações.", - "echo-more-info": "Mais informações", - "echo-feedback": "Comentários", - "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.", "echo-notification-placeholder": "Não há notificações.", @@ -110,6 +121,12 @@ "echo-notification-markasunread": "Marcar como não lida", "echo-notification-markasread-tooltip": "Marcar como lida", "echo-notification-more-options-tooltip": "Mais opções", + "notification-dynamic-actions-mute-page-linked": "{{GENDER:$2|Silenciar}} notificações de link em \"$1\"", + "notification-dynamic-actions-mute-page-linked-confirmation": "As notificações \"link da página\" agora estão desativadas para a página \"$1\"", + "notification-dynamic-actions-mute-page-linked-confirmation-description": "{{GENDER:$2|Você}} pode gerenciar suas páginas desativadas em [$1 suas preferências] a qualquer momento.", + "notification-dynamic-actions-unmute-page-linked": "{{GENDER:$2|Ativar som}} das notificações de link em \"$1\"", + "notification-dynamic-actions-unmute-page-linked-confirmation": "As notificações \"link da página\" agora estão ativadas para a página \"$1\"", + "notification-dynamic-actions-unmute-page-linked-confirmation-description": "{{GENDER:$2|Você}} pode gerenciar suas páginas desativadas em [$1 suas preferências] a qualquer momento.", "notification-dynamic-actions-unwatch": "{{GENDER:$3|Parar}} de vigiar nova atividade em \"$1\"", "notification-dynamic-actions-unwatch-confirmation": "{{GENDER:$3|Você}} não está mais vigiando a página \"$1\"", "notification-dynamic-actions-unwatch-confirmation-description": "{{GENDER:$3|Você}} pode vigiar [$2 esta página] a qualquer momento.", @@ -160,26 +177,36 @@ "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-header-watchlist-changed": "$1 {{GENDER:$2|mudou}} <strong>$3</strong>, a página na {{GENDER:$4|sua}} lista de páginas vigiadas em{{PLURAL:$5||, $5 vezes}}.", + "notification-header-watchlist-created": "$1 {{GENDER:$2|criou}} <strong>$3</strong>, a página na {{GENDER:$4|sua}} lista de páginas vigiadas em{{PLURAL:$5||, $5 vezes}}.", + "notification-header-watchlist-deleted": "$1 {{GENDER:$2|apagou}} <strong>$3</strong>, a página na {{GENDER:$4|sua}} lista de páginas vigiadas em{{PLURAL:$5||, $5 vezes}}.", + "notification-header-watchlist-moved": "$1 {{GENDER:$2|moveu}} <strong>$3</strong>, a página na {{GENDER:$4|sua}} lista de páginas vigiadas em{{PLURAL:$5||, $5 vezes}}.", + "notification-header-watchlist-restored": "$1 {{GENDER:$2|restaurou}} <strong>$3</strong>, a página na {{GENDER:$4|sua}} lista de páginas vigiadas em{{PLURAL:$5||, $5 vezes}}.", + "notification-header-watchlist-multiuser-changed": "<strong>$1</strong>, uma página na {{GENDER:$2|sua}} lista de páginas vigiadas, foi alterada em $3 {{PLURAL:$3|veze|vezes}}.", + "notification-header-watchlist-multiuser-created": "<strong>$1</strong>, uma página na {{GENDER:$2|sua}} lista de páginas vigiadas, foi criadas em $3 {{PLURAL:$3|veze|vezes}}.", + "notification-header-watchlist-multiuser-deleted": "<strong>$1</strong>, uma página na {{GENDER:$2|sua}} lista de páginas vigiadas, foi excluída em $3 {{PLURAL:$3|veze|vezes}}.", + "notification-header-watchlist-multiuser-moved": "<strong>$1</strong>, uma página na {{GENDER:$2|sua}} lista de páginas vigiadas, foi movida em $3 {{PLURAL:$3|veze|vezes}}.", + "notification-header-watchlist-multiuser-restored": "<strong>$1</strong>, uma página na {{GENDER:$2|sua}} lista de páginas vigiadas, foi restaurada em $3 {{PLURAL:$3|veze|vezes}}.", "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í!", - "notification-header-thank-you-100-edit": "{{GENDER:$2|Você}} acaba de fez {{GENDER:$2|sua}} centésima edição; Agradeço {{GENDER:$2|Muito obrigado!|Muito obrigada!}}", + "notification-header-thank-you-100-edit": "{{GENDER:$2|Você}} acabou de fazer {{GENDER:$2|sua}} centésima edição. {{GENDER:$2|Muito obrigado!}}", "notification-header-thank-you-1000-edit": "{{GENDER:$2|Você}} acaba de fez {{GENDER:$2|sua}} milésima edição; {{GENDER:$2|Muito obrigado por ser um grande contribuidor!|Muito obrigada por ser uma grande contribuidora!}}", "notification-header-thank-you-10000-edit": "{{GENDER:$2|Você}} acaba de fez {{GENDER:$2|sua}} décima milésima edição; {{GENDER:$2|Muito obrigado!|Muito obrigada!}}", "notification-header-thank-you-100000-edit": "{{GENDER:$2|Você}} acaba de fez {{GENDER:$2|sua}} centésima milésima edição; {{GENDER:$2|Muito obrigado|Muito obrigada}} por uma incrível contribuição!", "notification-header-thank-you-1000000-edit": "{{GENDER:$2|Você}} acaba de fez {{GENDER:$2|sua}} milionésima edição; {{GENDER:$2|Muito obrigado|Muito obrigada}} por uma contribuição surpreendente!", + "notification-header-thank-you-10000000-edit": "{{GENDER:$2|Você}} acabou de fazer {{GENDER:$2|sua}} décima milionésima edição; {{GENDER:$2|Muito obrigado|Muito}} por sua dedicação brilhante!", "notification-link-thank-you-edit": "{{GENDER:$1|Sua}} edição", "notification-link-text-view-edit": "Ver edição", "notification-link-article-reminder": "Ver página", "notification-header-reverted": "{{PLURAL:$4|Sua edição em <strong>$3</strong> foi {{GENDER:$2|revertida}}|Suas edições em <strong>$3</strong> foram {{GENDER:$2|revertidas}}}}.", "notification-body-reverted": "$1", "notification-header-emailuser": "$1 {{GENDER:$2|enviou}} um e-mail para você.", - "notification-edit-talk-page-email-subject2": "$1 {{GENDER:$1|deixou}} uma mensagem para você em {{SITENAME}}", - "notification-edit-talk-page-email-batch-body-with-section": "$1 {{GENDER:$1|ldeixou}} uma mensagem na sua página de discussão em \"$2\".", - "notification-page-linked-email-subject": "A pagina que você criou foi lincada em {{SITENAME}}", - "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-edit-talk-page-email-subject2": "$1 {{GENDER:$2|deixou}} uma mensagem para você em {{SITENAME}}", + "notification-page-linked-email-subject": "A pagina que {{GENDER:$3|você}} criou foi lincada em {{SITENAME}}", + "notification-reverted-email-subject2": "{{GENDER:$3|Sua}} {{PLURAL:$4|edição foi|edições foram}} {{PLURAL:$2|revertida|revertidas}} na wiki {{SITENAME}}", + "notification-mention-email-subject": "$1 {{GENDER:$2|mencionou}} {{GENDER:$3|você}} em {{SITENAME}}", + "notification-user-rights-email-subject": "{{GENDER:$3|Seus}} direitos de usuários mudaram em {{SITENAME}}", "notification-timestamp-ago-seconds": "{{PLURAL:$1|$1 s}}", "notification-timestamp-ago-minutes": "{{PLURAL:$1|$1 min}}", "notification-timestamp-ago-hours": "{{PLURAL:$1|$1 h}}", @@ -188,12 +215,10 @@ "notification-timestamp-ago-years": "$1 {{PLURAL:$1|ano|anos}}", "notification-timestamp-today": "Hoje", "notification-timestamp-yesterday": "Ontem", - "notification-inbox-filter-read": "Ler", + "notification-inbox-filter-read": "Lidas", "notification-inbox-filter-unread": "Não lidas", "notification-inbox-filter-all": "Todas", - "echo-email-body-default": "Você tem uma nova notificação em {{SITENAME}}:\n\n$1", - "echo-email-footer-default-html": "Para controlar quais os e-mails que lhe enviamos, <a href=\"$2\" style=\"text-decoration:none; color: #3868B0;\">verifique suas preferências</a>.<br />\n$1", - "echo-email-footer-default": "$2\n\nPara controlar quais emails enviamos a você, confira suas preferências: \n{{canonicalurl:{{#special:Preferences}}#mw-prefsection-echo}}\n\n$1", + "echo-specialmute-label-mute-notifications": "Silenciar notificações {{GENDER:$1|desse usuário|dessa usuária}}", "echo-email-plain-footer": "Para controlar quais e-mails enviamos para {{GENDER:$1|você}}, verifique {{GENDER:$1|suas}} preferências:", "echo-email-html-footer-preference-link-text": "verifique {{GENDER:$1|suas}} preferências", "echo-email-html-footer-with-link": "Para controlar quais e-mails enviamos {{GENDER:$2|você}}, $1.", @@ -203,13 +228,12 @@ "echo-notification-notice-text-only": "Avisos", "echo-overlay-link": "Todas as notificações", "echo-overlay-title": "<b>Notificações</b>", - "echo-overlay-title-overflow": "<b>{{PLURAL:$1|Notificação|Notificações}}</b> (exibindo $1 de $2 não lidas)", "echo-mark-all-as-read": "Marcas todas como lidas", "echo-mark-all-as-read-confirmation": "$1 {{PLURAL:$1|notificação marcada como lida|notificações marcadas como lidas}}", "echo-mark-wiki-as-read": "Marcar tudo como lido na wiki selecionada: $1 \\", + "echo-displaysnippet-title": "Notificação nova", "echo-date-today": "Hoje", "echo-date-yesterday": "Ontem", - "echo-load-more-error": "Um erro ocorreu ao carregar mais resultados.", "notification-bundle-header-edit-user-talk-v2": "{{PLURAL:$1|Uma nova mensagem|$1 novas mensagens|100=mais de 99 novas mensagens}} em <strong>{{GENDER:$3|sua}} página de discussão</strong>.", "echo-email-batch-bullet": "•", "echo-email-batch-subject-daily": "Você tem {{PLURAL:$2|uma nova notificação|novas notificações}} em {{SITENAME}}", @@ -221,5 +245,5 @@ "notification-header-foreign-notice": "Mais notificações de {{PLURAL:$5|outra wiki|$5 outras wikis}}", "notification-header-foreign-all": "Mais notificações de {{PLURAL:$5|outra wiki|$5 outras wikis}}", "echo-foreign-wiki-lang": "$1 - $2", - "echo-badge-count": "{{PLURAL:$1|$1|100=99+}}" + "echo-badge-count": "{{PLURAL:$1|$1|100={{formatnum:99}}+}}" } diff --git a/Echo/i18n/pt.json b/Echo/i18n/pt.json index 384686de..2365c3e2 100644 --- a/Echo/i18n/pt.json +++ b/Echo/i18n/pt.json @@ -1,37 +1,44 @@ { "@metadata": { "authors": [ + "Albertoleoncio", + "Athena in Wonderland", "Cainamarques", + "CaiusSPQR", + "Diniscoelho", + "Fúlvio", + "Gato Preto", "GoEThe", + "Hamilton Abreu", + "He7d3r", "Helder.wiki", "Imperadeiro98", - "Lijealso", - "Polyethylen", - "Vitorvicentevalente", - "He7d3r", - "Fúlvio", "Jkb8", + "Lijealso", "Macofe", - "Önni", - "Diniscoelho", - "Gato Preto", + "Malafaya", "Mansil", - "Hamilton Abreu", - "Athena in Wonderland", - "Opraco" + "Mansil alfalb", + "Opraco", + "Polyethylen", + "Vitorvicentevalente", + "Önni" ] }, "echo-desc": "Sistema de notificações a utilizadores sobre eventos e mensagens", "prefs-echo": "Notificações", "prefs-emailsettings": "Opções de correio eletrónico", - "prefs-displaynotifications": "Opções de visualização", "prefs-echosubscriptions": "Notificar-me sobre estes eventos", "prefs-echocrosswiki": "Notificações interwikis", "prefs-blocknotificationslist": "Utilizadores silenciados", + "prefs-echopollupdates": "Notificações ao vivo", + "echo-mobile-notifications-filter-title": "Filtrar notificações", + "echo-pref-show-poll-updates": "Apresentar notificações novas à medida que chegam", + "echo-pref-show-poll-updates-help": "Mostrar o número de notificações não lidas na barra de título, e mostrar imediatamente um fragmento de cada notificação quando ela chega.", "echo-pref-send-me": "Enviar-me:", "echo-pref-send-to": "Enviar para:", "echo-pref-email-format": "Formato de correio:", - "echo-pref-web": "Web", + "echo-pref-web": "Internet", "echo-pref-email": "Correio eletrónico", "echo-pref-email-frequency-never": "Não me enviar notificações por correio", "echo-pref-email-frequency-immediately": "Notificações individuais conforme cheguem", @@ -41,22 +48,26 @@ "echo-pref-email-format-plain-text": "Texto simples", "echo-pref-cross-wiki-notifications": "Mostrar notificações de outras wikis", "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-pref-dont-email-read-notifications": "Não incluir as notificações já lidas nas mensagens de resumo", "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|Hiperligação|Hiperligações}} para uma página", - "echo-category-title-reverted": "{{PLURAL:$1|Edição revertida|Edições revertidas}}", + "echo-category-title-reverted": "Reversão de {{PLURAL:$1|edição|edições}}", "echo-category-title-mention": "{{PLURAL:$1|Menção|Menções}}", "echo-category-title-mention-failure": "{{PLURAL:$1|Menção falhada|Menções falhadas}}", "echo-category-title-mention-success": "{{PLURAL:$1|Menção efetuada com êxito|Menções efetuadas com êxito}}", "echo-category-title-other": "{{PLURAL:$1|Outro|Outros}}", "echo-category-title-system": "{{PLURAL:$1|Sistema|Sistemas}}", + "echo-category-title-system-noemail": "{{PLURAL:$1|Sistema|Sistemas}}", + "echo-category-title-system-emailonly": "{{PLURAL:$1|Sistema}}", "echo-category-title-user-rights": "{{PLURAL:$1|Alteração de privilégios de utilizador|Alterações de privilégios de utilizador}}", "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-category-title-thank-you-edit": "{{PLURAL:$1|Marco|Marcos}} de edição", + "echo-category-title-watchlist": "Edição de página vigiada", + "echo-category-title-minor-watchlist": "Edição menor de uma página vigiada", "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 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.", @@ -66,7 +77,7 @@ "echo-pref-tooltip-user-rights": "Notificar-me quando os meus privilégios de utilizador forem alterados.", "echo-pref-tooltip-emailuser": "Notificar-me quando alguém me enviar um correio.", "echo-pref-tooltip-article-reminder": "Notificar-me acerca desta página a meu pedido.", - "echo-error-no-formatter": "Sem formato definido para notificações.", + "echo-pref-tooltip-thank-you-edit": "Notificar-me quando eu atingir a primeira, décima, centésima... edição.", "notifications": "Notificações", "tooltip-pt-notifications-alert": "Os {{GENDER:|seus}} alertas", "tooltip-pt-notifications-notice": "As {{GENDER:|suas}} notificações", @@ -76,8 +87,7 @@ "echo-displaynotificationsconfiguration-sorting-by-section-header": "Classificação dos tipos de notificação", "echo-displaynotificationsconfiguration-sorting-by-section-legend": "Em que secção é classificado cada tipo de notificação", "echo-displaynotificationsconfiguration-available-notification-methods-header": "Métodos de notificação permitidos", - "echo-displaynotificationsconfiguration-available-notification-methods-by-category-legend": "Que métodos de notificação são suportadas para cada categoria", - "echo-displaynotificationsconfiguration-available-notification-methods-by-type-legend": "Que métodos de notificação são suportados para cada tipo; só se aplica a tipos dentro das categorias que estão escondidas nas preferências", + "echo-displaynotificationsconfiguration-available-notification-methods-by-category-legend": "Que métodos de notificação são suportados para cada categoria", "echo-displaynotificationsconfiguration-enabled-default-header": "Ativado por padrão", "echo-displaynotificationsconfiguration-enabled-default-existing-users-legend": "Utilizadores existentes", "echo-displaynotificationsconfiguration-enabled-default-new-users-legend": "Novos utilizadores", @@ -88,17 +98,15 @@ "echo-specialpage-markasread": "Notificação: Marcar como lida", "echo-specialpage-markasread-invalid-id": "ID de evento inválido", "echo-specialpage-pagination-numnotifications": "$1 {{PLURAL:$1|notificação|notificações}}", + "echo-specialpage-pagination-range": "$1 - $2", "echo-specialpage-pagefilters-title": "Atividade recente", "echo-specialpage-pagefilters-subtitle": "Páginas com notificações não lidas", "notificationsmarkread-legend": "Marcar notificação como lida", - "echo-anon": "Para receber notificações, [$1 crie uma conta] ou [$2 entre] na sua.", "echo-none": "Não tem notificações.", - "echo-more-info": "Mais informações", - "echo-feedback": "Comentários", "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.", - "echo-notification-placeholder-filters": "Não existem notificações correspondentes a estes critérios.", + "echo-notification-placeholder-filters": "Não existem notificações que correspondam a estes critérios.", "echo-notification-loginrequired": "Deve iniciar sessão para ver as suas notificações.", "echo-notification-popup-loginrequired": "Inicie sessão para ver as suas notificações.", "echo-notification-markasread": "Marcar como lida", @@ -140,7 +148,7 @@ "notification-header-mention-article-talkpage-nosection": "$1 {{GENDER:$2|mencionou-}}{{GENDER:$3|o|a|o(a)}} na página de discussão de <strong>$4</strong>.", "notification-header-mention-failure-user-unknown": "A {{GENDER:$2|sua}} menção de <strong>$3</strong> não foi enviada porque o utilizador não foi encontrado.", "notification-header-mention-failure-user-anonymous": "A {{GENDER:$2|sua}} menção de <strong>$3</strong> não foi enviada porque se trata de um utilizador anónimo.", - "notification-header-mention-failure-too-many": "{{GENDER:$2|Tentaste}} mencionar mais de $3 {{PLURAL:$3|utilizador|utilizadores}}. Todas as menções acima desse limite não foram enviadas.", + "notification-header-mention-failure-too-many": "{{GENDER:$2|Tentou}} mencionar mais de $3 {{PLURAL:$3|utilizador|utilizadores}}. As menções acima desse limite não foram enviadas.", "notification-header-mention-failure-bundle": "{{PLURAL:$3|A menção|As $3 menções}} {{GENDER:$2|que fez}} na página de discussão \"<strong>$4</strong>\" não {{PLURAL:$3|foi enviada|foram enviadas}}.", "notification-compact-header-mention-failure-user-unknown": "<strong>Utilizador inexistente:</strong> $1", "notification-compact-header-mention-failure-user-anonymous": "<strong>IP não podem ser mencionados:</strong> $1", @@ -151,7 +159,7 @@ "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-user-rights-expiry-change": "A expiração da {{GENDER:$4|sua}} associação {{PLURAL:$3|ao seguinte grupo|aos 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)!", @@ -159,7 +167,7 @@ "notification-header-thank-you-10-edit": "{{GENDER:$2|Acabou}} de fazer a {{GENDER:$2|sua}} décima edição; obrigado e, por favor, continue!", "notification-header-thank-you-100-edit": "{{GENDER:$2|Acabou}} de fazer a {{GENDER:$2|sua}} centésima edição; muito obrigado!", "notification-header-thank-you-1000-edit": "{{GENDER:$2|Acabou}} de fazer a {{GENDER:$2|sua}} milésima edição; obrigado por colaborar tão arduamente!", - "notification-header-thank-you-10000-edit": "{{GENDER:$2|Acabou}} de fazer a {{GENDER:$2|sua}} milésima edição; muito obrigado!", + "notification-header-thank-you-10000-edit": "{{GENDER:$2|Acabou}} de fazer a {{GENDER:$2|sua}} décima milésima edição; muito obrigado!", "notification-header-thank-you-100000-edit": "{{GENDER:$2|Acabou}} de fazer a {{GENDER:$2|sua}} edição número cem mil; obrigado por colaborar tão arduamente!", "notification-header-thank-you-1000000-edit": "{{GENDER:$2|Acabou}} de fazer a {{GENDER:$2|sua}} milionésima edição; obrigado pela sua surpreendente contribuição!", "notification-link-thank-you-edit": "{{GENDER:$1|A sua}} edição", @@ -167,12 +175,11 @@ "notification-link-article-reminder": "Ver página", "notification-header-reverted": "{{PLURAL:$4|A sua edição em <strong>$3</strong> foi revertida|As suas edições em <strong>$3</strong> foram {{GENDER:$2|revertidas}}}}.", "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 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-edit-talk-page-email-subject2": "$1 {{GENDER:$2|deixou}}{{GENDER:$3|-lhe}} uma mensagem na wiki {{SITENAME}}", + "notification-page-linked-email-subject": "Foi criada uma hiperligação para uma página que {{GENDER:$3|criou}} na wiki {{SITENAME}}", + "notification-reverted-email-subject2": "{{PLURAL:$4|A sua edição foi revertida|As suas edições foram revertidas}}{{GENDER:$2|}} na wiki {{SITENAME}}", + "notification-mention-email-subject": "$1 {{GENDER:$2|mencionou-}}{{GENDER:$3|o|a|o(a)}} na wiki {{SITENAME}}", + "notification-user-rights-email-subject": "Os seus {{GENDER:$3|privilégios de utilizador}} foram alterados na wiki {{SITENAME}}", "notification-timestamp-ago-seconds": "{{PLURAL:$1|$1 s}}", "notification-timestamp-ago-minutes": "{{PLURAL:$1|$1 min}}", "notification-timestamp-ago-hours": "{{PLURAL:$1|$1 h}}", @@ -184,9 +191,7 @@ "notification-inbox-filter-read": "Lidas", "notification-inbox-filter-unread": "Não lidas", "notification-inbox-filter-all": "Todas", - "echo-email-body-default": "Tem uma nova notificação na wiki {{SITENAME}}:\n\n$1", - "echo-email-footer-default-html": "Para controlar as mensagens eletrónicas que lhe são enviadas, <a href=\"$2\" style=\"text-decoration:none; color: #3868B0;\">verifique as suas preferências</a>.<br />\n$1", - "echo-email-footer-default": "$2\n\nPara controlar quais as mensagens eletrónicas que deseja receber, consulte as suas preferências:\n{{canonicalurl:{{#special:Preferences}}#mw-prefsection-echo}}\n\n$1", + "echo-specialmute-label-mute-notifications": "Silenciar notificações deste utilizador", "echo-email-plain-footer": "Para controlar as mensagens eletrónicas que {{GENDER:$1|lhe}} são enviadas, verifique as {{GENDER:$1|suas}} preferências:", "echo-email-html-footer-preference-link-text": "verifique as {{GENDER:$1|suas}} preferências", "echo-email-html-footer-with-link": "Para controlar as mensagens eletrónicas que {{GENDER:$2|lhe}} são enviadas, $1.", @@ -196,13 +201,12 @@ "echo-notification-notice-text-only": "Notificações", "echo-overlay-link": "Todas as notificações", "echo-overlay-title": "<b>Notificações</b>", - "echo-overlay-title-overflow": "<b>{{PLURAL:$1|Notificações}}</b> (a mostrar $1 de $2 não lidas)", "echo-mark-all-as-read": "Marcar todas como lidas", "echo-mark-all-as-read-confirmation": "$1 {{PLURAL:$1|notificação marcada como lida|notificações marcadas como lidas}}", "echo-mark-wiki-as-read": "Marcar tudo como lido na wiki selecionada: $1", + "echo-displaysnippet-title": "Notificação nova", "echo-date-today": "Hoje", "echo-date-yesterday": "Ontem", - "echo-load-more-error": "Ocorreu um erro ao carregar mais resultados.", "notification-bundle-header-edit-user-talk-v2": "{{PLURAL:$1|Uma nova mensagem|$1 novas mensagens|100=Mais de 99 novas mensagens}} na <strong>{{GENDER:$3|sua}} página de discussão</strong>.", "echo-email-batch-subject-daily": "Tem {{PLURAL:$2|uma nova notificação|novas notificações}} na wiki {{SITENAME}}", "echo-email-batch-subject-weekly": "Tem {{PLURAL:$2|uma nova notificação|novas notificações}} na wiki {{SITENAME}} esta semana", diff --git a/Echo/i18n/qqq.json b/Echo/i18n/qqq.json index 36e8edd2..7a9e0edf 100644 --- a/Echo/i18n/qqq.json +++ b/Echo/i18n/qqq.json @@ -2,60 +2,68 @@ "@metadata": { "authors": [ "Amire80", + "Ans", "Beta16", "Geraki", "Jduranboger", "Kaganer", "Kghbln", "Krenair", + "Liuxinyu970226", "Lloffiwr", + "Mar(c)", + "Matma Rex", + "Mattflaschen", + "Matěj Suchánek", + "McDutchie", "Minh Nguyen", "Mormegil", "Nemo bis", "Nike", + "PiefPafPier", + "Pols12", + "Purodha", "Pxos", "Raymond", "Shirayuki", "Siebrand", + "Tacsipacsi", "Toliño", - "Urhixidur", - "రహ్మానుద్దీన్", - "Liuxinyu970226", - "Purodha", - "Umherirrender", - "Mattflaschen", "Trizek (WMF)", - "Matěj Suchánek", - "McDutchie", - "Ans", + "Tweety", + "Umherirrender", + "Urhixidur", "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.", "prefs-echo": "Name of preferences section for Echo notifications.\n{{Identical|Notification}}", "prefs-emailsettings": "Header for the section of preferences that deals with how often notification emails are sent out and what address they are sent to.\n{{Identical|E-mail option}}", - "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-blocknotificationslist": "Header for the section of preferences that deals with blocking notifications from certain users", + "prefs-mutedpageslist": "Header for the section of preferences that allows muting notifications for selected pages, currently only for page linked notification types.", + "prefs-echopollupdates": "Header for the section of preferences that deals with displaying visual cue and snippet of live notifications", + "echo-mobile-notifications-filter-title": "Title shown in the notifications filter page on click of the Filter button. It is also used for the filter button itself that opens it.", + "echo-pref-show-poll-updates": "Label for displaying visual cue and snippet of live notification", + "echo-pref-show-poll-updates-help": "Help message for detailed explanation of live notification preference", "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.", "echo-pref-email-format": "Label for individual email notification format, the label will be updated once HTML email is ready for email digest.\n\nUsed as label for the select box which has the following options:\n* {{msg-mw|Echo-pref-email-format-html}}\n* {{msg-mw|Echo-pref-email-format-plain-text}}", "echo-pref-web": "Label for list of notifications which are delivered on the web. In other words, on the wiki itself rather by email or another method. This should be kept very short.", "echo-pref-email": "Label for list of notifications which are delivered via email. This should be kept very short.\n{{Identical|E-mail}}", + "echo-pref-push": "Label for the notification preferences column controlling which notifications should be delivered by push notification to Wikipedia mobile app installations for which the user has registered a push notification subscription.", "echo-pref-email-frequency-never": "Option for users who don't want to receive any email notifications\n\nSee also:\n* {{msg-mw|Echo-pref-email-frequency-immediately}}\n* {{msg-mw|Echo-pref-email-frequency-daily}}\n* {{msg-mw|Echo-pref-email-frequency-weekly}}", "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": "ترجيات انهن واپرائيندڙن لاءِ جيڪي برق ٽپال ۾ ايڇ ٽي ايم ايل اطلاع ڏسڻ چاهين ٿا.\n\nوڌيڪ ڏسو:\n* {{msg-mw|Echo-pref-email-format}}\n{{Identical|ايڇ ٽي ايم يل}}", + "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-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-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-pref-notifications-page-linked-title-muted-list": "Label for a preference which allows a user to block page-linked type notifications for certain pages.\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-dont-email-read-notifications": "Label for a preference which hides notifications from daily or weekly digests if they have already been marked as read by the user.", "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.", @@ -67,9 +75,14 @@ "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-system-noemail": "{{doc-echo-category-title}}\n{{Identical|System}}", + "echo-category-title-system-emailonly": "{{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-category-title-thank-you-edit": "'''Note that this doesn't mean \"to edit milestones\", but \"milestones of editing\".'''\n\n{{doc-echo-category-title|tooltip=Echo-pref-tooltip-thank-you-edit}}", + "echo-category-title-watchlist": "{{doc-echo-category-title|tooltip=Echo-pref-tooltip-watchlist}}", + "echo-category-title-minor-watchlist": "{{doc-echo-category-title|tooltip=Echo-pref-tooltip-minor-watchlist}}", "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}}", @@ -79,7 +92,9 @@ "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.", + "echo-pref-tooltip-thank-you-edit": "{{doc-echo-pref-tooltip|title=Echo-category-title-thank-you-edit}}", + "echo-pref-tooltip-watchlist": "{{doc-echo-pref-tooltip|title=Echo-category-title-watchlist}}", + "echo-pref-tooltip-minor-watchlist": "{{doc-echo-pref-tooltip|title=Echo-category-title-minor-watchlist}}", "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.", "tooltip-pt-notifications-notice": "This is used for the title (mouseover text) of the notice notifications user tool.", @@ -90,7 +105,6 @@ "echo-displaynotificationsconfiguration-sorting-by-section-legend": "Legend on DisplayNotificationsConfiguration for a table of which section (alert/message) each type is in", "echo-displaynotificationsconfiguration-available-notification-methods-header": "Header on DisplayNotificationsConfiguration for section regarding methods the user can use to receive different kinds of notifications", "echo-displaynotificationsconfiguration-available-notification-methods-by-category-legend": "Explanatory text on DisplayNotificationsConfiguration regarding which notification methods are available for each category", - "echo-displaynotificationsconfiguration-available-notification-methods-by-type-legend": "Explanatory text on DisplayNotificationsConfiguration regarding which notification methods are available for each type", "echo-displaynotificationsconfiguration-enabled-default-header": "Header on DisplayNotificationsConfiguration for section about which categories are enabled by default", "echo-displaynotificationsconfiguration-enabled-default-existing-users-legend": "Explanatory text on DisplayNotificationsConfiguration regarding which notification methods for each category are enabled by default, for existing users", "echo-displaynotificationsconfiguration-enabled-default-new-users-legend": "Explanatory text on DisplayNotificationsConfiguration regarding which notification methods for each category are enabled by default, for new users\n{{Identical|New user}}", @@ -100,16 +114,14 @@ "echo-specialpage-section-markread": "Label for the button to mark notifications in the given section as read in [[Special:Notifications]]", "echo-specialpage-markasread": "Special page title for Special:NotificationsMarkRead for marking specific notification as read.", "echo-specialpage-markasread-invalid-id": "Error message shown to users who try to mark a notification as read with an invalid event ID.", + "echo-specialpage-pagefilterwidget-aria-label": "Screen readers use this name to identify the recent activities (pages with unread notifications) wiki and pages grouped lists.", + "echo-specialpage-special-help-menu-widget-aria-label": "Screen readers use this label to identify the special help menu widget including the Notifications preferences.", "echo-specialpage-pagination-numnotifications": "Label noting the number of notifications displayed in the page. This only appears if there is a single page of results.\n\nParameters:\n* $1 - Number of notifications in the page.\n{{Identical|Notification}}", "echo-specialpage-pagination-range": "Label noting the range of the notifications displayed in the page. This only appears if there are multiple pages of results available.\n\nParameters:\n* $1 - Number of the first item.\n* $2 - Number of the last item.", "echo-specialpage-pagefilters-title": "Title of the page filter box in Special:Notifications page.", "echo-specialpage-pagefilters-subtitle": "Subtitle of the page filter box in Special:Notifications page.", - "notificationsmarkread-legend": "Title for the form that marks a notification as read in [[Special:NotificationsMarkAsRead]]", - "echo-anon": "Error message shown to users who try to visit [[Special:Notifications]] as an anon.\n\nParameters:\n* $1 - URL of signup page, with returnto pointing to Special:Notifications\n* $2 - URL of login page, with returnto pointing to Special:Notifications", + "notificationsmarkread-legend": "Title for the form that marks a notification as read in [[Special:NotificationsMarkRead]]", "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-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.", "echo-notification-placeholder": "Label for the text that appears if there are no notifications in the Echo popup.", @@ -120,6 +132,12 @@ "echo-notification-markasunread": "Label for the button to mark the notification as unread.", "echo-notification-markasread-tooltip": "Tooltip for the button to mark the notification as read.", "echo-notification-more-options-tooltip": "Tooltip for the button to show the hidden secondary actions.", + "notification-dynamic-actions-mute-page-linked": "Text for the action offering the user to mute link notifications for a page from within a notification.\n\nParameters:\n* $1 - Page name\n* $2 - Current user name for gender purposes\n\n{{related|Notification-dynamic}}", + "notification-dynamic-actions-mute-page-linked-confirmation": "Title for the confirmation text for muting link notifications for a page from within a notification.\n\nParameters:\n* $1 - Page name\n* $2 - Current user name for gender purposes\n\n{{related|Notification-dynamic}}", + "notification-dynamic-actions-mute-page-linked-confirmation-description": "Description for the confirmation text for muting link notifications for a page from within a notification.\n\nParameters:\n* $1 - Page name\n* $2 - Current user name for gender purposes\n\n{{related|Notification-dynamic}}", + "notification-dynamic-actions-unmute-page-linked": "Text for the action offering the user to unmute link notifications for a page from within a notification.\n\nParameters:\n* $1 - Page name\n* $2 - Current user name for gender purposes\n\n{{related|Notification-dynamic}}", + "notification-dynamic-actions-unmute-page-linked-confirmation": "Title for the confirmation text for unmuting link notifications for a page from within a notification.\n\nParameters:\n* $1 - Page name\n* $2 - Current user name for gender purposes\n\n{{related|Notification-dynamic}}", + "notification-dynamic-actions-unmute-page-linked-confirmation-description": "Description for the confirmation text for unmuting link notifications for a page from within a notification.\n\nParameters:\n* $1 - Page name\n* $2 - Current user name for gender purposes\n\n{{related|Notification-dynamic}}", "notification-dynamic-actions-unwatch": "Text for the action offering the user to unwatch a page from within a notification.\n\nParameters:\n* $1 - Page name\n* $2 - Page URL\n* $3 - Current user name for gender purposes\n\n{{related|Notification-dynamic}}", "notification-dynamic-actions-unwatch-confirmation": "Title for the confirmation text for unwatching a page from within a notification.\n\nParameters:\n* $1 - Page name\n* $2 - Page URL\n* $3 - Current user name for gender purposes\n\n{{related|Notification-dynamic}}", "notification-dynamic-actions-unwatch-confirmation-description": "Description for the confirmation text for unwatching a page from within a notification.\n\nParameters:\n* $1 - Page name\n* $2 - Page URL\n* $3 - Current user name for gender purposes\n\n{{related|Notification-dynamic}}", @@ -134,7 +152,7 @@ "notification-link-text-view-message": "Label for button that links to a message on your talk page.\n{{Identical|View message}}", "notification-link-text-view-mention": "Label for button that links to a discussion where you were mentioned.", "notification-link-text-view-mention-failure": "Label for button that links to a discussion where your mentions failed.\n* $1 - The number of failed mentions; uses standard number formatting and used for PLURAL", - "notification-link-text-view-changes": "Label for button that links to a \"diff\" view showing changes made to a page. Paramters:\n* $1 - name of the user viewing the notification, can be used for GENDER.\n{{Identical|View changes}}", + "notification-link-text-view-changes": "Label for button that links to a \"diff\" view showing changes made to a page. Parameters:\n* $1 - name of the user viewing the notification, can be used for GENDER.\n{{Identical|View changes}}", "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", @@ -158,7 +176,7 @@ "notification-header-mention-failure-user-unknown": "Header text for a notification when your mention has failed because the user was not found.\n* $2 - user's name for use in GENDER.\n* $3 - username that was not found.", "notification-header-mention-failure-user-anonymous": "Header text for a notification when your mention has failed because the user is an anonymous IP.\n* $2 - user's name for use in GENDER.\n* $3 - username that is anonymous.", "notification-header-mention-failure-too-many": "Header text for a notification when your mention has failed because you tried to mention too many users.\n* $2 - user's name for use in GENDER.<br /> (not clear: is it \"you\" or the mentioned user when there's only one?)</strong>\n* $3 - max number of mentions allowed; uses standard number formatting", - "notification-header-mention-failure-bundle": "Header text for a bundled notification when multiple mentions failed.\n* $2 - user's name for use in GENDER. <strong><br /> (not clear: is it \"you\" or the mentioned user when there's only one?)</strong>\n* $3 - number of mentions; uses standard number formatting and used for PLURAL.\n* $4 - talk page title.", + "notification-header-mention-failure-bundle": "Header text for a bundled notification when multiple mentions failed.\n* $2 - name of the user viewing the notification, for use in GENDER.\n* $3 - number of mentions; uses standard number formatting and used for PLURAL.\n* $4 - talk page title.", "notification-compact-header-mention-failure-user-unknown": "Compact header text for a notification when your mention has failed because the user was not found.\n* $1 - username that was not found.", "notification-compact-header-mention-failure-user-anonymous": "Compact header text for a notification when your mention has failed because the user is an anonymous IP.\n* $1 - username that is anonymous.", "notification-header-mention-success": "Header text for a notification when your mention was successful.\n* $2 - user's name for use in GENDER.\n* $3 - username that was mentioned, can be used for GENDER.", @@ -167,32 +185,42 @@ "notification-header-mention-status-bundle": "Header text for a bundled notification when some mentions failed and some succeeded.\n* $2 - user's name for use in GENDER.\n* $3 - number of mentions; uses standard number formatting and used for PLURAL.\n* $4 - talk page title.\n* $5 - number of failed mentions; uses standard number formatting and used for PLURAL.\n* $6 - number of successful mentions; uses standard number formatting and used for PLURAL.", "notification-header-user-rights-add-only": "Notifications header message when a user is added to 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* $3 - the number of groups that were added, can be used for PLURAL\n* $4 - name of the user viewing the notification, can be used for GENDER", "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-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* $3 - the number of groups that were added, can be used for PLURAL\n* $4 - a localized list of the groups that were removed\n* $5 - the number of groups that were removed, can be used for PLURAL\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-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-header-watchlist-changed": "Text of a notification when another user changes a page on your watchlist.\n* $1 - user's name (not suitable for GENDER).\n* $2 - user's name for use in GENDER.\n* $3 - name of the page that was changed (with namespace) \n* $4 - name of the user viewing the notification, can be used for GENDER \n* $5 - Number of times the page has been changed.", + "notification-header-watchlist-created": "Text of a notification when another user creates a page on your watchlist.\n* $1 - user's name (not suitable for GENDER).\n* $2 - user's name for use in GENDER.\n* $3 - name of the page that was created (with namespace) \n* $4 - name of the user viewing the notification, can be used for GENDER \n* $5 - Number of times the page has been created.", + "notification-header-watchlist-deleted": "Text of a notification when another user deletes a page on your watchlist.\n* $1 - user's name (not suitable for GENDER).\n* $2 - user's name for use in GENDER.\n* $3 - name of the page that was deleted (with namespace)) \n* $4 - name of the user viewing the notification, can be used for GENDER \n* $5 - Number of times the page has been deleted.", + "notification-header-watchlist-moved": "Text of a notification when another user moves a page on your watchlist.\n* $1 - user's name (not suitable for GENDER).\n* $2 - user's name for use in GENDER.\n* $3 - name of the page that was moved (with namespace) \n* $4 - name of the user viewing the notification, can be used for GENDER \n* $5 - Number of times the page has been moved.", + "notification-header-watchlist-restored": "Text of a notification when another user restores a page on your watchlist.\n* $1 - user's name (not suitable for GENDER).\n* $2 - user's name for use in GENDER.\n* $3 - name of the page that was restored (with namespace) \n* $4 - name of the user viewing the notification, can be used for GENDER \n* $5 - Number of times the page has been restored.", + "notification-header-watchlist-multiuser-changed": "Text of a notification when multiple different users change pages on your watchlist.\n* $1 - name of the page that was changed (with namespace) \n* $2 - name of the user viewing the notification, can be used for GENDER \n* $3 - Number of times the page has been changed. (Always greater than one).", + "notification-header-watchlist-multiuser-created": "Text of a notification when multiple different users create pages on your watchlist.\n* $1 - name of the page that was created (with namespace) \n* $2 - name of the user viewing the notification, can be used for GENDER \n* $3 - Number of times the page has been created. (Always greater than one)", + "notification-header-watchlist-multiuser-deleted": "Text of a notification when multiple different users delete pages on your watchlist.\n* $1 - name of the page that was deleted (with namespace) \n* $2 - name of the user viewing the notification, can be used for GENDER \n* $3 - Number of times the page has been deleted. (Always greater than one)", + "notification-header-watchlist-multiuser-moved": "Text of a notification when multiple different users move pages on your watchlist.\n* $1 - name of the page that was moved (with namespace) \n* $2 - name of the user viewing the notification, can be used for GENDER \n* $3 - Number of times the page has been moved. (Always greater than one)", + "notification-header-watchlist-multiuser-restored": "Text of a notification when multiple different users restore pages on your watchlist.\n* $1 - name of the page that was restored (with namespace) \n* $2 - name of the user viewing the notification, can be used for GENDER \n* $3 - Number of times the page has been restored. (Always greater than one)", "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", - "notification-header-thank-you-10-edit": "Text of the editor welcome notification for their tenth edit.\nParameters:\n* $1 - the formatted username of the new user\n* $2 - the username for gender purposes", - "notification-header-thank-you-100-edit": "Text of the editor welcome notification for their hundredth edit.\nParameters:\n* $1 - the formatted username of the new user\n* $2 - the username for gender purposes", - "notification-header-thank-you-1000-edit": "Text of the editor welcome notification for their thousandth edit.\nParameters:\n* $1 - the formatted username of the new user\n* $2 - the username for gender purposes", - "notification-header-thank-you-10000-edit": "Text of the editor welcome notification for their ten thousandth edit.\nParameters:\n* $1 - the formatted username of the new user\n* $2 - the username for gender purposes", - "notification-header-thank-you-100000-edit": "Text of the editor welcome notification for their hundred thousandth edit.\nParameters:\n* $1 - the formatted username of the new user\n* $2 - the username for gender purposes", - "notification-header-thank-you-1000000-edit": "Text of the editor welcome notification for their millionth edit.\nParameters:\n* $1 - the formatted username of the new user\n* $2 - the username for gender purposes", + "notification-header-thank-you-10-edit": "Text of the editor welcome notification for their tenth edit.\nParameters:\n* $1 - the formatted username of the user\n* $2 - the username for gender purposes", + "notification-header-thank-you-100-edit": "Text of the editor welcome notification for their hundredth edit.\nParameters:\n* $1 - the formatted username of the user\n* $2 - the username for gender purposes", + "notification-header-thank-you-1000-edit": "Text of the editor welcome notification for their thousandth edit.\nParameters:\n* $1 - the formatted username of the user\n* $2 - the username for gender purposes", + "notification-header-thank-you-10000-edit": "Text of the editor welcome notification for their ten thousandth edit.\nParameters:\n* $1 - the formatted username of the user\n* $2 - the username for gender purposes", + "notification-header-thank-you-100000-edit": "Text of the editor welcome notification for their hundred thousandth edit.\nParameters:\n* $1 - the formatted username of the user\n* $2 - the username for gender purposes", + "notification-header-thank-you-1000000-edit": "Text of the editor welcome notification for their millionth edit.\nParameters:\n* $1 - the formatted username of the user\n* $2 - the username for gender purposes", + "notification-header-thank-you-10000000-edit": "Text of the editor welcome notification for their ten millionth edit.\nParameters:\n* $1 - the formatted username of the user\n* $2 - the username for gender purposes", "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\n{{Related|Notification-reverted}}", + "notification-header-reverted": "Notification header of a user's edit being reverted.\n\nParameters:\n* $1 - the formatted username of the person who reverted the edit (not suitable for GENDER).\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}}", - "notification-edit-talk-page-email-subject2": "Email subject. Parameters:\n* $1 - a username which can be used for gender support", - "notification-edit-talk-page-email-batch-body-with-section": "Email notification for talk page edit with new section or new comment. Parameters:\n* $1 - a username\n* $2 - the raw section title text", - "notification-page-linked-email-subject": "E-mail subject.\nSee also:\n* {{msg-mw|Notification-page-linked-flyout}}", - "notification-reverted-email-subject2": "Email subject. Parameters:\n* $1 - a username\n* $2 - (Unused) a page title\n* $3 - the number of reverts\n{{Related|Notification-reverted}}", - "notification-mention-email-subject": "Email subject. Parameters:\n* $1 - a username\n* $2 - name of the user viewing the notification, can be used for GENDER\nSee also:\n* {{msg-mw|Notification-mention-flyout}}", - "notification-user-rights-email-subject": "E-mail subject for user rights notification\n\nSee also:\n* {{msg-mw|Notification-user-rights}}", + "notification-edit-talk-page-email-subject2": "Email subject. Parameters:\n* $1 - the formatted username of the person who edited (not suitable for GENDER).\n* $2 - the username for GENDER.\n* $3 - username of the current user, can be used for GENDER.", + "notification-page-linked-email-subject": "E-mail subject Parameters:\n * $1 - the formatted username of the person who edited (not suitable for GENDER).\n* $2 - the username for GENDER.\n* $3 - username of the current user, can be used for GENDER.", + "notification-reverted-email-subject2": "Email subject. Parameters:\n* $1 - the formatted username of the person who reverted the edit (not suitable for GENDER).\n* $2 - the username for GENDER.\n* $3 - username of the current user, can be used for GENDER.\n* $4 - the number of reverts\n{{Related|Notification-reverted}}", + "notification-mention-email-subject": "Email subject. Parameters:\n* $1 - the formatted username of the person who edited (not suitable for GENDER).\n* $2 - the username for GENDER.\n* $3 - username of the current user, can be used for GENDER.", + "notification-user-rights-email-subject": "E-mail subject for user rights notification. Parameters:\n* $1 - the formatted username of the person who made the user rights change (not suitable for GENDER).\n* $2 - the username for GENDER.\n* $3 - username of the current user, can be used for GENDER.", "notification-timestamp-ago-seconds": "Label for the amount of time since a notification has arrived in the case where it is under a minute. This should be a very short string. $1 - Number of seconds", "notification-timestamp-ago-minutes": "Label for the amount of time since a notification has arrived in the case where it is in order of minutes. This should be a very short string. $1 - Number of minutes", "notification-timestamp-ago-hours": "Label for the amount of time since a notification has arrived in the case where it is in order of hours. This should be a very short string. $1 - Number of hours", @@ -204,10 +232,8 @@ "notification-inbox-filter-read": "Label for the button that shows only read notification.\n{{Identical|Read}}", "notification-inbox-filter-unread": "Label for the button that shows only unread notification.\n{{Identical|Unread}}", "notification-inbox-filter-all": "Label for the button that shows all notification.\n{{Identical|All}}", - "echo-email-body-default": "Default message content for Echo email notifications. Parameters:\n* $1 - a plain text description of the notification", - "echo-email-footer-default-html": "Default footer content for Echo html e-mail notifications. Parameters:\n* $1 - the address of the organization that sent the email\n* $2 - the URL to the notification preference page\nFor plain-text version, see {{msg-mw|Echo-email-footer-default}}.", - "echo-email-footer-default": "Default footer content for Echo text e-mail notifications. Parameters:\n* $1 - the address of the organization that sent the email\n* $2 - \"-------...\" ({{msg-mw|echo-email-batch-separator}})\n\nFor HTML version, see {{msg-mw|echo-email-footer-default-html}}.", - "echo-email-plain-footer": "Footer content for Echo text e-mail notifications. Parameters:\n* $1 - the name of the user being addressed, used for GENDER\n\nFor HTML version, see {{msg-mw|echo-email-html-footer}}.", + "echo-specialmute-label-mute-notifications": "Label for the checkbox that mutes/unmutes notifications on [[Special:Mute]] from the specified user. Parameters:\n* $1 - the name of the user being addressed, used for GENDER", + "echo-email-plain-footer": "Footer content for Echo text e-mail notifications. Parameters:\n* $1 - the name of the user being addressed, used for GENDER\n\nFor HTML version, see {{msg-mw|echo-email-html-footer-with-link}}.", "echo-email-html-footer-preference-link-text": "Text of link to the preference page in the footer of HTML emails. Parameters:\n* $1 - the name of the user being addressed, used for GENDER", "echo-email-html-footer-with-link": "Footer content of the HTML email. Parameters:\n* $1 - complete HTML link to the preference page. $2 - the name of the user being addressed, used for GENDER\n\nSee {{msg-mw|echo-email-html-footer-preference-link-text}} for the text of the link.", "echo-notification-alert": "Label for alert notifications (= non discussion notifications) tab in Echo overlay. Parameters:\n* $1 - the number of unread alerts. The number cannot be higher than 100.\nSee also:\n* {{msg-mw|Echo-notification-notice}}\n{{Identical|Alert}}", @@ -216,15 +242,13 @@ "echo-notification-notice-text-only": "Label for notice notifications tab in Echo overlay without notice notification count next to it. That label groups all notifications less important than the ones displayed in \"alerts\".\n{{Identical|Notice}}", "echo-overlay-link": "Link to \"all notifications\" at the bottom of the overlay.\n{{Identical|All notifications}}", "echo-overlay-title": "Title at the top of the notifications overlay. Should include bold tags.\n{{Identical|Notification}}", - "echo-overlay-title-overflow": "Title at the top of the notifications overlay when there are additional unread notifications that are not being shown.\n\nParameters:\n* $1 - the number of unread notifications being shown\n* $2 - the total number of unread notifications that exist", "echo-mark-all-as-read": "Text for button that marks all unread notifications as read. Keep this as short as possible.\n{{Identical|Mark all as read}}", - "echo-mark-all-as-read-confirmation": "Text for the confirmation message that appers after the user marks all unread notifications as read. Keep this as short as possible\n\nParameters:\n* $1 - The number of notifications that were marked as read", + "echo-mark-all-as-read-confirmation": "Text for the confirmation message that appers after the user marks all unread notifications as read, as used on mobile. Keep this as short as possible\n\nParameters:\n* $1 - The number of notifications that were marked as read", "echo-mark-wiki-as-read": "Text for button that marks all unread notifications as read in a specific wiki. Keep this as short as possible.\n\nParameters:\n* $1 - The human readable name of the selected wiki", + "echo-displaysnippet-title": "The header text for notification snippets displayed in a corner of the screen when the user receives a new notification", "echo-date-today": "The header text for today's notification section.\n{{Identical|Today}}", "echo-date-yesterday": "The header text for yesterday's notification section.\n{{Identical|Yesterday}}", - "echo-load-more-error": "Error message for errors in loading more notifications", "notification-bundle-header-edit-user-talk-v2": "Bundled header message for edit-user-talk notification. Parameters:\n* $1 - the number of new messages, except that if the count is greater than 99, this value will be 100; uses standard number formatting and used for PLURAL\n* $2 - Unused\n* $3 - the name of the user being addressed, can be used for GENDER\n{{Related|Notification-bundle}}", - "echo-email-batch-separator": "{{optional}}\nEmail batch content separator", "echo-email-batch-bullet": "{{optional}}", "echo-email-batch-subject-daily": "Daily email batch subject.\n* $1 - (Unused, Compatibility) Same as $2. \n* $2 - a numeric count, this is used for plural support\nSee also:\n* {{msg-mw|Echo-email-batch-subject-weekly}}", "echo-email-batch-subject-weekly": "Weekly email batch subject. Parameters:\n* $1 - (Unused, Compatibility) Same as $2\n* $2 - a numeric count, this is used for plural support\nSee also:\n* {{msg-mw|Echo-email-batch-subject-daily}}", @@ -236,5 +260,6 @@ "notification-header-foreign-all": "Flyout-specific format for displaying notification header of having notifications (combined alerts and messages) on foreign wikis.\n\nParameters:\n* $1 - the formatted username of the current user.\n* $2 - the username for GENDER\n* $3 (deprecated) - 1 of the foreign wikis you have notifications on\n* $4 (deprecated) - the number of remaining other wikis you have notifications on\n*$5 - the number of other wikis you have notifications on", "notification-body-foreign": "{{notranslate}}", "echo-foreign-wiki-lang": "Title of the wiki for which you're seeing foreign notifications:\n\nParameters:\n* $1 - the name of the site (e.g. 'Wikipedia', 'Wikiversity', ...)\n* $2 - the language of the website (e.g. 'English', 'Deutsch', ...)", - "echo-badge-count": "Used only for the two Echo badges shown on the personal toolbar.\nParameters:\n* $1 - Formatted notification count. However, for 100 or greater, 100 will be passed." + "echo-badge-count": "Used only for the two Echo badges shown on the personal toolbar.\nParameters:\n* $1 - Formatted notification count. However, for 100 or greater, 100 will be passed.", + "echo-blacklist": "{{ignored}} Site-wide list of accounts that cannot trigger notifications. Can be overridden by users at [[Special:MyPage/Echo-whitelist]]." } diff --git a/Echo/i18n/qu.json b/Echo/i18n/qu.json index 01c27a0e..08902652 100644 --- a/Echo/i18n/qu.json +++ b/Echo/i18n/qu.json @@ -17,9 +17,7 @@ "notification-link-text-view-message": "Willasqata qhaway", "notification-link-text-view-changes": "Hukchasqakunata qhaway", "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-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", + "notification-edit-talk-page-email-subject2": "$1 sutiyuq {{GENDER:$2|ruraqqa}} willasqantam saqisurqanki {{SITENAME}} nisqapi.", "echo-overlay-link": "Tukuy qampaq willaykuykuna", "echo-overlay-title": "<b>Willaykuykuna</b>", "echo-email-batch-link-text-view-all-notifications": "Tukuy willaykuykunata qhaway" diff --git a/Echo/i18n/ro.json b/Echo/i18n/ro.json index 651b3cec..e8094fe9 100644 --- a/Echo/i18n/ro.json +++ b/Echo/i18n/ro.json @@ -1,20 +1,20 @@ { "@metadata": { "authors": [ + "Andrei Stroe", "Firilacroco", + "ImGelu", + "Macofe", "Minisarm", "Reception123", "Stelistcristi", - "ImGelu", - "Wintereu", - "Macofe", - "Strainu" + "Strainu", + "Wintereu" ] }, "echo-desc": "Sistem de notificare a utilizatorilor cu privire la evenimente și mesaje", "prefs-echo": "Notificări", "prefs-emailsettings": "Setări pentru e-mail", - "prefs-displaynotifications": "Opțiuni de afișare", "prefs-echosubscriptions": "Notifică-mă despre aceste evenimente", "prefs-echocrosswiki": "Notificări inter-wiki", "prefs-blocknotificationslist": "Utilizatori blocați", @@ -31,8 +31,6 @@ "echo-pref-email-format-plain-text": "Text brut", "echo-pref-cross-wiki-notifications": "Arată notificări de la alte wikiuri", "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. (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", @@ -52,7 +50,6 @@ "echo-pref-tooltip-mention": "Notifică-mă când cineva face referire la pagina mea de utilizator.", "echo-pref-tooltip-user-rights": "Anunță-mă când cineva îmi schimbă drepturile de utilizator.", "echo-pref-tooltip-emailuser": "Anunță-mă când cineva îmi trimite un e-mail.", - "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ă}}", @@ -73,10 +70,7 @@ "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.", - "echo-more-info": "Mai multe informații", - "echo-feedback": "Reacții", "echo-api-failure": "Imposibil de obținut notificările.", "echo-notification-placeholder": "Nu există notificări.", "echo-notification-loginrequired": "Trebuie să vă autentificați pentru a vedea notificările.", @@ -108,12 +102,11 @@ "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”.", - "notification-page-linked-email-subject": "O pagină creată de dumnevoastră a fost menționată la {{SITENAME}}", - "notification-reverted-email-subject2": "{{PLURAL:$3|Modificarea dumneavoastră a fost|Modificările dumneavoastră au fost}} {{GENDER:$1|înlăturat}}{{PLURAL:$3|ă|e}} la {{SITENAME}}", - "notification-mention-email-subject": "$1 {{GENDER:$2|v}}{{GENDER:$1|-a menționat}} la {{SITENAME}}", - "notification-user-rights-email-subject": "Drepturile dumneavoastră de utilizator s-au schimbat la {{SITENAME}}", + "notification-edit-talk-page-email-subject2": "$1 {{GENDER:$2|v-a lăsat}} un mesaj la {{SITENAME}}", + "notification-page-linked-email-subject": "O pagină creată de {{GENDER:$3|dumnevoastră}} a fost menționată la {{SITENAME}}", + "notification-reverted-email-subject2": "{{PLURAL:$4|Modificarea|Modificările}} {{GENDER:$3|dumneavoastră}} {{PLURAL:$4|a fost|au fost}} {{GENDER:$2|înlăturat}}{{PLURAL:$4|ă|e}} la {{SITENAME}}", + "notification-mention-email-subject": "$1 {{GENDER:$3|v}}-{{GENDER:$2|a menționat}} la {{SITENAME}}", + "notification-user-rights-email-subject": "Drepturile {{GENDER:$3|dumneavoastră}} de utilizator s-au schimbat la {{SITENAME}}", "notification-timestamp-ago-seconds": "{{PLURAL:$1|$1 s}}", "notification-timestamp-ago-minutes": "{{PLURAL:$1|$1 m}}", "notification-timestamp-ago-hours": "{{PLURAL:$1|$1 h}}", @@ -125,9 +118,6 @@ "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.", @@ -137,13 +127,11 @@ "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ă", diff --git a/Echo/i18n/roa-tara.json b/Echo/i18n/roa-tara.json index d5520b00..e5d40166 100644 --- a/Echo/i18n/roa-tara.json +++ b/Echo/i18n/roa-tara.json @@ -1,16 +1,20 @@ { "@metadata": { "authors": [ - "Joetaras", - "C.R." + "C.R.", + "Joetaras" ] }, "echo-desc": "Sisteme de notifiche a l'utinde sus a avveneminde e messàgge", "prefs-echo": "Notificaziune", "prefs-emailsettings": "'Mbostaziune de l'email", - "prefs-displaynotifications": "Opziune de visualizzazzione", "prefs-echosubscriptions": "Notificame sus a ste avveneminde", + "prefs-echocrosswiki": "Notifeche cross-uicchi", "prefs-blocknotificationslist": "Utinde citte da sotte", + "prefs-echopollupdates": "Notifeche in dirette", + "echo-mobile-notifications-filter-title": "Notifeche d'u filtre", + "echo-pref-show-poll-updates": "Fà 'ndrucà le notifeche nove cumme arrivane", + "echo-pref-show-poll-updates-help": "Fà 'ndrucà 'u numere de notifeche non lette jndr'à barre d'u titole, e fà 'ndrucà 'nu stuèzze de ogne notifeche subbete subbete quanne arrivane.", "echo-pref-send-me": "Manne a me:", "echo-pref-send-to": "Manne a:", "echo-pref-email-format": "Formate de l'email:", @@ -22,6 +26,8 @@ "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-cross-wiki-notifications": "Fà 'ndrucà le notifeche da otre uicchi", + "echo-pref-notifications-blacklist": "Nò ffà 'ndrucà le notifeche da ste utinde. ([[mw:Special:MyLanguage/Help:Notifications#mute|'mbare de cchiù]])", "echo-learn-more": "'Mbare de cchiù", "echo-log": "Archivije pubbleche", "echo-new-messages": "Tu è messàgge nuève", @@ -33,68 +39,158 @@ "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-system-noemail": "{{PLURAL:$1|Sisteme}}", + "echo-category-title-system-emailonly": "{{PLURAL:$1|Sisteme}}", "echo-category-title-user-rights": "{{PLURAL:$1|Cangiamende|Cangiaminde}} de le deritte de l'utende", + "echo-category-title-emailuser": "Email {{PLURAL:$1|da 'n'otre utende|da otre utinde}}", + "echo-category-title-article-reminder": "{{PLURAL:$1|Pàgene|Pàggene}} de promemorie", + "echo-category-title-thank-you-edit": "Cange {{PLURAL:$1|'a petra miliare|le petre miliare}}", + "echo-category-title-watchlist": "Cange 'a pàgene condrollate", "echo-pref-tooltip-edit-user-talk": "Avvisame quacche quacchedune manne 'nu messàgge o responne sus 'a pàgene de le 'ngazzaminde meje.", "echo-pref-tooltip-article-linked": "Avvisame quacche quacchedune se colleghe a 'na pàgene ca ije agghie ccrejate da 'n'otra vôsce.", "echo-pref-tooltip-reverted": "Avvisame quanne quacchedune annulle 'nu cangiamende ca agghie fatte ije, ausanne 'u strumende de annullamende.", "echo-pref-tooltip-mention": "Avvisame quanne quacchedune se colleghe a pàgena utende meje.", + "echo-pref-tooltip-mention-failure": "Avvisame quanne non g'agghie putute mannà 'na menzione a quacchedune.", + "echo-pref-tooltip-mention-success": "Avvisame quanne manne 'na menzione a quacchedune.", "echo-pref-tooltip-user-rights": "Avvisame quanne quacchedune cange le deritte de utende meje.", "echo-pref-tooltip-emailuser": "Avvisame quanne quacchedune manne 'na mail.", - "echo-error-no-formatter": "Nisciune formattazzione ha state definite pa notifiche", + "echo-pref-tooltip-article-reminder": "Avvisame sus a sta pàgene quanne ije cerche.", + "echo-pref-tooltip-thank-you-edit": "Avvisame quanne agghie raggiunde 'u prime, decime, cendesime... cangiamende.", "notifications": "Notificaziune", "tooltip-pt-notifications-alert": "Avvise {{GENDER:|tune}}", "tooltip-pt-notifications-notice": "Le notizie {{GENDER:|tune}}", + "echo-displaynotificationsconfiguration": "Fà 'ndrucà 'a configurazione de le notifeche", + "echo-displaynotificationsconfiguration-summary": "Queste jè 'na panorameche de cumme le notifeche so configurate sus a sta uicchi.", + "echo-displaynotificationsconfiguration-notifications-by-category-header": "Notifeche pe categorije", + "echo-displaynotificationsconfiguration-sorting-by-section-header": "Ordinamende de le tipe", + "echo-displaynotificationsconfiguration-sorting-by-section-legend": "Jndr'à ce sezione ogne tipe de notifeche avène ordenate", + "echo-displaynotificationsconfiguration-available-notification-methods-header": "Metode de notifeche conzendite", + "echo-displaynotificationsconfiguration-available-notification-methods-by-category-legend": "Ce metode de notifeche non ge sò supportate pe ogne categorije", + "echo-displaynotificationsconfiguration-enabled-default-header": "Abbilitate pe 'mbostazione predefinite", + "echo-displaynotificationsconfiguration-enabled-default-existing-users-legend": "Utinde esistende", "echo-displaynotificationsconfiguration-enabled-default-new-users-legend": "Utinde nuève", + "echo-displaynotificationsconfiguration-mandatory-notification-methods-header": "Metode de notifeche obbligatorije", + "echo-displaynotificationsconfiguration-mandatory-notification-methods-by-category-legend": "Ce metode de notifeche sò obbligatorije pe ogne categorije", "echo-specialpage": "Notificaziune", - "echo-anon": "Pe ricevere notifiche, <span class=\"plainlinks\">[$1 ccreje 'nu cunde] o <span class=\"plainlinks\">[$2 tràse].", + "echo-specialpage-section-markread": "Signe 'u gruppe cumme lette", + "echo-specialpage-markasread": "Notifeche: Signe cumme lette", + "echo-specialpage-markasread-invalid-id": "ID evende invalide", + "echo-specialpage-pagination-numnotifications": "$1 {{PLURAL:$1|notifeche}}", + "echo-specialpage-pagefilters-title": "Urteme attivitate", + "echo-specialpage-pagefilters-subtitle": "Pàggene cu notifeche non lette", + "notificationsmarkread-legend": "Signe 'a notifiche cumme lette", "echo-none": "Non ge tìne notifiche.", - "echo-more-info": "Cchiù 'mbormaziune", - "echo-feedback": "Segnalazione", "echo-api-failure": "Non ge riesche a pigghià le notifiche.", + "echo-api-failure-cross-wiki": "L'accesse a 'u dominie remote ha state negate.", "echo-notification-placeholder": "Non ge stonne notifiche.", + "echo-notification-placeholder-filters": "Non ge stonne notifeche ca s'accocchiane cu 'u criterie.", + "echo-notification-loginrequired": "A trasè pe 'ndrucà le notifeche tune.", + "echo-notification-popup-loginrequired": "Tràse pe 'ndrucà le notifeche tune.", "echo-notification-markasread": "Signe cumme lette", "echo-notification-markasunread": "Signe cumme non lette", "echo-notification-markasread-tooltip": "Signe cumme lette", "echo-notification-more-options-tooltip": "Cchiù opziune", + "notification-dynamic-actions-unwatch": "{{GENDER:$3|Live}} le attività nove sus a \"$1\" da le osservate speciale", + "notification-dynamic-actions-unwatch-confirmation": "{{GENDER:$3|Tu}} non g3e ste cchiù condrolle 'a pàgene \"$1\"", + "notification-dynamic-actions-unwatch-confirmation-description": "{{GENDER:$3|Puè}} condrollà [$2 sta pàgene] quanne vuè.", + "notification-dynamic-actions-watch": "{{GENDER:$3|Segue}} l'attivitate nove sus a \"$1\"", + "notification-dynamic-actions-watch-confirmation": "{{GENDER:$3|Tu}} mò ste condrolle 'a pàgene \"$1\"", + "notification-dynamic-actions-watch-confirmation-description": "{{GENDER:$3|Puè}} spiccià de condrollà [$2 sta pàgene] quanne vuè.", "notification-link-text-expand-all": "Spanne", "notification-link-text-expand-alert-count": "'Ndruche le {{PLURAL:$1|$1 avvise}}", "notification-link-text-expand-notice-count": "'Ndruche {{PLURAL:$1|'a $1|le $1}} notizie", + "notification-link-text-expand-all-count": "'Ndruche {{PLURAL:$1|$1 notifeche}}", "notification-link-text-collapse-all": "Scunne", "notification-link-text-view-message": "'Ndruche 'u messàgge", "notification-link-text-view-mention": "'Ndruche 'a menzione", + "notification-link-text-view-mention-failure": "'Ndruche {{PLURAL:$1|'a menzione|le menziune}}", "notification-link-text-view-changes": "{{GENDER:$1|'Ndruche}} le cangiaminde", "notification-link-text-view-page": "'Ndruche 'a pàgene", + "notification-header-edit-user-talk": "$1 {{GENDER:$2|ave lassate}} 'nu messàgge sus 'a <strong>pàgene de le 'ngazzaminde {{GENDER:$3|toje}}</strong>.", + "notification-header-edit-user-talk-with-section": "$1 {{GENDER:$2|ave lassate}} 'nu messàgge sus 'a <strong>pàgene de le 'ngazzaminde {{GENDER:$3|toje}}</strong> jndr'à \"<strong>$4</strong>\".", "notification-compact-header-edit-user-talk": "$1 {{GENDER:$2|T'ha}} {{GENDER:$3|lassate}} 'nu messàgge.", + "notification-compact-header-edit-user-talk-with-section": "$1 {{GENDER:$3|te}} {{GENDER:$2|ave lassate}} 'nu messàgge jndr'à \"<strong>$4</strong>\".", + "notification-header-page-linked": "Ha state ccrejate 'nu collegamende da <strong>$4</strong> a <strong>$3</strong>.", "notification-compact-header-page-linked": "Collegate da <strong>$1</strong>.", + "notification-bundle-header-page-linked": "Onne state ccrejate collegaminde da {{PLURAL:$5||$5 pàggene|100=cchiù de 99 pàggene}} a <strong>$3</strong>.", + "notification-header-article-reminder": "'Na pàgene {{GENDER:$2|ca tu}} è cercate da essere arrecurdate sus a <strong>$3</strong>", "notification-link-text-what-links-here": "Tutte le collegaminde a sta pàgene", + "notification-header-mention-other": "$1 {{GENDER:$3|te}} {{GENDER:$2|ave menzionate}} sus a <strong>$4</strong> jndr'à \"<strong>$5</strong>\".", + "notification-header-mention-other-nosection": "$1 {{GENDER:$3|te}} {{GENDER:$2|ave menzionate}} sus a <strong>$4</strong>.", + "notification-header-mention-user-talkpage-v2": "$1 {{GENDER:$3|te}} {{GENDER:$2|ave menzionate}} sus a <strong>pàgene de le 'ngazzaminde {{GENDER:$5|de}} $4</strong> jndr'à \"<strong>$6</strong>\".", + "notification-header-mention-user-talkpage-nosection": "$1 {{GENDER:$3|te}} {{GENDER:$2|ave menzionate}} sus a <strong>pàgene de le 'ngazzaminde {{GENDER:$5|de}} $4</strong>.", + "notification-header-mention-agent-talkpage": "$1 {{GENDER:$3|te}} {{GENDER:$2|ave menzionate}} sus a <strong>pàgene de le 'ngazzaminde {{GENDER:$2|soje|soje|lore}}</strong> jndr'à \"<strong>$4</strong>\".", + "notification-header-mention-agent-talkpage-nosection": "$1 {{GENDER:$3|te}} {{GENDER:$2|ave menzionate}} sus a <strong>pàgene de le 'ngazzaminde {{GENDER:$2|soje|soje|lore}}</strong>.", + "notification-header-mention-article-talkpage": "$1 {{GENDER:$3|te}} {{GENDER:$2|ave menzionate}} sus a pàgene de le 'ngazzaminde de <strong>$4</strong> jndr'à \"<strong>$5</strong>\".", + "notification-header-mention-article-talkpage-nosection": "$1 {{GENDER:$3|te}} {{GENDER:$2|ave menzionate}} sus a pàgene de le 'ngazzaminde de <strong>$4</strong>.", + "notification-header-mention-failure-user-unknown": "'A menziona {{GENDER:$2|toje}} de <strong>$3</strong> non g'ha state mannate purcé l'utende non g'ha state acchiate.", + "notification-header-mention-failure-user-anonymous": "'A menziona {{GENDER:$2|toje}} de <strong>$3</strong> non g'ha state mannate purcé l'utende jè anonime.", + "notification-header-mention-failure-too-many": "{{GENDER:$2|E' menzionate}} cchiù de $3 {{PLURAL:$3|utende|utinde}}. Tutte le menziune ca onne supranate stu limite non g'onne state mannate.", + "notification-header-mention-failure-bundle": "{{PLURAL:$3|'Na menzione|$3 menziune}} {{GENDER:$2|ca è fatte}} sus 'a <strong>$4</strong> pàgene de le 'ngazzaminde {{PLURAL:$3|non ge pò|non ge ponne}} essere mannate.", "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-header-mention-success": "'A menziona {{GENDER:$2|toje}} de <strong>$3</strong> ha state mannate.", + "notification-header-mention-success-bundle": "{{PLURAL:$3|'Na menzione|$3 menziune}} {{GENDER:$2|ca è fatte}} sus 'a <strong>$4</strong> pàgene de le 'ngazzaminde {{PLURAL:$3|ha|onne}} state mannate.", + "notification-compact-header-mention-success": "<strong>{{GENDER:$2|E' menzionate}}:</strong> $3", + "notification-header-mention-status-bundle": "{{PLURAL:$3|'Na |$3 }} notifeche sus a le menziune ca {{GENDER:$2|è fatte}} jndr'à pàgene de le 'ngazzaminde <strong>$4</strong>: $5 non {{PLURAL:$5|g'ha|g'onne}} state mannate, $6 {{PLURAL:$6|ha|onne}} state mannate.", + "notification-header-user-rights-add-only": "Le deritte utende {{GENDER:$4|tune}} onne state {{GENDER:$1|cangiate}}. E' state aggiunde a: $2.", + "notification-header-user-rights-remove-only": "Le deritte utende {{GENDER:$4|tune}} onne state {{GENDER:$1|cangiate}}. Non ge sì cchiù membre de: $2.", + "notification-header-user-rights-add-and-remove": "Le deritte utende {{GENDER:$6|tune}} onne state {{GENDER:$1|cangiate}}. E' state aggiunde a: $2. Non ge sì cchiù membre de: $4.", + "notification-header-user-rights-expiry-change": "'A scadenze de l'appartenenza {{GENDER:$4|toje}} {{PLURAL:$3|a stu|a ste}} gruppe ha state {{GENDER:$1|cangiate}}: $2.", + "notification-header-welcome": "{{GENDER:$2|Bovègne}} sus a {{SITENAME}}, $1! Sime cundende ca {{GENDER:$2|tu}} ste aqquà.", + "notification-header-mention-summary": "$1 {{GENDER:$3|te}} {{GENDER:$2|ave menzionate}} jndr'à 'nu riepiloghe de cangiamende sus a <strong>$4</strong>.", "notification-welcome-linktext": "Bovègne", + "notification-header-thank-you-1-edit": "E' fatte mo mo 'u prima cangiamende tune; grazie e {{GENDER:$2|bovègne}}!", + "notification-header-thank-you-10-edit": "E' fatte mo mo 'u decime cangiamende {{GENDER:$2|tune}}; {{GENDER:$2|te}} rengraziame, e condinue accussì!", + "notification-header-thank-you-100-edit": "E' fatte mo mo 'u cendesime cangiamende {{GENDER:$2|tune}}; {{GENDER:$2|te}} rengraziame assaije probbie!", + "notification-header-thank-you-1000-edit": "E' fatte mo mo 'u millesime cangiamende {{GENDER:$2|tune}}; {{GENDER:$2|te}} rengraziame, ste addevinde 'nu condrebbutore 'mbortande probbie!", + "notification-header-thank-you-10000-edit": "E' fatte mo mo 'u decimillesime cangiamende {{GENDER:$2|tune}}; {{GENDER:$2|te}} rengraziame assai avveramende!", + "notification-header-thank-you-100000-edit": "E' fatte mo mo 'u cindemillesime cangiamende {{GENDER:$2|tune}}; {{GENDER:$2|te}} pu condrebbute 'mbortande ca ne dèje!", + "notification-header-thank-you-1000000-edit": "E' fatte mo mo 'u miglionesime cangiamende {{GENDER:$2|tune}}; {{GENDER:$2|te}} pu condrebbute 'mbressionande ca ne dèje!", + "notification-link-thank-you-edit": "'U {{GENDER:$1|cangiamende}} tune", "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-edit-talk-page-email-subject2": "$1 {{GENDER:$3|t'ha}} {{GENDER:$2|lassate}} 'nu messàgge sus a {{SITENAME}}", + "notification-page-linked-email-subject": "'Na pàgene ca {{GENDER:$3|tu}} è ccrejate ha state collagate sus a {{SITENAME}}", + "notification-reverted-email-subject2": "{{PLURAL:$4|'U cangiamende tune ha state|Le cangiaminde tune onne}} state {{GENDER:$2|annullate}} sus a {{SITENAME}}", + "notification-mention-email-subject": "$1 {{GENDER:$3|t'ave}} {{GENDER:$2|menzionate}} sus a {{SITENAME}}", + "notification-user-rights-email-subject": "Le deritte utende {{GENDER:$3|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", + "notification-timestamp-ago-hours": "{{PLURAL:$1|$1h}}", + "notification-timestamp-ago-days": "{{PLURAL:$1|$1d}}", + "notification-timestamp-ago-months": "{{PLURAL:$1|$1mo}}", + "notification-timestamp-ago-years": "{{PLURAL:$1|$1yr}}", + "notification-timestamp-today": "Osce", + "notification-timestamp-yesterday": "Ajere", + "notification-inbox-filter-read": "Lette", + "notification-inbox-filter-unread": "None lette", + "notification-inbox-filter-all": "Tutte", + "echo-specialmute-label-mute-notifications": "Silenzie le notifeche da stu utende", + "echo-email-plain-footer": "Pe condrollà ce email {{GENDER:$1|t'}}avènene mannate, condrolle le preferenze {{GENDER:$1|tune}}:", + "echo-email-html-footer-preference-link-text": "condrolle le preferenze {{GENDER:$1|tune}}", + "echo-email-html-footer-with-link": "Pe condrollà ce email {{GENDER:$2|t'}}avènene mannate, $1.", + "echo-notification-alert": "{{PLURAL:$1|Avvise ($1)|100=Avvise (99+)}}", + "echo-notification-notice": "{{PLURAL:$1|Notizie ($1)|100=Notizie (99+)}}", "echo-notification-alert-text-only": "Avvise", + "echo-notification-notice-text-only": "Nuvetà", "echo-overlay-link": "Tutte le notificaziune", "echo-overlay-title": "<b>Notifiche</b>", - "echo-overlay-title-overflow": "<b>{{PLURAL:$1|Notifiche}}</b> (face 'ndrucà $1 de $2 non lette)", "echo-mark-all-as-read": "Signe tutte cumme a lette", + "echo-mark-all-as-read-confirmation": "$1 {{PLURAL:$1|notifeche}} signate cumme lette", + "echo-mark-wiki-as-read": "Signe tutte cumme lette jndr'à uicchi scacchiate: $1", + "echo-displaysnippet-title": "Notifeca nove", "echo-date-today": "Osce", "echo-date-yesterday": "Ajere", - "echo-load-more-error": "Ha assute 'n'errore mendre analizzave le resultate.", + "notification-bundle-header-edit-user-talk-v2": "{{PLURAL:$1|'Nu messàgge nuève|$1 messàgge nuève|100=Cchiù de 99 messàgge nuève}} sus a <strong>pàgene de le 'ngazzaminde {{GENDER:$3|toje}}</strong>.", "echo-email-batch-subject-daily": "Tu è {{PLURAL:$2|'na notifica|notifiche}} nove sus a {{SITENAME}}", "echo-email-batch-subject-weekly": "Tu è {{PLURAL:$2|'na notifica|notifiche}} nove STA SUMàNE sus a {{SITENAME}}", "echo-email-batch-body-intro-daily": "Cià $1,\nAqquà ste 'u rieploghe de l'attività de osce sus a {{SITENAME}} pe te.", "echo-email-batch-body-intro-weekly": "Cià $1,\nAqquà ste 'u rieploghe de l'attività d'a sumàne sus a {{SITENAME}} pe te.", - "echo-email-batch-link-text-view-all-notifications": "'Ndruche tutte le notifiche" + "echo-email-batch-link-text-view-all-notifications": "'Ndruche tutte le notifiche", + "notification-header-foreign-alert": "Otre avvise da {{PLURAL:$5|'n'otra uicchi|otre $5 uicchi}}", + "notification-header-foreign-notice": "Otre notizie da {{PLURAL:$5|'n'otra uicchi|otre $5 uicchi}}", + "notification-header-foreign-all": "Otre notifeche da {{PLURAL:$5|'n'otra uicchi|otre $5 uicchi}}" } diff --git a/Echo/i18n/ru.json b/Echo/i18n/ru.json index e5074b4c..2f56709c 100644 --- a/Echo/i18n/ru.json +++ b/Echo/i18n/ru.json @@ -1,61 +1,68 @@ { "@metadata": { "authors": [ + "1233qwer1234qwer4", "AVRS", + "Alex Great", + "Alexandr Efremov", "Amire80", "Base", "DCamer", "David1010", + "DevilishSkull", + "Doff", + "Facenapalm", + "Gamliel Fishkin", + "Happy13241", + "INS Pirat", "Iluvatar", + "Iniquity", + "Jack who built the house", "KPu3uC B Poccuu", "Kaganer", "Kalan", + "Kareyac", + "Macofe", + "Mailman", + "Marina Melik-Adamyan", + "MaxBioHazard", + "Mouse21", + "Movses", "Okras", + "Ole Yves", "Orsa", + "Putnik", + "Sealle", "ShinePhantom", + "Smigles", "Soul Train", + "Stjn", "Sunpriat", - "Чаховіч Уладзіслаў", - "Doff", - "Marina Melik-Adamyan", - "INS Pirat", - "Macofe", - "Iniquity", - "MaxBioHazard", - "Sealle", + "Trizek (WMF)", "Исмаил Садуев", - "Putnik", - "Ole Yves", "Лилиә", - "Alexandr Efremov", - "Jack who built the house", - "Mailman", - "Умар", - "Trizek (WMF)", - "Gamliel Fishkin", - "Alex Great", - "Facenapalm", "ЛосЯш", - "DevilishSkull", - "Smigles", - "Mouse21", - "Happy13241", - "Movses", - "Stjn" + "Умар", + "Чаховіч Уладзіслаў" ] }, "echo-desc": "Система уведомления участников о событиях и сообщениях", "prefs-echo": "Уведомления", "prefs-emailsettings": "Настройки эл. почты", - "prefs-displaynotifications": "Настройки отображения", "prefs-echosubscriptions": "Сообщать мне об этих событиях", "prefs-echocrosswiki": "Уведомления из нескольких вики-проектов («кросс-вики»)", - "prefs-blocknotificationslist": "Отключенные участники", + "prefs-blocknotificationslist": "Игнорируемые участники", + "prefs-mutedpageslist": "Игнорируемые страницы для уведомлений о ссылке на страницу", + "prefs-echopollupdates": "Уведомления в реальном времени", + "echo-mobile-notifications-filter-title": "Фильтр уведомлений", + "echo-pref-show-poll-updates": "Показывать новые уведомления как только они приходят", + "echo-pref-show-poll-updates-help": "Показывать число непрочитанных уведомлений на верхней панели и показывать всплывающее сообщение для каждого уведомления немедленно как только оно приходит.", "echo-pref-send-me": "Присылать мне:", "echo-pref-send-to": "Отправлять на адрес:", "echo-pref-email-format": "Формат писем:", "echo-pref-web": "Веб", "echo-pref-email": "Эл. почта", + "echo-pref-push": "Push (только в приложениях)", "echo-pref-email-frequency-never": "Не присылать мне уведомления по эл. почте", "echo-pref-email-frequency-immediately": "Отдельные уведомления по мере их поступления", "echo-pref-email-frequency-daily": "Ежедневная сводка уведомлений", @@ -64,8 +71,8 @@ "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-pref-notifications-page-linked-title-muted-list": "Не показывать уведомления \"Ссылка на странице\" для этих страниц. ([[mw:Special:MyLanguage/Help:Notifications#mute|узнать больше]])", + "echo-pref-dont-email-read-notifications": "Не включать чтение уведомлений в сводки по эл. почте", "echo-learn-more": "Узнать больше", "echo-log": "Общедоступный журнал", "echo-new-messages": "У вас есть новые сообщения", @@ -77,9 +84,14 @@ "echo-category-title-mention-success": "{{PLURAL:$1|Успешное упоминание|Успешные упоминания}}", "echo-category-title-other": "{{PLURAL:$1|1=Прочее|Прочие}}", "echo-category-title-system": "{{PLURAL:$1|1=Системное|Системные}}", + "echo-category-title-system-noemail": "{{PLURAL:$1|1=Системное|Системные}}", + "echo-category-title-system-emailonly": "{{PLURAL:$1|Система}}", "echo-category-title-user-rights": "{{PLURAL:$1|Изменение|Изменения}} прав участника", "echo-category-title-emailuser": "Электронная почта от {{PLURAL:$1|другого участника|других участников}}", "echo-category-title-article-reminder": "Страница {{PLURAL:$1|напоминание|напоминания}}", + "echo-category-title-thank-you-edit": "{{PLURAL:$1|Достигнутая правка|достигнутые правки}}", + "echo-category-title-watchlist": "Правка в наблюдаемой странице", + "echo-category-title-minor-watchlist": "Малая правка в наблюдаемой странице", "echo-pref-tooltip-edit-user-talk": "Сообщать мне, когда кто-то посылает сообщение или отвечает на моей странице обсуждения.", "echo-pref-tooltip-article-linked": "Сообщать мне, когда на созданную мной страницу кто-то ссылается с другой страницы.", "echo-pref-tooltip-reverted": "Сообщать мне, когда кто-то отменил мою правку, используя функцию отмены или отката.", @@ -89,7 +101,9 @@ "echo-pref-tooltip-user-rights": "Сообщать мне, когда кто-то изменяет мои права участника.", "echo-pref-tooltip-emailuser": "Сообщать мне, когда кто-то присылает мне письмо по электронной почте.", "echo-pref-tooltip-article-reminder": "Сообщите мне об этой странице, когда я попрошу.", - "echo-error-no-formatter": "Форматирование не определено для уведомления", + "echo-pref-tooltip-thank-you-edit": "Уведомлять меня когда я достигаю моих 1-й, 10-й, 100-й... правок.", + "echo-pref-tooltip-watchlist": "Уведомлять меня когда кто-либо совершает (не малую) правку на странице из моего списка наблюдения.", + "echo-pref-tooltip-minor-watchlist": "Уведомлять меня когда кто-либо совершает малую правку на странице из моего списка наблюдения.", "notifications": "Уведомления", "tooltip-pt-notifications-alert": "{{GENDER:|Ваши}} оповещения", "tooltip-pt-notifications-notice": "{{GENDER:|Ваши}} уведомления", @@ -100,7 +114,6 @@ "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": "Новые участники", @@ -110,15 +123,13 @@ "echo-specialpage-section-markread": "Пометить группу как прочитанную", "echo-specialpage-markasread": "Уведомление: пометить как прочитанное", "echo-specialpage-markasread-invalid-id": "Неверный идентификатор события", + "echo-specialpage-pagefilterwidget-aria-label": "Фильтр по вики и названию страницы", + "echo-specialpage-special-help-menu-widget-aria-label": "Дополнительные опции и настройки уведомлений.", "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-quotation-marks": "«$1»", "echo-api-failure": "Не удалось получить уведомления.", "echo-api-failure-cross-wiki": "В доступе к удаленному домену было отказано.", "echo-notification-placeholder": "Уведомлений нет.", @@ -129,6 +140,12 @@ "echo-notification-markasunread": "Пометить как непрочитанное", "echo-notification-markasread-tooltip": "Отметить как прочитанное", "echo-notification-more-options-tooltip": "Больше возможностей", + "notification-dynamic-actions-mute-page-linked": "{{GENDER:$2|Игнорировать}} уведомления о ссылке на \"$1\"", + "notification-dynamic-actions-mute-page-linked-confirmation": "Уведомления \"ссылка на странице\" теперь отключены для страницы \"$1\"", + "notification-dynamic-actions-mute-page-linked-confirmation-description": "{{GENDER:$2|Вы}} можете управлять вашими игнорируемыми страницами в [$1 ваших настройках] в любое время.", + "notification-dynamic-actions-unmute-page-linked": "{{GENDER:$2|Убрать из игнорируемых}} уведомления о ссылке на \"$1\"", + "notification-dynamic-actions-unmute-page-linked-confirmation": "Уведомления \"ссылка на странице\" теперь включены для страницы \"$1\"", + "notification-dynamic-actions-unmute-page-linked-confirmation-description": "{{GENDER:$2|Вы}} можете управлять вашими игнорируемыми страницами в [$1 ваших настройках] в любое время.", "notification-dynamic-actions-unwatch": "{{GENDER:$3|Прекратить}} отслеживание новых изменений страницы «$1»", "notification-dynamic-actions-unwatch-confirmation": "{{GENDER:$3|Вы}} больше не следите за изменениями страницы «$1»", "notification-dynamic-actions-unwatch-confirmation-description": "{{GENDER:$3|Вы}} можете возобновить отслеживание [$2 этой страницы] в любой момент.", @@ -148,7 +165,7 @@ "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-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", @@ -163,7 +180,7 @@ "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|вас}} на странице обсуждения «$4».", - "notification-header-mention-failure-user-unknown": "{{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|Упоминание|$3 упоминания|$3 упоминаний}} {{PLURAL:$3|сделанное|сделанные|сделанных}} {{GENDER:$2|вами}} на странице обсуждений <strong>$4</strong> не {{PLURAL:$3|может|могут}} быть отправлены.", @@ -179,6 +196,16 @@ "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-header-watchlist-changed": "$1 {{GENDER:$2|изменил|изменила}} <strong>$3</strong>, страницу из {{GENDER:$4|вашего}} списка наблюдени{{PLURAL:$5|й $5 раз|й $5 раза|й $5 раз|1=}}.", + "notification-header-watchlist-created": "$1 {{GENDER:$2|создал|создала}} <strong>$3</strong>, страницу из {{GENDER:$4|вашего}} списка наблюдени{{PLURAL:$5|й $5 раз|й $5 раза|й $5 раз|1=}}.", + "notification-header-watchlist-deleted": "$1 {{GENDER:$2|удалил|удалила}} <strong>$3</strong>, страницу из {{GENDER:$4|вашего}} списка наблюдени{{PLURAL:$5|й $5 раз|й $5 раза|й $5 раз|1=}}.", + "notification-header-watchlist-moved": "$1 {{GENDER:$2|переименовал|переименовала}} <strong>$3</strong>, страницу из {{GENDER:$4|вашего}} списка наблюдени{{PLURAL:$5|й $5 раз|й $5 раза|й $5 раз|1=}}.", + "notification-header-watchlist-restored": "$1 {{GENDER:$2|восстановил|восстановила}} <strong>$3</strong>, страницу из {{GENDER:$4|вашего}} списка наблюдени{{PLURAL:$5|й $5 раз|й $5 раза|й $5 раз|1=}}.", + "notification-header-watchlist-multiuser-changed": "<strong>$1</strong>, страница из {{GENDER:$2|вашего}} списка наблюдения, была изменена {{PLURAL:$3|$3 раз|$3 раза|$3 раз}}.", + "notification-header-watchlist-multiuser-created": "<strong>$1</strong>, страница из {{GENDER:$2|вашего}} списка наблюдения, была создана {{PLURAL:$3|$3 раз|$3 раза|$3 раз}}.", + "notification-header-watchlist-multiuser-deleted": "<strong>$1</strong>, страница из {{GENDER:$2|вашего}} списка наблюдения, была удалена {{PLURAL:$3|$3 раз|$3 раза|$3 раз}}.", + "notification-header-watchlist-multiuser-moved": "<strong>$1</strong>, страница из {{GENDER:$2|вашего}} списка наблюдения, была переименована {{PLURAL:$3|$3 раз|$3 раза|$3 раз}}.", + "notification-header-watchlist-multiuser-restored": "<strong>$1</strong>, страница из {{GENDER:$2|вашего}} списка наблюдения, была восстановлена {{PLURAL:$3|$3 раз|$3 раза|$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|вашу}} десятую правку. Благодарим {{GENDER:$2|вас}} за это, продолжайте в том же духе!", @@ -187,17 +214,17 @@ "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-header-thank-you-10000000-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> {{GENDER:$2|{{PLURAL:$4|была отменена|были отменены}}}}.", "notification-header-emailuser": "$1 отправил{{GENDER:$2||а}} вам письмо.", - "notification-edit-talk-page-email-subject2": "{{GENDER:$1|Участник|Участница}} $1 {{GENDER:$1|оставил|оставила}} вам сообщение на сайте «{{SITENAME}}»", - "notification-edit-talk-page-email-batch-body-with-section": "{{GENDER:$1|Участник|Участница}} $1 {{GENDER:$1|оставил|оставила}} вам сообщение на вашей странице обсуждения в разделе (теме) «$2»", - "notification-page-linked-email-subject": "На сайте «{{SITENAME}}» появилась ссылка на созданную вами страницу", - "notification-reverted-email-subject2": "{{GENDER:$1|Кто-то}} отменил {{PLURAL:$3|1=вашу правку|ваши правки}} на сайте «{{SITENAME}}»", - "notification-mention-email-subject": "$1 упомянул{{GENDER:$1||а}} {{GENDER:$2|вас}} на сайте «{{SITENAME}}»", - "notification-user-rights-email-subject": "Ваши права на сайте «{{SITENAME}}» были изменены", + "notification-edit-talk-page-email-subject2": "{{GENDER:$2|Участник $1 оставил|Участница $1 оставила}} {{GENDER:$3|вам}} сообщение на сайте «{{SITENAME}}»", + "notification-page-linked-email-subject": "На сайте «{{SITENAME}}» появилась ссылка на созданную {{GENDER:$3|вами}} страницу", + "notification-reverted-email-subject2": "{{GENDER:$2|Кто-то}} отменил {{PLURAL:$4|1=вашу правку|ваши правки}} на сайте «{{SITENAME}}»", + "notification-mention-email-subject": "$1 упомянул{{GENDER:$2||а}} {{GENDER:$3|вас}} на сайте «{{SITENAME}}»", + "notification-user-rights-email-subject": "{{GENDER:$3|Ваши}} права на сайте «{{SITENAME}}» были изменены", "notification-timestamp-ago-seconds": "{{PLURAL:$1|$1 с}}", "notification-timestamp-ago-minutes": "{{PLURAL:$1|$1 мин}}", "notification-timestamp-ago-hours": "{{PLURAL:$1|$1 ч}}", @@ -209,9 +236,7 @@ "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-specialmute-label-mute-notifications": "Не показывать уведомления от {{GENDER:$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.", @@ -221,13 +246,12 @@ "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-mark-all-as-read": "Отметить все как прочитанные", "echo-mark-all-as-read-confirmation": "$1 {{PLURAL:$1|уведомление помечено как прочитанное|уведомлений помечены как прочитанные|уведомления помечены как прочитанные}}", "echo-mark-wiki-as-read": "Пометить все как прочитанные в выбранной вики: $1", + "echo-displaysnippet-title": "Новое уведомление", "echo-date-today": "Сегодня", "echo-date-yesterday": "Вчера", - "echo-load-more-error": "Произошла ошибка при получении дополнительных результатов.", "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}}»", diff --git a/Echo/i18n/sa.json b/Echo/i18n/sa.json index 75c5231e..1b45ef93 100644 --- a/Echo/i18n/sa.json +++ b/Echo/i18n/sa.json @@ -2,15 +2,14 @@ "@metadata": { "authors": [ "Amire80", - "Shubha", "NehalDaveND", + "Shubha", "రహ్మానుద్దీన్" ] }, "echo-desc": "सूचनाव्यवस्था", "prefs-echo": "सूचनाः", "prefs-emailsettings": "ईपत्र-विकल्पाः", - "prefs-displaynotifications": "प्रदर्शन-विकल्पाः", "prefs-echosubscriptions": "एतेषां घटनानां विषये मां सूचयतु", "echo-pref-send-me": "मह्यं प्रेष्यताम्:", "echo-pref-send-to": "एतस्मै प्रेष्यताम्", @@ -35,13 +34,10 @@ "echo-pref-tooltip-article-linked": "मया निर्मितेन पुटेन सह यदि अन्येन सम्पर्कतन्तुः योज्यते तर्हि मां सूचयन्तु |", "echo-pref-tooltip-reverted": "मया कृतं सम्पादनं यदि अन्यः पूर्ववत् परिवर्तयेत् तर्हि सूच्यताम् |", "echo-pref-tooltip-mention": "कस्यचित् चर्चापुटस्य सम्पर्कतन्तुः मम योजकपुटेन सह योज्यते चेत् सूच्यताम् |", - "echo-error-no-formatter": "सूचनानां प्रारूपः न रचितः |", "notifications": "सूचनाः", "tooltip-pt-notifications-alert": "{{GENDER:|भवतः/भवत्याः}} जागरूकतासन्देशाः", "echo-specialpage": "सूचनाः", "echo-none": "भवते सूचनाः न विद्यन्ते |", - "echo-more-info": "अधिकं विवरणम्", - "echo-feedback": "प्रतिस्पन्दः", "notification-link-text-view-message": "सन्देशः दृश्यताम्", "notification-link-text-view-changes": "परिवर्तनानि दृश्यन्ताम्", "notification-link-text-view-page": "पृष्ठं दृश्यताम्", diff --git a/Echo/i18n/sah.json b/Echo/i18n/sah.json index ff282b2a..0ab17a5e 100644 --- a/Echo/i18n/sah.json +++ b/Echo/i18n/sah.json @@ -1,17 +1,16 @@ { "@metadata": { "authors": [ - "Kaganer", "HalanTul", - "София", + "Kaganer", "Марианна", + "София", "Туллук" ] }, "echo-desc": "Иһитиннэриилэр уонна түбэлтэлэр тустарынан кыттааччыларга биллэрэр систиэмэ", "prefs-echo": "Биллэриилэр", "prefs-emailsettings": "Email туруоруулара", - "prefs-displaynotifications": "Туруоруулары көрдөр", "prefs-echosubscriptions": "Бу түбэлтэлэр тустарынан миэхэ биллэрэн ис", "prefs-echocrosswiki": "Кросс-вики биллэрии", "echo-pref-send-me": "Миэхэ манна ыыт:", @@ -26,7 +25,6 @@ "echo-pref-email-format-html": "HTML", "echo-pref-email-format-plain-text": "Көннөрү тиэкис", "echo-pref-cross-wiki-notifications": "Атын биики биллэриилэрин эмиэ көрдөр", - "echo-pref-beta-feature-cross-wiki-message": "Тупсарыллыбыт биллэриилэр", "echo-learn-more": "Эбии билии", "echo-log": "Аһаҕас сурунаал", "echo-new-messages": "Эйиэхэ саҥа сурук кэлбит", @@ -51,8 +49,6 @@ "echo-specialpage-markasread": "Биллэрии: Ааҕыллыбыт курдук бэлиэтээ", "notificationsmarkread-legend": "Биллэриини ааҕыллыбыт курдук бэлиэтээ", "echo-none": "Эн биллэриини тута иликкин.", - "echo-more-info": "Сиһилии", - "echo-feedback": "Ситимнэһии", "echo-api-failure": "Биллэриилэри тутар табыллыбата.", "echo-notification-placeholder": "Биллэрии суох.", "echo-notification-loginrequired": "Биллэриилэри көрөргө бастаан киир.", @@ -81,7 +77,7 @@ "notification-link-text-view-edit": "Көннөрүүнү көр", "notification-header-reverted": "<strong>$3</strong> сирэйгэ оҥорбут {{PLURAL:$4|1=Эн көннөрүүҥ|Эн көннөрүүлэриҥ}} {{GENDER:$2|{{PLURAL:$4|ууратылынна|ууратылыннылар}}}}", "notification-header-emailuser": "$1 {{GENDER:$2|sent}} эйиэхэ сурук ыытта.", - "notification-reverted-email-subject2": "{{GENDER:$1|Ким эрэ}} {{PLURAL:$3|1=эн көннөрүүгүн|эн көннөрүүлэргин}} «{{SITENAME}}» ситим-сиргэ көтүрбүт", + "notification-reverted-email-subject2": "{{GENDER:$2|Ким эрэ}} {{PLURAL:$4|1=эн көннөрүүгүн|эн көннөрүүлэргин}} «{{SITENAME}}» ситим-сиргэ көтүрбүт", "notification-user-rights-email-subject": "{{SITENAME}} сайтка эhиги быраапкыт уларыйда", "notification-timestamp-ago-seconds": "{{PLURAL:$1|Систиэмнэй}}", "notification-timestamp-ago-minutes": "{{PLURAL:$1|$1 мүн}}", diff --git a/Echo/i18n/sat.json b/Echo/i18n/sat.json index 2616b879..56cb7ce1 100644 --- a/Echo/i18n/sat.json +++ b/Echo/i18n/sat.json @@ -2,9 +2,9 @@ "@metadata": { "authors": [ "Albinus", + "Fagunkoyel Hansdah", "Manik Soren", - "Ramjit Tudu", - "Fagunkoyel Hansdah" + "Ramjit Tudu" ] }, "echo-pref-web": "ᱣᱮᱵᱽ", diff --git a/Echo/i18n/scn.json b/Echo/i18n/scn.json index 37d41c16..6afd882b 100644 --- a/Echo/i18n/scn.json +++ b/Echo/i18n/scn.json @@ -9,7 +9,6 @@ "echo-desc": "Sistema di nutifica", "prefs-echo": "Nutìfichi", "prefs-emailsettings": "Upzioni email", - "prefs-displaynotifications": "Upzioni di visualizzazzioni", "prefs-echosubscriptions": "Mànnami na nutìfica supra sti abbinimenti", "echo-pref-send-me": "Mànnami:", "echo-pref-send-to": "Manna a:", @@ -34,35 +33,26 @@ "echo-pref-tooltip-article-linked": "Abbìsami quannu quarcunu cullèga, di na vuci, na pàggina ca criai.", "echo-pref-tooltip-reverted": "Abbìsami quannu quarcunu annulla nu canciamentu ca fici, usannu li funzioni annulla o rollback.", "echo-pref-tooltip-mention": "Avvìsami quannu quarchidunu crea un culligamentu â mè pàggina d'utenti.", - "echo-error-no-formatter": "Nudda furnattazzioni difinuta pê nutìfichi", "notifications": "Nutìfichi", "tooltip-pt-notifications-alert": "Li {{GENDER:|tò}} avvisi", "echo-specialpage": "Nutìfichi", - "echo-anon": "Pi arriciviri li nutìfichi, [$1 arriggistrati] o [$2 trasi].", "echo-none": "Nun arricivistru nutìfichi", - "echo-more-info": "Àutri nfurmazzioni", - "echo-feedback": "Cummenti", "notification-link-text-view-message": "Talìa lu missaggiu", "notification-link-text-view-mention": "Talìa la minzioni", "notification-link-text-view-changes": "Talìa li canciamenti", "notification-link-text-view-page": "Talìa la pàggina", "notification-link-text-view-edit": "Talìa lu canciamentu", "notification-header-reverted": "{{PLURAL:$4|Lu tò canciamentu|Li tò canciamenti}} supra $3 {{PLURAL:$4|fu annullatu|foru annullati}} {{GENDER:$2|di}} $1", - "notification-edit-talk-page-email-subject2": "$1 ti {{GENDER:$1|lassau}} nu missaggiu n {{SITENAME}}", - "notification-edit-talk-page-email-batch-body-with-section": "$1 {{GENDER:$1|lassau}} nu missaggiu supra la tò pàggina di discussioni n $2.", + "notification-edit-talk-page-email-subject2": "$1 ti {{GENDER:$2|lassau}} nu missaggiu n {{SITENAME}}", "notification-page-linked-email-subject": "Na pàggina chi criasti fu liata nta {{SITENAME}}", - "notification-reverted-email-subject2": "{{PLURAL:$3|Lu tò canciamentu fu annullatu|Li tò canciamenti foru annullati}} {{GENDER:$1|supra}} {{SITENAME}}", - "notification-mention-email-subject": "$1 ti {{GENDER:$1|mintuviau}} supra {{SITENAME}}", + "notification-reverted-email-subject2": "{{PLURAL:$4|Lu tò canciamentu fu annullatu|Li tò canciamenti foru annullati}} {{GENDER:$2|supra}} {{SITENAME}}", + "notification-mention-email-subject": "$1 ti {{GENDER:$2|mintuviau}} supra {{SITENAME}}", "notification-user-rights-email-subject": "Li tò diritti utenti foru canciati supra {{SITENAME}}", - "echo-email-body-default": "Vossìa havi na nutìfica nova supra {{SITENAME}}:\n\n$1", - "echo-email-footer-default": "$2\n\nPi cuntrullari quali email ti vènunu mannati, cuntrolla li tò prifirenzi:\n{{canonicalurl:{{#special:Preferences}}#mw-prefsection-echo}}\n\n$1", "echo-overlay-link": "Tutti li nutìfichi", "echo-overlay-title": "<b>Nutìfichi</b>", - "echo-overlay-title-overflow": "<b>{{PLURAL:$1|Nutifica|Nutìfichi}}</b> (ammusciati $1 di $2 nunu ligghiuti)", "echo-mark-all-as-read": "Sinna tutti comu ligghiuti", "echo-date-today": "Oi", "echo-date-yesterday": "Aieri", - "echo-load-more-error": "Si virificau n'erruri ntô ricùpiru d'àutri risurtati.", "echo-email-batch-subject-daily": "Vossia havi {{PLURAL:$2|na nutìfica nova|nutìfichi novi}} supra {{SITENAME}}", "echo-email-batch-subject-weekly": "Vossia havi {{PLURAL:$2|na nutìfica nova|nutìfichi novi}} supra {{SITENAME}} sta simana", "echo-email-batch-body-intro-daily": "Assabbinidica $1,\neccu na sìntisi di l'attivitati d'oi supra {{SITENAME}} pi vossìa", diff --git a/Echo/i18n/sd.json b/Echo/i18n/sd.json index 2c8a726a..9ab1148e 100644 --- a/Echo/i18n/sd.json +++ b/Echo/i18n/sd.json @@ -2,6 +2,7 @@ "@metadata": { "authors": [ "Aursani", + "Kaleem Bhatti", "Mehtab ahmed", "Tweety" ] @@ -9,16 +10,15 @@ "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-email-format": "برقٽپال حليو:", "echo-pref-web": "ويب", - "echo-pref-email": "برق ٽپال", - "echo-pref-email-frequency-never": "مونکي اطلاع برق ٽپال تي نه موڪليو", + "echo-pref-email": "برقٽپال", + "echo-pref-email-frequency-never": "مونکي اطلاع برقٽپال تي نہ موڪليو", "echo-pref-email-frequency-immediately": "جيئن ئي اچن، الڳ الڳ موڪليو", "echo-pref-email-frequency-daily": "هر روز اطلاعن جو تت موڪليو", "echo-pref-email-frequency-weekly": "هر هفتي اطلاعن جو تت موڪليو", @@ -26,27 +26,28 @@ "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-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-system-noemail": "{{PLURAL:$1|سرشتو}}", + "echo-category-title-system-emailonly": "{{PLURAL:$1|سرشتو}}", "echo-category-title-user-rights": "{{PLURAL:$1|واپرائيندڙ حق ۾ تبديليون|واپرائيندڙ حقن ۾ تبديلون}}", - "echo-category-title-emailuser": "{{PLURAL:$1|ٻي واپرائيندڙ وٽان برق ٽپال|ٻين واپرائيندڙ طرفان برق ٽپالون}}", + "echo-category-title-emailuser": "{{PLURAL:$1|ٻي واپرائيندڙ وٽان برقٽپال|ٻين واپرائيندڙ طرفان برقٽپالون}}", "echo-category-title-article-reminder": "صفحو {{PLURAL:$1|يادگير|ياگيريون}}", - "echo-pref-tooltip-edit-user-talk": "مونکي اطلاع ڏيو، جڏهن ڪير منهنجي بحث صفحي تي پيغام ڇڏي يا جواب ڏي.", + "echo-category-title-thank-you-edit": "{{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-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:|توهانجون}} خبرون", @@ -62,12 +63,9 @@ "echo-specialpage-pagefilters-title": "تازي سرگرمي", "notificationsmarkread-legend": "اطلاع کي پڙھيل طور نشان لڳايو", "echo-none": "اوهان لاءِ ڪي به اطلاع ناهن.", - "echo-more-info": "وڌيڪ ڄاڻ", - "echo-feedback": "پذيرائي", - "echo-quotation-marks": "\"$1\"", - "echo-notification-placeholder": "ڪي به اطلاع ناهن.", + "echo-notification-placeholder": "ڪي بہ اطلاع ناھن.", "echo-notification-loginrequired": "اطلاع ڏسڻ لاءِ داخل ٿيو.", - "echo-notification-popup-loginrequired": "پنهنجي اطلاعن کي ڏسڻ لاءِ داخل ٿيو.", + "echo-notification-popup-loginrequired": "پنھنجي اطلاعن کي ڏسڻ لاءِ داخل ٿيو.", "echo-notification-markasread": "پڙھيل طور نشان لڳايو", "echo-notification-markasunread": "نه-پڙھيل طور نشان لڳايو", "echo-notification-markasread-tooltip": "پڙھيل طور نشان لڳايو", @@ -88,12 +86,12 @@ "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-header-thank-you-10000-edit": "{{GENDER:$2|توھان}} {{GENDER:$2|پنهنجون}} ڏھ هزار تبديليون مڪمل ڪري ڇڏيون آھن. هن تعاون جي تمام گهڻي مهرباني!", + "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-header-emailuser": "$1 توھان ڏانھن ھڪ برقٽپال {{GENDER:$2|موڪلي}}.", "notification-timestamp-today": "اڄ", "notification-timestamp-yesterday": "ڪلھ", "notification-inbox-filter-read": "پڙھيل", diff --git a/Echo/i18n/sdc.json b/Echo/i18n/sdc.json new file mode 100644 index 00000000..503f18aa --- /dev/null +++ b/Echo/i18n/sdc.json @@ -0,0 +1,8 @@ +{ + "@metadata": { + "authors": [ + "Jun Misugi" + ] + }, + "tooltip-pt-notifications-alert": "{{GENDER:|Li tó}} avvisi" +} diff --git a/Echo/i18n/sdh.json b/Echo/i18n/sdh.json index 575dea8c..106f6083 100644 --- a/Echo/i18n/sdh.json +++ b/Echo/i18n/sdh.json @@ -1,9 +1,11 @@ { "@metadata": { "authors": [ - "Kurdbuddha" + "Kurdbuddha", + "Paraw2" ] }, "echo-pref-web": "وێب", - "echo-pref-email": "ئیمەیل" + "echo-pref-email": "ئیمەیل", + "tooltip-pt-notifications-alert": "{{GENDER:|ھوشدارەگانت}}" } diff --git a/Echo/i18n/ses.json b/Echo/i18n/ses.json new file mode 100644 index 00000000..b9b04535 --- /dev/null +++ b/Echo/i18n/ses.json @@ -0,0 +1,8 @@ +{ + "@metadata": { + "authors": [ + "Songhay" + ] + }, + "tooltip-pt-notifications-alert": "{{GENDER:|War}} yaamarey" +} diff --git a/Echo/i18n/sh.json b/Echo/i18n/sh.json index 482b8908..d62d6e91 100644 --- a/Echo/i18n/sh.json +++ b/Echo/i18n/sh.json @@ -2,14 +2,19 @@ "@metadata": { "authors": [ "Kolega2357", - "OC Ripper" + "OC Ripper", + "Vlad5250" ] }, - "echo-desc": "Obavještajni sistem", + "echo-desc": "Sistem za obavještavanje korisnika u vezi sa dešavanjima i porukama", "prefs-echo": "Obavještenja", "prefs-emailsettings": "Email opcije", - "prefs-displaynotifications": "Opcije prikaza", "prefs-echosubscriptions": "Obavijesti me o tim događajima", + "prefs-echocrosswiki": "Obavještenja s drugih wikija", + "prefs-blocknotificationslist": "Ignorisani korisnici", + "prefs-echopollupdates": "Obavještenja uživo", + "echo-pref-show-poll-updates": "Prikazuje nova obavještenja čim stignu", + "echo-pref-show-poll-updates-help": "Prikaži broj nepročitanih obavijesti u naslovnoj traci, kao i izvadak svake obavijesti čim stigne.", "echo-pref-send-me": "Pošalji mi:", "echo-pref-send-to": "Pošalji:", "echo-pref-email-format": "Format e-pošte:", @@ -21,50 +26,158 @@ "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-cross-wiki-notifications": "Prikazivaj obavještenja s drugih wikija", + "echo-pref-notifications-blacklist": "Ne prikazuj obavještenja ovih korisnika. ([[mw:Special:MyLanguage/Help:Notifications#mute|saznajte više]])", "echo-learn-more": "Saznajte više", + "echo-log": "Javna evidencija", "echo-new-messages": "Imate nove poruke.", "echo-category-title-edit-user-talk": "{{PLURAL:$1|Poruke}} na stranici za razgovor", "echo-category-title-article-linked": "{{PLURAL:$1|Linkovi na stranicu}}", "echo-category-title-reverted": "{{PLURAL:$1|Vraćanje izmjena}}", "echo-category-title-mention": "{{PLURAL:$1|Spominjanje|Spominjanja}}", + "echo-category-title-mention-failure": "{{PLURAL:$1|Neuspješno spominjanje|Neuspješna spominjanja}}", + "echo-category-title-mention-success": "{{PLURAL:$1|Uspješno spominjanje|Uspješna spominjanja}}", "echo-category-title-other": "{{PLURAL:$1|Ostalo}}", "echo-category-title-system": "{{PLURAL:$1|Sistem}}", - "echo-pref-tooltip-edit-user-talk": "Obavijesti me kada neko ostavi poruku ili odgovor na mojoj stranici za razgovor.", - "echo-pref-tooltip-article-linked": "Obavijesti me kada neko linkuje na stranicu koju sam napravio od stranice članaka.", - "echo-pref-tooltip-reverted": "Obavijesti me kada neko vrati uređivanje koje sam napravio/la, korištenjem naredbe undo ili alatom za vraćanje.", - "echo-pref-tooltip-mention": "Obavijesti me kada me neko spomene na nekoj stranici za razgovor.", - "echo-error-no-formatter": "Nema formatiranja određenog za obavještavanje.", + "echo-category-title-system-noemail": "{{PLURAL:$1|Sistem}}", + "echo-category-title-user-rights": "{{PLURAL:$1|Promjena u korisničkim pravima|Promjene u korisničkim pravima}}", + "echo-category-title-emailuser": "{{PLURAL:$1|E-pošta od drugog korisnika|E-pošta od drugih korisnika}}", + "echo-category-title-article-reminder": "{{PLURAL:$1|Podsjetnik o stranici|Podsjetnici o stranicama}}", + "echo-category-title-thank-you-edit": "{{PLURAL:$1|Miljokaz|Miljokazi}} uređivanja", + "echo-pref-tooltip-edit-user-talk": "Obavijesti me kada neko ostavi poruku ili odgovor na mojoj razgovornoj stranici.", + "echo-pref-tooltip-article-linked": "Obavijesti me kad netko pozove na stranicu što sam stvorio s druge stranice.", + "echo-pref-tooltip-reverted": "Obavijesti me kada netko otkazati uređivanje što sam napravio/la pomoću alata za opoziv ili vraćanje.", + "echo-pref-tooltip-mention": "Obavijesti me kad netko pozove na moju korisničku stranicu.", + "echo-pref-tooltip-mention-failure": "Obavijesti me kad netko nije dobio obavještenje nakon što ih spomenem.", + "echo-pref-tooltip-mention-success": "Obavijesti me kad ikom pošaljem spominjanje.", + "echo-pref-tooltip-user-rights": "Obavijesti me kad netko smijeni moja korisnička prava.", + "echo-pref-tooltip-emailuser": "Obavijesti me kada mi netko pošalje e-poštu.", + "echo-pref-tooltip-article-reminder": "Obavijesti me o ovoj stranici kad to zatražim.", + "echo-pref-tooltip-thank-you-edit": "Obavijesti me kad ostvarim moje 1., 10., 100... uređivanje.", "notifications": "Obavještenja", "tooltip-pt-notifications-alert": "{{GENDER:|Vaša}} obavještenja", + "tooltip-pt-notifications-notice": "{{GENDER:|Vaša}} obavještenja", + "echo-displaynotificationsconfiguration": "Prikazuj postavke za obavještenja", + "echo-displaynotificationsconfiguration-summary": "Ovo je pregled postavki za obavještenja na ovom wikiju.", + "echo-displaynotificationsconfiguration-notifications-by-category-header": "Obavještenja po kategoriji", + "echo-displaynotificationsconfiguration-sorting-by-section-header": "Sortiranje po vrstama", + "echo-displaynotificationsconfiguration-sorting-by-section-legend": "U koji će se odlomak svaka vrsta obavještenja sortirati", + "echo-displaynotificationsconfiguration-available-notification-methods-header": "Dopuštene metode obavještavanja", + "echo-displaynotificationsconfiguration-available-notification-methods-by-category-legend": "Koje su metode obavještavanja dozvoljene za svaku kategoriju", + "echo-displaynotificationsconfiguration-enabled-default-header": "Omogućeno po podrazumijevanim postavkama", + "echo-displaynotificationsconfiguration-enabled-default-existing-users-legend": "Postojeći korisnici", + "echo-displaynotificationsconfiguration-enabled-default-new-users-legend": "Novi korisnici", + "echo-displaynotificationsconfiguration-mandatory-notification-methods-header": "Obavezne metode obavještavanja", + "echo-displaynotificationsconfiguration-mandatory-notification-methods-by-category-legend": "Koje su metode obavještavanja obavezne za svaku kategoriju", "echo-specialpage": "Obavještenja", - "echo-anon": "Da biste primili obaveštenja, morate se [[Special:UserLogin|prijaviti]] ili [[Special:Userlogin/signup|napraviti račun]].", + "echo-specialpage-section-markread": "Označi grupu kao pročitanu", + "echo-specialpage-markasread": "Obavještenje: Označivanje kao pročitano", + "echo-specialpage-markasread-invalid-id": "Neispravna naznaka događaja", + "echo-specialpage-pagination-numnotifications": "$1 {{PLURAL:$1|obavještenje|obavještenja}}", + "echo-specialpage-pagefilters-title": "Skorašnja aktivnost", + "echo-specialpage-pagefilters-subtitle": "Stranice s nepročitanim obavještenjima", + "notificationsmarkread-legend": "Označi obavještenje kao pročitano", "echo-none": "Nemate obavještenja", - "echo-more-info": "Više informacija", - "echo-feedback": "Povratna informacija", + "echo-api-failure": "Dobavljanje obavještenja nije uspjelo.", + "echo-api-failure-cross-wiki": "Pristup vanjskoj domeni je odbijen.", + "echo-notification-placeholder": "Nema obavještenja.", + "echo-notification-placeholder-filters": "Nema obavještenja što odgovaraju zadanom.", + "echo-notification-loginrequired": "Morate biti prijavljeni da biste vidjeli obavještenja.", + "echo-notification-popup-loginrequired": "Prijavite se da biste pogledali svoja obavještenja.", + "echo-notification-markasread": "Označi kao pročitano", + "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}} s praćenjem novih aktivnosti na \"$1\"", + "notification-dynamic-actions-unwatch-confirmation": "Više {{GENDER:$3|ne pratite}} stranicu \"$1\"", + "notification-dynamic-actions-unwatch-confirmation-description": "{{GENDER:$3|Možete}} pratiti [$2 ovu stranicu] u bilo kom trenutku.", + "notification-dynamic-actions-watch": "{{GENDER:$3|Prati}} nove aktivnosti na \"$1\"", + "notification-dynamic-actions-watch-confirmation": "Sad {{GENDER:$3|pratite}} stranicu \"$1\"", + "notification-dynamic-actions-watch-confirmation-description": "{{GENDER:$3|Možete}} prestati s praćenjem [$2 ove stranice] u bilo kom trenutku.", + "notification-link-text-expand-all": "Prikaži", + "notification-link-text-expand-alert-count": "{{PLURAL:$1|$1 napomena|$1 napomene|$1 napomena}}", + "notification-link-text-expand-notice-count": "Pogl. {{PLURAL:$1|$1 napomena|$1 napomene|$1 napomena}}", + "notification-link-text-expand-all-count": "Pogl. $1 {{PLURAL:$1|obavještenje|obavještenja}}", + "notification-link-text-collapse-all": "Sakrij", "notification-link-text-view-message": "Pogledaj poruku", "notification-link-text-view-mention": "Pogledajte spominjanje", - "notification-link-text-view-changes": "Pogledaj izmjene", + "notification-link-text-view-mention-failure": "Pogl. {{PLURAL:$1|spominjanje|spominjanja}}", + "notification-link-text-view-changes": "{{GENDER:$1|Pogl.}} promjene", "notification-link-text-view-page": "Pogledaj stranicu", + "notification-header-edit-user-talk": "$1 je {{GENDER:$2|ostavio|ostavila}} poruku na <strong>{{GENDER:$3|vašoj}} razgovornoj stranici.</strong>.", + "notification-header-edit-user-talk-with-section": "$1 je {{GENDER:$2|ostavio|ostavila}} poruku na <strong>{{GENDER:$3|vašoj}} razgovornoj stranici</strong> na <strong>\"$4\".</strong>", + "notification-compact-header-edit-user-talk": "$1 {{GENDER:$3|vam}} je {{GENDER:$2|ostavio|ostavila}} poruku.", + "notification-compact-header-edit-user-talk-with-section": "$1 {{GENDER:$3|vam}} je {{GENDER:$2|ostavio|ostavila}} poruku u \"<strong>$4</strong>\".", + "notification-header-page-linked": "Napravljena je veza od <strong>$4</strong> do <strong>$3</strong>.", + "notification-compact-header-page-linked": "Povezano sa stranice <strong>$1</strong>.", + "notification-bundle-header-page-linked": "Napravljene su veze sa {{PLURAL:$5||$5 stranica|100=preko 99 stranica}} do <strong>$3</strong>.", + "notification-header-article-reminder": "Na <strong>$3</strong> postoji stranica za koju {{GENDER:$2|ste}} tražili podsjetnik", + "notification-link-text-what-links-here": "Svi linkovi ka ovoj stranici", + "notification-header-mention-other": "$1 {{GENDER:$3|vas}} je {{GENDER:$2|spomenuo|spomenula}} 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|korisnika|korisnice}} $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|korisnika|korisnice}} $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 \"<strong>$4</strong>\".", + "notification-header-mention-agent-talkpage-nosection": "$1 {{GENDER:$3|Vas}} je {{GENDER:$2|spomenuo|spomenula}} na <strong>{{GENDER:$2|svojoj}} stranci za razgovor</strong>.", + "notification-header-mention-article-talkpage": "$1 {{GENDER:$3|Vas}} je {{GENDER:$2|spomenuo|spomenula}} u razgovoru za <strong>$4</strong> u \"<strong>$5</strong>\".", + "notification-header-mention-article-talkpage-nosection": "$1 {{GENDER:$3|Vas}} je {{GENDER:$2|spomenuo|spomenula}} u razgovoru za <strong>$4</strong>.", + "notification-header-mention-failure-user-unknown": "{{GENDER:$2|Vaše}} spominjanje suradnika <strong>$3</strong> \nnije poslano jer nisam mogao naći korisnika.", + "notification-header-mention-failure-user-anonymous": "{{GENDER:$2|Vaše}} spominjanje suradnika <strong>$3</strong> \nnije poslano jer je korisnik anoniman.", + "notification-header-mention-failure-too-many": "Pokušali {{GENDER:$2|ste}} spomenuti više od $3 {{PLURAL:$3|korisnika}}. Sva spominjanja što prekoračuju ovu granicu nisu poslana.", + "notification-header-mention-failure-bundle": "Ni{{PLURAL:$3|je poslato spominjanje|su poslata $3 spominjanja}} {{GENDER:$2|što {{PLURAL:$2|ste napravili}}|što ste napravili}} na razgovornoj stranici <strong>$4</strong>.", + "notification-compact-header-mention-failure-user-unknown": "<strong>Korisničko ime ne postoji:</strong> $1", + "notification-compact-header-mention-failure-user-anonymous": "<strong>Ne možete spominjati IP-adrese:</strong> $1", + "notification-header-mention-success": "{{GENDER:$2|Vaše}} spominjanje {{GENDER:$3|korisnika|korisnice|korisnika}} <strong>$3</strong> je poslato.", + "notification-header-mention-success-bundle": "{{PLURAL:$3|Poslato je|Poslata su}} {{PLURAL:$3|spominjanje što {{PLURAL:$2|ste napravili}}|$3 spominjanje što ste napravili}} na razgovornoj stranici <strong>$4</strong>.", + "notification-compact-header-mention-success": "<strong>{{GENDER:$2|Spomenuli ste}}:</strong> $3", + "notification-header-user-rights-add-only": "{{GENDER:$4|Vaša}} korisnička prava su {{GENDER:$1|izmijenjena}}. Sad ste član sljedećih grupa: $2.", + "notification-header-user-rights-remove-only": "{{GENDER:$4|Vaša}} korisnička prava su {{GENDER:$1|izmijenjena}}. Više niste član sljedećih grupa $2.", + "notification-header-mention-summary": "$1 {{GENDER:$3|Vas}} je {{GENDER:$2|spomenuo|spomenula}} u sažetku uređivanja na <strong>$4</strong>.", + "notification-welcome-linktext": "Dobro došli", + "notification-link-thank-you-edit": "{{GENDER:$1|Vaša}} izmjena", "notification-link-text-view-edit": "Pogledaj uređivanje", - "notification-header-reverted": "{{PLURAL:$4|Vaša izmjena na $3 je poništena|Vaše izmjene na $3 su vraćene}} {{GENDER:$2|od}} strane $1.", - "notification-edit-talk-page-email-subject2": "$1 vam je {{GENDER:$1|ostavio|ostavila}} poruku na {{SITENAME}}", - "notification-edit-talk-page-email-batch-body-with-section": "$1 vam je {{GENDER:$1|ostavio|ostavila}} poruku na vašoj stranici za razgovor u \"$2\".", - "notification-page-linked-email-subject": "Vaša stranica je povezana na {{SITENAME}}", - "notification-reverted-email-subject2": "{{PLURAL:$3|Vaša izmjena je {{GENDER:$1|poništena}}|Vaše izmjene su {{GENDER:$1|poništene}}}} na {{SITENAME}}", - "notification-mention-email-subject": "$1 vas je {{GENDER:$1|spomenuо|spomenula}} na {{SITENAME}}", - "notification-user-rights-email-subject": "Vaša korisnička prava su se promijenila na {{SITENAME}}", - "echo-email-body-default": "Imate novo obavještenje na {{SITENAME}}: \n\n$1", - "echo-email-footer-default": "$2\n\nDa kontrolišete koje vam email poruke šaljemo, provjerite svoje postavke:\n{{canonicalurl:{{#special:Preferences}}#mw-prefsection-echo}}\n\n$1", + "notification-link-article-reminder": "Pogl. stranicu", + "notification-header-reverted": "{{PLURAL:$4|Vaša izmjena na <strong>$3</strong> je {{GENDER:$2|poništena}}|Vaše izmjene na <strong>$3</strong> su {{GENDER:$2|poništene}}}}", + "notification-header-emailuser": "$1 {{GENDER:$2|Vam je poslao|Vam je poslala}} e-poruku.", + "notification-edit-talk-page-email-subject2": "$1 {{GENDER:$3|Vam}} je {{GENDER:$2|ostavio|ostavila}} poruku na {{SITENAME}}", + "notification-page-linked-email-subject": "{{GENDER:$3|Vaša}} stranica je bila navedena na {{SITENAME}}", + "notification-reverted-email-subject2": "{{GENDER:$2|Na}} {{SITENAME}} {{PLURAL:$4|je poništena Vaša izmjena|su poništene Vaše izmjene}}", + "notification-mention-email-subject": "$1 {{GENDER:$3|Vas}} je {{GENDER:$2|spomenuо|spomenula}} na {{SITENAME}}", + "notification-user-rights-email-subject": "{{GENDER:$3|Vaša}} korisnička prava na {{SITENAME}} su promijenjena", + "notification-timestamp-ago-seconds": "{{PLURAL:$1|$1 sek.}}", + "notification-timestamp-ago-minutes": "{{PLURAL:$1|$1 min.}}", + "notification-timestamp-ago-hours": "{{PLURAL:$1|$1 sat|$1 sata|$1 sati}}", + "notification-timestamp-ago-days": "{{PLURAL:$1|$1 dan|$1 dana}}", + "notification-timestamp-ago-months": "{{PLURAL:$1|$1 mj.}}", + "notification-timestamp-ago-years": "{{PLURAL:$1|$1 god.}}", + "notification-timestamp-today": "Danas", + "notification-timestamp-yesterday": "Jučer", + "notification-inbox-filter-read": "Pročitane", + "notification-inbox-filter-unread": "Nepročitane", + "notification-inbox-filter-all": "Sve", + "echo-specialmute-label-mute-notifications": "Isključi obavještenja od ovog korisnika", + "echo-email-plain-footer": "Da biste odabrali koje {{GENDER:$1|Vam}} e-poruke šaljemo, provjerite {{GENDER:$1|sebi}} postavke:", + "echo-email-html-footer-preference-link-text": "provjerite {{GENDER:$1|svoje}} postavke", + "echo-email-html-footer-with-link": "Da biste odabrali koje {{GENDER:$2|Vam}} e-poruke šaljemo, $1.", + "echo-notification-alert": "{{PLURAL:$1|Napomena ($1)|Napomene ($1)|100=Napomene (99+)}}", + "echo-notification-notice": "{{PLURAL:$1|Napomena ($1)|Napomene ($1)|100=Napomene (99+)}}", + "echo-notification-alert-text-only": "Napomene", + "echo-notification-notice-text-only": "Napomene", "echo-overlay-link": "Sva obavještenja", "echo-overlay-title": "<b>Obavještenja</b>", - "echo-overlay-title-overflow": "<b>Obavještenja</b> (prikaz $1 od $2 nepročitanih)\n<b>Obavještenja</b> (prikaz $1 od $2 nepročitanih)", "echo-mark-all-as-read": "Označi sve kao pročitano", + "echo-mark-all-as-read-confirmation": "{{PLURAL:$1|Označeno $1 obavještenje kao pročitano|Označena $1 obavještenja kao pročitana}}", + "echo-mark-wiki-as-read": "Označi sve kao pročitano na izabranom wikiju: $1", + "echo-displaysnippet-title": "Novo obavještenje", "echo-date-today": "Danas", "echo-date-yesterday": "Juče", - "echo-load-more-error": "Greška se pojavila za vrijeme dobavljanja više rezultata.", + "notification-bundle-header-edit-user-talk-v2": "{{PLURAL:$1|Jedna nova poruka|$1 nove poruke|$1 novih poruka|100=preko 99 novih poruka}} na <strong>{{GENDER:$3|vašoj}} razgovornoj stranici</strong>.", "echo-email-batch-subject-daily": "Imate {{PLURAL:$2|novo obavještenje|nova obavještenja}} na {{SITENAME}}", "echo-email-batch-subject-weekly": "Imate {{PLURAL:$2|novo obavještenje|nova obavještenja}} na {{SITENAME}} ove nedelje", "echo-email-batch-body-intro-daily": "Zdravo $1,\nOvo je sažetak današnjih aktivnosti na {{SITENAME}} za Vas.", "echo-email-batch-body-intro-weekly": "Zdravo $1,\nOvo je sažetak nedeljnih aktivnosti na {{SITENAME}} za Vas.", - "echo-email-batch-link-text-view-all-notifications": "Vidi sve notifikacije" + "echo-email-batch-link-text-view-all-notifications": "Vidi sve notifikacije", + "notification-header-foreign-alert": "Više obavještenja {{PLURAL:$5|s druge wiki|sa $5 druga wikija|sa $5 drugih wikija}}", + "notification-header-foreign-notice": "Još obavještenja {{PLURAL:$5|s drugog wikija|sa $5 druga wikija|sa $5 drugih wikija}}", + "notification-header-foreign-all": "Još obavještenja {{PLURAL:$5|s druge wiki|sa $5 druga wikija|sa $5 drugih wikija}}" } diff --git a/Echo/i18n/shn.json b/Echo/i18n/shn.json index e48e00fd..50eb96ca 100644 --- a/Echo/i18n/shn.json +++ b/Echo/i18n/shn.json @@ -1,8 +1,8 @@ { "@metadata": { "authors": [ - "Saosukham", - "Saimawnkham" + "Saimawnkham", + "Saosukham" ] }, "echo-pref-tooltip-user-rights": "သင်ၸိူဝ်ႉဝႃႈ သေၵေႃႉၵေႃႉ မႄးသုၼ်ႇလႆႈၽူႈၸႂ်ႉတိုဝ်းၵဝ်ၶႃႈၼႆ ပၼ်ၶေႃႈၽၢင်ႉသေၵမ်း။", diff --git a/Echo/i18n/shy-latn.json b/Echo/i18n/shy-latn.json new file mode 100644 index 00000000..4181851c --- /dev/null +++ b/Echo/i18n/shy-latn.json @@ -0,0 +1,8 @@ +{ + "@metadata": { + "authors": [ + "Vikoula5" + ] + }, + "tooltip-pt-notifications-alert": "Ilɣa-ik {{GENDER:|Your}}" +} diff --git a/Echo/i18n/si.json b/Echo/i18n/si.json index cdf268ab..1daf6615 100644 --- a/Echo/i18n/si.json +++ b/Echo/i18n/si.json @@ -1,35 +1,29 @@ { "@metadata": { "authors": [ - "පසිඳු කාවින්ද", "Susith Chandira Gts", "SusithCM", + "පසිඳු කාවින්ද", "හරිත", 1100100 ] }, "echo-desc": "නිවේදන පද්ධතිය", "prefs-echo": "නිවේදන", - "prefs-displaynotifications": "විකල්ප පෙන්වන්න", "echo-pref-email-frequency-never": "මට විද්යුත්-තැපැල් නිවේදන කිසිවක් එවන්න එපා", "echo-pref-email-frequency-immediately": "තනි තනි නිවේදන ඒවා එන විට", "echo-pref-email-frequency-daily": "නිවේදනවල දෛනික සාරාංශයක්", "echo-pref-email-frequency-weekly": "නිවේදනවල සතිපතා සාරාංශයක්", - "echo-error-no-formatter": "නිවේදනය සඳහා කිසිදු ආකෘතියක් දක්වා නොමැත", "notifications": "නිවේදන", "tooltip-pt-notifications-alert": "{{GENDER:|ඔබේ}} දැනුම්දීම්", "echo-specialpage": "නිවේදන", - "echo-anon": "නිවේදන ලබා ගැනීම සඳහා, [$1 ගිණුමක් තනන්න] හෝ [$2 ප්රවිෂ්ට වන්න].", "echo-none": "ඔබට නිවේදන කිසිවක් නොමැත.", - "notification-edit-talk-page-email-subject2": "$1 විසින් ඔබ හට {{SITENAME}} හි පණිවුඩයක් {{GENDER:$1|තබා ඇත}}.", - "notification-mention-email-subject": "$1 විසින් ඔබව {{SITENAME}} හි {{GENDER:$1|සඳහන් කර}} ඇත.", - "echo-email-body-default": "ඔබට {{SITENAME}} හීදී නව නිවේදනයක් ඇත:\n\n$1", + "notification-edit-talk-page-email-subject2": "$1 විසින් ඔබ හට {{SITENAME}} හි පණිවුඩයක් {{GENDER:$2|තබා ඇත}}.", + "notification-mention-email-subject": "$1 විසින් ඔබව {{SITENAME}} හි {{GENDER:$2|සඳහන් කර}} ඇත.", "echo-overlay-link": "සියලුම නිවේදන", "echo-overlay-title": "<b>නිවේදන</b>", - "echo-overlay-title-overflow": "මගේ නිවේදන (නොකියවූ ඒවා $1 න් $2 පෙන්වමින්)", "echo-date-today": "අද", "echo-date-yesterday": "පෙරදින", - "echo-load-more-error": "තවත් ප්රතිඑල පමුනුවිමේදී දෝෂයක් හට ගැනුණි.", "echo-email-batch-subject-daily": "ඔබට අද {{PLURAL:$2|නිවේදන}} $1 ඇත", "echo-email-batch-subject-weekly": "ඔබට මෙම සතියේ {{PLURAL:$2|නිවේදන}} $1 ඇත" } diff --git a/Echo/i18n/sk.json b/Echo/i18n/sk.json index 7dba669a..b1a74a4d 100644 --- a/Echo/i18n/sk.json +++ b/Echo/i18n/sk.json @@ -1,21 +1,27 @@ { "@metadata": { "authors": [ + "Luky001", + "Macofe", + "Martin Urbanec", "Sudo77(new)", "Teslaton", - "Macofe", + "TomášPolonec", "Urbanecm", - "Martin Urbanec", - "TomášPolonec" + "Vlad5250" ] }, - "echo-desc": "Notifikačný systém", + "echo-desc": "Systém na upozorňovanie používateľov na udalosti a správy", "prefs-echo": "Upozornenia", "prefs-emailsettings": "Možnosti e-mailu", - "prefs-displaynotifications": "Možnosti zobrazenia", "prefs-echosubscriptions": "Upozornite ma na tieto udalosti", "prefs-echocrosswiki": "Upozornenia medzi projektami", "prefs-blocknotificationslist": "Stlmení používatelia", + "prefs-mutedpageslist": "Stlmené stránky", + "prefs-echopollupdates": "Živé upozornenia", + "echo-mobile-notifications-filter-title": "Filtrovať notifikácie", + "echo-pref-show-poll-updates": "Zobraziť nové upozornenia hneď, ako prídu", + "echo-pref-show-poll-updates-help": "Zobraziť množstvo neprečítaných upozornení v záhlaví a zobraziť útržok každého upozornenia hneď, ako príde", "echo-pref-send-me": "Posielajte mi:", "echo-pref-send-to": "Posielať na:", "echo-pref-email-format": "Formát e-mailu:", @@ -29,8 +35,7 @@ "echo-pref-email-format-plain-text": "Obyčajný text", "echo-pref-cross-wiki-notifications": "Zobrazovať upozornenia z iných wiki", "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-pref-notifications-page-linked-title-muted-list": "Nezobrazovať notifikácie ohľadom odkazov na tieto stránky. ([[mw:Special:MyLanguage/Help:Notifications#mute|podrobnosti]])", "echo-learn-more": "Ďalšie informácie", "echo-log": "Verejný záznam", "echo-new-messages": "Máte nové správy", @@ -42,33 +47,52 @@ "echo-category-title-mention-success": "{{PLURAL:$1|úspešnú zmienku|úspešné zmienky}}", "echo-category-title-other": "{{PLURAL:$1|inú udalosť|iné udalosti}}", "echo-category-title-system": "{{PLURAL:$1|systémovú udalosť|systémové udalosti}}", + "echo-category-title-system-noemail": "{{PLURAL:$1|systémovú udalosť|systémové udalosti}}", + "echo-category-title-system-emailonly": "{{PLURAL:$1|systémovú udalosť|systémové udalosti}}", "echo-category-title-user-rights": "{{PLURAL:$1|zmenu|zmeny}} používateľských práv", "echo-category-title-emailuser": "{{PLURAL:$1|e-mail od iného používateľa|e-maily od ostatných používateľov}}", + "echo-category-title-article-reminder": "{{PLURAL:$1|pripomenutie|pripomenutia}} k stránke", + "echo-category-title-thank-you-edit": "editačný {{PLURAL:$1|míľnik|míľniky}}", "echo-pref-tooltip-edit-user-talk": "Upozornite ma, keď mi niekto na mojej diskusnej stránke napíše správu alebo odpovie.", - "echo-pref-tooltip-article-linked": "Upozornite ma, keď niekto na stránku, ktorú som založil, odkáže z článku.", - "echo-pref-tooltip-reverted": "Upozornite ma, keď niekto vráti úpravu, ktorú som urobil, pomocou nástrojov vrátiť alebo rollback.", - "echo-pref-tooltip-mention": "Upozornite ma, keď v akejkoľvek diskusii niekto odkáže na moju redaktorskú stránku.", + "echo-pref-tooltip-article-linked": "Upozornite ma, keď niekto na stránku, ktorú som {{GENDER:|založil|založila}}, odkáže z inej stránky.", + "echo-pref-tooltip-reverted": "Upozornite ma, keď niekto vráti úpravu, ktorú som {{GENDER:|urobil|urobila}}, pomocou nástrojov vrátiť alebo rollback.", + "echo-pref-tooltip-mention": "Upozornite ma, keď niekto odkáže na moju redaktorskú stránku.", "echo-pref-tooltip-mention-failure": "Upozornite ma, keď sa nepodarí odoslať moju zmienku niekomu.", "echo-pref-tooltip-mention-success": "Upozornite ma, keď niekomu odošlem zmienku.", "echo-pref-tooltip-user-rights": "Upozornite ma, keď niekto zmení moje používateľské práva.", "echo-pref-tooltip-emailuser": "Upozornite ma, keď mi niekto pošle e-mail.", - "echo-error-no-formatter": "Upozornenie nemá definované formátovanie", + "echo-pref-tooltip-article-reminder": "Upozornite ma na túto stránku, keď o to požiadam.", + "echo-pref-tooltip-thank-you-edit": "Upozornite ma, keď dosiahnem svoju prvú, desiatu, stú,... úpravu.", "notifications": "Upozornenia", "tooltip-pt-notifications-alert": "{{GENDER:|Vaše}} upozornenia", "tooltip-pt-notifications-notice": "{{GENDER:|Vaše}} oznámenia", + "echo-displaynotificationsconfiguration": "Zobrazenie konfigurácie Oznámení", + "echo-displaynotificationsconfiguration-summary": "Toto je prehľad konfigurácie Oznámení na tejto wiki.", + "echo-displaynotificationsconfiguration-notifications-by-category-header": "Oznámenia podľa kategórie", + "echo-displaynotificationsconfiguration-sorting-by-section-header": "Triedenie typov", + "echo-displaynotificationsconfiguration-sorting-by-section-legend": "Do ktorej sekcie sa každý typ notifikácie zaradí", + "echo-displaynotificationsconfiguration-available-notification-methods-header": "Povolené metódy upozornenia", + "echo-displaynotificationsconfiguration-available-notification-methods-by-category-legend": "Ktoré metódy upozornenia sú podporované pre každú kategóriu", + "echo-displaynotificationsconfiguration-enabled-default-header": "Predvolene zapnuté", + "echo-displaynotificationsconfiguration-enabled-default-existing-users-legend": "Existujúci používatelia", + "echo-displaynotificationsconfiguration-enabled-default-new-users-legend": "Noví používatelia", + "echo-displaynotificationsconfiguration-mandatory-notification-methods-header": "Vyžadované metódy upozornenia", + "echo-displaynotificationsconfiguration-mandatory-notification-methods-by-category-legend": "Ktoré metódy upozornenia sú povinné pre každú kategóriu", "echo-specialpage": "Upozornenia", "echo-specialpage-section-markread": "Označiť skupinu ako prečítanú", "echo-specialpage-markasread": "Oznámenie: Označiť ako prečítané", + "echo-specialpage-markasread-invalid-id": "Chybné ID udalosti", "echo-specialpage-pagination-numnotifications": "$1 {{PLURAL:$1|upozornenie|upozornenia|upozornení}}", "echo-specialpage-pagefilters-title": "Nedávna aktivita", "echo-specialpage-pagefilters-subtitle": "Stránky s neprečítanými upozorneniami", "notificationsmarkread-legend": "Označiť oznámenie ako prečítané", - "echo-anon": "Ak chcete dostávať upozornenia, musíte si [$1 vytvoriť účet] alebo [$2 sa prihlásiť].", "echo-none": "Nemáte žiadne upozornenia.", - "echo-more-info": "Viac informácií", - "echo-feedback": "Spätná väzba", - "echo-api-failure": "Nepodarilo sa načítať upozornenia. Skúste to prosím znovu. (Chyba $1)", + "echo-api-failure": "Nepodarilo sa načítať upozornenia.", + "echo-api-failure-cross-wiki": "Prístup k vzdialenej doméne bol zamietnutý.", "echo-notification-placeholder": "Nemáte žiadne upozornenia.", + "echo-notification-placeholder-filters": "Nemáte žiadne upozornenia zodpovedajúce týmto kritériám.", + "echo-notification-loginrequired": "Na zobrazenie svojich upozornení sa musíte prihlásiť.", + "echo-notification-popup-loginrequired": "Na prehliadanie svojich oznámení sa, prosím, prihláste.", "echo-notification-markasread": "Označiť ako prečítané", "echo-notification-markasunread": "Označiť ako neprečítané", "echo-notification-markasread-tooltip": "Označiť ako prečítané", @@ -83,46 +107,57 @@ "notification-link-text-view-mention-failure": "{{PLURAL:$1|Zobraziť zmienku|Zobraziť zmienky}}", "notification-link-text-view-changes": "{{GENDER:$1|Zobraziť}} zmeny", "notification-link-text-view-page": "Zobraziť stránku", - "notification-header-edit-user-talk": "$1 {{GENDER:$3|vám}} {{GENDER:$2|napísal|napísala}} na vašu diskusnú stránku.", - "notification-header-edit-user-talk-with-section": "$1 {{GENDER:$3|vám}} {{GENDER:$2|napísal|napísala}} na vašu diskusnú stránku v sekcii „$4“.", + "notification-header-edit-user-talk": "$1 {{GENDER:$3|vám}} {{GENDER:$2|napísal|napísala}} na <strong>vašu diskusnú stránku</strong>.", + "notification-header-edit-user-talk-with-section": "$1 {{GENDER:$3|vám}} {{GENDER:$2|napísal|napísala}} na <strong>vašu diskusnú stránku</strong> v sekcii „<strong>$4</strong>“.", + "notification-compact-header-edit-user-talk": "$1 {{GENDER:$3|vám}} {{GENDER:$2|napísal|napísala|napísal(a)}} správu.", + "notification-compact-header-edit-user-talk-with-section": "$1 {{GENDER:$3|vám}} {{GENDER:$2|napísal|napísala|napísal(a)}} správu k „<strong>$4</strong>“.", "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-bundle-header-page-linked": "{{PLURAL:$5||Z $5 stránok|100=Z viac ako 99 stránok}} boli vytvorené odkazy na stránku <strong>$3</strong>.", + "notification-header-article-reminder": "Stránka, na ktorú ste si {{GENDER:$2|žiadali 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>.", - "notification-header-mention-user-talkpage-v2": "$1 {{GENDER:$3|vás}} {{GENDER:$2|spomenul|spomenula}} v diskusii {{GENDER:$5|používateľa|používateľky}} '''$4''' v sekcii „$6“.", - "notification-header-mention-user-talkpage-nosection": "$1 {{GENDER:$3|vás}} {{GENDER:$2|spomenul|spomenula}} v diskusii {{GENDER:$5|používateľa|používateľky}} '''$4'''.", - "notification-header-mention-agent-talkpage": "$1 {{GENDER:$3|vás}} {{GENDER:$2|spomenul|spomenula}} na svojej diskusnej stránke v sekcii „$4“.", - "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-other": "$1 {{GENDER:$3|vás}} {{GENDER:$2|spomenul|spomenula}} v <strong>$4</strong> v sekcii „<strong>$5</strong>“.", + "notification-header-mention-other-nosection": "$1 {{GENDER:$3|vás}} {{GENDER:$2|spomenul|spomenula}} v <strong>$4</strong>.", + "notification-header-mention-user-talkpage-v2": "$1 {{GENDER:$3|vás}} {{GENDER:$2|spomenul|spomenula}} v <strong>diskusii {{GENDER:$5|používateľa|používateľky}} $4</strong> v sekcii „<strong>$6</strong>“.", + "notification-header-mention-user-talkpage-nosection": "$1 {{GENDER:$3|vás}} {{GENDER:$2|spomenul|spomenula}} v <strong>diskusii {{GENDER:$5|používateľa|používateľky}} $4</strong>.", + "notification-header-mention-agent-talkpage": "$1 {{GENDER:$3|vás}} {{GENDER:$2|spomenul|spomenula}} na <strong>svojej diskusnej stránke</strong> v sekcii „<strong>$4</strong>“.", + "notification-header-mention-agent-talkpage-nosection": "$1 {{GENDER:$3|vás}} {{GENDER:$2|spomenul|spomenula}} na <strong>svojej diskusnej stránke</strong>.", + "notification-header-mention-article-talkpage": "$1 {{GENDER:$3|vás}} {{GENDER:$2|spomenul|spomenula}} v diskusii k článku <strong>$4</strong> v sekcii „<strong>$5</strong>“.", "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-failure-too-many": "{{GENDER:$2|Pokúsili}} ste sa spomenúť viac ako {{PLURAL:$3|jedného používateľa|$3 používateľov}}. Všetky zmienky nad tento limit neboli odoslané.", + "notification-header-mention-failure-bundle": "{{PLURAL:$3|Vašu zmienku|$3 vaše zmienky|$3 vašich zmienok}} na diskusnej stránke <strong>$4</strong> {{GENDER:$2|nebolo}} možné odoslať.", + "notification-compact-header-mention-failure-user-unknown": "<strong>Používateľské meno neexistuje:</strong> $1", + "notification-compact-header-mention-failure-user-anonymous": "<strong>IP adresy sa nedajú spomenúť:</strong> $1", "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-mention-success-bundle": "{{PLURAL:$3|{{GENDER:$2|Vaša}} zmienka|$3 vaše zmienky|$3 vašich zmienok}} na diskusnej stránke <strong>$4</strong> {{PLURAL:$3|bola odoslaná|boli odoslané|bolo odoslaných}}.", + "notification-compact-header-mention-success": "<strong>{{GENDER:$2|Spomenul|Spomenula|Spomenul(a)}} ste:</strong> $3", + "notification-header-mention-status-bundle": "{{PLURAL:$3|Upozornenie|$3 upozornenia}} na {{GENDER:$2|vami}} zaslané zmienky na diskusnej stránke <strong>$4</strong>: {{PLURAL:$5|jedna neodoslaná|$5 neodoslané|$5 neodoslaných}}, {{PLURAL:$6|jedna odoslaná|$6 odoslané|$6 odoslaných}}.", + "notification-header-user-rights-add-only": "{{GENDER:$4|Vaše}} používateľské práva boli {{GENDER:$1|zmenené}}. Teraz patríte do: $2.", + "notification-header-user-rights-remove-only": "{{GENDER:$4|Vaše}} používateľské práva boli {{GENDER:$1|zmenené}}: Už nie ste {{GENDER:$4|členom|členkou}}: $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}}: $2. UŽ nie ste {{GENDER:$6|členom|členkou}}: $4.", + "notification-header-user-rights-expiry-change": "Čas vypršania {{GENDER:$4|vášho}} členstva v {{PLURAL:$3|nasledujúcej skupine|nasledujúcich skupinách}} bol {{GENDER:$1|zmenený}}: $2.", "notification-header-welcome": "Vitajte na {{GRAMMAR:6sg|{{SITENAME}}}}, {{GENDER:$2|$1}}! Teší nás, že ste tu.", + "notification-header-mention-summary": "$1 {{GENDER:$3|vás}} {{GENDER:$2|spomenul|spomenula}} v zhrnutí úpravy stránky <strong>$4</strong>.", "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 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-10-edit": "Práve ste {{GENDER:$2|vykonali}} svoju desiatu úpravu. Vďaka a len tak ďalej!", + "notification-header-thank-you-100-edit": "Práve ste {{GENDER:$2|vykonali}} svoju stú úpravu. Veľká vďaka!", "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!", + "notification-header-thank-you-10000-edit": "Práve ste {{GENDER:$2|vykonali}} svoju desaťtisícu úpravu. Obrovská vďaka!", + "notification-header-thank-you-100000-edit": "Práve ste {{GENDER:$2|vykonali}} svoju stotisícu úpravu. Vďaka za váš vynikajúci príspevok!", + "notification-header-thank-you-1000000-edit": "Práve ste {{GENDER:$2|vykonali}} svoju milióntu úpravu. Vďaka za váš ohromujúci príspevok!", "notification-link-thank-you-edit": "{{GENDER:$1|Vaša}} úprava", "notification-link-text-view-edit": "Zobraziť úpravu", - "notification-header-reverted": "$1 {{GENDER:$2|vrátil|vrátila}} {{PLURAL:$4|vašu úpravu|vaše úpravy}} stránky $3", + "notification-link-article-reminder": "Zobraziť stránku", + "notification-header-reverted": "{{PLURAL:$4|Vaša úprava stránky <strong>$3</strong> bola vrátená.|Vaše úpravy stránky <strong>$3</strong> boli vrátené}}{{GENDER:$2|.}}", "notification-header-emailuser": "$1 vám {{GENDER:$2|poslal|poslala}} e-mail.", - "notification-edit-talk-page-email-subject2": "$1 vám na {{grammar:6sg|{{SITENAME}}}} {{GENDER:$1|napísal|napísla}} správu.", - "notification-edit-talk-page-email-batch-body-with-section": "$1 vám {{GENDER:$1|napísal|napísala}} na vašu diskusnú stránku k sekcii „$2“.", - "notification-page-linked-email-subject": "Na {{grammar:6sg|{{SITENAME}}}} niekto odkázal na vašu stránku.", - "notification-reverted-email-subject2": "$1 {{GENDER:$1|revertoval|revertovala}} {{PLURAL:$3|vašu úpravu|vaše úpravy}} na {{grammar:6sg|{{SITENAME}}}}", - "notification-mention-email-subject": "$1 vás {{GENDER:$1|spomenul|spomenula}} na {{grammar:6sg|{{SITENAME}}}}", - "notification-user-rights-email-subject": "Na {{grammar:6sg|{{SITENAME}}}} boli zmenené vaše redaktorské práva", + "notification-edit-talk-page-email-subject2": "$1 {{GENDER:$3|vám}} {{GENDER:$2|napísal|napísala|napísal(a)}} správu na {{GRAMMAR:6sg|{{SITENAME}}}}", + "notification-page-linked-email-subject": "Na {{grammar:6sg|{{SITENAME}}}} niekto odkázal na {{GENDER:$3|vami}} založenú stránku", + "notification-reverted-email-subject2": "$1 {{GENDER:$2|revertoval|revertovala}} {{PLURAL:$4|vašu úpravu|vaše úpravy}} na {{grammar:6sg|{{SITENAME}}}}", + "notification-mention-email-subject": "$1 {{GENDER:$3|vás}} {{GENDER:$2|spomenul|spomenula}} na {{grammar:6sg|{{SITENAME}}}}", + "notification-user-rights-email-subject": "Na {{grammar:6sg|{{SITENAME}}}} boli zmenené {{GENDER:$3|vaše}} redaktorské práva", "notification-timestamp-ago-seconds": "{{PLURAL:$1|$1 s}}", "notification-timestamp-ago-minutes": "{{PLURAL:$1|$1 min}}", "notification-timestamp-ago-hours": "{{PLURAL:$1|$1 h}}", @@ -134,25 +169,29 @@ "notification-inbox-filter-read": "Prečítané", "notification-inbox-filter-unread": "Neprečítané", "notification-inbox-filter-all": "Všetky", - "echo-email-body-default": "Na {{grammar:6sg|{{SITENAME}}}} máte nové upozornenie:\n\n$1", - "echo-email-footer-default": "$2\n\nPosielanie e-mailov si môžete prispôsobiť v nastaveniach:\n{{canonicalurl:{{#special:Preferences}}#mw-prefsection-echo}}\n\n$1", + "echo-specialmute-label-mute-notifications": "Ignorovať upozornenia od tohto používateľa", + "echo-email-plain-footer": "Posielanie e-mailov si {{GENDER:$1|môžete}} prispôsobiť v nastaveniach:", + "echo-email-html-footer-preference-link-text": "{{GENDER:$1|nastavenia}}", + "echo-email-html-footer-with-link": "Posielanie e-mailov si {{GENDER:$2|môžete}} prispôsobiť v $1.", "echo-notification-alert": "{{PLURAL:$1|Upozornenie ($1)|Upozornenia ($1)|100=Upozornenia (99+)}}", "echo-notification-notice": "{{PLURAL:$1|Oznámenie ($1)|Oznámenia ($1)|100=Oznámení (99+)}}", "echo-notification-alert-text-only": "Upozornenia", "echo-notification-notice-text-only": "Oznámenia", "echo-overlay-link": "Všetky upozornenia", "echo-overlay-title": "<b>Upozornenia</b>", - "echo-overlay-title-overflow": "<b>{{PLURAL:$1|Upozornenie|Upozornenia}}</b> (zobrazuje sa $1 z $2 {{PLURAL:$1|neprečítaného|neprečítaných}})", "echo-mark-all-as-read": "Označiť všetko ako prečítané", "echo-mark-all-as-read-confirmation": "$1 {{PLURAL:$1|upozornenie označené|upozornenia označené|upozornení označených}} ako prečítané", "echo-mark-wiki-as-read": "Označiť všetko ako prečítané vo zvolenej wiki: $1", + "echo-displaysnippet-title": "Nová notifikácia", "echo-date-today": "Dnes", "echo-date-yesterday": "Včera", - "echo-load-more-error": "Pri načítaní ďalších výsledkov došlo k chybe.", - "notification-bundle-header-edit-user-talk-v2": "$1 {{PLURAL:$2|nová správa|nové správy|nových správ}} na {{GENDER:$3|vašej}} diskusnej stránke.", + "notification-bundle-header-edit-user-talk-v2": "$1 {{PLURAL:$1|nová správa|nové správy|nových správ}} na {{GENDER:$3|vašej}} diskusnej stránke.", "echo-email-batch-subject-daily": "Na {{grammar:6sg|{{SITENAME}}}} dnes máte {{PLURAL:$2|nové|nové|nových}} upozornení", "echo-email-batch-subject-weekly": "Na {{grammar:6sg|{{SITENAME}}}} máte tento týždeň {{PLURAL:$2|nové|nové|nových}} upozornení", "echo-email-batch-body-intro-daily": "Ahoj $1,\n\npripájame zhrnutie dnešnej aktivity na {{grammar:6sg|{{SITENAME}}}}.", "echo-email-batch-body-intro-weekly": "Ahoj $1,\n\npripájame zhrnutie aktivity na {{grammar:6sg|{{SITENAME}}}} za posledný týždeň.", - "echo-email-batch-link-text-view-all-notifications": "Zobraziť všetky upozornenia" + "echo-email-batch-link-text-view-all-notifications": "Zobraziť všetky upozornenia", + "notification-header-foreign-alert": "Viac upozornení z {{PLURAL:$5|ďalšej wiki|$5 ďalších wiki}}", + "notification-header-foreign-notice": "Viac oznámení z {{PLURAL:$5|ďalšej wiki|$5 ďalších wiki}}", + "notification-header-foreign-all": "Ďalšie notifikácie z {{PLURAL:$5|inej wiki|$5 iných wiki}}" } diff --git a/Echo/i18n/skr-arab.json b/Echo/i18n/skr-arab.json index 6ccf5a1f..52a5ab7b 100644 --- a/Echo/i18n/skr-arab.json +++ b/Echo/i18n/skr-arab.json @@ -6,12 +6,12 @@ }, "prefs-echo": "اطلاع نامے", "prefs-emailsettings": "ای میل دے آپشن", - "prefs-displaynotifications": "آپشن ݙکھاؤ", "echo-pref-send-me": "میکوں بھیڄو:", "echo-pref-send-to": "جیکوں بھیڄو:", "echo-pref-email-format": "ای میل فارمیٹ", "echo-pref-web": "ویب", "echo-pref-email": "ای میل", + "echo-pref-push": "ایپاں", "echo-pref-email-format-html": "ایچ ٹی ایم ایل", "echo-pref-email-format-plain-text": "سادہ متن", "echo-learn-more": "ٻیا سِکھو", @@ -25,8 +25,6 @@ "echo-displaynotificationsconfiguration-enabled-default-new-users-legend": "نویں ورتݨ آلے", "echo-specialpage": "اطلاع نامے", "echo-specialpage-pagefilters-title": "حالیہ سرگرمی", - "echo-more-info": "ٻیاں معلومات", - "echo-feedback": "تہاڈی رائے", "echo-notification-markasread": "نشان لاؤ جو پڑھ گھدے", "echo-notification-markasunread": "نشان لاؤ جو کائنی پڑھا", "echo-notification-markasread-tooltip": "نشان لاؤ جو پڑھ گھدے", @@ -55,6 +53,7 @@ "echo-overlay-link": "جملہ اطلاعاں", "echo-overlay-title": "<b>اطلاعات</b>", "echo-mark-all-as-read": "نشان لاؤ جو سارا پڑھ گھدے", + "echo-displaysnippet-title": "نویں اطلاع نامے", "echo-date-today": "اڄ", "echo-date-yesterday": "کل", "echo-email-batch-link-text-view-all-notifications": "سارے اطلاع نامے ݙیکھو" diff --git a/Echo/i18n/sl.json b/Echo/i18n/sl.json index f966c23e..c819e1aa 100644 --- a/Echo/i18n/sl.json +++ b/Echo/i18n/sl.json @@ -3,17 +3,16 @@ "authors": [ "Dbc334", "Eleassar", + "Janezdrilc", + "Macofe", "Matej1234", "Pinky sl", - "Yerpo", - "Macofe", - "Janezdrilc" + "Yerpo" ] }, "echo-desc": "Sistem za obveščanje uporabnikov o dogodkih in sporočilih", "prefs-echo": "Obvestila", "prefs-emailsettings": "Možnosti e-pošte", - "prefs-displaynotifications": "Možnosti prikaza", "prefs-echosubscriptions": "Obvesti me o naslednjih dogodkih", "prefs-echocrosswiki": "Obveščanje med wikiji", "prefs-blocknotificationslist": "Utišani uporabniki", @@ -30,8 +29,6 @@ "echo-pref-email-format-plain-text": "Neoblikovano besedilo", "echo-pref-cross-wiki-notifications": "Prikaži obvestila iz drugih wikijev", "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", "echo-log": "Dnevnik", "echo-new-messages": "Prejel si nova sporočila", @@ -43,9 +40,11 @@ "echo-category-title-mention-success": "{{PLURAL:$1|uspela omemba|uspeli omembi|uspele omembe|uspelih omemb}}", "echo-category-title-other": "{{PLURAL:$1|Drugo}}", "echo-category-title-system": "{{PLURAL:$1|Sistem}}", + "echo-category-title-system-noemail": "{{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-category-title-thank-you-edit": "Uredi {{PLURAL:$1|mejnik|mejnika|mejnike|mejnikov}}", "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.", @@ -55,7 +54,7 @@ "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.", + "echo-pref-tooltip-thank-you-edit": "Obvesti me, ko dosežem svoje 1., 10., 100. ... urejanje.", "notifications": "Obvestila", "tooltip-pt-notifications-alert": "{{GENDER:|Tvoji}} opomniki", "tooltip-pt-notifications-notice": "{{GENDER:|Tvoja}} obvestila", @@ -66,7 +65,6 @@ "echo-displaynotificationsconfiguration-sorting-by-section-legend": "v kateri del je uvrščena vrsta obvestila", "echo-displaynotificationsconfiguration-available-notification-methods-header": "Ustrezni načini obveščanja", "echo-displaynotificationsconfiguration-available-notification-methods-by-category-legend": "Kateri načini obveščanja so podprti za posamezno kategorijo", - "echo-displaynotificationsconfiguration-available-notification-methods-by-type-legend": "Kateri načini obveščanja so podprti za katero vrsto; nanaša se samo na vrste v kategorijah, ki so skrite v nastavitvah", "echo-displaynotificationsconfiguration-enabled-default-header": "Vključeno v prednastavitvah", "echo-displaynotificationsconfiguration-enabled-default-existing-users-legend": "Obstoječi uporabniki", "echo-displaynotificationsconfiguration-enabled-default-new-users-legend": "Novi uporabniki", @@ -80,10 +78,7 @@ "echo-specialpage-pagefilters-title": "Trenutna dejavnost", "echo-specialpage-pagefilters-subtitle": "Strani z neprebranimi obvestili", "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-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.", @@ -151,17 +146,16 @@ "notification-header-thank-you-10000-edit": "Pravkar si {{GENDER:$2|naredil|naredila}} {{GENDER:$2|svoje}} desettisoče urejanje. Hvala ti za {{GENDER:$2|tvojo}} veliko prostovoljsko vnemo!", "notification-header-thank-you-100000-edit": "Pravkar si {{GENDER:$2|naredil|naredila}} {{GENDER:$2|svoje}} stotisoče urejanje. Hvala ti za {{GENDER:$2|tvoj}} neverjetni doprinos!", "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-thank-you-edit": "{{GENDER:$1|Vaše}} 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.", - "notification-edit-talk-page-email-batch-body-with-section": "{{GENDER:$1|Uporabnik|Uporabnica}} ti je {{GENDER:$1|pustil|pustila}} sporočilo na pogovorni strani v razdelku »$2«.", - "notification-page-linked-email-subject": "Stran, ki si jo {{GENDER:|ustvaril|ustvarila}}, je dobila povezavo na projektu {{SITENAME}}", - "notification-reverted-email-subject2": "V {{GRAMMAR:dajalnik|{{SITENAME}}}} {{PLURAL:$3|je bilo|sta bili|so bila}} {{PLURAL:$3|vaše urejanje|vaši urejanji|vaša urejanja}} {{GENDER:$1|{{PLURAL:$3|vrnjeno|vrnjeni|vrnjena}}}}.", - "notification-mention-email-subject": "V projektu {{SITENAME}} {{GENDER:$2|te}} je {{GENDER:$1|omenil|omenila}} $1.", - "notification-user-rights-email-subject": "V {{GRAMMAR:dajalnik|{{SITENAME}}}} so bile spremenjene tvoje uporabniške pravice.", + "notification-edit-talk-page-email-subject2": "V projektu {{SITENAME}} ti je {{GENDER:$2|uporabnik|uporabnica}} {{GENDER:$2|pustil|pustila}} sporočilo.", + "notification-page-linked-email-subject": "Stran, ki si jo {{GENDER:$3|ustvaril|ustvarila}}, je dobila povezavo na projektu {{SITENAME}}", + "notification-reverted-email-subject2": "V {{GRAMMAR:dajalnik|{{SITENAME}}}} {{PLURAL:$4|je bilo|sta bili|so bila}} {{PLURAL:$4|vaše urejanje|vaši urejanji|vaša urejanja}} {{GENDER:$2|{{PLURAL:$4|vrnjeno|vrnjeni|vrnjena}}}}.", + "notification-mention-email-subject": "V projektu {{SITENAME}} {{GENDER:$3|te}} je {{GENDER:$2|omenil|omenila}} $1.", + "notification-user-rights-email-subject": "V {{GRAMMAR:dajalnik|{{SITENAME}}}} so bile spremenjene {{GENDER:$3|tvoje}} uporabniške pravice.", "notification-timestamp-ago-seconds": "{{PLURAL:$1|$1 sekunda|$1 sekundi|$1 sekunde|$1 sekund}}", "notification-timestamp-ago-minutes": "{{PLURAL:$1|$1 minuta|$1 minuti|$1 minute|$1 minut}}", "notification-timestamp-ago-hours": "{{PLURAL:$1|$1 ura|$1 uri|$1 ure|$1 ur}}", @@ -173,25 +167,20 @@ "notification-inbox-filter-read": "Prebrana", "notification-inbox-filter-unread": "Neprebrana", "notification-inbox-filter-all": "Vsa", - "echo-email-body-default": "V {{GRAMMAR:dajalnik|{{SITENAME}}}} te čaka novo obvestilo:\n\n$1", - "echo-email-footer-default-html": "Prejemanje e-pošte si lahko nastaviš v <a href=\"$2\" style=\"text-decoration:none; color: #3868B0;\">svojih nastavitvah</a>.<br />\n$1", - "echo-email-footer-default": "$2\n\nZa izbiro e-poštnih sporočil, ki jih želite prejemati, prilagodite svoje nastavitve:\n{{canonicalurl:{{#special:Preferences}}#mw-prefsection-echo}}\n\n$1", - "echo-email-plain-footer": "Za izbor vrst sporočil, ki jih {{GENDER:$1|prejemaš}}, preveri svoje nastavitve:", - "echo-email-html-footer-preference-link-text": "preveri {{GENDER:$1|svoje}} nastavitve", - "echo-email-html-footer-with-link": "Za določitev, katere vrste e-pošte naj {{GENDER:$2|ti}} pošiljamo, $1.", + "echo-email-plain-footer": "Za določite vrste e-pošte, ki naj {{GENDER:$1|vam}} jih pošiljamo, preverite svoje nastavitve:", + "echo-email-html-footer-preference-link-text": "preverite {{GENDER:$1|svoje}} nastavitve", + "echo-email-html-footer-with-link": "Za določitev vrste e-pošte, ki naj {{GENDER:$2|vam}} jo pošiljamo, $1.", "echo-notification-alert": "{{PLURAL:$1|Opomnik ($1)|Opomnika ($1)|Opomniki ($1)|Opomnikov ($1)|100=Opomniki (99+)}}", "echo-notification-notice": "{{PLURAL:$1|Obvestilo ($1)|Obvestili ($1)|Obvestila ($1)|Obvestil ($1)|100=Obvestila (99+)}}", "echo-notification-alert-text-only": "Opomniki", "echo-notification-notice-text-only": "Obvestila", "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 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 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.", "notification-bundle-header-edit-user-talk-v2": "{{PLURAL:$1|Eno novo sporočilo|$1 novi sporočili|$1 nova sporočila|$1 novih sporočil|100=99+ novih sporočil}} na <strong>{{GENDER:$3|tvoji}} pogovorni strani</strong>.", "echo-email-batch-subject-daily": "V {{GRAMMAR:dajalnik|{{SITENAME}}}} te {{PLURAL:$2|čaka novo sporočilo|čakata novi sporočili|čakajo nova sporočila}}.", "echo-email-batch-subject-weekly": "V {{GRAMMAR:dajalnik|{{SITENAME}}}} te ta teden čaka {{PLURAL:$2|eno novo sporočilo|dve novi sporočili|nova sporočila}}.", diff --git a/Echo/i18n/smn.json b/Echo/i18n/smn.json new file mode 100644 index 00000000..e3d5620f --- /dev/null +++ b/Echo/i18n/smn.json @@ -0,0 +1,8 @@ +{ + "@metadata": { + "authors": [ + "Trondtr" + ] + }, + "tooltip-pt-notifications-alert": "{{GENDER:|Tuu larmâdâsah}}" +} diff --git a/Echo/i18n/so.json b/Echo/i18n/so.json index 81aeb754..141cc858 100644 --- a/Echo/i18n/so.json +++ b/Echo/i18n/so.json @@ -20,11 +20,9 @@ "echo-specialpage-pagefilters-title": "Dhaqdhaqaaqyada cusub", "echo-specialpage-pagefilters-subtitle": "Bogag leh wargelinno ee aan la aqrin", "echo-none": "Malahan wax wargelin ah.", - "echo-more-info": "Dheeraad", "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", - "notification-edit-talk-page-email-batch-body-with-section": "$1 {{GENDER:$1|kuugu dhaafay|kuugu dhaaftay}} farriin boggaada wadahadalka ee \"$2\".", "notification-timestamp-ago-minutes": "{{PLURAL:$1|$1 daqiiqo}}", "notification-timestamp-ago-months": "{{PLURAL:$1|$1bil}}", "notification-timestamp-ago-years": "{{PLURAL:$1|$1sano}}", diff --git a/Echo/i18n/sq.json b/Echo/i18n/sq.json index e836a5b6..2c2375e7 100644 --- a/Echo/i18n/sq.json +++ b/Echo/i18n/sq.json @@ -2,15 +2,14 @@ "@metadata": { "authors": [ "Euriditi", - "Olsi", "Kosovastar", - "Liridon" + "Liridon", + "Olsi" ] }, "echo-desc": "Sistemi i njoftimeve", "prefs-echo": "Njoftimet", "prefs-emailsettings": "Opsionet e emailit", - "prefs-displaynotifications": "Shfaq opsionet", "prefs-echosubscriptions": "Më njofto për këto raste", "echo-pref-send-me": "Më dërgo:", "echo-pref-send-to": "Dërgo në:", @@ -35,14 +34,10 @@ "echo-pref-tooltip-article-linked": "Më njofto kur dikush lidh, një faqe, me një faqe që kam krijuar unë.", "echo-pref-tooltip-reverted": "Më njofto kur dikush kthen një ndryshim që kam bërë unë, duke përdorur funksionet zhbëj ose riktheje.", "echo-pref-tooltip-mention": "Më njofto kur dikush lidh faqen time të përdoruesit me cilëndo faqe diskutimi.", - "echo-error-no-formatter": "Asnjë përcaktim mbi formatimimin e njoftimeve.", "notifications": "Njoftimet", "tooltip-pt-notifications-alert": "Njoftimet e tua", "echo-specialpage": "Njoftimet", - "echo-anon": "Për të marrë njoftime, [$1 regjistrohuni] ose [$2 hyni].", "echo-none": "Nuk keni njoftime.", - "echo-more-info": "Më tepër informacion", - "echo-feedback": "Komente", "notification-link-text-view-message": "Shiko mesazhin", "notification-link-text-view-mention": "Shiko përmëndjen", "notification-link-text-view-changes": "Shiko ndryshimet", @@ -50,21 +45,16 @@ "notification-header-welcome": "{{GENDER:$2|Mirë se erdhët}} në {{SITENAME}}, $1! Jemi të lumtur që {{GENDER:$2|ju}} kemi këtu.", "notification-link-text-view-edit": "Shiko redaktimin", "notification-header-reverted": "{{PLURAL:$4|Redaktimi i juaj|Redaktimet e tua}} në $3 {{PLURAL:$4|u kthye|u kthyen}} {{GENDER:$2|nga}} $1.", - "notification-edit-talk-page-email-subject2": "$1 {{GENDER:$1|iu la}} një mesazh në {{SITENAME}}", - "notification-edit-talk-page-email-batch-body-with-section": "$1 {{GENDER:$1|të la}} një mesazh në faqen tënde të diskutimeve në \"$2\".", + "notification-edit-talk-page-email-subject2": "$1 {{GENDER:$2|iu la}} një mesazh në {{SITENAME}}", "notification-page-linked-email-subject": "Një faqe që keni krijuar u lidh në {{SITENAME}}", - "notification-reverted-email-subject2": "{{PLURAL:$3|Redaktimi juaj|Redaktimet tuaja}} {{GENDER:$1|u kthyen}} në {{SITENAME}}", - "notification-mention-email-subject": "$1 të {{GENDER:$1|përmëndi}} në {{SITENAME}}", + "notification-reverted-email-subject2": "{{PLURAL:$4|Redaktimi juaj|Redaktimet tuaja}} {{GENDER:$2|u kthyen}} në {{SITENAME}}", + "notification-mention-email-subject": "$1 të {{GENDER:$2|përmëndi}} në {{SITENAME}}", "notification-user-rights-email-subject": "Të drejtat e tua të përdoruesit u ndryshuan në {{SITENAME}}", - "echo-email-body-default": "Keni një njoftim të ri në {{SITENAME}}:\n\n$1", - "echo-email-footer-default": "$2\n\nPër të kontrolluar se cili email do t'iu dërgohet, kontrolloni parapëlqimet tuaja:\n{{canonicalurl:{{#special:Preferences}}#mw-prefsection-echo}}\n\n$1", "echo-overlay-link": "Të gjitha njoftimet", "echo-overlay-title": "<b>Njoftimet</b>", - "echo-overlay-title-overflow": "<b>{{PLURAL:$1|Njoftime}}</b> (duke shfaqur $1 nga $2 të pa lexuara)", "echo-mark-all-as-read": "Shënoji të gjitha si të lexuara", "echo-date-today": "Sot", "echo-date-yesterday": "Dje", - "echo-load-more-error": "Pati një gabim në ngarkimin e rezultateve shtesë.", "echo-email-batch-subject-daily": "Keni {{PLURAL:$2|një njoftim të ri|njoftime të reja}} në {{SITENAME}}", "echo-email-batch-subject-weekly": "Keni {{PLURAL:$2|një njoftim të ri|njoftime të reja}} në {{SITENAME}} gjatë kësaj jave.", "echo-email-batch-body-intro-daily": "Përshëndetje $1,\nkëtu është përmbledhja e aktivitetit të sotëm në {{SITENAME}} për ju.", diff --git a/Echo/i18n/sr-ec.json b/Echo/i18n/sr-ec.json index 40051773..aabd891e 100644 --- a/Echo/i18n/sr-ec.json +++ b/Echo/i18n/sr-ec.json @@ -1,66 +1,76 @@ { "@metadata": { "authors": [ - "Milicevic01", - "Rancher", - "Михајло Анђелковић", - "Сербијана", - "Macofe", - "Srdjan m", + "Acamicamacaraca", + "BadDog", "Dungodung", + "Macofe", + "Matěj Suchánek", + "Milicevic01", "Obsuser", "Prevodim", - "Acamicamacaraca", - "BadDog", - "Matěj Suchánek" + "Rancher", + "Srdjan m", + "Zoranzoki21", + "Михајло Анђелковић", + "Сербијана" ] }, - "echo-desc": "Систем за обавештавање корисника о дешавањима и порукама", + "echo-desc": "Систем за обавештавање корисника о догађајима и порукама", "prefs-echo": "Обавештења", - "prefs-emailsettings": "Опције имејла", - "prefs-displaynotifications": "Опције приказа", - "prefs-echosubscriptions": "Обавести ме о овим догађајима", + "prefs-emailsettings": "Опције е-поште", + "prefs-echosubscriptions": "Обавештавај ме о следећим догађајима", "prefs-echocrosswiki": "Међувики обавештења", "prefs-blocknotificationslist": "Пригушени корисници", - "echo-pref-send-me": "Пошаљи ми:", - "echo-pref-send-to": "Пошаљи на:", - "echo-pref-email-format": "Формат имејла:", + "prefs-echopollupdates": "Обавештења уживо", + "echo-mobile-notifications-filter-title": "Филтрирање обавештења", + "echo-pref-show-poll-updates": "Приказује нова обавештења чим стигну", + "echo-pref-show-poll-updates-help": "Прикажи број непрочитаних обавештења у насловној траци и исечак сваког од њих чим стигну.", + "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": "Е-пошта", + "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-pref-beta-feature-cross-wiki-description": "Лакши преглед и организација обавештења. Укључује међувики обавештења, што вам омогућава да видите поруке са других викија. (Да бисте примали међувики обавештења на датом викију, морате да активирате ову бета могућност.)", + "echo-pref-email-format-plain-text": "чист текст", + "echo-pref-cross-wiki-notifications": "Приказуј обавештења са других викија", + "echo-pref-notifications-blacklist": "Не приказуј обавештења од следећих корисника: ([[mw:Special:MyLanguage/Help:Notifications#mute|сазнајте више]])", + "echo-pref-dont-email-read-notifications": "Не укључуј прочитана обавештења у е-порукама са резимеом", "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-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-category-title-system-noemail": "{{PLURAL:$1|Систем}}", + "echo-category-title-system-emailonly": "{{PLURAL:$1|Систем}}", + "echo-category-title-user-rights": "{{PLURAL:$1|Промена корисничких права|Промене корисничких права}}", + "echo-category-title-emailuser": "{{PLURAL:$1|Е-порука од другог корисника|Е-поруке од других корисника}}", + "echo-category-title-article-reminder": "{{PLURAL:$1|Подсетник о страници|Подсетници о страницама}}", + "echo-category-title-thank-you-edit": "{{PLURAL:$1|Прекретница|Прекретнице}} измена", + "echo-category-title-watchlist": "Измена надгледане странице", + "echo-category-title-minor-watchlist": "Мања измена надгледане странице", "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": "Обавештава вас када некоме пошаљете спомињање.", + "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": "Није одређено обликовање за обавештења.", + "echo-pref-tooltip-emailuser": "Обавештава вас када вам неко пошаље е-поруку.", + "echo-pref-tooltip-article-reminder": "Обавештава вас о овој страници када затражите.", + "echo-pref-tooltip-thank-you-edit": "Обавештава вас када достигнете прву, десету, стоту… измену.", + "echo-pref-tooltip-watchlist": "Обавештава вас када неко направи (немању) измену странице на списку надгледања.", + "echo-pref-tooltip-minor-watchlist": "Обавештава вас када неко направи мању измену странице на списку надгледања.", "notifications": "Обавештења", "tooltip-pt-notifications-alert": "{{GENDER:|Ваша}} обавештења", "tooltip-pt-notifications-notice": "{{GENDER:|Ваша}} ситна обавештења", @@ -71,34 +81,31 @@ "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-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": "Неважећи ID дешавања", + "echo-specialpage-section-markread": "Означи групу прочитаном", + "echo-specialpage-markasread": "Обавештење: Означавање прочитаним", + "echo-specialpage-markasread-invalid-id": "Неважећи ID догађаја", "echo-specialpage-pagination-numnotifications": "$1 {{PLURAL:$1|обавeштење|обавештења}}", + "echo-specialpage-pagination-range": "$1—$2.", "echo-specialpage-pagefilters-title": "Недавна активност", "echo-specialpage-pagefilters-subtitle": "Странице са непрочитаним обавештењима", - "notificationsmarkread-legend": "Означавање обавештења као прочитано", - "echo-anon": "Да бисте примали обавештења, [$1 отворите налог] или [$2 се пријавите].", + "notificationsmarkread-legend": "Означавање обавештења прочитаним", "echo-none": "Немате обавештења.", - "echo-more-info": "Више информација", - "echo-feedback": "Повратне информације", - "echo-api-failure": "Неуспело добављање обавештења.", + "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": "Више опција", + "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 ову страницу].", @@ -106,24 +113,24 @@ "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-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-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:$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-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=> 99 страница}}.", + "notification-bundle-header-page-linked": "Страница <strong>$3</strong> повезана је {{PLURAL:$5|1=с једном страницом|са $5 страницом|са $5 странице|са $5 страница|100=с преко 99 страница}}.", "notification-header-article-reminder": "Страница о којој {{GENDER:$2|сте}} тражили да будете подсећени се зове <strong>$3</strong>", - "notification-link-text-what-links-here": "Сви линкови ка овој страници", + "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>”.", @@ -132,41 +139,50 @@ "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-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-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>Не можете да помињете 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-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-welcome": "{{GENDER:$2|Добро дошли}} на {{GRAMMAR:акузатив|{{SITENAME}}}}, $1! Драго нам што {{GENDER:$2|сте}} овде.", "notification-header-mention-summary": "$1 {{GENDER:$3|вас}} је {{GENDER:$2|поменуо|поменула}} у резимеу измене на страници <strong>$4</strong>.", + "notification-header-watchlist-changed": "$1 је {{GENDER:$2|променио|променила}} страницу <strong>$3</strong>, страницу на {{GENDER:$4|вашем}} списку надгледања{{PLURAL:$5||, $5 пута}}.", + "notification-header-watchlist-created": "$1 је {{GENDER:$2|направио|направила}} страницу <strong>$3</strong>, страницу на {{GENDER:$4|вашем}} списку надгледања{{PLURAL:$5||, $5 пута}}.", + "notification-header-watchlist-deleted": "$1 је {{GENDER:$2|избрисао|избрисала}} страницу <strong>$3</strong>, страницу на {{GENDER:$4|вашем}} списку надгледања{{PLURAL:$5||, $5 пута}}.", + "notification-header-watchlist-moved": "$1 је {{GENDER:$2|преместио|преместила}} страницу <strong>$3</strong>, страницу на {{GENDER:$4|вашем}} списку надгледања{{PLURAL:$5||, $5 пута}}.", + "notification-header-watchlist-restored": "$1 је {{GENDER:$2|вратио|вратила}} страницу <strong>$3</strong>, страницу на {{GENDER:$4|вашем}} списку надгледања{{PLURAL:$5||, $5 пута}}.", + "notification-header-watchlist-multiuser-changed": "<strong>$1</strong>, страница на {{GENDER:$2|списку}} надгледања, промењена је $3 {{PLURAL:$3|пут|пута}}.", + "notification-header-watchlist-multiuser-created": "<strong>$1</strong>, страница на {{GENDER:$2|списку}} надгледања, направљена је $3 {{PLURAL:$3|пут|пута}}.", + "notification-header-watchlist-multiuser-deleted": "<strong>$1</strong>, страница на {{GENDER:$2|списку}} надгледања, избрисана је $3 {{PLURAL:$3|пут|пута}}.", + "notification-header-watchlist-multiuser-moved": "<strong>$1</strong>, страница на {{GENDER:$2|списку}} надгледања, премештена је $3 {{PLURAL:$3|пут|пута}}.", + "notification-header-watchlist-multiuser-restored": "<strong>$1</strong>, страница на {{GENDER:$2|списку}} надгледања, враћена је $3 {{PLURAL:$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|своју}} десету измену. Хвала {{GENDER:$2|вам}} и само тако наставите!", - "notification-header-thank-you-100-edit": "Управо {{GENDER:$2|сте}} направили {{GENDER:$2|своју}} стоту измену. Хвала {{GENDER:$2|вам}} пуно.", + "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|своју}} десет-хиљадиту измену. Хвала {{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-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-link-text-view-edit": "Прикажи измену", + "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-header-emailuser": "$1 вам је {{GENDER:$2|послао|послала}} е-поруку.", + "notification-edit-talk-page-email-subject2": "$1 {{GENDER:$3|вам}} је {{GENDER:$2|оставио|оставила}} поруку на пројекту {{SITENAME}}", + "notification-page-linked-email-subject": "Страница коју {{GENDER:$3|сте}} направили је повезана на пројекту {{SITENAME}}", + "notification-reverted-email-subject2": "{{GENDER:$3|Ваша|Ваше}} {{PLURAL:$4|измена је|измене су}} {{GENDER:$2|враћена|враћене}} на пројекту {{SITENAME}}.", + "notification-mention-email-subject": "$1 {{GENDER:$3|вас}} је {{GENDER:$2|поменуо|поменула}} на пројекту {{SITENAME}}", + "notification-user-rights-email-subject": "{{GENDER:$3|Ваша}} корисничка права су промењена на пројекту {{SITENAME}}.", "notification-timestamp-ago-seconds": "{{PLURAL:$1|$1 сек.}}", "notification-timestamp-ago-minutes": "{{PLURAL:$1|$1 мин.}}", "notification-timestamp-ago-hours": "{{PLURAL:$1|$1 ч.}}", @@ -178,31 +194,28 @@ "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=Обавештања (99+)}}", - "echo-notification-notice": "{{PLURAL:$1|$1 ситно обавештење|$1 ситна обавештења |100=99+ ситних обавештења}}", + "echo-specialmute-label-mute-notifications": "Пригуши обавештења од {{GENDER:$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-notification-alert": "{{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-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-mark-all-as-read": "Означи све прочитаним", + "echo-mark-all-as-read-confirmation": "$1 {{PLURAL:$1|1=обавештење означено прочитаним|обавештења означена прочитаним}}", + "echo-mark-wiki-as-read": "Означи све прочитаним у изабраном викију: $1", + "echo-displaysnippet-title": "Ново обавештење", "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=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}} за вас.", "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 друга викија|$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 1a08e8c8..008d195f 100644 --- a/Echo/i18n/sr-el.json +++ b/Echo/i18n/sr-el.json @@ -1,18 +1,17 @@ { "@metadata": { "authors": [ - "Milicevic01", - "Srdjan m", "Macofe", - "Сербијана", + "Milicevic01", "Obsuser", - "Prevodim" + "Prevodim", + "Srdjan m", + "Сербијана" ] }, "echo-desc": "Sistem za obaveštavanje korisnika o dešavanjima i porukama", "prefs-echo": "Obaveštenja", "prefs-emailsettings": "Postavke imejla", - "prefs-displaynotifications": "Postavke prikaza", "prefs-echosubscriptions": "Obavesti me o ovim događajima", "prefs-echocrosswiki": "Međuviki obaveštenja", "prefs-blocknotificationslist": "Ignorisani korisnici", @@ -49,15 +48,11 @@ "echo-pref-tooltip-mention-success": "Obaveštava vas kada neko dobije obaveštenje nakon što ga spomenete.", "echo-pref-tooltip-user-rights": "Obaveštava vas kada neko promeni vaša korisnička prava.", "echo-pref-tooltip-emailuser": "Obaveštava vas kada vam neko pošalje imejl.", - "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}} 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", - "echo-more-info": "Više informacija", - "echo-feedback": "Povratne informacije", "echo-api-failure": "Dobavljanje obaveštenja nije uspelo.", "echo-notification-placeholder": "Nemate obaveštenja.", "echo-notification-loginrequired": "Morate se prijaviti da bi videli obaveštenja.", @@ -91,15 +86,12 @@ "notification-link-text-view-edit": "Pogledaj izmenu", "notification-header-reverted": "{{PLURAL:$4|Vaša izmena na stranici <strong>$3</strong> je poništena|Vaše izmene na {{GENDER:$2|stranici}} <strong>$3</strong> su poništene}}.", "notification-header-emailuser": "$1 Vam je {{GENDER:$2|poslao|poslala}} imejl.", - "notification-edit-talk-page-email-subject2": "$1 Vam je {{GENDER:$1|ostavio|ostavila}} poruku na projektu {{SITENAME}}", - "notification-edit-talk-page-email-batch-body-with-section": "$1 Vam je {{GENDER:$1|ostavio|ostavila}} poruku na Vašoj stranici za razgovor u „$2“.", + "notification-edit-talk-page-email-subject2": "$1 Vam je {{GENDER:$2|ostavio|ostavila}} poruku na projektu {{SITENAME}}", "notification-page-linked-email-subject": "Vaša stranica je povezana na projektu {{SITENAME}}", - "notification-reverted-email-subject2": "{{GENDER:$1|{{PLURAL:$3|Vaša izmena je poništena|Vaše izmene su poništene}}}} na projektu {{SITENAME}}", - "notification-mention-email-subject": "$1 Vas je {{GENDER:$1|pomenuo|pomenula}} {{GENDER:$2|na}} {{SITENAME}}", + "notification-reverted-email-subject2": "{{GENDER:$2|{{PLURAL:$4|Vaša izmena je poništena|Vaše izmene su poništene}}}} na projektu {{SITENAME}}", + "notification-mention-email-subject": "$1 Vas je {{GENDER:$2|pomenuo|pomenula}} {{GENDER:$3|na}} {{SITENAME}}", "notification-user-rights-email-subject": "Vaša korisnička prava na projektu {{SITENAME}} su promenjena.", "notification-timestamp-ago-minutes": "{{PLURAL:$1|$1 min.}}", - "echo-email-body-default": "Imate novo obaveštenje na {{SITENAME}}: \n\n$1", - "echo-email-footer-default": "$2\n\nDa biste promenili koje poruke primate od nas idite u podešavanja:\n{{canonicalurl:{{#special:Preferences}}#mw-prefsection-echo}}\n\n$1", "echo-email-plain-footer": "Da biste promenili koje poruke primate {{GENDER:$1|od}} nas idite u podešavanja.", "echo-email-html-footer-preference-link-text": "{{GENDER:$1|Vaša}} podešavanja", "echo-email-html-footer-with-link": "Da biste promenili koje poruke primate {{GENDER:$2|od}} nas idite u $1.", @@ -107,12 +99,10 @@ "echo-notification-alert-text-only": "Obaveštenja", "echo-overlay-link": "Sva obaveštenja", "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.", "notification-bundle-header-edit-user-talk-v2": "{{PLURAL:$1|Jedna nova poruka|$1 nove poruke|$1 novih poruka|100=≥100 novih poruka}} na <strong>{{GENDER:$3|Vašoj}} stranici za razgovor</strong>.", "echo-email-batch-subject-daily": "Imate {{PLURAL:$2|novo obaveštenje|nova obaveštenja}} na {{SITENAME}}", "echo-email-batch-subject-weekly": "Imate {{PLURAL:$2|novo obaveštenje|nova obaveštenja}} na projektu {{SITENAME}} ove sedmice", diff --git a/Echo/i18n/sv.json b/Echo/i18n/sv.json index 24f999aa..3715729e 100644 --- a/Echo/i18n/sv.json +++ b/Echo/i18n/sv.json @@ -4,35 +4,41 @@ "Ainali", "Dcastor", "Edvinw", + "Frisko", + "Hangsna", + "JohanahoJ", "Jopparn", "Lejonel", - "Skalman", - "Tobulos1", - "WikiPhoenix", "Lokal Profil", + "Macofe", "MagnusA", - "Paracel63", - "Hangsna", "NH", - "Frisko", - "Macofe", "Nemo bis", + "Paracel63", + "Pipetricker", + "Skalman", + "Tobulos1", "Umeaboy", - "Pipetricker" + "WikiPhoenix" ] }, "echo-desc": "System för att meddela användare om händelser och meddelanden", "prefs-echo": "Aviseringar", "prefs-emailsettings": "E-postinställningar", - "prefs-displaynotifications": "Visningsalternativ", "prefs-echosubscriptions": "Meddela mig om dessa händelser", "prefs-echocrosswiki": "Interwikiaviseringar", "prefs-blocknotificationslist": "Ignorerade användare", + "prefs-mutedpageslist": "Sidor undantagna från sidlänkningsavisering", + "prefs-echopollupdates": "Direktaviseringar", + "echo-mobile-notifications-filter-title": "Filtrera aviseringar", + "echo-pref-show-poll-updates": "Visa nya aviseringar när de tas emot", + "echo-pref-show-poll-updates-help": "Visa antalet olästa aviseringar i namnlisten och lite av början på varje avisering direkt när det tas emot.", "echo-pref-send-me": "Skicka mig:", "echo-pref-send-to": "Skicka till:", "echo-pref-email-format": "E-postformat:", "echo-pref-web": "Webb", "echo-pref-email": "E-post", + "echo-pref-push": "Appar", "echo-pref-email-frequency-never": "Skicka mig inga aviseringar via e-post", "echo-pref-email-frequency-immediately": "Enskilda aviseringar efterhand som de inkommer", "echo-pref-email-frequency-daily": "En daglig sammanställning av aviseringar", @@ -41,24 +47,29 @@ "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: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-pref-notifications-page-linked-title-muted-list": "Visa inte sidlänkningsaviseringar för dessa sidor. ([[mw:Special:MyLanguage/Help:Notifications#mute|läs mer]])", + "echo-pref-dont-email-read-notifications": "Inkludera inte lästa aviseringar i sammanfattningsmeddelanden", "echo-learn-more": "Läs mer", "echo-log": "Offentlig logg", "echo-new-messages": "Du har nya meddelanden", "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-article-linked": "Sid{{PLURAL:$1|länkning|länkningar}}", "echo-category-title-reverted": "Redigerings{{PLURAL:$1|återställning|återställningar}}", "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}}", "echo-category-title-system": "{{PLURAL:$1|System}}", + "echo-category-title-system-noemail": "{{PLURAL:$1|System}}", + "echo-category-title-system-emailonly": "{{PLURAL:$1|System}}", "echo-category-title-user-rights": "{{PLURAL:$1|Användarrättighetsförändring|Användarrättighetsförändringar}}", "echo-category-title-emailuser": "{{PLURAL:$1|E-post från annan användare|E-post från andra användare}}", "echo-category-title-article-reminder": "{{PLURAL:$1|Sidpåminnelse|Sidpåminnelser}}", + "echo-category-title-thank-you-edit": "Redigerings{{PLURAL:$1|milsten|milstenar}}", + "echo-category-title-watchlist": "Redigering på bevakad sida", + "echo-category-title-minor-watchlist": "Mindre redigering på bevakad sida", "echo-pref-tooltip-edit-user-talk": "Meddela mig när någon lämnar ett meddelande eller svarar på min diskussionssida.", - "echo-pref-tooltip-article-linked": "Meddela mig när någon länkar till en sida som jag skapat från en annan sida.", + "echo-pref-tooltip-article-linked": "Meddela mig när någon sida länkas till en sida som jag skapat.", "echo-pref-tooltip-reverted": "Meddela mig när någon återställer en ändring som jag gjort, med hjälp av verktygen \"gör ogjord\" eller \"rulla tillbaka\".", "echo-pref-tooltip-mention": "Meddela mig när någon länkar till min användarsida.", "echo-pref-tooltip-mention-failure": "Meddela mig när jag inte kan skicka ett omnämnande till någon.", @@ -66,7 +77,9 @@ "echo-pref-tooltip-user-rights": "Meddela mig när någon ändrar mina användarrättigheter.", "echo-pref-tooltip-emailuser": "Meddela mig när någon skickar mig ett e-post.", "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.", + "echo-pref-tooltip-thank-you-edit": "Meddela mig när jag når min 1:a, 10:e, 100:e... redigering.", + "echo-pref-tooltip-watchlist": "Meddela mig när någon gör en (vanlig) redigering på en sida i min bevakningslista.", + "echo-pref-tooltip-minor-watchlist": "Meddela mig när någon gör en mindre redigering på en sida i min bevakningslista.", "notifications": "Aviseringar", "tooltip-pt-notifications-alert": "{{GENDER:|Dina}} notiser", "tooltip-pt-notifications-notice": "{{GENDER:|Dina}} notiser", @@ -77,7 +90,6 @@ "echo-displaynotificationsconfiguration-sorting-by-section-legend": "Vilket avsnitt varje aviseringstyp sorteras i", "echo-displaynotificationsconfiguration-available-notification-methods-header": "Tillåtna aviseringsmetoder", "echo-displaynotificationsconfiguration-available-notification-methods-by-category-legend": "Vilka aviseringsmetoder som stöds för varje kategori", - "echo-displaynotificationsconfiguration-available-notification-methods-by-type-legend": "Vilka aviseringsmetoder som varje typ stöder; gäller endast typer inom kategorier som döljs i inställningarna", "echo-displaynotificationsconfiguration-enabled-default-header": "Aktiverad som standard", "echo-displaynotificationsconfiguration-enabled-default-existing-users-legend": "Befintliga användare", "echo-displaynotificationsconfiguration-enabled-default-new-users-legend": "Nya användare", @@ -87,14 +99,13 @@ "echo-specialpage-section-markread": "Markera grupp som läst", "echo-specialpage-markasread": "Avisering: Markera som läst", "echo-specialpage-markasread-invalid-id": "Ogiltigt händelse-ID", + "echo-specialpage-pagefilterwidget-aria-label": "Filtrera efter wiki och sidtitel", + "echo-specialpage-special-help-menu-widget-aria-label": "Ytterligare alternativ och aviseringsinställningar.", "echo-specialpage-pagination-numnotifications": "$1 {{PLURAL:$1|avisering|aviseringar}}", "echo-specialpage-pagefilters-title": "Senaste aktivitet", "echo-specialpage-pagefilters-subtitle": "Sidor med olästa aviseringar", "notificationsmarkread-legend": "Markera avisering som läst", - "echo-anon": "För att ta emot aviseringar, [$1 skapa ett konto] eller [$2 logga in].", "echo-none": "Du har inga aviseringar.", - "echo-more-info": "Mer information", - "echo-feedback": "Feedback", "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.", @@ -105,6 +116,12 @@ "echo-notification-markasunread": "Markera som oläst", "echo-notification-markasread-tooltip": "Markera som läst", "echo-notification-more-options-tooltip": "Fler alternativ", + "notification-dynamic-actions-mute-page-linked": "{{GENDER:$2|Visa inte}} länkningsaviseringar för \"$1\"", + "notification-dynamic-actions-mute-page-linked-confirmation": "Sidlänkningsavisering är nu inaktiverad för sidan \"$1\"", + "notification-dynamic-actions-mute-page-linked-confirmation-description": "{{GENDER:$2|Du}} kan hantera dina tystade sidor i [$1 dina inställningar] när som helst.", + "notification-dynamic-actions-unmute-page-linked": "{{GENDER:$2|Visa}} sidlänkningsaviseringar för \"$1\"", + "notification-dynamic-actions-unmute-page-linked-confirmation": "Sidlänkningsmeddelanden är nu aktiverade för sidan \"$1\"", + "notification-dynamic-actions-unmute-page-linked-confirmation-description": "{{GENDER:$2|Du}} kan hantera dina tystade sidor i [$1 dina inställningar] när som helst.", "notification-dynamic-actions-unwatch": "{{GENDER:$3|Sluta}} bevaka ny aktivitet på \"$1\"", "notification-dynamic-actions-unwatch-confirmation": "{{GENDER:$3|Du}} bevakar inte längre sidan \"$1\"", "notification-dynamic-actions-unwatch-confirmation-description": "{{GENDER:$3|Du}} kan bevaka [$2 denna sida] när som helst.", @@ -154,6 +171,16 @@ "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-header-watchlist-changed": "$1 {{GENDER:$2|ändrade}} <strong>$3</strong>, en sida på {{GENDER:$4|din}} bevakningslista{{PLURAL:$5||, $5 gånger}}.", + "notification-header-watchlist-created": "$1 {{GENDER:$2|skapade}} <strong>$3</strong>, en sida på {{GENDER:$4|din}} bevakningslista{{PLURAL:$5||, $5 gånger}}.", + "notification-header-watchlist-deleted": "$1 {{GENDER:$2|raderade}} <strong>$3</strong>, en sida på {{GENDER:$4|din}} bevakningslista{{PLURAL:$5||, $5 gånger}}.", + "notification-header-watchlist-moved": "$1 {{GENDER:$2|flyttade}} <strong>$3</strong>, en sida i {{GENDER:$4|din}} bevakningslista{{PLURAL:$5||, $5 gånger}}.", + "notification-header-watchlist-restored": "$1 {{GENDER:$2|återställde}} <strong>$3</strong>, en sida i {{GENDER:$4|din}} bevakningslista{{PLURAL:$5||, $5 gånger}}.", + "notification-header-watchlist-multiuser-changed": "<strong>$1</strong>, en sida i {{GENDER:$2|din}} bevakningslista, ändrades $3 {{PLURAL:$3|gång|gånger}}.", + "notification-header-watchlist-multiuser-created": "<strong>$1</strong>, en sida i {{GENDER:$2|din}} bevakningslista, skapades $3 {{PLURAL:$3|gång|gånger}}.", + "notification-header-watchlist-multiuser-deleted": "<strong>$1</strong>, en sida i {{GENDER:$2|din}} bevakningslista, raderades $3 {{PLURAL:$3|gång|gånger}}.", + "notification-header-watchlist-multiuser-moved": "<strong>$1</strong>, en sida i {{GENDER:$2|din}} bevakningslista, flyttades $3 {{PLURAL:$3|gång|gånger}}.", + "notification-header-watchlist-multiuser-restored": "<strong>$1</strong>, en sida i {{GENDER:$2|din}} bevakningslista, återställdes $3 {{PLURAL:$3|gång|gånger}}.", "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!", @@ -162,17 +189,17 @@ "notification-header-thank-you-10000-edit": "{{GENDER:$2|Du}} gjorde precis {{GENDER:$2|din}} tiotusende redigering; {{GENDER:$2|tack}} så jättemycket!", "notification-header-thank-you-100000-edit": "{{GENDER:$2|Du}} gjorde precis {{GENDER:$2|din}} hundratusende redigering; {{GENDER:$2|tack}} för ditt fantastiska bidrag!", "notification-header-thank-you-1000000-edit": "{{GENDER:$2|Du}} gjorde precis {{GENDER:$2|din}} miljonte redigering; {{GENDER:$2|tack}} för ditt häpnadsväckande bidrag!", + "notification-header-thank-you-10000000-edit": "{{GENDER:$2|Du}} gjorde just {{GENDER:$2|din}} tiomiljonte redigering, tack för {{GENDER:$2|din}} briljanta hängivenhet!", "notification-link-thank-you-edit": "{{GENDER:$1|Din}} redigering", "notification-link-text-view-edit": "Visa redigering", "notification-link-article-reminder": "Visa sida", "notification-header-reverted": "{{PLURAL:$4|Din redigering|Dina redigeringar}} på <strong>$3</strong> har {{GENDER:$2|återställts}}.", "notification-header-emailuser": "$1 {{GENDER:$2|skickade}} e-post till dig.", - "notification-edit-talk-page-email-subject2": "$1 {{GENDER:$1|lämnade}} ett meddelande till dig på {{SITENAME}}", - "notification-edit-talk-page-email-batch-body-with-section": "$1 {{GENDER:$1|lämnade}} ett meddelande på din diskussionssida i \"$2\".", - "notification-page-linked-email-subject": "En sida du skapade länkades till på {{SITENAME}}", - "notification-reverted-email-subject2": "{{PLURAL:$3|Din redigering blev {{GENDER:$1|återställd}}|Dina redigeringar blev {{GENDER:$1|återställda}}}} på {{SITENAME}}", - "notification-mention-email-subject": "$1 {{GENDER:$1|nämnde}} {{GENDER:$2|dig}} på {{SITENAME}}", - "notification-user-rights-email-subject": "Dina användarrättigheter har ändrats på {{SITENAME}}", + "notification-edit-talk-page-email-subject2": "$1 {{GENDER:$2|lämnade}} ett meddelande till {{GENDER:$3|dig}} på {{SITENAME}}", + "notification-page-linked-email-subject": "En sida {{GENDER:$3|du}} skapade länkades till på {{SITENAME}}", + "notification-reverted-email-subject2": "{{PLURAL:$4|Din redigering blev {{GENDER:$2|återställd}}|Dina redigeringar blev {{GENDER:$2|återställda}}}} på {{SITENAME}}", + "notification-mention-email-subject": "$1 {{GENDER:$2|nämnde}} {{GENDER:$3|dig}} på {{SITENAME}}", + "notification-user-rights-email-subject": "{{GENDER:$3|Dina}} användarrättigheter har ändrats på {{SITENAME}}", "notification-timestamp-ago-seconds": "{{PLURAL:$1|$1 s}}", "notification-timestamp-ago-minutes": "{{PLURAL:$1|$1m}}", "notification-timestamp-ago-hours": "{{PLURAL:$1|$1h}}", @@ -184,9 +211,7 @@ "notification-inbox-filter-read": "Lästa", "notification-inbox-filter-unread": "Olästa", "notification-inbox-filter-all": "Alla", - "echo-email-body-default": "Du har en ny avisering på {{SITENAME}}:\n\n$1", - "echo-email-footer-default-html": "För att hantera vilka meddelanden vi e-postar till dig, <a href=\"$2\" style=\"text-decoration:none; color: #3868B0;\">kontrollera dina inställningar</a>.<br />\n$1", - "echo-email-footer-default": "$2\n\nFör att hantera vilken e-post vi skickar dig, kontrollera dina inställningar:\n{{canonicalurl:{{#special:Preferences}}#mw-prefsection-echo}}\n\n$1", + "echo-specialmute-label-mute-notifications": "Tysta aviseringar från denna {{GENDER:$1|användare}}", "echo-email-plain-footer": "För att kontrollera vilka e-postmeddelanden vi skickar till {{GENDER:$1|dig}}, gå till {{GENDER:$1|dina}} inställningar:", "echo-email-html-footer-preference-link-text": "kontrollera {{GENDER:$1|dina}} inställningar", "echo-email-html-footer-with-link": "För att hantera vilken e-post vi skickar till {{GENDER:$2|dig}}, $1.", @@ -196,13 +221,12 @@ "echo-notification-notice-text-only": "Notiser", "echo-overlay-link": "Alla aviseringar", "echo-overlay-title": "<b>Aviseringar</b>", - "echo-overlay-title-overflow": "<b>{{PLURAL:$1|Avisering|Aviseringar}}</b> (visar $1 av $2 {{PLURAL:$2|oläst|olästa}})", "echo-mark-all-as-read": "Markera alla som lästa", "echo-mark-all-as-read-confirmation": "$1 {{PLURAL:$1|avisering markerad som läst|aviseringar markerade som lästa}}", "echo-mark-wiki-as-read": "Markera alla som lästa på vald wiki: $1", + "echo-displaysnippet-title": "Ny avisering", "echo-date-today": "Idag", "echo-date-yesterday": "Igår", - "echo-load-more-error": "Ett fel uppstod när fler resultat skulle hämtas.", "notification-bundle-header-edit-user-talk-v2": "{{PLURAL:$1|Ett nytt meddelande|$1 nya meddelanden|100=99+ nya meddelanden}} på <strong>{{GENDER:$3|din}} diskussionssida</strong>.", "echo-email-batch-subject-daily": "Du har {{PLURAL:$2|en ny avisering|nya aviseringar}} på {{SITENAME}}", "echo-email-batch-subject-weekly": "Du har {{PLURAL:$2|en ny avisering|nya aviseringar}} på {{SITENAME}} den här veckan", diff --git a/Echo/i18n/szl.json b/Echo/i18n/szl.json index ccec01ff..d4c6e80b 100644 --- a/Echo/i18n/szl.json +++ b/Echo/i18n/szl.json @@ -1,7 +1,10 @@ { "@metadata": { "authors": [ - "Krol111" + "Krol111", + "Uostofchuodnego" ] - } + }, + "notifications": "Powiadomiynia", + "tooltip-pt-notifications-alert": "{{GENDER:|Moje}} powiadōmiynia" } diff --git a/Echo/i18n/ais.json b/Echo/i18n/szy.json index c60dc4a2..0ddde234 100644 --- a/Echo/i18n/ais.json +++ b/Echo/i18n/szy.json @@ -9,7 +9,6 @@ "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", "echo-pref-send-me": "pabahel takuwanan:", @@ -24,8 +23,6 @@ "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", @@ -46,7 +43,6 @@ "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", @@ -57,7 +53,6 @@ "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", @@ -71,10 +66,7 @@ "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-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.", @@ -140,11 +132,10 @@ "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-edit-talk-page-email-subject2": "$1 i {{SITENAME}} {{GENDER:$2|maliwan tu}}ku cacay palatuh pabeli tisuwan.", "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-reverted-email-subject2": "izaw ku tademaw{{GENDER:$2|patiku tuway}} kisu i{{SITENAME}} sa {{PLURAL:$4|mikawaway-kalumyiti}}", + "notification-mention-email-subject": "$1 i {{SITENAME}} pabaw {{GENDER:$2|mapasakamu}} {{GENDER:$3|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}}", @@ -157,9 +148,6 @@ "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)}}", @@ -168,13 +156,11 @@ "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-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}}", diff --git a/Echo/i18n/ta.json b/Echo/i18n/ta.json index 480f4bef..b80b3a65 100644 --- a/Echo/i18n/ta.json +++ b/Echo/i18n/ta.json @@ -1,19 +1,19 @@ { "@metadata": { "authors": [ + "Balajijagadesh", + "ElangoRamanujam", "Jayarathina", "Karthi.dr", + "Rakeshonwiki", "Shanmugamp7", - "மதனாஹரன்", - "ElangoRamanujam", "தமிழ்க்குரிசில்", - "Rakeshonwiki" + "மதனாஹரன்" ] }, "echo-desc": "அறிவிப்பு முறைமை", "prefs-echo": "அறிவிப்புகள்", "prefs-emailsettings": "மின்னஞ்சல் விருப்பத்தேர்வுகள்", - "prefs-displaynotifications": "விருப்பத்தேர்வுகளைக் காட்டு", "prefs-echosubscriptions": "இந்த நிகழ்வுகளை பற்றி எனக்கு அறிவி", "echo-pref-send-me": "எனக்கு இவற்றை அனுப்பவும்:", "echo-pref-send-to": "இம்மின்னஞ்சல் முகவரிக்கு அனுப்பவும்:", @@ -35,39 +35,50 @@ "echo-pref-tooltip-article-linked": "நான் உருவாக்கிய கட்டுரை பக்கத்துக்கு வேறு ஒரு பக்கத்திலிருந்து யாராவது இணைப்புகள் இட்டால் எனக்கு தெரிவி.", "echo-pref-tooltip-reverted": "நான் செய்த தொகுப்புகளை யாராவது மீளமை அல்லது முன்நிலையாக்குக கருவி கொண்டு மீளமைத்தால் எனக்கு தெரிவி.", "echo-pref-tooltip-mention": "என் பயனர் பக்கத்துக்கு யாராவது இணைப்புகள் இட்டால் எனக்குத் தெரிவிக்கவும்.", - "echo-error-no-formatter": "அறிவிப்புகளுக்கு எந்த வடிவமைப்பும் வரையறுக்கப்படவில்லை.", "notifications": "அறிவிப்புகள்", "tooltip-pt-notifications-alert": "{{GENDER:|Your}} அறிவிப்புகள்", + "echo-displaynotificationsconfiguration-enabled-default-new-users-legend": "புதிய பயனர்கள்", "echo-specialpage": "அறிவிப்புகள்", - "echo-anon": "அறிவிப்புகளைப் பெறுவதற்கு [$1 ஒரு கணக்கை உருவாக்குங்கள்] அல்லது [$2 உள்நுழையுங்கள்].", + "echo-specialpage-pagefilters-title": "அண்மையச் செயல்கள்", "echo-none": "உங்களுக்கு அறிவிப்பு ஏதும் இல்லை.", - "echo-more-info": "மேலதிக தகவல்", - "echo-feedback": "கருத்து", + "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|You}} இந்த பக்கத்தை பார்ப்பதில்லை \"$1\"", "notification-dynamic-actions-unwatch-confirmation-description": "{{GENDER:$3|You}}, [$2 this page] ஐ எப்போது வேண்டுமானாலும் பார்க்கலாம்.", "notification-dynamic-actions-watch": "{{GENDER:$3|Follow}} புதிய செயல்பாடு \"$1\"", "notification-dynamic-actions-watch-confirmation": "{{GENDER:$3|You}} இந்த பக்கத்தை பார்க்கிறார் \"$1", "notification-dynamic-actions-watch-confirmation-description": "{{GENDER:$3|You}}, [$2 this page] ஐ பார்ப்பதை எப்போது வேண்டுமானாலும் நிறுத்தலாம்", + "notification-link-text-expand-all": "விரிவாக்குக", + "notification-link-text-collapse-all": "சுருக்குக", "notification-link-text-view-message": "செய்தியினை பார்", "notification-link-text-view-mention": "குறித்திருப்பதைக்காண்க", "notification-link-text-view-changes": "மாற்றக்களை பார்", "notification-link-text-view-page": "பக்கத்தை பார்", + "notification-link-text-what-links-here": "இப்பக்கத்திற்குரிய அனைத்து இணைப்புகள்", + "notification-welcome-linktext": "வருக", "notification-link-text-view-edit": "தொகுப்பை பார்", + "notification-link-article-reminder": "பக்கத்தைப் பார்", "notification-header-reverted": "உங்களால் {{PLURAL:$4|$3 இல் செய்யப்பட்ட தொகுப்பு|$3இல் செய்யப்பட்ட தொகுப்புகள்}} $1ஆல் {{GENDER:$2|மீளமைக்கப்பட்டுள்ளது}}.", "notification-edit-talk-page-email-subject2": "$1 {{SITENAME}}இல் உங்களுக்கு ஒரு புதிய செய்தியினை விட்டுச்சென்றுள்ளார்", - "notification-edit-talk-page-email-batch-body-with-section": "$1 உங்களின் பேச்சுப்பக்கத்தில் ஒரு செய்தியினை விட்டுச்சென்றுள்ளார் \"$2\".", "notification-page-linked-email-subject": "{{SITENAME}}இல் உங்கள் பக்கம் இணைக்கப்பட்டுள்ளது", - "notification-reverted-email-subject2": "உங்களின் {{PLURAL:$3|தொகுப்பு|தொகுப்புகள்}} {{SITENAME}}இல் {{GENDER:$1|மீளமைக்கப்பட்டுள்ளது}}", + "notification-reverted-email-subject2": "உங்களின் {{PLURAL:$4|தொகுப்பு|தொகுப்புகள்}} {{SITENAME}}இல் {{GENDER:$2|மீளமைக்கப்பட்டுள்ளது}}", "notification-mention-email-subject": "$1 உங்களை {{SITENAME}}இல் குறிப்பிட்டுள்ளார்", - "echo-email-body-default": "{{SITENAME}} இல் உங்களுக்கு ஒரு புதிய அறிவிப்பு உள்ளது:\n\n$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-overlay-title": "<b>அறிவிப்புகள்</b>", - "echo-overlay-title-overflow": "<b>{{PLURAL:$1|அறிவிப்புகள்}}</b> ($2இல் பார்க்கப்படாத $1 காட்டப்படுகின்றது)", "echo-mark-all-as-read": "அனைத்தையும் படித்ததாய்க் குறித்துக் கொள்", + "echo-displaysnippet-title": "புதிய அறிவுப்புகள்", "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|ஒரு புதிய செய்தி|புதிய செய்திகள்}} உள்ளன", "echo-email-batch-body-intro-daily": "$1,\n{{SITENAME}}இல் உங்களுக்காக இன்றைய செயல்பாடுகளின் சுருக்கம் இதோ.", diff --git a/Echo/i18n/tay.json b/Echo/i18n/tay.json index 3f246e19..39ef8484 100644 --- a/Echo/i18n/tay.json +++ b/Echo/i18n/tay.json @@ -1,14 +1,13 @@ { "@metadata": { "authors": [ - "Translatealcd", "Akamycoco", - "Hitaypayan" + "Hitaypayan", + "Translatealcd" ] }, "prefs-echo": "Ssbaq", "prefs-emailsettings": "Zyusyo na e-meyo’ bruwiy", - "prefs-displaynotifications": "Pkt’aniy bbzyagan", "echo-pref-send-me": "Stwaniy kung:", "echo-pref-send-to": "Stwaniy squw:", "echo-pref-web": "Wangye’", @@ -16,7 +15,6 @@ "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’", @@ -30,8 +28,6 @@ "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’", diff --git a/Echo/i18n/tcy.json b/Echo/i18n/tcy.json index a07b59a9..6506dd74 100644 --- a/Echo/i18n/tcy.json +++ b/Echo/i18n/tcy.json @@ -1,10 +1,10 @@ { "@metadata": { "authors": [ - "VASANTH S.N.", - "Vishwanatha Badikana", "BHARATHESHA ALASANDEMAJALU", - "Kiranpoojary" + "Kiranpoojary", + "VASANTH S.N.", + "Vishwanatha Badikana" ] }, "prefs-echo": "ಸೂಚನೆಲು", diff --git a/Echo/i18n/te.json b/Echo/i18n/te.json index 4db3caae..3a0c22ed 100644 --- a/Echo/i18n/te.json +++ b/Echo/i18n/te.json @@ -9,11 +9,12 @@ "వైజాసత్య" ] }, - "echo-desc": "సూచన వ్యవస్థ", + "echo-desc": "ఘటనలు, సందేశాల గురించి తెలియజేసే వ్యవస్థ", "prefs-echo": "గమనింపులు", "prefs-emailsettings": "ఈ-మెయిల్ ఐచ్ఛికాలు", - "prefs-displaynotifications": "ప్రదర్శన ఐచ్ఛికాలు", - "prefs-echosubscriptions": "ఈ సంఘటనల గురించి నాకు తెలియచేయి", + "prefs-echosubscriptions": "ఈ సంఘటనల గురించి నాకు తెలియజేయి", + "prefs-echocrosswiki": "క్రాస్-వికీ గమనింపులు", + "prefs-blocknotificationslist": "సద్దుమణిగిన వాడుకరులు", "echo-pref-send-me": "నాకు పంపు:", "echo-pref-send-to": "పంపించు:", "echo-pref-email-format": "ఇమెయిల్ ఫార్మాట్:", @@ -25,57 +26,173 @@ "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": "కింది వాడుకరుల నుండి వచ్చే గమనింపులను చూపవద్దు.\n([[mw:Special:MyLanguage/Help:Notifications#mute|మరింత సమాచారం]])", "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-article-linked": "పేజి {{PLURAL:$1|లింకు|లింకులు}}", "echo-category-title-reverted": "మార్చు {{PLURAL:$1|మళ్ళింపు|మళ్ళింపులు}}", - "echo-category-title-mention": "{{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-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:|మీ}} సూచనలు", - "echo-specialpage": "సూచనలు", - "echo-anon": "సూచనలు పొందటానికి [$1 ఖాతా తెరవండి] లేదా [$2 లోనికి రండి]", - "echo-none": "మీకు ఏ సూచనలు లేవు", - "echo-more-info": "మరింత సమాచారం", - "echo-feedback": "ప్రతిస్పందన", + "echo-category-title-system-noemail": "{{PLURAL:$1|వ్యవస్థ}}", + "echo-category-title-user-rights": "{{PLURAL:$1|వాడుకరి హక్కుల మార్పు|వాడుకరి హక్కుల మార్పులు}}", + "echo-category-title-emailuser": "{{PLURAL:$1|ఇతర వాడుకరి నుండి ఈమెయిలు|ఇతర వాడుకరుల నుండి ఈమెయిళ్ళు}}", + "echo-category-title-article-reminder": "పేజీ {{PLURAL:$1|పునస్మరణ|పునస్మరణలు}}", + "echo-category-title-thank-you-edit": "దిద్దుబాట్ల {{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-pref-tooltip-thank-you-edit": "నేను మొదటి, పదవ, నూరవ.. దిద్దుబాటుకు చేరినపుడు నాకు తెలియపరచు.", + "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-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-pagination-range": "$1 - $2", + "echo-specialpage-pagefilters-title": "ఇటీవలి వ్యాపకాలు", + "echo-specialpage-pagefilters-subtitle": "చదవని గమనింపులు గల పేజీలు", + "notificationsmarkread-legend": "గమనింపును చదివేసినట్లుగా గుర్తు పెట్టు", + "echo-none": "మీకు గమనింపులేమీ లేవు.", + "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": "\"$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 హెచ్చరికలను}} చూడండి", + "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 <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-body-edit-user-talk-with-section": "$1", "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-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|ప్రస్తావించారు}}.", + "notification-header-mention-user-talkpage-v2": "$1, $4</strong> {{GENDER:$5|గారి}} <strong>వాడుకరి చర్చా పేజీ లోని \"<strong>$6</strong>\" లో {{GENDER:$3|మిమ్మల్ని}} {{GENDER:$2|ప్రస్తావించారు}}.", + "notification-header-mention-user-talkpage-nosection": "$1, $4</strong> {{GENDER:$5|గారి}} <strong>వాడుకరి చర్చా పేజీలో {{GENDER:$3|మిమ్మల్ని}} {{GENDER:$2|ప్రస్తావించారు}}.", + "notification-header-mention-agent-talkpage": "$1 గారు, <strong>{{GENDER:$2|తన|తన|తన}} చర్చా పేజీ లోని \"<strong>$4</strong>\" లో {{GENDER:$3|మిమ్మల్ని}} {{GENDER:$2|ప్రస్తావించారు}}.", + "notification-header-mention-agent-talkpage-nosection": "$1 గారు, <strong>{{GENDER:$2|తన|తన|తన}} చర్చా పేజీలో {{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": "$3 గురించిన {{GENDER:$2|మీ}} ప్రస్తావనను, వారు అజ్ఞాత అయినందున పంపించలేకపోయాం.", + "notification-header-mention-failure-too-many": "$3 కంటే ఎక్కువ మంది {{PLURAL:$3|వాడుకరిని|వాడుకరులను}} ప్రస్తావించేందుకు {{GENDER:$2|మీరు}} ప్రయత్నించారు. ఆ పరిమితి దాటిన ప్రస్తావనలను పంపించ లేదు.", + "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-header-mention-success": "$3 గురించిన {{GENDER:$2|మీ}} ప్రస్తావనను పంపించాం.", + "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": "<strong>$4</strong> చర్చా పేజీలో {{GENDER:$2|మీరు చేసిన}} {{PLURAL:$3|ప్రస్తావనను|$3 ప్రస్తావనలను}} {{PLURAL:$3|పంపించాం}}.", + "notification-compact-header-mention-success": "<strong>{{GENDER:$2|మీరు వీరిని ప్రస్తావించారు}}:</strong> $3", + "notification-header-mention-status-bundle": "<strong>$4</strong> చర్చా పేజీలో {{GENDER:$2|మీరు చేసిన}} ప్రస్తావనల గురించిన {{PLURAL:$3|ఒక గమనింపు|$3 గమనింపులు}}: {{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": "కింది {{PLURAL:$3|సమూహంలో|సమూహాల్లో}} {{GENDER:$4|మీ}} సభ్యత్వం ముగిసే గడువును {{GENDER:$1|మార్చారు}}: $2.", + "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|మీ}} తొట్ట తొలి దిద్దుబాటు {{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-header-reverted": "{{PLURAL:$4|$3 పై మీ మార్పు|$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-reverted-email-subject2": "{{SITENAME}} వద్ద మీ {{PLURAL:$3|మార్పు|మార్పులు}} {{GENDER:$1|వెనక్కి మళ్ళించ}} {{PLURAL:$3|బడింది|బడ్డాయి}}", - "notification-mention-email-subject": "$1 మిమ్మల్ని {{SITENAME}} లో {{GENDER:$1|పేర్కొన్నారు}}.", - "notification-user-rights-email-subject": "{{SITENAME}}లో మీ వాడుకరి హక్కులు మారినవి", - "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-overlay-link": "అన్ని సూచనలు", - "echo-overlay-title": "<b>సూచనలు</b>", - "echo-overlay-title-overflow": "<b> {{PLURAL:$1|సూచనలు}}</b> (చదవని $2 లో $1 వది)", - "echo-mark-all-as-read": "అన్నిటినీ చదివినవిగా గుర్తించు", + "notification-link-article-reminder": "పేజీని చూడు", + "notification-header-reverted": "మీరు {{PLURAL:$4|<strong>$3</strong> లో చేసిన దిద్దుబాటును|<strong>$3</strong> లో చేసిన దిద్దుబాట్లను}} {{GENDER:$2|వెనక్కి తిప్పారు}}.", + "notification-body-reverted": "$1", + "notification-header-emailuser": "$1 మీకో ఈమెయిలు {{GENDER:$2|పంపించారు}}.", + "notification-edit-talk-page-email-subject2": "{{SITENAME}}లో $1 {{GENDER:$3|మీ}}కొక సందేశం {{GENDER:$2|పెట్టారు}}.", + "notification-page-linked-email-subject": "{{SITENAME}}లో {{GENDER:$3|మీరు}} సృష్టించిన ఒక పేజీకి లింకు చేసారు", + "notification-reverted-email-subject2": "{{SITENAME}}లో {{GENDER:$3|మీరు}} చేసిన {{PLURAL:$4|మార్పును|మార్పులను}} {{GENDER:$2|వెనక్కి మళ్ళించారు|వెనక్కి మళ్ళించారు}}", + "notification-mention-email-subject": "{{SITENAME}}లో $1, {{GENDER:$3|మిమ్మల్ని}} {{GENDER:$2|ప్రస్తావించారు}}", + "notification-user-rights-email-subject": "{{SITENAME}}లో {{GENDER:$3|మీ}} వాడుకరి హక్కులు మారాయి", + "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-specialmute-label-mute-notifications": "ఈ వాడుకరి నుండి వచ్చిన మరిన్ని గమనింపులు", + "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-alert-text-only": "హెచ్చరికలు", + "echo-notification-notice-text-only": "సూచనలు", + "echo-overlay-link": "గమనింపులన్నీ", + "echo-overlay-title": "<b>గమనింపులు</b>", + "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": "మరిన్ని ఫలితాలు తెచ్చి చూపడంలో దోషం జరిగింది.", - "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": "అన్ని సూచనలు చూడు" + "notification-bundle-header-edit-user-talk-v2": "<strong>{{GENDER:$3|మీ}} చర్చా పేజీలో</strong> {{PLURAL:$1|ఒక కొత్త సందేశం|$1 కొత్త సందేశాలు|100=99+ కొత్త సందేశాలు}}.", + "echo-email-batch-bullet": "•", + "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": "సూచనలన్నిటినీ చూడండి", + "notification-header-foreign-alert": "మరో {{PLURAL:$5|వికీ|$5 వికీల}} నుండి ఇంకా హెచ్చరికలు ఉన్నాయి", + "notification-header-foreign-notice": "మరో {{PLURAL:$5|వికీ|$5 వికీల}} నుండి ఇంకా సూచనలు ఉన్నాయి", + "notification-header-foreign-all": "మరో {{PLURAL:$5|వికీ|$5 వికీల}} నుండి ఇంకా గమనింపులు ఉన్నాయి", + "echo-foreign-wiki-lang": "$1 - $2", + "echo-badge-count": "{{PLURAL:$1|$1|100={{formatnum:99}}+}}" } diff --git a/Echo/i18n/tg-cyrl.json b/Echo/i18n/tg-cyrl.json index 22c76bc8..c319420c 100644 --- a/Echo/i18n/tg-cyrl.json +++ b/Echo/i18n/tg-cyrl.json @@ -6,11 +6,11 @@ ] }, "echo-new-messages": "Шумо паёми нав доред.", + "echo-category-title-system-emailonly": "{{PLURAL:$1|Система|Системаҳо}}", "tooltip-pt-notifications-alert": "Огоҳии шумо", "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" + "notification-inbox-filter-all": "Ҳама" } diff --git a/Echo/i18n/th.json b/Echo/i18n/th.json index d6f8721f..2a89cec6 100644 --- a/Echo/i18n/th.json +++ b/Echo/i18n/th.json @@ -1,128 +1,130 @@ { "@metadata": { "authors": [ - "Nullzero", - "Supasate", - "Horus", - "Bluegram", - "Ans", "Aefgh39622", - "Octahedron80" + "Ans", + "Bluegram", + "Horus", + "Nullzero", + "Octahedron80", + "Patsagorn Y.", + "Supasate" ] }, - "echo-desc": "ระบบสำหรับแจ้งความผู้ใช้เกี่ยวกับเหตุการณ์และสาร", - "prefs-echo": "การแจ้งความ", + "echo-desc": "ระบบสำหรับแจ้งเตือนผู้ใช้เกี่ยวกับเหตุการณ์และข้อความ", + "prefs-echo": "การแจ้งเตือน", "prefs-emailsettings": "ตัวเลือกอีเมล", - "prefs-displaynotifications": "ตัวเลือกการแสดงผล", - "prefs-echosubscriptions": "แจ้งความให้ฉันทราบเกี่ยวกับเหตุการณ์เหล่านี้", - "prefs-echocrosswiki": "การแจ้งความข้ามวิกิ", + "prefs-echosubscriptions": "แจ้งเตือนฉันเกี่ยวกับเหตุการณ์เหล่านี้", + "prefs-echocrosswiki": "การแจ้งเตือนข้ามวิกิ", "prefs-blocknotificationslist": "ทำให้ผู้ใช้เงียบ", - "echo-pref-send-me": "ส่งหาฉัน:", + "prefs-echopollupdates": "การแจ้งเตือนสด", + "echo-pref-show-poll-updates": "แสดงการแจ้งเตือนทันทีที่เข้ามา", + "echo-pref-show-poll-updates-help": "แสดงจำนวนการแจ้งเตือนที่ยังไม่ได้อ่านในแถบชื่อเรื่อง และแสดงการแจ้งเตือนส่วนเล็ก ๆ ทันทีที่เข้ามา", + "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": "ไม่แสดงการแจ้งความจากผู้ใช้เหล่านี้\n([[mw:Special:MyLanguage/Help:Notifications#mute|เรียนรู้เพิ่ม]])", - "echo-pref-beta-feature-cross-wiki-message": "การแจ้งความแบบเพิ่มสมรรถนะ", - "echo-pref-beta-feature-cross-wiki-description": "ดูและจัดระเบียบการแจ้งความให้ง่ายขึ้น รวมการแจ้งความข้ามวิกิ ซึ่งอนุญาตให้คุณเห็นสารจากวิกิอื่นได้ (คุณต้องเปิดใช้งานคุณลักษณะ beta ในวิกินั้นก่อนเพื่อรับการแจ้งความข้ามวิกิในวิกินั้น ๆ)", + "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": "ไม่ต้องแสดงการแจ้งเตือนจากผู้ใช้เหล่านี้\n([[mw:Special:MyLanguage/Help:Notifications#mute|เรียนรู้เพิ่มเติม]])", "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-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-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-system-noemail": "{{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": "การแจ้งความ", + "echo-category-title-thank-you-edit": "{{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-pref-tooltip-thank-you-edit": "เตือนฉันเมื่อแก้ไขครบ 1, 10, 100 ... ครั้ง", + "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": "แสดงการกำหนดค่าการแจ้งเตือน", + "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-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": "การแจ้งเตือน: ทำเครื่องหมายว่าอ่านแล้ว", + "echo-specialpage-markasread-invalid-id": "ไอดีเหตุการณ์ไม่ถูกต้อง", "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": "ไม่สามารถดึงการแจ้งความ", - "echo-notification-placeholder": "ไม่มีการแจ้งความ", - "echo-notification-placeholder-filters": "ไม่มีการแจ้งความตรงตามเกณฑ์เหล่านี้", - "echo-notification-loginrequired": "คุณต้องล็อกอินเพื่อดูการแจ้งของคุณ", - "echo-notification-popup-loginrequired": "กรุณาล็อกอินเพื่อดูการแจ้งของคุณ", + "notificationsmarkread-legend": "ทำเครื่องหมายการแจ้งเตือนว่าอ่านแล้ว", + "echo-none": "คุณไม่มีการแจ้งเตือน", + "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": "หยุดเฝ้าดูกิจกรรมใหม่ทาง \"$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 หน้านี้]ได้ทุกเมื่อ", + "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": "ดู $1 การเตือน", - "notification-link-text-expand-notice-count": "ดูประกาศ", - "notification-link-text-expand-all-count": "ดู $1 การแจ้งความ", + "notification-link-text-expand-alert-count": "ดูคำเตือน $1 รายการ", + "notification-link-text-expand-notice-count": "ดูประกาศ $1 รายการ", + "notification-link-text-expand-all-count": "ดูการแจ้งเตือน $1 รายการ", "notification-link-text-collapse-all": "ยุบ", - "notification-link-text-view-message": "ดูสาร", + "notification-link-text-view-message": "ดูข้อความ", "notification-link-text-view-mention": "ดูการกล่าวถึง", - "notification-link-text-view-mention-failure": "ดูการกล่าวถึง", - "notification-link-text-view-changes": "{{GENDER:$1|}}ดูการเปลี่ยนแปลง", + "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|}}ส่งสารถึง{{GENDER:$3|}}คุณ", - "notification-compact-header-edit-user-talk-with-section": "$1 {{GENDER:$2|}}ส่งสารถึง{{GENDER:$3|}}คุณใน \"<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:$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-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:$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 กล่าวถึงคุณในหน้า<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-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 กล่าวถึงคุณในหน้าคุย <strong>$4</strong>", "notification-header-mention-failure-user-unknown": "ไม่ส่งการกล่าวถึง <strong>$3</strong> ของคุณเพราะหาผู้ใช้ไม่พบ", "notification-header-mention-failure-user-anonymous": "ไม่ส่งการกล่าวถึง <strong>$3</strong> ของคุณเพราะผู้ใช้นั้นเป็นผู้ใช้นิรนาม", @@ -137,23 +139,22 @@ "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-welcome": "{{GENDER:$2|ยินดีต้อนรับ}}สู่{{SITENAME}} $1! เราดีใจที่{{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": "คุณเพิ่งแก้ไขครบ 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-1-edit": "{{GENDER:$2|คุณ}}เพิ่งแก้ไขครั้งแรก ขอบคุณและยินดีต้อนรับ!", + "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 ครั้ง ขอบคุณมาก ๆ!", "notification-header-thank-you-100000-edit": "คุณเพิ่งแก้ไขครบ 100,000 ครั้ง ขอบคุณสำหรับการเข้ามีส่วนร่วมที่มหัศจรรย์!", "notification-header-thank-you-1000000-edit": "คุณเพิ่งแก้ไขครบ 1,000,000 ครั้ง ขอบคุณสำหรับการเข้ามีส่วนร่วมที่มหัศจรรย์!", - "notification-link-thank-you-edit": "การแก้ไขของคุณ", + "notification-link-thank-you-edit": "การแก้ไข{{GENDER:$1|ของคุณ}}", "notification-link-text-view-edit": "ดูการแก้ไข", "notification-link-article-reminder": "ดูหน้า", "notification-header-reverted": "การแก้ไขใน<strong>$3</strong>ของคุณถูกย้อน", - "notification-header-emailuser": "$1 ส่งอีเมลถึงคุณ", + "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\":", "notification-page-linked-email-subject": "หน้าที่คุณสร้างถูกโยงบน {{SITENAME}}", "notification-reverted-email-subject2": "การแก้ไขของคุณถูกย้อนใน {{SITENAME}}", "notification-mention-email-subject": "$1 กล่าวถึงคุณบน {{SITENAME}}", @@ -169,30 +170,28 @@ "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": "หากต้องการควบคุมอีเมลที่เราส่งหาคุณ ให้ตรวจสอบการตั้งค่าของคุณ:", "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)|ประกาศ ($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> (กำลังแสดงที่ยังไม่ได้อ่าน $1 จาก $2 การแจ้งความ)", + "echo-overlay-link": "การแจ้งเตือนทั้งหมด", + "echo-overlay-title": "<b>การแจ้งเตือน</b>", "echo-mark-all-as-read": "ทำเครื่องหมายทั้งหมดว่าอ่านแล้ว", - "echo-mark-all-as-read-confirmation": "ทำเครื่องหมาย $1 การแจ้งความว่าอ่านแล้ว", + "echo-mark-all-as-read-confirmation": "ทำเครื่องหมายการแจ้งเตือน $1 รายการว่าอ่านแล้ว", "echo-mark-wiki-as-read": "ทำเครื่องหมายทั้งหมดว่าอ่านแล้วในวิกิที่เลือก: $1", + "echo-displaysnippet-title": "การแจ้งเตือนใหม่", "echo-date-today": "วันนี้", "echo-date-yesterday": "เมื่อวานนี้", - "echo-load-more-error": "เกิดข้อผิดพลาดขณะไปนำผลลัพธ์มาเพิ่ม", - "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": "ดูการแจ้งความทั้งหมด", - "notification-header-foreign-alert": "การเตือนเพิ่มจาก $5 วิกิอื่น", - "notification-header-foreign-notice": "ประกาศเพิ่มจาก $5 วิกิอื่น", - "notification-header-foreign-all": "การแจ้งความเพิ่มจาก $5 วิกิอื่น" + "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}} สำหรับคุณ", + "echo-email-batch-body-intro-weekly": "สวัสดี $1\nนี่คือสรุปกิจกรรมของสัปดาห์นี้ใน {{SITENAME}} สำหรับคุณ", + "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/ti.json b/Echo/i18n/ti.json new file mode 100644 index 00000000..c441c13b --- /dev/null +++ b/Echo/i18n/ti.json @@ -0,0 +1,25 @@ +{ + "@metadata": { + "authors": [ + "Joanmp17" + ] + }, + "prefs-echo": "መፍለጢታት", + "echo-pref-email": "ኢሜይል", + "echo-learn-more": "ተወሳኺ ፍለጥ", + "notifications": "መፍለጢታት", + "echo-specialpage": "መፍለጢታት", + "echo-specialpage-pagination-numnotifications": "$1 {{PLURAL:$1|መፍለጢ|መፍለጢታት}}", + "notification-link-text-expand-all": "ዘርግሕ", + "notification-link-text-collapse-all": "ኣክብ", + "notification-welcome-linktext": "እንኳዕ ብደሓን መጻኻ", + "notification-timestamp-today": "ሎሚ", + "notification-timestamp-yesterday": "ትማሊ", + "notification-inbox-filter-all": "ኩሉ", + "echo-overlay-link": "ኩሉ መፍለጢታት", + "echo-overlay-title": "<b>መፍለጢታት</b>", + "echo-displaysnippet-title": "ሓድሽ መፍለጢ", + "echo-date-today": "ሎሚ", + "echo-date-yesterday": "ትማሊ", + "echo-email-batch-link-text-view-all-notifications": "ኩሉ መፍለጢታት ርኣይ" +} diff --git a/Echo/i18n/tl.json b/Echo/i18n/tl.json index ff387d6e..1fab9941 100644 --- a/Echo/i18n/tl.json +++ b/Echo/i18n/tl.json @@ -2,17 +2,17 @@ "@metadata": { "authors": [ "AnakngAraw", - "Sky Harbor", - "TheSleepyhollow02", + "Brazal.dang", + "Emem.calist", "Jojit fb", "Leeheonjin", - "Emem.calist" + "Sky Harbor", + "TheSleepyhollow02" ] }, "echo-desc": "Sistema ng pagpapabatid", "prefs-echo": "Mga pagpapabatid", "prefs-emailsettings": "Mga kagustuhan para sa e-liham", - "prefs-displaynotifications": "Mga kagustuhan sa pagpapakita", "prefs-echosubscriptions": "Ipabatid ako tungkol sa mga pangyayaring ito", "echo-pref-send-me": "Ipadala sa akin:", "echo-pref-send-to": "Ipadala kay:", @@ -36,14 +36,10 @@ "echo-pref-tooltip-article-linked": "Ipabatid sa akin kung may kumawing sa pahinang inilika ko mula sa isang pahina ng artikulo.", "echo-pref-tooltip-mention": "Ipabatid sa aking kung may kumawing sa aking pahina ng tagagamit mula sa anumang pahinang usapan.", "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 mag-login upang makita ang iyong mga pabatid.", "notification-link-text-view-message": "Ipakita ang mensahe", "notification-link-text-view-mention": "Ipakita ang pagbanggit", @@ -55,17 +51,14 @@ "notification-link-text-view-edit": "Ipakita ang pagbabago", "notification-link-article-reminder": "Paki-Lathala ang pahina", "notification-header-reverted": "Ang iyong {{PLURAL:$4|edit noong $3 ay|mga edit noong $3 ay}} {{GENDER:$2|ipinanumbalik}} ni $1.", - "notification-edit-talk-page-email-subject2": "{{GENDER:$1|Nag-iwan}} si $1 ng mensahe para sa iyo sa {{SITENAME}}", - "notification-edit-talk-page-email-batch-body-with-section": "{{GENDER:$1|Nag-iwan}} si $1 ng mensahe sa iyong pahinang usapan sa \"$2\".", + "notification-edit-talk-page-email-subject2": "{{GENDER:$2|Nag-iwan}} si $1 ng mensahe para sa iyo sa {{SITENAME}}", "notification-page-linked-email-subject": "Ikinawing ang pahina mo sa {{SITENAME}}", - "notification-mention-email-subject": "{{GENDER:$1|Binanggit}} ka ni $1 sa {{SITENAME}}", + "notification-mention-email-subject": "{{GENDER:$2|Binanggit}} ka ni $1 sa {{SITENAME}}", "notification-user-rights-email-subject": "Nagbago ang iyong mga karapatang pantagagamit sa {{SITENAME}}", - "echo-email-body-default": "Mayroon kang isang bagong pagpapabatid doon sa {{SITENAME}}:\n\n$1", - "echo-email-footer-default": "$2\n\nUpang makontrol mo ang mga e-liham na ipinapadala namin sa iyo, tingnan ang iyong mga kagustuhan: {{canonicalurl:{{#special:Preferences}}#mw-prefsection-echo}}\n\n$1", "echo-overlay-link": "Lahat ng mga pabatid", "echo-overlay-title": "<b>Mga pabatid</b>", - "echo-overlay-title-overflow": "<b>{{PLURAL:$1|Mga pabatid}}</b> (ipinapakita ang $1 ng $2 hindi pa nababasa)", "echo-mark-all-as-read": "Tatakan ang lahat bilang nabasa na", + "echo-displaysnippet-title": "Bagong pabatid", "echo-date-today": "Ngayon", "echo-date-yesterday": "Kahapon", "echo-email-batch-subject-daily": "May {{PLURAL:$2|bago kang pabatid|mga bago kang pabatid}} sa {{SITENAME}}", diff --git a/Echo/i18n/tly.json b/Echo/i18n/tly.json new file mode 100644 index 00000000..a580afce --- /dev/null +++ b/Echo/i18n/tly.json @@ -0,0 +1,9 @@ +{ + "@metadata": { + "authors": [ + "Patriot Kur" + ] + }, + "echo-pref-email": "Enomə", + "notification-inbox-filter-read": "Bahand" +} diff --git a/Echo/i18n/tr.json b/Echo/i18n/tr.json index b06e1b00..920b4ecc 100644 --- a/Echo/i18n/tr.json +++ b/Echo/i18n/tr.json @@ -1,41 +1,49 @@ { "@metadata": { "authors": [ + "AliceJ", + "Arystanbek", + "BaRaN6161 TURK", + "Diyapazon", + "Ece Alpdeniz", "Emperyan", + "HakanIST", "Incelemeelemani", "Joseph", - "Meelo", - "Rapsar", - "Sayginer", - "Violetanka", - "Arystanbek", - "Stultiwikia", "KorkmazO", - "McAang", - "HakanIST", + "Kumkumuk", "Macofe", - "Sadrettin", + "McAang", + "Meelo", "MrSchipunov", "Nemo bis", + "Rapsar", + "Sadrettin", + "Sayginer", "Serkanland", - "Ece Alpdeniz", - "Kumkumuk", - "AliceJ", - "Diyapazon" + "Stultiwikia", + "Superyetkin", + "ToprakM", + "Violetanka" ] }, "echo-desc": "Kullanıcıları olaylar ve mesajlar hakkında bilgilendiren sistem", "prefs-echo": "Bildirimler", "prefs-emailsettings": "E-posta seçenekleri", - "prefs-displaynotifications": "Görüntüleme seçenekleri", "prefs-echosubscriptions": "Bu olaylar hakkında bana bildirim gönder", "prefs-echocrosswiki": "Vikilerarası bildirimler", "prefs-blocknotificationslist": "Sessize alınmış kullanıcılar", + "prefs-mutedpageslist": "Sayfa bağlantısı bildirimleri için sessiz sayfalar", + "prefs-echopollupdates": "Canlı bildirimler", + "echo-mobile-notifications-filter-title": "Bildirimleri filtrele", + "echo-pref-show-poll-updates": "Yeni bildirimleri geldikçe görüntüle", + "echo-pref-show-poll-updates-help": "Başlık çubuğunda okunmamış bildirim sayısını gösterin ve her bildirim geldiğinde hemen bir pasajını gösterin.", "echo-pref-send-me": "E-posta bildirim tercihi:", "echo-pref-send-to": "Şuraya gönder:", "echo-pref-email-format": "E-posta biçimi:", "echo-pref-web": "Web", "echo-pref-email": "E-posta", + "echo-pref-push": "Uygulamalar", "echo-pref-email-frequency-never": "Bana e-posta bildirimi gönderme", "echo-pref-email-frequency-immediately": "Her yeni bildirimi tek tek gönder", "echo-pref-email-frequency-daily": "Bildirimlerin günlük özetini gönder", @@ -44,8 +52,8 @@ "echo-pref-email-format-plain-text": "Düz metin", "echo-pref-cross-wiki-notifications": "Diğer vikilerden bildirimleri 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-pref-notifications-page-linked-title-muted-list": "Bu sayfaları \"Sayfa bağlantısı\" bildirimlerini görüntüleme. ([[mw:Special:MyLanguage/Help:Notifications#mute|daha fazla bilgi edinin]])", + "echo-pref-dont-email-read-notifications": "Özet e-postalara okundu bildirimleri eklemeyin", "echo-learn-more": "Daha fazla bilgi", "echo-log": "Genel günlük", "echo-new-messages": "Yeni mesajınız var", @@ -57,17 +65,26 @@ "echo-category-title-mention-success": "Başarılı {{PLURAL:$1|bahsetme|bahsetmeler}}", "echo-category-title-other": "{{PLURAL:$1|Diğer}}", "echo-category-title-system": "{{PLURAL:$1|Sistem}}", + "echo-category-title-system-noemail": "{{PLURAL:$1|Sistem}}", + "echo-category-title-system-emailonly": "{{PLURAL:$1|Sistem}}", "echo-category-title-user-rights": "{{PLURAL:$1|Kullanıcı hakları değişikliği|Kullanıcı hakları değişiklikleri}}", "echo-category-title-emailuser": "{{PLURAL:$1|Diğer kullanıcıdan gelen e-posta|Diğer kullanıcılardan gelen e-postalar}}", + "echo-category-title-article-reminder": "Sayfa {{PLURAL:$1|hatırlatıcı|hatırlatıcı}}", + "echo-category-title-thank-you-edit": "{{PLURAL:$1|Kilometre taşlarını}} düzenle", + "echo-category-title-watchlist": "İzlenen sayfada düzenleme", + "echo-category-title-minor-watchlist": "İzlenen sayfada küçük düzenleme", "echo-pref-tooltip-edit-user-talk": "Bir kullanıcı mesaj sayfamı değiştirdiğinde bana bildirim gönder.", - "echo-pref-tooltip-article-linked": "Bir kullanıcı, bir maddeden benim oluşturduğum bir sayfaya bağlantı verdiğinde bana bildirim gönder.", + "echo-pref-tooltip-article-linked": "Bir kullanıcı, bir sayfadan benim oluşturduğum bir sayfaya bağlantı verdiğinde bana bildirim gönder.", "echo-pref-tooltip-reverted": "Yaptığım bir değişiklik geri alındığı takdirde bana bildirim gönder.", "echo-pref-tooltip-mention": "Kullanıcı sayfama bağlantı verildiğinde bana bildirim gönder.", "echo-pref-tooltip-mention-failure": "Kullanıcılardan bahsetmelerim başarısız olduğunda bana bildirim gönder.", "echo-pref-tooltip-mention-success": "Bir kullanıcıdan bahsettiğimde bana bildirim gönder.", "echo-pref-tooltip-user-rights": "Bir kullanıcı, benim kullanıcı haklarımı değiştirirse bana bildirim gönder.", "echo-pref-tooltip-emailuser": "Bir kullanıcı tarafıma e-posta gönderirse bana bildirim gönder.", - "echo-error-no-formatter": "Hiçbir bildirim için biçim tanımlanmamış.", + "echo-pref-tooltip-article-reminder": "Sorduğumda bu sayfa hakkında beni bilgilendir.", + "echo-pref-tooltip-thank-you-edit": "1., 10., 100., ..., değişikliğime ulaştığımda bana bildirim gönder.", + "echo-pref-tooltip-watchlist": "Birisi izleme listemdeki bir sayfada (küçük olmayan) düzenleme yaptığında bana bildir.", + "echo-pref-tooltip-minor-watchlist": "Birisi izleme listemdeki bir sayfada küçük bir düzenleme yaptığında bana bildir.", "notifications": "Bildirimler", "tooltip-pt-notifications-alert": "{{GENDER:|Uyarılarınız}}", "tooltip-pt-notifications-notice": "Bildirimleriniz", @@ -78,7 +95,6 @@ "echo-displaynotificationsconfiguration-sorting-by-section-legend": "Hangi bildirim türü hangi bölümde listelenecek", "echo-displaynotificationsconfiguration-available-notification-methods-header": "İzin verilen bildirim yöntemleri", "echo-displaynotificationsconfiguration-available-notification-methods-by-category-legend": "Her kategori için hangi bilidirim yöntemleri desteklenecek", - "echo-displaynotificationsconfiguration-available-notification-methods-by-type-legend": "Hangi bildirim yöntemleri her tür için desteklenecek; sadece tercihlerde gizlenmiş kategorilerdeki türlere uygulanır.", "echo-displaynotificationsconfiguration-enabled-default-header": "Varsayılan olarak etkin", "echo-displaynotificationsconfiguration-enabled-default-existing-users-legend": "Mevcut kullanıcılar", "echo-displaynotificationsconfiguration-enabled-default-new-users-legend": "Yeni kullanıcılar", @@ -88,14 +104,13 @@ "echo-specialpage-section-markread": "Grubu okunmuş olarak işaretle", "echo-specialpage-markasread": "Bildirim: Okundu olarak İşaretle", "echo-specialpage-markasread-invalid-id": "Geçersiz olay kimliği", + "echo-specialpage-pagefilterwidget-aria-label": "Viki ve sayfa başlığına göre filtrele", + "echo-specialpage-special-help-menu-widget-aria-label": "Ek seçenekler ve Bildirim tercihleri.", "echo-specialpage-pagination-numnotifications": "$1 {{PLURAL:$1|bildirim|bildirim}}", "echo-specialpage-pagefilters-title": "Son hareketler", "echo-specialpage-pagefilters-subtitle": "Okunmamış bildirim bulunan sayfalar", "notificationsmarkread-legend": "Bilidirimi okunmuş olarak işaretle", - "echo-anon": "Bildirimlere ulaşabilmek için, [$1 hesap oluşturun] ya da [$2 giriş yapın].", "echo-none": "Bildiriminiz bulunmuyor.", - "echo-more-info": "Daha fazla bilgi", - "echo-feedback": "Geri bildirim", "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.", @@ -106,6 +121,18 @@ "echo-notification-markasunread": "Okunmamış olarak işaretle", "echo-notification-markasread-tooltip": "Okunmuş olarak işaretle", "echo-notification-more-options-tooltip": "Daha fazla seçenek", + "notification-dynamic-actions-mute-page-linked": "\"$1\" sayfasındaki bağlantı bildirimlerini {{GENDER:$2|sessize al}}", + "notification-dynamic-actions-mute-page-linked-confirmation": "\"$1\" sayfası için \"Sayfa bağlantısı\" bildirimleri artık devre dışı", + "notification-dynamic-actions-mute-page-linked-confirmation-description": "Sessiz sayfalarınızı istediğiniz zaman [$1 tercihlerinizden] {{GENDER:$2|yönetebilirsiniz}}.", + "notification-dynamic-actions-unmute-page-linked": "\"$1\" sayfasındaki bağlantı bildirimlerini {{GENDER:$2|sesi aç}}", + "notification-dynamic-actions-unmute-page-linked-confirmation": "\"$1\" sayfası için \"Sayfa bağlantısı\" bildirimleri artık etkin", + "notification-dynamic-actions-unmute-page-linked-confirmation-description": "Sesli sayfalarınızı istediğiniz zaman [$1 tercihlerinizden] {{GENDER:$2|yönetebilirsiniz}}.", + "notification-dynamic-actions-unwatch": "\"$1\" üzerindeki yeni etkinliği izlemeyi {{GENDER:$3|bırakın}}", + "notification-dynamic-actions-unwatch-confirmation": "{{GENDER:$3|Siz}} artık \"$1\" sayfasını izlemiyorsunuz", + "notification-dynamic-actions-unwatch-confirmation-description": "{{GENDER:$3|Siz}}, istediğiniz zaman [$2 bu sayfayı] izleyebilirsiniz.", + "notification-dynamic-actions-watch": "\"$1\" üzerindeki yeni etkinlik {{GENDER:$3|izleyin}}", + "notification-dynamic-actions-watch-confirmation": "{{GENDER:$3|Siz}} şimdi \"$1\" sayfasını izliyorsunuz", + "notification-dynamic-actions-watch-confirmation-description": "{{GENDER:$3|Siz}}, [$2 bu sayfada] izlemeyi her zaman durdurabilirsiniz.", "notification-link-text-expand-all": "Genişlet", "notification-link-text-expand-alert-count": "{{PLURAL:$1|$1 uyarı|$1 uyarı}} göster", "notification-link-text-expand-notice-count": "{{PLURAL:$1|$1 bildirim|$1 bildirim}} göster", @@ -119,25 +146,46 @@ "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-compact-header-edit-user-talk-with-section": "$1 {{GENDER:$3|size}} \"<strong>$4</strong>\" mesajını {{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.", + "notification-bundle-header-page-linked": "{{PLURAL:$5|$5 sayfadan|100=99+ sayfadan}}, <strong>$3</strong> sayfasına bağlantı verildi.", + "notification-header-article-reminder": "{{GENDER:$2|Size}} hatırlatılmasını istediğiniz bir sayfası <strong>$3</strong>", "notification-link-text-what-links-here": "Bu sayfaya verilen tüm bağlantılar", "notification-header-mention-other": "$1, <strong>$4</strong> sayfasının \"<strong>$5</strong>\" başlığında {{GENDER:$3|sizden}} {{GENDER:$2|bahsetti}}.", - "notification-header-mention-other-nosection": "$1, <strong>$4</strong> sayfasıda {{GENDER:$3|sizden}} {{GENDER:$2|bahsetti}}.", + "notification-header-mention-other-nosection": "$1, <strong>$4</strong> sayfasında {{GENDER:$3|sizden}} {{GENDER:$2|bahsetti}}.", "notification-header-mention-user-talkpage-v2": "$1, '''$4 {{GENDER:$5|kulanıcısının}} mesaj sayfasının''' \"'''$6'''\" başlığında {{GENDER:$3|sizden}} {{GENDER:$2|bahsetti}}.", "notification-header-mention-user-talkpage-nosection": "$1, '''$4 {{GENDER:$5|kulanıcısının}} mesaj sayfasında''' {{GENDER:$3|sizden}} {{GENDER:$2|bahsetti}}.", "notification-header-mention-agent-talkpage": "$1, <strong>$2 kullanıcısının mesaj sayfasındaki</strong> \"<strong>$4</strong>\" başlığında {{GENDER:$3|sizden}} {{GENDER:$2|bahsetti}}.", "notification-header-mention-agent-talkpage-nosection": "$1, <strong>{{GENDER:$2|kendi mesaj sayfasında}}</strong> {{GENDER:$3|sizden}} {{GENDER:$2|bahsetti}}.", "notification-header-mention-article-talkpage": "$1, <strong>$4</strong> tartışma sayfasının \"<strong>$5</strong>\" başlığında {{GENDER:$3|sizden}} {{GENDER:$2|bahsetti}}.", "notification-header-mention-article-talkpage-nosection": "$1, <strong>$4</strong> sayfasının tartışmasında {{GENDER:$3|sizden}} {{GENDER:$2|bahsetti}}.", + "notification-header-mention-failure-user-unknown": "Kullanıcı bulunamadığı için {{GENDER:$2|Sizin}} <strong>$3</strong> bahsedilmedi.", + "notification-header-mention-failure-user-anonymous": "Kullanıcı anonim olduğu için {{GENDER:$2|size}} <strong>$3</strong> bahsedilmedi.", + "notification-header-mention-failure-too-many": "{{GENDER:$2|Siz}}, $3'den fazla {{PLURAL:$3|kullanıcı|kullanıcı}} bahsetmeye çalıştınız. Bu sınırın üzerindeki tüm ifadeler gönderilmedi.", + "notification-header-mention-failure-bundle": "{{PLURAL:$3|Bir bahsetme|$3 bahsetme}} <strong>$4</strong> {{GENDER:$2|yaptınız}} tartışma sayfasında gönderilmiyor.", "notification-compact-header-mention-failure-user-unknown": "<strong>Kullanıcı adı mevcut değil:</strong> $1", "notification-compact-header-mention-failure-user-anonymous": "<strong>IP'lerden bahsedilemez:</strong> $1", + "notification-header-mention-success": "<strong>$3</strong> kullanıcısına başarılı bir şekilde {{GENDER:$2|seslendiniz}}.", + "notification-header-mention-success-bundle": "<strong>$4</strong> sayfasında $3 kullanıcıya {{GENDER:$2|seslendiniz}}.", + "notification-compact-header-mention-success": "<strong>{{GENDER:$2|Şununla bahsettiniz}}:</strong> $3", + "notification-header-mention-status-bundle": "<strong>$4</strong> tartışma sayfasında {{GENDER:$2|yaptınız}} ile ilgili {{PLURAL:$3|bir bildirim|$3 bildirim}}: {{PLURAL:$5|$5 gönderilmedi}}, {{PLURAL:$6|$6 gönderildi}}.", "notification-header-user-rights-add-only": "{{GENDER:$4|Kullanıcı}} haklarınız {{GENDER:$1|değiştirildi}}. Eklendiğiniz yer: $2.", "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-user-rights-expiry-change": "Aşağıdaki {{PLURAL:$3|grup|grup}} için {{GENDER:$4|sizin}} üyeliğinin sona ermesi {{GENDER:$1|değiştirildi}}: $2.", "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-header-mention-summary": "<strong>$4</strong> bir düzenleme özetinde {{GENDER:$3|size}} $1 {{GENDER:$2|bahsetti}}.", + "notification-header-watchlist-changed": "$1, <strong>$3</strong> {{GENDER:$2|değiştirdi}}, {{GENDER:$4|sizin}} izleme listesindeki {{PLURAL:$5|$5 kere}} bir sayfa.", + "notification-header-watchlist-created": "$1, <strong>$3</strong> {{GENDER:$2|oluşturdu}}, {{GENDER:$4|sizin}} izleme listesindeki {{PLURAL:$5|$5 kere}} bir sayfa.", + "notification-header-watchlist-deleted": "$1, <strong>$3</strong> {{GENDER:$2|sildi}}, {{GENDER:$4|sizin}} izleme listesindeki {{PLURAL:$5|$5 kere}} bir sayfa.", + "notification-header-watchlist-moved": "$1, <strong>$3</strong> {{GENDER:$2|taşıdı}}, {{GENDER:$4|sizin}} izleme listesindeki {{PLURAL:$5|$5 kere}} bir sayfa.", + "notification-header-watchlist-restored": "$1, <strong>$3</strong> {{GENDER:$2|geri getirdi}}, {{GENDER:$4|sizin}} izleme listesindeki {{PLURAL:$5|$5 kere}} bir sayfa.", + "notification-header-watchlist-multiuser-changed": "<strong>$1</strong>, {{GENDER:$2|sizin}} izleme listesindeki bir sayfa $3 {{PLURAL:$3|kere|kere}} değiştirildi.", + "notification-header-watchlist-multiuser-created": "<strong>$1</strong>, {{GENDER:$2|sizin}} izleme listesindeki bir sayfa $3 {{PLURAL:$3|kere|kere}} oluşturdu.", + "notification-header-watchlist-multiuser-deleted": "<strong>$1</strong>, {{GENDER:$2|sizin}} izleme listesindeki bir sayfa $3 {{PLURAL:$3|kere|kere}} silindi.", + "notification-header-watchlist-multiuser-moved": "<strong>$1</strong>, {{GENDER:$2|sizin}} izleme listesindeki bir sayfa $3 {{PLURAL:$3|kere|kere}} taşındı.", + "notification-header-watchlist-multiuser-restored": "<strong>$1</strong>, {{GENDER:$2|sizin}} izleme listesindeki bir sayfa $3 {{PLURAL:$3|kere|kere}} geri getirildi.", "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!", @@ -146,15 +194,17 @@ "notification-header-thank-you-10000-edit": "On bininci {{GENDER:$2|değişikliğinizi}} {{GENDER:$2|yaptınız}}; çok çok teşekkürler!", "notification-header-thank-you-100000-edit": "Yüz bininci {{GENDER:$2|değişikliğinizi}} {{GENDER:$2|yaptınız}}; inanılmaz katkınız için teşekkürler!", "notification-header-thank-you-1000000-edit": "Bir milyonuncu {{GENDER:$2|değişikliğinizi}} {{GENDER:$2|yaptınız}}; ağızları açık bırakan katkınız için teşekkürler!", + "notification-header-thank-you-10000000-edit": "On milyonuncu {{GENDER:$2|değişikliğinizi}} {{GENDER:$2|yaptınız}}; parlak özveri bırakan katkınız için teşekkürler!", + "notification-link-thank-you-edit": "{{GENDER:$1|Sizin}} düzenleme", "notification-link-text-view-edit": "Değişikliği görüntüle", - "notification-header-reverted": "{{PLURAL:$4|$3 sayfasındaki değişikliğiniz|$3 sayfasındaki değişiklikleriniz}}, $1 tarafından {{GENDER:$2|geri alındı}}.", + "notification-link-article-reminder": "Sayfayı görüntüle", + "notification-header-reverted": "{{PLURAL:$4|$3 sayfasındaki değişikliğiniz|$3 sayfasındaki değişiklikleriniz}} {{GENDER:$2|geri alındı}}.", "notification-header-emailuser": "$1 size bir e-posta {{GENDER:$2|gönderdi}}.", - "notification-edit-talk-page-email-subject2": "$1, {{SITENAME}} sayfasında size bir mesaj {{GENDER:$1|bıraktı}}", - "notification-edit-talk-page-email-batch-body-with-section": "$1, mesaj sayfanızın \"$2\" başlığında bir mesaj {{GENDER:$1|bıraktı}}.", - "notification-page-linked-email-subject": "Sayfanıza {{SITENAME}} sitesinde bağlantı verildi", - "notification-reverted-email-subject2": "Eğer {{ÇOĞUL:$3|Düzenle|düzenleme yapıldı}} {{CİNSİYET:$1|döndürüldü}} {{SITENAME}}", - "notification-mention-email-subject": "$1, {{SITENAME}} sitesinde {{GENDER:$2|sizden}} {{GENDER:$1|bahsetti}}", - "notification-user-rights-email-subject": "{{SITENAME}} için kullanıcı hakları değişmiştir", + "notification-edit-talk-page-email-subject2": "$1, {{SITENAME}} sayfasında {{GENDER:$3|size}} bir mesaj {{GENDER:$2|bıraktı}}", + "notification-page-linked-email-subject": "{{SITENAME}} {{GENDER:$3|siz}} sayfasında oluşturulan bir sayfası bağlandı", + "notification-reverted-email-subject2": "{{GENDER:$3|Sizin}} {{GENDER:$4|düzenlemeniz|düzenlememiz}} \n{{SITENAME}} üzerinde {{GENDER:$2|geri alındı}}", + "notification-mention-email-subject": "$1, {{SITENAME}} sitesinde {{GENDER:$3|sizden}} {{GENDER:$2|bahsetti}}", + "notification-user-rights-email-subject": "{{SITENAME}} adresinimzde kullanıcı {{GENDER:$3|haklarınız}} değişti", "notification-timestamp-ago-seconds": "{{PLURAL:$1|$1 s}}", "notification-timestamp-ago-minutes": "{{PLURAL:$1|$1d}}", "notification-timestamp-ago-hours": "{{PLURAL:$1|$1sa}}", @@ -163,28 +213,32 @@ "notification-timestamp-ago-years": "{{PLURAL:$1|$1yıl}}", "notification-timestamp-today": "Bugün", "notification-timestamp-yesterday": "Dün", - "notification-inbox-filter-read": "Okunan", + "notification-inbox-filter-read": "Oku", "notification-inbox-filter-unread": "Okunmamış", - "notification-inbox-filter-all": "Tümü", - "echo-email-body-default": "{{SITENAME}} için yeni bildiriminiz var:\n\n$1", - "echo-email-footer-default": "$2\n\nSize gönderdiğimiz e-postaları kontrol etmek için, tercihlerinizi kontrol edin:\n{{canonicalurl:{{#special:Preferences}}#mw-prefsection-echo}}\n\n$1", - "echo-email-html-footer-preference-link-text": "tercihlerinizi kontrol edin", + "notification-inbox-filter-all": "Hepsi", + "echo-specialmute-label-mute-notifications": "Bu {{GENDER:$1|kullanıcıdan}} gelen bildirimleri yoksay", + "echo-email-plain-footer": "Hangi e-postaları {{GENDER:$1|size}} gönderdiğimizi kontrol etmek için {{GENDER:$1|sizin}} tercihlerinizi kontrol edin:", + "echo-email-html-footer-preference-link-text": "{{GENDER:$1|tercihlerinizi}} kontrol edin", + "echo-email-html-footer-with-link": "{{GENDER:$2|Size}} hangi e-postaları gönderdiğimizi kontrol etmek için $1.", "echo-notification-alert": "{{PLURAL:$1|Uyarı ($1)|Uyarılar ($1)|100=Uyarılar (99+)}}", + "echo-notification-notice": "{{PLURAL:$1|Bildirim ($1)|Bildirimler ($1)|100=Bildirimler (99+)}}", "echo-notification-alert-text-only": "Uyarılar", "echo-notification-notice-text-only": "Bildirimler", "echo-overlay-link": "Bütün bildirimler", "echo-overlay-title": "<b>Bildirimler</b>", - "echo-overlay-title-overflow": "<b>{{PLURAL:$1|Bildirimler}}</b> ($2 okunmayandan $1 adeti gösteriliyor)", "echo-mark-all-as-read": "Tümünü okundu olarak işaretle", + "echo-mark-all-as-read-confirmation": "$1 {{PLURAL:$1|bildirim|bildirim}} okunmuş olarak işaretlendi", + "echo-mark-wiki-as-read": "Tümünü seçilen wikide okundu olarak işaretle: $1", + "echo-displaysnippet-title": "Yeni bildirim", "echo-date-today": "Bugün", "echo-date-yesterday": "Dün", - "echo-load-more-error": "Daha fazla sonuç oluşturma esnasında bir hata oluştu.", - "notification-bundle-header-edit-user-talk-v2": "Mesaj {{GENDER:$3|sayfanızda}} $1 yeni {{PLURAL:$2|mesaj|mesaj}} var.", + "notification-bundle-header-edit-user-talk-v2": "Mesaj {{GENDER:$3|sayfanızda}} $1 yeni {{PLURAL:$1|mesaj|mesaj}} var.", "echo-email-batch-subject-daily": "{{SITENAME}} sitesinde {{PLURAL:$2|yeni bir bildiriminiz|yeni bildirimleriniz}} var", "echo-email-batch-subject-weekly": "Bu hafta {{SITENAME}} sitesinde {{PLURAL:$2|yeni bir bildiriminiz|yeni bildirimleriniz}} var", "echo-email-batch-body-intro-daily": "Merhaba $1,\nBurada {{SITENAME}} için bu günün etkinlik özetini bulabilirsiniz.", "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 bildirim" + "notification-header-foreign-notice": "{{PLURAL:$5|Diğer viki|$5 diğer viki}}den daha fazla bildirim", + "notification-header-foreign-all": "{{PLURAL:$5|Başka bir viki|$5 diğer vikiler}} tarafından gönderilen diğer bildirimler" } diff --git a/Echo/i18n/trv.json b/Echo/i18n/trv.json new file mode 100644 index 00000000..4c1909dc --- /dev/null +++ b/Echo/i18n/trv.json @@ -0,0 +1,11 @@ +{ + "@metadata": { + "authors": [ + "Iyuqciyang" + ] + }, + "tooltip-pt-notifications-alert": "{{GENDER:|Su}} ptqlahang", + "notification-link-text-expand-all": "muda", + "notification-inbox-filter-read": "smpug patas", + "notification-inbox-filter-all": "Kana" +} diff --git a/Echo/i18n/tt-cyrl.json b/Echo/i18n/tt-cyrl.json index cce78b9a..790680d4 100644 --- a/Echo/i18n/tt-cyrl.json +++ b/Echo/i18n/tt-cyrl.json @@ -2,13 +2,13 @@ "@metadata": { "authors": [ "Ilnur efende", - "Ильнар", - "Macofe" + "Macofe", + "Ерней", + "Ильнар" ] }, - "prefs-echo": "Хəбəрнамəләр", + "prefs-echo": "Белдермәләр", "prefs-emailsettings": "Электрон почта көйләнмәләре", - "prefs-displaynotifications": "Күрсәтү көйләнмәләре", "prefs-echosubscriptions": "Миңа бу вакыйгалар турында хәбәр итәргә", "prefs-echocrosswiki": "Кросс-вики хәбәрнамәләр", "echo-pref-send-me": "Миңа җибәрү:", @@ -19,32 +19,29 @@ "echo-pref-email-format-html": "HTML", "echo-pref-email-format-plain-text": "Гади текст", "echo-pref-cross-wiki-notifications": "Бүтән викилардагы белдерүләрне күрсәтергә", - "echo-pref-beta-feature-cross-wiki-message": "Киңәйтелгән хәбәрнамәләр", "echo-learn-more": "Күбрәк белү", - "echo-log": "Гомуми көндәлек", + "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|кире кагу}}", + "echo-category-title-reverted": "Төзәтмә {{PLURAL:$1|кире кагуы|кире кагулары}}", "echo-category-title-mention": "{{PLURAL:$1|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|кулланучыдан|кулланучылардан}} электрон хат", - "notifications": "Хəбəрнамəләр", + "notifications": "Белдермәләр", "tooltip-pt-notifications-alert": "{{GENDER:|Сезнең}} искәртүләр", "tooltip-pt-notifications-notice": "{{GENDER:|Сезнең}} хәбәрнамәләр", "echo-displaynotificationsconfiguration-enabled-default-new-users-legend": "Яңа кулланучылар", - "echo-specialpage": "Хəбəрнамəләр", - "echo-specialpage-section-markread": "Төркемне укылган дип санарга", - "echo-specialpage-pagination-numnotifications": "$1 {{PLURAL:$1|хəбəрнамə}}", + "echo-specialpage": "Белдермәләр", + "echo-specialpage-section-markread": "Тупламны укылган дип билгеләргә", + "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-notification-placeholder": "Хəбəрнамəләр юк.", + "echo-notification-placeholder": "Белдермәләр юк.", "echo-notification-placeholder-filters": "Критерийларга туры килүче билдерүләр юк.", "echo-notification-markasread": "Укылган итеп билгеләү", "echo-notification-markasunread": "Укылмаган дип билгеләү", @@ -59,8 +56,8 @@ "notification-link-text-view-mention": "Искәртүне карау", "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-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|телгә}} алды.", @@ -70,8 +67,7 @@ "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|искә алды}}", + "notification-mention-email-subject": "$1 {{GENDER:$3|сезне}} «{{SITENAME}}» сәхифәсендә {{GENDER:$2|искә алды}}", "notification-timestamp-ago-seconds": "{{PLURAL:$1|$1 с}}", "notification-timestamp-ago-minutes": "{{PLURAL:$1|$1 мин}}", "notification-timestamp-ago-hours": "{{PLURAL:$1|$1 сәг}}", @@ -83,16 +79,15 @@ "notification-inbox-filter-read": "Укылган", "notification-inbox-filter-unread": "Укылмаган", "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-alert-text-only": "Искәртүләр", "echo-notification-notice-text-only": "Хәбәрнамәләр", "echo-overlay-link": "Барлык хəбəрнамəләр", - "echo-overlay-title": "<b>Хəбəрнамəләр</b>", - "echo-mark-all-as-read": "Барсын да укылган итеп билгеләү", + "echo-overlay-title": "<b>Белдермәләр</b>", + "echo-mark-all-as-read": "Барысын да укылган итеп билгеләү", "echo-date-today": "Бүген", "echo-date-yesterday": "Кичә", - "notification-bundle-header-edit-user-talk-v2": "<strong>{{GENDER:$3|Сезнең}} бәхәс битегездә</strong> {{PLURAL:$1|яңа хат|$1 яңа хат|100=99+ яңа хат}}.", + "notification-bundle-header-edit-user-talk-v2": "<strong>{{GENDER:$3|Сезнең}} бәхәс битегездә</strong> {{PLURAL:$1|яңа хәбәр|$1 яңа хәбәр|100=99+ яңа хәбәр}}.", "echo-email-batch-link-text-view-all-notifications": "Барлык белдерүләрне карау" } diff --git a/Echo/i18n/ug-arab.json b/Echo/i18n/ug-arab.json index 013e9fe3..7d3235a2 100644 --- a/Echo/i18n/ug-arab.json +++ b/Echo/i18n/ug-arab.json @@ -1,14 +1,17 @@ { "@metadata": { "authors": [ + "AlimOmar", "Sahran", "Uzdil" ] }, "prefs-echo": "ئۇقتۇرۇشلار", - "prefs-displaynotifications": "كۆرسىتىش تاللانما", + "prefs-mutedpageslist": "ئاۋازسىز بەتلەر", + "echo-pref-notifications-page-linked-title-muted-list": "بۇ بەتلەرگە «بەت ئۇلىنىشى» ئۇقتۇرۇشىنى كۆرسەتمەڭ.\n([[mw:Special:MyLanguage/Help:Notifications#mute|كۆپنى چۈشىنىش]])", "notifications": "ئۇقتۇرۇشلار", "tooltip-pt-notifications-alert": "{{GENDER:|سىزنىڭ}} ئەسكەرتىشىڭىز", + "echo-specialpage-special-help-menu-widget-aria-label": "قوشۇمچە تاللاش ۋە ئۇقتۇرۇش مايىللىقى.", "echo-date-today": "بۈگۈن", "echo-date-yesterday": "تۈنۈگۈن" } diff --git a/Echo/i18n/uk.json b/Echo/i18n/uk.json index 33ae45ba..9cf464d2 100644 --- a/Echo/i18n/uk.json +++ b/Echo/i18n/uk.json @@ -3,34 +3,41 @@ "authors": [ "AS", "Ahonc", + "Amire80", "Andriykopanytsia", "Base", + "Green Zero", + "Lxlalexlxl", + "Macofe", + "Movses", + "NickK", "Olvin", + "Piramidion", + "SimondR", "Steve.rusyn", "SteveR", + "Vlad5250", "Ата", - "Piramidion", - "NickK", - "Lxlalexlxl", - "Максим Підліснюк", - "Macofe", - "Green Zero", - "Amire80", - "SimondR" + "Максим Підліснюк" ] }, "echo-desc": "Система сповіщення користувачів про події і повідомлення", "prefs-echo": "Сповіщення", "prefs-emailsettings": "Параметри електронної пошти", - "prefs-displaynotifications": "Опції відображення", "prefs-echosubscriptions": "Повідомляти мене про ці події", "prefs-echocrosswiki": "Крос-вікі сповіщення", "prefs-blocknotificationslist": "Ігноровані користувачі", + "prefs-mutedpageslist": "Приглушені сторінки (для сповіщень про посилання на сторінку)", + "prefs-echopollupdates": "Сповіщення наживо", + "echo-mobile-notifications-filter-title": "Фільтр сповіщень", + "echo-pref-show-poll-updates": "Показувати нові сповіщення як тільки вони приходять", + "echo-pref-show-poll-updates-help": "Показувати число непрочитаних сповіщень у заголовку та показувати витяг з кожного зі сповіщень одразу коли воно приходить.", "echo-pref-send-me": "Надіслати мені:", "echo-pref-send-to": "Надіслати до:", "echo-pref-email-format": "Формат листів:", "echo-pref-web": "Веб", "echo-pref-email": "Ел. пошта", + "echo-pref-push": "Пуш (лише програмки)", "echo-pref-email-frequency-never": "Не надсилати мені жодних сповіщень електронною поштою", "echo-pref-email-frequency-immediately": "Сповіщати про кожну подію одразу", "echo-pref-email-frequency-daily": "Щоденна збірка сповіщень", @@ -39,12 +46,12 @@ "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-pref-notifications-page-linked-title-muted-list": "Не показувати сповіщення про посилання на сторінку для цих сторінок. ([[mw:Special:MyLanguage/Help:Notifications#mute|дізнайтесь більше]])", + "echo-pref-dont-email-read-notifications": "Не включати вже прочитані сповіщення в електронні листи зі збірками сповіщень", "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|редагування|редагувань}}", "echo-category-title-mention": "{{PLURAL:$1|Згадування}}", @@ -52,11 +59,16 @@ "echo-category-title-mention-success": "{{PLURAL:$1|Успішне згадування|Успішні згадування}}", "echo-category-title-other": "{{PLURAL:$1|інше}}", "echo-category-title-system": "{{PLURAL:$1|системне}}", + "echo-category-title-system-noemail": "{{PLURAL:$1|Система}}", + "echo-category-title-system-emailonly": "{{PLURAL:$1|Системне|Системні}}", "echo-category-title-user-rights": "{{PLURAL:$1|Зміна прав користувача|Зміни прав користувача}}", "echo-category-title-emailuser": "{{PLURAL:$1|Електронний лист від іншого користувача|Електронні листи від інших користувачів}}", "echo-category-title-article-reminder": "{{PLURAL:$1|Нагадування}} про сторінки", + "echo-category-title-thank-you-edit": "{{PLURAL:$1|Віхи}} редагування", + "echo-category-title-watchlist": "Редагування сторінки зі списку спостереження", + "echo-category-title-minor-watchlist": "Незначне редагування сторінки зі списку спостереження", "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": "Повідомити мене, коли мені не вдалося відправити згадку кого-небудь.", @@ -64,7 +76,9 @@ "echo-pref-tooltip-user-rights": "Повідомляти мене, коли хтось змінює мої права користувача.", "echo-pref-tooltip-emailuser": "Повідомляти мене, коли хтось надсилає мені електронного листа.", "echo-pref-tooltip-article-reminder": "Повідомити мене про цю сторінку, коли я попрошу.", - "echo-error-no-formatter": "Не визначено формату сповіщень", + "echo-pref-tooltip-thank-you-edit": "Повідомити мене, коли я зроблю своє 1-ше, 10-те, 100-те… редагування.", + "echo-pref-tooltip-watchlist": "Повідомляти мене, коли хтось робить редагування (не незначне) сторінки з мого списку спостереження.", + "echo-pref-tooltip-minor-watchlist": "Повідомляти мене, коли хтось робить незначне редагування сторінки з мого списку спостереження.", "notifications": "Сповіщення", "tooltip-pt-notifications-alert": "{{GENDER:|Ваші}} звістки", "tooltip-pt-notifications-notice": "{{GENDER:|Ваші}} сповіщення", @@ -72,10 +86,9 @@ "echo-displaynotificationsconfiguration-summary": "Це огляд налаштувань сповіщень у цій вікі.", "echo-displaynotificationsconfiguration-notifications-by-category-header": "Сповіщення за категоріями", "echo-displaynotificationsconfiguration-sorting-by-section-header": "Сортування типів", - "echo-displaynotificationsconfiguration-sorting-by-section-legend": "Куди стортується кожен тип сповіщень", + "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": "Нові користувачі", @@ -85,24 +98,29 @@ "echo-specialpage-section-markread": "Позначити групу прочитаною", "echo-specialpage-markasread": "Сповіщення: позначити прочитаним", "echo-specialpage-markasread-invalid-id": "Неправильний ідентифікатор події", + "echo-specialpage-pagefilterwidget-aria-label": "Фільтрувати за вікі та назвою сторінки", + "echo-specialpage-special-help-menu-widget-aria-label": "Додаткові опції та налаштування Сповіщень.", "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-loginrequired": "Ви повинні увійти, щоб подивитися сповіщення.", "echo-notification-popup-loginrequired": "Будь ласка, увійдіть в систему, щоб переглянути свої сповіщення.", "echo-notification-markasread": "Позначити як прочитане", "echo-notification-markasunread": "Позначити як непрочитане", "echo-notification-markasread-tooltip": "Позначити як прочитане", "echo-notification-more-options-tooltip": "Більше параметрів", + "notification-dynamic-actions-mute-page-linked": "{{GENDER:$2|Приглушити}} сповіщення про посилання на «$1»", + "notification-dynamic-actions-mute-page-linked-confirmation": "Сповіщення про посилання на сторінку тепер вимкнені для сторінки «$1»", + "notification-dynamic-actions-mute-page-linked-confirmation-description": "{{GENDER:$2|Ви}} можете керувати приглушеними сторінками будь-коли у [$1 своїх налаштуваннях].", + "notification-dynamic-actions-unmute-page-linked": "{{GENDER:$2|Повернути}} сповіщення про посилання на «$1»", + "notification-dynamic-actions-unmute-page-linked-confirmation": "Сповіщення про посилання на сторінку тепер увімкнені для сторінки «$1»", + "notification-dynamic-actions-unmute-page-linked-confirmation-description": "{{GENDER:$2|Ви}} можете керувати приглушеними сторінками будь-коли у [$1 своїх налаштуваннях].", "notification-dynamic-actions-unwatch": "{{GENDER:$3|Не}} спостерігати за новою діяльністю на «$1»", "notification-dynamic-actions-unwatch-confirmation": "{{GENDER:$3|Ви}} більше не спостерігаєте за сторінкою «$1»", "notification-dynamic-actions-unwatch-confirmation-description": "{{GENDER:$3|Ви}} можете додати [$2 цю сторінку] до списку спостереження будь-коли.", @@ -144,15 +162,25 @@ "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|Згадка, здійснена|$3 згадки, здійснені}} {{GENDER:$2|Вами}} на сторінці обговорення <strong>$4</strong>, {{PLURAL:$3|було надіслано}}.", + "notification-header-mention-success-bundle": "{{PLURAL:$3|Згадка, здійснена|$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 сповіщення|$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-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|Ласкаво просимо}} до {{GRAMMAR:genitive|{{SITENAME}}}}, $1! Ми раді бачити {{GENDER:$2|Вас}} тут.", "notification-header-mention-summary": "$1 {{GENDER:$2|згадав|згадала}} {{GENDER:$3|Вас}} в описі редагування сторінки <strong>$4</strong>.", + "notification-header-watchlist-changed": "$1 {{GENDER:$2|змінив|змінила}} сторінку <strong>$3</strong>, яка перебуває у {{GENDER:$4|Вашому}} списку спостереження, $5 {{PLURAL:$5|раз|рази|раз}}.", + "notification-header-watchlist-created": "$1 {{GENDER:$2|створив|створила}} сторінку <strong>$3</strong>, яка перебуває у {{GENDER:$4|Вашому}} списку спостереження{{PLURAL:$5||, $5 рази|, $5 раз}}.", + "notification-header-watchlist-deleted": "$1 {{GENDER:$2|вилучив|вилучила}} сторінку <strong>$3</strong>, яка перебуває у {{GENDER:$4|Вашому}} списку спостереження{{PLURAL:$5||, $5 рази|, $5 раз}}.", + "notification-header-watchlist-moved": "$1 {{GENDER:$2|перейменував|перейменувала}} сторінку <strong>$3</strong>, яка перебуває у {{GENDER:$4|Вашому}} списку спостереження{{PLURAL:$5||, $5 рази|, $5 раз}}.", + "notification-header-watchlist-restored": "$1 {{GENDER:$2|відновив|відновила}} сторінку <strong>$3</strong>, яка перебуває у {{GENDER:$4|Вашому}} списку спостереження{{PLURAL:$5||, $5 рази|, $5 раз}}.", + "notification-header-watchlist-multiuser-changed": "<strong>$1</strong>, сторінку з {{GENDER:$2|Вашого}} списку спостереження, відредаговано $3 {{PLURAL:$3|раз|рази|раз}}.", + "notification-header-watchlist-multiuser-created": "<strong>$1</strong>, сторінку з {{GENDER:$2|Вашого}} списку спостереження, створено $3 {{PLURAL:$3|раз|рази|раз}}.", + "notification-header-watchlist-multiuser-deleted": "<strong>$1</strong>, сторінку з {{GENDER:$2|Вашого}} списку спостереження, вилучено $3 {{PLURAL:$3|раз|рази|раз}}.", + "notification-header-watchlist-multiuser-moved": "<strong>$1</strong>, сторінку з {{GENDER:$2|Вашого}} списку спостереження, перейменовано $3 {{PLURAL:$3|раз|рази|раз}}.", + "notification-header-watchlist-multiuser-restored": "<strong>$1</strong>, сторінку з {{GENDER:$2|Вашого}} списку спостереження, відновлено $3 {{PLURAL:$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|своє}} десяте редагування; дякуємо {{GENDER:$2|Вам}}, продовжуйте!", @@ -161,17 +189,17 @@ "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-header-thank-you-10000000-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|скасовано}}", "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|1=Ваше редагування|Ваші редагування}} на сайті {{SITENAME}} було {{GENDER:$1|скасовано}}", - "notification-mention-email-subject": "$1 {{GENDER:$1|згадав|згадала}} {{GENDER:$2|Вас}} на сайті «{{SITENAME}}».", - "notification-user-rights-email-subject": "Змінились Ваші права користувача на веб-сайті {{SITENAME}}.", + "notification-edit-talk-page-email-subject2": "$1 {{GENDER:$2|залишив|залишила}} {{GENDER:$3|Вам}} повідомлення на сайті {{SITENAME}}", + "notification-page-linked-email-subject": "На сайті {{SITENAME}} з'явилось посилання на сторінку, яку {{GENDER:$3|Ви}} створили", + "notification-reverted-email-subject2": "{{GENDER:$3|{{PLURAL:$4|1=Ваше редагування|Ваші редагування}}}} на сайті {{SITENAME}} було {{GENDER:$2|скасовано}}", + "notification-mention-email-subject": "$1 {{GENDER:$2|згадав|згадала}} {{GENDER:$3|Вас}} на сайті {{SITENAME}}", + "notification-user-rights-email-subject": "{{GENDER:$3|Ваші}} права користувача на веб-сайті {{SITENAME}} було змінено", "notification-timestamp-ago-seconds": "{{PLURAL:$1|$1с}}", "notification-timestamp-ago-minutes": "{{PLURAL:$1|$1хв}}", "notification-timestamp-ago-hours": "{{PLURAL:$1|$1год}}", @@ -183,9 +211,7 @@ "notification-inbox-filter-read": "Прочитане", "notification-inbox-filter-unread": "Непрочитане", "notification-inbox-filter-all": "Усе", - "echo-email-body-default": "У Вас є нове сповіщення на {{GRAMMAR:locative|{{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-specialmute-label-mute-notifications": "Вимкнути сповіщення від цього користувача", "echo-email-plain-footer": "Щоб визначити, які повідомлення ми {{GENDER:$1|Вам}} надсилаємо, перевірте свої налаштування:", "echo-email-html-footer-preference-link-text": "перевірте {{GENDER:$1|свої}} налаштування", "echo-email-html-footer-with-link": "Щоб контролювати, які листи ми {{GENDER:$2|Вам}} надсилаємо, $1.", @@ -195,14 +221,13 @@ "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|сповіщення позначено як прочитане|сповіщення позначені як прочитані|сповіщень позначені як прочитані}}", "echo-mark-wiki-as-read": "Позначити все як прочитане в обраній вікі: $1", + "echo-displaysnippet-title": "Нове сповіщення", "echo-date-today": "Сьогодні", "echo-date-yesterday": "Вчора", - "echo-load-more-error": "Під час отримання додаткових результатів сталася помилка.", - "notification-bundle-header-edit-user-talk-v2": "{{PLURAL:$1|$1 нове повідомлення|$1 нові повідомлення|$1 нових повідомлень|1=Одне нове повідомлення|100=99+ нових повідомлень}} на <strong>{{GENDER:$3|Вашій}} сторінці обговорення</strong>.", + "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Ось підсумок денної активності на сайті {{SITENAME}} для вас.", @@ -210,5 +235,5 @@ "echo-email-batch-link-text-view-all-notifications": "Переглянути усі сповіщення", "notification-header-foreign-alert": "Більше звісток з {{PLURAL:$5|$5 іншої вікі|$5 інших вікі}}", "notification-header-foreign-notice": "Більше сповіщень з {{PLURAL:$5|іншої вікі|$5 інших вікі}}", - "notification-header-foreign-all": "Більше сповіщень з {{PLURAL:$5|$5 іншої вікі|$5 інших вікі}}" + "notification-header-foreign-all": "Більше сповіщень з {{PLURAL:$5|іншої вікі|$5 інших вікі}}" } diff --git a/Echo/i18n/ur.json b/Echo/i18n/ur.json index 512b3c38..99b60e48 100644 --- a/Echo/i18n/ur.json +++ b/Echo/i18n/ur.json @@ -1,26 +1,27 @@ { "@metadata": { "authors": [ - "Noor2020", - "පසිඳු කාවින්ද", + "Abdulq", "Amire80", + "BukhariSaeed", "Fauzan", - "عثمان خان شاہ", + "Hindustanilanguage", "Muhammad Shuaib", + "Noor2020", "Obaid Raza", - "Hindustanilanguage", "امین اکبر", - "BukhariSaeed", - "Abdulq" + "عثمان خان شاہ", + "පසිඳු කාවින්ද" ] }, "echo-desc": "نظام برائے اطلاع صارفین دربارہ تقریبات و پیغامات", "prefs-echo": "اطلاعات", "prefs-emailsettings": "برقی خط کے اختیارات", - "prefs-displaynotifications": "اختیارات دکھائیں", "prefs-echosubscriptions": "ان احوال کے متعلق مجھے آگاہ کریں", "prefs-echocrosswiki": "دیگر ویکیوں کے اطلاع نامے", "prefs-blocknotificationslist": "خاموش کردہ صارفین", + "prefs-echopollupdates": "راست اطلاع نامے", + "echo-pref-show-poll-updates": "نئے اطلاع نامے ملتے ہی دکھائیں", "echo-pref-send-me": "مجھے ارسال کریں:", "echo-pref-send-to": "مرسل الیہ:", "echo-pref-email-format": "برقی ڈاک فارمیٹ", @@ -34,7 +35,6 @@ "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-log": "عوامی نوشتہ", "echo-new-messages": "آپ کے لیے نئے پیغامات", @@ -46,9 +46,11 @@ "echo-category-title-mention-success": "{{PLURAL:$1|تذکرہ|تذکرے}} کامیاب", "echo-category-title-other": "{{PLURAL:$1|دیگر}}", "echo-category-title-system": "{{PLURAL:$1|نظام}}", + "echo-category-title-system-noemail": "{{PLURAL:$1|نظام}}", "echo-category-title-user-rights": "{{PLURAL:$1|اختیارات صارف کی تبدیلی|اختیارات صارف کی تبدیلیاں}}", "echo-category-title-emailuser": "{{PLURAL:$1|دوسرے صارف کا برقی خط|دیگر صارفین کے برقی خطوط}}", "echo-category-title-article-reminder": "{{PLURAL:$1|یاد دہانی|یاد دہانیوں}} کا صفحہ", + "echo-category-title-thank-you-edit": "ترمیمی {{PLURAL:$1|سنگ میل}}", "echo-pref-tooltip-edit-user-talk": "جب کوئی شخص میرے تبادلۂ خیال صفحہ پر پیغام لکھے یا کسی پیغام کا جواب دے تو مجھے آگاہ کریں۔", "echo-pref-tooltip-article-linked": "جب کسی مضمون میں میرے تخلیق کردہ کسی صفحہ کا ربط دیا جائے تو مجھے آگاہ کریں۔", "echo-pref-tooltip-reverted": "جب کوئی شخص میری ترمیم کو رد یا استرجع کرے تو مجھے آگاہ کریں۔", @@ -58,6 +60,7 @@ "echo-pref-tooltip-user-rights": "جب کوئی شخص میرے اختیارات میں تبدیلی کرے تو مجھے آگاہ کریں۔", "echo-pref-tooltip-emailuser": "جب کوئی شخص مجھے برقی خط بھیجے تو مجھے آگاہ کریں۔", "echo-pref-tooltip-article-reminder": "جب میں پوچھوں تو مجھے اس صفحہ متعلق آگاہ کریں۔", + "echo-pref-tooltip-thank-you-edit": "جب میں پہلی، دسویں، سوویں وغیرہ ترمیم کروں تو مجھے اطلاع دیں۔", "notifications": "اطلاعات", "tooltip-pt-notifications-alert": "{{GENDER:|آپ}}کی اطلاعات", "tooltip-pt-notifications-notice": "{{GENDER:|آپ}} کے اعلانات", @@ -68,7 +71,6 @@ "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": "نئے صارفین", @@ -82,8 +84,6 @@ "echo-specialpage-pagefilters-subtitle": "صفحات جن کی اطلاعات نہیں پڑھی گئیں", "notificationsmarkread-legend": "اطلاع نامہ کو خواندہ نشان زد کریں", "echo-none": "آپ کے لیے کوئی نئی اطلاع نہیں ہے۔", - "echo-more-info": "مزید معلومات", - "echo-feedback": "آپ کی رائے", "echo-api-failure": "اطلاعات حاصل کرنے میں ناکامی، دوبارہ کوشش کریں!", "echo-notification-placeholder": "کوئی اطلاع موجود نہیں۔", "echo-notification-placeholder-filters": "ان حالات و شرائط کی مناسبت سے کوئی اطلاعات موجود نہیں۔", @@ -93,6 +93,8 @@ "echo-notification-markasunread": "بطور ناخواندہ شدہ نشان زد کریں", "echo-notification-markasread-tooltip": "بطور خواندہ شدہ نشان زد کریں", "echo-notification-more-options-tooltip": "مزید اختیارات", + "notification-dynamic-actions-watch-confirmation": "اب صفحہ «$1» {{GENDER:$3|آپ}} کے زیر نظر رہے گا", + "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 اطلاعات}} دیکھیں", @@ -119,12 +121,17 @@ "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-compact-header-mention-failure-user-unknown": "<strong>صارف نام موجود نہیں ہے:</strong> $1", + "notification-compact-header-mention-failure-user-anonymous": "<strong>آئی پی پتوں کا ذکر نہیں کیا جا سکتا:</strong> $1", + "notification-compact-header-mention-success": "<strong>{{GENDER:$2|آپ}} نے $3 کا ذکر کیا</strong>", "notification-header-user-rights-add-only": "{{GENDER:$4|آپ کے}} صارفی حقوق {{GENDER:$1|تبدیل}} کر کے آپ کو $2 گروہ صارفین میں شامل کر دیا گیا ہے۔", + "notification-header-user-rights-remove-only": "{{GENDER:$4|آپ}} کے اختیارات {{GENDER:$1|تبدیل}} ہو چکے ہیں۔ اب آپ حسب ذیل حلقے کے رکن نہیں رہے: \n$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|تبدیل کر دیا گیا ہے}}:\n$2", "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-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|آپ}} کا شکریہ!", @@ -136,12 +143,11 @@ "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": "$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-edit-talk-page-email-subject2": "{{SITENAME}} پر $1 نے آپ کو پیغام {{GENDER:$2|بھیجا ہے}}", + "notification-page-linked-email-subject": "{{SITENAME}} پر {{GENDER:$3|آپ}} کا تخلیق کردہ صفحہ مربوط ہوا", + "notification-reverted-email-subject2": "{{SITENAME}} پر {{GENDER:$3|آپ}} کی {{PLURAL:$4|ترمیم|ترامیم}} {{GENDER:$2|رد}} {{PLURAL:$4|کردی گئی ہے|کردی گئی ہیں}}۔", + "notification-mention-email-subject": "$1 نے {{SITENAME}} پر {{GENDER:$3|آپ}} کا {{GENDER:$2|تذکرہ کیا}}", + "notification-user-rights-email-subject": "{{SITENAME}} پر {{GENDER:$3|آپ}} کے صارفی اختیارات میں تبدیلی کی گئی ہے", "notification-timestamp-ago-seconds": "{{PLURAL:$1|$1 سیکنڈ}}", "notification-timestamp-ago-minutes": "{{PLURAL:$1|$1 منٹ}}", "notification-timestamp-ago-hours": "{{PLURAL:$1|$1 گھنٹہ}}", @@ -153,9 +159,7 @@ "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-specialmute-label-mute-notifications": "اس صارف کے اطلاع ناموں سے اغماض برتیں", "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۔", @@ -165,11 +169,17 @@ "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": "$1 {{PLURAL:$1|اطلاع|اطلاعات}} کو بطور خواندہ نشان زد کیا", + "echo-mark-wiki-as-read": "منتخب کردہ ویکی $1 میں تمام اطلاع ناموں کو خواندہ نشان زد کریں", + "echo-displaysnippet-title": "نیا اطلاع نامہ", "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-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": "تمام اطلاع نامے دیکھیں", "notification-header-foreign-alert": "{{PLURAL:$5|دوسری ویکی|$5 دیگر ویکیوں}} کی مزید اطلاعات", "notification-header-foreign-notice": "{{PLURAL:$5|دوسری ویکی|$5 دوسری ویکیوں}} سے مزید اطلاعات", diff --git a/Echo/i18n/uz.json b/Echo/i18n/uz.json index 038c9eb4..8e49d7f4 100644 --- a/Echo/i18n/uz.json +++ b/Echo/i18n/uz.json @@ -9,7 +9,6 @@ "echo-desc": "Xabarlar tizimi", "prefs-echo": "Xabarlar", "prefs-emailsettings": "Elektron pochta moslamalari", - "prefs-displaynotifications": "Tasvirlash moslamalari", "prefs-echosubscriptions": "Quyidagi hodisalar haqida menga xabar berilsin", "echo-pref-send-me": "Menga joʻnatilsin:", "echo-pref-send-to": "Joʻnatilsin:", @@ -35,34 +34,25 @@ "echo-pref-tooltip-article-linked": "Maqolalarda men yaratgan biror-bir sahifaga link qoldirilsa xabar berilsin", "echo-pref-tooltip-reverted": "Kimdir men qilgan tahrirni bekor qilsa, menga xabar berilsin.", "echo-pref-tooltip-mention": "Biror foydalanuvchi har qanday munozarada sahifamga havola bergani haqida xabar qilinsin", - "echo-error-no-formatter": "Xabarlar uchun format belgilanmagan.", "notifications": "Xabarlar", "echo-specialpage": "Xabarlar", - "echo-anon": "Xabarlar olib turish uchun [$1 hisob yarating] yoki [$2 tizimga kiring].", "echo-none": "Siz xabar olmadingiz.", - "echo-more-info": "Batafsil", - "echo-feedback": "Teskari aloqa", "notification-link-text-view-message": "Xabarni koʻrib chiqish", "notification-link-text-view-mention": "Eslatib oʻtishni koʻrib chiqish", "notification-link-text-view-changes": "Oʻzgarishlarni koʻrish", "notification-link-text-view-page": "Sahifani koʻrish", "notification-link-text-view-edit": "Tahrirni koʻrish", "notification-header-reverted": "$3 sahifasidagi {{PLURAL:$4|1=tahriringizni|tahrirlaringizni}} $1 {{GENDER:$2|bekor qildi}}.", - "notification-edit-talk-page-email-subject2": "$1 {{SITENAME}}da sizga xabar {{GENDER:$1|qoldirdi}}.", - "notification-edit-talk-page-email-batch-body-with-section": "$1 munozara sahifangizdagi „$2“ boʻlimida xabar {{GENDER:$1|qoldirdi}}:", + "notification-edit-talk-page-email-subject2": "$1 {{SITENAME}}da sizga xabar {{GENDER:$2|qoldirdi}}.", "notification-page-linked-email-subject": "{{SITENAME}} saytida siz yaratgan sahifaga havola paydo boʻldi.", - "notification-reverted-email-subject2": "{{GENDER:$1|Кimdir}} {{SITENAME}} saytida sizning {{PLURAL:$3|1=tahriringizni|tahrirlaringizni}} bekor qildi.", - "notification-mention-email-subject": "$1 sizni {{SITENAME}} saytida {{GENDER:$1|tilga oldi}}.", + "notification-reverted-email-subject2": "{{GENDER:$2|Кimdir}} {{SITENAME}} saytida sizning {{PLURAL:$4|1=tahriringizni|tahrirlaringizni}} bekor qildi.", + "notification-mention-email-subject": "$1 sizni {{SITENAME}} saytida {{GENDER:$2|tilga oldi}}.", "notification-user-rights-email-subject": "{{SITENAME}} saytidagi huquqlaringiz oʻzgartirildi.", - "echo-email-body-default": "{{SITENAME}} saytida sizda yangi xabar bor:\n\n$1", - "echo-email-footer-default": "$2 \n\nSizga qanday elektron xabarlarni joʻnatishimizni boshqarish uchun shaxsiy moslamalaringizni koʻrib chiqing: {{canonicalurl:{{#special:Preferences}}#mw-prefsection-echo}}\n\n$1", "echo-overlay-link": "Barcha xabarlar", "echo-overlay-title": "<b>Xabarlar</b>", - "echo-overlay-title-overflow": "<b>{{PLURAL:$1|Xabarlar}}</b> $2 ta oʻqilmagandan $1 tasi koʻrsatilyapti", "echo-mark-all-as-read": "Barchasini oʻqilgan deb belgilash", "echo-date-today": "Bugun", "echo-date-yesterday": "Kecha", - "echo-load-more-error": "Qoʻshimcha natijalar olinayotganda xato roʻy berdi.", "echo-email-batch-subject-daily": "{{SITENAME}} saytida sizda {{PLURAL:$2|yangi xabar|yangi xabar}} bor.", "echo-email-batch-subject-weekly": "Bu hafta {{SITENAME}} saytida sizda {{PLURAL:$2|yangi xabar|yangi xabar}} bor.", "echo-email-batch-body-intro-daily": "Salom $1,\nMana siz uchun {{SITENAME}} saytidagi bugungi faoliyat haʻqida qisqa maʼlumot.", diff --git a/Echo/i18n/vec.json b/Echo/i18n/vec.json index 20cbed86..1db6e43b 100644 --- a/Echo/i18n/vec.json +++ b/Echo/i18n/vec.json @@ -2,64 +2,107 @@ "@metadata": { "authors": [ "Amire80", - "Candalua" + "Candalua", + "Conky77", + "Fierodelveneto" ] }, - "prefs-echo": "Avisi", - "prefs-emailsettings": "Preferense e-mail", - "prefs-displaynotifications": "Preferense de visualixassion", - "prefs-echosubscriptions": "Màndeme un aviso su de sti eventi", - "prefs-echocrosswiki": "Avisi tra na wiki e n'altra", - "echo-pref-send-me": "Màndeme:", + "echo-desc": "Sistema par notifegare ai utenti i mesaji e i eventi", + "prefs-echo": "Avixi", + "prefs-emailsettings": "Prefarense e-mail", + "prefs-echosubscriptions": "Màndame on avixo so sti eventi", + "prefs-echocrosswiki": "Avixi intrà na Wiki e cheł'altra", + "prefs-blocknotificationslist": "Utenti siłensiai", + "prefs-echopollupdates": "Notifeghe dal vivo", + "echo-mobile-notifications-filter-title": "Filtro notifeghe", + "echo-pref-show-poll-updates": "Motrare łe nove notifeghe pena che łe riva", + "echo-pref-show-poll-updates-help": "Mostra el numaro de notifeghe no lexeste in te ła bara del titoło e mostra suito on snipet de cadauna notifega pena che ła riva.", + "echo-pref-send-me": "Màndame:", "echo-pref-send-to": "Manda a:", "echo-pref-email-format": "Formato email:", "echo-pref-web": "Web", "echo-pref-email": "Email", "echo-pref-email-frequency-never": "No sta mandarme nissuna notifica par email", "echo-pref-email-frequency-immediately": "Un aviso par olta", - "echo-pref-email-frequency-daily": "Un riasunto zorno par zorno de i avisi", - "echo-pref-email-frequency-weekly": "Un riasunto dei avisi de la stimana", + "echo-pref-email-frequency-daily": "El reasunto del dì dei avixi", + "echo-pref-email-frequency-weekly": "On reasunto de ła stimana dei avixi", "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-beta-feature-cross-wiki-message": "Avisi fati mejo", + "echo-pref-cross-wiki-notifications": "Fa védare anca i avixi de chełe altre wiki", + "echo-pref-notifications-blacklist": "No sta mostrare notifeghe de sti utenti ([[mw:Special:MyLanguage/Help:Notifications#mute|pì informasion]])", + "echo-pref-dont-email-read-notifications": "No sta ciapar drento łe notifeghe de letura in te łe e-mail de resunto", "echo-learn-more": "Par saverghine de pì", "echo-log": "Rejistro pùblico", - "echo-new-messages": "Te ghè dei messagi novi", + "echo-new-messages": "Te ghè dei mesaji novi", "echo-category-title-edit-user-talk": "{{PLURAL:$1|Mesajo|Mesaji}} in tea pagina de discusion", "echo-category-title-article-linked": "{{PLURAL:$1|Colegamento|Colegamenti}} a na pagina", "echo-category-title-reverted": "{{PLURAL:$1|Canbiamento desfà|Canbiamenti desfài}}", "echo-category-title-mention": "{{PLURAL:$1|I te ga nomenà}}", + "echo-category-title-mention-failure": "{{PLURAL:$1|Nomena|Nomene}} in erore", + "echo-category-title-mention-success": "{{PLURAL:$1|mension coreta|mension corete}}", "echo-category-title-other": "{{PLURAL:$1|Altro}}", "echo-category-title-system": "{{PLURAL:$1|Sistema}}", + "echo-category-title-system-noemail": "{{PLURAL:$1|Sistema}}", + "echo-category-title-system-emailonly": "{{PLURAL:$1|Sistema}}", "echo-category-title-user-rights": "{{PLURAL:$1|Canbiamento|Canbiamenti}} de i diriti de l'utente", "echo-category-title-emailuser": "{{PLURAL:$1|Email da n'altro utente|Email da de i altri utenti}}", + "echo-category-title-article-reminder": "{{PLURAL:$1|recordatorio de pàjina|recordatorio de pàjine}}", + "echo-category-title-thank-you-edit": "{{PLURAL:$1|Piera mejare|Piere mejari}} de canbiamenti", + "echo-category-title-watchlist": "Modìfega a ła pàjina vardada", + "echo-category-title-minor-watchlist": "Modìfega picenina a ła pàjina vardada", "echo-pref-tooltip-edit-user-talk": "Dime co che qualchidun me scrive un mesajo o me risponde in te a me pagina de discusion.", - "echo-pref-tooltip-article-linked": "Dime co che qualchidun, da na pagina qualunque, el ghe taca un ligame su na pagina de quele che go fato mi.", + "echo-pref-tooltip-article-linked": "Avixame co calcheduni el liga na pàjina che go creà co n'altra pàjina.", "echo-pref-tooltip-reverted": "Dime co che qualchedun el desfa un canbiamento che go fato mi, strucando \"anula\" o \"torna indrio\".", "echo-pref-tooltip-mention": "Dime co che qualchidun el taca un ligame verso la me pagina utente", - "notifications": "Avisi", - "tooltip-pt-notifications-alert": "{{GENDER:|I to}} avisi", - "tooltip-pt-notifications-notice": "{{GENDER:|I to}} avisi", - "echo-displaynotificationsconfiguration-notifications-by-category-header": "Avisi par categoria", + "echo-pref-tooltip-mention-failure": "Avixame co no go podesto enviare na mension a calcheduni", + "echo-pref-tooltip-mention-success": "Avìxame co envio na mension a calcheduni", + "echo-pref-tooltip-user-rights": "Avìxame co calchedun el modifega i me deriti de utente", + "echo-pref-tooltip-emailuser": "Avìxame co calchedun me envia na email", + "echo-pref-tooltip-article-reminder": "Avìxame de sta pàjina co ło domando", + "echo-pref-tooltip-thank-you-edit": "Avìxame co rivo a 1ª, 10ª, 100ª... modìfeghe.", + "notifications": "Avixi", + "tooltip-pt-notifications-alert": "{{GENDER:|I to}} avixi", + "tooltip-pt-notifications-notice": "{{GENDER:|I to}} avixi", + "echo-displaynotificationsconfiguration": "Varda configurasion notìfeghe", + "echo-displaynotificationsconfiguration-summary": "Sta cuà ła xé na panoràmega de cofà łe notìfeghe łe xé configurae so sta Wiki.", + "echo-displaynotificationsconfiguration-notifications-by-category-header": "Avixi par categoria", + "echo-displaynotificationsconfiguration-sorting-by-section-header": "Ordenamento dei tipi", + "echo-displaynotificationsconfiguration-available-notification-methods-header": "Metodi de notifega consentii", + "echo-displaynotificationsconfiguration-available-notification-methods-by-category-legend": "Cuałi metodi de notifega i xé suportai par ogni categoria", + "echo-displaynotificationsconfiguration-enabled-default-header": "Ativo par inpostasion predefinia", "echo-displaynotificationsconfiguration-enabled-default-existing-users-legend": "Utenti che gh'è za", "echo-displaynotificationsconfiguration-enabled-default-new-users-legend": "Utenti novi", - "echo-specialpage": "Avisi", - "echo-specialpage-section-markread": "Segna sto grupo come za lèto", + "echo-displaynotificationsconfiguration-mandatory-notification-methods-header": "Metodi de notifega domandai", + "echo-displaynotificationsconfiguration-mandatory-notification-methods-by-category-legend": "Cuałi metodi de notifega i xé obligatori par ogni categoria", + "echo-specialpage": "Avixi", + "echo-specialpage-section-markread": "Marca sto grupo cofà xà lexesto", "echo-specialpage-markasread": "Aviso: segna come za lèto", "echo-specialpage-markasread-invalid-id": "ID evento mia valido", - "echo-specialpage-pagination-numnotifications": "$1 {{PLURAL:$1|aviso|avisi}}", - "echo-specialpage-pagefilters-title": "Atività de poco fa", - "echo-specialpage-pagefilters-subtitle": "Pagine con avisi mia lèti gnancora", - "notificationsmarkread-legend": "Segna sto aviso come za lèto", + "echo-specialpage-pagination-numnotifications": "$1 {{PLURAL:$1|avixo|avixi}}", + "echo-specialpage-pagefilters-title": "Atività fate in ultima", + "echo-specialpage-pagefilters-subtitle": "Pàjine co notìfeghe njioncora lexeste", + "notificationsmarkread-legend": "Marca sto grupo cofà xà lexesto", + "echo-none": "No te ghè notìfeghe o no te ga njiente de novo", + "echo-api-failure": "No el xé sta pusìbiłe reciapare fora łe notifeghe", + "echo-api-failure-cross-wiki": "El \"va drento\" al dominio remoto el te xé sta negà.", + "echo-notification-placeholder": "No ghe xé notìfeghe", + "echo-notification-placeholder-filters": "No ghe xé notìfeghe che łe corisponda a sti criteri", + "echo-notification-loginrequired": "Te ghè da ndar drento par vardare łe to notìfeghe.", + "echo-notification-popup-loginrequired": "Va drento par vardar łe notìfeghe", "echo-notification-markasread": "Ségnelo come zà lèto", "echo-notification-markasunread": "Ségnelo come gnancora lèto", "echo-notification-markasread-tooltip": "Ségnelo come zà lèto", "echo-notification-more-options-tooltip": "Altre posibilità", + "notification-dynamic-actions-unwatch": "{{GENDER:$3|Mołàrgheła}} de tegnere d'òcio łe nove atività so \"$1\".", + "notification-dynamic-actions-unwatch-confirmation": "No te {{GENDER:$3|tegni}} pì d'òcio ła pàjina \"$1\"", + "notification-dynamic-actions-unwatch-confirmation-description": "{{GENDER:$3|Te połi}} xontare [$2 sta pàjina] in te łe pàjine tegnue d'òcio in calsiasi momento.", + "notification-dynamic-actions-watch": "{{GENDER:$3|Tien d'ocio}} łe nove atività so \"$1\"", + "notification-dynamic-actions-watch-confirmation": "{{GENDER:$3|te si drio}} tegnere d'òcio ła pàjina \"$1\"", + "notification-dynamic-actions-watch-confirmation-description": "{{GENDER:$3|Te połi}} cavare [$2 sta pàjina] da łe pàjine tegnue d'òcio in calsiasi momento.", "notification-link-text-expand-all": "Slarga", - "notification-link-text-expand-alert-count": "Varda {{PLURAL:$1|$1 aviso|$1 avisi}}", + "notification-link-text-expand-alert-count": "Varda {{PLURAL:$1|$1 avixo|$1 avixi}}", "notification-link-text-expand-notice-count": "Varda {{PLURAL:$1|$1 notisia|$1 notisie}}", - "notification-link-text-expand-all-count": "Varda $1 {{PLURAL:$1|aviso|avisi}}", + "notification-link-text-expand-all-count": "Varda $1 {{PLURAL:$1|avixo|avixi}}", "notification-link-text-collapse-all": "Strenzi", "notification-link-text-view-message": "Varda messajo", "notification-link-text-view-mention": "Varda dove i te gà nomenà", @@ -67,7 +110,9 @@ "notification-link-text-view-changes": "{{GENDER:$1|Varda}} i canbiamenti", "notification-link-text-view-page": "Varda la pagina", "notification-header-edit-user-talk": "$1 {{GENDER:$2|el|la}} te gà lassà un mesajo in te la <strong>{{GENDER:$3|to}} pagina de discusion</strong>.", - "notification-header-edit-user-talk-with-section": "$1 {{GENDER:$2|el|la}} te gà lassà un mesajo in te la <strong>{{GENDER:$3|to}} pagina de discusion</strong> su \"<strong>$4</strong>\".", + "notification-header-edit-user-talk-with-section": "$1 {{GENDER:$2|el|ła}} te ga łasà on mesajo in te ła <strong>{{GENDER:$3|to}} pàjina de discusion</strong> so \"<strong>$4</strong>\".", + "notification-compact-header-edit-user-talk": "$1 {{GENDER:$3|el te ga|ła te ga}} {{GENDER:$2|mandà}} on mesajo.", + "notification-compact-header-edit-user-talk-with-section": "$1 {{GENDER:$3|el te ga|ła te ga}} {{GENDER:$2|mandà}} on mesajo so \"<strong>$4</strong>\".", "notification-header-page-linked": "Xe stà tacà un ligame da <strong>$4</strong> a <strong>$3</strong>.", "notification-compact-header-page-linked": "Ligà da <strong>$1</strong>.", "notification-bundle-header-page-linked": "Xe stà ligà {{PLURAL:$5||$5 pagine|100=piassè de 99 pagine}} a <strong>$3</strong>.", @@ -76,50 +121,88 @@ "notification-header-mention-other-nosection": "$1 {{GENDER:$2|el|la}} te gà {{GENDER:$3|nomenà}} su <strong>$4</strong>.", "notification-header-mention-user-talkpage-v2": "$1 {{GENDER:$2|el|la}} te gà {{GENDER:$3|nomenà}} in te la <strong>pagina de discusion {{GENDER:$5|de}} $4</strong> in \"<strong>$6</strong>\".", "notification-header-mention-user-talkpage-nosection": "$1 {{GENDER:$2|el|la}} te gà {{GENDER:$3|nomenà}} in te la <strong>pagina de discusion {{GENDER:$5|de}} $4</strong>.", - "notification-header-mention-agent-talkpage": "$1 {{GENDER:$2|el|la}} te gà {{GENDER:$3|nomenà}} in te la <strong>so pagina de discusion</strong> in \"<strong>$4</strong>\".", - "notification-header-mention-agent-talkpage-nosection": "$1 {{GENDER:$2|el|la}} te gà {{GENDER:$3|nomenà}} in te la <strong>so pagina de discusion</strong>.", + "notification-header-mention-agent-talkpage": "$1 {{GENDER:$2|el|la}} te gà {{GENDER:$3|nomenà}} in te la <strong>so pàjina de discusion</strong> in \"<strong>$4</strong>\".", + "notification-header-mention-agent-talkpage-nosection": "$1 {{GENDER:$2|el|la}} te gà {{GENDER:$3|nomenà}} in te la <strong>so pàjina de discusion</strong>.", "notification-header-mention-article-talkpage": "$1 {{GENDER:$2|el|la}} te gà {{GENDER:$3|nomenà}} in te la pagina de discusion de <strong>$4</strong> in \"<strong>$5</strong>\".", "notification-header-mention-article-talkpage-nosection": "$1 {{GENDER:$2|el|la}} te gà {{GENDER:$3|nomenà}} in te la pagina de discusion de <strong>$4</strong>.", + "notification-header-mention-failure-user-unknown": "{{GENDER:$2|La to}} nòmena de <strong>$3</strong> no ła xé stada inviada parché el utente che te ghè inserio no el xé sta catà. Controła de no ver sbajà.", + "notification-header-mention-failure-user-anonymous": "{{GENDER:$2|La to}} nòmena de <strong>$3</strong> no ła xé stada inviada parché el utente che te ghè inserio el xé anonimo.", + "notification-header-mention-failure-too-many": "{{GENDER:$2|Te ghè nomenà}} pì de $3 {{PLURAL:$3|utente|utenti}}. Tute łe nòmene che łe ga suparà sto limite, no łe xé stae enviae.", + "notification-header-mention-failure-bundle": "{{PLURAL:$3|Na nòmena|$3 nòmene}} che {{GENDER:$2|te ga fato}} in te ła pàjina de discusion <strong>$4</strong> no {{PLURAL:$3|ła połe esare enviada|łe połe esare inviae}}.", "notification-compact-header-mention-failure-user-unknown": "<strong>Sto nome utente no'l gh'è mia:</strong> $1", + "notification-compact-header-mention-failure-user-anonymous": "<strong>No łe połe esare inviae łe nòmene a indirisi IP:</strong> $1", + "notification-header-mention-success": "{{GENDER:$2|Ła to}} nòmena de <strong>$3</strong> ła xé stà enviada.", + "notification-header-mention-success-bundle": "{{PLURAL:$3|Na nòmena|$3 nòmene}} che {{GENDER:$2|te ga fato}} in te ła pàjina de discusion <strong>$4</strong> {{PLURAL:$3|ła xé stà enviada|łe xé stae inviae}}.", "notification-compact-header-mention-success": "<strong>{{GENDER:$2|Te ghè nomenà}}:</strong> $3", + "notification-header-mention-status-bundle": "{{PLURAL:$3|Na notìfega|$3 notìfeghe}} a rivardo de łe nòmene che {{GENDER:$2|te ga fato}} in te ła pàjina de discusion <strong>$4</strong> $5: no {{PLURAL:$5|envià|enviae}}, $6 {{PLURAL:$6|envià|enviae}}.", + "notification-header-user-rights-add-only": "I to deriti utenti i xé stai {{GENDER:$1|modifegai}}. Te si {{GENDER:$4|stà xontà|stada xontada}} a: $2.", + "notification-header-user-rights-remove-only": "I {{GENDER:$4|to}} deriti utente i xé stai {{GENDER:$1|modifegai}}. No te si pì on apartegnente de: $2.", + "notification-header-user-rights-add-and-remove": "I to deriti utente i xé stai {{GENDER:$1|modifegai}}. Te si {{GENDER:$6|stà xontà|stada xontada}} a: $2. No te si pì apartegnente de: $4.", + "notification-header-user-rights-expiry-change": "Ła fin de ła {{GENDER:$4|to}} apartegnensa {{PLURAL:$3|al grupo che vien|ai grupi che vien}} ła xé stada {{GENDER:$1|modifegada}}: $2.", + "notification-header-welcome": "{{GENDER:$2|Benvegnesto|Benvegnesta|Benvegnesto/a}} so {{SITENAME}}, $1! Ne fa piaxere che {{GENDER:$2|ti te sipia}} chive co nù.", + "notification-header-mention-summary": "$1 el te {{GENDER:$2|ga}} {{GENDER:$3|nomenà|nomenada|nomenà/a}} intel ojeto de na modìfega so <strong>$4</strong>.", + "notification-header-watchlist-changed": "$1 {{GENDER:$2|el ga canbià|ła ga canbià}} <strong>$3</strong>, na pàjina en ła {{GENDER:$4|to}} lista de łe pàjine tegnue d'ocio {{PLURAL:$5||, $5 ólte}}.", + "notification-header-watchlist-created": "$1 {{GENDER:$2|el ga creà|ła ga creà}} <strong>$3</strong>, na pàjina en ła {{GENDER:$4|to}} lista de łe pàjine tegnue d'ocio {{PLURAL:$5||, $5 ólte}}.", + "notification-header-watchlist-deleted": "$1 {{GENDER:$2|el ga descançełà|ła ga descançełà}} <strong>$3</strong>, na pàjina che ła ghe xé in te ła {{GENDER:$4|to}} lista de łe pàjine tegnue d'ocio {{PLURAL:$5||, $5 ólte}}.", + "notification-header-watchlist-moved": "$1 {{GENDER:$2|el ga spostà|ła ga spostà}} <strong>$3</strong>, na pàjina che ła ghe xé in te ła {{GENDER:$4|to}} lista de łe pàjine tegnue d'ocio {{PLURAL:$5||, $5 ólte}}.", + "notification-header-watchlist-restored": "$1 {{GENDER:$2|el ga reciapà fora|ła ga reciapà fora}} <strong>$3</strong>, na pàjina che te ła ghè in ła {{GENDER:$4|to}} lista de łe pàjine tegnue d'ocio {{PLURAL:$5||, $5 ólte}}.", + "notification-header-watchlist-multiuser-changed": "<strong>$1</strong>, na pàjina in te ła {{GENDER:$2|to}} łista de pàjine tegnue d'òcio, ła xé ndà canbiada $3 {{PLURAL:$3|òlta|òlte}}.", + "notification-header-watchlist-multiuser-created": "<strong>$1</strong>, na pàjina in te ła {{GENDER:$2|to}} łista de pàjine tegnue d'òcio, ła xé sta creada $3 {{PLURAL:$3|òlta|òlte}}.", + "notification-header-watchlist-multiuser-deleted": "<strong>$1</strong>, na pàjina in te ła {{GENDER:$2|to}} łista de pàjine tegnue d'òcio, ła xé sta descançełada $3 {{PLURAL:$3|òlta|òlte}}.", + "notification-header-watchlist-multiuser-moved": "<strong>$1</strong>, na pàjina in te ła {{GENDER:$2|to}} łista de pàjine tegnue d'òcio, ła xé sta spostada $3 {{PLURAL:$3|òlta|òlte}}.", + "notification-header-watchlist-multiuser-restored": "<strong>$1</strong>, na pàjina in te ła {{GENDER:$2|to}} łista de pàjine tegnue d'òcio, ła xé sta reciapada fora $3 {{PLURAL:$3|òlta|òlte}}.", "notification-welcome-linktext": "Benvegnù!", - "notification-header-thank-you-1-edit": "Te gh'è 'pena fato el to primo canbiamento; grasie e {{GENDER:$2|benvegnùo|benvegnùa|benvegnùo/a}}!", - "notification-header-thank-you-10-edit": "Te sì 'pena rivà a diese canbiamenti; grasie e {{GENDER:$2|va vanti cussì}}!", - "notification-header-thank-you-100-edit": "Te sì 'pena rivà a sento canbiamenti; {{GENDER:$2|tante grasie}}!", - "notification-header-thank-you-1000-edit": "Te sì 'pena rivà a mile canbiamenti; {{GENDER:$2|grasie de sto gran laoro}}!", - "notification-header-thank-you-10000-edit": "Te sì 'pena rivà a diesemila canbiamenti; {{GENDER:$2|grasie de sto gran laoro}}!", - "notification-header-thank-you-100000-edit": "Te sì 'pena rivà a sentomila canbiamenti; {{GENDER:$2|grasie de sto gran laoro}}!", - "notification-header-thank-you-1000000-edit": "Te sì 'pena rivà a un milion de canbiamenti; {{GENDER:$2|grasie de sto gran laoro}}!", + "notification-header-thank-you-1-edit": "A te ghè pena faxesto el to primo cànbio! Gràsie e {{GENDER:$2|benvegnesto|benvegnesta|benvegnest@}}!", + "notification-header-thank-you-10-edit": "Te si pena rivà a diexe canbiamenti; gràsie de core e {{GENDER:$2|va vanti cusì}}!", + "notification-header-thank-you-100-edit": "Te si pena rivà a çento canbiamenti; {{GENDER:$2|tante grasie}}!", + "notification-header-thank-you-1000-edit": "Te si pena rivà a miłe canbiamenti; {{GENDER:$2|gràsie de sto gran laoro}}!", + "notification-header-thank-you-10000-edit": "Te si pena rivà a diexemiłe canbiamenti; {{GENDER:$2|gràsie de sto gran laoro}}!", + "notification-header-thank-you-100000-edit": "Te si pena rivà a çentomiłe canbiamenti; {{GENDER:$2|gràsie de sto gran laoro}}!", + "notification-header-thank-you-1000000-edit": "Te si pena rivà a on miłion de canbiamenti; {{GENDER:$2|gràsie de sto gran laoro}}!", "notification-link-thank-you-edit": "El {{GENDER:$1|to}} canbiamento", "notification-link-text-view-edit": "Varda el canbiamento", + "notification-link-article-reminder": "Varda ła pàjina", "notification-header-reverted": "{{PLURAL:$4|El to canbiamento|I to canbiamenti}} su <strong>$3</strong> {{PLURAL:$4|el xe stà desfà|i xe stà desfài}}{{GENDER:$2|}}", "notification-header-emailuser": "$1 {{GENDER:$2|el|la}} te gà mandà na email.", - "notification-edit-talk-page-email-subject2": "$1 {{GENDER:$1|el|la}} te gà lassà un mesajo su {{SITENAME}}.", - "notification-edit-talk-page-email-batch-body-with-section": "$1 {{GENDER:$1|el|la}} te gà lassà un mesajo su la to pagina de discusion in \"$2\".", - "notification-page-linked-email-subject": "Na pagina fata da ti la xe stà ligà su {{SITENAME}}", - "notification-reverted-email-subject2": "{{PLURAL:$3|El to canbiamento el xe stà desfà|I to canbiamenti i xe stà desfài}} {{GENDER:$1|su}} {{SITENAME}}", - "notification-mention-email-subject": "$1 {{GENDER:$1|el|la}} te gà {{GENDER:$2|nomenà}} su {{SITENAME}}", - "notification-user-rights-email-subject": "I to diriti utente su {{SITENAME}} i xe stà canbià", - "notification-timestamp-ago-seconds": "{{PLURAL:$1|$1 s}}", - "notification-timestamp-ago-minutes": "{{PLURAL:$1|$1 m}}", - "notification-timestamp-ago-hours": "{{PLURAL:$1|$1 h}}", - "notification-timestamp-ago-days": "{{PLURAL:$1|$1 d}}", - "notification-timestamp-ago-months": "$1 {{PLURAL:$1|mese|mesi}}", + "notification-edit-talk-page-email-subject2": "$1 {{GENDER:$2|el|ła}} {{GENDER:$3|te}} gà łasà on mesajo so {{SITENAME}}.", + "notification-page-linked-email-subject": "Na pàjina che {{GENDER:$3|te ghè creà}} ła xé stada ligada so {{SITENAME}}", + "notification-reverted-email-subject2": "{{PLURAL:$4|El to canbiamento el xe stà desfà|I to canbiamenti i xe stà desfài}} {{GENDER:$2|su}} {{SITENAME}}", + "notification-mention-email-subject": "$1 {{GENDER:$2|ła te|el te}} ga {{GENDER:$3|nomenà}} so {{SITENAME}}", + "notification-user-rights-email-subject": "I {{GENDER:$3|to}} deriti utente i xé stai modifegai so {{SITENAME}}", + "notification-timestamp-ago-seconds": "{{PLURAL:$1|$1 seg.}}", + "notification-timestamp-ago-minutes": "{{PLURAL:$1|$1 min.}}", + "notification-timestamp-ago-hours": "{{PLURAL:$1|$1 boto|$1 boti}}", + "notification-timestamp-ago-days": "{{PLURAL:$1|$1 dì}}", + "notification-timestamp-ago-months": "$1 {{PLURAL:$1|mexe|mexi}}", "notification-timestamp-ago-years": "$1 {{PLURAL:$1|ano|ani}}", "notification-timestamp-today": "Uncuò", "notification-timestamp-yesterday": "Jèri", - "notification-inbox-filter-read": "Za lèti", - "notification-inbox-filter-unread": "Da lèzar", + "notification-inbox-filter-read": "Xà lexesti", + "notification-inbox-filter-unread": "Njioncora lexesti", "notification-inbox-filter-all": "Tuti", - "echo-email-body-default": "Te gh'è n'aviso novo su {{SITENAME}}:\n\n$1", - "echo-notification-alert": "{{PLURAL:$1|Aviso ($1)|Avisi ($1)|100=Avisi (99+)}}", - "echo-notification-alert-text-only": "Avisi", + "echo-specialmute-label-mute-notifications": "Fa taxere łe notifeghe che riva da parte de sto utente", + "echo-email-plain-footer": "Par controłare che email {{GENDER:$1|te}} vien enviae, verìfega łe {{GENDER:$1|to}} prefarense:", + "echo-email-html-footer-preference-link-text": "verìfega łe {{GENDER:$1|to}} prefarense", + "echo-email-html-footer-with-link": "Par controłare che email {{GENDER:$2|te}} vien enviae, $1.", + "echo-notification-alert": "{{PLURAL:$1|Avixo ($1)|Avixi ($1)|100=Avixi (99+)}}", + "echo-notification-notice": "{{PLURAL:$1|Notisia ($1)|Notisie ($1)|100=Notisie (99+)}}", + "echo-notification-alert-text-only": "Avixi", "echo-notification-notice-text-only": "Notisie", - "echo-overlay-link": "Tuti i avisi", - "echo-overlay-title": "<b>Avisi</b>", - "echo-overlay-title-overflow": "<b>{{PLURAL:$1|Aviso|Avisi}}</b> (mostra $1 de $2 mia lèti)", - "echo-mark-all-as-read": "Segna tuto come zà lèto", - "echo-mark-all-as-read-confirmation": "$1 {{PLURAL:$1|aviso segnà come leto|avisi segnà come leti}}", + "echo-overlay-link": "Tuti i avixi", + "echo-overlay-title": "<b>Avixi</b>", + "echo-mark-all-as-read": "Segna tuto cofà xà lexesto", + "echo-mark-all-as-read-confirmation": "$1 {{PLURAL:$1|avixo segnà cofà lexesto|avixi segnai cofà lexesti}}", + "echo-mark-wiki-as-read": "Segna tute cofà lexeste in te ła Wiki sełesionada: $1", + "echo-displaysnippet-title": "Nova notìfega", "echo-date-today": "Uncuò", - "echo-date-yesterday": "Jeri" + "echo-date-yesterday": "Jeri", + "notification-bundle-header-edit-user-talk-v2": "{{PLURAL:$1|On mesajo novo|$1 mesaji novi|100=Pì de 99 novi mesaji|1000=Pì de 999 novi mesaji}} in te ła <strong>{{GENDER:$3|to}} pàjina de discusion</strong>.", + "echo-email-batch-subject-daily": "Te ghè {{PLURAL:$2|na nova notìfega|nove notìfega}} so {{SITENAME}}", + "echo-email-batch-subject-weekly": "Te ghè {{PLURAL:$2|na nova notìfega|nove notìfeghe}} so {{SITENAME}} stimana", + "echo-email-batch-body-intro-daily": "S-ciao $1,\nCiapa cuà on resunto de łe atività de uncó so {{SITENAME}}.", + "echo-email-batch-body-intro-weekly": "S-ciao $1,\nCiapa cuà on resunto de łe atività de sta stimana so {{SITENAME}}.", + "echo-email-batch-link-text-view-all-notifications": "Varda tute łe notìfeghe", + "notification-header-foreign-alert": "Altri avixi da {{PLURAL:$5|on'altra wiki|altre $5 wiki}}", + "notification-header-foreign-notice": "Altre notisie da {{PLURAL:$5|on'altra wiki|altre $5 wiki}}", + "notification-header-foreign-all": "Altre notìfeghe da {{PLURAL:$5|on'altra wiki|altre $5 wiki}}" } diff --git a/Echo/i18n/vi.json b/Echo/i18n/vi.json index b08f2f25..24e69162 100644 --- a/Echo/i18n/vi.json +++ b/Echo/i18n/vi.json @@ -2,17 +2,17 @@ "@metadata": { "authors": [ "Baonguyen21022003", - "Minh Nguyen", - "Trần Nguyễn Minh Huy", "Max20091", + "Minh Nguyen", "Nguyên Lê", - "Quenhitran" + "Quenhitran", + "Thienhau2003", + "Trần Nguyễn Minh Huy" ] }, "echo-desc": "Hệ thống thông báo cho người dùng về các sự kiện và thay đổi quan trọng", "prefs-echo": "Thông báo", "prefs-emailsettings": "Tùy chọn thư điện tử", - "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-blocknotificationslist": "Tắt tiếng người dùng", @@ -29,8 +29,7 @@ "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-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-pref-dont-email-read-notifications": "Bỏ qua các thông báo đã đọc trong thư điện tử tóm tắt", "echo-learn-more": "Tìm hiểu thêm", "echo-log": "Nhật trình công khai", "echo-new-messages": "Bạn có tin nhắn mới", @@ -45,6 +44,9 @@ "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-category-title-thank-you-edit": "Sửa {{PLURAL:$1}}cột mốc", + "echo-category-title-watchlist": "Sửa đổi trang đang theo dõi", + "echo-category-title-minor-watchlist": "Sửa đổi nhỏ trang đang theo dõi", "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 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ả.", @@ -54,7 +56,9 @@ "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", + "echo-pref-tooltip-thank-you-edit": "Thông báo cho tôi khi tôi sửa đổi lần thứ 1, 10, 100…", + "echo-pref-tooltip-watchlist": "Thông báo cho tôi khi ai đó thực hiện sửa đổi (không phải là nhỏ) vào một trang trong danh sách theo dõi của tôi.", + "echo-pref-tooltip-minor-watchlist": "Thông báo cho tôi khi ai đó thực hiện sửa đổi nhỏ vào một trang trong danh sách theo dõi của tôi.", "notifications": "Thông báo", "tooltip-pt-notifications-alert": "Tin nhắn cho bạn", "tooltip-pt-notifications-notice": "Thông báo cho bạn", @@ -65,7 +69,6 @@ "echo-displaynotificationsconfiguration-sorting-by-section-legend": "Loại thông báo nào được sắp xếp vào phần nào", "echo-displaynotificationsconfiguration-available-notification-methods-header": "Các phương thức thông báo cho phép", "echo-displaynotificationsconfiguration-available-notification-methods-by-category-legend": "Các phương thức thông báo được hỗ trợ cho từng loại thông báo", - "echo-displaynotificationsconfiguration-available-notification-methods-by-type-legend": "Phương thức thông báo nào được hỗ trợ cho từng loại; chỉ có liên quan đến các loại thông báo vì các lý do được ẩn trong tùy chọn", "echo-displaynotificationsconfiguration-enabled-default-header": "Kích hoạt theo mặc định", "echo-displaynotificationsconfiguration-enabled-default-existing-users-legend": "Người dùng đã tồn tại", "echo-displaynotificationsconfiguration-enabled-default-new-users-legend": "Người dùng mới", @@ -80,11 +83,7 @@ "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", - "echo-anon": "Để nhận thông báo, hãy [$1 mở tài khoản] hoặc [$2 đăng nhập].", "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-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.", "echo-notification-placeholder": "Không có thông báo.", @@ -157,11 +156,10 @@ "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}}", - "notification-edit-talk-page-email-batch-body-with-section": "$1 đã {{GENDER:$1}}nhắn tin cho bạn trong “$2”.", + "notification-edit-talk-page-email-subject2": "$1 đã {{GENDER:$2}}nhắn tin cho bạn trên {{SITENAME}}", "notification-page-linked-email-subject": "Có liên kết mới đến một trang do bạn tạo ra tại {{SITENAME}}", - "notification-reverted-email-subject2": "{{PLURAL:$3|Sửa đổi|Các sửa đổi}} của bạn đã bị {{GENDER:$1}}lùi lại trên {{SITENAME}}", - "notification-mention-email-subject": "$1 đã nói đến {{GENDER:$2}}bạn tại {{SITENAME}}", + "notification-reverted-email-subject2": "{{PLURAL:$4|Sửa đổi|Các sửa đổi}} của bạn đã bị {{GENDER:$2}}lùi lại trên {{SITENAME}}", + "notification-mention-email-subject": "$1 đã nói đến {{GENDER:$3}}bạn tại {{SITENAME}}", "notification-user-rights-email-subject": "Các quyền người dùng của bạn đã thay đổi tại {{SITENAME}}", "notification-timestamp-ago-seconds": "$1gi", "notification-timestamp-ago-minutes": "$1ph́", @@ -174,9 +172,7 @@ "notification-inbox-filter-read": "Đọc", "notification-inbox-filter-unread": "Chưa đọc", "notification-inbox-filter-all": "Tất cả", - "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-specialmute-label-mute-notifications": "Làm im thông báo từ người dùng này", "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.", @@ -186,13 +182,12 @@ "echo-notification-notice-text-only": "Thông báo", "echo-overlay-link": "Tất cả các thông báo", "echo-overlay-title": "<b>Thông báo</b>", - "echo-overlay-title-overflow": "<b>Tin nhắn</b> (đang xem $1 trên $2 chưa đọc)", "echo-mark-all-as-read": "Đánh dấu tất cả là đã đọc", "echo-mark-all-as-read-confirmation": "$1 thông báo được đánh dấu là đã đọc", "echo-mark-wiki-as-read": "Đánh dấu tất cả là đã đọc trong wiki được chọn: $1", + "echo-displaysnippet-title": "Thông báo mới", "echo-date-today": "Hôm nay", "echo-date-yesterday": "Hôm qua", - "echo-load-more-error": "Lỗi đã xảy ra khi lấy thêm kết quả.", "notification-bundle-header-edit-user-talk-v2": "{{PLURAL:$1|Một tin nhắn|$1 tin nhắn|100=99+ tin nhắn}} mới tại <strong>trang thảo luận của {{GENDER:$3}}bạn</strong>.", "echo-email-batch-subject-daily": "Bạn có {{PLURAL:$2|một tin nhắn|các tin nhắn}} mới hôm nay trên {{SITENAME}}", "echo-email-batch-subject-weekly": "Bạn có {{PLURAL:$2|thông báo|các thông báo}} mới trên {{SITENAME}} tuần này", diff --git a/Echo/i18n/wa.json b/Echo/i18n/wa.json index b2cc7ab6..58c47820 100644 --- a/Echo/i18n/wa.json +++ b/Echo/i18n/wa.json @@ -1,9 +1,12 @@ { "@metadata": { "authors": [ + "Reptilien.19831209BE1", "Srtxg" ] }, "prefs-echo": "Notifiaedjes", - "tooltip-pt-notifications-alert": "Vos abranles" + "tooltip-pt-notifications-alert": "Vos abranles", + "notification-link-text-expand-all": "Diswalper", + "notification-welcome-linktext": "Bénvnowe" } diff --git a/Echo/i18n/xsy.json b/Echo/i18n/xsy.json new file mode 100644 index 00000000..fcfa5e3c --- /dev/null +++ b/Echo/i18n/xsy.json @@ -0,0 +1,11 @@ +{ + "@metadata": { + "authors": [ + "Lalotahes" + ] + }, + "tooltip-pt-notifications-alert": "{{GENDER:| niSo’}} kapatinekla’", + "notification-link-text-expand-all": "pawSika:", + "notification-inbox-filter-read": "kiSka:at", + "notification-inbox-filter-all": "saeboeh" +} diff --git a/Echo/i18n/yi.json b/Echo/i18n/yi.json index 7b47764f..0a99b805 100644 --- a/Echo/i18n/yi.json +++ b/Echo/i18n/yi.json @@ -1,17 +1,18 @@ { "@metadata": { "authors": [ - "פוילישער", + "Har-wradim", "Macofe", - "Har-wradim" + "פוילישער" ] }, "echo-desc": "סיסטעם פאר נאטיפֿיצירן באניצער וועגן פאסירונגען און מעלדונגען", "prefs-echo": "אנזאגן", "prefs-emailsettings": "ע־פאסט אפציעס", - "prefs-displaynotifications": "ווײַזן אפציעס", "prefs-echosubscriptions": "זיי מיך מודיע וועגן די דאזיקע געשעענישן", "prefs-echocrosswiki": "איבערוויקי הודעות", + "prefs-echopollupdates": "לעבעדיקע הודעות", + "echo-mobile-notifications-filter-title": "פֿילטערן הודעות", "echo-pref-send-me": "שיקט מיר:", "echo-pref-send-to": "שיקט צו:", "echo-pref-email-format": "ע־פאסט פֿארמאט", @@ -24,7 +25,6 @@ "echo-pref-email-format-html": "HTML", "echo-pref-email-format-plain-text": "פשוטער טעקסט", "echo-pref-cross-wiki-notifications": "ווייזן מודעות פון אנדערע וויקיס", - "echo-pref-beta-feature-cross-wiki-message": "דערברייטערטע מודעות", "echo-learn-more": "לערנען נאך", "echo-log": "עפֿנטלעך לאגבוך", "echo-new-messages": "איר האט נייע מעלדונגען", @@ -34,6 +34,8 @@ "echo-category-title-mention": "{{PLURAL:$1|דערמאנונג|דערמאנונגען}}", "echo-category-title-other": "{{PLURAL:$1|אנדערע}}", "echo-category-title-system": "{{PLURAL:$1|סיסטעם}}", + "echo-category-title-system-noemail": "{{PLURAL:$1|סיסטעם}}", + "echo-category-title-system-emailonly": "{{PLURAL:$1|סיסטעם}}", "echo-category-title-user-rights": "{{PLURAL:$1|באניצער־רעכטן ענדערונג|באניצער־רעכטן ענדערונגען}}", "echo-category-title-emailuser": "{{PLURAL:$1|בליצבריוו פון אנדער באניצער|בליצבריוו פון אנדערע באניצער}}", "echo-pref-tooltip-edit-user-talk": "זיי מיר מודיע ווען עמעצער שיקט אַ מעלדונג אָדער ענטפערט אויף מיין שמועס בלאַט.", @@ -42,7 +44,6 @@ "echo-pref-tooltip-mention": "זיי מיר מודיע ווען עמעצער פאַרבינדט זיך צו מיין באַניצער־בלאַט.", "echo-pref-tooltip-user-rights": "זיי מיר מודיע ווען עמעצער ענדערט מיינע באַניצער־רעכטן.", "echo-pref-tooltip-emailuser": "זיי מיר מודיע ווען עמעצער שיקט מיר אַ בליצבריוו.", - "echo-error-no-formatter": "קיין פארמאטירונג נישט דעפינירט פאר דער הודעה.", "notifications": "אנזאגן", "tooltip-pt-notifications-alert": "{{GENDER:|אייערע}} אויפדערוואכן", "tooltip-pt-notifications-notice": "{{GENDER:|אייערע}} מעלדונגען", @@ -59,10 +60,7 @@ "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": "קיין מודעות צוגעפאסט צו די קריטעריע.", @@ -91,26 +89,34 @@ "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-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-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-body-reverted": "$1", "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": "Your {{PLURAL:$3|אייער רעדאקטירונג איז|אייערע רעדאקטירונגען זענען}} געווארן {{GENDER:$1|צוריקגעשטעלט}} אויף {{SITENAME}}", - "notification-mention-email-subject": "$1 {{GENDER:$1|האט {{GENDER:$2|אײַך}} דערמאנט}} אויף {{SITENAME}}", - "notification-user-rights-email-subject": "אײַערע באניצער־רעכטן זענען געווארן געענדערט אויף {{SITENAME}}", + "notification-edit-talk-page-email-subject2": "$1 {{GENDER:$2|האט}} {{GENDER:$3|אייך}} געשריבן א נייע מעלדונג אינעם {{SITENAME}} וועבזייטל", + "notification-page-linked-email-subject": "א בלאט {{GENDER:$3|איר}} האט געשאפן איז געווארן פֿאַרלינקט אויף {{SITENAME}}", + "notification-reverted-email-subject2": "{{PLURAL:$4|אייער רעדאקטירונג איז|אייערע רעדאקטירונגען זענען}} געווארן {{GENDER:$2|צוריקגעשטעלט}} אויף {{SITENAME}}", + "notification-mention-email-subject": "$1 {{GENDER:$2|האט {{GENDER:$3|אײַך}} דערמאנט}} אויף {{SITENAME}}", + "notification-user-rights-email-subject": "{{GENDER:$3|אײַערע}} באניצער־רעכטן זענען געווארן געענדערט אויף {{SITENAME}}", "notification-timestamp-ago-seconds": "{{PLURAL:איין סעקונדע1|$1 סעקונדעס}}", "notification-timestamp-ago-minutes": "{{PLURAL:$1|$1 מינוט}}", "notification-timestamp-ago-hours": "{{PLURAL:$1|א שעה|$1 שעה׳ן}}", @@ -122,7 +128,6 @@ "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": "{{PLURAL:$1|מעלדונג ($1)|מעלדונגען ($1)|100=מעלדונגען (99+)}}", "echo-notification-alert-text-only": "מעלדונגען", @@ -131,6 +136,7 @@ "echo-overlay-title": "<b>הודעות</b>", "echo-mark-all-as-read": "מאַרקירן אַלע געליינט", "echo-mark-wiki-as-read": "מאַרקירן אַלע געליינט אין אױסגעקליבענע װיקי: $1", + "echo-displaysnippet-title": "נייע הודעה", "echo-date-today": "הײַנט", "echo-date-yesterday": "נעכטן", "echo-email-batch-link-text-view-all-notifications": "ווײַזן אלע אנזאגן", diff --git a/Echo/i18n/yo.json b/Echo/i18n/yo.json index f248ec86..c913246c 100644 --- a/Echo/i18n/yo.json +++ b/Echo/i18n/yo.json @@ -13,18 +13,16 @@ "notification-link-text-view-mention": "Ìgbéwò ìdárúkọ", "notification-link-text-view-changes": "Ìgbéwò àwọn àtúnṣe tuntun", "notification-link-text-view-page": "Ìgbéwò ojúewé", + "notification-welcome-linktext": "Kú àbò", "notification-link-text-view-edit": "Ìgbéwò àtúnṣe", - "notification-edit-talk-page-email-subject2": "$1 {{GENDER:$1|fi}} ìránṣẹ́ fún yín lórí {{SITENAME}}", - "notification-edit-talk-page-email-batch-body-with-section": "$1 {{GENDER:$1|fi}} ìránṣẹ́ s'órí ojúewé ọ̀rọ̀ yín ní \"$2\".", - "notification-mention-email-subject": "$1 {{GENDER:$1|dárúkọ}} yín lórí {{SITENAME}}", + "notification-edit-talk-page-email-subject2": "$1 {{GENDER:$2|fi}} ìránṣẹ́ fún yín lórí {{SITENAME}}", + "notification-mention-email-subject": "$1 {{GENDER:$2|dárúkọ}} yín lórí {{SITENAME}}", "notification-timestamp-today": "Òní", "notification-inbox-filter-read": "Àwòkà", "notification-inbox-filter-unread": "Àìtíìgbéwò", "notification-inbox-filter-all": "Gbogbo wọn", - "echo-email-body-default": "Ẹ ní ìdálákìíyèsí tuntun ní {{SITENAME}}:\n\n\n$1", "echo-overlay-link": "Gbogbo ìdálákìíyèsí", "echo-overlay-title": "<b>Àwọn ìdálákìíyèsí</b>", - "echo-overlay-title-overflow": "<b>{{PLURAL:$1|Àwọn ìdálákìíyèsí}}</b> (ìhàn $1 nínú $2 àìtíìkà)", "echo-date-today": "Òní", "echo-date-yesterday": "Àná", "echo-email-batch-link-text-view-all-notifications": "Ìgbéwò gbogbo ìdálákìíyèsí" diff --git a/Echo/i18n/yue.json b/Echo/i18n/yue.json index 4be40839..59ce4649 100644 --- a/Echo/i18n/yue.json +++ b/Echo/i18n/yue.json @@ -1,16 +1,16 @@ { "@metadata": { "authors": [ - "William915", - "Wong128hk", + "Deryck Chan", "Ktchankt", - "Suzukaze-c" + "Suzukaze-c", + "William915", + "Wong128hk" ] }, "echo-desc": "通知系統", "prefs-echo": "通知", "prefs-emailsettings": "電郵選項", - "prefs-displaynotifications": "顯示選項", "prefs-echosubscriptions": "通知選項", "prefs-echocrosswiki": "跨維基通知", "echo-pref-send-me": "幾耐電郵通知一次", @@ -34,16 +34,12 @@ "echo-category-title-system": "{{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-error-no-formatter": "無預定通知格式", "notifications": "通知", "tooltip-pt-notifications-alert": "{{GENDER:|你}}嘅提示", "echo-specialpage": "通知", - "echo-anon": "要收到通知嘅話,就[$1 開戶]或者[$2 簽到]啦。", "echo-none": "爾家無通知畀你", - "echo-more-info": "知多啲", - "echo-feedback": "反饋", "notification-link-text-view-message": "去睇信息", "notification-link-text-view-mention": "去睇下講啲咩", "notification-link-text-view-changes": "去睇改咗啲乜", diff --git a/Echo/i18n/za.json b/Echo/i18n/za.json new file mode 100644 index 00000000..dc8d9764 --- /dev/null +++ b/Echo/i18n/za.json @@ -0,0 +1,9 @@ +{ + "@metadata": { + "authors": [ + "唐吉訶德的侍從" + ] + }, + "notification-link-text-expand-all": "Mbe", + "notification-link-text-collapse-all": "Rwt" +} diff --git a/Echo/i18n/zh-hans.json b/Echo/i18n/zh-hans.json index ff33fc86..3124c7b4 100644 --- a/Echo/i18n/zh-hans.json +++ b/Echo/i18n/zh-hans.json @@ -1,52 +1,72 @@ { "@metadata": { "authors": [ + "A Retired User", "Anakmalaysia", + "AnnAngela", + "Apflu", + "Blackteahamburger", "Byfserag", "Chiefwei", + "Cosine02", "Cwek", "Dimension", + "EagerLin", "Fantasticfears", "GeneralNFS", "Hydra", "Hzy980512", + "Impersonator 1", "Kuailong", + "LNDDYL", "Li3939108", "Liangent", "Linforest", "Liuxinyu970226", + "Looong", + "Mywood", "Qiyue2001", "Shirayuki", "Shizhao", + "SomeyaMako", "StephDC", + "Suchichi02", "TianyinLee", + "Tiger", + "Viztor", + "WhitePhosphorus", "Xiaomingyan", "Xingzhe", + "Xiplus", "Yfdyh000", "乌拉跨氪", - "Mywood", - "Impersonator 1", - "EagerLin", + "予弦", + "佛壁灯", + "列维劳德", + "沈澄心", + "神樂坂秀吉", + "科劳", "范", - "Apflu", - "Cosine02", - "LNDDYL", - "飞舞回堂前", - "WhitePhosphorus" + "飞舞回堂前" ] }, "echo-desc": "用于通知用户有关活动和消息的系统", "prefs-echo": "通知", "prefs-emailsettings": "电子邮件选项", - "prefs-displaynotifications": "显示选项", "prefs-echosubscriptions": "通知我这些事件", "prefs-echocrosswiki": "跨wiki通知", - "prefs-blocknotificationslist": "禁言用户", + "prefs-blocknotificationslist": "屏蔽用户", + "prefs-mutedpageslist": "页面链接通知的页面已静音", + "prefs-echopollupdates": "实时通知", + "echo-mobile-notifications-filter-title": "过滤通知", + "echo-pref-show-poll-updates": "当他们达到是显示新通知", + "echo-pref-show-poll-updates-help": "在标题栏显示未读通知的数量,当通知到达时立即显示每一条通知的片段。", "echo-pref-send-me": "给我发送:", "echo-pref-send-to": "发送至:", "echo-pref-email-format": "电子邮件格式:", "echo-pref-web": "网页", "echo-pref-email": "电子邮件", + "echo-pref-push": "应用程序", "echo-pref-email-frequency-never": "不要给我发送任何电子邮件通知", "echo-pref-email-frequency-immediately": "每一新事件都单独通知", "echo-pref-email-frequency-daily": "每日一次通知摘要", @@ -55,8 +75,8 @@ "echo-pref-email-format-plain-text": "纯文本", "echo-pref-cross-wiki-notifications": "显示来自其他wiki的通知", "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-pref-notifications-page-linked-title-muted-list": "不要为这些页面显示“页面链接”提醒。([[mw:Special:MyLanguage/Help:Notifications#mute|了解更多]])", + "echo-pref-dont-email-read-notifications": "不要在通知摘要邮件中包含已读通知", "echo-learn-more": "了解详情", "echo-log": "公共日志", "echo-new-messages": "您有新消息", @@ -68,9 +88,14 @@ "echo-category-title-mention-success": "成功{{PLURAL:$1|提及}}", "echo-category-title-other": "{{PLURAL:$1|其他}}", "echo-category-title-system": "{{PLURAL:$1|系统}}", + "echo-category-title-system-noemail": "{{PLURAL:$1|系统}}", + "echo-category-title-system-emailonly": "{{PLURAL:$1|系统}}", "echo-category-title-user-rights": "{{PLURAL:$1|用户权限更改}}", "echo-category-title-emailuser": "{{PLURAL:$1|来自其他用户的电子邮件}}", "echo-category-title-article-reminder": "页面{{PLURAL:$1|提示}}", + "echo-category-title-thank-you-edit": "编辑{{PLURAL:$1|里程碑}}", + "echo-category-title-watchlist": "监视列表的页面编辑", + "echo-category-title-minor-watchlist": "监视列表的页面小编辑", "echo-pref-tooltip-edit-user-talk": "当有人在我的讨论页上留言或回复时通知我。", "echo-pref-tooltip-article-linked": "当有人链接到我从另一页面创建的页面时通知我。", "echo-pref-tooltip-reverted": "当有人用撤销或回退工具来还原我的编辑时通知我。", @@ -80,7 +105,9 @@ "echo-pref-tooltip-user-rights": "当有人更新我的用户权限时通知我。", "echo-pref-tooltip-emailuser": "当有人向我发送电子邮件时通知我。", "echo-pref-tooltip-article-reminder": "当我请求时,通知我有关该页面的消息。", - "echo-error-no-formatter": "未指定通知格式。", + "echo-pref-tooltip-thank-you-edit": "在我做出第一次、第十次、第一百次编辑······时通知我。", + "echo-pref-tooltip-watchlist": "当有人对我的监视列表里的页面做出(非小)编辑时通知我。", + "echo-pref-tooltip-minor-watchlist": "当有人对我的监视列表里的页面做出小编辑时通知我。", "notifications": "通知", "tooltip-pt-notifications-alert": "{{GENDER:|您的}}提醒", "tooltip-pt-notifications-notice": "{{GENDER:|您的}}一般通知", @@ -91,7 +118,6 @@ "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": "新用户", @@ -101,15 +127,13 @@ "echo-specialpage-section-markread": "将组标记为已读", "echo-specialpage-markasread": "通知:标记为已读", "echo-specialpage-markasread-invalid-id": "无效的活动ID", + "echo-specialpage-special-help-menu-widget-aria-label": "附加设置和消息通知偏好", "echo-specialpage-pagination-numnotifications": "$1条{{PLURAL:$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-api-failure": "检索通知失败。", "echo-api-failure-cross-wiki": "对远程域名的访问已拒绝。", "echo-notification-placeholder": "这里没有通知。", @@ -140,6 +164,7 @@ "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-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-bundle-header-page-linked": "有人在{{PLURAL:$5||$5个页面|100=超过99个页面}}中加入了指向<strong>$3</strong>的链接。", @@ -158,7 +183,7 @@ "notification-header-mention-failure-too-many": "{{GENDER:$2|您}}尝试提及了超过$3个{{PLURAL:$3|用户}}。上述所有超限的提及未发送。", "notification-header-mention-failure-bundle": "{{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-compact-header-mention-failure-user-anonymous": "<strong>不能提及IP:</strong>$1", "notification-header-mention-success": "{{GENDER:$2|您}}对<strong>$3</strong>的提及被发送。", "notification-header-mention-success-bundle": "{{GENDER:$2|您}}在<strong>$4</strong>讨论页做出的{{PLURAL:$3|$3次提及}}已发送。", "notification-compact-header-mention-success": "<strong>{{GENDER:$2|您提及了}}:</strong>$3", @@ -169,6 +194,16 @@ "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-header-watchlist-changed": "$1 {{GENDER:$2|编辑了}}{{GENDER:$4|您的}}监视列表里的页面 <strong>$3</strong>{{PLURAL:$5|| $5次}}。", + "notification-header-watchlist-created": "$1 {{GENDER:$2|创建了}}{{GENDER:$4|您的}}监视列表里的页面 <strong>$3</strong>{{PLURAL:$5|| $5次}}。", + "notification-header-watchlist-deleted": "$1 {{GENDER:$2|删除了}}{{GENDER:$4|您的}}监视列表里的页面 <strong>$3</strong>{{PLURAL:$5|| $5次}}。", + "notification-header-watchlist-moved": "$1 {{GENDER:$2|移动了}}{{GENDER:$4|您的}}监视列表里的页面 <strong>$3</strong> {{PLURAL:$5|$5次}}。", + "notification-header-watchlist-restored": "$1 {{GENDER:$2|恢复了}}{{GENDER:$4|您的}}监视列表里的页面 <strong>$3</strong>{{PLURAL:$5|| $5次}}。", + "notification-header-watchlist-multiuser-changed": "{{GENDER:$2|您的}}监视列表里的页面 <strong>$1</strong> 被修改了$3{{PLURAL:$3|次}}。", + "notification-header-watchlist-multiuser-created": "{{GENDER:$2|您的}}监视列表里的页面 <strong>$1</strong> 被创建了$3{{PLURAL:$3|次}}。", + "notification-header-watchlist-multiuser-deleted": "{{GENDER:$2|您的}}监视列表里的页面 <strong>$1</strong> 被删除了$3{{PLURAL:$3|次}}。", + "notification-header-watchlist-multiuser-moved": "{{GENDER:$2|您的}}监视列表里的页面 <strong>$1</strong> 被移动了$3{{PLURAL:$3|次}}。", + "notification-header-watchlist-multiuser-restored": "{{GENDER:$2|您的}}监视列表里的页面 <strong>$1</strong> 被恢复了$3{{PLURAL:$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|您}},请继续保持!", @@ -177,17 +212,18 @@ "notification-header-thank-you-10000-edit": "{{GENDER:$2|您}}刚刚作出了{{GENDER:$2|您}}的第1万次编辑;非常非常感谢{{GENDER:$2|您}}!", "notification-header-thank-you-100000-edit": "{{GENDER:$2|您}}刚刚作出了{{GENDER:$2|您}}的第10万次编辑;感谢{{GENDER:$2|您}}惊人的贡献!", "notification-header-thank-you-1000000-edit": "{{GENDER:$2|您}}刚刚作出了{{GENDER:$2|您}}的第100万次编辑;感谢{{GENDER:$2|您}}令人惊讶的贡献!", + "notification-header-thank-you-10000000-edit": "{{GENDER:$2|您}}刚刚作出了{{GENDER:$2|您}}的第1000万次编辑;感谢{{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-body-reverted": "$1", "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": "有人{{GENDER:$1|还原了}}您在{{SITENAME}}上的{{PLURAL:$3|编辑}}", - "notification-mention-email-subject": "$1在{{SITENAME}}上{{GENDER:$1|提到了}}{{GENDER:$2|您}}", - "notification-user-rights-email-subject": "您在{{SITENAME}}的用户权限已被更改", + "notification-edit-talk-page-email-subject2": "$1在{{SITENAME}}给您{{GENDER:$2|留言}}了", + "notification-page-linked-email-subject": "{{GENDER:$3|您}}创建的一个页面在{{SITENAME}}上被链接", + "notification-reverted-email-subject2": "有人{{GENDER:$2|还原了}}您在{{SITENAME}}上的{{PLURAL:$4|编辑}}", + "notification-mention-email-subject": "$1在{{SITENAME}}上{{GENDER:$2|提到了}}{{GENDER:$3|您}}", + "notification-user-rights-email-subject": "{{GENDER:$3|您}}在{{SITENAME}}上的用户权限已被更改", "notification-timestamp-ago-seconds": "{{PLURAL:$1|$1秒}}", "notification-timestamp-ago-minutes": "{{PLURAL:$1|$1分钟}}", "notification-timestamp-ago-hours": "{{PLURAL:$1|$1小时}}", @@ -199,9 +235,7 @@ "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 />$1", - "echo-email-footer-default": "$2\n\n要管理我们给您发送的电子邮件,请更改您的设置:{{canonicalurl:{{#special:Preferences}}#mw-prefsection-echo}}\n\n$1", + "echo-specialmute-label-mute-notifications": "屏蔽该{{GENDER:$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。", @@ -211,14 +245,14 @@ "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": "已标记$1条{{PLURAL:$1|通知}}为已读", "echo-mark-wiki-as-read": "在选定的wiki上标记所有为已读:$1", + "echo-displaysnippet-title": "新提醒", "echo-date-today": "今天", "echo-date-yesterday": "昨天", - "echo-load-more-error": "获取更多结果时出错。", "notification-bundle-header-edit-user-talk-v2": "<strong>{{GENDER:$3|您}}的讨论页</strong>上有{{PLURAL:$1|$1条|100=超过99条}}新消息。", + "echo-email-batch-bullet": "•", "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}}的通知摘要。", @@ -226,5 +260,7 @@ "echo-email-batch-link-text-view-all-notifications": "查看所有通知", "notification-header-foreign-alert": "来自{{PLURAL:$5|另一个wiki|另外$5个wiki}}上的更多提醒", "notification-header-foreign-notice": "来自{{PLURAL:$5|另一个wiki|另外$5个wiki}}上的更多一般通知", - "notification-header-foreign-all": "来自{{PLURAL:$5|其他wiki|$5个其他wiki}}的更多通知" + "notification-header-foreign-all": "来自{{PLURAL:$5|其他wiki|$5个其他wiki}}的更多通知", + "echo-foreign-wiki-lang": "$1 - $2", + "echo-badge-count": "{{PLURAL:$1|$1|100=99+}}" } diff --git a/Echo/i18n/zh-hant.json b/Echo/i18n/zh-hant.json index 13486ca0..bad10ce8 100644 --- a/Echo/i18n/zh-hant.json +++ b/Echo/i18n/zh-hant.json @@ -1,43 +1,52 @@ { "@metadata": { "authors": [ + "A2093064", + "Adsa562", + "Bowleerin", "Ch.Andrew", "Chiefwei", + "Cwlin0416", + "EagerLin", "Fantasticfears", "Justincheng12345", "Kevinhksouth", + "Kly", + "LNDDYL", "Liflon", "Littletung", "Liuxinyu970226", + "Macofe", "Shirayuki", + "Shizhao", "Simon Shek", "Waihorace", + "Wehwei", + "Winstonyin", "Wong128hk", - "LNDDYL", - "Cwlin0416", - "EagerLin", - "Shizhao", - "Bowleerin", - "Macofe", + "Xiplus", "一個正常人", - "Winstonyin", - "逆襲的天邪鬼", - "Wehwei", - "A2093064" + "沈澄心", + "逆襲的天邪鬼" ] }, "echo-desc": "用來通知使用者事件及訊息的系統", "prefs-echo": "通知", "prefs-emailsettings": "電子郵件選項", - "prefs-displaynotifications": "顯示選項", "prefs-echosubscriptions": "通知我這些事件", "prefs-echocrosswiki": "跨 wiki 通知", - "prefs-blocknotificationslist": "禁言用戶", + "prefs-blocknotificationslist": "靜音使用者", + "prefs-mutedpageslist": "停止有關頁面連結通知的頁面", + "prefs-echopollupdates": "通知清單", + "echo-mobile-notifications-filter-title": "篩選通知", + "echo-pref-show-poll-updates": "即時顯示新通知", + "echo-pref-show-poll-updates-help": "在標題欄顯示未讀取通知的數量,並且在送來時顯示各通知的片段。", "echo-pref-send-me": "傳送給我:", "echo-pref-send-to": "傳送至:", "echo-pref-email-format": "電子郵件格式:", "echo-pref-web": "網頁", "echo-pref-email": "電子郵件", + "echo-pref-push": "應用程式", "echo-pref-email-frequency-never": "不要傳送任何信件通知", "echo-pref-email-frequency-immediately": "個別通知發生事件時的訊息", "echo-pref-email-frequency-daily": "每日通知摘要", @@ -46,8 +55,8 @@ "echo-pref-email-format-plain-text": "純文字", "echo-pref-cross-wiki-notifications": "顯示來自其他 wiki 的通知", "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-pref-notifications-page-linked-title-muted-list": "不要顯示這些頁面的「頁面連結」通知。\n([[mw:Special:MyLanguage/Help:Notifications#mute|了解更多]])", + "echo-pref-dont-email-read-notifications": "不要在摘要電子郵件裡包含已讀通知", "echo-learn-more": "瞭解更多", "echo-log": "公共日誌", "echo-new-messages": "您有新訊息", @@ -59,9 +68,14 @@ "echo-category-title-mention-success": "成功{{PLURAL:$1|提及}}", "echo-category-title-other": "{{PLURAL:$1|其他}}", "echo-category-title-system": "{{PLURAL:$1|系統}}", + "echo-category-title-system-noemail": "{{PLURAL:$1|系統}}", + "echo-category-title-system-emailonly": "{{PLURAL:$1|系統}}", "echo-category-title-user-rights": "{{PLURAL:$1|使用者權限變更}}", "echo-category-title-emailuser": "{{PLURAL:$1|來自其他使用者的郵件}}", "echo-category-title-article-reminder": "頁面{{PLURAL:$1|提示}}", + "echo-category-title-thank-you-edit": "編輯{{PLURAL:$1|里程碑}}", + "echo-category-title-watchlist": "監視頁面的編輯", + "echo-category-title-minor-watchlist": "監視頁面的小修改", "echo-pref-tooltip-edit-user-talk": "當有人在我的對話頁面上留下訊息或是回覆留言時通知我。", "echo-pref-tooltip-article-linked": "當有人從另一頁面連結到我建立的頁面時通知我。", "echo-pref-tooltip-reverted": "當有人使用還原或取消功能來還原我的編輯時通知我。", @@ -71,7 +85,9 @@ "echo-pref-tooltip-user-rights": "當有人更改我的使用者權限時通知我。", "echo-pref-tooltip-emailuser": "當有人向我傳送郵件時通知我。", "echo-pref-tooltip-article-reminder": "當我請求時,通知我有關該頁面的消息。", - "echo-error-no-formatter": "尚未定義通知格式。", + "echo-pref-tooltip-thank-you-edit": "當達到我的個人第 1 次、第 10 次、第 100 次…的編輯時通知我。", + "echo-pref-tooltip-watchlist": "當有人在我的監視清單裡的頁面做出編輯(非小修改)時通知我。", + "echo-pref-tooltip-minor-watchlist": "當有人在我的監視清單裡的頁面做出小修改時通知我。", "notifications": "通知", "tooltip-pt-notifications-alert": "{{GENDER:|您的}}提醒", "tooltip-pt-notifications-notice": "{{GENDER:|您的}}一般通知", @@ -82,7 +98,6 @@ "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": "新使用者", @@ -92,14 +107,13 @@ "echo-specialpage-section-markread": "將群組標記為已讀取", "echo-specialpage-markasread": "通知:標記為已讀", "echo-specialpage-markasread-invalid-id": "事件ID無效", + "echo-specialpage-pagefilterwidget-aria-label": "透過 wiki 與頁面標題篩選", + "echo-specialpage-special-help-menu-widget-aria-label": "額外選項與通知偏好設定。", "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": "無任何通知。", @@ -110,6 +124,12 @@ "echo-notification-markasunread": "標記為未讀取", "echo-notification-markasread-tooltip": "標記為已讀取", "echo-notification-more-options-tooltip": "更多選項", + "notification-dynamic-actions-mute-page-linked": "{{GENDER:$2|停止}}在「$1」的連結通知", + "notification-dynamic-actions-mute-page-linked-confirmation": "現在頁面「$1」的「頁面連結」通知已停用", + "notification-dynamic-actions-mute-page-linked-confirmation-description": "{{GENDER:$2|您}}可以隨時在[$1 您的偏好設定]裡管理停用通知的頁面。", + "notification-dynamic-actions-unmute-page-linked": "{{GENDER:$2|取消停止}}在「$1」的連結通知", + "notification-dynamic-actions-unmute-page-linked-confirmation": "現在頁面「$1」的「頁面連結」通知已啟用", + "notification-dynamic-actions-unmute-page-linked-confirmation-description": "{{GENDER:$2|您}}可以隨時在[$1 您的偏好設定]裡管理停用通知的頁面。", "notification-dynamic-actions-unwatch": "{{GENDER:$3|停止}}監視「$1」上的新動態", "notification-dynamic-actions-unwatch-confirmation": "{{GENDER:$3|您}}已不再監視「$1」", "notification-dynamic-actions-unwatch-confirmation-description": "{{GENDER:$3|您}}可以隨時監視[$2 此頁]。", @@ -159,25 +179,35 @@ "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-header-watchlist-changed": "$1{{GENDER:$2|更改了}}一個在{{GENDER:$4|您的}}監視清單上的頁面<strong>$3</strong>{{PLURAL:$5||,一共做出 $5 次}}。", + "notification-header-watchlist-created": "$1{{GENDER:$2|建立了}}一個在{{GENDER:$4|您的}}監視清單上的頁面<strong>$3</strong>{{PLURAL:$5||,一共做出 $5 次}}。", + "notification-header-watchlist-deleted": "$1{{GENDER:$2|刪除了}}一個在{{GENDER:$4|您的}}監視清單上的頁面<strong>$3</strong>{{PLURAL:$5||,一共做出 $5 次}}。", + "notification-header-watchlist-moved": "$1{{GENDER:$2|移動了}}一個在{{GENDER:$4|您的}}監視清單上的頁面<strong>$3</strong>{{PLURAL:$5||,一共做出 $5 次}}。", + "notification-header-watchlist-restored": "$1{{GENDER:$2|恢復了}}一個在{{GENDER:$4|您的}}監視清單上的頁面<strong>$3</strong>{{PLURAL:$5||,一共做出 $5 次}}。", + "notification-header-watchlist-multiuser-changed": "<strong>$1</strong>,一個在{{GENDER:$2|您的}}監視清單上的頁面已被更改了 $3 {{PLURAL:$3|次}}。", + "notification-header-watchlist-multiuser-created": "<strong>$1</strong>,一個在{{GENDER:$2|您的}}監視清單上的頁面已被建立了 $3 {{PLURAL:$3|次}}。", + "notification-header-watchlist-multiuser-deleted": "<strong>$1</strong>,一個在{{GENDER:$2|您的}}監視清單上的頁面已被刪除了 $3 {{PLURAL:$3|次}}。", + "notification-header-watchlist-multiuser-moved": "<strong>$1</strong>,一個在{{GENDER:$2|您的}}監視清單上的頁面已被移動了 $3 {{PLURAL:$3|次}}。", + "notification-header-watchlist-multiuser-restored": "<strong>$1</strong>,一個在{{GENDER:$2|您的}}監視清單上的頁面已被恢復了 $3 {{PLURAL:$3|次}}。", "notification-welcome-linktext": "歡迎", - "notification-header-thank-you-1-edit": "{{GENDER:$2|您}}剛剛作出了{{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|您的}}第十次編輯。謝謝您,請繼續努力!", "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-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-header-thank-you-1000000-edit": "{{GENDER:$2|您}}剛剛作出了{{GENDER:$2|您的}}第一百萬次編輯。感謝{{GENDER:$2|您}}驚人的貢獻!", + "notification-header-thank-you-10000000-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|留下了}}一則訊息給您。", - "notification-edit-talk-page-email-batch-body-with-section": "$1 在您對話頁面上的「$2」中{{GENDER:$1|留下了}}一則訊息。", - "notification-page-linked-email-subject": "您在 {{SITENAME}} 建立的頁面已被連結", - "notification-reverted-email-subject2": "有人{{GENDER:$1|還原了}}您在{{SITENAME}}上的{{PLURAL:$3|編輯}}", - "notification-mention-email-subject": "$1在{{SITENAME}}上{{GENDER:$1|提到了}}{{GENDER:$2|您}}", - "notification-user-rights-email-subject": "您在 {{SITENAME}} 的使用者權限已變更", + "notification-edit-talk-page-email-subject2": "$1 在{{SITENAME}}{{GENDER:$2|留下了}}一則訊息給{{GENDER:$3|您}}。", + "notification-page-linked-email-subject": "{{GENDER:$3|您}}建立的頁面已連結至{{SITENAME}}", + "notification-reverted-email-subject2": "有人{{GENDER:$2|還原了}}您在{{SITENAME}}上的{{PLURAL:$4|編輯}}", + "notification-mention-email-subject": "$1在{{SITENAME}}上{{GENDER:$2|提到了}}{{GENDER:$3|您}}", + "notification-user-rights-email-subject": "{{GENDER:$3|您}}在{{SITENAME}}的使用者權限已變更", "notification-timestamp-ago-seconds": "{{PLURAL:$1|$1秒}}", "notification-timestamp-ago-minutes": "{{PLURAL:$1|$1分鐘}}", "notification-timestamp-ago-hours": "{{PLURAL:$1|$1小時}}", @@ -189,9 +219,7 @@ "notification-inbox-filter-read": "已讀取", "notification-inbox-filter-unread": "未讀取", "notification-inbox-filter-all": "所有", - "echo-email-body-default": "你在 {{SITENAME}} 有一則新訊息:\n\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-specialmute-label-mute-notifications": "不顯示來自此{{GENDER:$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:", @@ -201,18 +229,17 @@ "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": "已標記$1則{{PLURAL:$1|通知}}為已讀", "echo-mark-wiki-as-read": "在選定的wiki上標記所有為已讀:$1", + "echo-displaysnippet-title": "新通知", "echo-date-today": "今日", "echo-date-yesterday": "昨日", - "echo-load-more-error": "擷取更多結果的時候發生錯誤。", "notification-bundle-header-edit-user-talk-v2": "<strong>{{GENDER:$3|您}}的對話頁面</strong>裡有 {{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}} 的今日活動記錄摘要。", - "echo-email-batch-body-intro-weekly": "$1 您好,\n這是您在 {{SITENAME}} 的本週活動記錄摘要。", + "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": "檢視所有通知", "notification-header-foreign-alert": "來自{{PLURAL:$5|另一個 wiki|其他 $5 個 wiki}} 的更多通知", "notification-header-foreign-notice": "來自{{PLURAL:$5|另一個 wiki|其他 $5 個 wiki}} 的更多一般通知", diff --git a/Echo/i18n/zh-hk.json b/Echo/i18n/zh-hk.json new file mode 100644 index 00000000..a8f92b8e --- /dev/null +++ b/Echo/i18n/zh-hk.json @@ -0,0 +1,9 @@ +{ + "@metadata": { + "authors": [ + "A2093064", + "Xiplus" + ] + }, + "prefs-blocknotificationslist": "禁言用戶" +} diff --git a/Echo/images/betafeatures-icon-notifications-ltr.svg b/Echo/images/betafeatures-icon-notifications-ltr.svg deleted file mode 100644 index 71f58f56..00000000 --- a/Echo/images/betafeatures-icon-notifications-ltr.svg +++ /dev/null @@ -1,24 +0,0 @@ -<?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 deleted file mode 100644 index 5a2aa0b3..00000000 --- a/Echo/images/betafeatures-icon-notifications-rtl.svg +++ /dev/null @@ -1,24 +0,0 @@ -<?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 72e609b3..9851c8b3 100644 --- a/Echo/includes/AttributeManager.php +++ b/Echo/includes/AttributeManager.php @@ -54,7 +54,7 @@ class EchoAttributeManager { * An EchoAttributeManager instance created from global variables * @var self */ - protected static $globalVarInstance = null; + protected static $globalVarInstance; /** * @param array[] $notifications Notification attributes @@ -119,9 +119,9 @@ class EchoAttributeManager { public function getUserCallable( $type, $locator = self::ATTR_LOCATORS ) { if ( isset( $this->notifications[$type][$locator] ) ) { return (array)$this->notifications[$type][$locator]; - } else { - return []; } + + return []; } /** @@ -132,20 +132,15 @@ class EchoAttributeManager { * @return string[] */ public function getUserEnabledEvents( User $user, $notifyType ) { - $eventTypesToLoad = $this->notifications; - foreach ( $eventTypesToLoad as $eventType => $eventData ) { - $category = $this->getNotificationCategory( $eventType ); - // Make sure the user is eligible to receive this type of notification - if ( !$this->getCategoryEligibility( $user, $category ) ) { - unset( $eventTypesToLoad[$eventType] ); - } - if ( !$user->getOption( 'echo-subscriptions-' . $notifyType . '-' . $category ) ) { - unset( $eventTypesToLoad[$eventType] ); + return array_values( array_filter( + array_keys( $this->notifications ), + function ( $eventType ) use ( $user, $notifyType ) { + $category = $this->getNotificationCategory( $eventType ); + return $this->isNotifyTypeAvailableForCategory( $category, $notifyType ) && + $this->getCategoryEligibility( $user, $category ) && + $user->getOption( "echo-subscriptions-$notifyType-$category" ); } - } - $eventTypes = array_keys( $eventTypesToLoad ); - - return $eventTypes; + ) ); } /** @@ -308,6 +303,22 @@ class EchoAttributeManager { } /** + * Get notify type availability for all notify types for a given category. + * + * This means whether users *can* turn notifications for this category and format + * on, regardless of the default or a particular user's preferences. + * + * @param string $category Category name + * @return array [ 'web' => bool, 'email' => bool ] + */ + public function getNotifyTypeAvailabilityForCategory( $category ) { + return array_merge( + $this->defaultNotifyTypeAvailability, + $this->notifyTypeAvailabilityByCategory[$category] ?? [] + ); + } + + /** * Checks whether the specified notify type is available for the specified * category. * @@ -319,11 +330,7 @@ class EchoAttributeManager { * @return bool */ public function isNotifyTypeAvailableForCategory( $category, $notifyType ) { - if ( isset( $this->notifyTypeAvailabilityByCategory[$category][$notifyType] ) ) { - return $this->notifyTypeAvailabilityByCategory[$category][$notifyType]; - } else { - return $this->defaultNotifyTypeAvailability[$notifyType]; - } + return $this->getNotifyTypeAvailabilityForCategory( $category )[$notifyType]; } /** @@ -367,11 +374,22 @@ class EchoAttributeManager { * @return string */ public function getNotificationSection( $notificationType ) { - if ( isset( $this->notifications[$notificationType]['section'] ) ) { - return $this->notifications[$notificationType]['section']; - } + return $this->notifications[$notificationType]['section'] ?? 'alert'; + } - return 'alert'; + /** + * Get notification types that allow their own agent to be notified. + * + * @return string[] Notification types + */ + public function getNotifyAgentEvents() { + $events = []; + foreach ( $this->notifications as $event => $attribs ) { + if ( $attribs['canNotifyAgent'] ?? false ) { + $events[] = $event; + } + } + return $events; } } diff --git a/Echo/includes/Bundleable.php b/Echo/includes/Bundleable.php index 1610328e..c68b5705 100644 --- a/Echo/includes/Bundleable.php +++ b/Echo/includes/Bundleable.php @@ -18,7 +18,7 @@ interface Bundleable { /** * @param Bundleable[] $bundleables other object that have been bundled with this one */ - public function setBundledElements( $bundleables ); + public function setBundledElements( array $bundleables ); /** * @return mixed the key by which this object should be sorted during the bundling process diff --git a/Echo/includes/Bundler.php b/Echo/includes/Bundler.php index 5c162687..f91bece5 100644 --- a/Echo/includes/Bundler.php +++ b/Echo/includes/Bundler.php @@ -20,7 +20,7 @@ class Bundler { * @param Bundleable[] $bundleables * @return Bundleable[] Grouped notifications sorted by timestamp DESC */ - public function bundle( $bundleables ) { + public function bundle( array $bundleables ) { $groups = []; $bundled = []; diff --git a/Echo/includes/DataOutputFormatter.php b/Echo/includes/DataOutputFormatter.php index 7e0badd1..1b4abfd9 100644 --- a/Echo/includes/DataOutputFormatter.php +++ b/Echo/includes/DataOutputFormatter.php @@ -1,5 +1,7 @@ <?php +use MediaWiki\Revision\RevisionRecord; + /** * Utility class that formats a notification in the format specified */ @@ -9,10 +11,10 @@ class EchoDataOutputFormatter { * @var string[] type => class */ protected static $formatters = [ - 'flyout' => 'EchoFlyoutFormatter', - 'model' => 'EchoModelFormatter', - 'special' => 'SpecialNotificationsFormatter', - 'html' => 'SpecialNotificationsFormatter', + 'flyout' => EchoFlyoutFormatter::class, + 'model' => EchoModelFormatter::class, + 'special' => SpecialNotificationsFormatter::class, + 'html' => SpecialNotificationsFormatter::class, ]; /** @@ -31,14 +33,14 @@ class EchoDataOutputFormatter { */ public static function formatOutput( EchoNotification $notification, - $format = false, + $format, User $user, Language $lang ) { $event = $notification->getEvent(); $timestamp = $notification->getTimestamp(); $utcTimestampIso8601 = wfTimestamp( TS_ISO_8601, $timestamp ); - $utcTimestampUnix = wfTimestamp( TS_UNIX, $timestamp ); + $utcTimestampUnix = (int)wfTimestamp( TS_UNIX, $timestamp ); $utcTimestampMW = wfTimestamp( TS_MW, $timestamp ); $bundledIds = null; @@ -57,7 +59,7 @@ class EchoDataOutputFormatter { $timestampMw = self::getUserLocalTime( $user, $timestamp ); // Start creating date section header - $now = wfTimestamp(); + $now = (int)wfTimestamp(); $dateFormat = substr( $timestampMw, 0, 8 ); $timeDiff = $now - $utcTimestampUnix; // Most notifications would be more than two days ago, check this @@ -107,7 +109,7 @@ class EchoDataOutputFormatter { if ( $title ) { $output['title'] = [ 'full' => $title->getPrefixedText(), - 'namespace' => $title->getNSText(), + 'namespace' => $title->getNsText(), 'namespace-key' => $title->getNamespace(), 'text' => $title->getText(), ]; @@ -115,7 +117,7 @@ class EchoDataOutputFormatter { $agent = $event->getAgent(); if ( $agent ) { - if ( $event->userCan( Revision::DELETED_USER, $user ) ) { + if ( $event->userCan( RevisionRecord::DELETED_USER, $user ) ) { $output['agent'] = [ 'id' => $agent->getId(), 'name' => $agent->getName(), @@ -185,9 +187,9 @@ class EchoDataOutputFormatter { /** @var EchoEventFormatter $formatter */ $formatter = new $class( $user, $lang ); return $formatter->format( $event ); - } else { - return false; } + + return false; } /** @@ -208,7 +210,7 @@ class EchoDataOutputFormatter { * Helper function for converting UTC timezone to a user's timezone * * @param User $user - * @param string $ts + * @param string|int $ts * @param int $format output format * * @return string diff --git a/Echo/includes/DeferredMarkAsDeletedUpdate.php b/Echo/includes/DeferredMarkAsDeletedUpdate.php index 8b0ba1a7..ffd584d8 100644 --- a/Echo/includes/DeferredMarkAsDeletedUpdate.php +++ b/Echo/includes/DeferredMarkAsDeletedUpdate.php @@ -37,10 +37,11 @@ class EchoDeferredMarkAsDeletedUpdate implements DeferrableUpdate { function ( EchoEvent $event ) { if ( !$event->getTitle() && $event->getTitle( true ) ) { // It is very likely this event was found - // unreaderable because of slave lag. + // unreaderable because of replica lag. // Do not moderate it at this time. LoggerFactory::getInstance( 'Echo' )->debug( - 'EchoDeferredMarkAsDeletedUpdate: Event {eventId} was found unrenderable but its associated title exists on Master. Skipping.', + 'EchoDeferredMarkAsDeletedUpdate: Event {eventId} was found unrenderable ' . + ' but its associated title exists on Master. Skipping.', [ 'eventId' => $event->getId(), 'title' => $event->getTitle()->getPrefixedText(), diff --git a/Echo/includes/DiscussionParser.php b/Echo/includes/DiscussionParser.php index f83e80f2..4a98b277 100644 --- a/Echo/includes/DiscussionParser.php +++ b/Echo/includes/DiscussionParser.php @@ -1,32 +1,35 @@ <?php use MediaWiki\MediaWikiServices; +use MediaWiki\Revision\RevisionRecord; +use MediaWiki\Revision\SlotRecord; abstract class EchoDiscussionParser { const HEADER_REGEX = '^(==+)\h*([^=].*)\h*\1$'; - static protected $timestampRegex; - static protected $revisionInterpretationCache = []; - static protected $diffParser; + protected static $timestampRegex; + protected static $revisionInterpretationCache = []; + protected static $diffParser; /** - * Given a Revision object, generates EchoEvent objects for + * Given a RevisionRecord object, generates EchoEvent objects for * the discussion-related actions that occurred in that Revision. * - * @param Revision $revision + * @param RevisionRecord $revision * @param bool $isRevert * @return null */ - static function generateEventsForRevision( Revision $revision, $isRevert ) { + public static function generateEventsForRevision( RevisionRecord $revision, $isRevert ) { global $wgEchoMentionsOnMultipleSectionEdits; global $wgEchoMentionOnChanges; + $store = MediaWikiServices::getInstance()->getRevisionStore(); - // use slave database if there is a previous revision - if ( $revision->getPrevious() ) { - $title = Title::newFromID( $revision->getPage() ); + // use replica database if there is a previous revision + if ( $store->getPreviousRevision( $revision ) ) { + $title = Title::newFromID( $revision->getPageId() ); // use master database for new page } else { - $title = Title::newFromID( $revision->getPage(), Title::GAID_FOR_UPDATE ); + $title = Title::newFromID( $revision->getPageId(), Title::GAID_FOR_UPDATE ); } // not a valid title @@ -36,8 +39,8 @@ abstract class EchoDiscussionParser { $interpretation = self::getChangeInterpretationForRevision( $revision ); - $userID = $revision->getUser(); - $userName = $revision->getUserText(); + $userID = $revision->getUser()->getId(); + $userName = $revision->getUser()->getName(); $user = $userID != 0 ? User::newFromId( $userID ) : User::newFromName( $userName, false ); foreach ( $interpretation as $action ) { @@ -58,8 +61,8 @@ abstract class EchoDiscussionParser { self::generateMentionEvents( $action['header'], $userLinks, $content, $revision, $user ); } elseif ( $action['type'] === 'unknown-signed-change' ) { $userLinks = array_diff_key( - self::getUserLinks( $action['new_content'], $title ) ?: [], - self::getUserLinks( $action['old_content'], $title ) ?: [] + self::getUserLinks( $action['new_content'], $title ), + self::getUserLinks( $action['old_content'], $title ) ); $header = self::extractHeader( $action['full-section'] ); @@ -74,12 +77,16 @@ abstract class EchoDiscussionParser { // If the recipient is a valid non-anonymous user and hasn't turned // off their notifications, generate a talk page post Echo notification. if ( $notifyUser && $notifyUser->getId() ) { + $permManager = MediaWikiServices::getInstance()->getPermissionManager(); // If this is a minor edit, only notify if the agent doesn't have talk page minor // edit notification blocked - if ( !$revision->isMinor() || !$user->isAllowed( 'nominornewtalk' ) ) { + if ( !$revision->isMinor() || !$permManager->userHasRight( $user, 'nominornewtalk' ) ) { $section = self::detectSectionTitleAndText( $interpretation, $title ); if ( $section['section-text'] === '' ) { - $section['section-text'] = $revision->getComment(); + $comment = $revision->getComment( RevisionRecord::FOR_PUBLIC, $notifyUser ); + if ( $comment ) { + $section['section-text'] = $comment->text; + } } EchoEvent::create( [ 'type' => 'edit-user-talk', @@ -102,7 +109,7 @@ abstract class EchoDiscussionParser { if ( $wgEchoMaxMentionsInEditSummary > 0 && !$user->isBot() && !$isRevert ) { $summaryParser = new EchoSummaryParser(); - $usersInSummary = $summaryParser->parse( $revision->getComment() ); + $usersInSummary = $summaryParser->parse( $revision->getComment()->text ); // Don't allow pinging yourself unset( $usersInSummary[$userName] ); @@ -117,7 +124,7 @@ abstract class EchoDiscussionParser { if ( $count >= $wgEchoMaxMentionsInEditSummary ) { break; } - $mentionedUsers[] = $summaryUser; + $mentionedUsers[$summaryUser->getId()] = $summaryUser->getId(); $count++; } @@ -189,19 +196,19 @@ abstract class EchoDiscussionParser { * @param string $header The subject line for the discussion. * @param int[] $userLinks * @param string $content The content of the post, as a wikitext string. - * @param Revision $revision + * @param RevisionRecord $revision * @param User $agent The user who made the comment. */ public static function generateMentionEvents( $header, - $userLinks, + array $userLinks, $content, - Revision $revision, + RevisionRecord $revision, User $agent ) { global $wgEchoMaxMentionsCount, $wgEchoMentionStatusNotifications; - $title = $revision->getTitle(); + $title = Title::newFromLinkTarget( $revision->getPageAsLinkTarget() ); if ( !$title ) { return; } @@ -212,7 +219,9 @@ abstract class EchoDiscussionParser { return; } - $userMentions = self::getUserMentions( $title, $revision->getUser( Revision::RAW ), $userLinks ); + $userMentions = self::getUserMentions( + $title, $revision->getUser( RevisionRecord::RAW )->getId(), $userLinks + ); $overallMentionsCount = self::getOverallUserMentionsCount( $userMentions ); if ( $overallMentionsCount === 0 ) { return; @@ -228,7 +237,6 @@ abstract class EchoDiscussionParser { 'extra' => [ 'max-mentions' => $wgEchoMaxMentionsCount, 'section-title' => $header, - 'notifyAgent' => true ], 'agent' => $agent, ] ); @@ -261,7 +269,6 @@ abstract class EchoDiscussionParser { 'subject-name' => User::newFromId( $mentionedUserId )->getName(), 'section-title' => $header, 'revid' => $revision->getId(), - 'notifyAgent' => true ], 'agent' => $agent, ] ); @@ -278,7 +285,6 @@ abstract class EchoDiscussionParser { 'subject-name' => $anonymousUser, 'section-title' => $header, 'revid' => $revision->getId(), - 'notifyAgent' => true ], 'agent' => $agent, ] ); @@ -295,7 +301,6 @@ abstract class EchoDiscussionParser { 'subject-name' => $unknownUser, 'section-title' => $header, 'revid' => $revision->getId(), - 'notifyAgent' => true ], 'agent' => $agent, ] ); @@ -304,7 +309,7 @@ abstract class EchoDiscussionParser { } } - private static function getOverallUserMentionsCount( $userMentions ) { + private static function getOverallUserMentionsCount( array $userMentions ) { return count( $userMentions, COUNT_RECURSIVE ) - count( $userMentions ); } @@ -390,7 +395,7 @@ abstract class EchoDiscussionParser { /** * @param string $content * @param Title $title - * @return int[]|false + * @return int[] * Array of links in the user namespace with DBKey => ID. */ private static function getUserLinks( $content, Title $title ) { @@ -398,7 +403,7 @@ abstract class EchoDiscussionParser { $links = $output->getLinks(); if ( !isset( $links[NS_USER] ) || !is_array( $links[NS_USER] ) ) { - return false; + return []; } return $links[NS_USER]; @@ -418,7 +423,7 @@ abstract class EchoDiscussionParser { * * @return ParserOutput */ - static function parseNonEditWikitext( $wikitext, Article $article ) { + private static function parseNonEditWikitext( $wikitext, Article $article ) { static $cache = []; $cacheKey = md5( $wikitext ) . ':' . $article->getTitle()->getPrefixedText(); @@ -427,10 +432,11 @@ abstract class EchoDiscussionParser { return $cache[$cacheKey]; } - global $wgParser; - $options = new ParserOptions; + $parser = MediaWikiServices::getInstance()->getParser(); + + $options = new ParserOptions( $article->getContext()->getUser() ); $options->setTidy( true ); - $output = $wgParser->parse( $wikitext, $article->getTitle(), $options ); + $output = $parser->parse( $wikitext, $article->getTitle(), $options ); $cache[$cacheKey] = $output; return $output; @@ -440,31 +446,38 @@ abstract class EchoDiscussionParser { * Given a Revision object, returns a talk-page-centric interpretation * of the changes made in it. * - * @param Revision $revision + * @param RevisionRecord $revision * @see EchoDiscussionParser::interpretDiff * @return array[] See {@see interpretDiff} for details. */ - static function getChangeInterpretationForRevision( Revision $revision ) { + private static function getChangeInterpretationForRevision( RevisionRecord $revision ) { if ( $revision->getId() && isset( self::$revisionInterpretationCache[$revision->getId()] ) ) { return self::$revisionInterpretationCache[$revision->getId()]; } - $userID = $revision->getUser(); - $userName = $revision->getUserText(); + $userIdentity = $revision->getUser(); + $userID = $userIdentity ? $userIdentity->getId() : 0; + $userName = $userIdentity ? $userIdentity->getName() : ''; $user = $userID != 0 ? User::newFromId( $userID ) : User::newFromName( $userName, false ); + $prevText = ''; if ( $revision->getParentId() ) { - $prevRevision = Revision::newFromId( $revision->getParentId() ); + $store = MediaWikiServices::getInstance()->getRevisionStore(); + $prevRevision = $store->getRevisionById( $revision->getParentId() ); if ( $prevRevision ) { - $prevText = ContentHandler::getContentText( $prevRevision->getContent() ); + $prevText = ContentHandler::getContentText( $prevRevision->getContent( SlotRecord::MAIN ) ) ?: ''; } } $changes = self::getMachineReadableDiff( $prevText, - ContentHandler::getContentText( $revision->getContent() ) + ContentHandler::getContentText( $revision->getContent( SlotRecord::MAIN ) ) + ); + $output = self::interpretDiff( + $changes, + $user->getName(), + Title::newFromLinkTarget( $revision->getPageAsLinkTarget() ) ); - $output = self::interpretDiff( $changes, $user->getName(), $revision->getTitle() ); self::$revisionInterpretationCache[$revision->getId()] = $output; @@ -477,7 +490,7 @@ abstract class EchoDiscussionParser { * * @todo Expand recognisable actions. * - * @param array $changes Output of EchoEvent::getMachineReadableDiff + * @param array[] $changes Output of EchoEvent::getMachineReadableDiff * @param string $username * @param Title|null $title * @return array[] Array of associative arrays. @@ -505,7 +518,7 @@ abstract class EchoDiscussionParser { * but it contains multiple signatures. * - unknown: Unrecognised change type. */ - static function interpretDiff( $changes, $username, Title $title = null ) { + public static function interpretDiff( array $changes, $username, Title $title = null ) { // One extra item in $changes for _info $actions = []; $signedSections = []; @@ -557,7 +570,10 @@ abstract class EchoDiscussionParser { if ( !empty( $sectionSignedUsers ) ) { $signedSections[] = $sectionSpan; if ( !$section['header'] ) { - $fullSection = self::getFullSection( $changes['_info']['rhs'], $change['right-pos'] ); + $fullSection = self::getFullSection( + $changes['_info']['rhs'], + $change['right-pos'] + ); $section['header'] = self::extractHeader( $fullSection ); } $actions[] = [ @@ -621,11 +637,11 @@ abstract class EchoDiscussionParser { return $actions; } - static function getSignedUsers( $content, $title ) { + private static function getSignedUsers( $content, $title ) { return array_keys( self::extractSignatures( $content, $title ) ); } - static function hasNewSignature( $oldContent, $newContent, $username, $title ) { + private static function hasNewSignature( $oldContent, $newContent, $username, $title ) { $oldSignedUsers = self::getSignedUsers( $oldContent, $title ); $newSignedUsers = self::getSignedUsers( $newContent, $title ); @@ -639,7 +655,7 @@ abstract class EchoDiscussionParser { * @param array[] $actions * @return array[] Converted actions */ - static function convertToUnknownSignedChanges( array $signedSections, array $actions ) { + private static function convertToUnknownSignedChanges( array $signedSections, array $actions ) { return array_map( function ( $action ) use( $signedSections ) { if ( $action['type'] === 'unknown-change' && @@ -657,7 +673,12 @@ abstract class EchoDiscussionParser { }, $actions ); } - static function isInSignedSection( $line, array $signedSections ) { + /** + * @param int $line + * @param array[] $signedSections + * @return bool + */ + private static function isInSignedSection( $line, array $signedSections ) { foreach ( $signedSections as $section ) { if ( $line > $section[0] && $line <= $section[1] ) { return true; @@ -674,7 +695,7 @@ abstract class EchoDiscussionParser { * @param int $offset The line to find the full section for. * @return string Content of the section. */ - static function getFullSection( array $lines, $offset ) { + public static function getFullSection( array $lines, $offset ) { $start = self::getSectionStartIndex( $offset, $lines ); $end = self::getSectionEndIndex( $offset, $lines ); $content = implode( "\n", array_slice( $lines, $start, $end - $start ) ); @@ -689,7 +710,7 @@ abstract class EchoDiscussionParser { * @param string[] $lines * @return int[] Tuple [$firstLine, $lastLine] */ - static function getSectionSpan( $offset, $lines ) { + private static function getSectionSpan( $offset, array $lines ) { return [ self::getSectionStartIndex( $offset, $lines ), self::getSectionEndIndex( $offset, $lines ) @@ -702,7 +723,7 @@ abstract class EchoDiscussionParser { * @param string[] $lines * @return int */ - static function getSectionStartIndex( $offset, array $lines ) { + private static function getSectionStartIndex( $offset, array $lines ) { for ( $i = $offset - 1; $i >= 0; $i-- ) { if ( self::getSectionCount( $lines[$i] ) ) { break; @@ -718,7 +739,7 @@ abstract class EchoDiscussionParser { * @param array $lines * @return int */ - static function getSectionEndIndex( $offset, array $lines ) { + private static function getSectionEndIndex( $offset, array $lines ) { $lastLine = count( $lines ); for ( $i = $offset; $i < $lastLine; $i++ ) { if ( self::getSectionCount( $lines[$i] ) ) { @@ -735,13 +756,10 @@ abstract class EchoDiscussionParser { * @param string $text The text. * @return int Number of section headers found. */ - static function getSectionCount( $text ) { + public static function getSectionCount( $text ) { $text = trim( $text ); - $matches = []; - preg_match_all( '/' . self::HEADER_REGEX . '/um', $text, $matches ); - - return count( $matches[0] ); + return (int)preg_match_all( '/' . self::HEADER_REGEX . '/um', $text ); } /** @@ -750,7 +768,7 @@ abstract class EchoDiscussionParser { * @param string $text The text of the section. * @return string|false The title of the section or false if not found */ - static function extractHeader( $text ) { + public static function extractHeader( $text ) { $text = trim( $text ); $matches = []; @@ -812,7 +830,7 @@ abstract class EchoDiscussionParser { * @param Title|null $title * @return string */ - static function stripSignature( $text, Title $title = null ) { + private static function stripSignature( $text, Title $title = null ) { $output = self::getUserFromLine( $text, $title ); if ( $output === false ) { $timestampPos = self::getTimestampPosition( $text ); @@ -834,7 +852,7 @@ abstract class EchoDiscussionParser { * @param string $text The text to strip out the section header from. * @return string The same text, with the section header stripped out. */ - static function stripHeader( $text ) { + private static function stripHeader( $text ) { $text = preg_replace( '/' . self::HEADER_REGEX . '/um', '', $text ); return $text; @@ -849,7 +867,7 @@ abstract class EchoDiscussionParser { * @param Title|null $title * @return bool */ - static function isSignedComment( $text, $user = false, Title $title = null ) { + public static function isSignedComment( $text, $user = false, Title $title = null ) { $userData = self::getUserFromLine( $text, $title ); if ( $userData === false ) { @@ -869,7 +887,7 @@ abstract class EchoDiscussionParser { * @param string $line The line to search for a signature on * @return int|false Integer position */ - static function getTimestampPosition( $line ) { + public static function getTimestampPosition( $line ) { $timestampRegex = self::getTimestampRegex(); $tsMatches = []; if ( !preg_match( @@ -901,7 +919,7 @@ abstract class EchoDiscussionParser { * of a change, 'old_content' and 'new_content' * * 'left_pos' and 'right_pos' (in lines) of the change. */ - static function getMachineReadableDiff( $oldText, $newText ) { + public static function getMachineReadableDiff( $oldText, $newText ) { if ( !isset( self::$diffParser ) ) { self::$diffParser = new EchoDiffParser; } @@ -917,7 +935,7 @@ abstract class EchoDiscussionParser { * @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 ) { + private static function extractSignatures( $text, Title $title = null ) { $lines = explode( "\n", $text ); $output = []; @@ -930,10 +948,7 @@ abstract class EchoDiscussionParser { // Look for the last user link on the line. $userData = self::getUserFromLine( $line, $title ); if ( $userData === false ) { - // print "F\t$lineNumber\t$line\n"; continue; - } else { - // print "S\t$lineNumber\n"; } list( $signaturePos, $user ) = $userData; @@ -976,7 +991,7 @@ abstract class EchoDiscussionParser { * empty, but Parser::pstPass2 should have normalized that for us * already. */ - $match = explode( '|', $match ); + $match = explode( '|', $match, 2 ); $title = Title::newFromText( $match[0] ); // figure out if we the link is related to a user @@ -1008,7 +1023,7 @@ abstract class EchoDiscussionParser { * - Second element is the normalised user name. */ public static function getUserFromLine( $line, Title $title = null ) { - global $wgParser; + $parser = MediaWikiServices::getInstance()->getParser(); /* * First we call extractUsersFromLine to get all the potential usernames @@ -1023,11 +1038,11 @@ abstract class EchoDiscussionParser { // discovered the signature from // don't validate the username - anon (IP) is fine! $user = User::newFromName( $username, false ); - $sig = $wgParser->preSaveTransform( + $sig = $parser->preSaveTransform( '~~~', $title ?: Title::newMainPage(), $user, - new ParserOptions() + new ParserOptions( $user ) ); // see if we can find this user's generated signature in the content @@ -1047,12 +1062,12 @@ abstract class EchoDiscussionParser { * * @param string $line The line to search. * @param string $linkPrefix The prefix to search for. - * @param bool $failureOffset + * @param int|false $failureOffset * @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. */ - static function getLinkFromLine( $line, $linkPrefix, $failureOffset = false ) { + private static function getLinkFromLine( $line, $linkPrefix, $failureOffset = false ) { $offset = 0; // If extraction failed at another offset, try again. @@ -1068,14 +1083,12 @@ abstract class EchoDiscussionParser { $linkPos = strripos( $line, $linkPrefix, $offset ); if ( $linkPos === false ) { - // print "I\tNo match for $linkPrefix\n"; return false; } $linkUser = self::extractUserFromLink( $line, $linkPrefix, $linkPos ); if ( $linkUser === false ) { - // print "E\tExtraction failed\t$linkPrefix\n"; // Look for another place. return self::getLinkFromLine( $line, $linkPrefix, $linkPos ); } else { @@ -1091,7 +1104,7 @@ abstract class EchoDiscussionParser { * @param int $offset Optionally, the offset of the start of the link. * @return bool|string Type description */ - static function extractUserFromLink( $text, $prefix, $offset = 0 ) { + private static function extractUserFromLink( $text, $prefix, $offset = 0 ) { $userPart = substr( $text, strlen( $prefix ) + $offset ); $userMatches = []; @@ -1101,8 +1114,6 @@ abstract class EchoDiscussionParser { $userMatches ) ) { // user link is invalid - // print "I\tUser link invalid\t$userPart\n"; - // print "E\tCannot find user info to extract\n"; return false; } @@ -1113,7 +1124,6 @@ abstract class EchoDiscussionParser { User::getCanonicalName( $user ) === false ) { // Not a real username - // print "E\tInvalid username\n"; return false; } @@ -1127,7 +1137,7 @@ abstract class EchoDiscussionParser { * @throws MWException * @return string regular expression fragment. */ - static function getTimestampRegex() { + public static function getTimestampRegex() { if ( self::$timestampRegex !== null ) { return self::$timestampRegex; } @@ -1135,26 +1145,26 @@ abstract class EchoDiscussionParser { // Step 1: Get an exemplar timestamp $title = Title::newMainPage(); $user = User::newFromName( 'Test' ); - $options = new ParserOptions; + $options = new ParserOptions( $user ); - global $wgParser; + $parser = MediaWikiServices::getInstance()->getParser(); $exemplarTimestamp = - $wgParser->preSaveTransform( '~~~~~', $title, $user, $options ); + $parser->preSaveTransform( '~~~~~', $title, $user, $options ); // Step 2: Generalise it // Trim off the timezone to replace at the end $output = $exemplarTimestamp; $tzRegex = '/\h*\(\w+\)\h*$/'; $tzMatches = []; - if ( preg_match( $tzRegex, $output, $tzMatches ) ) { - $output = preg_replace( $tzRegex, '', $output ); + if ( preg_match( $tzRegex, $output, $tzMatches, PREG_OFFSET_CAPTURE ) ) { + $output = substr( $output, 0, $tzMatches[0][1] ); } $output = preg_quote( $output, '/' ); $output = preg_replace( '/[^\d\W]+/u', '[^\d\W]+', $output ); $output = preg_replace( '/\d+/u', '\d+', $output ); if ( $tzMatches ) { - $output .= preg_quote( $tzMatches[0] ); + $output .= preg_quote( $tzMatches[0][0] ); } if ( !preg_match( "/$output/u", $exemplarTimestamp ) ) { @@ -1174,9 +1184,9 @@ abstract class EchoDiscussionParser { * @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 ) { + public static function getTextSnippet( $text, Language $lang, $length = 150, $title = null ) { // Parse wikitext - $html = MessageCache::singleton()->parse( $text, $title )->getText( [ + $html = MediaWikiServices::getInstance()->getMessageCache()->parse( $text, $title )->getText( [ 'enableSectionEditLinks' => false ] ); $plaintext = trim( Sanitizer::stripAllTags( $html ) ); @@ -1190,7 +1200,7 @@ abstract class EchoDiscussionParser { * @param int $length Length in characters (not bytes); default 150 * @return string */ - static function getTextSnippetFromSummary( $text, Language $lang, $length = 150 ) { + public static function getTextSnippetFromSummary( $text, Language $lang, $length = 150 ) { // Parse wikitext with summary parser $html = Linker::formatLinksInComment( Sanitizer::escapeHtmlAllowEntities( $text ) ); $plaintext = trim( Sanitizer::stripAllTags( $html ) ); @@ -1200,12 +1210,12 @@ abstract class EchoDiscussionParser { /** * Extract an edit excerpt from a revision * - * @param Revision $revision + * @param RevisionRecord $revision * @param Language $lang * @param int $length Length in characters (not bytes); default 150 * @return string */ - public static function getEditExcerpt( Revision $revision, Language $lang, $length = 150 ) { + public static function getEditExcerpt( RevisionRecord $revision, Language $lang, $length = 150 ) { $interpretation = self::getChangeInterpretationForRevision( $revision ); $section = self::detectSectionTitleAndText( $interpretation ); return $lang->truncateForVisual( $section['section-title'] . ' ' . $section['section-text'], $length ); diff --git a/Echo/includes/EchoCachedList.php b/Echo/includes/EchoCachedList.php index b10342e8..fc4c159f 100644 --- a/Echo/includes/EchoCachedList.php +++ b/Echo/includes/EchoCachedList.php @@ -1,27 +1,37 @@ <?php /** - * Caches an EchoContainmentList within a BagOStuff(memcache, etc) to prevent needing + * Caches an EchoContainmentList within WANObjectCache 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; + /** @var WANObjectCache */ protected $cache; + /** @var string */ protected $partialCacheKey; + /** @var EchoContainmentList */ protected $nestedList; + /** @var int */ protected $timeout; + /** @var string[]|null */ private $result; /** - * @param BagOStuff $cache Bag to stored cached data in. + * @param WANObjectCache $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 ) { + public function __construct( + WANObjectCache $cache, + $partialCacheKey, + EchoContainmentList $nestedList, + $timeout = self::ONE_WEEK + ) { $this->cache = $cache; $this->partialCacheKey = $partialCacheKey; $this->nestedList = $nestedList; @@ -57,6 +67,10 @@ class EchoCachedList implements EchoContainmentList { * @inheritDoc */ public function getCacheKey() { - return $this->partialCacheKey . '_' . $this->nestedList->getCacheKey(); + return $this->cache->makeGlobalKey( + 'echo-containment-list', + $this->partialCacheKey, + $this->nestedList->getCacheKey() + ); } } diff --git a/Echo/includes/EchoContainmentSet.php b/Echo/includes/EchoContainmentSet.php index 986379c3..2f79634e 100644 --- a/Echo/includes/EchoContainmentSet.php +++ b/Echo/includes/EchoContainmentSet.php @@ -67,18 +67,38 @@ class EchoContainmentSet { } /** + * Add a list of title IDs from a user preference to the set of lists + * checked by self::contains(). + * + * @param string $preferenceName + */ + public function addTitleIDsFromUserOption( string $preferenceName ) :void { + $preference = $this->recipient->getOption( $preferenceName, [] ); + if ( !is_string( $preference ) ) { + // We expect the preference data to be saved as a string via the + // preferences form; if the user modified their data so it's no + // longer a string, ignore it. + return; + } + $titleIDs = preg_split( '/\n/', $preference, -1, PREG_SPLIT_NO_EMPTY ); + $this->addArray( $titleIDs ); + } + + /** * 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 WANObjectCache|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 = '' ) { + public function addOnWiki( + $namespace, $title, WANObjectCache $cache = null, $cacheKeyPrefix = '' + ) { $list = new EchoOnWikiList( $namespace, $title ); if ( $cache ) { if ( $cacheKeyPrefix === '' ) { diff --git a/Echo/includes/EchoDbFactory.php b/Echo/includes/EchoDbFactory.php index 608f1b0d..831b9b54 100644 --- a/Echo/includes/EchoDbFactory.php +++ b/Echo/includes/EchoDbFactory.php @@ -81,19 +81,19 @@ class MWEchoDbFactory { /** * Get the database connection for Echo * @param int $db Index of the connection to get - * @param mixed $groups Query groups. + * @param string[] $groups Query groups. * @return \Wikimedia\Rdbms\IDatabase */ - public function getEchoDb( $db, $groups = [] ) { + public function getEchoDb( $db, array $groups = [] ) { return $this->getLB()->getConnection( $db, $groups ); } /** * @param int $db Index of the connection to get - * @param array $groups Query groups + * @param string[] $groups Query groups * @return bool|\Wikimedia\Rdbms\IDatabase false if no shared db is configured */ - public function getSharedDb( $db, $groups = [] ) { + public function getSharedDb( $db, array $groups = [] ) { if ( !$this->shared ) { return false; } @@ -109,11 +109,11 @@ class MWEchoDbFactory { * * @deprecated Use newFromDefault() instead to create a db factory * @param int $db Index of the connection to get - * @param mixed $groups Query groups. + * @param string[] $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 ) { + public static function getDB( $db, array $groups = [], $wiki = false ) { global $wgEchoCluster; $services = MediaWikiServices::getInstance(); @@ -133,15 +133,15 @@ class MWEchoDbFactory { } /** - * Wait for the slaves of the database + * Wait for the replicas of the database */ - public function waitForSlaves() { + public function waitForReplicas() { $this->waitFor( $this->getMasterPosition() ); } /** * Get the current master position for the wiki and echo - * db when they have at least one slave in their cluster. + * db when they have at least one replica in their cluster. * * @return array */ @@ -153,7 +153,7 @@ class MWEchoDbFactory { $lb = MediaWikiServices::getInstance()->getDBLoadBalancer(); if ( $lb->getServerCount() > 1 ) { $position['wikiDb'] = $lb->getMasterPos(); - }; + } if ( $this->cluster ) { $lb = $this->getLB(); @@ -167,7 +167,7 @@ class MWEchoDbFactory { /** * Receives the output of self::getMasterPosition. Waits - * for slaves to catch up to the master position at that + * for replicas to catch up to the master position at that * point. * * @param array $position diff --git a/Echo/includes/EchoDiffParser.php b/Echo/includes/EchoDiffParser.php index 0670ef45..7f9a8aa6 100644 --- a/Echo/includes/EchoDiffParser.php +++ b/Echo/includes/EchoDiffParser.php @@ -158,9 +158,9 @@ class EchoDiffParser { } if ( $change === null ) { return $this->changeSet; - } else { - return array_merge( $this->changeSet, $change->getChangeSet() ); } + + return array_merge( $this->changeSet, $change->getChangeSet() ); } /** @@ -170,7 +170,7 @@ class EchoDiffParser { * @param EchoDiffGroup|null $change Changes the immediately previous lines * * @throws MWException - * @return EchoDiffGroup Changes to this line and any changed lines immediately previous + * @return EchoDiffGroup|null Changes to this line and any changed lines immediately previous */ protected function parseLine( $line, EchoDiffGroup $change = null ) { if ( $line ) { @@ -191,9 +191,11 @@ class EchoDiffParser { $change = null; } // @@ -start,numLines +start,numLines @@ - list( , $left, $right ) = explode( ' ', $line ); - list( $this->leftPos ) = explode( ',', substr( $left, 1 ) ); - list( $this->rightPos ) = explode( ',', substr( $right, 1 ) ); + list( , $left, $right ) = explode( ' ', $line, 3 ); + list( $this->leftPos ) = explode( ',', substr( $left, 1 ), 2 ); + list( $this->rightPos ) = explode( ',', substr( $right, 1 ), 2 ); + $this->leftPos = (int)$this->leftPos; + $this->rightPos = (int)$this->rightPos; // -1 because diff is 1 indexed and we are 0 indexed $this->leftPos--; @@ -214,6 +216,7 @@ class EchoDiffParser { throw new MWException( 'Positional error: left' ); } if ( $change === null ) { + // @phan-suppress-next-line PhanTypeMismatchArgument $change = new EchoDiffGroup( $this->leftPos, $this->rightPos ); } $change->subtract( $line ); @@ -225,6 +228,7 @@ class EchoDiffParser { throw new MWException( 'Positional error: right' ); } if ( $change === null ) { + // @phan-suppress-next-line PhanTypeMismatchArgument $change = new EchoDiffGroup( $this->leftPos, $this->rightPos ); } $change->add( $line ); diff --git a/Echo/includes/EchoHooks.php b/Echo/includes/EchoHooks.php index 7a32f1fe..a71ddddc 100644 --- a/Echo/includes/EchoHooks.php +++ b/Echo/includes/EchoHooks.php @@ -1,15 +1,27 @@ <?php -use MediaWiki\Auth\AuthManager; +use MediaWiki\Hook\RecentChange_saveHook; use MediaWiki\Logger\LoggerFactory; use MediaWiki\MediaWikiServices; +use MediaWiki\Preferences\MultiTitleFilter; use MediaWiki\Preferences\MultiUsernameFilter; +use MediaWiki\Revision\RevisionRecord; +use MediaWiki\Storage\EditResult; +use MediaWiki\User\UserIdentity; -class EchoHooks { +class EchoHooks implements RecentChange_saveHook { /** - * @var Revision + * @var RevisionRecord */ private static $lastRevertedRevision = null; + /** + * @var Config + */ + private $config; + + public function __construct( Config $config ) { + $this->config = $config; + } /** * @param array &$defaults @@ -46,6 +58,12 @@ class EchoHooks { 'mention-success' => [ 'web' => false, ], + 'watchlist' => [ + 'web' => false, + ], + 'minor-watchlist' => [ + 'web' => false, + ], ]; foreach ( $wgEchoNotificationCategories as $category => $categoryData ) { @@ -66,7 +84,8 @@ class EchoHooks { */ public static function initEchoExtension() { global $wgEchoNotifications, $wgEchoNotificationCategories, $wgEchoNotificationIcons, - $wgEchoMentionStatusNotifications, $wgAllowArticleReminderNotification, $wgAPIModules; + $wgEchoMentionStatusNotifications, $wgAllowArticleReminderNotification, $wgAPIModules, + $wgEchoWatchlistNotifications, $wgEchoSeenTimeCacheType, $wgMainStash; // allow extensions to define their own event Hooks::run( 'BeforeCreateEchoEvent', @@ -83,6 +102,17 @@ class EchoHooks { unset( $wgEchoNotificationCategories['article-reminder'] ); unset( $wgAPIModules['echoarticlereminder'] ); } + + // Only allow watchlist notifications when enabled + if ( !$wgEchoWatchlistNotifications ) { + unset( $wgEchoNotificationCategories['watchlist'] ); + unset( $wgEchoNotificationCategories['minor-watchlist'] ); + } + + // Default $wgEchoSeenTimeCacheType to $wgMainStash + if ( $wgEchoSeenTimeCacheType === null ) { + $wgEchoSeenTimeCacheType = $wgMainStash; + } } /** @@ -91,7 +121,6 @@ class EchoHooks { * * @param array &$testModules * @param ResourceLoader $resourceLoader - * @return bool */ public static function onResourceLoaderTestModules( array &$testModules, ResourceLoader $resourceLoader @@ -124,15 +153,13 @@ class EchoHooks { } } } - - return true; } /** * Handler for ResourceLoaderRegisterModules hook - * @param ResourceLoader &$resourceLoader + * @param ResourceLoader $resourceLoader */ - public static function onResourceLoaderRegisterModules( ResourceLoader &$resourceLoader ) { + public static function onResourceLoaderRegisterModules( ResourceLoader $resourceLoader ) { global $wgExtensionDirectory, $wgEchoNotificationIcons, $wgEchoSecondaryIcons; $resourceLoader->register( 'ext.echo.emailicons', [ 'class' => 'ResourceLoaderEchoImageModule', @@ -155,7 +182,7 @@ class EchoHooks { */ public static function onLoadExtensionSchemaUpdates( DatabaseUpdater $updater ) { global $wgEchoCluster; - if ( $wgEchoCluster !== false ) { + if ( $wgEchoCluster ) { // DatabaseUpdater does not support other databases, so skip return; } @@ -192,7 +219,7 @@ class EchoHooks { "$dir/db_patches/patch-drop-echo_target_page-etp_user.sql" ); } - $updater->addExtensionField( 'echo_notification', 'notification_bundle_base', + $updater->addExtensionField( 'echo_notification', 'notification_bundle_hash', "$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 @@ -202,8 +229,10 @@ class EchoHooks { } $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" ); + if ( $updater->getDB()->getType() !== 'sqlite' ) { + $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', @@ -214,7 +243,7 @@ class EchoHooks { "$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->addPostDatabaseUpdateMaintenance( RemoveOrphanedEvents::class ); $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', @@ -225,6 +254,28 @@ class EchoHooks { "$dir/db_patches/patch-add-event_page_id-index.sql" ); $updater->dropExtensionIndex( 'echo_notification', 'user_event', "$dir/db_patches/patch-notification-pk.sql" ); + // Can't use addPostDatabaseUpdateMaintenance() here because that would + // run the migration script after dropping the fields + $updater->addExtensionUpdate( [ 'runMaintenance', UpdateEchoSchemaForSuppression::class, + 'extensions/Echo/maintenance/updateEchoSchemaForSuppression.php' ] ); + $updater->dropExtensionField( 'echo_event', 'event_page_namespace', + "$dir/db_patches/patch-drop-echo_event-event_page_namespace.sql" ); + $updater->dropExtensionField( 'echo_event', 'event_page_title', + "$dir/db_patches/patch-drop-echo_event-event_page_title.sql" ); + if ( $updater->getDB()->getType() !== 'sqlite' ) { + $updater->dropExtensionField( 'echo_notification', 'notification_bundle_base', + "$dir/db_patches/patch-drop-notification_bundle_base.sql" ); + $updater->dropExtensionField( 'echo_notification', 'notification_bundle_display_hash', + "$dir/db_patches/patch-drop-notification_bundle_display_hash.sql" ); + } + $updater->dropExtensionIndex( 'echo_notification', 'echo_notification_user_hash_timestamp', + "$dir/db_patches/patch-drop-user-hash-timestamp-index.sql" ); + + $updater->addExtensionTable( 'echo_push_provider', "$dir/db_patches/echo_push_provider.sql" ); + $updater->addExtensionTable( 'echo_push_subscription', "$dir/db_patches/echo_push_subscription.sql" ); + + $updater->modifyExtensionField( 'echo_unread_wikis', 'euw_wiki', + "$dir/db_patches/patch-increase-varchar-echo_unread_wikis-euw_wiki.sql" ); } /** @@ -236,8 +287,6 @@ class EchoHooks { * 'edit-user-talk-' + namespace + title, email digest/email bundling would use this hash as * a key to identify bundle-able event. For web bundling, we bundle further based on user's * visit to the overlay, we would generate a display hash based on the hash of $bundleString - * - * @return bool */ public static function onEchoGetBundleRules( $event, &$bundleString ) { switch ( $event->getType() ) { @@ -259,80 +308,59 @@ class EchoHooks { case 'mention-failure': $bundleString = 'mention-status-' . $event->getExtraParam( 'revid' ); break; + case 'watchlist-change': + case 'minor-watchlist-change': + $bundleString = 'watchlist-change'; + if ( $event->getTitle() ) { + $bundleString .= '-' . $event->getTitle()->getNamespace() + . '-' . $event->getTitle()->getDBkey(); + } + break; } - - return true; - } - - /** - * Handler for the GetBetaFeaturePreferences hook. - * @see https://www.mediawiki.org/wiki/Manual:Hooks/GetBetaFeaturePreferences - * - * @param User $user User to get preferences for - * @param array &$preferences Preferences array - * - * @return bool true in all cases - */ - public static function getBetaFeaturePreferences( User $user, array &$preferences ) { - global $wgExtensionAssetsPath, $wgEchoUseCrossWikiBetaFeature, $wgEchoCrossWikiNotifications; - - if ( $wgEchoUseCrossWikiBetaFeature && $wgEchoCrossWikiNotifications ) { - $preferences['echo-cross-wiki-notifications'] = [ - 'label-message' => 'echo-pref-beta-feature-cross-wiki-message', - 'desc-message' => 'echo-pref-beta-feature-cross-wiki-description', - // Paths to images that represents the feature. - 'screenshot' => [ - 'rtl' => "$wgExtensionAssetsPath/Echo/images/betafeatures-icon-notifications-rtl.svg", - 'ltr' => "$wgExtensionAssetsPath/Echo/images/betafeatures-icon-notifications-ltr.svg", - ], - 'info-link' => 'https://www.mediawiki.org/wiki/Special:Mylanguage/Help:Notifications/Cross-wiki', - // Link to discussion about the feature - talk pages might work - 'discussion-link' => 'https://www.mediawiki.org/wiki/Help_talk:Notifications', - ]; - } - - return true; } /** * Handler for GetPreferences hook. - * @see http://www.mediawiki.org/wiki/Manual:Hooks/GetPreferences + * @see https://www.mediawiki.org/wiki/Manual:Hooks/GetPreferences * * @param User $user User to get preferences for * @param array &$preferences Preferences array * * @throws MWException - * @return bool true in all cases */ public static function getPreferences( $user, &$preferences ) { global $wgEchoEnableEmailBatch, $wgEchoNotifiers, $wgEchoNotificationCategories, $wgEchoNotifications, - $wgAllowHTMLEmail, $wgEchoUseCrossWikiBetaFeature, - $wgEchoCrossWikiNotifications, $wgEchoPerUserBlacklist; + $wgAllowHTMLEmail, $wgEchoPollForUpdates, + $wgEchoCrossWikiNotifications, $wgEchoPerUserBlacklist, + $wgEchoWatchlistNotifications; $attributeManager = EchoAttributeManager::newFromGlobalVars(); // Show email frequency options - $never = wfMessage( 'echo-pref-email-frequency-never' )->escaped(); - $immediately = wfMessage( 'echo-pref-email-frequency-immediately' )->escaped(); $freqOptions = [ - $never => EchoEmailFrequency::NEVER, - $immediately => EchoEmailFrequency::IMMEDIATELY, + 'echo-pref-email-frequency-never' => EchoEmailFrequency::NEVER, + 'echo-pref-email-frequency-immediately' => EchoEmailFrequency::IMMEDIATELY, ]; // Only show digest options if email batch is enabled if ( $wgEchoEnableEmailBatch ) { - $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, + 'echo-pref-email-frequency-daily' => EchoEmailFrequency::DAILY_DIGEST, + 'echo-pref-email-frequency-weekly' => EchoEmailFrequency::WEEKLY_DIGEST, ]; } $preferences['echo-email-frequency'] = [ 'type' => 'select', 'label-message' => 'echo-pref-send-me', 'section' => 'echo/emailsettings', - 'options' => $freqOptions + 'options-messages' => $freqOptions + ]; + + $preferences['echo-dont-email-read-notifications'] = [ + 'type' => 'toggle', + 'label-message' => 'echo-pref-dont-email-read-notifications', + 'section' => 'echo/emailsettings', + 'hide-if' => [ 'OR', [ '===', 'echo-email-frequency', '-1' ], [ '===', 'echo-email-frequency', '0' ] ] ]; // Display information about the user's currently set email address @@ -343,9 +371,10 @@ class EchoHooks { [], [ 'returnto' => $prefsTitle->getFullText() ] ); - $emailAddress = $user->getEmail() && $user->isAllowed( 'viewmyprivateinfo' ) + $permManager = MediaWikiServices::getInstance()->getPermissionManager(); + $emailAddress = $user->getEmail() && $permManager->userHasRight( $user, 'viewmyprivateinfo' ) ? htmlspecialchars( $user->getEmail() ) : ''; - if ( $user->isAllowed( 'editmyprivateinfo' ) && self::isEmailChangeAllowed() ) { + if ( $permManager->userHasRight( $user, 'editmyprivateinfo' ) && self::isEmailChangeAllowed() ) { if ( $emailAddress === '' ) { $emailAddress .= $link; } else { @@ -368,9 +397,9 @@ class EchoHooks { 'type' => 'select', 'label-message' => 'echo-pref-email-format', 'section' => 'echo/emailsettings', - 'options' => [ - wfMessage( 'echo-pref-email-format-html' )->escaped() => EchoEmailFormat::HTML, - wfMessage( 'echo-pref-email-format-plain-text' )->escaped() => EchoEmailFormat::PLAIN_TEXT, + 'options-messages' => [ + 'echo-pref-email-format-html' => EchoEmailFormat::HTML, + 'echo-pref-email-format-plain-text' => EchoEmailFormat::PLAIN_TEXT, ] ]; } @@ -391,10 +420,11 @@ class EchoHooks { asort( $categoriesAndPriorities ); $validSortedCategories = array_keys( $categoriesAndPriorities ); - // Show subscription options. IMPORTANT: 'echo-subscriptions-email-edit-user-talk' is a - // virtual option, its value is saved to existing talk page notification option - // 'enotifusertalkpages', see onUserLoadOptions() and onUserSaveOptions() for more - // information on how it is handled. Doing it in this way, we can avoid keeping running + // Show subscription options. IMPORTANT: 'echo-subscriptions-email-edit-user-talk', + // 'echo-subscriptions-email-watchlist', and 'echo-subscriptions-email-minor-watchlist' are + // virtual options, their values are saved to existing notification options 'enotifusertalkpages', + // 'enotifwatchlistpages', and 'enotifminoredits', see onUserLoadOptions() and onUserSaveOptions() + // for more information on how it is handled. Doing it in this way, we can avoid keeping running // massive data migration script to keep these two options synced when echo is enabled on // new wikis or Echo is disabled and re-enabled for some reason. We can update the name // if Echo is ever merged to core @@ -450,7 +480,7 @@ class EchoHooks { 'tooltips' => $tooltips, ]; - if ( !$wgEchoUseCrossWikiBetaFeature && $wgEchoCrossWikiNotifications ) { + if ( $wgEchoCrossWikiNotifications ) { $preferences['echo-cross-wiki-notifications'] = [ 'type' => 'toggle', 'label-message' => 'echo-pref-cross-wiki-notifications', @@ -458,17 +488,32 @@ class EchoHooks { ]; } - // 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, + if ( $wgEchoPollForUpdates ) { + $preferences['echo-show-poll-updates'] = [ + 'type' => 'toggle', + 'label-message' => 'echo-pref-show-poll-updates', + 'help-message' => 'echo-pref-show-poll-updates-help', + 'section' => 'echo/echopollupdates' + ]; + } + + // If we're using Echo to handle user talk page post or watchlist notifications, + // hide the old (non-Echo) preferences for them. If Echo is moved to core + // we'll want to remove the old user options entirely. For now, though, // we need to keep it defined in case Echo is ever uninstalled. // Otherwise, that preference could be lost entirely. This hiding logic - // is not abstracted since there is only a single preference in core - // that is potentially made obsolete by Echo. + // is not abstracted since there are only three preferences in core + // that are potentially made obsolete by Echo. if ( isset( $wgEchoNotifications['edit-user-talk'] ) ) { $preferences['enotifusertalkpages']['type'] = 'hidden'; unset( $preferences['enotifusertalkpages']['section'] ); } + if ( $wgEchoWatchlistNotifications && isset( $wgEchoNotifications['watchlist-change'] ) ) { + $preferences['enotifwatchlistpages']['type'] = 'hidden'; + unset( $preferences['enotifusertalkpages']['section'] ); + $preferences['enotifminoredits']['type'] = 'hidden'; + unset( $preferences['enotifminoredits']['section'] ); + } if ( $wgEchoPerUserBlacklist ) { $preferences['echo-notifications-blacklist'] = [ @@ -477,9 +522,14 @@ class EchoHooks { 'section' => 'echo/blocknotificationslist', 'filter' => MultiUsernameFilter::class, ]; + $preferences['echo-notifications-page-linked-title-muted-list'] = [ + 'type' => 'titlesmultiselect', + 'label-message' => 'echo-pref-notifications-page-linked-title-muted-list', + 'section' => 'echo/mutedpageslist', + 'showMissing' => false, + 'filter' => ( new MultiTitleFilter( new TitleFactory() ) ) + ]; } - - return true; } /** @@ -487,71 +537,54 @@ class EchoHooks { * @return bool */ private static function isEmailChangeAllowed() { - return AuthManager::singleton()->allowsPropertyChange( 'emailaddress' ); + return MediaWikiServices::getInstance()->getAuthManager() + ->allowsPropertyChange( 'emailaddress' ); } /** - * Handler for PageContentSaveComplete hook - * @see http://www.mediawiki.org/wiki/Manual:Hooks/PageContentSaveComplete + * Handler for PageSaveComplete hook + * @see https://www.mediawiki.org/wiki/Manual:Hooks/PageSaveComplete * - * @param WikiPage &$wikiPage modified WikiPage - * @param User &$user User who edited - * @param Content $content New article text + * @param WikiPage $wikiPage modified WikiPage + * @param UserIdentity $userIdentity User who edited * @param string $summary Edit summary - * @param bool $minoredit Minor edit or not - * @param bool $watchthis Watch this article? - * @param string $sectionanchor Section that was edited - * @param int &$flags Edit flags - * @param Revision $revision Revision that was created - * @param Status &$status - * @param int $baseRevId - * @param int $undidRevId - * - * @return bool true in all cases + * @param int $flags Edit flags + * @param RevisionRecord $revisionRecord RevisionRecord for the revision that was created + * @param EditResult $editResult */ - public static function onPageContentSaveComplete( - WikiPage &$wikiPage, - &$user, - $content, - $summary, - $minoredit, - $watchthis, - $sectionanchor, - &$flags, - $revision, - &$status, - $baseRevId, - $undidRevId = 0 + public static function onPageSaveComplete( + WikiPage $wikiPage, + UserIdentity $userIdentity, + string $summary, + int $flags, + RevisionRecord $revisionRecord, + EditResult $editResult ) { global $wgEchoNotifications; - if ( !$revision ) { - return true; - } - - // unless status is "good" (not only ok, also no warnings or errors), we - // probably shouldn't process it at all (e.g. null edits) - if ( !$status->isGood() ) { - return true; + if ( $editResult->isNullEdit() ) { + return; } $title = $wikiPage->getTitle(); + $undidRevId = $editResult->getUndidRevId(); // Try to do this after the HTTP response - DeferredUpdates::addCallableUpdate( function () use ( $revision, $undidRevId ) { + DeferredUpdates::addCallableUpdate( function () use ( $revisionRecord, $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 ); + self::$lastRevertedRevision->getId() === $revisionRecord->getId() ); + EchoDiscussionParser::generateEventsForRevision( $revisionRecord, $isRevert ); } ); + $user = User::newFromIdentity( $userIdentity ); // If the user is not an IP and this is not a null edit, // test for them reaching a congratulatory threshold - $thresholds = [ 1, 10, 100, 1000, 10000, 100000, 1000000 ]; - if ( $user->isLoggedIn() && $status->value['revision'] ) { - $thresholdCount = $user->getEditCount(); + $thresholds = [ 1, 10, 100, 1000, 10000, 100000, 1000000, 10000000 ]; + if ( $user->isLoggedIn() ) { + $thresholdCount = self::getEditCount( $user ); if ( in_array( $thresholdCount, $thresholds ) ) { DeferredUpdates::addCallableUpdate( function () use ( $user, $title, $thresholdCount ) { $notificationMapper = new EchoNotificationMapper(); @@ -577,7 +610,6 @@ class EchoHooks { 'agent' => $user, // Edit threshold notifications are sent to the agent 'extra' => [ - 'notifyAgent' => true, 'editCount' => $thresholdCount, ] ] @@ -589,15 +621,19 @@ class EchoHooks { // Handle the case of someone undoing an edit, either through the // 'undo' link in the article history or via the API. if ( isset( $wgEchoNotifications['reverted'] ) && $undidRevId ) { - $undidRevision = Revision::newFromId( $undidRevId ); - if ( $undidRevision && $undidRevision->getTitle()->equals( $title ) ) { + $store = MediaWikiServices::getInstance()->getRevisionStore(); + $undidRevision = $store->getRevisionById( $undidRevId ); + if ( + $undidRevision && + Title::newFromLinkTarget( $undidRevision->getPageAsLinkTarget() )->equals( $title ) + ) { $victimId = $undidRevision->getUser(); if ( $victimId ) { // No notifications for anonymous users EchoEvent::create( [ 'type' => 'reverted', 'title' => $title, 'extra' => [ - 'revid' => $revision->getId(), + 'revid' => $revisionRecord->getId(), 'reverted-user-id' => $victimId, 'reverted-revision-id' => $undidRevId, 'method' => 'undo', @@ -608,8 +644,20 @@ class EchoHooks { } } } + } - return true; + /** + * @param User $user + * @return int + */ + private static function getEditCount( User $user ) { + // When this code runs from a maintenance script or unit tests + // the deferred update incrementing edit count runs right away + // so the edit count is right. Otherwise it lags by one. + if ( wfIsCLI() ) { + return $user->getEditCount(); + } + return $user->getEditCount() + 1; } /** @@ -619,7 +667,9 @@ class EchoHooks { * @return bool true - send email, false - do not send email */ public static function onEchoAbortEmailNotification( $user, $event ) { - if ( $event->getType() === 'edit-user-talk' ) { + global $wgEchoWatchlistEmailOncePerPage; + $type = $event->getType(); + if ( $type === 'edit-user-talk' ) { $extra = $event->getExtra(); if ( !empty( $extra['minoredit'] ) ) { global $wgEnotifMinorEdits; @@ -628,9 +678,23 @@ class EchoHooks { return false; } } + // Mimic core code of only sending watchlist notification emails once per page + } elseif ( $type === "watchlist-change" || $type === "minor-watchlist-change" ) { + if ( !$wgEchoWatchlistEmailOncePerPage ) { + // Don't care about rate limiting + return true; + } + $store = MediaWikiServices::getInstance()->getWatchedItemStore(); + $ts = $store->getWatchedItem( $user, $event->getTitle() )->getNotificationTimestamp(); + // if (ts != null) is not sufficient because, if $wgEchoUseJobQueue is set, + // wl_notificationtimestamp will have already been set for the new edit + // by the time this code runs. + if ( $ts !== null && $ts !== $event->getExtraParam( "timestamp" ) ) { + // User has already seen an email for this page before + return false; + } } - - // Proceed to send talk page notification email + // Proceed to send notification email return true; } @@ -652,10 +716,9 @@ class EchoHooks { /** * Handler for LocalUserCreated hook. - * @see http://www.mediawiki.org/wiki/Manual:Hooks/LocalUserCreated + * @see https://www.mediawiki.org/wiki/Manual:Hooks/LocalUserCreated * @param User $user User object that was created. * @param bool $autocreated True when account was auto-created - * @return bool */ public static function onLocalUserCreated( $user, $autocreated ) { if ( !$autocreated ) { @@ -667,10 +730,6 @@ class EchoHooks { EchoEvent::create( [ 'type' => 'welcome', 'agent' => $user, - // Welcome notification is sent to the agent - 'extra' => [ - 'notifyAgent' => true - ] ] ); } @@ -678,13 +737,11 @@ class EchoHooks { // Set seen time to UNIX epoch, so initially all notifications are unseen. $seenTime->setTime( wfTimestamp( TS_MW, 1 ), 'all' ); - - return true; } /** * Handler for UserGroupsChanged hook. - * @see http://www.mediawiki.org/wiki/Manual:Hooks/UserGroupsChanged + * @see https://www.mediawiki.org/wiki/Manual:Hooks/UserGroupsChanged * * @param User $user user that was changed * @param string[] $add strings corresponding to groups added @@ -693,24 +750,22 @@ class EchoHooks { * @param string|bool $reason Reason given by the user changing the rights * @param array $oldUGMs * @param array $newUGMs - * - * @return bool */ public static function onUserGroupsChanged( $user, $add, $remove, $performer, $reason = false, array $oldUGMs = [], array $newUGMs = [] ) { if ( !$performer ) { // TODO: Implement support for autopromotion - return true; + return; } if ( !$user instanceof User ) { // TODO: Support UserRightsProxy - return true; + return; } if ( $user->equals( $performer ) ) { // Don't notify for self changes - return true; + return; } // If any old groups are in $add, those groups are having their expiry @@ -732,7 +787,7 @@ class EchoHooks { [ 'type' => 'user-rights', 'extra' => [ - 'user' => $user->getID(), + 'user' => $user->getId(), 'expiry-changed' => $expiryChanged, 'reason' => $reason, ], @@ -746,7 +801,7 @@ class EchoHooks { [ 'type' => 'user-rights', 'extra' => [ - 'user' => $user->getID(), + 'user' => $user->getId(), 'add' => $reallyAdded, 'remove' => $remove, 'reason' => $reason, @@ -755,17 +810,14 @@ class EchoHooks { ] ); } - - return true; } /** * Handler for LinksUpdateAfterInsert hook. - * @see http://www.mediawiki.org/wiki/Manual:Hooks/LinksUpdateAfterInsert + * @see https://www.mediawiki.org/wiki/Manual:Hooks/LinksUpdateAfterInsert * @param LinksUpdate $linksUpdate * @param string $table - * @param array $insertions - * @return bool + * @param array[] $insertions */ public static function onLinksUpdateAfterInsert( $linksUpdate, $table, $insertions ) { global $wgRequest; @@ -775,7 +827,7 @@ class EchoHooks { // @Todo Implement a better solution so it doesn't depend on the checking of // a specific set of request variables if ( $wgRequest->getVal( 'wpUndidRevision' ) || $wgRequest->getVal( 'action' ) == 'rollback' ) { - return true; + return; } // Handle only @@ -786,12 +838,12 @@ class EchoHooks { if ( $table !== 'pagelinks' || !MWNamespace::isContent( $linksUpdate->mTitle->getNamespace() ) || !$linksUpdate->mRecursive || $linksUpdate->mTitle->isRedirect() ) { - return true; + return; } - $revision = $linksUpdate->getRevision(); - $revid = $revision ? $revision->getId() : null; - $user = $revision ? $revision->getRevisionRecord()->getUser() : null; + $revRecord = $linksUpdate->getRevisionRecord(); + $revid = $revRecord ? $revRecord->getId() : null; + $user = $revRecord ? $revRecord->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 @@ -806,7 +858,7 @@ class EchoHooks { continue; } - $linkFromPageId = $linksUpdate->mTitle->getArticleId(); + $linkFromPageId = $linksUpdate->mTitle->getArticleID(); EchoEvent::create( [ 'type' => 'page-linked', 'title' => $title, @@ -823,29 +875,24 @@ class EchoHooks { break; } } - - return true; } /** * Handler for BeforePageDisplay hook. - * @see http://www.mediawiki.org/wiki/Manual:Hooks/BeforePageDisplay + * @see https://www.mediawiki.org/wiki/Manual:Hooks/BeforePageDisplay * @param OutputPage $out * @param Skin $skin Skin being used. - * @return bool true in all cases */ public static function beforePageDisplay( $out, $skin ) { - if ( $out->getUser()->isLoggedIn() && $skin->getSkinName() !== 'minerva' ) { + if ( $out->getUser()->isLoggedIn() ) { // Load the module for the Notifications flyout $out->addModules( [ 'ext.echo.init' ] ); // Load the styles for the Notifications badge $out->addModuleStyles( [ 'ext.echo.styles.badge', - 'ext.echo.badgeicons' + 'oojs-ui.styles.icons-alerts' ] ); } - - return true; } private static function processMarkAsRead( User $user, WebRequest $request, Title $title ) { @@ -895,6 +942,7 @@ class EchoHooks { } } } else { + $markAsReadIds = array_map( 'intval', $markAsReadIds ); // Look up the notifications on the foreign wiki $notifUser = MWEchoNotifUser::newFromUser( $user ); $notifInfo = $notifUser->getForeignNotificationInfo( $markAsReadIds, $markAsReadWiki ); @@ -922,18 +970,84 @@ class EchoHooks { } /** + * Handler for SkinMinervaReplaceNotificationsBadge hook. + * @param User $user who needs notifications + * @param Title $title of current page + * @param string &$badge to replace + */ + public static function onSkinMinervaReplaceNotificationsBadge( $user, $title, &$badge ) { + $notificationsTitle = SpecialPage::getTitleFor( 'Notifications' ); + $count = 0; + $countLabel = ''; + $isZero = true; + $hasUnseen = false; + + if ( $title->equals( $notificationsTitle ) ) { + // On Special:Notifications show no icon + $badge = ''; + return; + } + + // Note: `mw-ui-icon-wikimedia-bellOutline-base20` class is provided by Minerva. + // In future we'll likely want to rethink how this works and possibly consolidate this with the desktop badge. + // For now, we avoid loading two bells in the same place by reusing the class already defined in Minerva. + $notificationIconClass = 'mw-ui-icon mw-ui-icon-wikimedia-bellOutline-base20 mw-ui-icon-element user-button'; + $url = $notificationsTitle->getLocalURL( + [ 'returnto' => $title->getPrefixedText() ] ); + + $notifUser = MWEchoNotifUser::newFromUser( $user ); + $count = $notifUser->getNotificationCount(); + + $echoSeenTime = EchoSeenTime::newFromUser( $user ); + $seenAlertTime = $echoSeenTime->getTime( 'alert', TS_ISO_8601 ); + $seenMsgTime = $echoSeenTime->getTime( 'message', TS_ISO_8601 ); + + $alertNotificationTimestamp = $notifUser->getLastUnreadAlertTime(); + $msgNotificationTimestamp = $notifUser->getLastUnreadMessageTime(); + + $isZero = $count === 0; + $hasUnseen = $count > 0 && + ( + $seenMsgTime !== false && $msgNotificationTimestamp !== false && + $seenMsgTime < $msgNotificationTimestamp->getTimestamp( TS_ISO_8601 ) + ) || + ( + $seenAlertTime !== false && $alertNotificationTimestamp !== false && + $seenAlertTime < $alertNotificationTimestamp->getTimestamp( TS_ISO_8601 ) + ); + + $countLabel = EchoNotificationController::formatNotificationCount( $count ); + $data = [ + 'notificationIconClass' => $notificationIconClass, + 'title' => $hasUnseen ? + wfMessage( 'echo-overlay-link' ) : + wfMessage( 'echo-none' ), + 'url' => $url, + 'notificationCountRaw' => $count, + 'notificationCountString' => $countLabel, + 'isNotificationCountZero' => $isZero, + 'hasNotifications' => $hasUnseen, + // this variable is used inside the client side which has different handling + // for when notifications have been dismissed. Instead of a bell it shows `(0)`. + 'hasUnseenNotifications' => $hasUnseen, + ]; + $parser = new TemplateParser( __DIR__ . '/../modules/mobile' ); + // substitute the badge + $badge = $parser->processTemplate( 'NotificationBadge', $data ); + } + + /** * Handler for PersonalUrls hook. * Add a "Notifications" item to the user toolbar ('personal URLs'). - * @see http://www.mediawiki.org/wiki/Manual:Hooks/PersonalUrls + * @see https://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; + return; } $subtractions = self::processMarkAsRead( $user, $sk->getOutput()->getRequest(), $title ); @@ -975,8 +1089,8 @@ class EchoHooks { $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" ]; + $msgLinkClasses = [ "mw-echo-notifications-badge", "mw-echo-notification-badge-nojs","oo-ui-icon-tray" ]; + $alertLinkClasses = [ "mw-echo-notifications-badge", "mw-echo-notification-badge-nojs", "oo-ui-icon-bell" ]; $hasUnseen = false; if ( @@ -1016,7 +1130,7 @@ class EchoHooks { $alertLink = [ 'href' => $url, 'text' => $alertText, - 'active' => ( $url == $title->getLocalUrl() ), + 'active' => ( $url == $title->getLocalURL() ), 'class' => $alertLinkClasses, 'data' => [ 'counter-num' => $alertCount, @@ -1031,7 +1145,7 @@ class EchoHooks { $msgLink = [ 'href' => $url, 'text' => $msgText, - 'active' => ( $url == $title->getLocalUrl() ), + 'active' => ( $url == $title->getLocalURL() ), 'class' => $msgLinkClasses, 'data' => [ 'counter-num' => $msgCount, @@ -1044,7 +1158,9 @@ class EchoHooks { $personal_urls = wfArrayInsertAfter( $personal_urls, $insertUrls, 'userpage' ); if ( $hasUnseen ) { - // Record that the user is going to see an indicator that they have unread notifications + // Record that the user is going to see an indicator that they have unseen notifications + // This is part of tracking how likely users are to click a badge with unseen notifications. + // The other part is the 'echo.unseen.click' counter, see ext.echo.init.js. MediaWikiServices::getInstance()->getStatsdDataFactory()->increment( 'echo.unseen' ); } @@ -1053,20 +1169,20 @@ class EchoHooks { // * 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 ( $user->getNewtalk() && !$user->getTalkPage()->equals( $title ) ) { + $userHasNewMessages = MediaWikiServices::getInstance() + ->getTalkPageNotificationManager()->userHasNewMessages( $user ); + if ( $userHasNewMessages && !$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' ]; $sk->getOutput()->addModuleStyles( 'ext.echo.styles.alert' ); } } - - return true; } /** * Handler for AbortTalkPageEmailNotification hook. - * @see http://www.mediawiki.org/wiki/Manual:Hooks/AbortTalkPageEmailNotification + * @see https://www.mediawiki.org/wiki/Manual:Hooks/AbortTalkPageEmailNotification * @param User $targetUser * @param Title $title * @return bool @@ -1088,13 +1204,18 @@ class EchoHooks { /** * Handler for AbortWatchlistEmailNotification hook. - * @see http://www.mediawiki.org/wiki/Manual:Hooks/AbortWatchlistEmailNotification + * @see https://www.mediawiki.org/wiki/Manual:Hooks/AbortWatchlistEmailNotification * @param User $targetUser * @param Title $title * @param EmailNotification $emailNotification The email notification object that sends non-echo notifications * @return bool */ public static function onSendWatchlistEmailNotification( $targetUser, $title, $emailNotification ) { + global $wgEchoNotifications, $wgEchoWatchlistNotifications; + if ( $wgEchoWatchlistNotifications && isset( $wgEchoNotifications["watchlist-change"] ) ) { + // Let echo handle watchlist notifications entirely + return false; + } // If a user is watching his/her own talk page, do not send talk page watchlist // email notification if the user is receiving Echo talk page notification if ( $title->isTalkPage() && $targetUser->getTalkPage()->equals( $title ) ) { @@ -1110,27 +1231,6 @@ class EchoHooks { return true; } - /** - * Handler for MakeGlobalVariablesScript hook. - * @see http://www.mediawiki.org/wiki/Manual:Hooks/MakeGlobalVariablesScript - * @param array &$vars Variables to be added into the output - * @param OutputPage $outputPage OutputPage instance calling the hook - * @return bool true in all cases - */ - public static function makeGlobalVariablesScript( &$vars, OutputPage $outputPage ) { - global $wgEchoEventLoggingSchemas, $wgEchoEventLoggingVersion; - $user = $outputPage->getUser(); - - // Provide info for ext.echo.logger - if ( $user->isLoggedIn() ) { - $vars['wgEchoInteractionLogging'] = $wgEchoEventLoggingSchemas['EchoInteraction']['enabled'] - && ExtensionRegistry::getInstance()->isLoaded( 'EventLogging' ); - $vars['wgEchoEventLoggingVersion'] = $wgEchoEventLoggingVersion; - } - - return true; - } - public static function onOutputPageCheckLastModified( array &$modifiedTimes, OutputPage $out ) { $user = $out->getUser(); if ( $user->isLoggedIn() ) { @@ -1149,8 +1249,8 @@ class EchoHooks { * Handler for GetNewMessagesAlert hook. * We're using the GetNewMessagesAlert hook instead of the * ArticleEditUpdateNewTalk hook since we still want the user_newtalk data - * to be updated and availble to client-side tools and the API. - * @see http://www.mediawiki.org/wiki/Manual:Hooks/GetNewMessagesAlert + * to be updated and available to client-side tools and the API. + * @see https://www.mediawiki.org/wiki/Manual:Hooks/GetNewMessagesAlert * @param string &$newMessagesAlert An alert that the user has new messages * or an empty string if the user does not (empty by default) * @param array $newtalks This will be empty if the user has no new messages @@ -1167,6 +1267,7 @@ class EchoHooks { // notifications for talk page messages, disable the new messages alert. if ( $user->isLoggedIn() && isset( $wgEchoNotifications['edit-user-talk'] ) + && Hooks::run( 'EchoCanAbortNewMessagesAlert' ) ) { // hide new messages alert return false; @@ -1177,24 +1278,27 @@ class EchoHooks { } /** - * Handler for ArticleRollbackComplete hook. - * @see http://www.mediawiki.org/wiki/Manual:Hooks/ArticleRollbackComplete + * Handler for RollbackComplete hook. + * @see https://www.mediawiki.org/wiki/Manual:Hooks/RollbackComplete * * @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 + * @param UserIdentity $agent The user who did the rollback + * @param RevisionRecord $newRevision The revision the page was reverted back to + * @param RevisionRecord $oldRevision The revision of the top edit that was reverted */ - public static function onRollbackComplete( WikiPage $wikiPage, $agent, $newRevision, $oldRevision ) { + public static function onRollbackComplete( + WikiPage $wikiPage, + UserIdentity $agent, + RevisionRecord $newRevision, + RevisionRecord $oldRevision + ) { $victimId = $oldRevision->getUser(); - $latestRevision = $wikiPage->getRevision(); + $latestRevision = $wikiPage->getRevisionRecord(); self::$lastRevertedRevision = $latestRevision; if ( $victimId && // No notifications for anonymous users - !$oldRevision->getContent()->equals( $newRevision->getContent() ) // No notifications for null rollbacks + !$oldRevision->hasSameContent( $newRevision ) // No notifications for null rollbacks ) { EchoEvent::create( [ 'type' => 'reverted', @@ -1205,18 +1309,15 @@ class EchoHooks { 'reverted-revision-id' => $oldRevision->getId(), 'method' => 'rollback', ], - 'agent' => $agent, + 'agent' => User::newFromIdentity( $agent ), ] ); } - - return true; } /** * Handler for UserSaveSettings hook. - * @see http://www.mediawiki.org/wiki/Manual:Hooks/UserSaveSettings + * @see https://www.mediawiki.org/wiki/Manual:Hooks/UserSaveSettings * @param User $user whose settings were saved - * @return bool true in all cases */ public static function onUserSaveSettings( $user ) { // Extensions like AbuseFilter might create an account, but @@ -1229,42 +1330,57 @@ class EchoHooks { MWEchoNotifUser::newFromUser( $user )->resetNotificationCount(); } ); } - - return true; } /** * Handler for UserLoadOptions hook. - * @see http://www.mediawiki.org/wiki/Manual:Hooks/UserLoadOptions + * @see https://www.mediawiki.org/wiki/Manual:Hooks/UserLoadOptions * @param User $user User whose options were loaded * @param array &$options Options can be modified - * @return bool true in all cases */ public static function onUserLoadOptions( $user, &$options ) { + global $wgEchoWatchlistNotifications; // Use existing enotifusertalkpages option for echo-subscriptions-email-edit-user-talk if ( isset( $options['enotifusertalkpages'] ) ) { $options['echo-subscriptions-email-edit-user-talk'] = $options['enotifusertalkpages']; } - return true; + if ( $wgEchoWatchlistNotifications ) { + // Use existing enotifwatchlistpages option for echo-subscriptions-email-watchlist + if ( isset( $options['enotifwatchlistpages'] ) ) { + $options['echo-subscriptions-email-watchlist'] = $options['enotifwatchlistpages']; + } + + // Use existing enotifminoredits option for echo-subscriptions-email-minor-watchlist + if ( isset( $options['enotifminoredits'] ) ) { + $options['echo-subscriptions-email-minor-watchlist'] = $options['enotifminoredits']; + } + } } /** * Handler for UserSaveOptions hook. - * @see http://www.mediawiki.org/wiki/Manual:Hooks/UserSaveOptions + * @see https://www.mediawiki.org/wiki/Manual:Hooks/UserSaveOptions * @param User $user User whose options are being saved * @param array &$options Options can be modified - * @return bool true in all cases */ public static function onUserSaveOptions( $user, &$options ) { - // echo-subscriptions-email-edit-user-talk is just a virtual option, - // save the value in the real option enotifusertalkpages + global $wgEchoWatchlistNotifications; + // save virtual option values in corresponding real option values if ( isset( $options['echo-subscriptions-email-edit-user-talk'] ) ) { $options['enotifusertalkpages'] = $options['echo-subscriptions-email-edit-user-talk']; unset( $options['echo-subscriptions-email-edit-user-talk'] ); } - - return true; + if ( $wgEchoWatchlistNotifications ) { + if ( isset( $options['echo-subscriptions-email-watchlist'] ) ) { + $options['enotifwatchlistpages'] = $options['echo-subscriptions-email-watchlist']; + unset( $options['echo-subscriptions-email-watchlist'] ); + } + if ( isset( $options['echo-subscriptions-email-minor-watchlist'] ) ) { + $options['enotifminoredits'] = $options['echo-subscriptions-email-minor-watchlist']; + unset( $options['echo-subscriptions-email-minor-watchlist'] ); + } + } } /** @@ -1290,32 +1406,27 @@ class EchoHooks { /** * 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 - * @return bool true in all cases + * @see https://www.mediawiki.org/wiki/Manual:Hooks/UserClearNewTalkNotification + * @param UserIdentity $user User whose talk page notification should be marked as read */ - public static function onUserClearNewTalkNotification( User $user ) { - if ( !$user->isAnon() ) { - DeferredUpdates::addCallableUpdate( function () use ( $user ) { - MWEchoNotifUser::newFromUser( $user )->clearUserTalkNotifications(); + public static function onUserClearNewTalkNotification( UserIdentity $user ) { + if ( $user->isRegistered() ) { + $userObj = User::newFromIdentity( $user ); + DeferredUpdates::addCallableUpdate( function () use ( $userObj ) { + MWEchoNotifUser::newFromUser( $userObj )->clearUserTalkNotifications(); } ); } - - return true; } /** * Handler for ParserTestTables hook, makes sure that Echo's tables are present during tests - * @see http://www.mediawiki.org/wiki/Manual:Hooks/ParserTestTables + * @see https://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 */ public static function onParserTestTables( &$tables ) { $tables[] = 'echo_event'; $tables[] = 'echo_notification'; $tables[] = 'echo_email_batch'; - - return true; } /** @@ -1325,12 +1436,11 @@ class EchoHooks { * @param MailAddress $from Adress of sending user * @param string $subject Subject of the mail * @param string $text Text of the mail - * @return bool true in all cases */ public static function onEmailUserComplete( $address, $from, $subject, $text ) { if ( $from->name === $address->name ) { // nothing to notify - return true; + return; } $userTo = User::newFromName( $address->name ); $userFrom = User::newFromName( $from->name ); @@ -1354,15 +1464,12 @@ class EchoHooks { ], 'agent' => $userFrom, ] ); - - return true; } /** * For integration with the UserMerge extension. * * @param array &$updateFields - * @return bool */ public static function onUserMergeAccountFields( &$updateFields ) { // array( tableName, idField, textField ) @@ -1370,52 +1477,136 @@ class EchoHooks { $updateFields[] = [ 'echo_event', 'event_agent_id', 'db' => $dbw ]; $updateFields[] = [ 'echo_notification', 'notification_user', 'db' => $dbw, 'options' => [ 'IGNORE' ] ]; $updateFields[] = [ 'echo_email_batch', 'eeb_user_id', 'db' => $dbw, 'options' => [ 'IGNORE' ] ]; - - return true; } public static function onMergeAccountFromTo( User &$oldUser, User &$newUser ) { - DeferredUpdates::addCallableUpdate( function () use ( $oldUser, $newUser ) { + $method = __METHOD__; + DeferredUpdates::addCallableUpdate( function () use ( $oldUser, $newUser, $method ) { + if ( !$newUser->isAnon() ) { + // Select notifications that are now sent to the same user + $dbw = MWEchoDbFactory::newFromDefault()->getEchoDb( DB_MASTER ); + $attributeManager = EchoAttributeManager::newFromGlobalVars(); + $selfIds = $dbw->selectFieldValues( + [ 'echo_notification', 'echo_event' ], + 'event_id', + [ + 'notification_user' => $newUser->getId(), + 'notification_event = event_id', + 'notification_user = event_agent_id', + 'event_type NOT IN (' . $dbw->makeList( $attributeManager->getNotifyAgentEvents() ) . ')' + ], + $method + ) ?: []; + + // Select newer welcome notification(s) + $welcomeIds = $dbw->selectFieldValues( + [ 'echo_notification', 'echo_event' ], + 'event_id', + [ + 'notification_user' => $newUser->getId(), + 'notification_event = event_id', + 'event_type' => 'welcome', + ], + $method, + [ + 'ORDER BY' => 'notification_timestamp ASC', + 'OFFSET' => 1, + ] + ) ?: []; + + // Select newer milestone notifications (per milestone level) + $counts = []; + $thankYouIds = []; + $thankYouRows = $dbw->select( + [ 'echo_notification', 'echo_event' ], + EchoEvent::selectFields(), + [ + 'notification_user' => $newUser->getId(), + 'notification_event = event_id', + 'event_type' => 'thank-you-edit', + ], + $method, + [ 'ORDER BY' => 'notification_timestamp ASC' ] + ) ?: []; + foreach ( $thankYouRows as $row ) { + $event = EchoEvent::newFromRow( $row ); + $editCount = $event ? $event->getExtraParam( 'editCount' ) : null; + if ( $editCount ) { + if ( isset( $counts[$editCount] ) ) { + $thankYouIds[] = $row->event_id; + } else { + $counts[$editCount] = true; + } + } + } + + // Delete notifications + $ids = array_merge( $selfIds, $welcomeIds, $thankYouIds ); + // @phan-suppress-next-line PhanImpossibleTypeComparison Each array in the merge may be empty + if ( $ids !== [] ) { + $dbw->delete( + 'echo_notification', + [ + 'notification_user' => $newUser->getId(), + 'notification_event' => $ids + ], + $method + ); + } + } + MWEchoNotifUser::newFromUser( $oldUser )->resetNotificationCount(); if ( !$newUser->isAnon() ) { MWEchoNotifUser::newFromUser( $newUser )->resetNotificationCount(); } } ); - - return true; } public static function onUserMergeAccountDeleteTables( &$tables ) { $dbw = MWEchoDbFactory::newFromDefault()->getEchoDb( DB_MASTER ); $tables['echo_notification'] = [ 'notification_user', 'db' => $dbw ]; $tables['echo_email_batch'] = [ 'eeb_user_id', 'db' => $dbw ]; - - return true; } /** * Sets custom login message for redirect from notification page * * @param array &$messages - * @return bool */ public static function onLoginFormValidErrorMessages( &$messages ) { $messages[] = 'echo-notification-loginrequired'; - return true; } - public static function onResourceLoaderGetConfigVars( &$vars ) { - $vars['wgEchoMaxNotificationCount'] = MWEchoNotifUser::MAX_BADGE_COUNT; + public static function getConfigVars( ResourceLoaderContext $context, Config $config ) { + return [ + 'EchoMaxNotificationCount' => MWEchoNotifUser::MAX_BADGE_COUNT, + 'EchoPollForUpdates' => $config->get( 'EchoPollForUpdates' ) + ]; + } - return true; + public static function getLoggerConfigVars( ResourceLoaderContext $context, Config $config ) { + $schemas = $config->get( 'EchoEventLoggingSchemas' ); + return [ + 'EchoInteractionLogging' => $schemas['EchoInteraction']['enabled'] && + ExtensionRegistry::getInstance()->isLoaded( 'EventLogging' ), + 'EchoEventLoggingVersion' => $config->get( 'EchoEventLoggingVersion' ) + ]; } + /** + * @param WikiPage &$article + * @param User &$user + * @param string $reason + * @param int $articleId + * @param Content|null $content + * @param LogEntry $logEntry + */ public static function onArticleDeleteComplete( WikiPage &$article, User &$user, $reason, $articleId, - Content $content = null, + ?Content $content, LogEntry $logEntry ) { \DeferredUpdates::addCallableUpdate( function () use ( $articleId ) { @@ -1423,7 +1614,6 @@ class EchoHooks { $eventIds = $eventMapper->fetchIdsByPage( $articleId ); EchoModerationController::moderate( $eventIds, true ); } ); - return true; } public static function onArticleUndelete( Title $title, $create, $comment, $oldPageId ) { @@ -1434,7 +1624,74 @@ class EchoHooks { EchoModerationController::moderate( $eventIds, false ); } ); } - return true; + } + + /** + * Handler for SpecialMuteModifyFormFields hook + * + * @param SpecialMute $specialMute + * @param array &$fields + */ + public static function onSpecialMuteModifyFormFields( SpecialMute $specialMute, &$fields ) { + $echoPerUserBlacklist = MediaWikiServices::getInstance()->getMainConfig()->get( 'EchoPerUserBlacklist' ); + if ( $echoPerUserBlacklist ) { + $target = $specialMute->getTarget(); + $fields[ 'echo-notifications-blacklist'] = [ + 'type' => 'check', + 'label-message' => [ + 'echo-specialmute-label-mute-notifications', + $target ? $target->getName() : '' + ], + 'default' => $specialMute->isTargetBlacklisted( 'echo-notifications-blacklist' ), + ]; + } + } + + /** + * @param RecentChange $change + * @return bool|void + * @throws MWException + */ + public function onRecentChange_save( $change ) { + if ( !$this->config->get( 'EchoWatchlistNotifications' ) ) { + return; + } + if ( $change->getAttribute( 'rc_minor' ) ) { + $type = 'minor-watchlist-change'; + } else { + $type = 'watchlist-change'; + } + EchoEvent::create( [ + 'type' => $type, + 'title' => $change->getTitle(), + 'extra' => [ + 'revid' => $change->getAttribute( "rc_this_oldid" ), + 'logid' => $change->getAttribute( "rc_logid" ), + 'status' => $change->mExtra["pageStatus"], + 'timestamp' => $change->getAttribute( "rc_timestamp" ) + ], + 'agent' => $change->getPerformer() + ] ); + } + + /** + * Hook handler for ApiMain::moduleManager. + * Used here to put the echopushsubscriptions API module behind our push feature flag. + * TODO: Register this the usual way in extension.json when we don't need the feature flag + * anymore. + * @param ApiModuleManager $moduleManager + */ + public static function onApiMainModuleManager( ApiModuleManager $moduleManager ) { + $services = MediaWikiServices::getInstance(); + $echoConfig = $services->getConfigFactory()->makeConfig( 'Echo' ); + $pushEnabled = $echoConfig->get( 'EchoEnablePush' ); + if ( $pushEnabled ) { + $moduleManager->addModule( + 'echopushsubscriptions', + 'action', + 'EchoPush\\Api\\ApiEchoPushSubscriptions' + ); + } } } diff --git a/Echo/includes/EchoOnWikiList.php b/Echo/includes/EchoOnWikiList.php index 5bdc4dd6..43cbab49 100644 --- a/Echo/includes/EchoOnWikiList.php +++ b/Echo/includes/EchoOnWikiList.php @@ -17,7 +17,7 @@ class EchoOnWikiList implements EchoContainmentList { */ public function __construct( $titleNs, $titleString ) { $title = Title::newFromText( $titleString, $titleNs ); - if ( $title !== null && $title->getArticleId() ) { + if ( $title !== null && $title->getArticleID() ) { $this->title = $title; } } @@ -30,7 +30,7 @@ class EchoOnWikiList implements EchoContainmentList { return []; } - $article = WikiPage::newFromID( $this->title->getArticleId() ); + $article = WikiPage::newFromID( $this->title->getArticleID() ); if ( $article === null || !$article->exists() ) { return []; } @@ -49,6 +49,6 @@ class EchoOnWikiList implements EchoContainmentList { return ''; } - return $this->title->getLatestRevID(); + return (string)$this->title->getLatestRevID(); } } diff --git a/Echo/includes/EchoServices.php b/Echo/includes/EchoServices.php new file mode 100644 index 00000000..7633d07b --- /dev/null +++ b/Echo/includes/EchoServices.php @@ -0,0 +1,40 @@ +<?php + +use EchoPush\NotificationServiceClient; +use EchoPush\SubscriptionManager; +use MediaWiki\MediaWikiServices; + +class EchoServices { + + /** @var MediaWikiServices */ + private $services; + + /** @return EchoServices */ + public static function getInstance(): EchoServices { + return new self( MediaWikiServices::getInstance() ); + } + + /** + * @param MediaWikiServices $services + * @return EchoServices + */ + public static function wrap( MediaWikiServices $services ): EchoServices { + return new self( $services ); + } + + /** @param MediaWikiServices $services */ + public function __construct( MediaWikiServices $services ) { + $this->services = $services; + } + + /** @return NotificationServiceClient */ + public function getPushNotificationServiceClient(): NotificationServiceClient { + return $this->services->getService( 'EchoPushNotificationServiceClient' ); + } + + /** @return SubscriptionManager */ + public function getPushSubscriptionManager(): SubscriptionManager { + return $this->services->getService( 'EchoPushSubscriptionManager' ); + } + +} diff --git a/Echo/includes/EchoSummaryParser.php b/Echo/includes/EchoSummaryParser.php index a701b101..ab738a8c 100644 --- a/Echo/includes/EchoSummaryParser.php +++ b/Echo/includes/EchoSummaryParser.php @@ -30,12 +30,13 @@ class EchoSummaryParser { $summary = preg_replace( '#/\*.*?\*/#', ' [] ', $summary ); $users = []; - $regex = '/\[\[([' . Title::legalChars() . ']*+)(?:\|.*?)?\]\]/'; + $regex = '/\[\[([' . Title::legalChars() . ']++)(?:\|.*?)?\]\]/'; if ( preg_match_all( $regex, $summary, $matches ) ) { foreach ( $matches[1] as $match ) { - if ( preg_match( '/^:/', $match ) ) { + if ( $match[0] === ':' ) { continue; } + $title = Title::newFromText( $match ); if ( $title && $title->isLocal() diff --git a/Echo/includes/EmailBatch.php b/Echo/includes/EmailBatch.php index df400013..320f2aa4 100644 --- a/Echo/includes/EmailBatch.php +++ b/Echo/includes/EmailBatch.php @@ -1,5 +1,6 @@ <?php +use MediaWiki\MediaWikiServices; use Wikimedia\Rdbms\IResultWrapper; /** @@ -65,9 +66,9 @@ class MWEchoEmailBatch { * @return MWEchoEmailBatch|false */ public static function newFromUserId( $userId, $enforceFrequency = true ) { - $user = User::newFromId( intval( $userId ) ); + $user = User::newFromId( (int)$userId ); - $userEmailSetting = intval( $user->getOption( 'echo-email-frequency' ) ); + $userEmailSetting = (int)$user->getOption( 'echo-email-frequency' ); // clear all existing events if user decides not to receive emails if ( $userEmailSetting == -1 ) { @@ -96,7 +97,7 @@ class MWEchoEmailBatch { // 3. user has switched from batch to instant email, send events left in the queue if ( $userLastBatch ) { // use 20 as hours per day to get estimate - $nextBatch = wfTimestamp( TS_UNIX, $userLastBatch ) + $userEmailSetting * 20 * 60 * 60; + $nextBatch = (int)wfTimestamp( TS_UNIX, $userLastBatch ) + $userEmailSetting * 20 * 60 * 60; if ( $enforceFrequency && wfTimestamp( TS_MW, $nextBatch ) > wfTimestampNow() ) { return false; } @@ -148,10 +149,10 @@ class MWEchoEmailBatch { * @return bool true if event exists false otherwise */ protected function setLastEvent() { - $dbr = MWEchoDbFactory::getDB( DB_REPLICA ); + $dbr = MWEchoDbFactory::newFromDefault()->getEchoDb( DB_REPLICA ); $res = $dbr->selectField( [ 'echo_email_batch' ], - [ 'MAX( eeb_event_id )' ], + 'MAX( eeb_event_id )', [ 'eeb_user_id' => $this->mUser->getId() ], __METHOD__ ); @@ -160,9 +161,9 @@ class MWEchoEmailBatch { $this->lastEvent = $res; return true; - } else { - return false; } + + return false; } /** @@ -190,7 +191,7 @@ class MWEchoEmailBatch { // composite index, favor insert performance, storage space over read // performance in this case if ( $validEvents ) { - $dbr = MWEchoDbFactory::getDB( DB_REPLICA ); + $dbr = MWEchoDbFactory::newFromDefault()->getEchoDb( DB_REPLICA ); $conds = [ 'eeb_user_id' => $this->mUser->getId(), @@ -198,14 +199,31 @@ class MWEchoEmailBatch { 'event_type' => $validEvents ]; + $tables = [ 'echo_email_batch', 'echo_event' ]; + + if ( $this->mUser->getOption( 'echo-dont-email-read-notifications' ) ) { + $conds += [ + 'notification_event = event_id', + 'notification_read_timestamp' => null + ]; + array_push( $tables, 'echo_notification' ); + } + // See setLastEvent() for more detail for this variable if ( $this->lastEvent ) { - $conds[] = 'eeb_event_id <= ' . intval( $this->lastEvent ); + $conds[] = 'eeb_event_id <= ' . (int)$this->lastEvent; } + $fields = array_merge( EchoEvent::selectFields(), [ + 'eeb_id', + 'eeb_user_id', + 'eeb_event_priority', + 'eeb_event_id', + 'eeb_event_hash', + ] ); $res = $dbr->select( - [ 'echo_email_batch', 'echo_event' ], - [ '*' ], + $tables, + $fields, $conds, __METHOD__, [ @@ -227,22 +245,42 @@ class MWEchoEmailBatch { } /** - * Clear "processed" events in the queue, processed could be: email sent, invalid, users do not want to receive emails + * Clear "processed" events in the queue, + * processed could be: email sent, invalid, users do not want to receive emails */ public function clearProcessedEvent() { - $conds = [ 'eeb_user_id' => $this->mUser->getId() ]; - - // there is a processed cutoff point + global $wgUpdateRowsPerQuery; + $eventMapper = new EchoEventMapper(); + $dbFactory = MWEchoDbFactory::newFromDefault(); + $dbw = $dbFactory->getEchoDb( DB_MASTER ); + $dbr = $dbFactory->getEchoDb( DB_REPLICA ); + $lbFactory = MediaWikiServices::getInstance()->getDBLoadBalancerFactory(); + $ticket = $lbFactory->getEmptyTransactionTicket( __METHOD__ ); + $domainId = $dbw->getDomainID(); + + $iterator = new BatchRowIterator( $dbr, 'echo_email_batch', 'eeb_event_id', $wgUpdateRowsPerQuery ); + $iterator->addConditions( [ 'eeb_user_id' => $this->mUser->getId() ] ); if ( $this->lastEvent ) { - $conds[] = 'eeb_event_id <= ' . intval( $this->lastEvent ); + // There is a processed cutoff point + $iterator->addConditions( [ 'eeb_event_id <= ' . (int)$this->lastEvent ] ); } + foreach ( $iterator as $batch ) { + $eventIds = []; + foreach ( $batch as $row ) { + $eventIds[] = $row->eeb_event_id; + } + $dbw->delete( 'echo_email_batch', [ + 'eeb_user_id' => $this->mUser->getId(), + 'eeb_event_id' => $eventIds + ], __METHOD__ ); - $dbw = MWEchoDbFactory::newFromDefault()->getEchoDb( DB_MASTER ); - $dbw->delete( - 'echo_email_batch', - $conds, - __METHOD__ - ); + // Find out which events are now orphaned, i.e. no longer referenced in echo_email_batch + // (besides the rows we just deleted) or in echo_notification, and delete them + $eventMapper->deleteOrphanedEvents( $eventIds, $this->mUser->getId(), 'echo_email_batch' ); + + $lbFactory->commitAndWaitForReplication( + __METHOD__, $ticket, [ 'domain' => $domainId ] ); + } } /** @@ -297,15 +335,13 @@ class MWEchoEmailBatch { * @param int $eventId * @param int $priority * @param string $hash - * - * @throws MWException */ public static function addToQueue( $userId, $eventId, $priority, $hash ) { if ( !$userId || !$eventId ) { return; } - $dbw = MWEchoDbFactory::getDB( DB_MASTER ); + $dbw = MWEchoDbFactory::newFromDefault()->getEchoDb( DB_MASTER ); $row = [ 'eeb_user_id' => $userId, @@ -328,15 +364,14 @@ class MWEchoEmailBatch { * @param int $startUserId * @param int $batchSize * - * @throws MWException * @return IResultWrapper|bool */ public static function getUsersToNotify( $startUserId, $batchSize ) { - $dbr = MWEchoDbFactory::getDB( DB_REPLICA ); + $dbr = MWEchoDbFactory::newFromDefault()->getEchoDb( DB_REPLICA ); $res = $dbr->select( [ 'echo_email_batch' ], [ 'eeb_user_id' ], - [ 'eeb_user_id > ' . intval( $startUserId ) ], + [ 'eeb_user_id > ' . (int)$startUserId ], __METHOD__, [ 'ORDER BY' => 'eeb_user_id', 'LIMIT' => $batchSize ] ); diff --git a/Echo/includes/EventLogging.php b/Echo/includes/EventLogging.php index 9ffba03a..5db4771f 100644 --- a/Echo/includes/EventLogging.php +++ b/Echo/includes/EventLogging.php @@ -77,7 +77,7 @@ class MWEchoEventLogging { if ( isset( $extra['source'] ) ) { $data['eventSource'] = (string)$extra['source']; } - if ( $deliveryMethod == 'email' ) { + if ( $deliveryMethod === 'email' ) { $data['deliveryMethod'] = 'email'; } else { // whitelist valid delivery methods so it is always valid diff --git a/Echo/includes/ForeignNotifications.php b/Echo/includes/ForeignNotifications.php index f4299d95..301c09ab 100644 --- a/Echo/includes/ForeignNotifications.php +++ b/Echo/includes/ForeignNotifications.php @@ -3,7 +3,8 @@ /** * 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 {@see EchoForeignNotifications::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. @@ -71,7 +72,7 @@ class EchoForeignNotifications { if ( $section === EchoAttributeManager::ALL ) { $count = array_sum( $this->counts ); } else { - $count = isset( $this->counts[$section] ) ? $this->counts[$section] : 0; + $count = $this->counts[$section] ?? 0; } return MWEchoNotifUser::capNotificationCount( $count ); @@ -98,7 +99,7 @@ class EchoForeignNotifications { return $max; } - return isset( $this->timestamps[$section] ) ? $this->timestamps[$section] : false; + return $this->timestamps[$section] ?? false; } /** @@ -117,7 +118,7 @@ class EchoForeignNotifications { return array_unique( $all ); } - return isset( $this->wikis[$section] ) ? $this->wikis[$section] : []; + return $this->wikis[$section] ?? []; } public function getWikiTimestamp( $wiki, $section = EchoAttributeManager::ALL ) { @@ -136,7 +137,7 @@ class EchoForeignNotifications { } return $max; } - return isset( $this->wikiTimestamps[$wiki][$section] ) ? $this->wikiTimestamps[$wiki][$section] : false; + return $this->wikiTimestamps[$wiki][$section] ?? false; } protected function populate() { diff --git a/Echo/includes/ForeignWikiRequest.php b/Echo/includes/ForeignWikiRequest.php index b3daea33..6a7f35b3 100644 --- a/Echo/includes/ForeignWikiRequest.php +++ b/Echo/includes/ForeignWikiRequest.php @@ -1,10 +1,32 @@ <?php use MediaWiki\Logger\LoggerFactory; +use MediaWiki\MediaWikiServices; use MediaWiki\Session\SessionManager; class EchoForeignWikiRequest { + /** @var User */ + protected $user; + + /** @var array */ + protected $params; + + /** @var array */ + protected $wikis; + + /** @varstring|null */ + protected $wikiParam; + + /** @var string */ + protected $method; + + /** @var string|null */ + protected $tokenType; + + /** @var string[]|null */ + protected $csrfTokens; + /** * @param User $user * @param array $params Request parameters @@ -94,10 +116,12 @@ class EchoForeignWikiRequest { * 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 + * @suppress PhanTypeInvalidCallableArraySize getRequestParams can take an array, too (phan bug) * @return string Token */ protected function getCsrfToken( $wiki ) { if ( $this->csrfTokens === null ) { + $this->csrfTokens = []; $reqs = $this->getRequestParams( 'GET', [ 'action' => 'query', 'meta' => 'tokens', @@ -131,7 +155,7 @@ class EchoForeignWikiRequest { $reqs[$wiki] = [ 'method' => $method, 'url' => $api['url'], - $queryKey => is_callable( $params ) ? call_user_func( $params, $wiki ) : $params + $queryKey => is_callable( $params ) ? $params( $wiki ) : $params ]; } @@ -170,7 +194,7 @@ class EchoForeignWikiRequest { * @throws Exception */ protected function doRequests( array $reqs ) { - $http = new MultiHttpClient( [] ); + $http = MediaWikiServices::getInstance()->getHttpRequestFactory()->createMultiClient(); $responses = $http->runMulti( $reqs ); $results = []; diff --git a/Echo/includes/NotifUser.php b/Echo/includes/NotifUser.php index 59dd68a0..8f965cd5 100644 --- a/Echo/includes/NotifUser.php +++ b/Echo/includes/NotifUser.php @@ -1,6 +1,7 @@ <?php use MediaWiki\MediaWikiServices; +use Wikimedia\Rdbms\Database; /** * Entity that represents a notification target user @@ -38,9 +39,9 @@ class MWEchoNotifUser { private $targetPageMapper; /** - * @var EchoForeignNotifications + * @var EchoForeignNotifications|null */ - private $foreignNotifications = null; + private $foreignNotifications; /** * @var array[]|null @@ -55,7 +56,7 @@ class MWEchoNotifUser { /** * @var array[]|null */ - private $mForeignData = null; + private $mForeignData; // The max notification count shown in badge @@ -107,7 +108,11 @@ class MWEchoNotifUser { return new MWEchoNotifUser( $user, MediaWikiServices::getInstance()->getMainWANObjectCache(), - new EchoUserNotificationGateway( $user, MWEchoDbFactory::newFromDefault() ), + new EchoUserNotificationGateway( + $user, + MWEchoDbFactory::newFromDefault(), + MediaWikiServices::getInstance()->getMainConfig() + ), new EchoNotificationMapper(), new EchoTargetPageMapper() ); @@ -160,7 +165,8 @@ class MWEchoNotifUser { * If $wgEchoCrossWikiNotifications is disabled, the $global parameter is ignored. * * @param string $section Notification section - * @param bool|string $global Whether to include foreign notifications. If set to 'preference', uses the user's preference. + * @param bool|string $global Whether to include foreign notifications. + * If set to 'preference', uses the user's preference. * @return int */ public function getNotificationCount( $section = EchoAttributeManager::ALL, $global = 'preference' ) { @@ -207,7 +213,8 @@ class MWEchoNotifUser { * If $wgEchoCrossWikiNotifications is disabled, the $global parameter is ignored. * * @param string $section Notification section - * @param bool|string $global Whether to include foreign notifications. If set to 'preference', uses the user's preference. + * @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( $section = EchoAttributeManager::ALL, $global = 'preference' ) { @@ -249,13 +256,22 @@ class MWEchoNotifUser { // After this 'mark read', is there any unread edit-user-talk // remaining? If not, we should clear the newtalk flag. - if ( $this->mUser->getNewtalk() ) { + $talkPageNotificationManager = MediaWikiServices::getInstance() + ->getTalkPageNotificationManager(); + if ( $talkPageNotificationManager->userHasNewMessages( $this->mUser ) ) { $attributeManager = EchoAttributeManager::newFromGlobalVars(); $categoryMap = $attributeManager->getEventsByCategory(); $usertalkTypes = $categoryMap['edit-user-talk']; - $unreadEditUserTalk = $this->notifMapper->fetchUnreadByUser( $this->mUser, 1, null, $usertalkTypes, null, DB_MASTER ); + $unreadEditUserTalk = $this->notifMapper->fetchUnreadByUser( + $this->mUser, + 1, + null, + $usertalkTypes, + null, + DB_MASTER + ); if ( $unreadEditUserTalk === [] ) { - $this->mUser->setNewtalk( false ); + $talkPageNotificationManager->removeUserHasNewMessages( $this->mUser ); } } } @@ -282,13 +298,22 @@ class MWEchoNotifUser { // After this 'mark unread', is there any unread edit-user-talk? // If so, we should add the edit-user-talk flag - if ( !$this->mUser->getNewtalk() ) { + $talkPageNotificationManager = MediaWikiServices::getInstance() + ->getTalkPageNotificationManager(); + if ( !$talkPageNotificationManager->userHasNewMessages( $this->mUser ) ) { $attributeManager = EchoAttributeManager::newFromGlobalVars(); $categoryMap = $attributeManager->getEventsByCategory(); $usertalkTypes = $categoryMap['edit-user-talk']; - $unreadEditUserTalk = $this->notifMapper->fetchUnreadByUser( $this->mUser, 1, null, $usertalkTypes, null, DB_MASTER ); + $unreadEditUserTalk = $this->notifMapper->fetchUnreadByUser( + $this->mUser, + 1, + null, + $usertalkTypes, + null, + DB_MASTER + ); if ( $unreadEditUserTalk !== [] ) { - $this->mUser->setNewtalk( true ); + $talkPageNotificationManager->setUserHasNewMessages( $this->mUser ); } } } @@ -329,9 +354,8 @@ class MWEchoNotifUser { // such case so to keep the code running if ( $notif->getEvent() ) { return $notif->getEvent()->getId(); - } else { - return 0; } + return 0; }, $notifs ) ); @@ -538,13 +562,28 @@ class MWEchoNotifUser { $totals = [ 'count' => 0, 'timestamp' => -1 ]; foreach ( EchoAttributeManager::$sections as $section ) { - $eventTypesToLoad = $attributeManager->getUserEnabledEventsbySections( $this->mUser, 'web', [ $section ] ); + $eventTypesToLoad = $attributeManager->getUserEnabledEventsbySections( + $this->mUser, + 'web', + [ $section ] + ); - $count = (int)$this->userNotifGateway->getCappedNotificationCount( $dbSource, $eventTypesToLoad, self::MAX_BADGE_COUNT + 1 ); + $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 ); + $notifications = $this->notifMapper->fetchUnreadByUser( + $this->mUser, + 1, + null, + $eventTypesToLoad, + null, + $dbSource + ); if ( $notifications ) { $notification = reset( $notifications ); $timestamp = $notification->getTimestamp(); @@ -578,7 +617,10 @@ class MWEchoNotifUser { $localTimestamp = $localData[$section]['timestamp']; $foreignTimestamp = $this->getForeignTimestamp( $section ); - $globalTimestamp = max( $localTimestamp, $foreignTimestamp ? $foreignTimestamp->getTimestamp( TS_MW ) : -1 ); + $globalTimestamp = max( + $localTimestamp, + $foreignTimestamp ? $foreignTimestamp->getTimestamp( TS_MW ) : -1 + ); $result[$section]['timestamp'] = $globalTimestamp; $totals['timestamp'] = max( $totals['timestamp'], $globalTimestamp ); } @@ -596,9 +638,9 @@ class MWEchoNotifUser { if ( $wgAllowHTMLEmail ) { return $this->mUser->getOption( 'echo-email-format' ); - } else { - return EchoEmailFormat::PLAIN_TEXT; } + + return EchoEmailFormat::PLAIN_TEXT; } /** @@ -609,7 +651,7 @@ class MWEchoNotifUser { */ protected function getMemcKey( $key ) { global $wgEchoCacheVersion; - return wfMemcKey( $key, $this->mUser->getId(), $wgEchoCacheVersion ); + return $this->cache->makeKey( $key, $this->mUser->getId(), $wgEchoCacheVersion ); } /** @@ -625,7 +667,7 @@ class MWEchoNotifUser { if ( !$globalId ) { return false; } - return wfGlobalCacheKey( $key, $globalId, $wgEchoCacheVersion ); + return $this->cache->makeGlobalKey( $key, $globalId, $wgEchoCacheVersion ); } /** @@ -641,86 +683,14 @@ class MWEchoNotifUser { } /** - * Get data about foreign notifications from the foreign wikis' APIs. - * - * This is used when $wgEchoSectionTransition or $wgEchoBundleTransition is enabled, - * to deal with untrustworthy echo_unread_wikis entries. This method fetches the list of - * wikis that have any unread notifications at all from the echo_unread_wikis table, then - * 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 ] ] ] - */ - protected function getForeignData() { - if ( $this->mForeignData ) { - return $this->mForeignData; - } - - $potentialWikis = $this->getForeignNotifications()->getWikis( EchoAttributeManager::ALL ); - $foreignReq = new EchoForeignWikiRequest( - $this->mUser, - [ - 'action' => 'query', - 'meta' => 'notifications', - 'notprop' => 'count|list', - 'notgroupbysection' => '1', - 'notunreadfirst' => '1', - ], - $potentialWikis, - 'notwikis' - ); - $foreignResults = $foreignReq->execute(); - - $this->mForeignData = []; - foreach ( $foreignResults as $wiki => $result ) { - if ( !isset( $result['query']['notifications'] ) ) { - continue; - } - $data = $result['query']['notifications']; - foreach ( EchoAttributeManager::$sections as $section ) { - if ( isset( $data[$section]['rawcount'] ) ) { - $this->mForeignData[$wiki][$section]['count'] = $data[$section]['rawcount']; - } - if ( isset( $data[$section]['list'][0] ) ) { - $this->mForeignData[$wiki][$section]['timestamp'] = $data[$section]['list'][0]['timestamp']['mw']; - } - } - } - 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; - if ( - // In section transition mode, we don't trust the individual echo_unread_wikis rows - // but we do trust that alert+message=all. In bundle transition mode, we don't trust - // that either, but we do trust that wikis with rows in the table have unread notifications - // and wikis without rows in the table don't. - ( $wgEchoSectionTransition && $section !== EchoAttributeManager::ALL ) || - $wgEchoBundleTransition - ) { - $foreignData = $this->getForeignData(); - foreach ( $foreignData as $data ) { - if ( $section === EchoAttributeManager::ALL ) { - foreach ( $data as $subData ) { - if ( isset( $subData['count'] ) ) { - $count += $subData['count']; - } - } - } elseif ( isset( $data[$section]['count'] ) ) { - $count += $data[$section]['count']; - } - } - } else { - $count += $this->getForeignNotifications()->getCount( $section ); - } - return self::capNotificationCount( $count ); + return self::capNotificationCount( + $this->getForeignNotifications()->getCount( $section ) + ); } /** @@ -730,34 +700,7 @@ class MWEchoNotifUser { * there aren't any */ protected function getForeignTimestamp( $section = EchoAttributeManager::ALL ) { - global $wgEchoSectionTransition, $wgEchoBundleTransition; - - if ( - // In section transition mode, we don't trust the individual echo_unread_wikis rows - // but we do trust that alert+message=all. In bundle transition mode, we don't trust - // that either, but we do trust that wikis with rows in the table have unread notifications - // and wikis without rows in the table don't. - ( $wgEchoSectionTransition && $section !== EchoAttributeManager::ALL ) || - $wgEchoBundleTransition - ) { - $foreignTime = -1; - $foreignData = $this->getForeignData(); - foreach ( $foreignData as $data ) { - if ( $section === EchoAttributeManager::ALL ) { - foreach ( $data as $subData ) { - if ( isset( $subData['timestamp'] ) ) { - $foreignTime = max( $foreignTime, $subData['timestamp'] ); - } - } - } elseif ( isset( $data[$section]['timestamp'] ) ) { - $foreignTime = max( $foreignTime, $data[$section]['timestamp'] ); - } - } - $foreignTime = $foreignTime === -1 ? false : new MWTimestamp( $foreignTime ); - } else { - $foreignTime = $this->getForeignNotifications()->getTimestamp( $section ); - } - return $foreignTime; + return $this->getForeignNotifications()->getTimestamp( $section ); } /** diff --git a/Echo/includes/Notifier.php b/Echo/includes/Notifier.php index e00a3368..c2a6a72e 100644 --- a/Echo/includes/Notifier.php +++ b/Echo/includes/Notifier.php @@ -69,6 +69,7 @@ class EchoNotifier { ) { Hooks::run( 'EchoGetBundleRules', [ $event, &$bundleString ] ); } + // @phan-suppress-next-line PhanImpossibleCondition May be set by hook if ( $bundleString ) { $bundleHash = md5( $bundleString ); } @@ -89,7 +90,10 @@ class EchoNotifier { // instant email notification $toAddress = MailAddress::newFromUser( $user ); - $fromAddress = new MailAddress( $wgPasswordSender, wfMessage( 'emailsender' )->inContentLanguage()->text() ); + $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 diff --git a/Echo/includes/Push/NotificationRequestJob.php b/Echo/includes/Push/NotificationRequestJob.php new file mode 100644 index 00000000..e228584d --- /dev/null +++ b/Echo/includes/Push/NotificationRequestJob.php @@ -0,0 +1,26 @@ +<?php + +namespace EchoPush; + +use EchoServices; +use Job; + +class NotificationRequestJob extends Job { + + /** + * @return bool success + */ + public function run(): bool { + $centralId = $this->params['centralId']; + $echoServices = EchoServices::getInstance(); + $subscriptionManager = $echoServices->getPushSubscriptionManager(); + $subscriptions = $subscriptionManager->getSubscriptionsForUser( $centralId ); + if ( count( $subscriptions ) === 0 ) { + return true; + } + $serviceClient = $echoServices->getPushNotificationServiceClient(); + $serviceClient->sendCheckEchoRequests( $subscriptions ); + return true; + } + +} diff --git a/Echo/includes/Push/NotificationServiceClient.php b/Echo/includes/Push/NotificationServiceClient.php new file mode 100644 index 00000000..39d1ab43 --- /dev/null +++ b/Echo/includes/Push/NotificationServiceClient.php @@ -0,0 +1,86 @@ +<?php + +namespace EchoPush; + +use MediaWiki\Http\HttpRequestFactory; +use MWHttpRequest; +use Psr\Log\LoggerAwareInterface; +use Psr\Log\LoggerAwareTrait; +use Status; + +class NotificationServiceClient implements LoggerAwareInterface { + + use LoggerAwareTrait; + + /** @var HttpRequestFactory */ + private $httpRequestFactory; + + /** @var string */ + private $endpointBase; + + /** + * @param HttpRequestFactory $httpRequestFactory + * @param string $endpointBase push service notification request endpoint base URL + */ + public function __construct( HttpRequestFactory $httpRequestFactory, string $endpointBase ) { + $this->httpRequestFactory = $httpRequestFactory; + $this->endpointBase = $endpointBase; + } + + /** + * Send a CHECK_ECHO notification request to the push service for each subscription found. + * TODO: Update the service to handle multiple providers in a single request (T254379) + * @param array $subscriptions Subscriptions for which to send the message + */ + public function sendCheckEchoRequests( array $subscriptions ): void { + $tokensByProvider = []; + foreach ( $subscriptions as $subscription ) { + $provider = $subscription->getProvider(); + if ( !isset( $tokensByProvider[$provider] ) ) { + $tokensByProvider[$provider] = []; + } + $tokensByProvider[$provider][] = $subscription->getToken(); + } + foreach ( array_keys( $tokensByProvider ) as $provider ) { + $tokens = $tokensByProvider[$provider]; + $payload = [ 'deviceTokens' => $tokens, 'messageType' => 'checkEchoV1' ]; + $this->sendRequest( $provider, $payload ); + } + } + + /** + * Send a notification request for a single push provider + * @param string $provider Provider endpoint to which to send the message + * @param array $payload message payload + */ + private function sendRequest( string $provider, array $payload ): void { + $request = $this->constructRequest( $provider, $payload ); + $status = $request->execute(); + if ( !$status->isOK() ) { + $errors = $status->getErrorsByType( 'error' ); + $this->logger->warning( + Status::wrap( $status )->getMessage( false, false, 'en' )->serialize(), + [ + 'error' => $errors, + 'caller' => __METHOD__, + 'content' => $request->getContent() + ] + ); + } + } + + /** + * Construct a MWHttpRequest object based on the subscription and payload. + * @param string $provider + * @param array $payload + * @return MWHttpRequest + */ + private function constructRequest( string $provider, array $payload ): MWHttpRequest { + $url = "$this->endpointBase/$provider"; + $opts = [ 'method' => 'POST', 'postData' => json_encode( $payload ) ]; + $req = $this->httpRequestFactory->create( $url, $opts ); + $req->setHeader( 'Content-Type', 'application/json; charset=utf-8' ); + return $req; + } + +} diff --git a/Echo/includes/Push/PushNotifier.php b/Echo/includes/Push/PushNotifier.php new file mode 100644 index 00000000..93c7126c --- /dev/null +++ b/Echo/includes/Push/PushNotifier.php @@ -0,0 +1,47 @@ +<?php + +namespace EchoPush; + +use CentralIdLookup; +use EchoAttributeManager; +use EchoEvent; +use JobQueueGroup; +use User; + +class PushNotifier { + + /** + * Submits a notification derived from an Echo event to each push notifications service + * subscription found for a user, via a configured service handler implementation + * @param User $user + * @param EchoEvent $event + */ + public static function notifyWithPush( User $user, EchoEvent $event ): void { + $attributeManager = EchoAttributeManager::newFromGlobalVars(); + $userEnabledEvents = $attributeManager->getUserEnabledEvents( $user, 'push' ); + if ( in_array( $event->getType(), $userEnabledEvents ) ) { + JobQueueGroup::singleton()->push( self::createJob( $user, $event ) ); + } + } + + /** + * @param User $user + * @param EchoEvent|null $event + * @return NotificationRequestJob + */ + private static function createJob( User $user, EchoEvent $event = null ): + NotificationRequestJob { + $centralId = CentralIdLookup::factory()->centralIdFromLocalUser( $user ); + $params = [ 'centralId' => $centralId ]; + // below params are only needed for debug logging (T255068) + if ( $event !== null ) { + $params['eventId'] = $event->getId(); + $params['eventType'] = $event->getType(); + if ( $event->getAgent() !== null ) { + $params['agent'] = $event->getAgent()->getId(); + } + } + return new NotificationRequestJob( 'EchoPushNotificationRequest', $params ); + } + +} diff --git a/Echo/includes/Push/Subscription.php b/Echo/includes/Push/Subscription.php new file mode 100644 index 00000000..92c7b904 --- /dev/null +++ b/Echo/includes/Push/Subscription.php @@ -0,0 +1,57 @@ +<?php + +namespace EchoPush; + +use Wikimedia\Timestamp\ConvertibleTimestamp; + +class Subscription { + + /** @var string */ + private $provider; + + /** @var string */ + private $token; + + /** @var ConvertibleTimestamp */ + private $updated; + + /** + * Construct a subscription from a DB result row. + * @param object $row echo_push_subscription row from IResultWrapper::fetchRow + * @return Subscription + */ + public static function newFromRow( object $row ) { + return new self( + $row->epp_name, + $row->eps_token, + new ConvertibleTimestamp( $row->eps_updated ) + ); + } + + /** + * @param string $provider + * @param string $token + * @param ConvertibleTimestamp $updated + */ + public function __construct( string $provider, string $token, ConvertibleTimestamp $updated ) { + $this->provider = $provider; + $this->token = $token; + $this->updated = $updated; + } + + /** @return string provider */ + public function getProvider(): string { + return $this->provider; + } + + /** @return string token */ + public function getToken(): string { + return $this->token; + } + + /** @return ConvertibleTimestamp last updated timestamp */ + public function getUpdated(): ConvertibleTimestamp { + return $this->updated; + } + +} diff --git a/Echo/includes/Push/SubscriptionManager.php b/Echo/includes/Push/SubscriptionManager.php new file mode 100644 index 00000000..312186c2 --- /dev/null +++ b/Echo/includes/Push/SubscriptionManager.php @@ -0,0 +1,123 @@ +<?php + +namespace EchoPush; + +use CentralIdLookup; +use EchoAbstractMapper; +use IDatabase; +use MediaWiki\Storage\NameTableStore; +use User; +use Wikimedia\Rdbms\DBError; + +class SubscriptionManager extends EchoAbstractMapper { + + /** @var IDatabase */ + private $dbw; + + /** @var IDatabase */ + private $dbr; + + /** @var CentralIdLookup */ + private $centralIdLookup; + + /** @var NameTableStore */ + private $pushProviderStore; + + /** + * @param IDatabase $dbw primary DB connection (for writes) + * @param IDatabase $dbr replica DB connection (for reads) + * @param CentralIdLookup $centralIdLookup + * @param NameTableStore $pushProviderStore + */ + public function __construct( + IDatabase $dbw, + IDatabase $dbr, + CentralIdLookup $centralIdLookup, + NameTableStore $pushProviderStore + ) { + parent::__construct(); + $this->dbw = $dbw; + $this->dbr = $dbr; + $this->centralIdLookup = $centralIdLookup; + $this->pushProviderStore = $pushProviderStore; + } + + /** + * Store push subscription information for a user. + * @param User $user + * @param string $provider Provider name string (validated by presence in the PARAM_TYPE array) + * @param string $token Subscriber token provided by the push provider + * @return bool true if the subscription was created; false if the token already exists + */ + public function create( User $user, string $provider, string $token ): bool { + $this->dbw->insert( + 'echo_push_subscription', + [ + 'eps_user' => $this->getCentralId( $user ), + 'eps_provider' => $this->pushProviderStore->acquireId( $provider ), + 'eps_token' => $token, + 'eps_token_sha256' => hash( 'sha256', $token ), + 'eps_updated' => $this->dbw->timestamp() + ], + __METHOD__, + [ 'IGNORE' ] + ); + return (bool)$this->dbw->affectedRows(); + } + + /** + * Get all registered subscriptions for a user (by central ID). + * @param int $centralId + * @return array array of Subscription objects + */ + public function getSubscriptionsForUser( int $centralId ) { + $res = $this->dbr->select( + [ 'echo_push_subscription', 'echo_push_provider' ], + '*', + [ 'eps_user' => $centralId ], + __METHOD__, + [], + [ 'echo_push_provider' => [ 'INNER JOIN', [ 'eps_provider = epp_id' ] ] ] + ); + $result = []; + foreach ( $res as $row ) { + $result[] = Subscription::newFromRow( $row ); + } + return $result; + } + + /** + * Delete a push subscription for a user. + * Note: Selecting for the user in addition to the token should be redundant, since tokens + * are globally unique and user-specific, but it's probably safest to keep it as a sanity check. + * Also, currently the eps_user column is indexed but eps_token is not. + * @param User $user + * @param string $token Delete the subscription with this token + * @return int number of rows deleted + * @throws DBError + */ + public function delete( User $user, string $token ): int { + $this->dbw->delete( + 'echo_push_subscription', + [ + 'eps_user' => $this->getCentralId( $user ), + 'eps_token' => $token, + ], + __METHOD__ + ); + return $this->dbw->affectedRows(); + } + + /** + * Get the user's central ID. + * @param User $user + * @return int + */ + private function getCentralId( User $user ): int { + return $this->centralIdLookup->centralIdFromLocalUser( + $user, + CentralIdLookup::AUDIENCE_RAW + ); + } + +} diff --git a/Echo/includes/ResourceLoaderEchoImageModule.php b/Echo/includes/ResourceLoaderEchoImageModule.php index c0b103a4..5cb6f955 100644 --- a/Echo/includes/ResourceLoaderEchoImageModule.php +++ b/Echo/includes/ResourceLoaderEchoImageModule.php @@ -56,7 +56,7 @@ class ResourceLoaderEchoImageModule extends ResourceLoaderImageModule { $this->definition[ 'images' ] = $images; $this->definition[ 'selector' ] = '.oo-ui-icon-{name}'; - // Parent + parent::loadFromDefinition(); } } diff --git a/Echo/includes/SeenTime.php b/Echo/includes/SeenTime.php index d008a52b..bec18ef7 100644 --- a/Echo/includes/SeenTime.php +++ b/Echo/includes/SeenTime.php @@ -1,5 +1,7 @@ <?php +use MediaWiki\MediaWikiServices; + /** * A small wrapper around ObjectCache to manage * storing the last time a user has seen notifications @@ -39,18 +41,23 @@ class EchoSeenTime { * @return BagOStuff */ private static function cache() { - static $c = null; - - // Use main stash for persistent storage, and - // wrap it with CachedBagOStuff for an in-process - // cache. (T144534) - if ( $c === null ) { - $c = new CachedBagOStuff( - ObjectCache::getMainStashInstance() - ); + static $wrappedCache = null; + + // Use a configurable cache backend (T222851) and wrap it with CachedBagOStuff + // for an in-process cache (T144534) + if ( $wrappedCache === null ) { + $cacheConfig = MediaWikiServices::getInstance()->getMainConfig()->get( 'EchoSeenTimeCacheType' ); + if ( $cacheConfig === null ) { + // EchoHooks::initEchoExtension sets EchoSeenTimeCacheType to $wgMainStash if it's + // null, so this can only happen if $wgMainStash is also null + throw new UnexpectedValueException( + 'Either $wgEchoSeenTimeCacheType or $wgMainStash must be set' + ); + } + return new CachedBagOStuff( ObjectCache::getInstance( $cacheConfig ) ); } - return $c; + return $wrappedCache; } /** @@ -82,11 +89,9 @@ class EchoSeenTime { } if ( $data === false ) { - // There is still no time set, so set time to the UNIX epoch. // We can't remember their real seen time, so reset everything to // unseen. $data = wfTimestamp( TS_MW, 1 ); - $this->setTime( $data, $type ); } return wfTimestamp( $format, $data ); } @@ -113,9 +118,9 @@ class EchoSeenTime { // the real cache $key = $this->getMemcKey( $type ); $cache = self::cache(); - $cache->set( $key, $time, 0, BagOStuff::WRITE_CACHE_ONLY ); + $cache->set( $key, $time, $cache::TTL_YEAR, BagOStuff::WRITE_CACHE_ONLY ); DeferredUpdates::addCallableUpdate( function () use ( $key, $time, $cache ) { - $cache->set( $key, $time ); + $cache->set( $key, $time, $cache::TTL_YEAR ); } ); } @@ -136,7 +141,9 @@ class EchoSeenTime { * @return string Memcached key */ protected function getMemcKey( $type = 'all' ) { - $localKey = wfMemcKey( 'echo', 'seen', $type, 'time', $this->user->getId() ); + $localKey = self::cache()->makeKey( + 'echo', 'seen', $type, 'time', $this->user->getId() + ); if ( !$this->user->getOption( 'echo-cross-wiki-notifications' ) ) { return $localKey; @@ -149,6 +156,8 @@ class EchoSeenTime { return $localKey; } - return wfGlobalCacheKey( 'echo', 'seen', $type, 'time', $globalId ); + return self::cache()->makeGlobalKey( + 'echo', 'seen', $type, 'time', $globalId + ); } } diff --git a/Echo/includes/UnreadWikis.php b/Echo/includes/UnreadWikis.php index f2b9441b..ef02df64 100644 --- a/Echo/includes/UnreadWikis.php +++ b/Echo/includes/UnreadWikis.php @@ -4,9 +4,7 @@ * Manages what wikis a user has unread notifications on */ class EchoUnreadWikis { - /** - * @var string - */ + const DEFAULT_TS = '00000000000000'; /** @@ -52,7 +50,7 @@ class EchoUnreadWikis { } /** - * @return array[] + * @return array[][] */ public function getUnreadCounts() { $dbr = $this->getDB( DB_REPLICA ); @@ -128,7 +126,7 @@ class EchoUnreadWikis { $dbw->upsert( 'echo_unread_wikis', $conditions + $values, - [ 'euw_user', 'euw_wiki' ], + [ [ 'euw_user', 'euw_wiki' ] ], $values, __METHOD__ ); diff --git a/Echo/includes/UserLocator.php b/Echo/includes/UserLocator.php index 2e49e739..85cbecfc 100644 --- a/Echo/includes/UserLocator.php +++ b/Echo/includes/UserLocator.php @@ -1,5 +1,7 @@ <?php +use MediaWiki\MediaWikiServices; + class EchoUserLocator { /** * Return all users watching the event title. @@ -9,7 +11,7 @@ class EchoUserLocator { * * @param EchoEvent $event * @param int $batchSize - * @return User[] + * @return User[]|Iterator<User> */ public static function locateUsersWatchingTitle( EchoEvent $event, $batchSize = 500 ) { $title = $event->getTitle(); @@ -40,7 +42,7 @@ class EchoUserLocator { } /** - * If the event occured on the talk page of a registered + * If the event occurred on the talk page of a registered * user return that user. * * @param EchoEvent $event @@ -55,9 +57,9 @@ class EchoUserLocator { $user = User::newFromName( $title->getDBkey() ); if ( $user && !$user->isAnon() ) { return [ $user->getId() => $user ]; - } else { - return []; } + + return []; } /** @@ -70,9 +72,9 @@ class EchoUserLocator { $agent = $event->getAgent(); if ( $agent && !$agent->isAnon() ) { return [ $agent->getId() => $agent ]; - } else { - return []; } + + return []; } /** @@ -90,7 +92,7 @@ class EchoUserLocator { } $dbr = wfGetDB( DB_REPLICA ); - $revQuery = Revision::getQueryInfo(); + $revQuery = MediaWikiServices::getInstance()->getRevisionStore()->getQueryInfo(); $res = $dbr->selectRow( $revQuery['tables'], [ 'rev_user' => $revQuery['fields']['rev_user'] ], @@ -106,9 +108,9 @@ class EchoUserLocator { $user = User::newFromId( $res->rev_user ); if ( $user ) { return [ $user->getId() => $user ]; - } else { - return []; } + + return []; } /** @@ -131,7 +133,8 @@ class EchoUserLocator { $userIds = $event->getExtraParam( $key ); if ( !$userIds ) { continue; - } elseif ( !is_array( $userIds ) ) { + } + if ( !is_array( $userIds ) ) { $userIds = [ $userIds ]; } foreach ( $userIds as $userId ) { diff --git a/Echo/includes/api/ApiCrossWiki.php b/Echo/includes/api/ApiCrossWiki.php index a4d0cba2..b3f75b7e 100644 --- a/Echo/includes/api/ApiCrossWiki.php +++ b/Echo/includes/api/ApiCrossWiki.php @@ -1,5 +1,5 @@ <?php - +// @phan-file-suppress PhanUndeclaredMethod This is a trait, and phan is confused by $this /** * Trait that adds cross-wiki functionality to an API module. For mixing into ApiBase subclasses. * @@ -23,7 +23,7 @@ trait ApiCrossWiki { * @return array[] * @throws Exception */ - protected function getFromForeign( $wikis = null, array $paramOverrides = [] ) { + protected function getFromForeign( array $wikis = null, array $paramOverrides = [] ) { $wikis = $wikis ?? $this->getRequestedForeignWikis(); if ( $wikis === [] ) { return []; @@ -32,7 +32,7 @@ trait ApiCrossWiki { $foreignReq = new EchoForeignWikiRequest( $this->getUser(), $paramOverrides + $this->getForeignQueryParams(), - $wikis !== null ? $wikis : $this->getRequestedForeignWikis(), + $wikis, $this->getModulePrefix() . 'wikis', $tokenType !== false ? $tokenType : null ); @@ -69,7 +69,7 @@ trait ApiCrossWiki { // if wiki is omitted from params, that's because crosswiki is/was not // available, and it'll default to current wiki - $wikis = isset( $params['wikis'] ) ? $params['wikis'] : [ wfWikiID() ]; + $wikis = $params['wikis'] ?? [ wfWikiID() ]; if ( array_search( '*', $wikis ) !== false ) { // expand `*` to all foreign wikis with unread notifications + local diff --git a/Echo/includes/api/ApiEchoArticleReminder.php b/Echo/includes/api/ApiEchoArticleReminder.php index dcc779d5..6c8c4363 100644 --- a/Echo/includes/api/ApiEchoArticleReminder.php +++ b/Echo/includes/api/ApiEchoArticleReminder.php @@ -25,7 +25,6 @@ class ApiEchoArticleReminder extends ApiBase { 'agent' => $user, 'title' => $this->getTitleFromTitleOrPageId( $params ), 'extra' => [ - 'notifyAgent' => true, 'comment' => $params['comment'], ], ] ); @@ -108,6 +107,6 @@ class ApiEchoArticleReminder extends ApiBase { } public function getHelpUrls() { - return 'https://www.mediawiki.org/wiki/Echo_(Notifications)/API'; + return 'https://www.mediawiki.org/wiki/Special:MyLanguage/Echo_(Notifications)/API'; } } diff --git a/Echo/includes/api/ApiEchoMarkRead.php b/Echo/includes/api/ApiEchoMarkRead.php index 273d2b68..93021715 100644 --- a/Echo/includes/api/ApiEchoMarkRead.php +++ b/Echo/includes/api/ApiEchoMarkRead.php @@ -123,6 +123,6 @@ class ApiEchoMarkRead extends ApiBase { } public function getHelpUrls() { - return 'https://www.mediawiki.org/wiki/Echo_(Notifications)/API'; + return 'https://www.mediawiki.org/wiki/Special:MyLanguage/Echo_(Notifications)/API'; } } diff --git a/Echo/includes/api/ApiEchoMarkSeen.php b/Echo/includes/api/ApiEchoMarkSeen.php index 46069166..50eeccd9 100644 --- a/Echo/includes/api/ApiEchoMarkSeen.php +++ b/Echo/includes/api/ApiEchoMarkSeen.php @@ -1,5 +1,7 @@ <?php +// This is a GET module, not a POST module, for multi-DC support. See T222851. +// Note that this module doesn't write to the database, only to the seentime cache. class ApiEchoMarkSeen extends ApiBase { public function execute() { @@ -20,7 +22,10 @@ class ApiEchoMarkSeen extends ApiBase { $outputTimestamp = wfTimestamp( TS_ISO_8601, $timestamp ); } else { // MW - $this->addDeprecation( 'apiwarn-echo-deprecation-timestampformat', 'action=echomarkseen×tampFormat=MW' ); + $this->addDeprecation( + 'apiwarn-echo-deprecation-timestampformat', + 'action=echomarkseen×tampFormat=MW' + ); $outputTimestamp = $timestamp; } @@ -33,9 +38,6 @@ class ApiEchoMarkSeen extends ApiBase { public function getAllowedParams() { return [ - 'token' => [ - ApiBase::PARAM_REQUIRED => true, - ], 'type' => [ ApiBase::PARAM_REQUIRED => true, ApiBase::PARAM_TYPE => [ 'alert', 'message', 'all' ], @@ -48,22 +50,6 @@ class ApiEchoMarkSeen extends ApiBase { ]; } - public function needsToken() { - return 'csrf'; - } - - public function getTokenSalt() { - return ''; - } - - public function mustBePosted() { - return true; - } - - public function isWriteMode() { - return true; - } - /** * @see ApiBase::getExamplesMessages() * @return string[] @@ -75,6 +61,6 @@ class ApiEchoMarkSeen extends ApiBase { } public function getHelpUrls() { - return 'https://www.mediawiki.org/wiki/Echo_(Notifications)/API'; + return 'https://www.mediawiki.org/wiki/Special:MyLanguage/Echo_(Notifications)/API'; } } diff --git a/Echo/includes/api/ApiEchoMute.php b/Echo/includes/api/ApiEchoMute.php new file mode 100644 index 00000000..e050e3bd --- /dev/null +++ b/Echo/includes/api/ApiEchoMute.php @@ -0,0 +1,130 @@ +<?php + +use MediaWiki\MediaWikiServices; + +class ApiEchoMute extends ApiBase { + + private $centralIdLookup = null; + + private static $muteLists = [ + 'user' => [ + 'pref' => 'echo-notifications-blacklist', + 'type' => 'user', + ], + 'page-linked-title' => [ + 'pref' => 'echo-notifications-page-linked-title-muted-list', + 'type' => 'title' + ], + ]; + + public function execute() { + $user = $this->getUser()->getInstanceForUpdate(); + if ( !$user || $user->isAnon() ) { + $this->dieWithError( + [ 'apierror-mustbeloggedin', $this->msg( 'action-editmyoptions' ) ], + 'notloggedin' + ); + } + + $this->checkUserRightsAny( 'editmyoptions' ); + + $params = $this->extractRequestParams(); + $mutelistInfo = self::$muteLists[ $params['type'] ]; + $prefValue = $user->getOption( $mutelistInfo['pref'] ); + $ids = $this->parsePref( $prefValue, $mutelistInfo['type'] ); + $targetsToMute = $params['mute'] ?? []; + $targetsToUnmute = $params['unmute'] ?? []; + + $changed = false; + $addIds = $this->lookupIds( $targetsToMute, $mutelistInfo['type'] ); + foreach ( $addIds as $id ) { + if ( !in_array( $id, $ids ) ) { + $ids[] = $id; + $changed = true; + } + } + $removeIds = $this->lookupIds( $targetsToUnmute, $mutelistInfo['type'] ); + foreach ( $removeIds as $id ) { + $index = array_search( $id, $ids ); + if ( $index !== false ) { + array_splice( $ids, $index, 1 ); + $changed = true; + } + } + + if ( $changed ) { + $user->setOption( $mutelistInfo['pref'], $this->serializePref( $ids, $mutelistInfo['type'] ) ); + $user->saveSettings(); + } + + $this->getResult()->addValue( null, $this->getModuleName(), 'success' ); + } + + private function getCentralIdLookup() { + if ( $this->centralIdLookup === null ) { + $this->centralIdLookup = CentralIdLookup::factory(); + } + return $this->centralIdLookup; + } + + private function lookupIds( $names, $type ) { + if ( $type === 'title' ) { + $linkBatch = MediaWikiServices::getInstance()->getLinkBatchFactory()->newLinkBatch(); + foreach ( $names as $name ) { + $linkBatch->addObj( Title::newFromText( $name ) ); + } + $linkBatch->execute(); + + $ids = []; + foreach ( $names as $name ) { + $title = Title::newFromText( $name ); + if ( $title instanceof Title && $title->getArticleID() > 0 ) { + $ids[] = $title->getArticleID(); + } + } + return $ids; + } elseif ( $type === 'user' ) { + return $this->getCentralIdLookup()->centralIdsFromNames( $names, CentralIdLookup::AUDIENCE_PUBLIC ); + } + } + + private function parsePref( $prefValue, $type ) { + return preg_split( '/\n/', $prefValue, -1, PREG_SPLIT_NO_EMPTY ); + } + + private function serializePref( $ids, $type ) { + return implode( "\n", $ids ); + } + + public function getAllowedParams( $flags = 0 ) { + return [ + 'type' => [ + ApiBase::PARAM_REQUIRED => true, + ApiBase::PARAM_TYPE => array_keys( self::$muteLists ), + ], + 'mute' => [ + ApiBase::PARAM_ISMULTI => true, + ], + 'unmute' => [ + ApiBase::PARAM_ISMULTI => true, + ] + ]; + } + + public function needsToken() { + return 'csrf'; + } + + public function getTokenSalt() { + return ''; + } + + public function mustBePosted() { + return true; + } + + public function isWriteMode() { + return true; + } + +} diff --git a/Echo/includes/api/ApiEchoNotifications.php b/Echo/includes/api/ApiEchoNotifications.php index e549a702..3d4736c4 100644 --- a/Echo/includes/api/ApiEchoNotifications.php +++ b/Echo/includes/api/ApiEchoNotifications.php @@ -74,7 +74,7 @@ class ApiEchoNotifications extends ApiQueryBase { $prop = $params['prop']; $titles = null; if ( $params['titles'] ) { - $titles = array_values( array_filter( array_map( 'Title::newFromText', $params['titles'] ) ) ); + $titles = array_values( array_filter( array_map( [ Title::class, 'newFromText' ], $params['titles'] ) ) ); if ( in_array( '[]', $params['titles'] ) ) { $titles[] = null; } @@ -110,7 +110,9 @@ class ApiEchoNotifications extends ApiQueryBase { // if exactly 1 section is specified, we consider only that section, otherwise // we pass ALL to consider all foreign notifications - $section = count( $params['sections'] ) === 1 ? reset( $params['sections'] ) : EchoAttributeManager::ALL; + $section = count( $params['sections'] ) === 1 + ? reset( $params['sections'] ) + : EchoAttributeManager::ALL; if ( $this->crossWikiSummary ) { $foreignNotification = $this->makeForeignNotification( $user, $params['format'], $section ); if ( $foreignNotification ) { @@ -141,7 +143,7 @@ class ApiEchoNotifications extends ApiQueryBase { * Internal method for getting the property 'list' data for individual section * @param User $user * @param string $section 'alert' or 'message' - * @param string $filter 'all', 'read' or 'unread' + * @param string[] $filter 'all', 'read' or 'unread' * @param int $limit * @param string $continue * @param string $format @@ -184,7 +186,7 @@ class ApiEchoNotifications extends ApiQueryBase { * of a set of sections or a single section * @param User $user * @param string[] $eventTypes - * @param string $filter 'all', 'read' or 'unread' + * @param string[] $filter 'all', 'read' or 'unread' * @param int $limit * @param string $continue * @param string $format @@ -236,7 +238,7 @@ class ApiEchoNotifications extends ApiQueryBase { /** @var EchoNotification $first */ $first = reset( $notifs ); $continueId = intval( trim( strrchr( $continue, '|' ), '|' ) ); - if ( $first->getEvent()->getID() !== $continueId ) { + if ( $first->getEvent()->getId() !== $continueId ) { // notification doesn't match continue id, it must've been // about read notifications: discard all unread ones $notifs = []; @@ -278,6 +280,7 @@ class ApiEchoNotifications extends ApiQueryBase { /** @var EchoNotification $overfetchedItem */ $overfetchedItem = count( $notifs ) > $limit ? array_pop( $notifs ) : null; + $bundler = null; if ( $bundle ) { $bundler = new Bundler(); $notifs = $bundler->bundle( $notifs ); @@ -289,7 +292,7 @@ class ApiEchoNotifications extends ApiQueryBase { $output = EchoDataOutputFormatter::formatOutput( $notif, $format, $user, $this->getLanguage() ); if ( $output !== false ) { $result['list'][] = $output; - } elseif ( $bundle && $notif->getBundledNotifications() ) { + } elseif ( $bundler && $notif->getBundledNotifications() ) { // when the bundle_base gets filtered out, bundled notifications // have to be re-bundled and formatted $notifs = array_merge( $bundler->bundle( $notif->getBundledNotifications() ), $notifs ); @@ -371,61 +374,12 @@ class ApiEchoNotifications extends ApiQueryBase { $format, $section = EchoAttributeManager::ALL ) { - global $wgEchoSectionTransition, $wgEchoBundleTransition; - if ( - ( $wgEchoSectionTransition && $section !== EchoAttributeManager::ALL ) || - $wgEchoBundleTransition - ) { - // In section transition mode we trust that echo_unread_wikis is accurate for the total of alerts+messages, - // but not for each section individually (i.e. we don't trust that notifications won't be misclassified). - // We get all wikis that have any notifications at all according to the euw table, - // 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->getForeignNotifications()->getWikis( - $wgEchoSectionTransition ? EchoAttributeManager::ALL : $section ); - if ( !$potentialWikis ) { - return false; - } - $foreignResults = $this->getFromForeign( $potentialWikis, - [ $this->getModulePrefix() . 'filter' => '!read' ] ); - - $countsByWiki = []; - $timestampsByWiki = []; - foreach ( $foreignResults as $wiki => $result ) { - if ( isset( $result['query']['notifications']['list'] ) ) { - $notifs = $result['query']['notifications']['list']; - $countsByWiki[$wiki] = intval( $result['query']['notifications']['count'] ); - } elseif ( isset( $result['query']['notifications'][$section]['list'] ) ) { - $notifs = $result['query']['notifications'][$section]['list']; - $countsByWiki[$wiki] = intval( $result['query']['notifications'][$section]['count'] ); - } else { - $notifs = false; - $countsByWiki[$wiki] = 0; - } - if ( $notifs ) { - $timestamps = array_filter( array_map( function ( $n ) { - return $n['timestamp']['mw']; - }, $notifs ) ); - $timestampsByWiki[$wiki] = $timestamps ? max( $timestamps ) : 0; - } - } - - $wikis = array_keys( $timestampsByWiki ); - $count = array_sum( $countsByWiki ); - $maxTimestamp = new MWTimestamp( $timestampsByWiki ? max( $timestampsByWiki ) : 0 ); - $timestampsByWiki = array_map( function ( $ts ) { - return new MWTimestamp( $ts ); - }, $timestampsByWiki ); - } else { - // In non-transition mode, or when querying all sections, we can trust the euw table - $wikis = $this->getForeignNotifications()->getWikis( $section ); - $count = $this->getForeignNotifications()->getCount( $section ); - $maxTimestamp = $this->getForeignNotifications()->getTimestamp( $section ); - $timestampsByWiki = []; - foreach ( $wikis as $wiki ) { - $timestampsByWiki[$wiki] = $this->getForeignNotifications()->getWikiTimestamp( $wiki, $section ); - } + $wikis = $this->getForeignNotifications()->getWikis( $section ); + $count = $this->getForeignNotifications()->getCount( $section ); + $maxTimestamp = $this->getForeignNotifications()->getTimestamp( $section ); + $timestampsByWiki = []; + foreach ( $wikis as $wiki ) { + $timestampsByWiki[$wiki] = $this->getForeignNotifications()->getWikiTimestamp( $wiki, $section ); } if ( $count === 0 || $wikis === [] ) { @@ -434,18 +388,17 @@ class ApiEchoNotifications extends ApiQueryBase { // Sort wikis by timestamp, in descending order (newest first) usort( $wikis, function ( $a, $b ) use ( $section, $timestampsByWiki ) { - return $timestampsByWiki[$b]->getTimestamp( TS_UNIX ) - $timestampsByWiki[$a]->getTimestamp( TS_UNIX ); + return (int)$timestampsByWiki[$b]->getTimestamp( TS_UNIX ) + - (int)$timestampsByWiki[$a]->getTimestamp( TS_UNIX ); } ); - $row = new StdClass; + $row = new stdClass; $row->event_id = -1; $row->event_type = 'foreign'; $row->event_variant = null; $row->event_agent_id = $user->getId(); $row->event_agent_ip = null; $row->event_page_id = null; - $row->event_page_namespace = null; - $row->event_page_title = null; $row->event_extra = serialize( [ 'section' => $section ?: 'all', 'wikis' => $wikis, @@ -456,9 +409,7 @@ class ApiEchoNotifications extends ApiQueryBase { $row->notification_user = $user->getId(); $row->notification_timestamp = $maxTimestamp; $row->notification_read_timestamp = null; - $row->notification_bundle_base = 1; $row->notification_bundle_hash = md5( 'bogus' ); - $row->notification_bundle_display_hash = md5( 'also-bogus' ); // Format output like any other notification $notif = EchoNotification::newFromRow( $row ); @@ -485,9 +436,9 @@ class ApiEchoNotifications extends ApiQueryBase { } /** - * @param array $results + * @param array[] $results * @param array $params - * @return mixed + * @return array */ protected function mergeResults( array $results, array $params ) { $master = array_shift( $results ); @@ -511,7 +462,7 @@ class ApiEchoNotifications extends ApiQueryBase { /** * @param array $master - * @param array $results + * @param array[] $results * @param bool $groupBySection * @return array */ @@ -546,7 +497,7 @@ class ApiEchoNotifications extends ApiQueryBase { /** * @param array $master - * @param array $results + * @param array[] $results * @param bool $groupBySection * @return array */ @@ -673,6 +624,6 @@ class ApiEchoNotifications extends ApiQueryBase { } public function getHelpUrls() { - return 'https://www.mediawiki.org/wiki/Echo_(Notifications)/API'; + return 'https://www.mediawiki.org/wiki/Special:MyLanguage/Echo_(Notifications)/API'; } } diff --git a/Echo/includes/api/ApiEchoUnreadNotificationPages.php b/Echo/includes/api/ApiEchoUnreadNotificationPages.php index f085f3ca..95f9b5df 100644 --- a/Echo/includes/api/ApiEchoUnreadNotificationPages.php +++ b/Echo/includes/api/ApiEchoUnreadNotificationPages.php @@ -30,7 +30,7 @@ class ApiEchoUnreadNotificationPages extends ApiQueryBase { $params = $this->extractRequestParams(); $result = []; - if ( in_array( wfWikiId(), $this->getRequestedWikis() ) ) { + if ( in_array( wfWikiID(), $this->getRequestedWikis() ) ) { $result[wfWikiID()] = $this->getFromLocal( $params['limit'], $params['grouppages'] ); } @@ -51,6 +51,7 @@ class ApiEchoUnreadNotificationPages extends ApiQueryBase { * @param int $limit * @param bool $groupPages * @return array + * @phan-return array{pages:array[],totalCount:int} */ protected function getFromLocal( $limit, $groupPages ) { $attributeManager = EchoAttributeManager::newFromGlobalVars(); @@ -77,19 +78,24 @@ class ApiEchoUnreadNotificationPages extends ApiQueryBase { ); if ( $rows === false ) { - return []; + return [ + 'pages' => [], + 'totalCount' => 0, + ]; } $nullCount = 0; $pageCounts = []; foreach ( $rows as $row ) { if ( $row->event_page_id !== null ) { + // @phan-suppress-next-line PhanTypeMismatchDimAssignment $pageCounts[$row->event_page_id] = intval( $row->count ); } else { $nullCount = intval( $row->count ); } } + // @phan-suppress-next-line PhanTypeMismatchArgument $titles = Title::newFromIDs( array_keys( $pageCounts ) ); $groupCounts = []; @@ -101,7 +107,8 @@ class ApiEchoUnreadNotificationPages extends ApiQueryBase { $pageName = $title->getPrefixedText(); } - $count = $pageCounts[$title->getArticleId()]; + // @phan-suppress-next-line PhanTypeMismatchDimFetch + $count = $pageCounts[$title->getArticleID()]; if ( isset( $groupCounts[$pageName] ) ) { $groupCounts[$pageName] += $count; } else { @@ -162,7 +169,7 @@ class ApiEchoUnreadNotificationPages extends ApiQueryBase { } /** - * @return array + * @return array[] */ protected function getUnreadNotificationPagesFromForeign() { $result = []; @@ -210,6 +217,6 @@ class ApiEchoUnreadNotificationPages extends ApiQueryBase { } public function getHelpUrls() { - return 'https://www.mediawiki.org/wiki/Echo_(Notifications)/API'; + return 'https://www.mediawiki.org/wiki/Special:MyLanguage/Echo_(Notifications)/API'; } } diff --git a/Echo/includes/api/Push/ApiEchoPushSubscriptions.php b/Echo/includes/api/Push/ApiEchoPushSubscriptions.php new file mode 100644 index 00000000..ac067294 --- /dev/null +++ b/Echo/includes/api/Push/ApiEchoPushSubscriptions.php @@ -0,0 +1,103 @@ +<?php + +namespace EchoPush\Api; + +use ApiBase; +use ApiModuleManager; +use ApiUsageException; +use MediaWiki\MediaWikiServices; +use Wikimedia\ParamValidator\ParamValidator; + +/** + * API parent module for administering push subscriptions. + * Each operation (command) is implemented as a submodule. This module just performs some basic + * checks and dispatches the execute() call. + */ +class ApiEchoPushSubscriptions extends ApiBase { + + /** array Module name => module class */ + private const SUBMODULES = [ + 'create' => ApiEchoPushSubscriptionsCreate::class, + 'delete' => ApiEchoPushSubscriptionsDelete::class, + ]; + + /** @var ApiModuleManager */ + private $moduleManager; + + /** @inheritDoc */ + public function execute(): void { + $this->checkLoginState(); + $this->checkUserRightsAny( 'editmyprivateinfo' ); + $command = $this->getParameter( 'command' ); + $module = $this->moduleManager->getModule( $command, 'command' ); + $module->execute(); + $module->getResult()->addValue( + null, + $module->getModuleName(), + [ 'result' => 'Success' ] + ); + } + + /** @inheritDoc */ + public function getModuleManager(): ApiModuleManager { + if ( !$this->moduleManager ) { + $submodules = array_map( function ( $class ) { + return [ + 'class' => $class, + 'factory' => "$class::factory", + ]; + }, self::SUBMODULES ); + $this->moduleManager = new ApiModuleManager( + $this, + MediaWikiServices::getInstance()->getObjectFactory() + ); + $this->moduleManager->addModules( $submodules, 'command' ); + } + return $this->moduleManager; + } + + /** @inheritDoc */ + protected function getAllowedParams(): array { + return [ + 'command' => [ + ParamValidator::PARAM_TYPE => 'submodule', + ParamValidator::PARAM_REQUIRED => true, + ], + ]; + } + + /** + * Bail out with an API error if the user is not logged in. + * @throws ApiUsageException + */ + private function checkLoginState(): void { + if ( $this->getUser()->isAnon() ) { + $this->dieWithError( + [ 'apierror-mustbeloggedin', $this->msg( 'action-editmyprivateinfo' ) ], + 'notloggedin' + ); + } + } + + /** @inheritDoc */ + public function getHelpUrls(): string { + return 'https://www.mediawiki.org/wiki/Special:MyLanguage/Extension:Echo#API'; + } + + /** @inheritDoc */ + public function isWriteMode(): bool { + return true; + } + + /** @inheritDoc */ + public function needsToken(): string { + return 'csrf'; + } + + /** @inheritDoc */ + public function isInternal(): bool { + // experimental! + return true; + } + +} diff --git a/Echo/includes/api/Push/ApiEchoPushSubscriptionsCreate.php b/Echo/includes/api/Push/ApiEchoPushSubscriptionsCreate.php new file mode 100644 index 00000000..db8009ec --- /dev/null +++ b/Echo/includes/api/Push/ApiEchoPushSubscriptionsCreate.php @@ -0,0 +1,115 @@ +<?php + +namespace EchoPush\Api; + +use ApiBase; +use ApiMain; +use EchoPush\SubscriptionManager; +use EchoServices; +use Wikimedia\ParamValidator\ParamValidator; + +class ApiEchoPushSubscriptionsCreate extends ApiBase { + + /** + * Supported push notification providers: + * (1) fcm: Firebase Cloud Messaging + * (2) apns: Apple Push Notification Service + */ + private const PROVIDERS = [ 'fcm', 'apns' ]; + + /** @var ApiBase */ + private $parent; + + /** @var SubscriptionManager */ + private $subscriptionManager; + + /** + * Static entry point for initializing the module + * @param ApiBase $parent Parent module + * @param string $name Module name + * @return ApiEchoPushSubscriptionsCreate + */ + public static function factory( ApiBase $parent, string $name ): + ApiEchoPushSubscriptionsCreate { + $subscriptionManger = EchoServices::getInstance()->getPushSubscriptionManager(); + $module = new self( $parent->getMain(), $name, $subscriptionManger ); + $module->parent = $parent; + return $module; + } + + /** + * @param ApiMain $mainModule + * @param string $moduleName + * @param SubscriptionManager $subscriptionManager + */ + public function __construct( + ApiMain $mainModule, + string $moduleName, + SubscriptionManager $subscriptionManager + ) { + parent::__construct( $mainModule, $moduleName ); + $this->subscriptionManager = $subscriptionManager; + } + + /** + * Entry point for executing the module. + * @inheritDoc + */ + public function execute(): void { + $provider = $this->getParameter( 'provider' ); + $token = $this->getParameter( 'providertoken' ); + $success = $this->subscriptionManager->create( $this->getUser(), $provider, $token ); + if ( !$success ) { + $this->dieWithError( 'apierror-echo-push-token-exists' ); + } + } + + /** + * Get the parent module. + * @return ApiBase + */ + public function getParent(): ApiBase { + return $this->parent; + } + + /** @inheritDoc */ + protected function getAllowedParams(): array { + return [ + 'provider' => [ + ParamValidator::PARAM_TYPE => self::PROVIDERS, + ParamValidator::PARAM_REQUIRED => true, + ], + 'providertoken' => [ + ParamValidator::PARAM_TYPE => 'string', + ParamValidator::PARAM_REQUIRED => true, + ], + ]; + } + + /** @inheritDoc */ + protected function getExamplesMessages(): array { + return [ + "action=echopushsubscriptions&command=create&provider=fcm&providertoken=ABC123" => + "apihelp-echopushsubscriptions+create-example" + ]; + } + + // The parent module already enforces these but they make documentation nicer. + + /** @inheritDoc */ + public function isWriteMode(): bool { + return true; + } + + /** @inheritDoc */ + public function mustBePosted(): bool { + return true; + } + + /** @inheritDoc */ + public function isInternal(): bool { + // experimental! + return true; + } + +} diff --git a/Echo/includes/api/Push/ApiEchoPushSubscriptionsDelete.php b/Echo/includes/api/Push/ApiEchoPushSubscriptionsDelete.php new file mode 100644 index 00000000..e6331d23 --- /dev/null +++ b/Echo/includes/api/Push/ApiEchoPushSubscriptionsDelete.php @@ -0,0 +1,103 @@ +<?php + +namespace EchoPush\Api; + +use ApiBase; +use ApiMain; +use EchoPush\SubscriptionManager; +use EchoServices; +use Wikimedia\ParamValidator\ParamValidator; + +class ApiEchoPushSubscriptionsDelete extends ApiBase { + + /** @var ApiBase */ + private $parent; + + /** @var SubscriptionManager */ + private $subscriptionManager; + + /** + * Static entry point for initializing the module + * @param ApiBase $parent Parent module + * @param string $name Module name + * @return ApiEchoPushSubscriptionsDelete + */ + public static function factory( ApiBase $parent, string $name ): + ApiEchoPushSubscriptionsDelete { + $subscriptionManager = EchoServices::getInstance()->getPushSubscriptionManager(); + $module = new self( $parent->getMain(), $name, $subscriptionManager ); + $module->parent = $parent; + return $module; + } + + /** + * @param ApiMain $mainModule + * @param string $moduleName + * @param SubscriptionManager $subscriptionManager + */ + public function __construct( + ApiMain $mainModule, + string $moduleName, + SubscriptionManager $subscriptionManager + ) { + parent::__construct( $mainModule, $moduleName ); + $this->subscriptionManager = $subscriptionManager; + } + + /** + * Entry point for executing the module. + * @inheritDoc + */ + public function execute(): void { + $token = $this->getParameter( 'providertoken' ); + $numRowsDeleted = $this->subscriptionManager->delete( $this->getUser(), $token ); + if ( $numRowsDeleted == 0 ) { + $this->dieWithError( 'apierror-echo-push-token-not-found' ); + } + } + + /** + * Get the parent module. + * @return ApiBase + */ + public function getParent(): ApiBase { + return $this->parent; + } + + /** @inheritDoc */ + protected function getAllowedParams(): array { + return [ + 'providertoken' => [ + ParamValidator::PARAM_TYPE => 'string', + ParamValidator::PARAM_REQUIRED => true, + ], + ]; + } + + /** @inheritDoc */ + protected function getExamplesMessages(): array { + return [ + "action=echopushsubscriptions&command=delete&providertoken=ABC123" => + "apihelp-echopushsubscriptions+delete-example" + ]; + } + + // The parent module already enforces these but they make documentation nicer. + + /** @inheritDoc */ + public function isWriteMode(): bool { + return true; + } + + /** @inheritDoc */ + public function mustBePosted(): bool { + return true; + } + + /** @inheritDoc */ + public function isInternal(): bool { + // experimental! + return true; + } + +} diff --git a/Echo/includes/cache/LocalCache.php b/Echo/includes/cache/LocalCache.php index 069d0f44..cebe8621 100644 --- a/Echo/includes/cache/LocalCache.php +++ b/Echo/includes/cache/LocalCache.php @@ -21,7 +21,7 @@ abstract class EchoLocalCache { /** * Lookup ids that have not been resolved for a target - * @var int[] + * @var bool[] */ private $lookups = []; @@ -50,7 +50,7 @@ abstract class EchoLocalCache { public function add( $key ) { if ( count( $this->lookups ) < self::TARGET_MAX_NUM - && !$this->targets->get( $key ) + && !$this->targets->get( (string)$key ) ) { $this->lookups[$key] = true; } @@ -63,7 +63,7 @@ abstract class EchoLocalCache { * @return mixed|null */ public function get( $key ) { - $target = $this->targets->get( $key ); + $target = $this->targets->get( (string)$key ); if ( $target ) { return $target; } @@ -75,7 +75,7 @@ abstract class EchoLocalCache { $this->targets->set( $id, $val ); } $this->lookups = []; - $target = $this->targets->get( $key ); + $target = $this->targets->get( (string)$key ); if ( $target ) { return $target; } diff --git a/Echo/includes/cache/RevisionLocalCache.php b/Echo/includes/cache/RevisionLocalCache.php index 18183322..4c8c31a6 100644 --- a/Echo/includes/cache/RevisionLocalCache.php +++ b/Echo/includes/cache/RevisionLocalCache.php @@ -1,7 +1,9 @@ <?php +use MediaWiki\MediaWikiServices; + /** - * Cache class that maps revision id to Revision object + * Cache class that maps revision id to RevisionStore object */ class EchoRevisionLocalCache extends EchoLocalCache { @@ -25,8 +27,9 @@ class EchoRevisionLocalCache extends EchoLocalCache { * @inheritDoc */ protected function resolve( array $lookups ) { + $store = MediaWikiServices::getInstance()->getRevisionStore(); $dbr = wfGetDB( DB_REPLICA ); - $revQuery = Revision::getQueryInfo( [ 'page', 'user' ] ); + $revQuery = $store->getQueryInfo( [ 'page', 'user' ] ); $res = $dbr->select( $revQuery['tables'], $revQuery['fields'], @@ -36,7 +39,7 @@ class EchoRevisionLocalCache extends EchoLocalCache { $revQuery['joins'] ); foreach ( $res as $row ) { - yield $row->rev_id => new Revision( $row ); + yield $row->rev_id => $store->newRevisionFromRow( $row ); } } } diff --git a/Echo/includes/cache/TitleLocalCache.php b/Echo/includes/cache/TitleLocalCache.php index d896b012..b756b0f7 100644 --- a/Echo/includes/cache/TitleLocalCache.php +++ b/Echo/includes/cache/TitleLocalCache.php @@ -28,7 +28,7 @@ class EchoTitleLocalCache extends EchoLocalCache { if ( $lookups ) { $titles = Title::newFromIDs( $lookups ); foreach ( $titles as $title ) { - yield $title->getArticleId() => $title; + yield $title->getArticleID() => $title; } } } diff --git a/Echo/includes/controller/ModerationController.php b/Echo/includes/controller/ModerationController.php index b22090a8..1c2c6884 100644 --- a/Echo/includes/controller/ModerationController.php +++ b/Echo/includes/controller/ModerationController.php @@ -14,7 +14,7 @@ class EchoModerationController { * @param bool $moderate Whether to moderate or unmoderate the events * @throws MWException */ - public static function moderate( $eventIds, $moderate ) { + public static function moderate( array $eventIds, $moderate ) { if ( !$eventIds ) { return; } @@ -25,12 +25,14 @@ class EchoModerationController { $affectedUserIds = $notificationMapper->fetchUsersWithNotificationsForEvents( $eventIds ); $eventMapper->toggleDeleted( $eventIds, $moderate ); - DeferredUpdates::addCallableUpdate( function () use ( $affectedUserIds ) { + $fname = __METHOD__; + + DeferredUpdates::addCallableUpdate( function () use ( $affectedUserIds, $fname ) { // This update runs after the main transaction round commits. // Wait for the event deletions to be propagated to replica DBs $lbFactory = MediaWikiServices::getInstance()->getDBLoadBalancerFactory(); $lbFactory->waitForReplication( [ 'timeout' => 5 ] ); - $lbFactory->flushReplicaSnapshots( 'EchoModerationController::moderate' ); + $lbFactory->flushReplicaSnapshots( $fname ); // Recompute the notification count for the // users whose notifications have been moderated. foreach ( $affectedUserIds as $userId ) { diff --git a/Echo/includes/controller/NotificationController.php b/Echo/includes/controller/NotificationController.php index e6c47a2b..b22773d1 100644 --- a/Echo/includes/controller/NotificationController.php +++ b/Echo/includes/controller/NotificationController.php @@ -1,4 +1,5 @@ <?php + use MediaWiki\Logger\LoggerFactory; use MediaWiki\MediaWikiServices; use MediaWiki\Revision\RevisionStore; @@ -13,28 +14,42 @@ class EchoNotificationController { * * @var int $maxRecipientCacheSize */ - static protected $maxRecipientCacheSize = 200; + protected static $maxRecipientCacheSize = 200; + + /** + * Max number of users for which we in-process cache titles. + * + * @var int + */ + protected static $maxUsersTitleCacheSize = 200; /** * Echo event agent per user blacklist * * @var MapCacheLRU */ - static protected $blacklistByUser; + protected static $blacklistByUser; + + /** + * Echo event agent per page linked event title mute list. + * + * @var MapCacheLRU + */ + protected static $mutedPageLinkedTitlesCache; /** * Echo event agent per wiki blacklist * * @var EchoContainmentList|null */ - static protected $wikiBlacklist; + protected static $wikiBlacklist; /** * Echo event agent per user whitelist, this overwrites $blacklistByUser * * @var MapCacheLRU */ - static protected $whitelistByUser; + protected static $whitelistByUser; /** * Returns the count passed in, or MWEchoNotifUser::MAX_BADGE_COUNT + 1, @@ -80,8 +95,7 @@ class EchoNotificationController { // defer job insertion till end of request when all primary db transactions // have been committed DeferredUpdates::addCallableUpdate( function () use ( $event ) { - // can't use self::, php 5.3 doesn't inherit class scope - EchoNotificationController::enqueueEvent( $event ); + self::enqueueEvent( $event ); } ); return; @@ -188,30 +202,13 @@ class EchoNotificationController { * this event type */ public static function getEventNotifyTypes( $eventType ) { - global $wgDefaultNotifyTypeAvailability, - $wgEchoNotifications; - $attributeManager = EchoAttributeManager::newFromGlobalVars(); $category = $attributeManager->getNotificationCategory( $eventType ); - // If the category is displayed in preferences, we should go by that, rather - // than overrides that are inconsistent with what the user saw in preferences. - $isTypeSpecificConsidered = !$attributeManager->isCategoryDisplayedInPreferences( - $category - ); - - $notifyTypes = $wgDefaultNotifyTypeAvailability; - - if ( $isTypeSpecificConsidered && isset( $wgEchoNotifications[$eventType]['notify-type-availability'] ) ) { - $notifyTypes = array_merge( - $notifyTypes, - $wgEchoNotifications[$eventType]['notify-type-availability'] - ); - } - - // Category settings for availability are considered in EchoNotifier - return array_keys( array_filter( $notifyTypes ) ); + return array_keys( array_filter( + $attributeManager->getNotifyTypeAvailabilityForCategory( $category ) + ) ); } /** @@ -240,8 +237,6 @@ class EchoNotificationController { public static function isBlacklistedByUser( EchoEvent $event, User $user ) { global $wgEchoAgentBlacklist, $wgEchoPerUserBlacklist; - $clusterCache = ObjectCache::getLocalClusterInstance(); - if ( !$event->getAgent() ) { return false; } @@ -252,7 +247,7 @@ class EchoNotificationController { } // Ensure we have a blacklist for the user - if ( !self::$blacklistByUser->has( $user->getId() ) ) { + if ( !self::$blacklistByUser->has( (string)$user->getId() ) ) { $blacklist = new EchoContainmentSet( $user ); // Add the config setting @@ -270,24 +265,50 @@ class EchoNotificationController { } // Add user's blacklist to dictionary if user wasn't already there - self::$blacklistByUser->set( $user->getId(), $blacklist ); + self::$blacklistByUser->set( (string)$user->getId(), $blacklist ); } else { // Just get the user's blacklist if it's already there - $blacklist = self::$blacklistByUser->get( $user->getId() ); + $blacklist = self::$blacklistByUser->get( (string)$user->getId() ); + } + return $blacklist->contains( $event->getAgent()->getName() ) || + ( $wgEchoPerUserBlacklist && + $event->getType() === 'page-linked' && + self::isPageLinkedTitleMutedByUser( $event->getTitle(), $user ) ); + } + + /** + * Check if a title is in the user's page-linked event blacklist. + * + * @param Title $title + * @param User $user + * @return bool + */ + public static function isPageLinkedTitleMutedByUser( Title $title, User $user ) { + if ( self::$mutedPageLinkedTitlesCache === null ) { + self::$mutedPageLinkedTitlesCache = new MapCacheLRU( self::$maxUsersTitleCacheSize ); + } + if ( !self::$mutedPageLinkedTitlesCache->has( (string)$user->getId() ) ) { + $pageLinkedTitleMutedList = new EchoContainmentSet( $user ); + $pageLinkedTitleMutedList->addTitleIDsFromUserOption( + 'echo-notifications-page-linked-title-muted-list' + ); + self::$mutedPageLinkedTitlesCache->set( (string)$user->getId(), $pageLinkedTitleMutedList ); + } else { + $pageLinkedTitleMutedList = self::$mutedPageLinkedTitlesCache->get( (string)$user->getId() ); } - return $blacklist->contains( $event->getAgent()->getName() ); + return $pageLinkedTitleMutedList->contains( (string)$title->getArticleID() ); } /** * @return EchoContainmentList|null */ protected static function getWikiBlacklist() { - $clusterCache = ObjectCache::getLocalClusterInstance(); global $wgEchoOnWikiBlacklist; if ( !$wgEchoOnWikiBlacklist ) { return null; } if ( self::$wikiBlacklist === null ) { + $clusterCache = MediaWikiServices::getInstance()->getMainWANObjectCache(); self::$wikiBlacklist = new EchoCachedList( $clusterCache, $clusterCache->makeKey( "echo_on_wiki_blacklist" ), @@ -306,14 +327,14 @@ class EchoNotificationController { * @return bool True when the event agent is in the user whitelist */ public static function isWhitelistedByUser( EchoEvent $event, User $user ) { - $clusterCache = ObjectCache::getLocalClusterInstance(); + $clusterCache = MediaWikiServices::getInstance()->getMainWANObjectCache(); global $wgEchoPerUserWhitelistFormat; if ( $wgEchoPerUserWhitelistFormat === null || !$event->getAgent() ) { return false; } - $userId = $user->getID(); + $userId = $user->getId(); if ( $userId === 0 ) { return false; // anonymous user } @@ -324,9 +345,9 @@ class EchoNotificationController { } // Ensure we have a whitelist for the user - if ( !self::$whitelistByUser->has( $userId ) ) { + if ( !self::$whitelistByUser->has( (string)$userId ) ) { $whitelist = new EchoContainmentSet( $user ); - self::$whitelistByUser->set( $userId, $whitelist ); + self::$whitelistByUser->set( (string)$userId, $whitelist ); $whitelist->addOnWiki( NS_USER, sprintf( $wgEchoPerUserWhitelistFormat, $user->getName() ), @@ -335,7 +356,7 @@ class EchoNotificationController { ); } else { // Just get the user's whitelist - $whitelist = self::$whitelistByUser->get( $userId ); + $whitelist = self::$whitelistByUser->get( (string)$userId ); } return $whitelist->contains( $event->getAgent()->getName() ); } @@ -411,6 +432,7 @@ class EchoNotificationController { // @deprecated $users = []; Hooks::run( 'EchoGetDefaultNotifiedUsers', [ $event, &$users ] ); + // @phan-suppress-next-line PhanImpossibleCondition May be set by hook if ( $users ) { $notify->add( $users ); } @@ -449,9 +471,8 @@ class EchoNotificationController { return true; } ); - // Don't notify the person who initiated the event unless the event extra says to do so - $extra = $event->getExtra(); - if ( ( !isset( $extra['notifyAgent'] ) || !$extra['notifyAgent'] ) && $event->getAgent() ) { + // Don't notify the person who initiated the event unless the event allows it + if ( !$event->canNotifyAgent() && $event->getAgent() ) { $agentId = $event->getAgent()->getId(); $notify->addFilter( function ( $user ) use ( $agentId ) { return $user->getId() != $agentId; diff --git a/Echo/includes/formatters/EchoEventDigestFormatter.php b/Echo/includes/formatters/EchoEventDigestFormatter.php index c4a9d436..85c9e927 100644 --- a/Echo/includes/formatters/EchoEventDigestFormatter.php +++ b/Echo/includes/formatters/EchoEventDigestFormatter.php @@ -7,6 +7,13 @@ * arguments passed in the constructor (user and language) */ abstract class EchoEventDigestFormatter { + + /** @var User */ + protected $user; + + /** @var Language */ + protected $language; + public function __construct( User $user, Language $language ) { $this->user = $user; $this->language = $language; @@ -16,13 +23,14 @@ abstract class EchoEventDigestFormatter { * Equivalent to IContextSource::msg for the current * language * + * @param string ...$args * @return Message */ - protected function msg( /* ,,, */ ) { + protected function msg( ...$args ) { /** * @var Message $msg */ - $msg = wfMessage( ...func_get_args() ); + $msg = wfMessage( ...$args ); $msg->inLanguage( $this->language ); return $msg; diff --git a/Echo/includes/formatters/EchoEventFormatter.php b/Echo/includes/formatters/EchoEventFormatter.php index f66b3ce9..0e81b3c4 100644 --- a/Echo/includes/formatters/EchoEventFormatter.php +++ b/Echo/includes/formatters/EchoEventFormatter.php @@ -14,6 +14,13 @@ use MediaWiki\Logger\LoggerFactory; * arguments passed in the constructor (user and language) */ abstract class EchoEventFormatter { + + /** @var User */ + protected $user; + + /** @var Language */ + protected $language; + public function __construct( User $user, Language $language ) { $this->user = $user; $this->language = $language; @@ -23,13 +30,14 @@ abstract class EchoEventFormatter { * Equivalent to IContextSource::msg for the current * language * + * @param string ...$args * @return Message */ - protected function msg( /* ,,, */ ) { + protected function msg( ...$args ) { /** * @var Message $msg */ - $msg = wfMessage( ...func_get_args() ); + $msg = wfMessage( ...$args ); $msg->inLanguage( $this->language ); return $msg; diff --git a/Echo/includes/formatters/EchoForeignPresentationModel.php b/Echo/includes/formatters/EchoForeignPresentationModel.php index 0d040dfc..42e56f81 100644 --- a/Echo/includes/formatters/EchoForeignPresentationModel.php +++ b/Echo/includes/formatters/EchoForeignPresentationModel.php @@ -15,7 +15,8 @@ class EchoForeignPresentationModel extends EchoEventPresentationModel { // notification-header-foreign-alert // notification-header-foreign-notice - return "notification-header-{$this->type}-{$section}"; + // notification-header-foreign-all + return "notification-header-foreign-{$section}"; } public function getHeaderMessage() { @@ -33,7 +34,7 @@ class EchoForeignPresentationModel extends EchoEventPresentationModel { public function getBodyMessage() { $data = $this->event->getExtra(); - $msg = wfMessage( "notification-body-{$this->type}" ); + $msg = wfMessage( 'notification-body-foreign' ); $msg->params( $this->language->listToText( $this->getWikiNames( $data['wikis'] ) ) ); return $msg; } diff --git a/Echo/includes/formatters/EchoHtmlDigestEmailFormatter.php b/Echo/includes/formatters/EchoHtmlDigestEmailFormatter.php index 77ffe9c8..fe59aaa3 100644 --- a/Echo/includes/formatters/EchoHtmlDigestEmailFormatter.php +++ b/Echo/includes/formatters/EchoHtmlDigestEmailFormatter.php @@ -146,7 +146,7 @@ EOF; * @param EchoEventPresentationModel[] $models * @return array [ 'category name' => EchoEventPresentationModel[] ] */ - private function groupByCategory( $models ) { + private function groupByCategory( array $models ) { $eventsByCategory = []; foreach ( $models as $model ) { $eventsByCategory[$model->getCategory()][] = $model; diff --git a/Echo/includes/formatters/EchoIcon.php b/Echo/includes/formatters/EchoIcon.php index 5d1b186d..b7ccbde4 100644 --- a/Echo/includes/formatters/EchoIcon.php +++ b/Echo/includes/formatters/EchoIcon.php @@ -59,9 +59,7 @@ class EchoIcon { throw new InvalidArgumentException( "The $icon icon is not registered" ); } - $url = isset( $wgEchoNotificationIcons[ $icon ][ 'url' ] ) ? - $wgEchoNotificationIcons[ $icon ][ 'url' ] : - null; + $url = $wgEchoNotificationIcons[ $icon ][ 'url' ] ?? null; // If the defined URL is explicitly false, use placeholder if ( $url === false ) { diff --git a/Echo/includes/formatters/EchoModelFormatter.php b/Echo/includes/formatters/EchoModelFormatter.php index 4d4050b4..cff2abe5 100644 --- a/Echo/includes/formatters/EchoModelFormatter.php +++ b/Echo/includes/formatters/EchoModelFormatter.php @@ -8,6 +8,7 @@ class EchoModelFormatter extends EchoEventFormatter { /** * @param EchoEventPresentationModel $model * @return array + * @suppress SecurityCheck-DoubleEscaped */ protected function formatModel( EchoEventPresentationModel $model ) { $data = $model->jsonSerialize(); @@ -17,9 +18,12 @@ class EchoModelFormatter extends EchoEventFormatter { $data['links']['primary']['url'] = wfExpandUrl( $data['links']['primary']['url'] ); } + // @phan-suppress-next-line PhanTypePossiblyInvalidDimOffset foreach ( $data['links']['secondary'] as &$link ) { + // @phan-suppress-next-line PhanTypeMismatchDimAssignment $link['url'] = wfExpandUrl( $link['url'] ); } + unset( $link ); $bundledIds = $model->getBundledIds(); if ( $bundledIds ) { diff --git a/Echo/includes/formatters/EchoPlainTextEmailFormatter.php b/Echo/includes/formatters/EchoPlainTextEmailFormatter.php index 34fdc7d1..33825136 100644 --- a/Echo/includes/formatters/EchoPlainTextEmailFormatter.php +++ b/Echo/includes/formatters/EchoPlainTextEmailFormatter.php @@ -44,7 +44,7 @@ class EchoPlainTextEmailFormatter extends EchoEventFormatter { ->getFullURL( '', false, PROTO_CANONICAL ); $text = "--\n\n$footerMsg\n$prefsUrl"; - if ( strlen( $wgEchoEmailFooterAddress ) ) { + if ( $wgEchoEmailFooterAddress !== '' ) { $text .= "\n\n$wgEchoEmailFooterAddress"; } diff --git a/Echo/includes/formatters/EditUserTalkPresentationModel.php b/Echo/includes/formatters/EditUserTalkPresentationModel.php index b950bd46..3e6974d1 100644 --- a/Echo/includes/formatters/EditUserTalkPresentationModel.php +++ b/Echo/includes/formatters/EditUserTalkPresentationModel.php @@ -1,7 +1,19 @@ <?php class EchoEditUserTalkPresentationModel extends EchoEventPresentationModel { - use EchoPresentationModelSectionTrait; + + /** + * @var EchoPresentationModelSection + */ + private $section; + + /** + * @inheritDoc + */ + protected function __construct( EchoEvent $event, Language $language, User $user, $distributionType ) { + parent::__construct( $event, $language, $user, $distributionType ); + $this->section = new EchoPresentationModelSection( $event, $user, $language ); + } public function canRender() { return (bool)$this->event->getTitle(); @@ -14,7 +26,7 @@ class EchoEditUserTalkPresentationModel extends EchoEventPresentationModel { public function getPrimaryLink() { return [ // Need FullURL so the section is included - 'url' => $this->getTitleWithSection()->getFullURL(), + 'url' => $this->section->getTitleWithSection()->getFullURL(), 'label' => $this->msg( 'notification-link-text-view-message' )->text() ]; } @@ -37,17 +49,17 @@ class EchoEditUserTalkPresentationModel extends EchoEventPresentationModel { public function getHeaderMessage() { if ( $this->isBundled() ) { - $msg = $this->msg( "notification-bundle-header-{$this->type}-v2" ); + $msg = $this->msg( 'notification-bundle-header-edit-user-talk-v2' ); $count = $this->getNotificationCountForOutput(); // Repeat is B/C until unused parameter is removed from translations $msg->numParams( $count, $count ); $msg->params( $this->getViewingUserForGender() ); return $msg; - } elseif ( $this->hasSection() ) { - $msg = $this->getMessageWithAgent( "notification-header-{$this->type}-with-section" ); + } elseif ( $this->section->exists() ) { + $msg = $this->getMessageWithAgent( 'notification-header-edit-user-talk-with-section' ); $msg->params( $this->getViewingUserForGender() ); - $msg->plaintextParams( $this->getTruncatedSectionTitle() ); + $msg->plaintextParams( $this->section->getTruncatedSectionTitle() ); return $msg; } else { $msg = parent::getHeaderMessage(); @@ -57,23 +69,23 @@ class EchoEditUserTalkPresentationModel extends EchoEventPresentationModel { } public function getCompactHeaderMessage() { - $hasSection = $this->hasSection(); + $hasSection = $this->section->exists(); $key = $hasSection - ? "notification-compact-header-{$this->type}-with-section" - : "notification-compact-header-{$this->type}"; + ? 'notification-compact-header-edit-user-talk-with-section' + : 'notification-compact-header-edit-user-talk'; $msg = $this->getMessageWithAgent( $key ); $msg->params( $this->getViewingUserForGender() ); if ( $hasSection ) { - $msg->params( $this->getTruncatedSectionTitle() ); + $msg->params( $this->section->getTruncatedSectionTitle() ); } return $msg; } public function getBodyMessage() { $sectionText = $this->event->getExtraParam( 'section-text' ); - if ( !$this->isBundled() && $this->hasSection() && $sectionText !== null ) { + if ( !$this->isBundled() && $this->section->exists() && is_string( $sectionText ) ) { $msg = $this->msg( 'notification-body-edit-user-talk-with-section' ); - // section-text is safe to use here, because hasSection() returns false if the revision is deleted + // section-text is safe to use here, because section->exists() returns false if the revision is deleted $msg->plaintextParams( $sectionText ); return $msg; } else { diff --git a/Echo/includes/formatters/EventPresentationModel.php b/Echo/includes/formatters/EventPresentationModel.php index 02c6e6e8..59a9bfef 100644 --- a/Echo/includes/formatters/EventPresentationModel.php +++ b/Echo/includes/formatters/EventPresentationModel.php @@ -1,5 +1,6 @@ <?php +use MediaWiki\Revision\RevisionRecord; use Wikimedia\Timestamp\TimestampException; /** @@ -143,16 +144,26 @@ abstract class EchoEventPresentationModel implements JsonSerializable { } /** + * Get the distribution type + * + * @return string 'web' or 'email' + */ + final public function getDistributionType() { + return $this->distributionType; + } + + /** * Equivalent to IContextSource::msg for the current * language * + * @param string ...$args * @return Message */ - protected function msg( /* ,,, */ ) { + protected function msg( ...$args ) { /** * @var Message $msg */ - $msg = wfMessage( ...func_get_args() ); + $msg = wfMessage( ...$args ); $msg->inLanguage( $this->language ); // Notifications are considered UI (and should be in UI language, not @@ -257,7 +268,7 @@ abstract class EchoEventPresentationModel implements JsonSerializable { /** * Helper for EchoEvent::userCan * - * @param int $type Revision::DELETED_* constant + * @param int $type RevisionRecord::DELETED_* constant * @return bool */ final protected function userCan( $type ) { @@ -282,7 +293,7 @@ abstract class EchoEventPresentationModel implements JsonSerializable { return false; } - if ( $this->userCan( Revision::DELETED_USER ) ) { + if ( $this->userCan( RevisionRecord::DELETED_USER ) ) { // Not deleted return [ $this->getTruncatedUsername( $agent ), @@ -409,6 +420,7 @@ abstract class EchoEventPresentationModel implements JsonSerializable { */ public function getSubjectMessage() { $msg = $this->getMessageWithAgent( $this->getSubjectMessageKey() ); + $msg->params( $this->getViewingUserForGender() ); if ( $msg->isDisabled() ) { // Back-compat for models that haven't been updated yet $msg = $this->getHeaderMessage(); @@ -467,7 +479,7 @@ abstract class EchoEventPresentationModel implements JsonSerializable { * Array of secondary link details, including possibly-relative URLs, label, * description & icon name. * - * @return array Array of links in the format of: + * @return (null|array)[] Array of links in the format of: * [['url' => (string) url, * 'label' => (string) link text (non-escaped), * 'description' => (string) descriptive text (optional, non-escaped), @@ -564,7 +576,7 @@ abstract class EchoEventPresentationModel implements JsonSerializable { return null; } - if ( !$this->userCan( Revision::DELETED_USER ) ) { + if ( !$this->userCan( RevisionRecord::DELETED_USER ) ) { return null; } @@ -620,7 +632,7 @@ abstract class EchoEventPresentationModel implements JsonSerializable { * Get a dynamic action link * * @param Title $title Title relating to this action - * @param bool $icon Optional. Symbolic name of the OOUI icon to use + * @param string|false $icon Optional. Symbolic name of the OOUI icon to use * @param string $label link text (non-escaped) * @param string|null $description descriptive text (optional, non-escaped) * @param array $data Action data @@ -714,7 +726,7 @@ abstract class EchoEventPresentationModel implements JsonSerializable { $this->getTruncatedTitleText( $title ), $title->getFullURL( [ 'action' => $availableAction ] ), $this->getUser()->getName() - ), + )->escaped(), null, $data, [ 'action' => $availableAction ] diff --git a/Echo/includes/formatters/MentionInSummaryPresentationModel.php b/Echo/includes/formatters/MentionInSummaryPresentationModel.php index bda17118..74f17603 100644 --- a/Echo/includes/formatters/MentionInSummaryPresentationModel.php +++ b/Echo/includes/formatters/MentionInSummaryPresentationModel.php @@ -1,5 +1,7 @@ <?php +use MediaWiki\Revision\RevisionRecord; + class EchoMentionInSummaryPresentationModel extends EchoEventPresentationModel { public function getIconType() { @@ -13,15 +15,15 @@ class EchoMentionInSummaryPresentationModel extends EchoEventPresentationModel { public function getHeaderMessage() { $msg = $this->getMessageWithAgent( 'notification-header-mention-summary' ); $msg->params( $this->getViewingUserForGender() ); - $msg->params( $this->getTruncatedTitleText( $this->event->getTitle() ) ); + $msg->params( $this->getTruncatedTitleText( $this->event->getTitle(), true ) ); return $msg; } public function getBodyMessage() { - if ( $this->userCan( Revision::DELETED_COMMENT ) ) { - $revision = $this->event->getRevision(); - $summary = $revision->getComment(); + $revision = $this->event->getRevision(); + if ( $revision && $revision->getComment() && $this->userCan( RevisionRecord::DELETED_COMMENT ) ) { + $summary = $revision->getComment()->text; $summary = Linker::formatComment( $summary ); $summary = Sanitizer::stripAllTags( $summary ); diff --git a/Echo/includes/formatters/MentionPresentationModel.php b/Echo/includes/formatters/MentionPresentationModel.php index 69e3cc23..c407b350 100644 --- a/Echo/includes/formatters/MentionPresentationModel.php +++ b/Echo/includes/formatters/MentionPresentationModel.php @@ -1,7 +1,21 @@ <?php +use MediaWiki\Revision\RevisionRecord; + class EchoMentionPresentationModel extends EchoEventPresentationModel { - use EchoPresentationModelSectionTrait; + + /** + * @var EchoPresentationModelSection + */ + private $section; + + /** + * @inheritDoc + */ + protected function __construct( EchoEvent $event, Language $language, User $user, $distributionType ) { + parent::__construct( $event, $language, $user, $distributionType ); + $this->section = new EchoPresentationModelSection( $event, $user, $language ); + } public function getIconType() { return 'mention'; @@ -12,20 +26,21 @@ class EchoMentionPresentationModel extends EchoEventPresentationModel { } protected function getHeaderMessageKey() { + $hasSection = $this->section->exists(); if ( $this->onArticleTalkpage() ) { - return $this->hasSection() ? + return $hasSection ? 'notification-header-mention-article-talkpage' : 'notification-header-mention-article-talkpage-nosection'; } elseif ( $this->onAgentTalkpage() ) { - return $this->hasSection() ? + return $hasSection ? 'notification-header-mention-agent-talkpage' : 'notification-header-mention-agent-talkpage-nosection'; } elseif ( $this->onUserTalkpage() ) { - return $this->hasSection() ? + return $hasSection ? 'notification-header-mention-user-talkpage-v2' : 'notification-header-mention-user-talkpage-nosection'; } else { - return $this->hasSection() ? + return $hasSection ? 'notification-header-mention-other' : 'notification-header-mention-other-nosection'; } @@ -49,8 +64,8 @@ class EchoMentionPresentationModel extends EchoEventPresentationModel { $msg->params( $this->getTruncatedTitleText( $this->event->getTitle(), true ) ); } - if ( $this->hasSection() ) { - $msg->plaintextParams( $this->getTruncatedSectionTitle() ); + if ( $this->section->exists() ) { + $msg->plaintextParams( $this->section->getTruncatedSectionTitle() ); } return $msg; @@ -58,7 +73,7 @@ class EchoMentionPresentationModel extends EchoEventPresentationModel { public function getBodyMessage() { $content = $this->event->getExtraParam( 'content' ); - if ( $content && $this->userCan( Revision::DELETED_TEXT ) ) { + if ( $content && $this->userCan( RevisionRecord::DELETED_TEXT ) ) { $msg = $this->msg( 'notification-body-mention' ); $msg->plaintextParams( EchoDiscussionParser::getTextSnippet( @@ -77,7 +92,7 @@ class EchoMentionPresentationModel extends EchoEventPresentationModel { public function getPrimaryLink() { return [ // Need FullURL so the section is included - 'url' => $this->getTitleWithSection()->getFullURL(), + 'url' => $this->section->getTitleWithSection()->getFullURL(), 'label' => $this->msg( 'notification-link-text-view-mention' )->text() ]; } @@ -109,18 +124,8 @@ class EchoMentionPresentationModel extends EchoEventPresentationModel { } private function onUserTalkpage() { - return $this->event->getTitle()->getNamespace() === NS_USER_TALK && - $this->event->getTitle()->isTalkPage() && - !$this->event->getTitle()->isSubpage(); - } - - private function isTalk() { - return $this->event->getTitle()->isTalkPage(); - } - - private function isArticle() { - $ns = $this->event->getTitle()->getNamespace(); - return $ns === NS_MAIN || $ns === NS_TALK; + $title = $this->event->getTitle(); + return $title->getNamespace() === NS_USER_TALK && !$title->isSubpage(); } protected function getSubjectMessageKey() { diff --git a/Echo/includes/formatters/MentionStatusPresentationModel.php b/Echo/includes/formatters/MentionStatusPresentationModel.php index 974c23d2..083d2c84 100644 --- a/Echo/includes/formatters/MentionStatusPresentationModel.php +++ b/Echo/includes/formatters/MentionStatusPresentationModel.php @@ -8,7 +8,19 @@ * @license MIT */ class EchoMentionStatusPresentationModel extends EchoEventPresentationModel { - use EchoPresentationModelSectionTrait; + + /** + * @var EchoPresentationModelSection + */ + private $section; + + /** + * @inheritDoc + */ + protected function __construct( EchoEvent $event, Language $language, User $user, $distributionType ) { + parent::__construct( $event, $language, $user, $distributionType ); + $this->section = new EchoPresentationModelSection( $event, $user, $language ); + } public function getIconType() { if ( $this->isMixedBundle() ) { @@ -82,7 +94,7 @@ class EchoMentionStatusPresentationModel extends EchoEventPresentationModel { public function getPrimaryLink() { return [ // Need FullURL so the section is included - 'url' => $this->getTitleWithSection()->getFullURL(), + 'url' => $this->section->getTitleWithSection()->getFullURL(), 'label' => $this->msg( 'notification-link-text-view-mention-failure' ) ->numParams( $this->getBundleCount() ) ->text() @@ -95,7 +107,7 @@ class EchoMentionStatusPresentationModel extends EchoEventPresentationModel { } $talkPageLink = $this->getPageLink( - $this->getTitleWithSection(), + $this->section->getTitleWithSection(), '', true ); diff --git a/Echo/includes/formatters/PageLinkedPresentationModel.php b/Echo/includes/formatters/PageLinkedPresentationModel.php index 3941484b..3e34c6d2 100644 --- a/Echo/includes/formatters/PageLinkedPresentationModel.php +++ b/Echo/includes/formatters/PageLinkedPresentationModel.php @@ -1,5 +1,7 @@ <?php +use MediaWiki\MediaWikiServices; + class EchoPageLinkedPresentationModel extends EchoEventPresentationModel { private $pageFrom; @@ -34,7 +36,8 @@ class EchoPageLinkedPresentationModel extends EchoEventPresentationModel { public function getSecondaryLinks() { $whatLinksHereLink = [ - 'url' => SpecialPage::getTitleFor( 'Whatlinkshere', $this->event->getTitle()->getPrefixedText() )->getFullURL(), + 'url' => SpecialPage::getTitleFor( 'Whatlinkshere', $this->event->getTitle()->getPrefixedText() ) + ->getFullURL(), 'label' => $this->msg( 'notification-link-text-what-links-here' )->text(), 'description' => '', 'icon' => 'linked', @@ -46,21 +49,75 @@ class EchoPageLinkedPresentationModel extends EchoEventPresentationModel { if ( $revid !== null ) { $diffLink = [ 'url' => $this->getPageFrom()->getFullURL( [ 'diff' => $revid, 'oldid' => 'prev' ] ), - 'label' => $this->msg( 'notification-link-text-view-changes', $this->getViewingUserForGender() )->text(), + 'label' => $this->msg( 'notification-link-text-view-changes', $this->getViewingUserForGender() ) + ->text(), 'description' => '', 'icon' => 'changes', 'prioritized' => true ]; } - return [ $whatLinksHereLink, $diffLink ]; + return [ $whatLinksHereLink, $diffLink, $this->getMuteLink() ]; + } + + protected function getMuteLink() { + if ( !MediaWikiServices::getInstance()->getMainConfig()->get( 'EchoPerUserBlacklist' ) ) { + return null; + } + $title = $this->event->getTitle(); + $isPageMuted = EchoNotificationController::isPageLinkedTitleMutedByUser( $title, $this->getUser() ); + $action = $isPageMuted ? 'unmute' : 'mute'; + $prefTitle = SpecialPage::getTitleFor( 'Preferences', false, 'mw-prefsection-echo-mutedpageslist' ); + $data = [ + 'tokenType' => 'csrf', + 'params' => [ + 'action' => 'echomute', + 'type' => 'page-linked-title', + ], + 'messages' => [ + 'confirmation' => [ + // notification-dynamic-actions-mute-page-linked-confirmation + // notification-dynamic-actions-unmute-page-linked-confirmation + 'title' => $this + ->msg( 'notification-dynamic-actions-' . $action . '-page-linked-confirmation' ) + ->params( + $this->getTruncatedTitleText( $title ), + $this->getViewingUserForGender() + ), + // notification-dynamic-actions-mute-page-linked-confirmation-description + // notification-dynamic-actions-unmute-page-linked-confirmation-description + 'description' => $this + ->msg( 'notification-dynamic-actions-' . $action . '-page-linked-confirmation-description' ) + ->params( + $prefTitle->getFullURL(), + $this->getViewingUserForGender() + ) + ] + ] + ]; + $data['params'][$isPageMuted ? 'unmute' : 'mute'] = $title->getPrefixedText(); + + return $this->getDynamicActionLink( + $prefTitle, + $isPageMuted ? 'bell' : 'unbell', + // notification-dynamic-actions-mute-page-linked + // notification-dynamic-actions-unmute-page-linked + $this->msg( 'notification-dynamic-actions-' . $action . '-page-linked' ) + ->params( + $this->getTruncatedTitleText( $title ), + $this->getViewingUserForGender() + )->text(), + null, + $data, + [] + ); } protected function getHeaderMessageKey() { if ( $this->getBundleCount( true, [ $this, 'getLinkedPageId' ] ) > 1 ) { - return "notification-bundle-header-{$this->type}"; + return 'notification-bundle-header-page-linked'; } - return "notification-header-{$this->type}"; + return 'notification-header-page-linked'; } public function getHeaderMessage() { @@ -95,7 +152,7 @@ class EchoPageLinkedPresentationModel extends EchoEventPresentationModel { if ( isset( $extra['link-from-namespace'] ) && isset( $extra['link-from-title'] ) ) { $title = Title::makeTitleSafe( $extra['link-from-namespace'], $extra['link-from-title'] ); if ( $title ) { - return $title->getArticleId(); + return $title->getArticleID(); } } return 0; @@ -103,7 +160,7 @@ class EchoPageLinkedPresentationModel extends EchoEventPresentationModel { private function getPageFrom() { if ( !$this->pageFrom ) { - $this->pageFrom = Title::newFromId( $this->getLinkedPageId( $this->event ) ); + $this->pageFrom = Title::newFromID( $this->getLinkedPageId( $this->event ) ); } return $this->pageFrom; } diff --git a/Echo/includes/formatters/PresentationModelSectionTrait.php b/Echo/includes/formatters/PresentationModelSection.php index 00f9e318..0a93bc53 100644 --- a/Echo/includes/formatters/PresentationModelSectionTrait.php +++ b/Echo/includes/formatters/PresentationModelSection.php @@ -1,16 +1,53 @@ <?php + +use MediaWiki\Revision\RevisionRecord; + /** - * Trait that adds section title handling to an EchoEventPresentationModel subclass. + * Component that represents a section of a page to be used from EchoEventPresentationModel subclass. */ -trait EchoPresentationModelSectionTrait { +class EchoPresentationModelSection { + + /** + * @var string|false|null + */ private $rawSectionTitle = null; + + /** + * @var string|false|null + */ private $parsedSectionTitle = null; /** + * @var EchoEvent + */ + private $event; + + /** + * @var User + */ + private $user; + + /** + * @var Language + */ + private $language; + + /** + * @param EchoEvent $event + * @param User $user + * @param Language $language + */ + public function __construct( EchoEvent $event, User $user, Language $language ) { + $this->event = $event; + $this->user = $user; + $this->language = $language; + } + + /** * Get the raw (unparsed) section title - * @return string Section title + * @return string|false Section title */ - protected function getRawSectionTitle() { + private function getRawSectionTitle() { if ( $this->rawSectionTitle !== null ) { return $this->rawSectionTitle; } @@ -20,7 +57,7 @@ trait EchoPresentationModelSectionTrait { return false; } // Check permissions - if ( !$this->userCan( Revision::DELETED_TEXT ) ) { + if ( !$this->event->userCan( RevisionRecord::DELETED_TEXT, $this->user ) ) { $this->rawSectionTitle = false; return false; } @@ -31,9 +68,9 @@ trait EchoPresentationModelSectionTrait { /** * Get the section title parsed to plain text - * @return string Section title (plain text) + * @return string|false Section title (plain text) */ - protected function getParsedSectionTitle() { + private function getParsedSectionTitle() { if ( $this->parsedSectionTitle !== null ) { return $this->parsedSectionTitle; } @@ -59,7 +96,7 @@ trait EchoPresentationModelSectionTrait { * be viewed in that case. * @return bool Whether there is a section */ - protected function hasSection() { + public function exists() { return (bool)$this->getRawSectionTitle(); } @@ -67,24 +104,28 @@ trait EchoPresentationModelSectionTrait { * Get a Title pointing to the section, if available. * @return Title */ - protected function getTitleWithSection() { + public function getTitleWithSection() { $title = $this->event->getTitle(); + if ( $title === null ) { + throw new MWException( 'Event #' . $this->event->getId() . ' with no title' ); + } $section = $this->getParsedSectionTitle(); - $fragment = substr( Parser::guessSectionNameFromStrippedText( $section ), 1 ); if ( $section ) { - $title = Title::makeTitle( - $title->getNamespace(), - $title->getDBkey(), - $fragment - ); + $fragment = substr( Parser::guessSectionNameFromStrippedText( $section ), 1 ); + $title = $title->createFragmentTarget( $fragment ); } return $title; } - protected function getTruncatedSectionTitle() { + /** + * Get truncated section title, according to user's language. + * You should only call this if EchoPresentationModelSection::exists returns true. + * @return string + */ + public function getTruncatedSectionTitle() { return $this->language->embedBidi( $this->language->truncateForVisual( $this->getParsedSectionTitle(), - self::SECTION_TITLE_RECOMMENDED_LENGTH, + EchoEventPresentationModel::SECTION_TITLE_RECOMMENDED_LENGTH, '...', false ) ); diff --git a/Echo/includes/formatters/RevertedPresentationModel.php b/Echo/includes/formatters/RevertedPresentationModel.php index 04d63b93..46ce1db0 100644 --- a/Echo/includes/formatters/RevertedPresentationModel.php +++ b/Echo/includes/formatters/RevertedPresentationModel.php @@ -1,5 +1,7 @@ <?php +use MediaWiki\Revision\RevisionRecord; + class EchoRevertedPresentationModel extends EchoEventPresentationModel { public function getIconType() { @@ -19,8 +21,11 @@ class EchoRevertedPresentationModel extends EchoEventPresentationModel { public function getBodyMessage() { $summary = $this->event->getExtraParam( 'summary' ); - if ( !$this->isAutomaticSummary( $summary ) && $this->userCan( Revision::DELETED_COMMENT ) ) { - $msg = $this->msg( "notification-body-{$this->type}" ); + if ( + !$this->isAutomaticSummary( $summary ) && + $this->userCan( RevisionRecord::DELETED_COMMENT ) + ) { + $msg = $this->msg( 'notification-body-reverted' ); $msg->plaintextParams( $this->formatSummary( $summary ) ); return $msg; } else { @@ -49,7 +54,7 @@ class EchoRevertedPresentationModel extends EchoEventPresentationModel { $title = $this->event->getTitle(); if ( $title->canHaveTalkPage() ) { $links[] = $this->getPageLink( - $title->getTalkPage(), null, true + $title->getTalkPage(), '', true ); } @@ -82,4 +87,8 @@ class EchoRevertedPresentationModel extends EchoEventPresentationModel { protected function getSubjectMessageKey() { return 'notification-reverted-email-subject2'; } + + public function getSubjectMessage() { + return parent::getSubjectMessage()->params( $this->getNumberOfEdits() ); + } } diff --git a/Echo/includes/formatters/SpecialNotificationsFormatter.php b/Echo/includes/formatters/SpecialNotificationsFormatter.php index ca57ba90..c5b4caf0 100644 --- a/Echo/includes/formatters/SpecialNotificationsFormatter.php +++ b/Echo/includes/formatters/SpecialNotificationsFormatter.php @@ -90,7 +90,10 @@ class SpecialNotificationsFormatter extends EchoEventFormatter { $html .= Xml::tags( 'div', [ 'class' => 'mw-echo-notification-footer' ], - implode( Html::element( 'span', [ 'class' => 'mw-echo-notification-footer-element' ], $pipe ), $footerItems ) + implode( + Html::element( 'span', [ 'class' => 'mw-echo-notification-footer-element' ], $pipe ), + $footerItems + ) ) . "\n"; // Wrap everything in mw-echo-content class diff --git a/Echo/includes/formatters/UserRightsPresentationModel.php b/Echo/includes/formatters/UserRightsPresentationModel.php index ba29a3e4..62213e67 100644 --- a/Echo/includes/formatters/UserRightsPresentationModel.php +++ b/Echo/includes/formatters/UserRightsPresentationModel.php @@ -65,7 +65,7 @@ class EchoUserRightsPresentationModel extends EchoEventPresentationModel { return false; } - private function getLocalizedGroupNames( $names ) { + private function getLocalizedGroupNames( array $names ) { return array_map( function ( $name ) { $msg = $this->msg( 'group-' . $name ); return $msg->isBlank() ? $name : $msg->text(); diff --git a/Echo/includes/formatters/WatchlistChangePresentationModel.php b/Echo/includes/formatters/WatchlistChangePresentationModel.php new file mode 100644 index 00000000..cf09e187 --- /dev/null +++ b/Echo/includes/formatters/WatchlistChangePresentationModel.php @@ -0,0 +1,103 @@ +<?php + +class EchoWatchlistChangePresentationModel extends EchoEventPresentationModel { + + public function getIconType() { + // @todo create an icon to use here + return 'placeholder'; + } + + public function getHeaderMessage() { + if ( $this->isMultiTypeBundle() ) { + $status = "changed"; + } else { + $status = $this->event->getExtraParam( 'status' ); + } + if ( $this->isMultiUserBundle() ) { + // Messages: notification-header-watchlist-multiuser-changed, + // notification-header-watchlist-multiuser-created + // notification-header-watchlist-multiuser-deleted + // notification-header-watchlist-multiuser-moved + // notification-header-watchlist-multiuser-restored + $msg = $this->msg( "notification-header-watchlist-multiuser-" . $status ); + } else { + // Messages: notification-header-watchlist-changed, + // notification-header-watchlist-created + // notification-header-watchlist-deleted + // notification-header-watchlist-moved + // notification-header-watchlist-restored + $msg = $this->getMessageWithAgent( "notification-header-watchlist-" . $status ); + } + $msg->params( $this->getTruncatedTitleText( $this->event->getTitle() ) ); + $msg->params( $this->getViewingUserForGender() ); + $msg->numParams( $this->getBundleCount() ); + return $msg; + } + + public function getPrimaryLink() { + if ( $this->isBundled() ) { + return [ + 'url' => $this->event->getTitle()->getLocalUrl(), + 'label' => $this->msg( 'notification-link-text-view-page' )->text() + ]; + } + return [ + 'url' => $this->getViewChangesUrl(), + 'label' => $this->msg( 'notification-link-text-view-changes', $this->getViewingUserForGender() ) + ->text(), + ]; + } + + public function getSecondaryLinks() { + if ( $this->isBundled() ) { + if ( $this->isMultiUserBundle() ) { + return []; + } else { + return [ $this->getAgentLink() ]; + } + } else { + $viewChangesLink = [ + 'url' => $this->getViewChangesUrl(), + 'label' => $this->msg( 'notification-link-text-view-changes', $this->getViewingUserForGender() ) + ->text(), + 'description' => '', + 'icon' => 'changes', + 'prioritized' => true, + ]; + return [ $this->getAgentLink(), $viewChangesLink ]; + } + } + + private function isMultiUserBundle() { + foreach ( $this->getBundledEvents() as $bundled ) { + if ( !$bundled->getAgent()->equals( $this->event->getAgent() ) ) { + return true; + } + } + return false; + } + + private function isMultiTypeBundle() { + foreach ( $this->getBundledEvents() as $bundled ) { + if ( $bundled->getExtraParam( 'status' ) !== $this->event->getExtraParam( 'status' ) ) { + return true; + } + } + return false; + } + + private function getViewChangesUrl() { + $revid = $this->event->getExtraParam( 'revid' ); + if ( $revid === 0 ) { + $url = SpecialPage::getTitleFor( 'Log' )->getLocalUrl( [ + 'logid' => $this->event->getExtraParam( 'logid' ) + ] ); + } else { + $url = $this->event->getTitle()->getLocalURL( [ + 'oldid' => 'prev', + 'diff' => $revid + ] ); + } + return $url; + } +} diff --git a/Echo/includes/gateway/UserNotificationGateway.php b/Echo/includes/gateway/UserNotificationGateway.php index 7ee23704..d8087715 100644 --- a/Echo/includes/gateway/UserNotificationGateway.php +++ b/Echo/includes/gateway/UserNotificationGateway.php @@ -30,14 +30,20 @@ class EchoUserNotificationGateway { * @var string */ protected static $notificationTable = 'echo_notification'; + /** + * @var Config + */ + private $config; /** * @param User $user * @param MWEchoDbFactory $dbFactory + * @param Config $config */ - public function __construct( User $user, MWEchoDbFactory $dbFactory ) { + public function __construct( User $user, MWEchoDbFactory $dbFactory, Config $config ) { $this->user = $user; $this->dbFactory = $dbFactory; + $this->config = $config; } public function getDB( $dbSource ) { @@ -51,7 +57,6 @@ class EchoUserNotificationGateway { * failure, or when there was nothing to update */ public function markRead( array $eventIDs ) { - global $wgUpdateRowsPerQuery; if ( !$eventIDs ) { return false; } @@ -62,7 +67,9 @@ class EchoUserNotificationGateway { } $success = true; - foreach ( array_chunk( $eventIDs, $wgUpdateRowsPerQuery ) as $batch ) { + foreach ( + array_chunk( $eventIDs, $this->config->get( 'UpdateRowsPerQuery' ) ) as $batch + ) { $success = $dbw->update( self::$notificationTable, [ 'notification_read_timestamp' => $dbw->timestamp( wfTimestampNow() ) ], @@ -85,7 +92,6 @@ class EchoUserNotificationGateway { * failure, or when there was nothing to update */ public function markUnRead( array $eventIDs ) { - global $wgUpdateRowsPerQuery; if ( !$eventIDs ) { return false; } @@ -96,7 +102,9 @@ class EchoUserNotificationGateway { } $success = true; - foreach ( array_chunk( $eventIDs, $wgUpdateRowsPerQuery ) as $batch ) { + foreach ( + array_chunk( $eventIDs, $this->config->get( 'UpdateRowsPerQuery' ) ) as $batch + ) { $success = $dbw->update( self::$notificationTable, [ 'notification_read_timestamp' => null ], @@ -122,7 +130,7 @@ class EchoUserNotificationGateway { return false; } - return $dbw->update( + $dbw->update( self::$notificationTable, [ 'notification_read_timestamp' => $dbw->timestamp( wfTimestampNow() ) ], [ @@ -131,16 +139,22 @@ class EchoUserNotificationGateway { ], __METHOD__ ); + + return true; } /** * Get notification count for the types specified - * @param int $dbSource use master or slave storage to pull count + * @param int $dbSource use master or replica storage to pull count * @param array $eventTypesToLoad event types to retrieve * @param int $cap Max count * @return int */ - public function getCappedNotificationCount( $dbSource, array $eventTypesToLoad = [], $cap = MWEchoNotifUser::MAX_BADGE_COUNT ) { + public function getCappedNotificationCount( + $dbSource, + array $eventTypesToLoad = [], + $cap = MWEchoNotifUser::MAX_BADGE_COUNT + ) { // double check if ( !in_array( $dbSource, [ DB_REPLICA, DB_MASTER ] ) ) { $dbSource = DB_REPLICA; @@ -156,7 +170,7 @@ class EchoUserNotificationGateway { self::$notificationTable, self::$eventTable ], - [ '1' ], + '1', [ 'notification_user' => $this->user->getId(), 'notification_read_timestamp' => null, diff --git a/Echo/includes/iterator/NotRecursiveIterator.php b/Echo/includes/iterator/NotRecursiveIterator.php index 2bc002bf..39b67ae1 100644 --- a/Echo/includes/iterator/NotRecursiveIterator.php +++ b/Echo/includes/iterator/NotRecursiveIterator.php @@ -13,6 +13,7 @@ class EchoNotRecursiveIterator extends EchoIteratorDecorator implements Recursiv } public function getChildren() { + // @phan-suppress-next-line PhanTypeMismatchReturn Never called return null; } } diff --git a/Echo/includes/jobs/NotificationDeleteJob.php b/Echo/includes/jobs/NotificationDeleteJob.php index 5efd410f..d1ec0c0a 100644 --- a/Echo/includes/jobs/NotificationDeleteJob.php +++ b/Echo/includes/jobs/NotificationDeleteJob.php @@ -14,18 +14,11 @@ class EchoNotificationDeleteJob extends Job { /** - * UserIds to be processed - * @var int[] - */ - protected $userIds = []; - - /** * @param Title $title * @param array $params */ - public function __construct( $title, $params ) { + public function __construct( Title $title, array $params ) { parent::__construct( __CLASS__, $title, $params ); - $this->userIds = $params['userIds']; } /** @@ -34,10 +27,10 @@ class EchoNotificationDeleteJob extends Job { */ public function run() { global $wgEchoMaxUpdateCount; - if ( count( $this->userIds ) > 1 ) { + if ( count( $this->params['userIds'] ) > 1 ) { // If there are multiple users, queue a single job for each one $jobs = []; - foreach ( $this->userIds as $userId ) { + foreach ( $this->params['userIds'] as $userId ) { $jobs[] = new EchoNotificationDeleteJob( $this->title, [ 'userIds' => [ $userId ] ] ); } JobQueueGroup::singleton()->push( $jobs ); @@ -46,10 +39,9 @@ class EchoNotificationDeleteJob extends Job { } $notifMapper = new EchoNotificationMapper(); - $targetMapper = new EchoTargetPageMapper(); // Back-compat for older jobs which used array( $userId => $userId ); - $userIds = array_values( $this->userIds ); + $userIds = array_values( $this->params['userIds'] ); $userId = $userIds[0]; $user = User::newFromId( $userId ); $notif = $notifMapper->fetchByUserOffset( $user, $wgEchoMaxUpdateCount ); diff --git a/Echo/includes/jobs/NotificationJob.php b/Echo/includes/jobs/NotificationJob.php index 00282c00..06fe226b 100644 --- a/Echo/includes/jobs/NotificationJob.php +++ b/Echo/includes/jobs/NotificationJob.php @@ -1,16 +1,14 @@ <?php class EchoNotificationJob extends Job { - private $eventId; - function __construct( $title, $params ) { + public function __construct( Title $title, array $params ) { parent::__construct( 'EchoNotificationJob', $title, $params ); - $this->eventId = $params['eventId']; } - function run() { - MWEchoDbFactory::newFromDefault()->waitForSlaves(); - $event = EchoEvent::newFromID( $this->eventId ); + public function run() { + $eventMapper = new EchoEventMapper(); + $event = $eventMapper->fetchById( $this->params['eventId'], true ); EchoNotificationController::notify( $event, false ); return true; diff --git a/Echo/includes/mapper/AbstractMapper.php b/Echo/includes/mapper/AbstractMapper.php index d59bd8f1..ed6e140e 100644 --- a/Echo/includes/mapper/AbstractMapper.php +++ b/Echo/includes/mapper/AbstractMapper.php @@ -69,11 +69,8 @@ abstract class EchoAbstractMapper { if ( !method_exists( $this, $method ) ) { throw new MWException( $method . ' does not exist in ' . get_class( $this ) ); } - if ( isset( $this->listeners[$method] ) ) { - return $this->listeners[$method]; - } else { - return []; - } + + return $this->listeners[$method] ?? []; } } diff --git a/Echo/includes/mapper/EventMapper.php b/Echo/includes/mapper/EventMapper.php index 3ac84dc9..d1e58919 100644 --- a/Echo/includes/mapper/EventMapper.php +++ b/Echo/includes/mapper/EventMapper.php @@ -19,20 +19,16 @@ class EchoEventMapper extends EchoAbstractMapper { $row = $event->toDbArray(); - $res = $dbw->insert( 'echo_event', $row, __METHOD__ ); + $dbw->insert( 'echo_event', $row, __METHOD__ ); - if ( $res ) { - $id = $dbw->insertId(); - - $listeners = $this->getMethodListeners( __FUNCTION__ ); - foreach ( $listeners as $listener ) { - $dbw->onTransactionIdle( $listener ); - } + $id = $dbw->insertId(); - return $id; - } else { - return false; + $listeners = $this->getMethodListeners( __FUNCTION__ ); + foreach ( $listeners as $listener ) { + $dbw->onTransactionCommitOrIdle( $listener, __METHOD__ ); } + + return $id; } /** @@ -46,7 +42,7 @@ class EchoEventMapper extends EchoAbstractMapper { public function fetchById( $id, $fromMaster = false ) { $db = $fromMaster ? $this->dbFactory->getEchoDb( DB_MASTER ) : $this->dbFactory->getEchoDb( DB_REPLICA ); - $row = $db->selectRow( 'echo_event', '*', [ 'event_id' => $id ], __METHOD__ ); + $row = $db->selectRow( 'echo_event', EchoEvent::selectFields(), [ 'event_id' => $id ], __METHOD__ ); // If the row was not found, fall back on the master if it makes sense to do so if ( !$row && !$fromMaster && $this->dbFactory->canRetryMaster() ) { @@ -63,12 +59,12 @@ class EchoEventMapper extends EchoAbstractMapper { * @param bool $deleted * @return bool|IResultWrapper */ - public function toggleDeleted( $eventIds, $deleted ) { + public function toggleDeleted( array $eventIds, $deleted ) { $dbw = $this->dbFactory->getEchoDb( DB_MASTER ); $selectDeleted = $deleted ? 0 : 1; $setDeleted = $deleted ? 1 : 0; - $res = $dbw->update( + $dbw->update( 'echo_event', [ 'event_deleted' => $setDeleted, @@ -80,7 +76,7 @@ class EchoEventMapper extends EchoAbstractMapper { __METHOD__ ); - return $res; + return true; } /** @@ -91,14 +87,35 @@ class EchoEventMapper extends EchoAbstractMapper { */ public function fetchByPage( $pageId ) { $events = []; - + $seenEventIds = []; $dbr = $this->dbFactory->getEchoDb( DB_REPLICA ); + + // From echo_event + $res = $dbr->select( + [ 'echo_event' ], + EchoEvent::selectFields(), + [ 'event_page_id' => $pageId ], + __METHOD__ + ); + if ( $res ) { + foreach ( $res as $row ) { + $event = EchoEvent::newFromRow( $row ); + $events[] = $event; + $seenEventIds[] = $event->getId(); + } + } + + // From echo_target_page + $conds = [ 'etp_page' => $pageId ]; + if ( $seenEventIds ) { + // Some events have both a title and target page(s). + // Skip the events that were already found in the echo_event table (the query above). + $conds[] = 'event_id NOT IN ( ' . $dbr->makeList( $seenEventIds ) . ' )'; + } $res = $dbr->select( [ 'echo_event', 'echo_target_page' ], - [ '*' ], - [ - 'etp_page' => $pageId - ], + EchoEvent::selectFields(), + $conds, __METHOD__, [ 'GROUP BY' => 'etp_event' ], [ 'echo_target_page' => [ 'INNER JOIN', 'event_id=etp_event' ] ] @@ -138,10 +155,11 @@ class EchoEventMapper extends EchoAbstractMapper { */ public function fetchUnreadByUserAndPage( User $user, $pageId ) { $dbr = $this->dbFactory->getEchoDb( DB_REPLICA ); + $fields = array_merge( EchoEvent::selectFields(), [ 'notification_timestamp' ] ); $res = $dbr->select( [ 'echo_event', 'echo_notification', 'echo_target_page' ], - '*', + $fields, [ 'event_deleted' => 0, 'notification_user' => $user->getId(), @@ -149,7 +167,7 @@ class EchoEventMapper extends EchoAbstractMapper { 'etp_page' => $pageId, ], __METHOD__, - null, + [], [ 'echo_target_page' => [ 'INNER JOIN', 'etp_event=event_id' ], 'echo_notification' => [ 'INNER JOIN', [ 'notification_event=event_id' ] ], @@ -164,4 +182,59 @@ class EchoEventMapper extends EchoAbstractMapper { return $data; } + /** + * Find out which of the given event IDs are orphaned, and delete them. + * + * An event is orphaned if it is not referred to by any rows in the echo_notification or + * echo_email_batch tables. If $ignoreUserId is set, rows for that user are not considered when + * determining orphanhood; if $ignoreUserTable is set, this only applies to that table. + * Use this when you've just recently deleted rows related to this user on the master, so that + * this function won't refuse to delete recently-orphaned events because it still sees the + * recently-deleted rows on the replica. + * + * @param array $eventIds Event IDs to check to see if they have become orphaned + * @param int|null $ignoreUserId Allow events to be deleted if the only referring rows + * have this user ID + * @param string|null $ignoreUserTable Restrict $ignoreUserId to this table only + * ('echo_notification' or 'echo_email_batch') + */ + public function deleteOrphanedEvents( array $eventIds, $ignoreUserId = null, $ignoreUserTable = null ) { + $dbw = $this->dbFactory->getEchoDb( DB_MASTER ); + $dbr = $this->dbFactory->getEchoDb( DB_REPLICA ); + + $notifJoinConds = []; + $emailJoinConds = []; + if ( $ignoreUserId !== null ) { + if ( $ignoreUserTable === null || $ignoreUserTable === 'echo_notification' ) { + $notifJoinConds[] = 'notification_user != ' . $dbr->addQuotes( $ignoreUserId ); + } + if ( $ignoreUserTable === null || $ignoreUserTable === 'echo_email_batch' ) { + $emailJoinConds[] = 'eeb_user_id != ' . $dbr->addQuotes( $ignoreUserId ); + } + } + $orphanedEventIds = $dbr->selectFieldValues( + [ 'echo_event', 'echo_notification', 'echo_email_batch' ], + 'event_id', + [ + 'event_id' => $eventIds, + 'notification_timestamp' => null, + 'eeb_user_id' => null + ], + __METHOD__, + [], + [ + 'echo_notification' => [ 'LEFT JOIN', array_merge( [ + 'notification_event=event_id' + ], $notifJoinConds ) ], + 'echo_email_batch' => [ 'LEFT JOIN', array_merge( [ + 'eeb_event_id=event_id' + ], $emailJoinConds ) ] + ] + ); + if ( $orphanedEventIds ) { + $dbw->delete( 'echo_event', [ 'event_id' => $orphanedEventIds ], __METHOD__ ); + $dbw->delete( 'echo_target_page', [ 'etp_event' => $orphanedEventIds ], __METHOD__ ); + } + } + } diff --git a/Echo/includes/mapper/NotificationMapper.php b/Echo/includes/mapper/NotificationMapper.php index 3e9dc2f6..4e572a78 100644 --- a/Echo/includes/mapper/NotificationMapper.php +++ b/Echo/includes/mapper/NotificationMapper.php @@ -23,31 +23,11 @@ class EchoNotificationMapper extends EchoAbstractMapper { $dbw, __METHOD__, function ( IDatabase $dbw, $fname ) use ( $row, $listeners ) { - // Reset the bundle base if this notification has a display hash - // the result of this operation is that all previous notifications - // with the same display hash are set to non-base because new record - // is becoming the bundle base - if ( $row['notification_bundle_display_hash'] ) { - $dbw->update( - 'echo_notification', - [ 'notification_bundle_base' => 0 ], - [ - 'notification_user' => $row['notification_user'], - 'notification_bundle_display_hash' => - $row['notification_bundle_display_hash'], - 'notification_bundle_base' => 1 - ], - $fname - ); - } - $row['notification_timestamp'] = $dbw->timestamp( $row['notification_timestamp'] ); - $res = $dbw->insert( 'echo_notification', $row, $fname ); - if ( $res ) { - foreach ( $listeners as $listener ) { - $dbw->onTransactionIdle( $listener ); - } + $dbw->insert( 'echo_notification', $row, $fname ); + foreach ( $listeners as $listener ) { + $dbw->onTransactionCommitOrIdle( $listener, $fname ); } } ) ); @@ -55,7 +35,7 @@ class EchoNotificationMapper extends EchoAbstractMapper { /** * Extract the offset used for notification list - * @param string $continue String Used for offset + * @param string|null $continue String Used for offset * @throws MWException * @return int[] */ @@ -84,11 +64,11 @@ class EchoNotificationMapper extends EchoAbstractMapper { * which is done via a deleteJob * @param User $user * @param int $limit - * @param string $continue Used for offset + * @param string|null $continue Used for offset * @param string[] $eventTypes * @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 + * @param int $dbSource Use master or replica database * @return EchoNotification[] */ public function fetchUnreadByUser( @@ -99,7 +79,7 @@ class EchoNotificationMapper extends EchoAbstractMapper { array $titles = null, $dbSource = DB_REPLICA ) { - $conds['notification_read_timestamp'] = null; + $conds = [ 'notification_read_timestamp' => null ]; if ( $titles ) { $conds['event_page_id'] = $this->getIdsForTitles( $titles ); if ( !$conds['event_page_id'] ) { @@ -117,11 +97,11 @@ class EchoNotificationMapper extends EchoAbstractMapper { * which is done via a deleteJob * @param User $user * @param int $limit - * @param string $continue Used for offset + * @param string|null $continue Used for offset * @param string[] $eventTypes * @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 + * @param int $dbSource Use master or replica database * @return EchoNotification[] */ public function fetchReadByUser( @@ -147,7 +127,7 @@ class EchoNotificationMapper extends EchoAbstractMapper { * * @param User $user the user to get notifications for * @param int $limit The maximum number of notifications to return - * @param string $continue Used for offset + * @param string|null $continue Used for offset * @param array $eventTypes Event types to load * @param array $excludeEventIds Event id's to exclude. * @param Title[]|null $titles If set, only return notifications for these pages. @@ -193,10 +173,10 @@ class EchoNotificationMapper extends EchoAbstractMapper { /** * @param User $user the user to get notifications for * @param int $limit The maximum number of notifications to return - * @param string $continue Used for offset + * @param string|null $continue Used for offset * @param array $eventTypes Event types to load * @param array $conds Additional query conditions. - * @param int $dbSource Use master or slave database + * @param int $dbSource Use master or replica database * @return EchoNotification[] */ protected function fetchByUserInternal( @@ -220,7 +200,7 @@ class EchoNotificationMapper extends EchoAbstractMapper { // the notification volume is in a reasonable amount for such case. The other option // is to denormalize notification table with event_type and lookup index. $conds = [ - 'notification_user' => $user->getID(), + 'notification_user' => $user->getId(), 'event_type' => $eventTypes, 'event_deleted' => 0, ] + $conds; @@ -237,7 +217,7 @@ class EchoNotificationMapper extends EchoAbstractMapper { $res = $dbr->select( [ 'echo_notification', 'echo_event' ], - '*', + EchoNotification::selectFields(), $conds, __METHOD__, [ @@ -263,7 +243,7 @@ class EchoNotificationMapper extends EchoAbstractMapper { $allNotifications[] = $notification; } } catch ( Exception $e ) { - $id = isset( $row->event_id ) ? $row->event_id : 'unknown event'; + $id = $row->event_id ?? 'unknown event'; wfDebugLog( 'Echo', __METHOD__ . ": Failed initializing event: $id" ); MWExceptionHandler::logException( $e ); } @@ -278,47 +258,18 @@ 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|false - */ - public function fetchNewestByUserBundleHash( User $user, $bundleHash ) { - $dbr = $this->dbFactory->getEchoDb( DB_REPLICA ); - - $row = $dbr->selectRow( - [ 'echo_notification', 'echo_event' ], - [ '*' ], - [ - 'notification_user' => $user->getId(), - 'notification_bundle_hash' => $bundleHash - ], - __METHOD__, - [ 'ORDER BY' => 'notification_timestamp DESC', 'LIMIT' => 1 ], - [ - 'echo_event' => [ 'LEFT JOIN', 'notification_event=event_id' ], - ] - ); - if ( $row ) { - return EchoNotification::newFromRow( $row ); - } else { - return false; - } - } - - /** * Fetch EchoNotifications by user and event IDs. * * @param User $user * @param int[] $eventIds * @return EchoNotification[]|false */ - public function fetchByUserEvents( User $user, $eventIds ) { + public function fetchByUserEvents( User $user, array $eventIds ) { $dbr = $this->dbFactory->getEchoDb( DB_REPLICA ); $result = $dbr->select( [ 'echo_notification', 'echo_event' ], - '*', + EchoNotification::selectFields(), [ 'notification_user' => $user->getId(), 'notification_event' => $eventIds @@ -352,7 +303,7 @@ class EchoNotificationMapper extends EchoAbstractMapper { $dbr = $this->dbFactory->getEchoDb( DB_REPLICA ); $row = $dbr->selectRow( [ 'echo_notification', 'echo_event' ], - [ '*' ], + EchoNotification::selectFields(), [ 'notification_user' => $user->getId(), 'event_deleted' => 0, @@ -383,38 +334,47 @@ class EchoNotificationMapper extends EchoAbstractMapper { */ public function deleteByUserEventOffset( User $user, $eventId ) { global $wgUpdateRowsPerQuery; + $eventMapper = new EchoEventMapper( $this->dbFactory ); $userId = $user->getId(); $dbw = $this->dbFactory->getEchoDb( DB_MASTER ); + $dbr = $this->dbFactory->getEchoDb( DB_REPLICA ); $lbFactory = MediaWikiServices::getInstance()->getDBLoadBalancerFactory(); $ticket = $lbFactory->getEmptyTransactionTicket( __METHOD__ ); - $domainId = $dbw->getDomainId(); + $domainId = $dbw->getDomainID(); - $idsToDelete = $dbw->selectFieldValues( + $iterator = new BatchRowIterator( + $dbr, 'echo_notification', 'notification_event', - [ - 'notification_user' => $userId, - 'notification_event < ' . (int)$eventId - ], - __METHOD__ + $wgUpdateRowsPerQuery ); - if ( !$idsToDelete ) { - return true; - } - $success = true; - foreach ( array_chunk( $idsToDelete, $wgUpdateRowsPerQuery ) as $batch ) { - $success = $dbw->delete( + $iterator->addConditions( [ + 'notification_user' => $userId, + 'notification_event < ' . (int)$eventId + ] ); + + foreach ( $iterator as $batch ) { + $eventIds = []; + foreach ( $batch as $row ) { + $eventIds[] = $row->notification_event; + } + $dbw->delete( 'echo_notification', [ 'notification_user' => $userId, - 'notification_event' => $batch, + 'notification_event' => $eventIds, ], __METHOD__ - ) && $success; + ); + + // Find out which events are now orphaned, i.e. no longer referenced in echo_notifications + // (besides the rows we just deleted) or in echo_email_batch, and delete them + $eventMapper->deleteOrphanedEvents( $eventIds, $userId, 'echo_notification' ); + $lbFactory->commitAndWaitForReplication( __METHOD__, $ticket, [ 'domain' => $domainId ] ); } - return $success; + return true; } /** @@ -423,7 +383,7 @@ class EchoNotificationMapper extends EchoAbstractMapper { * @param int[] $eventIds * @return int[]|false */ - public function fetchUsersWithNotificationsForEvents( $eventIds ) { + public function fetchUsersWithNotificationsForEvents( array $eventIds ) { $dbr = $this->dbFactory->getEchoDb( DB_REPLICA ); $res = $dbr->select( diff --git a/Echo/includes/mapper/TargetPageMapper.php b/Echo/includes/mapper/TargetPageMapper.php index 33dd7bc5..91699722 100644 --- a/Echo/includes/mapper/TargetPageMapper.php +++ b/Echo/includes/mapper/TargetPageMapper.php @@ -25,8 +25,8 @@ class EchoTargetPageMapper extends EchoAbstractMapper { $row = $targetPage->toDbArray(); - $res = $dbw->insert( 'echo_target_page', $row, __METHOD__ ); + $dbw->insert( 'echo_target_page', $row, __METHOD__ ); - return $res; + return true; } } diff --git a/Echo/includes/model/Event.php b/Echo/includes/model/Event.php index 79a9b14b..87dcffae 100644 --- a/Echo/includes/model/Event.php +++ b/Echo/includes/model/Event.php @@ -1,6 +1,8 @@ <?php use MediaWiki\Logger\LoggerFactory; +use MediaWiki\MediaWikiServices; +use MediaWiki\Revision\RevisionRecord; /** * Immutable class to represent an event. @@ -8,41 +10,46 @@ use MediaWiki\Logger\LoggerFactory; */ class EchoEvent extends EchoAbstractEntity implements Bundleable { + /** @var string|null */ protected $type = null; + /** @var int|null|false */ protected $id = null; + /** @var string|null */ protected $variant = null; /** - * @var User + * @var User|null */ protected $agent = null; /** * Loaded dynamically on request * - * @var Title + * @var Title|null */ protected $title = null; + /** @var int|null */ protected $pageId = null; /** * Loaded dynamically on request * - * @var Revision + * @var RevisionRecord|null */ protected $revision = null; + /** @var array */ protected $extra = []; /** * Notification timestamp - * @var string + * @var string|null */ protected $timestamp = null; /** * A hash used to bundle a set of events, events that can be * grouped for a user has the same bundle hash - * @var string + * @var string|null */ protected $bundleHash; @@ -71,7 +78,7 @@ class EchoEvent extends EchoAbstractEntity implements Bundleable { } ## Save the id and timestamp - function __sleep() { + public function __sleep() { if ( !$this->id ) { throw new MWException( "Unable to serialize an uninitialized EchoEvent" ); } @@ -79,11 +86,11 @@ class EchoEvent extends EchoAbstractEntity implements Bundleable { return [ 'id', 'timestamp' ]; } - function __wakeup() { + public function __wakeup() { $this->loadFromID( $this->id ); } - function __toString() { + public function __toString() { return "EchoEvent(id={$this->id}; type={$this->type})"; } @@ -150,7 +157,7 @@ class EchoEvent extends EchoAbstractEntity implements Bundleable { $obj->setTitle( $obj->title ); } - if ( $obj->agent && ! $obj->agent instanceof User ) { + if ( $obj->agent && !$obj->agent instanceof User ) { throw new InvalidArgumentException( "Invalid user parameter" ); } @@ -195,7 +202,7 @@ class EchoEvent extends EchoAbstractEntity implements Bundleable { if ( $this->pageId ) { $data['event_page_id'] = $this->pageId; } elseif ( $this->title ) { - $pageId = $this->title->getArticleId(); + $pageId = $this->title->getArticleID(); // Don't need any special handling for title with no id // as they are already stored in extra data array if ( $pageId ) { @@ -272,7 +279,7 @@ class EchoEvent extends EchoAbstractEntity implements Bundleable { * @return bool Whether loading was successful */ public function loadFromRow( $row ) { - $this->id = $row->event_id; + $this->id = (int)$row->event_id; $this->type = $row->event_type; // If the object is loaded from __sleep(), timestamp should be already set @@ -301,14 +308,15 @@ class EchoEvent extends EchoAbstractEntity implements Bundleable { $this->deleted = $row->event_deleted; if ( $row->event_agent_id ) { - $this->agent = User::newFromID( $row->event_agent_id ); + $this->agent = User::newFromId( $row->event_agent_id ); } elseif ( $row->event_agent_ip ) { + // @phan-suppress-next-line PhanTypeMismatchArgument Not null here $this->agent = User::newFromName( $row->event_agent_ip, false ); } // Lazy load the title from getTitle() so that we can do a batch-load if ( - isset( $this->extra['page_title'], $this->extra['page_namespace'] ) + isset( $this->extra['page_title'] ) && isset( $this->extra['page_namespace'] ) && !$row->event_page_id ) { $this->title = Title::makeTitleSafe( @@ -318,6 +326,7 @@ class EchoEvent extends EchoAbstractEntity implements Bundleable { } if ( $row->event_page_id ) { $titleCache = EchoTitleLocalCache::create(); + // @phan-suppress-next-line PhanTypeMismatchArgument Not null here $titleCache->add( $row->event_page_id ); } if ( isset( $this->extra['revid'] ) && $this->extra['revid'] ) { @@ -386,12 +395,12 @@ class EchoEvent extends EchoAbstractEntity implements Bundleable { /** * Serialize the extra data for event - * @return string + * @return string|null */ public function serializeExtra() { if ( is_array( $this->extra ) || is_object( $this->extra ) ) { $extra = serialize( $this->extra ); - } elseif ( is_null( $this->extra ) ) { + } elseif ( $this->extra === null ) { $extra = null; } else { $extra = serialize( [ $this->extra ] ); @@ -401,58 +410,40 @@ class EchoEvent extends EchoAbstractEntity implements Bundleable { } /** - * Check if the event is dismissable for the given distribution type - * - * @param string $distribution notification distribution web/email - * @return bool - */ - public function isDismissable( $distribution ) { - global $wgEchoNotificationCategories; - - $category = $this->getCategory(); - if ( isset( $wgEchoNotificationCategories[$category]['no-dismiss'] ) ) { - $noDismiss = $wgEchoNotificationCategories[$category]['no-dismiss']; - } else { - $noDismiss = []; - } - if ( !in_array( $distribution, $noDismiss ) && !in_array( 'all', $noDismiss ) ) { - return true; - } else { - return false; - } - } - - /** * Determine if the current user is allowed to view a particular * field of this revision, if it's marked as deleted. When no * revision is attached always returns true. * - * @param int $field One of Revision::DELETED_TEXT, - * Revision::DELETED_COMMENT, - * Revision::DELETED_USER + * @param int $field One of RevisionRecord::DELETED_TEXT, + * RevisionRecord::DELETED_COMMENT, + * RevisionRecord::DELETED_USER * @param User $user User object to check * @return bool */ public function userCan( $field, User $user ) { $revision = $this->getRevision(); // User is handled specially - if ( $field === Revision::DELETED_USER ) { + if ( $field === RevisionRecord::DELETED_USER ) { $agent = $this->getAgent(); if ( !$agent ) { // No user associated, so they can see it. return true; - } elseif ( $revision - && $agent->getName() === $revision->getUserText( Revision::RAW ) + } + + if ( + $revision + && $agent->getName() === $revision->getUser( RevisionRecord::RAW )->getName() ) { // If the agent and the revision user are the same, use rev_deleted - return $revision->userCan( $field, $user ); + return $revision->audienceCan( $field, RevisionRecord::FOR_THIS_USER, $user ); } else { // Use User::isHidden() - return $user->isAllowedAny( 'viewsuppressed', 'hideuser' ) || !$agent->isHidden(); + $permManager = MediaWikiServices::getInstance()->getPermissionManager(); + return $permManager->userHasAnyRight( $user, 'viewsuppressed', 'hideuser' ) || !$agent->isHidden(); } } elseif ( $revision ) { // A revision is set, use rev_deleted - return $revision->userCan( $field, $user ); + return $revision->audienceCan( $field, RevisionRecord::FOR_THIS_USER, $user ); } else { // Not a user, and there is no associated revision, so the user can see it return true; @@ -460,6 +451,7 @@ class EchoEvent extends EchoAbstractEntity implements Bundleable { } ## Accessors + /** * @return int */ @@ -496,7 +488,7 @@ class EchoEvent extends EchoAbstractEntity implements Bundleable { } public function getExtraParam( $key, $default = null ) { - return isset( $this->extra[$key] ) ? $this->extra[$key] : $default; + return $this->extra[$key] ?? $default; } /** @@ -507,6 +499,21 @@ class EchoEvent extends EchoAbstractEntity implements Bundleable { } /** + * Check whether this event allows its agent to be notified. + * + * Notifying the agent is only allowed if the event's type allows it, or if the event extra + * explicity specifies 'notifyAgent' => true. + * + * @return bool + */ + public function canNotifyAgent() { + global $wgEchoNotifications; + $allowedInConfig = $wgEchoNotifications[$this->getType()]['canNotifyAgent'] ?? false; + $allowedInExtra = $this->getExtraParam( 'notifyAgent', false ); + return $allowedInConfig || $allowedInExtra; + } + + /** * @param bool $fromMaster * @return null|Title */ @@ -523,7 +530,7 @@ class EchoEvent extends EchoAbstractEntity implements Bundleable { $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'] ) ) { + } elseif ( isset( $this->extra['page_title'] ) && isset( $this->extra['page_namespace'] ) ) { $this->title = Title::makeTitleSafe( $this->extra['page_namespace'], $this->extra['page_title'] @@ -535,12 +542,14 @@ class EchoEvent extends EchoAbstractEntity implements Bundleable { } /** - * @return Revision|null + * @return RevisionRecord|null */ public function getRevision() { if ( $this->revision ) { return $this->revision; - } elseif ( isset( $this->extra['revid'] ) ) { + } + + if ( isset( $this->extra['revid'] ) ) { $revisionCache = EchoRevisionLocalCache::create(); $revision = $revisionCache->get( $this->extra['revid'] ); if ( $revision ) { @@ -548,7 +557,8 @@ class EchoEvent extends EchoAbstractEntity implements Bundleable { return $this->revision; } - $this->revision = Revision::newFromId( $this->extra['revid'] ); + $store = MediaWikiServices::getInstance()->getRevisionStore(); + $this->revision = $store->getRevisionById( $this->extra['revid'] ); return $this->revision; } @@ -618,44 +628,36 @@ class EchoEvent extends EchoAbstractEntity implements Bundleable { /** * Get the message key of the primary or secondary link for a notification type. * - * @param String $rank 'primary' or 'secondary' - * @return String i18n message key + * @param string $rank 'primary' or 'secondary' + * @return string i18n message key */ public function getLinkMessage( $rank ) { global $wgEchoNotifications; $type = $this->getType(); - if ( isset( $wgEchoNotifications[$type][$rank . '-link']['message'] ) ) { - return $wgEchoNotifications[$type][$rank . '-link']['message']; - } - - return ''; + return $wgEchoNotifications[$type][$rank . '-link']['message'] ?? ''; } /** * Get the link destination of the primary or secondary link for a notification type. * - * @param String $rank 'primary' or 'secondary' - * @return String The link destination, e.g. 'agent' + * @param string $rank 'primary' or 'secondary' + * @return string The link destination, e.g. 'agent' */ public function getLinkDestination( $rank ) { global $wgEchoNotifications; $type = $this->getType(); - if ( isset( $wgEchoNotifications[$type][$rank . '-link']['destination'] ) ) { - return $wgEchoNotifications[$type][$rank . '-link']['destination']; - } - - return ''; + return $wgEchoNotifications[$type][$rank . '-link']['destination'] ?? ''; } /** - * @return string + * @return string|null */ public function getBundleHash() { return $this->bundleHash; } /** - * @param string $hash + * @param string|null $hash */ public function setBundleHash( $hash ) { $this->bundleHash = $hash; @@ -668,7 +670,7 @@ class EchoEvent extends EchoAbstractEntity implements Bundleable { return $this->deleted === 1; } - public function setBundledEvents( $events ) { + public function setBundledEvents( array $events ) { $this->bundledEvents = $events; } @@ -693,7 +695,7 @@ class EchoEvent extends EchoAbstractEntity implements Bundleable { /** * @inheritDoc */ - public function setBundledElements( $bundleables ) { + public function setBundledElements( array $bundleables ) { $this->setBundledEvents( $bundleables ); } @@ -703,4 +705,23 @@ class EchoEvent extends EchoAbstractEntity implements Bundleable { public function getSortingKey() { return $this->getTimestamp(); } + + /** + * Return the list of fields that should be selected to create + * a new event with EchoEvent::newFromRow + * @return string[] + */ + public static function selectFields() { + return [ + 'event_id', + 'event_type', + 'event_variant', + 'event_agent_id', + 'event_agent_ip', + 'event_extra', + 'event_page_id', + 'event_deleted', + ]; + } + } diff --git a/Echo/includes/model/Notification.php b/Echo/includes/model/Notification.php index 282b3386..5ace7154 100644 --- a/Echo/includes/model/Notification.php +++ b/Echo/includes/model/Notification.php @@ -1,5 +1,7 @@ <?php +use MediaWiki\MediaWikiServices; + class EchoNotification extends EchoAbstractEntity implements Bundleable { /** @@ -31,25 +33,12 @@ class EchoNotification extends EchoAbstractEntity implements Bundleable { protected $readTimestamp; /** - * Determine whether this is a bundle base. Default is 1, - * which means it's a bundle base - * @var int - */ - protected $bundleBase = 1; - - /** * The hash used to determine if a set of event could be bundled * @var string */ protected $bundleHash = ''; /** - * The hash used to bundle events to display - * @var string - */ - protected $bundleDisplayHash = ''; - - /** * @var EchoNotification[] */ protected $bundledNotifications; @@ -115,27 +104,17 @@ class EchoNotification extends EchoAbstractEntity implements Bundleable { Hooks::run( 'EchoGetBundleRules', [ $this->event, &$bundleKey ] ); } + // @phan-suppress-next-line PhanImpossibleCondition May be set by hook if ( $bundleKey ) { $hash = md5( $bundleKey ); $this->bundleHash = $hash; - $lastNotif = $notifMapper->fetchNewestByUserBundleHash( $this->user, $hash ); - - // Use a new display hash if: - // 1. there was no last bundle notification - // 2. last bundle notification with the same hash was read - if ( $lastNotif && !$lastNotif->getReadTimestamp() ) { - $this->bundleDisplayHash = $lastNotif->getBundleDisplayHash(); - } else { - $this->bundleDisplayHash = md5( $bundleKey . '-display-hash-' . wfTimestampNow() ); - } } $notifUser = MWEchoNotifUser::newFromUser( $this->user ); - $section = $this->event->getSection(); // Add listener to refresh notification count upon insert $notifMapper->attachListener( 'insert', 'refresh-notif-count', - function () use ( $notifUser, $section ) { + function () use ( $notifUser ) { $notifUser->resetNotificationCount(); } ); @@ -143,7 +122,9 @@ class EchoNotification extends EchoAbstractEntity implements Bundleable { $notifMapper->insert( $this ); if ( $this->event->getCategory() === 'edit-user-talk' ) { - $this->user->setNewtalk( true ); + MediaWikiServices::getInstance() + ->getTalkPageNotificationManager() + ->setUserHasNewMessages( $this->user ); } Hooks::run( 'EchoCreateNotificationComplete', [ $this ] ); } @@ -154,7 +135,7 @@ class EchoNotification extends EchoAbstractEntity implements Bundleable { * @param EchoTargetPage[]|null $targetPages An array of EchoTargetPage instances, or null if not loaded. * @return EchoNotification|false False if failed to load/unserialize */ - public static function newFromRow( $row, $targetPages = null ) { + public static function newFromRow( $row, array $targetPages = null ) { $notification = new EchoNotification(); if ( property_exists( $row, 'event_type' ) ) { @@ -176,9 +157,7 @@ class EchoNotification extends EchoAbstractEntity implements Bundleable { if ( $row->notification_read_timestamp ) { $notification->readTimestamp = wfTimestamp( TS_MW, $row->notification_read_timestamp ); } - $notification->bundleBase = $row->notification_bundle_base; $notification->bundleHash = $row->notification_bundle_hash; - $notification->bundleDisplayHash = $row->notification_bundle_display_hash; return $notification; } @@ -193,9 +172,7 @@ class EchoNotification extends EchoAbstractEntity implements Bundleable { 'notification_user' => $this->user->getId(), 'notification_timestamp' => $this->timestamp, 'notification_read_timestamp' => $this->readTimestamp, - 'notification_bundle_base' => $this->bundleBase, 'notification_bundle_hash' => $this->bundleHash, - 'notification_bundle_display_hash' => $this->bundleDisplayHash ]; } @@ -237,14 +214,6 @@ class EchoNotification extends EchoAbstractEntity implements Bundleable { /** * Getter method - * @return int Notification bundle base - */ - public function getBundleBase() { - return $this->bundleBase; - } - - /** - * Getter method * @return string|null Notification bundle hash */ public function getBundleHash() { @@ -252,14 +221,6 @@ class EchoNotification extends EchoAbstractEntity implements Bundleable { } /** - * Getter method - * @return string|null Notification bundle display hash - */ - public function getBundleDisplayHash() { - return $this->bundleDisplayHash; - } - - /** * Getter method. Returns an array of EchoTargetPages, or null if they have * not been loaded. * @@ -269,7 +230,7 @@ class EchoNotification extends EchoAbstractEntity implements Bundleable { return $this->targetPages; } - public function setBundledNotifications( $notifications ) { + public function setBundledNotifications( array $notifications ) { $this->bundledNotifications = $notifications; } @@ -294,7 +255,7 @@ class EchoNotification extends EchoAbstractEntity implements Bundleable { /** * @inheritDoc */ - public function setBundledElements( $bundleables ) { + public function setBundledElements( array $bundleables ) { $this->setBundledNotifications( $bundleables ); } @@ -304,4 +265,19 @@ class EchoNotification extends EchoAbstractEntity implements Bundleable { public function getSortingKey() { return ( $this->isRead() ? '0' : '1' ) . '_' . $this->getTimestamp(); } + + /** + * Return the list of fields that should be selected to create + * a new event with EchoNotification::newFromRow + * @return string[] + */ + public static function selectFields() { + return array_merge( EchoEvent::selectFields(), [ + 'notification_event', + 'notification_user', + 'notification_timestamp', + 'notification_read_timestamp', + 'notification_bundle_hash', + ] ); + } } diff --git a/Echo/includes/model/TargetPage.php b/Echo/includes/model/TargetPage.php index e9ea4d2b..4134f039 100644 --- a/Echo/includes/model/TargetPage.php +++ b/Echo/includes/model/TargetPage.php @@ -92,7 +92,7 @@ class EchoTargetPage extends EchoAbstractEntity { */ public function getTitle() { if ( $this->title === false ) { - $this->title = Title::newFromId( $this->pageId ); + $this->title = Title::newFromID( $this->pageId ); } return $this->title; diff --git a/Echo/includes/ooui/LabelIconWidget.php b/Echo/includes/ooui/LabelIconWidget.php index 6cceec2d..940b1721 100644 --- a/Echo/includes/ooui/LabelIconWidget.php +++ b/Echo/includes/ooui/LabelIconWidget.php @@ -4,8 +4,8 @@ namespace EchoOOUI; use OOUI\IconElement; use OOUI\LabelElement; -use OOUI\TitledElement; use OOUI\Tag; +use OOUI\TitledElement; use OOUI\Widget; /** @@ -25,20 +25,20 @@ class LabelIconWidget extends Widget { public function __construct( $config ) { parent::__construct( $config ); - $this->tableRow = new Tag( 'div' ); - $this->tableRow->setAttributes( [ + $tableRow = new Tag( 'div' ); + $tableRow->setAttributes( [ 'class' => 'oo-ui-labelIconWidget-row', ] ); - $this->icon = new Tag( 'div' ); - $this->label = new Tag( 'div' ); + $icon = new Tag( 'div' ); + $label = new Tag( 'div' ); - $this->initializeIconElement( array_merge( $config, [ 'iconElement' => $this->icon ] ) ); - $this->initializeLabelElement( array_merge( $config, [ 'labelElement' => $this->label ] ) ); + $this->initializeIconElement( array_merge( $config, [ 'iconElement' => $icon ] ) ); + $this->initializeLabelElement( array_merge( $config, [ 'labelElement' => $label ] ) ); $this->initializeTitledElement( $config ); $this->addClasses( [ 'oo-ui-labelIconWidget' ] ); - $this->tableRow->appendContent( $this->icon, $this->label ); - $this->appendContent( $this->tableRow ); + $tableRow->appendContent( $icon, $label ); + $this->appendContent( $tableRow ); } } diff --git a/Echo/includes/schemaUpdate.php b/Echo/includes/schemaUpdate.php index 4bc58daa..4ca3a8ae 100644 --- a/Echo/includes/schemaUpdate.php +++ b/Echo/includes/schemaUpdate.php @@ -55,7 +55,7 @@ class EchoSuppressionRowUpdateGenerator implements RowUpdateGenerator { $update = []; $title = $this->newTitleFromNsAndText( $row->event_page_namespace, $row->event_page_title ); if ( $title !== null ) { - $pageId = $title->getArticleId(); + $pageId = $title->getArticleID(); if ( $pageId ) { // If the title has a proper id from the database, store it $update['event_page_id'] = $pageId; @@ -85,13 +85,13 @@ class EchoSuppressionRowUpdateGenerator implements RowUpdateGenerator { protected function updatePageLinkedExtraData( $row, array $update ) { $extra = $this->extra( $row, $update ); - if ( isset( $extra['link-from-title'], $extra['link-from-namespace'] ) ) { + if ( isset( $extra['link-from-title'] ) && isset( $extra['link-from-namespace'] ) ) { $title = $this->newTitleFromNsAndText( $extra['link-from-namespace'], $extra['link-from-title'] ); unset( $extra['link-from-title'], $extra['link-from-namespace'] ); // Link from page is always from a content page, if null or no article id it was // somehow invalid - if ( $title !== null && $title->getArticleId() ) { - $extra['link-from-page-id'] = $title->getArticleId(); + if ( $title !== null && $title->getArticleID() ) { + $extra['link-from-page-id'] = $title->getArticleID(); } $update['event_extra'] = serialize( $extra ); @@ -112,7 +112,9 @@ class EchoSuppressionRowUpdateGenerator implements RowUpdateGenerator { protected function extra( $row, array $update = [] ) { if ( isset( $update['event_extra'] ) ) { return unserialize( $update['event_extra'] ); - } elseif ( $row->event_extra ) { + } + + if ( $row->event_extra ) { return unserialize( $row->event_extra ); } diff --git a/Echo/includes/special/NotificationPager.php b/Echo/includes/special/NotificationPager.php index 9aa85cd8..2dfc1238 100644 --- a/Echo/includes/special/NotificationPager.php +++ b/Echo/includes/special/NotificationPager.php @@ -6,25 +6,28 @@ * It paginates on notification_event for a specific user, only for the enabled event types. */ class NotificationPager extends ReverseChronologicalPager { - public function __construct() { + /** + * @param IContextSource $context + */ + public function __construct( IContextSource $context ) { $dbFactory = MWEchoDbFactory::newFromDefault(); $this->mDb = $dbFactory->getEchoDb( DB_REPLICA ); - parent::__construct(); + parent::__construct( $context ); } - function formatRow( $row ) { - $msg = "This pager does not support row formatting. Use 'getNotifications()' to get a list of EchoNotification objects."; - throw new Exception( $msg ); + public function formatRow( $row ) { + throw new Exception( "This pager does not support row formatting. " . + "Use 'getNotifications()' to get a list of EchoNotification objects." ); } - function getQueryInfo() { + public function getQueryInfo() { $attributeManager = EchoAttributeManager::newFromGlobalVars(); $eventTypes = $attributeManager->getUserEnabledEvents( $this->getUser(), 'web' ); return [ 'tables' => [ 'echo_notification', 'echo_event' ], - 'fields' => '*', + 'fields' => EchoNotification::selectFields(), 'conds' => [ 'notification_user' => $this->getUser()->getId(), 'event_type' => $eventTypes, @@ -63,7 +66,7 @@ class NotificationPager extends ReverseChronologicalPager { return $notifications; } - function getIndexField() { + public function getIndexField() { return 'notification_event'; } } diff --git a/Echo/includes/special/SpecialDisplayNotificationsConfiguration.php b/Echo/includes/special/SpecialDisplayNotificationsConfiguration.php index f5d71e24..c644c043 100644 --- a/Echo/includes/special/SpecialDisplayNotificationsConfiguration.php +++ b/Echo/includes/special/SpecialDisplayNotificationsConfiguration.php @@ -84,7 +84,8 @@ class SpecialDisplayNotificationsConfiguration extends UnlistedSpecialPage { ) )->parse(); - $this->categoryNames[$internalCategoryName] = $formattedFriendlyCategoryName . ' ' . $formattedInternalCategoryName; + $this->categoryNames[$internalCategoryName] = $formattedFriendlyCategoryName . ' ' + . $formattedInternalCategoryName; } $this->flippedCategoryNames = array_flip( $this->categoryNames ); @@ -128,7 +129,13 @@ class SpecialDisplayNotificationsConfiguration extends UnlistedSpecialPage { * @param array $columnLabelMapping Associative array mapping label to tag * @param array $value Array consisting of strings in the format '$columnTag-$rowTag' */ - protected function outputCheckMatrix( $id, $legendMsgKey, array $rowLabelMapping, array $columnLabelMapping, array $value ) { + protected function outputCheckMatrix( + $id, + $legendMsgKey, + array $rowLabelMapping, + array $columnLabelMapping, + array $value + ) { $form = new HTMLForm( [ $id => [ @@ -174,7 +181,8 @@ class SpecialDisplayNotificationsConfiguration extends UnlistedSpecialPage { Html::rawElement( 'li', [], - $this->categoryNames[$categoryName] . $this->msg( 'colon-separator' )->escaped() . ' ' . $implodedTypes + $this->categoryNames[$categoryName] . $this->msg( 'colon-separator' )->escaped() . ' ' + . $implodedTypes ) ); } @@ -199,7 +207,8 @@ 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' )->escaped()] = $section; + $flippedSectionNames[$this->msg( 'echo-notification-' . $msgSection . '-text-only' )->escaped()] + = $section; foreach ( $types as $type ) { $bySectionValue[] = "$section-$type"; } @@ -218,8 +227,6 @@ class SpecialDisplayNotificationsConfiguration extends UnlistedSpecialPage { * Output which notify types are available for each category */ protected function outputAvailability() { - global $wgEchoNotifications; - $this->getOutput()->addHTML( Html::element( 'h2', [ 'id' => 'mw-echo-displaynotificationsconfiguration-available-notification-methods' ], @@ -243,27 +250,6 @@ class SpecialDisplayNotificationsConfiguration extends UnlistedSpecialPage { $this->flippedNotifyTypes, $byCategoryValue ); - - $byTypeValue = []; - - $specialNotificationTypes = array_keys( array_filter( $wgEchoNotifications, function ( $val ) { - return isset( $val['notify-type-availability'] ); - } ) ); - foreach ( $specialNotificationTypes as $notificationType ) { - $allowedNotifyTypes = $this->notificationController->getEventNotifyTypes( $notificationType ); - foreach ( $allowedNotifyTypes as $notifyType ) { - $byTypeValue[] = "$notifyType-$notificationType"; - } - } - - // 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 - ); } /** diff --git a/Echo/includes/special/SpecialNotifications.php b/Echo/includes/special/SpecialNotifications.php index aae26e4b..3c775628 100644 --- a/Echo/includes/special/SpecialNotifications.php +++ b/Echo/includes/special/SpecialNotifications.php @@ -12,8 +12,7 @@ class SpecialNotifications extends SpecialPage { } /** - * @param string $par - * @suppress SecurityCheck-DoubleEscaped Different members of $notifArray being conflated + * @param string|null $par */ public function execute( $par ) { $this->setHeaders(); @@ -24,7 +23,6 @@ class SpecialNotifications extends SpecialPage { $this->addHelpLink( 'Help:Notifications/Special:Notifications' ); $out->addJsConfigVars( 'wgNotificationsSpecialPageLinks', [ - 'help' => '//www.mediawiki.org/wiki/Special:MyLanguage/Help:Notifications/Special:Notifications', 'preferences' => SpecialPage::getTitleFor( 'Preferences' )->getLinkURL() . '#mw-prefsection-echo', ] ); @@ -41,7 +39,7 @@ class SpecialNotifications extends SpecialPage { $pager = new NotificationPager( $this->getContext() ); $pager->setOffset( $this->getRequest()->getVal( 'offset' ) ); - $pager->setLimit( $this->getRequest()->getVal( 'limit', self::DISPLAY_NUM ) ); + $pager->setLimit( $this->getRequest()->getInt( 'limit', self::DISPLAY_NUM ) ); $notifications = $pager->getNotifications(); $noJSDiv = new OOUI\Tag(); @@ -124,6 +122,7 @@ class SpecialNotifications extends SpecialPage { // Ensure there are some unread notifications if ( $anyUnread ) { $markReadSpecialPage = new SpecialNotificationsMarkRead(); + $markReadSpecialPage->setContext( $this->getContext() ); $markAllAsReadText = $this->msg( 'echo-mark-all-as-read' )->text(); $markAllAsReadLabelIcon = new EchoOOUI\LabelIconWidget( [ @@ -151,8 +150,8 @@ class SpecialNotifications extends SpecialPage { $notices->addClasses( [ 'mw-echo-special-notifications' ] ); $markReadSpecialPage = new SpecialNotificationsMarkRead(); + $markReadSpecialPage->setContext( $this->getContext() ); foreach ( $notifArray as $section => $data ) { - // Heading $heading = ( new OOUI\Tag( 'li' ) )->addClasses( [ 'mw-echo-date-section' ] ); $dateTitle = new OOUI\LabelWidget( [ @@ -232,8 +231,8 @@ class SpecialNotifications extends SpecialPage { $out->addModuleStyles( [ 'ext.echo.styles.notifications', 'ext.echo.styles.special', - // We already load badgeicons in the BeforePageDisplay hook, but not for minerva - 'ext.echo.badgeicons' + // We already load OOUI icons in the BeforePageDisplay hook, but not for minerva + 'oojs-ui.styles.icons-alerts' ] ); // Log visit diff --git a/Echo/includes/special/SpecialNotificationsMarkRead.php b/Echo/includes/special/SpecialNotificationsMarkRead.php index 1fb873a8..bac4d8a8 100644 --- a/Echo/includes/special/SpecialNotificationsMarkRead.php +++ b/Echo/includes/special/SpecialNotificationsMarkRead.php @@ -103,7 +103,9 @@ class SpecialNotificationsMarkRead extends FormSpecialPage { // manually. $form->suppressDefaultSubmit(); - $form->setAction( $this->getPageTitle()->getLocalURL() ); + $pageTitle = $this->getPageTitle(); + $form->setTitle( $pageTitle ); + $form->setAction( $pageTitle->getLocalURL() ); $form->addButton( [ 'name' => 'submit', @@ -146,6 +148,6 @@ class SpecialNotificationsMarkRead extends FormSpecialPage { public function onSuccess() { $page = SpecialPage::getTitleFor( 'Notifications' ); - $this->getOutput()->redirect( $page->getFullUrl() ); + $this->getOutput()->redirect( $page->getFullURL() ); } } diff --git a/Echo/jsduck.external.js b/Echo/jsduck.external.js index 14eb9e8f..6ceaf7b1 100644 --- a/Echo/jsduck.external.js +++ b/Echo/jsduck.external.js @@ -1,48 +1,57 @@ /** * Source: <https://api.jquery.com/> + * * @class jQuery */ /** * Source: <https://api.jquery.com/jQuery.ajax/> + * * @method ajax * @static - * @return {jqXHR} + * @return {jQuery.jqXHR} */ /** * Source: <https://api.jquery.com/Types/#Event> + * * @class jQuery.Event */ /** * Source: <https://api.jquery.com/Types/#Promise> + * * @class jQuery.Promise */ /** * Source: <https://api.jquery.com/jQuery.Deferred/> + * * @class jQuery.Deferred * @mixins jQuery.Promise */ /** * Source: <https://api.jquery.com/Types/#jqXHR> + * * @class jQuery.jqXHR - * @alternateClassName jqXHR + * @mixins jQuery.Promise */ /** * Source: <https://doc.wikimedia.org/mediawiki-core/master/js/#!/api/mw.Api> + * * @class mw.Api */ /** * Source: <https://doc.wikimedia.org/mediawiki-core/master/js/#!/api/mw.Message + * * @class mw.Message */ /** * Source: <https://doc.wikimedia.org/mediawiki-core/master/js/#!/api/mw.Title> + * * @class mw.Title */ diff --git a/Echo/maintenance/backfillReadBundles.php b/Echo/maintenance/backfillReadBundles.php deleted file mode 100644 index fa7067d6..00000000 --- a/Echo/maintenance/backfillReadBundles.php +++ /dev/null @@ -1,80 +0,0 @@ -<?php - -$IP = getenv( 'MW_INSTALL_PATH' ); -if ( $IP === false ) { - $IP = __DIR__ . '/../../..'; -} -require_once "$IP/maintenance/Maintenance.php"; - -class BackfillReadBundles extends Maintenance { - public function __construct() { - parent::__construct(); - - $this->mDescription = "Backfill echo_notification.notification_read_timestamp for bundles"; - - $this->setBatchSize( 300 ); - - $this->requireExtension( 'Echo' ); - } - - public function execute() { - $dbFactory = MWEchoDbFactory::newFromDefault(); - $dbw = $dbFactory->getEchoDb( DB_MASTER ); - $dbr = $dbFactory->getEchoDb( DB_REPLICA ); - $iterator = new BatchRowIterator( - $dbr, - 'echo_notification', - [ 'notification_user', 'notification_event' ], - $this->mBatchSize - ); - $iterator->setFetchColumns( [ 'notification_bundle_display_hash', 'notification_read_timestamp' ] ); - - $unreadNonBase = $dbr->selectSQLText( - 'echo_notification', - 'notification_bundle_display_hash', - [ - 'notification_bundle_base' => 0, - 'notification_read_timestamp IS NULL', - "notification_bundle_display_hash <> ''", - ] - ); - - $iterator->addConditions( [ - 'notification_bundle_base' => 1, - 'notification_read_timestamp IS NOT NULL', - "notification_bundle_display_hash IN ( $unreadNonBase )", - ] ); - - $processed = 0; - foreach ( $iterator as $batch ) { - foreach ( $batch as $row ) { - $userId = $row->notification_user; - $displayHash = $row->notification_bundle_display_hash; - $readTimestamp = $row->notification_read_timestamp; - - $result = $dbw->update( - 'echo_notification', - [ 'notification_read_timestamp' => $readTimestamp ], - [ - 'notification_user' => $userId, - 'notification_bundle_display_hash' => $displayHash, - 'notification_bundle_base' => 0, - 'notification_read_timestamp IS NULL', - ] - ); - - if ( !$result ) { - $this->output( "Failed to set read_timestamp on notifications with bundle_display_hash: $displayHash\n" ); - } - - $processed += $dbw->affectedRows(); - } - - $this->output( "Updated $processed notifications.\n" ); - $dbFactory->waitForSlaves(); - } - } -} - -$maintClass = "BackfillReadBundles"; -require_once RUN_MAINTENANCE_IF_MAIN; diff --git a/Echo/maintenance/backfillUnreadWikis.php b/Echo/maintenance/backfillUnreadWikis.php index 432dc053..dd8044a7 100644 --- a/Echo/maintenance/backfillUnreadWikis.php +++ b/Echo/maintenance/backfillUnreadWikis.php @@ -10,7 +10,7 @@ class BackfillUnreadWikis extends Maintenance { public function __construct() { parent::__construct(); - $this->mDescription = "Backfill echo_unread_wikis table"; + $this->addDescription( "Backfill echo_unread_wikis table" ); $this->addOption( 'rebuild', 'Only recompute already-existing rows' ); $this->setBatchSize( 300 ); $this->requireExtension( 'Echo' ); @@ -22,7 +22,12 @@ class BackfillUnreadWikis extends Maintenance { $rebuild = $this->hasOption( 'rebuild' ); if ( $rebuild ) { - $iterator = new BatchRowIterator( $dbFactory->getSharedDb( DB_REPLICA ), '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 { $userQuery = User::getQueryInfo(); @@ -54,7 +59,9 @@ class BackfillUnreadWikis extends Maintenance { $msgCount = $notifUser->getNotificationCount( EchoAttributeManager::MESSAGE, false ); $msgUnread = $notifUser->getLastUnreadNotificationTime( EchoAttributeManager::MESSAGE, false ); - if ( ( $alertCount !== 0 && $alertUnread === false ) || ( $msgCount !== 0 && $msgUnread === false ) ) { + if ( ( $alertCount !== 0 && $alertUnread === false ) || + ( $msgCount !== 0 && $msgUnread === false ) + ) { // If there are alerts, there should be an alert timestamp (same for messages). // Otherwise, there is a race condition between the two values, indicating there's already @@ -68,10 +75,10 @@ class BackfillUnreadWikis extends Maintenance { $processed += count( $batch ); $this->output( "Updated $processed users.\n" ); - $dbFactory->waitForSlaves(); + $dbFactory->waitForReplicas(); } } } -$maintClass = "BackfillUnreadWikis"; +$maintClass = BackfillUnreadWikis::class; require_once RUN_MAINTENANCE_IF_MAIN; diff --git a/Echo/maintenance/generateSampleNotifications.php b/Echo/maintenance/generateSampleNotifications.php index 42081ca1..ef3a711e 100644 --- a/Echo/maintenance/generateSampleNotifications.php +++ b/Echo/maintenance/generateSampleNotifications.php @@ -1,7 +1,10 @@ <?php - // phpcs:disable Generic.Files.LineLength -- Long html test examples +// @phan-file-suppress PhanUndeclaredClassMethod, PhanUndeclaredClassConstant Other extensions used for testing purposes +use MediaWiki\MediaWikiServices; +use MediaWiki\Revision\RevisionRecord; +use MediaWiki\Revision\SlotRecord; use Wikibase\Client\Hooks\EchoNotificationsHandlers; $IP = getenv( 'MW_INSTALL_PATH' ); @@ -34,7 +37,7 @@ class GenerateSampleNotifications extends Maintenance { public function __construct() { parent::__construct(); - $this->mDescription = "Generate sample notifications"; + $this->addDescription( "Generate sample notifications" ); $this->addOption( 'force', @@ -147,13 +150,12 @@ class GenerateSampleNotifications extends Maintenance { * @return int Timestamp for the operation */ private function getTimestamp( $getEpoch = false ) { - $startTime = $this->getOption( 'timestamp' ) ? - $this->getOption( 'timestamp' ) : time(); + $startTime = $this->getOption( 'timestamp' ) ?: time(); // Incrementally decrease X minutes from start time $timestamp = strtotime( '-' . $this->timestampCounter++ . ' minute', $startTime ); - return $getEpoch ? $timestamp : wfTimestamp( TS_MW, $timestamp ); + return $getEpoch ? $timestamp : (int)wfTimestamp( TS_UNIX, $timestamp ); } /** @@ -161,6 +163,7 @@ class GenerateSampleNotifications extends Maintenance { * to note the time of the new generated event. * * @param string $output New output message with timestamp + * @return string */ private function addTimestampToOutput( $output ) { if ( $this->getOption( 'timestamp' ) ) { @@ -211,12 +214,12 @@ class GenerateSampleNotifications extends Maintenance { private function addToPageContent( Title $title, User $agent, $contentText ) { $page = WikiPage::factory( $title ); $previousContent = ""; - $page->loadPageData( 'fromdbmaster' ); - $revision = $page->getRevision(); + $page->loadPageData( WikiPage::READ_LATEST ); + $revision = $page->getRevisionRecord(); if ( $revision ) { - $content = $revision->getContent( Revision::FOR_PUBLIC ); + $content = $revision->getContent( SlotRecord::MAIN, RevisionRecord::FOR_PUBLIC ); if ( $content instanceof WikitextContent ) { - $previousContent = $content->getNativeData(); + $previousContent = $content->getText(); } } $status = $page->doEditContent( @@ -228,10 +231,10 @@ class GenerateSampleNotifications extends Maintenance { ); if ( !$status->isGood() ) { - $this->error( "Failed to edit {$title->getPrefixedText()}: {$status->getMessage()}" ); + $this->error( "Failed to edit {$title->getPrefixedText()}: {$status->getMessage()->text()}" ); } - return $status->getValue()['revision']; + return $status->getValue()['revision-record']; } private function generateMention( User $user, User $agent, User $otherUser, Title $title ) { @@ -272,24 +275,31 @@ class GenerateSampleNotifications extends Maintenance { $this->output( "{$agent->getName()} is reverting {$user->getName()}'s edit on {$moai->getPrefixedText()}\n" ); $this->addToPageContent( $moai, $agent, "\ncreating a good revision here\n" ); $this->addToPageContent( $moai, $user, "\nadding a line here\n" ); - $content = $page->getUndoContent( $page->getRevision(), $page->getRevision()->getPrevious() ); - $status = $page->doEditContent( $content, 'undo', 0, false, $agent, null, [], $page->getRevision()->getId() ); - if ( !$status->isGood() ) { - $this->error( "Failed to undo {$moai->getPrefixedText()}: {$status->getMessage()}" ); - } - // rollback - $moai2 = Title::newFromText( 'Moai2' ); - $page = WikiPage::factory( $moai2 ); - $this->output( "{$agent->getName()} is rolling back {$user->getName()}'s edits on {$moai2->getPrefixedText()}\n" ); - $this->addToPageContent( $moai2, $agent, "\ncreating a good revision here\n" ); - $this->addToPageContent( $moai2, $user, "\nadding a line here\n" ); - $this->addToPageContent( $moai2, $user, "\nadding a line here\n" ); - $details = []; - $token = $agent->getEditToken( 'rollback', null ); - $errors = $page->doRollback( $user->getName(), 'generating reverted notification', $token, false, $details, $agent ); - if ( $errors ) { - $this->error( serialize( $errors ) ); + $undoRev = $page->getRevisionRecord(); + $previous = MediaWikiServices::getInstance() + ->getRevisionLookup() + ->getPreviousRevision( $undoRev ); + + $handler = MediaWikiServices::getInstance() + ->getContentHandlerFactory() + ->getContentHandler( + $undoRev->getSlot( SlotRecord::MAIN, RevisionRecord::RAW ) + ->getModel() + ); + $undoContent = $undoRev->getContent( SlotRecord::MAIN ); + $previousContent = $previous->getContent( SlotRecord::MAIN ); + + $content = $handler->getUndoContent( + $undoContent, + $undoContent, + $previousContent, + true // undoIsLatest + ); + + $status = $page->doEditContent( $content, 'undo', 0, false, $agent, null, [], $undoRev->getId() ); + if ( !$status->isGood() ) { + $this->error( "Failed to undo {$moai->getPrefixedText()}: {$status->getMessage()->text()}" ); } } @@ -298,9 +308,6 @@ class GenerateSampleNotifications extends Maintenance { EchoEvent::create( [ 'type' => 'welcome', 'agent' => $user, - 'extra' => [ - 'notifyAgent' => true - ], 'timestamp' => $this->getTimestamp(), ] ); } @@ -332,7 +339,7 @@ class GenerateSampleNotifications extends Maintenance { [ 'type' => 'user-rights', 'extra' => [ - 'user' => $user->getID(), + 'user' => $user->getId(), 'add' => $add, 'remove' => $remove, 'reason' => 'This is the [[reason]] for changing your user rights.', @@ -395,7 +402,7 @@ class GenerateSampleNotifications extends Maintenance { } private function generateOpenStackManager( User $user, User $agent ) { - if ( !class_exists( 'OpenStackManagerHooks' ) ) { + if ( !ExtensionRegistry::getInstance()->isLoaded( 'OpenStackManager' ) ) { return; } @@ -424,7 +431,7 @@ class GenerateSampleNotifications extends Maintenance { ] ); } - private function shouldGenerate( $type, $types ) { + private function shouldGenerate( $type, array $types ) { return array_search( $type, $types ) !== false; } @@ -439,33 +446,34 @@ class GenerateSampleNotifications extends Maintenance { } // make an edit, thank it once $title = $this->generateNewPageTitle(); - $revision = $this->addToPageContent( $title, $user, "an awesome edit! ~~~~" ); + $revisionRecord = $this->addToPageContent( $title, $user, "an awesome edit! ~~~~" ); EchoEvent::create( [ 'type' => 'edit-thank', 'title' => $title, 'extra' => [ - 'revid' => $revision->getId(), + 'revid' => $revisionRecord->getId(), 'thanked-user-id' => $user->getId(), 'source' => 'generateSampleNotifications.php', ], 'agent' => $agent, 'timestamp' => $this->getTimestamp(), ] ); - $output = $this->addTimestampToOutput( "{$agent->getName()} is thanking {$user->getName()} for edit {$revision->getId()} on {$title->getPrefixedText()}" ); + $output = $this->addTimestampToOutput( "{$agent->getName()} is thanking {$user->getName()} for edit {$revisionRecord->getId()} on {$title->getPrefixedText()}" ); $this->output( "$output\n" ); } + private function generateMultipleEditThanks( User $user, User $agent, User $otherUser ) { if ( !ExtensionRegistry::getInstance()->isLoaded( 'Thanks' ) ) { return; } // make an edit, thank it twice $title = $this->generateNewPageTitle(); - $revision = $this->addToPageContent( $title, $user, "an even better edit! ~~~~" ); + $revisionRecord = $this->addToPageContent( $title, $user, "an even better edit! ~~~~" ); EchoEvent::create( [ 'type' => 'edit-thank', 'title' => $title, 'extra' => [ - 'revid' => $revision->getId(), + 'revid' => $revisionRecord->getId(), 'thanked-user-id' => $user->getId(), 'source' => 'generateSampleNotifications.php', ], @@ -476,20 +484,20 @@ class GenerateSampleNotifications extends Maintenance { 'type' => 'edit-thank', 'title' => $title, 'extra' => [ - 'revid' => $revision->getId(), + 'revid' => $revisionRecord->getId(), 'thanked-user-id' => $user->getId(), 'source' => 'generateSampleNotifications.php', ], 'agent' => $otherUser, 'timestamp' => $this->getTimestamp(), ] ); - $output = $this->addTimestampToOutput( "{$agent->getName()} and {$otherUser->getName()} are thanking {$user->getName()} for edit {$revision->getId()} on {$title->getPrefixedText()}" ); + $output = $this->addTimestampToOutput( "{$agent->getName()} and {$otherUser->getName()} are thanking {$user->getName()} for edit {$revisionRecord->getId()} on {$title->getPrefixedText()}" ); $this->output( "$output\n" ); } private function generateEducationProgram( User $user, User $agent ) { - if ( !class_exists( 'EducationProgram\Extension' ) ) { - $this->output( 'class EducationProgram\Extension not found' ); + if ( !ExtensionRegistry::getInstance()->isLoaded( 'EducationProgram' ) ) { + $this->output( "Skipping EducationProgram. Extension not installed.\n" ); return; } @@ -526,7 +534,8 @@ class GenerateSampleNotifications extends Maintenance { private function generateWikibase( User $user, User $agent ) { if ( !class_exists( EchoNotificationsHandlers::class ) ) { - $this->output( 'Class EchoNotificationsHandlers not found' ); + // should use !ExtensionRegistry::getInstance()->isLoaded( 'Wikibase' ) when possible + $this->output( "Skipping Wikibase. Extension not installed.\n" ); return; } @@ -542,7 +551,8 @@ class GenerateSampleNotifications extends Maintenance { 'title' => $title, 'extra' => [ 'url' => Title::newFromText( 'Item:Q1' )->getFullURL(), - 'repoSiteName' => 'Wikidata' + 'repoSiteName' => 'Wikidata', + 'entity' => 'Q1', ], 'agent' => $agent, 'timestamp' => $this->getTimestamp(), @@ -550,5 +560,5 @@ class GenerateSampleNotifications extends Maintenance { } } -$maintClass = "GenerateSampleNotifications"; +$maintClass = GenerateSampleNotifications::class; require_once RUN_MAINTENANCE_IF_MAIN; diff --git a/Echo/maintenance/processEchoEmailBatch.php b/Echo/maintenance/processEchoEmailBatch.php index 93b3e52a..401145a4 100644 --- a/Echo/maintenance/processEchoEmailBatch.php +++ b/Echo/maintenance/processEchoEmailBatch.php @@ -19,7 +19,7 @@ class ProcessEchoEmailBatch extends Maintenance { public function __construct() { parent::__construct(); - $this->mDescription = "Process email digest"; + $this->addDescription( "Process email digest" ); $this->addOption( "ignoreConfiguredSchedule", @@ -30,8 +30,7 @@ class ProcessEchoEmailBatch extends Maintenance { } public function execute() { - global $wgEchoCluster; - + $lbFactory = MWEchoDbFactory::newFromDefault(); $ignoreConfiguredSchedule = $this->getOption( "ignoreConfiguredSchedule", 0 ); $this->output( "Started processing... \n" ); @@ -58,9 +57,7 @@ class ProcessEchoEmailBatch extends Maintenance { } $count++; } - wfWaitForSlaves( false, false, $wgEchoCluster ); - // This is required since we are updating user properties in main wikidb - wfWaitForSlaves(); + $lbFactory->waitForReplicas(); // double check to make sure that the id is updated if ( !$updated ) { @@ -72,5 +69,5 @@ class ProcessEchoEmailBatch extends Maintenance { } } -$maintClass = "ProcessEchoEmailBatch"; +$maintClass = ProcessEchoEmailBatch::class; require_once RUN_MAINTENANCE_IF_MAIN; diff --git a/Echo/maintenance/recomputeNotifCounts.php b/Echo/maintenance/recomputeNotifCounts.php new file mode 100644 index 00000000..23560772 --- /dev/null +++ b/Echo/maintenance/recomputeNotifCounts.php @@ -0,0 +1,89 @@ +<?php +/** + * Recompute notification counts for all users. + * + * @ingroup Maintenance + */ +require_once getenv( 'MW_INSTALL_PATH' ) !== false + ? getenv( 'MW_INSTALL_PATH' ) . '/maintenance/Maintenance.php' + : __DIR__ . '/../../../maintenance/Maintenance.php'; + +/** + * Maintenance script that recomputes notification counts + * + * @ingroup Maintenance + */ +class RecomputeNotifCounts extends Maintenance { + + public function __construct() { + parent::__construct(); + + $this->addDescription( 'Recompute notification counts for all users.' ); + $this->addOption( 'user-ids', + 'Comma-separated list of users to recompute notification counts for', false, true ); + $this->addOption( 'notif-types', + 'Recompute counts for all users who have unread notifications of one of these types (comma-separated)', + false, true ); + + $this->setBatchSize( 500 ); + + $this->requireExtension( 'Echo' ); + } + + public function execute() { + $dbFactory = MWEchoDbFactory::newFromDefault(); + $dbwEcho = $dbFactory->getEchoDb( DB_MASTER ); + $dbrEcho = $dbFactory->getEchoDb( DB_REPLICA ); + $dbr = wfGetDB( DB_REPLICA ); + + $userIDs = $this->getOption( 'user-ids' ); + $userIDs = $userIDs ? explode( ',', $userIDs ) : null; + $notifTypes = $this->getOption( 'notif-types' ); + $notifTypes = $notifTypes ? explode( ',', $notifTypes ) : null; + + if ( $userIDs ) { + $userIterator = array_chunk( $userIDs, $this->getBatchSize() ); + } elseif ( $notifTypes ) { + $userIterator = new BatchRowIterator( + $dbrEcho, + [ 'echo_event', 'echo_notification' ], + 'notification_user', + $this->getBatchSize() + ); + $userIterator->addJoinConditions( [ + 'echo_notification' => [ 'INNER JOIN', 'notification_event=event_id' ] + ] ); + $userIterator->addConditions( [ + 'event_type' => $notifTypes, + 'notification_read_timestamp' => null + ] ); + $userIterator->addOptions( [ + 'GROUP BY' => 'notification_user' + ] ); + } else { + $userQuery = User::getQueryInfo(); + $userIterator = new BatchRowIterator( $dbr, $userQuery['tables'], 'user_id', $this->getBatchSize() ); + $userIterator->setFetchColumns( $userQuery['fields'] ); + $userIterator->addJoinConditions( $userQuery['joins'] ); + } + + $count = 0; + foreach ( $userIterator as $batch ) { + foreach ( $batch as $rowOrID ) { + if ( is_object( $rowOrID ) && isset( $rowOrID->user_id ) ) { + $user = User::newFromRow( $rowOrID ); + } else { + $user = User::newFromId( is_object( $rowOrID ) ? $rowOrID->notification_user : $rowOrID ); + } + $notifUser = MWEchoNotifUser::newFromUser( $user ); + $notifUser->resetNotificationCount(); + } + $count += count( $batch ); + $this->output( "$count users' counts recomputed.\n" ); + $dbFactory->waitForReplicas(); + } + } +} + +$maintClass = RecomputeNotifCounts::class; +require_once RUN_MAINTENANCE_IF_MAIN; diff --git a/Echo/maintenance/removeInvalidNotification.php b/Echo/maintenance/removeInvalidNotification.php index 04640f6c..43ab102f 100644 --- a/Echo/maintenance/removeInvalidNotification.php +++ b/Echo/maintenance/removeInvalidNotification.php @@ -4,6 +4,7 @@ * * @ingroup Maintenance */ + require_once getenv( 'MW_INSTALL_PATH' ) !== false ? getenv( 'MW_INSTALL_PATH' ) . '/maintenance/Maintenance.php' : __DIR__ . '/../../../maintenance/Maintenance.php'; @@ -19,21 +20,22 @@ class RemoveInvalidNotification extends Maintenance { protected $invalidEventType = [ 'article-linked' ]; public function __construct() { - $this->mDescription = "Removes invalid notifications from the database."; + parent::__construct(); + + $this->addDescription( "Removes invalid notifications from the database." ); $this->requireExtension( 'Echo' ); } public function execute() { + $lbFactory = MWEchoDbFactory::newFromDefault(); if ( !$this->invalidEventType ) { $this->output( "There is nothing to process\n" ); return; } - global $wgEchoCluster; - - $dbw = MWEchoDbFactory::getDB( DB_MASTER ); - $dbr = MWEchoDbFactory::getDB( DB_REPLICA ); + $dbw = $lbFactory->getEchoDb( DB_MASTER ); + $dbr = $lbFactory->getEchoDb( DB_REPLICA ); $count = $this->batchSize; @@ -55,7 +57,7 @@ class RemoveInvalidNotification extends Maintenance { $event[] = $row->event_id; } $count++; - }; + } if ( $event ) { $this->beginTransaction( $dbw, __METHOD__ ); @@ -74,7 +76,7 @@ class RemoveInvalidNotification extends Maintenance { $this->commitTransaction( $dbw, __METHOD__ ); $this->output( "processing " . count( $event ) . " invalid events\n" ); - wfWaitForSlaves( false, false, $wgEchoCluster ); + $lbFactory->waitForReplicas(); } // Cleanup is not necessary for @@ -83,5 +85,5 @@ class RemoveInvalidNotification extends Maintenance { } } -$maintClass = 'RemoveInvalidNotification'; // Tells it to run the class +$maintClass = RemoveInvalidNotification::class; // Tells it to run the class require_once RUN_MAINTENANCE_IF_MAIN; diff --git a/Echo/maintenance/removeOrphanedEvents.php b/Echo/maintenance/removeOrphanedEvents.php index 585ddc27..7cb61b45 100644 --- a/Echo/maintenance/removeOrphanedEvents.php +++ b/Echo/maintenance/removeOrphanedEvents.php @@ -1,6 +1,6 @@ <?php /** - * Remove rows from echo_event that don't have corresponding rows in echo_notification. + * Remove rows from echo_event that don't have corresponding rows in echo_notification or echo_email_batch. * * @ingroup Maintenance */ @@ -18,7 +18,8 @@ class RemoveOrphanedEvents extends LoggedUpdateMaintenance { public function __construct() { parent::__construct(); - $this->mDescription = "Remove rows from echo_event that don't have corresponding rows in echo_notification"; + $this->addDescription( "Remove rows from echo_event and echo_target_page that don't have corresponding " . + "rows in echo_notification or echo_email_batch" ); $this->setBatchSize( 500 ); @@ -35,38 +36,62 @@ class RemoveOrphanedEvents extends LoggedUpdateMaintenance { $dbr = $dbFactory->getEchoDb( DB_REPLICA ); $iterator = new BatchRowIterator( $dbr, - [ 'echo_event', 'echo_notification' ], + [ 'echo_event', 'echo_notification', 'echo_email_batch' ], 'event_id', $this->mBatchSize ); $iterator->addJoinConditions( [ - 'echo_notification' => [ 'LEFT JOIN', 'notification_event=event_id' ] + 'echo_notification' => [ 'LEFT JOIN', 'notification_event=event_id' ], + 'echo_email_batch' => [ 'LEFT JOIN', 'eeb_event_id=event_id' ], ] ); $iterator->addConditions( [ - 'notification_user' => null + 'notification_user' => null, + 'eeb_user_id' => null, ] ); $this->output( "Removing orphaned echo_event rows...\n" ); - $processed = 0; + $eventsProcessed = 0; + $targetsProcessed = 0; foreach ( $iterator as $batch ) { $ids = []; foreach ( $batch as $row ) { $ids[] = $row->event_id; } - $dbw->delete( - 'echo_event', - [ 'event_id' => $ids ] + $dbw->delete( 'echo_event', [ 'event_id' => $ids ], __METHOD__ ); + $eventsProcessed += $dbw->affectedRows(); + $dbw->delete( 'echo_target_page', [ 'etp_event' => $ids ], __METHOD__ ); + $targetsProcessed += $dbw->affectedRows(); + $this->output( "Deleted $eventsProcessed orphaned events and $targetsProcessed target_page rows.\n" ); + $dbFactory->waitForReplicas(); + } + + $this->output( "Removing any remaining orphaned echo_target_page rows...\n" ); + $iterator = new BatchRowIterator( + $dbr, + [ 'echo_target_page', 'echo_event' ], + 'etp_event', + $this->mBatchSize + ); + $iterator->addJoinConditions( [ 'echo_event' => [ 'LEFT JOIN', 'event_id=etp_event' ] ] ); + $iterator->addConditions( [ 'event_type' => null ] ); + $iterator->addOptions( [ 'DISTINCT' ] ); - ); + $processed = 0; + foreach ( $iterator as $batch ) { + $ids = []; + foreach ( $batch as $row ) { + $ids[] = $row->etp_event; + } + $dbw->delete( 'echo_target_page', [ 'etp_event' => $ids ], __METHOD__ ); $processed += $dbw->affectedRows(); - $this->output( "Deleted $processed orphaned rows.\n" ); - $dbFactory->waitForSlaves(); + $this->output( "Deleted $processed orphaned target_page rows.\n" ); + $dbFactory->waitForReplicas(); } return true; } } -$maintClass = 'RemoveOrphanedEvents'; +$maintClass = RemoveOrphanedEvents::class; require_once RUN_MAINTENANCE_IF_MAIN; diff --git a/Echo/maintenance/testDiscussionParser.php b/Echo/maintenance/testDiscussionParser.php deleted file mode 100644 index 0457b06f..00000000 --- a/Echo/maintenance/testDiscussionParser.php +++ /dev/null @@ -1,93 +0,0 @@ -<?php - -$IP = getenv( 'MW_INSTALL_PATH' ); -if ( $IP === false ) { - $IP = __DIR__ . '/../../..'; -} -require_once "$IP/maintenance/Maintenance.php"; - -class TestDiscussionParser extends Maintenance { - public function __construct() { - parent::__construct(); - $this->mDescription = "Takes enwiki revision IDs and attempts to identify interested users"; - - $this->addArg( 'revisions', 'Revision IDs, separated by commas', true /*required*/ ); - - $this->requireExtension( 'Echo' ); - } - - public function execute() { - $apiURL = 'http://en.wikipedia.org/w/api.php'; - - $revisions = explode( ',', $this->getArg( 0 ) ); - - // Retrieve original revisions and their predecessors - $requestData = [ - 'format' => 'php', - 'action' => 'query', - 'prop' => 'revisions', - 'revids' => implode( '|', $revisions ), - ]; - - $originalData = Http::post( - $apiURL, - [ - 'postData' => $requestData, - ] - ); - - $data = unserialize( $originalData ); - - $pages = $data['query']['pages']; - - foreach ( $pages as $page ) { - if ( count( $page['revisions'] ) !== 1 ) { - continue; - } - - $revid = $page['revisions'][0]['revid']; - - $newRequest = [ - 'format' => 'php', - 'action' => 'query', - 'prop' => 'revisions', - 'titles' => $page['title'], - 'rvstartid' => $revid, - 'rvlimit' => 2, - 'rvprop' => 'ids|content|user', - ]; - - $newData = Http::post( - $apiURL, - [ - 'postData' => $newRequest, - ] - ); - - $newData = unserialize( $newData ); - - $oldText = ''; - $newText = ''; - $allData = $newData['query']['pages']; - $pageData = array_shift( $allData ); - if ( count( $pageData['revisions'] ) == 2 ) { - $revision1 = $pageData['revisions'][0]; - $revision2 = $pageData['revisions'][1]; - $oldText = trim( $revision2['*'] ) . "\n"; - $newText = trim( $revision1['*'] ) . "\n"; - } elseif ( count( $pageData['revisions'] ) == 1 ) { - $revision1 = $pageData['revisions'][0]; - $newText = trim( $revision1['*'] ) . "\n"; - $oldText = ''; - } - - $user = $pageData['revisions'][0]['user']; - - print "http://en.wikipedia.org/w/index.php?diff=prev&oldid=$revid\n"; - EchoDiscussionParser::getInterestedUsers( $oldText, $newText, $user ); // FIXME: getInterestedUsers() is undefined - } - } -} - -$maintClass = "TestDiscussionParser"; -require_once RUN_MAINTENANCE_IF_MAIN; diff --git a/Echo/maintenance/updateEchoSchemaForSuppression.php b/Echo/maintenance/updateEchoSchemaForSuppression.php index dd8c966d..62b1ff96 100644 --- a/Echo/maintenance/updateEchoSchemaForSuppression.php +++ b/Echo/maintenance/updateEchoSchemaForSuppression.php @@ -38,8 +38,17 @@ class UpdateEchoSchemaForSuppression extends LoggedUpdateMaintenance { public function doDBUpdates() { global $wgEchoCluster; + $lbFactory = MWEchoDbFactory::newFromDefault(); - $reader = new BatchRowIterator( MWEchoDbFactory::getDB( DB_REPLICA ), $this->table, $this->idField, $this->mBatchSize ); + $dbr = $lbFactory->getEchoDb( DB_REPLICA ); + $dbw = $lbFactory->getEchoDb( DB_MASTER ); + + if ( !$dbw->fieldExists( 'echo_event', 'event_page_title', __METHOD__ ) ) { + $this->output( "No event_page_title field, skipping migration from event_page_title to event_page_id\n" ); + return true; + } + + $reader = new BatchRowIterator( $dbr, $this->table, $this->idField, $this->mBatchSize ); $reader->addConditions( [ "event_page_title IS NOT NULL", "event_page_id" => null, @@ -48,7 +57,7 @@ class UpdateEchoSchemaForSuppression extends LoggedUpdateMaintenance { $updater = new BatchRowUpdate( $reader, - new BatchRowWriter( MWEchoDbFactory::getDB( DB_MASTER ), $this->table, $wgEchoCluster ), + new BatchRowWriter( $dbw, $this->table, $wgEchoCluster ), new EchoSuppressionRowUpdateGenerator ); $updater->setOutput( function ( $text ) { @@ -59,5 +68,5 @@ class UpdateEchoSchemaForSuppression extends LoggedUpdateMaintenance { } } -$maintClass = 'UpdateEchoSchemaForSuppression'; // Tells it to run the class +$maintClass = UpdateEchoSchemaForSuppression::class; // Tells it to run the class require_once RUN_MAINTENANCE_IF_MAIN; diff --git a/Echo/maintenance/updatePerUserBlacklist.php b/Echo/maintenance/updatePerUserBlacklist.php index 1ed9ac79..218654dc 100644 --- a/Echo/maintenance/updatePerUserBlacklist.php +++ b/Echo/maintenance/updatePerUserBlacklist.php @@ -4,6 +4,9 @@ * * @ingroup Maintenance */ + +use MediaWiki\MediaWikiServices; + require_once getenv( 'MW_INSTALL_PATH' ) !== false ? getenv( 'MW_INSTALL_PATH' ) . '/maintenance/Maintenance.php' : __DIR__ . '/../../../maintenance/Maintenance.php'; @@ -28,8 +31,9 @@ class EchoUpdatePerUserBlacklist extends LoggedUpdateMaintenance { } public function doDBUpdates() { - $dbw = wfGetDB( DB_MASTER ); - $dbr = wfGetDB( DB_REPLICA ); + $lbFactory = MediaWikiServices::getInstance()->getDBLoadBalancerFactory(); + $dbw = $this->getDB( DB_MASTER ); + $dbr = $this->getDB( DB_REPLICA ); $iterator = new BatchRowIterator( $dbr, 'user_properties', @@ -76,10 +80,11 @@ class EchoUpdatePerUserBlacklist extends LoggedUpdateMaintenance { [ 'up_user' => $row->up_user, 'up_property' => 'echo-notifications-blacklist', - ] + ], + __METHOD__ ); $processed += $dbw->affectedRows(); - wfWaitForSlaves(); + $lbFactory->waitForReplication(); } $this->output( "Updated $processed Users\n" ); @@ -89,5 +94,5 @@ class EchoUpdatePerUserBlacklist extends LoggedUpdateMaintenance { } } -$maintClass = 'EchoUpdatePerUserBlacklist'; +$maintClass = EchoUpdatePerUserBlacklist::class; 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 06760ae2..b80066d3 100644 --- a/Echo/modules/api/mw.echo.api.APIHandler.js +++ b/Echo/modules/api/mw.echo.api.APIHandler.js @@ -1,4 +1,4 @@ -( function ( mw, $ ) { +( function () { /** * Abstract notification API handler * @@ -77,7 +77,7 @@ * @param {string|string[]} [sources=*] Requested sources. If not given * or if a '*' is given, all available sources will be queried * @return {jQuery.Promise} Promise that is resolved with an object - * of pages with the number of unread notifications per wiki + * of pages with the number of unread notifications per wiki */ mw.echo.api.APIHandler.prototype.fetchUnreadNotificationPages = function ( sources ) { var params = { @@ -107,11 +107,11 @@ return Array.isArray( sources ) ? ( sources.indexOf( 'local' ) !== -1 || - sources.indexOf( mw.config.get( 'wgDBname' ) ) !== -1 + sources.indexOf( mw.config.get( 'wgWikiID' ) ) !== -1 ) : ( sources === 'local' || - sources === mw.config.get( 'wgDBname' ) + sources === mw.config.get( 'wgWikiID' ) ); }; @@ -272,4 +272,4 @@ mw.echo.api.APIHandler.prototype.getTypeParams = function ( type ) { return this.typeParams[ type ]; }; -}( mediaWiki, jQuery ) ); +}() ); diff --git a/Echo/modules/api/mw.echo.api.EchoApi.js b/Echo/modules/api/mw.echo.api.EchoApi.js index 80163d22..f0ef5181 100644 --- a/Echo/modules/api/mw.echo.api.EchoApi.js +++ b/Echo/modules/api/mw.echo.api.EchoApi.js @@ -1,4 +1,4 @@ -( function ( mw, $ ) { +( function () { /** * A class defining Echo API instructions and network operations * @@ -60,7 +60,7 @@ * * @param {string[]} [sources=all] Requested sources * @return {jQuery.Promise} Promise that is resolved with an object - * of pages with the number of unread notifications per wiki + * of pages with the number of unread notifications per wiki */ mw.echo.api.EchoApi.prototype.fetchUnreadNotificationPages = function ( sources ) { return this.network.getApiHandler( 'local' ).fetchUnreadNotificationPages( sources ) @@ -338,4 +338,4 @@ mw.echo.api.EchoApi.prototype.getLimit = function () { return this.limit; }; -}( mediaWiki, jQuery ) ); +}() ); diff --git a/Echo/modules/api/mw.echo.api.ForeignAPIHandler.js b/Echo/modules/api/mw.echo.api.ForeignAPIHandler.js index b1da5e82..16d19a8b 100644 --- a/Echo/modules/api/mw.echo.api.ForeignAPIHandler.js +++ b/Echo/modules/api/mw.echo.api.ForeignAPIHandler.js @@ -1,4 +1,4 @@ -( function ( mw, $ ) { +( function () { /** * Foreign notification API handler * @@ -41,4 +41,4 @@ return $.extend( {}, this.typeParams[ type ], params ); }; -}( mediaWiki, jQuery ) ); +}() ); diff --git a/Echo/modules/api/mw.echo.api.LocalAPIHandler.js b/Echo/modules/api/mw.echo.api.LocalAPIHandler.js index da86b1fe..c00ce740 100644 --- a/Echo/modules/api/mw.echo.api.LocalAPIHandler.js +++ b/Echo/modules/api/mw.echo.api.LocalAPIHandler.js @@ -1,4 +1,4 @@ -( function ( mw, $ ) { +( function () { /** * Notification API handler * @@ -40,7 +40,8 @@ mw.echo.api.LocalAPIHandler.prototype.updateSeenTime = function ( type ) { type = Array.isArray( type ) ? type : [ type ]; - return this.api.postWithToken( 'csrf', { + // This is a GET request, not a POST request, for multi-DC support (see T222851) + return this.api.get( { action: 'echomarkseen', type: type.length === 1 ? type[ 0 ] : 'all', timestampFormat: 'ISO_8601' @@ -134,4 +135,4 @@ notcrosswikisummary: 1 } ); }; -}( mediaWiki, jQuery ) ); +}() ); diff --git a/Echo/modules/api/mw.echo.api.NetworkHandler.js b/Echo/modules/api/mw.echo.api.NetworkHandler.js index 4875a001..fd204cc7 100644 --- a/Echo/modules/api/mw.echo.api.NetworkHandler.js +++ b/Echo/modules/api/mw.echo.api.NetworkHandler.js @@ -1,4 +1,4 @@ -( function ( mw, $ ) { +( function () { /** * Network handler for echo notifications. Manages multiple APIHandlers * according to their sources. @@ -76,4 +76,4 @@ mw.echo.api.NetworkHandler.prototype.setApiHandler = function ( name, handler ) { this.handlers[ name ] = handler; }; -}( mediaWiki, jQuery ) ); +}() ); diff --git a/Echo/modules/api/mw.echo.api.PromisePrioritizer.js b/Echo/modules/api/mw.echo.api.PromisePrioritizer.js index 2c7cda7a..91e3c0b3 100644 --- a/Echo/modules/api/mw.echo.api.PromisePrioritizer.js +++ b/Echo/modules/api/mw.echo.api.PromisePrioritizer.js @@ -1,4 +1,4 @@ -( function ( mw, $ ) { +( function () { /** * Promise prioritizer for API actions. The prioritizer takes * a promise at a time, always prioritizing the latest promise and @@ -23,6 +23,7 @@ /** * Prioritize a promise * + * @external Promise * @param {jQuery.Promise|Promise} promise Promise * @return {jQuery.Promise} The main deferred object that resolves * or rejects when the latest promise is resolved or rejected. @@ -85,4 +86,4 @@ } ); } }; -}( mediaWiki, jQuery ) ); +}() ); diff --git a/Echo/modules/api/mw.echo.api.js b/Echo/modules/api/mw.echo.api.js index 25abf260..f5129bce 100644 --- a/Echo/modules/api/mw.echo.api.js +++ b/Echo/modules/api/mw.echo.api.js @@ -1,4 +1,4 @@ -( function ( mw ) { +( function () { mw.echo = mw.echo || {}; mw.echo.api = mw.echo.api || {}; -}( mediaWiki ) ); +}() ); diff --git a/Echo/modules/controller/mw.echo.Controller.js b/Echo/modules/controller/mw.echo.Controller.js index 5f857edb..9714f29c 100644 --- a/Echo/modules/controller/mw.echo.Controller.js +++ b/Echo/modules/controller/mw.echo.Controller.js @@ -1,4 +1,4 @@ -( function ( mw, $ ) { +( function () { /* global moment:false */ /** * Controller for Echo notifications @@ -91,11 +91,11 @@ foreignSources = {}; for ( source in data ) { - if ( source !== mw.config.get( 'wgDBname' ) ) { + if ( source !== mw.config.get( 'wgWikiID' ) ) { // Collect sources for API foreignSources[ source ] = data[ source ].source; } - result[ source === mw.config.get( 'wgDBname' ) ? 'local' : source ] = data[ source ]; + result[ source === mw.config.get( 'wgWikiID' ) ? 'local' : source ] = data[ source ]; } // Register the foreign sources in the API @@ -128,7 +128,7 @@ this.manager.getTypeString(), currentSource, { - 'continue': continueValue, + continue: continueValue, readState: filters.getReadState(), titles: filters.getSourcePagesModel().getGroupedPagesForCurrentTitle() } @@ -335,7 +335,7 @@ // but is not an array. We should log this in the console mw.log.warn( 'newNotifData.bundledNotifications is expected to be an array,' + - 'but instead received "' + $.type( newNotifData.bundledNotifications ) + '"' + 'but instead received "' + typeof newNotifData.bundledNotifications + '"' ); } } @@ -499,13 +499,11 @@ */ mw.echo.Controller.prototype.markLocalNotificationsRead = function () { var modelName, model, - itemIds = [], readState = this.manager.getFiltersModel().getReadState(), modelItems = {}; this.manager.getLocalNotifications().forEach( function ( notification ) { if ( !notification.isRead() ) { - itemIds = itemIds.concat( notification.getAllIds() ); notification.toggleRead( true ); modelName = notification.getModelName(); @@ -525,9 +523,8 @@ // Update pagination count this.manager.updateCurrentPageItemCount(); - this.manager.getUnreadCounter().estimateChange( -itemIds.length ); - this.manager.getLocalCounter().estimateChange( -itemIds.length ); - return this.api.markItemsRead( itemIds, 'local', true ).then( this.refreshUnreadCount.bind( this ) ); + this.manager.getLocalCounter().setCount( 0, false ); + return this.api.markAllRead( 'local', this.getTypeString() ).then( this.refreshUnreadCount.bind( this ) ); }; /** @@ -791,4 +788,4 @@ mw.echo.Controller.prototype.getTypeString = function () { return this.manager.getTypeString(); }; -}( mediaWiki, jQuery ) ); +}() ); diff --git a/Echo/modules/echo.mixins.less b/Echo/modules/echo.mixins.less index 11a7f26a..38d80ba3 100644 --- a/Echo/modules/echo.mixins.less +++ b/Echo/modules/echo.mixins.less @@ -1,12 +1,7 @@ .mw-echo-ui-mixin-hover-opacity() { opacity: @opacity-low; + &:hover { opacity: 1; } } - -.mw-echo-ui-mixin-one-line-truncated() { - white-space: nowrap; - overflow: hidden; - text-overflow: ellipsis; -} diff --git a/Echo/modules/echo.variables.less b/Echo/modules/echo.variables.less index a13776a4..2934f4bf 100644 --- a/Echo/modules/echo.variables.less +++ b/Echo/modules/echo.variables.less @@ -1,28 +1,31 @@ -// Taken from WikimediaUI base v0.6.1 +// = WikimediaUI base v0.15.0 excerpt // Background Colors @background-color-base: #fff; // Foreground Colors -@color-base: #222; -@color-base-active: #000; -@color-base-emphasized: @color-base-active; +@color-base: #202122; +@color-base--active: #000; +@color-base--emphasized: @color-base--active; +@color-base--inverted: #fff; // Primary 'Progressive' Color, Background Color @background-color-primary: #eaf3ff; @color-primary: #36c; // 'Destructive' Color @color-destructive: #d33; +// Border // Border Colors @border-color-heading: #c8ccd1; +// Border Radius +@border-radius-base: 2px; -// Echo's original variables +// = Echo's original variables @grey-light: #72777d; @grey-medium: #54595d; @badge-padding: 0.12em; @badge-icon-size: 1.1em; @badge-distance-adjustment: 1em; -@badge-offscreen-offset: 1000px; @notification-item-background-read: #eaecf0; @@ -34,7 +37,7 @@ @badge-counter-background-unseen-alert: @color-destructive; @badge-counter-background-unseen-message: @color-primary; -@notification-text-color: @color-base-emphasized; +@notification-text-color: @color-base--emphasized; @notification-body-color: @grey-light; @bundle-group-padding: 0.7em; @@ -50,4 +53,6 @@ @specialpage-width: 1000px; +@background-color-popup-confirmation: #202122; + @border-color: @border-color-heading; diff --git a/Echo/modules/ext.echo.init.js b/Echo/modules/ext.echo.init.js index 76eeda1c..407bfd41 100644 --- a/Echo/modules/ext.echo.init.js +++ b/Echo/modules/ext.echo.init.js @@ -1,4 +1,13 @@ -( function ( mw, $ ) { +/* eslint-disable no-jquery/no-global-selector */ +mw.echo = mw.echo || {}; +mw.echo.config = mw.echo.config || {}; +// Set default max prioritized action links per item +mw.echo.config.maxPrioritizedActions = 2; + +/** + * Initialise desktop Echo experience + */ +function initDesktop() { 'use strict'; // Remove ?markasread=XYZ from the URL @@ -9,85 +18,128 @@ window.history.replaceState( null, document.title, uri ); } - mw.echo = mw.echo || {}; - mw.echo.config = mw.echo.config || {}; - // Set default max prioritized action links per item - mw.echo.config.maxPrioritizedActions = 2; - // Activate ooui $( function () { - var myWidget, echoApi, + var selectedWidget, + echoApi, + messageController, + alertController, + messageModelManager, + alertModelManager, + unreadMessageCounter, + unreadAlertCounter, + maxNotificationCount = require( './config.json' ).EchoMaxNotificationCount, + pollingRate = require( './config.json' ).EchoPollForUpdates, + documentTitle = document.title, $existingAlertLink = $( '#pt-notifications-alert a' ), $existingMessageLink = $( '#pt-notifications-notice a' ), numAlerts = $existingAlertLink.attr( 'data-counter-num' ), numMessages = $existingMessageLink.attr( 'data-counter-num' ), badgeLabelAlerts = $existingAlertLink.attr( 'data-counter-text' ), badgeLabelMessages = $existingMessageLink.attr( 'data-counter-text' ), + // eslint-disable-next-line no-jquery/no-class-state hasUnseenAlerts = $existingAlertLink.hasClass( 'mw-echo-unseen-notifications' ), + // eslint-disable-next-line no-jquery/no-class-state hasUnseenMessages = $existingMessageLink.hasClass( 'mw-echo-unseen-notifications' ), + // latestMessageNotifTime is the time of most recent notification that came when we called showNotificationSnippet last + // the function showNotificationSnippet returns the time of the latest notification and latestMessageNotifTime is updated + latestMessageNotifTime = new Date(), + latestAlertNotifTime = new Date(), + alertCount = parseInt( numAlerts ), + messageCount = parseInt( numMessages ), + loadingPromise = null, // Store links links = { - notifications: $( '#pt-notifications-alert a' ).attr( 'href' ) || mw.util.getUrl( 'Special:Notifications' ), + notifications: $existingAlertLink.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 - $( '.mw-echo-notification-badge-nojs' ).click( function ( e ) { - var time = mw.now(), - myType = $( this ).parent().prop( 'id' ) === 'pt-notifications-alert' ? 'alert' : 'message'; + function updateDocumentTitleWithNotificationCount( totalAlertCount, totalMessageCount ) { + var totalCount = totalAlertCount + totalMessageCount, + convertedTotalCount, + newTitle = documentTitle; - if ( e.which !== 1 || $( this ).data( 'clicked' ) ) { - return false; + if ( totalCount > 0 ) { + convertedTotalCount = totalCount <= maxNotificationCount ? totalCount : maxNotificationCount + 1; + convertedTotalCount = mw.msg( 'echo-badge-count', mw.language.convertNumber( convertedTotalCount ) ); + newTitle = mw.msg( 'parentheses', convertedTotalCount ) + ' ' + documentTitle; } + document.title = newTitle; + } - $( this ).data( 'clicked', true ); + /** + * Show notification snippet via mw.notify of notifications which came after highestNotifTime. + * + * @param {mw.echo.dm.ModelManager} modelManager + * @param {Date} highestNotifTime Timestamp of latest notification the last time function was called + * @return {Date} Timestamp of latest notification + */ + function showNotificationSnippet( modelManager, highestNotifTime ) { + var timestampAsDate, + highestTime = new Date(); + highestTime = highestNotifTime; + modelManager.getLocalNotifications().forEach( function ( notificationItem ) { + timestampAsDate = new Date( notificationItem.timestamp ); + if ( timestampAsDate > highestNotifTime ) { + if ( timestampAsDate > highestTime ) { + highestTime = timestampAsDate; + } + if ( !notificationItem.seen ) { + mw.notify( $.parseHTML( notificationItem.content.header ), { title: mw.msg( 'echo-displaysnippet-title' ) } ); + } + } + } + ); + return highestTime; + } + + /** + * Change the seen state of badges if there are any unseen notifications. + * + * @param {mw.echo.dm.ModelManager} modelManager + * @param {mw.echo.ui.NotificationBadgeWidget} badgeWidget + */ + function updateBadgeState( modelManager, badgeWidget ) { + modelManager.getLocalNotifications().forEach( function ( notificationItem ) { + if ( !notificationItem.isSeen() ) { + badgeWidget.updateBadgeSeenState( true ); + } + } ); + } - // Dim the button while we load - $( this ).addClass( 'mw-echo-notifications-badge-dimmed' ); + function isLivePollingFeatureEnabledOnWiki() { + return pollingRate !== 0; + } - // Fire the notification API requests + /** + * User has opted in to preference to show notification snippets and update document title with unread count. + * + * Only useful when isLivePollingFeatureEnabledOnWiki() returns true. + * + * @return {boolean} User preference + */ + function userHasOptedInToLiveNotifications() { + return mw.user.options.get( 'echo-show-poll-updates' ) === '1'; + } + + // Change document title on initialization only when polling rate feature flag is non-zero. + if ( isLivePollingFeatureEnabledOnWiki() && userHasOptedInToLiveNotifications() ) { + updateDocumentTitleWithNotificationCount( alertCount, messageCount ); + } + + function loadEcho() { + if ( loadingPromise !== null ) { + return loadingPromise; + } + // This part executes only once, either when header icons are clicked or after completion of 60secs whichever occur first. echoApi = new mw.echo.api.EchoApi(); - echoApi.fetchNotifications( myType ) - .then( function ( data ) { - mw.track( 'timing.MediaWiki.echo.overlay.api', mw.now() - time ); - return data; - } ); - // Load the ui - mw.loader.using( 'ext.echo.ui.desktop', function () { - var messageController, - alertController, - messageModelManager, - alertModelManager, - unreadMessageCounter, - unreadAlertCounter, - maxNotificationCount = mw.config.get( 'wgEchoMaxNotificationCount' ); + loadingPromise = mw.loader.using( 'ext.echo.ui.desktop' ).then( function () { // Overlay - $( 'body' ).append( mw.echo.ui.$overlay ); - // Load message button and popup if messages exist - if ( $existingMessageLink.length ) { - unreadMessageCounter = new mw.echo.dm.UnreadNotificationCounter( echoApi, 'message', maxNotificationCount ); - messageModelManager = new mw.echo.dm.ModelManager( unreadMessageCounter, { type: 'message' } ); - messageController = new mw.echo.Controller( echoApi, messageModelManager ); + mw.echo.ui.$overlay.appendTo( document.body ); - 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, - href: $existingMessageLink.attr( 'href' ) - } - ); - // Replace the link button with the ooui button - $existingMessageLink.parent().replaceWith( mw.echo.ui.messageWidget.$element ); - } unreadAlertCounter = new mw.echo.dm.UnreadNotificationCounter( echoApi, 'alert', maxNotificationCount ); alertModelManager = new mw.echo.dm.ModelManager( unreadAlertCounter, { type: 'alert' } ); alertController = new mw.echo.Controller( echoApi, alertModelManager ); @@ -106,6 +158,9 @@ } ); + // Replace the link button with the ooui button + $existingAlertLink.parent().replaceWith( mw.echo.ui.alertWidget.$element ); + alertModelManager.on( 'allTalkRead', function () { // If there was a talk page notification, get rid of it $( '#pt-mytalk a' ) @@ -113,27 +168,143 @@ .text( mw.msg( 'mytalk' ) ); } ); - // Replace the link button with the ooui button - $existingAlertLink.parent().replaceWith( mw.echo.ui.alertWidget.$element ); + // listen to event countChange and change title only if polling rate is non-zero + if ( isLivePollingFeatureEnabledOnWiki() ) { + alertModelManager.getUnreadCounter().on( 'countChange', function ( count ) { + alertController.fetchLocalNotifications().then( function () { + updateBadgeState( alertModelManager, mw.echo.ui.alertWidget ); + if ( userHasOptedInToLiveNotifications() ) { + latestAlertNotifTime = showNotificationSnippet( alertModelManager, latestAlertNotifTime ); + alertCount = count; + updateDocumentTitleWithNotificationCount( count, messageCount ); + } + } ); + } ); + } - // HACK: Now that the module loaded, show the popup - myWidget = myType === 'alert' ? mw.echo.ui.alertWidget : mw.echo.ui.messageWidget; - myWidget.once( 'finishLoading', function () { - // Log timing after notifications are shown - mw.track( 'timing.MediaWiki.echo.overlay', mw.now() - time ); - } ); - myWidget.popup.toggle( true ); - mw.track( 'timing.MediaWiki.echo.overlay.ooui', mw.now() - time ); + // Load message button and popup if messages exist + if ( $existingMessageLink.length ) { + unreadMessageCounter = new mw.echo.dm.UnreadNotificationCounter( echoApi, 'message', maxNotificationCount ); + messageModelManager = new mw.echo.dm.ModelManager( unreadMessageCounter, { type: 'message' } ); + messageController = new mw.echo.Controller( echoApi, messageModelManager ); + + 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, + href: $existingMessageLink.attr( 'href' ) + } + ); + + // Replace the link button with the ooui button + $existingMessageLink.parent().replaceWith( mw.echo.ui.messageWidget.$element ); + + // listen to event countChange and change title only if polling rate is non-zero + if ( isLivePollingFeatureEnabledOnWiki() ) { + messageModelManager.getUnreadCounter().on( 'countChange', function ( count ) { + messageController.fetchLocalNotifications().then( function () { + updateBadgeState( messageModelManager, mw.echo.ui.messageWidget ); + if ( userHasOptedInToLiveNotifications() ) { + latestMessageNotifTime = showNotificationSnippet( messageModelManager, latestMessageNotifTime ); + messageCount = count; + updateDocumentTitleWithNotificationCount( alertCount, count ); + } + } ); + } ); + } + } } ); + return loadingPromise; + + } - if ( hasUnseenAlerts || hasUnseenMessages ) { - // Clicked on the flyout due to having unread notifications - mw.track( 'counter.MediaWiki.echo.unseen.click' ); + // Respond to click on the notification button and load the UI on demand + $( '.mw-echo-notification-badge-nojs' ).on( 'click', function ( e ) { + var timeOfClick = mw.now(), + $badge = $( this ), + clickedSection = $badge.parent().prop( 'id' ) === 'pt-notifications-alert' ? 'alert' : 'message'; + if ( e.which !== 1 || $badge.data( 'clicked' ) ) { + return false; } + $badge.data( 'clicked', true ); + + // Dim the badge while we load + $badge.addClass( 'mw-echo-notifications-badge-dimmed' ); + + // Fire the notification API requests + echoApi = new mw.echo.api.EchoApi(); + echoApi.fetchNotifications( clickedSection ) + .then( function ( data ) { + mw.track( 'timing.MediaWiki.echo.overlay.api', mw.now() - timeOfClick ); + return data; + } ); + + loadEcho().then( function () { + // Now that the module loaded, show the popup + selectedWidget = clickedSection === 'alert' ? mw.echo.ui.alertWidget : mw.echo.ui.messageWidget; + selectedWidget.once( 'finishLoading', function () { + // Log timing after notifications are shown + mw.track( 'timing.MediaWiki.echo.overlay', mw.now() - timeOfClick ); + } ); + selectedWidget.popup.toggle( true ); + mw.track( 'timing.MediaWiki.echo.overlay.ooui', mw.now() - timeOfClick ); + + if ( hasUnseenAlerts || hasUnseenMessages ) { + // Clicked on the flyout due to having unread notifications + // This is part of tracking how likely users are to click a badge with unseen notifications. + // The other part is the 'echo.unseen' counter, see EchoHooks::onPersonalUrls(). + mw.track( 'counter.MediaWiki.echo.unseen.click' ); + } + }, function () { + // Un-dim badge if loading failed + $badge.removeClass( 'mw-echo-notifications-badge-dimmed' ); + } ); // Prevent default return false; } ); + + function pollForNotificationCountUpdates() { + alertController.refreshUnreadCount(); + messageController.refreshUnreadCount(); + // Make notification update after n*pollingRate(time in secs) where n depends on document.hidden + setTimeout( pollForNotificationCountUpdates, ( document.hidden ? 5 : 1 ) * pollingRate * 1000 ); + } + + function pollStart() { + if ( mw.config.get( 'skin' ) !== 'minerva' && isLivePollingFeatureEnabledOnWiki() ) { + // load widgets if not loaded already then start polling + loadEcho().then( pollForNotificationCountUpdates ); + } + } + + setTimeout( pollStart, 60 * 1000 ); + } ); -}( mediaWiki, jQuery ) ); +} + +/** + * Initialise a mobile experience instead + */ +function initMobile() { + if ( !mw.user.isAnon() ) { + mw.loader.using( [ 'ext.echo.mobile', 'mobile.startup' ] ).then( function ( require ) { + require( 'ext.echo.mobile' )(); + } ); + } +} + +$( function () { + if ( mw.config.get( 'wgMFMode' ) ) { + initMobile(); + } else { + initDesktop(); + } +} ); diff --git a/Echo/modules/ext.echo.moment-hack.js b/Echo/modules/ext.echo.moment-hack.js index bd6baba9..8226193c 100644 --- a/Echo/modules/ext.echo.moment-hack.js +++ b/Echo/modules/ext.echo.moment-hack.js @@ -1,4 +1,4 @@ -( function ( mw ) { +( function () { /* global moment:false */ 'use strict'; @@ -20,6 +20,13 @@ y: 'years', yy: 'years' }; + // The following messages are used here: + // * notification-timestamp-ago-seconds + // * notification-timestamp-ago-minutes + // * notification-timestamp-ago-hours + // * notification-timestamp-ago-days + // * notification-timestamp-ago-months + // * notification-timestamp-ago-years return mw.msg( 'notification-timestamp-ago-' + keymap[ key ], mw.language.convertNumber( number ) ); }, calendar: { @@ -45,4 +52,4 @@ } ); // Reset back to original locale moment.locale( momentOrigLocale ); -}( mediaWiki ) ); +}() ); diff --git a/Echo/modules/icons/badgeicons.json b/Echo/modules/icons/badgeicons.json deleted file mode 100644 index 135261be..00000000 --- a/Echo/modules/icons/badgeicons.json +++ /dev/null @@ -1,15 +0,0 @@ -{ - "variants": { - "invert": { - "color": "#FFFFFF" - } - }, - "images": { - "bell": { - "file": "icons/bell.svg" - }, - "tray": { - "file": "icons/tray.svg" - } - } -} diff --git a/Echo/modules/icons/bell.svg b/Echo/modules/icons/bell.svg deleted file mode 100644 index bab71465..00000000 --- a/Echo/modules/icons/bell.svg +++ /dev/null @@ -1,7 +0,0 @@ -<?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/help.svg b/Echo/modules/icons/help.svg deleted file mode 100644 index 94820366..00000000 --- a/Echo/modules/icons/help.svg +++ /dev/null @@ -1,7 +0,0 @@ -<?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/helpNotice-ltr.svg b/Echo/modules/icons/helpNotice-ltr.svg new file mode 100644 index 00000000..8f0c3dc8 --- /dev/null +++ b/Echo/modules/icons/helpNotice-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> + help + </title> + <path d="M10 0a10 10 0 1 0 10 10A10 10 0 0 0 10 0zm1 16H9v-2h2zm2.71-7.6a2.64 2.64 0 0 1-.33.74 3.16 3.16 0 0 1-.48.55l-.54.48c-.21.18-.41.35-.58.52a2.54 2.54 0 0 0-.47.56A2.3 2.3 0 0 0 11 12a3.79 3.79 0 0 0-.11 1H9.08a8.9 8.9 0 0 1 .07-1.25 3.28 3.28 0 0 1 .25-.9 2.79 2.79 0 0 1 .41-.67 4 4 0 0 1 .58-.58c.17-.16.34-.3.51-.44a3 3 0 0 0 .43-.44 1.83 1.83 0 0 0 .3-.55 2 2 0 0 0 .11-.72 2.06 2.06 0 0 0-.17-.86 1.71 1.71 0 0 0-1-.9 1.7 1.7 0 0 0-.5-.1 1.77 1.77 0 0 0-1.53.68 3 3 0 0 0-.5 1.82H6.16a4.74 4.74 0 0 1 .28-1.68 3.56 3.56 0 0 1 .8-1.29 3.88 3.88 0 0 1 1.28-.83A4.59 4.59 0 0 1 10.18 4a4.44 4.44 0 0 1 1.44.23 3.51 3.51 0 0 1 1.15.65 3.08 3.08 0 0 1 .78 1.06 3.54 3.54 0 0 1 .29 1.45 3.39 3.39 0 0 1-.13 1.01z"/> +</svg> diff --git a/Echo/modules/icons/helpNotice-rtl.svg b/Echo/modules/icons/helpNotice-rtl.svg new file mode 100644 index 00000000..5a3122ab --- /dev/null +++ b/Echo/modules/icons/helpNotice-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> + help + </title> + <path d="M0 10A10 10 0 1 0 10 0 10 10 0 0 0 0 10zm9 4h2v2H9zM6.16 7.39a3.54 3.54 0 0 1 .29-1.45 3.08 3.08 0 0 1 .78-1.06 3.51 3.51 0 0 1 1.15-.65A4.44 4.44 0 0 1 9.82 4a4.59 4.59 0 0 1 1.66.29 3.88 3.88 0 0 1 1.28.83 3.56 3.56 0 0 1 .8 1.29 4.74 4.74 0 0 1 .28 1.68h-1.91a3 3 0 0 0-.5-1.82 1.77 1.77 0 0 0-1.53-.68 1.7 1.7 0 0 0-.5.1 1.71 1.71 0 0 0-1 .9 2.06 2.06 0 0 0-.17.86 2 2 0 0 0 .11.72 1.83 1.83 0 0 0 .3.55 3 3 0 0 0 .43.44c.17.14.34.28.51.44a4 4 0 0 1 .58.58 2.79 2.79 0 0 1 .41.67 3.28 3.28 0 0 1 .25.9 8.9 8.9 0 0 1 .1 1.25H9.11A3.79 3.79 0 0 0 9 12a2.3 2.3 0 0 0-.31-.73 2.54 2.54 0 0 0-.47-.56c-.17-.17-.37-.34-.58-.52l-.54-.5a3.16 3.16 0 0 1-.48-.55 2.64 2.64 0 0 1-.33-.74 3.39 3.39 0 0 1-.13-1.01z"/> +</svg> diff --git a/Echo/modules/icons/tray.svg b/Echo/modules/icons/tray.svg deleted file mode 100644 index b3209529..00000000 --- a/Echo/modules/icons/tray.svg +++ /dev/null @@ -1,7 +0,0 @@ -<?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/unbell.svg b/Echo/modules/icons/unbell.svg new file mode 100644 index 00000000..8cb3e266 --- /dev/null +++ b/Echo/modules/icons/unbell.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> + unbell + </title> + <path d="M1.22 0L0 1.22l4.334 4.335A5.38 5.38 0 004 7v6l-2 2v1h12.78l4 4L20 18.78 17.22 16 5.23 4.01 1.22 0zM10 0C8.47 0 8.4 1.46 8.46 2.15a5.38 5.38 0 00-1.92.729l9.46 9.46V7a5.38 5.38 0 00-4.46-4.85C11.6 1.46 11.53 0 10 0zM7 17a3 3 0 003 3 3 3 0 003-3H7z"/> +</svg> diff --git a/Echo/modules/logger/mw.echo.Logger.js b/Echo/modules/logger/mw.echo.Logger.js index cf380bbb..4c82926f 100644 --- a/Echo/modules/logger/mw.echo.Logger.js +++ b/Echo/modules/logger/mw.echo.Logger.js @@ -1,4 +1,5 @@ -( function ( $, mw ) { +( function () { + var configVars = require( './config.json' ); mw.echo = mw.echo || {}; /** @@ -28,7 +29,7 @@ * @static * @property {boolean} */ - mw.echo.Logger.static.clickThroughEnabled = !!mw.config.get( 'wgEchoInteractionLogging' ); + mw.echo.Logger.static.clickThroughEnabled = !!configVars.EchoInteractionLogging && !mw.user.isAnon(); /** * Context definitions. @@ -84,7 +85,7 @@ myEvt = { action: action, - version: mw.config.get( 'wgEchoEventLoggingVersion' ), + version: configVars.EchoEventLoggingVersion, userId: +mw.config.get( 'wgUserId' ), editCount: +mw.config.get( 'wgUserEditCount' ) }; @@ -103,7 +104,7 @@ myEvt.mobile = mobile || mw.config.get( 'skin' ) === 'minerva'; } - if ( notifWiki && notifWiki !== mw.config.get( 'wgDBname' ) && notifWiki !== 'local' ) { + if ( notifWiki && notifWiki !== mw.config.get( 'wgWikiID' ) && notifWiki !== 'local' ) { myEvt.notifWiki = notifWiki; } @@ -123,7 +124,7 @@ var i, len, key; for ( i = 0, len = notificationIds.length; i < len; i++ ) { - key = notifWiki && notifWiki !== mw.config.get( 'wgDBname' ) && notifWiki !== 'local' ? + key = notifWiki && notifWiki !== mw.config.get( 'wgWikiID' ) && notifWiki !== 'local' ? notificationIds[ i ] + '-' + notifWiki : notificationIds[ i ]; @@ -137,4 +138,4 @@ }; mw.echo.logger = new mw.echo.Logger(); -}( jQuery, mediaWiki ) ); +}() ); diff --git a/Echo/modules/mobile/NotificationBadge.js b/Echo/modules/mobile/NotificationBadge.js new file mode 100644 index 00000000..fdffb010 --- /dev/null +++ b/Echo/modules/mobile/NotificationBadge.js @@ -0,0 +1,92 @@ +var + mobile = mw.mobileFrontend.require( 'mobile.startup' ), + View = mobile.View, + Icon = mobile.Icon, + notificationIcon = new Icon( { + name: 'bellOutline-base20', + glyphPrefix: 'wikimedia' + } ); + +/** + * A notification button for displaying a notifications overlay + * + * @class NotificationButton + * @extends View + * @param {Object} options Configuration options + * @param {string} options.notificationIconClass e.g. mw-ui-icon for icon + * @param {boolean} options.hasUnseenNotifications whether the user has unseen notifications + * @param {number} options.notificationCountRaw number of unread notifications + * @param {string} options.title tooltip for badge + * @param {string} options.url to see all notifications + * @param {boolean} options.hasNotifications whether the user has unseen notifications + * @param {Function} options.onClick handler for when the badge is clicked + * @memberof NotificationBadge + * @instance + */ +function NotificationBadge( options ) { + var $el, $notificationAnchor, + count = options.notificationCountRaw || 0, + el = options.el; + + if ( el ) { + // Learn properties based on current element + $el = $( el ); + options.hasUnseenNotifications = $el.find( '.notification-unseen' ).length > 0; + options.hasNotifications = options.hasUnseenNotifications; + $notificationAnchor = $el.find( 'a' ); + options.title = $notificationAnchor.attr( 'title' ); + options.url = $notificationAnchor.attr( 'href' ); + count = Number( $el.find( 'span' ).data( 'notification-count' ) ); + } + View.call( this, + $.extend( { + notificationIconClass: notificationIcon.getClassName(), + hasNotifications: false, + hasUnseenNotifications: false, + notificationCountRaw: 0 + }, options, { + isBorderBox: false + } ) + ); + this.url = options.url; + this.setCount( count ); + if ( options.onClick ) { + this.$el.on( 'click', options.onClick ); + } +} + +OO.inheritClass( NotificationBadge, View ); + +NotificationBadge.prototype.template = mw.template.get( 'ext.echo.mobile', 'NotificationBadge.mustache' ); + +/** + * Update the notification count + * + * @memberof NotificationBadge + * @instance + * @param {number} count + */ +NotificationBadge.prototype.setCount = function ( count ) { + if ( count > 100 ) { + count = 100; + } + this.options.notificationCountRaw = count; + this.options.notificationCountString = mw.message( 'echo-badge-count', + mw.language.convertNumber( count ) + ).text(); + this.options.isNotificationCountZero = count === 0; + this.render(); +}; + +/** + * Marks all notifications as seen + * + * @memberof NotificationBadge + * @instance + */ +NotificationBadge.prototype.markAsSeen = function () { + this.options.hasUnseenNotifications = false; + this.render(); +}; + +module.exports = NotificationBadge; diff --git a/Echo/modules/mobile/NotificationBadge.mustache b/Echo/modules/mobile/NotificationBadge.mustache new file mode 100644 index 00000000..18045e2c --- /dev/null +++ b/Echo/modules/mobile/NotificationBadge.mustache @@ -0,0 +1,19 @@ +{{^hasNotifications}} +<a href="{{url}}" title="{{title}}" + class="{{notificationIconClass}} mw-echo-notification-badge-nojs user-button" id="user-notifications" data-event-name="ui.notifications"> + {{title}} +</a> +{{/hasNotifications}} +{{#hasNotifications}} +<a href="{{url}}" title="{{title}}" + id="user-notifications" + data-event-name="ui.notifications" + class="mw-echo-notification-badge-nojs mw-echo-unseen-notifications notification-count user-button {{#hasUnseenNotifications}}notification-unseen{{/hasUnseenNotifications}} + {{#isNotificationCountZero}}zero{{/isNotificationCountZero}}"> + <div class="circle"> + <span data-notification-count="{{notificationCountRaw}}"> + {{notificationCountString}} + </span> + </div> +</a> +{{/hasNotifications}} diff --git a/Echo/modules/mobile/list.js b/Echo/modules/mobile/list.js new file mode 100644 index 00000000..4660c0d8 --- /dev/null +++ b/Echo/modules/mobile/list.js @@ -0,0 +1,85 @@ +var mobile = mw.mobileFrontend.require( 'mobile.startup' ), + util = mobile.util, + View = mobile.View, + promisedView = mobile.promisedView; + +/** + * This callback is displayed as a global member. + * + * @callback FunctionCountChangeCallback + * @param {number} count a capped (0-99 or 99+) count + */ + +/** + * List of notifications + * + * @param {mw.echo} echo class + * @param {OO.ui.ButtonWidget} markAllReadButton - a button that will be associated with the + * read status of the notifications list. + * @param {FunctionCountChangeCallback} onCountChange callback. + * @param {Function} onNotificationListRendered a function that is called when the + * notifications list has fully rendered (taking no arguments) + * @return {View} + */ +function notificationsList( echo, markAllReadButton, onCountChange, onNotificationListRendered ) { + var wrapperWidget, + maxNotificationCount = mw.config.get( 'wgEchoMaxNotificationCount' ), + echoApi = new echo.api.EchoApi(), + unreadCounter = new echo.dm.UnreadNotificationCounter( echoApi, 'all', maxNotificationCount ), + modelManager = new echo.dm.ModelManager( unreadCounter, { type: [ 'message', 'alert' ] } ), + controller = new echo.Controller( + echoApi, + modelManager, + { + type: [ 'message', 'alert' ] + } + ), + markAsReadHandler = function () { + markAllReadButton.toggle( + controller.manager.hasLocalUnread() + ); + }, + // Create a container which will be revealed when "more options" (...) + // is clicked on a notification. Hidden by default. + $moreOptions = util.parseHTML( '<div>' ) + .addClass( 'notifications-overlay-overlay position-fixed' ); + + echo.config.maxPrioritizedActions = 1; + + wrapperWidget = new echo.ui.NotificationsWrapper( controller, modelManager, { + $overlay: $moreOptions + } ); + + // Events + unreadCounter.on( 'countChange', function ( count ) { + onCountChange( + controller.manager.getUnreadCounter().getCappedNotificationCount( count ) + ); + markAsReadHandler(); + } ); + markAllReadButton.on( 'click', function () { + var numNotifications = controller.manager.getLocalUnread().length; + + controller.markLocalNotificationsRead() + .then( function () { + mw.notify( mw.msg( 'echo-mark-all-as-read-confirmation', numNotifications ) ); + markAllReadButton.toggle( false ); + }, function () { + markAllReadButton.toggle( false ); + } ); + } ); + + return promisedView( + // Populate notifications + wrapperWidget.populate().then( function () { + controller.updateSeenTime(); + onNotificationListRendered(); + markAsReadHandler(); + // Connect event here as we know that everything loaded correctly + modelManager.on( 'update', markAsReadHandler ); + return View.make( {}, [ wrapperWidget.$element, $moreOptions ] ); + } ) + ); +} + +module.exports = notificationsList; diff --git a/Echo/modules/mobile/notifications.js b/Echo/modules/mobile/notifications.js new file mode 100644 index 00000000..9feaf9fb --- /dev/null +++ b/Echo/modules/mobile/notifications.js @@ -0,0 +1,117 @@ +var NOTIFICATIONS_PATH = '/notifications'; + +/** + * @fires echo.mobile every time the notifications overlay is opened + */ +function onOpenNotificationsOverlay() { + mw.hook( 'echo.mobile' ).fire( true ); +} + +/** + * @fires echo.mobile every time the notifications overlay is closed + */ +function onCloseNotificationsOverlay() { + mw.hook( 'echo.mobile' ).fire( false ); +} + +/* + * This code loads the necessary modules for the notifications overlay, not to be confused + * with the Toast notifications defined by common/toast.js. + */ +module.exports = function () { + var badge, + notificationsFilterOverlay = require( './notificationsFilterOverlay.js' ), + notificationsOverlay = require( './overlay.js' ), + router = require( 'mediawiki.router' ), + overlayManager = mw.mobileFrontend.require( 'mobile.startup' ).OverlayManager.getSingleton(), + NotificationBadge = require( './NotificationBadge.js' ), + initialized = false; + + function showNotificationOverlay() { + var overlay = notificationsOverlay( badge.setCount.bind( badge ), + badge.markAsSeen.bind( badge ), function ( exit ) { + onCloseNotificationsOverlay(); + exit(); + } ); + onOpenNotificationsOverlay(); + + return overlay; + } + + // Once the DOM is loaded hijack the notifications button to display an overlay rather + // than linking to Special:Notifications. + $( function () { + badge = new NotificationBadge( { + onClick: function ( ev ) { + router.navigate( '#' + NOTIFICATIONS_PATH ); + // prevent navigation to original Special:Notifications URL + // DO NOT USE stopPropagation or you'll break click tracking in WikimediaEvents + ev.preventDefault(); + }, + // eslint-disable-next-line no-jquery/no-global-selector + el: $( '#user-notifications.user-button' ).parent() + } ); + overlayManager.add( /^\/notifications$/, showNotificationOverlay ); + + /** + * Adds a filter button to the UI inside notificationsInboxWidget + * + * @method + * @ignore + */ + function addFilterButton() { + // Create filter button once the notifications overlay has been loaded + var filterStatusButton = new OO.ui.ButtonWidget( + { + href: '#/notifications-filter', + classes: [ 'mw-echo-ui-notificationsInboxWidget-main-toolbar-nav-filter-placeholder' ], + icon: 'funnel', + label: mw.msg( 'echo-mobile-notifications-filter-title' ) + } ); + + // eslint-disable-next-line no-jquery/no-global-selector + $( '.mw-echo-ui-notificationsInboxWidget-cell-placeholder' ).append( + $( '<div>' ) + .addClass( 'mw-echo-ui-notificationsInboxWidget-main-toolbar-nav-filter' ) + .addClass( 'mw-echo-ui-notificationsInboxWidget-cell' ) + .append( filterStatusButton.$element ) + ); + } + + // This code will currently only be invoked on Special:Notifications + // The code is bundled here since it makes use of loadModuleScript. This also allows + // the possibility of invoking the filter from outside the Special page in future. + // Once the 'ext.echo.special.onInitialize' hook has fired, load notification filter. + mw.hook( 'ext.echo.special.onInitialize' ).add( function () { + // eslint-disable-next-line no-jquery/no-global-selector + var $crossWikiUnreadFilter = $( '.mw-echo-ui-crossWikiUnreadFilterWidget' ), + // eslint-disable-next-line no-jquery/no-global-selector + $notifReadState = $( '.mw-echo-ui-notificationsInboxWidget-main-toolbar-readState' ); + + // The 'ext.echo.special.onInitialize' hook is fired whenever special page notification + // changes display on click of a filter. + // Hence the hook is restricted from firing more than once. + if ( initialized ) { + return; + } + + // setup the filter button (now we have OOjs UI) + addFilterButton(); + + // setup route + overlayManager.add( /^\/notifications-filter$/, function () { + onOpenNotificationsOverlay(); + return notificationsFilterOverlay( { + onBeforeExit: function ( exit ) { + onCloseNotificationsOverlay(); + exit(); + }, + $notifReadState: $notifReadState, + $crossWikiUnreadFilter: $crossWikiUnreadFilter + } ); + } ); + initialized = true; + } ); + } ); + +}; diff --git a/Echo/modules/mobile/notificationsFilterOverlay.js b/Echo/modules/mobile/notificationsFilterOverlay.js new file mode 100644 index 00000000..20167bd9 --- /dev/null +++ b/Echo/modules/mobile/notificationsFilterOverlay.js @@ -0,0 +1,39 @@ +var Overlay = mw.mobileFrontend.require( 'mobile.startup' ).Overlay; + +/** + * Overlay for notifications filter + * + * @class NotificationsFilterOverlay + * @param {Object} options + * @param {Function} options.onBeforeExit executes before overlay closes + * @param {jQuery.Object} options.$notifReadState - notification read status widgets + * @param {jQuery.Object} options.$crossWikiUnreadFilter - notification unread filter + * + */ +function notificationsFilterOverlay( options ) { + var $content, overlay; + // Initialize + options.$crossWikiUnreadFilter.on( 'click', function () { + overlay.hide(); + } ); + + options.$notifReadState.find( '.oo-ui-buttonElement' ).on( 'click', function () { + overlay.hide(); + } ); + + $content = $( '<div>' ).append( + $( '<div>' ) + .addClass( 'notifications-filter-overlay-read-state' ) + .append( options.$notifReadState ), + options.$crossWikiUnreadFilter + ); + + overlay = Overlay.make( { + onBeforeExit: options.onBeforeExit, + heading: '<strong>' + mw.message( 'echo-mobile-notifications-filter-title' ).escaped() + '</strong>', + className: 'overlay notifications-filter-overlay notifications-overlay navigation-drawer' + }, { $el: $content } ); + return overlay; +} + +module.exports = notificationsFilterOverlay; diff --git a/Echo/modules/mobile/notificationsFilterOverlay.less b/Echo/modules/mobile/notificationsFilterOverlay.less new file mode 100644 index 00000000..ae06d254 --- /dev/null +++ b/Echo/modules/mobile/notificationsFilterOverlay.less @@ -0,0 +1,52 @@ +@import 'mediawiki.ui/variables.less'; +@import 'mediawiki.mixins.less'; + +.notifications-filter-overlay { + padding-top: 0; + + &-read-state { + padding-top: 5em; + padding-bottom: 1.5em; + text-align: center; + } + + .overlay-content { + // this is needed not only on iOS, that's why we repeat it here even though + // it's in Overlay.less too + overflow-y: scroll; // has to be scroll, not auto + position: absolute; + width: 100%; + padding-bottom: 0; + + .mw-echo-ui-pageNotificationsOptionWidget { + .box-sizing( border-box ); + border: 1px solid @colorGray12; + padding: 0.7em 1.5em 1em 1em; + width: 100%; + } + + .mw-echo-ui-notificationsInboxWidget-main-toolbar-readState { + display: block; + } + + .mw-echo-ui-crossWikiUnreadFilterWidget { + border: 1px solid @colorGray12; + width: 100%; + margin-left: 0; + padding: 0; + + &-title { + display: block; + font-size: 1.3em; + font-weight: bold; + margin-left: 0.7em; + } + + &-subtitle { + display: block; + color: @colorGray1; + margin-left: 0.9em; + } + } + } +} diff --git a/Echo/modules/mobile/overlay.js b/Echo/modules/mobile/overlay.js new file mode 100644 index 00000000..36080900 --- /dev/null +++ b/Echo/modules/mobile/overlay.js @@ -0,0 +1,85 @@ +var mobile = mw.mobileFrontend.require( 'mobile.startup' ), + Overlay = mobile.Overlay, + list = require( './list.js' ), + promisedView = mobile.promisedView, + View = mobile.View, + Anchor = mobile.Anchor; + +/** + * @param {Overlay} overlay + * @param {Function} exit + * @return {void} + */ +function onBeforeExitAnimation( overlay, exit ) { + if ( 'transition' in overlay.$el[ 0 ].style ) { + // Manually detach the overlay from DOM once hide animation completes. + overlay.$el[ 0 ].addEventListener( 'transitionend', exit, { once: true } ); + + // Kick off animation. + overlay.$el[ 0 ].classList.remove( 'visible' ); + } else { + exit(); + } +} + +/** + * This callback is displayed as a global member. + * + * @callback FunctionCountChangeCallback + * @param {number} count a capped (0-99 or 99+) count + */ + +/** + * Make a notification overlay + * + * @param {FunctionCountChangeCallback} onCountChange receives one parameter - a capped (0-99 or 99+) count. + * @param {Function} onNotificationListRendered a function that is called when the + * notifications list has fully rendered (taking no arguments) + * @param {Function} onBeforeExit + * @return {Overlay} + */ +function notificationsOverlay( onCountChange, onNotificationListRendered, onBeforeExit ) { + var markAllReadButton, overlay, + oouiPromise = mw.loader.using( 'oojs-ui' ).then( function () { + markAllReadButton = new OO.ui.ButtonWidget( { + icon: 'checkAll', + title: mw.msg( 'echo-mark-all-as-read' ) + } ); + return View.make( + { class: 'notifications-overlay-header-markAllRead' }, + [ markAllReadButton.$element ] + ); + } ), + markAllReadButtonView = promisedView( oouiPromise ); + // hide the button spinner as it is confusing to see in the top right corner + markAllReadButtonView.$el.hide(); + + overlay = Overlay.make( + { + heading: '<strong>' + mw.message( 'notifications' ).escaped() + '</strong>', + footerAnchor: new Anchor( { + href: mw.util.getUrl( 'Special:Notifications' ), + progressive: true, + additionalClassNames: 'footer-link notifications-archive-link', + label: mw.msg( 'echo-overlay-link' ) + } ).options, + headerActions: [ markAllReadButtonView ], + isBorderBox: false, + className: 'overlay notifications-overlay navigation-drawer', + onBeforeExit: function ( exit ) { + onBeforeExit( function () { + onBeforeExitAnimation( overlay, exit ); + } ); + } + }, + promisedView( + oouiPromise.then( function () { + return list( mw.echo, markAllReadButton, onCountChange, + onNotificationListRendered ); + } ) + ) + ); + return overlay; +} + +module.exports = notificationsOverlay; diff --git a/Echo/modules/mobile/overlay.less b/Echo/modules/mobile/overlay.less new file mode 100644 index 00000000..264583b9 --- /dev/null +++ b/Echo/modules/mobile/overlay.less @@ -0,0 +1,61 @@ +// FIXME: some of this could be removed if we reused .page-list styling +@import 'mediawiki.ui/variables.less'; +@import 'mediawiki.mixins.less'; + +.notifications-overlay { + // position: fixed + sliding drawer causes weird rendering bugs in Android + // Browser (tested on 4.0.4 and 4.2.1) + padding-top: 0; + + &-header-markAllRead { + padding-right: 1em; + } + + &-overlay { + position: absolute; + bottom: 3em; + right: 0; + left: 0; + z-index: 1; + + .mw-echo-ui-actionMenuPopupWidget-menu { + padding: 0.5em; + font-size: 1.5em; + box-shadow: none; + border: 1px solid @colorGray10; + // Override the positioning of the menu + // so it is "stuck" on the bottom of the + // notification overlay panel + position: static !important; + bottom: 0 !important; + left: 0 !important; + width: 100% !important; + height: auto !important; + top: auto !important; + } + } + + .overlay-content { + // this is needed not only on iOS, that's why we repeat it here even though + // it's in Overlay.less too + overflow-y: scroll; // has to be scroll, not auto + position: absolute; + width: 100%; + padding-top: 0; + padding-bottom: 0; + max-width: none; // T219320 + + .mw-echo-ui-notificationsWidget { + height: 100%; + } + } + + .user-button { + position: absolute; + right: 0; + top: 0; + padding-right: 0; + // Should correspond to @z-indexOverOverlay in MobileFrontend + z-index: 2; + } +} diff --git a/Echo/modules/model/mw.echo.dm.BundleNotificationItem.js b/Echo/modules/model/mw.echo.dm.BundleNotificationItem.js index 60a42395..27a4a82d 100644 --- a/Echo/modules/model/mw.echo.dm.BundleNotificationItem.js +++ b/Echo/modules/model/mw.echo.dm.BundleNotificationItem.js @@ -1,4 +1,4 @@ -( function ( mw ) { +( function () { /** * Bundle notification item model. Contains a list of bundled notifications. * Is expandable. @@ -59,8 +59,9 @@ * @return {boolean} Whether this bundle is completely read */ mw.echo.dm.BundleNotificationItem.prototype.isRead = function () { - var itemIsRead = function ( item ) { return item.isRead(); }; - return this.list.getItems().every( itemIsRead ); + return this.list.getItems().every( function ( item ) { + return item.isRead(); + } ); }; /** @@ -158,4 +159,4 @@ return this.getModelName(); }; -}( mediaWiki ) ); +}() ); diff --git a/Echo/modules/model/mw.echo.dm.CrossWikiNotificationItem.js b/Echo/modules/model/mw.echo.dm.CrossWikiNotificationItem.js index 2ee599a8..e56b7f18 100644 --- a/Echo/modules/model/mw.echo.dm.CrossWikiNotificationItem.js +++ b/Echo/modules/model/mw.echo.dm.CrossWikiNotificationItem.js @@ -1,4 +1,4 @@ -( function ( mw ) { +( function () { /** * Cross-wiki notification item model. Contains a list of sources, * that each contain a list of notification items from that source. @@ -162,4 +162,4 @@ return this.getList().isEmpty(); }; -}( mediaWiki ) ); +}() ); diff --git a/Echo/modules/model/mw.echo.dm.FiltersModel.js b/Echo/modules/model/mw.echo.dm.FiltersModel.js index 62c3e0e8..a58d4135 100644 --- a/Echo/modules/model/mw.echo.dm.FiltersModel.js +++ b/Echo/modules/model/mw.echo.dm.FiltersModel.js @@ -1,4 +1,4 @@ -( function ( mw ) { +( function () { /** * Filters model for displaying filtered notification list. * @@ -96,4 +96,4 @@ return this.sourcePagesModel; }; -}( mediaWiki ) ); +}() ); diff --git a/Echo/modules/model/mw.echo.dm.ModelManager.js b/Echo/modules/model/mw.echo.dm.ModelManager.js index 367be286..32cccf65 100644 --- a/Echo/modules/model/mw.echo.dm.ModelManager.js +++ b/Echo/modules/model/mw.echo.dm.ModelManager.js @@ -1,4 +1,4 @@ -( function ( mw ) { +( function () { /** * A container that manages all models that are involved in creating * the notification list. There are currently two types of models: @@ -152,8 +152,8 @@ * @param {Object} modelDefinitions An object defining the models * The format for the definition object is: * { - * 'modelId': {mw.echo.dm.SortedList}, - * ... + * 'modelId': {mw.echo.dm.SortedList}, + * ... * } */ mw.echo.dm.ModelManager.prototype.setNotificationModels = function ( modelDefinitions ) { @@ -481,4 +481,4 @@ }; -}( mediaWiki, jQuery ) ); +}() ); diff --git a/Echo/modules/model/mw.echo.dm.NotificationGroupsList.js b/Echo/modules/model/mw.echo.dm.NotificationGroupsList.js index c4f99a44..26cde594 100644 --- a/Echo/modules/model/mw.echo.dm.NotificationGroupsList.js +++ b/Echo/modules/model/mw.echo.dm.NotificationGroupsList.js @@ -1,4 +1,4 @@ -( function ( mw ) { +( function () { /** * Notification groups list data structure. * It contains mw.echo.dm.NotificationsList items @@ -161,4 +161,4 @@ } return null; }; -}( mediaWiki ) ); +}() ); diff --git a/Echo/modules/model/mw.echo.dm.NotificationItem.js b/Echo/modules/model/mw.echo.dm.NotificationItem.js index 568166f9..790e43e5 100644 --- a/Echo/modules/model/mw.echo.dm.NotificationItem.js +++ b/Echo/modules/model/mw.echo.dm.NotificationItem.js @@ -1,4 +1,4 @@ -( function ( mw, $ ) { +( function () { /* global moment:false */ /** * Notification item data structure. @@ -30,14 +30,14 @@ * @cfg {string} [source] The source this notification is coming from, if it is foreign * @cfg {Object[]} [secondaryUrls] An array of objects defining the secondary URLs * for this notification. The secondary URLs are expected to have this structure: - * { - * "iconType": "userAvatar", // A symbolic name for the icon. - * // Will render as oo-ui-icon-* class. - * "label": "", // The label for the link - * "prioritized": true/false, // Prioritized links are outside of the popup - * // menu, whenever possible. - * "url": "..." // The url for the secondary link - * } + * { + * "iconType": "userAvatar", // A symbolic name for the icon. + * // Will render as oo-ui-icon-* class. + * "label": "", // The label for the link + * "prioritized": true/false, // Prioritized links are outside of the popup + * // menu, whenever possible. + * "url": "..." // The url for the secondary link + * } */ mw.echo.dm.NotificationItem = function MwEchoDmNotificationItem( id, config ) { var fallbackDate = moment.utc().format( 'YYYY-MM-DD[T]HH:mm:ss[Z]' ); @@ -292,12 +292,12 @@ }; /** - * Get the all ids contained in this notification - * - * @return {number[]} - */ + * Get the all ids contained in this notification + * + * @return {number[]} + */ mw.echo.dm.NotificationItem.prototype.getAllIds = function () { return [ this.getId() ].concat( this.bundledIds || [] ); }; -}( mediaWiki, jQuery ) ); +}() ); diff --git a/Echo/modules/model/mw.echo.dm.NotificationsList.js b/Echo/modules/model/mw.echo.dm.NotificationsList.js index 341965da..f3b04e26 100644 --- a/Echo/modules/model/mw.echo.dm.NotificationsList.js +++ b/Echo/modules/model/mw.echo.dm.NotificationsList.js @@ -1,4 +1,4 @@ -( function ( mw ) { +( function () { /** * Notifications list data structure. * @@ -268,4 +268,4 @@ return this.getSource() !== 'local'; }; -}( mediaWiki ) ); +}() ); diff --git a/Echo/modules/model/mw.echo.dm.PaginationModel.js b/Echo/modules/model/mw.echo.dm.PaginationModel.js index eae7c35d..99a4b514 100644 --- a/Echo/modules/model/mw.echo.dm.PaginationModel.js +++ b/Echo/modules/model/mw.echo.dm.PaginationModel.js @@ -1,4 +1,4 @@ -( function ( mw ) { +( function () { /** * Pagination model for echo notifications pages. * @@ -219,4 +219,4 @@ mw.echo.dm.PaginationModel.prototype.getItemsPerPage = function () { return this.itemsPerPage; }; -}( mediaWiki ) ); +}() ); diff --git a/Echo/modules/model/mw.echo.dm.SeenTimeModel.js b/Echo/modules/model/mw.echo.dm.SeenTimeModel.js index e00702e9..2892b5d9 100644 --- a/Echo/modules/model/mw.echo.dm.SeenTimeModel.js +++ b/Echo/modules/model/mw.echo.dm.SeenTimeModel.js @@ -1,4 +1,4 @@ -( function ( mw ) { +( function () { /** * SeenTime model for Echo notifications * @@ -78,4 +78,4 @@ return this.types; }; -}( mediaWiki ) ); +}() ); diff --git a/Echo/modules/model/mw.echo.dm.SortedList.js b/Echo/modules/model/mw.echo.dm.SortedList.js index b6b1b073..758deb11 100644 --- a/Echo/modules/model/mw.echo.dm.SortedList.js +++ b/Echo/modules/model/mw.echo.dm.SortedList.js @@ -1,4 +1,4 @@ -( function ( mw ) { +( function () { /** * Sorted list abstract data structure. * @@ -27,4 +27,4 @@ * @return {boolean} This list is a group */ mw.echo.dm.SortedList.prototype.isGroup = null; -}( mediaWiki ) ); +}() ); diff --git a/Echo/modules/model/mw.echo.dm.SourcePagesModel.js b/Echo/modules/model/mw.echo.dm.SourcePagesModel.js index 4d0f56be..2d3b2b49 100644 --- a/Echo/modules/model/mw.echo.dm.SourcePagesModel.js +++ b/Echo/modules/model/mw.echo.dm.SourcePagesModel.js @@ -1,4 +1,4 @@ -( function ( mw ) { +( function () { /** * Source pages model for notification filtering * @@ -177,4 +177,4 @@ this.sources[ source ].pages[ page.title ] = page; } }; -}( mediaWiki ) ); +}() ); diff --git a/Echo/modules/model/mw.echo.dm.UnreadNotificationCounter.js b/Echo/modules/model/mw.echo.dm.UnreadNotificationCounter.js index 3257df51..d0ccd345 100644 --- a/Echo/modules/model/mw.echo.dm.UnreadNotificationCounter.js +++ b/Echo/modules/model/mw.echo.dm.UnreadNotificationCounter.js @@ -1,4 +1,4 @@ -( function ( mw, $ ) { +( function () { /** * Echo notification UnreadNotificationCounter model * @@ -144,4 +144,4 @@ this.source = source; }; -}( mediaWiki, jQuery ) ); +}() ); diff --git a/Echo/modules/model/mw.echo.dm.js b/Echo/modules/model/mw.echo.dm.js index 4d9e3d3f..32a99a38 100644 --- a/Echo/modules/model/mw.echo.dm.js +++ b/Echo/modules/model/mw.echo.dm.js @@ -1,3 +1,3 @@ -( function ( mw ) { +( function () { mw.echo.dm = {}; -}( mediaWiki ) ); +}() ); diff --git a/Echo/modules/mw.echo.js b/Echo/modules/mw.echo.js index cd4101bb..e69de29b 100644 --- a/Echo/modules/mw.echo.js +++ b/Echo/modules/mw.echo.js @@ -1,4 +0,0 @@ -( function ( mw ) { - mw.echo = mw.echo || {}; - mw.echo.config = mw.echo.config || { maxPrioritizedActions: 2 }; -}( mediaWiki ) ); diff --git a/Echo/modules/nojs/mw.echo.alert.less b/Echo/modules/nojs/mw.echo.alert.less index c26c47dd..e0ee3cb1 100644 --- a/Echo/modules/nojs/mw.echo.alert.less +++ b/Echo/modules/nojs/mw.echo.alert.less @@ -1,7 +1,9 @@ +@import '../echo.variables.less'; + .mw-echo-alert { - border-radius: 2px; background-color: #fc3; + color: @color-base--emphasized; + border-radius: @border-radius-base; padding: 0.25em 0.8em 0.2em 0.8em; - color: #222; font-weight: normal; } diff --git a/Echo/modules/nojs/mw.echo.alert.modern.less b/Echo/modules/nojs/mw.echo.alert.modern.less deleted file mode 100644 index 716369d1..00000000 --- a/Echo/modules/nojs/mw.echo.alert.modern.less +++ /dev/null @@ -1,3 +0,0 @@ -#pt-mytalk a.mw-echo-alert { - border-radius: 0; -} diff --git a/Echo/modules/nojs/mw.echo.badge.less b/Echo/modules/nojs/mw.echo.badge.less index 130977d7..87a8b507 100644 --- a/Echo/modules/nojs/mw.echo.badge.less +++ b/Echo/modules/nojs/mw.echo.badge.less @@ -1,5 +1,5 @@ -@import '../echo.variables'; -@import 'mediawiki.mixins'; +@import '../echo.variables.less'; +@import 'mediawiki.mixins.less'; /* stylelint-disable no-descending-specificity */ /* We have to include the #pt-notifications selector due to monobook */ @@ -12,37 +12,30 @@ 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; + // Later we put the counter back onscreen with a zero text-indent + top: -5px; + text-indent: -9999px; + border-radius: @border-radius-base; cursor: pointer; text-decoration: none; line-height: normal; .box-sizing( border-box ); + opacity: 0.87; + color: transparent; &:hover, &:active, &:focus { outline: 0; - -moz-outline-style: 0; } - &-dimmed { - opacity: 0.4; - } + &:focus { + .box-shadow( ~'0 0 0 1px #fff, 0 0 0 3px #36c' ); + opacity: 1; - // Background icon - &:before { - position: absolute; - display: inline-block; - cursor: pointer; - opacity: 0.8; - content: ''; - background-repeat: no-repeat; - // Bring it back onscreen - top: @badge-offscreen-offset; - left: 0; - width: 100%; - height: 100%; + &:after { + border-color: #36c; + } } // Counter @@ -51,27 +44,33 @@ display: inline-block; cursor: pointer; // Bring it back onscreen - top: @badge-offscreen-offset + 9px; + top: 9px; + text-indent: 0; left: 55%; font-size: 0.9em; font-weight: bold; padding: 0 0.3em; border: 1px solid #fff; - border-radius: 2px; + border-radius: @border-radius-base; background-color: @badge-counter-background-seen; content: attr( data-counter-text ); color: #fff; } + &-dimmed { + opacity: 0.4; + } + &.mw-echo-notifications-badge-long-label { margin-right: 0.5em; + &:after { left: 35%; } } &.mw-echo-notifications-badge-all-read { - opacity: 0.625; + opacity: 0.51; &:after { visibility: hidden; @@ -79,17 +78,14 @@ } } - #pt-notifications-alert & { - &:before { - /* @embed */ - background-image: url( ../icons/bell.svg ); + &.oo-ui-flaggedElement-unseen, + &.mw-echo-unseen-notifications { + #pt-notifications-alert &:after { + background-color: @badge-counter-background-unseen-alert; } - } - #pt-notifications-notice & { - &:before { - /* @embed */ - background-image: url( ../icons/tray.svg ); + #pt-notifications-notice &:after { + background-color: @badge-counter-background-unseen-message; } } } diff --git a/Echo/modules/nojs/mw.echo.badge.minerva.less b/Echo/modules/nojs/mw.echo.badge.minerva.less new file mode 100644 index 00000000..b95fd810 --- /dev/null +++ b/Echo/modules/nojs/mw.echo.badge.minerva.less @@ -0,0 +1,20 @@ +#pt-notifications-alert { + .mw-echo-notifications-badge-dimmed, + .mw-echo-notifications-badge { + top: 0; + margin: 0; + } +} + +#pt-notifications-alert.oo-ui-widget { + list-style: none; + width: 1.25em; + height: 1.25em; + padding: 0.75em; + vertical-align: middle; + + a { + height: auto; + padding: 0; + } +} diff --git a/Echo/modules/nojs/mw.echo.badge.modern.less b/Echo/modules/nojs/mw.echo.badge.modern.less deleted file mode 100644 index 48484017..00000000 --- a/Echo/modules/nojs/mw.echo.badge.modern.less +++ /dev/null @@ -1,8 +0,0 @@ -.mw-echo-notifications-badge { - #pt-notifications-alert &, - #pt-notifications-notice & { - &:before { - z-index: 0; - } - } -} diff --git a/Echo/modules/nojs/mw.echo.badge.monobook.less b/Echo/modules/nojs/mw.echo.badge.monobook.less index 576d4901..93eec98e 100644 --- a/Echo/modules/nojs/mw.echo.badge.monobook.less +++ b/Echo/modules/nojs/mw.echo.badge.monobook.less @@ -1,36 +1,14 @@ -@import '../echo.variables'; - -/* We have to include the #pt-notifications selector due to monobook */ -.mw-echo-notifications-badge { - #pt-notifications-notice &, - #pt-notifications-alert & { - display: inline-block; - width: 16px; - height: 16px; - top: -@badge-offscreen-offset - 1px; - - &:before { - background-size: 16px 16px; - } - - &:after { - top: @badge-offscreen-offset + 3px; - } - } - - &.oo-ui-flaggedElement-unseen, - &.mw-echo-unseen-notifications { - #pt-notifications-alert &:after { - background-color: @badge-counter-background-unseen-alert; - } - - #pt-notifications-notice &:after { - background-color: @badge-counter-background-unseen-message; - } +@import '../echo.variables.less'; + +#pt-notifications-notice .mw-echo-notifications-badge, +#pt-notifications-alert .mw-echo-notifications-badge { + display: inline-block; + background-size: 16px 16px; + background-repeat: no-repeat; + top: -1px; + + &:after { + top: 6px; + left: 45%; } } - -#p-personal #pt-notifications-alert, -#p-personal #pt-notifications-notice { - margin-right: 0.2em; -} diff --git a/Echo/modules/nojs/mw.echo.badge.vector.less b/Echo/modules/nojs/mw.echo.badge.vector.less index 0256eb62..90c7d23c 100644 --- a/Echo/modules/nojs/mw.echo.badge.vector.less +++ b/Echo/modules/nojs/mw.echo.badge.vector.less @@ -1,18 +1,4 @@ -@import '../echo.variables'; - -/* We have to include the #pt-notifications selector due to monobook */ -.mw-echo-notifications-badge { - &.oo-ui-flaggedElement-unseen, - &.mw-echo-unseen-notifications { - #pt-notifications-alert &:after { - background-color: @badge-counter-background-unseen-alert; - } - - #pt-notifications-notice &:after { - background-color: @badge-counter-background-unseen-message; - } - } -} +@import '../echo.variables.less'; #p-personal #pt-notifications-alert, #p-personal #pt-notifications-notice { diff --git a/Echo/modules/nojs/mw.echo.notifications.less b/Echo/modules/nojs/mw.echo.notifications.less index 4627fdc6..8defd104 100644 --- a/Echo/modules/nojs/mw.echo.notifications.less +++ b/Echo/modules/nojs/mw.echo.notifications.less @@ -1,6 +1,6 @@ -@import '../echo.variables'; -@import '../echo.mixins'; -@import 'mediawiki.mixins'; +@import '../echo.variables.less'; +@import '../echo.mixins.less'; +@import 'mediawiki.mixins.less'; // This is only valid for the Special:Notifications page in no-JS mode, // where the formatting of the notifications include the following structure @@ -20,6 +20,7 @@ margin-right: 10px; margin-left: 10px; } + .mw-echo-notification { background-color: @background-color-base; color: @grey-light; @@ -33,7 +34,6 @@ padding-bottom: 10px; /* Force container to expand to height of floated contents */ overflow: hidden; - zoom: 1; span.autocomment { color: inherit; @@ -54,9 +54,9 @@ } .mw-echo-payload { - .mw-echo-ui-mixin-one-line-truncated; color: @notification-body-color; margin-top: 4px; + .text-overflow( @visible: false ); } .mw-echo-title, @@ -65,11 +65,9 @@ line-height: 1.4em; .plainlinks { - white-space: nowrap; - overflow: hidden; - text-overflow: ellipsis; max-width: 100%; display: inline-block; + .text-overflow( @visible: false ); vertical-align: top; } } @@ -81,11 +79,9 @@ .mw-echo-notification-footer-element { display: inline-block; - overflow: hidden; - white-space: nowrap; - text-overflow: ellipsis; max-width: 15em; margin-right: 0.5em; + .text-overflow( @visible: false ); } } } diff --git a/Echo/modules/nojs/mw.echo.special.less b/Echo/modules/nojs/mw.echo.special.less index 336635c6..641060c4 100644 --- a/Echo/modules/nojs/mw.echo.special.less +++ b/Echo/modules/nojs/mw.echo.special.less @@ -1,5 +1,5 @@ /* Echo specific CSS */ -@import '../echo.variables'; +@import '../echo.variables.less'; .mw-echo-special-container { max-width: 600px; @@ -15,12 +15,9 @@ } } -// Hide the help link and the preferences link -// in the JS version, since both appear inside +// Hide the preferences link +// in the JS version, since it appear inside // the cog menu -.client-js #mw-indicator-mw-helplink { - display: none; -} .client-js #mw-echo-pref-link, .client-js #contentSub { @@ -135,8 +132,8 @@ ul.mw-echo-special-notifications { float: right; display: inline-block; margin: 0; - opacity: 0.5; + &:hover { opacity: 1; } @@ -154,6 +151,7 @@ div.mw-htmlform-ooui-wrapper { // Center 'preferences' in mobile special page text-align: center; } + .mw-echo-special-header-link { display: none; } diff --git a/Echo/modules/special/ext.echo.special.js b/Echo/modules/special/ext.echo.special.js index a0c9ba24..d6963e8f 100644 --- a/Echo/modules/special/ext.echo.special.js +++ b/Echo/modules/special/ext.echo.special.js @@ -1,4 +1,4 @@ -( function ( $, mw ) { +( function () { 'use strict'; /*! @@ -8,6 +8,8 @@ var specialPageContainer, limitNotifications = 50, links = mw.config.get( 'wgNotificationsSpecialPageLinks' ), + // FIXME: Use CSS transition + // eslint-disable-next-line no-jquery/no-global-selector $content = $( '#mw-content-text' ), echoApi = new mw.echo.api.EchoApi( { limit: limitNotifications } ), unreadCounter = new mw.echo.dm.UnreadNotificationCounter( echoApi, [ 'message', 'alert' ], limitNotifications ), @@ -37,15 +39,14 @@ { limit: limitNotifications, $overlay: mw.echo.ui.$overlay, - prefLink: links.preferences, - helpLink: links.help + prefLink: links.preferences } ); // Overlay - $( 'body' ).append( mw.echo.ui.$overlay ); + $( document.body ).append( mw.echo.ui.$overlay ); // Notifications $content.empty().append( specialPageContainer.$element ); } ); -}( jQuery, mediaWiki ) ); +}() ); diff --git a/Echo/modules/styles/mw.echo.ui.ConfirmationPopupWidget.less b/Echo/modules/styles/mw.echo.ui.ConfirmationPopupWidget.less index b0bd8398..905ad86a 100644 --- a/Echo/modules/styles/mw.echo.ui.ConfirmationPopupWidget.less +++ b/Echo/modules/styles/mw.echo.ui.ConfirmationPopupWidget.less @@ -1,3 +1,5 @@ +@import '../echo.variables.less'; + .mw-echo-ui-confirmationPopupWidget { position: relative; bottom: 1em; @@ -5,10 +7,10 @@ text-align: center; &-popup { - background-color: #222; - color: #fff; + background-color: @background-color-popup-confirmation; + color: @color-base--inverted; display: inline-block; - border-radius: 2px; + border-radius: @border-radius-base; padding: 0.5em 1em; text-align: left; diff --git a/Echo/modules/styles/mw.echo.ui.CrossWikiNotificationItemWidget.less b/Echo/modules/styles/mw.echo.ui.CrossWikiNotificationItemWidget.less index 569aa327..b0b04fc2 100644 --- a/Echo/modules/styles/mw.echo.ui.CrossWikiNotificationItemWidget.less +++ b/Echo/modules/styles/mw.echo.ui.CrossWikiNotificationItemWidget.less @@ -1,5 +1,5 @@ -@import 'mediawiki.mixins'; -@import '../echo.variables'; +@import 'mediawiki.mixins.less'; +@import '../echo.variables.less'; .mw-echo-ui-crossWikiNotificationItemWidget, .mw-echo-ui-bundleNotificationItemWidget { @@ -20,7 +20,6 @@ &-content { // The icon is 30px margin-left: 30px; - padding-bottom: 1em; // 0.8em from ItemWidget, plus 0.8em padding-left: 1.6em; diff --git a/Echo/modules/styles/mw.echo.ui.CrossWikiUnreadFilterWidget.less b/Echo/modules/styles/mw.echo.ui.CrossWikiUnreadFilterWidget.less index 859e604a..4b131945 100644 --- a/Echo/modules/styles/mw.echo.ui.CrossWikiUnreadFilterWidget.less +++ b/Echo/modules/styles/mw.echo.ui.CrossWikiUnreadFilterWidget.less @@ -1,4 +1,4 @@ -@import '../echo.variables'; +@import '../echo.variables.less'; .mw-echo-ui-crossWikiUnreadFilterWidget { border: 1px solid @border-color; diff --git a/Echo/modules/styles/mw.echo.ui.CrossWikiUnreadFilterWidget.monobook.less b/Echo/modules/styles/mw.echo.ui.CrossWikiUnreadFilterWidget.monobook.less deleted file mode 100644 index d9454f9c..00000000 --- a/Echo/modules/styles/mw.echo.ui.CrossWikiUnreadFilterWidget.monobook.less +++ /dev/null @@ -1,7 +0,0 @@ -@import '../echo.variables'; - -.mw-echo-ui-crossWikiUnreadFilterWidget { - .mw-echo-ui-pageNotificationsOptionWidget-count .oo-ui-labelWidget { - padding: 0; - } -} diff --git a/Echo/modules/styles/mw.echo.ui.DatedNotificationsWidget.less b/Echo/modules/styles/mw.echo.ui.DatedNotificationsWidget.less index b740f9ab..fc2c1c27 100644 --- a/Echo/modules/styles/mw.echo.ui.DatedNotificationsWidget.less +++ b/Echo/modules/styles/mw.echo.ui.DatedNotificationsWidget.less @@ -1,4 +1,5 @@ -@import '../echo.variables'; +@import '../echo.variables.less'; + .mw-echo-ui-datedNotificationsWidget { min-height: 5em; diff --git a/Echo/modules/styles/mw.echo.ui.DatedSubGroupListWidget.less b/Echo/modules/styles/mw.echo.ui.DatedSubGroupListWidget.less index ff40fb30..a403f36c 100644 --- a/Echo/modules/styles/mw.echo.ui.DatedSubGroupListWidget.less +++ b/Echo/modules/styles/mw.echo.ui.DatedSubGroupListWidget.less @@ -1,4 +1,5 @@ -@import '../echo.variables'; +@import '../echo.variables.less'; + .mw-echo-ui-datedSubGroupListWidget { .mw-body-content &-title { // Since the title is <h2> we want to specifically diff --git a/Echo/modules/styles/mw.echo.ui.FooterNoticeWidget.less b/Echo/modules/styles/mw.echo.ui.FooterNoticeWidget.less index ff8cd7b5..589d55b6 100644 --- a/Echo/modules/styles/mw.echo.ui.FooterNoticeWidget.less +++ b/Echo/modules/styles/mw.echo.ui.FooterNoticeWidget.less @@ -1,5 +1,5 @@ -@import '../echo.variables'; -@import '../echo.mixins'; +@import '../echo.variables.less'; +@import '../echo.mixins.less'; .mw-echo-ui-footerNoticeWidget { padding: 0.5em; @@ -28,7 +28,6 @@ &-dismiss, &-info { .mw-echo-ui-mixin-hover-opacity(); - vertical-align: top; .oo-ui-iconElement-icon { diff --git a/Echo/modules/styles/mw.echo.ui.MenuItemWidget.less b/Echo/modules/styles/mw.echo.ui.MenuItemWidget.less index 5735dfbd..60da86f9 100644 --- a/Echo/modules/styles/mw.echo.ui.MenuItemWidget.less +++ b/Echo/modules/styles/mw.echo.ui.MenuItemWidget.less @@ -1,5 +1,5 @@ -@import '../echo.variables'; -@import '../echo.mixins'; +@import '../echo.variables.less'; +@import '../echo.mixins.less'; /* stylelint-disable no-descending-specificity */ .mw-echo-ui-menuItemWidget { @@ -11,7 +11,7 @@ // Override link colour color: @color-base; // Set max-width so buttons are truncated - max-width: 15em; + max-width: 25em; } &-prioritized { diff --git a/Echo/modules/styles/mw.echo.ui.NotificationBadgeWidget.less b/Echo/modules/styles/mw.echo.ui.NotificationBadgeWidget.less index 00b9a2e9..65320518 100644 --- a/Echo/modules/styles/mw.echo.ui.NotificationBadgeWidget.less +++ b/Echo/modules/styles/mw.echo.ui.NotificationBadgeWidget.less @@ -1,5 +1,5 @@ -@import 'mediawiki.mixins'; -@import '../echo.variables'; +@import 'mediawiki.mixins.less'; +@import '../echo.variables.less'; .mw-echo-ui-notificationBadgeButtonPopupWidget { position: relative; diff --git a/Echo/modules/styles/mw.echo.ui.NotificationBadgeWidget.modern.less b/Echo/modules/styles/mw.echo.ui.NotificationBadgeWidget.modern.less deleted file mode 100644 index 6dc59143..00000000 --- a/Echo/modules/styles/mw.echo.ui.NotificationBadgeWidget.modern.less +++ /dev/null @@ -1,18 +0,0 @@ -body #p-personal { - overflow: visible; -} - -#p-personal li.mw-echo-ui-notificationBadgeButtonPopupWidget { - font-variant: normal; - text-transform: none; - font-weight: normal; - // Badge - > .oo-ui-buttonElement-button { - border-radius: 0; - } - // Popup buttons - .oo-ui-buttonElement-button:hover { - // In modern, the hover color is white, which is unhelpful. - color: #666; - } -} diff --git a/Echo/modules/styles/mw.echo.ui.NotificationBadgeWidget.monobook.less b/Echo/modules/styles/mw.echo.ui.NotificationBadgeWidget.monobook.less deleted file mode 100644 index 3320c953..00000000 --- a/Echo/modules/styles/mw.echo.ui.NotificationBadgeWidget.monobook.less +++ /dev/null @@ -1,36 +0,0 @@ -@import '../echo.variables'; - -#p-personal li.mw-echo-ui-notificationBadgeButtonPopupWidget { - text-transform: none; - font-weight: normal; - - &-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 { - background-color: initial; - } - - // Badge - > .oo-ui-buttonElement-button { - &:hover { - .oo-ui-labelElement-label { - color: #000 !important; - } - } - } - - // Footer - .oo-ui-popupWidget-footer { - // Override text-align that monobook uses for #p-personal li - text-align: left; - } -} diff --git a/Echo/modules/styles/mw.echo.ui.NotificationItemWidget.less b/Echo/modules/styles/mw.echo.ui.NotificationItemWidget.less index 23f8e5ad..b5f1838e 100644 --- a/Echo/modules/styles/mw.echo.ui.NotificationItemWidget.less +++ b/Echo/modules/styles/mw.echo.ui.NotificationItemWidget.less @@ -1,6 +1,6 @@ -@import 'mediawiki.mixins'; -@import '../echo.variables'; -@import '../echo.mixins'; +@import 'mediawiki.mixins.less'; +@import '../echo.variables.less'; +@import '../echo.mixins.less'; .mw-echo-ui-notificationItemWidget { background-color: @notification-item-background-read; @@ -8,7 +8,6 @@ white-space: normal; padding: 0.8em 1em 0.5em 1em; .box-sizing( border-box ); - border: 1px solid #c8ccd1; border-bottom: 0; @@ -79,14 +78,16 @@ &-header { color: @notification-text-color; } + &-body { + color: @notification-body-color; + margin-top: 4px; + // In the popup only, truncate the text to one-line // with ellipses .mw-echo-ui-notificationBadgeButtonPopupWidget-popup & { - .mw-echo-ui-mixin-one-line-truncated; + .text-overflow( @visible: false ); } - color: @notification-body-color; - margin-top: 4px; } } @@ -102,6 +103,7 @@ & > &-buttons.oo-ui-buttonSelectWidget { display: table-cell; + white-space: nowrap; vertical-align: bottom; } @@ -125,12 +127,11 @@ display: table-cell; vertical-align: bottom; text-align: right; - color: @color-base-emphasized; + color: @color-base--emphasized; opacity: @opacity-low; white-space: nowrap; width: 100%; } - } } @@ -176,7 +177,6 @@ height: 1.5em; width: 1.5em; } - } &-content-message { @@ -261,6 +261,7 @@ from { background-color: @notification-background-unseen; } + to { background-color: @notification-background-unread; } @@ -270,6 +271,7 @@ from { background-color: @notification-background-unseen; } + to { background-color: @notification-background-unread; } @@ -279,6 +281,7 @@ from { background-color: @notification-background-unseen; } + to { background-color: @notification-background-read; } @@ -288,6 +291,7 @@ from { background-color: @notification-background-unseen; } + to { background-color: @notification-background-read; } diff --git a/Echo/modules/styles/mw.echo.ui.NotificationItemWidget.modern.less b/Echo/modules/styles/mw.echo.ui.NotificationItemWidget.modern.less deleted file mode 100644 index b6edb0df..00000000 --- a/Echo/modules/styles/mw.echo.ui.NotificationItemWidget.modern.less +++ /dev/null @@ -1,25 +0,0 @@ -/* stylelint-disable no-descending-specificity */ -#p-personal { - .mw-echo-ui-notificationItemWidget { - & a, - & a.new { - // Oh and double everything for :hover since Modern does that too. - &, - &:hover { - // In modern, the hover color is white, which is unhelpful. - color: #666; - text-decoration: none; - } - } - } - - // Override personal tools padding for links - li .mw-echo-state a { - padding: 0; - } - - .mw-echo-ui-notificationBadgeButtonPopupWidget-footer a { - color: #666; - } -} -/* stylelint-enable no-descending-specificity */ diff --git a/Echo/modules/styles/mw.echo.ui.NotificationsInboxWidget.less b/Echo/modules/styles/mw.echo.ui.NotificationsInboxWidget.less index 618804b6..19219710 100644 --- a/Echo/modules/styles/mw.echo.ui.NotificationsInboxWidget.less +++ b/Echo/modules/styles/mw.echo.ui.NotificationsInboxWidget.less @@ -1,4 +1,5 @@ -@import '../echo.variables'; +@import '../echo.variables.less'; + .mw-echo-ui-notificationsInboxWidget { display: table; width: 100%; @@ -25,6 +26,7 @@ &-cell { display: table-cell; vertical-align: middle; + &-placeholder { display: table-cell; width: 100%; @@ -41,6 +43,7 @@ display: none; } } + &-main { vertical-align: top; @@ -50,6 +53,14 @@ width: 100%; } + &-readState { + display: inline-block; + + .mw-echo-ui-readStateButtonSelectWidget { + white-space: nowrap; + } + } + &-settings { padding-left: 1em; } @@ -70,14 +81,17 @@ text-align: center; } } + &-readState { display: inline-block; } + &-settings, &-pagination { display: inline-block; margin-top: 1em; } + &-settings { .oo-ui-popupWidget-popup { text-align: left; @@ -85,6 +99,7 @@ } } } + &-toolbarWrapper { height: 7em; } diff --git a/Echo/modules/styles/mw.echo.ui.NotificationsListWidget.less b/Echo/modules/styles/mw.echo.ui.NotificationsListWidget.less index ced6f2db..3a79558f 100644 --- a/Echo/modules/styles/mw.echo.ui.NotificationsListWidget.less +++ b/Echo/modules/styles/mw.echo.ui.NotificationsListWidget.less @@ -1,4 +1,4 @@ -@import '../echo.variables'; +@import '../echo.variables.less'; .mw-echo-ui-notificationsListWidget { .mw-echo-ui-notificationsListWidget-bundle & { diff --git a/Echo/modules/styles/mw.echo.ui.NotificationsListWidget.monobook.less b/Echo/modules/styles/mw.echo.ui.NotificationsListWidget.monobook.less deleted file mode 100644 index df796f2b..00000000 --- a/Echo/modules/styles/mw.echo.ui.NotificationsListWidget.monobook.less +++ /dev/null @@ -1,4 +0,0 @@ -.mw-echo-ui-notificationsListWidget { - text-align: left; - text-transform: none; -} diff --git a/Echo/modules/styles/mw.echo.ui.PageFilterWidget.less b/Echo/modules/styles/mw.echo.ui.PageFilterWidget.less index ec60bc63..47eb7ac4 100644 --- a/Echo/modules/styles/mw.echo.ui.PageFilterWidget.less +++ b/Echo/modules/styles/mw.echo.ui.PageFilterWidget.less @@ -1,4 +1,5 @@ -@import '../echo.variables'; +@import '../echo.variables.less'; + .mw-echo-ui-pageFilterWidget { margin-top: 2 * @specialpage-separation-unit; diff --git a/Echo/modules/styles/mw.echo.ui.PageNotificationsOptionWidget.less b/Echo/modules/styles/mw.echo.ui.PageNotificationsOptionWidget.less index 304c0feb..44d51b45 100644 --- a/Echo/modules/styles/mw.echo.ui.PageNotificationsOptionWidget.less +++ b/Echo/modules/styles/mw.echo.ui.PageNotificationsOptionWidget.less @@ -1,5 +1,5 @@ -@import 'mediawiki.mixins'; -@import '../echo.variables'; +@import 'mediawiki.mixins.less'; +@import '../echo.variables.less'; .mw-echo-ui-pageNotificationsOptionWidget { clear: both; @@ -11,7 +11,7 @@ &-highlighted { background-color: #eaecf0; - color: @color-base-active; + color: @color-base--active; } &-selected { @@ -55,11 +55,10 @@ &-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 ); + // Truncate text with ellipsis. + .text-overflow( @visible: false ); } } @@ -72,7 +71,7 @@ color: @grey-medium; padding: 0.2em 0.5em; margin-left: 0.5em; - border-radius: 2px; + border-radius: @border-radius-base; white-space: nowrap; .oo-ui-optionWidget-selected & { diff --git a/Echo/modules/styles/mw.echo.ui.PaginationWidget.less b/Echo/modules/styles/mw.echo.ui.PaginationWidget.less index a88f9bb4..930064f3 100644 --- a/Echo/modules/styles/mw.echo.ui.PaginationWidget.less +++ b/Echo/modules/styles/mw.echo.ui.PaginationWidget.less @@ -12,6 +12,10 @@ vertical-align: middle; } + &-direction { + white-space: nowrap; + } + &-label { padding: 0 0.5em; white-space: nowrap; diff --git a/Echo/modules/styles/mw.echo.ui.PlaceholderItemWidget.less b/Echo/modules/styles/mw.echo.ui.PlaceholderItemWidget.less index 7ea644e4..b33b459e 100644 --- a/Echo/modules/styles/mw.echo.ui.PlaceholderItemWidget.less +++ b/Echo/modules/styles/mw.echo.ui.PlaceholderItemWidget.less @@ -1,4 +1,5 @@ -@import '../echo.variables'; +@import '../echo.variables.less'; + .mw-echo-ui-placeholderItemWidget { padding: 2em; background-color: @notification-background-read; diff --git a/Echo/modules/styles/mw.echo.ui.SpecialHelpMenuWidget.less b/Echo/modules/styles/mw.echo.ui.SpecialHelpMenuWidget.less index de1fcd1b..27820f40 100644 --- a/Echo/modules/styles/mw.echo.ui.SpecialHelpMenuWidget.less +++ b/Echo/modules/styles/mw.echo.ui.SpecialHelpMenuWidget.less @@ -1,4 +1,4 @@ -@import '../echo.variables'; +@import '../echo.variables.less'; .mw-echo-ui-specialHelpMenuWidget-menu { a.oo-ui-menuOptionWidget { diff --git a/Echo/modules/styles/mw.echo.ui.SubGroupListWidget.less b/Echo/modules/styles/mw.echo.ui.SubGroupListWidget.less index 083efbfa..1779e2ec 100644 --- a/Echo/modules/styles/mw.echo.ui.SubGroupListWidget.less +++ b/Echo/modules/styles/mw.echo.ui.SubGroupListWidget.less @@ -1,7 +1,6 @@ -@import '../echo.variables'; +@import '../echo.variables.less'; .mw-echo-ui-subGroupListWidget { - &:not( :first-child ) { padding-top: @bundle-group-padding; } diff --git a/Echo/modules/styles/mw.echo.ui.ToggleReadCircleButtonWidget.less b/Echo/modules/styles/mw.echo.ui.ToggleReadCircleButtonWidget.less index ecee6410..96582329 100644 --- a/Echo/modules/styles/mw.echo.ui.ToggleReadCircleButtonWidget.less +++ b/Echo/modules/styles/mw.echo.ui.ToggleReadCircleButtonWidget.less @@ -1,5 +1,5 @@ -@import 'mediawiki.mixins'; -@import '../echo.variables'; +@import 'mediawiki.mixins.less'; +@import '../echo.variables.less'; .mw-echo-ui-toggleReadCircleButtonWidget { &-circle { diff --git a/Echo/modules/styles/mw.echo.ui.mobile.less b/Echo/modules/styles/mw.echo.ui.mobile.less new file mode 100644 index 00000000..54b9562f --- /dev/null +++ b/Echo/modules/styles/mw.echo.ui.mobile.less @@ -0,0 +1,19 @@ +@import 'mediawiki.ui/variables'; + +// `!important` rules override the inline styles provides by clippable. +@media all and ( max-width: @width-breakpoint-tablet ) { + .mw-echo-ui-overlay { + .oo-ui-clippableElement-clippable { + width: 100% !important; + } + + .oo-ui-popupWidget-popup { + width: 100% !important; + } + + .mw-echo-ui-notificationBadgeButtonPopupWidget-popup { + left: 1px !important; + right: 2px; + } + } +} diff --git a/Echo/modules/styles/mw.echo.ui.overlay.minerva.less b/Echo/modules/styles/mw.echo.ui.overlay.minerva.less index 27177f7c..95d1817a 100644 --- a/Echo/modules/styles/mw.echo.ui.overlay.minerva.less +++ b/Echo/modules/styles/mw.echo.ui.overlay.minerva.less @@ -1,4 +1,15 @@ -/* In mobile, overlay is positioned at the bottom */ +@import 'mediawiki.ui/variables'; + +@media all and ( max-width: @width-breakpoint-tablet ) { + // On mobile screens position the anchor arrow correctly so it points to the + // notifications badge. + .mw-echo-ui-overlay .oo-ui-popupWidget-anchor { + // Override the inline style. + left: auto !important; + right: 68px; + } +} + .mw-echo-ui-overlay { position: fixed; bottom: 0; @@ -23,4 +34,3 @@ top: auto !important; } } - diff --git a/Echo/modules/ui/mw.echo.ui.ActionMenuPopupWidget.js b/Echo/modules/ui/mw.echo.ui.ActionMenuPopupWidget.js index 9d0a81de..c3e287a5 100644 --- a/Echo/modules/ui/mw.echo.ui.ActionMenuPopupWidget.js +++ b/Echo/modules/ui/mw.echo.ui.ActionMenuPopupWidget.js @@ -1,4 +1,4 @@ -( function ( mw ) { +( function () { /** * Action menu popup widget for echo items. * @@ -18,7 +18,8 @@ * @param {Object} [config] Configuration object * @cfg {jQuery} [$overlay] A jQuery element functioning as an overlay * for popups. - * @cfg {number} [menuWidth=300] The width of the popup menu + * @cfg {Object} [horizontalPosition='auto'] How to position the menu, see OO.ui.FloatableElement. + * By default, 'start' will be tried first, and if that doesn't fit, 'end' will be used. */ mw.echo.ui.ActionMenuPopupWidget = function MwEchoUiActionMenuPopupWidget( config ) { config = config || {}; @@ -28,14 +29,14 @@ this.$overlay = config.$overlay || this.$element; - this.menuWidth = config.menuWidth || 300; - // Menu - this.menu = new OO.ui.MenuSelectWidget( { + this.customMenuPosition = ( config.horizontalPosition || 'auto' ) !== 'auto'; + this.menu = new OO.ui.MenuSelectWidget( $.extend( { $floatableContainer: this.$element, + horizontalPosition: this.customMenuPosition ? config.horizontalPosition : 'start', classes: [ 'mw-echo-ui-actionMenuPopupWidget-menu' ], widget: this - } ); + } ) ); this.$overlay.append( this.menu.$element ); // Events @@ -60,14 +61,14 @@ * @private */ mw.echo.ui.ActionMenuPopupWidget.prototype.onAction = function () { + // HACK: If config.horizontalPosition isn't set, first try 'start', then 'end' + if ( !this.customMenuPosition ) { + this.menu.setHorizontalPosition( 'start' ); + } this.menu.toggle(); - // HACK: The menu is attempting to be the same size as the container, - // which in our case is not the point at all. We need the menu - // to be larger, so force this setting: - this.menu.$element.css( 'width', this.menuWidth ); - // HACK: Prevent ClippableElement from overwriting this width value on scroll - // or window resize - this.menu.toggleClipping( false ); + if ( !this.customMenuPosition && this.menu.isClipped() ) { + this.menu.setHorizontalPosition( 'end' ); + } }; /** @@ -86,4 +87,4 @@ mw.echo.ui.ActionMenuPopupWidget.prototype.getMenu = function () { return this.menu; }; -}( mediaWiki ) ); +}() ); diff --git a/Echo/modules/ui/mw.echo.ui.BadgeLinkWidget.js b/Echo/modules/ui/mw.echo.ui.BadgeLinkWidget.js index 9eb67e6e..ed1cf4c5 100644 --- a/Echo/modules/ui/mw.echo.ui.BadgeLinkWidget.js +++ b/Echo/modules/ui/mw.echo.ui.BadgeLinkWidget.js @@ -1,4 +1,4 @@ -( function ( mw, $ ) { +( function () { /** * Notification badge button widget for echo popup. * @@ -35,6 +35,13 @@ if ( config.href !== undefined && OO.ui.isSafeUrl( config.href ) ) { this.$element.attr( 'href', config.href ); } + if ( this.type === 'alert' ) { + this.$element + .addClass( 'oo-ui-icon-bell' ); + } else { + this.$element + .addClass( 'oo-ui-icon-tray' ); + } }; OO.inheritClass( mw.echo.ui.BadgeLinkWidget, OO.ui.Widget ); @@ -75,4 +82,4 @@ mw.hook( 'ext.echo.badge.countChange' ).fire( this.type, this.count, convertedNumber ); } }; -}( mediaWiki, jQuery ) ); +}() ); diff --git a/Echo/modules/ui/mw.echo.ui.BundleNotificationItemWidget.js b/Echo/modules/ui/mw.echo.ui.BundleNotificationItemWidget.js index bdd07e06..b3c4c9af 100644 --- a/Echo/modules/ui/mw.echo.ui.BundleNotificationItemWidget.js +++ b/Echo/modules/ui/mw.echo.ui.BundleNotificationItemWidget.js @@ -1,4 +1,4 @@ -( function ( mw, $ ) { +( function () { /** * Bundle notification item widget. * This widget is expandable and displays @@ -189,8 +189,11 @@ this.expanded = show !== undefined ? !!show : !this.expanded; if ( show ) { + // FIXME: Use CSS transition + // eslint-disable-next-line no-jquery/no-slide this.getList().$element.slideDown(); } else { + // eslint-disable-next-line no-jquery/no-slide this.getList().$element.slideUp(); } }; @@ -219,4 +222,4 @@ mw.echo.ui.BundleNotificationItemWidget.prototype.getList = function () { return this.listWidget; }; -}( mediaWiki, jQuery ) ); +}() ); diff --git a/Echo/modules/ui/mw.echo.ui.ClonedNotificationItemWidget.js b/Echo/modules/ui/mw.echo.ui.ClonedNotificationItemWidget.js index 37046c7e..057638db 100644 --- a/Echo/modules/ui/mw.echo.ui.ClonedNotificationItemWidget.js +++ b/Echo/modules/ui/mw.echo.ui.ClonedNotificationItemWidget.js @@ -1,4 +1,4 @@ -( function ( mw ) { +( function () { /* global moment:false */ /** * A wrapper widget for a fake, cloned notification. This is used @@ -84,4 +84,4 @@ mw.echo.ui.ClonedNotificationItemWidget.prototype.resetInitiallyUnseen = function () { }; -}( mediaWiki ) ); +}() ); diff --git a/Echo/modules/ui/mw.echo.ui.ConfirmationPopupWidget.js b/Echo/modules/ui/mw.echo.ui.ConfirmationPopupWidget.js index e44354a8..6541dae4 100644 --- a/Echo/modules/ui/mw.echo.ui.ConfirmationPopupWidget.js +++ b/Echo/modules/ui/mw.echo.ui.ConfirmationPopupWidget.js @@ -1,4 +1,4 @@ -( function ( mw, $ ) { +( function () { /** * Confirmation overlay widget, especially for mobile display. * The behavior of this widget is to appear with a given confirmation @@ -56,6 +56,8 @@ * @private */ mw.echo.ui.ConfirmationPopupWidget.prototype.hide = function () { + // FIXME: Use CSS transition + // eslint-disable-next-line no-jquery/no-fade this.$element.fadeOut(); }; @@ -68,4 +70,4 @@ 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 d96a5a65..4936780e 100644 --- a/Echo/modules/ui/mw.echo.ui.CrossWikiNotificationItemWidget.js +++ b/Echo/modules/ui/mw.echo.ui.CrossWikiNotificationItemWidget.js @@ -1,4 +1,4 @@ -( function ( mw, $ ) { +( function () { /** * Cross-wiki notification item widget. * This widget is expandable and displays groups of @@ -311,8 +311,11 @@ this.$element.toggleClass( 'mw-echo-ui-crossWikiNotificationItemWidget-expanded', this.expanded ); if ( this.expanded ) { + // FIXME: Use CSS transition + // eslint-disable-next-line no-jquery/no-slide this.getList().$element.slideDown(); } else { + // eslint-disable-next-line no-jquery/no-slide this.getList().$element.slideUp(); } }; @@ -327,8 +330,8 @@ this.expanded ? mw.msg( 'notification-link-text-collapse-all' ) : // Messages that appear here are: - // notification-link-text-expand-alert-count - // notification-link-text-expand-notice-count + // * notification-link-text-expand-alert-count + // * notification-link-text-expand-notice-count mw.msg( 'notification-link-text-expand-' + ( type === 'message' ? 'notice' : type ) + @@ -351,4 +354,4 @@ mw.echo.ui.CrossWikiNotificationItemWidget.prototype.getList = function () { return this.listWidget; }; -}( mediaWiki, jQuery ) ); +}() ); diff --git a/Echo/modules/ui/mw.echo.ui.CrossWikiUnreadFilterWidget.js b/Echo/modules/ui/mw.echo.ui.CrossWikiUnreadFilterWidget.js index 02807150..812d8799 100644 --- a/Echo/modules/ui/mw.echo.ui.CrossWikiUnreadFilterWidget.js +++ b/Echo/modules/ui/mw.echo.ui.CrossWikiUnreadFilterWidget.js @@ -1,4 +1,4 @@ -( function ( $, mw ) { +( function () { /** * A filter for cross-wiki unread notifications * @@ -170,4 +170,4 @@ this.setItemSelected( item ); }; -}( jQuery, mediaWiki ) ); +}() ); diff --git a/Echo/modules/ui/mw.echo.ui.DatedNotificationsWidget.js b/Echo/modules/ui/mw.echo.ui.DatedNotificationsWidget.js index 09c5c5c9..f7f7627b 100644 --- a/Echo/modules/ui/mw.echo.ui.DatedNotificationsWidget.js +++ b/Echo/modules/ui/mw.echo.ui.DatedNotificationsWidget.js @@ -1,4 +1,4 @@ -( function ( $, mw ) { +( function () { /** * A notifications list organized and separated by dates * @@ -176,4 +176,4 @@ return count; }; -}( jQuery, mediaWiki ) ); +}() ); diff --git a/Echo/modules/ui/mw.echo.ui.DatedSubGroupListWidget.js b/Echo/modules/ui/mw.echo.ui.DatedSubGroupListWidget.js index 4cbbc08a..e56e7546 100644 --- a/Echo/modules/ui/mw.echo.ui.DatedSubGroupListWidget.js +++ b/Echo/modules/ui/mw.echo.ui.DatedSubGroupListWidget.js @@ -1,4 +1,4 @@ -( function ( mw, $ ) { +( function () { /* global moment:false */ /** * A sub group widget that displays notifications divided by dates. @@ -62,4 +62,4 @@ /* Initialization */ OO.inheritClass( mw.echo.ui.DatedSubGroupListWidget, mw.echo.ui.SubGroupListWidget ); -}( mediaWiki, jQuery ) ); +}() ); diff --git a/Echo/modules/ui/mw.echo.ui.FooterNoticeWidget.js b/Echo/modules/ui/mw.echo.ui.FooterNoticeWidget.js index 185c3aec..812df064 100644 --- a/Echo/modules/ui/mw.echo.ui.FooterNoticeWidget.js +++ b/Echo/modules/ui/mw.echo.ui.FooterNoticeWidget.js @@ -1,4 +1,4 @@ -( function ( mw, $ ) { +( function () { /** * Footer notice widget. * @@ -77,4 +77,4 @@ this.toggle( false ); this.emit( 'dismiss' ); }; -}( mediaWiki, jQuery ) ); +}() ); diff --git a/Echo/modules/ui/mw.echo.ui.MenuItemWidget.js b/Echo/modules/ui/mw.echo.ui.MenuItemWidget.js index 2a7785e4..810d8ce4 100644 --- a/Echo/modules/ui/mw.echo.ui.MenuItemWidget.js +++ b/Echo/modules/ui/mw.echo.ui.MenuItemWidget.js @@ -1,4 +1,4 @@ -( function ( mw ) { +( function () { /** * Secondary menu item * @@ -124,4 +124,4 @@ mw.echo.ui.MenuItemWidget.prototype.isDynamicAction = function () { return this.dynamic; }; -}( mediaWiki ) ); +}() ); diff --git a/Echo/modules/ui/mw.echo.ui.NotificationBadgeWidget.js b/Echo/modules/ui/mw.echo.ui.NotificationBadgeWidget.js index a07fa118..50067145 100644 --- a/Echo/modules/ui/mw.echo.ui.NotificationBadgeWidget.js +++ b/Echo/modules/ui/mw.echo.ui.NotificationBadgeWidget.js @@ -1,4 +1,4 @@ -( function ( mw, $ ) { +( function () { /** * Notification badge button widget for echo popup. * @@ -65,8 +65,8 @@ numItems: this.numItems, flags: buttonFlags, // The following messages can be used here: - // tooltip-pt-notifications-alert - // tooltip-pt-notifications-notice + // * tooltip-pt-notifications-alert + // * tooltip-pt-notifications-notice title: mw.msg( 'tooltip-pt-notifications-' + adjustedTypeString ), href: config.href } ); @@ -89,6 +89,7 @@ href: links.notifications, classes: [ 'mw-echo-ui-notificationBadgeButtonPopupWidget-footer-allnotifs' ] } ); + allNotificationsButton.$element.children().first().removeAttr( 'role' ); preferencesButton = new OO.ui.ButtonWidget( { icon: 'settings', @@ -96,6 +97,7 @@ href: links.preferences, classes: [ 'mw-echo-ui-notificationBadgeButtonPopupWidget-footer-preferences' ] } ); + preferencesButton.$element.children().first().removeAttr( 'role' ); footerButtonGroupWidget = new OO.ui.ButtonGroupWidget( { items: [ allNotificationsButton, preferencesButton ], @@ -119,8 +121,8 @@ $autoCloseIgnore: this.$element.add( this.$menuOverlay ), head: true, // The following messages can be used here: - // echo-notification-alert-text-only - // echo-notification-notice-text-only + // * echo-notification-alert-text-only + // * echo-notification-notice-text-only label: mw.msg( 'echo-notification-' + adjustedTypeString + '-text-only' @@ -165,8 +167,8 @@ this.$element .prop( 'id', 'pt-notifications-' + adjustedTypeString ) // The following classes can be used here: - // mw-echo-ui-notificationBadgeButtonPopupWidget-alert - // mw-echo-ui-notificationBadgeButtonPopupWidget-message + // * mw-echo-ui-notificationBadgeButtonPopupWidget-alert + // * mw-echo-ui-notificationBadgeButtonPopupWidget-message .addClass( 'mw-echo-ui-notificationBadgeButtonPopupWidget ' + 'mw-echo-ui-notificationBadgeButtonPopupWidget-' + adjustedTypeString @@ -240,7 +242,6 @@ unreadCount = this.manager.getUnreadCounter().getCount(); cappedUnreadCount = this.manager.getUnreadCounter().getCappedNotificationCount( unreadCount ); - cappedUnreadCount = mw.language.convertNumber( cappedUnreadCount ); badgeLabel = mw.message( 'echo-badge-count', mw.language.convertNumber( cappedUnreadCount ) ).text(); this.badgeButton.setLabel( badgeLabel ); @@ -345,4 +346,4 @@ } ); this.hasRunFirstTime = true; }; -}( mediaWiki, jQuery ) ); +}() ); diff --git a/Echo/modules/ui/mw.echo.ui.NotificationItemWidget.js b/Echo/modules/ui/mw.echo.ui.NotificationItemWidget.js index fce6fb52..a31f3d46 100644 --- a/Echo/modules/ui/mw.echo.ui.NotificationItemWidget.js +++ b/Echo/modules/ui/mw.echo.ui.NotificationItemWidget.js @@ -1,4 +1,4 @@ -( function ( mw, $ ) { +( function () { /* global moment:false */ /** * A base widget for displaying notification items. @@ -47,7 +47,11 @@ if ( this.model.getIconURL() ) { $icon = $( '<div>' ) .addClass( 'mw-echo-ui-notificationItemWidget-icon' ) - .append( $( '<img>' ).attr( 'src', this.model.getIconURL() ) ); + .append( $( '<img>' ).attr( { + src: this.model.getIconURL(), + role: 'presentation', + alt: ' ' + } ) ); } // Content @@ -73,7 +77,8 @@ // Actions menu this.actionsButtonSelectWidget = new OO.ui.ButtonSelectWidget( { - classes: [ 'mw-echo-ui-notificationItemWidget-content-actions-buttons' ] + classes: [ 'mw-echo-ui-notificationItemWidget-content-actions-buttons' ], + tabIndex: -1 } ); // Popup menu @@ -81,7 +86,7 @@ framed: false, icon: 'ellipsis', $overlay: this.$overlay, - menuWidth: 200, + horizontalPosition: this.bundle ? 'end' : 'auto', title: mw.msg( 'echo-notification-more-options-tooltip' ), classes: [ 'mw-echo-ui-notificationItemWidget-content-actions-menu' ] } ); @@ -157,6 +162,7 @@ // Limit to 2 items outside the menu if ( isOutsideMenu ) { this.actionsButtonSelectWidget.addItems( [ linkButton ] ); + this.actionsButtonSelectWidget.setTabIndex( 0 ); outsideMenuItemCounter++; } else { this.menuPopupButtonWidget.getMenu().addItems( [ linkButton ] ); @@ -430,4 +436,4 @@ mw.echo.ui.NotificationItemWidget.prototype.isFake = function () { return false; }; -}( mediaWiki, jQuery ) ); +}() ); diff --git a/Echo/modules/ui/mw.echo.ui.NotificationsInboxWidget.js b/Echo/modules/ui/mw.echo.ui.NotificationsInboxWidget.js index 2c1a93e7..57e08328 100644 --- a/Echo/modules/ui/mw.echo.ui.NotificationsInboxWidget.js +++ b/Echo/modules/ui/mw.echo.ui.NotificationsInboxWidget.js @@ -1,4 +1,4 @@ -( function ( $, mw ) { +( function () { /** * An inbox-type widget that encompases a dated notifications list with pagination * @@ -11,7 +11,6 @@ * @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 */ @@ -68,7 +67,6 @@ this.manager, { framed: true, - helpLink: config.helpLink, prefLink: config.prefLink, $overlay: this.$overlay } @@ -323,4 +321,4 @@ this.datedListWidget.toggle( !displayMessage ); }; -}( jQuery, mediaWiki ) ); +}() ); diff --git a/Echo/modules/ui/mw.echo.ui.NotificationsListWidget.js b/Echo/modules/ui/mw.echo.ui.NotificationsListWidget.js index de08252e..c0f4e918 100644 --- a/Echo/modules/ui/mw.echo.ui.NotificationsListWidget.js +++ b/Echo/modules/ui/mw.echo.ui.NotificationsListWidget.js @@ -1,4 +1,4 @@ -( function ( mw, $ ) { +( function () { /** * Notifications list widget. * All of its items must be of the mw.echo.ui.NotificationItem type. @@ -243,4 +243,4 @@ itemWidgets[ i ].resetInitiallyUnseen(); } }; -}( mediaWiki, jQuery ) ); +}() ); diff --git a/Echo/modules/ui/mw.echo.ui.NotificationsWrapper.js b/Echo/modules/ui/mw.echo.ui.NotificationsWrapper.js index 45ceaa8d..ebf6b7c0 100644 --- a/Echo/modules/ui/mw.echo.ui.NotificationsWrapper.js +++ b/Echo/modules/ui/mw.echo.ui.NotificationsWrapper.js @@ -1,4 +1,4 @@ -( function ( mw ) { +( function () { /** * Wrapper for the notifications widget, for view outside the popup. * @@ -82,4 +82,4 @@ widget.promiseRunning = false; } ); }; -}( mediaWiki ) ); +}() ); diff --git a/Echo/modules/ui/mw.echo.ui.PageFilterWidget.js b/Echo/modules/ui/mw.echo.ui.PageFilterWidget.js index cfe89bea..3d7940eb 100644 --- a/Echo/modules/ui/mw.echo.ui.PageFilterWidget.js +++ b/Echo/modules/ui/mw.echo.ui.PageFilterWidget.js @@ -1,4 +1,4 @@ -( function ( $, mw ) { +( function () { /** * A widget that displays wikis and their pages to choose a filter * @@ -43,7 +43,8 @@ // Initialization this.populateDataFromModel(); this.$element - .addClass( 'mw-echo-ui-pageFilterWidget' ); + .addClass( 'mw-echo-ui-pageFilterWidget' ) + .attr( 'aria-label', mw.message( 'echo-specialpage-pagefilterwidget-aria-label' ).text() ); }; /* Initialization */ @@ -153,4 +154,4 @@ mw.echo.ui.PageFilterWidget.prototype.sortingFunction = function ( item, otherItem ) { return Number( otherItem.getCount() ) - Number( item.getCount() ); }; -}( jQuery, mediaWiki ) ); +}() ); diff --git a/Echo/modules/ui/mw.echo.ui.PageNotificationsOptionWidget.js b/Echo/modules/ui/mw.echo.ui.PageNotificationsOptionWidget.js index d87f0106..21116106 100644 --- a/Echo/modules/ui/mw.echo.ui.PageNotificationsOptionWidget.js +++ b/Echo/modules/ui/mw.echo.ui.PageNotificationsOptionWidget.js @@ -1,4 +1,4 @@ -( function ( $, mw ) { +( function () { /** * An option widget for the page filter in PageFilterWidget * @@ -104,4 +104,4 @@ return this; }; -}( jQuery, mediaWiki ) ); +}() ); diff --git a/Echo/modules/ui/mw.echo.ui.PaginationWidget.js b/Echo/modules/ui/mw.echo.ui.PaginationWidget.js index fdfedde7..2e498ae4 100644 --- a/Echo/modules/ui/mw.echo.ui.PaginationWidget.js +++ b/Echo/modules/ui/mw.echo.ui.PaginationWidget.js @@ -1,4 +1,4 @@ -( function ( $, mw ) { +( function () { /** * A pagination widget allowing the user to go forward, backwards, * and after a couple of pages, go back to home. @@ -127,7 +127,6 @@ this.labelWidget.toggle( !this.isDisabled() ); }; - // eslint-disable-next-line valid-jsdoc /** * Set the 'disabled' state of the widget. * @@ -176,4 +175,4 @@ this.labelWidget.setLabel( label ); }; -}( jQuery, mediaWiki ) ); +}() ); diff --git a/Echo/modules/ui/mw.echo.ui.PlaceholderItemWidget.js b/Echo/modules/ui/mw.echo.ui.PlaceholderItemWidget.js index 31ab206d..9165e4c8 100644 --- a/Echo/modules/ui/mw.echo.ui.PlaceholderItemWidget.js +++ b/Echo/modules/ui/mw.echo.ui.PlaceholderItemWidget.js @@ -1,4 +1,4 @@ -( function ( mw, $ ) { +( function () { /** * Placeholder notification option widget for echo popup. * @@ -89,4 +89,4 @@ */ mw.echo.ui.PlaceholderItemWidget.prototype.resetInitiallyUnseen = function () {}; -}( mediaWiki, jQuery ) ); +}() ); diff --git a/Echo/modules/ui/mw.echo.ui.ReadStateButtonSelectWidget.js b/Echo/modules/ui/mw.echo.ui.ReadStateButtonSelectWidget.js index 09a01bff..56a221bd 100644 --- a/Echo/modules/ui/mw.echo.ui.ReadStateButtonSelectWidget.js +++ b/Echo/modules/ui/mw.echo.ui.ReadStateButtonSelectWidget.js @@ -1,4 +1,4 @@ -( function ( $, mw ) { +( function () { /** * A select widget for notification read state: 'all', 'read' or 'unread' * @@ -59,4 +59,4 @@ this.emit( 'filter', data ); } }; -}( jQuery, mediaWiki ) ); +}() ); diff --git a/Echo/modules/ui/mw.echo.ui.SingleNotificationItemWidget.js b/Echo/modules/ui/mw.echo.ui.SingleNotificationItemWidget.js index e82ae161..405ccd18 100644 --- a/Echo/modules/ui/mw.echo.ui.SingleNotificationItemWidget.js +++ b/Echo/modules/ui/mw.echo.ui.SingleNotificationItemWidget.js @@ -1,4 +1,4 @@ -( function ( mw ) { +( function () { /** * Single notification item widget for echo popup. * @@ -98,4 +98,4 @@ this.toggleRead( this.model.isRead() ); this.toggleSeen( this.model.isSeen() ); }; -}( mediaWiki ) ); +}() ); diff --git a/Echo/modules/ui/mw.echo.ui.SortedListWidget.js b/Echo/modules/ui/mw.echo.ui.SortedListWidget.js index 13a4d808..4f1a5cd5 100644 --- a/Echo/modules/ui/mw.echo.ui.SortedListWidget.js +++ b/Echo/modules/ui/mw.echo.ui.SortedListWidget.js @@ -1,4 +1,4 @@ -( function ( mw ) { +( function () { /** * Sorted list widget. This is a group widget that sorts its items * according to a given sorting callback. @@ -83,10 +83,13 @@ this.addItems( fakeWidget ); // fade out fake + // FIXME: Use CSS transition + // eslint-disable-next-line no-jquery/no-fade fakeWidget.$element.fadeOut( 400, function () { // remove fake widget.removeItems( fakeWidget ); // fade-in real item + // eslint-disable-next-line no-jquery/no-fade item.$element.fadeIn( 400 ); } ); } else { @@ -150,7 +153,6 @@ return null; }; - // eslint-disable-next-line valid-jsdoc /** * Remove items. * @@ -241,7 +243,6 @@ } }; - // eslint-disable-next-line valid-jsdoc /** * Clear all items * @@ -277,4 +278,4 @@ ); }; -}( mediaWiki ) ); +}() ); diff --git a/Echo/modules/ui/mw.echo.ui.SpecialHelpMenuWidget.js b/Echo/modules/ui/mw.echo.ui.SpecialHelpMenuWidget.js index d2ae205c..786c0150 100644 --- a/Echo/modules/ui/mw.echo.ui.SpecialHelpMenuWidget.js +++ b/Echo/modules/ui/mw.echo.ui.SpecialHelpMenuWidget.js @@ -1,21 +1,20 @@ -( function ( $, mw ) { +( function () { /** * Widget for the settings menu in the Special:Notifications page * * @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 handle; - config = config || {}; // Parent constructor mw.echo.ui.SpecialHelpMenuWidget.super.call( this, $.extend( { - // Icon and indicator set on handle button instead - indicator: '', + icon: 'settings', + label: mw.msg( 'echo-specialpage-special-help-menu-widget-aria-label' ), + indicator: 'down', + invisibleLabel: true, menu: { classes: [ 'mw-echo-ui-specialHelpMenuWidget-menu' ], horizontalPosition: 'end', @@ -23,15 +22,6 @@ } }, 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.markAllReadOption = new OO.ui.MenuOptionWidget( { @@ -55,19 +45,6 @@ ] ); } - if ( config.helpLink ) { - this.menu.addItems( [ - // Help link - new OO.ui.MenuOptionWidget( { - // Use link for accessibility - $element: $( '<a>' ).attr( 'href', config.helpLink ), - icon: 'help', - label: mw.msg( 'echo-learn-more' ), - data: { href: config.helpLink } - } ) - ] ); - } - // Events this.manager.connect( this, { localCountChange: 'onLocalCountChange' @@ -80,7 +57,7 @@ /* Initialization */ - OO.inheritClass( mw.echo.ui.SpecialHelpMenuWidget, OO.ui.DropdownWidget ); + OO.inheritClass( mw.echo.ui.SpecialHelpMenuWidget, OO.ui.ButtonMenuSelectWidget ); /* Events */ @@ -97,7 +74,6 @@ */ mw.echo.ui.SpecialHelpMenuWidget.prototype.onSourcePageUpdate = function () { this.markAllReadOption.setLabel( this.getMarkAllReadOptionLabel() ); - }; /** @@ -110,7 +86,7 @@ }; /** - * Handle dropdown menu choose events + * Handle menu choose events * * @param {OO.ui.MenuOptionWidget} item Chosen item */ @@ -130,8 +106,6 @@ ); this.emit( 'markAllRead' ); } - // Clear selection so handle doesn't change - this.menu.selectItem(); }; /** @@ -149,4 +123,4 @@ mw.msg( 'echo-mark-all-as-read' ); }; -}( jQuery, mediaWiki ) ); +}() ); diff --git a/Echo/modules/ui/mw.echo.ui.SubGroupListWidget.js b/Echo/modules/ui/mw.echo.ui.SubGroupListWidget.js index 0f9503ee..3ec51055 100644 --- a/Echo/modules/ui/mw.echo.ui.SubGroupListWidget.js +++ b/Echo/modules/ui/mw.echo.ui.SubGroupListWidget.js @@ -1,4 +1,4 @@ -( function ( mw, $ ) { +( function () { /** * Sub group list widget. * This widget contains a list of notifications from a single source @@ -119,8 +119,9 @@ this.listWidget.$element ); + // eslint-disable-next-line no-jquery/no-global-selector this.$pageContentText = $( '#mw-content-text' ); - $( window ).resize( this.resizeHeader.bind( this ) ); + $( window ).on( 'resize', this.resizeHeader.bind( this ) ); // Resize the header after the stack finishes loading // so the widget is attached @@ -320,4 +321,4 @@ mw.echo.ui.SubGroupListWidget.prototype.getId = function () { return this.model.getName(); }; -}( mediaWiki, jQuery ) ); +}() ); diff --git a/Echo/modules/ui/mw.echo.ui.ToggleReadCircleButtonWidget.js b/Echo/modules/ui/mw.echo.ui.ToggleReadCircleButtonWidget.js index 6df684fe..9d32a10c 100644 --- a/Echo/modules/ui/mw.echo.ui.ToggleReadCircleButtonWidget.js +++ b/Echo/modules/ui/mw.echo.ui.ToggleReadCircleButtonWidget.js @@ -1,4 +1,4 @@ -( function ( mw, $ ) { +( function () { /** * A button showing a circle that represents either 'mark as read' or 'mark as unread' states. * @@ -50,4 +50,4 @@ mw.msg( 'echo-notification-markasunread' ) ); }; -}( mediaWiki, jQuery ) ); +}() ); diff --git a/Echo/modules/ui/mw.echo.ui.js b/Echo/modules/ui/mw.echo.ui.js index 12f39607..00f45316 100644 --- a/Echo/modules/ui/mw.echo.ui.js +++ b/Echo/modules/ui/mw.echo.ui.js @@ -1,7 +1,7 @@ -( function ( mw, $ ) { +( function () { mw.echo = mw.echo || {}; mw.echo.ui = { $overlay: $( '<div>' ) .addClass( 'mw-echo-ui-overlay' ) }; -}( mediaWiki, jQuery ) ); +}() ); diff --git a/Echo/package-lock.json b/Echo/package-lock.json new file mode 100644 index 00000000..37ad3236 --- /dev/null +++ b/Echo/package-lock.json @@ -0,0 +1,7395 @@ +{ + "name": "echo", + "version": "0.0.1", + "lockfileVersion": 1, + "requires": true, + "dependencies": { + "@babel/code-frame": { + "version": "7.10.3", + "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.10.3.tgz", + "integrity": "sha512-fDx9eNW0qz0WkUeqL6tXEXzVlPh6Y5aCDEZesl0xBGA8ndRukX91Uk44ZqnkECp01NAZUdCAl+aiQNGi0k88Eg==", + "dev": true, + "requires": { + "@babel/highlight": "^7.10.3" + } + }, + "@babel/core": { + "version": "7.10.3", + "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.10.3.tgz", + "integrity": "sha512-5YqWxYE3pyhIi84L84YcwjeEgS+fa7ZjK6IBVGTjDVfm64njkR2lfDhVR5OudLk8x2GK59YoSyVv+L/03k1q9w==", + "dev": true, + "requires": { + "@babel/code-frame": "^7.10.3", + "@babel/generator": "^7.10.3", + "@babel/helper-module-transforms": "^7.10.1", + "@babel/helpers": "^7.10.1", + "@babel/parser": "^7.10.3", + "@babel/template": "^7.10.3", + "@babel/traverse": "^7.10.3", + "@babel/types": "^7.10.3", + "convert-source-map": "^1.7.0", + "debug": "^4.1.0", + "gensync": "^1.0.0-beta.1", + "json5": "^2.1.2", + "lodash": "^4.17.13", + "resolve": "^1.3.2", + "semver": "^5.4.1", + "source-map": "^0.5.0" + }, + "dependencies": { + "debug": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.1.1.tgz", + "integrity": "sha512-pYAIzeRo8J6KPEaJ0VWOh5Pzkbw/RetuzehGM7QRRX5he4fPHx2rdKMB256ehJCkX+XRQm16eZLqLNS8RSZXZw==", + "dev": true, + "requires": { + "ms": "^2.1.1" + } + }, + "ms": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", + "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", + "dev": true + }, + "source-map": { + "version": "0.5.7", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz", + "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=", + "dev": true + } + } + }, + "@babel/generator": { + "version": "7.10.3", + "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.10.3.tgz", + "integrity": "sha512-drt8MUHbEqRzNR0xnF8nMehbY11b1SDkRw03PSNH/3Rb2Z35oxkddVSi3rcaak0YJQ86PCuE7Qx1jSFhbLNBMA==", + "dev": true, + "requires": { + "@babel/types": "^7.10.3", + "jsesc": "^2.5.1", + "lodash": "^4.17.13", + "source-map": "^0.5.0" + }, + "dependencies": { + "source-map": { + "version": "0.5.7", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz", + "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=", + "dev": true + } + } + }, + "@babel/helper-function-name": { + "version": "7.10.3", + "resolved": "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.10.3.tgz", + "integrity": "sha512-FvSj2aiOd8zbeqijjgqdMDSyxsGHaMt5Tr0XjQsGKHD3/1FP3wksjnLAWzxw7lvXiej8W1Jt47SKTZ6upQNiRw==", + "dev": true, + "requires": { + "@babel/helper-get-function-arity": "^7.10.3", + "@babel/template": "^7.10.3", + "@babel/types": "^7.10.3" + } + }, + "@babel/helper-get-function-arity": { + "version": "7.10.3", + "resolved": "https://registry.npmjs.org/@babel/helper-get-function-arity/-/helper-get-function-arity-7.10.3.tgz", + "integrity": "sha512-iUD/gFsR+M6uiy69JA6fzM5seno8oE85IYZdbVVEuQaZlEzMO2MXblh+KSPJgsZAUx0EEbWXU0yJaW7C9CdAVg==", + "dev": true, + "requires": { + "@babel/types": "^7.10.3" + } + }, + "@babel/helper-member-expression-to-functions": { + "version": "7.10.3", + "resolved": "https://registry.npmjs.org/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.10.3.tgz", + "integrity": "sha512-q7+37c4EPLSjNb2NmWOjNwj0+BOyYlssuQ58kHEWk1Z78K5i8vTUsteq78HMieRPQSl/NtpQyJfdjt3qZ5V2vw==", + "dev": true, + "requires": { + "@babel/types": "^7.10.3" + } + }, + "@babel/helper-module-imports": { + "version": "7.10.3", + "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.10.3.tgz", + "integrity": "sha512-Jtqw5M9pahLSUWA+76nhK9OG8nwYXzhQzVIGFoNaHnXF/r4l7kz4Fl0UAW7B6mqC5myoJiBP5/YQlXQTMfHI9w==", + "dev": true, + "requires": { + "@babel/types": "^7.10.3" + } + }, + "@babel/helper-module-transforms": { + "version": "7.10.1", + "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.10.1.tgz", + "integrity": "sha512-RLHRCAzyJe7Q7sF4oy2cB+kRnU4wDZY/H2xJFGof+M+SJEGhZsb+GFj5j1AD8NiSaVBJ+Pf0/WObiXu/zxWpFg==", + "dev": true, + "requires": { + "@babel/helper-module-imports": "^7.10.1", + "@babel/helper-replace-supers": "^7.10.1", + "@babel/helper-simple-access": "^7.10.1", + "@babel/helper-split-export-declaration": "^7.10.1", + "@babel/template": "^7.10.1", + "@babel/types": "^7.10.1", + "lodash": "^4.17.13" + } + }, + "@babel/helper-optimise-call-expression": { + "version": "7.10.3", + "resolved": "https://registry.npmjs.org/@babel/helper-optimise-call-expression/-/helper-optimise-call-expression-7.10.3.tgz", + "integrity": "sha512-kT2R3VBH/cnSz+yChKpaKRJQJWxdGoc6SjioRId2wkeV3bK0wLLioFpJROrX0U4xr/NmxSSAWT/9Ih5snwIIzg==", + "dev": true, + "requires": { + "@babel/types": "^7.10.3" + } + }, + "@babel/helper-replace-supers": { + "version": "7.10.1", + "resolved": "https://registry.npmjs.org/@babel/helper-replace-supers/-/helper-replace-supers-7.10.1.tgz", + "integrity": "sha512-SOwJzEfpuQwInzzQJGjGaiG578UYmyi2Xw668klPWV5n07B73S0a9btjLk/52Mlcxa+5AdIYqws1KyXRfMoB7A==", + "dev": true, + "requires": { + "@babel/helper-member-expression-to-functions": "^7.10.1", + "@babel/helper-optimise-call-expression": "^7.10.1", + "@babel/traverse": "^7.10.1", + "@babel/types": "^7.10.1" + } + }, + "@babel/helper-simple-access": { + "version": "7.10.1", + "resolved": "https://registry.npmjs.org/@babel/helper-simple-access/-/helper-simple-access-7.10.1.tgz", + "integrity": "sha512-VSWpWzRzn9VtgMJBIWTZ+GP107kZdQ4YplJlCmIrjoLVSi/0upixezHCDG8kpPVTBJpKfxTH01wDhh+jS2zKbw==", + "dev": true, + "requires": { + "@babel/template": "^7.10.1", + "@babel/types": "^7.10.1" + } + }, + "@babel/helper-split-export-declaration": { + "version": "7.10.1", + "resolved": "https://registry.npmjs.org/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.10.1.tgz", + "integrity": "sha512-UQ1LVBPrYdbchNhLwj6fetj46BcFwfS4NllJo/1aJsT+1dLTEnXJL0qHqtY7gPzF8S2fXBJamf1biAXV3X077g==", + "dev": true, + "requires": { + "@babel/types": "^7.10.1" + } + }, + "@babel/helper-validator-identifier": { + "version": "7.10.3", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.10.3.tgz", + "integrity": "sha512-bU8JvtlYpJSBPuj1VUmKpFGaDZuLxASky3LhaKj3bmpSTY6VWooSM8msk+Z0CZoErFye2tlABF6yDkT3FOPAXw==", + "dev": true + }, + "@babel/helpers": { + "version": "7.10.1", + "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.10.1.tgz", + "integrity": "sha512-muQNHF+IdU6wGgkaJyhhEmI54MOZBKsFfsXFhboz1ybwJ1Kl7IHlbm2a++4jwrmY5UYsgitt5lfqo1wMFcHmyw==", + "dev": true, + "requires": { + "@babel/template": "^7.10.1", + "@babel/traverse": "^7.10.1", + "@babel/types": "^7.10.1" + } + }, + "@babel/highlight": { + "version": "7.10.3", + "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.10.3.tgz", + "integrity": "sha512-Ih9B/u7AtgEnySE2L2F0Xm0GaM729XqqLfHkalTsbjXGyqmf/6M0Cu0WpvqueUlW+xk88BHw9Nkpj49naU+vWw==", + "dev": true, + "requires": { + "@babel/helper-validator-identifier": "^7.10.3", + "chalk": "^2.0.0", + "js-tokens": "^4.0.0" + }, + "dependencies": { + "ansi-styles": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", + "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", + "dev": true, + "requires": { + "color-convert": "^1.9.0" + } + }, + "chalk": { + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", + "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", + "dev": true, + "requires": { + "ansi-styles": "^3.2.1", + "escape-string-regexp": "^1.0.5", + "supports-color": "^5.3.0" + } + }, + "color-convert": { + "version": "1.9.3", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", + "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", + "dev": true, + "requires": { + "color-name": "1.1.3" + } + }, + "color-name": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", + "integrity": "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=", + "dev": true + }, + "has-flag": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", + "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=", + "dev": true + }, + "supports-color": { + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", + "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", + "dev": true, + "requires": { + "has-flag": "^3.0.0" + } + } + } + }, + "@babel/parser": { + "version": "7.10.3", + "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.10.3.tgz", + "integrity": "sha512-oJtNJCMFdIMwXGmx+KxuaD7i3b8uS7TTFYW/FNG2BT8m+fmGHoiPYoH0Pe3gya07WuFmM5FCDIr1x0irkD/hyA==", + "dev": true + }, + "@babel/template": { + "version": "7.10.3", + "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.10.3.tgz", + "integrity": "sha512-5BjI4gdtD+9fHZUsaxPHPNpwa+xRkDO7c7JbhYn2afvrkDu5SfAAbi9AIMXw2xEhO/BR35TqiW97IqNvCo/GqA==", + "dev": true, + "requires": { + "@babel/code-frame": "^7.10.3", + "@babel/parser": "^7.10.3", + "@babel/types": "^7.10.3" + } + }, + "@babel/traverse": { + "version": "7.10.3", + "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.10.3.tgz", + "integrity": "sha512-qO6623eBFhuPm0TmmrUFMT1FulCmsSeJuVGhiLodk2raUDFhhTECLd9E9jC4LBIWziqt4wgF6KuXE4d+Jz9yug==", + "dev": true, + "requires": { + "@babel/code-frame": "^7.10.3", + "@babel/generator": "^7.10.3", + "@babel/helper-function-name": "^7.10.3", + "@babel/helper-split-export-declaration": "^7.10.1", + "@babel/parser": "^7.10.3", + "@babel/types": "^7.10.3", + "debug": "^4.1.0", + "globals": "^11.1.0", + "lodash": "^4.17.13" + }, + "dependencies": { + "debug": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.1.1.tgz", + "integrity": "sha512-pYAIzeRo8J6KPEaJ0VWOh5Pzkbw/RetuzehGM7QRRX5he4fPHx2rdKMB256ehJCkX+XRQm16eZLqLNS8RSZXZw==", + "dev": true, + "requires": { + "ms": "^2.1.1" + } + }, + "globals": { + "version": "11.12.0", + "resolved": "https://registry.npmjs.org/globals/-/globals-11.12.0.tgz", + "integrity": "sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA==", + "dev": true + }, + "ms": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", + "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", + "dev": true + } + } + }, + "@babel/types": { + "version": "7.10.3", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.10.3.tgz", + "integrity": "sha512-nZxaJhBXBQ8HVoIcGsf9qWep3Oh3jCENK54V4mRF7qaJabVsAYdbTtmSD8WmAp1R6ytPiu5apMwSXyxB1WlaBA==", + "dev": true, + "requires": { + "@babel/helper-validator-identifier": "^7.10.3", + "lodash": "^4.17.13", + "to-fast-properties": "^2.0.0" + } + }, + "@jest/types": { + "version": "25.5.0", + "resolved": "https://registry.npmjs.org/@jest/types/-/types-25.5.0.tgz", + "integrity": "sha512-OXD0RgQ86Tu3MazKo8bnrkDRaDXXMGUqd+kTtLtK1Zb7CRzQcaSRPPPV37SvYTdevXEBVxe0HXylEjs8ibkmCw==", + "dev": true, + "requires": { + "@types/istanbul-lib-coverage": "^2.0.0", + "@types/istanbul-reports": "^1.1.1", + "@types/yargs": "^15.0.0", + "chalk": "^3.0.0" + }, + "dependencies": { + "chalk": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-3.0.0.tgz", + "integrity": "sha512-4D3B6Wf41KOYRFdszmDqMCGq5VV/uMAB273JILmO+3jAlh8X4qDtdtgCR3fxtbLEMzSx22QdhnDcJvu2u1fVwg==", + "dev": true, + "requires": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + } + } + } + }, + "@nodelib/fs.scandir": { + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.3.tgz", + "integrity": "sha512-eGmwYQn3gxo4r7jdQnkrrN6bY478C3P+a/y72IJukF8LjB6ZHeB3c+Ehacj3sYeSmUXGlnA67/PmbM9CVwL7Dw==", + "dev": true, + "requires": { + "@nodelib/fs.stat": "2.0.3", + "run-parallel": "^1.1.9" + } + }, + "@nodelib/fs.stat": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/@nodelib/fs.stat/-/fs.stat-2.0.3.tgz", + "integrity": "sha512-bQBFruR2TAwoevBEd/NWMoAAtNGzTRgdrqnYCc7dhzfoNvqPzLyqlEQnzZ3kVnNrSp25iyxE00/3h2fqGAGArA==", + "dev": true + }, + "@nodelib/fs.walk": { + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/@nodelib/fs.walk/-/fs.walk-1.2.4.tgz", + "integrity": "sha512-1V9XOY4rDW0rehzbrcqAmHnz8e7SKvX27gh8Gt2WgB0+pdzdiLV83p72kZPU+jvMbS1qU5mauP2iOvO8rhmurQ==", + "dev": true, + "requires": { + "@nodelib/fs.scandir": "2.1.3", + "fastq": "^1.6.0" + } + }, + "@sindresorhus/is": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/@sindresorhus/is/-/is-2.1.1.tgz", + "integrity": "sha512-/aPsuoj/1Dw/kzhkgz+ES6TxG0zfTMGLwuK2ZG00k/iJzYHTLCE8mVU8EPqEOp/lmxPoq1C1C9RYToRKb2KEfg==", + "dev": true + }, + "@stylelint/postcss-css-in-js": { + "version": "0.37.1", + "resolved": "https://registry.npmjs.org/@stylelint/postcss-css-in-js/-/postcss-css-in-js-0.37.1.tgz", + "integrity": "sha512-UMf2Rni3JGKi3ZwYRGMYJ5ipOA5ENJSKMtYA/pE1ZLURwdh7B5+z2r73RmWvub+N0UuH1Lo+TGfCgYwPvqpXNw==", + "dev": true, + "requires": { + "@babel/core": ">=7.9.0" + } + }, + "@stylelint/postcss-markdown": { + "version": "0.36.1", + "resolved": "https://registry.npmjs.org/@stylelint/postcss-markdown/-/postcss-markdown-0.36.1.tgz", + "integrity": "sha512-iDxMBWk9nB2BPi1VFQ+Dc5+XpvODBHw2n3tYpaBZuEAFQlbtF9If0Qh5LTTwSi/XwdbJ2jt+0dis3i8omyggpw==", + "dev": true, + "requires": { + "remark": "^12.0.0", + "unist-util-find-all-after": "^3.0.1" + } + }, + "@szmarczak/http-timer": { + "version": "4.0.5", + "resolved": "https://registry.npmjs.org/@szmarczak/http-timer/-/http-timer-4.0.5.tgz", + "integrity": "sha512-PyRA9sm1Yayuj5OIoJ1hGt2YISX45w9WcFbh6ddT0Z/0yaFxOtGLInr4jUfU1EAFVs0Yfyfev4RNwBlUaHdlDQ==", + "dev": true, + "requires": { + "defer-to-connect": "^2.0.0" + } + }, + "@types/cacheable-request": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/@types/cacheable-request/-/cacheable-request-6.0.1.tgz", + "integrity": "sha512-ykFq2zmBGOCbpIXtoVbz4SKY5QriWPh3AjyU4G74RYbtt5yOc5OfaY75ftjg7mikMOla1CTGpX3lLbuJh8DTrQ==", + "dev": true, + "requires": { + "@types/http-cache-semantics": "*", + "@types/keyv": "*", + "@types/node": "*", + "@types/responselike": "*" + } + }, + "@types/color-name": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/@types/color-name/-/color-name-1.1.1.tgz", + "integrity": "sha512-rr+OQyAjxze7GgWrSaJwydHStIhHq2lvY3BOC2Mj7KnzI7XK0Uw1TOOdI9lDoajEbSWLiYgoo4f1R51erQfhPQ==", + "dev": true + }, + "@types/http-cache-semantics": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/@types/http-cache-semantics/-/http-cache-semantics-4.0.0.tgz", + "integrity": "sha512-c3Xy026kOF7QOTn00hbIllV1dLR9hG9NkSrLQgCVs8NF6sBU+VGWjD3wLPhmh1TYAc7ugCFsvHYMN4VcBN1U1A==", + "dev": true + }, + "@types/istanbul-lib-coverage": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/@types/istanbul-lib-coverage/-/istanbul-lib-coverage-2.0.3.tgz", + "integrity": "sha512-sz7iLqvVUg1gIedBOvlkxPlc8/uVzyS5OwGz1cKjXzkl3FpL3al0crU8YGU1WoHkxn0Wxbw5tyi6hvzJKNzFsw==", + "dev": true + }, + "@types/istanbul-lib-report": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/@types/istanbul-lib-report/-/istanbul-lib-report-3.0.0.tgz", + "integrity": "sha512-plGgXAPfVKFoYfa9NpYDAkseG+g6Jr294RqeqcqDixSbU34MZVJRi/P+7Y8GDpzkEwLaGZZOpKIEmeVZNtKsrg==", + "dev": true, + "requires": { + "@types/istanbul-lib-coverage": "*" + } + }, + "@types/istanbul-reports": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/@types/istanbul-reports/-/istanbul-reports-1.1.2.tgz", + "integrity": "sha512-P/W9yOX/3oPZSpaYOCQzGqgCQRXn0FFO/V8bWrCQs+wLmvVVxk6CRBXALEvNs9OHIatlnlFokfhuDo2ug01ciw==", + "dev": true, + "requires": { + "@types/istanbul-lib-coverage": "*", + "@types/istanbul-lib-report": "*" + } + }, + "@types/keyv": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/@types/keyv/-/keyv-3.1.1.tgz", + "integrity": "sha512-MPtoySlAZQ37VoLaPcTHCu1RWJ4llDkULYZIzOYxlhxBqYPB0RsRlmMU0R6tahtFe27mIdkHV+551ZWV4PLmVw==", + "dev": true, + "requires": { + "@types/node": "*" + } + }, + "@types/minimist": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/@types/minimist/-/minimist-1.2.0.tgz", + "integrity": "sha1-aaI6OtKcrwCX8G7aWbNh7i8GOfY=", + "dev": true + }, + "@types/node": { + "version": "14.0.14", + "resolved": "https://registry.npmjs.org/@types/node/-/node-14.0.14.tgz", + "integrity": "sha512-syUgf67ZQpaJj01/tRTknkMNoBBLWJOBODF0Zm4NrXmiSuxjymFrxnTu1QVYRubhVkRcZLYZG8STTwJRdVm/WQ==", + "dev": true + }, + "@types/normalize-package-data": { + "version": "2.4.0", + "resolved": "https://registry.npmjs.org/@types/normalize-package-data/-/normalize-package-data-2.4.0.tgz", + "integrity": "sha512-f5j5b/Gf71L+dbqxIpQ4Z2WlmI/mPJ0fOkGGmFgtb6sAu97EPczzbS3/tJKxmcYDj55OX6ssqwDAWOHIYDRDGA==", + "dev": true + }, + "@types/parse-json": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/@types/parse-json/-/parse-json-4.0.0.tgz", + "integrity": "sha512-//oorEZjL6sbPcKUaCdIGlIUeH26mgzimjBB77G6XRgnDl/L5wOnpyBGRe/Mmf5CVW3PwEBE1NjiMZ/ssFh4wA==", + "dev": true + }, + "@types/q": { + "version": "1.5.4", + "resolved": "https://registry.npmjs.org/@types/q/-/q-1.5.4.tgz", + "integrity": "sha512-1HcDas8SEj4z1Wc696tH56G8OlRaH/sqZOynNNB+HF0WOeXPaxTtbYzJY2oEfiUxjSKjhCKr+MvR7dCHcEelug==", + "dev": true + }, + "@types/responselike": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/@types/responselike/-/responselike-1.0.0.tgz", + "integrity": "sha512-85Y2BjiufFzaMIlvJDvTTB8Fxl2xfLo4HgmHzVBz08w4wDePCTjYw66PdrolO0kzli3yam/YCgRufyo1DdQVTA==", + "dev": true, + "requires": { + "@types/node": "*" + } + }, + "@types/stack-utils": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/@types/stack-utils/-/stack-utils-1.0.1.tgz", + "integrity": "sha512-l42BggppR6zLmpfU6fq9HEa2oGPEI8yrSPL3GITjfRInppYFahObbIQOQK3UGxEnyQpltZLaPe75046NOZQikw==", + "dev": true + }, + "@types/unist": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/@types/unist/-/unist-2.0.3.tgz", + "integrity": "sha512-FvUupuM3rlRsRtCN+fDudtmytGO6iHJuuRKS1Ss0pG5z8oX0diNEw94UEL7hgDbpN94rgaK5R7sWm6RrSkZuAQ==", + "dev": true + }, + "@types/yargs": { + "version": "15.0.5", + "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-15.0.5.tgz", + "integrity": "sha512-Dk/IDOPtOgubt/IaevIUbTgV7doaKkoorvOyYM2CMwuDyP89bekI7H4xLIwunNYiK9jhCkmc6pUrJk3cj2AB9w==", + "dev": true, + "requires": { + "@types/yargs-parser": "*" + } + }, + "@types/yargs-parser": { + "version": "15.0.0", + "resolved": "https://registry.npmjs.org/@types/yargs-parser/-/yargs-parser-15.0.0.tgz", + "integrity": "sha512-FA/BWv8t8ZWJ+gEOnLLd8ygxH/2UFbAvgEonyfN6yWGLKc7zVjbpl2Y4CTjid9h2RfgPP6SEt6uHwEOply00yw==", + "dev": true + }, + "@types/yauzl": { + "version": "2.9.1", + "resolved": "https://registry.npmjs.org/@types/yauzl/-/yauzl-2.9.1.tgz", + "integrity": "sha512-A1b8SU4D10uoPjwb0lnHmmu8wZhR9d+9o2PKBQT2jU5YPTKsxac6M2qGAdY7VcL+dHHhARVUDmeg0rOrcd9EjA==", + "dev": true, + "optional": true, + "requires": { + "@types/node": "*" + } + }, + "@wdio/cli": { + "version": "6.1.16", + "resolved": "https://registry.npmjs.org/@wdio/cli/-/cli-6.1.16.tgz", + "integrity": "sha512-q7JaEiLU2mdOibeKAQFqdWTS2evdkwgWSft1rmWDN7idiV39uncTTUcwlXBKE2a9yDk/8qn6EEXdBLthOCfyOA==", + "dev": true, + "requires": { + "@wdio/config": "6.1.14", + "@wdio/logger": "6.0.16", + "@wdio/utils": "6.1.8", + "async-exit-hook": "^2.0.1", + "chalk": "^4.0.0", + "chokidar": "^3.0.0", + "cli-spinners": "^2.1.0", + "ejs": "^3.0.1", + "fs-extra": "^9.0.0", + "inquirer": "^7.0.0", + "lodash.flattendeep": "^4.4.0", + "lodash.pickby": "^4.6.0", + "lodash.union": "^4.6.0", + "log-update": "^4.0.0", + "webdriverio": "6.1.16", + "yargs": "^15.0.1", + "yarn-install": "^1.0.0" + } + }, + "@wdio/config": { + "version": "6.1.14", + "resolved": "https://registry.npmjs.org/@wdio/config/-/config-6.1.14.tgz", + "integrity": "sha512-MXHMHwtkAblfnIxONs9aW//T9Fq5XIw3oH+tztcBRvNTTAIXmwHd+4sOjAwjpCdBSGs0C4kM/aTpGfwDZVURvQ==", + "dev": true, + "requires": { + "@wdio/logger": "6.0.16", + "deepmerge": "^4.0.0", + "glob": "^7.1.2" + } + }, + "@wdio/local-runner": { + "version": "6.1.16", + "resolved": "https://registry.npmjs.org/@wdio/local-runner/-/local-runner-6.1.16.tgz", + "integrity": "sha512-3+pT2fcMXFAnELA6jYjVm6Nt8Il7tGL66A90UbRiT0sL2faTcD3uGAPbmzxMclsmWLh7C04ucCnFwQoTMW1emg==", + "dev": true, + "requires": { + "@wdio/logger": "6.0.16", + "@wdio/repl": "6.1.8", + "@wdio/runner": "6.1.16", + "async-exit-hook": "^2.0.1", + "stream-buffers": "^3.0.2" + } + }, + "@wdio/logger": { + "version": "6.0.16", + "resolved": "https://registry.npmjs.org/@wdio/logger/-/logger-6.0.16.tgz", + "integrity": "sha512-VbH5UnQIG/3sSMV+Y38+rOdwyK9mVA9vuL7iOngoTafHwUjL1MObfN/Cex84L4mGxIgfxCu6GV48iUmSuQ7sqA==", + "dev": true, + "requires": { + "chalk": "^4.0.0", + "loglevel": "^1.6.0", + "loglevel-plugin-prefix": "^0.8.4", + "strip-ansi": "^6.0.0" + } + }, + "@wdio/mocha-framework": { + "version": "6.1.14", + "resolved": "https://registry.npmjs.org/@wdio/mocha-framework/-/mocha-framework-6.1.14.tgz", + "integrity": "sha512-2AmUH/v3kZoIDAMdW73AhI4tDJU3ie/2dO/DtpXJ3XFnuJ1CtklZGyCTtYHGMZ8DBj18/8Lrs/O0CjS5bAu2tw==", + "dev": true, + "requires": { + "@wdio/logger": "6.0.16", + "@wdio/utils": "6.1.8", + "expect-webdriverio": "^1.1.5", + "mocha": "^7.0.1" + } + }, + "@wdio/protocols": { + "version": "6.1.14", + "resolved": "https://registry.npmjs.org/@wdio/protocols/-/protocols-6.1.14.tgz", + "integrity": "sha512-UtRLQ55i23cLQRGtFiEJty1F6AbAfiSpfIxDAiXKHbw6Rp1StwxlqHFrhNe5F48Zu4hnie46t9N/tr/cZOe0kA==", + "dev": true + }, + "@wdio/repl": { + "version": "6.1.8", + "resolved": "https://registry.npmjs.org/@wdio/repl/-/repl-6.1.8.tgz", + "integrity": "sha512-C647KvDIcOHYN24eFbiM2xE+etPEACvRYkEp7BPLyopEABDr0I3Qdb5MLhopC5eMAVHp70/WT27H1CE2v9iILQ==", + "dev": true, + "requires": { + "@wdio/utils": "6.1.8" + } + }, + "@wdio/reporter": { + "version": "6.1.14", + "resolved": "https://registry.npmjs.org/@wdio/reporter/-/reporter-6.1.14.tgz", + "integrity": "sha512-Pt6P0JU0COHTpggsOoJKUJyAyQsi7xlHebBNU/DWdHHpmzYd4e9vDutjyTqXu/1zn+t+Zq+uL1IC0E4Xjv6f7w==", + "dev": true, + "requires": { + "fs-extra": "^9.0.0" + } + }, + "@wdio/runner": { + "version": "6.1.16", + "resolved": "https://registry.npmjs.org/@wdio/runner/-/runner-6.1.16.tgz", + "integrity": "sha512-pGRT51BGnxp4zFD1pSp6qZD/4dnbSnDyV4g/MbbFiA4PFKF41mFhaxRwIGMHcp4EYlv9gaT31UA52JaFIYyuNA==", + "dev": true, + "requires": { + "@wdio/config": "6.1.14", + "@wdio/logger": "6.0.16", + "@wdio/utils": "6.1.8", + "deepmerge": "^4.0.0", + "gaze": "^1.1.2", + "webdriver": "6.1.14", + "webdriverio": "6.1.16" + } + }, + "@wdio/spec-reporter": { + "version": "6.1.14", + "resolved": "https://registry.npmjs.org/@wdio/spec-reporter/-/spec-reporter-6.1.14.tgz", + "integrity": "sha512-QaSBgnzllzLp9LR7/5DTkmrI8BqcznUma8ZxwUNmhvskv/oKzrmNyeCsGoiExFmCk81A9FgZiZPXey7CuaTkdw==", + "dev": true, + "requires": { + "@wdio/reporter": "6.1.14", + "chalk": "^4.0.0", + "easy-table": "^1.1.1", + "pretty-ms": "^7.0.0" + } + }, + "@wdio/sync": { + "version": "6.1.14", + "resolved": "https://registry.npmjs.org/@wdio/sync/-/sync-6.1.14.tgz", + "integrity": "sha512-94K0kQdrOU0aMlJ2Xsd4tWr4tPpmCFp612Ml5+ecQh4C4XD07ocfsvGs+mwI7cfF1sO6g/Hoc+XTY2D+/8En3w==", + "dev": true, + "requires": { + "@wdio/logger": "6.0.16", + "fibers": "^4.0.1" + } + }, + "@wdio/utils": { + "version": "6.1.8", + "resolved": "https://registry.npmjs.org/@wdio/utils/-/utils-6.1.8.tgz", + "integrity": "sha512-qzvD8qCPpIpDrZ0HNOx1hTlfKY26p8WByUXgr52ll6DXxtAYXZLIJ8GAYFJUi87NVfwtv6+O7owQGSM/jtr8AQ==", + "dev": true, + "requires": { + "@wdio/logger": "6.0.16" + } + }, + "abbrev": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/abbrev/-/abbrev-1.1.1.tgz", + "integrity": "sha512-nne9/IiQ/hzIhY6pdDnbBtz7DjPTKrY00P/zvPSm5pOFkl6xuGrGnXn/VtTNNfNtAfZ9/1RtehkszU9qcTii0Q==", + "dev": true + }, + "acorn": { + "version": "7.3.1", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-7.3.1.tgz", + "integrity": "sha512-tLc0wSnatxAQHVHUapaHdz72pi9KUyHjq5KyHjGg9Y8Ifdc79pTh2XvI6I1/chZbnM7QtNKzh66ooDogPZSleA==", + "dev": true + }, + "acorn-jsx": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-5.2.0.tgz", + "integrity": "sha512-HiUX/+K2YpkpJ+SzBffkM/AQ2YE03S0U1kjTLVpoJdhZMOWy8qvXVN9JdLqv2QsaQ6MPYQIuNmwD8zOiYUofLQ==", + "dev": true + }, + "agent-base": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-5.1.1.tgz", + "integrity": "sha512-TMeqbNl2fMW0nMjTEPOwe3J/PRFP4vqeoNuQMG0HlMrtm5QxKqdvAkZ1pRBQ/ulIyDD5Yq0nJ7YbdD8ey0TO3g==", + "dev": true + }, + "ajv": { + "version": "6.12.2", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.2.tgz", + "integrity": "sha512-k+V+hzjm5q/Mr8ef/1Y9goCmlsK4I6Sm74teeyGvFk1XrOsbsKLjEdrvny42CZ+a8sXbk8KWpY/bDwS+FLL2UQ==", + "dev": true, + "requires": { + "fast-deep-equal": "^3.1.1", + "fast-json-stable-stringify": "^2.0.0", + "json-schema-traverse": "^0.4.1", + "uri-js": "^4.2.2" + }, + "dependencies": { + "fast-deep-equal": { + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz", + "integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==", + "dev": true + } + } + }, + "ansi-colors": { + "version": "3.2.3", + "resolved": "https://registry.npmjs.org/ansi-colors/-/ansi-colors-3.2.3.tgz", + "integrity": "sha512-LEHHyuhlPY3TmuUYMh2oz89lTShfvgbmzaBcxve9t/9Wuy7Dwf4yoAKcND7KFT1HAQfqZ12qtc+DUrBMeKF9nw==", + "dev": true + }, + "ansi-escapes": { + "version": "4.3.1", + "resolved": "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-4.3.1.tgz", + "integrity": "sha512-JWF7ocqNrp8u9oqpgV+wH5ftbt+cfvv+PTjOvKLT3AdYly/LmORARfEVT1iyjwN+4MqE5UmVKoAdIBqeoCHgLA==", + "dev": true, + "requires": { + "type-fest": "^0.11.0" + } + }, + "ansi-regex": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.0.tgz", + "integrity": "sha512-bY6fj56OUQ0hU1KjFNDQuJFezqKdrAyFdIevADiqrWHwSlbmBNMHp5ak2f40Pm8JTFyM2mqxkG6ngkHO11f/lg==", + "dev": true + }, + "ansi-styles": { + "version": "4.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.2.1.tgz", + "integrity": "sha512-9VGjrMsG1vePxcSweQsN20KY/c4zN0h9fLjqAbwbPfahM3t+NL+M9HC8xeXG2I8pX5NoamTGNuomEUFI7fcUjA==", + "dev": true, + "requires": { + "@types/color-name": "^1.1.1", + "color-convert": "^2.0.1" + } + }, + "anymatch": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.1.tgz", + "integrity": "sha512-mM8522psRCqzV+6LhomX5wgp25YVibjh8Wj23I5RPkPppSVSjyKD2A2mBJmWGa+KN7f2D6LNh9jkBCeyLktzjg==", + "dev": true, + "requires": { + "normalize-path": "^3.0.0", + "picomatch": "^2.0.4" + } + }, + "archiver": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/archiver/-/archiver-4.0.1.tgz", + "integrity": "sha512-/YV1pU4Nhpf/rJArM23W6GTUjT0l++VbjykrCRua1TSXrn+yM8Qs7XvtwSiRse0iCe49EPNf7ktXnPsWuSb91Q==", + "dev": true, + "requires": { + "archiver-utils": "^2.1.0", + "async": "^2.6.3", + "buffer-crc32": "^0.2.1", + "glob": "^7.1.6", + "readable-stream": "^3.6.0", + "tar-stream": "^2.1.2", + "zip-stream": "^3.0.1" + }, + "dependencies": { + "async": { + "version": "2.6.3", + "resolved": "https://registry.npmjs.org/async/-/async-2.6.3.tgz", + "integrity": "sha512-zflvls11DCy+dQWzTW2dzuilv8Z5X/pjfmZOWba6TNIVDm+2UDaJmXSOXlasHKfNBs8oo3M0aT50fDEWfKZjXg==", + "dev": true, + "requires": { + "lodash": "^4.17.14" + } + } + } + }, + "archiver-utils": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/archiver-utils/-/archiver-utils-2.1.0.tgz", + "integrity": "sha512-bEL/yUb/fNNiNTuUz979Z0Yg5L+LzLxGJz8x79lYmR54fmTIb6ob/hNQgkQnIUDWIFjZVQwl9Xs356I6BAMHfw==", + "dev": true, + "requires": { + "glob": "^7.1.4", + "graceful-fs": "^4.2.0", + "lazystream": "^1.0.0", + "lodash.defaults": "^4.2.0", + "lodash.difference": "^4.5.0", + "lodash.flatten": "^4.4.0", + "lodash.isplainobject": "^4.0.6", + "lodash.union": "^4.6.0", + "normalize-path": "^3.0.0", + "readable-stream": "^2.0.0" + }, + "dependencies": { + "readable-stream": { + "version": "2.3.7", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.7.tgz", + "integrity": "sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw==", + "dev": true, + "requires": { + "core-util-is": "~1.0.0", + "inherits": "~2.0.3", + "isarray": "~1.0.0", + "process-nextick-args": "~2.0.0", + "safe-buffer": "~5.1.1", + "string_decoder": "~1.1.1", + "util-deprecate": "~1.0.1" + } + } + } + }, + "argparse": { + "version": "1.0.10", + "resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz", + "integrity": "sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==", + "dev": true, + "requires": { + "sprintf-js": "~1.0.2" + } + }, + "array-find-index": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/array-find-index/-/array-find-index-1.0.2.tgz", + "integrity": "sha1-3wEKoSh+Fku9pvlyOwqWoexBh6E=", + "dev": true + }, + "array-union": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/array-union/-/array-union-2.1.0.tgz", + "integrity": "sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw==", + "dev": true + }, + "arrify": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/arrify/-/arrify-1.0.1.tgz", + "integrity": "sha1-iYUI2iIm84DfkEcoRWhJwVAaSw0=", + "dev": true + }, + "asn1": { + "version": "0.2.4", + "resolved": "https://registry.npmjs.org/asn1/-/asn1-0.2.4.tgz", + "integrity": "sha512-jxwzQpLQjSmWXgwaCZE9Nz+glAG01yF1QnWgbhGwHI5A6FRIEY6IVqtHhIepHqI7/kyEyQEagBC5mBEFlIYvdg==", + "dev": true, + "requires": { + "safer-buffer": "~2.1.0" + } + }, + "assert-plus": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/assert-plus/-/assert-plus-1.0.0.tgz", + "integrity": "sha1-8S4PPF13sLHN2RRpQuTpbB5N1SU=", + "dev": true + }, + "astral-regex": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/astral-regex/-/astral-regex-2.0.0.tgz", + "integrity": "sha512-Z7tMw1ytTXt5jqMcOP+OQteU1VuNK9Y02uuJtKQ1Sv69jXQKKg5cibLwGJow8yzZP+eAc18EmLGPal0bp36rvQ==", + "dev": true + }, + "async": { + "version": "0.9.2", + "resolved": "https://registry.npmjs.org/async/-/async-0.9.2.tgz", + "integrity": "sha1-rqdNXmHB+JlhO/ZL2mbUx48v0X0=", + "dev": true + }, + "async-exit-hook": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/async-exit-hook/-/async-exit-hook-2.0.1.tgz", + "integrity": "sha512-NW2cX8m1Q7KPA7a5M2ULQeZ2wR5qI5PAbw5L0UOMxdioVk9PMZ0h1TmyZEkPYrCvYjDlFICusOu1dlEKAAeXBw==", + "dev": true + }, + "asynckit": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz", + "integrity": "sha1-x57Zf380y48robyXkLzDZkdLS3k=", + "dev": true + }, + "at-least-node": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/at-least-node/-/at-least-node-1.0.0.tgz", + "integrity": "sha512-+q/t7Ekv1EDY2l6Gda6LLiX14rU9TV20Wa3ofeQmwPFZbOMo9DXrLbOjFaaclkXKWidIaopwAObQDqwWtGUjqg==", + "dev": true + }, + "autoprefixer": { + "version": "9.8.4", + "resolved": "https://registry.npmjs.org/autoprefixer/-/autoprefixer-9.8.4.tgz", + "integrity": "sha512-84aYfXlpUe45lvmS+HoAWKCkirI/sw4JK0/bTeeqgHYco3dcsOn0NqdejISjptsYwNji/21dnkDri9PsYKk89A==", + "dev": true, + "requires": { + "browserslist": "^4.12.0", + "caniuse-lite": "^1.0.30001087", + "colorette": "^1.2.0", + "normalize-range": "^0.1.2", + "num2fraction": "^1.2.2", + "postcss": "^7.0.32", + "postcss-value-parser": "^4.1.0" + } + }, + "aws-sign2": { + "version": "0.7.0", + "resolved": "https://registry.npmjs.org/aws-sign2/-/aws-sign2-0.7.0.tgz", + "integrity": "sha1-tG6JCTSpWR8tL2+G1+ap8bP+dqg=", + "dev": true + }, + "aws4": { + "version": "1.10.0", + "resolved": "https://registry.npmjs.org/aws4/-/aws4-1.10.0.tgz", + "integrity": "sha512-3YDiu347mtVtjpyV3u5kVqQLP242c06zwDOgpeRnybmXlYYsLbtTrUBUm8i8srONt+FWobl5aibnU1030PeeuA==", + "dev": true + }, + "bail": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/bail/-/bail-1.0.5.tgz", + "integrity": "sha512-xFbRxM1tahm08yHBP16MMjVUAvDaBMD38zsM9EMAUN61omwLmKlOpB/Zku5QkjZ8TZ4vn53pj+t518cH0S03RQ==", + "dev": true + }, + "balanced-match": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.0.tgz", + "integrity": "sha1-ibTRmasr7kneFk6gK4nORi1xt2c=", + "dev": true + }, + "base64-js": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/base64-js/-/base64-js-1.3.1.tgz", + "integrity": "sha512-mLQ4i2QO1ytvGWFWmcngKO//JXAQueZvwEKtjgQFM4jIK0kU+ytMfplL8j+n5mspOfjHwoAg+9yhb7BwAHm36g==", + "dev": true + }, + "bcrypt-pbkdf": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/bcrypt-pbkdf/-/bcrypt-pbkdf-1.0.2.tgz", + "integrity": "sha1-pDAdOJtqQ/m2f/PKEaP2Y342Dp4=", + "dev": true, + "requires": { + "tweetnacl": "^0.14.3" + } + }, + "binary-extensions": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.0.0.tgz", + "integrity": "sha512-Phlt0plgpIIBOGTT/ehfFnbNlfsDEiqmzE2KRXoX1bLIlir4X/MR+zSyBEkL05ffWgnRSf/DXv+WrUAVr93/ow==", + "dev": true + }, + "bl": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/bl/-/bl-4.0.2.tgz", + "integrity": "sha512-j4OH8f6Qg2bGuWfRiltT2HYGx0e1QcBTrK9KAHNMwMZdQnDZFk0ZSYIpADjYCB3U12nicC5tVJwSIhwOWjb4RQ==", + "dev": true, + "requires": { + "buffer": "^5.5.0", + "inherits": "^2.0.4", + "readable-stream": "^3.4.0" + } + }, + "bluebird": { + "version": "3.7.2", + "resolved": "https://registry.npmjs.org/bluebird/-/bluebird-3.7.2.tgz", + "integrity": "sha512-XpNj6GDQzdfW+r2Wnn7xiSAd7TM3jzkxGXBGTtWKuSXv1xUV+azxAm8jdWZN06QTQk+2N2XB9jRDkvbmQmcRtg==", + "dev": true + }, + "body": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/body/-/body-5.1.0.tgz", + "integrity": "sha1-5LoM5BCkaTYyM2dgnstOZVMSUGk=", + "dev": true, + "requires": { + "continuable-cache": "^0.3.1", + "error": "^7.0.0", + "raw-body": "~1.1.0", + "safe-json-parse": "~1.0.1" + } + }, + "boolbase": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/boolbase/-/boolbase-1.0.0.tgz", + "integrity": "sha1-aN/1++YMUes3cl6p4+0xDcwed24=", + "dev": true + }, + "brace-expansion": { + "version": "1.1.11", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", + "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", + "dev": true, + "requires": { + "balanced-match": "^1.0.0", + "concat-map": "0.0.1" + } + }, + "braces": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz", + "integrity": "sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==", + "dev": true, + "requires": { + "fill-range": "^7.0.1" + } + }, + "browser-stdout": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/browser-stdout/-/browser-stdout-1.3.1.tgz", + "integrity": "sha512-qhAVI1+Av2X7qelOfAIYwXONood6XlZE/fXaBSmW/T5SzLAmCgzi+eiWE7fUvbHaeNBQH13UftjpXxsfLkMpgw==", + "dev": true + }, + "browserslist": { + "version": "4.12.1", + "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.12.1.tgz", + "integrity": "sha512-WMjXwFtPskSW1pQUDJRxvRKRkeCr7usN0O/Za76N+F4oadaTdQHotSGcX9jT/Hs7mSKPkyMFNvqawB/1HzYDKQ==", + "dev": true, + "requires": { + "caniuse-lite": "^1.0.30001088", + "electron-to-chromium": "^1.3.481", + "escalade": "^3.0.1", + "node-releases": "^1.1.58" + } + }, + "buffer": { + "version": "5.6.0", + "resolved": "https://registry.npmjs.org/buffer/-/buffer-5.6.0.tgz", + "integrity": "sha512-/gDYp/UtU0eA1ys8bOs9J6a+E/KWIY+DZ+Q2WESNUA0jFRsJOc0SNUO6xJ5SGA1xueg3NL65W6s+NY5l9cunuw==", + "dev": true, + "requires": { + "base64-js": "^1.0.2", + "ieee754": "^1.1.4" + } + }, + "buffer-crc32": { + "version": "0.2.13", + "resolved": "https://registry.npmjs.org/buffer-crc32/-/buffer-crc32-0.2.13.tgz", + "integrity": "sha1-DTM+PwDqxQqhRUq9MO+MKl2ackI=", + "dev": true + }, + "bytes": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/bytes/-/bytes-1.0.0.tgz", + "integrity": "sha1-NWnt6Lo0MV+rmcPpLLBMciDeH6g=", + "dev": true + }, + "cac": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/cac/-/cac-3.0.4.tgz", + "integrity": "sha1-bSTO7Dcu/lybeYgIvH9JtHJCpO8=", + "dev": true, + "requires": { + "camelcase-keys": "^3.0.0", + "chalk": "^1.1.3", + "indent-string": "^3.0.0", + "minimist": "^1.2.0", + "read-pkg-up": "^1.0.1", + "suffix": "^0.1.0", + "text-table": "^0.2.0" + }, + "dependencies": { + "ansi-regex": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz", + "integrity": "sha1-w7M6te42DYbg5ijwRorn7yfWVN8=", + "dev": true + }, + "ansi-styles": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-2.2.1.tgz", + "integrity": "sha1-tDLdM1i2NM914eRmQ2gkBTPB3b4=", + "dev": true + }, + "chalk": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz", + "integrity": "sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg=", + "dev": true, + "requires": { + "ansi-styles": "^2.2.1", + "escape-string-regexp": "^1.0.2", + "has-ansi": "^2.0.0", + "strip-ansi": "^3.0.0", + "supports-color": "^2.0.0" + } + }, + "strip-ansi": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz", + "integrity": "sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=", + "dev": true, + "requires": { + "ansi-regex": "^2.0.0" + } + }, + "supports-color": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-2.0.0.tgz", + "integrity": "sha1-U10EXOa2Nj+kARcIRimZXp3zJMc=", + "dev": true + } + } + }, + "cacheable-lookup": { + "version": "5.0.3", + "resolved": "https://registry.npmjs.org/cacheable-lookup/-/cacheable-lookup-5.0.3.tgz", + "integrity": "sha512-W+JBqF9SWe18A72XFzN/V/CULFzPm7sBXzzR6ekkE+3tLG72wFZrBiBZhrZuDoYexop4PHJVdFAKb/Nj9+tm9w==", + "dev": true + }, + "cacheable-request": { + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/cacheable-request/-/cacheable-request-7.0.1.tgz", + "integrity": "sha512-lt0mJ6YAnsrBErpTMWeu5kl/tg9xMAWjavYTN6VQXM1A/teBITuNcccXsCxF0tDQQJf9DfAaX5O4e0zp0KlfZw==", + "dev": true, + "requires": { + "clone-response": "^1.0.2", + "get-stream": "^5.1.0", + "http-cache-semantics": "^4.0.0", + "keyv": "^4.0.0", + "lowercase-keys": "^2.0.0", + "normalize-url": "^4.1.0", + "responselike": "^2.0.0" + } + }, + "callsites": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/callsites/-/callsites-3.1.0.tgz", + "integrity": "sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==", + "dev": true + }, + "camelcase": { + "version": "5.3.1", + "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-5.3.1.tgz", + "integrity": "sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg==", + "dev": true + }, + "camelcase-keys": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/camelcase-keys/-/camelcase-keys-3.0.0.tgz", + "integrity": "sha1-/AxsNgNj9zd+N5O5oWvM8QcMHKQ=", + "dev": true, + "requires": { + "camelcase": "^3.0.0", + "map-obj": "^1.0.0" + }, + "dependencies": { + "camelcase": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-3.0.0.tgz", + "integrity": "sha1-MvxLn82vhF/N9+c7uXysImHwqwo=", + "dev": true + } + } + }, + "caniuse-lite": { + "version": "1.0.30001088", + "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001088.tgz", + "integrity": "sha512-6eYUrlShRYveyqKG58HcyOfPgh3zb2xqs7NvT2VVtP3hEUeeWvc3lqhpeMTxYWBBeeaT9A4bKsrtjATm66BTHg==", + "dev": true + }, + "caseless": { + "version": "0.12.0", + "resolved": "https://registry.npmjs.org/caseless/-/caseless-0.12.0.tgz", + "integrity": "sha1-G2gcIf+EAzyCZUMJBolCDRhxUdw=", + "dev": true + }, + "ccount": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/ccount/-/ccount-1.0.5.tgz", + "integrity": "sha512-MOli1W+nfbPLlKEhInaxhRdp7KVLFxLN5ykwzHgLsLI3H3gs5jjFAK4Eoj3OzzcxCtumDaI8onoVDeQyWaNTkw==", + "dev": true + }, + "chalk": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.0.tgz", + "integrity": "sha512-qwx12AxXe2Q5xQ43Ac//I6v5aXTipYrSESdOgzrN+9XjgEpyjpKuvSGaN4qE93f7TQTlerQQ8S+EQ0EyDoVL1A==", + "dev": true, + "requires": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + } + }, + "character-entities": { + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/character-entities/-/character-entities-1.2.4.tgz", + "integrity": "sha512-iBMyeEHxfVnIakwOuDXpVkc54HijNgCyQB2w0VfGQThle6NXn50zU6V/u+LDhxHcDUPojn6Kpga3PTAD8W1bQw==", + "dev": true + }, + "character-entities-html4": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/character-entities-html4/-/character-entities-html4-1.1.4.tgz", + "integrity": "sha512-HRcDxZuZqMx3/a+qrzxdBKBPUpxWEq9xw2OPZ3a/174ihfrQKVsFhqtthBInFy1zZ9GgZyFXOatNujm8M+El3g==", + "dev": true + }, + "character-entities-legacy": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/character-entities-legacy/-/character-entities-legacy-1.1.4.tgz", + "integrity": "sha512-3Xnr+7ZFS1uxeiUDvV02wQ+QDbc55o97tIV5zHScSPJpcLm/r0DFPcoY3tYRp+VZukxuMeKgXYmsXQHO05zQeA==", + "dev": true + }, + "character-reference-invalid": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/character-reference-invalid/-/character-reference-invalid-1.1.4.tgz", + "integrity": "sha512-mKKUkUbhPpQlCOfIuZkvSEgktjPFIsZKRRbC6KWVEMvlzblj3i3asQv5ODsrwt0N3pHAEvjP8KTQPHkp0+6jOg==", + "dev": true + }, + "chardet": { + "version": "0.7.0", + "resolved": "https://registry.npmjs.org/chardet/-/chardet-0.7.0.tgz", + "integrity": "sha512-mT8iDcrh03qDGRRmoA2hmBJnxpllMR+0/0qlzjqZES6NdiWDcZkCNAk4rPFZ9Q85r27unkiNNg8ZOiwZXBHwcA==", + "dev": true + }, + "chokidar": { + "version": "3.4.0", + "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.4.0.tgz", + "integrity": "sha512-aXAaho2VJtisB/1fg1+3nlLJqGOuewTzQpd/Tz0yTg2R0e4IGtshYvtjowyEumcBv2z+y4+kc75Mz7j5xJskcQ==", + "dev": true, + "requires": { + "anymatch": "~3.1.1", + "braces": "~3.0.2", + "fsevents": "~2.1.2", + "glob-parent": "~5.1.0", + "is-binary-path": "~2.1.0", + "is-glob": "~4.0.1", + "normalize-path": "~3.0.0", + "readdirp": "~3.4.0" + } + }, + "chownr": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/chownr/-/chownr-1.1.4.tgz", + "integrity": "sha512-jJ0bqzaylmJtVnNgzTeSOs8DPavpbYgEr/b0YL8/2GO3xJEhInFmhKMUnEJQjZumK7KXGFhUy89PrsJWlakBVg==", + "dev": true + }, + "chrome-launcher": { + "version": "0.13.3", + "resolved": "https://registry.npmjs.org/chrome-launcher/-/chrome-launcher-0.13.3.tgz", + "integrity": "sha512-ovrDuFXgXS96lzeDqFPQRsczkxla+6QMvzsF+1u0mKlD1KE8EuhjdLwiDfIFedb0FSLz18RK3y6IbKu8oqA0qw==", + "dev": true, + "requires": { + "@types/node": "*", + "escape-string-regexp": "^1.0.5", + "is-wsl": "^2.2.0", + "lighthouse-logger": "^1.0.0", + "mkdirp": "^0.5.3", + "rimraf": "^3.0.2" + } + }, + "cli-cursor": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/cli-cursor/-/cli-cursor-3.1.0.tgz", + "integrity": "sha512-I/zHAwsKf9FqGoXM4WWRACob9+SNukZTd94DWF57E4toouRulbCxcUh6RKUEOQlYTHJnzkPMySvPNaaSLNfLZw==", + "dev": true, + "requires": { + "restore-cursor": "^3.1.0" + } + }, + "cli-spinners": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/cli-spinners/-/cli-spinners-2.3.0.tgz", + "integrity": "sha512-Xs2Hf2nzrvJMFKimOR7YR0QwZ8fc0u98kdtwN1eNAZzNQgH3vK2pXzff6GJtKh7S5hoJ87ECiAiZFS2fb5Ii2w==", + "dev": true + }, + "cli-width": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/cli-width/-/cli-width-2.2.1.tgz", + "integrity": "sha512-GRMWDxpOB6Dgk2E5Uo+3eEBvtOOlimMmpbFiKuLFnQzYDavtLFY3K5ona41jgN/WdRZtG7utuVSVTL4HbZHGkw==", + "dev": true + }, + "cliui": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/cliui/-/cliui-6.0.0.tgz", + "integrity": "sha512-t6wbgtoCXvAzst7QgXxJYqPt0usEfbgQdftEPbLL/cvv6HPE5VgvqCuAIDR0NgU52ds6rFwqrgakNLrHEjCbrQ==", + "dev": true, + "requires": { + "string-width": "^4.2.0", + "strip-ansi": "^6.0.0", + "wrap-ansi": "^6.2.0" + } + }, + "clone": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/clone/-/clone-1.0.4.tgz", + "integrity": "sha1-2jCcwmPfFZlMaIypAheco8fNfH4=", + "dev": true, + "optional": true + }, + "clone-regexp": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/clone-regexp/-/clone-regexp-2.2.0.tgz", + "integrity": "sha512-beMpP7BOtTipFuW8hrJvREQ2DrRu3BE7by0ZpibtfBA+qfHYvMGTc2Yb1JMYPKg/JUw0CHYvpg796aNTSW9z7Q==", + "dev": true, + "requires": { + "is-regexp": "^2.0.0" + } + }, + "clone-response": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/clone-response/-/clone-response-1.0.2.tgz", + "integrity": "sha1-0dyXOSAxTfZ/vrlCI7TuNQI56Ws=", + "dev": true, + "requires": { + "mimic-response": "^1.0.0" + } + }, + "coa": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/coa/-/coa-2.0.2.tgz", + "integrity": "sha512-q5/jG+YQnSy4nRTV4F7lPepBJZ8qBNJJDBuJdoejDyLXgmL7IEo+Le2JDZudFTFt7mrCqIRaSjws4ygRCTCAXA==", + "dev": true, + "requires": { + "@types/q": "^1.5.1", + "chalk": "^2.4.1", + "q": "^1.1.2" + }, + "dependencies": { + "ansi-styles": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", + "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", + "dev": true, + "requires": { + "color-convert": "^1.9.0" + } + }, + "chalk": { + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", + "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", + "dev": true, + "requires": { + "ansi-styles": "^3.2.1", + "escape-string-regexp": "^1.0.5", + "supports-color": "^5.3.0" + } + }, + "color-convert": { + "version": "1.9.3", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", + "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", + "dev": true, + "requires": { + "color-name": "1.1.3" + } + }, + "color-name": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", + "integrity": "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=", + "dev": true + }, + "has-flag": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", + "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=", + "dev": true + }, + "supports-color": { + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", + "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", + "dev": true, + "requires": { + "has-flag": "^3.0.0" + } + } + } + }, + "coffeescript": { + "version": "1.10.0", + "resolved": "https://registry.npmjs.org/coffeescript/-/coffeescript-1.10.0.tgz", + "integrity": "sha1-56qDAZF+9iGzXYo580jc3R234z4=", + "dev": true + }, + "collapse-white-space": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/collapse-white-space/-/collapse-white-space-1.0.6.tgz", + "integrity": "sha512-jEovNnrhMuqyCcjfEJA56v0Xq8SkIoPKDyaHahwo3POf4qcSXqMYuwNcOTzp74vTsR9Tn08z4MxWqAhcekogkQ==", + "dev": true + }, + "color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, + "requires": { + "color-name": "~1.1.4" + } + }, + "color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true + }, + "colorette": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/colorette/-/colorette-1.2.0.tgz", + "integrity": "sha512-soRSroY+OF/8OdA3PTQXwaDJeMc7TfknKKrxeSCencL2a4+Tx5zhxmmv7hdpCjhKBjehzp8+bwe/T68K0hpIjw==", + "dev": true + }, + "colors": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/colors/-/colors-1.1.2.tgz", + "integrity": "sha1-FopHAXVran9RoSzgyXv6KMCE7WM=", + "dev": true + }, + "combined-stream": { + "version": "1.0.8", + "resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.8.tgz", + "integrity": "sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==", + "dev": true, + "requires": { + "delayed-stream": "~1.0.0" + } + }, + "comment-parser": { + "version": "0.7.5", + "resolved": "https://registry.npmjs.org/comment-parser/-/comment-parser-0.7.5.tgz", + "integrity": "sha512-iH9YA35ccw94nx5244GVkpyC9eVTsL71jZz6iz5w6RIf79JLF2AsXHXq9p6Oaohyl3sx5qSMnGsWUDFIAfWL4w==", + "dev": true + }, + "compress-commons": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/compress-commons/-/compress-commons-3.0.0.tgz", + "integrity": "sha512-FyDqr8TKX5/X0qo+aVfaZ+PVmNJHJeckFBlq8jZGSJOgnynhfifoyl24qaqdUdDIBe0EVTHByN6NAkqYvE/2Xg==", + "dev": true, + "requires": { + "buffer-crc32": "^0.2.13", + "crc32-stream": "^3.0.1", + "normalize-path": "^3.0.0", + "readable-stream": "^2.3.7" + }, + "dependencies": { + "readable-stream": { + "version": "2.3.7", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.7.tgz", + "integrity": "sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw==", + "dev": true, + "requires": { + "core-util-is": "~1.0.0", + "inherits": "~2.0.3", + "isarray": "~1.0.0", + "process-nextick-args": "~2.0.0", + "safe-buffer": "~5.1.1", + "string_decoder": "~1.1.1", + "util-deprecate": "~1.0.1" + } + } + } + }, + "concat-map": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", + "integrity": "sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=", + "dev": true + }, + "continuable-cache": { + "version": "0.3.1", + "resolved": "https://registry.npmjs.org/continuable-cache/-/continuable-cache-0.3.1.tgz", + "integrity": "sha1-vXJ6f67XfnH/OYWskzUakSczrQ8=", + "dev": true + }, + "convert-source-map": { + "version": "1.7.0", + "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-1.7.0.tgz", + "integrity": "sha512-4FJkXzKXEDB1snCFZlLP4gpC3JILicCpGbzG9f9G7tGqGCzETQ2hWPrcinA9oU4wtf2biUaEH5065UnMeR33oA==", + "dev": true, + "requires": { + "safe-buffer": "~5.1.1" + } + }, + "core-util-is": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.2.tgz", + "integrity": "sha1-tf1UIgqivFq1eqtxQMlAdUUDwac=", + "dev": true + }, + "cosmiconfig": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/cosmiconfig/-/cosmiconfig-6.0.0.tgz", + "integrity": "sha512-xb3ZL6+L8b9JLLCx3ZdoZy4+2ECphCMo2PwqgP1tlfVq6M6YReyzBJtvWWtbDSpNr9hn96pkCiZqUcFEc+54Qg==", + "dev": true, + "requires": { + "@types/parse-json": "^4.0.0", + "import-fresh": "^3.1.0", + "parse-json": "^5.0.0", + "path-type": "^4.0.0", + "yaml": "^1.7.2" + }, + "dependencies": { + "parse-json": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-5.0.0.tgz", + "integrity": "sha512-OOY5b7PAEFV0E2Fir1KOkxchnZNCdowAJgQ5NuxjpBKTRP3pQhwkrkxqQjeoKJ+fO7bCpmIZaogI4eZGDMEGOw==", + "dev": true, + "requires": { + "@babel/code-frame": "^7.0.0", + "error-ex": "^1.3.1", + "json-parse-better-errors": "^1.0.1", + "lines-and-columns": "^1.1.6" + } + }, + "path-type": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/path-type/-/path-type-4.0.0.tgz", + "integrity": "sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==", + "dev": true + } + } + }, + "crc": { + "version": "3.8.0", + "resolved": "https://registry.npmjs.org/crc/-/crc-3.8.0.tgz", + "integrity": "sha512-iX3mfgcTMIq3ZKLIsVFAbv7+Mc10kxabAGQb8HvjA1o3T1PIYprbakQ65d3I+2HGHt6nSKkM9PYjgoJO2KcFBQ==", + "dev": true, + "requires": { + "buffer": "^5.1.0" + } + }, + "crc32-stream": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/crc32-stream/-/crc32-stream-3.0.1.tgz", + "integrity": "sha512-mctvpXlbzsvK+6z8kJwSJ5crm7yBwrQMTybJzMw1O4lLGJqjlDCXY2Zw7KheiA6XBEcBmfLx1D88mjRGVJtY9w==", + "dev": true, + "requires": { + "crc": "^3.4.4", + "readable-stream": "^3.4.0" + } + }, + "cross-spawn": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-4.0.2.tgz", + "integrity": "sha1-e5JHYhwjrf3ThWAEqCPL45dCTUE=", + "dev": true, + "requires": { + "lru-cache": "^4.0.1", + "which": "^1.2.9" + } + }, + "css-select": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/css-select/-/css-select-2.1.0.tgz", + "integrity": "sha512-Dqk7LQKpwLoH3VovzZnkzegqNSuAziQyNZUcrdDM401iY+R5NkGBXGmtO05/yaXQziALuPogeG0b7UAgjnTJTQ==", + "dev": true, + "requires": { + "boolbase": "^1.0.0", + "css-what": "^3.2.1", + "domutils": "^1.7.0", + "nth-check": "^1.0.2" + } + }, + "css-select-base-adapter": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/css-select-base-adapter/-/css-select-base-adapter-0.1.1.tgz", + "integrity": "sha512-jQVeeRG70QI08vSTwf1jHxp74JoZsr2XSgETae8/xC8ovSnL2WF87GTLO86Sbwdt2lK4Umg4HnnwMO4YF3Ce7w==", + "dev": true + }, + "css-tree": { + "version": "1.0.0-alpha.37", + "resolved": "https://registry.npmjs.org/css-tree/-/css-tree-1.0.0-alpha.37.tgz", + "integrity": "sha512-DMxWJg0rnz7UgxKT0Q1HU/L9BeJI0M6ksor0OgqOnF+aRCDWg/N2641HmVyU9KVIu0OVVWOb2IpC9A+BJRnejg==", + "dev": true, + "requires": { + "mdn-data": "2.0.4", + "source-map": "^0.6.1" + } + }, + "css-value": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/css-value/-/css-value-0.0.1.tgz", + "integrity": "sha1-Xv1sLupeof1rasV+wEJ7GEUkJOo=", + "dev": true + }, + "css-what": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/css-what/-/css-what-3.3.0.tgz", + "integrity": "sha512-pv9JPyatiPaQ6pf4OvD/dbfm0o5LviWmwxNWzblYf/1u9QZd0ihV+PMwy5jdQWQ3349kZmKEx9WXuSka2dM4cg==", + "dev": true + }, + "cssesc": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/cssesc/-/cssesc-3.0.0.tgz", + "integrity": "sha512-/Tb/JcjK111nNScGob5MNtsntNM1aCNUDipB/TkwZFhyDrrE47SOx/18wF2bbjgc3ZzCSKW1T5nt5EbFoAz/Vg==", + "dev": true + }, + "csso": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/csso/-/csso-4.0.3.tgz", + "integrity": "sha512-NL3spysxUkcrOgnpsT4Xdl2aiEiBG6bXswAABQVHcMrfjjBisFOKwLDOmf4wf32aPdcJws1zds2B0Rg+jqMyHQ==", + "dev": true, + "requires": { + "css-tree": "1.0.0-alpha.39" + }, + "dependencies": { + "css-tree": { + "version": "1.0.0-alpha.39", + "resolved": "https://registry.npmjs.org/css-tree/-/css-tree-1.0.0-alpha.39.tgz", + "integrity": "sha512-7UvkEYgBAHRG9Nt980lYxjsTrCyHFN53ky3wVsDkiMdVqylqRt+Zc+jm5qw7/qyOvN2dHSYtX0e4MbCCExSvnA==", + "dev": true, + "requires": { + "mdn-data": "2.0.6", + "source-map": "^0.6.1" + } + }, + "mdn-data": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/mdn-data/-/mdn-data-2.0.6.tgz", + "integrity": "sha512-rQvjv71olwNHgiTbfPZFkJtjNMciWgswYeciZhtvWLO8bmX3TnhyA62I6sTWOyZssWHJJjY6/KiWwqQsWWsqOA==", + "dev": true + } + } + }, + "currently-unhandled": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/currently-unhandled/-/currently-unhandled-0.4.1.tgz", + "integrity": "sha1-mI3zP+qxke95mmE2nddsF635V+o=", + "dev": true, + "requires": { + "array-find-index": "^1.0.1" + } + }, + "dashdash": { + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/dashdash/-/dashdash-1.14.1.tgz", + "integrity": "sha1-hTz6D3y+L+1d4gMmuN1YEDX24vA=", + "dev": true, + "requires": { + "assert-plus": "^1.0.0" + } + }, + "dateformat": { + "version": "1.0.12", + "resolved": "https://registry.npmjs.org/dateformat/-/dateformat-1.0.12.tgz", + "integrity": "sha1-nxJLZ1lMk3/3BpMuSmQsyo27/uk=", + "dev": true, + "requires": { + "get-stdin": "^4.0.1", + "meow": "^3.3.0" + } + }, + "debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "dev": true, + "requires": { + "ms": "2.0.0" + } + }, + "decamelize": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/decamelize/-/decamelize-1.2.0.tgz", + "integrity": "sha1-9lNNFRSCabIDUue+4m9QH5oZEpA=", + "dev": true + }, + "decamelize-keys": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/decamelize-keys/-/decamelize-keys-1.1.0.tgz", + "integrity": "sha1-0XGoeTMlKAfrPLYdwcFEXQeN8tk=", + "dev": true, + "requires": { + "decamelize": "^1.1.0", + "map-obj": "^1.0.0" + } + }, + "decompress-response": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/decompress-response/-/decompress-response-6.0.0.tgz", + "integrity": "sha512-aW35yZM6Bb/4oJlZncMH2LCoZtJXTRxES17vE3hoRiowU2kWHaJKFkSBDnDR+cm9J+9QhXmREyIfv0pji9ejCQ==", + "dev": true, + "requires": { + "mimic-response": "^3.1.0" + }, + "dependencies": { + "mimic-response": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/mimic-response/-/mimic-response-3.1.0.tgz", + "integrity": "sha512-z0yWI+4FDrrweS8Zmt4Ej5HdJmky15+L2e6Wgn3+iK5fWzb6T3fhNFq2+MeTRb064c6Wr4N/wv0DzQTjNzHNGQ==", + "dev": true + } + } + }, + "deep-is": { + "version": "0.1.3", + "resolved": "https://registry.npmjs.org/deep-is/-/deep-is-0.1.3.tgz", + "integrity": "sha1-s2nW+128E+7PUk+RsHD+7cNXzzQ=", + "dev": true + }, + "deepmerge": { + "version": "4.2.2", + "resolved": "https://registry.npmjs.org/deepmerge/-/deepmerge-4.2.2.tgz", + "integrity": "sha512-FJ3UgI4gIl+PHZm53knsuSFpE+nESMr7M4v9QcgB7S63Kj/6WqMiFQJpBBYz1Pt+66bZpP3Q7Lye0Oo9MPKEdg==", + "dev": true + }, + "defaults": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/defaults/-/defaults-1.0.3.tgz", + "integrity": "sha1-xlYFHpgX2f8I7YgUd/P+QBnz730=", + "dev": true, + "optional": true, + "requires": { + "clone": "^1.0.2" + } + }, + "defer-to-connect": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/defer-to-connect/-/defer-to-connect-2.0.0.tgz", + "integrity": "sha512-bYL2d05vOSf1JEZNx5vSAtPuBMkX8K9EUutg7zlKvTqKXHt7RhWJFbmd7qakVuf13i+IkGmp6FwSsONOf6VYIg==", + "dev": true + }, + "define-properties": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/define-properties/-/define-properties-1.1.3.tgz", + "integrity": "sha512-3MqfYKj2lLzdMSf8ZIZE/V+Zuy+BgD6f164e8K2w7dgnpKArBDerGYpM46IYYcjnkdPNMjPk9A6VFB8+3SKlXQ==", + "dev": true, + "requires": { + "object-keys": "^1.0.12" + } + }, + "delayed-stream": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz", + "integrity": "sha1-3zrhmayt+31ECqrgsp4icrJOxhk=", + "dev": true + }, + "detect-libc": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/detect-libc/-/detect-libc-1.0.3.tgz", + "integrity": "sha1-+hN8S9aY7fVc1c0CrFWfkaTEups=", + "dev": true + }, + "devtools": { + "version": "6.1.16", + "resolved": "https://registry.npmjs.org/devtools/-/devtools-6.1.16.tgz", + "integrity": "sha512-Px/K/xYY+fTW8D5yt7p6ZZJfkfHHulKVr2Y+BJSCQyKNSY/hiZFT6KAjoUFrAastLCqqs1gW2Dy/OGb0qWm+Hg==", + "dev": true, + "requires": { + "@wdio/config": "6.1.14", + "@wdio/logger": "6.0.16", + "@wdio/protocols": "6.1.14", + "@wdio/utils": "6.1.8", + "chrome-launcher": "^0.13.1", + "puppeteer-core": "^3.0.0", + "ua-parser-js": "^0.7.21", + "uuid": "^8.0.0" + } + }, + "diff": { + "version": "3.5.0", + "resolved": "https://registry.npmjs.org/diff/-/diff-3.5.0.tgz", + "integrity": "sha512-A46qtFgd+g7pDZinpnwiRJtxbC1hpgf0uzP3iG89scHk0AUC7A1TGxf5OiiOUv/JMZR8GOt8hL900hV0bOy5xA==", + "dev": true + }, + "diff-sequences": { + "version": "25.2.6", + "resolved": "https://registry.npmjs.org/diff-sequences/-/diff-sequences-25.2.6.tgz", + "integrity": "sha512-Hq8o7+6GaZeoFjtpgvRBUknSXNeJiCx7V9Fr94ZMljNiCr9n9L8H8aJqgWOQiDDGdyn29fRNcDdRVJ5fdyihfg==", + "dev": true + }, + "dir-glob": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/dir-glob/-/dir-glob-3.0.1.tgz", + "integrity": "sha512-WkrWp9GR4KXfKGYzOLmTuGVi1UWFfws377n9cc55/tb6DuqyF6pcQ5AbiHEshaDpY9v6oaSr2XCDidGmMwdzIA==", + "dev": true, + "requires": { + "path-type": "^4.0.0" + }, + "dependencies": { + "path-type": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/path-type/-/path-type-4.0.0.tgz", + "integrity": "sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==", + "dev": true + } + } + }, + "doctrine": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-3.0.0.tgz", + "integrity": "sha512-yS+Q5i3hBf7GBkd4KG8a7eBNNWNGLTaEwwYWUijIYM7zrlYDM0BFXHjjPWlWZ1Rg7UaddZeIDmi9jF3HmqiQ2w==", + "dev": true, + "requires": { + "esutils": "^2.0.2" + } + }, + "dom-serializer": { + "version": "0.2.2", + "resolved": "https://registry.npmjs.org/dom-serializer/-/dom-serializer-0.2.2.tgz", + "integrity": "sha512-2/xPb3ORsQ42nHYiSunXkDjPLBaEj/xTwUO4B7XCZQTRk7EBtTOPaygh10YAAh2OI1Qrp6NWfpAhzswj0ydt9g==", + "dev": true, + "requires": { + "domelementtype": "^2.0.1", + "entities": "^2.0.0" + }, + "dependencies": { + "domelementtype": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/domelementtype/-/domelementtype-2.0.1.tgz", + "integrity": "sha512-5HOHUDsYZWV8FGWN0Njbr/Rn7f/eWSQi1v7+HsUVwXgn8nWWlL64zKDkS0n8ZmQ3mlWOMuXOnR+7Nx/5tMO5AQ==", + "dev": true + } + } + }, + "domelementtype": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/domelementtype/-/domelementtype-1.3.1.tgz", + "integrity": "sha512-BSKB+TSpMpFI/HOxCNr1O8aMOTZ8hT3pM3GQ0w/mWRmkhEDSFJkkyzz4XQsBV44BChwGkrDfMyjVD0eA2aFV3w==", + "dev": true + }, + "domhandler": { + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/domhandler/-/domhandler-2.4.2.tgz", + "integrity": "sha512-JiK04h0Ht5u/80fdLMCEmV4zkNh2BcoMFBmZ/91WtYZ8qVXSKjiw7fXMgFPnHcSZgOo3XdinHvmnDUeMf5R4wA==", + "dev": true, + "requires": { + "domelementtype": "1" + } + }, + "domutils": { + "version": "1.7.0", + "resolved": "https://registry.npmjs.org/domutils/-/domutils-1.7.0.tgz", + "integrity": "sha512-Lgd2XcJ/NjEw+7tFvfKxOzCYKZsdct5lczQ2ZaQY8Djz7pfAD3Gbp8ySJWtreII/vDlMVmxwa6pHmdxIYgttDg==", + "dev": true, + "requires": { + "dom-serializer": "0", + "domelementtype": "1" + } + }, + "each-async": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/each-async/-/each-async-1.1.1.tgz", + "integrity": "sha1-3uUim98KtrogEqOV4bhpq/iBNHM=", + "dev": true, + "requires": { + "onetime": "^1.0.0", + "set-immediate-shim": "^1.0.0" + }, + "dependencies": { + "onetime": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/onetime/-/onetime-1.1.0.tgz", + "integrity": "sha1-ofeDj4MUxRbwXs78vEzP4EtO14k=", + "dev": true + } + } + }, + "easy-table": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/easy-table/-/easy-table-1.1.1.tgz", + "integrity": "sha512-C9Lvm0WFcn2RgxbMnTbXZenMIWcBtkzMr+dWqq/JsVoGFSVUVlPqeOa5LP5kM0I3zoOazFpckOEb2/0LDFfToQ==", + "dev": true, + "requires": { + "ansi-regex": "^3.0.0", + "wcwidth": ">=1.0.1" + }, + "dependencies": { + "ansi-regex": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-3.0.0.tgz", + "integrity": "sha1-7QMXwyIGT3lGbAKWa922Bas32Zg=", + "dev": true + } + } + }, + "ecc-jsbn": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/ecc-jsbn/-/ecc-jsbn-0.1.2.tgz", + "integrity": "sha1-OoOpBOVDUyh4dMVkt1SThoSamMk=", + "dev": true, + "requires": { + "jsbn": "~0.1.0", + "safer-buffer": "^2.1.0" + } + }, + "ejs": { + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/ejs/-/ejs-3.1.3.tgz", + "integrity": "sha512-wmtrUGyfSC23GC/B1SMv2ogAUgbQEtDmTIhfqielrG5ExIM9TP4UoYdi90jLF1aTcsWCJNEO0UrgKzP0y3nTSg==", + "dev": true, + "requires": { + "jake": "^10.6.1" + } + }, + "electron-to-chromium": { + "version": "1.3.481", + "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.3.481.tgz", + "integrity": "sha512-q2PeCP2PQXSYadDo9uNY+uHXjdB9PcsUpCVoGlY8TZOPHGlXdevlqW9PkKeqCxn2QBkGB8b6AcMO++gh8X82bA==", + "dev": true + }, + "emoji-regex": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", + "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", + "dev": true + }, + "end-of-stream": { + "version": "1.4.4", + "resolved": "https://registry.npmjs.org/end-of-stream/-/end-of-stream-1.4.4.tgz", + "integrity": "sha512-+uw1inIHVPQoaVuHzRyXd21icM+cnt4CzD5rW+NC1wjOUSTOs+Te7FOv7AhN7vS9x/oIyhLP5PR1H+phQAHu5Q==", + "dev": true, + "requires": { + "once": "^1.4.0" + } + }, + "enquirer": { + "version": "2.3.5", + "resolved": "https://registry.npmjs.org/enquirer/-/enquirer-2.3.5.tgz", + "integrity": "sha512-BNT1C08P9XD0vNg3J475yIUG+mVdp9T6towYFHUv897X0KoHBjB1shyrNmhmtHWKP17iSWgo7Gqh7BBuzLZMSA==", + "dev": true, + "requires": { + "ansi-colors": "^3.2.1" + } + }, + "entities": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/entities/-/entities-2.0.3.tgz", + "integrity": "sha512-MyoZ0jgnLvB2X3Lg5HqpFmn1kybDiIfEQmKzTb5apr51Rb+T3KdmMiqa70T+bhGnyv7bQ6WMj2QMHpGMmlrUYQ==", + "dev": true + }, + "error": { + "version": "7.2.1", + "resolved": "https://registry.npmjs.org/error/-/error-7.2.1.tgz", + "integrity": "sha512-fo9HBvWnx3NGUKMvMwB/CBCMMrfEJgbDTVDEkPygA3Bdd3lM1OyCd+rbQ8BwnpF6GdVeOLDNmyL4N5Bg80ZvdA==", + "dev": true, + "requires": { + "string-template": "~0.2.1" + } + }, + "error-ex": { + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/error-ex/-/error-ex-1.3.2.tgz", + "integrity": "sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g==", + "dev": true, + "requires": { + "is-arrayish": "^0.2.1" + } + }, + "es-abstract": { + "version": "1.17.6", + "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.17.6.tgz", + "integrity": "sha512-Fr89bON3WFyUi5EvAeI48QTWX0AyekGgLA8H+c+7fbfCkJwRWRMLd8CQedNEyJuoYYhmtEqY92pgte1FAhBlhw==", + "dev": true, + "requires": { + "es-to-primitive": "^1.2.1", + "function-bind": "^1.1.1", + "has": "^1.0.3", + "has-symbols": "^1.0.1", + "is-callable": "^1.2.0", + "is-regex": "^1.1.0", + "object-inspect": "^1.7.0", + "object-keys": "^1.1.1", + "object.assign": "^4.1.0", + "string.prototype.trimend": "^1.0.1", + "string.prototype.trimstart": "^1.0.1" + } + }, + "es-to-primitive": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/es-to-primitive/-/es-to-primitive-1.2.1.tgz", + "integrity": "sha512-QCOllgZJtaUo9miYBcLChTUaHNjJF3PYs1VidD7AwiEj1kYxKeQTctLAezAOH5ZKRH0g2IgPn6KwB4IT8iRpvA==", + "dev": true, + "requires": { + "is-callable": "^1.1.4", + "is-date-object": "^1.0.1", + "is-symbol": "^1.0.2" + } + }, + "escalade": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.0.1.tgz", + "integrity": "sha512-DR6NO3h9niOT+MZs7bjxlj2a1k+POu5RN8CLTPX2+i78bRi9eLe7+0zXgUHMnGXWybYcL61E9hGhPKqedy8tQA==", + "dev": true + }, + "escape-string-regexp": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", + "integrity": "sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=", + "dev": true + }, + "eslint": { + "version": "7.3.1", + "resolved": "https://registry.npmjs.org/eslint/-/eslint-7.3.1.tgz", + "integrity": "sha512-cQC/xj9bhWUcyi/RuMbRtC3I0eW8MH0jhRELSvpKYkWep3C6YZ2OkvcvJVUeO6gcunABmzptbXBuDoXsjHmfTA==", + "dev": true, + "requires": { + "@babel/code-frame": "^7.0.0", + "ajv": "^6.10.0", + "chalk": "^4.0.0", + "cross-spawn": "^7.0.2", + "debug": "^4.0.1", + "doctrine": "^3.0.0", + "enquirer": "^2.3.5", + "eslint-scope": "^5.1.0", + "eslint-utils": "^2.0.0", + "eslint-visitor-keys": "^1.2.0", + "espree": "^7.1.0", + "esquery": "^1.2.0", + "esutils": "^2.0.2", + "file-entry-cache": "^5.0.1", + "functional-red-black-tree": "^1.0.1", + "glob-parent": "^5.0.0", + "globals": "^12.1.0", + "ignore": "^4.0.6", + "import-fresh": "^3.0.0", + "imurmurhash": "^0.1.4", + "is-glob": "^4.0.0", + "js-yaml": "^3.13.1", + "json-stable-stringify-without-jsonify": "^1.0.1", + "levn": "^0.4.1", + "lodash": "^4.17.14", + "minimatch": "^3.0.4", + "natural-compare": "^1.4.0", + "optionator": "^0.9.1", + "progress": "^2.0.0", + "regexpp": "^3.1.0", + "semver": "^7.2.1", + "strip-ansi": "^6.0.0", + "strip-json-comments": "^3.1.0", + "table": "^5.2.3", + "text-table": "^0.2.0", + "v8-compile-cache": "^2.0.3" + }, + "dependencies": { + "cross-spawn": { + "version": "7.0.3", + "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.3.tgz", + "integrity": "sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==", + "dev": true, + "requires": { + "path-key": "^3.1.0", + "shebang-command": "^2.0.0", + "which": "^2.0.1" + } + }, + "debug": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.1.1.tgz", + "integrity": "sha512-pYAIzeRo8J6KPEaJ0VWOh5Pzkbw/RetuzehGM7QRRX5he4fPHx2rdKMB256ehJCkX+XRQm16eZLqLNS8RSZXZw==", + "dev": true, + "requires": { + "ms": "^2.1.1" + } + }, + "ms": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", + "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", + "dev": true + }, + "semver": { + "version": "7.3.2", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.2.tgz", + "integrity": "sha512-OrOb32TeeambH6UrhtShmF7CRDqhL6/5XpPNp2DuRH6+9QLw/orhp72j87v8Qa1ScDkvrrBNpZcDejAirJmfXQ==", + "dev": true + }, + "strip-json-comments": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-3.1.0.tgz", + "integrity": "sha512-e6/d0eBu7gHtdCqFt0xJr642LdToM5/cN4Qb9DbHjVx1CP5RyeM+zH7pbecEmDv/lBqb0QH+6Uqq75rxFPkM0w==", + "dev": true + }, + "which": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", + "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==", + "dev": true, + "requires": { + "isexe": "^2.0.0" + } + } + } + }, + "eslint-config-wikimedia": { + "version": "0.16.1", + "resolved": "https://registry.npmjs.org/eslint-config-wikimedia/-/eslint-config-wikimedia-0.16.1.tgz", + "integrity": "sha512-VFP+zOaehZgbcH1TCeH6iBZuYv83mZMvu+YYntblbmFrw36Oo9lcNWiUL95SAE+5JtkGtAy51NLE1T61XJYn5w==", + "dev": true, + "requires": { + "eslint": "^7.1.0", + "eslint-plugin-es": "^3.0.1", + "eslint-plugin-jsdoc": "^26.0.0", + "eslint-plugin-json": "^2.1.1", + "eslint-plugin-mediawiki": "^0.2.4", + "eslint-plugin-mocha": "^7.0.1", + "eslint-plugin-no-jquery": "^2.4.1", + "eslint-plugin-node": "^11.1.0", + "eslint-plugin-qunit": "^4.2.0", + "eslint-plugin-vue": "^6.2.2", + "eslint-plugin-wdio": "^6.0.12" + } + }, + "eslint-plugin-es": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/eslint-plugin-es/-/eslint-plugin-es-3.0.1.tgz", + "integrity": "sha512-GUmAsJaN4Fc7Gbtl8uOBlayo2DqhwWvEzykMHSCZHU3XdJ+NSzzZcVhXh3VxX5icqQ+oQdIEawXX8xkR3mIFmQ==", + "dev": true, + "requires": { + "eslint-utils": "^2.0.0", + "regexpp": "^3.0.0" + } + }, + "eslint-plugin-jsdoc": { + "version": "26.0.2", + "resolved": "https://registry.npmjs.org/eslint-plugin-jsdoc/-/eslint-plugin-jsdoc-26.0.2.tgz", + "integrity": "sha512-KtZjqtM3Z8x84vQBFKGUyBbZRGXYHVWSJ2XyYSUTc8KhfFrvzQ/GXPp6f1M1/YCNzP3ImD5RuDNcr+OVvIZcBA==", + "dev": true, + "requires": { + "comment-parser": "^0.7.4", + "debug": "^4.1.1", + "jsdoctypeparser": "^6.1.0", + "lodash": "^4.17.15", + "regextras": "^0.7.1", + "semver": "^6.3.0", + "spdx-expression-parse": "^3.0.1" + }, + "dependencies": { + "debug": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.1.1.tgz", + "integrity": "sha512-pYAIzeRo8J6KPEaJ0VWOh5Pzkbw/RetuzehGM7QRRX5he4fPHx2rdKMB256ehJCkX+XRQm16eZLqLNS8RSZXZw==", + "dev": true, + "requires": { + "ms": "^2.1.1" + } + }, + "ms": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", + "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", + "dev": true + }, + "semver": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", + "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", + "dev": true + } + } + }, + "eslint-plugin-json": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/eslint-plugin-json/-/eslint-plugin-json-2.1.1.tgz", + "integrity": "sha512-Ktsab8ij33V2KFLhh4alC1FYztdmbV32DeMZYYUCZm4kKLW1s4DrleKKgtbAHSJsmshCK5QGOZtfyc2r3jCRsg==", + "dev": true, + "requires": { + "lodash": "^4.17.15", + "vscode-json-languageservice": "^3.5.1" + } + }, + "eslint-plugin-mediawiki": { + "version": "0.2.5", + "resolved": "https://registry.npmjs.org/eslint-plugin-mediawiki/-/eslint-plugin-mediawiki-0.2.5.tgz", + "integrity": "sha512-Xs5G4f1EnS6+9gFWkk28nWA9xcOEPx7YZEGsMYGLelZRAF+2DmV/PigF5N5VqoOkNBpwcbXqLD8wLfkg29aF8w==", + "dev": true, + "requires": { + "eslint-plugin-vue": "^6.2.2", + "upath": "^1.2.0" + } + }, + "eslint-plugin-mocha": { + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/eslint-plugin-mocha/-/eslint-plugin-mocha-7.0.1.tgz", + "integrity": "sha512-zkQRW9UigRaayGm/pK9TD5RjccKXSgQksNtpsXbG9b6L5I+jNx7m98VUbZ4w1H1ArlNA+K7IOH+z8TscN6sOYg==", + "dev": true, + "requires": { + "eslint-utils": "^2.0.0", + "ramda": "^0.27.0" + } + }, + "eslint-plugin-no-jquery": { + "version": "2.5.0", + "resolved": "https://registry.npmjs.org/eslint-plugin-no-jquery/-/eslint-plugin-no-jquery-2.5.0.tgz", + "integrity": "sha512-RrQ380mUJJKdjgpQ/tZAJ3B3W1n3LbVmULooS2Pv5pUDcc5uVHVSJMTdUlsbvQyfo6hWP2LJ4FbOoDzENWcF7A==", + "dev": true + }, + "eslint-plugin-node": { + "version": "11.1.0", + "resolved": "https://registry.npmjs.org/eslint-plugin-node/-/eslint-plugin-node-11.1.0.tgz", + "integrity": "sha512-oUwtPJ1W0SKD0Tr+wqu92c5xuCeQqB3hSCHasn/ZgjFdA9iDGNkNf2Zi9ztY7X+hNuMib23LNGRm6+uN+KLE3g==", + "dev": true, + "requires": { + "eslint-plugin-es": "^3.0.0", + "eslint-utils": "^2.0.0", + "ignore": "^5.1.1", + "minimatch": "^3.0.4", + "resolve": "^1.10.1", + "semver": "^6.1.0" + }, + "dependencies": { + "ignore": { + "version": "5.1.8", + "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.1.8.tgz", + "integrity": "sha512-BMpfD7PpiETpBl/A6S498BaIJ6Y/ABT93ETbby2fP00v4EbvPBXWEoaR1UBPKs3iR53pJY7EtZk5KACI57i1Uw==", + "dev": true + }, + "semver": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", + "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", + "dev": true + } + } + }, + "eslint-plugin-qunit": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/eslint-plugin-qunit/-/eslint-plugin-qunit-4.2.0.tgz", + "integrity": "sha512-UibPK0fSshPTJauyitsHjACixpf+I5BEKqXi6WJ/WGhW31WwP7flSdBW8+Y9B46v05KYH6MJg/uZVIaiaHO5Cg==", + "dev": true + }, + "eslint-plugin-vue": { + "version": "6.2.2", + "resolved": "https://registry.npmjs.org/eslint-plugin-vue/-/eslint-plugin-vue-6.2.2.tgz", + "integrity": "sha512-Nhc+oVAHm0uz/PkJAWscwIT4ijTrK5fqNqz9QB1D35SbbuMG1uB6Yr5AJpvPSWg+WOw7nYNswerYh0kOk64gqQ==", + "dev": true, + "requires": { + "natural-compare": "^1.4.0", + "semver": "^5.6.0", + "vue-eslint-parser": "^7.0.0" + } + }, + "eslint-plugin-wdio": { + "version": "6.0.12", + "resolved": "https://registry.npmjs.org/eslint-plugin-wdio/-/eslint-plugin-wdio-6.0.12.tgz", + "integrity": "sha512-qZqcU1Z0bqrqhYM1MbwIvKQxcQEGIOEclOjcveavvLZAN4ezpXb1Ogw3xu+UK13iArregJOMI6uUt+JkFmER1A==", + "dev": true + }, + "eslint-scope": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-5.1.0.tgz", + "integrity": "sha512-iiGRvtxWqgtx5m8EyQUJihBloE4EnYeGE/bz1wSPwJE6tZuJUtHlhqDM4Xj2ukE8Dyy1+HCZ4hE0fzIVMzb58w==", + "dev": true, + "requires": { + "esrecurse": "^4.1.0", + "estraverse": "^4.1.1" + } + }, + "eslint-utils": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/eslint-utils/-/eslint-utils-2.1.0.tgz", + "integrity": "sha512-w94dQYoauyvlDc43XnGB8lU3Zt713vNChgt4EWwhXAP2XkBvndfxF0AgIqKOOasjPIPzj9JqgwkwbCYD0/V3Zg==", + "dev": true, + "requires": { + "eslint-visitor-keys": "^1.1.0" + } + }, + "eslint-visitor-keys": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-1.3.0.tgz", + "integrity": "sha512-6J72N8UNa462wa/KFODt/PJ3IU60SDpC3QXC1Hjc1BXXpfL2C9R5+AU7jhe0F6GREqVMh4Juu+NY7xn+6dipUQ==", + "dev": true + }, + "espree": { + "version": "7.1.0", + "resolved": "https://registry.npmjs.org/espree/-/espree-7.1.0.tgz", + "integrity": "sha512-dcorZSyfmm4WTuTnE5Y7MEN1DyoPYy1ZR783QW1FJoenn7RailyWFsq/UL6ZAAA7uXurN9FIpYyUs3OfiIW+Qw==", + "dev": true, + "requires": { + "acorn": "^7.2.0", + "acorn-jsx": "^5.2.0", + "eslint-visitor-keys": "^1.2.0" + } + }, + "esprima": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/esprima/-/esprima-4.0.1.tgz", + "integrity": "sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==", + "dev": true + }, + "esquery": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/esquery/-/esquery-1.3.1.tgz", + "integrity": "sha512-olpvt9QG0vniUBZspVRN6lwB7hOZoTRtT+jzR+tS4ffYx2mzbw+z0XCOk44aaLYKApNX5nMm+E+P6o25ip/DHQ==", + "dev": true, + "requires": { + "estraverse": "^5.1.0" + }, + "dependencies": { + "estraverse": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.1.0.tgz", + "integrity": "sha512-FyohXK+R0vE+y1nHLoBM7ZTyqRpqAlhdZHCWIWEviFLiGB8b04H6bQs8G+XTthacvT8VuwvteiP7RJSxMs8UEw==", + "dev": true + } + } + }, + "esrecurse": { + "version": "4.2.1", + "resolved": "https://registry.npmjs.org/esrecurse/-/esrecurse-4.2.1.tgz", + "integrity": "sha512-64RBB++fIOAXPw3P9cy89qfMlvZEXZkqqJkjqqXIvzP5ezRZjW+lPWjw35UX/3EhUPFYbg5ER4JYgDw4007/DQ==", + "dev": true, + "requires": { + "estraverse": "^4.1.0" + } + }, + "estraverse": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-4.3.0.tgz", + "integrity": "sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw==", + "dev": true + }, + "esutils": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.3.tgz", + "integrity": "sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==", + "dev": true + }, + "eventemitter2": { + "version": "0.4.14", + "resolved": "https://registry.npmjs.org/eventemitter2/-/eventemitter2-0.4.14.tgz", + "integrity": "sha1-j2G3XN4BKy6esoTUVFWDtWQ7Yas=", + "dev": true + }, + "execall": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/execall/-/execall-2.0.0.tgz", + "integrity": "sha512-0FU2hZ5Hh6iQnarpRtQurM/aAvp3RIbfvgLHrcqJYzhXyV2KFruhuChf9NC6waAhiUR7FFtlugkI4p7f2Fqlow==", + "dev": true, + "requires": { + "clone-regexp": "^2.1.0" + } + }, + "exit": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/exit/-/exit-0.1.2.tgz", + "integrity": "sha1-BjJjj42HfMghB9MKD/8aF8uhzQw=", + "dev": true + }, + "expect": { + "version": "25.5.0", + "resolved": "https://registry.npmjs.org/expect/-/expect-25.5.0.tgz", + "integrity": "sha512-w7KAXo0+6qqZZhovCaBVPSIqQp7/UTcx4M9uKt2m6pd2VB1voyC8JizLRqeEqud3AAVP02g+hbErDu5gu64tlA==", + "dev": true, + "requires": { + "@jest/types": "^25.5.0", + "ansi-styles": "^4.0.0", + "jest-get-type": "^25.2.6", + "jest-matcher-utils": "^25.5.0", + "jest-message-util": "^25.5.0", + "jest-regex-util": "^25.2.6" + } + }, + "expect-webdriverio": { + "version": "1.1.5", + "resolved": "https://registry.npmjs.org/expect-webdriverio/-/expect-webdriverio-1.1.5.tgz", + "integrity": "sha512-+RL4Lkne+/z+o1G5Y0S5QuEXeICxt4jExhBSM2Jn/mrDwb+PZVKPM2Yd1OzLsKeCdQLtw4Oft6514Gp5GLgdZA==", + "dev": true, + "requires": { + "expect": "^25.2.1", + "jest-matcher-utils": "^25.1.0" + } + }, + "extend": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/extend/-/extend-3.0.2.tgz", + "integrity": "sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g==", + "dev": true + }, + "external-editor": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/external-editor/-/external-editor-3.1.0.tgz", + "integrity": "sha512-hMQ4CX1p1izmuLYyZqLMO/qGNw10wSv9QDCPfzXfyFrOaCSSoRfqE1Kf1s5an66J5JZC62NewG+mK49jOCtQew==", + "dev": true, + "requires": { + "chardet": "^0.7.0", + "iconv-lite": "^0.4.24", + "tmp": "^0.0.33" + } + }, + "extract-zip": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/extract-zip/-/extract-zip-2.0.1.tgz", + "integrity": "sha512-GDhU9ntwuKyGXdZBUgTIe+vXnWj0fppUEtMDL0+idd5Sta8TGpHssn/eusA9mrPr9qNDym6SxAYZjNvCn/9RBg==", + "dev": true, + "requires": { + "@types/yauzl": "^2.9.1", + "debug": "^4.1.1", + "get-stream": "^5.1.0", + "yauzl": "^2.10.0" + }, + "dependencies": { + "debug": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.1.1.tgz", + "integrity": "sha512-pYAIzeRo8J6KPEaJ0VWOh5Pzkbw/RetuzehGM7QRRX5he4fPHx2rdKMB256ehJCkX+XRQm16eZLqLNS8RSZXZw==", + "dev": true, + "requires": { + "ms": "^2.1.1" + } + }, + "ms": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", + "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", + "dev": true + } + } + }, + "extsprintf": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/extsprintf/-/extsprintf-1.3.0.tgz", + "integrity": "sha1-lpGEQOMEGnpBT4xS48V06zw+HgU=", + "dev": true + }, + "fast-deep-equal": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-2.0.1.tgz", + "integrity": "sha1-ewUhjd+WZ79/Nwv3/bLLFf3Qqkk=", + "dev": true + }, + "fast-glob": { + "version": "3.2.4", + "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.2.4.tgz", + "integrity": "sha512-kr/Oo6PX51265qeuCYsyGypiO5uJFgBS0jksyG7FUeCyQzNwYnzrNIMR1NXfkZXsMYXYLRAHgISHBz8gQcxKHQ==", + "dev": true, + "requires": { + "@nodelib/fs.stat": "^2.0.2", + "@nodelib/fs.walk": "^1.2.3", + "glob-parent": "^5.1.0", + "merge2": "^1.3.0", + "micromatch": "^4.0.2", + "picomatch": "^2.2.1" + } + }, + "fast-json-stable-stringify": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz", + "integrity": "sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==", + "dev": true + }, + "fast-levenshtein": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz", + "integrity": "sha1-PYpcZog6FqMMqGQ+hR8Zuqd5eRc=", + "dev": true + }, + "fastq": { + "version": "1.8.0", + "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.8.0.tgz", + "integrity": "sha512-SMIZoZdLh/fgofivvIkmknUXyPnvxRE3DhtZ5Me3Mrsk5gyPL42F0xr51TdRXskBxHfMp+07bcYzfsYEsSQA9Q==", + "dev": true, + "requires": { + "reusify": "^1.0.4" + } + }, + "faye-websocket": { + "version": "0.10.0", + "resolved": "https://registry.npmjs.org/faye-websocket/-/faye-websocket-0.10.0.tgz", + "integrity": "sha1-TkkvjQTftviQA1B/btvy1QHnxvQ=", + "dev": true, + "requires": { + "websocket-driver": ">=0.5.1" + } + }, + "fd-slicer": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/fd-slicer/-/fd-slicer-1.1.0.tgz", + "integrity": "sha1-JcfInLH5B3+IkbvmHY85Dq4lbx4=", + "dev": true, + "requires": { + "pend": "~1.2.0" + } + }, + "fibers": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/fibers/-/fibers-4.0.3.tgz", + "integrity": "sha512-MW5VrDtTOLpKK7lzw4qD7Z9tXaAhdOmOED5RHzg3+HjUk+ibkjVW0Py2ERtdqgTXaerLkVkBy2AEmJiT6RMyzg==", + "dev": true, + "requires": { + "detect-libc": "^1.0.3" + } + }, + "figures": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/figures/-/figures-3.2.0.tgz", + "integrity": "sha512-yaduQFRKLXYOGgEn6AZau90j3ggSOyiqXU0F9JZfeXYhNa+Jk4X+s45A2zg5jns87GAFa34BBm2kXw4XpNcbdg==", + "dev": true, + "requires": { + "escape-string-regexp": "^1.0.5" + } + }, + "file-entry-cache": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-5.0.1.tgz", + "integrity": "sha512-bCg29ictuBaKUwwArK4ouCaqDgLZcysCFLmM/Yn/FDoqndh/9vNuQfXRDvTuXKLxfD/JtZQGKFT8MGcJBK644g==", + "dev": true, + "requires": { + "flat-cache": "^2.0.1" + } + }, + "filelist": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/filelist/-/filelist-1.0.1.tgz", + "integrity": "sha512-8zSK6Nu0DQIC08mUC46sWGXi+q3GGpKydAG36k+JDba6VRpkevvOWUW5a/PhShij4+vHT9M+ghgG7eM+a9JDUQ==", + "dev": true, + "requires": { + "minimatch": "^3.0.4" + } + }, + "fill-range": { + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz", + "integrity": "sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==", + "dev": true, + "requires": { + "to-regex-range": "^5.0.1" + } + }, + "find-up": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-4.1.0.tgz", + "integrity": "sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==", + "dev": true, + "requires": { + "locate-path": "^5.0.0", + "path-exists": "^4.0.0" + } + }, + "findup-sync": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/findup-sync/-/findup-sync-0.3.0.tgz", + "integrity": "sha1-N5MKpdgWt3fANEXhlmzGeQpMCxY=", + "dev": true, + "requires": { + "glob": "~5.0.0" + }, + "dependencies": { + "glob": { + "version": "5.0.15", + "resolved": "https://registry.npmjs.org/glob/-/glob-5.0.15.tgz", + "integrity": "sha1-G8k2ueAvSmA/zCIuz3Yz0wuLk7E=", + "dev": true, + "requires": { + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "2 || 3", + "once": "^1.3.0", + "path-is-absolute": "^1.0.0" + } + } + } + }, + "flat": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/flat/-/flat-4.1.0.tgz", + "integrity": "sha512-Px/TiLIznH7gEDlPXcUD4KnBusa6kR6ayRUVcnEAbreRIuhkqow/mun59BuRXwoYk7ZQOLW1ZM05ilIvK38hFw==", + "dev": true, + "requires": { + "is-buffer": "~2.0.3" + } + }, + "flat-cache": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-2.0.1.tgz", + "integrity": "sha512-LoQe6yDuUMDzQAEH8sgmh4Md6oZnc/7PjtwjNFSzveXqSHt6ka9fPBuso7IGf9Rz4uqnSnWiFH2B/zj24a5ReA==", + "dev": true, + "requires": { + "flatted": "^2.0.0", + "rimraf": "2.6.3", + "write": "1.0.3" + }, + "dependencies": { + "rimraf": { + "version": "2.6.3", + "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.6.3.tgz", + "integrity": "sha512-mwqeW5XsA2qAejG46gYdENaxXjx9onRNCfn7L0duuP4hCuTIi/QO7PDK07KJfp1d+izWPrzEJDcSqBa0OZQriA==", + "dev": true, + "requires": { + "glob": "^7.1.3" + } + } + } + }, + "flatted": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/flatted/-/flatted-2.0.2.tgz", + "integrity": "sha512-r5wGx7YeOwNWNlCA0wQ86zKyDLMQr+/RB8xy74M4hTphfmjlijTSSXGuH8rnvKZnfT9i+75zmd8jcKdMR4O6jA==", + "dev": true + }, + "forever-agent": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/forever-agent/-/forever-agent-0.6.1.tgz", + "integrity": "sha1-+8cfDEGt6zf5bFd60e1C2P2sypE=", + "dev": true + }, + "form-data": { + "version": "2.3.3", + "resolved": "https://registry.npmjs.org/form-data/-/form-data-2.3.3.tgz", + "integrity": "sha512-1lLKB2Mu3aGP1Q/2eCOx0fNbRMe7XdwktwOruhfqqd0rIJWwN4Dh+E3hrPSlDCXnSR7UtZ1N38rVXm+6+MEhJQ==", + "dev": true, + "requires": { + "asynckit": "^0.4.0", + "combined-stream": "^1.0.6", + "mime-types": "^2.1.12" + } + }, + "fs-constants": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/fs-constants/-/fs-constants-1.0.0.tgz", + "integrity": "sha512-y6OAwoSIf7FyjMIv94u+b5rdheZEjzR63GTyZJm5qh4Bi+2YgwLCcI/fPFZkL5PSixOt6ZNKm+w+Hfp/Bciwow==", + "dev": true + }, + "fs-extra": { + "version": "9.0.1", + "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-9.0.1.tgz", + "integrity": "sha512-h2iAoN838FqAFJY2/qVpzFXy+EBxfVE220PalAqQLDVsFOHLJrZvut5puAbCdNv6WJk+B8ihI+k0c7JK5erwqQ==", + "dev": true, + "requires": { + "at-least-node": "^1.0.0", + "graceful-fs": "^4.2.0", + "jsonfile": "^6.0.1", + "universalify": "^1.0.0" + } + }, + "fs.realpath": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", + "integrity": "sha1-FQStJSMVjKpA20onh8sBQRmU6k8=", + "dev": true + }, + "fsevents": { + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.1.3.tgz", + "integrity": "sha512-Auw9a4AxqWpa9GUfj370BMPzzyncfBABW8Mab7BGWBYDj4Isgq+cDKtx0i6u9jcX9pQDnswsaaOTgTmA5pEjuQ==", + "dev": true, + "optional": true + }, + "function-bind": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz", + "integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==", + "dev": true + }, + "functional-red-black-tree": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/functional-red-black-tree/-/functional-red-black-tree-1.0.1.tgz", + "integrity": "sha1-GwqzvVU7Kg1jmdKcDj6gslIHgyc=", + "dev": true + }, + "gaze": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/gaze/-/gaze-1.1.3.tgz", + "integrity": "sha512-BRdNm8hbWzFzWHERTrejLqwHDfS4GibPoq5wjTPIoJHoBtKGPg3xAFfxmM+9ztbXelxcf2hwQcaz1PtmFeue8g==", + "dev": true, + "requires": { + "globule": "^1.0.0" + } + }, + "gensync": { + "version": "1.0.0-beta.1", + "resolved": "https://registry.npmjs.org/gensync/-/gensync-1.0.0-beta.1.tgz", + "integrity": "sha512-r8EC6NO1sngH/zdD9fiRDLdcgnbayXah+mLgManTaIZJqEC1MZstmnox8KpnI2/fxQwrp5OpCOYWLp4rBl4Jcg==", + "dev": true + }, + "get-caller-file": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-2.0.5.tgz", + "integrity": "sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==", + "dev": true + }, + "get-stdin": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/get-stdin/-/get-stdin-4.0.1.tgz", + "integrity": "sha1-uWjGsKBDhDJJAui/Gl3zJXmkUP4=", + "dev": true + }, + "get-stream": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-5.1.0.tgz", + "integrity": "sha512-EXr1FOzrzTfGeL0gQdeFEvOMm2mzMOglyiOXSTpPC+iAjAKftbr3jpCMWynogwYnM+eSj9sHGc6wjIcDvYiygw==", + "dev": true, + "requires": { + "pump": "^3.0.0" + } + }, + "getobject": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/getobject/-/getobject-0.1.0.tgz", + "integrity": "sha1-BHpEl4n6Fg0Bj1SG7ZEyC27HiFw=", + "dev": true + }, + "getpass": { + "version": "0.1.7", + "resolved": "https://registry.npmjs.org/getpass/-/getpass-0.1.7.tgz", + "integrity": "sha1-Xv+OPmhNVprkyysSgmBOi6YhSfo=", + "dev": true, + "requires": { + "assert-plus": "^1.0.0" + } + }, + "glob": { + "version": "7.1.6", + "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.6.tgz", + "integrity": "sha512-LwaxwyZ72Lk7vZINtNNrywX0ZuLyStrdDtabefZKAY5ZGJhVtgdznluResxNmPitE0SAO+O26sWTHeKSI2wMBA==", + "dev": true, + "requires": { + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^3.0.4", + "once": "^1.3.0", + "path-is-absolute": "^1.0.0" + } + }, + "glob-parent": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.1.tgz", + "integrity": "sha512-FnI+VGOpnlGHWZxthPGR+QhR78fuiK0sNLkHQv+bL9fQi57lNNdquIbna/WrfROrolq8GK5Ek6BiMwqL/voRYQ==", + "dev": true, + "requires": { + "is-glob": "^4.0.1" + } + }, + "global-modules": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/global-modules/-/global-modules-2.0.0.tgz", + "integrity": "sha512-NGbfmJBp9x8IxyJSd1P+otYK8vonoJactOogrVfFRIAEY1ukil8RSKDz2Yo7wh1oihl51l/r6W4epkeKJHqL8A==", + "dev": true, + "requires": { + "global-prefix": "^3.0.0" + } + }, + "global-prefix": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/global-prefix/-/global-prefix-3.0.0.tgz", + "integrity": "sha512-awConJSVCHVGND6x3tmMaKcQvwXLhjdkmomy2W+Goaui8YPgYgXJZewhg3fWC+DlfqqQuWg8AwqjGTD2nAPVWg==", + "dev": true, + "requires": { + "ini": "^1.3.5", + "kind-of": "^6.0.2", + "which": "^1.3.1" + } + }, + "globals": { + "version": "12.4.0", + "resolved": "https://registry.npmjs.org/globals/-/globals-12.4.0.tgz", + "integrity": "sha512-BWICuzzDvDoH54NHKCseDanAhE3CeDorgDL5MT6LMXXj2WCnd9UC2szdk4AWLfjdgNBCXLUanXYcpBBKOSWGwg==", + "dev": true, + "requires": { + "type-fest": "^0.8.1" + }, + "dependencies": { + "type-fest": { + "version": "0.8.1", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.8.1.tgz", + "integrity": "sha512-4dbzIzqvjtgiM5rw1k5rEHtBANKmdudhGyBEajN01fEyhaAIhsoKNy6y7+IN93IfpFtwY9iqi7kD+xwKhQsNJA==", + "dev": true + } + } + }, + "globby": { + "version": "11.0.1", + "resolved": "https://registry.npmjs.org/globby/-/globby-11.0.1.tgz", + "integrity": "sha512-iH9RmgwCmUJHi2z5o2l3eTtGBtXek1OYlHrbcxOYugyHLmAsZrPj43OtHThd62Buh/Vv6VyCBD2bdyWcGNQqoQ==", + "dev": true, + "requires": { + "array-union": "^2.1.0", + "dir-glob": "^3.0.1", + "fast-glob": "^3.1.1", + "ignore": "^5.1.4", + "merge2": "^1.3.0", + "slash": "^3.0.0" + }, + "dependencies": { + "ignore": { + "version": "5.1.8", + "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.1.8.tgz", + "integrity": "sha512-BMpfD7PpiETpBl/A6S498BaIJ6Y/ABT93ETbby2fP00v4EbvPBXWEoaR1UBPKs3iR53pJY7EtZk5KACI57i1Uw==", + "dev": true + } + } + }, + "globjoin": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/globjoin/-/globjoin-0.1.4.tgz", + "integrity": "sha1-L0SUrIkZ43Z8XLtpHp9GMyQoXUM=", + "dev": true + }, + "globule": { + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/globule/-/globule-1.3.2.tgz", + "integrity": "sha512-7IDTQTIu2xzXkT+6mlluidnWo+BypnbSoEVVQCGfzqnl5Ik8d3e1d4wycb8Rj9tWW+Z39uPWsdlquqiqPCd/pA==", + "dev": true, + "requires": { + "glob": "~7.1.1", + "lodash": "~4.17.10", + "minimatch": "~3.0.2" + } + }, + "gonzales-pe": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/gonzales-pe/-/gonzales-pe-4.3.0.tgz", + "integrity": "sha512-otgSPpUmdWJ43VXyiNgEYE4luzHCL2pz4wQ0OnDluC6Eg4Ko3Vexy/SrSynglw/eR+OhkzmqFCZa/OFa/RgAOQ==", + "dev": true, + "requires": { + "minimist": "^1.2.5" + } + }, + "got": { + "version": "11.3.0", + "resolved": "https://registry.npmjs.org/got/-/got-11.3.0.tgz", + "integrity": "sha512-yi/kiZY2tNMtt5IfbfX8UL3hAZWb2gZruxYZ72AY28pU5p0TZjZdl0uRsuaFbnC0JopdUi3I+Mh1F3dPQ9Dh0Q==", + "dev": true, + "requires": { + "@sindresorhus/is": "^2.1.1", + "@szmarczak/http-timer": "^4.0.5", + "@types/cacheable-request": "^6.0.1", + "@types/responselike": "^1.0.0", + "cacheable-lookup": "^5.0.3", + "cacheable-request": "^7.0.1", + "decompress-response": "^6.0.0", + "get-stream": "^5.1.0", + "http2-wrapper": "^1.0.0-beta.4.5", + "lowercase-keys": "^2.0.0", + "p-cancelable": "^2.0.0", + "responselike": "^2.0.0" + } + }, + "graceful-fs": { + "version": "4.2.4", + "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.4.tgz", + "integrity": "sha512-WjKPNJF79dtJAVniUlGGWHYGz2jWxT6VhN/4m1NdkbZ2nOsEF+cI1Edgql5zCRhs/VsQYRvrXctxktVXZUkixw==", + "dev": true + }, + "grapheme-splitter": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/grapheme-splitter/-/grapheme-splitter-1.0.4.tgz", + "integrity": "sha512-bzh50DW9kTPM00T8y4o8vQg89Di9oLJVLW/KaOGIXJWP/iqCN6WKYkbNOF04vFLJhwcpYUh9ydh/+5vpOqV4YQ==", + "dev": true + }, + "growl": { + "version": "1.10.5", + "resolved": "https://registry.npmjs.org/growl/-/growl-1.10.5.tgz", + "integrity": "sha512-qBr4OuELkhPenW6goKVXiv47US3clb3/IbuWF9KNKEijAy9oeHxU9IgzjvJhHkUzhaj7rOUD7+YGWqUjLp5oSA==", + "dev": true + }, + "grunt": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/grunt/-/grunt-1.1.0.tgz", + "integrity": "sha512-+NGod0grmviZ7Nzdi9am7vuRS/h76PcWDsV635mEXF0PEQMUV6Kb+OjTdsVxbi0PZmfQOjCMKb3w8CVZcqsn1g==", + "dev": true, + "requires": { + "coffeescript": "~1.10.0", + "dateformat": "~1.0.12", + "eventemitter2": "~0.4.13", + "exit": "~0.1.1", + "findup-sync": "~0.3.0", + "glob": "~7.0.0", + "grunt-cli": "~1.2.0", + "grunt-known-options": "~1.1.0", + "grunt-legacy-log": "~2.0.0", + "grunt-legacy-util": "~1.1.1", + "iconv-lite": "~0.4.13", + "js-yaml": "~3.13.1", + "minimatch": "~3.0.2", + "mkdirp": "~1.0.3", + "nopt": "~3.0.6", + "path-is-absolute": "~1.0.0", + "rimraf": "~2.6.2" + }, + "dependencies": { + "glob": { + "version": "7.0.6", + "resolved": "https://registry.npmjs.org/glob/-/glob-7.0.6.tgz", + "integrity": "sha1-IRuvr0nlJbjNkyYNFKsTYVKz9Xo=", + "dev": true, + "requires": { + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^3.0.2", + "once": "^1.3.0", + "path-is-absolute": "^1.0.0" + } + }, + "grunt-cli": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/grunt-cli/-/grunt-cli-1.2.0.tgz", + "integrity": "sha1-VisRnrsGndtGSs4oRVAb6Xs1tqg=", + "dev": true, + "requires": { + "findup-sync": "~0.3.0", + "grunt-known-options": "~1.1.0", + "nopt": "~3.0.6", + "resolve": "~1.1.0" + } + }, + "mkdirp": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-1.0.4.tgz", + "integrity": "sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw==", + "dev": true + }, + "resolve": { + "version": "1.1.7", + "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.1.7.tgz", + "integrity": "sha1-IDEU2CrSxe2ejgQRs5ModeiJ6Xs=", + "dev": true + }, + "rimraf": { + "version": "2.6.3", + "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.6.3.tgz", + "integrity": "sha512-mwqeW5XsA2qAejG46gYdENaxXjx9onRNCfn7L0duuP4hCuTIi/QO7PDK07KJfp1d+izWPrzEJDcSqBa0OZQriA==", + "dev": true, + "requires": { + "glob": "^7.1.3" + }, + "dependencies": { + "glob": { + "version": "7.1.6", + "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.6.tgz", + "integrity": "sha512-LwaxwyZ72Lk7vZINtNNrywX0ZuLyStrdDtabefZKAY5ZGJhVtgdznluResxNmPitE0SAO+O26sWTHeKSI2wMBA==", + "dev": true, + "requires": { + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^3.0.4", + "once": "^1.3.0", + "path-is-absolute": "^1.0.0" + } + } + } + } + } + }, + "grunt-banana-checker": { + "version": "0.9.0", + "resolved": "https://registry.npmjs.org/grunt-banana-checker/-/grunt-banana-checker-0.9.0.tgz", + "integrity": "sha512-SqPiB6OazWqR8USL0NymtuT5Br3mD9WBBsM1rHC/3wIi2SrZNM6/+j9CIeuEM5oCn+AtO2Y0+rzzFyOdC9afAg==", + "dev": true + }, + "grunt-contrib-watch": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/grunt-contrib-watch/-/grunt-contrib-watch-1.1.0.tgz", + "integrity": "sha512-yGweN+0DW5yM+oo58fRu/XIRrPcn3r4tQx+nL7eMRwjpvk+rQY6R8o94BPK0i2UhTg9FN21hS+m8vR8v9vXfeg==", + "dev": true, + "requires": { + "async": "^2.6.0", + "gaze": "^1.1.0", + "lodash": "^4.17.10", + "tiny-lr": "^1.1.1" + }, + "dependencies": { + "async": { + "version": "2.6.3", + "resolved": "https://registry.npmjs.org/async/-/async-2.6.3.tgz", + "integrity": "sha512-zflvls11DCy+dQWzTW2dzuilv8Z5X/pjfmZOWba6TNIVDm+2UDaJmXSOXlasHKfNBs8oo3M0aT50fDEWfKZjXg==", + "dev": true, + "requires": { + "lodash": "^4.17.14" + } + }, + "lodash": { + "version": "4.17.19", + "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.19.tgz", + "integrity": "sha512-JNvd8XER9GQX0v2qJgsaN/mzFCNA5BRe/j8JN9d+tWyGLSodKQHKFicdwNYzWwI3wjRnaKPsGj1XkBjx/F96DQ==", + "dev": true + } + } + }, + "grunt-eslint": { + "version": "23.0.0", + "resolved": "https://registry.npmjs.org/grunt-eslint/-/grunt-eslint-23.0.0.tgz", + "integrity": "sha512-QqHSAiGF08EVD7YlD4OSRWuLRaDvpsRdTptwy9WaxUXE+03mCLVA/lEaR6SHWehF7oUwIqCEjaNONeeeWlB4LQ==", + "dev": true, + "requires": { + "chalk": "^4.0.0", + "eslint": "^7.0.0" + } + }, + "grunt-known-options": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/grunt-known-options/-/grunt-known-options-1.1.1.tgz", + "integrity": "sha512-cHwsLqoighpu7TuYj5RonnEuxGVFnztcUqTqp5rXFGYL4OuPFofwC4Ycg7n9fYwvK6F5WbYgeVOwph9Crs2fsQ==", + "dev": true + }, + "grunt-legacy-log": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/grunt-legacy-log/-/grunt-legacy-log-2.0.0.tgz", + "integrity": "sha512-1m3+5QvDYfR1ltr8hjiaiNjddxGdQWcH0rw1iKKiQnF0+xtgTazirSTGu68RchPyh1OBng1bBUjLmX8q9NpoCw==", + "dev": true, + "requires": { + "colors": "~1.1.2", + "grunt-legacy-log-utils": "~2.0.0", + "hooker": "~0.2.3", + "lodash": "~4.17.5" + } + }, + "grunt-legacy-log-utils": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/grunt-legacy-log-utils/-/grunt-legacy-log-utils-2.0.1.tgz", + "integrity": "sha512-o7uHyO/J+i2tXG8r2bZNlVk20vlIFJ9IEYyHMCQGfWYru8Jv3wTqKZzvV30YW9rWEjq0eP3cflQ1qWojIe9VFA==", + "dev": true, + "requires": { + "chalk": "~2.4.1", + "lodash": "~4.17.10" + }, + "dependencies": { + "ansi-styles": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", + "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", + "dev": true, + "requires": { + "color-convert": "^1.9.0" + } + }, + "chalk": { + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", + "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", + "dev": true, + "requires": { + "ansi-styles": "^3.2.1", + "escape-string-regexp": "^1.0.5", + "supports-color": "^5.3.0" + } + }, + "color-convert": { + "version": "1.9.3", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", + "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", + "dev": true, + "requires": { + "color-name": "1.1.3" + } + }, + "color-name": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", + "integrity": "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=", + "dev": true + }, + "has-flag": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", + "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=", + "dev": true + }, + "supports-color": { + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", + "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", + "dev": true, + "requires": { + "has-flag": "^3.0.0" + } + } + } + }, + "grunt-legacy-util": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/grunt-legacy-util/-/grunt-legacy-util-1.1.1.tgz", + "integrity": "sha512-9zyA29w/fBe6BIfjGENndwoe1Uy31BIXxTH3s8mga0Z5Bz2Sp4UCjkeyv2tI449ymkx3x26B+46FV4fXEddl5A==", + "dev": true, + "requires": { + "async": "~1.5.2", + "exit": "~0.1.1", + "getobject": "~0.1.0", + "hooker": "~0.2.3", + "lodash": "~4.17.10", + "underscore.string": "~3.3.4", + "which": "~1.3.0" + }, + "dependencies": { + "async": { + "version": "1.5.2", + "resolved": "https://registry.npmjs.org/async/-/async-1.5.2.tgz", + "integrity": "sha1-7GphrlZIDAw8skHJVhjiCJL5Zyo=", + "dev": true + } + } + }, + "grunt-stylelint": { + "version": "0.15.0", + "resolved": "https://registry.npmjs.org/grunt-stylelint/-/grunt-stylelint-0.15.0.tgz", + "integrity": "sha512-1G5kbT3Y6OtAqgIv/XErtI6ai1t1UdtQWXxUV5Gd900PQoEzu/WrBYhGNAXdb/9nAsNWNjFHQjtdXQtZcDmobA==", + "dev": true, + "requires": { + "chalk": "^3.0.0" + }, + "dependencies": { + "chalk": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-3.0.0.tgz", + "integrity": "sha512-4D3B6Wf41KOYRFdszmDqMCGq5VV/uMAB273JILmO+3jAlh8X4qDtdtgCR3fxtbLEMzSx22QdhnDcJvu2u1fVwg==", + "dev": true, + "requires": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + } + } + } + }, + "grunt-svgmin": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/grunt-svgmin/-/grunt-svgmin-5.0.0.tgz", + "integrity": "sha1-8O4pOtFi++hcjD5o2xUt/3J3qCQ=", + "dev": true, + "requires": { + "chalk": "^2.3.0", + "each-async": "^1.1.1", + "log-symbols": "^2.1.0", + "pretty-bytes": "^4.0.2", + "svgo": "^1.0.3" + }, + "dependencies": { + "ansi-styles": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", + "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", + "dev": true, + "requires": { + "color-convert": "^1.9.0" + } + }, + "chalk": { + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", + "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", + "dev": true, + "requires": { + "ansi-styles": "^3.2.1", + "escape-string-regexp": "^1.0.5", + "supports-color": "^5.3.0" + } + }, + "color-convert": { + "version": "1.9.3", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", + "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", + "dev": true, + "requires": { + "color-name": "1.1.3" + } + }, + "color-name": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", + "integrity": "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=", + "dev": true + }, + "has-flag": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", + "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=", + "dev": true + }, + "log-symbols": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/log-symbols/-/log-symbols-2.2.0.tgz", + "integrity": "sha512-VeIAFslyIerEJLXHziedo2basKbMKtTw3vfn5IzG0XTjhAVEJyNHnL2p7vc+wBDSdQuUpNw3M2u6xb9QsAY5Eg==", + "dev": true, + "requires": { + "chalk": "^2.0.1" + } + }, + "supports-color": { + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", + "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", + "dev": true, + "requires": { + "has-flag": "^3.0.0" + } + } + } + }, + "har-schema": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/har-schema/-/har-schema-2.0.0.tgz", + "integrity": "sha1-qUwiJOvKwEeCoNkDVSHyRzW37JI=", + "dev": true + }, + "har-validator": { + "version": "5.1.3", + "resolved": "https://registry.npmjs.org/har-validator/-/har-validator-5.1.3.tgz", + "integrity": "sha512-sNvOCzEQNr/qrvJgc3UG/kD4QtlHycrzwS+6mfTrrSq97BvaYcPZZI1ZSqGSPR73Cxn4LKTD4PttRwfU7jWq5g==", + "dev": true, + "requires": { + "ajv": "^6.5.5", + "har-schema": "^2.0.0" + } + }, + "hard-rejection": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/hard-rejection/-/hard-rejection-2.1.0.tgz", + "integrity": "sha512-VIZB+ibDhx7ObhAe7OVtoEbuP4h/MuOTHJ+J8h/eBXotJYl0fBgR72xDFCKgIh22OJZIOVNxBMWuhAr10r8HdA==", + "dev": true + }, + "has": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/has/-/has-1.0.3.tgz", + "integrity": "sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==", + "dev": true, + "requires": { + "function-bind": "^1.1.1" + } + }, + "has-ansi": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/has-ansi/-/has-ansi-2.0.0.tgz", + "integrity": "sha1-NPUEnOHs3ysGSa8+8k5F7TVBbZE=", + "dev": true, + "requires": { + "ansi-regex": "^2.0.0" + }, + "dependencies": { + "ansi-regex": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz", + "integrity": "sha1-w7M6te42DYbg5ijwRorn7yfWVN8=", + "dev": true + } + } + }, + "has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "dev": true + }, + "has-symbols": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.1.tgz", + "integrity": "sha512-PLcsoqu++dmEIZB+6totNFKq/7Do+Z0u4oT0zKOJNl3lYK6vGwwu2hjHs+68OEZbTjiUE9bgOABXbP/GvrS0Kg==", + "dev": true + }, + "he": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/he/-/he-1.2.0.tgz", + "integrity": "sha512-F/1DnUGPopORZi0ni+CvrCgHQ5FyEAHRLSApuYWMmrbSwoN2Mn/7k+Gl38gJnR7yyDZk6WLXwiGod1JOWNDKGw==", + "dev": true + }, + "hooker": { + "version": "0.2.3", + "resolved": "https://registry.npmjs.org/hooker/-/hooker-0.2.3.tgz", + "integrity": "sha1-uDT3I8xKJCqmWWNFnfbZhMXT2Vk=", + "dev": true + }, + "hosted-git-info": { + "version": "2.8.8", + "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-2.8.8.tgz", + "integrity": "sha512-f/wzC2QaWBs7t9IYqB4T3sR1xviIViXJRJTWBlx2Gf3g0Xi5vI7Yy4koXQ1c9OYDGHN9sBy1DQ2AB8fqZBWhUg==", + "dev": true + }, + "html-tags": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/html-tags/-/html-tags-3.1.0.tgz", + "integrity": "sha512-1qYz89hW3lFDEazhjW0yVAV87lw8lVkrJocr72XmBkMKsoSVJCQx3W8BXsC7hO2qAt8BoVjYjtAcZ9perqGnNg==", + "dev": true + }, + "htmlparser2": { + "version": "3.10.1", + "resolved": "https://registry.npmjs.org/htmlparser2/-/htmlparser2-3.10.1.tgz", + "integrity": "sha512-IgieNijUMbkDovyoKObU1DUhm1iwNYE/fuifEoEHfd1oZKZDaONBSkal7Y01shxsM49R4XaMdGez3WnF9UfiCQ==", + "dev": true, + "requires": { + "domelementtype": "^1.3.1", + "domhandler": "^2.3.0", + "domutils": "^1.5.1", + "entities": "^1.1.1", + "inherits": "^2.0.1", + "readable-stream": "^3.1.1" + }, + "dependencies": { + "entities": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/entities/-/entities-1.1.2.tgz", + "integrity": "sha512-f2LZMYl1Fzu7YSBKg+RoROelpOaNrcGmE9AZubeDfrCEia483oW4MI4VyFd5VNHIgQ/7qm1I0wUHK1eJnn2y2w==", + "dev": true + } + } + }, + "http-cache-semantics": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/http-cache-semantics/-/http-cache-semantics-4.1.0.tgz", + "integrity": "sha512-carPklcUh7ROWRK7Cv27RPtdhYhUsela/ue5/jKzjegVvXDqM2ILE9Q2BGn9JZJh1g87cp56su/FgQSzcWS8cQ==", + "dev": true + }, + "http-parser-js": { + "version": "0.5.2", + "resolved": "https://registry.npmjs.org/http-parser-js/-/http-parser-js-0.5.2.tgz", + "integrity": "sha512-opCO9ASqg5Wy2FNo7A0sxy71yGbbkJJXLdgMK04Tcypw9jr2MgWbyubb0+WdmDmGnFflO7fRbqbaihh/ENDlRQ==", + "dev": true + }, + "http-signature": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/http-signature/-/http-signature-1.2.0.tgz", + "integrity": "sha1-muzZJRFHcvPZW2WmCruPfBj7rOE=", + "dev": true, + "requires": { + "assert-plus": "^1.0.0", + "jsprim": "^1.2.2", + "sshpk": "^1.7.0" + } + }, + "http2-wrapper": { + "version": "1.0.0-beta.4.6", + "resolved": "https://registry.npmjs.org/http2-wrapper/-/http2-wrapper-1.0.0-beta.4.6.tgz", + "integrity": "sha512-9oB4BiGDTI1FmIBlOF9OJ5hwJvcBEmPCqk/hy314Uhy2uq5TjekUZM8w8SPLLlUEM+mxNhXdPAXfrJN2Zbb/GQ==", + "dev": true, + "requires": { + "quick-lru": "^5.0.0", + "resolve-alpn": "^1.0.0" + } + }, + "https-proxy-agent": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-4.0.0.tgz", + "integrity": "sha512-zoDhWrkR3of1l9QAL8/scJZyLu8j/gBkcwcaQOZh7Gyh/+uJQzGVETdgT30akuwkpL8HTRfssqI3BZuV18teDg==", + "dev": true, + "requires": { + "agent-base": "5", + "debug": "4" + }, + "dependencies": { + "debug": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.1.1.tgz", + "integrity": "sha512-pYAIzeRo8J6KPEaJ0VWOh5Pzkbw/RetuzehGM7QRRX5he4fPHx2rdKMB256ehJCkX+XRQm16eZLqLNS8RSZXZw==", + "dev": true, + "requires": { + "ms": "^2.1.1" + } + }, + "ms": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", + "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", + "dev": true + } + } + }, + "iconv-lite": { + "version": "0.4.24", + "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz", + "integrity": "sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==", + "dev": true, + "requires": { + "safer-buffer": ">= 2.1.2 < 3" + } + }, + "ieee754": { + "version": "1.1.13", + "resolved": "https://registry.npmjs.org/ieee754/-/ieee754-1.1.13.tgz", + "integrity": "sha512-4vf7I2LYV/HaWerSo3XmlMkp5eZ83i+/CDluXi/IGTs/O1sejBNhTtnxzmRZfvOUqj7lZjqHkeTvpgSFDlWZTg==", + "dev": true + }, + "ignore": { + "version": "4.0.6", + "resolved": "https://registry.npmjs.org/ignore/-/ignore-4.0.6.tgz", + "integrity": "sha512-cyFDKrqc/YdcWFniJhzI42+AzS+gNwmUzOSFcRCQYwySuBBBy/KjuxWLZ/FHEH6Moq1NizMOBWyTcv8O4OZIMg==", + "dev": true + }, + "import-fresh": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-3.2.1.tgz", + "integrity": "sha512-6e1q1cnWP2RXD9/keSkxHScg508CdXqXWgWBaETNhyuBFz+kUZlKboh+ISK+bU++DmbHimVBrOz/zzPe0sZ3sQ==", + "dev": true, + "requires": { + "parent-module": "^1.0.0", + "resolve-from": "^4.0.0" + } + }, + "import-lazy": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/import-lazy/-/import-lazy-4.0.0.tgz", + "integrity": "sha512-rKtvo6a868b5Hu3heneU+L4yEQ4jYKLtjpnPeUdK7h0yzXGmyBTypknlkCvHFBqfX9YlorEiMM6Dnq/5atfHkw==", + "dev": true + }, + "imurmurhash": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz", + "integrity": "sha1-khi5srkoojixPcT7a21XbyMUU+o=", + "dev": true + }, + "indent-string": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/indent-string/-/indent-string-3.2.0.tgz", + "integrity": "sha1-Sl/W0nzDMvN+VBmlBNu4NxBckok=", + "dev": true + }, + "indexes-of": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/indexes-of/-/indexes-of-1.0.1.tgz", + "integrity": "sha1-8w9xbI4r00bHtn0985FVZqfAVgc=", + "dev": true + }, + "inflight": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", + "integrity": "sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk=", + "dev": true, + "requires": { + "once": "^1.3.0", + "wrappy": "1" + } + }, + "inherits": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", + "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==", + "dev": true + }, + "ini": { + "version": "1.3.5", + "resolved": "https://registry.npmjs.org/ini/-/ini-1.3.5.tgz", + "integrity": "sha512-RZY5huIKCMRWDUqZlEi72f/lmXKMvuszcMBduliQ3nnWbx9X/ZBQO7DijMEYS9EhHBb2qacRUMtC7svLwe0lcw==", + "dev": true + }, + "inquirer": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/inquirer/-/inquirer-7.2.0.tgz", + "integrity": "sha512-E0c4rPwr9ByePfNlTIB8z51kK1s2n6jrHuJeEHENl/sbq2G/S1auvibgEwNR4uSyiU+PiYHqSwsgGiXjG8p5ZQ==", + "dev": true, + "requires": { + "ansi-escapes": "^4.2.1", + "chalk": "^3.0.0", + "cli-cursor": "^3.1.0", + "cli-width": "^2.0.0", + "external-editor": "^3.0.3", + "figures": "^3.0.0", + "lodash": "^4.17.15", + "mute-stream": "0.0.8", + "run-async": "^2.4.0", + "rxjs": "^6.5.3", + "string-width": "^4.1.0", + "strip-ansi": "^6.0.0", + "through": "^2.3.6" + }, + "dependencies": { + "chalk": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-3.0.0.tgz", + "integrity": "sha512-4D3B6Wf41KOYRFdszmDqMCGq5VV/uMAB273JILmO+3jAlh8X4qDtdtgCR3fxtbLEMzSx22QdhnDcJvu2u1fVwg==", + "dev": true, + "requires": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + } + } + } + }, + "is-alphabetical": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/is-alphabetical/-/is-alphabetical-1.0.4.tgz", + "integrity": "sha512-DwzsA04LQ10FHTZuL0/grVDk4rFoVH1pjAToYwBrHSxcrBIGQuXrQMtD5U1b0U2XVgKZCTLLP8u2Qxqhy3l2Vg==", + "dev": true + }, + "is-alphanumeric": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-alphanumeric/-/is-alphanumeric-1.0.0.tgz", + "integrity": "sha1-Spzvcdr0wAHB2B1j0UDPU/1oifQ=", + "dev": true + }, + "is-alphanumerical": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/is-alphanumerical/-/is-alphanumerical-1.0.4.tgz", + "integrity": "sha512-UzoZUr+XfVz3t3v4KyGEniVL9BDRoQtY7tOyrRybkVNjDFWyo1yhXNGrrBTQxp3ib9BLAWs7k2YKBQsFRkZG9A==", + "dev": true, + "requires": { + "is-alphabetical": "^1.0.0", + "is-decimal": "^1.0.0" + } + }, + "is-arrayish": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.2.1.tgz", + "integrity": "sha1-d8mYQFJ6qOyxqLppe4BkWnqSap0=", + "dev": true + }, + "is-binary-path": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-2.1.0.tgz", + "integrity": "sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==", + "dev": true, + "requires": { + "binary-extensions": "^2.0.0" + } + }, + "is-buffer": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/is-buffer/-/is-buffer-2.0.4.tgz", + "integrity": "sha512-Kq1rokWXOPXWuaMAqZiJW4XxsmD9zGx9q4aePabbn3qCRGedtH7Cm+zV8WETitMfu1wdh+Rvd6w5egwSngUX2A==", + "dev": true + }, + "is-callable": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/is-callable/-/is-callable-1.2.0.tgz", + "integrity": "sha512-pyVD9AaGLxtg6srb2Ng6ynWJqkHU9bEM087AKck0w8QwDarTfNcpIYoU8x8Hv2Icm8u6kFJM18Dag8lyqGkviw==", + "dev": true + }, + "is-date-object": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/is-date-object/-/is-date-object-1.0.2.tgz", + "integrity": "sha512-USlDT524woQ08aoZFzh3/Z6ch9Y/EWXEHQ/AaRN0SkKq4t2Jw2R2339tSXmwuVoY7LLlBCbOIlx2myP/L5zk0g==", + "dev": true + }, + "is-decimal": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/is-decimal/-/is-decimal-1.0.4.tgz", + "integrity": "sha512-RGdriMmQQvZ2aqaQq3awNA6dCGtKpiDFcOzrTWrDAT2MiWrKQVPmxLGHl7Y2nNu6led0kEyoX0enY0qXYsv9zw==", + "dev": true + }, + "is-docker": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/is-docker/-/is-docker-2.0.0.tgz", + "integrity": "sha512-pJEdRugimx4fBMra5z2/5iRdZ63OhYV0vr0Dwm5+xtW4D1FvRkB8hamMIhnWfyJeDdyr/aa7BDyNbtG38VxgoQ==", + "dev": true + }, + "is-extglob": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", + "integrity": "sha1-qIwCU1eR8C7TfHahueqXc8gz+MI=", + "dev": true + }, + "is-finite": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/is-finite/-/is-finite-1.1.0.tgz", + "integrity": "sha512-cdyMtqX/BOqqNBBiKlIVkytNHm49MtMlYyn1zxzvJKWmFMlGzm+ry5BBfYyeY9YmNKbRSo/o7OX9w9ale0wg3w==", + "dev": true + }, + "is-fullwidth-code-point": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", + "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", + "dev": true + }, + "is-glob": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.1.tgz", + "integrity": "sha512-5G0tKtBTFImOqDnLB2hG6Bp2qcKEFduo4tZu9MT/H6NQv/ghhy30o55ufafxJ/LdH79LLs2Kfrn85TLKyA7BUg==", + "dev": true, + "requires": { + "is-extglob": "^2.1.1" + } + }, + "is-hexadecimal": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/is-hexadecimal/-/is-hexadecimal-1.0.4.tgz", + "integrity": "sha512-gyPJuv83bHMpocVYoqof5VDiZveEoGoFL8m3BXNb2VW8Xs+rz9kqO8LOQ5DH6EsuvilT1ApazU0pyl+ytbPtlw==", + "dev": true + }, + "is-number": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", + "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==", + "dev": true + }, + "is-plain-obj": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-2.1.0.tgz", + "integrity": "sha512-YWnfyRwxL/+SsrWYfOpUtz5b3YD+nyfkHvjbcanzk8zgyO4ASD67uVMRt8k5bM4lLMDnXfriRhOpemw+NfT1eA==", + "dev": true + }, + "is-regex": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/is-regex/-/is-regex-1.1.0.tgz", + "integrity": "sha512-iI97M8KTWID2la5uYXlkbSDQIg4F6o1sYboZKKTDpnDQMLtUL86zxhgDet3Q2SriaYsyGqZ6Mn2SjbRKeLHdqw==", + "dev": true, + "requires": { + "has-symbols": "^1.0.1" + } + }, + "is-regexp": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/is-regexp/-/is-regexp-2.1.0.tgz", + "integrity": "sha512-OZ4IlER3zmRIoB9AqNhEggVxqIH4ofDns5nRrPS6yQxXE1TPCUpFznBfRQmQa8uC+pXqjMnukiJBxCisIxiLGA==", + "dev": true + }, + "is-symbol": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/is-symbol/-/is-symbol-1.0.3.tgz", + "integrity": "sha512-OwijhaRSgqvhm/0ZdAcXNZt9lYdKFpcRDT5ULUuYXPoT794UNOdU+gpT6Rzo7b4V2HUl/op6GqY894AZwv9faQ==", + "dev": true, + "requires": { + "has-symbols": "^1.0.1" + } + }, + "is-typedarray": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-typedarray/-/is-typedarray-1.0.0.tgz", + "integrity": "sha1-5HnICFjfDBsR3dppQPlgEfzaSpo=", + "dev": true + }, + "is-utf8": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/is-utf8/-/is-utf8-0.2.1.tgz", + "integrity": "sha1-Sw2hRCEE0bM2NA6AeX6GXPOffXI=", + "dev": true + }, + "is-whitespace-character": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/is-whitespace-character/-/is-whitespace-character-1.0.4.tgz", + "integrity": "sha512-SDweEzfIZM0SJV0EUga669UTKlmL0Pq8Lno0QDQsPnvECB3IM2aP0gdx5TrU0A01MAPfViaZiI2V1QMZLaKK5w==", + "dev": true + }, + "is-word-character": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/is-word-character/-/is-word-character-1.0.4.tgz", + "integrity": "sha512-5SMO8RVennx3nZrqtKwCGyyetPE9VDba5ugvKLaD4KopPG5kR4mQ7tNt/r7feL5yt5h3lpuBbIUmCOG2eSzXHA==", + "dev": true + }, + "is-wsl": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/is-wsl/-/is-wsl-2.2.0.tgz", + "integrity": "sha512-fKzAra0rGJUUBwGBgNkHZuToZcn+TtXHpeCgmkMJMMYx1sQDYaCSyjJBSCa2nH1DGm7s3n1oBnohoVTBaN7Lww==", + "dev": true, + "requires": { + "is-docker": "^2.0.0" + } + }, + "isarray": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", + "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=", + "dev": true + }, + "isexe": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", + "integrity": "sha1-6PvzdNxVb/iUehDcsFctYz8s+hA=", + "dev": true + }, + "isstream": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/isstream/-/isstream-0.1.2.tgz", + "integrity": "sha1-R+Y/evVa+m+S4VAOaQ64uFKcCZo=", + "dev": true + }, + "jake": { + "version": "10.8.2", + "resolved": "https://registry.npmjs.org/jake/-/jake-10.8.2.tgz", + "integrity": "sha512-eLpKyrfG3mzvGE2Du8VoPbeSkRry093+tyNjdYaBbJS9v17knImYGNXQCUV0gLxQtF82m3E8iRb/wdSQZLoq7A==", + "dev": true, + "requires": { + "async": "0.9.x", + "chalk": "^2.4.2", + "filelist": "^1.0.1", + "minimatch": "^3.0.4" + }, + "dependencies": { + "ansi-styles": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", + "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", + "dev": true, + "requires": { + "color-convert": "^1.9.0" + } + }, + "chalk": { + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", + "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", + "dev": true, + "requires": { + "ansi-styles": "^3.2.1", + "escape-string-regexp": "^1.0.5", + "supports-color": "^5.3.0" + } + }, + "color-convert": { + "version": "1.9.3", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", + "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", + "dev": true, + "requires": { + "color-name": "1.1.3" + } + }, + "color-name": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", + "integrity": "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=", + "dev": true + }, + "has-flag": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", + "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=", + "dev": true + }, + "supports-color": { + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", + "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", + "dev": true, + "requires": { + "has-flag": "^3.0.0" + } + } + } + }, + "jest-diff": { + "version": "25.5.0", + "resolved": "https://registry.npmjs.org/jest-diff/-/jest-diff-25.5.0.tgz", + "integrity": "sha512-z1kygetuPiREYdNIumRpAHY6RXiGmp70YHptjdaxTWGmA085W3iCnXNx0DhflK3vwrKmrRWyY1wUpkPMVxMK7A==", + "dev": true, + "requires": { + "chalk": "^3.0.0", + "diff-sequences": "^25.2.6", + "jest-get-type": "^25.2.6", + "pretty-format": "^25.5.0" + }, + "dependencies": { + "chalk": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-3.0.0.tgz", + "integrity": "sha512-4D3B6Wf41KOYRFdszmDqMCGq5VV/uMAB273JILmO+3jAlh8X4qDtdtgCR3fxtbLEMzSx22QdhnDcJvu2u1fVwg==", + "dev": true, + "requires": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + } + } + } + }, + "jest-get-type": { + "version": "25.2.6", + "resolved": "https://registry.npmjs.org/jest-get-type/-/jest-get-type-25.2.6.tgz", + "integrity": "sha512-DxjtyzOHjObRM+sM1knti6or+eOgcGU4xVSb2HNP1TqO4ahsT+rqZg+nyqHWJSvWgKC5cG3QjGFBqxLghiF/Ig==", + "dev": true + }, + "jest-matcher-utils": { + "version": "25.5.0", + "resolved": "https://registry.npmjs.org/jest-matcher-utils/-/jest-matcher-utils-25.5.0.tgz", + "integrity": "sha512-VWI269+9JS5cpndnpCwm7dy7JtGQT30UHfrnM3mXl22gHGt/b7NkjBqXfbhZ8V4B7ANUsjK18PlSBmG0YH7gjw==", + "dev": true, + "requires": { + "chalk": "^3.0.0", + "jest-diff": "^25.5.0", + "jest-get-type": "^25.2.6", + "pretty-format": "^25.5.0" + }, + "dependencies": { + "chalk": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-3.0.0.tgz", + "integrity": "sha512-4D3B6Wf41KOYRFdszmDqMCGq5VV/uMAB273JILmO+3jAlh8X4qDtdtgCR3fxtbLEMzSx22QdhnDcJvu2u1fVwg==", + "dev": true, + "requires": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + } + } + } + }, + "jest-message-util": { + "version": "25.5.0", + "resolved": "https://registry.npmjs.org/jest-message-util/-/jest-message-util-25.5.0.tgz", + "integrity": "sha512-ezddz3YCT/LT0SKAmylVyWWIGYoKHOFOFXx3/nA4m794lfVUskMcwhip6vTgdVrOtYdjeQeis2ypzes9mZb4EA==", + "dev": true, + "requires": { + "@babel/code-frame": "^7.0.0", + "@jest/types": "^25.5.0", + "@types/stack-utils": "^1.0.1", + "chalk": "^3.0.0", + "graceful-fs": "^4.2.4", + "micromatch": "^4.0.2", + "slash": "^3.0.0", + "stack-utils": "^1.0.1" + }, + "dependencies": { + "chalk": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-3.0.0.tgz", + "integrity": "sha512-4D3B6Wf41KOYRFdszmDqMCGq5VV/uMAB273JILmO+3jAlh8X4qDtdtgCR3fxtbLEMzSx22QdhnDcJvu2u1fVwg==", + "dev": true, + "requires": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + } + } + } + }, + "jest-regex-util": { + "version": "25.2.6", + "resolved": "https://registry.npmjs.org/jest-regex-util/-/jest-regex-util-25.2.6.tgz", + "integrity": "sha512-KQqf7a0NrtCkYmZZzodPftn7fL1cq3GQAFVMn5Hg8uKx/fIenLEobNanUxb7abQ1sjADHBseG/2FGpsv/wr+Qw==", + "dev": true + }, + "js-tokens": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz", + "integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==", + "dev": true + }, + "js-yaml": { + "version": "3.13.1", + "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.13.1.tgz", + "integrity": "sha512-YfbcO7jXDdyj0DGxYVSlSeQNHbD7XPWvrVWeVUujrQEoZzWJIRrCPoyk6kL6IAjAG2IolMK4T0hNUe0HOUs5Jw==", + "dev": true, + "requires": { + "argparse": "^1.0.7", + "esprima": "^4.0.0" + } + }, + "jsbn": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/jsbn/-/jsbn-0.1.1.tgz", + "integrity": "sha1-peZUwuWi3rXyAdls77yoDA7y9RM=", + "dev": true + }, + "jsdoctypeparser": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/jsdoctypeparser/-/jsdoctypeparser-6.1.0.tgz", + "integrity": "sha512-UCQBZ3xCUBv/PLfwKAJhp6jmGOSLFNKzrotXGNgbKhWvz27wPsCsVeP7gIcHPElQw2agBmynAitXqhxR58XAmA==", + "dev": true + }, + "jsesc": { + "version": "2.5.2", + "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-2.5.2.tgz", + "integrity": "sha512-OYu7XEzjkCQ3C5Ps3QIZsQfNpqoJyZZA99wd9aWd05NCtC5pWOkShK2mkL6HXQR6/Cy2lbNdPlZBpuQHXE63gA==", + "dev": true + }, + "json-buffer": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/json-buffer/-/json-buffer-3.0.1.tgz", + "integrity": "sha512-4bV5BfR2mqfQTJm+V5tPPdf+ZpuhiIvTuAB5g8kcrXOZpTT/QwwVRWBywX1ozr6lEuPdbHxwaJlm9G6mI2sfSQ==", + "dev": true + }, + "json-parse-better-errors": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/json-parse-better-errors/-/json-parse-better-errors-1.0.2.tgz", + "integrity": "sha512-mrqyZKfX5EhL7hvqcV6WG1yYjnjeuYDzDhhcAAUrq8Po85NBQBJP+ZDUT75qZQ98IkUoBqdkExkukOU7Ts2wrw==", + "dev": true + }, + "json-schema": { + "version": "0.2.3", + "resolved": "https://registry.npmjs.org/json-schema/-/json-schema-0.2.3.tgz", + "integrity": "sha1-tIDIkuWaLwWVTOcnvT8qTogvnhM=", + "dev": true + }, + "json-schema-traverse": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz", + "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==", + "dev": true + }, + "json-stable-stringify-without-jsonify": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/json-stable-stringify-without-jsonify/-/json-stable-stringify-without-jsonify-1.0.1.tgz", + "integrity": "sha1-nbe1lJatPzz+8wp1FC0tkwrXJlE=", + "dev": true + }, + "json-stringify-safe": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/json-stringify-safe/-/json-stringify-safe-5.0.1.tgz", + "integrity": "sha1-Epai1Y/UXxmg9s4B1lcB4sc1tus=", + "dev": true + }, + "json5": { + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/json5/-/json5-2.1.3.tgz", + "integrity": "sha512-KXPvOm8K9IJKFM0bmdn8QXh7udDh1g/giieX0NLCaMnb4hEiVFqnop2ImTXCc5e0/oHz3LTqmHGtExn5hfMkOA==", + "dev": true, + "requires": { + "minimist": "^1.2.5" + } + }, + "jsonc-parser": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/jsonc-parser/-/jsonc-parser-2.2.1.tgz", + "integrity": "sha512-o6/yDBYccGvTz1+QFevz6l6OBZ2+fMVu2JZ9CIhzsYRX4mjaK5IyX9eldUdCmga16zlgQxyrj5pt9kzuj2C02w==", + "dev": true + }, + "jsonfile": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-6.0.1.tgz", + "integrity": "sha512-jR2b5v7d2vIOust+w3wtFKZIfpC2pnRmFAhAC/BuweZFQR8qZzxH1OyrQ10HmdVYiXWkYUqPVsz91cG7EL2FBg==", + "dev": true, + "requires": { + "graceful-fs": "^4.1.6", + "universalify": "^1.0.0" + } + }, + "jsprim": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/jsprim/-/jsprim-1.4.1.tgz", + "integrity": "sha1-MT5mvB5cwG5Di8G3SZwuXFastqI=", + "dev": true, + "requires": { + "assert-plus": "1.0.0", + "extsprintf": "1.3.0", + "json-schema": "0.2.3", + "verror": "1.10.0" + } + }, + "keyv": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/keyv/-/keyv-4.0.1.tgz", + "integrity": "sha512-xz6Jv6oNkbhrFCvCP7HQa8AaII8y8LRpoSm661NOKLr4uHuBwhX4epXrPQgF3+xdJnN4Esm5X0xwY4bOlALOtw==", + "dev": true, + "requires": { + "json-buffer": "3.0.1" + } + }, + "kind-of": { + "version": "6.0.3", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.3.tgz", + "integrity": "sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw==", + "dev": true + }, + "known-css-properties": { + "version": "0.18.0", + "resolved": "https://registry.npmjs.org/known-css-properties/-/known-css-properties-0.18.0.tgz", + "integrity": "sha512-69AgJ1rQa7VvUsd2kpvVq+VeObDuo3zrj0CzM5Slmf6yduQFAI2kXPDQJR2IE/u6MSAUOJrwSzjg5vlz8qcMiw==", + "dev": true + }, + "lazystream": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/lazystream/-/lazystream-1.0.0.tgz", + "integrity": "sha1-9plf4PggOS9hOWvolGJAe7dxaOQ=", + "dev": true, + "requires": { + "readable-stream": "^2.0.5" + }, + "dependencies": { + "readable-stream": { + "version": "2.3.7", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.7.tgz", + "integrity": "sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw==", + "dev": true, + "requires": { + "core-util-is": "~1.0.0", + "inherits": "~2.0.3", + "isarray": "~1.0.0", + "process-nextick-args": "~2.0.0", + "safe-buffer": "~5.1.1", + "string_decoder": "~1.1.1", + "util-deprecate": "~1.0.1" + } + } + } + }, + "leven": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/leven/-/leven-3.1.0.tgz", + "integrity": "sha512-qsda+H8jTaUaN/x5vzW2rzc+8Rw4TAQ/4KjB46IwK5VH+IlVeeeje/EoZRpiXvIqjFgK84QffqPztGI3VBLG1A==", + "dev": true + }, + "levn": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/levn/-/levn-0.4.1.tgz", + "integrity": "sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ==", + "dev": true, + "requires": { + "prelude-ls": "^1.2.1", + "type-check": "~0.4.0" + } + }, + "lighthouse-logger": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/lighthouse-logger/-/lighthouse-logger-1.2.0.tgz", + "integrity": "sha512-wzUvdIeJZhRsG6gpZfmSCfysaxNEr43i+QT+Hie94wvHDKFLi4n7C2GqZ4sTC+PH5b5iktmXJvU87rWvhP3lHw==", + "dev": true, + "requires": { + "debug": "^2.6.8", + "marky": "^1.2.0" + } + }, + "lines-and-columns": { + "version": "1.1.6", + "resolved": "https://registry.npmjs.org/lines-and-columns/-/lines-and-columns-1.1.6.tgz", + "integrity": "sha1-HADHQ7QzzQpOgHWPe2SldEDZ/wA=", + "dev": true + }, + "livereload-js": { + "version": "2.4.0", + "resolved": "https://registry.npmjs.org/livereload-js/-/livereload-js-2.4.0.tgz", + "integrity": "sha512-XPQH8Z2GDP/Hwz2PCDrh2mth4yFejwA1OZ/81Ti3LgKyhDcEjsSsqFWZojHG0va/duGd+WyosY7eXLDoOyqcPw==", + "dev": true + }, + "load-json-file": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/load-json-file/-/load-json-file-1.1.0.tgz", + "integrity": "sha1-lWkFcI1YtLq0wiYbBPWfMcmTdMA=", + "dev": true, + "requires": { + "graceful-fs": "^4.1.2", + "parse-json": "^2.2.0", + "pify": "^2.0.0", + "pinkie-promise": "^2.0.0", + "strip-bom": "^2.0.0" + } + }, + "locate-path": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-5.0.0.tgz", + "integrity": "sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==", + "dev": true, + "requires": { + "p-locate": "^4.1.0" + } + }, + "lodash": { + "version": "4.17.19", + "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.19.tgz", + "integrity": "sha512-JNvd8XER9GQX0v2qJgsaN/mzFCNA5BRe/j8JN9d+tWyGLSodKQHKFicdwNYzWwI3wjRnaKPsGj1XkBjx/F96DQ==", + "dev": true + }, + "lodash.clonedeep": { + "version": "4.5.0", + "resolved": "https://registry.npmjs.org/lodash.clonedeep/-/lodash.clonedeep-4.5.0.tgz", + "integrity": "sha1-4j8/nE+Pvd6HJSnBBxhXoIblzO8=", + "dev": true + }, + "lodash.defaults": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/lodash.defaults/-/lodash.defaults-4.2.0.tgz", + "integrity": "sha1-0JF4cW/+pN3p5ft7N/bwgCJ0WAw=", + "dev": true + }, + "lodash.difference": { + "version": "4.5.0", + "resolved": "https://registry.npmjs.org/lodash.difference/-/lodash.difference-4.5.0.tgz", + "integrity": "sha1-nMtOUF1Ia5FlE0V3KIWi3yf9AXw=", + "dev": true + }, + "lodash.flatten": { + "version": "4.4.0", + "resolved": "https://registry.npmjs.org/lodash.flatten/-/lodash.flatten-4.4.0.tgz", + "integrity": "sha1-8xwiIlqWMtK7+OSt2+8kCqdlph8=", + "dev": true + }, + "lodash.flattendeep": { + "version": "4.4.0", + "resolved": "https://registry.npmjs.org/lodash.flattendeep/-/lodash.flattendeep-4.4.0.tgz", + "integrity": "sha1-+wMJF/hqMTTlvJvsDWngAT3f7bI=", + "dev": true + }, + "lodash.isobject": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/lodash.isobject/-/lodash.isobject-3.0.2.tgz", + "integrity": "sha1-PI+41bW/S/kK4G4U8qUwpO2TXh0=", + "dev": true + }, + "lodash.isplainobject": { + "version": "4.0.6", + "resolved": "https://registry.npmjs.org/lodash.isplainobject/-/lodash.isplainobject-4.0.6.tgz", + "integrity": "sha1-fFJqUtibRcRcxpC4gWO+BJf1UMs=", + "dev": true + }, + "lodash.merge": { + "version": "4.6.2", + "resolved": "https://registry.npmjs.org/lodash.merge/-/lodash.merge-4.6.2.tgz", + "integrity": "sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==", + "dev": true + }, + "lodash.pickby": { + "version": "4.6.0", + "resolved": "https://registry.npmjs.org/lodash.pickby/-/lodash.pickby-4.6.0.tgz", + "integrity": "sha1-feoh2MGNdwOifHBMFdO4SmfjOv8=", + "dev": true + }, + "lodash.union": { + "version": "4.6.0", + "resolved": "https://registry.npmjs.org/lodash.union/-/lodash.union-4.6.0.tgz", + "integrity": "sha1-SLtQiECfFvGCFmZkHETdGqrjzYg=", + "dev": true + }, + "lodash.zip": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/lodash.zip/-/lodash.zip-4.2.0.tgz", + "integrity": "sha1-7GZi5IlkCO1KtsVCo5kLcswIACA=", + "dev": true + }, + "log-symbols": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/log-symbols/-/log-symbols-3.0.0.tgz", + "integrity": "sha512-dSkNGuI7iG3mfvDzUuYZyvk5dD9ocYCYzNU6CYDE6+Xqd+gwme6Z00NS3dUh8mq/73HaEtT7m6W+yUPtU6BZnQ==", + "dev": true, + "requires": { + "chalk": "^2.4.2" + }, + "dependencies": { + "ansi-styles": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", + "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", + "dev": true, + "requires": { + "color-convert": "^1.9.0" + } + }, + "chalk": { + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", + "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", + "dev": true, + "requires": { + "ansi-styles": "^3.2.1", + "escape-string-regexp": "^1.0.5", + "supports-color": "^5.3.0" + } + }, + "color-convert": { + "version": "1.9.3", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", + "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", + "dev": true, + "requires": { + "color-name": "1.1.3" + } + }, + "color-name": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", + "integrity": "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=", + "dev": true + }, + "has-flag": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", + "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=", + "dev": true + }, + "supports-color": { + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", + "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", + "dev": true, + "requires": { + "has-flag": "^3.0.0" + } + } + } + }, + "log-update": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/log-update/-/log-update-4.0.0.tgz", + "integrity": "sha512-9fkkDevMefjg0mmzWFBW8YkFP91OrizzkW3diF7CpG+S2EYdy4+TVfGwz1zeF8x7hCx1ovSPTOE9Ngib74qqUg==", + "dev": true, + "requires": { + "ansi-escapes": "^4.3.0", + "cli-cursor": "^3.1.0", + "slice-ansi": "^4.0.0", + "wrap-ansi": "^6.2.0" + } + }, + "loglevel": { + "version": "1.6.8", + "resolved": "https://registry.npmjs.org/loglevel/-/loglevel-1.6.8.tgz", + "integrity": "sha512-bsU7+gc9AJ2SqpzxwU3+1fedl8zAntbtC5XYlt3s2j1hJcn2PsXSmgN8TaLG/J1/2mod4+cE/3vNL70/c1RNCA==", + "dev": true + }, + "loglevel-plugin-prefix": { + "version": "0.8.4", + "resolved": "https://registry.npmjs.org/loglevel-plugin-prefix/-/loglevel-plugin-prefix-0.8.4.tgz", + "integrity": "sha512-WpG9CcFAOjz/FtNht+QJeGpvVl/cdR6P0z6OcXSkr8wFJOsV2GRj2j10JLfjuA4aYkcKCNIEqRGCyTife9R8/g==", + "dev": true + }, + "longest-streak": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/longest-streak/-/longest-streak-2.0.4.tgz", + "integrity": "sha512-vM6rUVCVUJJt33bnmHiZEvr7wPT78ztX7rojL+LW51bHtLh6HTjx84LA5W4+oa6aKEJA7jJu5LR6vQRBpA5DVg==", + "dev": true + }, + "loud-rejection": { + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/loud-rejection/-/loud-rejection-1.6.0.tgz", + "integrity": "sha1-W0b4AUft7leIcPCG0Eghz5mOVR8=", + "dev": true, + "requires": { + "currently-unhandled": "^0.4.1", + "signal-exit": "^3.0.0" + } + }, + "lowercase-keys": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/lowercase-keys/-/lowercase-keys-2.0.0.tgz", + "integrity": "sha512-tqNXrS78oMOE73NMxK4EMLQsQowWf8jKooH9g7xPavRT706R6bkQJ6DY2Te7QukaZsulxa30wQ7bk0pm4XiHmA==", + "dev": true + }, + "lru-cache": { + "version": "4.1.5", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-4.1.5.tgz", + "integrity": "sha512-sWZlbEP2OsHNkXrMl5GYk/jKk70MBng6UU4YI/qGDYbgf6YbP4EvmqISbXCoJiRKs+1bSpFHVgQxvJ17F2li5g==", + "dev": true, + "requires": { + "pseudomap": "^1.0.2", + "yallist": "^2.1.2" + } + }, + "map-obj": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/map-obj/-/map-obj-1.0.1.tgz", + "integrity": "sha1-2TPOuSBdgr3PSIb2dCvcK03qFG0=", + "dev": true + }, + "markdown-escapes": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/markdown-escapes/-/markdown-escapes-1.0.4.tgz", + "integrity": "sha512-8z4efJYk43E0upd0NbVXwgSTQs6cT3T06etieCMEg7dRbzCbxUCK/GHlX8mhHRDcp+OLlHkPKsvqQTCvsRl2cg==", + "dev": true + }, + "markdown-table": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/markdown-table/-/markdown-table-2.0.0.tgz", + "integrity": "sha512-Ezda85ToJUBhM6WGaG6veasyym+Tbs3cMAw/ZhOPqXiYsr0jgocBV3j3nx+4lk47plLlIqjwuTm/ywVI+zjJ/A==", + "dev": true, + "requires": { + "repeat-string": "^1.0.0" + } + }, + "marky": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/marky/-/marky-1.2.1.tgz", + "integrity": "sha512-md9k+Gxa3qLH6sUKpeC2CNkJK/Ld+bEz5X96nYwloqphQE0CKCVEKco/6jxEZixinqNdz5RFi/KaCyfbMDMAXQ==", + "dev": true + }, + "mathml-tag-names": { + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/mathml-tag-names/-/mathml-tag-names-2.1.3.tgz", + "integrity": "sha512-APMBEanjybaPzUrfqU0IMU5I0AswKMH7k8OTLs0vvV4KZpExkTkY87nR/zpbuTPj+gARop7aGUbl11pnDfW6xg==", + "dev": true + }, + "mdast-util-compact": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/mdast-util-compact/-/mdast-util-compact-2.0.1.tgz", + "integrity": "sha512-7GlnT24gEwDrdAwEHrU4Vv5lLWrEer4KOkAiKT9nYstsTad7Oc1TwqT2zIMKRdZF7cTuaf+GA1E4Kv7jJh8mPA==", + "dev": true, + "requires": { + "unist-util-visit": "^2.0.0" + } + }, + "mdn-data": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/mdn-data/-/mdn-data-2.0.4.tgz", + "integrity": "sha512-iV3XNKw06j5Q7mi6h+9vbx23Tv7JkjEVgKHW4pimwyDGWm0OIQntJJ+u1C6mg6mK1EaTv42XQ7w76yuzH7M2cA==", + "dev": true + }, + "meow": { + "version": "3.7.0", + "resolved": "https://registry.npmjs.org/meow/-/meow-3.7.0.tgz", + "integrity": "sha1-cstmi0JSKCkKu/qFaJJYcwioAfs=", + "dev": true, + "requires": { + "camelcase-keys": "^2.0.0", + "decamelize": "^1.1.2", + "loud-rejection": "^1.0.0", + "map-obj": "^1.0.1", + "minimist": "^1.1.3", + "normalize-package-data": "^2.3.4", + "object-assign": "^4.0.1", + "read-pkg-up": "^1.0.1", + "redent": "^1.0.0", + "trim-newlines": "^1.0.0" + }, + "dependencies": { + "camelcase": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-2.1.1.tgz", + "integrity": "sha1-fB0W1nmhu+WcoCys7PsBHiAfWh8=", + "dev": true + }, + "camelcase-keys": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/camelcase-keys/-/camelcase-keys-2.1.0.tgz", + "integrity": "sha1-MIvur/3ygRkFHvodkyITyRuPkuc=", + "dev": true, + "requires": { + "camelcase": "^2.0.0", + "map-obj": "^1.0.0" + } + } + } + }, + "merge2": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/merge2/-/merge2-1.4.1.tgz", + "integrity": "sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==", + "dev": true + }, + "micromatch": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.2.tgz", + "integrity": "sha512-y7FpHSbMUMoyPbYUSzO6PaZ6FyRnQOpHuKwbo1G+Knck95XVU4QAiKdGEnj5wwoS7PlOgthX/09u5iFJ+aYf5Q==", + "dev": true, + "requires": { + "braces": "^3.0.1", + "picomatch": "^2.0.5" + } + }, + "mime": { + "version": "2.4.6", + "resolved": "https://registry.npmjs.org/mime/-/mime-2.4.6.tgz", + "integrity": "sha512-RZKhC3EmpBchfTGBVb8fb+RL2cWyw/32lshnsETttkBAyAUXSGHxbEJWWRXc751DrIxG1q04b8QwMbAwkRPpUA==", + "dev": true + }, + "mime-db": { + "version": "1.44.0", + "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.44.0.tgz", + "integrity": "sha512-/NOTfLrsPBVeH7YtFPgsVWveuL+4SjjYxaQ1xtM1KMFj7HdxlBlxeyNLzhyJVx7r4rZGJAZ/6lkKCitSc/Nmpg==", + "dev": true + }, + "mime-types": { + "version": "2.1.27", + "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.27.tgz", + "integrity": "sha512-JIhqnCasI9yD+SsmkquHBxTSEuZdQX5BuQnS2Vc7puQQQ+8yiP5AY5uWhpdv4YL4VM5c6iliiYWPgJ/nJQLp7w==", + "dev": true, + "requires": { + "mime-db": "1.44.0" + } + }, + "mimic-fn": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-2.1.0.tgz", + "integrity": "sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==", + "dev": true + }, + "mimic-response": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/mimic-response/-/mimic-response-1.0.1.tgz", + "integrity": "sha512-j5EctnkH7amfV/q5Hgmoal1g2QHFJRraOtmx0JpIqkxhBhI/lJSl1nMpQ45hVarwNETOoWEimndZ4QK0RHxuxQ==", + "dev": true + }, + "min-indent": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/min-indent/-/min-indent-1.0.1.tgz", + "integrity": "sha512-I9jwMn07Sy/IwOj3zVkVik2JTvgpaykDZEigL6Rx6N9LbMywwUSMtxET+7lVoDLLd3O3IXwJwvuuns8UB/HeAg==", + "dev": true + }, + "minimatch": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz", + "integrity": "sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==", + "dev": true, + "requires": { + "brace-expansion": "^1.1.7" + } + }, + "minimist": { + "version": "1.2.5", + "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.5.tgz", + "integrity": "sha512-FM9nNUYrRBAELZQT3xeZQ7fmMOBg6nWNmJKTcgsJeaLstP/UODVpGsr5OhXhhXg6f+qtJ8uiZ+PUxkDWcgIXLw==", + "dev": true + }, + "minimist-options": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/minimist-options/-/minimist-options-4.1.0.tgz", + "integrity": "sha512-Q4r8ghd80yhO/0j1O3B2BjweX3fiHg9cdOwjJd2J76Q135c+NDxGCqdYKQ1SKBuFfgWbAUzBfvYjPUEeNgqN1A==", + "dev": true, + "requires": { + "arrify": "^1.0.1", + "is-plain-obj": "^1.1.0", + "kind-of": "^6.0.3" + }, + "dependencies": { + "is-plain-obj": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-1.1.0.tgz", + "integrity": "sha1-caUMhCnfync8kqOQpKA7OfzVHT4=", + "dev": true + } + } + }, + "mkdirp": { + "version": "0.5.5", + "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.5.tgz", + "integrity": "sha512-NKmAlESf6jMGym1++R0Ra7wvhV+wFW63FaSOFPwRahvea0gMUcGUhVeAg/0BC0wiv9ih5NYPB1Wn1UEI1/L+xQ==", + "dev": true, + "requires": { + "minimist": "^1.2.5" + } + }, + "mkdirp-classic": { + "version": "0.5.3", + "resolved": "https://registry.npmjs.org/mkdirp-classic/-/mkdirp-classic-0.5.3.tgz", + "integrity": "sha512-gKLcREMhtuZRwRAfqP3RFW+TK4JqApVBtOIftVgjuABpAtpxhPGaDcfvbhNvD0B8iD1oUr/txX35NjcaY6Ns/A==", + "dev": true + }, + "mocha": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/mocha/-/mocha-7.2.0.tgz", + "integrity": "sha512-O9CIypScywTVpNaRrCAgoUnJgozpIofjKUYmJhiCIJMiuYnLI6otcb1/kpW9/n/tJODHGZ7i8aLQoDVsMtOKQQ==", + "dev": true, + "requires": { + "ansi-colors": "3.2.3", + "browser-stdout": "1.3.1", + "chokidar": "3.3.0", + "debug": "3.2.6", + "diff": "3.5.0", + "escape-string-regexp": "1.0.5", + "find-up": "3.0.0", + "glob": "7.1.3", + "growl": "1.10.5", + "he": "1.2.0", + "js-yaml": "3.13.1", + "log-symbols": "3.0.0", + "minimatch": "3.0.4", + "mkdirp": "0.5.5", + "ms": "2.1.1", + "node-environment-flags": "1.0.6", + "object.assign": "4.1.0", + "strip-json-comments": "2.0.1", + "supports-color": "6.0.0", + "which": "1.3.1", + "wide-align": "1.1.3", + "yargs": "13.3.2", + "yargs-parser": "13.1.2", + "yargs-unparser": "1.6.0" + }, + "dependencies": { + "ansi-regex": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-4.1.0.tgz", + "integrity": "sha512-1apePfXM1UOSqw0o9IiFAovVz9M5S1Dg+4TrDwfMewQ6p/rmMueb7tWZjQ1rx4Loy1ArBggoqGpfqqdI4rondg==", + "dev": true + }, + "ansi-styles": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", + "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", + "dev": true, + "requires": { + "color-convert": "^1.9.0" + } + }, + "chokidar": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.3.0.tgz", + "integrity": "sha512-dGmKLDdT3Gdl7fBUe8XK+gAtGmzy5Fn0XkkWQuYxGIgWVPPse2CxFA5mtrlD0TOHaHjEUqkWNyP1XdHoJES/4A==", + "dev": true, + "requires": { + "anymatch": "~3.1.1", + "braces": "~3.0.2", + "fsevents": "~2.1.1", + "glob-parent": "~5.1.0", + "is-binary-path": "~2.1.0", + "is-glob": "~4.0.1", + "normalize-path": "~3.0.0", + "readdirp": "~3.2.0" + } + }, + "cliui": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/cliui/-/cliui-5.0.0.tgz", + "integrity": "sha512-PYeGSEmmHM6zvoef2w8TPzlrnNpXIjTipYK780YswmIP9vjxmd6Y2a3CB2Ks6/AU8NHjZugXvo8w3oWM2qnwXA==", + "dev": true, + "requires": { + "string-width": "^3.1.0", + "strip-ansi": "^5.2.0", + "wrap-ansi": "^5.1.0" + } + }, + "color-convert": { + "version": "1.9.3", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", + "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", + "dev": true, + "requires": { + "color-name": "1.1.3" + } + }, + "color-name": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", + "integrity": "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=", + "dev": true + }, + "debug": { + "version": "3.2.6", + "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.6.tgz", + "integrity": "sha512-mel+jf7nrtEl5Pn1Qx46zARXKDpBbvzezse7p7LqINmdoIk8PYP5SySaxEmYv6TZ0JyEKA1hsCId6DIhgITtWQ==", + "dev": true, + "requires": { + "ms": "^2.1.1" + } + }, + "emoji-regex": { + "version": "7.0.3", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-7.0.3.tgz", + "integrity": "sha512-CwBLREIQ7LvYFB0WyRvwhq5N5qPhc6PMjD6bYggFlI5YyDgl+0vxq5VHbMOFqLg7hfWzmu8T5Z1QofhmTIhItA==", + "dev": true + }, + "find-up": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-3.0.0.tgz", + "integrity": "sha512-1yD6RmLI1XBfxugvORwlck6f75tYL+iR0jqwsOrOxMZyGYqUuDhJ0l4AXdO1iX/FTs9cBAMEk1gWSEx1kSbylg==", + "dev": true, + "requires": { + "locate-path": "^3.0.0" + } + }, + "glob": { + "version": "7.1.3", + "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.3.tgz", + "integrity": "sha512-vcfuiIxogLV4DlGBHIUOwI0IbrJ8HWPc4MU7HzviGeNho/UJDfi6B5p3sHeWIQ0KGIU0Jpxi5ZHxemQfLkkAwQ==", + "dev": true, + "requires": { + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^3.0.4", + "once": "^1.3.0", + "path-is-absolute": "^1.0.0" + } + }, + "has-flag": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", + "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=", + "dev": true + }, + "is-fullwidth-code-point": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz", + "integrity": "sha1-o7MKXE8ZkYMWeqq5O+764937ZU8=", + "dev": true + }, + "locate-path": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-3.0.0.tgz", + "integrity": "sha512-7AO748wWnIhNqAuaty2ZWHkQHRSNfPVIsPIfwEOWO22AmaoVrWavlOcMR5nzTLNYvp36X220/maaRsrec1G65A==", + "dev": true, + "requires": { + "p-locate": "^3.0.0", + "path-exists": "^3.0.0" + } + }, + "ms": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.1.tgz", + "integrity": "sha512-tgp+dl5cGk28utYktBsrFqA7HKgrhgPsg6Z/EfhWI4gl1Hwq8B/GmY/0oXZ6nF8hDVesS/FpnYaD/kOWhYQvyg==", + "dev": true + }, + "p-locate": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-3.0.0.tgz", + "integrity": "sha512-x+12w/To+4GFfgJhBEpiDcLozRJGegY+Ei7/z0tSLkMmxGZNybVMSfWj9aJn8Z5Fc7dBUNJOOVgPv2H7IwulSQ==", + "dev": true, + "requires": { + "p-limit": "^2.0.0" + } + }, + "path-exists": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-3.0.0.tgz", + "integrity": "sha1-zg6+ql94yxiSXqfYENe1mwEP1RU=", + "dev": true + }, + "readdirp": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-3.2.0.tgz", + "integrity": "sha512-crk4Qu3pmXwgxdSgGhgA/eXiJAPQiX4GMOZZMXnqKxHX7TaoL+3gQVo/WeuAiogr07DpnfjIMpXXa+PAIvwPGQ==", + "dev": true, + "requires": { + "picomatch": "^2.0.4" + } + }, + "string-width": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-3.1.0.tgz", + "integrity": "sha512-vafcv6KjVZKSgz06oM/H6GDBrAtz8vdhQakGjFIvNrHA6y3HCF1CInLy+QLq8dTJPQ1b+KDUqDFctkdRW44e1w==", + "dev": true, + "requires": { + "emoji-regex": "^7.0.1", + "is-fullwidth-code-point": "^2.0.0", + "strip-ansi": "^5.1.0" + } + }, + "strip-ansi": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-5.2.0.tgz", + "integrity": "sha512-DuRs1gKbBqsMKIZlrffwlug8MHkcnpjs5VPmL1PAh+mA30U0DTotfDZ0d2UUsXpPmPmMMJ6W773MaA3J+lbiWA==", + "dev": true, + "requires": { + "ansi-regex": "^4.1.0" + } + }, + "supports-color": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-6.0.0.tgz", + "integrity": "sha512-on9Kwidc1IUQo+bQdhi8+Tijpo0e1SS6RoGo2guUwn5vdaxw8RXOF9Vb2ws+ihWOmh4JnCJOvaziZWP1VABaLg==", + "dev": true, + "requires": { + "has-flag": "^3.0.0" + } + }, + "wrap-ansi": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-5.1.0.tgz", + "integrity": "sha512-QC1/iN/2/RPVJ5jYK8BGttj5z83LmSKmvbvrXPNCLZSEb32KKVDJDl/MOt2N01qU2H/FkzEa9PKto1BqDjtd7Q==", + "dev": true, + "requires": { + "ansi-styles": "^3.2.0", + "string-width": "^3.0.0", + "strip-ansi": "^5.0.0" + } + }, + "yargs": { + "version": "13.3.2", + "resolved": "https://registry.npmjs.org/yargs/-/yargs-13.3.2.tgz", + "integrity": "sha512-AX3Zw5iPruN5ie6xGRIDgqkT+ZhnRlZMLMHAs8tg7nRruy2Nb+i5o9bwghAogtM08q1dpr2LVoS8KSTMYpWXUw==", + "dev": true, + "requires": { + "cliui": "^5.0.0", + "find-up": "^3.0.0", + "get-caller-file": "^2.0.1", + "require-directory": "^2.1.1", + "require-main-filename": "^2.0.0", + "set-blocking": "^2.0.0", + "string-width": "^3.0.0", + "which-module": "^2.0.0", + "y18n": "^4.0.0", + "yargs-parser": "^13.1.2" + } + }, + "yargs-parser": { + "version": "13.1.2", + "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-13.1.2.tgz", + "integrity": "sha512-3lbsNRf/j+A4QuSZfDRA7HRSfWrzO0YjqTJd5kjAq37Zep1CEgaYmrH9Q3GwPiB9cHyd1Y1UwggGhJGoxipbzg==", + "dev": true, + "requires": { + "camelcase": "^5.0.0", + "decamelize": "^1.2.0" + } + } + } + }, + "ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=", + "dev": true + }, + "mute-stream": { + "version": "0.0.8", + "resolved": "https://registry.npmjs.org/mute-stream/-/mute-stream-0.0.8.tgz", + "integrity": "sha512-nnbWWOkoWyUsTjKrhgD0dcz22mdkSnpYqbEjIm2nhwhuxlSkpywJmBo8h0ZqJdkp73mb90SssHkN4rsRaBAfAA==", + "dev": true + }, + "mwbot": { + "version": "1.0.10", + "resolved": "https://registry.npmjs.org/mwbot/-/mwbot-1.0.10.tgz", + "integrity": "sha1-pEC9ZmOnYoq1t5lgnpjLL8ThM8k=", + "dev": true, + "requires": { + "bluebird": "^3.4.6", + "request": "^2.75.0", + "semlog": "^0.6.10" + } + }, + "natural-compare": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/natural-compare/-/natural-compare-1.4.0.tgz", + "integrity": "sha1-Sr6/7tdUHywnrPspvbvRXI1bpPc=", + "dev": true + }, + "node-environment-flags": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/node-environment-flags/-/node-environment-flags-1.0.6.tgz", + "integrity": "sha512-5Evy2epuL+6TM0lCQGpFIj6KwiEsGh1SrHUhTbNX+sLbBtjidPZFAnVK9y5yU1+h//RitLbRHTIMyxQPtxMdHw==", + "dev": true, + "requires": { + "object.getownpropertydescriptors": "^2.0.3", + "semver": "^5.7.0" + } + }, + "node-releases": { + "version": "1.1.58", + "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-1.1.58.tgz", + "integrity": "sha512-NxBudgVKiRh/2aPWMgPR7bPTX0VPmGx5QBwCtdHitnqFE5/O8DeBXuIMH1nwNnw/aMo6AjOrpsHzfY3UbUJ7yg==", + "dev": true + }, + "nopt": { + "version": "3.0.6", + "resolved": "https://registry.npmjs.org/nopt/-/nopt-3.0.6.tgz", + "integrity": "sha1-xkZdvwirzU2zWTF/eaxopkayj/k=", + "dev": true, + "requires": { + "abbrev": "1" + } + }, + "normalize-package-data": { + "version": "2.5.0", + "resolved": "https://registry.npmjs.org/normalize-package-data/-/normalize-package-data-2.5.0.tgz", + "integrity": "sha512-/5CMN3T0R4XTj4DcGaexo+roZSdSFW/0AOOTROrjxzCG1wrWXEsGbRKevjlIL+ZDE4sZlJr5ED4YW0yqmkK+eA==", + "dev": true, + "requires": { + "hosted-git-info": "^2.1.4", + "resolve": "^1.10.0", + "semver": "2 || 3 || 4 || 5", + "validate-npm-package-license": "^3.0.1" + } + }, + "normalize-path": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz", + "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==", + "dev": true + }, + "normalize-range": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/normalize-range/-/normalize-range-0.1.2.tgz", + "integrity": "sha1-LRDAa9/TEuqXd2laTShDlFa3WUI=", + "dev": true + }, + "normalize-selector": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/normalize-selector/-/normalize-selector-0.2.0.tgz", + "integrity": "sha1-0LFF62kRicY6eNIB3E/bEpPvDAM=", + "dev": true + }, + "normalize-url": { + "version": "4.5.0", + "resolved": "https://registry.npmjs.org/normalize-url/-/normalize-url-4.5.0.tgz", + "integrity": "sha512-2s47yzUxdexf1OhyRi4Em83iQk0aPvwTddtFz4hnSSw9dCEsLEGf6SwIO8ss/19S9iBb5sJaOuTvTGDeZI00BQ==", + "dev": true + }, + "nth-check": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/nth-check/-/nth-check-1.0.2.tgz", + "integrity": "sha512-WeBOdju8SnzPN5vTUJYxYUxLeXpCaVP5i5e0LF8fg7WORF2Wd7wFX/pk0tYZk7s8T+J7VLy0Da6J1+wCT0AtHg==", + "dev": true, + "requires": { + "boolbase": "~1.0.0" + } + }, + "num2fraction": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/num2fraction/-/num2fraction-1.2.2.tgz", + "integrity": "sha1-b2gragJ6Tp3fpFZM0lidHU5mnt4=", + "dev": true + }, + "oauth-sign": { + "version": "0.9.0", + "resolved": "https://registry.npmjs.org/oauth-sign/-/oauth-sign-0.9.0.tgz", + "integrity": "sha512-fexhUFFPTGV8ybAtSIGbV6gOkSv8UtRbDBnAyLQw4QPKkgNlsH2ByPGtMUqdWkos6YCRmAqViwgZrJc/mRDzZQ==", + "dev": true + }, + "object-assign": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz", + "integrity": "sha1-IQmtx5ZYh8/AXLvUQsrIv7s2CGM=", + "dev": true + }, + "object-inspect": { + "version": "1.8.0", + "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.8.0.tgz", + "integrity": "sha512-jLdtEOB112fORuypAyl/50VRVIBIdVQOSUUGQHzJ4xBSbit81zRarz7GThkEFZy1RceYrWYcPcBFPQwHyAc1gA==", + "dev": true + }, + "object-keys": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/object-keys/-/object-keys-1.1.1.tgz", + "integrity": "sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==", + "dev": true + }, + "object.assign": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/object.assign/-/object.assign-4.1.0.tgz", + "integrity": "sha512-exHJeq6kBKj58mqGyTQ9DFvrZC/eR6OwxzoM9YRoGBqrXYonaFyGiFMuc9VZrXf7DarreEwMpurG3dd+CNyW5w==", + "dev": true, + "requires": { + "define-properties": "^1.1.2", + "function-bind": "^1.1.1", + "has-symbols": "^1.0.0", + "object-keys": "^1.0.11" + } + }, + "object.getownpropertydescriptors": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/object.getownpropertydescriptors/-/object.getownpropertydescriptors-2.1.0.tgz", + "integrity": "sha512-Z53Oah9A3TdLoblT7VKJaTDdXdT+lQO+cNpKVnya5JDe9uLvzu1YyY1yFDFrcxrlRgWrEFH0jJtD/IbuwjcEVg==", + "dev": true, + "requires": { + "define-properties": "^1.1.3", + "es-abstract": "^1.17.0-next.1" + } + }, + "object.values": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/object.values/-/object.values-1.1.1.tgz", + "integrity": "sha512-WTa54g2K8iu0kmS/us18jEmdv1a4Wi//BZ/DTVYEcH0XhLM5NYdpDHja3gt57VrZLcNAO2WGA+KpWsDBaHt6eA==", + "dev": true, + "requires": { + "define-properties": "^1.1.3", + "es-abstract": "^1.17.0-next.1", + "function-bind": "^1.1.1", + "has": "^1.0.3" + } + }, + "once": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", + "integrity": "sha1-WDsap3WWHUsROsF9nFC6753Xa9E=", + "dev": true, + "requires": { + "wrappy": "1" + } + }, + "onetime": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/onetime/-/onetime-5.1.0.tgz", + "integrity": "sha512-5NcSkPHhwTVFIQN+TUqXoS5+dlElHXdpAWu9I0HP20YOtIi+aZ0Ct82jdlILDxjLEAWwvm+qj1m6aEtsDVmm6Q==", + "dev": true, + "requires": { + "mimic-fn": "^2.1.0" + } + }, + "optionator": { + "version": "0.9.1", + "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.9.1.tgz", + "integrity": "sha512-74RlY5FCnhq4jRxVUPKDaRwrVNXMqsGsiW6AJw4XK8hmtm10wC0ypZBLw5IIp85NZMr91+qd1RvvENwg7jjRFw==", + "dev": true, + "requires": { + "deep-is": "^0.1.3", + "fast-levenshtein": "^2.0.6", + "levn": "^0.4.1", + "prelude-ls": "^1.2.1", + "type-check": "^0.4.0", + "word-wrap": "^1.2.3" + } + }, + "os-tmpdir": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/os-tmpdir/-/os-tmpdir-1.0.2.tgz", + "integrity": "sha1-u+Z0BseaqFxc/sdm/lc0VV36EnQ=", + "dev": true + }, + "p-cancelable": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/p-cancelable/-/p-cancelable-2.0.0.tgz", + "integrity": "sha512-wvPXDmbMmu2ksjkB4Z3nZWTSkJEb9lqVdMaCKpZUGJG9TMiNp9XcbG3fn9fPKjem04fJMJnXoyFPk2FmgiaiNg==", + "dev": true + }, + "p-limit": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz", + "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==", + "dev": true, + "requires": { + "p-try": "^2.0.0" + } + }, + "p-locate": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-4.1.0.tgz", + "integrity": "sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==", + "dev": true, + "requires": { + "p-limit": "^2.2.0" + } + }, + "p-try": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/p-try/-/p-try-2.2.0.tgz", + "integrity": "sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==", + "dev": true + }, + "parent-module": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/parent-module/-/parent-module-1.0.1.tgz", + "integrity": "sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==", + "dev": true, + "requires": { + "callsites": "^3.0.0" + } + }, + "parse-entities": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/parse-entities/-/parse-entities-2.0.0.tgz", + "integrity": "sha512-kkywGpCcRYhqQIchaWqZ875wzpS/bMKhz5HnN3p7wveJTkTtyAB/AlnS0f8DFSqYW1T82t6yEAkEcB+A1I3MbQ==", + "dev": true, + "requires": { + "character-entities": "^1.0.0", + "character-entities-legacy": "^1.0.0", + "character-reference-invalid": "^1.0.0", + "is-alphanumerical": "^1.0.0", + "is-decimal": "^1.0.0", + "is-hexadecimal": "^1.0.0" + } + }, + "parse-json": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-2.2.0.tgz", + "integrity": "sha1-9ID0BDTvgHQfhGkJn43qGPVaTck=", + "dev": true, + "requires": { + "error-ex": "^1.2.0" + } + }, + "parse-ms": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/parse-ms/-/parse-ms-2.1.0.tgz", + "integrity": "sha512-kHt7kzLoS9VBZfUsiKjv43mr91ea+U05EyKkEtqp7vNbHxmaVuEqN7XxeEVnGrMtYOAxGrDElSi96K7EgO1zCA==", + "dev": true + }, + "path-exists": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz", + "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==", + "dev": true + }, + "path-is-absolute": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", + "integrity": "sha1-F0uSaHNVNP+8es5r9TpanhtcX18=", + "dev": true + }, + "path-key": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz", + "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==", + "dev": true + }, + "path-parse": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.6.tgz", + "integrity": "sha512-GSmOT2EbHrINBf9SR7CDELwlJ8AENk3Qn7OikK4nFYAu3Ote2+JYNVvkpAEQm3/TLNEJFD/xZJjzyxg3KBWOzw==", + "dev": true + }, + "path-type": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/path-type/-/path-type-1.1.0.tgz", + "integrity": "sha1-WcRPfuSR2nBNpBXaWkBwuk+P5EE=", + "dev": true, + "requires": { + "graceful-fs": "^4.1.2", + "pify": "^2.0.0", + "pinkie-promise": "^2.0.0" + } + }, + "pend": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/pend/-/pend-1.2.0.tgz", + "integrity": "sha1-elfrVQpng/kRUzH89GY9XI4AelA=", + "dev": true + }, + "performance-now": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/performance-now/-/performance-now-2.1.0.tgz", + "integrity": "sha1-Ywn04OX6kT7BxpMHrjZLSzd8nns=", + "dev": true + }, + "picomatch": { + "version": "2.2.2", + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.2.2.tgz", + "integrity": "sha512-q0M/9eZHzmr0AulXyPwNfZjtwZ/RBZlbN3K3CErVrk50T2ASYI7Bye0EvekFY3IP1Nt2DHu0re+V2ZHIpMkuWg==", + "dev": true + }, + "pify": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz", + "integrity": "sha1-7RQaasBDqEnqWISY59yosVMw6Qw=", + "dev": true + }, + "pinkie": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/pinkie/-/pinkie-2.0.4.tgz", + "integrity": "sha1-clVrgM+g1IqXToDnckjoDtT3+HA=", + "dev": true + }, + "pinkie-promise": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/pinkie-promise/-/pinkie-promise-2.0.1.tgz", + "integrity": "sha1-ITXW36ejWMBprJsXh3YogihFD/o=", + "dev": true, + "requires": { + "pinkie": "^2.0.0" + } + }, + "postcss": { + "version": "7.0.32", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.32.tgz", + "integrity": "sha512-03eXong5NLnNCD05xscnGKGDZ98CyzoqPSMjOe6SuoQY7Z2hIj0Ld1g/O/UQRuOle2aRtiIRDg9tDcTGAkLfKw==", + "dev": true, + "requires": { + "chalk": "^2.4.2", + "source-map": "^0.6.1", + "supports-color": "^6.1.0" + }, + "dependencies": { + "ansi-styles": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", + "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", + "dev": true, + "requires": { + "color-convert": "^1.9.0" + } + }, + "chalk": { + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", + "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", + "dev": true, + "requires": { + "ansi-styles": "^3.2.1", + "escape-string-regexp": "^1.0.5", + "supports-color": "^5.3.0" + }, + "dependencies": { + "supports-color": { + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", + "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", + "dev": true, + "requires": { + "has-flag": "^3.0.0" + } + } + } + }, + "color-convert": { + "version": "1.9.3", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", + "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", + "dev": true, + "requires": { + "color-name": "1.1.3" + } + }, + "color-name": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", + "integrity": "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=", + "dev": true + }, + "has-flag": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", + "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=", + "dev": true + }, + "supports-color": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-6.1.0.tgz", + "integrity": "sha512-qe1jfm1Mg7Nq/NSh6XE24gPXROEVsWHxC1LIx//XNlD9iw7YZQGjZNjYN7xGaEG6iKdA8EtNFW6R0gjnVXp+wQ==", + "dev": true, + "requires": { + "has-flag": "^3.0.0" + } + } + } + }, + "postcss-html": { + "version": "0.36.0", + "resolved": "https://registry.npmjs.org/postcss-html/-/postcss-html-0.36.0.tgz", + "integrity": "sha512-HeiOxGcuwID0AFsNAL0ox3mW6MHH5cstWN1Z3Y+n6H+g12ih7LHdYxWwEA/QmrebctLjo79xz9ouK3MroHwOJw==", + "dev": true, + "requires": { + "htmlparser2": "^3.10.0" + } + }, + "postcss-less": { + "version": "3.1.4", + "resolved": "https://registry.npmjs.org/postcss-less/-/postcss-less-3.1.4.tgz", + "integrity": "sha512-7TvleQWNM2QLcHqvudt3VYjULVB49uiW6XzEUFmvwHzvsOEF5MwBrIXZDJQvJNFGjJQTzSzZnDoCJ8h/ljyGXA==", + "dev": true, + "requires": { + "postcss": "^7.0.14" + } + }, + "postcss-media-query-parser": { + "version": "0.2.3", + "resolved": "https://registry.npmjs.org/postcss-media-query-parser/-/postcss-media-query-parser-0.2.3.tgz", + "integrity": "sha1-J7Ocb02U+Bsac7j3Y1HGCeXO8kQ=", + "dev": true + }, + "postcss-reporter": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/postcss-reporter/-/postcss-reporter-6.0.1.tgz", + "integrity": "sha512-LpmQjfRWyabc+fRygxZjpRxfhRf9u/fdlKf4VHG4TSPbV2XNsuISzYW1KL+1aQzx53CAppa1bKG4APIB/DOXXw==", + "dev": true, + "requires": { + "chalk": "^2.4.1", + "lodash": "^4.17.11", + "log-symbols": "^2.2.0", + "postcss": "^7.0.7" + }, + "dependencies": { + "ansi-styles": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", + "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", + "dev": true, + "requires": { + "color-convert": "^1.9.0" + } + }, + "chalk": { + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", + "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", + "dev": true, + "requires": { + "ansi-styles": "^3.2.1", + "escape-string-regexp": "^1.0.5", + "supports-color": "^5.3.0" + } + }, + "color-convert": { + "version": "1.9.3", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", + "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", + "dev": true, + "requires": { + "color-name": "1.1.3" + } + }, + "color-name": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", + "integrity": "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=", + "dev": true + }, + "has-flag": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", + "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=", + "dev": true + }, + "log-symbols": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/log-symbols/-/log-symbols-2.2.0.tgz", + "integrity": "sha512-VeIAFslyIerEJLXHziedo2basKbMKtTw3vfn5IzG0XTjhAVEJyNHnL2p7vc+wBDSdQuUpNw3M2u6xb9QsAY5Eg==", + "dev": true, + "requires": { + "chalk": "^2.0.1" + } + }, + "supports-color": { + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", + "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", + "dev": true, + "requires": { + "has-flag": "^3.0.0" + } + } + } + }, + "postcss-resolve-nested-selector": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/postcss-resolve-nested-selector/-/postcss-resolve-nested-selector-0.1.1.tgz", + "integrity": "sha1-Kcy8fDfe36wwTp//C/FZaz9qDk4=", + "dev": true + }, + "postcss-safe-parser": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/postcss-safe-parser/-/postcss-safe-parser-4.0.2.tgz", + "integrity": "sha512-Uw6ekxSWNLCPesSv/cmqf2bY/77z11O7jZGPax3ycZMFU/oi2DMH9i89AdHc1tRwFg/arFoEwX0IS3LCUxJh1g==", + "dev": true, + "requires": { + "postcss": "^7.0.26" + } + }, + "postcss-sass": { + "version": "0.4.4", + "resolved": "https://registry.npmjs.org/postcss-sass/-/postcss-sass-0.4.4.tgz", + "integrity": "sha512-BYxnVYx4mQooOhr+zer0qWbSPYnarAy8ZT7hAQtbxtgVf8gy+LSLT/hHGe35h14/pZDTw1DsxdbrwxBN++H+fg==", + "dev": true, + "requires": { + "gonzales-pe": "^4.3.0", + "postcss": "^7.0.21" + } + }, + "postcss-scss": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/postcss-scss/-/postcss-scss-2.1.1.tgz", + "integrity": "sha512-jQmGnj0hSGLd9RscFw9LyuSVAa5Bl1/KBPqG1NQw9w8ND55nY4ZEsdlVuYJvLPpV+y0nwTV5v/4rHPzZRihQbA==", + "dev": true, + "requires": { + "postcss": "^7.0.6" + } + }, + "postcss-selector-parser": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-6.0.2.tgz", + "integrity": "sha512-36P2QR59jDTOAiIkqEprfJDsoNrvwFei3eCqKd1Y0tUsBimsq39BLp7RD+JWny3WgB1zGhJX8XVePwm9k4wdBg==", + "dev": true, + "requires": { + "cssesc": "^3.0.0", + "indexes-of": "^1.0.1", + "uniq": "^1.0.1" + } + }, + "postcss-syntax": { + "version": "0.36.2", + "resolved": "https://registry.npmjs.org/postcss-syntax/-/postcss-syntax-0.36.2.tgz", + "integrity": "sha512-nBRg/i7E3SOHWxF3PpF5WnJM/jQ1YpY9000OaVXlAQj6Zp/kIqJxEDWIZ67tAd7NLuk7zqN4yqe9nc0oNAOs1w==", + "dev": true + }, + "postcss-value-parser": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-4.1.0.tgz", + "integrity": "sha512-97DXOFbQJhk71ne5/Mt6cOu6yxsSfM0QGQyl0L25Gca4yGWEGJaig7l7gbCX623VqTBNGLRLaVUCnNkcedlRSQ==", + "dev": true + }, + "prelude-ls": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.2.1.tgz", + "integrity": "sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g==", + "dev": true + }, + "pretty-bytes": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/pretty-bytes/-/pretty-bytes-4.0.2.tgz", + "integrity": "sha1-sr+C5zUNZcbDOqlaqlpPYyf2HNk=", + "dev": true + }, + "pretty-format": { + "version": "25.5.0", + "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-25.5.0.tgz", + "integrity": "sha512-kbo/kq2LQ/A/is0PQwsEHM7Ca6//bGPPvU6UnsdDRSKTWxT/ru/xb88v4BJf6a69H+uTytOEsTusT9ksd/1iWQ==", + "dev": true, + "requires": { + "@jest/types": "^25.5.0", + "ansi-regex": "^5.0.0", + "ansi-styles": "^4.0.0", + "react-is": "^16.12.0" + } + }, + "pretty-ms": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/pretty-ms/-/pretty-ms-7.0.0.tgz", + "integrity": "sha512-J3aPWiC5e9ZeZFuSeBraGxSkGMOvulSWsxDByOcbD1Pr75YL3LSNIKIb52WXbCLE1sS5s4inBBbryjF4Y05Ceg==", + "dev": true, + "requires": { + "parse-ms": "^2.1.0" + } + }, + "prettyjson": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/prettyjson/-/prettyjson-1.2.1.tgz", + "integrity": "sha1-/P+rQdGcq0365eV15kJGYZsS0ok=", + "dev": true, + "requires": { + "colors": "^1.1.2", + "minimist": "^1.2.0" + } + }, + "process-nextick-args": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.1.tgz", + "integrity": "sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag==", + "dev": true + }, + "progress": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/progress/-/progress-2.0.3.tgz", + "integrity": "sha512-7PiHtLll5LdnKIMw100I+8xJXR5gW2QwWYkT6iJva0bXitZKa/XMrSbdmg3r2Xnaidz9Qumd0VPaMrZlF9V9sA==", + "dev": true + }, + "proxy-from-env": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/proxy-from-env/-/proxy-from-env-1.1.0.tgz", + "integrity": "sha512-D+zkORCbA9f1tdWRK0RaCR3GPv50cMxcrz4X8k5LTSUD1Dkw47mKJEZQNunItRTkWwgtaUSo1RVFRIG9ZXiFYg==", + "dev": true + }, + "pseudomap": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/pseudomap/-/pseudomap-1.0.2.tgz", + "integrity": "sha1-8FKijacOYYkX7wqKw0wa5aaChrM=", + "dev": true + }, + "psl": { + "version": "1.8.0", + "resolved": "https://registry.npmjs.org/psl/-/psl-1.8.0.tgz", + "integrity": "sha512-RIdOzyoavK+hA18OGGWDqUTsCLhtA7IcZ/6NCs4fFJaHBDab+pDDmDIByWFRQJq2Cd7r1OoQxBGKOaztq+hjIQ==", + "dev": true + }, + "pump": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/pump/-/pump-3.0.0.tgz", + "integrity": "sha512-LwZy+p3SFs1Pytd/jYct4wpv49HiYCqd9Rlc5ZVdk0V+8Yzv6jR5Blk3TRmPL1ft69TxP0IMZGJ+WPFU2BFhww==", + "dev": true, + "requires": { + "end-of-stream": "^1.1.0", + "once": "^1.3.1" + } + }, + "punycode": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.1.1.tgz", + "integrity": "sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A==", + "dev": true + }, + "puppeteer-core": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/puppeteer-core/-/puppeteer-core-3.3.0.tgz", + "integrity": "sha512-hynQ3r0J/lkGrKeBCqu160jrj0WhthYLIzDQPkBxLzxPokjw4elk1sn6mXAian/kfD2NRzpdh9FSykxZyL56uA==", + "dev": true, + "requires": { + "debug": "^4.1.0", + "extract-zip": "^2.0.0", + "https-proxy-agent": "^4.0.0", + "mime": "^2.0.3", + "progress": "^2.0.1", + "proxy-from-env": "^1.0.0", + "rimraf": "^3.0.2", + "tar-fs": "^2.0.0", + "unbzip2-stream": "^1.3.3", + "ws": "^7.2.3" + }, + "dependencies": { + "debug": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.1.1.tgz", + "integrity": "sha512-pYAIzeRo8J6KPEaJ0VWOh5Pzkbw/RetuzehGM7QRRX5he4fPHx2rdKMB256ehJCkX+XRQm16eZLqLNS8RSZXZw==", + "dev": true, + "requires": { + "ms": "^2.1.1" + } + }, + "ms": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", + "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", + "dev": true + } + } + }, + "q": { + "version": "1.5.1", + "resolved": "https://registry.npmjs.org/q/-/q-1.5.1.tgz", + "integrity": "sha1-fjL3W0E4EpHQRhHxvxQQmsAGUdc=", + "dev": true + }, + "qs": { + "version": "6.9.4", + "resolved": "https://registry.npmjs.org/qs/-/qs-6.9.4.tgz", + "integrity": "sha512-A1kFqHekCTM7cz0udomYUoYNWjBebHm/5wzU/XqrBRBNWectVH0QIiN+NEcZ0Dte5hvzHwbr8+XQmguPhJ6WdQ==", + "dev": true + }, + "quick-lru": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/quick-lru/-/quick-lru-5.1.1.tgz", + "integrity": "sha512-WuyALRjWPDGtt/wzJiadO5AXY+8hZ80hVpe6MyivgraREW751X3SbhRvG3eLKOYN+8VEvqLcf3wdnt44Z4S4SA==", + "dev": true + }, + "ramda": { + "version": "0.27.0", + "resolved": "https://registry.npmjs.org/ramda/-/ramda-0.27.0.tgz", + "integrity": "sha512-pVzZdDpWwWqEVVLshWUHjNwuVP7SfcmPraYuqocJp1yo2U1R7P+5QAfDhdItkuoGqIBnBYrtPp7rEPqDn9HlZA==", + "dev": true + }, + "raw-body": { + "version": "1.1.7", + "resolved": "https://registry.npmjs.org/raw-body/-/raw-body-1.1.7.tgz", + "integrity": "sha1-HQJ8K/oRasxmI7yo8AAWVyqH1CU=", + "dev": true, + "requires": { + "bytes": "1", + "string_decoder": "0.10" + }, + "dependencies": { + "string_decoder": { + "version": "0.10.31", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-0.10.31.tgz", + "integrity": "sha1-YuIDvEF2bGwoyfyEMB2rHFMQ+pQ=", + "dev": true + } + } + }, + "react-is": { + "version": "16.13.1", + "resolved": "https://registry.npmjs.org/react-is/-/react-is-16.13.1.tgz", + "integrity": "sha512-24e6ynE2H+OKt4kqsOvNd8kBpV65zoxbA4BVsEOB3ARVWQki/DHzaUoC5KuON/BiccDaCCTZBuOcfZs70kR8bQ==", + "dev": true + }, + "read-pkg": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/read-pkg/-/read-pkg-1.1.0.tgz", + "integrity": "sha1-9f+qXs0pyzHAR0vKfXVra7KePyg=", + "dev": true, + "requires": { + "load-json-file": "^1.0.0", + "normalize-package-data": "^2.3.2", + "path-type": "^1.0.0" + } + }, + "read-pkg-up": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/read-pkg-up/-/read-pkg-up-1.0.1.tgz", + "integrity": "sha1-nWPBMnbAZZGNV/ACpX9AobZD+wI=", + "dev": true, + "requires": { + "find-up": "^1.0.0", + "read-pkg": "^1.0.0" + }, + "dependencies": { + "find-up": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-1.1.2.tgz", + "integrity": "sha1-ay6YIrGizgpgq2TWEOzK1TyyTQ8=", + "dev": true, + "requires": { + "path-exists": "^2.0.0", + "pinkie-promise": "^2.0.0" + } + }, + "path-exists": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-2.1.0.tgz", + "integrity": "sha1-D+tsZPD8UY2adU3V77YscCJ2H0s=", + "dev": true, + "requires": { + "pinkie-promise": "^2.0.0" + } + } + } + }, + "readable-stream": { + "version": "3.6.0", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.0.tgz", + "integrity": "sha512-BViHy7LKeTz4oNnkcLJ+lVSL6vpiFeX6/d3oSH8zCW7UxP2onchk+vTGB143xuFjHS3deTgkKoXXymXqymiIdA==", + "dev": true, + "requires": { + "inherits": "^2.0.3", + "string_decoder": "^1.1.1", + "util-deprecate": "^1.0.1" + } + }, + "readdirp": { + "version": "3.4.0", + "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-3.4.0.tgz", + "integrity": "sha512-0xe001vZBnJEK+uKcj8qOhyAKPzIT+gStxWr3LCB0DwcXR5NZJ3IaC+yGnHCYzB/S7ov3m3EEbZI2zeNvX+hGQ==", + "dev": true, + "requires": { + "picomatch": "^2.2.1" + } + }, + "redent": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/redent/-/redent-1.0.0.tgz", + "integrity": "sha1-z5Fqsf1fHxbfsggi3W7H9zDCr94=", + "dev": true, + "requires": { + "indent-string": "^2.1.0", + "strip-indent": "^1.0.1" + }, + "dependencies": { + "indent-string": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/indent-string/-/indent-string-2.1.0.tgz", + "integrity": "sha1-ji1INIdCEhtKghi3oTfppSBJ3IA=", + "dev": true, + "requires": { + "repeating": "^2.0.0" + } + } + } + }, + "regexpp": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/regexpp/-/regexpp-3.1.0.tgz", + "integrity": "sha512-ZOIzd8yVsQQA7j8GCSlPGXwg5PfmA1mrq0JP4nGhh54LaKN3xdai/vHUDu74pKwV8OxseMS65u2NImosQcSD0Q==", + "dev": true + }, + "regextras": { + "version": "0.7.1", + "resolved": "https://registry.npmjs.org/regextras/-/regextras-0.7.1.tgz", + "integrity": "sha512-9YXf6xtW+qzQ+hcMQXx95MOvfqXFgsKDZodX3qZB0x2n5Z94ioetIITsBtvJbiOyxa/6s9AtyweBLCdPmPko/w==", + "dev": true + }, + "remark": { + "version": "12.0.0", + "resolved": "https://registry.npmjs.org/remark/-/remark-12.0.0.tgz", + "integrity": "sha512-oX4lMIS0csgk8AEbzY0h2jdR0ngiCHOpwwpxjmRa5TqAkeknY+tkhjRJGZqnCmvyuWh55/0SW5WY3R3nn3PH9A==", + "dev": true, + "requires": { + "remark-parse": "^8.0.0", + "remark-stringify": "^8.0.0", + "unified": "^9.0.0" + } + }, + "remark-parse": { + "version": "8.0.2", + "resolved": "https://registry.npmjs.org/remark-parse/-/remark-parse-8.0.2.tgz", + "integrity": "sha512-eMI6kMRjsAGpMXXBAywJwiwAse+KNpmt+BK55Oofy4KvBZEqUDj6mWbGLJZrujoPIPPxDXzn3T9baRlpsm2jnQ==", + "dev": true, + "requires": { + "ccount": "^1.0.0", + "collapse-white-space": "^1.0.2", + "is-alphabetical": "^1.0.0", + "is-decimal": "^1.0.0", + "is-whitespace-character": "^1.0.0", + "is-word-character": "^1.0.0", + "markdown-escapes": "^1.0.0", + "parse-entities": "^2.0.0", + "repeat-string": "^1.5.4", + "state-toggle": "^1.0.0", + "trim": "0.0.1", + "trim-trailing-lines": "^1.0.0", + "unherit": "^1.0.4", + "unist-util-remove-position": "^2.0.0", + "vfile-location": "^3.0.0", + "xtend": "^4.0.1" + } + }, + "remark-stringify": { + "version": "8.1.0", + "resolved": "https://registry.npmjs.org/remark-stringify/-/remark-stringify-8.1.0.tgz", + "integrity": "sha512-FSPZv1ds76oAZjurhhuV5qXSUSoz6QRPuwYK38S41sLHwg4oB7ejnmZshj7qwjgYLf93kdz6BOX9j5aidNE7rA==", + "dev": true, + "requires": { + "ccount": "^1.0.0", + "is-alphanumeric": "^1.0.0", + "is-decimal": "^1.0.0", + "is-whitespace-character": "^1.0.0", + "longest-streak": "^2.0.1", + "markdown-escapes": "^1.0.0", + "markdown-table": "^2.0.0", + "mdast-util-compact": "^2.0.0", + "parse-entities": "^2.0.0", + "repeat-string": "^1.5.4", + "state-toggle": "^1.0.0", + "stringify-entities": "^3.0.0", + "unherit": "^1.0.4", + "xtend": "^4.0.1" + } + }, + "repeat-string": { + "version": "1.6.1", + "resolved": "https://registry.npmjs.org/repeat-string/-/repeat-string-1.6.1.tgz", + "integrity": "sha1-jcrkcOHIirwtYA//Sndihtp15jc=", + "dev": true + }, + "repeating": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/repeating/-/repeating-2.0.1.tgz", + "integrity": "sha1-UhTFOpJtNVJwdSf7q0FdvAjQbdo=", + "dev": true, + "requires": { + "is-finite": "^1.0.0" + } + }, + "replace-ext": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/replace-ext/-/replace-ext-1.0.0.tgz", + "integrity": "sha1-3mMSg3P8v3w8z6TeWkgMRaZ5WOs=", + "dev": true + }, + "request": { + "version": "2.88.2", + "resolved": "https://registry.npmjs.org/request/-/request-2.88.2.tgz", + "integrity": "sha512-MsvtOrfG9ZcrOwAW+Qi+F6HbD0CWXEh9ou77uOb7FM2WPhwT7smM833PzanhJLsgXjN89Ir6V2PczXNnMpwKhw==", + "dev": true, + "requires": { + "aws-sign2": "~0.7.0", + "aws4": "^1.8.0", + "caseless": "~0.12.0", + "combined-stream": "~1.0.6", + "extend": "~3.0.2", + "forever-agent": "~0.6.1", + "form-data": "~2.3.2", + "har-validator": "~5.1.3", + "http-signature": "~1.2.0", + "is-typedarray": "~1.0.0", + "isstream": "~0.1.2", + "json-stringify-safe": "~5.0.1", + "mime-types": "~2.1.19", + "oauth-sign": "~0.9.0", + "performance-now": "^2.1.0", + "qs": "~6.5.2", + "safe-buffer": "^5.1.2", + "tough-cookie": "~2.5.0", + "tunnel-agent": "^0.6.0", + "uuid": "^3.3.2" + }, + "dependencies": { + "qs": { + "version": "6.5.2", + "resolved": "https://registry.npmjs.org/qs/-/qs-6.5.2.tgz", + "integrity": "sha512-N5ZAX4/LxJmF+7wN74pUD6qAh9/wnvdQcjq9TZjevvXzSUo7bfmw91saqMjzGS2xq91/odN2dW/WOl7qQHNDGA==", + "dev": true + }, + "uuid": { + "version": "3.4.0", + "resolved": "https://registry.npmjs.org/uuid/-/uuid-3.4.0.tgz", + "integrity": "sha512-HjSDRw6gZE5JMggctHBcjVak08+KEVhSIiDzFnT9S9aegmp85S/bReBVTb4QTFaRNptJ9kuYaNhnbNEOkbKb/A==", + "dev": true + } + } + }, + "require-directory": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz", + "integrity": "sha1-jGStX9MNqxyXbiNE/+f3kqam30I=", + "dev": true + }, + "require-main-filename": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/require-main-filename/-/require-main-filename-2.0.0.tgz", + "integrity": "sha512-NKN5kMDylKuldxYLSUfrbo5Tuzh4hd+2E8NPPX02mZtn1VuREQToYe/ZdlJy+J3uCpfaiGF05e7B8W0iXbQHmg==", + "dev": true + }, + "resolve": { + "version": "1.17.0", + "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.17.0.tgz", + "integrity": "sha512-ic+7JYiV8Vi2yzQGFWOkiZD5Z9z7O2Zhm9XMaTxdJExKasieFCr+yXZ/WmXsckHiKl12ar0y6XiXDx3m4RHn1w==", + "dev": true, + "requires": { + "path-parse": "^1.0.6" + } + }, + "resolve-alpn": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/resolve-alpn/-/resolve-alpn-1.0.0.tgz", + "integrity": "sha512-rTuiIEqFmGxne4IovivKSDzld2lWW9QCjqv80SYjPgf+gS35eaCAjaP54CCwGAwBtnCsvNLYtqxe1Nw+i6JEmA==", + "dev": true + }, + "resolve-from": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-4.0.0.tgz", + "integrity": "sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==", + "dev": true + }, + "responselike": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/responselike/-/responselike-2.0.0.tgz", + "integrity": "sha512-xH48u3FTB9VsZw7R+vvgaKeLKzT6jOogbQhEe/jewwnZgzPcnyWui2Av6JpoYZF/91uueC+lqhWqeURw5/qhCw==", + "dev": true, + "requires": { + "lowercase-keys": "^2.0.0" + } + }, + "resq": { + "version": "1.7.1", + "resolved": "https://registry.npmjs.org/resq/-/resq-1.7.1.tgz", + "integrity": "sha512-09u9Q5SAuJfAW5UoVAmvRtLvCOMaKP+djiixTXsZvPaojGKhuvc0Nfvp84U1rIfopJWEOXi5ywpCFwCk7mj8Xw==", + "dev": true, + "requires": { + "fast-deep-equal": "^2.0.1" + } + }, + "restore-cursor": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/restore-cursor/-/restore-cursor-3.1.0.tgz", + "integrity": "sha512-l+sSefzHpj5qimhFSE5a8nufZYAM3sBSVMAPtYkmC+4EH2anSGaEMXSD0izRQbu9nfyQ9y5JrVmp7E8oZrUjvA==", + "dev": true, + "requires": { + "onetime": "^5.1.0", + "signal-exit": "^3.0.2" + } + }, + "reusify": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/reusify/-/reusify-1.0.4.tgz", + "integrity": "sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==", + "dev": true + }, + "rgb2hex": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/rgb2hex/-/rgb2hex-0.2.0.tgz", + "integrity": "sha512-cHdNTwmTMPu/TpP1bJfdApd6MbD+Kzi4GNnM6h35mdFChhQPSi9cAI8J7DMn5kQDKX8NuBaQXAyo360Oa7tOEA==", + "dev": true + }, + "rimraf": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz", + "integrity": "sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==", + "dev": true, + "requires": { + "glob": "^7.1.3" + } + }, + "run-async": { + "version": "2.4.1", + "resolved": "https://registry.npmjs.org/run-async/-/run-async-2.4.1.tgz", + "integrity": "sha512-tvVnVv01b8c1RrA6Ep7JkStj85Guv/YrMcwqYQnwjsAS2cTmmPGBBjAjpCW7RrSodNSoE2/qg9O4bceNvUuDgQ==", + "dev": true + }, + "run-parallel": { + "version": "1.1.9", + "resolved": "https://registry.npmjs.org/run-parallel/-/run-parallel-1.1.9.tgz", + "integrity": "sha512-DEqnSRTDw/Tc3FXf49zedI638Z9onwUotBMiUFKmrO2sdFKIbXamXGQ3Axd4qgphxKB4kw/qP1w5kTxnfU1B9Q==", + "dev": true + }, + "rxjs": { + "version": "6.5.5", + "resolved": "https://registry.npmjs.org/rxjs/-/rxjs-6.5.5.tgz", + "integrity": "sha512-WfQI+1gohdf0Dai/Bbmk5L5ItH5tYqm3ki2c5GdWhKjalzjg93N3avFjVStyZZz+A2Em+ZxKH5bNghw9UeylGQ==", + "dev": true, + "requires": { + "tslib": "^1.9.0" + } + }, + "safe-buffer": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", + "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==", + "dev": true + }, + "safe-json-parse": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/safe-json-parse/-/safe-json-parse-1.0.1.tgz", + "integrity": "sha1-PnZyPjjf3aE8mx0poeB//uSzC1c=", + "dev": true + }, + "safer-buffer": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz", + "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==", + "dev": true + }, + "sax": { + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/sax/-/sax-1.2.4.tgz", + "integrity": "sha512-NqVDv9TpANUjFm0N8uM5GxL36UgKi9/atZw+x7YFnQ8ckwFGKrl4xX4yWtrey3UJm5nP1kUbnYgLopqWNSRhWw==", + "dev": true + }, + "semlog": { + "version": "0.6.10", + "resolved": "https://registry.npmjs.org/semlog/-/semlog-0.6.10.tgz", + "integrity": "sha1-DyJa6o6zwvJM6TWNhnjQ9Bp/4Fs=", + "dev": true, + "requires": { + "chalk": "^1.1.3", + "prettyjson": "^1.1.3" + }, + "dependencies": { + "ansi-regex": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz", + "integrity": "sha1-w7M6te42DYbg5ijwRorn7yfWVN8=", + "dev": true + }, + "ansi-styles": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-2.2.1.tgz", + "integrity": "sha1-tDLdM1i2NM914eRmQ2gkBTPB3b4=", + "dev": true + }, + "chalk": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz", + "integrity": "sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg=", + "dev": true, + "requires": { + "ansi-styles": "^2.2.1", + "escape-string-regexp": "^1.0.2", + "has-ansi": "^2.0.0", + "strip-ansi": "^3.0.0", + "supports-color": "^2.0.0" + } + }, + "strip-ansi": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz", + "integrity": "sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=", + "dev": true, + "requires": { + "ansi-regex": "^2.0.0" + } + }, + "supports-color": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-2.0.0.tgz", + "integrity": "sha1-U10EXOa2Nj+kARcIRimZXp3zJMc=", + "dev": true + } + } + }, + "semver": { + "version": "5.7.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", + "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==", + "dev": true + }, + "serialize-error": { + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/serialize-error/-/serialize-error-7.0.1.tgz", + "integrity": "sha512-8I8TjW5KMOKsZQTvoxjuSIa7foAwPWGOts+6o7sgjz41/qMD9VQHEDxi6PBvK2l0MXUmqZyNpUK+T2tQaaElvw==", + "dev": true, + "requires": { + "type-fest": "^0.13.1" + }, + "dependencies": { + "type-fest": { + "version": "0.13.1", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.13.1.tgz", + "integrity": "sha512-34R7HTnG0XIJcBSn5XhDd7nNFPRcXYRZrBB2O2jdKqYODldSzBAqzsWoZYYvduky73toYS/ESqxPvkDf/F0XMg==", + "dev": true + } + } + }, + "set-blocking": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/set-blocking/-/set-blocking-2.0.0.tgz", + "integrity": "sha1-BF+XgtARrppoA93TgrJDkrPYkPc=", + "dev": true + }, + "set-immediate-shim": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/set-immediate-shim/-/set-immediate-shim-1.0.1.tgz", + "integrity": "sha1-SysbJ+uAip+NzEgaWOXlb1mfP2E=", + "dev": true + }, + "shebang-command": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz", + "integrity": "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==", + "dev": true, + "requires": { + "shebang-regex": "^3.0.0" + } + }, + "shebang-regex": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz", + "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==", + "dev": true + }, + "signal-exit": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.3.tgz", + "integrity": "sha512-VUJ49FC8U1OxwZLxIbTTrDvLnf/6TDgxZcK8wxR8zs13xpx7xbG60ndBlhNrFi2EMuFRoeDoJO7wthSLq42EjA==", + "dev": true + }, + "slash": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/slash/-/slash-3.0.0.tgz", + "integrity": "sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==", + "dev": true + }, + "slice-ansi": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/slice-ansi/-/slice-ansi-4.0.0.tgz", + "integrity": "sha512-qMCMfhY040cVHT43K9BFygqYbUPFZKHOg7K73mtTWJRb8pyP3fzf4Ixd5SzdEJQ6MRUg/WBnOLxghZtKKurENQ==", + "dev": true, + "requires": { + "ansi-styles": "^4.0.0", + "astral-regex": "^2.0.0", + "is-fullwidth-code-point": "^3.0.0" + } + }, + "source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "dev": true + }, + "spdx-correct": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/spdx-correct/-/spdx-correct-3.1.1.tgz", + "integrity": "sha512-cOYcUWwhCuHCXi49RhFRCyJEK3iPj1Ziz9DpViV3tbZOwXD49QzIN3MpOLJNxh2qwq2lJJZaKMVw9qNi4jTC0w==", + "dev": true, + "requires": { + "spdx-expression-parse": "^3.0.0", + "spdx-license-ids": "^3.0.0" + } + }, + "spdx-exceptions": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/spdx-exceptions/-/spdx-exceptions-2.3.0.tgz", + "integrity": "sha512-/tTrYOC7PPI1nUAgx34hUpqXuyJG+DTHJTnIULG4rDygi4xu/tfgmq1e1cIRwRzwZgo4NLySi+ricLkZkw4i5A==", + "dev": true + }, + "spdx-expression-parse": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/spdx-expression-parse/-/spdx-expression-parse-3.0.1.tgz", + "integrity": "sha512-cbqHunsQWnJNE6KhVSMsMeH5H/L9EpymbzqTQ3uLwNCLZ1Q481oWaofqH7nO6V07xlXwY6PhQdQ2IedWx/ZK4Q==", + "dev": true, + "requires": { + "spdx-exceptions": "^2.1.0", + "spdx-license-ids": "^3.0.0" + } + }, + "spdx-license-ids": { + "version": "3.0.5", + "resolved": "https://registry.npmjs.org/spdx-license-ids/-/spdx-license-ids-3.0.5.tgz", + "integrity": "sha512-J+FWzZoynJEXGphVIS+XEh3kFSjZX/1i9gFBaWQcB+/tmpe2qUsSBABpcxqxnAxFdiUFEgAX1bjYGQvIZmoz9Q==", + "dev": true + }, + "specificity": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/specificity/-/specificity-0.4.1.tgz", + "integrity": "sha512-1klA3Gi5PD1Wv9Q0wUoOQN1IWAuPu0D1U03ThXTr0cJ20+/iq2tHSDnK7Kk/0LXJ1ztUB2/1Os0wKmfyNgUQfg==", + "dev": true + }, + "sprintf-js": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.0.3.tgz", + "integrity": "sha1-BOaSb2YolTVPPdAVIDYzuFcpfiw=", + "dev": true + }, + "sshpk": { + "version": "1.16.1", + "resolved": "https://registry.npmjs.org/sshpk/-/sshpk-1.16.1.tgz", + "integrity": "sha512-HXXqVUq7+pcKeLqqZj6mHFUMvXtOJt1uoUx09pFW6011inTMxqI8BA8PM95myrIyyKwdnzjdFjLiE6KBPVtJIg==", + "dev": true, + "requires": { + "asn1": "~0.2.3", + "assert-plus": "^1.0.0", + "bcrypt-pbkdf": "^1.0.0", + "dashdash": "^1.12.0", + "ecc-jsbn": "~0.1.1", + "getpass": "^0.1.1", + "jsbn": "~0.1.0", + "safer-buffer": "^2.0.2", + "tweetnacl": "~0.14.0" + } + }, + "stable": { + "version": "0.1.8", + "resolved": "https://registry.npmjs.org/stable/-/stable-0.1.8.tgz", + "integrity": "sha512-ji9qxRnOVfcuLDySj9qzhGSEFVobyt1kIOSkj1qZzYLzq7Tos/oUUWvotUPQLlrsidqsK6tBH89Bc9kL5zHA6w==", + "dev": true + }, + "stack-utils": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/stack-utils/-/stack-utils-1.0.2.tgz", + "integrity": "sha512-MTX+MeG5U994cazkjd/9KNAapsHnibjMLnfXodlkXw76JEea0UiNzrqidzo1emMwk7w5Qhc9jd4Bn9TBb1MFwA==", + "dev": true + }, + "state-toggle": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/state-toggle/-/state-toggle-1.0.3.tgz", + "integrity": "sha512-d/5Z4/2iiCnHw6Xzghyhb+GcmF89bxwgXG60wjIiZaxnymbyOmI8Hk4VqHXiVVp6u2ysaskFfXg3ekCj4WNftQ==", + "dev": true + }, + "stream-buffers": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/stream-buffers/-/stream-buffers-3.0.2.tgz", + "integrity": "sha512-DQi1h8VEBA/lURbSwFtEHnSTb9s2/pwLEaFuNhXwy1Dx3Sa0lOuYT2yNUr4/j2fs8oCAMANtrZ5OrPZtyVs3MQ==", + "dev": true + }, + "string-template": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/string-template/-/string-template-0.2.1.tgz", + "integrity": "sha1-QpMuWYo1LQH8IuwzZ9nYTuxsmt0=", + "dev": true + }, + "string-width": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.0.tgz", + "integrity": "sha512-zUz5JD+tgqtuDjMhwIg5uFVV3dtqZ9yQJlZVfq4I01/K5Paj5UHj7VyrQOJvzawSVlKpObApbfD0Ed6yJc+1eg==", + "dev": true, + "requires": { + "emoji-regex": "^8.0.0", + "is-fullwidth-code-point": "^3.0.0", + "strip-ansi": "^6.0.0" + } + }, + "string.prototype.trimend": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/string.prototype.trimend/-/string.prototype.trimend-1.0.1.tgz", + "integrity": "sha512-LRPxFUaTtpqYsTeNKaFOw3R4bxIzWOnbQ837QfBylo8jIxtcbK/A/sMV7Q+OAV/vWo+7s25pOE10KYSjaSO06g==", + "dev": true, + "requires": { + "define-properties": "^1.1.3", + "es-abstract": "^1.17.5" + } + }, + "string.prototype.trimstart": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/string.prototype.trimstart/-/string.prototype.trimstart-1.0.1.tgz", + "integrity": "sha512-XxZn+QpvrBI1FOcg6dIpxUPgWCPuNXvMD72aaRaUQv1eD4e/Qy8i/hFTe0BUmD60p/QA6bh1avmuPTfNjqVWRw==", + "dev": true, + "requires": { + "define-properties": "^1.1.3", + "es-abstract": "^1.17.5" + } + }, + "string_decoder": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", + "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", + "dev": true, + "requires": { + "safe-buffer": "~5.1.0" + } + }, + "stringify-entities": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/stringify-entities/-/stringify-entities-3.0.1.tgz", + "integrity": "sha512-Lsk3ISA2++eJYqBMPKcr/8eby1I6L0gP0NlxF8Zja6c05yr/yCYyb2c9PwXjd08Ib3If1vn1rbs1H5ZtVuOfvQ==", + "dev": true, + "requires": { + "character-entities-html4": "^1.0.0", + "character-entities-legacy": "^1.0.0", + "is-alphanumerical": "^1.0.0", + "is-decimal": "^1.0.2", + "is-hexadecimal": "^1.0.0" + } + }, + "strip-ansi": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.0.tgz", + "integrity": "sha512-AuvKTrTfQNYNIctbR1K/YGTR1756GycPsg7b9bdV9Duqur4gv6aKqHXah67Z8ImS7WEz5QVcOtlfW2rZEugt6w==", + "dev": true, + "requires": { + "ansi-regex": "^5.0.0" + } + }, + "strip-bom": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-2.0.0.tgz", + "integrity": "sha1-YhmoVhZSBJHzV4i9vxRHqZx+aw4=", + "dev": true, + "requires": { + "is-utf8": "^0.2.0" + } + }, + "strip-indent": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/strip-indent/-/strip-indent-1.0.1.tgz", + "integrity": "sha1-DHlipq3vp7vUrDZkYKY4VSrhoKI=", + "dev": true, + "requires": { + "get-stdin": "^4.0.1" + } + }, + "strip-json-comments": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-2.0.1.tgz", + "integrity": "sha1-PFMZQukIwml8DsNEhYwobHygpgo=", + "dev": true + }, + "style-search": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/style-search/-/style-search-0.1.0.tgz", + "integrity": "sha1-eVjHk+R+MuB9K1yv5cC/jhLneQI=", + "dev": true + }, + "stylelint": { + "version": "13.3.2", + "resolved": "https://registry.npmjs.org/stylelint/-/stylelint-13.3.2.tgz", + "integrity": "sha512-kpO3/Gz2ZY40EWUwFYYkgpzhf8ZDUyKpcui5+pS0XKJBj/EMYmZpOJoL8IFAz2yApYeg91NVy5yAjE39hDzWvQ==", + "dev": true, + "requires": { + "@stylelint/postcss-css-in-js": "^0.37.1", + "@stylelint/postcss-markdown": "^0.36.1", + "autoprefixer": "^9.7.6", + "balanced-match": "^1.0.0", + "chalk": "^4.0.0", + "cosmiconfig": "^6.0.0", + "debug": "^4.1.1", + "execall": "^2.0.0", + "file-entry-cache": "^5.0.1", + "get-stdin": "^7.0.0", + "global-modules": "^2.0.0", + "globby": "^11.0.0", + "globjoin": "^0.1.4", + "html-tags": "^3.1.0", + "ignore": "^5.1.4", + "import-lazy": "^4.0.0", + "imurmurhash": "^0.1.4", + "known-css-properties": "^0.18.0", + "leven": "^3.1.0", + "lodash": "^4.17.15", + "log-symbols": "^3.0.0", + "mathml-tag-names": "^2.1.3", + "meow": "^6.1.0", + "micromatch": "^4.0.2", + "normalize-selector": "^0.2.0", + "postcss": "^7.0.27", + "postcss-html": "^0.36.0", + "postcss-less": "^3.1.4", + "postcss-media-query-parser": "^0.2.3", + "postcss-reporter": "^6.0.1", + "postcss-resolve-nested-selector": "^0.1.1", + "postcss-safe-parser": "^4.0.2", + "postcss-sass": "^0.4.4", + "postcss-scss": "^2.0.0", + "postcss-selector-parser": "^6.0.2", + "postcss-syntax": "^0.36.2", + "postcss-value-parser": "^4.0.3", + "resolve-from": "^5.0.0", + "slash": "^3.0.0", + "specificity": "^0.4.1", + "string-width": "^4.2.0", + "strip-ansi": "^6.0.0", + "style-search": "^0.1.0", + "sugarss": "^2.0.0", + "svg-tags": "^1.0.0", + "table": "^5.4.6", + "v8-compile-cache": "^2.1.0", + "write-file-atomic": "^3.0.3" + }, + "dependencies": { + "camelcase-keys": { + "version": "6.2.2", + "resolved": "https://registry.npmjs.org/camelcase-keys/-/camelcase-keys-6.2.2.tgz", + "integrity": "sha512-YrwaA0vEKazPBkn0ipTiMpSajYDSe+KjQfrjhcBMxJt/znbvlHd8Pw/Vamaz5EB4Wfhs3SUR3Z9mwRu/P3s3Yg==", + "dev": true, + "requires": { + "camelcase": "^5.3.1", + "map-obj": "^4.0.0", + "quick-lru": "^4.0.1" + } + }, + "debug": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.1.1.tgz", + "integrity": "sha512-pYAIzeRo8J6KPEaJ0VWOh5Pzkbw/RetuzehGM7QRRX5he4fPHx2rdKMB256ehJCkX+XRQm16eZLqLNS8RSZXZw==", + "dev": true, + "requires": { + "ms": "^2.1.1" + } + }, + "get-stdin": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/get-stdin/-/get-stdin-7.0.0.tgz", + "integrity": "sha512-zRKcywvrXlXsA0v0i9Io4KDRaAw7+a1ZpjRwl9Wox8PFlVCCHra7E9c4kqXCoCM9nR5tBkaTTZRBoCm60bFqTQ==", + "dev": true + }, + "ignore": { + "version": "5.1.8", + "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.1.8.tgz", + "integrity": "sha512-BMpfD7PpiETpBl/A6S498BaIJ6Y/ABT93ETbby2fP00v4EbvPBXWEoaR1UBPKs3iR53pJY7EtZk5KACI57i1Uw==", + "dev": true + }, + "indent-string": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/indent-string/-/indent-string-4.0.0.tgz", + "integrity": "sha512-EdDDZu4A2OyIK7Lr/2zG+w5jmbuk1DVBnEwREQvBzspBJkCEbRa8GxU1lghYcaGJCnRWibjDXlq779X1/y5xwg==", + "dev": true + }, + "map-obj": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/map-obj/-/map-obj-4.1.0.tgz", + "integrity": "sha512-glc9y00wgtwcDmp7GaE/0b0OnxpNJsVf3ael/An6Fe2Q51LLwN1er6sdomLRzz5h0+yMpiYLhWYF5R7HeqVd4g==", + "dev": true + }, + "meow": { + "version": "6.1.1", + "resolved": "https://registry.npmjs.org/meow/-/meow-6.1.1.tgz", + "integrity": "sha512-3YffViIt2QWgTy6Pale5QpopX/IvU3LPL03jOTqp6pGj3VjesdO/U8CuHMKpnQr4shCNCM5fd5XFFvIIl6JBHg==", + "dev": true, + "requires": { + "@types/minimist": "^1.2.0", + "camelcase-keys": "^6.2.2", + "decamelize-keys": "^1.1.0", + "hard-rejection": "^2.1.0", + "minimist-options": "^4.0.2", + "normalize-package-data": "^2.5.0", + "read-pkg-up": "^7.0.1", + "redent": "^3.0.0", + "trim-newlines": "^3.0.0", + "type-fest": "^0.13.1", + "yargs-parser": "^18.1.3" + } + }, + "ms": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", + "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", + "dev": true + }, + "parse-json": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-5.0.0.tgz", + "integrity": "sha512-OOY5b7PAEFV0E2Fir1KOkxchnZNCdowAJgQ5NuxjpBKTRP3pQhwkrkxqQjeoKJ+fO7bCpmIZaogI4eZGDMEGOw==", + "dev": true, + "requires": { + "@babel/code-frame": "^7.0.0", + "error-ex": "^1.3.1", + "json-parse-better-errors": "^1.0.1", + "lines-and-columns": "^1.1.6" + } + }, + "quick-lru": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/quick-lru/-/quick-lru-4.0.1.tgz", + "integrity": "sha512-ARhCpm70fzdcvNQfPoy49IaanKkTlRWF2JMzqhcJbhSFRZv7nPTvZJdcY7301IPmvW+/p0RgIWnQDLJxifsQ7g==", + "dev": true + }, + "read-pkg": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/read-pkg/-/read-pkg-5.2.0.tgz", + "integrity": "sha512-Ug69mNOpfvKDAc2Q8DRpMjjzdtrnv9HcSMX+4VsZxD1aZ6ZzrIE7rlzXBtWTyhULSMKg076AW6WR5iZpD0JiOg==", + "dev": true, + "requires": { + "@types/normalize-package-data": "^2.4.0", + "normalize-package-data": "^2.5.0", + "parse-json": "^5.0.0", + "type-fest": "^0.6.0" + }, + "dependencies": { + "type-fest": { + "version": "0.6.0", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.6.0.tgz", + "integrity": "sha512-q+MB8nYR1KDLrgr4G5yemftpMC7/QLqVndBmEEdqzmNj5dcFOO4Oo8qlwZE3ULT3+Zim1F8Kq4cBnikNhlCMlg==", + "dev": true + } + } + }, + "read-pkg-up": { + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/read-pkg-up/-/read-pkg-up-7.0.1.tgz", + "integrity": "sha512-zK0TB7Xd6JpCLmlLmufqykGE+/TlOePD6qKClNW7hHDKFh/J7/7gCWGR7joEQEW1bKq3a3yUZSObOoWLFQ4ohg==", + "dev": true, + "requires": { + "find-up": "^4.1.0", + "read-pkg": "^5.2.0", + "type-fest": "^0.8.1" + }, + "dependencies": { + "type-fest": { + "version": "0.8.1", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.8.1.tgz", + "integrity": "sha512-4dbzIzqvjtgiM5rw1k5rEHtBANKmdudhGyBEajN01fEyhaAIhsoKNy6y7+IN93IfpFtwY9iqi7kD+xwKhQsNJA==", + "dev": true + } + } + }, + "redent": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/redent/-/redent-3.0.0.tgz", + "integrity": "sha512-6tDA8g98We0zd0GvVeMT9arEOnTw9qM03L9cJXaCjrip1OO764RDBLBfrB4cwzNGDj5OA5ioymC9GkizgWJDUg==", + "dev": true, + "requires": { + "indent-string": "^4.0.0", + "strip-indent": "^3.0.0" + } + }, + "resolve-from": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-5.0.0.tgz", + "integrity": "sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw==", + "dev": true + }, + "strip-indent": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/strip-indent/-/strip-indent-3.0.0.tgz", + "integrity": "sha512-laJTa3Jb+VQpaC6DseHhF7dXVqHTfJPCRDaEbid/drOhgitgYku/letMUqOXFoWV0zIIUbjpdH2t+tYj4bQMRQ==", + "dev": true, + "requires": { + "min-indent": "^1.0.0" + } + }, + "trim-newlines": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/trim-newlines/-/trim-newlines-3.0.0.tgz", + "integrity": "sha512-C4+gOpvmxaSMKuEf9Qc134F1ZuOHVXKRbtEflf4NTtuuJDEIJ9p5PXsalL8SkeRw+qit1Mo+yuvMPAKwWg/1hA==", + "dev": true + }, + "type-fest": { + "version": "0.13.1", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.13.1.tgz", + "integrity": "sha512-34R7HTnG0XIJcBSn5XhDd7nNFPRcXYRZrBB2O2jdKqYODldSzBAqzsWoZYYvduky73toYS/ESqxPvkDf/F0XMg==", + "dev": true + } + } + }, + "stylelint-config-wikimedia": { + "version": "0.10.1", + "resolved": "https://registry.npmjs.org/stylelint-config-wikimedia/-/stylelint-config-wikimedia-0.10.1.tgz", + "integrity": "sha512-R/E7xVKwDyneKmVwkNi+TqJlXZjnL5IH+bQPmfHrgwwyAekNx5GdYZ+tVjx7VBXdv/pjOr0HevVpXSQe86ZfVQ==", + "dev": true, + "requires": { + "stylelint": "13.3.2" + } + }, + "suffix": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/suffix/-/suffix-0.1.1.tgz", + "integrity": "sha1-zFgjFkag7xEC95R47zqSSP2chC8=", + "dev": true + }, + "sugarss": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/sugarss/-/sugarss-2.0.0.tgz", + "integrity": "sha512-WfxjozUk0UVA4jm+U1d736AUpzSrNsQcIbyOkoE364GrtWmIrFdk5lksEupgWMD4VaT/0kVx1dobpiDumSgmJQ==", + "dev": true, + "requires": { + "postcss": "^7.0.2" + } + }, + "supports-color": { + "version": "7.1.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.1.0.tgz", + "integrity": "sha512-oRSIpR8pxT1Wr2FquTNnGet79b3BWljqOuoW/h4oBhxJ/HUbX5nX6JSruTkvXDCFMwDPvsaTTbvMLKZWSy0R5g==", + "dev": true, + "requires": { + "has-flag": "^4.0.0" + } + }, + "svg-tags": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/svg-tags/-/svg-tags-1.0.0.tgz", + "integrity": "sha1-WPcc7jvVGbWdSyqEO2x95krAR2Q=", + "dev": true + }, + "svgo": { + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/svgo/-/svgo-1.3.2.tgz", + "integrity": "sha512-yhy/sQYxR5BkC98CY7o31VGsg014AKLEPxdfhora76l36hD9Rdy5NZA/Ocn6yayNPgSamYdtX2rFJdcv07AYVw==", + "dev": true, + "requires": { + "chalk": "^2.4.1", + "coa": "^2.0.2", + "css-select": "^2.0.0", + "css-select-base-adapter": "^0.1.1", + "css-tree": "1.0.0-alpha.37", + "csso": "^4.0.2", + "js-yaml": "^3.13.1", + "mkdirp": "~0.5.1", + "object.values": "^1.1.0", + "sax": "~1.2.4", + "stable": "^0.1.8", + "unquote": "~1.1.1", + "util.promisify": "~1.0.0" + }, + "dependencies": { + "ansi-styles": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", + "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", + "dev": true, + "requires": { + "color-convert": "^1.9.0" + } + }, + "chalk": { + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", + "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", + "dev": true, + "requires": { + "ansi-styles": "^3.2.1", + "escape-string-regexp": "^1.0.5", + "supports-color": "^5.3.0" + } + }, + "color-convert": { + "version": "1.9.3", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", + "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", + "dev": true, + "requires": { + "color-name": "1.1.3" + } + }, + "color-name": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", + "integrity": "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=", + "dev": true + }, + "has-flag": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", + "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=", + "dev": true + }, + "supports-color": { + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", + "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", + "dev": true, + "requires": { + "has-flag": "^3.0.0" + } + } + } + }, + "table": { + "version": "5.4.6", + "resolved": "https://registry.npmjs.org/table/-/table-5.4.6.tgz", + "integrity": "sha512-wmEc8m4fjnob4gt5riFRtTu/6+4rSe12TpAELNSqHMfF3IqnA+CH37USM6/YR3qRZv7e56kAEAtd6nKZaxe0Ug==", + "dev": true, + "requires": { + "ajv": "^6.10.2", + "lodash": "^4.17.14", + "slice-ansi": "^2.1.0", + "string-width": "^3.0.0" + }, + "dependencies": { + "ansi-regex": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-4.1.0.tgz", + "integrity": "sha512-1apePfXM1UOSqw0o9IiFAovVz9M5S1Dg+4TrDwfMewQ6p/rmMueb7tWZjQ1rx4Loy1ArBggoqGpfqqdI4rondg==", + "dev": true + }, + "ansi-styles": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", + "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", + "dev": true, + "requires": { + "color-convert": "^1.9.0" + } + }, + "astral-regex": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/astral-regex/-/astral-regex-1.0.0.tgz", + "integrity": "sha512-+Ryf6g3BKoRc7jfp7ad8tM4TtMiaWvbF/1/sQcZPkkS7ag3D5nMBCe2UfOTONtAkaG0tO0ij3C5Lwmf1EiyjHg==", + "dev": true + }, + "color-convert": { + "version": "1.9.3", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", + "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", + "dev": true, + "requires": { + "color-name": "1.1.3" + } + }, + "color-name": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", + "integrity": "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=", + "dev": true + }, + "emoji-regex": { + "version": "7.0.3", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-7.0.3.tgz", + "integrity": "sha512-CwBLREIQ7LvYFB0WyRvwhq5N5qPhc6PMjD6bYggFlI5YyDgl+0vxq5VHbMOFqLg7hfWzmu8T5Z1QofhmTIhItA==", + "dev": true + }, + "is-fullwidth-code-point": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz", + "integrity": "sha1-o7MKXE8ZkYMWeqq5O+764937ZU8=", + "dev": true + }, + "slice-ansi": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/slice-ansi/-/slice-ansi-2.1.0.tgz", + "integrity": "sha512-Qu+VC3EwYLldKa1fCxuuvULvSJOKEgk9pi8dZeCVK7TqBfUNTH4sFkk4joj8afVSfAYgJoSOetjx9QWOJ5mYoQ==", + "dev": true, + "requires": { + "ansi-styles": "^3.2.0", + "astral-regex": "^1.0.0", + "is-fullwidth-code-point": "^2.0.0" + } + }, + "string-width": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-3.1.0.tgz", + "integrity": "sha512-vafcv6KjVZKSgz06oM/H6GDBrAtz8vdhQakGjFIvNrHA6y3HCF1CInLy+QLq8dTJPQ1b+KDUqDFctkdRW44e1w==", + "dev": true, + "requires": { + "emoji-regex": "^7.0.1", + "is-fullwidth-code-point": "^2.0.0", + "strip-ansi": "^5.1.0" + } + }, + "strip-ansi": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-5.2.0.tgz", + "integrity": "sha512-DuRs1gKbBqsMKIZlrffwlug8MHkcnpjs5VPmL1PAh+mA30U0DTotfDZ0d2UUsXpPmPmMMJ6W773MaA3J+lbiWA==", + "dev": true, + "requires": { + "ansi-regex": "^4.1.0" + } + } + } + }, + "tar-fs": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/tar-fs/-/tar-fs-2.1.0.tgz", + "integrity": "sha512-9uW5iDvrIMCVpvasdFHW0wJPez0K4JnMZtsuIeDI7HyMGJNxmDZDOCQROr7lXyS+iL/QMpj07qcjGYTSdRFXUg==", + "dev": true, + "requires": { + "chownr": "^1.1.1", + "mkdirp-classic": "^0.5.2", + "pump": "^3.0.0", + "tar-stream": "^2.0.0" + } + }, + "tar-stream": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/tar-stream/-/tar-stream-2.1.2.tgz", + "integrity": "sha512-UaF6FoJ32WqALZGOIAApXx+OdxhekNMChu6axLJR85zMMjXKWFGjbIRe+J6P4UnRGg9rAwWvbTT0oI7hD/Un7Q==", + "dev": true, + "requires": { + "bl": "^4.0.1", + "end-of-stream": "^1.4.1", + "fs-constants": "^1.0.0", + "inherits": "^2.0.3", + "readable-stream": "^3.1.1" + } + }, + "text-table": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/text-table/-/text-table-0.2.0.tgz", + "integrity": "sha1-f17oI66AUgfACvLfSoTsP8+lcLQ=", + "dev": true + }, + "through": { + "version": "2.3.8", + "resolved": "https://registry.npmjs.org/through/-/through-2.3.8.tgz", + "integrity": "sha1-DdTJ/6q8NXlgsbckEV1+Doai4fU=", + "dev": true + }, + "tiny-lr": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/tiny-lr/-/tiny-lr-1.1.1.tgz", + "integrity": "sha512-44yhA3tsaRoMOjQQ+5v5mVdqef+kH6Qze9jTpqtVufgYjYt08zyZAwNwwVBj3i1rJMnR52IxOW0LK0vBzgAkuA==", + "dev": true, + "requires": { + "body": "^5.1.0", + "debug": "^3.1.0", + "faye-websocket": "~0.10.0", + "livereload-js": "^2.3.0", + "object-assign": "^4.1.0", + "qs": "^6.4.0" + }, + "dependencies": { + "debug": { + "version": "3.2.6", + "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.6.tgz", + "integrity": "sha512-mel+jf7nrtEl5Pn1Qx46zARXKDpBbvzezse7p7LqINmdoIk8PYP5SySaxEmYv6TZ0JyEKA1hsCId6DIhgITtWQ==", + "dev": true, + "requires": { + "ms": "^2.1.1" + } + }, + "ms": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", + "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", + "dev": true + } + } + }, + "tmp": { + "version": "0.0.33", + "resolved": "https://registry.npmjs.org/tmp/-/tmp-0.0.33.tgz", + "integrity": "sha512-jRCJlojKnZ3addtTOjdIqoRuPEKBvNXcGYqzO6zWZX8KfKEpnGY5jfggJQ3EjKuu8D4bJRr0y+cYJFmYbImXGw==", + "dev": true, + "requires": { + "os-tmpdir": "~1.0.2" + } + }, + "to-fast-properties": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/to-fast-properties/-/to-fast-properties-2.0.0.tgz", + "integrity": "sha1-3F5pjL0HkmW8c+A3doGk5Og/YW4=", + "dev": true + }, + "to-regex-range": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", + "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==", + "dev": true, + "requires": { + "is-number": "^7.0.0" + } + }, + "tough-cookie": { + "version": "2.5.0", + "resolved": "https://registry.npmjs.org/tough-cookie/-/tough-cookie-2.5.0.tgz", + "integrity": "sha512-nlLsUzgm1kfLXSXfRZMc1KLAugd4hqJHDTvc2hDIwS3mZAfMEuMbc03SujMF+GEcpaX/qboeycw6iO8JwVv2+g==", + "dev": true, + "requires": { + "psl": "^1.1.28", + "punycode": "^2.1.1" + } + }, + "trim": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/trim/-/trim-0.0.1.tgz", + "integrity": "sha1-WFhUf2spB1fulczMZm+1AITEYN0=", + "dev": true + }, + "trim-newlines": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/trim-newlines/-/trim-newlines-1.0.0.tgz", + "integrity": "sha1-WIeWa7WCpFA6QetST301ARgVphM=", + "dev": true + }, + "trim-trailing-lines": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/trim-trailing-lines/-/trim-trailing-lines-1.1.3.tgz", + "integrity": "sha512-4ku0mmjXifQcTVfYDfR5lpgV7zVqPg6zV9rdZmwOPqq0+Zq19xDqEgagqVbc4pOOShbncuAOIs59R3+3gcF3ZA==", + "dev": true + }, + "trough": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/trough/-/trough-1.0.5.tgz", + "integrity": "sha512-rvuRbTarPXmMb79SmzEp8aqXNKcK+y0XaB298IXueQ8I2PsrATcPBCSPyK/dDNa2iWOhKlfNnOjdAOTBU/nkFA==", + "dev": true + }, + "tslib": { + "version": "1.13.0", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.13.0.tgz", + "integrity": "sha512-i/6DQjL8Xf3be4K/E6Wgpekn5Qasl1usyw++dAA35Ue5orEn65VIxOA+YvNNl9HV3qv70T7CNwjODHZrLwvd1Q==", + "dev": true + }, + "tunnel-agent": { + "version": "0.6.0", + "resolved": "https://registry.npmjs.org/tunnel-agent/-/tunnel-agent-0.6.0.tgz", + "integrity": "sha1-J6XeoGs2sEoKmWZ3SykIaPD8QP0=", + "dev": true, + "requires": { + "safe-buffer": "^5.0.1" + } + }, + "tweetnacl": { + "version": "0.14.5", + "resolved": "https://registry.npmjs.org/tweetnacl/-/tweetnacl-0.14.5.tgz", + "integrity": "sha1-WuaBd/GS1EViadEIr6k/+HQ/T2Q=", + "dev": true + }, + "type-check": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/type-check/-/type-check-0.4.0.tgz", + "integrity": "sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew==", + "dev": true, + "requires": { + "prelude-ls": "^1.2.1" + } + }, + "type-fest": { + "version": "0.11.0", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.11.0.tgz", + "integrity": "sha512-OdjXJxnCN1AvyLSzeKIgXTXxV+99ZuXl3Hpo9XpJAv9MBcHrrJOQ5kV7ypXOuQie+AmWG25hLbiKdwYTifzcfQ==", + "dev": true + }, + "typedarray-to-buffer": { + "version": "3.1.5", + "resolved": "https://registry.npmjs.org/typedarray-to-buffer/-/typedarray-to-buffer-3.1.5.tgz", + "integrity": "sha512-zdu8XMNEDepKKR+XYOXAVPtWui0ly0NtohUscw+UmaHiAWT8hrV1rr//H6V+0DvJ3OQ19S979M0laLfX8rm82Q==", + "dev": true, + "requires": { + "is-typedarray": "^1.0.0" + } + }, + "ua-parser-js": { + "version": "0.7.21", + "resolved": "https://registry.npmjs.org/ua-parser-js/-/ua-parser-js-0.7.21.tgz", + "integrity": "sha512-+O8/qh/Qj8CgC6eYBVBykMrNtp5Gebn4dlGD/kKXVkJNDwyrAwSIqwz8CDf+tsAIWVycKcku6gIXJ0qwx/ZXaQ==", + "dev": true + }, + "unbzip2-stream": { + "version": "1.4.3", + "resolved": "https://registry.npmjs.org/unbzip2-stream/-/unbzip2-stream-1.4.3.tgz", + "integrity": "sha512-mlExGW4w71ebDJviH16lQLtZS32VKqsSfk80GCfUlwT/4/hNRFsoscrF/c++9xinkMzECL1uL9DDwXqFWkruPg==", + "dev": true, + "requires": { + "buffer": "^5.2.1", + "through": "^2.3.8" + } + }, + "underscore.string": { + "version": "3.3.5", + "resolved": "https://registry.npmjs.org/underscore.string/-/underscore.string-3.3.5.tgz", + "integrity": "sha512-g+dpmgn+XBneLmXXo+sGlW5xQEt4ErkS3mgeN2GFbremYeMBSJKr9Wf2KJplQVaiPY/f7FN6atosWYNm9ovrYg==", + "dev": true, + "requires": { + "sprintf-js": "^1.0.3", + "util-deprecate": "^1.0.2" + } + }, + "unherit": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/unherit/-/unherit-1.1.3.tgz", + "integrity": "sha512-Ft16BJcnapDKp0+J/rqFC3Rrk6Y/Ng4nzsC028k2jdDII/rdZ7Wd3pPT/6+vIIxRagwRc9K0IUX0Ra4fKvw+WQ==", + "dev": true, + "requires": { + "inherits": "^2.0.0", + "xtend": "^4.0.0" + } + }, + "unified": { + "version": "9.0.0", + "resolved": "https://registry.npmjs.org/unified/-/unified-9.0.0.tgz", + "integrity": "sha512-ssFo33gljU3PdlWLjNp15Inqb77d6JnJSfyplGJPT/a+fNRNyCBeveBAYJdO5khKdF6WVHa/yYCC7Xl6BDwZUQ==", + "dev": true, + "requires": { + "bail": "^1.0.0", + "extend": "^3.0.0", + "is-buffer": "^2.0.0", + "is-plain-obj": "^2.0.0", + "trough": "^1.0.0", + "vfile": "^4.0.0" + } + }, + "uniq": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/uniq/-/uniq-1.0.1.tgz", + "integrity": "sha1-sxxa6CVIRKOoKBVBzisEuGWnNP8=", + "dev": true + }, + "unist-util-find-all-after": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/unist-util-find-all-after/-/unist-util-find-all-after-3.0.1.tgz", + "integrity": "sha512-0GICgc++sRJesLwEYDjFVJPJttBpVQaTNgc6Jw0Jhzvfs+jtKePEMu+uD+PqkRUrAvGQqwhpDwLGWo1PK8PDEw==", + "dev": true, + "requires": { + "unist-util-is": "^4.0.0" + } + }, + "unist-util-is": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/unist-util-is/-/unist-util-is-4.0.2.tgz", + "integrity": "sha512-Ofx8uf6haexJwI1gxWMGg6I/dLnF2yE+KibhD3/diOqY2TinLcqHXCV6OI5gFVn3xQqDH+u0M625pfKwIwgBKQ==", + "dev": true + }, + "unist-util-remove-position": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/unist-util-remove-position/-/unist-util-remove-position-2.0.1.tgz", + "integrity": "sha512-fDZsLYIe2uT+oGFnuZmy73K6ZxOPG/Qcm+w7jbEjaFcJgbQ6cqjs/eSPzXhsmGpAsWPkqZM9pYjww5QTn3LHMA==", + "dev": true, + "requires": { + "unist-util-visit": "^2.0.0" + } + }, + "unist-util-stringify-position": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/unist-util-stringify-position/-/unist-util-stringify-position-2.0.3.tgz", + "integrity": "sha512-3faScn5I+hy9VleOq/qNbAd6pAx7iH5jYBMS9I1HgQVijz/4mv5Bvw5iw1sC/90CODiKo81G/ps8AJrISn687g==", + "dev": true, + "requires": { + "@types/unist": "^2.0.2" + } + }, + "unist-util-visit": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/unist-util-visit/-/unist-util-visit-2.0.2.tgz", + "integrity": "sha512-HoHNhGnKj6y+Sq+7ASo2zpVdfdRifhTgX2KTU3B/sO/TTlZchp7E3S4vjRzDJ7L60KmrCPsQkVK3lEF3cz36XQ==", + "dev": true, + "requires": { + "@types/unist": "^2.0.0", + "unist-util-is": "^4.0.0", + "unist-util-visit-parents": "^3.0.0" + } + }, + "unist-util-visit-parents": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/unist-util-visit-parents/-/unist-util-visit-parents-3.0.2.tgz", + "integrity": "sha512-yJEfuZtzFpQmg1OSCyS9M5NJRrln/9FbYosH3iW0MG402QbdbaB8ZESwUv9RO6nRfLAKvWcMxCwdLWOov36x/g==", + "dev": true, + "requires": { + "@types/unist": "^2.0.0", + "unist-util-is": "^4.0.0" + } + }, + "universalify": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/universalify/-/universalify-1.0.0.tgz", + "integrity": "sha512-rb6X1W158d7pRQBg5gkR8uPaSfiids68LTJQYOtEUhoJUWBdaQHsuT/EUduxXYxcrt4r5PJ4fuHW1MHT6p0qug==", + "dev": true + }, + "unquote": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/unquote/-/unquote-1.1.1.tgz", + "integrity": "sha1-j97XMk7G6IoP+LkF58CYzcCG1UQ=", + "dev": true + }, + "upath": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/upath/-/upath-1.2.0.tgz", + "integrity": "sha512-aZwGpamFO61g3OlfT7OQCHqhGnW43ieH9WZeP7QxN/G/jS4jfqUkZxoryvJgVPEcrl5NL/ggHsSmLMHuH64Lhg==", + "dev": true + }, + "uri-js": { + "version": "4.2.2", + "resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.2.2.tgz", + "integrity": "sha512-KY9Frmirql91X2Qgjry0Wd4Y+YTdrdZheS8TFwvkbLWf/G5KNJDCh6pKL5OZctEW4+0Baa5idK2ZQuELRwPznQ==", + "dev": true, + "requires": { + "punycode": "^2.1.0" + } + }, + "util-deprecate": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", + "integrity": "sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8=", + "dev": true + }, + "util.promisify": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/util.promisify/-/util.promisify-1.0.1.tgz", + "integrity": "sha512-g9JpC/3He3bm38zsLupWryXHoEcS22YHthuPQSJdMy6KNrzIRzWqcsHzD/WUnqe45whVou4VIsPew37DoXWNrA==", + "dev": true, + "requires": { + "define-properties": "^1.1.3", + "es-abstract": "^1.17.2", + "has-symbols": "^1.0.1", + "object.getownpropertydescriptors": "^2.1.0" + } + }, + "uuid": { + "version": "8.2.0", + "resolved": "https://registry.npmjs.org/uuid/-/uuid-8.2.0.tgz", + "integrity": "sha512-CYpGiFTUrmI6OBMkAdjSDM0k5h8SkkiTP4WAjQgDgNB1S3Ou9VBEvr6q0Kv2H1mMk7IWfxYGpMH5sd5AvcIV2Q==", + "dev": true + }, + "v8-compile-cache": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/v8-compile-cache/-/v8-compile-cache-2.1.1.tgz", + "integrity": "sha512-8OQ9CL+VWyt3JStj7HX7/ciTL2V3Rl1Wf5OL+SNTm0yK1KvtReVulksyeRnCANHHuUxHlQig+JJDlUhBt1NQDQ==", + "dev": true + }, + "validate-npm-package-license": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/validate-npm-package-license/-/validate-npm-package-license-3.0.4.tgz", + "integrity": "sha512-DpKm2Ui/xN7/HQKCtpZxoRWBhZ9Z0kqtygG8XCgNQ8ZlDnxuQmWhj566j8fN4Cu3/JmbhsDo7fcAJq4s9h27Ew==", + "dev": true, + "requires": { + "spdx-correct": "^3.0.0", + "spdx-expression-parse": "^3.0.0" + } + }, + "verror": { + "version": "1.10.0", + "resolved": "https://registry.npmjs.org/verror/-/verror-1.10.0.tgz", + "integrity": "sha1-OhBcoXBTr1XW4nDB+CiGguGNpAA=", + "dev": true, + "requires": { + "assert-plus": "^1.0.0", + "core-util-is": "1.0.2", + "extsprintf": "^1.2.0" + } + }, + "vfile": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/vfile/-/vfile-4.1.1.tgz", + "integrity": "sha512-lRjkpyDGjVlBA7cDQhQ+gNcvB1BGaTHYuSOcY3S7OhDmBtnzX95FhtZZDecSTDm6aajFymyve6S5DN4ZHGezdQ==", + "dev": true, + "requires": { + "@types/unist": "^2.0.0", + "is-buffer": "^2.0.0", + "replace-ext": "1.0.0", + "unist-util-stringify-position": "^2.0.0", + "vfile-message": "^2.0.0" + } + }, + "vfile-location": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/vfile-location/-/vfile-location-3.0.1.tgz", + "integrity": "sha512-yYBO06eeN/Ki6Kh1QAkgzYpWT1d3Qln+ZCtSbJqFExPl1S3y2qqotJQXoh6qEvl/jDlgpUJolBn3PItVnnZRqQ==", + "dev": true + }, + "vfile-message": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/vfile-message/-/vfile-message-2.0.4.tgz", + "integrity": "sha512-DjssxRGkMvifUOJre00juHoP9DPWuzjxKuMDrhNbk2TdaYYBNMStsNhEOt3idrtI12VQYM/1+iM0KOzXi4pxwQ==", + "dev": true, + "requires": { + "@types/unist": "^2.0.0", + "unist-util-stringify-position": "^2.0.0" + } + }, + "vscode-json-languageservice": { + "version": "3.7.0", + "resolved": "https://registry.npmjs.org/vscode-json-languageservice/-/vscode-json-languageservice-3.7.0.tgz", + "integrity": "sha512-nGLqcBhTjdfkl8Dz9sYGK/ZCTjscYFoIjYw+qqkWB+vyNfM0k/AyIoT73DQvB/PArteCKjEVfQUF72GRZEDSbQ==", + "dev": true, + "requires": { + "jsonc-parser": "^2.2.1", + "vscode-languageserver-textdocument": "^1.0.1", + "vscode-languageserver-types": "^3.15.1", + "vscode-nls": "^4.1.2", + "vscode-uri": "^2.1.2" + } + }, + "vscode-languageserver-textdocument": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/vscode-languageserver-textdocument/-/vscode-languageserver-textdocument-1.0.1.tgz", + "integrity": "sha512-UIcJDjX7IFkck7cSkNNyzIz5FyvpQfY7sdzVy+wkKN/BLaD4DQ0ppXQrKePomCxTS7RrolK1I0pey0bG9eh8dA==", + "dev": true + }, + "vscode-languageserver-types": { + "version": "3.15.1", + "resolved": "https://registry.npmjs.org/vscode-languageserver-types/-/vscode-languageserver-types-3.15.1.tgz", + "integrity": "sha512-+a9MPUQrNGRrGU630OGbYVQ+11iOIovjCkqxajPa9w57Sd5ruK8WQNsslzpa0x/QJqC8kRc2DUxWjIFwoNm4ZQ==", + "dev": true + }, + "vscode-nls": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/vscode-nls/-/vscode-nls-4.1.2.tgz", + "integrity": "sha512-7bOHxPsfyuCqmP+hZXscLhiHwe7CSuFE4hyhbs22xPIhQ4jv99FcR4eBzfYYVLP356HNFpdvz63FFb/xw6T4Iw==", + "dev": true + }, + "vscode-uri": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/vscode-uri/-/vscode-uri-2.1.2.tgz", + "integrity": "sha512-8TEXQxlldWAuIODdukIb+TR5s+9Ds40eSJrw+1iDDA9IFORPjMELarNQE3myz5XIkWWpdprmJjm1/SxMlWOC8A==", + "dev": true + }, + "vue-eslint-parser": { + "version": "7.1.0", + "resolved": "https://registry.npmjs.org/vue-eslint-parser/-/vue-eslint-parser-7.1.0.tgz", + "integrity": "sha512-Kr21uPfthDc63nDl27AGQEhtt9VrZ9nkYk/NTftJ2ws9XiJwzJJCnCr3AITQ2jpRMA0XPGDECxYH8E027qMK9Q==", + "dev": true, + "requires": { + "debug": "^4.1.1", + "eslint-scope": "^5.0.0", + "eslint-visitor-keys": "^1.1.0", + "espree": "^6.2.1", + "esquery": "^1.0.1", + "lodash": "^4.17.15" + }, + "dependencies": { + "debug": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.1.1.tgz", + "integrity": "sha512-pYAIzeRo8J6KPEaJ0VWOh5Pzkbw/RetuzehGM7QRRX5he4fPHx2rdKMB256ehJCkX+XRQm16eZLqLNS8RSZXZw==", + "dev": true, + "requires": { + "ms": "^2.1.1" + } + }, + "espree": { + "version": "6.2.1", + "resolved": "https://registry.npmjs.org/espree/-/espree-6.2.1.tgz", + "integrity": "sha512-ysCxRQY3WaXJz9tdbWOwuWr5Y/XrPTGX9Kiz3yoUXwW0VZ4w30HTkQLaGx/+ttFjF8i+ACbArnB4ce68a9m5hw==", + "dev": true, + "requires": { + "acorn": "^7.1.1", + "acorn-jsx": "^5.2.0", + "eslint-visitor-keys": "^1.1.0" + } + }, + "ms": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", + "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", + "dev": true + } + } + }, + "wcwidth": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/wcwidth/-/wcwidth-1.0.1.tgz", + "integrity": "sha1-8LDc+RW8X/FSivrbLA4XtTLaL+g=", + "dev": true, + "optional": true, + "requires": { + "defaults": "^1.0.3" + } + }, + "wdio-mediawiki": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/wdio-mediawiki/-/wdio-mediawiki-1.0.0.tgz", + "integrity": "sha512-eKrPx3MHTQvWaI+YUi6pLmebOdsdBegnx5MJx8m9ejh6US7TIKKzLmsh9p9gfj6PW7HzHNN/e8EkDwKo3M0kJg==", + "dev": true, + "requires": { + "mwbot": "1.0.10" + } + }, + "webdriver": { + "version": "6.1.14", + "resolved": "https://registry.npmjs.org/webdriver/-/webdriver-6.1.14.tgz", + "integrity": "sha512-6fXoGDnxWfJn9zqfYbc6+VEV5N1obd3K7iuRmJ7w/hH9d9XDxcrcx147T5egiy1qziko61hqYE/x9VtSQbjPcA==", + "dev": true, + "requires": { + "@wdio/config": "6.1.14", + "@wdio/logger": "6.0.16", + "@wdio/protocols": "6.1.14", + "@wdio/utils": "6.1.8", + "got": "^11.0.2", + "lodash.merge": "^4.6.1" + } + }, + "webdriverio": { + "version": "6.1.16", + "resolved": "https://registry.npmjs.org/webdriverio/-/webdriverio-6.1.16.tgz", + "integrity": "sha512-vk6/XeErNnMooebCtxwIR//LqrastXO9gXL+eVUGNRAuG5omp8XCdT+MK2fmlw53xhcPULQ/y3h8ysYlPnPeyA==", + "dev": true, + "requires": { + "@wdio/config": "6.1.14", + "@wdio/logger": "6.0.16", + "@wdio/repl": "6.1.8", + "@wdio/utils": "6.1.8", + "archiver": "^4.0.1", + "css-value": "^0.0.1", + "devtools": "6.1.16", + "grapheme-splitter": "^1.0.2", + "lodash.clonedeep": "^4.5.0", + "lodash.isobject": "^3.0.2", + "lodash.isplainobject": "^4.0.6", + "lodash.zip": "^4.2.0", + "resq": "^1.6.0", + "rgb2hex": "^0.2.0", + "serialize-error": "^7.0.0", + "webdriver": "6.1.14" + } + }, + "websocket-driver": { + "version": "0.7.4", + "resolved": "https://registry.npmjs.org/websocket-driver/-/websocket-driver-0.7.4.tgz", + "integrity": "sha512-b17KeDIQVjvb0ssuSDF2cYXSg2iztliJ4B9WdsuB6J952qCPKmnVq4DyW5motImXHDC1cBT/1UezrJVsKw5zjg==", + "dev": true, + "requires": { + "http-parser-js": ">=0.5.1", + "safe-buffer": ">=5.1.0", + "websocket-extensions": ">=0.1.1" + } + }, + "websocket-extensions": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/websocket-extensions/-/websocket-extensions-0.1.4.tgz", + "integrity": "sha512-OqedPIGOfsDlo31UNwYbCFMSaO9m9G/0faIHj5/dZFDMFqPTcx6UwqyOy3COEaEOg/9VsGIpdqn62W5KhoKSpg==", + "dev": true + }, + "which": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/which/-/which-1.3.1.tgz", + "integrity": "sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ==", + "dev": true, + "requires": { + "isexe": "^2.0.0" + } + }, + "which-module": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/which-module/-/which-module-2.0.0.tgz", + "integrity": "sha1-2e8H3Od7mQK4o6j6SzHD4/fm6Ho=", + "dev": true + }, + "wide-align": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/wide-align/-/wide-align-1.1.3.tgz", + "integrity": "sha512-QGkOQc8XL6Bt5PwnsExKBPuMKBxnGxWWW3fU55Xt4feHozMUhdUMaBCk290qpm/wG5u/RSKzwdAC4i51YigihA==", + "dev": true, + "requires": { + "string-width": "^1.0.2 || 2" + }, + "dependencies": { + "ansi-regex": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-3.0.0.tgz", + "integrity": "sha1-7QMXwyIGT3lGbAKWa922Bas32Zg=", + "dev": true + }, + "is-fullwidth-code-point": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz", + "integrity": "sha1-o7MKXE8ZkYMWeqq5O+764937ZU8=", + "dev": true + }, + "string-width": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-2.1.1.tgz", + "integrity": "sha512-nOqH59deCq9SRHlxq1Aw85Jnt4w6KvLKqWVik6oA9ZklXLNIOlqg4F2yrT1MVaTjAqvVwdfeZ7w7aCvJD7ugkw==", + "dev": true, + "requires": { + "is-fullwidth-code-point": "^2.0.0", + "strip-ansi": "^4.0.0" + } + }, + "strip-ansi": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-4.0.0.tgz", + "integrity": "sha1-qEeQIusaw2iocTibY1JixQXuNo8=", + "dev": true, + "requires": { + "ansi-regex": "^3.0.0" + } + } + } + }, + "word-wrap": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/word-wrap/-/word-wrap-1.2.3.tgz", + "integrity": "sha512-Hz/mrNwitNRh/HUAtM/VT/5VH+ygD6DV7mYKZAtHOrbs8U7lvPS6xf7EJKMF0uW1KJCl0H701g3ZGus+muE5vQ==", + "dev": true + }, + "wrap-ansi": { + "version": "6.2.0", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-6.2.0.tgz", + "integrity": "sha512-r6lPcBGxZXlIcymEu7InxDMhdW0KDxpLgoFLcguasxCaJ/SOIZwINatK9KY/tf+ZrlywOKU0UDj3ATXUBfxJXA==", + "dev": true, + "requires": { + "ansi-styles": "^4.0.0", + "string-width": "^4.1.0", + "strip-ansi": "^6.0.0" + } + }, + "wrappy": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", + "integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=", + "dev": true + }, + "write": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/write/-/write-1.0.3.tgz", + "integrity": "sha512-/lg70HAjtkUgWPVZhZcm+T4hkL8Zbtp1nFNOn3lRrxnlv50SRBv7cR7RqR+GMsd3hUXy9hWBo4CHTbFTcOYwig==", + "dev": true, + "requires": { + "mkdirp": "^0.5.1" + } + }, + "write-file-atomic": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/write-file-atomic/-/write-file-atomic-3.0.3.tgz", + "integrity": "sha512-AvHcyZ5JnSfq3ioSyjrBkH9yW4m7Ayk8/9My/DD9onKeu/94fwrMocemO2QAJFAlnnDN+ZDS+ZjAR5ua1/PV/Q==", + "dev": true, + "requires": { + "imurmurhash": "^0.1.4", + "is-typedarray": "^1.0.0", + "signal-exit": "^3.0.2", + "typedarray-to-buffer": "^3.1.5" + } + }, + "ws": { + "version": "7.3.0", + "resolved": "https://registry.npmjs.org/ws/-/ws-7.3.0.tgz", + "integrity": "sha512-iFtXzngZVXPGgpTlP1rBqsUK82p9tKqsWRPg5L56egiljujJT3vGAYnHANvFxBieXrTFavhzhxW52jnaWV+w2w==", + "dev": true + }, + "xtend": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/xtend/-/xtend-4.0.2.tgz", + "integrity": "sha512-LKYU1iAXJXUgAXn9URjiu+MWhyUXHsvfp7mcuYm9dSUKK0/CjtrUwFAxD82/mCWbtLsGjFIad0wIsod4zrTAEQ==", + "dev": true + }, + "y18n": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/y18n/-/y18n-4.0.0.tgz", + "integrity": "sha512-r9S/ZyXu/Xu9q1tYlpsLIsa3EeLXXk0VwlxqTcFRfg9EhMW+17kbt9G0NrgCmhGb5vT2hyhJZLfDGx+7+5Uj/w==", + "dev": true + }, + "yallist": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-2.1.2.tgz", + "integrity": "sha1-HBH5IY8HYImkfdUS+TxmmaaoHVI=", + "dev": true + }, + "yaml": { + "version": "1.10.0", + "resolved": "https://registry.npmjs.org/yaml/-/yaml-1.10.0.tgz", + "integrity": "sha512-yr2icI4glYaNG+KWONODapy2/jDdMSDnrONSjblABjD9B4Z5LgiircSt8m8sRZFNi08kG9Sm0uSHtEmP3zaEGg==", + "dev": true + }, + "yargs": { + "version": "15.3.1", + "resolved": "https://registry.npmjs.org/yargs/-/yargs-15.3.1.tgz", + "integrity": "sha512-92O1HWEjw27sBfgmXiixJWT5hRBp2eobqXicLtPBIDBhYB+1HpwZlXmbW2luivBJHBzki+7VyCLRtAkScbTBQA==", + "dev": true, + "requires": { + "cliui": "^6.0.0", + "decamelize": "^1.2.0", + "find-up": "^4.1.0", + "get-caller-file": "^2.0.1", + "require-directory": "^2.1.1", + "require-main-filename": "^2.0.0", + "set-blocking": "^2.0.0", + "string-width": "^4.2.0", + "which-module": "^2.0.0", + "y18n": "^4.0.0", + "yargs-parser": "^18.1.1" + } + }, + "yargs-parser": { + "version": "18.1.3", + "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-18.1.3.tgz", + "integrity": "sha512-o50j0JeToy/4K6OZcaQmW6lyXXKhq7csREXcDwk2omFPJEwUNOVtJKvmDr9EI1fAJZUyZcRF7kxGBWmRXudrCQ==", + "dev": true, + "requires": { + "camelcase": "^5.0.0", + "decamelize": "^1.2.0" + } + }, + "yargs-unparser": { + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/yargs-unparser/-/yargs-unparser-1.6.0.tgz", + "integrity": "sha512-W9tKgmSn0DpSatfri0nx52Joq5hVXgeLiqR/5G0sZNDoLZFOr/xjBUDcShCOGNsBnEMNo1KAMBkTej1Hm62HTw==", + "dev": true, + "requires": { + "flat": "^4.1.0", + "lodash": "^4.17.15", + "yargs": "^13.3.0" + }, + "dependencies": { + "ansi-regex": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-4.1.0.tgz", + "integrity": "sha512-1apePfXM1UOSqw0o9IiFAovVz9M5S1Dg+4TrDwfMewQ6p/rmMueb7tWZjQ1rx4Loy1ArBggoqGpfqqdI4rondg==", + "dev": true + }, + "ansi-styles": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", + "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", + "dev": true, + "requires": { + "color-convert": "^1.9.0" + } + }, + "cliui": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/cliui/-/cliui-5.0.0.tgz", + "integrity": "sha512-PYeGSEmmHM6zvoef2w8TPzlrnNpXIjTipYK780YswmIP9vjxmd6Y2a3CB2Ks6/AU8NHjZugXvo8w3oWM2qnwXA==", + "dev": true, + "requires": { + "string-width": "^3.1.0", + "strip-ansi": "^5.2.0", + "wrap-ansi": "^5.1.0" + } + }, + "color-convert": { + "version": "1.9.3", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", + "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", + "dev": true, + "requires": { + "color-name": "1.1.3" + } + }, + "color-name": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", + "integrity": "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=", + "dev": true + }, + "emoji-regex": { + "version": "7.0.3", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-7.0.3.tgz", + "integrity": "sha512-CwBLREIQ7LvYFB0WyRvwhq5N5qPhc6PMjD6bYggFlI5YyDgl+0vxq5VHbMOFqLg7hfWzmu8T5Z1QofhmTIhItA==", + "dev": true + }, + "find-up": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-3.0.0.tgz", + "integrity": "sha512-1yD6RmLI1XBfxugvORwlck6f75tYL+iR0jqwsOrOxMZyGYqUuDhJ0l4AXdO1iX/FTs9cBAMEk1gWSEx1kSbylg==", + "dev": true, + "requires": { + "locate-path": "^3.0.0" + } + }, + "is-fullwidth-code-point": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz", + "integrity": "sha1-o7MKXE8ZkYMWeqq5O+764937ZU8=", + "dev": true + }, + "locate-path": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-3.0.0.tgz", + "integrity": "sha512-7AO748wWnIhNqAuaty2ZWHkQHRSNfPVIsPIfwEOWO22AmaoVrWavlOcMR5nzTLNYvp36X220/maaRsrec1G65A==", + "dev": true, + "requires": { + "p-locate": "^3.0.0", + "path-exists": "^3.0.0" + } + }, + "p-locate": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-3.0.0.tgz", + "integrity": "sha512-x+12w/To+4GFfgJhBEpiDcLozRJGegY+Ei7/z0tSLkMmxGZNybVMSfWj9aJn8Z5Fc7dBUNJOOVgPv2H7IwulSQ==", + "dev": true, + "requires": { + "p-limit": "^2.0.0" + } + }, + "path-exists": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-3.0.0.tgz", + "integrity": "sha1-zg6+ql94yxiSXqfYENe1mwEP1RU=", + "dev": true + }, + "string-width": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-3.1.0.tgz", + "integrity": "sha512-vafcv6KjVZKSgz06oM/H6GDBrAtz8vdhQakGjFIvNrHA6y3HCF1CInLy+QLq8dTJPQ1b+KDUqDFctkdRW44e1w==", + "dev": true, + "requires": { + "emoji-regex": "^7.0.1", + "is-fullwidth-code-point": "^2.0.0", + "strip-ansi": "^5.1.0" + } + }, + "strip-ansi": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-5.2.0.tgz", + "integrity": "sha512-DuRs1gKbBqsMKIZlrffwlug8MHkcnpjs5VPmL1PAh+mA30U0DTotfDZ0d2UUsXpPmPmMMJ6W773MaA3J+lbiWA==", + "dev": true, + "requires": { + "ansi-regex": "^4.1.0" + } + }, + "wrap-ansi": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-5.1.0.tgz", + "integrity": "sha512-QC1/iN/2/RPVJ5jYK8BGttj5z83LmSKmvbvrXPNCLZSEb32KKVDJDl/MOt2N01qU2H/FkzEa9PKto1BqDjtd7Q==", + "dev": true, + "requires": { + "ansi-styles": "^3.2.0", + "string-width": "^3.0.0", + "strip-ansi": "^5.0.0" + } + }, + "yargs": { + "version": "13.3.2", + "resolved": "https://registry.npmjs.org/yargs/-/yargs-13.3.2.tgz", + "integrity": "sha512-AX3Zw5iPruN5ie6xGRIDgqkT+ZhnRlZMLMHAs8tg7nRruy2Nb+i5o9bwghAogtM08q1dpr2LVoS8KSTMYpWXUw==", + "dev": true, + "requires": { + "cliui": "^5.0.0", + "find-up": "^3.0.0", + "get-caller-file": "^2.0.1", + "require-directory": "^2.1.1", + "require-main-filename": "^2.0.0", + "set-blocking": "^2.0.0", + "string-width": "^3.0.0", + "which-module": "^2.0.0", + "y18n": "^4.0.0", + "yargs-parser": "^13.1.2" + } + }, + "yargs-parser": { + "version": "13.1.2", + "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-13.1.2.tgz", + "integrity": "sha512-3lbsNRf/j+A4QuSZfDRA7HRSfWrzO0YjqTJd5kjAq37Zep1CEgaYmrH9Q3GwPiB9cHyd1Y1UwggGhJGoxipbzg==", + "dev": true, + "requires": { + "camelcase": "^5.0.0", + "decamelize": "^1.2.0" + } + } + } + }, + "yarn-install": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/yarn-install/-/yarn-install-1.0.0.tgz", + "integrity": "sha1-V/RQULgu/VcYKzlzxUqgXLXSUjA=", + "dev": true, + "requires": { + "cac": "^3.0.3", + "chalk": "^1.1.3", + "cross-spawn": "^4.0.2" + }, + "dependencies": { + "ansi-regex": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz", + "integrity": "sha1-w7M6te42DYbg5ijwRorn7yfWVN8=", + "dev": true + }, + "ansi-styles": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-2.2.1.tgz", + "integrity": "sha1-tDLdM1i2NM914eRmQ2gkBTPB3b4=", + "dev": true + }, + "chalk": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz", + "integrity": "sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg=", + "dev": true, + "requires": { + "ansi-styles": "^2.2.1", + "escape-string-regexp": "^1.0.2", + "has-ansi": "^2.0.0", + "strip-ansi": "^3.0.0", + "supports-color": "^2.0.0" + } + }, + "strip-ansi": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz", + "integrity": "sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=", + "dev": true, + "requires": { + "ansi-regex": "^2.0.0" + } + }, + "supports-color": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-2.0.0.tgz", + "integrity": "sha1-U10EXOa2Nj+kARcIRimZXp3zJMc=", + "dev": true + } + } + }, + "yauzl": { + "version": "2.10.0", + "resolved": "https://registry.npmjs.org/yauzl/-/yauzl-2.10.0.tgz", + "integrity": "sha1-x+sXyT4RLLEIb6bY5R+wZnt5pfk=", + "dev": true, + "requires": { + "buffer-crc32": "~0.2.3", + "fd-slicer": "~1.1.0" + } + }, + "zip-stream": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/zip-stream/-/zip-stream-3.0.1.tgz", + "integrity": "sha512-r+JdDipt93ttDjsOVPU5zaq5bAyY+3H19bDrThkvuVxC0xMQzU1PJcS6D+KrP3u96gH9XLomcHPb+2skoDjulQ==", + "dev": true, + "requires": { + "archiver-utils": "^2.1.0", + "compress-commons": "^3.0.0", + "readable-stream": "^3.6.0" + } + } + } +} diff --git a/Echo/package.json b/Echo/package.json index cc79d9a9..6b05ca57 100644 --- a/Echo/package.json +++ b/Echo/package.json @@ -7,23 +7,23 @@ "test": "grunt test", "doc": "jsduck", "selenium-test": "wdio tests/selenium/wdio.conf.js", - "selenium-daily": "npm run selenium-test" + "selenium-daily": "npm run selenium-test -- --mochaOpts.grep @daily" }, "devDependencies": { - "eslint-config-wikimedia": "0.8.1", - "eslint-plugin-qunit": "3.3.1", - "grunt": "1.0.3", - "grunt-banana-checker": "0.6.0", + "@wdio/cli": "6.1.16", + "@wdio/local-runner": "6.1.16", + "@wdio/mocha-framework": "6.1.14", + "@wdio/spec-reporter": "6.1.14", + "@wdio/sync": "6.1.14", + "eslint-config-wikimedia": "0.16.1", + "grunt": "1.1.0", + "grunt-banana-checker": "0.9.0", "grunt-contrib-watch": "1.1.0", - "grunt-eslint": "21.0.0", - "grunt-jsonlint": "1.1.0", - "grunt-stylelint": "0.10.1", + "grunt-eslint": "23.0.0", + "grunt-stylelint": "0.15.0", "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" + "stylelint-config-wikimedia": "0.10.1", + "wdio-mediawiki": "1.0.0", + "webdriverio": "6.1.16" } } diff --git a/Echo/scripts/gen-autoload.php b/Echo/scripts/gen-autoload.php index d6be1612..97a726b8 100644 --- a/Echo/scripts/gen-autoload.php +++ b/Echo/scripts/gen-autoload.php @@ -13,7 +13,7 @@ require_once getenv( 'MW_INSTALL_PATH' ) !== false class GenerateEchoAutoload extends Maintenance { public function __construct() { parent::__construct(); - $this->mDescription = 'Generates Echo autoload data'; + $this->addDescription( 'Generates Echo autoload data' ); } public function execute() { diff --git a/Echo/tests/phpunit/AttributeManagerTest.php b/Echo/tests/phpunit/AttributeManagerTest.php index 42ccb992..856c51c7 100644 --- a/Echo/tests/phpunit/AttributeManagerTest.php +++ b/Echo/tests/phpunit/AttributeManagerTest.php @@ -1,12 +1,12 @@ <?php /** - * @covers EchoAttributeManager + * @covers \EchoAttributeManager */ class EchoAttributeManagerTest extends MediaWikiTestCase { public function testNewFromGlobalVars() { - $this->assertInstanceOf( 'EchoAttributeManager', EchoAttributeManager::newFromGlobalVars() ); + $this->assertInstanceOf( EchoAttributeManager::class, EchoAttributeManager::newFromGlobalVars() ); } public static function getUserLocatorsProvider() { @@ -139,10 +139,10 @@ class EchoAttributeManagerTest extends MediaWikiTestCase { 'category_four' => [] ]; $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' ) ); - $this->assertEquals( 10, $manager->getCategoryPriority( 'category_four' ) ); + $this->assertSame( 6, $manager->getCategoryPriority( 'category_one' ) ); + $this->assertSame( 10, $manager->getCategoryPriority( 'category_two' ) ); + $this->assertSame( 10, $manager->getCategoryPriority( 'category_three' ) ); + $this->assertSame( 10, $manager->getCategoryPriority( 'category_four' ) ); } public function testGetNotificationPriority() { @@ -173,10 +173,10 @@ class EchoAttributeManagerTest extends MediaWikiTestCase { 'category_four' => [] ]; $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' ) ); - $this->assertEquals( 10, $manager->getNotificationPriority( 'event_four' ) ); + $this->assertSame( 6, $manager->getNotificationPriority( 'event_one' ) ); + $this->assertSame( 10, $manager->getNotificationPriority( 'event_two' ) ); + $this->assertSame( 10, $manager->getNotificationPriority( 'event_three' ) ); + $this->assertSame( 10, $manager->getNotificationPriority( 'event_four' ) ); } public static function getEventsForSectionProvider() { @@ -240,6 +240,9 @@ class EchoAttributeManagerTest extends MediaWikiTestCase { 'event_three' => [ 'category' => 'category_three' ], + 'event_four' => [ + 'category' => 'category_four' + ] ]; $category = [ 'category_one' => [ @@ -257,10 +260,30 @@ class EchoAttributeManagerTest extends MediaWikiTestCase { 'category_three' => [ 'priority' => 10, ], + 'category_four' => [ + 'priority' => 10, + ] ]; - $manager = new EchoAttributeManager( $notif, $category, [], [] ); - $this->assertEquals( $manager->getUserEnabledEvents( $this->mockUser(), 'web' ), - [ 'event_two', 'event_three' ] ); + $defaultNotifyTypeAvailability = [ + 'web' => true, + 'email' => true, + ]; + $notifyTypeAvailabilityByCategory = [ + 'category_three' => [ + 'web' => false, + 'email' => true, + ] + ]; + $manager = new EchoAttributeManager( + $notif, + $category, + $defaultNotifyTypeAvailability, + $notifyTypeAvailabilityByCategory + ); + $this->assertEquals( + [ 'event_two', 'event_four' ], + $manager->getUserEnabledEvents( $this->mockUser(), 'web' ) + ); } public function testGetUserEnabledEventsbySections() { @@ -279,6 +302,9 @@ class EchoAttributeManagerTest extends MediaWikiTestCase { 'event_four' => [ 'category' => 'category_three', ], + 'event_five' => [ + 'category' => 'category_five' + ] ]; $category = [ 'category_one' => [ @@ -290,26 +316,44 @@ class EchoAttributeManagerTest extends MediaWikiTestCase { 'category_three' => [ 'priority' => 10 ], + 'category_five' => [ + 'priority' => 10 + ] ]; - $manager = new EchoAttributeManager( $notif, $category, [], [] ); + $defaultNotifyTypeAvailability = [ + 'web' => true, + 'email' => true, + ]; + $notifyTypeAvailabilityByCategory = [ + 'category_five' => [ + 'web' => false, + 'email' => true, + ] + ]; + $manager = new EchoAttributeManager( + $notif, + $category, + $defaultNotifyTypeAvailability, + $notifyTypeAvailabilityByCategory + ); $expected = [ 'event_one', 'event_three', 'event_four' ]; - $actual = $manager->getUserEnabledEventsBySections( $this->mockUser(), 'web', [ 'alert' ] ); + $actual = $manager->getUserEnabledEventsbySections( $this->mockUser(), 'web', [ 'alert' ] ); sort( $expected ); sort( $actual ); - $this->assertEquals( $actual, $expected ); + $this->assertEquals( $expected, $actual ); $expected = [ 'event_two' ]; - $actual = $manager->getUserEnabledEventsBySections( $this->mockUser(), 'web', [ 'message' ] ); + $actual = $manager->getUserEnabledEventsbySections( $this->mockUser(), 'web', [ 'message' ] ); sort( $expected ); sort( $actual ); - $this->assertEquals( $actual, $expected ); + $this->assertEquals( $expected, $actual ); $expected = [ 'event_one', 'event_two', 'event_three', 'event_four' ]; - $actual = $manager->getUserEnabledEventsBySections( $this->mockUser(), 'web', + $actual = $manager->getUserEnabledEventsbySections( $this->mockUser(), 'web', [ 'message', 'alert' ] ); sort( $expected ); sort( $actual ); - $this->assertEquals( $actual, $expected ); + $this->assertEquals( $expected, $actual ); } public static function getEventsByCategoryProvider() { @@ -406,8 +450,8 @@ class EchoAttributeManagerTest extends MediaWikiTestCase { } /** - @dataProvider isNotifyTypeAvailableForCategoryProvider - */ + * @dataProvider isNotifyTypeAvailableForCategoryProvider + */ public function testIsNotifyTypeAvailableForCategory( $message, $expected, @@ -479,7 +523,7 @@ class EchoAttributeManagerTest extends MediaWikiTestCase { * Mock object of User */ protected function mockUser() { - $user = $this->getMockBuilder( 'User' ) + $user = $this->getMockBuilder( User::class ) ->disableOriginalConstructor() ->getMock(); $user->expects( $this->any() ) diff --git a/Echo/tests/phpunit/ContainmentSetTest.php b/Echo/tests/phpunit/ContainmentSetTest.php index 1f538291..d85de7f3 100644 --- a/Echo/tests/phpunit/ContainmentSetTest.php +++ b/Echo/tests/phpunit/ContainmentSetTest.php @@ -1,7 +1,7 @@ <?php /** - * @covers EchoContainmentSet + * @covers \EchoContainmentSet * @group Echo * @group Database */ @@ -23,22 +23,20 @@ class ContainmentSetTest extends MediaWikiTestCase { } public function testCachedListInnerListIsOnlyCalledOnce() { - // the global $wgMemc during tests is an EmptyBagOStuff, so it - // wont do anything. We use a HashBagOStuff to get more like a real - // client - $innerCache = new HashBagOStuff; + $innerCache = new HashBagOStuff; // simulate caching + $wanCache = new WANObjectCache( [ 'cache' => $innerCache ] ); $inner = [ 'bing', 'bang' ]; // We use a mock instead of the real thing for the $this->once() assertion // verifying that the cache doesn't just keep asking the inner object - $list = $this->getMockBuilder( 'EchoArrayList' ) + $list = $this->getMockBuilder( EchoArrayList::class ) ->disableOriginalConstructor() ->getMock(); $list->expects( $this->once() ) ->method( 'getValues' ) ->will( $this->returnValue( $inner ) ); - $cached = new EchoCachedList( $innerCache, 'test_key', $list ); + $cached = new EchoCachedList( $wanCache, 'test_key', $list ); // First run through should hit the main list, and save to innerCache $this->assertEquals( $inner, $cached->getValues() ); @@ -46,7 +44,7 @@ class ContainmentSetTest extends MediaWikiTestCase { // Reinitialize to get a fresh instance that will pull directly from // innerCache without hitting the $list - $freshCached = new EchoCachedList( $innerCache, 'test_key', $list ); + $freshCached = new EchoCachedList( $wanCache, 'test_key', $list ); $this->assertEquals( $inner, $freshCached->getValues() ); } @@ -67,11 +65,4 @@ class ContainmentSetTest extends MediaWikiTestCase { $list = new EchoOnWikiList( NS_USER, "Some_Non_Existant_Page" ); $this->assertEquals( [], $list->getValues() ); } - - protected function editPage( $pageName, $text, $summary = '', $defaultNs = NS_MAIN ) { - $title = Title::newFromText( $pageName, $defaultNs ); - $page = WikiPage::factory( $title ); - - return $page->doEditContent( ContentHandler::makeContent( $text, $title ), $summary ); - } } diff --git a/Echo/tests/phpunit/DiscussionParserTest.php b/Echo/tests/phpunit/DiscussionParserTest.php index 391ff078..a161cd07 100644 --- a/Echo/tests/phpunit/DiscussionParserTest.php +++ b/Echo/tests/phpunit/DiscussionParserTest.php @@ -2,10 +2,11 @@ // phpcs:disable Generic.Files.LineLength -- Long html test examples +use MediaWiki\MediaWikiServices; use Wikimedia\TestingAccessWrapper; /** - * @covers EchoDiscussionParser + * @covers \EchoDiscussionParser * @group Echo * @group Database */ @@ -129,12 +130,12 @@ class EchoDiscussionParserTest extends MediaWikiTestCase { ], ]; - protected function setUp() { + protected function setUp() : void { parent::setUp(); $this->setMwGlobals( [ 'wgDiff' => false ] ); } - protected function tearDown() { + protected function tearDown() : void { parent::tearDown(); global $wgHooks; @@ -418,14 +419,12 @@ class EchoDiscussionParserTest extends MediaWikiTestCase { 'type' => 'mention-failure', 'agent' => 'Admin', 'section-title' => 'Hello Users', - 'notifyAgent' => true, 'subject-name' => 'Ping', ], [ 'type' => 'mention-failure', 'agent' => 'Admin', 'section-title' => 'Hello Users', - 'notifyAgent' => true, 'subject-name' => 'Po?ng', ], ], @@ -442,14 +441,12 @@ class EchoDiscussionParserTest extends MediaWikiTestCase { 'type' => 'mention', 'agent' => 'Admin', 'section-title' => 'Hello Users', - 'notifyAgent' => null, 'subject-name' => null, ], [ 'type' => 'mention-success', 'agent' => 'Admin', 'section-title' => 'Hello Users', - 'notifyAgent' => true, 'subject-name' => 'Test11', ], ], @@ -466,7 +463,6 @@ class EchoDiscussionParserTest extends MediaWikiTestCase { 'type' => 'mention-failure', 'agent' => 'Admin', 'section-title' => 'Section 2', - 'notifyAgent' => true, 'subject-name' => 'NoUser', ], ], @@ -483,7 +479,6 @@ class EchoDiscussionParserTest extends MediaWikiTestCase { 'type' => 'mention-failure', 'agent' => 'Admin', 'section-title' => 'Section 2', - 'notifyAgent' => true, 'subject-name' => 'NoUser', ], ], @@ -510,14 +505,12 @@ class EchoDiscussionParserTest extends MediaWikiTestCase { 'agent' => 'Admin', 'section-title' => 'Section 1.5', 'subject-name' => null, - 'notifyAgent' => null, ], [ 'type' => 'mention-success', 'agent' => 'Admin', 'section-title' => 'Section 1.5', 'subject-name' => 'Test11', - 'notifyAgent' => true, ], ], ], @@ -534,14 +527,12 @@ class EchoDiscussionParserTest extends MediaWikiTestCase { 'agent' => 'Admin', 'section-title' => 'Section 1.5', 'subject-name' => 'NoUser1.5', - 'notifyAgent' => true, ], [ 'type' => 'mention-failure', 'agent' => 'Admin', 'section-title' => 'Section 2', 'subject-name' => 'NoUser2', - 'notifyAgent' => true, ], ], ], @@ -558,21 +549,18 @@ class EchoDiscussionParserTest extends MediaWikiTestCase { 'agent' => 'Admin', 'section-title' => 'Section 1', 'subject-name' => 'NoUser1', - 'notifyAgent' => true, ], [ 'type' => 'mention-failure', 'agent' => 'Admin', 'section-title' => 'Section 1.75', 'subject-name' => 'NoUser1.75', - 'notifyAgent' => true, ], [ 'type' => 'mention-failure', 'agent' => 'Admin', 'section-title' => 'Section 2', 'subject-name' => 'NoUser2', - 'notifyAgent' => true, ], ], [ @@ -587,7 +575,6 @@ class EchoDiscussionParserTest extends MediaWikiTestCase { 'agent' => 'Admin', 'section-title' => false, 'subject-name' => null, - 'notifyAgent' => null, ] ], ], [ @@ -603,21 +590,18 @@ class EchoDiscussionParserTest extends MediaWikiTestCase { 'agent' => 'Admin', 'section-title' => 'Section 1', 'subject-name' => null, - 'notifyAgent' => null, ], [ 'type' => 'mention-success', 'agent' => 'Admin', 'section-title' => 'Section 1', 'subject-name' => 'Test11', - 'notifyAgent' => true, ], [ 'type' => 'edit-user-talk', 'agent' => 'Admin', 'section-title' => 'Section 1', 'subject-name' => null, - 'notifyAgent' => null, ], ], ], @@ -635,21 +619,18 @@ class EchoDiscussionParserTest extends MediaWikiTestCase { 'agent' => 'Admin', 'section-title' => 'Section 1', 'subject-name' => null, - 'notifyAgent' => null, ], [ 'type' => 'mention-success', 'agent' => 'Admin', 'section-title' => 'Section 1', 'subject-name' => 'Test11', - 'notifyAgent' => true, ], [ 'type' => 'edit-user-talk', 'agent' => 'Admin', 'section-title' => false, 'subject-name' => null, - 'notifyAgent' => null, ], ], ], @@ -666,21 +647,18 @@ class EchoDiscussionParserTest extends MediaWikiTestCase { 'agent' => 'Admin', 'section-title' => 'Section 2', 'subject-name' => null, - 'notifyAgent' => null, ], [ 'type' => 'mention-success', 'agent' => 'Admin', 'section-title' => 'Section 2', 'subject-name' => 'Test11', - 'notifyAgent' => true, ], [ 'type' => 'edit-user-talk', 'agent' => 'Admin', 'section-title' => 'Section 2', 'subject-name' => null, - 'notifyAgent' => null, ], ], ], @@ -697,14 +675,12 @@ class EchoDiscussionParserTest extends MediaWikiTestCase { 'agent' => 'Admin', 'section-title' => false, 'subject-name' => null, - 'notifyAgent' => null, ], [ 'type' => 'mention-success', 'agent' => 'Admin', 'section-title' => false, 'subject-name' => 'Test11', - 'notifyAgent' => true, ], ], ], @@ -729,7 +705,6 @@ class EchoDiscussionParserTest extends MediaWikiTestCase { 'type' => $event->getType(), 'agent' => $event->getAgent()->getName(), 'section-title' => $event->getExtraParam( 'section-title' ), - 'notifyAgent' => $event->getExtraParam( 'notifyAgent' ), 'subject-name' => $event->getExtraParam( 'subject-name' ), ]; return false; @@ -904,7 +879,7 @@ TEXT * @dataProvider provider_extractSections */ public function testExtractSections( $content, $result ) { - $discussionParser = TestingAccessWrapper::newFromClass( 'EchoDiscussionParser' ); + $discussionParser = TestingAccessWrapper::newFromClass( EchoDiscussionParser::class ); $sections = $discussionParser->extractSections( $content ); $this->assertEquals( $result, $sections ); @@ -951,6 +926,7 @@ TEXT private function setupTestRevisionsForEventGeneration( $newId, $oldId, $username, $lang, $pages, $title, $summary = '' ) { + $store = MediaWikiServices::getInstance()->getRevisionStore(); // 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 ); @@ -958,7 +934,8 @@ TEXT // this one allows Mediawiki:xyz pages to be set as messages 'wgUseDatabaseMessages' => true ] ); - $this->overrideMwServices(); + + $this->resetServices(); // 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! @@ -968,9 +945,9 @@ TEXT $template->doEditContent( new WikitextContent( $pageText ), '' ); } - // force i18n messages to be reloaded (from DB, where a new message + // force i18n messages to be reloaded from MessageCache (from DB, where a new message // might have been created as page) - MessageCache::destroyInstance(); + $this->resetServices(); // grab revision excerpts (didn't include them in this src file because // they can be pretty long) @@ -986,7 +963,7 @@ TEXT $property->setAccessible( true ); $property->setValue( $title, $lang ); - // create stub Revision object + // create stub MutableRevisionRecord object $row = [ 'id' => $newId, 'user_text' => $username, @@ -996,16 +973,17 @@ TEXT 'title' => $title, 'comment' => $summary, ]; - $revision = Revision::newFromRow( $row ); + $revision = $store->newMutableRevisionFromArray( $row ); + $userName = $revision->getUser()->getName(); // generate diff between 2 revisions $changes = EchoDiscussionParser::getMachineReadableDiff( $oldText, $newText ); - $output = EchoDiscussionParser::interpretDiff( $changes, $revision->getUserText(), $title ); + $output = EchoDiscussionParser::interpretDiff( $changes, $userName, $title ); // store diff in some local cache var, to circumvent // EchoDiscussionParser::getChangeInterpretationForRevision's attempt to // retrieve parent revision from DB - $class = new ReflectionClass( 'EchoDiscussionParser' ); + $class = new ReflectionClass( EchoDiscussionParser::class ); $property = $class->getProperty( 'revisionInterpretationCache' ); $property->setAccessible( true ); $property->setValue( [ $revision->getId() => $output ] ); @@ -1032,13 +1010,13 @@ TEXT $timestampRegex = EchoDiscussionParser::getTimestampRegex(); $match = preg_match( '/' . $timestampRegex . '/u', $exemplarTimestamp ); - $this->assertEquals( 1, $match ); + $this->assertSame( 1, $match ); } public function testGetTimestampPosition() { $line = 'Hello World. ' . self::getExemplarTimestamp(); $pos = EchoDiscussionParser::getTimestampPosition( $line ); - $this->assertEquals( 13, $pos ); + $this->assertSame( 13, $pos ); } /** @@ -1059,7 +1037,7 @@ TEXT $output = EchoDiscussionParser::getUserFromLine( $line ); if ( $output === false ) { - $this->assertEquals( false, $expectedUser ); + $this->assertFalse( $expectedUser ); } elseif ( is_array( $expectedUser ) ) { // Sometimes testing for correct user detection, // sometimes testing for offset detection @@ -1509,17 +1487,15 @@ TEXT } public function getExemplarTimestamp() { - $title = $this->getMockBuilder( Title::class ) - ->getMock(); + $title = $this->createMock( Title::class ); - $user = $this->getMockBuilder( User::class ) - ->getMock(); + $user = $this->createMock( User::class ); - $options = new ParserOptions; + $options = ParserOptions::newFromAnon(); - global $wgParser; + $parser = MediaWikiServices::getInstance()->getParser(); $exemplarTimestamp = - $wgParser->preSaveTransform( '~~~~~', $title, $user, $options ); + $parser->preSaveTransform( '~~~~~', $title, $user, $options ); return $exemplarTimestamp; } @@ -1708,11 +1684,11 @@ TEXT $two = "===SubZomg===\nHi there\n"; $three = "==Header==\nOh Hai!\n"; - $this->assertEquals( 1, EchoDiscussionParser::getSectionCount( $one ) ); - $this->assertEquals( 2, EchoDiscussionParser::getSectionCount( $one . $two ) ); - $this->assertEquals( 2, EchoDiscussionParser::getSectionCount( $one . $three ) ); - $this->assertEquals( 3, EchoDiscussionParser::getSectionCount( $one . $two . $three ) ); - $this->assertEquals( 30, EchoDiscussionParser::getSectionCount( + $this->assertSame( 1, EchoDiscussionParser::getSectionCount( $one ) ); + $this->assertSame( 2, EchoDiscussionParser::getSectionCount( $one . $two ) ); + $this->assertSame( 2, EchoDiscussionParser::getSectionCount( $one . $three ) ); + $this->assertSame( 3, EchoDiscussionParser::getSectionCount( $one . $two . $three ) ); + $this->assertSame( 30, EchoDiscussionParser::getSectionCount( file_get_contents( __DIR__ . '/revision_txt/637638133.txt' ) ) ); } @@ -1724,8 +1700,8 @@ TEXT 'anonymousUsers' => [ '127.0.0.1' ], ]; - $discussionParser = TestingAccessWrapper::newFromClass( 'EchoDiscussionParser' ); - $this->assertEquals( 4, $discussionParser->getOverallUserMentionsCount( $userMentions ) ); + $discussionParser = TestingAccessWrapper::newFromClass( EchoDiscussionParser::class ); + $this->assertSame( 4, $discussionParser->getOverallUserMentionsCount( $userMentions ) ); } public function provider_getUserMentions() { @@ -1756,7 +1732,7 @@ TEXT */ public function testGetUserMentions( $userLinks, $expectedUserMentions, $agent ) { $title = Title::newFromText( 'Test' ); - $discussionParser = TestingAccessWrapper::newFromClass( 'EchoDiscussionParser' ); + $discussionParser = TestingAccessWrapper::newFromClass( EchoDiscussionParser::class ); $this->assertEquals( $expectedUserMentions, $discussionParser->getUserMentions( $title, $agent, $userLinks ) ); } @@ -1801,8 +1777,8 @@ TEXT ] ); $title = Title::newFromText( 'Test' ); - $discussionParser = TestingAccessWrapper::newFromClass( 'EchoDiscussionParser' ); - $this->assertEquals( 4, $discussionParser->getOverallUserMentionsCount( $discussionParser->getUserMentions( $title, 1, $userLinks ) ) ); + $discussionParser = TestingAccessWrapper::newFromClass( EchoDiscussionParser::class ); + $this->assertSame( 4, $discussionParser->getOverallUserMentionsCount( $discussionParser->getUserMentions( $title, 1, $userLinks ) ) ); } protected function isParserFunctionsInstalled() { diff --git a/Echo/tests/phpunit/EchoDbFactoryTest.php b/Echo/tests/phpunit/EchoDbFactoryTest.php index 337c92d3..1c10c0d0 100644 --- a/Echo/tests/phpunit/EchoDbFactoryTest.php +++ b/Echo/tests/phpunit/EchoDbFactoryTest.php @@ -4,13 +4,13 @@ use Wikimedia\Rdbms\IDatabase; use Wikimedia\Rdbms\ILoadBalancer; /** - * @covers MWEchoDbFactory + * @covers \MWEchoDbFactory */ class MWEchoDbFactoryTest extends MediaWikiTestCase { public function testNewFromDefault() { $db = MWEchoDbFactory::newFromDefault(); - $this->assertInstanceOf( 'MWEchoDbFactory', $db ); + $this->assertInstanceOf( MWEchoDbFactory::class, $db ); return $db; } @@ -27,7 +27,7 @@ class MWEchoDbFactoryTest extends MediaWikiTestCase { * @depends testNewFromDefault */ public function testGetLB( MWEchoDbFactory $db ) { - $reflection = new ReflectionClass( 'MWEchoDbFactory' ); + $reflection = new ReflectionClass( MWEchoDbFactory::class ); $method = $reflection->getMethod( 'getLB' ); $method->setAccessible( true ); $this->assertInstanceOf( ILoadBalancer::class, $method->invoke( $db ) ); diff --git a/Echo/tests/phpunit/EchoSummaryParserTest.php b/Echo/tests/phpunit/EchoSummaryParserTest.php index 357036fc..7fc7a9bf 100644 --- a/Echo/tests/phpunit/EchoSummaryParserTest.php +++ b/Echo/tests/phpunit/EchoSummaryParserTest.php @@ -9,8 +9,9 @@ class EchoSummaryParserTest extends MediaWikiTestCase { 'Jorm', 'Jim Carter', ]; + /** - * @covers EchoSummaryParser::parse + * @covers \EchoSummaryParser::parse * @dataProvider provideParse * * @param string $summary @@ -26,7 +27,7 @@ class EchoSummaryParserTest extends MediaWikiTestCase { $users = $parser->parse( $summary ); foreach ( $users as $name => $user ) { - $this->assertType( User::class, $user ); + $this->assertInstanceof( User::class, $user ); $this->assertEquals( $name, $user->getName() ); } diff --git a/Echo/tests/phpunit/NotifUserTest.php b/Echo/tests/phpunit/NotifUserTest.php index b25f3dc5..11a182d3 100644 --- a/Echo/tests/phpunit/NotifUserTest.php +++ b/Echo/tests/phpunit/NotifUserTest.php @@ -3,7 +3,7 @@ use MediaWiki\MediaWikiServices; /** - * @covers MWEchoNotifUser + * @covers \MWEchoNotifUser * @group Echo */ class MWEchoNotifUserTest extends MediaWikiTestCase { @@ -13,7 +13,7 @@ class MWEchoNotifUserTest extends MediaWikiTestCase { */ private $cache; - protected function setUp() { + protected function setUp() : void { parent::setUp(); $this->cache = new WANObjectCache( [ 'cache' => MediaWikiServices::getInstance()->getMainObjectStash(), @@ -32,7 +32,7 @@ class MWEchoNotifUserTest extends MediaWikiTestCase { $this->assertTrue( $exception, "Got exception" ); $notifUser = MWEchoNotifUser::newFromUser( User::newFromId( 2 ) ); - $this->assertInstanceOf( 'MWEchoNotifUser', $notifUser ); + $this->assertInstanceOf( MWEchoNotifUser::class, $notifUser ); } public function testGetEmailFormat() { @@ -113,7 +113,7 @@ class MWEchoNotifUserTest extends MediaWikiTestCase { $dbResult += [ 'markRead' => true ]; - $gateway = $this->getMockBuilder( 'EchoUserNotificationGateway' ) + $gateway = $this->getMockBuilder( EchoUserNotificationGateway::class ) ->disableOriginalConstructor() ->getMock(); $gateway->expects( $this->any() ) @@ -122,7 +122,7 @@ class MWEchoNotifUserTest extends MediaWikiTestCase { $gateway->expects( $this->any() ) ->method( 'getDB' ) ->will( $this->returnValue( - $this->getMockBuilder( Database::class ) + $this->getMockBuilder( IDatabase::class ) ->disableOriginalConstructor()->getMock() ) ); @@ -130,7 +130,7 @@ class MWEchoNotifUserTest extends MediaWikiTestCase { } public function mockEchoNotificationMapper( array $result = [] ) { - $mapper = $this->getMockBuilder( 'EchoNotificationMapper' ) + $mapper = $this->getMockBuilder( EchoNotificationMapper::class ) ->disableOriginalConstructor() ->getMock(); $mapper->expects( $this->any() ) @@ -147,7 +147,7 @@ class MWEchoNotifUserTest extends MediaWikiTestCase { } protected function mockEchoNotification() { - $notification = $this->getMockBuilder( 'EchoNotification' ) + $notification = $this->getMockBuilder( EchoNotification::class ) ->disableOriginalConstructor() ->getMock(); $notification->expects( $this->any() ) @@ -158,7 +158,7 @@ class MWEchoNotifUserTest extends MediaWikiTestCase { } protected function mockEchoEvent() { - $event = $this->getMockBuilder( 'EchoEvent' ) + $event = $this->getMockBuilder( EchoEvent::class ) ->disableOriginalConstructor() ->getMock(); $event->expects( $this->any() ) diff --git a/Echo/tests/phpunit/NotificationsTest.php b/Echo/tests/phpunit/NotificationsTest.php index 641e6bd0..ab971a97 100644 --- a/Echo/tests/phpunit/NotificationsTest.php +++ b/Echo/tests/phpunit/NotificationsTest.php @@ -1,5 +1,7 @@ <?php +use MediaWiki\MediaWikiServices; + /** * Tests for the built in notification types * @@ -12,7 +14,7 @@ class NotificationsTest extends MediaWikiTestCase { var $sysop; // @codingStandardsIgnoreEnd - protected function setUp() { + protected function setUp() : void { parent::setUp(); $this->sysop = User::newFromName( 'UTSysop' ); $this->setMwGlobals( 'wgUser', $this->sysop ); @@ -32,7 +34,7 @@ class NotificationsTest extends MediaWikiTestCase { } /** - * @covers EchoHooks::onUserGroupsChanged + * @covers \EchoHooks::onUserGroupsChanged */ public function testUserRightsNotif() { $user = new User(); @@ -41,7 +43,9 @@ class NotificationsTest extends MediaWikiTestCase { $context = new DerivativeContext( RequestContext::getMain() ); $context->setUser( $this->sysop ); - $ur = new UserrightsPage(); + $ur = new UserrightsPage( + MediaWikiServices::getInstance()->getPermissionManager() + ); $ur->setContext( $context ); $ur->doSaveUserGroups( $user, [ 'sysop' ], [], 'reason' ); $event = self::getLatestNotification( $user ); diff --git a/Echo/tests/phpunit/TalkPageFunctionalTest.php b/Echo/tests/phpunit/TalkPageFunctionalTest.php index f33e5020..1e6786c5 100644 --- a/Echo/tests/phpunit/TalkPageFunctionalTest.php +++ b/Echo/tests/phpunit/TalkPageFunctionalTest.php @@ -7,49 +7,37 @@ */ class EchoTalkPageFunctionalTest extends ApiTestCase { - /** - * @var \Wikimedia\Rdbms\IDatabase - */ - protected $dbr; - - protected function setUp() { + protected function setUp() : void { parent::setUp(); - $this->dbr = MWEchoDbFactory::getDB( DB_REPLICA ); + $this->db->delete( 'echo_event', '*' ); } /** * 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(); $talkPage = self::$users['uploader']->getUser()->getName(); - // A set of messages which will be inserted - $messages = [ - 'Moar Cowbell', - "I can haz test\n\nplz?", // checks that the parser allows multi-line comments - 'blah blah', - ]; $messageCount = 0; $this->assertCount( $messageCount, $this->fetchAllEvents() ); // Start a talkpage - $content = "== Section 8 ==\n\n" . $this->signedMessage( $editor, $messages[$messageCount] ); + $content = "== Section 8 ==\n\nblah blah ~~~~\n"; $this->editPage( $talkPage, $content, '', NS_USER_TALK ); // Ensure the proper event was created $events = $this->fetchAllEvents(); - $this->assertCount( 1 + $messageCount, $events, 'After initial edit a single event must exist.' ); // +1 is due to 0 index + // +1 is due to 0 index + $this->assertCount( 1 + $messageCount, $events, 'After initial edit a single event must exist.' ); $row = array_shift( $events ); $this->assertEquals( 'edit-user-talk', $row->event_type ); $this->assertEventSectionTitle( 'Section 8', $row ); // Add another message to the talk page $messageCount++; - $content .= $this->signedMessage( $editor, $messages[$messageCount] ); + $content .= "More content ~~~~\n"; $this->editPage( $talkPage, $content, '', NS_USER_TALK ); // Ensure another event was created @@ -61,7 +49,7 @@ class EchoTalkPageFunctionalTest extends ApiTestCase { // Add a new section and a message within it $messageCount++; - $content .= "\n\n== EE ==\n\n" . $this->signedMessage( $editor, $messages[$messageCount] ); + $content .= "\n\n== EE ==\n\nhere we go with a new section ~~~~\n"; $this->editPage( $talkPage, $content, '', NS_USER_TALK ); // Ensure this event has the new section title @@ -80,16 +68,14 @@ class EchoTalkPageFunctionalTest extends ApiTestCase { } /** - * @return \stdClass[] All events in db sorted from oldest to newest + * @return \stdClass[] All non-watchlist events in db sorted from oldest to newest */ protected function fetchAllEvents() { - $res = $this->dbr->select( 'echo_event', [ '*' ], [], __METHOD__, [ 'ORDER BY' => 'event_id ASC' ] ); + $res = $this->db->select( 'echo_event', EchoEvent::selectFields(), [ + 'event_type != "watchlist-change"' + ], __METHOD__, [ 'ORDER BY' => 'event_id ASC' ] ); return iterator_to_array( $res ); } - protected function signedMessage( $name, $content = 'Moar cowbell', $depth = 1 ) { - return str_repeat( ':', $depth ) . " $content [[User:$name|$name]] ([[User talk:$name|$name]]) 00:17, 7 May 2013 (UTC)\n"; - } - } diff --git a/Echo/tests/phpunit/ThankYouEditTest.php b/Echo/tests/phpunit/ThankYouEditTest.php index 5325c5cd..e9f89a99 100644 --- a/Echo/tests/phpunit/ThankYouEditTest.php +++ b/Echo/tests/phpunit/ThankYouEditTest.php @@ -6,7 +6,7 @@ */ class MWEchoThankYouEditTest extends MediaWikiTestCase { - protected function setUp() { + protected function setUp() : void { parent::setUp(); $this->tablesUsed[] = 'echo_event'; $this->tablesUsed[] = 'echo_notification'; @@ -19,7 +19,7 @@ class MWEchoThankYouEditTest extends MediaWikiTestCase { } /** - * @covers \EchoHooks::onPageContentSaveComplete + * @covers \EchoHooks::onPageSaveComplete */ public function testFirstEdit() { // setup @@ -37,11 +37,11 @@ class MWEchoThankYouEditTest extends MediaWikiTestCase { /** @var EchoNotification $notification */ $notification = reset( $notifications ); - $this->assertEquals( 1, $notification->getEvent()->getExtraParam( 'editCount', 'not found' ) ); + $this->assertSame( 1, $notification->getEvent()->getExtraParam( 'editCount', 'not found' ) ); } /** - * @covers \EchoHooks::onPageContentSaveComplete + * @covers \EchoHooks::onPageSaveComplete */ public function testTenthEdit() { // setup @@ -55,6 +55,8 @@ class MWEchoThankYouEditTest extends MediaWikiTestCase { // are not generated for ( $i = 0; $i < 12; $i++ ) { $this->edit( $title, $user, "this is edit #$i" ); + // Reload to reflect deferred update + $user->clearInstanceCache(); } // assertions @@ -64,7 +66,7 @@ class MWEchoThankYouEditTest extends MediaWikiTestCase { /** @var EchoNotification $notification */ $notification = reset( $notifications ); - $this->assertEquals( 10, $notification->getEvent()->getExtraParam( 'editCount', 'not found' ) ); + $this->assertSame( 10, $notification->getEvent()->getExtraParam( 'editCount', 'not found' ) ); } private function edit( Title $title, User $user, $text ) { diff --git a/Echo/tests/phpunit/UserLocatorTest.php b/Echo/tests/phpunit/UserLocatorTest.php index 514c8226..bcf5b47b 100644 --- a/Echo/tests/phpunit/UserLocatorTest.php +++ b/Echo/tests/phpunit/UserLocatorTest.php @@ -2,7 +2,7 @@ /** * @group Database - * @covers EchoUserLocator + * @covers \EchoUserLocator */ class EchoUserLocatorTest extends MediaWikiTestCase { @@ -21,7 +21,7 @@ class EchoUserLocatorTest extends MediaWikiTestCase { } wfGetDB( DB_MASTER )->insert( 'watchlist', $rows, __METHOD__ ); - $event = $this->getMockBuilder( 'EchoEvent' ) + $event = $this->getMockBuilder( EchoEvent::class ) ->disableOriginalConstructor() ->getMock(); $event->expects( $this->any() ) @@ -29,11 +29,7 @@ class EchoUserLocatorTest extends MediaWikiTestCase { ->will( $this->returnValue( $title ) ); $it = EchoUserLocator::locateUsersWatchingTitle( $event, 10 ); - $count = 0; - foreach ( $it as $user ) { - ++$count; - } - $this->assertEquals( 50, $count ); + $this->assertCount( 50, $it ); // @todo assert more than one query was issued } @@ -264,7 +260,7 @@ class EchoUserLocatorTest extends MediaWikiTestCase { } protected function mockEchoEvent() { - return $this->getMockBuilder( 'EchoEvent' ) + return $this->getMockBuilder( EchoEvent::class ) ->disableOriginalConstructor() ->getMock(); } diff --git a/Echo/tests/phpunit/api/ApiEchoMarkReadTest.php b/Echo/tests/phpunit/api/ApiEchoMarkReadTest.php index 9c41ec37..b5a4b6e1 100644 --- a/Echo/tests/phpunit/api/ApiEchoMarkReadTest.php +++ b/Echo/tests/phpunit/api/ApiEchoMarkReadTest.php @@ -4,11 +4,11 @@ * @group medium * @group API * @group Database - * @covers ApiEchoMarkRead + * @covers \ApiEchoMarkRead */ class ApiEchoMarkReadTest extends ApiTestCase { - function getTokens() { + public function getTokens() { return $this->getTokenList( self::$users['sysop'] ); } @@ -29,13 +29,11 @@ class ApiEchoMarkReadTest extends ApiTestCase { $this->assertArrayHasKey( 'count', $result ); $this->assertArrayHasKey( 'rawcount', $result ); - // Alert $this->assertArrayHasKey( 'alert', $result ); $alert = $result['alert']; $this->assertArrayHasKey( 'rawcount', $alert ); $this->assertArrayHasKey( 'count', $alert ); - // Message $this->assertArrayHasKey( 'message', $result ); $message = $result['message']; $this->assertArrayHasKey( 'rawcount', $message ); @@ -59,13 +57,11 @@ class ApiEchoMarkReadTest extends ApiTestCase { $this->assertArrayHasKey( 'count', $result ); $this->assertArrayHasKey( 'rawcount', $result ); - // Alert $this->assertArrayHasKey( 'alert', $result ); $alert = $result['alert']; $this->assertArrayHasKey( 'rawcount', $alert ); $this->assertArrayHasKey( 'count', $alert ); - // Message $this->assertArrayHasKey( 'message', $result ); $message = $result['message']; $this->assertArrayHasKey( 'rawcount', $message ); @@ -89,13 +85,11 @@ class ApiEchoMarkReadTest extends ApiTestCase { $this->assertArrayHasKey( 'count', $result ); $this->assertArrayHasKey( 'rawcount', $result ); - // Alert $this->assertArrayHasKey( 'alert', $result ); $alert = $result['alert']; $this->assertArrayHasKey( 'rawcount', $alert ); $this->assertArrayHasKey( 'count', $alert ); - // Message $this->assertArrayHasKey( 'message', $result ); $message = $result['message']; $this->assertArrayHasKey( 'rawcount', $message ); diff --git a/Echo/tests/phpunit/api/ApiEchoNotificationsTest.php b/Echo/tests/phpunit/api/ApiEchoNotificationsTest.php index cfcf5c90..d430fa12 100644 --- a/Echo/tests/phpunit/api/ApiEchoNotificationsTest.php +++ b/Echo/tests/phpunit/api/ApiEchoNotificationsTest.php @@ -3,7 +3,7 @@ /** * @group medium * @group API - * @covers ApiEchoNotifications + * @covers \ApiEchoNotifications */ class ApiEchoNotificationsTest extends ApiTestCase { @@ -26,7 +26,6 @@ class ApiEchoNotificationsTest extends ApiTestCase { $this->assertArrayHasKey( 'count', $result ); $this->assertArrayHasKey( 'rawcount', $result ); - // Alert $this->assertArrayHasKey( 'alert', $result ); $alert = $result['alert']; $this->assertArrayHasKey( 'list', $alert ); @@ -34,7 +33,6 @@ class ApiEchoNotificationsTest extends ApiTestCase { $this->assertArrayHasKey( 'rawcount', $alert ); $this->assertArrayHasKey( 'count', $alert ); - // Message $this->assertArrayHasKey( 'message', $result ); $message = $result['message']; $this->assertArrayHasKey( 'list', $message ); diff --git a/Echo/tests/phpunit/api/Push/ApiEchoPushSubscriptionsCreateTest.php b/Echo/tests/phpunit/api/Push/ApiEchoPushSubscriptionsCreateTest.php new file mode 100644 index 00000000..5361309d --- /dev/null +++ b/Echo/tests/phpunit/api/Push/ApiEchoPushSubscriptionsCreateTest.php @@ -0,0 +1,50 @@ +<?php + +/** + * @group medium + * @group API + * @group Database + * @covers \EchoPush\Api\ApiEchoPushSubscriptionsCreate + */ +class ApiEchoPushSubscriptionsCreateTest extends ApiTestCase { + + /** @var User */ + private $user; + + public function setUp(): void { + parent::setUp(); + $this->setMwGlobals( 'wgEchoEnablePush', true ); + $this->tablesUsed[] = 'echo_push_subscription'; + $this->tablesUsed[] = 'echo_push_provider'; + $this->user = $this->getTestUser()->getUser(); + $this->createTestData(); + } + + public function testApiCreateSubscription(): void { + $params = [ + 'action' => 'echopushsubscriptions', + 'command' => 'create', + 'provider' => 'fcm', + 'providertoken' => 'ABC123', + ]; + $result = $this->doApiRequestWithToken( $params, null, $this->user ); + $this->assertEquals( 'Success', $result[0]['create']['result'] ); + } + + public function testApiCreateSubscriptionTokenExists(): void { + $params = [ + 'action' => 'echopushsubscriptions', + 'command' => 'create', + 'provider' => 'fcm', + 'providertoken' => 'XYZ789', + ]; + $this->expectException( ApiUsageException::class ); + $this->doApiRequestWithToken( $params, null, $this->user ); + } + + private function createTestData(): void { + $subscriptionManager = EchoServices::getInstance()->getPushSubscriptionManager(); + $subscriptionManager->create( $this->user, 'fcm', 'XYZ789' ); + } + +} diff --git a/Echo/tests/phpunit/api/Push/ApiEchoPushSubscriptionsDeleteTest.php b/Echo/tests/phpunit/api/Push/ApiEchoPushSubscriptionsDeleteTest.php new file mode 100644 index 00000000..f2ec0d66 --- /dev/null +++ b/Echo/tests/phpunit/api/Push/ApiEchoPushSubscriptionsDeleteTest.php @@ -0,0 +1,48 @@ +<?php + +/** + * @group medium + * @group API + * @group Database + * @covers \EchoPush\Api\ApiEchoPushSubscriptionsDelete + */ +class ApiEchoPushSubscriptionsDeleteTest extends ApiTestCase { + + /** @var User */ + private $user; + + public function setUp(): void { + parent::setUp(); + $this->setMwGlobals( 'wgEchoEnablePush', true ); + $this->tablesUsed[] = 'echo_push_subscription'; + $this->tablesUsed[] = 'echo_push_provider'; + $this->user = $this->getTestUser()->getUser(); + $this->createTestData(); + } + + public function testApiDeleteSubscription(): void { + $params = [ + 'action' => 'echopushsubscriptions', + 'command' => 'delete', + 'providertoken' => 'XYZ789', + ]; + $result = $this->doApiRequestWithToken( $params, null, $this->user ); + $this->assertEquals( 'Success', $result[0]['delete']['result'] ); + } + + public function testApiDeleteSubscriptionNotFound(): void { + $params = [ + 'action' => 'echopushsubscriptions', + 'command' => 'delete', + 'providertoken' => 'ABC123', + ]; + $this->expectException( ApiUsageException::class ); + $this->doApiRequestWithToken( $params, null, $this->user ); + } + + private function createTestData(): void { + $subscriptionManager = EchoServices::getInstance()->getPushSubscriptionManager(); + $subscriptionManager->create( $this->user, 'fcm', 'XYZ789' ); + } + +} diff --git a/Echo/tests/phpunit/api/Push/ApiEchoPushSubscriptionsTest.php b/Echo/tests/phpunit/api/Push/ApiEchoPushSubscriptionsTest.php new file mode 100644 index 00000000..857464a8 --- /dev/null +++ b/Echo/tests/phpunit/api/Push/ApiEchoPushSubscriptionsTest.php @@ -0,0 +1,22 @@ +<?php + +/** + * @group medium + * @group API + * @covers \EchoPush\Api\ApiEchoPushSubscriptions + */ +class ApiEchoPushSubscriptionsTest extends ApiTestCase { + + public function testRequiresToken(): void { + $this->setMwGlobals( 'wgEchoEnablePush', true ); + $params = [ + 'action' => 'echopushsubscriptions', + 'command' => 'create', + 'platform' => 'apns', + 'platformtoken' => 'ABC123', + ]; + $this->expectException( ApiUsageException::class ); + $this->doApiRequest( $params ); + } + +} diff --git a/Echo/tests/phpunit/cache/TitleLocalCacheTest.php b/Echo/tests/phpunit/cache/TitleLocalCacheTest.php index fdd722d3..c046b6ba 100644 --- a/Echo/tests/phpunit/cache/TitleLocalCacheTest.php +++ b/Echo/tests/phpunit/cache/TitleLocalCacheTest.php @@ -3,7 +3,7 @@ use Wikimedia\TestingAccessWrapper; /** - * @covers EchoTitleLocalCache + * @covers \EchoTitleLocalCache * @group Database */ class EchoTitleLocalCacheTest extends MediaWikiTestCase { @@ -65,7 +65,7 @@ class EchoTitleLocalCacheTest extends MediaWikiTestCase { $cache->add( 3 ); $cache->clearAll(); - $this->assertSame( null, $cache->get( 1 ), 'Cache was cleared' ); + $this->assertNull( $cache->get( 1 ), 'Cache was cleared' ); // Lookups batch was cleared $cache->expects( $this->exactly( 1 ) )->method( 'resolve' ) diff --git a/Echo/tests/phpunit/controller/NotificationControllerTest.php b/Echo/tests/phpunit/controller/NotificationControllerTest.php index 9e497024..c7bfb064 100644 --- a/Echo/tests/phpunit/controller/NotificationControllerTest.php +++ b/Echo/tests/phpunit/controller/NotificationControllerTest.php @@ -1,7 +1,7 @@ <?php /** - * @covers EchoNotificationController + * @covers \EchoNotificationController */ class NotificationControllerTest extends MediaWikiTestCase { @@ -54,7 +54,7 @@ class NotificationControllerTest extends MediaWikiTestCase { [ [ 123 ] ], // event user locator config [ - [ 'EchoUserLocator::locateFromEventExtra', [ 'other-user' ] ], + [ [ EchoUserLocator::class, 'locateFromEventExtra' ], [ 'other-user' ] ], ], // additional setup function ( $test, $event ) { @@ -79,7 +79,7 @@ class NotificationControllerTest extends MediaWikiTestCase { ], ] ); - $event = $this->getMockBuilder( 'EchoEvent' ) + $event = $this->getMockBuilder( EchoEvent::class ) ->disableOriginalConstructor() ->getMock(); $event->expects( $this->any() ) @@ -97,7 +97,7 @@ class NotificationControllerTest extends MediaWikiTestCase { public function testEvaluateUserLocatorPassesParameters() { $test = $this; $callback = function ( $event, $firstOption, $secondOption ) use ( $test ) { - $test->assertInstanceOf( 'EchoEvent', $event ); + $test->assertInstanceOf( EchoEvent::class, $event ); $test->assertEquals( 'first', $firstOption ); $test->assertEquals( 'second', $secondOption ); @@ -157,7 +157,7 @@ class NotificationControllerTest extends MediaWikiTestCase { ], ] ); - $event = $this->getMockBuilder( 'EchoEvent' ) + $event = $this->getMockBuilder( EchoEvent::class ) ->disableOriginalConstructor() ->getMock(); $event->expects( $this->any() ) @@ -173,7 +173,7 @@ class NotificationControllerTest extends MediaWikiTestCase { } public function testDoesNotDeliverDisabledEvent() { - $event = $this->getMockBuilder( 'EchoEvent' ) + $event = $this->getMockBuilder( EchoEvent::class ) ->disableOriginalConstructor() ->getMock(); $event->expects( $this->any() ) @@ -197,45 +197,43 @@ class NotificationControllerTest extends MediaWikiTestCase { 'bar', // default notification types configuration [ 'web' => true ], - // type-specific + // per-category notification type availability + [ + 'f' => [ 'email' => true ] + ], + // event types [ 'foo' => [ - 'notify-type-availability' => [ 'email' => true ], + 'category' => 'f', ], + 'bar' => [ + 'category' => 'b', + ] ], ], [ - 'Overrides `all` configuration with event type configuration', + 'Overrides `all` configuration with event category configuration', // expected result [ 'web' ], // event type 'foo', // default notification types configuration [ 'web' => true, 'email' => true ], - // type-specific + // per-category notification type availability + [ + 'f' => [ 'email' => false ], + 'b' => [ 'sms' => true ], + ], + // event types [ 'foo' => [ - 'notify-type-availability' => [ 'email' => false ], + 'category' => 'f', ], 'bar' => [ - 'notify-type-availability' => [ 'sms' => true ], + 'category' => 'b', ], ], - ], - - [ - 'Uses all configuration when notify-type-availability not set at all', - // expected result - [ 'web', 'email' ], - // event type - 'baz', - // default notification types configuration - [ 'web' => true, 'email' => true ], - // type-specific - [ - 'baz' => [], - ], ] ]; } @@ -243,10 +241,22 @@ class NotificationControllerTest extends MediaWikiTestCase { /** * @dataProvider getEventNotifyTypesProvider */ - public function testGetEventNotifyTypes( $message, $expect, $type, array $defaultNotifyTypeAvailability, array $notifications ) { + public function testGetEventNotifyTypes( + $message, + $expect, + $type, + array $defaultNotifyTypeAvailability, + array $notifyTypeAvailabilityByCategory, + array $notifications + ) { $this->setMwGlobals( [ 'wgDefaultNotifyTypeAvailability' => $defaultNotifyTypeAvailability, + 'wgNotifyTypeAvailabilityByCategory' => $notifyTypeAvailabilityByCategory, 'wgEchoNotifications' => $notifications, + 'wgEchoNotificationCategories' => array_fill_keys( + array_keys( $notifyTypeAvailabilityByCategory ), + [ 'priority' => 4 ] + ), ] ); $result = EchoNotificationController::getEventNotifyTypes( $type ); $this->assertEquals( $expect, $result, $message ); diff --git a/Echo/tests/phpunit/formatters/PresentationModelSectionTest.php b/Echo/tests/phpunit/formatters/PresentationModelSectionTest.php new file mode 100644 index 00000000..b17af684 --- /dev/null +++ b/Echo/tests/phpunit/formatters/PresentationModelSectionTest.php @@ -0,0 +1,97 @@ +<?php + +/** + * @group Database + */ +class EchoPresentationModelSectionTest extends MediaWikiTestCase { + + /** + * @covers \EchoPresentationModelSection::getTruncatedSectionTitle + */ + public function testGetTruncatedSectionTitle_short() { + $lang = Language::factory( 'en' ); + $section = new EchoPresentationModelSection( + $this->makeEvent( [ 'event_extra' => serialize( [ 'section-title' => 'asdf' ] ) ] ), + $this->getTestUser()->getUser(), + $lang + ); + + $this->assertEquals( $lang->embedBidi( 'asdf' ), $section->getTruncatedSectionTitle() ); + } + + /** + * @covers \EchoPresentationModelSection::getTruncatedSectionTitle + */ + public function testGetTruncatedSectionTitle_long() { + $lang = Language::factory( 'en' ); + $section = new EchoPresentationModelSection( + $this->makeEvent( [ 'event_extra' => serialize( [ 'section-title' => str_repeat( 'a', 100 ) ] ) ] ), + $this->getTestUser()->getUser(), + $lang + ); + + $this->assertEquals( + $lang->embedBidi( str_repeat( 'a', 50 ) . '...' ), + $section->getTruncatedSectionTitle() + ); + } + + /** + * @covers \EchoPresentationModelSection::getTitleWithSection + */ + public function testGetTitleWithSection() { + $page = $this->getExistingTestPage(); + $section = new EchoPresentationModelSection( + $this->makeEvent( [ + 'event_page_id' => $page->getId(), + 'event_extra' => serialize( [ 'section-title' => 'asdf' ] ), + ] ), + $this->getTestUser()->getUser(), + Language::factory( 'en' ) + ); + + $titleWithSection = $section->getTitleWithSection(); + + $this->assertEquals( 'asdf', $titleWithSection->getFragment() ); + $this->assertEquals( $page->getTitle()->getPrefixedText(), $titleWithSection->getPrefixedText() ); + } + + /** + * @covers \EchoPresentationModelSection::exists + */ + public function testExists_no() { + $section = new EchoPresentationModelSection( + $this->makeEvent(), + $this->getTestUser()->getUser(), + Language::factory( 'en' ) + ); + + $this->assertFalse( $section->exists() ); + } + + /** + * @covers \EchoPresentationModelSection::exists + */ + public function testExists_yes() { + $section = new EchoPresentationModelSection( + $this->makeEvent( [ 'event_extra' => serialize( [ 'section-title' => 'asdf' ] ) ] ), + $this->getTestUser()->getUser(), + Language::factory( 'en' ) + ); + + $this->assertTrue( $section->exists() ); + } + + private function makeEvent( $config = [] ) { + $agent = $this->getTestSysop()->getUser(); + return EchoEvent::newFromRow( (object)array_merge( [ + 'event_id' => 12, + 'event_type' => 'welcome', + 'event_variant' => '1', + 'event_page_id' => 1, + 'event_deleted' => 0, + 'event_agent_id' => $agent->getId(), + 'event_extra' => '', + ], $config ) ); + } +} diff --git a/Echo/tests/phpunit/integration/EchoServicesTest.php b/Echo/tests/phpunit/integration/EchoServicesTest.php new file mode 100644 index 00000000..60c46855 --- /dev/null +++ b/Echo/tests/phpunit/integration/EchoServicesTest.php @@ -0,0 +1,33 @@ +<?php + +use EchoPush\NotificationServiceClient; +use EchoPush\SubscriptionManager; +use MediaWiki\MediaWikiServices; + +/** @covers EchoServices */ +class EchoServicesTest extends MediaWikiIntegrationTestCase { + + /** @var EchoServices */ + private $echoServices; + + public function setUp(): void { + parent::setUp(); + $this->echoServices = EchoServices::getInstance(); + } + + public function testWrap(): void { + $services = EchoServices::wrap( MediaWikiServices::getInstance() ); + $this->assertInstanceOf( EchoServices::class, $services ); + } + + public function testGetPushNotificationServiceClient(): void { + $serviceClient = $this->echoServices->getPushNotificationServiceClient(); + $this->assertInstanceOf( NotificationServiceClient::class, $serviceClient ); + } + + public function testGetPushSubscriptionManager(): void { + $subscriptionManager = $this->echoServices->getPushSubscriptionManager(); + $this->assertInstanceOf( SubscriptionManager::class, $subscriptionManager ); + } + +} diff --git a/Echo/tests/phpunit/integration/Push/NotificationServiceClientTest.php b/Echo/tests/phpunit/integration/Push/NotificationServiceClientTest.php new file mode 100644 index 00000000..26cb868d --- /dev/null +++ b/Echo/tests/phpunit/integration/Push/NotificationServiceClientTest.php @@ -0,0 +1,16 @@ +<?php + +use Wikimedia\TestingAccessWrapper; + +/** @covers \EchoPush\NotificationServiceClient */ +class NotificationServiceClientTest extends MediaWikiIntegrationTestCase { + + public function testConstructRequest(): void { + $client = EchoServices::getInstance()->getPushNotificationServiceClient(); + $client = TestingAccessWrapper::newFromObject( $client ); + $payload = [ 'deviceTokens' => [ 'foo' ], 'messageType' => 'checkEchoV1' ]; + $request = $client->constructRequest( 'fcm', $payload ); + $this->assertInstanceOf( MWHttpRequest::class, $request ); + } + +} diff --git a/Echo/tests/phpunit/integration/Push/PushNotifierTest.php b/Echo/tests/phpunit/integration/Push/PushNotifierTest.php new file mode 100644 index 00000000..1e60f230 --- /dev/null +++ b/Echo/tests/phpunit/integration/Push/PushNotifierTest.php @@ -0,0 +1,20 @@ +<?php + +use EchoPush\NotificationRequestJob; +use EchoPush\PushNotifier; +use Wikimedia\TestingAccessWrapper; + +/** @covers \EchoPush\PushNotifier */ +class PushNotifierTest extends MediaWikiIntegrationTestCase { + + public function testCreateJob(): void { + $notifier = TestingAccessWrapper::newFromClass( PushNotifier::class ); + $user = $this->getTestUser()->getUser(); + $centralId = CentralIdLookup::factory()->centralIdFromLocalUser( $user ); + $job = $notifier->createJob( $user ); + $this->assertInstanceOf( NotificationRequestJob::class, $job ); + $this->assertSame( 'EchoPushNotificationRequest', $job->getType() ); + $this->assertSame( $centralId, $job->getParams()['centralId'] ); + } + +} diff --git a/Echo/tests/phpunit/integration/Push/SubscriptionManagerTest.php b/Echo/tests/phpunit/integration/Push/SubscriptionManagerTest.php new file mode 100644 index 00000000..7a9f32f1 --- /dev/null +++ b/Echo/tests/phpunit/integration/Push/SubscriptionManagerTest.php @@ -0,0 +1,27 @@ +<?php + +/** + * @group Database + * @covers \EchoPush\SubscriptionManager + */ +class SubscriptionManagerTest extends MediaWikiIntegrationTestCase { + + public function setUp(): void { + parent::setUp(); + $this->tablesUsed[] = 'echo_push_subscription'; + $this->tablesUsed[] = 'echo_push_provider'; + } + + public function testManagePushSubscriptions(): void { + $subscriptionManager = EchoServices::getInstance()->getPushSubscriptionManager(); + $user = $this->getTestUser()->getUser(); + $centralId = CentralIdLookup::factory()->centralIdFromLocalUser( $user ); + $subscriptionManager->create( $user, 'test', 'ABC123' ); + $subscriptions = $subscriptionManager->getSubscriptionsForUser( $centralId ); + $this->assertCount( 1, $subscriptions ); + $subscriptionManager->delete( $user, 'ABC123' ); + $subscriptions = $subscriptionManager->getSubscriptionsForUser( $centralId ); + $this->assertCount( 0, $subscriptions ); + } + +} diff --git a/Echo/tests/phpunit/maintenance/SupressionMaintenanceTest.php b/Echo/tests/phpunit/maintenance/SupressionMaintenanceTest.php index 029be88f..31149b46 100644 --- a/Echo/tests/phpunit/maintenance/SupressionMaintenanceTest.php +++ b/Echo/tests/phpunit/maintenance/SupressionMaintenanceTest.php @@ -1,8 +1,10 @@ <?php +use PHPUnit\Framework\TestCase; + /** * @group Echo - * @covers EchoSuppressionRowUpdateGenerator + * @covers \EchoSuppressionRowUpdateGenerator */ class SuppressionMaintenanceTest extends MediaWikiTestCase { @@ -101,8 +103,11 @@ class SuppressionMaintenanceTest extends MediaWikiTestCase { } protected static function attachTitleFor( $id, $providedText, $providedNamespace ) { - return function ( $test, $gen ) use ( $id, $providedText, $providedNamespace ) { - $title = $test->getMock( 'Title' ); + return function ( + TestCase $test, + EchoSuppressionRowUpdateGenerator $gen + ) use ( $id, $providedText, $providedNamespace ) { + $title = $test->createMock( Title::class ); $title->expects( $test->any() ) ->method( 'getArticleId' ) ->will( $test->returnValue( $id ) ); @@ -110,11 +115,7 @@ class SuppressionMaintenanceTest extends MediaWikiTestCase { $titles = [ $providedNamespace => [ $providedText => $title ] ]; $gen->setNewTitleFromNsAndText( function ( $namespace, $text ) use ( $titles ) { - if ( isset( $titles[$namespace][$text] ) ) { - return $titles[$namespace][$text]; - } - - return Title::makeTitleSafe( $namespace, $text ); + return $titles[$namespace][$text] ?? Title::makeTitleSafe( $namespace, $text ); } ); }; } @@ -122,7 +123,7 @@ class SuppressionMaintenanceTest extends MediaWikiTestCase { /** * @dataProvider provider_updateRow */ - public function testUpdateRow( $message, $expected, $input, $callable = null ) { + public function testUpdateRow( $message, array $expected, array $input, callable $callable = null ) { $gen = new EchoSuppressionRowUpdateGenerator; if ( $callable ) { call_user_func( $callable, $this, $gen ); diff --git a/Echo/tests/phpunit/mapper/EchoExecuteFirstArgumentStub.php b/Echo/tests/phpunit/mapper/EchoExecuteFirstArgumentStub.php index 1e2889e7..8ecf0609 100644 --- a/Echo/tests/phpunit/mapper/EchoExecuteFirstArgumentStub.php +++ b/Echo/tests/phpunit/mapper/EchoExecuteFirstArgumentStub.php @@ -1,18 +1,22 @@ <?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' ); +use PHPUnit\Framework\MockObject\Invocation; +use PHPUnit\Framework\MockObject\Invocation\StaticInvocation; +use PHPUnit\Framework\MockObject\Stub\Stub; + +class EchoExecuteFirstArgumentStub implements Stub { + public function invoke( Invocation $invocation ) { + if ( !$invocation instanceof StaticInvocation ) { + throw new PHPUnit\Framework\Exception( 'wrong invocation type' ); } if ( !$invocation->arguments ) { - throw new PHPUnit_Framework_Exception( 'Method call must have an argument' ); + throw new PHPUnit\Framework\Exception( 'Method call must have an argument' ); } return call_user_func( reset( $invocation->arguments ) ); } - public function toString() { + public function toString() : string { 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 e81e183d..f42615f6 100644 --- a/Echo/tests/phpunit/mapper/EventMapperTest.php +++ b/Echo/tests/phpunit/mapper/EventMapperTest.php @@ -1,10 +1,20 @@ <?php +use Wikimedia\Rdbms\IDatabase; + /** - * @covers EchoEventMapper + * @group Database + * @covers \EchoEventMapper */ class EchoEventMapperTest extends MediaWikiTestCase { + protected function setUp() : void { + parent::setUp(); + $this->tablesUsed[] = 'echo_event'; + $this->tablesUsed[] = 'echo_notification'; + $this->tablesUsed[] = 'echo_target_page'; + } + public function provideDataTestInsert() { return [ [ @@ -16,12 +26,7 @@ class EchoEventMapperTest extends MediaWikiTestCase { 'successful insert with insert id = 2', [ 'insert' => true, 'insertId' => 2 ], 2 - ], - [ - 'unsuccessful insert', - [ 'insert' => false, 'insertId' => 2 ], - false - ], + ] ]; } @@ -55,12 +60,9 @@ class EchoEventMapperTest extends MediaWikiTestCase { ) ); $res = $eventMapper->fetchById( 1 ); - $this->assertInstanceOf( 'EchoEvent', $res ); + $this->assertInstanceOf( EchoEvent::class, $res ); } - /** - * @expectedException MWException - */ public function testUnsuccessfulFetchById() { $eventMapper = new EchoEventMapper( $this->mockMWEchoDbFactory( @@ -69,15 +71,15 @@ class EchoEventMapperTest extends MediaWikiTestCase { ] ) ); - $res = $eventMapper->fetchById( 1 ); - $this->assertInstanceOf( 'EchoEvent', $res ); + $this->expectException( MWException::class ); + $eventMapper->fetchById( 1 ); } /** - * Mock object of EchoEvent + * @return EchoEvent */ protected function mockEchoEvent() { - $event = $this->getMockBuilder( 'EchoEvent' ) + $event = $this->getMockBuilder( EchoEvent::class ) ->disableOriginalConstructor() ->getMock(); $event->expects( $this->any() ) @@ -88,10 +90,10 @@ class EchoEventMapperTest extends MediaWikiTestCase { } /** - * Mock object of MWEchoDbFactory + * @return MWEchoDbFactory */ protected function mockMWEchoDbFactory( $dbResult ) { - $dbFactory = $this->getMockBuilder( 'MWEchoDbFactory' ) + $dbFactory = $this->getMockBuilder( MWEchoDbFactory::class ) ->disableOriginalConstructor() ->getMock(); $dbFactory->expects( $this->any() ) @@ -102,8 +104,7 @@ class EchoEventMapperTest extends MediaWikiTestCase { } /** - * Returns a mock database object - * @return \Wikimedia\Rdbms\IDatabase + * @return IDatabase */ protected function mockDb( array $dbResult ) { $dbResult += [ @@ -112,9 +113,7 @@ class EchoEventMapperTest extends MediaWikiTestCase { 'select' => '', 'selectRow' => '' ]; - $db = $this->getMockBuilder( 'DatabaseMysqli' ) - ->disableOriginalConstructor() - ->getMock(); + $db = $this->createMock( IDatabase::class ); $db->expects( $this->any() ) ->method( 'insert' ) ->will( $this->returnValue( $dbResult['insert'] ) ); @@ -131,4 +130,39 @@ class EchoEventMapperTest extends MediaWikiTestCase { return $db; } + /** + * @covers \EchoEventMapper::fetchIdsByPage + */ + public function testFetchByPage() { + $user = $this->getTestUser()->getUser(); + $page = $this->getExistingTestPage(); + + // Create a notification that is not associated with any page + EchoEvent::create( [ + 'type' => 'welcome', + 'agent' => $user, + ] ); + + // Create a notification with a title + $eventWithTitle = EchoEvent::create( [ + 'type' => 'welcome', + 'agent' => $user, + 'title' => $page->getTitle() + ] ); + + // Create a notification with a target-page + $eventWithTargetPage = EchoEvent::create( [ + 'type' => 'welcome', + 'agent' => $user, + 'extra' => [ 'target-page' => $page->getId() ] + ] ); + + $eventMapper = new EchoEventMapper(); + + $this->assertArrayEquals( + [ $eventWithTitle->getId(), $eventWithTargetPage->getId() ], + $eventMapper->fetchIdsByPage( $page->getId() ) + ); + } + } diff --git a/Echo/tests/phpunit/mapper/NotificationMapperTest.php b/Echo/tests/phpunit/mapper/NotificationMapperTest.php index 62359a9c..27a2698a 100644 --- a/Echo/tests/phpunit/mapper/NotificationMapperTest.php +++ b/Echo/tests/phpunit/mapper/NotificationMapperTest.php @@ -1,7 +1,9 @@ <?php +use Wikimedia\Rdbms\IDatabase; + /** - * @covers EchoNotificationMapper + * @covers \EchoNotificationMapper */ class EchoNotificationMapperTest extends MediaWikiTestCase { @@ -31,9 +33,7 @@ class EchoNotificationMapperTest extends MediaWikiTestCase { 'notification_user' => 1, 'notification_timestamp' => '20140615101010', 'notification_read_timestamp' => '', - 'notification_bundle_base' => 1, 'notification_bundle_hash' => 'testhash', - 'notification_bundle_display_hash' => 'testdisplayhash' ] ]; $notifMapper = new EchoNotificationMapper( $this->mockMWEchoDbFactory( [ 'select' => $dbResult ] ) ); @@ -42,10 +42,10 @@ class EchoNotificationMapperTest extends MediaWikiTestCase { $notifMapper = new EchoNotificationMapper( $this->mockMWEchoDbFactory( [ 'select' => $dbResult ] ) ); $res = $notifMapper->fetchUnreadByUser( $this->mockUser(), 10, null, '', [ 'test_event' ] ); - $this->assertInternalType( 'array', $res ); + $this->assertIsArray( $res ); $this->assertNotEmpty( $res ); foreach ( $res as $row ) { - $this->assertInstanceOf( 'EchoNotification', $row ); + $this->assertInstanceOf( EchoNotification::class, $row ); } } @@ -69,9 +69,7 @@ class EchoNotificationMapperTest extends MediaWikiTestCase { 'notification_user' => 1, 'notification_timestamp' => '20140615101010', 'notification_read_timestamp' => '20140616101010', - 'notification_bundle_base' => 1, 'notification_bundle_hash' => 'testhash', - 'notification_bundle_display_hash' => 'testdisplayhash' ] ]; @@ -93,10 +91,10 @@ class EchoNotificationMapperTest extends MediaWikiTestCase { ) ); $res = $notifMapper->fetchByUser( $this->mockUser(), 10, '', [ 'test_event' ] ); - $this->assertInternalType( 'array', $res ); + $this->assertIsArray( $res ); $this->assertNotEmpty( $res ); foreach ( $res as $row ) { - $this->assertInstanceOf( 'EchoNotification', $row ); + $this->assertInstanceOf( EchoNotification::class, $row ); } $notifMapper = new EchoNotificationMapper( $this->mockMWEchoDbFactory( [] ) ); @@ -104,34 +102,6 @@ class EchoNotificationMapperTest extends MediaWikiTestCase { $this->assertEmpty( $res ); } - public function testFetchNewestByUserBundleHash() { - // Unsuccessful select - $notifMapper = new EchoNotificationMapper( $this->mockMWEchoDbFactory( [ 'selectRow' => false ] ) ); - $res = $notifMapper->fetchNewestByUserBundleHash( User::newFromId( 1 ), 'testhash' ); - $this->assertFalse( $res ); - - // Successful select - $dbResult = (object)[ - 'event_id' => 1, - 'event_type' => 'test', - 'event_variant' => '', - 'event_extra' => '', - 'event_page_id' => '', - 'event_agent_id' => '', - 'event_agent_ip' => '', - 'event_deleted' => 0, - 'notification_user' => 1, - 'notification_timestamp' => '20140615101010', - 'notification_read_timestamp' => '20140616101010', - 'notification_bundle_base' => 1, - 'notification_bundle_hash' => 'testhash', - 'notification_bundle_display_hash' => 'testdisplayhash' - ]; - $notifMapper = new EchoNotificationMapper( $this->mockMWEchoDbFactory( [ 'selectRow' => $dbResult ] ) ); - $row = $notifMapper->fetchNewestByUserBundleHash( User::newFromId( 1 ), 'testdisplayhash' ); - $this->assertInstanceOf( 'EchoNotification', $row ); - } - public function testFetchByUserOffset() { // Unsuccessful select $notifMapper = new EchoNotificationMapper( $this->mockMWEchoDbFactory( [ 'selectRow' => false ] ) ); @@ -151,24 +121,37 @@ class EchoNotificationMapperTest extends MediaWikiTestCase { 'notification_user' => 1, 'notification_timestamp' => '20140615101010', 'notification_read_timestamp' => '20140616101010', - 'notification_bundle_base' => 1, 'notification_bundle_hash' => 'testhash', - 'notification_bundle_display_hash' => 'testdisplayhash' ]; $notifMapper = new EchoNotificationMapper( $this->mockMWEchoDbFactory( [ 'selectRow' => $dbResult ] ) ); $row = $notifMapper->fetchByUserOffset( User::newFromId( 1 ), 500 ); - $this->assertInstanceOf( 'EchoNotification', $row ); + $this->assertInstanceOf( EchoNotification::class, $row ); } public function testDeleteByUserEventOffset() { $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 = $this->createMock( IDatabase::class ); + $makeResultRows = function ( $eventIds ) { + return new ArrayIterator( array_map( function ( $eventId ) { + return (object)[ 'notification_event' => $eventId ]; + }, $eventIds ) ); + }; + $mockDb->expects( $this->exactly( 4 ) ) + ->method( 'select' ) + ->willReturnOnConsecutiveCalls( + $this->returnValue( $makeResultRows( [ 1, 2, 3, 5 ] ) ), + $this->returnValue( $makeResultRows( [ 8, 13, 21, 34 ] ) ), + $this->returnValue( $makeResultRows( [ 55, 89 ] ) ), + $this->returnValue( $makeResultRows( [] ) ) + ); $mockDb->expects( $this->exactly( 3 ) ) + ->method( 'selectFieldValues' ) + ->willReturnOnConsecutiveCalls( + $this->returnValue( [] ), + $this->returnValue( [ 13, 21 ] ), + $this->returnValue( [ 55 ] ) + ); + $mockDb->expects( $this->exactly( 7 ) ) ->method( 'delete' ) ->withConsecutive( [ @@ -182,12 +165,32 @@ class EchoNotificationMapperTest extends MediaWikiTestCase { $this->anything() ], [ + $this->equalTo( 'echo_event' ), + $this->equalTo( [ 'event_id' => [ 13, 21 ] ] ), + $this->anything() + ], + [ + $this->equalTo( 'echo_target_page' ), + $this->equalTo( [ 'etp_event' => [ 13, 21 ] ] ), + $this->anything() + ], + [ $this->equalTo( 'echo_notification' ), $this->equalTo( [ 'notification_user' => 1, 'notification_event' => [ 55, 89 ] ] ), $this->anything() + ], + [ + $this->equalTo( 'echo_event' ), + $this->equalTo( [ 'event_id' => [ 55 ] ] ), + $this->anything() + ], + [ + $this->equalTo( 'echo_target_page' ), + $this->equalTo( [ 'etp_event' => [ 55 ] ] ), + $this->anything() ] ) - ->will( $this->returnValue( true ) ); + ->willReturn( true ); $notifMapper = new EchoNotificationMapper( $this->mockMWEchoDbFactory( $mockDb ) ); $this->assertTrue( $notifMapper->deleteByUserEventOffset( User::newFromId( 1 ), 500 ) ); @@ -197,7 +200,7 @@ class EchoNotificationMapperTest extends MediaWikiTestCase { * Mock object of User */ protected function mockUser() { - $user = $this->getMockBuilder( 'User' ) + $user = $this->getMockBuilder( User::class ) ->disableOriginalConstructor() ->getMock(); $user->expects( $this->any() ) @@ -217,7 +220,7 @@ class EchoNotificationMapperTest extends MediaWikiTestCase { * Mock object of EchoNotification */ protected function mockEchoNotification() { - $event = $this->getMockBuilder( 'EchoNotification' ) + $event = $this->getMockBuilder( EchoNotification::class ) ->disableOriginalConstructor() ->getMock(); $event->expects( $this->any() ) @@ -233,7 +236,7 @@ class EchoNotificationMapperTest extends MediaWikiTestCase { */ protected function mockMWEchoDbFactory( $dbResultOrMockDb ) { $mockDb = is_array( $dbResultOrMockDb ) ? $this->mockDb( $dbResultOrMockDb ) : $dbResultOrMockDb; - $dbFactory = $this->getMockBuilder( 'MWEchoDbFactory' ) + $dbFactory = $this->getMockBuilder( MWEchoDbFactory::class ) ->disableOriginalConstructor() ->getMock(); $dbFactory->expects( $this->any() ) @@ -255,9 +258,7 @@ class EchoNotificationMapperTest extends MediaWikiTestCase { 'delete' => '' ]; - $db = $this->getMockBuilder( 'DatabaseMysqli' ) - ->disableOriginalConstructor() - ->getMock(); + $db = $this->createMock( IDatabase::class ); $db->expects( $this->any() ) ->method( 'insert' ) ->will( $this->returnValue( $dbResult['insert'] ) ); @@ -271,7 +272,7 @@ class EchoNotificationMapperTest extends MediaWikiTestCase { ->method( 'selectRow' ) ->will( $this->returnValue( $dbResult['selectRow'] ) ); $db->expects( $this->any() ) - ->method( 'onTransactionIdle' ) + ->method( 'onTransactionCommitOrIdle' ) ->will( new EchoExecuteFirstArgumentStub ); return $db; diff --git a/Echo/tests/phpunit/model/NotificationTest.php b/Echo/tests/phpunit/model/NotificationTest.php index 92522303..92727589 100644 --- a/Echo/tests/phpunit/model/NotificationTest.php +++ b/Echo/tests/phpunit/model/NotificationTest.php @@ -1,7 +1,7 @@ <?php /** - * @covers EchoNotification + * @covers \EchoNotification */ class EchoNotificationTest extends MediaWikiTestCase { @@ -9,14 +9,14 @@ class EchoNotificationTest extends MediaWikiTestCase { $row = $this->mockNotificationRow() + $this->mockEventRow(); $notif = EchoNotification::newFromRow( (object)$row ); - $this->assertInstanceOf( 'EchoNotification', $notif ); + $this->assertInstanceOf( EchoNotification::class, $notif ); // getReadTimestamp() should return null $this->assertNull( $notif->getReadTimestamp() ); $this->assertEquals( $notif->getTimestamp(), wfTimestamp( TS_MW, $row['notification_timestamp'] ) ); - $this->assertInstanceOf( 'EchoEvent', $notif->getEvent() ); + $this->assertInstanceOf( EchoEvent::class, $notif->getEvent() ); $this->assertNull( $notif->getTargetPages() ); // Provide a read timestamp @@ -33,18 +33,16 @@ class EchoNotificationTest extends MediaWikiTestCase { ] ); $this->assertNotEmpty( $notif->getTargetPages() ); foreach ( $notif->getTargetPages() as $targetPage ) { - $this->assertInstanceOf( 'EchoTargetPage', $targetPage ); + $this->assertInstanceOf( EchoTargetPage::class, $targetPage ); } } - /** - * @expectedException MWException - */ public function testNewFromRowWithException() { $row = $this->mockNotificationRow(); // Provide an invalid event id $row['notification_event'] = -1; - $noitf = EchoNotification::newFromRow( (object)$row ); + $this->expectException( MWException::class ); + EchoNotification::newFromRow( (object)$row ); } /** @@ -56,9 +54,7 @@ class EchoNotificationTest extends MediaWikiTestCase { 'notification_event' => 1, 'notification_timestamp' => time(), 'notification_read_timestamp' => '', - 'notification_bundle_base' => 1, 'notification_bundle_hash' => 'testhash', - 'notification_bundle_display_hash' => 'testdisplayhash' ]; } diff --git a/Echo/tests/phpunit/BundlerTest.php b/Echo/tests/phpunit/unit/BundlerTest.php index a4a2e258..121afccc 100644 --- a/Echo/tests/phpunit/BundlerTest.php +++ b/Echo/tests/phpunit/unit/BundlerTest.php @@ -1,9 +1,9 @@ <?php /** - * @covers Bundler + * @covers \Bundler */ -class BundlerTest extends MediaWikiTestCase { +class BundlerTest extends MediaWikiUnitTestCase { public function testBundle() { $read = true; @@ -28,7 +28,7 @@ class BundlerTest extends MediaWikiTestCase { } private function createNotificationForBundling( $bundleHash, $timestamp, $readStatus ) { - $mock = $this->getMockBuilder( 'EchoNotification' ) + $mock = $this->getMockBuilder( EchoNotification::class ) ->disableOriginalConstructor() ->setMethods( [ 'getBundlingKey', diff --git a/Echo/tests/phpunit/DiffParserTest.php b/Echo/tests/phpunit/unit/DiffParserTest.php index aeecef67..aa452830 100644 --- a/Echo/tests/phpunit/DiffParserTest.php +++ b/Echo/tests/phpunit/unit/DiffParserTest.php @@ -1,10 +1,10 @@ <?php /** - * @covers EchoDiffParser + * @covers \EchoDiffParser * @group Echo */ -class EchoDiffParserTest extends MediaWikiTestCase { +class EchoDiffParserTest extends MediaWikiUnitTestCase { /** * @dataProvider provider_getChangeSet diff --git a/Echo/tests/phpunit/unit/EchoContainmentSetTest.php b/Echo/tests/phpunit/unit/EchoContainmentSetTest.php new file mode 100644 index 00000000..edf8cf92 --- /dev/null +++ b/Echo/tests/phpunit/unit/EchoContainmentSetTest.php @@ -0,0 +1,59 @@ +<?php + +/** + * @coversDefaultClass EchoContainmentSet + */ +class EchoContainmentSetTest extends \MediaWikiUnitTestCase { + + /** + * @covers ::addTitleIDsFromUserOption + * @dataProvider addTitlesFromUserOptionProvider + * @param User $user + * @param string $prefData + * @param string $contains + * @param bool $expected + */ + public function testAddTitlesFromUserOption( + $prefData, string $contains, bool $expected + ) { + $user = $this->getDefaultUserMock(); + $user->method( 'getOption' ) + ->willReturn( $prefData ); + $containmentSet = new EchoContainmentSet( $user ); + $containmentSet->addTitleIDsFromUserOption( 'preference-name' ); + $this->assertSame( $expected, $containmentSet->contains( $contains ) ); + } + + public function addTitlesFromUserOptionProvider() :array { + return [ + [ + 'foo', + 'bar', + false + ], + [ + [ 'foo', 'bar' ], + 'foo', + false + ], + [ + "foo\nbar", + 'bar', + true + ], + [ + '{"foo":"bar"}', + 'bar', + false + ] + + ]; + } + + private function getDefaultUserMock() { + return $this->getMockBuilder( User::class ) + ->disableOriginalConstructor() + ->getMock(); + } + +} diff --git a/Echo/tests/phpunit/unit/Push/SubscriptionTest.php b/Echo/tests/phpunit/unit/Push/SubscriptionTest.php new file mode 100644 index 00000000..b63e8c16 --- /dev/null +++ b/Echo/tests/phpunit/unit/Push/SubscriptionTest.php @@ -0,0 +1,22 @@ +<?php + +use EchoPush\Subscription; +use Wikimedia\Timestamp\ConvertibleTimestamp; + +/** @covers \EchoPush\Subscription */ +class SubscriptionTest extends MediaWikiUnitTestCase { + + public function testNewFromRow(): void { + $row = new stdClass(); + $row->eps_token = 'ABC123'; + $row->epp_name = 'fcm'; + $row->eps_updated = '2020-01-01 10:10:10'; + + $subscription = Subscription::newFromRow( $row ); + $this->assertSame( 'ABC123', $subscription->getToken() ); + $this->assertSame( 'fcm', $subscription->getProvider() ); + $this->assertInstanceOf( ConvertibleTimestamp::class, $subscription->getUpdated() ); + $this->assertSame( '1577873410', $subscription->getUpdated()->getTimestamp() ); + } + +} diff --git a/Echo/tests/phpunit/unit/controller/NotificationControllerUnitTest.php b/Echo/tests/phpunit/unit/controller/NotificationControllerUnitTest.php new file mode 100644 index 00000000..9c0c7cb8 --- /dev/null +++ b/Echo/tests/phpunit/unit/controller/NotificationControllerUnitTest.php @@ -0,0 +1,74 @@ +<?php + +use Wikimedia\TestingAccessWrapper; + +/** + * @coversDefaultClass EchoNotificationController + */ +class NotificationControllerUnitTest extends MediaWikiUnitTestCase { + + /** + * @dataProvider PageLinkedTitleMutedByUserDataProvider + * @covers ::isPageLinkedTitleMutedByUser + * @param Title $title + * @param User $user + * @param bool $expected + */ + public function testIsPageLinkedTitleMutedByUser( + Title $title, User $user, bool $expected ): void { + $wrapper = TestingAccessWrapper::newFromClass( EchoNotificationController::class ); + $wrapper->mutedPageLinkedTitlesCache = $this->getMapCacheLruMock(); + $this->assertSame( + $expected, + $wrapper->isPageLinkedTitleMutedByUser( $title, $user ) + ); + } + + public function PageLinkedTitleMutedByUserDataProvider() :array { + return [ + [ + $this->getMockTitle( 123 ), + $this->getMockUser( [] ), + false + ], + [ + $this->getMockTitle( 123 ), + $this->getMockUser( [ 123, 456, 789 ] ), + true + ], + [ + $this->getMockTitle( 456 ), + $this->getMockUser( [ 489 ] ), + false + ] + + ]; + } + + private function getMockTitle( int $articleID ) { + $title = $this->getMockBuilder( Title::class ) + ->disableOriginalConstructor() + ->getMock(); + $title->method( 'getArticleID' ) + ->willReturn( $articleID ); + return $title; + } + + private function getMockUser( $mutedTitlePreferences = [] ) { + $user = $this->getMockBuilder( User::class ) + ->disableOriginalConstructor() + ->getMock(); + $user->method( 'getId' ) + ->willReturn( 456 ); + $user->method( 'getOption' ) + ->willReturn( implode( "\n", $mutedTitlePreferences ) ); + return $user; + } + + private function getMapCacheLruMock() { + return $this->getMockBuilder( MapCacheLRU::class ) + ->disableOriginalConstructor() + ->getMock(); + } + +} diff --git a/Echo/tests/phpunit/gateway/UserNotificationGatewayTest.php b/Echo/tests/phpunit/unit/gateway/UserNotificationGatewayTest.php index 2cc4fd78..2f45ee2f 100644 --- a/Echo/tests/phpunit/gateway/UserNotificationGatewayTest.php +++ b/Echo/tests/phpunit/unit/gateway/UserNotificationGatewayTest.php @@ -1,54 +1,96 @@ <?php +use Wikimedia\Rdbms\IDatabase; + /** - * @covers EchoUserNotificationGateway + * @covers \EchoUserNotificationGateway */ -class EchoUserNotificationGatewayTest extends MediaWikiTestCase { +class EchoUserNotificationGatewayTest extends MediaWikiUnitTestCase { public function testMarkRead() { // no event ids to mark - $gateway = new EchoUserNotificationGateway( User::newFromId( 1 ), $this->mockMWEchoDbFactory() ); + $gateway = new EchoUserNotificationGateway( + User::newFromId( 1 ), + $this->mockMWEchoDbFactory(), + $this->mockConfig() + ); $this->assertFalse( $gateway->markRead( [] ) ); // successful update - $gateway = new EchoUserNotificationGateway( User::newFromId( 1 ), $this->mockMWEchoDbFactory( [ 'update' => true ] ) ); + $gateway = new EchoUserNotificationGateway( + User::newFromId( 1 ), + $this->mockMWEchoDbFactory( [ 'update' => true ] ), + $this->mockConfig() + ); $this->assertTrue( $gateway->markRead( [ 2 ] ) ); // unsuccessful update - $gateway = new EchoUserNotificationGateway( User::newFromId( 1 ), $this->mockMWEchoDbFactory( [ 'update' => false ] ) ); + $gateway = new EchoUserNotificationGateway( + User::newFromId( 1 ), + $this->mockMWEchoDbFactory( [ 'update' => false ] ), + $this->mockConfig() + ); $this->assertFalse( $gateway->markRead( [ 2 ] ) ); } public function testMarkAllRead() { // successful update - $gateway = new EchoUserNotificationGateway( User::newFromId( 1 ), $this->mockMWEchoDbFactory( [ 'update' => true ] ) ); + $gateway = new EchoUserNotificationGateway( + User::newFromId( 1 ), + $this->mockMWEchoDbFactory( [ 'update' => true ] ), + $this->mockConfig() + ); $this->assertTrue( $gateway->markAllRead( [ 2 ] ) ); - // unsuccessful update - $gateway = new EchoUserNotificationGateway( User::newFromId( 1 ), $this->mockMWEchoDbFactory( [ 'update' => false ] ) ); - $this->assertFalse( $gateway->markAllRead( [ 2 ] ) ); + // null update + $gateway = new EchoUserNotificationGateway( + User::newFromId( 1 ), + $this->mockMWEchoDbFactory( [ 'update' => false ] ), + $this->mockConfig() + ); + $this->assertTrue( $gateway->markAllRead( [ 2 ] ) ); } public function testGetNotificationCount() { // unsuccessful select - $gateway = new EchoUserNotificationGateway( $this->mockUser(), $this->mockMWEchoDbFactory( [ 'selectRowCount' => 0 ] ) ); - $this->assertEquals( 0, $gateway->getCappedNotificationCount( DB_REPLICA, [ 'event_one' ] ) ); + $gateway = new EchoUserNotificationGateway( + $this->mockUser(), + $this->mockMWEchoDbFactory( [ 'selectRowCount' => 0 ] ), + $this->mockConfig() + ); + $this->assertSame( 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_REPLICA, [ 'event_one', 'event_two' ] ) ); + $gateway = new EchoUserNotificationGateway( + $this->mockUser(), + $this->mockMWEchoDbFactory( [ 'selectRowCount' => 2 ] ), + $this->mockConfig() + ); + $this->assertSame( 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_REPLICA, [] ) ); + $gateway = new EchoUserNotificationGateway( + $this->mockUser(), + $this->mockMWEchoDbFactory( [ 'selectRowCount' => 2 ] ), + $this->mockConfig() + ); + $this->assertSame( 0, $gateway->getCappedNotificationCount( DB_REPLICA, [] ) ); // successful select - $gateway = new EchoUserNotificationGateway( $this->mockUser(), $this->mockMWEchoDbFactory( [ 'selectRowCount' => 3 ] ) ); - $this->assertEquals( 3, $gateway->getCappedNotificationCount( DB_REPLICA, [ 'event_one' ] ) ); + $gateway = new EchoUserNotificationGateway( + $this->mockUser(), + $this->mockMWEchoDbFactory( [ 'selectRowCount' => 3 ] ), + $this->mockConfig() + ); + $this->assertSame( 3, $gateway->getCappedNotificationCount( DB_REPLICA, [ 'event_one' ] ) ); } public function testGetUnreadNotifications() { - $gateway = new EchoUserNotificationGateway( $this->mockUser(), $this->mockMWEchoDbFactory( [ 'select' => false ] ) ); + $gateway = new EchoUserNotificationGateway( + $this->mockUser(), + $this->mockMWEchoDbFactory( [ 'select' => false ] ), + $this->mockConfig() + ); $this->assertEmpty( $gateway->getUnreadNotifications( 'user_talk' ) ); $dbResult = [ @@ -56,7 +98,11 @@ class EchoUserNotificationGatewayTest extends MediaWikiTestCase { (object)[ 'notification_event' => 2 ], (object)[ 'notification_event' => 3 ], ]; - $gateway = new EchoUserNotificationGateway( $this->mockUser(), $this->mockMWEchoDbFactory( [ 'select' => $dbResult ] ) ); + $gateway = new EchoUserNotificationGateway( + $this->mockUser(), + $this->mockMWEchoDbFactory( [ 'select' => $dbResult ] ), + $this->mockConfig() + ); $res = $gateway->getUnreadNotifications( 'user_talk' ); $this->assertEquals( $res, [ 1 => 1, 2 => 2, 3 => 3 ] ); } @@ -65,7 +111,7 @@ class EchoUserNotificationGatewayTest extends MediaWikiTestCase { * Mock object of User */ protected function mockUser( $group = 'echo_group' ) { - $user = $this->getMockBuilder( 'User' ) + $user = $this->getMockBuilder( User::class ) ->disableOriginalConstructor() ->getMock(); $user->expects( $this->any() ) @@ -85,7 +131,7 @@ class EchoUserNotificationGatewayTest extends MediaWikiTestCase { * Mock object of MWEchoDbFactory */ protected function mockMWEchoDbFactory( array $dbResult = [] ) { - $dbFactory = $this->getMockBuilder( 'MWEchoDbFactory' ) + $dbFactory = $this->getMockBuilder( MWEchoDbFactory::class ) ->disableOriginalConstructor() ->getMock(); $dbFactory->expects( $this->any() ) @@ -95,6 +141,12 @@ class EchoUserNotificationGatewayTest extends MediaWikiTestCase { return $dbFactory; } + protected function mockConfig() { + return new HashConfig( [ + 'UpdateRowsPerQuery' => 500, + ] ); + } + /** * Returns a mock database object * @return \Wikimedia\Rdbms\IDatabase @@ -106,9 +158,7 @@ class EchoUserNotificationGatewayTest extends MediaWikiTestCase { 'selectRow' => '', 'selectRowCount' => '', ]; - $db = $this->getMockBuilder( 'DatabaseMysqli' ) - ->disableOriginalConstructor() - ->getMock(); + $db = $this->createMock( IDatabase::class ); $db->expects( $this->any() ) ->method( 'update' ) ->will( $this->returnValue( $dbResult['update'] ) ); diff --git a/Echo/tests/phpunit/iterator/FilteredSequentialIteratorTest.php b/Echo/tests/phpunit/unit/iterator/FilteredSequentialIteratorTest.php index 7042d633..25086cf2 100644 --- a/Echo/tests/phpunit/iterator/FilteredSequentialIteratorTest.php +++ b/Echo/tests/phpunit/unit/iterator/FilteredSequentialIteratorTest.php @@ -1,10 +1,10 @@ <?php /** - * @covers EchoCallbackIterator - * @covers EchoFilteredSequentialIterator + * @covers \EchoCallbackIterator + * @covers \EchoFilteredSequentialIterator */ -class FilteredSequentialIteratorTest extends MediaWikiTestCase { +class FilteredSequentialIteratorTest extends MediaWikiUnitTestCase { public function testEchoCallbackIteratorDoesntBlowUp() { $it = new EchoCallbackIterator( diff --git a/Echo/tests/phpunit/mapper/AbstractMapperTest.php b/Echo/tests/phpunit/unit/mapper/AbstractMapperTest.php index 02194a02..646caa0f 100644 --- a/Echo/tests/phpunit/mapper/AbstractMapperTest.php +++ b/Echo/tests/phpunit/unit/mapper/AbstractMapperTest.php @@ -1,16 +1,19 @@ <?php /** - * @covers EchoAbstractMapper + * @covers \EchoAbstractMapper */ -class EchoAbstractMapperTest extends MediaWikiTestCase { +class EchoAbstractMapperTest extends MediaWikiUnitTestCase { + /** + * @return array [ 'mapper' => EchoAbstractMapper, 'property' => ReflectionProperty ] + */ public function testAttachListener() { $mapper = new EchoAbstractMapperStub(); $mapper->attachListener( 'testMethod', 'key_a', function () { } ); - $class = new ReflectionClass( 'EchoAbstractMapperStub' ); + $class = new ReflectionClass( EchoAbstractMapperStub::class ); $property = $class->getProperty( 'listeners' ); $property->setAccessible( true ); $listeners = $property->getValue( $mapper ); @@ -22,11 +25,9 @@ class EchoAbstractMapperTest extends MediaWikiTestCase { return [ 'mapper' => $mapper, 'property' => $property ]; } - /** - * @expectedException MWException - */ public function testAttachListenerWithException() { $mapper = new EchoAbstractMapperStub(); + $this->expectException( MWException::class ); $mapper->attachListener( 'nonExistingMethod', 'key_a', function () { } ); } @@ -35,8 +36,8 @@ class EchoAbstractMapperTest extends MediaWikiTestCase { * @depends testAttachListener */ public function testGetMethodListeners( $data ) { + /** @var EchoAbstractMapper $mapper */ $mapper = $data['mapper']; - $property = $data['property']; $listeners = $mapper->getMethodListeners( 'testMethod' ); $this->assertArrayHasKey( 'key_a', $listeners ); @@ -45,20 +46,22 @@ class EchoAbstractMapperTest extends MediaWikiTestCase { /** * @depends testAttachListener - * @expectedException MWException */ public function testGetMethodListenersWithException( $data ) { + /** @var EchoAbstractMapper $mapper */ $mapper = $data['mapper']; - $property = $data['property']; - $listeners = $mapper->getMethodListeners( 'nonExistingMethod' ); + $this->expectException( MWException::class ); + $mapper->getMethodListeners( 'nonExistingMethod' ); } /** * @depends testAttachListener */ public function testDetachListener( $data ) { + /** @var EchoAbstractMapper $mapper */ $mapper = $data['mapper']; + /** @var ReflectionProperty $property */ $property = $data['property']; $mapper->detachListener( 'testMethod', 'key_a' ); diff --git a/Echo/tests/phpunit/mapper/TargetPageMapperTest.php b/Echo/tests/phpunit/unit/mapper/TargetPageMapperTest.php index aaba3e3c..eecc3712 100644 --- a/Echo/tests/phpunit/mapper/TargetPageMapperTest.php +++ b/Echo/tests/phpunit/unit/mapper/TargetPageMapperTest.php @@ -1,9 +1,11 @@ <?php +use Wikimedia\Rdbms\IDatabase; + /** - * @covers EchoTargetPageMapper + * @covers \EchoTargetPageMapper */ -class EchoTargetPageMapperTest extends MediaWikiTestCase { +class EchoTargetPageMapperTest extends MediaWikiUnitTestCase { public function provideDataTestInsert() { return [ @@ -17,11 +19,6 @@ class EchoTargetPageMapperTest extends MediaWikiTestCase { [ 'insert' => true, 'insertId' => 2 ], 2 ], - [ - 'unsuccessful insert', - [ 'insert' => false, 'insertId' => 2 ], - false - ], ]; } @@ -58,7 +55,7 @@ class EchoTargetPageMapperTest extends MediaWikiTestCase { * Mock object of MWEchoDbFactory */ protected function mockMWEchoDbFactory( $dbResult ) { - $dbFactory = $this->getMockBuilder( 'MWEchoDbFactory' ) + $dbFactory = $this->getMockBuilder( MWEchoDbFactory::class ) ->disableOriginalConstructor() ->getMock(); $dbFactory->expects( $this->any() ) @@ -79,9 +76,7 @@ class EchoTargetPageMapperTest extends MediaWikiTestCase { 'select' => '', 'delete' => '' ]; - $db = $this->getMockBuilder( 'DatabaseMysqli' ) - ->disableOriginalConstructor() - ->getMock(); + $db = $this->createMock( IDatabase::class ); $db->expects( $this->any() ) ->method( 'insert' ) ->will( $this->returnValue( $dbResult['insert'] ) ); diff --git a/Echo/tests/phpunit/model/TargetPageTest.php b/Echo/tests/phpunit/unit/model/TargetPageTest.php index f925cfeb..565f5f94 100644 --- a/Echo/tests/phpunit/model/TargetPageTest.php +++ b/Echo/tests/phpunit/unit/model/TargetPageTest.php @@ -1,9 +1,9 @@ <?php /** - * @covers EchoTargetPage + * @covers \EchoTargetPage */ -class EchoTargetPageTest extends MediaWikiTestCase { +class EchoTargetPageTest extends MediaWikiUnitTestCase { public function testCreate() { $this->assertNull( @@ -14,7 +14,7 @@ class EchoTargetPageTest extends MediaWikiTestCase { ); $this->assertInstanceOf( - 'EchoTargetPage', + EchoTargetPage::class, EchoTargetPage::create( $this->mockTitle( 1 ), $this->mockEchoEvent() @@ -22,31 +22,32 @@ class EchoTargetPageTest extends MediaWikiTestCase { ); } + /** + * @return EchoTargetPage + */ public function testNewFromRow() { $row = (object)[ 'etp_page' => 2, 'etp_event' => 3 ]; $obj = EchoTargetPage::newFromRow( $row ); - $this->assertInstanceOf( 'EchoTargetPage', $obj ); + $this->assertInstanceOf( EchoTargetPage::class, $obj ); return $obj; } - /** - * @expectedException MWException - */ public function testNewFromRowWithException() { $row = (object)[ 'etp_event' => 3 ]; - $this->assertInstanceOf( 'EchoTargetPage', EchoTargetPage::newFromRow( $row ) ); + $this->expectException( MWException::class ); + EchoTargetPage::newFromRow( $row ); } /** * @depends testNewFromRow */ - public function testToDbArray( $obj ) { + public function testToDbArray( EchoTargetPage $obj ) { $row = $obj->toDbArray(); $this->assertTrue( is_array( $row ) ); @@ -59,10 +60,10 @@ class EchoTargetPageTest extends MediaWikiTestCase { } /** - * Mock object of Title + * @return Title */ protected function mockTitle( $pageId ) { - $event = $this->getMockBuilder( 'Title' ) + $event = $this->getMockBuilder( Title::class ) ->disableOriginalConstructor() ->getMock(); $event->expects( $this->any() ) @@ -73,10 +74,10 @@ class EchoTargetPageTest extends MediaWikiTestCase { } /** - * Mock object of EchoEvent + * @return EchoEvent */ protected function mockEchoEvent( $eventId = 1 ) { - $event = $this->getMockBuilder( 'EchoEvent' ) + $event = $this->getMockBuilder( EchoEvent::class ) ->disableOriginalConstructor() ->getMock(); $event->expects( $this->any() ) diff --git a/Echo/tests/qunit/.eslintrc.json b/Echo/tests/qunit/.eslintrc.json index 348a1b7f..1b7ccf1c 100644 --- a/Echo/tests/qunit/.eslintrc.json +++ b/Echo/tests/qunit/.eslintrc.json @@ -1,6 +1,11 @@ { "extends": [ - "wikimedia/qunit", - "../../.eslintrc.json" - ] + "wikimedia/qunit" + ], + "rules": { + "no-jquery/no-class-state": "off", + "no-jquery/no-parse-html-literal": "off", + "no-jquery/no-global-selector": "off", + "no-jquery/no-sizzle": "off" + } } diff --git a/Echo/tests/qunit/mobile/index.js b/Echo/tests/qunit/mobile/index.js new file mode 100644 index 00000000..d1dc108f --- /dev/null +++ b/Echo/tests/qunit/mobile/index.js @@ -0,0 +1,7 @@ +mw.template.add( 'ext.echo.mobile', 'NotificationBadge.mustache', + mw.template.get( 'test.Echo', 'NotificationBadge.mustache' ).getSource() +); + +mw.loader.using( 'mobile.startup' ).then( function () { + require( './test_NotificationBadge.js' ); +} ); diff --git a/Echo/tests/qunit/mobile/test_NotificationBadge.js b/Echo/tests/qunit/mobile/test_NotificationBadge.js new file mode 100644 index 00000000..02304ec6 --- /dev/null +++ b/Echo/tests/qunit/mobile/test_NotificationBadge.js @@ -0,0 +1,76 @@ +( function ( M ) { + var OverlayManager = M.require( 'mobile.startup' ).OverlayManager, + NotificationBadge = require( '../../../modules/mobile/NotificationBadge.js' ); + + QUnit.module( 'ext.echo.mobile - NotificationBadge', { + beforeEach: function () { + this.OverlayManager = OverlayManager.getSingleton(); + } + } ); + + QUnit.test( '#setCount', function ( assert ) { + var initialClassExpectationsMet, + badge = new NotificationBadge( { + overlayManager: this.OverlayManager, + hasNotifications: true, + hasUnseenNotifications: true, + notificationCountRaw: 5 + } ); + initialClassExpectationsMet = badge.$el.find( '.mw-ui-icon' ).length === 0 && + badge.$el.find( '.zero' ).length === 0; + + badge.setCount( 0 ); + assert.ok( initialClassExpectationsMet, 'No icon and no zero class' ); + assert.strictEqual( badge.$el.find( '.zero' ).length, 1, 'A zero class is present on the badge' ); + badge.setCount( 105 ); + assert.strictEqual( badge.options.notificationCountRaw, 100, 'Number is capped to 100.' ); + } ); + + QUnit.test( '#setCount (Eastern Arabic numerals)', function ( assert ) { + var badge; + + this.sandbox.stub( mw.language, 'convertNumber' ) + .withArgs( 2 ).returns( '۲' ) + .withArgs( 5 ).returns( '۵' ); + this.sandbox.stub( mw, 'message' ) + .withArgs( 'echo-badge-count', '۵' ).returns( { text: function () { return '۵'; } } ) + .withArgs( 'echo-badge-count', '۲' ).returns( { text: function () { return '۲'; } } ); + + badge = new NotificationBadge( { + overlayManager: this.OverlayManager, + el: $( '<div><a title="n" href="/" class="notification-unseen"><div class="circle" ><span data-notification-count="2">۲</span></div></a></div>' ) + } ); + assert.strictEqual( badge.options.notificationCountRaw, 2, + 'Number is parsed from Eastern Arabic numerals' ); + assert.strictEqual( badge.options.notificationCountString, '۲', + 'Number will be rendered in Eastern Arabic numerals' ); + badge.setCount( 5 ); + assert.strictEqual( badge.options.notificationCountString, '۵', + 'Number will be rendered in Eastern Arabic numerals' ); + } ); + + QUnit.test( '#render [hasUnseenNotifications]', function ( assert ) { + var badge = new NotificationBadge( { + notificationCountRaw: 0, + overlayManager: this.OverlayManager, + hasNotifications: false, + hasUnseenNotifications: false + } ); + assert.strictEqual( badge.$el.find( '.mw-ui-icon' ).length, 1, 'A bell icon is visible' ); + } ); + + QUnit.test( '#markAsSeen', function ( assert ) { + var badge = new NotificationBadge( { + notificationCountRaw: 2, + overlayManager: this.OverlayManager, + hasNotifications: true, + hasUnseenNotifications: true + } ); + // Badge resets counter to zero + badge.setCount( 0 ); + assert.strictEqual( badge.$el.find( '.mw-ui-icon' ).length, 0, 'The bell icon is not visible' ); + badge.markAsSeen(); + assert.strictEqual( badge.$el.find( '.notification-unseen' ).length, 0, + 'Unseen class disappears after markAsSeen called.' ); + } ); +}( mw.mobileFrontend ) ); 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 22a4d59b..1903fa03 100644 --- a/Echo/tests/qunit/model/test_mw.echo.dm.BundleNotificationItem.js +++ b/Echo/tests/qunit/model/test_mw.echo.dm.BundleNotificationItem.js @@ -1,4 +1,4 @@ -( function ( mw ) { +( function () { QUnit.module( 'ext.echo.dm - mw.echo.dm.BundleNotificationItem' ); QUnit.test( 'Constructing the model', function ( assert ) { @@ -114,4 +114,4 @@ 'Bundle is marked as read if all items are read' ); } ); -}( mediaWiki ) ); +}() ); 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 add303e2..d069d3f5 100644 --- a/Echo/tests/qunit/model/test_mw.echo.dm.CrossWikiNotificationItem.js +++ b/Echo/tests/qunit/model/test_mw.echo.dm.CrossWikiNotificationItem.js @@ -1,4 +1,4 @@ -( function ( mw, $ ) { +( function () { var defaults = { getModelName: 'xwiki', getSourceNames: [], @@ -308,4 +308,4 @@ ); } ); -}( mediaWiki, jQuery ) ); +}() ); 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 2bc8146c..21855af0 100644 --- a/Echo/tests/qunit/model/test_mw.echo.dm.FiltersModel.js +++ b/Echo/tests/qunit/model/test_mw.echo.dm.FiltersModel.js @@ -1,4 +1,4 @@ -( function ( mw, $ ) { +( function () { var defaultValues = { getReadState: 'all' }; @@ -107,4 +107,4 @@ ); } ); -}( mediaWiki, jQuery ) ); +}() ); 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 c30a8adc..c71845a5 100644 --- a/Echo/tests/qunit/model/test_mw.echo.dm.NotificationGroupsList.js +++ b/Echo/tests/qunit/model/test_mw.echo.dm.NotificationGroupsList.js @@ -1,4 +1,4 @@ -( function ( mw ) { +( function () { QUnit.module( 'ext.echo.dm - mw.echo.dm.NotificationGroupsList' ); QUnit.test( 'Constructing the model', function ( assert ) { @@ -153,4 +153,4 @@ ); } ); -}( mediaWiki ) ); +}() ); diff --git a/Echo/tests/qunit/model/test_mw.echo.dm.NotificationItem.js b/Echo/tests/qunit/model/test_mw.echo.dm.NotificationItem.js index f49201e4..34003830 100644 --- a/Echo/tests/qunit/model/test_mw.echo.dm.NotificationItem.js +++ b/Echo/tests/qunit/model/test_mw.echo.dm.NotificationItem.js @@ -1,4 +1,4 @@ -( function ( mw, $ ) { +( function () { var fakeData = { type: 'alert', read: true, @@ -143,4 +143,4 @@ ); } ); -}( mediaWiki, jQuery ) ); +}() ); 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 02de8bc4..ef700aa5 100644 --- a/Echo/tests/qunit/model/test_mw.echo.dm.NotificationsList.js +++ b/Echo/tests/qunit/model/test_mw.echo.dm.NotificationsList.js @@ -1,4 +1,4 @@ -( function ( mw, $ ) { +( function () { var defaultValues = { getAllItemIds: [], getAllItemIdsByType: [], @@ -186,4 +186,4 @@ ); } ); -}( mediaWiki, jQuery ) ); +}() ); diff --git a/Echo/tests/qunit/model/test_mw.echo.dm.PaginationModel.js b/Echo/tests/qunit/model/test_mw.echo.dm.PaginationModel.js index 84b6ca7f..52dca12a 100644 --- a/Echo/tests/qunit/model/test_mw.echo.dm.PaginationModel.js +++ b/Echo/tests/qunit/model/test_mw.echo.dm.PaginationModel.js @@ -1,4 +1,4 @@ -( function ( mw, $ ) { +( function () { var defaultValues = { getPageContinue: undefined, getCurrPageIndex: 0, @@ -88,4 +88,4 @@ ); } ); -}( mediaWiki, jQuery ) ); +}() ); diff --git a/Echo/tests/qunit/model/test_mw.echo.dm.SeenTimeModel.js b/Echo/tests/qunit/model/test_mw.echo.dm.SeenTimeModel.js index 6adf1d8d..ce25ae14 100644 --- a/Echo/tests/qunit/model/test_mw.echo.dm.SeenTimeModel.js +++ b/Echo/tests/qunit/model/test_mw.echo.dm.SeenTimeModel.js @@ -1,4 +1,4 @@ -( function ( mw ) { +( function () { QUnit.module( 'ext.echo.dm - mw.echo.dm.SeenTimeModel' ); QUnit.test( 'Constructing the model', function ( assert ) { @@ -53,4 +53,4 @@ 'Update event emitted' ); } ); -}( mediaWiki ) ); +}() ); 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 7c98fc6a..49162632 100644 --- a/Echo/tests/qunit/model/test_mw.echo.dm.SourcePagesModel.js +++ b/Echo/tests/qunit/model/test_mw.echo.dm.SourcePagesModel.js @@ -1,4 +1,4 @@ -( function ( mw ) { +( function () { // Mock partial API response we feed into the model var sources = { local: { @@ -169,4 +169,4 @@ ); } ); -}( mediaWiki ) ); +}() ); 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 42eb47aa..2f2a2a09 100644 --- a/Echo/tests/qunit/model/test_mw.echo.dm.UnreadNotificationCounter.js +++ b/Echo/tests/qunit/model/test_mw.echo.dm.UnreadNotificationCounter.js @@ -1,4 +1,4 @@ -( function ( mw ) { +( function () { QUnit.module( 'ext.echo.dm - mw.echo.dm.UnreadNotificationCounter' ); QUnit.test( 'Returning capped notifications count', function ( assert ) { @@ -82,4 +82,4 @@ 'countChange events emitted.' ); } ); -}( mediaWiki ) ); +}() ); diff --git a/Echo/tests/qunit/overlay/test_ext.echo.overlay.js b/Echo/tests/qunit/overlay/test_ext.echo.overlay.js index aa0518a1..9d54139a 100644 --- a/Echo/tests/qunit/overlay/test_ext.echo.overlay.js +++ b/Echo/tests/qunit/overlay/test_ext.echo.overlay.js @@ -1,4 +1,4 @@ -( function ( $, mw ) { +( function () { QUnit.module( 'ext.echo.overlay', { beforeEach: function () { var ApiStub; @@ -348,4 +348,4 @@ assert.strictEqual( $overlay.find( '.mw-echo-notifications' ).eq( 1 ).is( ':visible' ), true, 'Second tab is now visible.' ); } ); -}( jQuery, mediaWiki ) ); +}() ); diff --git a/Echo/tests/selenium/.eslintrc.json b/Echo/tests/selenium/.eslintrc.json index 5efe15d0..b27406cf 100644 --- a/Echo/tests/selenium/.eslintrc.json +++ b/Echo/tests/selenium/.eslintrc.json @@ -1,14 +1,6 @@ { - "extends": "wikimedia", - "env": { - "es6": true, - "mocha": true, - "node": true - }, - "globals": { - "browser": false - }, - "rules": { - "no-console": 0 - } + "root": true, + "extends": [ + "wikimedia/selenium" + ] } diff --git a/Echo/tests/selenium/README.md b/Echo/tests/selenium/README.md index 59fa8eb4..340fd262 100644 --- a/Echo/tests/selenium/README.md +++ b/Echo/tests/selenium/README.md @@ -1,42 +1,40 @@ # Selenium tests -Please see tests/selenium/README.md file in mediawiki/core repository, usually at mediawiki/vagrant/mediawiki folder. +For more information see https://www.mediawiki.org/wiki/Selenium/Node.js and [PATH]/mediawiki/vagrant/mediawiki/tests/selenium/README.md. ## Setup Set up MediaWiki-Vagrant: - cd mediawiki/vagrant + cd [PATH]/mediawiki/vagrant/mediawiki/extensions/Echo vagrant up vagrant roles enable echo vagrant provision - cd mediawiki npm install -## Start Chromedriver and run all tests +Chromedriver has to run in one terminal window: -Run both mediawiki/core and extension tests from mediawiki/core repository (usually at mediawiki/vagrant/mediawiki folder): - - npm run selenium + chromedriver --url-base=wd/hub --port=4444 -## Start Chromedriver +## Run all specs -To run only some tests, you first have to start Chromedriver in one terminal tab (or window): +In another terminal window: - chromedriver --url-base=wd/hub --port=4444 + npm run selenium-test -## Run test(s) from one file +## [T171963](https://phabricator.wikimedia.org/T171963) `No active login attempt is in progress for your session` -Then, in another terminal tab (or window) run this from mediawiki/core repository (usually at mediawiki/vagrant/mediawiki folder): +If you get this error message when logging in at `127.0.0.1:8080`, the workaround +is to log in at `dev.wiki.local.wmftest.net:8080` - ./node_modules/.bin/wdio tests/selenium/wdio.conf.js --spec extensions/EXTENSION-NAME/tests/selenium/specs/FILE-NAME.js + MW_SERVER=http://dev.wiki.local.wmftest.net:8080 npm run selenium-test -`wdio` is a dependency of mediawiki/core that you have installed with `npm install`. +## Run specific tests -## Run specific test(s) +Filter by file name: -To run only test(s) which name contains string TEST-NAME, run this from mediawiki/core repository (usually at mediawiki/vagrant/mediawiki folder): + npm run selenium-test -- --spec tests/selenium/specs/[FILE-NAME].js - ./node_modules/.bin/wdio tests/selenium/wdio.conf.js --spec extensions/EXTENSION-NAME/tests/selenium/specs/FILE-NAME.js --mochaOpts.grep TEST-NAME +Filter by file name and test name: -Make sure Chromedriver is running when executing the above command. + npm run selenium-test -- --spec tests/selenium/specs/[FILE-NAME.js] --mochaOpts.grep [TEST-NAME] diff --git a/Echo/tests/selenium/pageobjects/echo.page.js b/Echo/tests/selenium/pageobjects/echo.page.js index 13a68e97..f2c087fc 100644 --- a/Echo/tests/selenium/pageobjects/echo.page.js +++ b/Echo/tests/selenium/pageobjects/echo.page.js @@ -3,8 +3,11 @@ 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' ); } + get alerts() { return $( '#pt-notifications-alert' ); } + get notices() { return $( '#pt-notifications-notice' ); } + get alertsFlyout() { return $( '.oo-ui-labelElement-label*=Alerts' ); } + get noticesFlyout() { return $( '.oo-ui-labelElement-label*=Notices' ); } + get alertMessage() { return $( '.mw-echo-ui-notificationItemWidget-content-message-header' ); } } module.exports = new EchoPage(); diff --git a/Echo/tests/selenium/pageobjects/notifications.page.js b/Echo/tests/selenium/pageobjects/notifications.page.js new file mode 100644 index 00000000..7cd5f983 --- /dev/null +++ b/Echo/tests/selenium/pageobjects/notifications.page.js @@ -0,0 +1,13 @@ +'use strict'; + +const Page = require( 'wdio-mediawiki/Page' ); + +class NotificationsPage extends Page { + + get notificationHeading() { return $( '#firstHeading' ); } + open() { + super.openTitle( 'Special:Notifications', { uselang: 'en' } ); + } +} + +module.exports = new NotificationsPage(); diff --git a/Echo/tests/selenium/specs/echo.js b/Echo/tests/selenium/specs/echo.js index 790109d0..4f0d9637 100644 --- a/Echo/tests/selenium/specs/echo.js +++ b/Echo/tests/selenium/specs/echo.js @@ -1,18 +1,62 @@ 'use strict'; -var assert = require( 'assert' ), +const assert = require( 'assert' ), EchoPage = require( '../pageobjects/echo.page' ), - UserLoginPage = require( 'wdio-mediawiki/LoginPage' ); + UserLoginPage = require( 'wdio-mediawiki/LoginPage' ), + Util = require( 'wdio-mediawiki/Util' ), + Api = require( 'wdio-mediawiki/Api' ); describe( 'Echo', function () { + let bot; - it( 'alerts and notices are visible after logging in', function () { + before( async () => { + bot = await Api.bot(); + } ); + + it( 'alerts and notices are visible after logging in @daily', function () { - UserLoginPage.login( browser.options.username, browser.options.password ); + UserLoginPage.login( browser.config.mwUser, browser.config.mwPwd ); assert( EchoPage.alerts.isExisting() ); assert( EchoPage.notices.isExisting() ); } ); + it( 'flyout for alert appears when clicked @daily', function () { + + UserLoginPage.login( browser.config.mwUser, browser.config.mwPwd ); + EchoPage.alerts.click(); + EchoPage.alertsFlyout.waitForDisplayed(); + + assert( EchoPage.alertsFlyout.isExisting() ); + + } ); + + it( 'flyout for notices appears when clicked @daily', function () { + + UserLoginPage.login( browser.config.mwUser, browser.config.mwPwd ); + EchoPage.notices.click(); + EchoPage.noticesFlyout.waitForDisplayed(); + + assert( EchoPage.noticesFlyout.isExisting() ); + + } ); + + it( 'checks for welcome message after signup', function () { + + const username = Util.getTestString( 'NewUser-' ); + const password = Util.getTestString(); + browser.call( async () => { + await Api.createAccount( bot, username, password ); + } ); + UserLoginPage.login( username, password ); + + EchoPage.notices.click(); + + EchoPage.alertMessage.waitForDisplayed(); + const regexp = /Welcome to .*, .*! We're glad you're here./; + assert( regexp.test( EchoPage.alertMessage.getText() ) ); + + } ); + } ); diff --git a/Echo/tests/selenium/specs/mention.js b/Echo/tests/selenium/specs/mention.js new file mode 100644 index 00000000..cef0217a --- /dev/null +++ b/Echo/tests/selenium/specs/mention.js @@ -0,0 +1,32 @@ +'use strict'; + +const assert = require( 'assert' ), + EchoPage = require( '../pageobjects/echo.page' ), + UserLoginPage = require( 'wdio-mediawiki/LoginPage' ), + Util = require( 'wdio-mediawiki/Util' ), + Api = require( 'wdio-mediawiki/Api' ); + +describe( 'Mention test for Echo', function () { + let bot; + + before( async () => { + bot = await Api.bot(); + } ); + it.skip( 'checks if admin gets alert when mentioned', function () { + + const username = Util.getTestString( 'NewUser-' ); + const password = Util.getTestString(); + browser.call( async () => { + await Api.createAccount( bot, username, password ); + await bot.edit( `User:${username}`, `Hello [[User:${browser.config.mwUser}]] ~~~~`, username, password ); + } ); + UserLoginPage.login( browser.config.mwUser, browser.config.mwPwd ); + + EchoPage.alerts.click(); + + EchoPage.alertMessage.waitForDisplayed(); + const regexp = /.* mentioned you on User:.*./; + assert( regexp.test( EchoPage.alertMessage.getText() ) ); + } ); + +} ); diff --git a/Echo/tests/selenium/specs/notifications.js b/Echo/tests/selenium/specs/notifications.js new file mode 100644 index 00000000..c2b37188 --- /dev/null +++ b/Echo/tests/selenium/specs/notifications.js @@ -0,0 +1,18 @@ +'use strict'; + +const assert = require( 'assert' ), + NotificationsPage = require( '../pageobjects/notifications.page' ), + UserLoginPage = require( 'wdio-mediawiki/LoginPage' ); + +describe( 'Notifications', function () { + + it( 'checks for Notifications Page @daily', function () { + + UserLoginPage.login( browser.config.mwUser, browser.config.mwPwd ); + NotificationsPage.open(); + + assert.strictEqual( NotificationsPage.notificationHeading.getText(), 'Notifications' ); + + } ); + +} ); diff --git a/Echo/tests/selenium/wdio.conf.js b/Echo/tests/selenium/wdio.conf.js index 3b58beb6..196cd227 100644 --- a/Echo/tests/selenium/wdio.conf.js +++ b/Echo/tests/selenium/wdio.conf.js @@ -1,3 +1,5 @@ +'use strict'; + /** * See also: http://webdriver.io/guide/testrunner/configurationfile.html */ @@ -12,8 +14,8 @@ exports.config = { // Defaults are for convenience with MediaWiki-Vagrant // Wiki admin - username: process.env.MEDIAWIKI_USER || 'Admin', - password: process.env.MEDIAWIKI_PASSWORD || 'vagrant', + mwUser: process.env.MEDIAWIKI_USER || 'Admin', + mwPwd: process.env.MEDIAWIKI_PASSWORD || 'vagrant', // Base for browser.url() and Page#openTitle() baseUrl: ( process.env.MW_SERVER || 'http://127.0.0.1:8080' ) + ( @@ -34,7 +36,7 @@ exports.config = { // https://sites.google.com/a/chromium.org/chromedriver/capabilities browserName: 'chrome', maxInstances: 1, - chromeOptions: { + 'goog: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 @@ -79,9 +81,8 @@ exports.config = { * @param {Object} test Mocha Test object */ afterTest: function ( test ) { - var filePath; if ( !test.passed ) { - filePath = saveScreenshot( test.title ); + const filePath = saveScreenshot( test.title ); console.log( '\n\tScreenshot: ' + filePath + '\n' ); } } diff --git a/Echo/version b/Echo/version deleted file mode 100644 index d72acd1b..00000000 --- a/Echo/version +++ /dev/null @@ -1,4 +0,0 @@ -Echo: REL1_32 -2018-12-17T10:03:49 - -335389f |