"extends": "wikimedia",
"env": {
"browser": true,
- "jquery": true,
- "qunit": true
+ "jquery": true
},
"globals": {
"require": false,
{
+ "extends": "stylelint-config-wikimedia",
"rules": {
- "color-hex-case": [ "lower" ],
- "color-hex-length": [ "short" ],
- "color-named": [ "never" ],
- "color-no-invalid-hex": true,
+ "declaration-no-important": null,
- "declaration-bang-space-after": [ "never" ],
- "declaration-bang-space-before": [ "always" ],
- "declaration-colon-space-after": [ "always" ],
- "declaration-colon-space-before": [ "never" ],
+ "no-descending-specificity": null,
- "font-family-name-quotes": [ "always-unless-keyword" ],
- "font-weight-notation": [ "named-where-possible" ],
+ "selector-no-id": null,
+ "selector-pseudo-element-colon-notation": null,
- "function-calc-no-unspaced-operator": true,
- "function-comma-newline-after": "never-multi-line",
- "function-comma-newline-before": "never-multi-line",
- "function-comma-space-after": [ "always" ],
- "function-comma-space-before": [ "never" ],
- "function-parentheses-newline-inside": [ "never-multi-line" ],
- "function-parentheses-space-inside": [ "always" ],
- "function-url-quotes": [ "never" ],
- "function-whitespace-after": [ "always" ],
+ "string-quotes": null,
+
+ "value-keyword-case": null
}
}
# complement that setup by testing MediaWiki on travis
#
language: php
+# Use the slower sudo-enabled VMs instead of fast containers:
+# - Package 'djvulibre-bin' is not yet whitelisted for trusty containers.
+# https://github.com/travis-ci/apt-package-whitelist/issues/4036
+sudo: required
+# Use Trusty instead of Travis default (precise)
+# - Required in order to use HHVM 3.6 or higher.
+# - Required for non-buggy xml library for XmlTypeCheck/UploadBaseTest (T75176).
+dist: trusty
matrix:
fast_finish: true
include:
- - env: dbtype=mysql
+ # On Trusty, mysql user 'travis' doesn't have create database rights
+ # Postgres has no user called 'root'.
+ - env: dbtype=mysql dbuser=root
php: 5.5
- - env: dbtype=postgres
+ - env: dbtype=postgres dbuser=travis
php: 5.5
- - env: dbtype=mysql
- php: hhvm
- - env: dbtype=mysql
+ - env: dbtype=mysql dbuser=root
+ # https://docs.travis-ci.com/user/languages/php#HHVM-versions
+ # https://github.com/travis-ci/travis-ci/issues/7368
+ php: hhvm-3.12
+ - env: dbtype=mysql dbuser=root
php: 7
services:
branches:
# Test changes in master and arbitrary Travis CI branches only.
# The latter allows developers to enable Travis CI in their GitHub fork of
- # wikimedia/mediawiki and then push changes they like to test to branches like
+ # wikimedia/mediawiki and then push changes for testing to branches like
# "travis-ci/test-this-awesome-change".
only:
- master
- /^travis-ci\/.*$/
-before_install:
- - sudo apt-get install -qq djvulibre-bin tidy
- - composer self-update --quiet --no-interaction
+addons:
+ apt:
+ packages:
+ - djvulibre-bin
+ - tidy
before_script:
- composer install --prefer-source --quiet --no-interaction
--pass travis
--dbtype "$dbtype"
--dbname traviswiki
- --dbuser travis
+ --dbuser "$dbuser"
--dbpass ""
--scriptpath "/w"
all: [
'**/*.js',
'!docs/**',
- '!tests/**',
'!node_modules/**',
'!resources/lib/**',
'!resources/src/jquery.tipsy/**',
'!resources/src/jquery/jquery.farbtastic.js',
'!resources/src/mediawiki.libs/**',
+ // Third-party code of PHPUnit coverage report
+ '!tests/coverage/**',
'!vendor/**',
// Explicitly say "**/*.js" here in case of symlinks
'!extensions/**/*.js',
options: {
syntax: 'less'
},
- src: '{resources/src/*,mw-config/**}/*.{css,less}'
+ src: '{resources/src,mw-config}/**/*.{css,less}'
},
watch: {
files: [
= MediaWiki 1.27 =
+== MediaWiki 1.27.1 ==
+
+This is a maintenance release of the MediaWiki 1.27 branch.
+
+=== Changes since 1.27.0 ===
+* BREAKING CHANGE: $wgHTTPProxy is now *required* for all external requests
+ made by MediaWiki via a proxy. Relying on the http_proxy environment
+ variable is no longer supported.
+* (T139565) SECURITY: API: Generate head items in the context of the given title
+* (T137264) SECURITY: XSS in unclosed internal links
+* (T133147) SECURITY: Escape '<' and ']]>' in inline <style> blocks
+* (T133147) SECURITY: Require login to preview user CSS pages
+* (T132926) SECURITY: Do not allow undeleting a revision deleted file if it is
+ the top file
+* (T129738) SECURITY: Make $wgBlockDisablesLogin also restrict logged in
+ permissions
+* (T129738) SECURITY: Make blocks log users out if $wgBlockDisablesLogin is true
+* (T115333) SECURITY: Check read permission when loading page content in ApiParse
+* (T57548) Remove support for $wgWellFormedXml = false, all output is now well formed
+* (T139670) Move 'UserGetRights' call before application of Session::getAllowedUserRights()
+
== MediaWiki 1.27.0 ==
=== PHP version requirement in 1.27 ===
* ApiMain::addFormat() was removed (deprecated in 1.21).
* ApiMain::getFormats() was removed (deprecated in 1.21).
* ApiPageSet::finishPageSetGeneration() was removed (deprecated in 1.21).
-* ApiCreateAccount is deprecated, and will be removed soon.
+* ApiCreateAccount was removed.
=== Languages updated in 1.27 ===
= MediaWiki 1.26 =
+== MediaWiki 1.26.4 ==
+
+This is a maintenance release of the MediaWiki 1.26 branch.
+
+=== Changes since 1.26.3 ===
+* BREAKING CHANGE: $wgHTTPProxy is now *required* for all external requests
+ made by MediaWiki via a proxy. Relying on the http_proxy environment
+ variable is no longer supported.
+* (T124163) Fixed fatal error in DifferenceEngine under HHVM.
+* (T139565) SECURITY: API: Generate head items in the context of the given title
+* (T137264) SECURITY: XSS in unclosed internal links
+* (T133147) SECURITY: Escape '<' and ']]>' in inline <style> blocks
+* (T133147) SECURITY: Require login to preview user CSS pages
+* (T132926) SECURITY: Do not allow undeleting a revision deleted file if it is
+ the top file
+* (T129738) SECURITY: Make $wgBlockDisablesLogin also restrict logged in
+ permissions
+* (T129738) SECURITY: Make blocks log users out if $wgBlockDisablesLogin is true
+* (T115333) SECURITY: Check read permission when loading page content in ApiParse
+* Remove support for $wgWellFormedXml = false, all output is now well formed
+
+== MediaWiki 1.26.3 ==
+
+This is a maintenance release of the MediaWiki 1.26 branch.
+
+=== Changes since 1.26.2 ===
+* (T116266) Fixed undefined property notices in DairikiDiff under HHVM.
+* (T123166) Fix fatal error when importing pages to titles which cannot be
+ created, such as invalid titles or titles the user is not allowed to edit.
+* (T122056) Old tokens are remaining valid within a new session
+* (T127114) Login throttle can be tricked using non-canonicalized usernames
+* (T123653) Cross-domain policy regexp is too narrow
+* (T123071) Incorrectly identifying http link in a's href attributes, due to
+ m modifier in regex
+* (T129506) MediaWiki:Gadget-popups.js isn't renderable
+* (T125283) Users occasionally logged in as different users after
+ SessionManager deployment
+* (T103239) Patrol allows click catching and patrolling of any page
+* (T122807) [tracking] Check php crypto primatives
+* (T98313) Graphs can leak tokens, leading to CSRF
+* (T130947) Diff generation should use PoolCounter
+* (T133507) Careless use of $wgExternalLinkTarget is insecure
+* (T132874) API action=move is not rate limited
+* (T110143) strip markers can be used to get around html attribute escaping in
+ (many?) parser tags
+* (T116030) Increase pbkdf2 parameter strengths
+* (T127420) Pbkdf2Password does not check if hash_pbkdf2() succeeded
+* (T126685) Globally throttle password attempts
+
== MediaWiki 1.26.2 ==
This is a maintenance release of the MediaWiki 1.26 branch.
= MediaWiki 1.25 =
+== MediaWiki 1.25.6 ==
+
+This is a maintenance release of the MediaWiki 1.25 branch.
+
+=== Changes since 1.25.5 ===
+* (T123166) Fix fatal error when importing pages to titles which cannot be
+ created, such as invalid titles or titles the user is not allowed to edit.
+* (T122056) Old tokens are remaining valid within a new session
+* (T127114) Login throttle can be tricked using non-canonicalized usernames
+* (T123653) Cross-domain policy regexp is too narrow
+* (T123071) Incorrectly identifying http link in a's href attributes, due to
+ m modifier in regex
+* (T129506) MediaWiki:Gadget-popups.js isn't renderable
+* (T125283) Users occasionally logged in as different users after
+ SessionManager deployment
+* (T103239) Patrol allows click catching and patrolling of any page
+* (T122807) [tracking] Check php crypto primatives
+* (T98313) Graphs can leak tokens, leading to CSRF
+* (T130947) Diff generation should use PoolCounter
+* (T133507) Careless use of $wgExternalLinkTarget is insecure
+* (T132874) API action=move is not rate limited
+* (T110143) strip markers can be used to get around html attribute escaping in
+ (many?) parser tags
+* (T116030) Increase pbkdf2 parameter strengths
+* (T127420) Pbkdf2Password does not check if hash_pbkdf2() succeeded
+* (T126685) Globally throttle password attempts
+
== MediaWiki 1.25.5 ==
This is a maintenance release of the MediaWiki 1.25 branch.
= MediaWiki 1.23 =
+== MediaWiki 1.23.15 ==
+
+This is a maintenance release of the MediaWiki 1.23 branch.
+
+=== Changes since 1.23.14 ===
+* BREAKING CHANGE: $wgHTTPProxy is now *required* for all external requests
+ made by MediaWiki via a proxy. Relying on the http_proxy environment
+ variable is no longer supported.
+* (T139565) SECURITY: API: Generate head items in the context of the given title
+* (T137264) SECURITY: XSS in unclosed internal links
+* (T133147) SECURITY: Escape '<' and ']]>' in inline <style> blocks
+* (T133147) SECURITY: Require login to preview user CSS pages
+* (T132926) SECURITY: Do not allow undeleting a revision deleted file if it is
+ the top file
+* (T129738) SECURITY: Make $wgBlockDisablesLogin also restrict logged in
+ permissions
+* (T129738) SECURITY: Make blocks log users out if $wgBlockDisablesLogin is true
+* (T115333) SECURITY: Check read permission when loading page content in ApiParse
+* Remove support for $wgWellFormedXml = false, all output is now well formed
+
== MediaWiki 1.23.13 ==
This is a maintenance release of the MediaWiki 1.23 branch.
* A temporary feature flag, $wgDisableUserGroupExpiry, is provided to disable
new features that rely on the schema changes to the user_groups table. This
feature flag will likely be removed before 1.29 is released.
+* (T158474) "Unknown user" has been added to $wgReservedUsernames.
+* (T156983) $wgRateLimitsExcludedIPs now accepts CIDR ranges as well as single IPs.
=== New features in 1.29 ===
* (T5233) A cookie can now be set when a user is autoblocked, to track that user
* Updated QUnit from v1.22.0 to v1.23.1.
* Updated cssjanus from v1.1.2 to 1.1.3.
* Updated psr/log from v1.0.0 to v1.0.2.
+* Update Moment.js from v2.8.4 to v2.15.0.
==== New external libraries ====
'ActiveUsersPager' => __DIR__ . '/includes/specials/pagers/ActiveUsersPager.php',
'ActivityUpdateJob' => __DIR__ . '/includes/jobqueue/jobs/ActivityUpdateJob.php',
'AddRFCAndPMIDInterwiki' => __DIR__ . '/maintenance/addRFCandPMIDInterwiki.php',
+ 'AddSite' => __DIR__ . '/maintenance/addSite.php',
'AjaxDispatcher' => __DIR__ . '/includes/AjaxDispatcher.php',
'AjaxResponse' => __DIR__ . '/includes/AjaxResponse.php',
'AllMessagesTablePager' => __DIR__ . '/includes/specials/pagers/AllMessagesTablePager.php',
'ClearInterwikiCache' => __DIR__ . '/maintenance/clearInterwikiCache.php',
'CliInstaller' => __DIR__ . '/includes/installer/CliInstaller.php',
'CloneDatabase' => __DIR__ . '/includes/db/CloneDatabase.php',
+ 'CodeCleanerGlobalsPass' => __DIR__ . '/maintenance/CodeCleanerGlobalsPass.inc',
'CodeContentHandler' => __DIR__ . '/includes/content/CodeContentHandler.php',
'Collation' => __DIR__ . '/includes/collation/Collation.php',
'CollationCkb' => __DIR__ . '/includes/collation/CollationCkb.php',
'FindHooks' => __DIR__ . '/maintenance/findHooks.php',
'FindMissingFiles' => __DIR__ . '/maintenance/findMissingFiles.php',
'FindOrphanedFiles' => __DIR__ . '/maintenance/findOrphanedFiles.php',
- 'FixBug20757' => __DIR__ . '/maintenance/storage/fixBug20757.php',
'FixDefaultJsonContentPages' => __DIR__ . '/maintenance/fixDefaultJsonContentPages.php',
'FixDoubleRedirects' => __DIR__ . '/maintenance/fixDoubleRedirects.php',
'FixExtLinksProtocolRelative' => __DIR__ . '/maintenance/fixExtLinksProtocolRelative.php',
+ 'FixT22757' => __DIR__ . '/maintenance/storage/fixT22757.php',
'FixTimestamps' => __DIR__ . '/maintenance/fixTimestamps.php',
'FixUserRegistration' => __DIR__ . '/maintenance/fixUserRegistration.php',
'ForeignAPIFile' => __DIR__ . '/includes/filerepo/file/ForeignAPIFile.php',
'MediaTransformOutput' => __DIR__ . '/includes/media/MediaTransformOutput.php',
'MediaWiki' => __DIR__ . '/includes/MediaWiki.php',
'MediaWikiI18N' => __DIR__ . '/includes/skins/MediaWikiI18N.php',
+ 'MediaWikiShell' => __DIR__ . '/maintenance/shell.php',
'MediaWikiSite' => __DIR__ . '/includes/site/MediaWikiSite.php',
'MediaWikiTitleCodec' => __DIR__ . '/includes/title/MediaWikiTitleCodec.php',
'MediaWikiVersionFetcher' => __DIR__ . '/includes/MediaWikiVersionFetcher.php',
'MediaWiki\\Auth\\UsernameAuthenticationRequest' => __DIR__ . '/includes/auth/UsernameAuthenticationRequest.php',
'MediaWiki\\Diff\\ComplexityException' => __DIR__ . '/includes/diff/ComplexityException.php',
'MediaWiki\\Diff\\WordAccumulator' => __DIR__ . '/includes/diff/WordAccumulator.php',
+ 'MediaWiki\\HeaderCallback' => __DIR__ . '/includes/HeaderCallback.php',
'MediaWiki\\Interwiki\\ClassicInterwikiLookup' => __DIR__ . '/includes/interwiki/ClassicInterwikiLookup.php',
'MediaWiki\\Interwiki\\InterwikiLookup' => __DIR__ . '/includes/interwiki/InterwikiLookup.php',
'MediaWiki\\Interwiki\\InterwikiLookupAdapter' => __DIR__ . '/includes/interwiki/InterwikiLookupAdapter.php',
'MoveLogFormatter' => __DIR__ . '/includes/logging/MoveLogFormatter.php',
'MovePage' => __DIR__ . '/includes/MovePage.php',
'MovePageForm' => __DIR__ . '/includes/specials/SpecialMovepage.php',
- 'MssqlField' => __DIR__ . '/includes/libs/rdbms/field/MssqlField.php',
'MssqlInstaller' => __DIR__ . '/includes/installer/MssqlInstaller.php',
'MssqlResultWrapper' => __DIR__ . '/includes/libs/rdbms/database/resultwrapper/MssqlResultWrapper.php',
'MssqlUpdater' => __DIR__ . '/includes/installer/MssqlUpdater.php',
'MutableConfig' => __DIR__ . '/includes/config/MutableConfig.php',
'MutableContext' => __DIR__ . '/includes/context/MutableContext.php',
'MwSql' => __DIR__ . '/maintenance/sql.php',
- 'MySQLField' => __DIR__ . '/includes/libs/rdbms/field/MySQLField.php',
'MySqlLockManager' => __DIR__ . '/includes/filebackend/lockmanager/MySqlLockManager.php',
'MysqlInstaller' => __DIR__ . '/includes/installer/MysqlInstaller.php',
'MysqlUpdater' => __DIR__ . '/includes/installer/MysqlUpdater.php',
'NullStatsdDataFactory' => __DIR__ . '/includes/libs/stats/NullStatsdDataFactory.php',
'NumericUppercaseCollation' => __DIR__ . '/includes/collation/NumericUppercaseCollation.php',
'OOUIHTMLForm' => __DIR__ . '/includes/htmlform/OOUIHTMLForm.php',
- 'ORAField' => __DIR__ . '/includes/libs/rdbms/field/ORAField.php',
- 'ORAResult' => __DIR__ . '/includes/db/DatabaseOracle.php',
+ 'ORAField' => __DIR__ . '/includes/db/ORAField.php',
+ 'ORAResult' => __DIR__ . '/includes/db/ORAResult.php',
'ObjectCache' => __DIR__ . '/includes/objectcache/ObjectCache.php',
'ObjectFactory' => __DIR__ . '/includes/libs/ObjectFactory.php',
'OldChangesList' => __DIR__ . '/includes/changes/OldChangesList.php',
'PopulateRevisionLength' => __DIR__ . '/maintenance/populateRevisionLength.php',
'PopulateRevisionSha1' => __DIR__ . '/maintenance/populateRevisionSha1.php',
'PostgreSqlLockManager' => __DIR__ . '/includes/libs/lockmanager/PostgreSqlLockManager.php',
- 'PostgresField' => __DIR__ . '/includes/libs/rdbms/field/PostgresField.php',
'PostgresInstaller' => __DIR__ . '/includes/installer/PostgresInstaller.php',
'PostgresUpdater' => __DIR__ . '/includes/installer/PostgresUpdater.php',
'Preferences' => __DIR__ . '/includes/Preferences.php',
'RowUpdateGenerator' => __DIR__ . '/includes/utils/RowUpdateGenerator.php',
'RunJobs' => __DIR__ . '/maintenance/runJobs.php',
'RunningStat' => __DIR__ . '/includes/compat/RunningStatCompat.php',
- 'SQLiteField' => __DIR__ . '/includes/libs/rdbms/field/SQLiteField.php',
'SVGMetadataExtractor' => __DIR__ . '/includes/media/SVGMetadataExtractor.php',
'SVGReader' => __DIR__ . '/includes/media/SVGMetadataExtractor.php',
'SamplingStatsdClient' => __DIR__ . '/includes/libs/stats/SamplingStatsdClient.php',
'Wikimedia\\Rdbms\\ConnectionManager' => __DIR__ . '/includes/libs/rdbms/connectionmanager/ConnectionManager.php',
'Wikimedia\\Rdbms\\DBMasterPos' => __DIR__ . '/includes/libs/rdbms/database/position/DBMasterPos.php',
'Wikimedia\\Rdbms\\DatabaseDomain' => __DIR__ . '/includes/libs/rdbms/database/DatabaseDomain.php',
+ 'Wikimedia\\Rdbms\\Field' => __DIR__ . '/includes/libs/rdbms/field/Field.php',
'Wikimedia\\Rdbms\\IBlob' => __DIR__ . '/includes/libs/rdbms/encasing/IBlob.php',
'Wikimedia\\Rdbms\\ILBFactory' => __DIR__ . '/includes/libs/rdbms/lbfactory/ILBFactory.php',
'Wikimedia\\Rdbms\\ILoadBalancer' => __DIR__ . '/includes/libs/rdbms/loadbalancer/ILoadBalancer.php',
'Wikimedia\\Rdbms\\LBFactorySimple' => __DIR__ . '/includes/libs/rdbms/lbfactory/LBFactorySimple.php',
'Wikimedia\\Rdbms\\LBFactorySingle' => __DIR__ . '/includes/libs/rdbms/lbfactory/LBFactorySingle.php',
'Wikimedia\\Rdbms\\LikeMatch' => __DIR__ . '/includes/libs/rdbms/encasing/LikeMatch.php',
+ 'Wikimedia\\Rdbms\\LoadBalancer' => __DIR__ . '/includes/libs/rdbms/loadbalancer/LoadBalancer.php',
+ 'Wikimedia\\Rdbms\\LoadBalancerSingle' => __DIR__ . '/includes/libs/rdbms/loadbalancer/LoadBalancerSingle.php',
'Wikimedia\\Rdbms\\LoadMonitor' => __DIR__ . '/includes/libs/rdbms/loadmonitor/LoadMonitor.php',
'Wikimedia\\Rdbms\\LoadMonitorMySQL' => __DIR__ . '/includes/libs/rdbms/loadmonitor/LoadMonitorMySQL.php',
'Wikimedia\\Rdbms\\LoadMonitorNull' => __DIR__ . '/includes/libs/rdbms/loadmonitor/LoadMonitorNull.php',
'Wikimedia\\Rdbms\\MssqlBlob' => __DIR__ . '/includes/libs/rdbms/encasing/MssqlBlob.php',
+ 'Wikimedia\\Rdbms\\MssqlField' => __DIR__ . '/includes/libs/rdbms/field/MssqlField.php',
+ 'Wikimedia\\Rdbms\\MySQLField' => __DIR__ . '/includes/libs/rdbms/field/MySQLField.php',
'Wikimedia\\Rdbms\\MySQLMasterPos' => __DIR__ . '/includes/libs/rdbms/database/position/MySQLMasterPos.php',
'Wikimedia\\Rdbms\\PostgresBlob' => __DIR__ . '/includes/libs/rdbms/encasing/PostgresBlob.php',
+ 'Wikimedia\\Rdbms\\PostgresField' => __DIR__ . '/includes/libs/rdbms/field/PostgresField.php',
+ 'Wikimedia\\Rdbms\\SQLiteField' => __DIR__ . '/includes/libs/rdbms/field/SQLiteField.php',
'Wikimedia\\Rdbms\\SessionConsistentConnectionManager' => __DIR__ . '/includes/libs/rdbms/connectionmanager/SessionConsistentConnectionManager.php',
'Wikimedia\\Rdbms\\TransactionProfiler' => __DIR__ . '/includes/libs/rdbms/TransactionProfiler.php',
'WikitextContent' => __DIR__ . '/includes/content/WikitextContent.php',
"phpunit/phpunit": "4.8.31",
"wikimedia/avro": "1.7.7",
"hamcrest/hamcrest-php": "^2.0",
- "wmde/hamcrest-html-matchers": "^0.1.0"
+ "wmde/hamcrest-html-matchers": "^0.1.0",
+ "psy/psysh": "0.8.1"
},
"suggest": {
"ext-apc": "Local data and opcode cache",
$path = "/" . $path;
}
- // Check for bug 28235: QUERY_STRING overriding the correct extension
+ // Check for T30235: QUERY_STRING overriding the correct extension
$whitelist = [];
$extension = FileBackend::extensionFromPath( $path, 'rawcase' );
if ( $extension != '' ) {
}
# Be aware that the != '' check is explicit, since empty values will be
- # passed by some callers (bug 29116)
+ # passed by some callers (T31116)
if ( $vagueTarget != '' ) {
list( $target, $type ) = self::parseTarget( $vagueTarget );
switch ( $type ) {
if ( $end === null ) {
$end = $start;
}
- # Per bug 14634, we want to include relevant active rangeblocks; for
+ # Per T16634, we want to include relevant active rangeblocks; for
# rangeblocks, we want to include larger ranges which enclose the given
# range. We know that all blocks must be smaller than $wgBlockCIDRLimit,
# so we can improve performance by filtering on a LIKE clause
$affected = $dbw->affectedRows();
if ( $this->isAutoblocking() ) {
- // update corresponding autoblock(s) (bug 48813)
+ // update corresponding autoblock(s) (T50813)
$dbw->update(
'ipblocks',
$this->getAutoblockUpdateArray(),
} elseif ( $target === null && $vagueTarget == '' ) {
# We're not going to find anything useful here
# Be aware that the == '' check is explicit, since empty values will be
- # passed by some callers (bug 29116)
+ # passed by some callers (T31116)
return null;
} elseif ( in_array(
$this->mSubcats = $row->cat_subcats;
$this->mFiles = $row->cat_files;
- # (bug 13683) If the count is negative, then 1) it's obviously wrong
+ # (T15683) If the count is negative, then 1) it's obviously wrong
# and should not be kept, and 2) we *probably* don't have to scan many
# rows to obtain the correct figure, so let's risk a one-time recount.
if ( $this->mPages < 0 || $this->mSubcats < 0 || $this->mFiles < 0 ) {
* to reduce disk usage, limits can only be selected from a list.
* The user preference is saved as an array offset in the database, by default
* the offset is set with $wgDefaultUserOptions['imagesize']. Make sure you
- * change it if you alter the array (see bug 8858).
+ * change it if you alter the array (see T10858).
* This is the list of settings the user can choose from:
*/
$wgImageLimits = [
*
* Currently this appears to work fine in all browsers, but it's disabled by
* default because it normalizes id's a bit too aggressively, breaking preexisting
- * content (particularly Cite). See bug 27733, bug 27694, bug 27474.
+ * content (particularly Cite). See T29733, T29694, T29474.
*/
$wgExperimentalHtmlIds = false;
* Attempting to create a redirect to any of the pages in this array
* will make the redirect fail.
* Userlogout is hard-coded, so it does not need to be listed here.
- * (bug 10569) Disallow Mypage and Mytalk as well.
+ * (T12569) Disallow Mypage and Mytalk as well.
*
* As of now, this only checks special pages. Redirects to pages in
* other namespaces cannot be invalidated by this variable.
'Maintenance script', // Maintenance scripts which perform editing, image import script
'Template namespace initialisation script', // Used in 1.2->1.3 upgrade
'ScriptImporter', // Default user name used by maintenance/importSiteScripts.php
+ 'Unknown user', // Used in WikiImporter when importing revisions with no author
'msg:double-redirect-fixer', // Automatic double redirect fix
'msg:usermessage-editor', // Default user for leaving user messages
'msg:proxyblocker', // For $wgProxyList and Special:Blockme (removed in 1.22)
];
/**
- * Array of IPs which should be excluded from rate limits.
+ * Array of IPs / CIDR ranges which should be excluded from rate limits.
* This may be useful for whitelisting NAT gateways for conferences, etc.
*/
$wgRateLimitsExcludedIPs = [];
/**
* Port where you have HTTPS running
* Supports HTTPS on non-standard ports
- * @see bug 65184
+ * @see T67184
* @since 1.24
*/
$wgHttpsPort = 443;
$this->recreate = false;
// When creating a new section, we can preload a section title by passing it as the
- // preloadtitle parameter in the URL (Bug 13100)
+ // preloadtitle parameter in the URL (T15100)
if ( $this->section == 'new' && $request->getVal( 'preloadtitle' ) ) {
$this->sectiontitle = $request->getVal( 'preloadtitle' );
// Once wpSummary isn't being use for setting section titles, we should delete this.
$revision = $this->mArticle->getRevisionFetched();
if ( $revision === null ) {
if ( !$this->contentModel ) {
- $this->contentModel = $this->getTitle()->getContentModel();
+ throw new RuntimeException( 'EditPage contentModel was false' );
}
$handler = ContentHandler::getForModelID( $this->contentModel );
if ( $content === false || $content === null ) {
if ( !$this->contentModel ) {
- $this->contentModel = $this->getTitle()->getContentModel();
+ throw new RuntimeException( 'EditPage contentModel was false' );
}
$handler = ContentHandler::getForModelID( $this->contentModel );
// Don't save a new page if it's blank or if it's a MediaWiki:
// message with content equivalent to default (allow empty pages
- // in this case to disable messages, see bug 50124)
+ // in this case to disable messages, see T52124)
$defaultMessageText = $this->mTitle->getDefaultMessageText();
if ( $this->mTitle->getNamespace() === NS_MEDIAWIKI && $defaultMessageText !== false ) {
$defaultText = $defaultMessageText;
}
# Give a notice if the user is editing a deleted/moved page...
if ( !$this->mTitle->exists() ) {
+ $dbr = wfGetDB( DB_REPLICA );
+
LogEventsList::showLogExtract( $wgOut, [ 'delete', 'move' ], $this->mTitle,
'',
[
'lim' => 10,
- 'conds' => [ "log_action != 'revision'" ],
+ 'conds' => [ 'log_action != ' . $dbr->addQuotes( 'revision' ) ],
'showIfEmpty' => false,
'msgKey' => [ 'recreate-moveddeleted-warn' ]
]
if ( $this->hasPresetSummary ) {
// If a summary has been preset using &summary= we don't want to prompt for
// a different summary. Only prompt for a summary if the summary is blanked.
- // (Bug 17416)
+ // (T19416)
$this->autoSumm = md5( '' );
}
}
if ( $oldid ) {
-
- # $diffText = $de->getDiff( wfMessage( 'revisionasof',
- # $wgLang->timeanddate( $timestamp ),
- # $wgLang->date( $timestamp ),
- # $wgLang->time( $timestamp ) )->text(),
- # wfMessage( 'currentrev' )->text() );
-
$diffText = '';
// Don't bother generating the diff if we won't be able to show it
if ( $wgFeedDiffCutoff > 0 ) {
if ( $html === null ) {
- // Omit large new page diffs, bug 29110
+ // Omit large new page diffs, T31110
// Also use diff link for non-textual content
$diffText = self::getDiffLink( $title, $newid );
} else {
use MediaWiki\Logger\LoggerFactory;
use MediaWiki\Session\SessionManager;
use Wikimedia\ScopedCallback;
-use Wikimedia\Rdbms\LBFactory;
// Hide compatibility functions from Doxygen
/// @cond
$wgOut->sendCacheControl();
}
+ MediaWiki\HeaderCallback::warnIfHeadersSent();
header( 'Content-type: text/html; charset=utf-8' );
print '<!DOCTYPE html>' .
'<html><head><title>' .
* or MediaWikiServices::getDBLoadBalancerFactory() instead.
*
* @param string|bool $wiki Wiki ID, or false for the current wiki
- * @return LoadBalancer
+ * @return \Wikimedia\Rdbms\LoadBalancer
*/
function wfGetLB( $wiki = false ) {
if ( $wiki === false ) {
*
* @deprecated since 1.27, use MediaWikiServices::getDBLoadBalancerFactory() instead.
*
- * @return LBFactory
+ * @return \Wikimedia\Rdbms\LBFactory
*/
function wfGetLBFactory() {
return \MediaWiki\MediaWikiServices::getInstance()->getDBLoadBalancerFactory();
--- /dev/null
+<?php
+
+namespace MediaWiki;
+
+class HeaderCallback {
+ private static $headersSentException;
+ private static $messageSent = false;
+
+ /**
+ * Register a callback to be called when headers are sent. There can only
+ * be one of these handlers active, so all relevant actions have to be in
+ * here.
+ */
+ public static function register() {
+ header_register_callback( [ __CLASS__, 'callback' ] );
+ }
+
+ /**
+ * The callback, which is called by the transport
+ */
+ public static function callback() {
+ // Prevent caching of responses with cookies (T127993)
+ $headers = [];
+ foreach ( headers_list() as $header ) {
+ list( $name, $value ) = explode( ':', $header, 2 );
+ $headers[strtolower( trim( $name ) )][] = trim( $value );
+ }
+
+ if ( isset( $headers['set-cookie'] ) ) {
+ $cacheControl = isset( $headers['cache-control'] )
+ ? implode( ', ', $headers['cache-control'] )
+ : '';
+
+ if ( !preg_match( '/(?:^|,)\s*(?:private|no-cache|no-store)\s*(?:$|,)/i',
+ $cacheControl )
+ ) {
+ header( 'Expires: Thu, 01 Jan 1970 00:00:00 GMT' );
+ header( 'Cache-Control: private, max-age=0, s-maxage=0' );
+ \MediaWiki\Logger\LoggerFactory::getInstance( 'cache-cookies' )->warning(
+ 'Cookies set on {url} with Cache-Control "{cache-control}"', [
+ 'url' => \WebRequest::getGlobalRequestURL(),
+ 'cookies' => $headers['set-cookie'],
+ 'cache-control' => $cacheControl ?: '<not set>',
+ ]
+ );
+ }
+ }
+
+ // Save a backtrace for logging in case it turns out that headers were sent prematurely
+ self::$headersSentException = new \Exception( 'Headers already sent from this point' );
+ }
+
+ /**
+ * Log a warning message if headers have already been sent. This can be
+ * called before flushing the output.
+ */
+ public static function warnIfHeadersSent() {
+ if ( headers_sent() && !self::$messageSent ) {
+ self::$messageSent = true;
+ \MWDebug::warning( 'Headers already sent, should send headers earlier than ' .
+ wfGetCaller( 3 ) );
+ $logger = \MediaWiki\Logger\LoggerFactory::getInstance( 'headers-sent' );
+ $logger->error( 'Warning: headers were already sent from the location below', [
+ 'exception' => self::$headersSentException,
+ 'detection-trace' => new \Exception( 'Detected here' ),
+ ] );
+ }
+ }
+}
/**
* Compute a binary "Adler-32" checksum as defined by LibXDiff, i.e. with
- * the bytes backwards and initialised with 0 instead of 1. See bug 34428.
+ * the bytes backwards and initialised with 0 instead of 1. See T36428.
*
* @param string $s
* @return string|bool False if the hash extension is not available
$attribs['name'] = $name;
if ( substr( $value, 0, 1 ) == "\n" ) {
- // Workaround for bug 12130: browsers eat the initial newline
+ // Workaround for T14130: browsers eat the initial newline
// assuming that it's just for show, but they do keep the later
// newlines, which we may want to preserve during editing.
// Prepending a single newline
# ThumbnailImage::toHtml() already adds page= onto the end of DjVu URLs
# So we don't need to pass it here in $query. However, the URL for the
- # zoom icon still needs it, so we make a unique query for it. See bug 14771
+ # zoom icon still needs it, so we make a unique query for it. See T16771
$url = $title->getLocalURL( $query );
if ( $page ) {
$url = wfAppendQuery( $url, [ 'page' => $page ] );
if ( $altUserName === false ) {
$altUserName = IP::prettifyIP( $userName );
}
- $classes .= ' mw-anonuserlink'; // Separate link class for anons (bug 43179)
+ $classes .= ' mw-anonuserlink'; // Separate link class for anons (T45179)
} else {
$page = Title::makeTitle( NS_USER, $userName );
}
if ( $userId ) {
// check if the user has an edit
$attribs = [];
+ $attribs['class'] = 'mw-usertoollinks-contribs';
if ( $redContribsWhenNoEdits ) {
if ( intval( $edits ) === 0 && $edits !== 0 ) {
$user = User::newFromId( $userId );
$edits = $user->getEditCount();
}
if ( $edits === 0 ) {
- $attribs['class'] = 'new';
+ $attribs['class'] .= ' new';
}
}
$contribsPage = SpecialPage::getTitleFor( 'Contributions', $userText );
*/
public static function userTalkLink( $userId, $userText ) {
$userTalkPage = Title::makeTitle( NS_USER_TALK, $userText );
- $userTalkLink = self::link( $userTalkPage, wfMessage( 'talkpagelinktext' )->escaped() );
+ $moreLinkAttribs['class'] = 'mw-usertoollinks-talk';
+ $userTalkLink = self::link( $userTalkPage,
+ wfMessage( 'talkpagelinktext' )->escaped(),
+ $moreLinkAttribs );
return $userTalkLink;
}
*/
public static function blockLink( $userId, $userText ) {
$blockPage = SpecialPage::getTitleFor( 'Block', $userText );
- $blockLink = self::link( $blockPage, wfMessage( 'blocklink' )->escaped() );
+ $moreLinkAttribs['class'] = 'mw-usertoollinks-block';
+ $blockLink = self::link( $blockPage,
+ wfMessage( 'blocklink' )->escaped(),
+ $moreLinkAttribs );
return $blockLink;
}
*/
public static function emailLink( $userId, $userText ) {
$emailPage = SpecialPage::getTitleFor( 'Emailuser', $userText );
- $emailLink = self::link( $emailPage, wfMessage( 'emaillink' )->escaped() );
+ $moreLinkAttribs['class'] = 'mw-usertoollinks-mail';
+ $emailLink = self::link( $emailPage,
+ wfMessage( 'emaillink' )->escaped(),
+ $moreLinkAttribs );
return $emailLink;
}
) {
# Sanitize text a bit:
$comment = str_replace( "\n", " ", $comment );
- # Allow HTML entities (for bug 13815)
+ # Allow HTML entities (for T15815)
$comment = Sanitizer::escapeHtmlAllowEntities( $comment );
# Render autocomments and make links:
$section = str_replace( '[[', '', $section );
$section = str_replace( ']]', '', $section );
- $section = Sanitizer::normalizeSectionNameWhitespace( $section ); # bug 22784
+ $section = Sanitizer::normalizeSectionNameWhitespace( $section ); # T24784
if ( $local ) {
$sectionTitle = Title::newFromText( '#' . $section );
} else {
} else {
$suffix = '';
}
- # bug 7425
+ # T9425
$target = trim( $target );
# Look at the first character
if ( $target != '' && $target[0] === '/' ) {
if ( $context->getRequest()->getBool( 'bot' ) ) {
$query['bot'] = '1';
- $query['hidediff'] = '1'; // bug 15999
+ $query['hidediff'] = '1'; // T17999
}
$disableRollbackEditCount = false;
# multiple matched parts (variable match); some will be empty because of
# synonyms. The variable will be the second non-empty one so remove any
# blank elements and re-sort the indices.
- # See also bug 6526
+ # See also T8526
$matches = array_values( array_filter( $matches ) );
if ( $request->getCheck( 'search' ) ) {
// Compatibility with old search URLs which didn't use Special:Search
// Just check for presence here, so blank requests still
- // show the search page when using ugly URLs (bug 8054).
+ // show the search page when using ugly URLs (T10054).
$ret = SpecialPage::getTitleFor( 'Search' );
} elseif ( $curid ) {
// URLs like this are generated by RC, because rc_title isn't always accurate
$unused = null; // To pass it by reference
Hooks::run( 'BeforeInitialize', [ &$title, &$unused, &$output, &$user, $request, $this ] );
- // Invalid titles. Bug 21776: The interwikis must redirect even if the page name is empty.
+ // Invalid titles. T23776: The interwikis must redirect even if the page name is empty.
if ( is_null( $title ) || ( $title->getDBkey() == '' && !$title->isExternal() )
|| $title->isSpecial( 'Badtitle' )
) {
? [] // relies on HMAC key signature alone
: $title->getUserPermissionsErrors( 'read', $user );
if ( count( $permErrors ) ) {
- // Bug 32276: allowing the skin to generate output with $wgTitle or
+ // T34276: allowing the skin to generate output with $wgTitle or
// $this->context->title set to the input title would allow anonymous users to
// determine whether a page exists, potentially leaking private data. In fact, the
// curid and oldid request parameters would allow page titles to be enumerated even
try {
$this->main();
} catch ( ErrorPageError $e ) {
- // Bug 62091: while exceptions are convenient to bubble up GUI errors,
+ // T64091: while exceptions are convenient to bubble up GUI errors,
// they are not internal application faults. As with normal requests, this
// should commit, print the output, do deferred updates, jobs, and profiling.
$this->doPreOutputCommit();
use Wikimedia\Rdbms\LBFactory;
use LinkCache;
use Liuggio\StatsdClient\Factory\StatsdDataFactory;
-use LoadBalancer;
+use Wikimedia\Rdbms\LoadBalancer;
use MediaHandlerFactory;
use MediaWiki\Linker\LinkRenderer;
use MediaWiki\Linker\LinkRendererFactory;
$defaultContentModelChanging = ( $oldDefault !== $newDefault
&& $oldDefault === $contentModel );
- // bug 57084: log_page should be the ID of the *moved* page
+ // T59084: log_page should be the ID of the *moved* page
$oldid = $this->oldTitle->getArticleID();
$logTitle = clone $this->oldTitle;
);
if ( !$redirectContent ) {
- // Clean up the old title *before* reset article id - bug 45348
+ // Clean up the old title *before* reset article id - T47348
WikiPage::onArticleDelete( $this->oldTitle );
}
$this->oldTitle->resetArticleID( 0 ); // 0 == non existing
$nt->resetArticleID( $oldid );
- $newpage->loadPageData( WikiPage::READ_LOCKING ); // bug 46397
+ $newpage->loadPageData( WikiPage::READ_LOCKING ); // T48397
$newpage->updateRevisionOn( $dbw, $nullRevision );
# Recreate the redirect, this time in the other direction.
if ( $redirectContent ) {
$redirectArticle = WikiPage::factory( $this->oldTitle );
- $redirectArticle->loadFromRow( false, WikiPage::READ_LOCKING ); // bug 46397
+ $redirectArticle->loadFromRow( false, WikiPage::READ_LOCKING ); // T48397
$newid = $redirectArticle->insertOn( $dbw );
if ( $newid ) { // sanity
$this->oldTitle->resetArticleID( $newid );
* @file
*/
-# bug 30219 : can not use pathinfo() on URLs since slashes do not match
+# T32219 : can not use pathinfo() on URLs since slashes do not match
$matches = [];
$ext = 'php';
$path = '/';
'epoch' => $config->get( 'CacheEpoch' )
];
if ( $config->get( 'UseSquid' ) ) {
- // bug 44570: the core page itself may not change, but resources might
+ // T46570: the core page itself may not change, but resources might
$modifiedTimes['sepoch'] = wfTimestamp( TS_MW, time() - $config->get( 'SquidMaxage' ) );
}
Hooks::run( 'OutputPageCheckLastModified', [ &$modifiedTimes, $this ] );
ResourceLoaderModule::ORIGIN_CORE_INDIVIDUAL
);
- // Site-wide styles are controlled by a config setting, see bug 71621
+ // Site-wide styles are controlled by a config setting, see T73621
// for background on why. User styles are never allowed.
if ( $this->getConfig()->get( 'AllowSiteCSSOnRestrictedPages' ) ) {
$styleOrigin = ResourceLoaderModule::ORIGIN_USER_SITEWIDE;
) {
$displayReturnto = null;
- # Due to bug 32276, if a user does not have read permissions,
+ # Due to T34276, if a user does not have read permissions,
# $this->getTitle() will just give Special:Badtitle, which is
# not especially useful as a returnto parameter. Use the title
# from the request instead, if there was one.
$curRevisionId = 0;
$articleId = 0;
- $canonicalSpecialPageName = false; # bug 21115
+ $canonicalSpecialPageName = false; # T23115
$title = $this->getTitle();
$ns = $title->getNamespace();
$sk = $this->getSkin();
// Get the relevant title so that AJAX features can use the correct page name
- // when making API requests from certain special pages (bug 34972).
+ // when making API requests from certain special pages (T36972).
$relevantTitle = $sk->getRelevantTitle();
$relevantUser = $sk->getRelevantUser();
* $wgOut->addWikiText( "<div class='error'>\n"
* . wfMessage( 'some-error' )->plain() . "\n</div>" );
*
- * The newline after the opening div is needed in some wikitext. See bug 19226.
+ * The newline after the opening div is needed in some wikitext. See T21226.
*
* @param string $wrap
*/
}
}
- # # Make sure that form fields have their parent set. See bug 41337.
+ # # Make sure that form fields have their parent set. See T43337.
$dummyForm = new HTMLForm( [], $context );
$disable = !$user->isAllowed( 'editmyoptions' );
if ( $dateopts ) {
if ( !in_array( 'default', $dateopts ) ) {
- $dateopts[] = 'default'; // Make sure default is always valid
- // Bug 19237
+ $dateopts[] = 'default'; // Make sure default is always valid T21237
}
// FIXME KLUGE: site default might not be valid for user language
}
}
- # normalize searchKey, so aliases with spaces can be found - bug 25675
+ # normalize searchKey, so aliases with spaces can be found - T27675
$searchKey = str_replace( ' ', '_', $searchKey );
$searchKey = $wgContLang->caseFold( $searchKey );
}
foreach ( $wgContLang->getSpecialPageAliases() as $page => $aliases ) {
- if ( !in_array( $page, SpecialPageFactory::getNames() ) ) {# bug 20885
+ if ( !in_array( $page, SpecialPageFactory::getNames() ) ) {# T22885
continue;
}
$matches = [];
foreach ( $keys as $pageKey => $page ) {
if ( $searchKey === '' || strpos( $pageKey, $searchKey ) === 0 ) {
- // bug 27671: Don't use SpecialPage::getTitleFor() here because it
+ // T29671: Don't use SpecialPage::getTitleFor() here because it
// localizes its input leading to searches for e.g. Special:All
// returning Spezial:MediaWiki-Systemnachrichten and returning
// Spezial:Alle_Seiten twice when $wgLanguageCode == 'de'
// Pre-1.5 ar_text row
$attribs['text'] = self::getRevisionText( $row, 'ar_' );
if ( $attribs['text'] === false ) {
- throw new MWException( 'Unable to load text from archive row (possibly bug 22624)' );
+ throw new MWException( 'Unable to load text from archive row (possibly T24624)' );
}
}
return new self( $attribs );
$badtag = true;
} elseif ( in_array( $t, $tagstack ) && !isset( $htmlnest[$t] ) ) {
$badtag = true;
- # Is it a self closed htmlpair ? (bug 5487)
+ # Is it a self closed htmlpair ? (T7487)
} elseif ( $brace == '/>' && isset( $htmlpairs[$t] ) ) {
// Eventually we'll just remove the self-closing
// slash, in order to be consistent with HTML5
// Normalize Halfwidth and Fullwidth Unicode block that IE6 might treat as ascii
$value = preg_replace_callback(
- '/[!-[]-z]/u', // U+FF01 to U+FF5A, excluding U+FF3C (bug 58088)
+ '/[!-[]-z]/u', // U+FF01 to U+FF5A, excluding U+FF3C (T60088)
function ( $matches ) {
$cp = UtfNormal\Utils::utf8ToCodepoint( $matches[0] );
if ( $cp === false ) {
/**
* Decode any character references, numeric or named entities,
- * in the next and normalize the resulting string. (bug 14952)
+ * in the next and normalize the resulting string. (T16952)
*
* This is useful for page titles, not for text to be displayed,
* MediaWiki allows HTML entities to escape normalization as a feature.
* 3.5.
*
* This function is an implementation of the specification as requested in
- * bug 22449.
+ * T24449.
*
* Client-side forms will use the same standard validation rules via JS or
* HTML 5 validation; additional restrictions can be enforced server-side
// Please note strings below are enclosed in brackets [], this make the
// hyphen "-" a range indicator. Hence it is double backslashed below.
- // See bug 26948
+ // See T28948
$rfc5322_atext = "a-z0-9!#$%&'*+\\-\/=?^_`{|}~";
$rfc1034_ldh_str = "a-z0-9\\-";
$wgUseEnotif = $wgEnotifUserTalk || $wgEnotifWatchlist;
} else {
// Disable all other email settings automatically if $wgEnableEmail
- // is set to false. - bug 63678
+ // is set to false. - T65678
$wgAllowHTMLEmail = false;
$wgEmailAuthentication = false; // do not require auth if you're not sending email anyway
$wgEnableUserEmail = false;
// is complete.
define( 'MW_SERVICE_BOOTSTRAP_COMPLETE', 1 );
-// Install a header callback to prevent caching of responses with cookies (T127993)
-if ( !$wgCommandLineMode ) {
- header_register_callback( function () {
- $headers = [];
- foreach ( headers_list() as $header ) {
- list( $name, $value ) = explode( ':', $header, 2 );
- $headers[strtolower( trim( $name ) )][] = trim( $value );
- }
-
- if ( isset( $headers['set-cookie'] ) ) {
- $cacheControl = isset( $headers['cache-control'] )
- ? implode( ', ', $headers['cache-control'] )
- : '';
-
- if ( !preg_match( '/(?:^|,)\s*(?:private|no-cache|no-store)\s*(?:$|,)/i', $cacheControl ) ) {
- header( 'Expires: Thu, 01 Jan 1970 00:00:00 GMT' );
- header( 'Cache-Control: private, max-age=0, s-maxage=0' );
- MediaWiki\Logger\LoggerFactory::getInstance( 'cache-cookies' )->warning(
- 'Cookies set on {url} with Cache-Control "{cache-control}"', [
- 'url' => WebRequest::getGlobalRequestURL(),
- 'cookies' => $headers['set-cookie'],
- 'cache-control' => $cacheControl ?: '<not set>',
- ]
- );
- }
- }
- } );
-}
-
MWExceptionHandler::installHandler();
require_once "$IP/includes/compat/normal/UtfNormalUtil.php";
/**
* @var int Namespace index when there is no namespace. Don't change the
- * following default, NS_MAIN is hardcoded in several places. See bug 696.
+ * following default, NS_MAIN is hardcoded in several places. See T2696.
* Zero except in {{transclusion}} tags.
*/
public $mDefaultNamespace = NS_MAIN;
}
}
- // Convert things like é ā or 〗 into normalized (bug 14952) text
+ // Convert things like é ā or 〗 into normalized (T16952) text
$filteredText = Sanitizer::decodeCharReferencesAndNormalize( $text );
$t = new Title();
}
$newPageName = preg_replace(
'#^' . preg_quote( $this->getDBkey(), '#' ) . '#',
- StringUtils::escapeRegexReplacement( $nt->getDBkey() ), # bug 21234
+ StringUtils::escapeRegexReplacement( $nt->getDBkey() ), # T23234
$oldSubpage->getDBkey() );
if ( $oldSubpage->isTalkPage() ) {
$newNs = $nt->getTalkPage()->getNamespace();
} else {
$newNs = $nt->getSubjectPage()->getNamespace();
}
- # Bug 14385: we need makeTitleSafe because the new page names may
+ # T16385: we need makeTitleSafe because the new page names may
# be longer than 255 characters.
$newSubpage = Title::makeTitleSafe( $newNs, $newPageName );
use MediaWiki\Linker\LinkTarget;
use Wikimedia\Assert\Assert;
+use Wikimedia\Rdbms\LoadBalancer;
/**
* Class performing complex database queries related to WatchedItems.
if ( !isset( $options['start'] ) && !isset( $options['end'] ) ) {
if ( $db->getType() === 'mysql' ) {
// This is an index optimization for mysql
- $conds[] = "rc_timestamp > ''";
+ $conds[] = 'rc_timestamp > ' . $db->addQuotes( '' );
}
}
$conds[] = 'rc_user_text != ' . $db->addQuotes( $options['notByUser'] );
}
- // Avoid brute force searches (bug 17342)
+ // Avoid brute force searches (T19342)
$bitmask = 0;
if ( !$user->isAllowed( 'deletedhistory' ) ) {
$bitmask = Revision::DELETED_USER;
use MediaWiki\MediaWikiServices;
use Wikimedia\Assert\Assert;
use Wikimedia\ScopedCallback;
+use Wikimedia\Rdbms\LoadBalancer;
/**
* Storage layer class for WatchedItems.
$host = $parts[0];
if ( $wgAssumeProxiesUseDefaultProtocolPorts && isset( $_SERVER['HTTP_X_FORWARDED_PROTO'] ) ) {
- // Bug 70021: Assume that upstream proxy is running on the default
+ // T72021: Assume that upstream proxy is running on the default
// port based on the protocol. We have no reliable way to determine
// the actual port in use upstream.
$port = $stdPort;
* available variant URLs.
*/
public function interpolateTitle() {
- // bug 16019: title interpolation on API queries is useless and sometimes harmful
+ // T18019: title interpolation on API queries is useless and sometimes harmful
if ( defined( 'MW_API' ) ) {
return;
}
* @since 1.28
* @param string $name
* @param string|null $default Optional default
- * @return string
+ * @return string|null
*/
public function getRawVal( $name, $default = null ) {
$name = strtr( $name, '.', '_' ); // See comment in self::getGPCVal()
*
* @param string $name
* @param string $default Optional default (or null)
- * @return string
+ * @return string|null
*/
public function getVal( $name, $default = null ) {
$val = $this->getGPCVal( $this->data, $name, $default );
*
* @param string $name
* @param array $default Optional default (or null)
- * @return array
+ * @return array|null
*/
public function getArray( $name, $default = null ) {
$val = $this->getGPCVal( $this->data, $name, $default );
if (
IP::isPublic( $ipchain[$i + 1] ) ||
$wgUsePrivateIPs ||
- $proxyLookup->isConfiguredProxy( $curIP ) // bug 48919; treat IP as sane
+ $proxyLookup->isConfiguredProxy( $curIP ) // T50919; treat IP as sane
) {
// Follow the next IP according to the proxy
$nextIP = IP::canonicalize( $ipchain[$i + 1] );
* @param null|int $http_response_code Forces the HTTP response code to the specified value.
*/
public function header( $string, $replace = true, $http_response_code = null ) {
- if ( headers_sent() ) {
- MWDebug::warning( 'Headers already sent, should send headers earlier than ' . wfGetCaller() );
- }
+ \MediaWiki\HeaderCallback::warnIfHeadersSent();
if ( $http_response_code ) {
header( $string, $replace, $http_response_code );
} else {
die( 'MediaWiki does not support installations where mbstring.func_overload is non-zero.' );
}
-# bug 15461: Make IE8 turn off content sniffing. Everybody else should ignore this
+# T17461: Make IE8 turn off content sniffing. Everybody else should ignore this
# We're adding it here so that it's *always* set, even for alternate entry
# points and when $wgOut gets disabled or overridden.
header( 'X-Content-Type-Options: nosniff' );
die( 1 );
}
+# Install a header callback
+MediaWiki\HeaderCallback::register();
+
if ( defined( 'MW_CONFIG_CALLBACK' ) ) {
# Use a callback function to configure MediaWiki
call_user_func( MW_CONFIG_CALLBACK );
$out->setStatusCode( 404 );
}
$out->addWikiMsg( 'nohistory' );
+
+ $dbr = wfGetDB( DB_REPLICA );
+
# show deletion/move log if there is an entry
LogEventsList::showLogExtract(
$out,
$this->getTitle(),
'',
[ 'lim' => 10,
- 'conds' => [ "log_action != 'revision'" ],
+ 'conds' => [ 'log_action != ' . $dbr->addQuotes( 'revision' ) ],
'showIfEmpty' => false,
'msgKey' => [ 'moveddeleted-notice' ]
]
* - confirm-rollback-button
* - rollbackfailed
* - rollback-missingparam
+ * - rollback-success-notify
*/
/**
$old = Linker::revUserTools( $current );
$new = Linker::revUserTools( $target );
- $this->getOutput()->addHTML( $this->msg( 'rollback-success' )->rawParams( $old, $new )
- ->parseAsBlock() );
+ $this->getOutput()->addHTML(
+ $this->msg( 'rollback-success' )
+ ->rawParams( $old, $new )
+ ->params( $current->getUserText( Revision::FOR_THIS_USER, $user ) )
+ ->params( $target->getUserText( Revision::FOR_THIS_USER, $user ) )
+ ->parseAsBlock()
+ );
if ( $user->getBoolOption( 'watchrollback' ) ) {
$user->addWatch( $this->page->getTitle(), User::IGNORE_USER_RIGHTS );
$res->status === AuthenticationResponse::RESTART
) {
$this->formatMessage( $ret, 'message', $res->message );
+ $ret['messagecode'] = ApiMessage::create( $res->message )->getApiCode();
}
if ( $res->status === AuthenticationResponse::FAIL ||
* @return array
*/
public function extractRequestParams( $parseLimit = true ) {
- // Cache parameters, for performance and to avoid bug 24564.
+ // Cache parameters, for performance and to avoid T26564.
if ( !isset( $this->mParamCache[$parseLimit] ) ) {
$params = $this->getFinalParams();
$results = [];
}
if ( !$allowMultiple && count( $valuesList ) != 1 ) {
- // Bug 33482 - Allow entries with | in them for non-multiple values
+ // T35482 - Allow entries with | in them for non-multiple values
if ( in_array( $value, $allowedValues, true ) ) {
return $value;
}
$this->requireOnlyOneParameter( $params, 'user', 'userid' );
- # bug 15810: blocked admins should have limited access here
+ # T17810: blocked admins should have limited access here
if ( $user->isBlocked() ) {
$status = SpecialBlock::checkUnblockSelf( $params['user'], $user );
if ( $status !== true ) {
} else {
$target = User::newFromName( $params['user'] );
- // Bug 38633 - if the target is a user (not an IP address), but it
+ // T40633 - if the target is a user (not an IP address), but it
// doesn't exist or is unusable, error.
if ( $target instanceof User &&
( $target->isAnon() /* doesn't exist */ || !User::isUsableName( $target->getName() ) )
$this->getMain()->setCacheMode( 'public' );
if ( !$this->getMain()->getParameter( 'smaxage' ) ) {
- // bug 63249: This page gets hit a lot, cache at least 15 seconds.
+ // T65249: This page gets hit a lot, cache at least 15 seconds.
$this->getMain()->setCacheMaxAge( 15 );
}
$this->getMain()->getRequest()->response()->header( "Content-Type: $mime; charset=utf-8" );
- // Set X-Frame-Options API results (bug 39180)
+ // Set X-Frame-Options API results (T41180)
$apiFrameOptions = $this->getConfig()->get( 'ApiFrameOptions' );
if ( $apiFrameOptions ) {
$this->getMain()->getRequest()->response()->header( "X-Frame-Options: $apiFrameOptions" );
false, FormatJson::ALL_OK
);
- // Bug 66776: wfMangleFlashPolicy() is needed to avoid a nasty bug in
+ // T68776: wfMangleFlashPolicy() is needed to avoid a nasty bug in
// Flash, but what it does isn't friendly for the API, so we need to
// work around it.
if ( preg_match( '/\<\s*cross-domain-policy\s*\>/i', $json ) ) {
$data = $this->getResult()->getResultData( null, $transform );
$json = FormatJson::encode( $data, $this->getIsHtml(), $opt );
- // Bug 66776: wfMangleFlashPolicy() is needed to avoid a nasty bug in
+ // T68776: wfMangleFlashPolicy() is needed to avoid a nasty bug in
// Flash, but what it does isn't friendly for the API, so we need to
// work around it.
if ( preg_match( '/\<\s*cross-domain-policy(?=\s|\>)/i', $json ) ) {
if ( isset( $params['callback'] ) ) {
$callback = preg_replace( "/[^][.\\'\\\"_A-Za-z0-9]/", '', $params['callback'] );
# Prepend a comment to try to avoid attacks against content
- # sniffers, such as bug 68187.
+ # sniffers, such as T70187.
$this->printText( "/**/$callback($json)" );
} else {
$this->printText( $json );
}
$text = serialize( $this->getResult()->getResultData( null, $transforms ) );
- // Bug 66776: wfMangleFlashPolicy() is needed to avoid a nasty bug in
+ // T68776: wfMangleFlashPolicy() is needed to avoid a nasty bug in
// Flash, but what it does isn't friendly for the API. There's nothing
// we can do here that isn't actively broken in some manner, so let's
// just be broken in a useful manner.
* @param Exception $e
*/
protected function handleException( Exception $e ) {
- // Bug 63145: Rollback any open database transactions
+ // T65145: Rollback any open database transactions
if ( !( $e instanceof ApiUsageException || $e instanceof UsageException ) ) {
// UsageExceptions are intentional, so don't rollback if that's the case
try {
)
);
} else {
- if ( $config->get( 'ShowExceptionDetails' ) ) {
+ if ( $config->get( 'ShowExceptionDetails' ) &&
+ ( !$e instanceof DBError || $config->get( 'ShowDBErrorBacktrace' ) )
+ ) {
$result->addContentValue(
$path,
'trace',
$ret = $this->getRequest()->getVal( $name );
if ( $ret === null ) {
if ( $this->getRequest()->getArray( $name ) !== null ) {
- // See bug 10262 for why we don't just implode( '|', ... ) the
+ // See T12262 for why we don't just implode( '|', ... ) the
// array.
$this->addWarning( [ 'apiwarn-unsupportedarray', $name ] );
}
// a redirect to the new title. This is not safe, but what we did before was
// even worse: we just determined whether a redirect should have been created,
// and reported that it was created if it should have, without any checks.
- // Also note that isRedirect() is unreliable because of bug 37209.
+ // Also note that isRedirect() is unreliable because of T39209.
$r['redirectcreated'] = $fromTitle->exists();
$r['moveoverredirect'] = $toTitleExists;
* @return array
*/
private static function getPositiveIntegers( $array ) {
- // bug 25734 API: possible issue with revids validation
+ // T27734 API: possible issue with revids validation
// It seems with a load of revision rows, MySQL gets upset
// Remove any < 0 integers, as they can't be valid
foreach ( $array as $i => $int ) {
}
if ( !is_null( $params['user'] ) || !is_null( $params['excludeuser'] ) ) {
- // Paranoia: avoid brute force searches (bug 17342)
+ // Paranoia: avoid brute force searches (T19342)
// (shouldn't be able to get here without 'deletedhistory', but
// check it again just in case)
if ( !$user->isAllowed( 'deletedhistory' ) ) {
}
if ( $params['user'] !== null || $params['excludeuser'] !== null ) {
- // Paranoia: avoid brute force searches (bug 17342)
+ // Paranoia: avoid brute force searches (T19342)
if ( !$this->getUser()->isAllowed( 'deletedhistory' ) ) {
$bitmask = Revision::DELETED_USER;
} elseif ( !$this->getUser()->isAllowedAny( 'suppressrevision', 'viewsuppressed' ) ) {
],
] ] );
- // Actually count the actions using a subquery (bug 64505 and bug 64507)
+ // Actually count the actions using a subquery (T66505 and T66507)
$timestamp = $db->timestamp( wfTimestamp( TS_UNIX ) - $activeUserSeconds );
$this->addFields( [
'recentactions' => '(' . $db->selectSQLText(
if ( $this->params['filterredir'] == 'redirects' ) {
$this->addWhereFld( 'page_is_redirect', 1 );
} elseif ( $this->params['filterredir'] == 'nonredirects' && !$this->redirect ) {
- // bug 22245 - Check for !redirect, as filtering nonredirects, when
+ // T24245 - Check for !redirect, as filtering nonredirects, when
// getting what links to them is contradictory
$this->addWhereFld( 'page_is_redirect', 0 );
}
}
if ( !is_null( $params['user'] ) || !is_null( $params['excludeuser'] ) ) {
- // Paranoia: avoid brute force searches (bug 17342)
+ // Paranoia: avoid brute force searches (T19342)
// (shouldn't be able to get here without 'deletedhistory', but
// check it again just in case)
if ( !$user->isAllowed( 'deletedhistory' ) ) {
}
if ( !is_null( $params['user'] ) || !is_null( $params['excludeuser'] ) ) {
- // Paranoia: avoid brute force searches (bug 17342)
+ // Paranoia: avoid brute force searches (T19342)
// (shouldn't be able to get here without 'deletedhistory', but
// check it again just in case)
if ( !$user->isAllowed( 'deletedhistory' ) ) {
if ( $mto && !$mto->isError() ) {
$vals['thumburl'] = wfExpandUrl( $mto->getUrl(), PROTO_CURRENT );
- // bug 23834 - If the URL's are the same, we haven't resized it, so shouldn't give the wanted
+ // T25834 - If the URLs are the same, we haven't resized it, so shouldn't give the wanted
// thumbnail sizes for the thumbnail actual size
if ( $mto->getUrl() !== $file->getUrl() ) {
$vals['thumbwidth'] = intval( $mto->getWidth() );
$this->addWhere( 'log_title ' . $db->buildLike( $title->getDBkey(), $db->anyString() ) );
}
- // Paranoia: avoid brute force searches (bug 17342)
+ // Paranoia: avoid brute force searches (T19342)
if ( $params['namespace'] !== null || !is_null( $title ) || !is_null( $user ) ) {
if ( !$this->getUser()->isAllowed( 'deletedhistory' ) ) {
$titleBits = LogPage::DELETED_ACTION;
$this->addWhereFld( 'ct_tag', $params['tag'] );
}
- // Paranoia: avoid brute force searches (bug 17342)
+ // Paranoia: avoid brute force searches (T19342)
if ( !is_null( $params['user'] ) || !is_null( $params['excludeuser'] ) ) {
if ( !$user->isAllowed( 'deletedhistory' ) ) {
$bitmask = Revision::DELETED_USER;
}
}
if ( $params['user'] !== null || $params['excludeuser'] !== null ) {
- // Paranoia: avoid brute force searches (bug 17342)
+ // Paranoia: avoid brute force searches (T19342)
if ( !$this->getUser()->isAllowed( 'deletedhistory' ) ) {
$bitmask = Revision::DELETED_USER;
} elseif ( !$this->getUser()->isAllowedAny( 'suppressrevision', 'viewsuppressed' ) ) {
}
public function appendProtocols( $property ) {
- // Make a copy of the global so we don't try to set the _element key of it - bug 45130
+ // Make a copy of the global so we don't try to set the _element key of it - T47130
$protocols = array_values( $this->getConfig()->get( 'UrlProtocols' ) );
ApiResult::setArrayType( $protocols, 'BCarray' );
ApiResult::setIndexedTagName( $protocols, 'p' );
}
}
if ( is_array( $value ) ) {
- // Work around PHP bug 45959 by copying to a temporary
+ // Work around https://bugs.php.net/bug.php?id=45959 by copying to a temporary
// (in this case, foreach gets $k === "1" but $tmp[$k] assigns as if $k === 1)
$tmp = [];
foreach ( $value as $k => $v ) {
if ( !$user->isAllowed( 'block' ) ) {
$this->dieWithError( 'apierror-permissiondenied-unblock', 'permissiondenied' );
}
- # bug 15810: blocked admins should have limited access here
+ # T17810: blocked admins should have limited access here
if ( $user->isBlocked() ) {
$status = SpecialBlock::checkUnblockSelf( $params['user'], $user );
if ( $status !== true ) {
"apihelp-main-param-responselanginfo": "Bezieht die für <var>uselang</var> und <var>errorlang</var> verwendeten Sprachen im Ergebnis mit ein.",
"apihelp-main-param-origin": "Beim Zugriff auf die API mit einer Kreuz-Domain-AJAX-Anfrage (CORS) muss dies als entstehende Domäne festgelegt werden. Dies muss in jeder Vorfluganfrage mit eingeschlossen werden und deshalb ein Teil der Anfragen-URI sein (nicht des POST-Körpers).\n\nFür authentifizierte Anfragen muss dies exakt einem der Ursprünge im Header <code>Origin</code> entsprechen, so dass es auf etwas wie <kbd>https://de.wikipedia.org</kbd> oder <kbd>https://meta.wikimedia.org</kbd> festgelegt werden muss. Falls dieser Parameter nicht mit dem Header <code>Origin</code> übereinstimmt, wird eine 403-Antwort zurückgegeben. Falls dieser Parameter mit dem Header <code>Origin</code> übereinstimmt und der Ursprung weißgelistet ist, werden die Header <code>Access-Control-Allow-Origin</code> und <code>Access-Control-Allow-Credentials</code> festgelegt.\n\nGib für nicht authentifizierte Anfragen den Wert <kbd>*</kbd> an. Dies verursacht, dass der Header <code>Access-Control-Allow-Origin</code> festgelegt wird, aber <code>Access-Control-Allow-Credentials</code> wird <code>false</code> sein und alle benutzerspezifischen Daten werden beschränkt.",
"apihelp-main-param-uselang": "Zu verwendende Sprache für Nachrichtenübersetzungen. <kbd>[[Special:ApiHelp/query+siteinfo|action=query&meta=siteinfo]]</kbd> mit <kbd>siprop=languages</kbd> gibt eine Liste der Sprachcodes zurück. Gib <kbd>user</kbd> zum Verwenden der aktuellen Benutzerspracheinstellung oder <kbd>content</kbd> an, um die Inhaltssprache des Wikis zu verwenden.",
+ "apihelp-main-param-errorformat": "Zu verwendendes Format zur Ausgabe von Warnungen und Fehlertexten.\n; plaintext: Wikitext mit entfernten HTML-Tags und ersetzten Entitäten.\n; wikitext: Ungeparster Wikitext.\n; html: HTML.\n; raw: Nachrichtenschlüssel und Parameter.\n; none: Keine Textausgabe, nur die Fehlercodes.\n; bc: Vor MediaWiki 1.29 verwendetes Format. <var>errorlang</var> und <var>errorsuselocal</var> werden ignoriert.",
"apihelp-main-param-errorsuselocal": "Falls angegeben, verwenden Fehlertexte lokalisierte Nachrichten aus dem {{ns:MediaWiki}}-Namensraum.",
"apihelp-block-description": "Einen Benutzer sperren.",
"apihelp-block-param-user": "Benutzername, IP-Adresse oder IP-Adressbereich, der gesperrt werden soll. Kann nicht zusammen mit <var>$1userid</var> verwendet werden.",
"apihelp-xml-param-includexmlnamespace": "Falls angegeben, ergänzt einen XML-Namensraum.",
"apihelp-xmlfm-description": "Daten im XML-Format ausgeben (schöngedruckt in HTML).",
"api-format-title": "MediaWiki-API-Ergebnis",
- "api-format-prettyprint-header": "Dies ist die HTML-Repräsentation des $1-Formats. HTML ist zur Fehlerbehebung gut, aber unpassend für den Anwendungsgebrauch.\n\nGib den Parameter <var>format</var> an, um das Ausgabeformat zu ändern. Um die Nicht-HTML-Repräsentation des $1-Formats anzusehen, lege <kbd>format=$2</kbd> fest.\n\nSiehe die [[mw:API|vollständige Dokumentation]] oder die [[Special:ApiHelp/main|API-Hilfe]] für weitere Informationen.",
+ "api-format-prettyprint-header": "Dies ist die Darstellung des $1-Formats in HTML. HTML ist gut zur Fehlerbehebung geeignet, aber unpassend für die Nutzung durch Anwendungen.\n\nGib den Parameter <var>format</var> an, um das Ausgabeformat zu ändern. Lege <kbd>format=$2</kbd> fest, um die von HTML abweichende Darstellung des $1-Formats zu erhalten.\n\nSiehe auch die [[mw:API|vollständige Dokumentation der API]] oder die [[Special:ApiHelp/main|API-Hilfe]] für weitere Informationen.",
"api-format-prettyprint-status": "Diese Antwort wird mit dem HTTP-Status $1 $2 zurückgegeben.",
"api-pageset-param-titles": "Eine Liste der Titel, an denen gearbeitet werden soll.",
"api-pageset-param-pageids": "Eine Liste der Seitenkennungen, an denen gearbeitet werden soll.",
"apihelp-unblock-example-id": "Unblock block ID #<kbd>105</kbd>.",
"apihelp-unblock-example-user": "Unblock user <kbd>Bob</kbd> with reason <kbd>Sorry Bob</kbd>.",
- "apihelp-undelete-description": "Restore revisions of a deleted page.\n\nA list of deleted revisions (including timestamps) can be retrieved through [[Special:ApiHelp/query+deletedrevs|list=deletedrevs]], and a list of deleted file IDs can be retrieved through [[Special:ApiHelp/query+filearchive|list=filearchive]].",
+ "apihelp-undelete-description": "Restore revisions of a deleted page.\n\nA list of deleted revisions (including timestamps) can be retrieved through [[Special:ApiHelp/query+deletedrevisions|prop=deletedrevisions]], and a list of deleted file IDs can be retrieved through [[Special:ApiHelp/query+filearchive|list=filearchive]].",
"apihelp-undelete-param-title": "Title of the page to restore.",
"apihelp-undelete-param-reason": "Reason for restoring.",
"apihelp-undelete-param-tags": "Change tags to apply to the entry in the deletion log.",
"apiwarn-redirectsandrevids": "Redirect resolution cannot be used together with the <var>revids</var> parameter. Any redirects the <var>revids</var> point to have not been resolved.",
"apiwarn-tokennotallowed": "Action \"$1\" is not allowed for the current user.",
"apiwarn-tokens-origin": "Tokens may not be obtained when the same-origin policy is not applied.",
- "apiwarn-toomanyvalues": "Too many values supplied for parameter <var>$1</var>: the limit is $2.",
+ "apiwarn-toomanyvalues": "Too many values supplied for parameter <var>$1</var>. The limit is $2.",
"apiwarn-truncatedresult": "This result was truncated because it would otherwise be larger than the limit of $1 bytes.",
- "apiwarn-unclearnowtimestamp": "Passing \"$2\" for timestamp parameter <var>$1</var> has been deprecated. If for some reason you need to explicitly specify the current time without calculating it client-side, use <kbd>now<kbd>.",
+ "apiwarn-unclearnowtimestamp": "Passing \"$2\" for timestamp parameter <var>$1</var> has been deprecated. If for some reason you need to explicitly specify the current time without calculating it client-side, use <kbd>now</kbd>.",
"apiwarn-unrecognizedvalues": "Unrecognized {{PLURAL:$3|value|values}} for parameter <var>$1</var>: $2.",
"apiwarn-unsupportedarray": "Parameter <var>$1</var> uses unsupported PHP array syntax.",
"apiwarn-urlparamwidth": "Ignoring width value set in <var>$1urlparam</var> ($2) in favor of width value derived from <var>$1urlwidth</var>/<var>$1urlheight</var> ($3).",
"apihelp-query+recentchanges-param-limit": "Cuántos cambios en total se devolverán.",
"apihelp-query+recentchanges-param-type": "Cuántos tipos de cambios se mostrarán.",
"apihelp-query+recentchanges-param-toponly": "Enumerar solo las modificaciones que sean las últimas revisiones.",
+ "apihelp-query+recentchanges-param-generaterevisions": "Cuando se utilice como generador, genera identificadores de revisión en lugar de títulos. Las entradas en la lista de cambios recientes que no tengan identificador de revisión asociado (por ejemplo, la mayoría de las entradas de registro) no generarán nada.",
"apihelp-query+recentchanges-example-simple": "Lista de cambios recientes.",
"apihelp-query+recentchanges-example-generator": "Obtener información de página de cambios recientes no patrullados.",
"apihelp-query+redirects-description": "Devuelve todas las redirecciones a las páginas dadas.",
"apihelp-query-param-exportnowrap": "Renvoyer le XML exporté sans l’inclure dans un résultat XML (même format que [[Special:Export]]). Utilisable uniquement avec $1export.",
"apihelp-query-param-iwurl": "S’il faut obtenir l’URL complète si le titre est un lien interwiki.",
"apihelp-query-param-rawcontinue": "Renvoyer les données <samp>query-continue</samp> brutes pour continuer.",
- "apihelp-query-example-revisions": "Récupérer [[Special:ApiHelp/query+siteinfo|l’info du site]] et [[Special:ApiHelp/query+revisions|les révisions]] de <kbd>Page principale</kbd>.",
+ "apihelp-query-example-revisions": "Récupérer [[Special:ApiHelp/query+siteinfo|l’info du site]] et [[Special:ApiHelp/query+revisions|les révisions]] de <kbd>Main Page</kbd>.",
"apihelp-query-example-allpages": "Récupérer les révisions des pages commençant par <kbd>API/</kbd>.",
"apihelp-query+allcategories-description": "Énumérer toutes les catégories.",
"apihelp-query+allcategories-param-from": "La catégorie depuis laquelle démarrer l’énumération.",
"apihelp-query+allredirects-param-namespace": "L’espace de noms à énumérer.",
"apihelp-query+allredirects-param-limit": "Combien d’éléments renvoyer au total.",
"apihelp-query+allredirects-param-dir": "La direction dans laquelle lister.",
- "apihelp-query+allredirects-example-B": "Lister les pages cible, y compris les manquantes, avec les IDs de page d’où ils proviennent, en commençant à <kbd>B</kbd>.",
+ "apihelp-query+allredirects-example-B": "Lister les pages cible, y compris celles manquantes, avec les IDs de page d’où ils proviennent, en commençant à <kbd>B</kbd>.",
"apihelp-query+allredirects-example-unique": "Lister les pages cible unique",
"apihelp-query+allredirects-example-unique-generator": "Obtient toutes les pages cible, en marquant les manquantes",
"apihelp-query+allredirects-example-generator": "Obtient les pages contenant les redirections",
"apihelp-query+alltransclusions-param-dir": "L'ordre dans lequel lister.",
"apihelp-query+alltransclusions-example-B": "Lister les titres inclus, y compris les manquants, avec les IDs des pages d’où ils viennent, en commençant à <kbd>B</kbd>.",
"apihelp-query+alltransclusions-example-unique": "Lister les titres inclus uniques",
- "apihelp-query+alltransclusions-example-unique-generator": "Obtient tous les titres inclus, en marquant les manquants",
- "apihelp-query+alltransclusions-example-generator": "Obtient les pages contenant des transclusions",
+ "apihelp-query+alltransclusions-example-unique-generator": "Obtient tous les titres inclus, en marquant les manquants.",
+ "apihelp-query+alltransclusions-example-generator": "Obtient les pages contenant les transclusions.",
"apihelp-query+allusers-description": "Énumérer tous les utilisateurs enregistrés.",
"apihelp-query+allusers-param-from": "Le nom d’utilisateur auquel démarrer l’énumération.",
"apihelp-query+allusers-param-to": "Le nom d’utilisateur auquel stopper l’énumération.",
"apihelp-query+backlinks-param-namespace": "L’espace de noms à énumérer.",
"apihelp-query+backlinks-param-dir": "La direction dans laquelle lister.",
"apihelp-query+backlinks-param-filterredir": "Comment filtrer les redirections. Si positionné à <kbd>nonredirects</kbd> quand <var>$1redirect</var> est activé, cela ne s’applique qu’au second niveau.",
- "apihelp-query+backlinks-param-limit": "Combien de pages renvoyer au total. Si $1redirect est activé, la limite s’applique à chaque niveau séparément (ce qui signifie jusqu’à 2 * limite résultats peut être retourné).",
+ "apihelp-query+backlinks-param-limit": "Combien de pages renvoyer au total. Si <var>$1redirect</var> est activé, la limite s’applique à chaque niveau séparément (ce qui signifie jusqu’à 2 * <var>$1limit</var> résultats pouvant être retournés).",
"apihelp-query+backlinks-param-redirect": "Si le lien vers une page est une redirection, trouver également toutes les pages qui ont un lien vers cette redirection. La limite maximale est divisée par deux.",
"apihelp-query+backlinks-example-simple": "Afficher les liens vers <kbd>Main page</kbd>.",
"apihelp-query+backlinks-example-generator": "Obtenir des informations sur les pages ayant un lien vers <kbd>Main page</kbd>.",
"apihelp-query+categorymembers-example-simple": "Obtenir les 10 premières pages de <kbd>Category:Physics</kbd>.",
"apihelp-query+categorymembers-example-generator": "Obtenir l’information sur les 10 premières pages de <kbd>Category:Physics</kbd>.",
"apihelp-query+contributors-description": "Obtenir la liste des contributeurs connectés et le nombre de contributeurs anonymes d’une page.",
- "apihelp-query+contributors-param-group": "Inclure uniquement les utilisateurs dans les groupes donnés. Ne pas inclure les groupes implicites ou auto-promus comme *, user ou autoconfirmed.",
+ "apihelp-query+contributors-param-group": "Inclut uniquement les utilisateurs dans les groupes donnés. N'inclut pas les groupes implicites ou auto-promus comme *, user ou autoconfirmed.",
"apihelp-query+contributors-param-excludegroup": "Exclure les utilisateurs des groupes donnés. Ne pas inclure les groupes implicites ou auto-promus comme *, user ou autoconfirmed.",
"apihelp-query+contributors-param-rights": "Inclure uniquement les utilisateurs ayant les droits donnés. Ne pas inclure les droits accordés par les groupes implicites ou auto-promus comme *, user ou autoconfirmed.",
"apihelp-query+contributors-param-excluderights": "Exclure les utilisateurs ayant les droits donnés. Ne pas inclure les droits accordés par les groupes implicites ou auto-promus comme *, user ou autoconfirmed.",
"apihelp-query+deletedrevs-example-mode3-main": "Lister les 50 premières révisions supprimées dans l’espace de noms principal (mode 3)",
"apihelp-query+deletedrevs-example-mode3-talk": "Lister les 50 premières pages supprimées dans l’espace de noms {{ns:talk}} (mode 3).",
"apihelp-query+disabled-description": "Ce module de requête a été désactivé.",
- "apihelp-query+duplicatefiles-description": "Lister tous les fichiers qui sont des doublons des fichiers donnés d’après leurs valeurs de hachage.",
+ "apihelp-query+duplicatefiles-description": "Lister d’après leurs valeurs de hachage, tous les fichiers qui sont des doublons de fichiers donnés.",
"apihelp-query+duplicatefiles-param-limit": "Combien de fichiers dupliqués à renvoyer.",
"apihelp-query+duplicatefiles-param-dir": "La direction dans laquelle lister.",
"apihelp-query+duplicatefiles-param-localonly": "Rechercher les fichiers uniquement dans le référentiel local.",
"apihelp-query+embeddedin-example-generator": "Obtenir des informations sur les pages incluant <kbd>Template:Stub</kbd>.",
"apihelp-query+extlinks-description": "Renvoyer toutes les URLs externes (non interwikis) des pages données.",
"apihelp-query+extlinks-param-limit": "Combien de liens renvoyer.",
- "apihelp-query+extlinks-param-protocol": "Protocole de l’URL. Si vide et <var>$1query</var> est positionné, le protocole est <kbd>http</kbd>. Laisser à la fois ceci et <var>$1query</var> vide pour lister tous les liens externes.",
+ "apihelp-query+extlinks-param-protocol": "Protocole de l’URL. Si vide et <var>$1query</var> est positionné, le protocole est <kbd>http</kbd>. Laisser à la fois ceci et <var>$1query</var> vides pour lister tous les liens externes.",
"apihelp-query+extlinks-param-query": "Rechercher une chaîne sans protocole. Utile pour vérifier si une certaine page contient une certaine URL externe.",
"apihelp-query+extlinks-param-expandurl": "Étendre les URLs relatives au protocole avec le protocole canonique.",
"apihelp-query+extlinks-example-simple": "Obtenir une liste des liens externes de <kbd>Main Page</kbd>.",
"apihelp-query+exturlusage-paramvalue-prop-title": "Ajoute le titre et l’ID de l’espace de noms de la page.",
"apihelp-query+exturlusage-paramvalue-prop-url": "Ajoute l’URL utilisée dans la page.",
"apihelp-query+exturlusage-param-protocol": "Protocole de l’URL. Si vide et que <var>$1query</var> est rempli, le protocole est <kbd>http</kbd>. Le laisser avec <var>$1query</var> vide pour lister tous les liens externes.",
- "apihelp-query+exturlusage-param-query": "Rechercher une chaîne sans protocole. Voyez [[Special:LinkSearch]]. Le laisser vide liste tous les liens externes.",
+ "apihelp-query+exturlusage-param-query": "Rechercher une chaîne sans protocole. Voyez [[Special:LinkSearch]]. Le laisser vide pour lister tous les liens externes.",
"apihelp-query+exturlusage-param-namespace": "Les espaces de nom à énumérer.",
"apihelp-query+exturlusage-param-limit": "Combien de pages renvoyer.",
"apihelp-query+exturlusage-param-expandurl": "Étendre les URLs relatives au protocole avec le protocole canonique.",
"apihelp-query+filearchive-paramvalue-prop-bitdepth": "Ajoute la profondeur de bit de la version.",
"apihelp-query+filearchive-paramvalue-prop-archivename": "Ajoute le nom de fichier de la version d’archive pour les versions autres que la dernière.",
"apihelp-query+filearchive-example-simple": "Afficher une liste de tous les fichiers supprimés",
- "apihelp-query+filerepoinfo-description": "Renvoyer les méta-informations sur les référentiels d’image configurés dans le wiki.",
+ "apihelp-query+filerepoinfo-description": "Renvoyer les méta-informations sur les référentiels d’images configurés dans le wiki.",
"apihelp-query+filerepoinfo-param-prop": "Quelles propriétés du référentiel récupérer (il peut y en avoir plus de disponibles sur certains wikis) :\n;apiurl:URL de l’API du référentiel - utile pour obtenir les infos de l’image depuis l’hôte.\n;name:La clé du référentiel - utilisé par ex. dans les valeurs de retour de <var>[[mw:Manual:$wgForeignFileRepos|$wgForeignFileRepos]]</var> et [[Special:ApiHelp/query+imageinfo|imageinfo]].\n;displayname:Le nom lisible du wiki référentiel.\n;rooturl:URL racine des chemins d’image.\n;local:Si ce référentiel est le référentiel local ou non.",
"apihelp-query+filerepoinfo-example-simple": "Obtenir des informations sur les référentiels de fichier.",
"apihelp-query+fileusage-description": "Trouver toutes les pages qui utilisent les fichiers donnés.",
"apihelp-query+imageinfo-paramvalue-prop-parsedcomment": "Analyser le commentaire de la version.",
"apihelp-query+imageinfo-paramvalue-prop-canonicaltitle": "Ajoute le titre canonique du fichier.",
"apihelp-query+imageinfo-paramvalue-prop-url": "Fournit l’URL du fichier et de la page de description.",
- "apihelp-query+imageinfo-paramvalue-prop-size": "Ajoute la taille du fichier en octets et sa hauteur, largeur et compteur de page (le cas échéant).",
+ "apihelp-query+imageinfo-paramvalue-prop-size": "Ajoute la taille du fichier en octets et sa hauteur, sa largeur et le compteur de page (le cas échéant).",
"apihelp-query+imageinfo-paramvalue-prop-dimensions": "Alias pour la taille.",
"apihelp-query+imageinfo-paramvalue-prop-sha1": "Ajoute le hachage SH1-1 du fichier.",
"apihelp-query+imageinfo-paramvalue-prop-mime": "Ajoute le type MIME du fichier.",
"apihelp-query+imageinfo-param-extmetadatalanguage": "Quelle langue pour analyser extmetadata. Cela affecte à la fois quelle traduction analyser, s’il y en a plusieurs, et comment les choses comme les nombres et d’autres valeurs sont mises en forme.",
"apihelp-query+imageinfo-param-extmetadatamultilang": "Si des traductions pour la propriété extmetadata sont disponibles, les analyser toutes.",
"apihelp-query+imageinfo-param-extmetadatafilter": "Si spécifié et non vide, seules ces clés seront renvoyées pour $1prop=extmetadata.",
- "apihelp-query+imageinfo-param-urlparam": "Une chaîne de paramètre spécifique à l’analyseur. Par exemple, les PDFs peuvent utiliser <kbd>page15-100px</kbd>. <var>$1urlwidth</var> doit être utilisé et être cohérent avec <var>$1urlparam</var>.",
+ "apihelp-query+imageinfo-param-urlparam": "Une chaîne de paramètres spécifique à l’analyseur. Par exemple, les PDFs peuvent utiliser <kbd>page15-100px</kbd>. <var>$1urlwidth</var> doit être utilisé et être cohérent avec <var>$1urlparam</var>.",
"apihelp-query+imageinfo-param-badfilecontexttitle": "Si <kbd>$2prop=badfile</kbd> est positionné, il s'agit du titre de la page utilisé pour évaluer la [[MediaWiki:Bad image list]]",
"apihelp-query+imageinfo-param-localonly": "Rechercher les fichiers uniquement dans le référentiel local.",
"apihelp-query+imageinfo-example-simple": "Analyser les informations sur la version actuelle de [[:File:Albert Einstein Head.jpg]].",
"apihelp-query+info-param-testactions": "Tester si l’utilisateur actuel peut effectuer certaines actions sur la page.",
"apihelp-query+info-param-token": "Utiliser plutôt [[Special:ApiHelp/query+tokens|action=query&meta=tokens]].",
"apihelp-query+info-example-simple": "Obtenir des informations sur la page <kbd>Main Page</kbd>.",
- "apihelp-query+info-example-protection": "Obtenir des informations générale et de protection sur la page <kbd>Main Page</kbd>.",
- "apihelp-query+iwbacklinks-description": "Trouver toutes les pages qui ont un lien vers le lien interwiki indiqué.\n\nPeut être utilisé pour trouver tous les liens avec un préfixe, ou tous les liens vers un titre (avec un préfixe donné). N’utiliser aucun paramètre revient en pratique à « tous les liens interwiki ».",
+ "apihelp-query+info-example-protection": "Obtenir des informations générales et de protection sur la page <kbd>Main Page</kbd>.",
+ "apihelp-query+iwbacklinks-description": "Trouver toutes les pages qui ont un lien vers le lien interwiki indiqué.\n\nPeut être utilisé pour trouver tous les liens avec un préfixe, ou tous les liens vers un titre (avec un préfixe donné). Sans paramètre, équivaut à « tous les liens interwiki ».",
"apihelp-query+iwbacklinks-param-prefix": "Préfixe pour l’interwiki.",
"apihelp-query+iwbacklinks-param-title": "Lien interwiki à rechercher. Doit être utilisé avec <var>$1blprefix</var>.",
"apihelp-query+iwbacklinks-param-limit": "Combien de pages renvoyer.",
"apihelp-query+iwbacklinks-paramvalue-prop-iwprefix": "Ajoute le préfixe de l’interwiki.",
"apihelp-query+iwbacklinks-paramvalue-prop-iwtitle": "Ajoute le titre de l’interwiki.",
"apihelp-query+iwbacklinks-param-dir": "La direction dans laquelle lister.",
- "apihelp-query+iwbacklinks-example-simple": "Obtenir les pages ayant un lien vers [[wikibooks:Test]]",
- "apihelp-query+iwbacklinks-example-generator": "Obtenir des informations sur les pages ayant un lien vers [[wikibooks:Test]]",
+ "apihelp-query+iwbacklinks-example-simple": "Obtenir les pages qui ont un lien vers [[wikibooks:Test]].",
+ "apihelp-query+iwbacklinks-example-generator": "Obtenir des informations sur les pages qui ont un lien vers [[wikibooks:Test]].",
"apihelp-query+iwlinks-description": "Renvoie tous les liens interwiki des pages indiquées.",
- "apihelp-query+iwlinks-param-url": "S&il faut obtenir l’URL complète (impossible à utiliser avec $1prop).",
+ "apihelp-query+iwlinks-param-url": "S'il faut obtenir l’URL complète (impossible à utiliser avec $1prop).",
"apihelp-query+iwlinks-param-prop": "Quelles propriétés supplémentaires obtenir pour chaque lien interlangue :",
"apihelp-query+iwlinks-paramvalue-prop-url": "Ajoute l’URL complète.",
"apihelp-query+iwlinks-param-limit": "Combien de liens interwiki renvoyer.",
"apihelp-query+langbacklinks-paramvalue-prop-lllang": "Ajoute le code de langue du lien de langue.",
"apihelp-query+langbacklinks-paramvalue-prop-lltitle": "Ajoute le titre du lien de langue.",
"apihelp-query+langbacklinks-param-dir": "La direction dans laquelle lister.",
- "apihelp-query+langbacklinks-example-simple": "Obtenir les pages avec un lien avec [[:fr:Test]]",
- "apihelp-query+langbacklinks-example-generator": "Obtenir des informations sur les pages ayant un lien vers [[:fr:Test]]",
+ "apihelp-query+langbacklinks-example-simple": "Obtenir les pages ayant un lien vers [[:fr:Test]].",
+ "apihelp-query+langbacklinks-example-generator": "Obtenir des informations sur les pages ayant un lien vers [[:fr:Test]].",
"apihelp-query+langlinks-description": "Renvoie tous les liens interlangue des pages fournies.",
"apihelp-query+langlinks-param-limit": "Combien de liens interlangue renvoyer.",
"apihelp-query+langlinks-param-url": "S’il faut récupérer l’URL complète (impossible à utiliser avec <var>$1prop</var>).",
"apihelp-query+revisions+base-param-parse": "Analyser le contenu de la révision (nécessite $1prop=content). Pour des raisons de performance, si cette option est utilisée, $1limit est forcé à 1.",
"apihelp-query+revisions+base-param-section": "Récupérer uniquement le contenu de ce numéro de section.",
"apihelp-query+revisions+base-param-diffto": "ID de révision à comparer à chaque révision. Utiliser <kbd>prev</kbd>, <kbd>next</kbd> et <kbd>cur</kbd> pour la version précédente, suivante et actuelle respectivement.",
- "apihelp-query+revisions+base-param-difftotext": "Texte auquel comparer chaque révision. Compare uniquement un nombre limité de révisions. Écrase <var>$1diffto</var>. Si <var>$1section</var> est positionné, seule cette section sera comparée avec ce texte",
+ "apihelp-query+revisions+base-param-difftotext": "Texte auquel comparer chaque révision. Compare uniquement un nombre limité de révisions. Écrase <var>$1diffto</var>. Si <var>$1section</var> est positionné, seule cette section sera comparée avec ce texte.",
"apihelp-query+revisions+base-param-difftotextpst": "Effectuer une transformation avant enregistrement sur le texte avant de le comparer. Valide uniquement quand c’est utilisé avec <var>$1difftotext</var>.",
"apihelp-query+revisions+base-param-contentformat": "Format de sérialisation utilisé pour <var>$1difftotext</var> et attendu pour la sortie du contenu.",
"apihelp-query+search-description": "Effectuer une recherche en texte intégral.",
"apihelp-query+search-param-search": "Rechercher les titres de page ou le contenu correspondant à cette valeur. Vous pouvez utiliser la chaîne de recherche pour invoquer des fonctionnalités de recherche spéciales, selon ce que le serveur de recherche du wiki implémente.",
- "apihelp-query+search-param-namespace": "Rechercher uniquement dans ces espaces de nom.",
+ "apihelp-query+search-param-namespace": "Rechercher uniquement dans ces espaces de noms.",
"apihelp-query+search-param-what": "Quel type de recherche effectuer.",
"apihelp-query+search-param-info": "Quelles métadonnées renvoyer.",
"apihelp-query+search-param-prop": "Quelles propriétés renvoyer :",
"apihelp-unblock-param-tags": "Modifier les balises à appliquer à l’entrée dans le journal de blocage.",
"apihelp-unblock-example-id": "Lever le blocage d’ID #<kbd>105</kbd>.",
"apihelp-unblock-example-user": "Débloquer l’utilisateur <kbd>Bob</kbd> avec le motif <kbd>Désolé Bob</kbd>.",
- "apihelp-undelete-description": "Restaurer les révisions d’une page supprimée.\n\nUne liste des révisions supprimées (avec les horodatages) peut être récupérée via [[Special:ApiHelp/query+deletedrevs|list=deletedrevs]], et une liste d’IDs de fichier supprimé peut être récupérée via [[Special:ApiHelp/query+filearchive|list=filearchive]].",
+ "apihelp-undelete-description": "Restaurer les révisions d’une page supprimée.\n\nUne liste des révisions supprimées (avec les horodatages) peut être récupérée via [[Special:ApiHelp/query+deletedrevisions|prop=deletedrevisions]], et une liste d’IDs de fichier supprimé peut être récupérée via [[Special:ApiHelp/query+filearchive|list=filearchive]].",
"apihelp-undelete-param-title": "Titre de la page à restaurer.",
"apihelp-undelete-param-reason": "Motif de restauration.",
"apihelp-undelete-param-tags": "Modifier les balises à appliquer à l’entrée dans le journal de suppression.",
"apiwarn-redirectsandrevids": "La résolution de la redirection ne peut pas être utilisée avec le paramètre <var>revids</var>. Toutes les redirections vers lesquelles pointent <var>revids</var> n’ont pas été résolues.",
"apiwarn-tokennotallowed": "L'action « $1 » n'est pas autorisée pour l'utilisateur actuel.",
"apiwarn-tokens-origin": "Les jetons ne peuvent pas être obtenus quand la politique de même origine n’est pas appliquée.",
- "apiwarn-toomanyvalues": "Trop de valeurs fournies pour le paramètre <var>$1</var>: la limite est $2.",
+ "apiwarn-toomanyvalues": "Trop de valeurs fournies pour le paramètre <var>$1</var>. La limite est $2.",
"apiwarn-truncatedresult": "Ce résultat a été tronqué parce que sinon, il dépasserait la limite de $1 octets.",
- "apiwarn-unclearnowtimestamp": "Passer « $2 » comme paramètre d’horodatage <var>$1</var> a été rendu obsolète. Si, pour une raison quelconque, vous avez besoin de spécifier explicitement l’heure courante sans la recalculer du côté client, utilisez <kbd>now<kbd>.",
+ "apiwarn-unclearnowtimestamp": "Passer « $2 » comme paramètre d’horodatage <var>$1</var> a été rendu obsolète. Si, pour une raison quelconque, vous avez besoin de spécifier explicitement l’heure courante sans la recalculer du côté client, utilisez <kbd>now</kbd>.",
"apiwarn-unrecognizedvalues": "{{PLURAL:$3|Valeur non reconnue|Valeurs non reconnues}} pour le paramètre <var>$1</var> : $2.",
"apiwarn-unsupportedarray": "Le paramètre <var>$1</var> utilise une syntaxe PHP de tableau non prise en charge.",
"apiwarn-urlparamwidth": "Valeur de la largeur définie dans <var>$1urlparam</var> ($2) ignorée en faveur de la largeur calculée à partir de <var>$1urlwidth</var>/<var>$1urlheight</var> ($3).",
"apihelp-unblock-param-tags": "Cambiar as etiquetas a aplicar na entrada do rexistro de bloqueo.",
"apihelp-unblock-example-id": "Desbloquear bloqueo ID #<kbd>105</kbd>.",
"apihelp-unblock-example-user": "Desbloquear usuario <kbd>Bob</kbd> con razón <kbd>Síntoo Bob</kbd>.",
- "apihelp-undelete-description": "Restaurar modificacións dunha páxina borrada.\n\nUnha lista de modificacións borradas (incluíndo os seus selos de tempo) pode consultarse a través de [[Special:ApiHelp/query+deletedrevs|list=deletedrevs]], e unha lista de IDs de ficheiros borrados pode consultarse a través de [[Special:ApiHelp/query+filearchive|list=filearchive]].",
+ "apihelp-undelete-description": "Restaurar modificacións dunha páxina borrada.\n\nUnha lista de modificacións borradas (incluíndo os seus selos de tempo) pode consultarse a través de [[Special:ApiHelp/query+deletedrevisions|prop=deletedrevisions]], e unha lista de IDs de ficheiros borrados pode consultarse a través de [[Special:ApiHelp/query+filearchive|list=filearchive]].",
"apihelp-undelete-param-title": "Título da páxina a restaurar.",
"apihelp-undelete-param-reason": "Razón para restaurar.",
"apihelp-undelete-param-tags": "Cambiar as etiquetas a aplicar na entrada do rexistro de borrado.",
"apierror-reauthenticate": "Non se autentificou recentemente nesta sesión. Por favor, volva a autentificarse.",
"apierror-revwrongpage": "r$1 non é unha revisión de $2.",
"apierror-searchdisabled": "A busca <var>$1</var> está desactivada.",
+ "apierror-sectionreplacefailed": "Non se puido combinar a sección actualizada.",
+ "apierror-sectionsnotsupported": "As seccións non son compatibles co modelo de contido $1.",
"apierror-sectionsnotsupported-what": "As seccións non son compatibles con $1.",
"apierror-show": "Parámetro incorrecto - non se poden proporcionar valores mutuamente excluíntes.",
+ "apierror-siteinfo-includealldenied": "Non se pode ver a información de tódolos servidores a menos que <var>$wgShowHostNames</var> teña valor verdadeiro.",
"apierror-sizediffdisabled": "A diferenza de tamaño está deshabilitada no modo Miser.",
"apierror-spamdetected": "A súa edición foi rexeitada por conter un fragmento de publicidade: <code>$1</code>.",
"apierror-specialpage-cantexecute": "Non ten permiso para ver os resultados desta páxina especial.",
"apierror-unknownformat": "Formato descoñecido \"$1\".",
"apierror-unrecognizedparams": "{{PLURAL:$2|Parámetro non recoñecido|Parámetros non recoñecidos}}: $1.",
"apierror-unrecognizedvalue": "Valor non recoñecido para o parámetro <var>$1</var>: $2.",
+ "apierror-urlparamnormal": "Non se puideron normalizar os parámetros de imaxe de $1.",
+ "apierror-writeapidenied": "Non ten permiso para editar este wiki a través da API.",
+ "apiwarn-alldeletedrevisions-performance": "Para ter un mellor rendemento á hora de xerar títulos, estableza <kbd>$1dir=newer</kbd>.",
+ "apiwarn-badurlparam": "Non se puido analizar <var>$1urlparam</var> para $2. Só se usará a anchura e a altura.",
"apiwarn-deprecation-httpsexpected": "Utilizouse HTTP cando esperábase HTTPS.",
"apiwarn-deprecation-parameter": "O parámetro <var>$1</var> está obsoleto.",
"apiwarn-invalidcategory": "\"$1\" non é unha categoría.",
"apihelp-block-param-allowusertalk": "לאפשר למשתמש לערוך את דף השיחה שלו או שלה (תלוי ב־<var>[[mw:Manual:$wgBlockAllowsUTEdit|$wgBlockAllowsUTEdit]]</var>).",
"apihelp-block-param-reblock": "אם המשתמש כבר חסום, לדרוס את החסימה הנוכחית.",
"apihelp-block-param-watchuser": "לעקוב אחרי דף המשתמש ודף השיחה של המשתמש או של כתובת ה־IP.",
+ "apihelp-block-param-tags": "תגי שינוי שיחולו על העיול ביומן החסימה.",
"apihelp-block-example-ip-simple": "חסימת כתובת ה־IP <kbd>192.0.2.5</kbd> לשלושה ימים עם הסיבה <kbd>First strike</kbd>.",
"apihelp-block-example-user-complex": "חסימת המשתמש <kbd>Vandal</kbd> ללא הגבלת זמן עם הסיבה <kbd>Vandalism</kbd>, ומניעת יצירת חשבונות חדשים ושליחת דוא\"ל.",
"apihelp-changeauthenticationdata-description": "שינוי נתוני אימות עבור המשתמש הנוכחי.",
"apihelp-delete-param-title": "כותרת העמוד למחיקה. לא ניתן להשתמש בשילוב עם <var>$1pageid</var>.",
"apihelp-delete-param-pageid": "מס׳ הזיהוי של העמוד למחיקה. לא ניתן להשתמש בשילוב עם <var>$1title</var>.",
"apihelp-delete-param-reason": "סיבת המחיקה. אם לא הוגדרה, תתווסף סיבה שנוצרה אוטומטית.",
- "apihelp-delete-param-tags": "×\9c×©× ×\95ת ×\90ת ×\94ת×\92×\99×\9d ×\9b×\93י שיחולו על העיול ביומן המחיקה.",
+ "apihelp-delete-param-tags": "ת×\92×\99 ש×\99× ×\95י שיחולו על העיול ביומן המחיקה.",
"apihelp-delete-param-watch": "הוספת העמוד לרשימת המעקב של המשתמש הנוכחי.",
"apihelp-delete-param-watchlist": "הוספה או הסרה של הדף ללא תנאי מרשימת המעקב של המשתמש הנוכחי, להשתמש בהעדפות או לא לשנות את המעקב.",
"apihelp-delete-param-unwatch": "הסרת הדף מרשימת המעקב של של המשתמש הנוכחי.",
"apihelp-import-param-templates": "ליבוא בין אתרי ויקי: לייבא גם את כל התבניות המוכללות.",
"apihelp-import-param-namespace": "לייבא למרחב השם הזה. לא ניתן להשתמש בזה יחד עם <var>$1rootpage</var>.",
"apihelp-import-param-rootpage": "לייבא בתור תת־משנה של הדף הזה. לא ניתן להשתמש בזה יחד עם <var>$1namespace</var>.",
+ "apihelp-import-param-tags": "תגי שינוי שיחולו על העיול ביומן הייבוא ולגרסה הריקה בדפים המיובאים.",
"apihelp-import-example-import": "לייבא את [[meta:Help:ParserFunctions]] למרחב השם 100 עם היסטוריה מלאה.",
"apihelp-linkaccount-description": "קישור חשבון של ספק צד־שלישי למשתמש הנוכחי.",
"apihelp-linkaccount-example-link": "תחילת תהליך הקישור לחשבון מ־<kbd>Example</kbd>.",
"apihelp-managetags-param-tag": "תג ליצירה, מחיקה, הפעלה או כיבוי. ליצירת תג, התג לא צריך להיות קיים. למחיקת תג, התג צריך להיות קיים. להפעלת תג, התג צריך להתקיים ולא להיות בשימוש של הרחבה. לכיבוי תג, התג צריך להיות קיים ומוגדר ידנית.",
"apihelp-managetags-param-reason": "סיבה אופציונלית ליצירה, מחיקה, הפעלה או כיבוי של תג.",
"apihelp-managetags-param-ignorewarnings": "האם להתעלם מכל האזהרות שמופיעות תוך כדי הפעולה.",
+ "apihelp-managetags-param-tags": "תגי השינוי שיחולו על העיול ביומן ניהול התגים.",
"apihelp-managetags-example-create": "יצירת תג בשם <kbd>spam</kbd> עם הסיבה <kbd>For use in edit patrolling</kbd>",
"apihelp-managetags-example-delete": "מחיקת התג <kbd>vandlaism</kbd> עם הסיבה <kbd>Misspelt</kbd>",
"apihelp-managetags-example-activate": "הפעלת התג <kbd>spam</kbd> עם הסיבה <kbd>For use in edit patrolling</kbd>",
"apihelp-move-param-unwatch": "הסרת הדף וההפניה מרשימת המעקב של המשתמש הנוכחי.",
"apihelp-move-param-watchlist": "הוספה או הסרה של הדף ללא תנאי מרשימת המעקב של המשתמש הנוכחי, להשתמש בהעדפות או לא לשנות את המעקב.",
"apihelp-move-param-ignorewarnings": "להתעלם מכל האזהרות.",
+ "apihelp-move-param-tags": "תגי שינוי שיחולו על העיול ביומן ההעברות ולגרסה הריקה בדף היעד.",
"apihelp-move-example-move": "העברת <kbd>Badtitle</kbd> ל־<kbd>Goodtitle</kbd> בלי להשאיר הפניה.",
"apihelp-opensearch-description": "חיפוש בוויקי בפרוטוקול OpenSearch.",
"apihelp-opensearch-param-search": "מחרוזת לחיפוש.",
"apihelp-query+usercontribs-param-end": "באיזה חותם־הזמן לסיים",
"apihelp-query+usercontribs-param-user": "עבור אילו משתמשים לאחזר תרומות. לא יכול לשמש עם <var>$1userids</var> או <var>$1userprefix</var>.",
"apihelp-query+usercontribs-param-userprefix": "אחזור תרומות עבור כל המשתמשים שהשמות שלהם מתחילים בערך הזה. לא יכול לשמש עם <var>$1user</var> או <var>$1userids</var>.",
+ "apihelp-query+usercontribs-param-userids": "מזהי המשתמשים לאחזור תרומות. לא יכול לשמש עם <var>$1user</var> או <var>$1userprefix</var>.",
"apihelp-query+usercontribs-param-namespace": "לרשום רק תרומות במרחבי השם האלה.",
"apihelp-query+usercontribs-param-prop": "לכלול פריטי מידע נוספים:",
"apihelp-query+usercontribs-paramvalue-prop-ids": "הוספת מזהה הדף ומזהה הגרסה.",
"apihelp-query+userinfo-paramvalue-prop-blockinfo": "מתייג אם המשתמש הנוכחי נחסם, על־ידי מי ומאיזו סיבה.",
"apihelp-query+userinfo-paramvalue-prop-hasmsg": "הוספת התג <samp>messages</samp> אם למשתמש הנוכחי יש הודעות ממתינות.",
"apihelp-query+userinfo-paramvalue-prop-groups": "רשימת כל הקבוצות שהמשתמש שייך אליהן.",
+ "apihelp-query+userinfo-paramvalue-prop-groupmemberships": "לרשום קבוצות שהמשתמש הנוכחי משויך אליהן במפורש, כולל תאריך תפוגה לחברות בכל קבוצה.",
"apihelp-query+userinfo-paramvalue-prop-implicitgroups": "רשימת כל הקבוצות שהמשתמש שייך אליהן באופן אוטומטי.",
"apihelp-query+userinfo-paramvalue-prop-rights": "רשימת כל ההרשאות שיש למשתמש הזה.",
"apihelp-query+userinfo-paramvalue-prop-changeablegroups": "רשימת הקבוצות שהמשתמש הנוכחי יכול להוסיף אליהן ולגרוע מהן.",
"apihelp-query+users-param-prop": "אילו חלקי מידע לקבל:",
"apihelp-query+users-paramvalue-prop-blockinfo": "מתייג אם המשתמש חסום, על־ידי מי, ומאיזו סיבה.",
"apihelp-query+users-paramvalue-prop-groups": "רשימת כל הקבוצות שהמשתמש שייך אליהן.",
+ "apihelp-query+users-paramvalue-prop-groupmemberships": "לרשום קבוצות שכל משתמש משויך אליהן במפורש, כולל תאריך תפוגה לחברות בכל קבוצה.",
"apihelp-query+users-paramvalue-prop-implicitgroups": "רשימת כל הקבוצות שהמשתמש חבר בהן אוטומטית.",
"apihelp-query+users-paramvalue-prop-rights": "רשימת כל ההרשאות שיש למשתמש.",
"apihelp-query+users-paramvalue-prop-editcount": "הוספת מניין העריכות של המשתמש.",
"apihelp-setpagelanguage-description": "שנה את השפה של דף",
"apihelp-setpagelanguage-description-disabled": "שינוי השפה של דף לא מורשה בוויקי זה.\n\nהפעל את <var>[[mw:Manual:$wgPageLanguageUseDB|$wgPageLanguageUseDB]]</var> על מנת להשתמש בפעולה זו",
"apihelp-setpagelanguage-param-title": "כותרת הדף שאת שפתו ברצונך לשנות. לא אפשרי להשתמש באפשרות עם <var>$1pageid</var>.",
+ "apihelp-setpagelanguage-param-reason": "הסיבה לשינוי.",
"apihelp-setpagelanguage-param-tags": "אילו תגי שינוי להחיל על העיול ביומן שמתבצע כתוצאה מהפעולה הזאת.",
+ "apihelp-setpagelanguage-example-language": "שינוי השפה של <kbd>Main Page</kbd> לבסקית.",
+ "apihelp-setpagelanguage-example-default": "שינוי השפה של הדף בעל המזהה 123 לשפה הרגילה של הוויקי.",
"apihelp-stashedit-description": "הכנת עריכה במטמון משותף.\n\nזה מיועד לשימוש דרך AJAX מתוך ערך כדי לשפר את הביצועים של שמירת הדף.",
"apihelp-stashedit-param-title": "כותרת הדף הנערך.",
"apihelp-stashedit-param-section": "מספר הפסקה. <kbd>0</kbd> עבור הפסקה הראשונה, <kbd>new</kbd> עבור פסקה חדשה.",
"apihelp-unblock-param-tags": "תגי שינוי שיחולו על העיול ביומן החסימה.",
"apihelp-unblock-example-id": "לשחרר את החסימה עם מזהה #<kbd>105</kbd>.",
"apihelp-unblock-example-user": "לשחרר את החסימה של המשתמש <kbd>Bob</kbd> עם הסיבה <kbd>Sorry Bob</kbd>.",
- "apihelp-undelete-description": "שחזור גרסאות של דף מחוק.\n\nאפשר לאחזר רשימת גרסאות מחוקות (כולל חותמי־זמן) דרך [[Special:ApiHelp/query+deletedrevs|list=deletedrevs]], ואפשר לאחזר רשימת מזהי קבצים מחוקים דרך [[Special:ApiHelp/query+filearchive|list=filearchive]].",
+ "apihelp-undelete-description": "שחזור גרסאות של דף מחוק.\n\nאפשר לאחזר רשימת גרסאות מחוקות (כולל חותמי־זמן) דרך [[Special:ApiHelp/query+deletedrevisions|prop=deletedrevisions]], ואפשר לאחזר רשימת מזהי קבצים מחוקים דרך [[Special:ApiHelp/query+filearchive|list=filearchive]].",
"apihelp-undelete-param-title": "שם הדף לשחזור ממחיקה.",
"apihelp-undelete-param-reason": "סיבה לשחזור.",
"apihelp-undelete-param-tags": "תגי שינוי שיחולו על העיול ביומן המחיקה.",
"apierror-integeroutofrange-abovemax": "<var>$1</var> אינו יכול להיות גדול מ־$2 (עכשיו מוגדר $3) עבור משתמשים.",
"apierror-integeroutofrange-belowminimum": "<var>$1</var> אינו יכול להיות גדול מ־$2 (עכשיו מוגדר $3).",
"apierror-invalidcategory": "שם הקטגוריה שהזנת אינו תקין.",
+ "apierror-invalidexpiry": "זמן תפוגה בלתי־תקין \"$1\".",
"apierror-invalid-file-key": "לא מפתח קובץ תקין.",
"apierror-invalidtitle": "כותרת רעה \"$1\".",
"apierror-invaliduser": "שם משתמש בלתי־תקין \"$1\".",
"apierror-upload-filekeyneeded": "חובה לספק <var>filekey</var> כאשר <var>offset</var> אינו אפס.",
"apierror-upload-filekeynotallowed": "לא ניתן לספק <var>filekey</var> כאשר <var>offset</var> הוא 0.",
"apierror-upload-missingresult": "אין תוצאות בנתוני מצב.",
+ "apierror-writeapidenied": "אין לך הרשאה לערוך את הוויקי הזה דרך ה־API.",
+ "apiwarn-alldeletedrevisions-performance": "לביצועים טובים יותר בעת יצירת כותרת, יש להשתמש ב־<kbd>$1dir=newer</kbd>.",
+ "apiwarn-badurlparam": "לא היה אפשר לפענח את <var>$1urlparam</var> עבור $2. משתמשים רק ב־width ו־height.",
+ "apiwarn-badutf8": "הערך הערך שהועבר ל־<var>$1</var> מכיל נתונים בלתי־תקינים או בלתי־מנורמלים. נתונים טקסט אמורים להיות תקינים, מנורמלי NFC ללא תווי בקרה C0 למעט HT (\\t), LF (\\n), ו־CR (\\r).",
+ "apiwarn-checktoken-percentencoding": "נא לבדוק שסימנים כמו \"+\" באסימון מקודדים עם אחוזים בצורה נכונה ב־URL.",
+ "apiwarn-deprecation-deletedrevs": "<kbd>list=deletedrevs</kbd> הוצהר בתור מיושן. נא להשתמש ב־ <kbd>prop=deletedrevisions</kbd> או ב־<kbd>list=alldeletedrevisions</kbd> במקום זה.",
+ "apiwarn-deprecation-expandtemplates-prop": "מכיוון שלא ניתנו ערכים לפרמטר <var>prop</var>, תסדיר מיושן ישמש לפלט. התסדיר הזה מיושן, ובעתיד יינתן ערך בררת מחדל לפרמטר <var>prop</var>, כך שתמיד ישמש התסדיר החדש.",
+ "apiwarn-deprecation-httpsexpected": "משמש HTTP כשהיה צפוי HTTPS.",
+ "apiwarn-deprecation-login-botpw": "כניסה לחשבון עיקרי (main-account) דרך <kbd>action=login</kbd> מיושנת ועלולה להפסיק לעבוד ללא אזהרה נוספת. כדי להמשיך להיכנס עם <kbd>action=login</kbd>, ר' [[Special:BotPasswords]]. כדי להמשיך באופן מאובטח באמצעות חשבון עיקרי, ר' <kbd>action=clientlogin</kbd>.",
+ "apiwarn-deprecation-login-token": "אחזור אסימון דרך <kbd>action=login</kbd> מיושן. נא להשתמש ב־<kbd>action=query&meta=tokens&type=login</kbd> במקום זה.",
+ "apiwarn-deprecation-parameter": "הפרמטר <var>$1</var> מיושן.",
+ "apiwarn-deprecation-parse-headitems": "<kbd>prop=headitems</kbd> מיושן מאז מדיה־ויקי 1.28. יש להשתמש ב־<kbd>prop=headhtml</kbd> בעת יצירת מסמכי HTML חדשים, או ב־<kbd>prop=modules|jsconfigvars</kbd> בעת עדכון מסמך בצד הלקוח.",
+ "apiwarn-deprecation-purge-get": "שימוש ב־<kbd>action=purge</kbd> דרך GET מיושן. יש להשתמש ב־POST במקום זה.",
+ "apiwarn-deprecation-withreplacement": "<kbd>$1</kbd> מיושן. יש להשתמש ב־<kbd>$2</kbd> במקום זה.",
+ "apiwarn-difftohidden": "לא היה אפשר לעשות השוואה עם גרסה $1: התוכן מוסתר.",
+ "apiwarn-errorprinterfailed": "מדפיס השגיאות לא עבד. ינסה שוב ללא פרמטרים.",
+ "apiwarn-errorprinterfailed-ex": "מדפיס השגיאות לא עבד (ינסה שוב ללא פרמטרים): $1",
"apiwarn-invalidcategory": "\"$1\" אינה קטגוריה.",
"apiwarn-invalidtitle": "\"$1\" אינה כותרת תקינה.",
+ "apiwarn-invalidxmlstylesheetext": "לגיליון הסגנונות אמור להיות הסיומת <code dir=\"ltr\">.xsl</code>.",
+ "apiwarn-invalidxmlstylesheet": "ניתן גיליון סגנונות שאינו תקין או אינו קיים.",
+ "apiwarn-invalidxmlstylesheetns": "גיליון הסגנונות אמור להיות במרחב השם {{ns:MediaWiki}}.",
+ "apiwarn-moduleswithoutvars": "המאפיין <kbd>modules</kbd> לא הוגדר, אבל לא <kbd>jsconfigvars</kbd> או <kbd>encodedjsconfigvars</kbd>. משתני הגדרות נחוצים בשביל שימוש נכון במודולים.",
"apiwarn-notfile": "\"$1\" אינו קובץ.",
+ "apiwarn-nothumb-noimagehandler": "לא היה אפשר ליצור תמונה ממוזערת כי לקובץ $1 לא משויך מטפל תמונה.",
+ "apiwarn-parse-nocontentmodel": "לא ניתן <var>title</var> או <var>contentmodel</var>, נניח שזה $1.",
+ "apiwarn-parse-titlewithouttext": "<var>title</var> שימש ללא <var>text</var>, והתבקשו מאפייני דף מפוענח. האם התכוונת להשתמש ב־<var>page</var> במקום <var>title</var>?",
+ "apiwarn-redirectsandrevids": "פתרון הפניות לא יכול לשמש יחד עם הפרמטר <var>revids</var>. הפניות ש־<var>revids</var> מצביע אליהן לא נפתרו.",
+ "apiwarn-tokennotallowed": "הפעולה \"$1\" אינה מותרת למשתמש הנוכחי.",
+ "apiwarn-tokens-origin": "לא ניתן לקבל אסימונים כשמדיניות המקור הזהה אינה חלה.",
+ "apiwarn-toomanyvalues": "יותר מדי ערכים סופקו לפרמטר <var>$1</var>: המגבלה היא $2.",
+ "apiwarn-truncatedresult": "התוצאה נחתכה כי אחרת היא הייתה ארוכה מהמגבלה של $1 בתים.",
+ "apiwarn-unclearnowtimestamp": "העברת \"$2\" בתור פרמטר חותם־זמן <var>$1</var> הוצהרה בתור מיושנת. אם מסיבה כלשהי אתם צריכים להגדיר במפורש את הזמן הנוכחי ללא חישובו בצד הלקוח, יש להשתמש ב־<kbd>now</kbd>.",
+ "apiwarn-unrecognizedvalues": "לפרמטר <var>$1</var> היתנ ג{{PLURAL:$3|ניתן ערך בלתי־ידוע|ניתנו ערכים בלתי־ידועים}}: $2.",
+ "apiwarn-unsupportedarray": "הפרמטר <var>$1</var> משתמש בתחביר מערכים שאינו נתמך ב־PHP.",
+ "apiwarn-urlparamwidth": "התעלמות מרוחב (width) שהוגדר ב־<var>$1urlparam</var> (ערך: $2) לטובת רוחב שנגזר מ־<var>$1urlwidth</var>/<var>$1urlheight</var> (ערך: $3).",
+ "apiwarn-validationfailed-badchars": "תווים בלתי־תקינים במפתח (מותרים רק <code>a-z</code>, <code>A-Z</code>, <code>0-9</code>, <code>_</code>, ו־<code>-</code>).",
"apiwarn-validationfailed-badpref": "לא העדפה תקינה.",
"apiwarn-validationfailed-cannotset": "לא יכולה להיות מוגדרת על־ידי המודול הזה.",
"apiwarn-validationfailed-keytoolong": "המפתח ארוך מדי (מותר לכתוב לא יותר מ־$1 בתים).",
"apiwarn-wgDebugAPI": "<strong>אזהרת אבטחה</strong>: <var dir=\"ltr\">$wgDebugAPI</var> מופעל.",
"api-feed-error-title": "שגיאה ($1)",
"api-usage-docref": "ר' $1 לשימוש ב־API.",
+ "api-usage-mailinglist-ref": "עשו מינוי לרשימת התפוצה mediawiki-api-announce בכתובת <https://lists.wikimedia.org/mailman/listinfo/mediawiki-api-announce> בשביל הודעות על התיישנות API ושינויים שוברים.",
"api-exception-trace": "$1 בקובץ $2 (שורה $3)\n$4",
"api-credits-header": "קרדיטים",
"api-credits": "מפתחי ה־API:\n* רואן קטאו (מפתח מוביל 2007–2009)\n* ויקטור וסילייב\n* בריאן טונג מין\n* סאם ריד\n* יורי אסטרחן (יוצר, מפתח מוביל מספטמבר 2006 עד ספטמבר 2007)\n* בראד יורש (מפתח מוביל מאז 2013)\n\nאנא שלחו הערות, הצעות ושאלות לכתובת mediawiki-api@lists.wikimedia.org או כתבו דיווח באג באתר https://phabricator.wikimedia.org."
"apihelp-protect-example-protect": "ページを保護する。",
"apihelp-protect-example-unprotect": "制限値を <kbd>all</kbd> にしてページの保護を解除する。",
"apihelp-protect-example-unprotect2": "制限を設定されたページ保護を解除します。",
- "apihelp-purge-description": "指定されたページのキャッシュをパージします。\n\n利用者がログインしていない場合は、 POST リクエストが必要です。",
+ "apihelp-purge-description": "指定されたページのキャッシュを破棄します。",
"apihelp-purge-param-forcelinkupdate": "リンクテーブルを更新します。",
"apihelp-purge-example-simple": "ページ <kbd>Main Page</kbd> および <kbd>API</kbd> をパージする。",
"apihelp-purge-example-generator": "標準名前空間にある最初の10ページをパージする。",
"apihelp-query+transcludedin-example-generator": "<kbd>Main Page</kbd> をトランスクルードしているページに関する情報を取得する。",
"apihelp-query+usercontribs-description": "利用者によるすべての編集を取得します。",
"apihelp-query+usercontribs-param-limit": "返す投稿記録の最大数。",
- "apihelp-query+usercontribs-param-user": "投稿記録を取得する利用者。",
- "apihelp-query+usercontribs-param-userprefix": "この値で始まる名前のすべての利用者の投稿記録を取得します。$1user をオーバーライドします。",
+ "apihelp-query+usercontribs-param-user": "投稿記録を取得する利用者。<var>$1userids</var> または <var>$1userprefix</var> とは同時に使用できません。",
+ "apihelp-query+usercontribs-param-userprefix": "この値で始まる名前のすべての利用者の投稿記録を取得します。<var>$1user</var> または <var>$1userids</var> とは同時に使用できません。",
+ "apihelp-query+usercontribs-param-userids": "投稿記録を取得する利用者のID。<var>$1user</var> または <var>$1userprefix</var> とは同時に使用できません。",
"apihelp-query+usercontribs-param-namespace": "この名前空間への投稿記録のみを一覧表示する。",
"apihelp-query+usercontribs-paramvalue-prop-ids": "ページIDと版IDを追加します。",
"apihelp-query+usercontribs-paramvalue-prop-title": "ページ名と名前空間IDを追加します。",
"apihelp-query+watchlistraw-param-prop": "追加で取得するプロパティ:",
"apihelp-query+watchlistraw-param-dir": "一覧表示する方向。",
"apihelp-query+watchlistraw-example-generator": "現在の利用者のウォッチリスト上のページに関する情報を取得する。",
+ "apihelp-resetpassword-example-user": "利用者 <kbd>Example</kbd> にパスワード再設定の電子メールを送信する。",
"apihelp-revisiondelete-description": "版の削除および復元を行います。",
"apihelp-revisiondelete-param-reason": "削除または復元の理由。",
"apihelp-revisiondelete-example-revision": "<kbd>Main Page</kbd> の版 <kbd>12345</kbd> の本文を隠す。",
"apihelp-unblock-param-tags": "ブロック記録の項目に適用する変更タグ。",
"apihelp-unblock-example-id": "ブロックID #<kbd>105</kbd> を解除する。",
"apihelp-unblock-example-user": "<kbd>Sorry Bob</kbd> という理由で利用者 <kbd>Bob</kbd> のブロックを解除する。",
- "apihelp-undelete-description": "削除されたページの版を復元します。\n\n削除された版の一覧 (タイムスタンプを含む) は[[Special:ApiHelp/query+deletedrevs|list=deletedrevs]]に、また削除されたファイルのID一覧は[[Special:ApiHelp/query+filearchive|list=filearchive]]で見つけることができます。",
+ "apihelp-undelete-description": "削除されたページの版を復元します。\n\n削除された版の一覧 (タイムスタンプを含む) は[[Special:ApiHelp/query+deletedrevisions|prop=deletedrevisions]]に、また削除されたファイルのID一覧は[[Special:ApiHelp/query+filearchive|list=filearchive]]で見つけることができます。",
"apihelp-undelete-param-title": "復元するページ名。",
"apihelp-undelete-param-reason": "復元の理由。",
"apihelp-undelete-param-tags": "削除記録の項目に適用する変更タグ。",
"apihelp-filerevert-description": "파일을 이전 판으로 되돌립니다.",
"apihelp-filerevert-param-comment": "업로드 댓글입니다.",
"apihelp-filerevert-example-revert": "<kbd>Wiki.png</kbd>를 <kbd>2011-03-05T15:27:40Z</kbd> 판으로 되돌립니다.",
- "apihelp-help-description": "지정된 모듈의 도움말을 보여줍니다.",
+ "apihelp-help-description": "지정된 모듈의 도움말을 표시합니다.",
"apihelp-help-param-helpformat": "도움말 출력 포맷.",
"apihelp-help-example-main": "메인 모듈의 도움말입니다.",
"apihelp-help-example-recursive": "모든 도움말을 한 페이지로 모읍니다.",
"apihelp-main-param-smaxage": "Stelt de <code>s-maxage</code> HTTP cache controle header in op het aangegeven aantal seconden. Foutmeldingen komen nooit in de cache.",
"apihelp-main-param-maxage": "Stelt de <code>max-age</code> HTTP cache controle header in op het aangegeven aantal seconden. Foutmeldingen komen nooit in de cache.",
"apihelp-main-param-assert": "Controleer of de gebruiker is aangemeld als <kbd>user</kbd> is meegegeven, en of de gebruiker het robotgebruikersrecht heeft als <kbd>bot</kbd> is meegegeven.",
+ "apihelp-main-param-assertuser": "Bevestig dat de huidige gebruiker de genoemde gebruiker is.",
"apihelp-main-param-requestid": "Elke waarde die hier gegeven wordt, wordt aan het antwoord toegevoegd. Dit kan gebruikt worden om verzoeken te onderscheiden.",
"apihelp-main-param-servedby": "Voeg de hostnaam van de server die de aanvraag heeft afgehandeld toe aan het antwoord.",
"apihelp-main-param-curtimestamp": "Huidige tijd aan het antwoord toevoegen.",
"apihelp-block-param-autoblock": "Blokkeer automatisch het laatst gebruikte IP-adres en ieder volgend IP-adres van waaruit ze proberen aan te melden.",
"apihelp-block-param-noemail": "Gebruiker weerhouden van het sturen van e-mail. (Vereist het <code>blockemail</code> recht).",
"apihelp-block-param-hidename": "Verberg de gebruikersnaam uit het blokkeerlogboek. (Vereist het <code>hideuser</code> recht).",
+ "apihelp-block-param-allowusertalk": "De gebruiker toestaan om hun eigen overlegpagina te bewerken (afhankelijk van <var>[[mw:Manual:$wgBlockAllowsUTEdit|$wgBlockAllowsUTEdit]]</var>).",
"apihelp-block-param-reblock": "De huidige blokkade aanpassen als de gebruiker al geblokkeerd is.",
"apihelp-block-param-watchuser": "De gebruikerspagina en overlegpagina van de gebruiker of het IP-adres volgen.",
"apihelp-block-param-tags": "Wijzigingslabels om toe te passen op de regel in het blokkeerlogboek.",
"apihelp-mergehistory-param-reason": "Powód łączenia historii.",
"apihelp-mergehistory-example-merge": "Połącz całą historię strony <kbd>Oldpage</kbd> ze stroną <kbd>Newpage</kbd>.",
"apihelp-move-description": "Przenieś stronę.",
+ "apihelp-move-param-from": "Tytuł strony do zmiany nazwy. Nie można używać razem z <var>$1fromid</var>.",
"apihelp-move-param-to": "Tytuł na jaki zmienić nazwę strony.",
"apihelp-move-param-reason": "Powód zmiany nazwy.",
"apihelp-move-param-movetalk": "Zmień nazwę strony dyskusji, jeśli istnieje.",
"apihelp-parse-paramvalue-prop-images": "Zdjęcia z przetworzonego wikitekstu.",
"apihelp-parse-paramvalue-prop-externallinks": "Linki zewnętrzne z przetworzonego wikitekstu.",
"apihelp-parse-paramvalue-prop-sections": "Sekcje z przetworzonego wikitekstu.",
+ "apihelp-parse-paramvalue-prop-displaytitle": "Dodaje tytuł parsowanego wikitekstu.",
"apihelp-parse-paramvalue-prop-wikitext": "Zwróć oryginalny wikitext, który został przeanalizowany.",
"apihelp-parse-param-preview": "Analizuj w trybie podglądu.",
"apihelp-parse-param-disabletoc": "Pomiń spis treści na wyjściu.",
"apihelp-query+allrevisions-example-ns-main": "Wyświetl pierwsze 50 wersji w przestrzeni głównej.",
"apihelp-query+mystashedfiles-param-limit": "Liczba plików do pobrania.",
"apihelp-query+alltransclusions-param-prop": "Jakie informacje dołączyć:",
+ "apihelp-query+alltransclusions-paramvalue-prop-title": "Dodaje tytuł osadzenia.",
"apihelp-query+alltransclusions-param-namespace": "Przestrzeń nazw do emulacji.",
"apihelp-query+alltransclusions-param-limit": "Łączna liczba elementów do zwrócenia.",
"apihelp-query+allusers-param-from": "Nazwa użytkownika, od którego rozpocząć wyliczanie.",
"apihelp-query+backlinks-description": "Znajdź wszystkie strony, które linkują do danej strony.",
"apihelp-query+backlinks-param-namespace": "Przestrzeń nazw do emulacji.",
"apihelp-query+backlinks-example-simple": "Pokazuj linki do <kbd>Main page</kbd>.",
+ "apihelp-query+blocks-description": "Lista wszystkich zablokowanych użytkowników i adresów IP.",
"apihelp-query+blocks-param-start": "Znacznik czasu, od którego rozpocząć wyliczanie.",
"apihelp-query+blocks-param-end": "Znacznik czasu, na którym zakończyć wyliczanie.",
"apihelp-query+blocks-param-ids": "Lista zablokowanych ID do wylistowania (opcjonalne).",
"apihelp-query+blocks-param-users": "Lista użytkowników do wyszukania (opcjonalne).",
"apihelp-query+blocks-param-limit": "Maksymalna liczba blokad do wylistowania.",
+ "apihelp-query+blocks-paramvalue-prop-id": "Dodaje identyfikator blokady.",
+ "apihelp-query+blocks-paramvalue-prop-user": "Dodaje nazwę zablokowanego użytkownika.",
+ "apihelp-query+blocks-paramvalue-prop-userid": "Dodaje identyfikator zablokowanego użytkownika.",
+ "apihelp-query+blocks-paramvalue-prop-timestamp": "Dodaje znacznik czasu założenia blokady.",
+ "apihelp-query+blocks-paramvalue-prop-expiry": "Dodaje znacznik czasu wygaśnięcia blokady.",
"apihelp-query+blocks-paramvalue-prop-reason": "Dodaje powód zablokowania.",
+ "apihelp-query+blocks-paramvalue-prop-range": "Dodaje zakres adresów IP, na który zastosowano blokadę.",
"apihelp-query+blocks-example-simple": "Listuj blokady.",
+ "apihelp-query+categories-paramvalue-prop-timestamp": "Dodaje znacznik czasu dodania kategorii.",
"apihelp-query+categories-param-limit": "Liczba kategorii do zwrócenia.",
"apihelp-query+categoryinfo-description": "Zwraca informacje o danych kategoriach.",
"apihelp-query+categorymembers-description": "Wszystkie strony w danej kategorii.",
"apihelp-query+exturlusage-param-limit": "Liczba stron do zwrócenia.",
"apihelp-query+filearchive-paramvalue-prop-dimensions": "Alias rozmiaru.",
"apihelp-query+filearchive-paramvalue-prop-description": "Dodaje opis wersji obrazka.",
+ "apihelp-query+filearchive-paramvalue-prop-mime": "Dodaje typ MIME obrazka.",
"apihelp-query+filearchive-example-simple": "Pokaż listę wszystkich usuniętych plików.",
"apihelp-query+filerepoinfo-example-simple": "Uzyskaj informacje na temat repozytoriów plików.",
"apihelp-query+fileusage-description": "Znajdź wszystkie strony, które używają danych plików.",
"apihelp-query+logevents-example-simple": "Lista ostatnich zarejestrowanych zdarzeń.",
"apihelp-query+pageswithprop-param-prop": "Jakie informacje dołączyć:",
"apihelp-query+pageswithprop-paramvalue-prop-ids": "Doda ID strony.",
+ "apihelp-query+pageswithprop-param-limit": "Maksymalna liczba zwracanych stron.",
+ "apihelp-query+pageswithprop-param-dir": "W jakim kierunku sortować.",
"apihelp-query+pageswithprop-example-generator": "Pobierz dodatkowe informacje o pierwszych 10 stronach wykorzystując <code>__NOTOC__</code>.",
"apihelp-query+prefixsearch-param-search": "Wyszukaj tekst.",
"apihelp-query+prefixsearch-param-namespace": "Przestrzenie nazw do przeszukania.",
"apihelp-query+querypage-param-page": "Nazwa strony specjalnej. Należy pamiętać o wielkości liter.",
"apihelp-query+querypage-param-limit": "Liczba zwracanych wyników.",
"apihelp-query+random-param-namespace": "Zwraca strony tylko w tych przestrzeniach nazw.",
+ "apihelp-query+random-param-filterredir": "Jaki filtrować przekierowania.",
+ "apihelp-query+random-example-simple": "Zwraca dwie losowe strony z głównej przestrzeni nazw.",
"apihelp-query+recentchanges-param-user": "Listuj tylko zmiany dokonane przez tego użytkownika.",
"apihelp-query+recentchanges-param-excludeuser": "Nie listuj zmian dokonanych przez tego użytkownika.",
"apihelp-query+recentchanges-param-tag": "Pokazuj tylko zmiany oznaczone tym tagiem.",
"apihelp-query+revisions+base-paramvalue-prop-ids": "Identyfikator wersji.",
"apihelp-query+revisions+base-paramvalue-prop-flags": "Znaczniki wersji (drobne).",
"apihelp-query+revisions+base-paramvalue-prop-timestamp": "Znacznik czasu wersji.",
+ "apihelp-query+revisions+base-paramvalue-prop-user": "Użytkownik, który utworzył wersję.",
"apihelp-query+revisions+base-paramvalue-prop-size": "Długość wersji (w bajtach).",
"apihelp-query+revisions+base-paramvalue-prop-sha1": "SHA-1 (base 16) wersji.",
"apihelp-query+revisions+base-paramvalue-prop-content": "Tekst wersji.",
"apihelp-query+transcludedin-paramvalue-prop-title": "Nazwa każdej strony.",
"apihelp-query+transcludedin-paramvalue-prop-redirect": "Oznacz, jeśli strona jest przekierowaniem.",
"apihelp-query+transcludedin-param-limit": "Ile zwrócić.",
+ "apihelp-query+usercontribs-paramvalue-prop-comment": "Dodaje komentarz edycji.",
+ "apihelp-query+usercontribs-paramvalue-prop-parsedcomment": "Dodaje sparsowany komentarz edycji.",
"apihelp-query+userinfo-description": "Pobierz informacje o aktualnym użytkowniku.",
"apihelp-query+userinfo-param-prop": "Jakie informacje dołączyć:",
"apihelp-query+userinfo-paramvalue-prop-groups": "Wyświetla wszystkie grupy, do których należy bieżący użytkownik.",
"apihelp-query+userinfo-paramvalue-prop-rights": "Wyświetla wszystkie uprawnienia, które ma bieżący użytkownik.",
+ "apihelp-query+userinfo-paramvalue-prop-editcount": "Dodaje liczbę edycji bieżącego użytkownika.",
+ "apihelp-query+userinfo-paramvalue-prop-email": "Dodaje adres e-mail użytkownika i datę jego potwierdzenia.",
"apihelp-query+userinfo-paramvalue-prop-registrationdate": "Dodaje datę rejestracji użytkownika.",
"apihelp-query+userinfo-example-simple": "Pobierz informacje o aktualnym użytkowniku.",
"apihelp-query+userinfo-example-data": "Pobierz dodatkowe informacje o aktualnym użytkowniku.",
"apihelp-query+watchlist-paramvalue-type-external": "Zmiany zewnętrzne.",
"apihelp-resetpassword-description": "Wyślij użytkownikowi e-mail do resetowania hasła.",
"apihelp-resetpassword-example-email": "Wyślij e-mail do resetowania hasła do wszystkich użytkowników posiadających adres <kbd>user@example.com</kbd>.",
+ "apihelp-revisiondelete-param-ids": "Identyfikatory wersji do usunięcia.",
+ "apihelp-revisiondelete-param-hide": "Co ukryć w każdej z wersji.",
+ "apihelp-revisiondelete-param-show": "Co pokazać w każdej z wersji.",
+ "apihelp-revisiondelete-param-reason": "Powód usunięcia lub przywrócenia.",
"apihelp-setpagelanguage-description": "Zmień język strony.",
"apihelp-setpagelanguage-param-reason": "Powód zmiany.",
"apihelp-stashedit-param-title": "Tytuł edytowanej strony.",
"apihelp-unblock-description": "Odblokuj użytkownika.",
"apihelp-unblock-param-user": "Nazwa użytkownika, adres IP albo zakres adresów IP, które chcesz odblokować. Nie można używać jednocześnie z <var>$1id</var> lub <var>$1userid</var>.",
"apihelp-unblock-param-reason": "Powód odblokowania.",
+ "apihelp-undelete-param-title": "Tytuł strony do przywrócenia.",
"apihelp-undelete-param-reason": "Powód przywracania.",
"apihelp-upload-param-filename": "Nazwa pliku docelowego.",
"apihelp-upload-param-watch": "Obserwuj stronę.",
"apierror-badtoken": "Nieprawidłowy token CSRF.",
"apierror-blockedfrommail": "Została Ci zablokowana możliwość wysyłania e-maili.",
"apierror-blocked": "Została Ci zablokowana możliwość edycji.",
+ "apierror-botsnotsupported": "Interfejs nie jest obsługiwany dla botów.",
"apierror-cannotviewtitle": "Nie masz uprawnień do oglądania $1.",
"apierror-cantblock": "Nie masz uprawnień do blokowania użytkowników.",
+ "apierror-cantimport-upload": "Nie masz uprawnień do importowania przesłanych stron.",
"apierror-cantimport": "Nie masz uprawnień do importowania stron.",
"apierror-cantsend": "Nie jesteś zalogowany, nie masz potwierdzonego adresu e-mail, albo nie masz prawa wysyłać e-maili do innych użytkowników, więc nie możesz wysłać wiadomości e-mail.",
+ "apierror-cantundelete": "Nie można przywrócić: dana wersja nie istnieje albo została już przywrócona.",
"apierror-databaseerror": "[$1] Błąd zapytania do bazy danych.",
"apierror-exceptioncaught": "[$1] Stwierdzono wyjątek: $2",
"apierror-filedoesnotexist": "Plik nie istnieje.",
"apierror-moduledisabled": "Moduł <kbd>$1</kbd> został wyłączony.",
"apierror-mustbeloggedin-generic": "Musisz być zalogowany.",
"apierror-mustbeloggedin": "Musisz się zalogować, aby mieć możliwość $1.",
+ "apierror-nodeleteablefile": "Nie ma takiej starej wersji pliku.",
"apierror-noedit-anon": "Niezarejestrowani użytkownicy nie mogą edytować stron.",
"apierror-noedit": "Nie masz uprawnień do edytowania stron.",
+ "apierror-noimageredirect-anon": "Anonimowi użytkownicy nie mogą tworzyć przekierowań plików.",
+ "apierror-noimageredirect": "Nie masz uprawnień do tworzenia przekierowań plików.",
"apierror-nosuchpageid": "Nie ma strony z identyfikatorem $1.",
"apierror-nosuchrevid": "Nie ma wersji z identyfikatorem $1.",
"apierror-nosuchsection": "Nie ma sekcji $1.",
"apierror-protect-invalidlevel": "Nieprawidłowy poziom zabezpieczeń „$1”.",
"apierror-readonly": "Wiki jest teraz w trybie tylko do odczytu.",
"apierror-revwrongpage": "r$1 nie jest wersją strony $2.",
+ "apierror-sectionsnotsupported-what": "Sekcje nie są obsługiwane przez $1.",
"apierror-specialpage-cantexecute": "Nie masz uprawnień, aby zobaczyć wyniki tej strony specjalnej.",
"apierror-stashwrongowner": "Nieprawidłowy właściciel: $1",
"apierror-unknownerror-nocode": "Nieznany błąd.",
"apiwarn-invalidcategory": "„$1” nie jest kategorią.",
"apiwarn-invalidtitle": "„$1” nie jest poprawnym tytułem.",
"apiwarn-notfile": "„$1” nie jest plikiem.",
+ "apiwarn-toomanyvalues": "Podano zbyt wiele wartości dla parametru <var>$1</var>. Ograniczenie do $2.",
"apiwarn-validationfailed": "Błąd walidacji dla <kbd>$1</kbd>: $2",
"api-feed-error-title": "Błąd ($1)",
"api-exception-trace": "$1 w $2($3)\n$4",
"apihelp-unblock-param-tags": "As etiquetas de modificação a aplicar à entrada no registo de bloqueios.",
"apihelp-unblock-example-id": "Desfazer o bloqueio com o identificador #<kbd>105</kbd>.",
"apihelp-unblock-example-user": "Desbloquear o utilizador <kbd>Bob</kbd> com o motivo <kbd>Sorry Bob</kbd>.",
- "apihelp-undelete-description": "Restaurar revisões de uma página eliminada.\n\nPode obter-se uma lista de revisões eliminadas (incluindo as datas e horas de eliminação) com [[Special:ApiHelp/query+deletedrevs|list=deletedrevs]] e uma lista de identificadores de ficheiros eliminados com [[Special:ApiHelp/query+filearchive|list=filearchive]].",
+ "apihelp-undelete-description": "Restaurar revisões de uma página eliminada.\n\nPode obter-se uma lista de revisões eliminadas (incluindo as datas e horas de eliminação) com [[Special:ApiHelp/query+deletedrevisions|prop=deletedrevisions]] e uma lista de identificadores de ficheiros eliminados com [[Special:ApiHelp/query+filearchive|list=filearchive]].",
"apihelp-undelete-param-title": "Título da página a restaurar.",
"apihelp-undelete-param-reason": "Motivo para restaurar a página.",
"apihelp-undelete-param-tags": "Etiquetas de modificação a aplicar à entrada no registo de eliminações.",
"api-help-permissions-granted-to": "Used to introduce the list of groups each permission is assigned to.\n\nParameters:\n* $1 - Number of groups\n* $2 - List of group names, comma-separated",
"api-help-right-apihighlimits": "{{technical}}{{doc-right|apihighlimits|prefix=api-help}}\nThis message is used instead of {{msg-mw|right-apihighlimits}} in the API help to display the actual limits.\n\nParameters:\n* $1 - Limit for slow queries\n* $2 - Limit for fast queries",
"api-help-open-in-apisandbox": "Text for the link to open an API example in [[Special:ApiSandbox]].",
- "api-help-authmanager-general-usage": "Text giving a brief overview of how to use an AuthManager-using API module. Parameters:\n* $1 - Module parameter prefix, e.g. \"login\"\n* $2 - Module name, e.g. \"clientlogin\"\n* $3 - Module path, e.g. \"clientlogin\"\n* $4 - AuthManager action to use with this module.\n* $5 - Token type needed by the module.",
+ "api-help-authmanager-general-usage": "{{doc-important|Do not translate text that either quoted, or inside <nowiki><var></var></nowiki>, <nowiki><kbd></kbd></nowiki>, <nowiki><samp></samp></nowiki>, or <nowiki><code></code></nowiki> in this message.}}\nText giving a brief overview of how to use an AuthManager-using API module. Parameters:\n* $1 - Module parameter prefix, e.g. \"login\"\n* $2 - Module name, e.g. \"clientlogin\"\n* $3 - Module path, e.g. \"clientlogin\"\n* $4 - AuthManager action to use with this module.\n* $5 - Token type needed by the module.",
"api-help-authmanagerhelper-requests": "{{doc-apihelp-param|description=the \"requests\" parameter for AuthManager-using API modules|params=* $1 - AuthManager action used by this module|paramstart=2|noseealso=1}}",
"api-help-authmanagerhelper-request": "{{doc-apihelp-param|description=the \"request\" parameter for AuthManager-using API modules|params=* $1 - AuthManager action used by this module|paramstart=2|noseealso=1}}",
"api-help-authmanagerhelper-messageformat": "{{doc-apihelp-param|description=the \"messageformat\" parameter for AuthManager-using API modules|noseealso=1}}",
"apiwarn-deprecation-parse-headitems": "{{doc-apierror}}",
"apiwarn-deprecation-purge-get": "{{doc-apierror}}",
"apiwarn-deprecation-withreplacement": "{{doc-apierror}}\n\nParameters:\n* $1 - Query string fragment that is deprecated, e.g. \"action=tokens\".\n* $2 - Query string fragment to use instead, e.g. \"action=tokens\".",
- "apiwarn-difftohidden": "{{doc-apierror}}\n\nParameters:\n* $1 - Revision ID number.",
+ "apiwarn-difftohidden": "{{doc-apierror}}\n\nParameters:\n* $1 - Revision ID number.\n\n\"r\" is short for \"revision\". You may translate it.",
"apiwarn-errorprinterfailed": "{{doc-apierror}}",
"apiwarn-errorprinterfailed-ex": "{{doc-apierror}}\n\nParameters:\n* $1 - Exception message, which may already end in punctuation. Probably in English.",
"apiwarn-invalidcategory": "{{doc-apierror}}\n\nParameters:\n* $1 - Supplied category name.",
"api-help-param-continue": "Когда доступно больше результатов, использовать этот чтобы продолжить.",
"api-help-param-no-description": "<span class=\"apihelp-empty\">(описание отсутствует)</span>",
"api-help-examples": "Пример{{PLURAL:$1||ы}}:",
- "api-help-permissions": "{{PLURAL:$1|Permission|Permissions}}:",
+ "api-help-permissions": "{{PLURAL:$1|Разрешение|Разрешения}}:",
"api-help-permissions-granted-to": "{{PLURAL:$1|Granted to}}: $2",
"apierror-integeroutofrange-abovemax": "<var>$1</var> не может быть более $2 (на $3) для пользователей.",
"apierror-nosuchuserid": "Нет пользователя с ID $1.",
"apihelp-protect-example-protect": "Захистити сторінку.",
"apihelp-protect-example-unprotect": "Зняти захист зі сторінки, встановивши обмеження для <kbd>all</kbd> (тобто будь-хто зможе робити дії).",
"apihelp-protect-example-unprotect2": "Зняти захист з сторінки, встановивши відсутність обмежень.",
- "apihelp-purge-description": "Очистити кеш для вказаних заголовків.\n\nВимагає запиту POST, якщо користувач не ввійшов у систему.",
+ "apihelp-purge-description": "Очистити кеш для вказаних заголовків.",
"apihelp-purge-param-forcelinkupdate": "Оновити таблиці посилань.",
"apihelp-purge-param-forcerecursivelinkupdate": "Оновити таблицю посилань, і оновити таблиці посилань для кожної сторінки, що використовує цю сторінку як шаблон.",
"apihelp-purge-example-simple": "Очистити кеш <kbd>Main Page</kbd> і сторінки <kbd>API</kbd>.",
"apihelp-unblock-param-tags": "Змінити теги, що мають бути застосовані до запису в журналі блокувань.",
"apihelp-unblock-example-id": "Зняти блокування з ідентифікатором #<kbd>105</kbd>.",
"apihelp-unblock-example-user": "Розблокувати користувача <kbd>Bob</kbd> з причиною <kbd>Sorry Bob</kbd>.",
- "apihelp-undelete-description": "Відновити версії вилученої сторінки.\n\nСписок вилучених версій (включено з часовими мітками) може бути отримано через [[Special:ApiHelp/query+deletedrevs|list=deletedrevs]], а список ідентифікаторів вилучених файлів може бути отримано через [[Special:ApiHelp/query+filearchive|list=filearchive]].",
+ "apihelp-undelete-description": "Відновити версії вилученої сторінки.\n\nСписок вилучених версій (включено з часовими мітками) може бути отримано через [[Special:ApiHelp/query+deletedrevisions|prop=deletedrevisions]], а список ідентифікаторів вилучених файлів може бути отримано через [[Special:ApiHelp/query+filearchive|list=filearchive]].",
"apihelp-undelete-param-title": "Назва сторінки, яку слід відновити.",
"apihelp-undelete-param-reason": "Причина відновлення.",
"apihelp-undelete-param-tags": "Змінити теги, що мають бути застосовані до запису в журналі вилучень.",
"apiwarn-tokens-origin": "Токени не можна отримати, поки не застосована політика одного походження.",
"apiwarn-toomanyvalues": "Надто багато значень задано для параметра <var>$1</var>: ліміт становить $2.",
"apiwarn-truncatedresult": "Цей результат було скорочено, оскільки інакше він перевищив би ліміт у $1 байтів.",
- "apiwarn-unclearnowtimestamp": "Вказування «$2» для параметра мітки часу <var>$1</var> є застарілим. Якщо з якоїсь причини Вам треба чітко вказати поточний час без вираховування його з боку клієнта, використайте <kbd>now<kbd>.",
+ "apiwarn-unclearnowtimestamp": "Вказування «$2» для параметра мітки часу <var>$1</var> є застарілим. Якщо з якоїсь причини Вам треба чітко вказати поточний час без вираховування його з боку клієнта, використайте <kbd>now</kbd>.",
"apiwarn-unrecognizedvalues": "{{PLURAL:$3|Нерозпізнане|Нерозпізнані}} значення для параметра <var>$1</var>: $2.",
"apiwarn-unsupportedarray": "Параметр <var>$1</var> використовує непідтримуваний синтаксис PHP-масиву.",
"apiwarn-urlparamwidth": "Ігнорування значення ширини, встановленого в <var>$1urlparam</var> ($2) на користь значення ширини, запозиченого із <var>$1urlwidth</var>/<var>$1urlheight</var> ($3).",
"apihelp-unblock-param-tags": "要在封禁日志中应用到实体的更改标签。",
"apihelp-unblock-example-id": "解封封禁ID #<kbd>105</kbd>。",
"apihelp-unblock-example-user": "解封用户<kbd>Bob</kbd>,原因<kbd>Sorry Bob</kbd>。",
- "apihelp-undelete-description": "恢复一个被删除页面的修订。\n\n被删除修订的列表(包括时间戳)可通过[[Special:ApiHelp/query+deletedrevs|list=deletedrevs]]检索到,并且被删除的文件ID列表可通过[[Special:ApiHelp/query+filearchive|list=filearchive]]检索到。",
+ "apihelp-undelete-description": "恢复一个被删除页面的修订。\n\n被删除修订的列表(包括时间戳)可通过[[Special:ApiHelp/query+deletedrevisions|prop=deletedrevisions]]检索到,并且被删除的文件ID列表可通过[[Special:ApiHelp/query+filearchive|list=filearchive]]检索到。",
"apihelp-undelete-param-title": "要恢复的页面标题。",
"apihelp-undelete-param-reason": "恢复的原因。",
"apihelp-undelete-param-tags": "要在删除日志中应用到实体的更改标签。",
"api-help-permissions-granted-to": "{{PLURAL:$1|授予}}:$2",
"api-help-right-apihighlimits": "在API查询中使用更高的上限(慢查询:$1;快查询:$2)。慢查询的限制也适用于多值参数。",
"api-help-open-in-apisandbox": "<small>[在沙盒中打开]</small>",
- "api-help-authmanager-general-usage": "使用此模块的一般程序是:\n# 通过<kbd>amirequestsfor=$4</kbd>取得来自<kbd>[[Special:ApiHelp/query+authmanagerinfo|action=query&meta=authmanagerinfo]]</kbd>的可用字段,和来自<kbd>[[Special:ApiHelp/query+tokens|action=query&meta=tokens]]</kbd>的<kbd>$5</kbd>令牌。\n# 向用户显示字段,并获得其提交内容。\n# 发送至此模块,提供<var>$1returnurl</var>及任何相关字段。\n# 在响应中检查<samp>status</samp>。\n#* 如果您收到了<samp>PASS</samp>或<samp>FAIL</samp>,您已经完成。操作要么成功,要么不成功。\n#* 如果您收到了<samp>UI</samp>,present the new fields to the user and obtain their submission. Then post to this module with <var>$1continue</var> and the relevant fields set, and repeat step 4.\n#* 如果您收到了<samp>REDIRECT</samp>,direct the user to the <samp>redirecttarget</samp> and wait for the return to <var>$1returnurl</var>. Then post to this module with <var>$1continue</var> and any fields passed to the return URL, and repeat step 4.\n#* 如果您收到了<samp>RESTART</samp>,这意味着身份验证可以工作,但我们没有链接的用户账户。您可以将此看做<samp>UI</samp>或<samp>FAIL</samp>。",
+ "api-help-authmanager-general-usage": "使用此模块的一般程序是:\n# 通过<kbd>amirequestsfor=$4</kbd>取得来自<kbd>[[Special:ApiHelp/query+authmanagerinfo|action=query&meta=authmanagerinfo]]</kbd>的可用字段,和来自<kbd>[[Special:ApiHelp/query+tokens|action=query&meta=tokens]]</kbd>的<kbd>$5</kbd>令牌。\n# 向用户显示字段,并获得其提交的内容。\n# 发送(POST)至此模块,提供<var>$1returnurl</var>及任何相关字段。\n# 在响应中检查<samp>status</samp>。\n#* 如果您收到了<samp>PASS</samp>(成功)或<samp>FAIL</samp>(失败),则认为操作结束。成功与否如上句所示。\n#* 如果您收到了<samp>UI</samp>,向用户显示新字段,并再次获取其提交的内容。然后再次使用<var>$1continue</var>,向本模块提交相关字段,并重复第四步。\n#* 如果您收到了<samp>REDIRECT</samp>,将用户指向<samp>redirecttarget</samp>中的目标,等待其返回<var>$1returnurl</var>。然后再次使用<var>$1continue</var>,向本模块提交返回URL中提供的一切字段,并重复第四步。\n#* 如果您收到了<samp>RESTART</samp>,这意味着身份验证正常运作,但我们没有链接的用户账户。您可以将此看做<samp>UI</samp>或<samp>FAIL</samp>。",
"api-help-authmanagerhelper-requests": "只使用这些身份验证请求,通过返回自<kbd>[[Special:ApiHelp/query+authmanagerinfo|action=query&meta=authmanagerinfo]]</kbd>的<samp>id</samp>与<kbd>amirequestsfor=$1</kbd>,或来自此模块之前的响应。",
"api-help-authmanagerhelper-request": "使用此身份验证请求,通过返回自<kbd>[[Special:ApiHelp/query+authmanagerinfo|action=query&meta=authmanagerinfo]]</kbd>的<samp>id</samp>与<kbd>amirequestsfor=$1</kbd>。",
"api-help-authmanagerhelper-messageformat": "返回消息使用的格式。",
"apiwarn-parse-nocontentmodel": "<var>title</var>或<var>contentmodel</var>未提供,假设$1。",
"apiwarn-parse-titlewithouttext": "<var>title</var>在没有<var>text</var>的情况下被使用,并且请求了已解析页面的属性。您是想用<var>page</var>而不是<var>title</var>么?",
"apiwarn-tokennotallowed": "操作“$1”不允许当前用户使用。",
- "apiwarn-toomanyvalues": "参数<var>$1</var>指定了太多的值:上限为$2。",
+ "apiwarn-toomanyvalues": "参数<var>$1</var>指定了太多的值。上限为$2。",
"apiwarn-truncatedresult": "此结果被缩短,否则其将大于$1字节的限制。",
- "apiwarn-unclearnowtimestamp": "为时间戳参数<var>$1</var>传递“$2”已被弃用。如因某些原因您需要明确指定当前时间而不计算客户端,请使用<kbd>now<kbd>。",
+ "apiwarn-unclearnowtimestamp": "为时间戳参数<var>$1</var>传递“$2”已被弃用。如因某些原因您需要明确指定当前时间而不计算客户端,请使用<kbd>now</kbd>。",
"apiwarn-unrecognizedvalues": "参数<var>$1</var>有无法识别的{{PLURAL:$3|值}}:$2。",
"apiwarn-unsupportedarray": "参数<var>$1</var>使用未受支持的PHP数组语法。",
"apiwarn-validationfailed-badchars": "关键词中的字符无效(只允许<code>a-z</code>、<code>A-Z</code>、<code>0-9</code>、<code>_</code>和<code>-</code>)。",
"Zhxy 519",
"Macofe",
"Jasonzhuocn",
- "Winstonyin"
+ "Winstonyin",
+ "Arthur2e5"
]
},
"apihelp-main-description": "<div class=\"hlist plainlinks api-main-links\">\n* [[mw:API:Main_page|說明文件]]\n* [[mw:API:FAQ|常見問題]]\n* [https://lists.wikimedia.org/mailman/listinfo/mediawiki-api 郵寄清單]\n* [https://lists.wikimedia.org/mailman/listinfo/mediawiki-api-announce API公告]\n* [https://phabricator.wikimedia.org/maniphest/query/GebfyV4uCaLd/#R 報告錯誤及請求功能]\n</div>\n<strong>狀態資訊:</strong>本頁所展示的所有功能都應正常工作,但是API仍在開發當中,將會隨時變化。請訂閱[https://lists.wikimedia.org/pipermail/mediawiki-api-announce/ mediawiki-api-announce 郵件清單]以便得到更新通知。\n\n<strong>錯誤的請求:</strong>當API收到錯誤的請求時,會發出以「MediaWiki-API-Error」為鍵的HTTP頭欄位,隨後頭欄位的值與錯誤碼將會被設為相同的值。詳細資訊請參閱[[mw:API:Errors_and_warnings|API: 錯誤與警告]]。\n\n<strong>測試:</strong>要簡化API請求的測試過程,請見[[Special:ApiSandbox]]。",
"api-help-examples": "{{PLURAL:$1|範例}}:",
"api-help-permissions": "{{PLURAL:$1|權限}}:",
"api-help-permissions-granted-to": "{{PLURAL:$1|已授權給}}: $2",
+ "api-help-authmanager-general-usage": "使用此模組的一般程式是:\n# 通過<kbd>amirequestsfor=$4</kbd>取得來自<kbd>[[Special:ApiHelp/query+authmanagerinfo|action=query&meta=authmanagerinfo]]</kbd>的可用欄位,和來自<kbd>[[Special:ApiHelp/query+tokens|action=query&meta=tokens]]</kbd>的<kbd>$5</kbd>令牌。\n# 向用戶顯示欄位,並獲得其提交的內容。\n# 提交(POST)至此模組,提供<var>$1returnurl</var>及任何相關欄位。\n# 在回应中檢查<samp>status</samp>。\n#* 如果您收到了<samp>PASS</samp>(成功)或<samp>FAIL</samp>(失敗),則認為操作結束。成功與否如上句所示。\n#* 如果您收到了<samp>UI</samp>,向用戶顯示新欄位,並再次獲取其提交的內容。然後再次使用<var>$1continue</var>,向本模組提交相關欄位,並重復第四步。\n#* 如果您收到了<samp>REDIRECT</samp>,將使用者指向<samp>redirecttarget</samp>中的目標,等待其返回<var>$1returnurl</var>。然後再次使用<var>$1continue</var>,向本模組提交返回URL中提供的一切欄位,並重復第四步。\n#* 如果您收到了<samp>RESTART</samp>,這意味著身份驗證正常運作,但我們沒有連結的使用者賬戶。您可以將此看做<samp>UI</samp>或<samp>FAIL</samp>。",
"api-credits-header": "製作群",
"api-credits": "API 開發人員:\n* Roan Kattouw (首席開發者 Sep 2007–2009)\n* Victor Vasiliev\n* Bryan Tong Minh\n* Sam Reed\n* Yuri Astrakhan (創立者,首席開發者 Sep 2006–Sep 2007)\n* Brad Jorsch (首席開發者 2013–present)\n\n請傳送您的評論、建議以及問題至 mediawiki-api@lists.wikimedia.org\n或者回報問題至 https://phabricator.wikimedia.org/。"
}
$data = $this->manager->getAuthenticationSessionData( 'LoginThrottle' );
if ( !$data ) {
- $this->logger->error( 'throttler data not found for {user}', [ 'user' => $user->getName() ] );
+ // this can occur when login is happening via AuthenticationRequest::$loginRequest
+ // so testForAuthentication is skipped
+ $this->logger->info( 'throttler data not found for {user}', [ 'user' => $user->getName() ] );
return;
}
// 4) ... finally fetch from the slow database :(
$cacheEntry = [ 'numRows' => 0, 'batches' => [] ]; // final result
- // Do the selects in batches to avoid client-side OOMs (bug 43452).
+ // Do the selects in batches to avoid client-side OOMs (T45452).
// Use a LIMIT that plays well with $batchSize to keep equal sized partitions.
$selectSize = max( $batchSize, 200000 - ( 200000 % $batchSize ) );
$start = false;
if ( $feedAge < $wgFeedCacheTimeout || $feedLastmodUnix > $lastmodUnix ) {
wfDebug( "RC: loading feed from cache ($key; $feedLastmod; $lastmod)...\n" );
if ( $feedLastmodUnix < $lastmodUnix ) {
- $wgOut->setLastModified( $feedLastmod ); // bug 21916
+ $wgOut->setLastModified( $feedLastmod ); // T23916
}
return $cache->get( $key );
} else {
protected function getHTMLClasses( $rc, $watched ) {
$classes = [];
$logType = $rc->mAttribs['rc_log_type'];
+ $prefix = 'mw-changeslist-';
if ( $logType ) {
- $classes[] = Sanitizer::escapeClass( 'mw-changeslist-log-' . $logType );
+ $classes[] = Sanitizer::escapeClass( $prefix . 'log-' . $logType );
} else {
- $classes[] = Sanitizer::escapeClass( 'mw-changeslist-ns' .
+ $classes[] = Sanitizer::escapeClass( $prefix . 'ns' .
$rc->mAttribs['rc_namespace'] . '-' . $rc->mAttribs['rc_title'] );
}
// Indicate watched status on the line to allow for more
// comprehensive styling.
$classes[] = $watched && $rc->mAttribs['rc_timestamp'] >= $watched
- ? 'mw-changeslist-line-watched'
- : 'mw-changeslist-line-not-watched';
+ ? $prefix . 'line-watched'
+ : $prefix . 'line-not-watched';
+
+ $classes = array_merge( $classes, $this->getHTMLClassesForFilters( $rc ) );
+
+ return $classes;
+ }
+
+ protected function getHTMLClassesForFilters( $rc ) {
+ $classes = [];
+ $prefix = 'mw-changeslist-';
+
+ $classes[] = $prefix . ( $rc->getAttribute( 'rc_bot' ) ? 'bot' : 'human' );
+ $classes[] = $prefix . ( $rc->getAttribute( 'rc_user' ) ? 'liu' : 'anon' );
+ $classes[] = $prefix . ( $rc->getAttribute( 'rc_minor' ) ? 'minor' : 'major' );
+ $classes[] = $prefix .
+ ( $rc->getAttribute( 'rc_patrolled' ) ? 'patrolled' : 'unpatrolled' );
+ $classes[] = $prefix .
+ ( $this->getUser()->equals( $rc->getPerformer() ) ? 'self' : 'others' );
+ $classes[] = $prefix . 'src-' . str_replace( '.', '-', $rc->getAttribute( 'rc_source' ) );
+
+ $performer = $rc->getPerformer();
+ if ( $performer && $performer->isLoggedIn() ) {
+ $classes[] = $prefix . 'user-' . $performer->getExperienceLevel();
+ }
return $classes;
}
$diffLink = $this->linkRenderer->makeKnownLink(
$rc->getTitle(),
new HtmlArmor( $this->message['diff'] ),
- [],
+ [ 'class' => 'mw-changeslist-diff' ],
$query
);
}
$diffhist .= $this->linkRenderer->makeKnownLink(
$rc->getTitle(),
new HtmlArmor( $this->message['hist'] ),
- [],
+ [ 'class' => 'mw-changeslist-history' ],
[
'curid' => $rc->mAttribs['rc_cur_id'],
'action' => 'history'
&& $block[0]->mAttribs['rc_timestamp'] >= $block[0]->watched
) {
$tableClasses[] = 'mw-changeslist-line-watched';
+ $tableClasses = array_merge( $tableClasses, $this->getHTMLClassesForFilters( $block[0] ) );
} else {
$tableClasses[] = 'mw-changeslist-line-not-watched';
}
protected function getLineData( array $block, RCCacheEntry $rcObj, array $queryParams = [] ) {
$RCShowChangedSize = $this->getConfig()->get( 'RCShowChangedSize' );
- $classes = [ 'mw-enhanced-rc' ];
$type = $rcObj->mAttribs['rc_type'];
$data = [];
$lineParams = [];
+ $classes = [ 'mw-enhanced-rc' ];
if ( $rcObj->watched
&& $rcObj->mAttribs['rc_timestamp'] >= $rcObj->watched
) {
- $classes = [ 'mw-enhanced-watched' ];
+ $classes[] = [ 'mw-enhanced-watched' ];
}
+ $classes = array_merge( $classes, $this->getHTMLClassesForFilters( $rcObj ) );
$separator = ' <span class="mw-changeslist-separator">. .</span> ';
public function recentChangesLine( &$rc, $watched = false, $linenumber = null ) {
$classes = $this->getHTMLClasses( $rc, $watched );
- // use mw-line-even/mw-line-odd class only if linenumber is given (feature from bug 14468)
+ // use mw-line-even/mw-line-odd class only if linenumber is given (feature from T16468)
if ( $linenumber ) {
if ( $linenumber & 1 ) {
$classes[] = 'mw-line-odd';
return new CollationFa;
default:
$match = [];
- if ( preg_match( '/^uca-([a-z@=-]+)$/', $collationName, $match ) ) {
+ if ( preg_match( '/^uca-([A-Za-z@=-]+)$/', $collationName, $match ) ) {
return new IcuCollation( $match[1] );
}
*/
/**
- * Workaround for incorrect collation of Estonian language ('et') in ICU (bug 54168).
+ * Workaround for incorrect collation of Estonian language ('et') in ICU (T56168).
*
* 'W' and 'V' should not be considered the same letter for the purposes of collation in modern
* Estonian. We work around this by replacing 'W' and 'w' with 'ᴡ' U+1D21 'LATIN LETTER SMALL
* can't be determined.
*
* The constant INTL_ICU_VERSION this function refers to isn't really
- * documented. It is available since PHP 5.3.7 (see PHP bug 54561).
- * This function will return false on older PHPs.
+ * documented. It is available since PHP 5.3.7 (see PHP 54561
+ * https://bugs.php.net/bug.php?id=54561). This function will return
+ * false on older PHPs.
+ *
+ * TODO: Remove the backwards-compatibility as MediaWiki now requires
+ * higher levels of PHP.
*
* @since 1.21
* @return string|bool
$onlyAuthor = $row->rev_user_text;
// Try to find a second contributor
foreach ( $res as $row ) {
- if ( $row->rev_user_text != $onlyAuthor ) { // Bug 22999
+ if ( $row->rev_user_text != $onlyAuthor ) { // T24999
$onlyAuthor = false;
break;
}
*/
class TextContentHandler extends ContentHandler {
- // @codingStandardsIgnoreStart bug 57585
+ // @codingStandardsIgnoreStart T59585
public function __construct( $modelId = CONTENT_MODEL_TEXT, $formats = [ CONTENT_FORMAT_TEXT ] ) {
parent::__construct( $modelId, $formats );
}
}
// Normalize the key in case the user is passing gibberish
- // or has old preferences (bug 69566).
+ // or has old preferences (T71566).
$normalized = Skin::normalizeKey( $userSkin );
// Skin::normalizeKey will also validate it, so
<?php
+use Wikimedia\Rdbms\LoadBalancer;
+
/**
* Base class for objects that allow access to other wiki's databases using
* the foreign database access mechanism implemented by LBFactoryMulti.
foreach ( $this->tablesToClone as $tbl ) {
if ( $wgSharedDB && in_array( $tbl, $wgSharedTables, true ) ) {
// Shared tables don't work properly when cloning due to
- // how prefixes are handled (bug 65654)
+ // how prefixes are handled (T67654)
throw new RuntimeException( "Cannot clone shared table $tbl." );
}
# Clean up from previous aborted run. So that table escaping
*/
use Wikimedia\Rdbms\Blob;
-/**
- * The oci8 extension is fairly weak and doesn't support oci_num_rows, among
- * other things. We use a wrapper class to handle that and other
- * Oracle-specific bits, like converting column names back to lowercase.
- * @ingroup Database
- */
-class ORAResult {
- private $rows;
- private $cursor;
- private $nrows;
-
- private $columns = [];
-
- private function array_unique_md( $array_in ) {
- $array_out = [];
- $array_hashes = [];
-
- foreach ( $array_in as $item ) {
- $hash = md5( serialize( $item ) );
- if ( !isset( $array_hashes[$hash] ) ) {
- $array_hashes[$hash] = $hash;
- $array_out[] = $item;
- }
- }
-
- return $array_out;
- }
-
- /**
- * @param IDatabase $db
- * @param resource $stmt A valid OCI statement identifier
- * @param bool $unique
- */
- function __construct( &$db, $stmt, $unique = false ) {
- $this->db =& $db;
-
- $this->nrows = oci_fetch_all( $stmt, $this->rows, 0, -1, OCI_FETCHSTATEMENT_BY_ROW | OCI_NUM );
- if ( $this->nrows === false ) {
- $e = oci_error( $stmt );
- $db->reportQueryError( $e['message'], $e['code'], '', __METHOD__ );
- $this->free();
-
- return;
- }
-
- if ( $unique ) {
- $this->rows = $this->array_unique_md( $this->rows );
- $this->nrows = count( $this->rows );
- }
-
- if ( $this->nrows > 0 ) {
- foreach ( $this->rows[0] as $k => $v ) {
- $this->columns[$k] = strtolower( oci_field_name( $stmt, $k + 1 ) );
- }
- }
-
- $this->cursor = 0;
- oci_free_statement( $stmt );
- }
-
- public function free() {
- unset( $this->db );
- }
-
- public function seek( $row ) {
- $this->cursor = min( $row, $this->nrows );
- }
-
- public function numRows() {
- return $this->nrows;
- }
-
- public function numFields() {
- return count( $this->columns );
- }
-
- public function fetchObject() {
- if ( $this->cursor >= $this->nrows ) {
- return false;
- }
- $row = $this->rows[$this->cursor++];
- $ret = new stdClass();
- foreach ( $row as $k => $v ) {
- $lc = $this->columns[$k];
- $ret->$lc = $v;
- }
-
- return $ret;
- }
-
- public function fetchRow() {
- if ( $this->cursor >= $this->nrows ) {
- return false;
- }
-
- $row = $this->rows[$this->cursor++];
- $ret = [];
- foreach ( $row as $k => $v ) {
- $lc = $this->columns[$k];
- $ret[$lc] = $v;
- $ret[$k] = $v;
- }
-
- return $ret;
- }
-}
-
/**
* @ingroup Database
*/
'readOnlyReason' => wfConfiguredReadOnlyReason(),
];
+ // When making changes here, remember to also specify MediaWiki-specific options
+ // for Database classes in the relevant Installer subclass.
+ // Such as MysqlInstaller::openConnection and PostgresInstaller::openConnectionWithParams.
if ( $lbConf['class'] === 'LBFactorySimple' ) {
if ( isset( $lbConf['servers'] ) ) {
// Server array is already explicitly configured; leave alone
--- /dev/null
+<?php
+
+use Wikimedia\Rdbms\Field;
+
+class ORAField implements Field {
+ private $name, $tablename, $default, $max_length, $nullable,
+ $is_pk, $is_unique, $is_multiple, $is_key, $type;
+
+ function __construct( $info ) {
+ $this->name = $info['column_name'];
+ $this->tablename = $info['table_name'];
+ $this->default = $info['data_default'];
+ $this->max_length = $info['data_length'];
+ $this->nullable = $info['not_null'];
+ $this->is_pk = isset( $info['prim'] ) && $info['prim'] == 1 ? 1 : 0;
+ $this->is_unique = isset( $info['uniq'] ) && $info['uniq'] == 1 ? 1 : 0;
+ $this->is_multiple = isset( $info['nonuniq'] ) && $info['nonuniq'] == 1 ? 1 : 0;
+ $this->is_key = ( $this->is_pk || $this->is_unique || $this->is_multiple );
+ $this->type = $info['data_type'];
+ }
+
+ function name() {
+ return $this->name;
+ }
+
+ function tableName() {
+ return $this->tablename;
+ }
+
+ function defaultValue() {
+ return $this->default;
+ }
+
+ function maxLength() {
+ return $this->max_length;
+ }
+
+ function isNullable() {
+ return $this->nullable;
+ }
+
+ function isKey() {
+ return $this->is_key;
+ }
+
+ function isMultipleKey() {
+ return $this->is_multiple;
+ }
+
+ function type() {
+ return $this->type;
+ }
+}
--- /dev/null
+<?php
+
+/**
+ * The oci8 extension is fairly weak and doesn't support oci_num_rows, among
+ * other things. We use a wrapper class to handle that and other
+ * Oracle-specific bits, like converting column names back to lowercase.
+ * @ingroup Database
+ */
+class ORAResult {
+ private $rows;
+ private $cursor;
+ private $nrows;
+
+ private $columns = [];
+
+ private function array_unique_md( $array_in ) {
+ $array_out = [];
+ $array_hashes = [];
+
+ foreach ( $array_in as $item ) {
+ $hash = md5( serialize( $item ) );
+ if ( !isset( $array_hashes[$hash] ) ) {
+ $array_hashes[$hash] = $hash;
+ $array_out[] = $item;
+ }
+ }
+
+ return $array_out;
+ }
+
+ /**
+ * @param IDatabase $db
+ * @param resource $stmt A valid OCI statement identifier
+ * @param bool $unique
+ */
+ function __construct( &$db, $stmt, $unique = false ) {
+ $this->db =& $db;
+
+ $this->nrows = oci_fetch_all( $stmt, $this->rows, 0, -1, OCI_FETCHSTATEMENT_BY_ROW | OCI_NUM );
+ if ( $this->nrows === false ) {
+ $e = oci_error( $stmt );
+ $db->reportQueryError( $e['message'], $e['code'], '', __METHOD__ );
+ $this->free();
+
+ return;
+ }
+
+ if ( $unique ) {
+ $this->rows = $this->array_unique_md( $this->rows );
+ $this->nrows = count( $this->rows );
+ }
+
+ if ( $this->nrows > 0 ) {
+ foreach ( $this->rows[0] as $k => $v ) {
+ $this->columns[$k] = strtolower( oci_field_name( $stmt, $k + 1 ) );
+ }
+ }
+
+ $this->cursor = 0;
+ oci_free_statement( $stmt );
+ }
+
+ public function free() {
+ unset( $this->db );
+ }
+
+ public function seek( $row ) {
+ $this->cursor = min( $row, $this->nrows );
+ }
+
+ public function numRows() {
+ return $this->nrows;
+ }
+
+ public function numFields() {
+ return count( $this->columns );
+ }
+
+ public function fetchObject() {
+ if ( $this->cursor >= $this->nrows ) {
+ return false;
+ }
+ $row = $this->rows[$this->cursor++];
+ $ret = new stdClass();
+ foreach ( $row as $k => $v ) {
+ $lc = $this->columns[$k];
+ $ret->$lc = $v;
+ }
+
+ return $ret;
+ }
+
+ public function fetchRow() {
+ if ( $this->cursor >= $this->nrows ) {
+ return false;
+ }
+
+ $row = $this->rows[$this->cursor++];
+ $ret = [];
+ foreach ( $row as $k => $v ) {
+ $lc = $this->columns[$k];
+ $ret[$lc] = $v;
+ $ret[$k] = $v;
+ }
+
+ return $ret;
+ }
+}
$this->schemas[$channel]['schema'] = AvroSchema::parse( $schema );
} else {
$this->schemas[$channel]['schema'] = AvroSchema::real_parse(
- $schema,
- null,
- new AvroNamedSchemata()
+ $schema
);
}
}
* LogstashFormatter squashes the base message array and the context and extras subarrays into one.
* This can result in unfortunately named context fields overwriting other data (T145133).
* This class modifies the standard LogstashFormatter to rename such fields and flag the message.
+ * Also changes exception JSON-ification which is done poorly by the standard class.
*
* Compatible with Monolog 1.x only.
*
}
return $fields;
}
+
+ /**
+ * Use a more user-friendly trace format than NormalizerFormatter
+ * @param \Exception|\Throwable $e
+ * @return array
+ */
+ protected function normalizeException( $e ) {
+ if ( !$e instanceof \Exception && !$e instanceof \Throwable ) {
+ throw new \InvalidArgumentException( 'Exception/Throwable expected, got '
+ . gettype( $e ) . ' / ' . get_class( $e ) );
+ }
+
+ $data = [
+ 'class' => get_class( $e ),
+ 'message' => $e->getMessage(),
+ 'code' => $e->getCode(),
+ 'file' => $e->getFile() . ':' . $e->getLine(),
+ 'trace' => \MWExceptionHandler::getRedactedTraceAsString( $e ),
+ ];
+
+ $previous = $e->getPrevious();
+ if ( $previous ) {
+ $data['previous'] = $this->normalizeException( $previous );
+ }
+
+ return $data;
+ }
}
*/
use MediaWiki\MediaWikiServices;
use Wikimedia\Rdbms\LBFactory;
+use Wikimedia\Rdbms\LoadBalancer;
/**
* Class for managing the deferred updates
# If the sortkey is longer then 255 bytes,
# it truncated by DB, and then doesn't get
# matched when comparing existing vs current
- # categories, causing bug 25254.
+ # categories, causing T27254.
# Also. substr behaves weird when given "".
if ( $sortkey !== '' ) {
$sortkey = substr( $sortkey, 0, 255 );
/**
* Set this to true to add debug info to the HTML output.
* Warning: this may cause RSS readers to spuriously mark articles as "new"
- * (bug 20601)
+ * (T22601)
*/
public $enableDebugComment = false;
$this->msg = $msg;
$this->params = $params;
- // Bug 44111: Messages in the log files should be in English and not
+ // T46111: Messages in the log files should be in English and not
// customized by the local wiki. So get the default English version for
// passing to the parent constructor. Our overridden report() below
// makes sure that the page shown to the user is not forced to English.
use MediaWiki\Logger\LoggerFactory;
use MediaWiki\MediaWikiServices;
+use Psr\Log\LogLevel;
/**
* Handler class for MWExceptions
switch ( $level ) {
case E_RECOVERABLE_ERROR:
$levelName = 'Error';
+ $severity = LogLevel::ERROR;
break;
case E_WARNING:
case E_CORE_WARNING:
case E_COMPILE_WARNING:
case E_USER_WARNING:
$levelName = 'Warning';
+ $severity = LogLevel::WARNING;
break;
case E_NOTICE:
case E_USER_NOTICE:
$levelName = 'Notice';
+ $severity = LogLevel::INFO;
break;
case E_STRICT:
$levelName = 'Strict Standards';
+ $severity = LogLevel::DEBUG;
break;
case E_DEPRECATED:
case E_USER_DEPRECATED:
$levelName = 'Deprecated';
+ $severity = LogLevel::INFO;
break;
default:
$levelName = 'Unknown error';
+ $severity = LogLevel::ERROR;
break;
}
$e = new ErrorException( "PHP $levelName: $message", 0, $level, $file, $line );
- self::logError( $e, 'error' );
+ self::logError( $e, 'error', $severity );
// This handler is for logging only. Return false will instruct PHP
// to continue regular handling.
$text .= "{$pad}#{$level} {$frame['file']}({$frame['line']}): ";
} else {
// 'file' and 'line' are unset for calls via call_user_func
- // (bug 55634) This matches behaviour of
+ // (T57634) This matches behaviour of
// Exception::getTraceAsString to instead display "[internal
// function]".
$text .= "{$pad}#{$level} [internal function]: ";
* @since 1.25
* @param ErrorException $e
* @param string $channel
+ * @param string $level
*/
- protected static function logError( ErrorException $e, $channel ) {
+ protected static function logError(
+ ErrorException $e, $channel, $level = LogLevel::ERROR
+ ) {
$catcher = self::CAUGHT_BY_HANDLER;
// The set_error_handler callback is independent from error_reporting.
// Filter out unwanted errors manually (e.g. when
$suppressed = ( error_reporting() & $e->getSeverity() ) === 0;
if ( !$suppressed ) {
$logger = LoggerFactory::getInstance( $channel );
- $logger->error(
+ $logger->log(
+ $level,
self::getLogMessage( $e ),
self::getLogContext( $e, $catcher )
);
$json = self::jsonSerializeException( $e, false, FormatJson::ALL_OK, $catcher );
if ( $json !== false ) {
$logger = LoggerFactory::getInstance( "{$channel}-json" );
- $logger->error( $json, [ 'private' => true ] );
+ $logger->log( $level, $json, [ 'private' => true ] );
}
Hooks::run( 'LogException', [ $e, $suppressed ] );
* }
* @endcode
*
- * @see bug 37627
+ * @see T39627
* @since 1.20
* @ingroup Exception
*/
* @file
*/
+use Wikimedia\Rdbms\LoadBalancer;
+
/**
* DB accessable external objects.
*
* @return LoadBalancer
*/
private function getLoadBalancer( $cluster ) {
- $wiki = isset( $this->params['wiki'] ) ? $this->params['wiki'] : false;
-
- return wfGetLBFactory()->getExternalLB( $cluster, $wiki );
+ return wfGetLBFactory()->getExternalLB( $cluster );
}
/**
'dst' => $archivePath,
// We may have 2+ identical files being deleted,
// all of which will map to the same destination file
- 'overwriteSame' => true // also see bug 31792
+ 'overwriteSame' => true // also see T33792
];
}
return $this->iconThumb();
}
$hp['width'] = $width;
- // be sure to ignore any height specification as well (bug 62258)
+ // be sure to ignore any height specification as well (T64258)
unset( $hp['height'] );
return $this->transform( $hp );
break; // not a bitmap or renderable image, don't try
}
- // Get the descriptionUrl to embed it as comment into the thumbnail. Bug 19791.
+ // Get the descriptionUrl to embed it as comment into the thumbnail. T21791.
$descriptionUrl = $this->getDescriptionUrl();
if ( $descriptionUrl ) {
$params['descriptionUrl'] = wfExpandUrl( $descriptionUrl, PROTO_CANONICAL );
$files[] = $file;
}
} catch ( FileBackendError $e ) {
- } // suppress (bug 54674)
+ } // suppress (T56674)
return $files;
}
}
}
- # (bug 34993) Note: $oldver can be empty here, if the previous
+ # (T36993) Note: $oldver can be empty here, if the previous
# version of the file was broken. Allow registration of the new
# version to continue anyway, because that's better than having
# an image that's not fixable by user operations.
$dbw = $this->repo->getMasterDB();
$makesTransaction = !$dbw->trxLevel();
$dbw->startAtomic( self::ATOMIC_SECTION_LOCK );
- // Bug 54736: use simple lock to handle when the file does not exist.
+ // T56736: use simple lock to handle when the file does not exist.
// SELECT FOR UPDATE prevents changes, not other SELECTs with FOR UPDATE.
// Also, that would cause contention on INSERT of similarly named rows.
$status = $this->acquireFileLock(); // represents all versions of the file
$status->failCount++;
}
$status->successCount += $oldRowCount;
- // Bug 34934: oldCount is based on files that actually exist.
+ // T36934: oldCount is based on files that actually exist.
// There may be more DB rows than such files, in which case $affected
// can be greater than $total. We use max() to avoid negatives here.
$status->failCount += max( 0, $this->oldCount - $oldRowCount );
foreach ( $members as $o ) {
if ( isset( $options[$o] ) ) {
// ensure that MWHttpRequest::method is always
- // uppercased. Bug 36137
+ // uppercased. T38137
if ( $o == 'method' ) {
$options[$o] = strtoupper( $options[$o] );
}
*
* Note that the multiple Location: headers are an artifact of
* CURL -- they shouldn't actually get returned this way. Rewrite
- * this when bug 29232 is taken care of (high-level redirect
+ * this when T31232 is taken care of (high-level redirect
* handling rewrite).
*
* @return string
public function doImport() {
// Calls to reader->read need to be wrapped in calls to
// libxml_disable_entity_loader() to avoid local file
- // inclusion attacks (bug 46932).
+ // inclusion attacks (T48932).
$oldDisable = libxml_disable_entity_loader( true );
$this->reader->read();
public function updateRowExists( $key ) {
$row = $this->db->selectRow(
'updatelog',
- # Bug 65813
+ # T67813
'1 AS X',
[ 'ul_key' => $key ],
__METHOD__
'_UpgradeKeySupplied' => false,
'_ExistingDBSettings' => false,
- // $wgLogo is probably wrong (bug 48084); set something that will work.
+ // $wgLogo is probably wrong (T50084); set something that will work.
// Single quotes work fine here, as LocalSettingsGenerator outputs this unescaped.
'wgLogo' => '$wgResourceBasePath/resources/assets/wiki.png',
'wgAuthenticationTokenVersion' => 1,
);
}
// Unset everyone else's hooks. Lord knows what someone might be doing
- // in ParserFirstCallInit (see bug 27171)
+ // in ParserFirstCallInit (see T29171)
$GLOBALS['wgHooks'] = [ 'LoadExtensionSchemaUpdates' => $hooksWeWant ];
return Status::newGood();
try {
$db = Database::factory( 'mssql', [
'host' => $this->getVar( 'wgDBserver' ),
+ 'port' => $this->getVar( 'wgDBport' ),
'user' => $user,
'password' => $password,
'dbname' => false,
* @file
* @ingroup Deployment
*/
+use Wikimedia\Rdbms\Field;
+use Wikimedia\Rdbms\MySQLField;
use MediaWiki\MediaWikiServices;
/**
/**
* Set page_random field to a random value where it is equals to 0.
*
- * @see bug 3946
+ * @see T5946
*/
protected function doPageRandomUpdate() {
$page = $this->db->tableName( 'page' );
try {
$db = Database::factory( 'postgres', [
'host' => $this->getVar( 'wgDBserver' ),
+ 'port' => $this->getVar( 'wgDBport' ),
'user' => $user,
'password' => $password,
'dbname' => $dbName,
- 'schema' => $schema ] );
+ 'schema' => $schema,
+ 'keywordTableMap' => [ 'user' => 'mwuser', 'text' => 'pagecontent' ],
+ ] );
$status->value = $db;
} catch ( DBConnectionError $e ) {
$status->fatal( 'config-connection-error', $e->getMessage() );
protected function rebuildTextSearch() {
if ( $this->updateRowExists( 'patch-textsearch_bug66650.sql' ) ) {
- $this->output( "...bug 66650 already fixed or not applicable.\n" );
+ $this->output( "...T68650 already fixed or not applicable.\n" );
return;
};
$this->applyPatch( 'patch-textsearch_bug66650.sql', false,
- 'Rebuilding text search for bug 66650' );
+ 'Rebuilding text search for T68650' );
}
}
foreach ( $varNames as $name ) {
$value = $this->request->getVal( $prefix . $name );
- // bug 30524, do not trim passwords
+ // T32524, do not trim passwords
if ( stripos( $name, 'password' ) === false ) {
$value = trim( $value );
}
$retVal = false;
}
// If they asked to subscribe to mediawiki-announce but didn't give
- // an e-mail, show an error. Bug 29332
+ // an e-mail, show an error. T31332
if ( !$email && $this->getVar( '_Subscribe' ) ) {
$this->parent->showError( 'config-subscribe-noemail' );
$retVal = false;
}
if ( $continue ) {
- // Fake submit button for enter keypress (bug 26267)
+ // Fake submit button for enter keypress (T28267)
// Messages: config-continue, config-restart, config-regenerate
$s .= Xml::submitButton(
wfMessage( "config-$continue" )->text(),
if ( $result ) {
// If they're going to possibly regenerate LocalSettings, we
- // need to create the upgrade/secret keys. Bug 26481
+ // need to create the upgrade/secret keys. T28481
if ( !$this->getVar( '_ExistingDBSettings' ) ) {
$this->parent->generateKeys();
}
"config-apc": "[http://www.php.net/apc APC] е инсталиран",
"config-apcu": "[http://www.php.net/apc APC] е инсталиран",
"config-wincache": "[http://www.iis.net/download/WinCacheForPhp WinCache] е инсталиран",
+ "config-no-cache-apcu": "<strong>Внимание:</strong> [http://www.php.net/apcu APCu], [http://xcache.lighttpd.net/ XCache] и [http://www.iis.net/download/WinCacheForPhp WinCache] не могат да бъдат открити.\nКеширането на обекти не е активирано.",
"config-mod-security": "<strong>Предупреждение:</strong> [http://modsecurity.org/ mod_security]/mod_security2 е включено на вашия уеб сървър. Много от обичайните му конфигурации пораждат проблеми с МедияУики и друг софтуер, който позволява публикуване на произволно съдържание.\nАко е възможно, моля изключете го. В противен случай се обърнете към [http://modsecurity.org/documentation/ документацията на mod_security] или се свържете с поддръжката на хостинга си, ако се сблъскате със случайни грешки.",
"config-diff3-bad": "GNU diff3 не беше намерен.",
"config-git": "Налична е системата за контрол на версиите Git: <code>$1</code>.",
"config-db-host": "Хост на базата от данни:",
"config-db-host-help": "Ако базата от данни е на друг сървър, в кутията се въвежда името на хоста или IP адреса.\n\nАко се използва споделен уеб хостинг, доставчикът на услугата би трябвало да е предоставил в документацията си коректния хост.\n\nАко инсталацията протича на Windows-сървър и се използва MySQL, използването на \"localhost\" може да е неприемливо. В такива случаи се използва \"127.0.0.1\" за локален IP адрес.\n\nПри използване на PostgreSQL, това поле се оставя празно, за свързване чрез Unix socket.",
"config-db-host-oracle": "TNS на базата данни:",
+ "config-db-host-oracle-help": "Въведете валидно [http://download.oracle.com/docs/cd/B28359_01/network.111/b28317/tnsnames.htm Local Connect Name]; файлът tnsnames.ora трябва да бъде видим за инсталацията.<br />Ако използвате клиентска библиотека версия 10g или по-нова можете да използвате метода [http://download.oracle.com/docs/cd/E11882_01/network.112/e10836/naming.htm Easy Connect].",
"config-db-wiki-settings": "Идентифициране на това уики",
"config-db-name": "Име на базата от данни:",
"config-db-name-help": "Избира се име, което да идентифицира уикито.\nТо не трябва да съдържа интервали.\n\nАко се използва споделен хостинг, доставчикът на услугата би трябвало да е предоставил или име на базата от данни, която да бъде използвана, или да позволява създаването на бази от данни чрез контролния панел.",
"config-mysql-innodb": "InnoDB",
"config-mysql-myisam": "MyISAM",
"config-mysql-myisam-dep": "'''Предупреждение''': Избрана е MyISAM като система за складиране в MySQL, която не се препоръчва за използване с МедияУики, защото:\n* почти не поддържа паралелност заради заключване на таблиците\n* е по-податлива на повреди в сравнение с други системи\n* кодът на МедияУики не винаги поддържа MyISAM коректно\n\nАко инсталацията на MySQL поддържа InnoDB, силно е препоръчително да се използва тя.\nАко инсталацията на MySQL не поддържа InnoDB, вероятно е време за обновяване.",
+ "config-mysql-only-myisam-dep": "<strong>Внимание:</strong> MyISAM e единственият наличен на тази машина тип на таблиците за MySQL и не е препоръчителен за употреба при МедияУики защото:\n* има слаба поддръжка на конкурентност на заявките, поради закючването на таблиците\n* е много по-податлив на грешки в базите от данни от другите типове таблици\n* кодът на МедияУики не винаги работи с MyISAM както трябва\n\nВашият MySQL не поддържа InnoDB, така че може би е дошло време за актуализиране.",
"config-mysql-engine-help": "'''InnoDB''' почти винаги е най-добрата възможност заради навременната си поддръжка.\n\n'''MyISAM''' може да е по-бърза при инсталации с един потребител или само за четене.\nБазите от данни MyISAM се повреждат по-често от InnoDB.",
"config-mysql-charset": "Набор от символи в базата от данни:",
"config-mysql-binary": "Бинарен",
"config-mysql-utf8": "UTF-8",
"config-mysql-charset-help": "В '''бинарен режим''' МедияУики съхранява текстовете в UTF-8 в бинарни полета в базата от данни.\nТова е по-ефективно от UTF-8 режима на MySQL и позволява използването на пълния набор от символи в Уникод.\n\nВ '''UTF-8 режим''' MySQL ще знае в кой набор от символи са данните от уикито и ще може да ги показва и променя по подходящ начин, но няма да позволява складиране на символи извън [https://en.wikipedia.org/wiki/Mapping_of_Unicode_character_planes Основния многоезичен набор].",
"config-mssql-auth": "Тип на удостоверяването:",
+ "config-mssql-install-auth": "Изберете начин за удостоверяване, който ще бъде използван за връзка с базата от данни по време на инсталацията.\nАко изберете \"{{int:config-mssql-windowsauth}}\", ще се използват идентификационните данни на потребителя под който работи уеб сървъра.",
+ "config-mssql-web-auth": "Изберете начина за удостоверяване, който ще се използва от уеб сървъра за връзка със сървъра за бази от данни по време на нормалните операции на уикито.\nАко изберете \"{{int:config-mssql-windowsauth}}\", ще се използват идентификационните данни на потребителя под който работи уеб сървъра.",
"config-mssql-sqlauth": "Удостоверяване чрез SQL Server",
"config-mssql-windowsauth": "Удостоверяване чрез Windows",
"config-site-name": "Име на уикито:",
"config-admin-error-user": "Fazi diabarzh en ur grouiñ ur merer gant an anv \"<nowiki>$1</nowiki>\".",
"config-admin-error-password": "Fazi diabarzh o lakaat ur ger-tremen evit ar merour « <nowiki>$1</nowiki> » : <pre>$2</pre>",
"config-admin-error-bademail": "Ebarzhet hoc'h eus ur chomlec'h postel direizh.",
- "config-subscribe": "Koumanantit da [https://lists.wikimedia.org/mailman/listinfo/mediawiki-listenn kemennadoù evit ar stummoù nevez].",
+ "config-subscribe": "Koumanantit d'ar [https://lists.wikimedia.org/mailman/listinfo/mediawiki-roll kemennoù evit ar stummoù nevez].",
"config-almost-done": "Kazi echu eo !\nGellout a rit tremen ar c'hefluniadur nevez ha staliañ ar wiki war-eeun.",
"config-optional-continue": "Sevel muioc'h a goulennoù ouzhin.",
"config-optional-skip": "Aet on skuizh, staliañ ar wiki hepken.",
"config-email-user": "Gweredekaat ar posteloù a implijer da implijer",
"config-email-user-help": "Aotren a ra an holl implijerien da gas posteloù an eil d'egile mard eo bet gweredekaet an arc'hwel ganto en ho penndibaboù.",
"config-email-usertalk": "Gweredekaat kemennadur pajennoù kaozeal an implijerien",
- "config-email-usertalk-help": "Talvezout a ra d'an implijerien da resev kemennadennoù ma vez kemmet o fajennoù kaozeal, ma vez gweredekaet en o fenndibaboù.",
+ "config-email-usertalk-help": "Talvezout a ra d'an implijerien da resev kemennoù ma vez kemmet o fajennoù kaozeal, gant ma vo gweredekaet en o fenndibaboù.",
"config-email-watchlist": "Gweredekaat ar c'hemenn listenn evezhiañ",
- "config-email-watchlist-help": "Talvezout a ra d'an implijerien da resev kemennadennoù diwar-benn ar pajennoù evezhiet ganto, ma vez gweredekaet en o fenndibaboù.",
+ "config-email-watchlist-help": "Talvezout a ra d'an implijerien da resev kemennoù diwar-benn ar pajennoù evezhiet ganto, gant ma vo gweredekaet en o fenndibaboù.",
"config-email-auth": "Gweredekaat an dilesadur dre bostel",
"config-email-sender": "Chomlec'h postel respont :",
"config-email-sender-help": "Merkit ar chomlec'h postel da vezañ implijet da chomlec'h distreiñ ar posteloù a ya er-maez.\nDi e vo kaset ar posteloù distaolet.\nNiverus eo ar servijerioù postel a c'houlenn da nebeutañ un [http://fr.wikipedia.org/wiki/Nom_de_domaine anv domani] reizh.",
"config-install-user-missing": "N'eus ket eus an implijer \"$1\"",
"config-install-user-missing-create": "N'eus ket eus an implijer \"$1\".\nMa fell deoc'h krouiñ anezhañ, klikit war ar voest \"krouiñ ur gont\" amañ dindan.",
"config-install-tables": "Krouiñ taolennoù",
- "config-install-tables-exist": "<strong>Kemenn :</strong> An taolennoù MediaWiki zo anezho dija war a seblant.\nN'eo ket bet graet ar grouidigezh.",
+ "config-install-tables-exist": "<strong>Diwallit :</strong> An taolennoù MediaWiki zo anezho dija war a seblant.\nN'int ket bet adkrouet.",
"config-install-tables-failed": "'''Fazi :''' c'hwitet eo krouidigezh an daolenn gant ar fazi-mañ : $1",
"config-install-interwiki": "O leuniañ dre ziouer an daolenn etrewiki",
"config-install-interwiki-list": "Ne c'haller ket kavout ar restr <code>interwiki.list</code>.",
"config-install-subscribe-fail": "N'haller ket koumanantiñ da mediawiki-announce : $1",
"config-install-subscribe-notpossible": "cURL n'eo ket staliet ha ne c'haller ket ober gant <code>allow_url_fopen</code>.",
"config-install-mainpage": "O krouiñ ar bajenn bennañ gant un endalc'had dre ziouer",
+ "config-install-mainpage-exists": "Bez' ez eus eus ar bajenn bennañ c'hoazh, lezel a-gostez",
"config-install-extension-tables": "O krouiñ taolennoù evit an astennoù gweredekaet",
"config-install-mainpage-failed": "Ne c'haller ket ensoc'hañ ar bajenn bennañ: $1",
"config-download-localsettings": "Pellgargañ <code>LocalSettings.php</code>",
"authors": [
"Asoxor",
"Calak",
- "Muhammed taha"
+ "Muhammed taha",
+ "Lost Whispers"
]
},
"config-desc": "دامەزرێنەرەکە بۆ میدیاویکی",
"config-admin-password": "تێپەڕوشە:",
"config-admin-password-confirm": "دووبارە تێپەڕوشە:",
"config-admin-email": "ناونیشانی ئیمەیل:",
+ "config-admin-email-help": "ناونیشانی ئیمەیڵەکەت لێرەدا دابنێ بۆئەوەی بتوانیت ئیمەیڵت لە بەکارھێنەرانی ترەوە پێ بگات، تێپەڕ وشە ڕێک بخەیتەوە و ئاگادار بکرێیتەوە لەو گۆڕانکاریانەی کە لەو پەڕانەدا دەکرێن کە چاودێرییان دەکەیت. دەتوانیت ئەم بۆشاییە بە بەتاڵی جێبھێڵیت.",
+ "config-admin-error-bademail": "تۆ ناونیشانی ئیمەیڵێکی ھەڵەت داخڵ کردووە.",
"config-profile-wiki": "ویکیی کراوە",
"config-profile-no-anon": "دروستکردنی ھەژمارە پێویستە",
"config-profile-fishbowl": "تەنھا دەستکاریکەری ڕێگەپێدراوە",
"Vivek Rai",
"Phoenix303",
"संजीव कुमार",
- "Sahilrathod"
+ "Sahilrathod",
+ "Shyamal"
]
},
"config-desc": "साँचा लिए इंस्टॉलर",
"config-localsettings-key": "नवीनीकरण कुंजी",
"config-localsettings-badkey": "आपकी दी गई कुंजी ग़लत है।",
"config-your-language": "आपकी भाषा:",
+ "config-your-language-help": "स्थापन के लिए भाषा चुनें",
"config-wiki-language": "विकी भाषा:",
+ "config-wiki-language-help": "भाषा चुनें जिस में अधिकतर लेख लिखा जाएगा",
"config-back": "← वापस",
"config-continue": "आगे बढ़ें →",
"config-page-language": "भाषा",
"config-profile-help": "Викијата функционираат најдобро кога имаат што повеќе уредници.\nВо МедијаВики лесно се проверуваат скорешните промени, и лесно се исправа (технички: „враќа“) штетата направена од неупатени или злонамерни корисници.\n\nМногумина имаат најдено најразлични полезни примени за МедијаВики, но понекогаш не е лесно да убедите некого во предностите на вики-концептот.\nЗначи имате избор.\n\n'''{{int:config-profile-wiki}}''' — модел според кој секој може да уредува, дури и без најавување.\nАко имате вики со '''задолжително отворање на сметка''', тогаш добивате повеќе контрола, но ова може даги одврати спонтаните учесници.\n\n'''{{int:config-profile-fishbowl}}''' — може да уредуваат само уредници што имаат добиено дозвола за тоа, но јавноста може да ги гледа страниците, вклучувајќи ја нивната историја.\n'''{{int:config-profile-private}}''' — страниците се видливи и уредливи само за овластени корисници.\n\nПо воспоставката имате на избор и посложени кориснички права и поставки. Погледајте во [https://www.mediawiki.org/wiki/Special:MyLanguage/Manual:User_rights прирачникот].",
"config-license": "Авторски права и лиценца:",
"config-license-none": "Без подножје за лиценца",
- "config-license-cc-by-sa": "Криејтив комонс НаведиИзвор СподелиПодИстиУслови",
- "config-license-cc-by": "Криејтив комонс НаведиИзвор",
- "config-license-cc-by-nc-sa": "Криејтив комонс НаведиИзвор-Некомерцијално-СподелиПодИстиУслови",
+ "config-license-cc-by-sa": "Криејтив комонс Наведи извор-Сподели под исти услови",
+ "config-license-cc-by": "Криејтив комонс Наведи извор",
+ "config-license-cc-by-nc-sa": "Криејтив комонс Наведи извор-Сподели под исти услови",
"config-license-cc-0": "Криејтив комонс Нула (јавна сопственост)",
"config-license-gfdl": "ГНУ-ова лиценца за слободна документација 1.3 или понова",
"config-license-pd": "Јавна сопственост",
"config-profile-no-anon": "Account aanmaken verplicht",
"config-profile-fishbowl": "Alleen voor geautoriseerde bewerkers",
"config-profile-private": "Privéwiki",
- "config-profile-help": "Wiki's werken het beste als ze door zoveel mogelijk gebruikers worden bewerkt.\nIn MediaWiki is het eenvoudig om de recente wijzigingen te controleren en eventuele foutieve of kwaadwillende bewerkingen terug te draaien.\n\nDaarnaast vinden velen MediaWiki goed inzetbaar in vele andere rollen, en soms is het niet handig om helemaal \"op de wikimanier\" te werken.\nDaarom biedt dit installatieprogramma u de volgende keuzes voor de basisinstelling van gebruikersvrijheden:\n\nHet profiel '''{{int:config-profile-wiki}}''' staat iedereen toe te bewerken, zonder zelfs aan te melden.\nEen wiki met '''{{int:config-profile-no-anon}}\" biedt extra verantwoordelijkheid, maar kan afschrikken toevallige gebruikers afschrikken.\n\nHet scenario '''{{int:config-profile-fishbowl}}''' laat gebruikers waarvoor dat is ingesteld bewerkt, maar andere gebruikers kunnen alleen pagina's bekijken, inclusief de bewerkingsgeschiedenis.\nIn een '''{{int:config-profile-private}}''' kunnen alleen goedgekeurde gebruikers pagina's bekijken en bewerken.\n\nMeer complexe instellingen voor gebruikersrechten zijn te maken na de installatie; hierover is meer te lezen in de [https://www.mediawiki.org/wiki/Special:MyLanguage/Manual:User_rights handleiding].",
+ "config-profile-help": "Wiki's werken het beste als ze door zoveel mogelijk gebruikers worden bewerkt.\nIn MediaWiki is het eenvoudig om de recente wijzigingen te controleren en eventuele foutieve of kwaadwillende bewerkingen terug te draaien.\n\nDaarnaast vinden velen MediaWiki goed inzetbaar in vele andere rollen, en soms is het niet handig om helemaal \"op de wikimanier\" te werken.\nDaarom biedt dit installatieprogramma u de volgende keuzes voor de basisinstelling van gebruikersvrijheden:\n\nHet profiel '''{{int:config-profile-wiki}}''' staat iedereen toe te bewerken, zonder zelfs aan te melden.\nEen wiki met '''{{int:config-profile-no-anon}}''' biedt extra verantwoordelijkheid, maar kan toevallige gebruikers afschrikken.\n\nHet scenario '''{{int:config-profile-fishbowl}}''' laat gebruikers waarvoor dat is ingesteld bewerken, maar andere gebruikers kunnen alleen pagina's bekijken, inclusief de bewerkingsgeschiedenis.\nIn een '''{{int:config-profile-private}}''' kunnen alleen goedgekeurde gebruikers pagina's bekijken en bewerken.\n\nMeer complexe instellingen voor gebruikersrechten zijn te maken na de installatie; hierover is meer te lezen in de [https://www.mediawiki.org/wiki/Special:MyLanguage/Manual:User_rights handleiding].",
"config-license": "Auteursrechten en licentie:",
"config-license-none": "Geen licentie in de voettekst",
"config-license-cc-by-sa": "Creative Commons Naamsvermelding-Gelijk delen",
"config-help": "помоћ",
"config-help-tooltip": "кликните да проширите",
"mainpagetext": "<strong>Медијавики је успешно инсталиран.</strong>",
- "mainpagedocfooter": "Погледајте [https://meta.wikimedia.org/wiki/Help:Contents кориснички водич] за коришћење програма.\n\n== Увод ==\n* [https://www.mediawiki.org/wiki/Special:MyLanguage/Manual:Configuration_settings Помоћ у вези са подешавањима]\n* [https://www.mediawiki.org/wiki/Special:MyLanguage/Manual:FAQ Често постављена питања]\n* [https://lists.wikimedia.org/mailman/listinfo/mediawiki-announce Дописна листа о издањима Медијавикија]\n* [https://www.mediawiki.org/wiki/Special:MyLanguage/Manual:Combating_spam Научите како да се борете против спама на Вашој вики]"
+ "mainpagedocfooter": "Погледајте [https://www.mediawiki.org/wiki/Special:MyLanguage/Help:Contents кориснички водич] за коришћење програма.\n\n== Увод ==\n* [https://www.mediawiki.org/wiki/Special:MyLanguage/Manual:Configuration_settings Помоћ у вези са подешавањима]\n* [https://www.mediawiki.org/wiki/Special:MyLanguage/Manual:FAQ Често постављена питања]\n* [https://lists.wikimedia.org/mailman/listinfo/mediawiki-announce Дописна листа о издањима Медијавикија]\n* [https://www.mediawiki.org/wiki/Special:MyLanguage/Manual:Combating_spam Научите како да се борете против спама на Вашој вики]"
}
continue; // try the other direction
}
} else { // table *may* have >= MAX_OFFSET rows
- // Bug 42614: "ORDER BY job_random" with a job_random inequality causes high CPU
+ // T44614: "ORDER BY job_random" with a job_random inequality causes high CPU
// in MySQL if there are many rows for some reason. This uses a small OFFSET
// instead of job_random for reducing excess claim retries.
$row = $dbw->selectRow( 'job', self::selectFields(), // find a random job
wfDebug( __METHOD__ . " : skipping, already good\n" );
}
- // Preserve fragment (bug 14904)
+ // Preserve fragment (T16904)
$newTitle = Title::makeTitle( $newTitle->getNamespace(), $newTitle->getDBkey(),
$currentDest->getFragment(), $newTitle->getInterwiki() );
$seenTitles[$titleText] = true;
if ( $title->isExternal() ) {
- // If the target is interwiki, we have to break early (bug 40352).
+ // If the target is interwiki, we have to break early (T42352).
// Otherwise it will look up a row in the local page table
// with the namespace/page of the interwiki target which can cause
// unexpected results (e.g. X -> foo:Bar -> Bar -> .. )
);
$this->setLastError( get_class( $e ) . ": " . $e->getMessage() );
// To prevent potential database referential integrity issues.
- // See bug 32551.
+ // See T34551.
MWExceptionHandler::rollbackMasterChangesAndLog( $e );
return false;
// * Otherwise remap the URL to work in generated stylesheets
// Guard against trailing slashes, because "some/remote/../foo.png"
- // resolves to "some/remote/foo.png" on (some?) clients (bug 27052).
+ // resolves to "some/remote/foo.png" on (some?) clients (T29052).
if ( substr( $remote, -1 ) == '/' ) {
$remote = substr( $remote, 0, -1 );
}
return false;
}
+ MediaWiki\HeaderCallback::warnIfHeadersSent();
if ( $version === null ) {
$version = isset( $_SERVER['SERVER_PROTOCOL'] ) &&
$_SERVER['SERVER_PROTOCOL'] === 'HTTP/1.0' ?
* @return string|null Valid dotted quad IPv4 address or null
*/
public static function canonicalize( $addr ) {
- // remove zone info (bug 35738)
+ // remove zone info (T37738)
$addr = preg_replace( '/\%.*/', '', $addr );
if ( self::isValid( $addr ) ) {
// good
} elseif ( $rcode === 404 ) {
$status->fatal( 'backend-fail-stream', $params['src'] );
- // Per bug 41113, nasty things can happen if bad cache entries get
+ // Per T43113, nasty things can happen if bad cache entries get
// stuck in cache. It's also possible that this error can come up
// with simple race conditions. Clear out the stat cache to be safe.
$this->clearCache( [ $params['src'] ] );
*/
protected function serialize( $data ) {
// Serialize anything but integers so INCR/DECR work
- // Do not store integer-like strings as integers to avoid type confusion (bug 60563)
+ // Do not store integer-like strings as integers to avoid type confusion (T62563)
return is_int( $data ) ? $data : serialize( $data );
}
use DBConnRef;
use IDatabase;
use InvalidArgumentException;
-use LoadBalancer;
/**
* Database connection manager.
}
// Add trace comment to the begin of the sql string, right after the operator.
- // Or, for one-word queries (like "BEGIN" or COMMIT") add it to the end (bug 42598)
+ // Or, for one-word queries (like "BEGIN" or COMMIT") add it to the end (T44598)
$commentedSql = preg_replace( '/\s|$/', " /* $fname {$this->agent} */ ", $sql, 1 );
# Start implicit transactions that wrap the request if DBO_TRX is enabled
private function handleSessionLoss() {
$this->mTrxLevel = 0;
- $this->mTrxIdleCallbacks = []; // bug 65263
- $this->mTrxPreCommitCallbacks = []; // bug 65263
+ $this->mTrxIdleCallbacks = []; // T67263
+ $this->mTrxPreCommitCallbacks = []; // T67263
$this->mSessionTempTables = [];
$this->mNamedLocksHeld = [];
try {
$preLimitTail .= $this->makeOrderBy( $options );
- // if (isset($options['LIMIT'])) {
- // $tailOpts .= $this->limitResult('', $options['LIMIT'],
- // isset($options['OFFSET']) ? $options['OFFSET']
- // : false);
- // }
-
if ( isset( $noKeyOptions['FOR UPDATE'] ) ) {
$postLimitTail .= ' FOR UPDATE';
}
}
}
-class_alias( 'Database', 'DatabaseBase' );
+class_alias( Database::class, 'DatabaseBase' );
*/
use Wikimedia\Rdbms\Blob;
use Wikimedia\Rdbms\MssqlBlob;
+use Wikimedia\Rdbms\MssqlField;
/**
* @ingroup Database
*/
use Wikimedia\Rdbms\DBMasterPos;
use Wikimedia\Rdbms\MySQLMasterPos;
+use Wikimedia\Rdbms\MySQLField;
/**
* Database abstraction object for MySQL.
use Wikimedia\WaitConditionLoop;
use Wikimedia\Rdbms\Blob;
use Wikimedia\Rdbms\PostgresBlob;
+use Wikimedia\Rdbms\PostgresField;
/**
* @ingroup Database
/**
* Prepend our schema (e.g. 'mediawiki') in front
* of the search path
- * Fixes bug 15816
+ * Fixes T17816
*/
$search_path = $this->getSearchPath();
array_unshift( $search_path,
// Normal client
$this->numericVersion = $versionInfo['server'];
} else {
- // Bug 16937: broken pgsql extension from PHP<5.3
+ // T18937: broken pgsql extension from PHP<5.3
$this->numericVersion = pg_parameter_status( $conn, 'server_version' );
}
}
$q = <<<SQL
SELECT 1 FROM pg_class, pg_namespace, pg_trigger
WHERE relnamespace=pg_namespace.oid AND relkind='r'
- AND tgrelid=pg_class.oid
- AND nspname=%s AND relname=%s AND tgname=%s
+ AND tgrelid=pg_class.oid
+ AND nspname=%s AND relname=%s AND tgname=%s
SQL;
$res = $this->query(
sprintf(
$preLimitTail .= $this->makeOrderBy( $options );
- // if ( isset( $options['LIMIT'] ) ) {
- // $tailOpts .= $this->limitResult( '', $options['LIMIT'],
- // isset( $options['OFFSET'] ) ? $options['OFFSET']
- // : false );
- // }
-
if ( isset( $options['FOR UPDATE'] ) ) {
$postLimitTail .= ' FOR UPDATE OF ' .
implode( ', ', array_map( [ $this, 'tableName' ], $options['FOR UPDATE'] ) );
* @ingroup Database
*/
use Wikimedia\Rdbms\Blob;
+use Wikimedia\Rdbms\SQLiteField;
/**
* @ingroup Database
use Wikimedia\Rdbms\Blob;
use Wikimedia\Rdbms\LikeMatch;
use Wikimedia\Rdbms\DBMasterPos;
+use Wikimedia\Rdbms\Field;
/**
* Basic database interface for live and lazy-loaded relation database handles
}
}
-class_alias( 'Wikimedia\Rdbms\Blob', 'Blob' );
+class_alias( Blob::class, 'Blob' );
<?php
+
+namespace Wikimedia\Rdbms;
+
/**
* Base for all database-specific classes representing information about database fields
* @ingroup Database
*/
function isNullable();
}
+
+class_alias( Field::class, 'Field' );
<?php
+
+namespace Wikimedia\Rdbms;
+
class MssqlField implements Field {
private $name, $tableName, $default, $max_length, $nullable, $type;
<?php
+
+namespace Wikimedia\Rdbms;
+
class MySQLField implements Field {
private $name, $tablename, $default, $max_length, $nullable,
$is_pk, $is_unique, $is_multiple, $is_key, $type, $binary,
+++ /dev/null
-<?php
-class ORAField implements Field {
- private $name, $tablename, $default, $max_length, $nullable,
- $is_pk, $is_unique, $is_multiple, $is_key, $type;
-
- function __construct( $info ) {
- $this->name = $info['column_name'];
- $this->tablename = $info['table_name'];
- $this->default = $info['data_default'];
- $this->max_length = $info['data_length'];
- $this->nullable = $info['not_null'];
- $this->is_pk = isset( $info['prim'] ) && $info['prim'] == 1 ? 1 : 0;
- $this->is_unique = isset( $info['uniq'] ) && $info['uniq'] == 1 ? 1 : 0;
- $this->is_multiple = isset( $info['nonuniq'] ) && $info['nonuniq'] == 1 ? 1 : 0;
- $this->is_key = ( $this->is_pk || $this->is_unique || $this->is_multiple );
- $this->type = $info['data_type'];
- }
-
- function name() {
- return $this->name;
- }
-
- function tableName() {
- return $this->tablename;
- }
-
- function defaultValue() {
- return $this->default;
- }
-
- function maxLength() {
- return $this->max_length;
- }
-
- function isNullable() {
- return $this->nullable;
- }
-
- function isKey() {
- return $this->is_key;
- }
-
- function isMultipleKey() {
- return $this->is_multiple;
- }
-
- function type() {
- return $this->type;
- }
-}
<?php
+
+namespace Wikimedia\Rdbms;
+
+use DatabasePostgres;
+
class PostgresField implements Field {
private $name, $tablename, $type, $nullable, $max_length, $deferred, $deferrable, $conname,
$has_default, $default;
<?php
+
+namespace Wikimedia\Rdbms;
+
class SQLiteField implements Field {
private $info, $tableName;
namespace Wikimedia\Rdbms;
use InvalidArgumentException;
-use LoadBalancer;
use DBTransactionError;
use DBReplicationWaitError;
use Exception;
use RuntimeException;
use IDatabase;
-use LoadBalancer;
use DBTransactionError;
use DBReplicationWaitError;
$masterPositions = array_fill( 0, count( $lbs ), false );
foreach ( $lbs as $i => $lb ) {
if ( $lb->getServerCount() <= 1 ) {
- // Bug 27975 - Don't try to wait for replica DBs if there are none
+ // T29975 - Don't try to wait for replica DBs if there are none
// Prevents permission error when getting master position
continue;
} elseif ( $opts['ifWritesSince']
namespace Wikimedia\Rdbms;
-use LoadBalancer;
use IDatabase;
use InvalidArgumentException;
namespace Wikimedia\Rdbms;
-use LoadBalancer;
use InvalidArgumentException;
/**
namespace Wikimedia\Rdbms;
-use LoadBalancerSingle;
use IDatabase;
use InvalidArgumentException;
use BadMethodCallException;
* Index must be an actual index into the array.
* If the server is already open, returns it.
*
- * On error, returns false, and the connection which caused the
- * error will be available via $this->mErrorConnection.
- *
* @note If disable() was called on this LoadBalancer, this method will throw a DBAccessError.
*
* @param int $i Server index or DB_MASTER/DB_REPLICA
* @file
* @ingroup Database
*/
+namespace Wikimedia\Rdbms;
+
use Psr\Log\LoggerInterface;
use Psr\Log\NullLogger;
use Wikimedia\ScopedCallback;
-use Wikimedia\Rdbms\TransactionProfiler;
-use Wikimedia\Rdbms\ILoadMonitor;
-use Wikimedia\Rdbms\DatabaseDomain;
-use Wikimedia\Rdbms\ILoadBalancer;
-use Wikimedia\Rdbms\DBMasterPos;
+use IDatabase;
+use Database;
+use DBConnRef;
+use MaintainableDBConnRef;
+use BagOStuff;
+use EmptyBagOStuff;
+use WANObjectCache;
+use ArrayUtils;
+use DBError;
+use DBAccessError;
+use DBExpectedError;
+use DBUnexpectedError;
+use DBTransactionError;
+use DBTransactionSizeError;
+use DBConnectionError;
+use InvalidArgumentException;
+use RuntimeException;
+use Exception;
/**
* Database connection, tracking, load balancing, and transaction manager for a cluster
class LoadBalancer implements ILoadBalancer {
/** @var array[] Map of (server index => server config array) */
private $mServers;
- /** @var IDatabase[][][] Map of local/foreignUsed/foreignFree => server index => IDatabase array */
+ /** @var \Database[][][] Map of local/foreignUsed/foreignFree => server index => IDatabase array */
private $mConns;
/** @var float[] Map of (server index => weight) */
private $mLoads;
/** @var LoggerInterface */
protected $perfLogger;
- /** @var bool|IDatabase Database connection that caused a problem */
- private $mErrorConnection;
+ /** @var \Database Database connection that caused a problem */
+ private $errorConnection;
/** @var integer The generic (not query grouped) replica DB index (of $mServers) */
private $mReadIndex;
/** @var bool|DBMasterPos False if not set */
];
$this->mLoads = [];
$this->mWaitForPos = false;
- $this->mErrorConnection = false;
$this->mAllowLagged = false;
if ( isset( $params['readOnlyReason'] ) && is_string( $params['readOnlyReason'] ) ) {
private function getLoadMonitor() {
if ( !isset( $this->loadMonitor ) ) {
$compat = [
- 'LoadMonitor' => Wikimedia\Rdbms\LoadMonitor::class,
- 'LoadMonitorNull' => Wikimedia\Rdbms\LoadMonitorNull::class,
- 'LoadMonitorMySQL' => Wikimedia\Rdbms\LoadMonitorMySQL::class,
+ 'LoadMonitor' => LoadMonitor::class,
+ 'LoadMonitorNull' => LoadMonitorNull::class,
+ 'LoadMonitorMySQL' => LoadMonitorMySQL::class,
];
$class = $this->loadMonitorConfig['class'];
$this->mConns['local'][$i][0] = $conn;
} else {
$this->connLogger->warning( "Failed to connect to database $i at '$serverName'." );
- $this->mErrorConnection = $conn;
+ $this->errorConnection = $conn;
$conn = false;
}
}
- if ( $conn && !$conn->isOpen() ) {
+ if ( $conn instanceof IDatabase && !$conn->isOpen() ) {
// Connection was made but later unrecoverably lost for some reason.
// Do not return a handle that will just throw exceptions on use,
// but let the calling code (e.g. getReaderIndex) try another server.
// See DatabaseMyslBase::ping() for how this can happen.
- $this->mErrorConnection = $conn;
+ $this->errorConnection = $conn;
$conn = false;
}
* it has been freed first with reuseConnection().
*
* On error, returns false, and the connection which caused the
- * error will be available via $this->mErrorConnection.
+ * error will be available via $this->errorConnection.
*
* @note If disable() was called on this LoadBalancer, this method will throw a DBAccessError.
*
if ( strlen( $dbName ) && !$conn->selectDB( $dbName ) ) {
$this->mLastError = "Error selecting database '$dbName' on server " .
$conn->getServer() . " from client host {$this->host}";
- $this->mErrorConnection = $conn;
+ $this->errorConnection = $conn;
$conn = false;
} else {
$conn->tablePrefix( $prefix );
$conn = $this->reallyOpenConnection( $server, $dbName );
if ( !$conn->isOpen() ) {
$this->connLogger->warning( __METHOD__ . ": connection error for $i/$domain" );
- $this->mErrorConnection = $conn;
+ $this->errorConnection = $conn;
$conn = false;
} else {
$conn->tablePrefix( $prefix );
}
// Increment reference count
- if ( $conn ) {
+ if ( $conn instanceof IDatabase ) {
$refCount = $conn->getLBInfo( 'foreignPoolRefCount' );
$conn->setLBInfo( 'foreignPoolRefCount', $refCount + 1 );
}
* @throws DBConnectionError
*/
private function reportConnectionError() {
- $conn = $this->mErrorConnection; // the connection which caused the error
+ $conn = $this->errorConnection; // the connection which caused the error
$context = [
'method' => __METHOD__,
'last_error' => $this->mLastError,
];
- if ( !is_object( $conn ) ) {
- // No last connection, probably due to all servers being too busy
- $this->connLogger->error(
- "LB failure with no last connection. Connection error: {last_error}",
- $context
- );
-
- // If all servers were busy, mLastError will contain something sensible
- throw new DBConnectionError( null, $this->mLastError );
- } else {
+ if ( $conn instanceof IDatabase ) {
$context['db_server'] = $conn->getServer();
$this->connLogger->warning(
"Connection error: {last_error} ({db_server})",
// throws DBConnectionError
$conn->reportConnectionError( "{$this->mLastError} ({$context['db_server']})" );
+ } else {
+ // No last connection, probably due to all servers being too busy
+ $this->connLogger->error(
+ "LB failure with no last connection. Connection error: {last_error}",
+ $context
+ );
+
+ // If all servers were busy, mLastError will contain something sensible
+ throw new DBConnectionError( null, $this->mLastError );
}
}
/**
* @param string $domain Domain ID, or false for the current domain
- * @param IDatabase|null DB master connectionl used to avoid loops [optional]
+ * @param IDatabase|null $conn DB master connectionl used to avoid loops [optional]
* @return bool
*/
private function masterRunningReadOnly( $domain, IDatabase $conn = null ) {
$this->disable();
}
}
+
+class_alias( LoadBalancer::class, 'LoadBalancer' );
* @ingroup Database
*/
+namespace Wikimedia\Rdbms;
+
+use IDatabase;
+use InvalidArgumentException;
+
/**
* Trivial LoadBalancer that always returns an injected connection handle
*/
return $this->db;
}
}
+
+class_alias( 'Wikimedia\Rdbms\LoadBalancerSingle', 'LoadBalancerSingle' );
if ( $elm === self::NS_RDF . ' Seq' ) {
array_unshift( $this->mode, self::MODE_LI );
} elseif ( $elm === self::NS_RDF . ' Bag' ) {
- # bug 27105
+ # T29105
$this->logger->info( __METHOD__ . ' Expected an rdf:Seq, but got an rdf:Bag. Pretending'
. ' it is a Seq, since some buggy software is known to screw this up.' );
array_unshift( $this->mode, self::MODE_LI );
'choices' => [ '1' => true, '2' => true ],
],
/********
- * Disable extracting this property (bug 31944)
+ * Disable extracting this property (T33944)
* Several files have a string instead of a Seq
* for this property. XMPReader doesn't handle
* mismatched types very gracefully (it marks
* the relavent prop). Since this prop
* doesn't communicate all that useful information
* just disable this prop for now, until such
- * XMPReader is more graceful (bug 32172)
+ * XMPReader is more graceful (T34172)
* 'YCbCrSubSampling' => array(
* 'map_group' => 'exif',
* 'mode' => XMPReader::MODE_SEQ,
* @param string $user The user who made the log entries
* @param array $param Associative Array with the following additional options:
* - lim Integer Limit of items to show, default is 50
- * - conds Array Extra conditions for the query (e.g. "log_action != 'revision'")
+ * - conds Array Extra conditions for the query
+ * (e.g. 'log_action != ' . $dbr->addQuotes( 'revision' ))
* - showIfEmpty boolean Set to false if you don't want any output in case the loglist is empty
* if set to true (default), "No matching items in log" is displayed if loglist is empty
* - msgKey Array If you want a nice box with a message, set this to the key of the message.
/**
* Even uglier hack to maintain backwards compatibilty with IRC bots
- * (bug 34508).
+ * (T36508).
* @see getActionText()
* @return string Text
*/
/**
* Even uglier hack to maintain backwards compatibilty with IRC bots
- * (bug 34508).
+ * (T36508).
* @see getActionText()
* @return string Text
*/
} else {
$this->mConds['log_user'] = $userid;
}
- // Paranoia: avoid brute force searches (bug 17342)
+ // Paranoia: avoid brute force searches (T19342)
$user = $this->getUser();
if ( !$user->isAllowed( 'deletedhistory' ) ) {
$this->mConds[] = $this->mDb->bitAnd( 'log_deleted', LogPage::DELETED_USER ) . ' = 0';
} else {
$this->mConds['log_title'] = $title->getDBkey();
}
- // Paranoia: avoid brute force searches (bug 17342)
+ // Paranoia: avoid brute force searches (T19342)
$user = $this->getUser();
if ( !$user->isAllowed( 'deletedhistory' ) ) {
$this->mConds[] = $db->bitAnd( 'log_deleted', LogPage::DELETED_ACTION ) . ' = 0';
$pageTitle = $this->title->getPrefixedText();
if ( $this->oldid ) {
- // Always show a link to the diff which triggered the mail. See bug 32210.
+ // Always show a link to the diff which triggered the mail. See T34210.
$keys['$NEWPAGE'] = "\n\n" . wfMessage( 'enotif_lastdiff',
$this->title->getCanonicalURL( [ 'diff' => 'next', 'oldid' => $this->oldid ] ) )
->inContentLanguage()->text();
Skin::makeInternalOrExternalUrl( wfMessage( 'helppage' )->inContentLanguage()->text() )
);
- # Replace this after transforming the message, bug 35019
+ # Replace this after transforming the message, T37019
$postTransformKeys['$PAGESUMMARY'] = $this->summary == '' ? ' - ' : $this->summary;
// Now build message's subject and body
if ( $params['interlace'] ) {
$animation_post = [ '-interlace', 'JPEG' ];
}
- # Sharpening, see bug 6193
+ # Sharpening, see T8193
if ( ( $params['physicalWidth'] + $params['physicalHeight'] )
/ ( $params['srcWidth'] + $params['srcHeight'] )
< $wgSharpenReductionThreshold
// be a total drag. :P
$scene = 0;
} elseif ( $this->isAnimatedImage( $image ) ) {
- // Coalesce is needed to scale animated GIFs properly (bug 1017).
+ // Coalesce is needed to scale animated GIFs properly (T3017).
$animation_pre = [ '-coalesce' ];
// We optimize the output, but -optimize is broken,
- // use optimizeTransparency instead (bug 11822)
+ // use optimizeTransparency instead (T13822)
if ( version_compare( $this->getMagickVersion(), "6.3.5" ) >= 0 ) {
$animation_post = [ '-fuzz', '5%', '-layers', 'optimizeTransparency' ];
}
&& $xcfMeta['colorType'] === 'greyscale-alpha'
&& version_compare( $this->getMagickVersion(), "6.8.9-3" ) < 0
) {
- // bug 66323 - Greyscale images not rendered properly.
+ // T68323 - Greyscale images not rendered properly.
// So only take the "red" channel.
$channelOnly = [ '-channel', 'R', '-separate' ];
$animation_pre = array_merge( $animation_pre, $channelOnly );
$im->readImage( $params['srcPath'] );
if ( $params['mimeType'] == 'image/jpeg' ) {
- // Sharpening, see bug 6193
+ // Sharpening, see T8193
if ( ( $params['physicalWidth'] + $params['physicalHeight'] )
/ ( $params['srcWidth'] + $params['srcHeight'] )
< $wgSharpenReductionThreshold
// be a total drag. :P
$im->setImageScene( 0 );
} elseif ( $this->isAnimatedImage( $image ) ) {
- // Coalesce is needed to scale animated GIFs properly (bug 1017).
+ // Coalesce is needed to scale animated GIFs properly (T3017).
$im = $im->coalesceImages();
}
// GIF interlacing is only available since 6.3.4
* @param string $cmd
*/
protected function logErrorForExternalProcess( $retval, $err, $cmd ) {
- # Keep error output limited (bug 57985)
+ # Keep error output limited (T59985)
$errMessage = trim( substr( $err, 0, self::MAX_ERR_LOG_SIZE ) );
wfDebugLog( 'thumbnail',
}
// Expand entities, since Adobe Illustrator uses them for xmlns
- // attributes (bug 31719). Note that libxml2 has some protection
+ // attributes (T33719). Note that libxml2 has some protection
// against large recursive entity expansions so this is not as
// insecure as it might appear to be. However, it is still extremely
// insecure. It's necessary to wrap any read() calls with
// libxml_disable_entity_loader() to avoid arbitrary local file
// inclusion, or even arbitrary code execution if the expect
- // extension is installed (bug 46859).
+ // extension is installed (T48859).
$oldDisable = libxml_disable_entity_loader( true );
$this->reader->setParserProperty( XMLReader::SUBST_ENTITIES, true );
use \MediaWiki\MediaWikiServices;
use \Wikimedia\WaitConditionLoop;
use \Wikimedia\Rdbms\TransactionProfiler;
+use Wikimedia\Rdbms\LoadBalancer;
/**
* Class to store objects in the database
$exptime = $this->convertExpiry( $exptime );
$encExpiry = $db->timestamp( $exptime );
}
- // (bug 24425) use a replace if the db supports it instead of
+ // (T26425) use a replace if the db supports it instead of
// delete/insert to avoid clashes with conflicting keynames
$db->update(
$tableName,
], __METHOD__, 'IGNORE' );
if ( $db->affectedRows() == 0 ) {
- // Race condition. See bug 28611
+ // Race condition. See T30611
$newValue = null;
}
} catch ( DBError $e ) {
$ns = $this->getTitle()->getNamespace();
- # Don't index user and user talk pages for blocked users (bug 11443)
+ # Don't index user and user talk pages for blocked users (T13443)
if ( ( $ns == NS_USER || $ns == NS_USER_TALK ) && !$this->getTitle()->isSubpage() ) {
$specificTarget = null;
$vagueTarget = null;
}
if ( isset( $wgArticleRobotPolicies[$this->getTitle()->getPrefixedText()] ) ) {
- # (bug 14900) site config can override user-defined __INDEX__ or __NOINDEX__
+ # (T16900) site config can override user-defined __INDEX__ or __NOINDEX__
$policy = array_merge(
$policy,
self::formatRobotPolicy( $wgArticleRobotPolicies[$this->getTitle()->getPrefixedText()] )
$loggedIn = $this->getContext()->getUser()->isLoggedIn();
if ( $loggedIn || $cache->get( $key ) ) {
$logTypes = [ 'delete', 'move' ];
- $conds = [ "log_action != 'revision'" ];
+
+ $dbr = wfGetDB( DB_REPLICA );
+
+ $conds = [ 'log_action != ' . $dbr->addQuotes( 'revision' ) ];
// Give extensions a chance to hide their (unrelated) log entries
Hooks::run( 'Article::MissingArticleConditions', [ &$conds, $logTypes ] );
LogEventsList::showLogExtract(
}
$out->addModuleStyles( [
- 'filepage', // always show the local local Filepage.css, bug 29277
+ 'filepage', // always show the local local Filepage.css, T31277
'mediawiki.action.view.filepage', // Add MediaWiki styles for a file page
] );
}
// this will get messy.
// The dirmark, however, must not be immediately adjacent
// to the filename, because it can get copied with it.
- // See bug 25277.
+ // See T27277.
// @codingStandardsIgnoreStart Ignore long line
$out->addWikiText( <<<EOT
<div class="fullMedia"><span class="dangerousLink">{$medialink}</span> $dirmark<span class="fileInfo">$longDesc</span></div>
} else {
# Image does not exist
if ( !$this->getId() ) {
+ $dbr = wfGetDB( DB_REPLICA );
+
# No article exists either
# Show deletion log to be consistent with normal articles
LogEventsList::showLogExtract(
$this->getTitle()->getPrefixedText(),
'',
[ 'lim' => 10,
- 'conds' => [ "log_action != 'revision'" ],
+ 'conds' => [ 'log_action != ' . $dbr->addQuotes( 'revision' ) ],
'showIfEmpty' => false,
'msgKey' => [ 'moveddeleted-notice' ]
]
* @return WikiPage|null
*/
public static function newFromID( $id, $from = 'fromdb' ) {
- // page id's are never 0 or negative, see bug 61166
+ // page ids are never 0 or negative, see T63166
if ( $id < 1 ) {
return null;
}
$this->mTimestamp = '';
$this->mIsRedirect = false;
$this->mLatest = false;
- // Bug 57026: do not clear mPreparedEdit since prepareTextForEdit() already checks
+ // T59026: do not clear mPreparedEdit since prepareTextForEdit() already checks
// the requested rev ID and content against the cached one for equality. For most
// content types, the output should not change during the lifetime of this cache.
// Clearing it can cause extra parses on edit for no reason.
$this->mLinksUpdated = wfTimestampOrNull( TS_MW, $data->page_links_updated );
$this->mIsRedirect = intval( $data->page_is_redirect );
$this->mLatest = intval( $data->page_latest );
- // Bug 37225: $latest may no longer match the cached latest Revision object.
+ // T39225: $latest may no longer match the cached latest Revision object.
// Double-check the ID of any cached latest Revision object for consistency.
if ( $this->mLastRevision && $this->mLastRevision->getId() != $this->mLatest ) {
$this->mLastRevision = null;
}
if ( $this->mDataLoadedFrom == self::READ_LOCKING ) {
- // Bug 37225: if session S1 loads the page row FOR UPDATE, the result always
+ // T39225: if session S1 loads the page row FOR UPDATE, the result always
// includes the latest changes committed. This is true even within REPEATABLE-READ
// transactions, where S1 normally only sees changes committed before the first S1
// SELECT. Thus we need S1 to also gets the revision row FOR UPDATE; otherwise, it
$this->getContentHandler()->getModelID() );
}
- // Bug 30711: always use current version when adding a new section
+ // T32711: always use current version when adding a new section
if ( is_null( $baseRevId ) || $sectionId === 'new' ) {
$oldContent = $this->getContent();
} else {
return $status;
} elseif ( !$oldContent ) {
- // Sanity check for bug 37225
+ // Sanity check for T39225
throw new MWException( "Could not find text for current revision {$oldid}." );
}
$dbw->endAtomic( __METHOD__ );
$this->mTimestamp = $now;
} else {
- // Bug 32948: revision ID must be set to page {{REVISIONID}} and
+ // T34948: revision ID must be set to page {{REVISIONID}} and
// related variables correctly. Likewise for {{REVISIONUSER}} (T135261).
$revision->setId( $this->getLatest() );
$revision->setUserIdAndName(
$user = is_null( $user ) ? $wgUser : $user;
// XXX: check $user->getId() here???
- // Use a sane default for $serialFormat, see bug 57026
+ // Use a sane default for $serialFormat, see T59026
if ( $serialFormat === null ) {
$serialFormat = $content->getContentHandler()->getDefaultFormat();
}
// Update the links tables and other secondary data
if ( $content ) {
- $recursive = $options['changed']; // bug 50785
+ $recursive = $options['changed']; // T52785
$updates = $content->getSecondaryDataUpdates(
$this->getTitle(), null, $recursive, $editInfo->output
);
if ( $options['created'] ) {
self::onArticleCreate( $this->mTitle );
- } elseif ( $options['changed'] ) { // bug 50785
+ } elseif ( $options['changed'] ) { // T52785
self::onArticleEdit( $this->mTitle, $revision );
}
$dbw->onTransactionPreCommitOrIdle(
function () use ( $dbw, $logEntry, $logid ) {
- // Bug 56776: avoid deadlocks (especially from FileDeleteForm)
+ // T58776: avoid deadlocks (especially from FileDeleteForm)
$logEntry->publish( $logid );
},
__METHOD__
);
// Set patrolling and bot flag on the edits, which gets rollbacked.
- // This is done even on edit failure to have patrolling in that case (bug 62157).
+ // This is done even on edit failure to have patrolling in that case (T64157).
$set = [];
if ( $bot && $guser->isAllowed( 'markbotedits' ) ) {
// Mark all reverted edits as bot
const COLON_STATE_COMMENT = 5;
const COLON_STATE_COMMENTDASH = 6;
const COLON_STATE_COMMENTDASHDASH = 7;
+ const COLON_STATE_LC = 8;
/**
* Make lists from lines starting with ':', '*', '#', etc.
if ( $openMatch || $closeMatch ) {
$pendingPTag = false;
- # @todo bug 5718: paragraph closed
+ # @todo T7718: paragraph closed
$output .= $this->closeParagraph();
if ( $preOpenMatch && !$preCloseMatch ) {
$this->inPre = true;
}
}
}
- # somewhere above we forget to get out of pre block (bug 785)
+ # somewhere above we forget to get out of pre block (T2785)
if ( $preCloseMatch && $this->inPre ) {
$this->inPre = false;
}
* @return string The position of the ':', or false if none found
*/
private function findColonNoLinks( $str, &$before, &$after ) {
- $colonPos = strpos( $str, ':' );
- if ( $colonPos === false ) {
+ if ( !preg_match( '/:|<|-\{/', $str, $m, PREG_OFFSET_CAPTURE ) ) {
# Nothing to find!
return false;
}
- $ltPos = strpos( $str, '<' );
- if ( $ltPos === false || $ltPos > $colonPos ) {
+ if ( $m[0][0] === ':' ) {
# Easy; no tag nesting to worry about
+ $colonPos = $m[0][1];
$before = substr( $str, 0, $colonPos );
$after = substr( $str, $colonPos + 1 );
return $colonPos;
# Ugly state machine to walk through avoiding tags.
$state = self::COLON_STATE_TEXT;
- $level = 0;
+ $ltLevel = 0;
+ $lcLevel = 0;
$len = strlen( $str );
- for ( $i = 0; $i < $len; $i++ ) {
+ for ( $i = $m[0][1]; $i < $len; $i++ ) {
$c = $str[$i];
switch ( $state ) {
$state = self::COLON_STATE_TAGSTART;
break;
case ":":
- if ( $level === 0 ) {
+ if ( $ltLevel === 0 ) {
# We found it!
$before = substr( $str, 0, $i );
$after = substr( $str, $i + 1 );
break;
default:
# Skip ahead looking for something interesting
- $colonPos = strpos( $str, ':', $i );
- if ( $colonPos === false ) {
+ if ( !preg_match( '/:|<|-\{/', $str, $m, PREG_OFFSET_CAPTURE, $i ) ) {
# Nothing else interesting
return false;
}
- $ltPos = strpos( $str, '<', $i );
- if ( $level === 0 ) {
- if ( $ltPos === false || $colonPos < $ltPos ) {
- # We found it!
- $before = substr( $str, 0, $colonPos );
- $after = substr( $str, $colonPos + 1 );
- return $i;
- }
+ if ( $m[0][0] === '-{' ) {
+ $state = self::COLON_STATE_LC;
+ $lcLevel++;
+ $i = $m[0][1] + 1;
+ } else {
+ # Skip ahead to next interesting character.
+ $i = $m[0][1] - 1;
}
- if ( $ltPos === false ) {
- # Nothing else interesting to find; abort!
- # We're nested, but there's no close tags left. Abort!
- break 2;
+ break;
+ }
+ break;
+ case self::COLON_STATE_LC:
+ # In language converter markup -{ ... }-
+ if ( !preg_match( '/-\{|\}-/', $str, $m, PREG_OFFSET_CAPTURE, $i ) ) {
+ # Nothing else interesting to find; abort!
+ # We're nested in language converter markup, but there
+ # are no close tags left. Abort!
+ break 2;
+ } elseif ( $m[0][0] === '-{' ) {
+ $i = $m[0][1] + 1;
+ $lcLevel++;
+ } elseif ( $m[0][0] === '}-' ) {
+ $i = $m[0][1] + 1;
+ $lcLevel--;
+ if ( $lcLevel === 0 ) {
+ $state = self::COLON_STATE_TEXT;
}
- # Skip ahead to next tag start
- $i = $ltPos;
- $state = self::COLON_STATE_TAGSTART;
}
break;
case self::COLON_STATE_TAG:
# In a <tag>
switch ( $c ) {
case ">":
- $level++;
+ $ltLevel++;
$state = self::COLON_STATE_TEXT;
break;
case "/":
case self::COLON_STATE_CLOSETAG:
# In a </tag>
if ( $c === ">" ) {
- $level--;
- if ( $level < 0 ) {
+ if ( $ltLevel > 0 ) {
+ $ltLevel--;
+ } else {
+ # ignore the excess close tag, but keep looking for
+ # colons. (This matches Parsoid behavior.)
wfDebug( __METHOD__ . ": Invalid input; too many close tags\n" );
- return false;
}
$state = self::COLON_STATE_TEXT;
}
throw new MWException( "State machine error in " . __METHOD__ );
}
}
- if ( $level > 0 ) {
- wfDebug( __METHOD__ . ": Invalid input; not enough close tags (level $level, state $state)\n" );
+ if ( $ltLevel > 0 || $lcLevel > 0 ) {
+ wfDebug(
+ __METHOD__ . ": Invalid input; not enough close tags " .
+ "(level $ltLevel/$lcLevel, state $state)\n"
+ );
return false;
}
return false;
}
/**
- * urlencodes a string according to one of three patterns: (bug 22474)
+ * urlencodes a string according to one of three patterns: (T24474)
*
* By default (for HTTP "query" strings), spaces are encoded as '+'.
* Or to encode a value for the HTTP "path", spaces are encoded as '%20'.
*
* @private
*
- * @param int $index
+ * @param string $index Magic variable identifier as mapped in MagicWord::$mVariableIDs
* @param bool|PPFrame $frame
*
* @throws MWException
// The edit section preference may not be the appropiate one in
// the ParserOutput, as we are not storing it in the parsercache
- // key. Force it here. See bug 31445.
+ // key. Force it here. See T33445.
$value->setEditSectionTokens( $popts->getEditSection() );
$wikiPage = method_exists( $article, 'getPage' )
* when the page is rendered based on the language of the user.
*
* @note When saving, this will return the default language instead of the user's.
- * {{int: }} uses this which used to produce inconsistent link tables (bug 14404).
+ * {{int: }} uses this which used to produce inconsistent link tables (T16404).
*
* @return Language
* @since 1.19
return false;
}
- // Important to parse with correct title (bug 31469)
+ // Important to parse with correct title (T33469)
$cat = wfMessage( $msg )
->title( $title )
->inContentLanguage()
* is to assume a direct page view.
*
* The generated DOM tree must depend only on the input text and the flags.
- * The DOM tree must be the same in OT_HTML and OT_WIKI mode, to avoid a regression of bug 4899.
+ * The DOM tree must be the same in OT_HTML and OT_WIKI mode, to avoid a regression of T6899.
*
* Any flag added to the $flags parameter here, or any other parameter liable to cause a
* change in the DOM tree for a given text, must be passed through the section identifier
* included. Default is to assume a direct page view.
*
* The generated DOM tree must depend only on the input text and the flags.
- * The DOM tree must be the same in OT_HTML and OT_WIKI mode, to avoid a regression of bug 4899.
+ * The DOM tree must be the same in OT_HTML and OT_WIKI mode, to avoid a regression of T6899.
*
* Any flag added to the $flags parameter here, or any other parameter liable to cause a
* change in the DOM tree for a given text, must be passed through the section identifier
return false;
}
- // Reduce effects of race conditions for slow parses (bug 46014)
+ // Reduce effects of race conditions for slow parses (T48014)
$cacheTime = wfTimestampNow();
$time = - microtime( true );
}
public function canUse() {
- # Do not log anything if database is readonly (bug 5375)
+ # Do not log anything if database is readonly (T7375)
return !wfReadOnly();
}
$module = $this->getModule( $name );
if ( $module ) {
// Do not allow private modules to be loaded from the web.
- // This is a security issue, see bug 34907.
+ // This is a security issue, see T36907.
if ( $module->getGroup() === 'private' ) {
$this->logger->debug( "Request for private module '$name' denied" );
$this->errors[] = "Cannot show private module \"$name\"";
* @return void
*/
protected function sendResponseHeaders( ResourceLoaderContext $context, $etag, $errors ) {
+ \MediaWiki\HeaderCallback::warnIfHeadersSent();
$rlMaxage = $this->config->get( 'ResourceLoaderMaxage' );
// Use a short cache expiry so that updates propagate to clients quickly, if:
// - No version specified (shared resources, e.g. stylesheets)
$styles = (array)$styles;
foreach ( $styles as $style ) {
$style = trim( $style );
- // Don't output an empty "@media print { }" block (bug 40498)
+ // Don't output an empty "@media print { }" block (T42498)
if ( $style !== '' ) {
// Transform the media type based on request params and config
// The way that this relies on $wgRequest to propagate request params is slightly evil
*/
public function getLessCompiler( $extraVars = [] ) {
// When called from the installer, it is possible that a required PHP extension
- // is missing (at least for now; see bug 47564). If this is the case, throw an
+ // is missing (at least for now; see T49564). If this is the case, throw an
// exception (caught by the installer) to prevent a fatal error later on.
if ( !class_exists( 'Less_Parser' ) ) {
throw new MWException( 'MediaWiki requires the less.php parser' );
$rl = $mainContext->getResourceLoader();
$chunks = [];
+ // Sort module names so requests are more uniform
+ sort( $modules );
+
if ( $mainContext->getDebug() && count( $modules ) > 1 ) {
+
$chunks = [];
// Recursively call us for every item
foreach ( $modules as $name ) {
return new WrappedStringList( "\n", $chunks );
}
- // Sort module names so requests are more uniform
- sort( $modules );
// Create keyed-by-source and then keyed-by-group list of module objects from modules list
$sortedModules = [];
foreach ( $modules as $name ) {
// Special handling for the user group; because users might change their stuff
// on-wiki like user pages, or user preferences; we need to find the highest
// timestamp of these user-changeable modules so we can ensure cache misses on change
- // This should NOT be done for the site group (bug 27564) because anons get that too
+ // This should NOT be done for the site group (T29564) because anons get that too
// and we shouldn't be putting timestamps in CDN-cached HTML
if ( $group === 'user' ) {
// Must setModules() before makeVersionQuery()
if ( $this->direction === null ) {
$this->direction = $this->getRequest()->getRawVal( 'dir' );
if ( !$this->direction ) {
- // Determine directionality based on user language (bug 6100)
+ // Determine directionality based on user language (T8100)
$this->direction = Language::factory( $this->getLanguage() )->getDir();
}
}
* @param array $localFileRefs List of files
*/
protected function saveFileDependencies( ResourceLoaderContext $context, $localFileRefs ) {
- // Normalise array
- $localFileRefs = array_values( array_unique( $localFileRefs ) );
- sort( $localFileRefs );
try {
+ // Related bugs and performance considerations:
+ // 1. Don't needlessly change the database value with the same list in a
+ // different order or with duplicates.
+ // 2. Use relative paths to avoid ghost entries when $IP changes. (T111481)
+ // 3. Don't needlessly replace the database with the same value
+ // just because $IP changed (e.g. when upgrading a wiki).
+ // 4. Don't create an endless replace loop on every request for this
+ // module when '../' is used anywhere. Even though both are expanded
+ // (one expanded by getFileDependencies from the DB, the other is
+ // still raw as originally read by RL), the latter has not
+ // been normalized yet.
+
+ // Normalise
+ $localFileRefs = array_values( array_unique( $localFileRefs ) );
+ sort( $localFileRefs );
+ $localPaths = self::getRelativePaths( $localFileRefs );
+
+ $storedPaths = self::getRelativePaths( $this->getFileDependencies( $context ) );
// If the list has been modified since last time we cached it, update the cache
- if ( $localFileRefs !== $this->getFileDependencies( $context ) ) {
+ if ( $localPaths !== $storedPaths ) {
+ $vary = $context->getSkin() . '|' . $context->getLanguage();
$cache = ObjectCache::getLocalClusterInstance();
- $key = $cache->makeKey( __METHOD__, $this->getName() );
+ $key = $cache->makeKey( __METHOD__, $this->getName(), $vary );
$scopeLock = $cache->getScopedLock( $key, 0 );
if ( !$scopeLock ) {
return; // T124649; avoid write slams
}
- $vary = $context->getSkin() . '|' . $context->getLanguage();
+ $deps = FormatJson::encode( $localPaths );
$dbw = wfGetDB( DB_MASTER );
- $dbw->replace( 'module_deps',
- [ [ 'md_module', 'md_skin' ] ],
+ $dbw->upsert( 'module_deps',
[
'md_module' => $this->getName(),
'md_skin' => $vary,
- // Use relative paths to avoid ghost entries when $IP changes (T111481)
- 'md_deps' => FormatJson::encode( self::getRelativePaths( $localFileRefs ) ),
+ 'md_deps' => $deps,
+ ],
+ [ 'md_module', 'md_skin' ],
+ [
+ 'md_deps' => $deps,
]
);
&& substr( rtrim( $scripts ), -1 ) !== ';'
) {
// Append semicolon to prevent weird bugs caused by files not
- // terminating their statements right (bug 27054)
+ // terminating their statements right (T29054)
$scripts .= ";\n";
}
}
if ( $context->shouldIncludeStyles() ) {
$styles = [];
// Don't create empty stylesheets like [ '' => '' ] for modules
- // that don't *have* any stylesheets (bug 38024).
+ // that don't *have* any stylesheets (T40024).
$stylePairs = $this->getStyles( $context );
if ( count( $stylePairs ) ) {
// If we are in debug mode without &only= set, we'll want to return an array of URLs
'wgSearchType' => $conf->get( 'SearchType' ),
'wgVariantArticlePath' => $conf->get( 'VariantArticlePath' ),
// Force object to avoid "empty" associative array from
- // becoming [] instead of {} in JS (bug 34604)
+ // becoming [] instead of {} in JS (T36604)
'wgActionPaths' => (object)$conf->get( 'ActionPaths' ),
'wgServer' => $conf->get( 'Server' ),
'wgServerName' => $conf->get( 'ServerName' ),
return true;
}
- // Bug 68488: For other modules (i.e. ones that are called in cached html output) only check
+ // T70488: For other modules (i.e. ones that are called in cached html output) only check
// page existance. This ensures that, if some pages in a module are temporarily blanked,
// we don't end omit the module's script or link tag on some pages.
return count( $revisions ) === 0;
}
}
+ if ( !$wikiModules ) {
+ // Nothing to preload
+ return;
+ }
+
$pageNames = array_keys( $allPages );
sort( $pageNames );
$hash = sha1( implode( '|', $pageNames ) );
return $failHandler();
}
} elseif ( !$info->getUserInfo()->isVerified() ) {
- $this->logger->warning(
+ // probably just a session timeout
+ $this->logger->info(
'Session "{session}": Unverified user provided and no metadata to auth it',
[
'session' => $info,
<?php
+use Wikimedia\Rdbms\LoadBalancer;
+
/**
* Represents the site configuration of a wiki.
* Holds a list of sites (ie SiteList), stored in the database.
* @param string $languageCode
*/
public function setLanguageCode( $languageCode ) {
+ if ( !Language::isValidCode( $languageCode ) ) {
+ throw new InvalidArgumentException( "$languageCode is not a valid language code." );
+ }
$this->languageCode = $languageCode;
}
if ( $title->isSpecialPage() ) {
$type = 'ns-special';
- // bug 23315: provide a class based on the canonical special page name without subpages
+ // T25315: provide a class based on the canonical special page name without subpages
list( $canonicalName ) = SpecialPageFactory::resolveAlias( $title->getDBkey() );
if ( $canonicalName ) {
$type .= ' ' . Sanitizer::escapeClass( "mw-special-$canonicalName" );
$line = array_map( 'trim', explode( '|', $line, 2 ) );
if ( count( $line ) !== 2 ) {
// Second sanity check, could be hit by people doing
- // funky stuff with parserfuncs... (bug 33321)
+ // funky stuff with parserfuncs... (T35321)
continue;
}
$attribs = [];
if ( !is_null( $tooltip ) ) {
- # Bug 25462: undo double-escaping.
+ # T27462: undo double-escaping.
$tooltip = Sanitizer::decodeCharReferences( $tooltip );
$attribs['title'] = wfMessage( 'editsectionhint' )->rawParams( $tooltip )
->inLanguage( $lang )->text();
/* set up the default links for the personal toolbar */
$personal_urls = [];
- # Due to bug 32276, if a user does not have read permissions,
+ # Due to T34276, if a user does not have read permissions,
# $this->getTitle() will just give Special:Badtitle, which is
# not especially useful as a returnto parameter. Use the title
# from the request instead, if there was one.
'text' => $this->msg( 'pt-userlogout' )->text(),
'href' => self::makeSpecialUrl( 'Userlogout',
// userlogout link must always contain an & character, otherwise we might not be able
- // to detect a buggy precaching proxy (bug 17790)
+ // to detect a buggy precaching proxy (T19790)
$title->isSpecial( 'Preferences' ) ? 'noreturnto' : $returnto ),
'active' => false
];
$content_navigation['namespaces']['special'] = [
'class' => 'selected',
'text' => $this->msg( 'nstab-special' )->text(),
- 'href' => $request->getRequestURL(), // @see: bug 2457, bug 2510
+ 'href' => $request->getRequestURL(), // @see: T4457, T4510
'context' => 'subject'
];
$operator = $opts['invert'] ? '!=' : '=';
$boolean = $opts['invert'] ? 'AND' : 'OR';
- // Namespace association (bug 2429)
+ // Namespace association (T4429)
if ( !$opts['associated'] ) {
$condition = "rc_namespace $operator $selectedNS";
} else {
# 1. When switching accounts, it sucks to get automatically logged out
# 2. Do not return to PasswordReset after a successful password change
- # but goto Wiki start page (Main_Page) instead ( bug 33997 )
+ # but goto Wiki start page (Main_Page) instead ( T35997 )
$returnToTitle = Title::newFromText( $this->mReturnTo );
if ( is_object( $returnToTitle )
&& ( $returnToTitle->isSpecial( 'Userlogout' )
$user = $this->getUser();
$template = new FakeAuthTemplate();
- // Pre-fill username (if not creating an account, bug 44775).
+ // Pre-fill username (if not creating an account, T46775).
if ( $data->mUsername == '' && $this->isSignup() ) {
if ( $user->isLoggedIn() ) {
$data->mUsername = $user->getName();
$value = wfTimestamp( TS_UNIX,
$row->value );
} else {
- $value = intval( $row->value ); // @bug 14414
+ $value = intval( $row->value ); // T16414
}
} else {
$value = 0;
return [ null, null ];
}
- if ( !isset( $bits[1] ) ) { // bug 2087
+ if ( !isset( $bits[1] ) ) { // T4087
$par = null;
} else {
$par = $bits[1];
// @todo FIXME: Redirects broken due to this call
$bits = explode( '/', $title->getDBkey(), 2 );
$name = $bits[0];
- if ( !isset( $bits[1] ) ) { // bug 2087
+ if ( !isset( $bits[1] ) ) { // T4087
$par = null;
} else {
$par = $bits[1];
protected function checkExecutePermissions( User $user ) {
parent::checkExecutePermissions( $user );
- # bug 15810: blocked admins should have limited access here
+ # T17810: blocked admins should have limited access here
$status = self::checkUnblockSelf( $this->target, $user );
if ( $status !== true ) {
throw new ErrorPageError( 'badaccess', $status );
}
// If the username was hidden (ipb_deleted == 1), don't show the reason
- // unless this user also has rights to hideuser: Bug 35839
+ // unless this user also has rights to hideuser: T37839
if ( !$block->mHideName || $this->getUser()->isAllowed( 'hideuser' ) ) {
$fields['Reason']['default'] = $block->mReason;
} else {
$blockNotConfirmed = !$data['Confirm'] || ( array_key_exists( 'PreviousTarget', $data )
&& $data['PreviousTarget'] !== $target );
- # Special case for API - bug 32434
+ # Special case for API - T34434
$reblockNotAllowed = ( array_key_exists( 'Reblock', $data ) && !$data['Reblock'] );
# Show form unless the user is already aware of this...
$logEntry->setComment( $data['Reason'][0] );
$logEntry->setPerformer( $performer );
$logEntry->setParameters( $logParams );
- # Relate log ID to block IDs (bug 25763)
+ # Relate log ID to block IDs (T27763)
$blockIds = array_merge( [ $status['id'] ], $status['autoIds'] );
$logEntry->setRelations( [ 'ipb_id' => $blockIds ] );
$logId = $logEntry->insert();
}
/**
- * bug 15810: blocked admins should not be able to block/unblock
+ * T17810: blocked admins should not be able to block/unblock
* others, and probably shouldn't be able to unblock themselves
* either.
* @param User|int|string $user
[ 'page' => $userpage->getPrefixedText() ]
);
- # Suppression log link (bug 59120)
+ # Suppression log link (T61120)
if ( $sp->getUser()->isAllowed( 'suppressionlog' ) ) {
$tools['log-suppression'] = $linkRenderer->makeKnownLink(
SpecialPage::getTitleFor( 'Log', 'suppress' ),
'conds' => [
'ra.rd_from = pa.page_id',
- // Filter out redirects where the target goes interwiki (bug 40353).
+ // Filter out redirects where the target goes interwiki (T42353).
// This isn't an optimization, it is required for correct results,
// otherwise a non-double redirect like Bar -> w:Foo will show up
// like "Bar -> Foo -> w:Foo".
* HTMLMultiSelectField throws validation errors if we get input data
* that doesn't match the data set in the form setup. This causes
* problems if something gets removed from the watchlist while the
- * form is open (bug 32126), but we know that invalid items will
+ * form is open (T34126), but we know that invalid items will
* be harmless so we can override it here.
*
* @param string $value The value the field was submitted with
$user = $this->getUser();
// To prevent cross-site scripting attacks, don't show the preview if raw HTML is
- // allowed and a valid edit token is not provided (bug 71111). However, MediaWiki
+ // allowed and a valid edit token is not provided (T73111). However, MediaWiki
// does not currently provide logged-out users with CSRF protection; in that case,
// do not show the preview unless anonymous editing is allowed.
if ( $user->isAnon() && !$user->isAllowed( 'edit' ) ) {
$pages = array_keys( $pageSet );
- // Normalize titles to the same format and remove dupes, see bug 17374
+ // Normalize titles to the same format and remove dupes, see T19374
foreach ( $pages as $k => $v ) {
$pages[$k] = str_replace( " ", "_", $v );
}
$exporter->allPages();
} else {
foreach ( $pages as $page ) {
- # Bug 8824: Only export pages the user can read
+ # T10824: Only export pages the user can read
$title = Title::newFromText( $page );
if ( is_null( $title ) ) {
// @todo Perhaps output an <error> tag or something.
# Some log types are only for a 'User:' title but we might have been given
# only the username instead of the full title 'User:username'. This part try
- # to lookup for a user by that name and eventually fix user input. See bug 1697.
+ # to lookup for a user by that name and eventually fix user input. See T3697.
if ( in_array( $opts->getValue( 'type' ), self::getLogTypesOnUser() ) ) {
# ok we have a type of log which expect a user title.
$target = Title::newFromText( $opts->getValue( 'page' ) );
$request = $this->getRequest();
$target = !is_null( $par ) ? $par : $request->getVal( 'target' );
- // Yes, the use of getVal() and getText() is wanted, see bug 20365
+ // Yes, the use of getVal() and getText() is wanted, see T22365
$oldTitleText = $request->getVal( 'wpOldTitle', $target );
$this->oldTitle = Title::newFromText( $oldTitleText );
// a redirect to the new title. This is not safe, but what we did before was
// even worse: we just determined whether a redirect should have been created,
// and reported that it was created if it should have, without any checks.
- // Also note that isRedirect() is unreliable because of bug 37209.
+ // Also note that isRedirect() is unreliable because of T39209.
$msgName = 'movepage-moved-redirect';
} else {
$msgName = 'movepage-moved-noredirect';
$newPageName = preg_replace(
'#^' . preg_quote( $ot->getDBkey(), '#' ) . '#',
- StringUtils::escapeRegexReplacement( $nt->getDBkey() ), # bug 21234
+ StringUtils::escapeRegexReplacement( $nt->getDBkey() ), # T23234
$oldSubpage->getDBkey()
);
$newNs = $nt->getSubjectPage()->getNamespace();
}
- # Bug 14385: we need makeTitleSafe because the new page names may
+ # T16385: we need makeTitleSafe because the new page names may
# be longer than 255 characters.
$newSubpage = Title::makeTitleSafe( $newNs, $newPageName );
if ( !$newSubpage ) {
$showme = $from;
}
- // Bug 27864: if transcluded, show all pages instead of the form.
+ // T29864: if transcluded, show all pages instead of the form.
if ( $this->including() || $showme != '' || $ns !== null ) {
$this->showPrefixChunk( $namespace, $showme, $from );
} else {
/*ignoreHidden=*/ true
)
) {
- $out->addModules( 'mediawiki.rcfilters.filters' );
+ $out->addModules( 'mediawiki.rcfilters.filters.ui' );
}
}
function makeOptionsLink( $title, $override, $options, $active = false ) {
$params = $override + $options;
- // Bug 36524: false values have be converted to "0" otherwise
+ // T38524: false values have be converted to "0" otherwise
// wfArrayToCgi() will omit it them.
foreach ( $params as &$value ) {
if ( $value === false ) {
return [ [ 'ipb_cant_unblock', $target ] ];
}
- # bug 15810: blocked admins should have limited access here. This
+ # T17810: blocked admins should have limited access here. This
# won't allow sysops to remove autoblocks on themselves, but they
# should have ipblock-exempt anyway
$status = SpecialBlock::checkUnblockSelf( $target, $performer );
# Does this page already exist? We'll have to update it...
$article = WikiPage::factory( $this->title );
- # Load latest data for the current page (bug 31179)
+ # Load latest data for the current page (T33179)
$article->loadPageData( 'fromdbmaster' );
$oldcountable = $article->isCountable();
}
/**
- * A should come before Z (bug 30907)
+ * A should come before Z (T32907)
* @return bool
*/
function sortDescending() {
$desiredTitleObj = Title::makeTitleSafe( NS_FILE, $this->mDesiredDestName );
$delNotice = ''; // empty by default
if ( $desiredTitleObj instanceof Title && !$desiredTitleObj->exists() ) {
+ $dbr = wfGetDB( DB_REPLICA );
+
LogEventsList::showLogExtract( $delNotice, [ 'delete', 'move' ],
$desiredTitleObj,
'', [ 'lim' => 10,
- 'conds' => [ "log_action != 'revision'" ],
+ 'conds' => [ 'log_action != ' . $dbr->addQuotes( 'revision' ) ],
'showIfEmpty' => false,
'msgKey' => [ 'upload-recreate-warning' ] ]
);
header( "Content-Type: $contentType", true );
header( 'Content-Transfer-Encoding: binary', true );
header( 'Expires: Sun, 17-Jan-2038 19:14:07 GMT', true );
- // Bug 53032 - It shouldn't be a problem here, but let's be safe and not cache
+ // T55032 - It shouldn't be a problem here, but let's be safe and not cache
header( 'Cache-Control: private' );
header( "Content-Length: $size", true );
}
function execute( $par ) {
/**
* Some satellite ISPs use broken precaching schemes that log people out straight after
- * they're logged in (bug 17790). Luckily, there's a way to detect such requests.
+ * they're logged in (T19790). Luckily, there's a way to detect such requests.
*/
if ( isset( $_SERVER['REQUEST_URI'] ) && strpos( $_SERVER['REQUEST_URI'], '&' ) !== false ) {
wfDebug( "Special:UserLogout request {$_SERVER['REQUEST_URI']} looks suspicious, denying.\n" );
}
$targetUser = $this->mFetchedUser;
- if ( $targetUser instanceof User ) { // UserRightsProxy doesn't have this method (bug 61252)
- $targetUser->clearInstanceCache(); // bug 38989
+ if ( $targetUser instanceof User ) { // UserRightsProxy doesn't have this method (T63252)
+ $targetUser->clearInstanceCache(); // T40989
}
if ( $request->getVal( 'conflictcheck-originalgroups' )
* KLUGE: The results may contain false positives for files
* that exist e.g. in a shared repo. Setting this at least
* keeps them from showing up as redlinks in the output, even
- * if it doesn't fix the real problem (bug 6220).
+ * if it doesn't fix the real problem (T8220).
*
* @note could also have existing links here from broken file
* redirects.
$user = $this->getUser();
$conds = array_merge( $userCond, $this->getNamespaceCond() );
- // Paranoia: avoid brute force searches (bug 17342)
+ // Paranoia: avoid brute force searches (T19342)
if ( !$user->isAllowed( 'deletedhistory' ) ) {
$conds[] = $this->mDb->bitAnd( 'rev_deleted', Revision::DELETED_USER ) . ' = 0';
} elseif ( !$user->isAllowedAny( 'suppressrevision', 'viewsuppressed' ) ) {
if ( $row->rev_parent_id === null ) {
// For some reason rev_parent_id isn't populated for this row.
- // Its rumoured this is true on wikipedia for some revisions (bug 34922).
+ // Its rumoured this is true on wikipedia for some revisions (T36922).
// Next best thing is to have the total number of bytes.
$chardiff = ' <span class="mw-changeslist-separator">. .</span> ';
$chardiff .= Linker::formatRevisionSize( $row->rev_len );
list( $index, $userCond ) = $this->getUserCond();
$conds = array_merge( $userCond, $this->getNamespaceCond() );
$user = $this->getUser();
- // Paranoia: avoid brute force searches (bug 17792)
+ // Paranoia: avoid brute force searches (T19792)
if ( !$user->isAllowed( 'deletedhistory' ) ) {
$conds[] = $this->mDb->bitAnd( 'ar_deleted', Revision::DELETED_USER ) . ' = 0';
} elseif ( !$user->isAllowedAny( 'suppressrevision', 'viewsuppressed' ) ) {
$imgfile = $this->msg( 'imgfile' )->text();
}
- // Weird files can maybe exist? Bug 22227
+ // Weird files can maybe exist? T24227
$filePage = Title::makeTitleSafe( NS_FILE, $value );
if ( $filePage ) {
$link = $linkRenderer->makeKnownLink(
* @return string
*/
function formatRow( $row ) {
- if ( $row->user_id == 0 ) { # Bug 16487
+ if ( $row->user_id == 0 ) { # T18487
return '';
}
return $this->mTitle;
}
- // Windows may be broken with special characters, see bug 1780
+ // Windows may be broken with special characters, see T3780
if ( !preg_match( '/^[\x0-\x7f]*$/', $nt->getText() )
&& !RepoGroup::singleton()->getLocalRepo()->backendSupportsUnicodePaths()
) {
}
// Some browsers will interpret obscure xml encodings as UTF-8, while
- // PHP/expat will interpret the given encoding in the xml declaration (bug 47304)
+ // PHP/expat will interpret the given encoding in the xml declaration (T49304)
if ( $extension == 'svg' || strpos( $mime, 'image/svg' ) === 0 ) {
if ( self::checkXMLEncodingMissmatch( $file ) ) {
return true;
[ 'processing_instruction_handler' => 'UploadBase::checkSvgPICallback' ]
);
if ( $check->wellFormed !== true ) {
- // Invalid xml (bug 58553)
- // But only when non-partial (bug 65724)
+ // Invalid xml (T60553)
+ // But only when non-partial (T67724)
return $partial ? false : [ 'uploadinvalidxml' ];
} elseif ( $check->filterMatch ) {
if ( $this->mSVGNSError ) {
* @return bool (true if the filter identified something bad)
*/
public static function checkSvgPICallback( $target, $data ) {
- // Don't allow external stylesheets (bug 57550)
+ // Don't allow external stylesheets (T59550)
if ( preg_match( '/xml-stylesheet/i', $target ) ) {
return [ 'upload-scripted-pi-callback' ];
}
list( $namespace, $strippedElement ) = $this->splitXmlNamespace( $element );
// We specifically don't include:
- // http://www.w3.org/1999/xhtml (bug 60771)
+ // http://www.w3.org/1999/xhtml (T62771)
static $validNamespaces = [
'',
'adobe:ns:meta/',
$firstUser = $users[0];
if ( !$firstUser instanceof User || !$firstUser->getId() ) {
- // Don't parse username as wikitext (bug 65501)
+ // Don't parse username as wikitext (T67501)
return StatusValue::newFatal( wfMessage( 'nosuchuser', wfEscapeWikiText( $username ) ) );
}
wfEscapeWikiText( $firstUser->getName() ) ) );
}
- // We need to have a valid IP address for the hook, but per bug 18347, we should
+ // We need to have a valid IP address for the hook, but per T20347, we should
// send the user's name if they're logged in.
$ip = $performingUser->getRequest()->getIP();
if ( !$ip ) {
// Ensure that the username isn't longer than 235 bytes, so that
// (at least for the builtin skins) user javascript and css files
- // will work. (bug 23080)
+ // will work. (T25080)
if ( strlen( $name ) > 235 ) {
wfDebugLog( 'username', __METHOD__ .
": '$name' invalid due to length" );
}
// Clean up name according to title rules,
- // but only when validation is requested (bug 12654)
+ // but only when validation is requested (T14654)
$t = ( $validate !== false ) ?
Title::newFromText( $name, NS_USER ) : Title::makeTitle( NS_USER, $name );
// Check for invalid titles
}
}
- // (bug 23343) Apply IP blocks to the contents of XFF headers, if enabled
+ // (T25343) Apply IP blocks to the contents of XFF headers, if enabled
if ( !$block instanceof Block
&& $wgApplyIpBlocksToXff
&& $ip !== null
$found = false;
// @todo FIXME: IPv6 ??? (https://bugs.php.net/bug.php?id=33170)
if ( IP::isIPv4( $ip ) ) {
- // Reverse IP, bug 21255
+ // Reverse IP, T23255
$ipReversed = implode( '.', array_reverse( explode( '.', $ip ) ) );
foreach ( (array)$bases as $base ) {
*/
public function isPingLimitable() {
global $wgRateLimitsExcludedIPs;
- if ( in_array( $this->getRequest()->getIP(), $wgRateLimitsExcludedIPs ) ) {
+ if ( IP::isInRanges( $this->getRequest()->getIP(), $wgRateLimitsExcludedIPs ) ) {
// No other good way currently to disable rate limits
// for specific IPs. :P
// But this is a crappy hack and should die.
// user_talk page; it's cleared one page view later in WikiPage::doViewUpdates().
}
+ /**
+ * Compute experienced level based on edit count and registration date.
+ *
+ * @return string 'newcomer', 'learner', or 'experienced'
+ */
+ public function getExperienceLevel() {
+ global $wgLearnerEdits,
+ $wgExperiencedUserEdits,
+ $wgLearnerMemberSince,
+ $wgExperiencedUserMemberSince;
+
+ if ( $this->isAnon() ) {
+ return false;
+ }
+
+ $editCount = $this->getEditCount();
+ $registration = $this->getRegistration();
+ $now = time();
+ $learnerRegistration = wfTimestamp( TS_MW, $now - $wgLearnerMemberSince * 86400 );
+ $experiencedRegistration = wfTimestamp( TS_MW, $now - $wgExperiencedUserMemberSince * 86400 );
+
+ if (
+ $editCount < $wgLearnerEdits ||
+ $registration > $learnerRegistration
+ ) {
+ return 'newcomer';
+ } elseif (
+ $editCount > $wgExperiencedUserEdits &&
+ $registration <= $experiencedRegistration
+ ) {
+ return 'experienced';
+ } else {
+ return 'learner';
+ }
+ }
+
/**
* Set a cookie on the user's client. Wrapper for
* WebResponse::setCookie
* }
* // do something with $user...
*
- * However, this was vulnerable to a race condition (bug 16020). By
+ * However, this was vulnerable to a race condition (T18020). By
* initialising the user object if the user exists, we aim to support this
* calling sequence as far as possible.
*
return $this->mBlock;
}
- # bug 13611: if the IP address the user is trying to create an account from is
+ # T15611: if the IP address the user is trying to create an account from is
# blocked with createaccount disabled, prevent new account creation there even
# when the user is logged in
if ( $this->mBlockedFromCreateAccount === false && !$this->isAllowed( 'ipblock-exempt' ) ) {
* @note Since these URLs get dropped directly into emails, using the
* short English names avoids insanely long URL-encoded links, which
* also sometimes can get corrupted in some browsers/mailers
- * (bug 6957 with Gmail and Internet Explorer).
+ * (T8957 with Gmail and Internet Explorer).
*
* @param string $page Special page
* @param string $token Token
# Note that the pattern requirement will always be satisfied if the
# input is empty, so we need required in all cases.
- # @todo FIXME: Bug 23769: This needs to not claim the password is required
+ # @todo FIXME: T25769: This needs to not claim the password is required
# if e-mail confirmation is being used. Since HTML5 input validation
# is b0rked anyway in some browsers, just return nothing. When it's
# re-enabled, fix this code to not output required for e-mail
foreach ( glob( $this->basepath . '/*.php' ) as $file ) {
$this->readFile( $file );
}
-
- // Legacy aliases (1.28)
- $this->forceClassPath( 'DatabaseBase',
- $this->basepath . '/includes/libs/rdbms/database/Database.php' );
- // Legacy aliases (1.29)
- $this->forceClassPath( 'Blob',
- $this->basepath . '/includes/libs/rdbms/encasing/Blob.php' );
}
}
*/
protected $tokens;
+ /**
+ * @var array Class alias with target/name fields
+ */
+ protected $alias;
+
/**
* @var string $code PHP code (including <?php) to detect class names from
* @return array List of FQCN detected within the tokens
$this->namespace = '';
$this->classes = [];
$this->startToken = null;
+ $this->alias = null;
$this->tokens = [];
foreach ( token_get_all( $code ) as $token ) {
if ( is_string( $token ) ) {
return;
}
+ // Note: When changing class name discovery logic,
+ // AutoLoaderTest.php may also need to be updated.
switch ( $token[0] ) {
case T_NAMESPACE:
case T_CLASS:
case T_TRAIT:
case T_DOUBLE_COLON:
$this->startToken = $token;
+ break;
+ case T_STRING:
+ if ( $token[1] === 'class_alias' ) {
+ $this->startToken = $token;
+ $this->alias = [];
+ }
}
}
}
break;
+ case T_STRING:
+ if ( $this->alias !== null ) {
+ // Flow 1 - Two string literals:
+ // - T_STRING class_alias
+ // - '('
+ // - T_CONSTANT_ENCAPSED_STRING 'TargetClass'
+ // - ','
+ // - T_WHITESPACE
+ // - T_CONSTANT_ENCAPSED_STRING 'AliasName'
+ // - ')'
+ // Flow 2 - Use of ::class syntax for first parameter
+ // - T_STRING class_alias
+ // - '('
+ // - T_STRING TargetClass
+ // - T_DOUBLE_COLON ::
+ // - T_CLASS class
+ // - ','
+ // - T_WHITESPACE
+ // - T_CONSTANT_ENCAPSED_STRING 'AliasName'
+ // - ')'
+ if ( $token === '(' ) {
+ // Start of a function call to class_alias()
+ $this->alias = [ 'target' => false, 'name' => false ];
+ } elseif ( $token === ',' ) {
+ // Record that we're past the first parameter
+ if ( $this->alias['target'] === false ) {
+ $this->alias['target'] = true;
+ }
+ } elseif ( is_array( $token ) && $token[0] === T_CONSTANT_ENCAPSED_STRING ) {
+ if ( $this->alias['target'] === true ) {
+ // We already saw a first argument, this must be the second.
+ // Strip quotes from the string literal.
+ $this->alias['name'] = substr( $token[1], 1, -1 );
+ }
+ } elseif ( $token === ')' ) {
+ // End of function call
+ $this->classes[] = $this->alias['name'];
+ $this->alias = null;
+ $this->startToken = null;
+ }
+ }
+ break;
+
case T_CLASS:
case T_INTERFACE:
case T_TRAIT:
* @return string HTML
*/
protected function shortDialogHtml( $profile, $term, $numResults, $totalResults, $offset ) {
+ $html = '';
+
$searchWidget = new SearchInputWidget( [
'id' => 'searchText',
'name' => 'search',
'align' => 'top',
] );
- $html =
- Html::hidden( 'title', $this->specialSearch->getPageTitle()->getPrefixedText() ) .
- Html::hidden( 'profile', $profile ) .
- Html::hidden( 'fulltext', '1' ) .
- $layout;
+ $html .= $layout;
if ( $totalResults > 0 && $offset < $totalResults ) {
$html .= Xml::tags(
);
}
+ $html .=
+ Html::hidden( 'title', $this->specialSearch->getPageTitle()->getPrefixedText() ) .
+ Html::hidden( 'profile', $profile ) .
+ Html::hidden( 'fulltext', '1' );
+
return $html;
}
public function parseFormattedNumber( $number ) {
$s = $this->digitTransformTable();
if ( $s ) {
- // eliminate empty array values such as ''. (bug 64347)
+ // eliminate empty array values such as ''. (T66347)
$s = array_filter( $s );
$number = strtr( $number, array_flip( $s ) );
}
$s = $this->separatorTransformTable();
if ( $s ) {
- // eliminate empty array values such as ''. (bug 64347)
+ // eliminate empty array values such as ''. (T66347)
$s = array_filter( $s );
$number = strtr( $number, array_flip( $s ) );
}
$string = $ellipsis . $string;
}
}
- # Do not truncate if the ellipsis makes the string longer/equal (bug 22181).
+ # Do not truncate if the ellipsis makes the string longer/equal (T24181).
# This check is *not* redundant if $adjustLength, due to the single case where
# LEN($ellipsis) > ABS($limit arg); $stringOriginal could be shorter than $string.
if ( strlen( $string ) < strlen( $stringOriginal ) ) {
protected function applyManualConv( $convRule ) {
// Use syntax -{T|zh-cn:TitleCN; zh-tw:TitleTw}- to custom
// title conversion.
- // Bug 24072: $mConvRuleTitle was overwritten by other manual
+ // T26072: $mConvRuleTitle was overwritten by other manual
// rule(s) not for title, this breaks the title conversion.
$newConvRuleTitle = $convRule->getTitle();
if ( $newConvRuleTitle ) {
class LanguageAr extends Language {
/**
- * Temporary hack for bug 9413: replace Arabic presentation forms with their
+ * Temporary hack for T11413: replace Arabic presentation forms with their
* standard equivalents.
*
* @todo FIXME: This is language-specific for now only to avoid the negative
* Temporary hack for the issue described at
* http://permalink.gmane.org/gmane.science.linguistics.wikipedia.technical/46396
* Convert Unicode 5.0 style Malayalam input to Unicode 5.1. Similar to
- * bug 9413. Also fixes miscellaneous problems due to mishandling of ZWJ,
- * e.g. bug 11162.
+ * T11413. Also fixes miscellaneous problems due to mishandling of ZWJ,
+ * e.g. T13162.
*
* @todo FIXME: This is language-specific for now only to avoid the negative
* performance impact of enabling it for all languages.
* Turkish has two different i, one with a dot and another without a dot. They
* are totally different letters in this language, so we have to override the
* ucfirst and lcfirst methods.
- * See https://en.wikipedia.org/wiki/Dotted_and_dotless_I
- * and @bug 28040
+ * See https://en.wikipedia.org/wiki/Dotted_and_dotless_I and T30040
* @ingroup Language
*/
class LanguageTr extends Language {
'als' => 'Alemannisch', # Alemannic -- not a valid code, for compatibility. See gsw.
'am' => 'አማርኛ', # Amharic
'an' => 'aragonés', # Aragonese
- 'ang' => 'Ænglisc', # Old English, bug 23283
+ 'ang' => 'Ænglisc', # Old English, T25283
'anp' => 'अङ्गिका', # Angika
'ar' => 'العربية', # Arabic
'arc' => 'ܐܪܡܝܐ', # Aramaic
'lus' => 'Mizo ţawng', # Mizo/Lushai
'luz' => 'لئری دوٙمینی', # Southern Luri
'lv' => 'latviešu', # Latvian
- 'lzh' => '文言', # Literary Chinese, bug 8217
+ 'lzh' => '文言', # Literary Chinese, T10217
'lzz' => 'Lazuri', # Laz
'mai' => 'मैथिली', # Maithili
'map-bms' => 'Basa Banyumasan', # Banyumasan
'mzn' => 'مازِرونی', # Mazanderani
'na' => 'Dorerin Naoero', # Nauruan
'nah' => 'Nāhuatl', # Nahuatl (not in ISO 639-3)
- 'nan' => 'Bân-lâm-gú', # Min-nan, bug 8217
- 'nap' => 'Napulitano', # Neapolitan, bug 43793
+ 'nan' => 'Bân-lâm-gú', # Min-nan, T10217
+ 'nap' => 'Napulitano', # Neapolitan, T45793
'nb' => 'norsk bokmål', # Norwegian (Bokmal)
'nds' => 'Plattdüütsch', # Low German ''or'' Low Saxon
'nds-nl' => 'Nedersaksies', # aka Nedersaksisch: Dutch Low Saxon
'olo' => 'Livvinkarjala', # Livvi-Karelian
'om' => 'Oromoo', # Oromo
'or' => 'ଓଡ଼ିଆ', # Oriya
- 'os' => 'Ирон', # Ossetic, bug 29091
+ 'os' => 'Ирон', # Ossetic, T31091
'pa' => 'ਪੰਜਾਬੀ', # Eastern Punjabi (Gurmukhi script) (pan)
'pag' => 'Pangasinan', # Pangasinan
'pam' => 'Kapampangan', # Pampanga
'za' => 'Vahcuengh', # Zhuang
'zea' => 'Zeêuws', # Zeeuws/Zeaws
'zh' => '中文', # (Zhōng Wén) - Chinese
- 'zh-classical' => '文言', # Classical Chinese/Literary Chinese -- (see bug 8217)
+ 'zh-classical' => '文言', # Classical Chinese/Literary Chinese -- (see T10217)
'zh-cn' => "中文(中国大陆)\xE2\x80\x8E", # Chinese (PRC)
'zh-hans' => "中文(简体)\xE2\x80\x8E", # Mandarin Chinese (Simplified Chinese script) (cmn-hans)
'zh-hant' => "中文(繁體)\xE2\x80\x8E", # Mandarin Chinese (Traditional Chinese script) (cmn-hant)
'zh-hk' => "中文(香港)\xE2\x80\x8E", # Chinese (Hong Kong)
- 'zh-min-nan' => 'Bân-lâm-gú', # Min-nan -- (see bug 8217)
+ 'zh-min-nan' => 'Bân-lâm-gú', # Min-nan -- (see T10217)
'zh-mo' => "中文(澳門)\xE2\x80\x8E", # Chinese (Macau)
'zh-my' => "中文(马来西亚)\xE2\x80\x8E", # Chinese (Malaysia)
'zh-sg' => "中文(新加坡)\xE2\x80\x8E", # Chinese (Singapore)
'zh-tw' => "中文(台灣)\xE2\x80\x8E", # Chinese (Taiwan)
- 'zh-yue' => '粵語', # Cantonese -- (see bug 8217)
+ 'zh-yue' => '粵語', # Cantonese -- (see T10217)
'zu' => 'isiZulu' # Zulu
];
}
"Macofe",
"WhatamIdoing",
"Hogweard",
- "Amire80"
+ "Amire80",
+ "Pyscowicz"
]
},
"tog-underline": "Mearc under hlencan:",
"morenotlisted": "Þis getæl meaht bēon unfulfyled.",
"mypage": "Mīn tramet",
"mytalk": "Mīn mōtung",
- "anontalk": "Þisses IP naman mōtung",
+ "anontalk": "Mōtung",
"navigation": "Þurhfōr",
"and": " and",
"qbfind": "Findan",
"searcharticle": "Gān",
"history": "Trametes stǣr",
"history_short": "Stǣr",
+ "history_small": "stǣr",
"updatedmarker": "nīwod æfter mīnre lætestan sōcne",
"printableversion": "Ūtmǣlendlicu fadung",
"permalink": "Fæst hlenca",
"nstab-template": "Bysen",
"nstab-help": "Helpes tramet",
"nstab-category": "Flocc",
+ "mainpage-nstab": "Hēafodtramet",
"nosuchaction": "Swilc dǣd ne biþ nā",
"nosuchactiontext": "Sēo þe se nettfrumfinded wile dōn nis genge.\nÞū wēninga miswrite þone nettfrumfindend, oþþe folgode unrihtne hlencan.\nÞis mæg ēac tācnian wōh on þǣre weorcwrithyrste þe is gebrocen fram {{SITENAME}}.",
"nosuchspecialpage": "Swilc syndrig tramet ne biþ nā",
"oldpassword": "Eald þafungword:",
"newpassword": "Nīwe þafungword:",
"retypenew": "Wrīt nīwe þafungword eft:",
+ "botpasswords-label-create": "Scieppan",
+ "botpasswords-label-update": "Nīƿa",
"resetpass-submit-loggedin": "Andwendan þafungword",
"resetpass-submit-cancel": "Undōn",
"passwordreset": "Settan þafungword eft",
"searchprofile-everything-tooltip": "Sēcan geond ealla innunga (ēac mōtungum)",
"searchprofile-advanced-tooltip": "Sēcan on mā namsteda",
"search-result-size": "$1 ({{PLURAL:$2|1 word|$2 worda}})",
- "search-redirect": "(edlǣded fram \"$1\")",
+ "search-redirect": "(edlǣded fram $1)",
"search-section": "(dǣl $1)",
"search-suggest": "Mǣnst þū: $1",
"search-interwiki-caption": "Sweostorweorc",
"contributions": "{{GENDER:$1|Brūcendes}} forðunga",
"contributions-title": "Brūcendes forðunga for $1",
"mycontris": "Mīna forðunga",
+ "anoncontribs": "forðunga",
"contribsub2": "For {{GENDER:$3|$1}} ($2)",
"uctop": "(genge)",
"month": "Fram mōnþe (and ǣr)",
"logentry-move-move": "$1 {{GENDER:$2|wæg}} þone tramet $3 tō $4",
"logentry-newusers-create": "Brūcendes grīma $1 wæs {{GENDER:$2|geworht}}",
"revdelete-summary": "ādihtscortnes",
- "searchsuggest-search": "Sēcan",
+ "searchsuggest-search": "Sēcan {{SITENAME}}",
"special-characters-group-latin": "Lǣden",
"special-characters-group-latinextended": "Ēacnod Lǣden",
"special-characters-group-symbols": "Tācnu",
"tog-diffonly": "لا تعرض محتوى الصفحة أسفل الفرق",
"tog-showhiddencats": "أظهر التصنيفات المخفية",
"tog-norollbackdiff": "لا تظهر الفروق بعد إجراء التراجع",
- "tog-useeditwarning": "حذّرني عندما أغادر تحرير صفحة فيها تغييرات لم أحفظها\n\nنبهني عند مغادرة صفحة تحرير بها تعديلات لم أحفظها",
+ "tog-useeditwarning": "حذّرني عندما أغادر تحرير صفحة فيها تغييرات لم أحفظها",
"tog-prefershttps": "دائما استخدم اتصالا آمنا عند تسجيل الدخول",
"underline-always": "دائما",
"underline-never": "أبدا",
"anontalk": "نقاش",
"navigation": "تصفح",
"and": " و",
- "qbfind": "وجد",
+ "qbfind": "جد",
"qbbrowse": "تصفح",
"qbedit": "عدل",
"qbpageoptions": "هذه الصفحة",
"history": "تاريخ الصفحة",
"history_short": "التاريخ",
"history_small": "تاريخ",
- "updatedmarker": "عدلت منذ زيارتي الأخيرة\n\nتحديثها كان منذ زيارتي الأخيرة",
+ "updatedmarker": "عدلت منذ زيارتي الأخيرة",
"printableversion": "نسخة للطباعة",
"permalink": "رابط دائم",
"print": "اطبع",
"tool-link-userrights": "تغيير مجموعات {{GENDER:$1|المستخدم|المستخدمة}}",
"tool-link-userrights-readonly": "عرض مجموعات {{GENDER:$1|المستخدم|المستخدمة}}",
"tool-link-emailuser": "أرسل رسالة {{GENDER:$1|لهذا المستخدم|لهذه المستخدمة}}",
- "userpage": "طالع صفحة المستخدم\n\nعرض صفحة المستخدم",
- "projectpage": "طالع صفحة المشروع\n\nعرض صفحة المشروع",
- "imagepage": "طالع صفحة الملف\n\nعرض صفحة المشروع",
- "mediawikipage": "طالع صفحة الرسالة\n\nعرض صفحة الرسالة",
+ "userpage": "طالع صفحة المستخدم",
+ "projectpage": "طالع صفحة المشروع",
+ "imagepage": "طالع صفحة الملف",
+ "mediawikipage": "طالع صفحة الرسالة",
"templatepage": "طالع صفحة القالب",
- "viewhelppage": "طالع صفحة المساعدة\n\nعرض صفحة المساعدة",
- "categorypage": "طالع صفحة التصنيف\n\nعرض صفحة التصنيف",
+ "viewhelppage": "طالع صفحة المساعدة",
+ "categorypage": "طالع صفحة التصنيف",
"viewtalkpage": "اعرض النقاش",
"otherlanguages": "بلغات أخرى",
"redirectedfrom": "(بالتحويل من $1)",
"restorelink": "{{PLURAL:$1|$1 تعديل محذوف|تعديلا واحدا محذوفا|تعديلين محذوفين|$1 تعديلات محذوفة|$1 تعديلا محذوفا|$1 تعديل محذوف}}",
"feedlinks": "التلقيمة:",
"feed-invalid": "نوع التلقيمة غير صحيح.",
- "feed-unavailable": "التلقيمات غير متوفرة\n\nخلاصات المشاركة غير متوفرة",
+ "feed-unavailable": "التلقيمات غير متوفرة",
"site-rss-feed": "تلقيمة آر إس إس $1",
"site-atom-feed": "تلقيمة أتوم $1",
"page-rss-feed": "تلقيمة آر إس إس \"$1\"",
"databaseerror-error": "خطأ: $1",
"transaction-duration-limit-exceeded": "لتفادي إنشاء تأخير نسخ عالي، هذا الفعل تم إنهاؤه لأن فترة الكتابة ($1) تجاوزت حد $2 ثانية.\nلو أنك تغير عناصر عديدة في نفس الوقت، حاول تجربة عمليا عديدة أصغر بدلا من ذلك.",
"laggedslavemode": "'''تحذير:''' الصفحة قد لا تحتوي على أحدث التحديثات.",
- "readonly": "قاعدة البيانات مقفلة\n\nقاعدة البيانات مغلقة",
+ "readonly": "قاعدة البيانات مقفلة",
"enterlockreason": "أدخل سببا للقفل ذاكرا تقديرا لوقت إزالة الغلق",
"readonlytext": "قاعدة البيانات مقفلة حاليا أمام المدخلات الجديدة و التعديلات الأخرى. السبب غالبا ما يكون الصيانة، و ستعود قاعدة البيانات للعمل الطبيعي قريبا.\n\nإداري النظام الذي أغلق قاعدة البيانات أعطى التفسير التالي: $1",
"missing-article": "لم تجد قاعدة البيانات نصّ صفحة كان يجب أن يوجد، الصفحة هي \"$1\" $2.\n\nعادة ما يحدث هذا عند اتباع فرق قديم أو رابط تأريخ صفحة محذوفة.\n\nإذا لم تكن هذه هي الحال فمن المحتمل أنك قد وقعت على علّة في البرمجية.\nمن فضلك أبلغ أحد [[Special:ListUsers/sysop|الإداريين]]، و أعطه مسار هذه الصفحة.",
"nocookiesnew": "تم إنشاء حساب المستخدم، ولكنك لست مسجل الدخول بعد.\nيستخدم {{SITENAME}} كوكيز لتسجيل الدخول.\nلديك الكوكيز معطلة.\nمن فضلك فعلها، ثم سجل الدخول باسم المستخدم وكلمة السر الجديدين.",
"nocookieslogin": "يستخدم {{SITENAME}} الكوكيز لتسجيل الدخول.\nالكوكيز معطلة لديك.\nمن فضلك فعلها ثم حاول مرة أخرى.",
"nocookiesfornew": "لم يتم إنشاء حساب المستخدم، لأننا لم نستطع تأكيد مصدره. \nتأكد من أن ملفات تعريف الارتباط (الكوكيز) مفعلة عندك، ثم أعد تحميل الصفحة وحاول مرة أخرى.",
- "createacct-loginerror": "الحساب تم إنشاؤه تلقائيا لكن لم يمكن تسجيل دخولك تلقائيا. من فضلك اذهب إلى [[Special:UserLogin|تسجيل الدخول اليدوي]].\n\n\nتم إنشاء الحساب بنجاح ولكن لا يمكنك أن تقوم بتسجيل الدخول تلقائيا. فتوجه إلى [[Special:UserLogin|تسجيل الدخول اليدوي]].",
+ "createacct-loginerror": "الحساب تم إنشاؤه تلقائيا لكن لم يمكن تسجيل دخولك تلقائيا. من فضلك اذهب إلى [[Special:UserLogin|تسجيل الدخول اليدوي]].",
"noname": "لم تحدد اسم مستخدم صحيح.",
"loginsuccesstitle": "تم الدخول",
"loginsuccess": "'''لقد سجلت الدخول ل{{SITENAME}} باسم \"$1\".'''",
"wrongpasswordempty": "كلمة السر المدخلة كانت فارغة.\nمن فضلك حاول مرة أخرى.",
"passwordtooshort": "يجب أن تتكون كلمة السر على الأقل من {{PLURAL:$1|حرف واحد|حرفين|$1 حروف|$1 حرفا|$1 حرف}}.",
"passwordtoolong": "كلمات السر لا يجب أن تكون أطول من {{PLURAL:$1|1 حرف|$1 حروف}}.",
- "passwordtoopopular": "كلمات المرور الشائعة لا يمكن استخدامها. برجاء اختيار كلمة مرور أكثر فرادة.\n\nكلمات السر المعروفة لا يمكن استخدامها عادة. يرجى اختيار كلمة مرور فريدة من نوعها.",
+ "passwordtoopopular": "كلمات المرور الشائعة لا يمكن استخدامها. برجاء اختيار كلمة مرور أكثر فرادة.",
"password-name-match": "يجب أن تكون كلمة المرور مختلفة عن اسم المستخدم.",
"password-login-forbidden": "تم منع استخدام اسم المستخدم هذا وكلمة السر.",
"mailmypassword": "أعد تعيين كلمة السر",
"rcfilters-invalid-filter": "مرشح غير صحيح",
"rcfilters-empty-filter": "لا مرشحات فعالة. كل المساهمات معروضة.",
"rcfilters-filterlist-title": "مرشحات",
+ "rcfilters-highlightbutton-title": "التعليم على النتائج",
+ "rcfilters-highlightmenu-title": "اختر لونًا",
"rcfilters-filterlist-noresults": "لم يتم العثور على مرشحات",
"rcfilters-filtergroup-registration": "تسجيل المستخدم",
"rcfilters-filter-registered-label": "مسجل",
"editcomment": "ملخص التعديل كان:<em>$1</em>.",
"revertpage": "استرجع تعديلات [[Special:Contributions/$2|$2]] ([[User talk:$2|نقاش]]) حتى آخر مراجعة ل[[User:$1|$1]]",
"revertpage-nouser": "استرجع تعديلات مستخدم مخفي حتى آخر مراجعة ل{{GENDER:$1|[[User:$1|$1]]}}",
- "rollback-success": "استرجع تعديلات $1؛\nاسترجع حتى آخر نسخة بواسطة $2.",
+ "rollback-success": "استرجع تعديلات {{GENDER:$3|$1}}؛\nاسترجع حتى آخر نسخة بواسطة {{GENDER:$4|$2}}.",
"rollback-success-notify": "تم استرجاع التعديلات بواسطة $1;\nتم التغيير إلى آخر مراجعة بواسطة $2. [$3 عرض التغييرات]",
"sessionfailure-title": "فشل في الجلسة",
"sessionfailure": "يبدو أنه هناك مشكلة في جلسة الدخول الخاصة بك؛\nلذلك فقد ألغيت هذه العملية كإجراء احترازي ضد الاختراق.\nمن فضلك اضغط على مفتاح \"رجوع\" لتحميل الصفحة التي جئت منها، ثم حاول مرة أخرى.",
"Lin linao",
"Poquil",
"Remember the dot",
- "아라"
+ "아라",
+ "Angel sm"
]
},
"tog-underline": "Miñcewirilpe lasun",
"disclaimers": "Tukuldungun ñi pin ley",
"disclaimerpage": "Project:Katrütuwün ñi llowdüngun",
"edithelp": "Kellun kümeelkünuam",
- "mainpage": "Ñidol Wülngiñ",
+ "mainpage": "Ñizol Wvbgiñ",
"mainpage-description": "Ñidol Wülngiñ",
"portal": "Lofche ñi wülngiñ",
"portal-url": "Project:Lofche ñi wülngiñ",
"selfredirect": "<strong>Atención:</strong> Tas redirixendo esta páxina a ella mesma.\nSeique conseñaras un oxetivu enquivocáu pa la redireición, o que teas editando una páxina enquivocada. Si vuelves a facer clic en «{{int:savearticle}}», crearáse la redireición de toles maneres.",
"missingcommenttext": "Por favor, escribi un comentariu abaxo.",
"missingcommentheader": "<strong>Recordatoriu:</strong> Nun conseñasti un asuntu pa esti comentariu.\nSi calques nuevamente «{{int:savearticle}}», la to edición guardaráse ensin nengunu.",
- "summary-preview": "Vista previa del resume:",
+ "summary-preview": "Vista previa del resume d'edición:",
"subject-preview": "Vista previa del asuntu:",
"previewerrortext": "Hebo un error al intentar entever los cambios.",
"blockedtitle": "L'usuariu ta bloquiáu",
"rcfilters-invalid-filter": "Filtru inválidu",
"rcfilters-empty-filter": "Nun hai filtros activos. Amuésense toles contribuciones.",
"rcfilters-filterlist-title": "Filtros",
+ "rcfilters-highlightbutton-title": "Resaltar resultaos",
+ "rcfilters-highlightmenu-title": "Seleiciona un color",
"rcfilters-filterlist-noresults": "Nun s'alcontraron filtros",
"rcfilters-filtergroup-registration": "Rexistru del usuariu",
"rcfilters-filter-registered-label": "Rexistraos",
"editcomment": "El resume de la edición yera: <em>$1</em>.",
"revertpage": "Revertíes les ediciones de [[Special:Contributions/$2|$2]] ([[User talk:$2|alderique]]) hasta la cabera versión de [[User:$1|$1]]",
"revertpage-nouser": "Revertíes les ediciones de (usuariu desaniciáu) a la cabera revisión de {{GENDER:$1|[[User:$1|$1]]}}",
- "rollback-success": "Revertíes les ediciones de $1; camudáu a la última versión de $2.",
+ "rollback-success": "Revertíes les ediciones de {{GENDER:$3|$1}}; devueltu a la última revisión de {{GENDER:$4|$2}}.",
"rollback-success-notify": "Revertíes les ediciones de $1 a la última revisión de $2. [$3 Ver cambeos]",
"sessionfailure-title": "Fallu de sesión",
"sessionfailure": "Paez qu'hai un problema cola to sesión; por precaución\ncancelóse l'aición que pidisti. Da-y al botón \"Atrás\" del\nnavegador pa cargar otra vuelta la páxina y vuelve a intentalo.",
"protectedpages-reason": "نَدَنلیگی",
"protectedpages-unknown-timestamp": "بیلینمهین",
"protectedpages-unknown-performer": "بیلینمهین ایستیفادهچی",
- "protectedtitles": "Ù\85ØاÙ\81ظÙ\87â\80\8cÙ\84Û\8c باشâ\80\8cÙ\84Û\8cÙ\82â\80\8cلار",
+ "protectedtitles": "Ù\82Ù\88Ù\92رÙ\88Ù\86اÙ\86 باشÙ\84Û\8cÙ\82لار",
"protectedtitles-summary": "بۇ صحیفه، ایندیکی یارانماقدان قوْرونان باشلیقلاری لیست ائدیر. ایندیکی قوْرونان موْجود اوْلان صحیفهلرین لیستینی گؤرمک اۆچون، [[{{#special:ProtectedPages}}|{{int:protectedpages}}]]-ه باخین.",
"protectedtitlesempty": "حال-حاضردا، بو پارامئترلری قورونان هئچ بیر موضوع یوخدور.",
"listusers": "ایشلدن لیستی",
"rev-suppressed-text-permission": "Гэтая вэрсія старонкі была <strong>схаваная</strong>.\nПадрабязнасьці могуць быць знойдзеныя ў [{{fullurl:{{#Special:Log}}/suppress|page={{FULLPAGENAMEE}}}} журнале хаваньняў].",
"rev-deleted-text-unhide": "Гэтая вэрсія старонкі была <strong>выдаленая</strong>.\nПадрабязнасьці могуць быць знойдзеныя ў [{{fullurl:{{#Special:Log}}/delete|page={{FULLPAGENAMEE}}}} журнале выдаленьняў].\nВы можаце [$1 праглядзець гэтую вэрсію], калі жадаеце.",
"rev-suppressed-text-unhide": "Гэтая вэрсія старонкі была <strong>схаваная</strong>.\nПадрабязнасьці могуць быць знойдзеныя ў [{{fullurl:{{#Special:Log}}/suppress|page={{FULLPAGENAMEE}}}} журнале хаваньняў].\nВы можаце [$1 праглядзець гэтую вэрсію], калі жадаеце.",
- "rev-deleted-text-view": "Гэтая вэрсія старонкі была '''выдаленая'''.\nПадрабязнасьці могуць быць знойдзеныя ў [{{fullurl:{{#Special:Log}}/delete|page={{FULLPAGENAMEE}}}} журнале выдаленьняў].",
- "rev-suppressed-text-view": "Гэтая вэрсія старонкі была '''схаваная'''.\nВы можаце яе праглядзець; падрабязнасьці могуць быць знойдзеныя ў [{{fullurl:{{#Special:Log}}/suppress|page={{FULLPAGENAMEE}}}} журнале хаваньняў].",
- "rev-deleted-no-diff": "Вы ня можаце праглядаць гэтую розьніцу паміж вэрсіямі, таму што адна з вэрсіяў была '''выдаленая'''.\nМагчыма, падрабязнасьці могуць быць знойдзеныя ў [{{fullurl:{{#Special:Log}}/delete|page={{FULLPAGENAMEE}}}} журнале выдаленьняў].",
- "rev-suppressed-no-diff": "Вы ня можаце праглядзець гэтую розьніцу, таму што адна з вэрсіяў была '''выдаленая'''.",
- "rev-deleted-unhide-diff": "Адна з вэрсіяў гэтай старонкі была '''выдаленая'''.\nПадрабязнасьці могуць быць знойдзеныя ў [{{fullurl:{{#Special:Log}}/delete|page={{FULLPAGENAMEE}}}} журнале выдаленьняў].\nВы можаце праглядзець [$1 розьніцу паміж вэрсіямі], калі жадаеце.",
- "rev-suppressed-unhide-diff": "Адна з вэрсіяў гэтага параўнаньня была '''схаваная'''.\nПадрабязнасьці могуць быць знойдзеныя ў [{{fullurl:{{#Special:Log}}/suppress|page={{FULLPAGENAMEE}}}} журнале хаваньняў].\nВы можаце [$1 паглядзець гэту розьніцу], калі жадаеце.",
- "rev-deleted-diff-view": "Адна з вэрсіяў гэтага параўнаньня была '''выдаленая'''.\nВы можаце праглядзець гэтую розьніцу паміж вэрсіямі. Падрабязнасьці могуць быць знойдзеныя ў [{{fullurl:{{#Special:Log}}/delete|page={{FULLPAGENAMEE}}}} журнале выдаленьняў].",
+ "rev-deleted-text-view": "Гэтая вэрсія старонкі была <strong>выдаленая</strong>.\nВы можаце праглядзець яе; падрабязнасьці могуць быць знойдзеныя ў [{{fullurl:{{#Special:Log}}/delete|page={{FULLPAGENAMEE}}}} журнале выдаленьняў].",
+ "rev-suppressed-text-view": "Гэтая вэрсія старонкі была <strong>схаваная</strong>.\nВы можаце яе праглядзець; падрабязнасьці могуць быць знойдзеныя ў [{{fullurl:{{#Special:Log}}/suppress|page={{FULLPAGENAMEE}}}} журнале хаваньняў].",
+ "rev-deleted-no-diff": "Вы ня можаце праглядаць гэтую розьніцу паміж вэрсіямі, таму што адна з вэрсіяў была <strong>выдаленая</strong>.\nПадрабязнасьці могуць быць знойдзеныя ў [{{fullurl:{{#Special:Log}}/delete|page={{FULLPAGENAMEE}}}} журнале выдаленьняў].",
+ "rev-suppressed-no-diff": "Вы ня можаце праглядзець гэтую розьніцу, таму што адна з вэрсіяў была <strong>выдаленая</strong>.",
+ "rev-deleted-unhide-diff": "Адна з вэрсіяў гэтай старонкі была <strong>выдаленая</strong>.\nПадрабязнасьці могуць быць знойдзеныя ў [{{fullurl:{{#Special:Log}}/delete|page={{FULLPAGENAMEE}}}} журнале выдаленьняў].\nВы можаце праглядзець [$1 розьніцу паміж вэрсіямі], калі жадаеце.",
+ "rev-suppressed-unhide-diff": "Адна з вэрсіяў гэтага параўнаньня была <strong>схаваная</strong>.\nПадрабязнасьці могуць быць знойдзеныя ў [{{fullurl:{{#Special:Log}}/suppress|page={{FULLPAGENAMEE}}}} журнале хаваньняў].\nВы можаце [$1 паглядзець гэту розьніцу], калі жадаеце.",
+ "rev-deleted-diff-view": "Адна з вэрсіяў гэтага параўнаньня была <strong>выдаленая</strong>.\nВы можаце праглядзець гэтую розьніцу паміж вэрсіямі. Падрабязнасьці могуць быць знойдзеныя ў [{{fullurl:{{#Special:Log}}/delete|page={{FULLPAGENAMEE}}}} журнале выдаленьняў].",
"rev-suppressed-diff-view": "Адна з вэрсіяў гэтага параўнаньня была '''схаваная'''.\nВы можаце праглядзець гэтую розьніцу паміж вэрсіямі; падрабязнасьці могуць быць знойдзеныя ў [{{fullurl:{{#Special:Log}}/delete|page={{FULLPAGENAMEE}}}} журнале хаваньняў].",
"rev-delundel": "паказаць/схаваць",
"rev-showdeleted": "паказаць",
"rcfilters-invalid-filter": "Няслушны фільтар",
"rcfilters-empty-filter": "Няма актыўных фільтраў. Паказаны ўвесь унёсак.",
"rcfilters-filterlist-title": "Фільтры",
+ "rcfilters-highlightbutton-title": "Вылучыць вынікі",
+ "rcfilters-highlightmenu-title": "Абярыце колер",
"rcfilters-filterlist-noresults": "Фільтры ня знойдзеныя",
"rcfilters-filtergroup-registration": "Рэгістрацыя ўдзельнікаў",
"rcfilters-filter-registered-label": "Зарэгістраваныя",
"editcomment": "Кароткае апісаньне зьменаў было: <em>$1</em>.",
"revertpage": "Рэдагаваньні [[Special:Contributions/$2|$2]] ([[User talk:$2|гутаркі]]) скасаваныя да папярэдняй вэрсіі [[User:$1|$1]]",
"revertpage-nouser": "Рэдагаваньні схаванага ўдзельніка скасаваныя да папярэдняй вэрсіі {{GENDER:$1|[[User:$1|$1]]}}",
- "rollback-success": "Адмененыя рэдагаваньні $1;\nвернутая папярэдняя вэрсія $2.",
+ "rollback-success": "Адмененыя рэдагаваньні {{GENDER:$3|$1}};\nвернутая папярэдняя вэрсія {{GENDER:$4|$2}}.",
"rollback-success-notify": "Адмененыя праўкі $1;\nвернутая папярэдняя вэрсія $2. [$3 Паказаць зьмены]",
"sessionfailure-title": "Памылка сэсіі",
"sessionfailure": "Магчыма ўзьніклі праблемы ў Вашым цяперашнім сэансе працы;\nгэта дзеяньне было скасавана для прадухіленьня перахопу сэансу.\nКалі ласка, націсьніце «назад» і перазагрузіце старонку, зь якой Вы прыйшлі, і паспрабуйце ізноў.",
"logentry-tag-update-logentry": "$1 {{GENDER:$2|абнавіў|абнавіла}} цэтлікі на запісе журналу $5 старонкі $3 ({{PLURAL:$7|дададзена}} $6; {{PLURAL:$9|выдалена}} $8)",
"rightsnone": "(няма)",
"revdelete-summary": "кароткае апісаньне зьменаў",
+ "rightslogentry-temporary-group": "$1 (часова, да $2)",
"feedback-adding": "Даданьне водгуку на старонку…",
"feedback-back": "Назад",
"feedback-bugcheck": "Выдатна! Толькі праверце, магчыма гэтыя памылкі ўжо [$1 вядомыя].",
"mw-widgets-titleinput-description-new-page": "старонка яшчэ не існуе",
"mw-widgets-titleinput-description-redirect": "перанакіраваньне на $1",
"mw-widgets-categoryselector-add-category-placeholder": "Дадаць катэгорыю…",
+ "mw-widgets-usersmultiselect-placeholder": "Дадаць яшчэ…",
"sessionmanager-tie": "Немагчыма выкарыстаць адначасова некалькі тыпаў аўтэнтыфікацыі: $1.",
"sessionprovider-generic": "$1 сэсіі",
"sessionprovider-mediawiki-session-cookiesessionprovider": "сэсіі на падставе файлаў-кукі",
"authmanager-authn-not-in-progress": "Аўтэнтыфікацыя не выконваецца або страчаныя зьвесткі пра сэсію. Калі ласка, пачніце зноў з самага пачатку.",
"authmanager-authn-no-primary": "Пададзеныя ўліковыя зьвесткі ня могуць быць правераныя на сапраўднасьць.",
"authmanager-authn-no-local-user": "Пададзеныя ўліковыя зьвесткі не зьвязаныя зь ніводным удзельнікам гэтай вікі.",
+ "authmanager-authn-no-local-user-link": "Пададзеныя ўліковыя зьвесткі зьяўляюцца карэктнымі, але не належаць ніводнаму ўдзельніку гэтай вікі. Увайдзіце іншым шляхам, або стварыце новага ўдзельніка і ў вас будзе магчымасьць злучыць вашыя папярэднія ўліковыя зьвесткі з гэтым рахункам.",
"authmanager-authn-autocreate-failed": "Аўтаматычнае стварэньне лякальнага рахунку не атрымалася: $1",
"authmanager-change-not-supported": "Пададзеныя ўліковыя зьвесткі ня могуць быць зьмененыя, бо яны ня будуць выкарыстаныя.",
+ "authmanager-create-disabled": "Стварэньне рахункаў адключанае.",
+ "authmanager-create-from-login": "Каб стварыць рахунак, калі ласка, запоўніце палі.",
"authmanager-realname-label": "Сапраўднае імя",
"authmanager-provider-temporarypassword": "Часовы пароль",
"changecredentials": "Зьмена ўліковых зьвестак",
"activeusers-intro": "Гэта пералік удзельнікаў, якія нешта рабілі за апошнія $1 {{PLURAL:$1|дзень|дзён}}.",
"activeusers-count": "$1 {{PLURAL:$1|дзеянне|дзеянні|дзеянняў}} за апошні{{PLURAL:$3| дзень|я $3 дні|я $3 дзён}}",
"activeusers-from": "Паказ, пачынаючы з:",
- "activeusers-groups": "Паказаць удзельнікаў, якія належаць да групаў:",
+ "activeusers-groups": "Паказаць удзельнікаў, якія належаць да груп:",
"activeusers-noresult": "Няма такіх удзельнікаў.",
"activeusers-submit": "Паказаць актыўных удзельнікаў",
"listgrouprights": "Дазволы для груп удзельнікаў",
"continue-editing": "Продължаване към полето за редактиране",
"previewconflict": "Този предварителен преглед отразява текста в горната текстова кутия така, както би се показал, ако съхраните.",
"session_fail_preview": "За съжаление редакцията ви не успя да бъде обработена поради загуба на данните за текущата сесия.\n\nМоже би сте излезли от системата. <strong>Моля, уверете се, че сте влезли в профила си и опитайте отново.</strong>\nАко все още не работи, опитайте да [[Special:UserLogout|излезете]] и да влезете отново, също така проверете дали браузърът ви позволява бисквитки от този сайт.",
- "session_fail_preview_html": "'''За съжаление редакцията ви не беше записана поради изтичането на сесията ви.'''\n\n''Тъй като {{SITENAME}} приема обикновен HTML, предварителният преглед е скрит като предпазна мярка срещу атаки чрез Джаваскрипт.''\n\n'''Опитайте отново. Ако все още не сработва, пробвайте да [[Special:UserLogout|излезете]] и влезете отново.'''",
+ "session_fail_preview_html": "За съжаление редакцията ви не беше записана поради изтичането на сесията ви.\n\n<em>Тъй като {{SITENAME}} приема обикновен HTML, предварителният преглед е скрит като предпазна мярка срещу атаки чрез JavaScript.</em>\n\n<strong>Ако това е обикновен опит за редактиране, моля опитайте отново.</strong>\nАко все още не сработва, пробвайте да [[Special:UserLogout|излезете]] и влезете отново, и се уверете, че браузъра ви приема бисквитки от този сайт.",
"token_suffix_mismatch": "'''Редакцията ви беше отхвърлена, защото браузърът ви е развалил пунктуационните знаци в редакционната отметка. Евентуалното съхранение би унищожило съдържанието на страницата. Понякога това се случва при използването на грешно работещи анонимни междинни сървъри.'''",
"edit_form_incomplete": "'''Някои части от формуляра за редактиране не достигнаха до сървъра; проверете дали редакциите ви са непокътнати и опитайте отново.'''",
"editing": "Редактиране на „$1“",
"prefs-diffs": "Разлики",
"prefs-help-prefershttps": "Това предпочитание ще бъде активирано при следващото влизане.",
"userrights": "Управление на потребителските права",
- "userrights-lookup-user": "УпÑ\80авлÑ\8fване на поÑ\82Ñ\80ебиÑ\82елÑ\81киÑ\82е гÑ\80Ñ\83пи",
+ "userrights-lookup-user": "Ð\98збеÑ\80еÑ\82е поÑ\82Ñ\80ебиÑ\82ел",
"userrights-user-editname": "Потребителско име:",
- "editusergroup": "РедакÑ\82иÑ\80ане на {{GENDER:$1|поÑ\82Ñ\80ебиÑ\82елÑ\81киÑ\82е}} групи",
+ "editusergroup": "Ð\97аÑ\80еждане на поÑ\82Ñ\80ебиÑ\82елÑ\81киÑ\82е групи",
"editinguser": "Промяна на потребителските права на {{GENDER:$1|потребител }} <strong>[[User:$1|$1]]</strong> $2",
- "userrights-editusergroup": "Редактиране на потребителските групи",
+ "userrights-editusergroup": "Редактиране на {{GENDER:$1|потребителските}} групи",
"userrights-viewusergroup": "Преглед на {{GENDER:$1|потребителските}} групи",
- "saveusergroups": "Съхраняване на потребителските групи",
+ "saveusergroups": "Съхраняване на {{GENDER:$1|потребителските}} групи",
"userrights-groupsmember": "Член на:",
"userrights-groupsmember-auto": "Подразбиращ се член на:",
"userrights-groups-help": "Може да променяте групите, в които е потребителят:\n* Поставена отметка означава, че потребителят е член на групата.\n* Поле без отметка означава, че потребителят не е член на групата.\n* Знакът * показва, че не можете да премахнете групата, след като е вече добавена (или обратно).",
"right-hideuser": "Блокиране и скриване на потребителско име",
"right-ipblock-exempt": "Пренебрегване на блокирания по IP blocks, автоматични блокирания и блокирани IP интервали",
"right-unblockself": "Собствено отблокиране",
- "right-protect": "пÑ\80оменÑ\8fне на нивоÑ\82о на заÑ\89иÑ\82а и Ñ\80едакÑ\82иÑ\80ане на заÑ\89иÑ\82ени страници",
+ "right-protect": "Ð\9fÑ\80оменÑ\8fне на нивоÑ\82о на заÑ\89иÑ\82а и Ñ\80едакÑ\82иÑ\80ане на каÑ\81кадно-заÑ\89иÑ\82ениÑ\82е страници",
"right-editprotected": "Редактиране на страници защитени като „{{int:protect-level-sysop}}“",
"right-editinterface": "Редактиране на потребителския интерфейс",
"right-editusercssjs": "редактиране на CSS и JS файловете на други потребители",
"action-deletelogentry": "изтриване на записи от дневника",
"action-deletedhistory": "преглед на изтритата история на тази страница",
"action-browsearchive": "търсене на изтрити страници",
- "action-undelete": "вÑ\8aзÑ\81Ñ\82ановÑ\8fване на Ñ\82ази Ñ\81Ñ\82Ñ\80аниÑ\86а",
- "action-suppressrevision": "пÑ\80еглеждане и вÑ\8aзÑ\81Ñ\82ановÑ\8fване на Ñ\82ази Ñ\81кÑ\80иÑ\82а веÑ\80Ñ\81иÑ\8f",
+ "action-undelete": "вÑ\8aзÑ\81Ñ\82ановÑ\8fване на Ñ\81Ñ\82Ñ\80аниÑ\86и",
+ "action-suppressrevision": "пÑ\80еглеждане и вÑ\8aзÑ\81Ñ\82ановÑ\8fване на Ñ\81кÑ\80иÑ\82и веÑ\80Ñ\81ии",
"action-suppressionlog": "преглеждане на този поверителен дневник",
"action-block": "блокиране на редакциите на този потребител",
"action-protect": "променяне на нивото на защита на тази страница",
"withoutinterwiki-summary": "Следните страници не препращат към версии на други езици:",
"withoutinterwiki-legend": "Представка",
"withoutinterwiki-submit": "Показване",
- "fewestrevisions": "Страници с най-малко версии",
+ "fewestrevisions": "Страници с най-малко редакции",
"nbytes": "$1 {{PLURAL:$1|байт|байта}}",
"ncategories": "$1 {{PLURAL:$1|категория|категории}}",
"ninterwikis": "$1 {{PLURAL:$1|междууики|междууикита}}",
"nopagetext": "Посочената целева страница не съществува.",
"pager-newer-n": "{{PLURAL:$1|по-нова 1|по-нови $1}}",
"pager-older-n": "{{PLURAL:$1|по-стара 1|по-стари $1}}",
- "suppress": "Премахване от публичния архив",
+ "suppress": "Подтискане",
"querypage-disabled": "Тази специална страница е изключена, защото затруднява производителността на уикито.",
"apihelp": "Помощ за API",
"apihelp-no-such-module": "Модул \"$1\" не беше намерен.",
"undeletedrevisions": "{{PLURAL:$1|Една версия беше възстановена|$1 версии бяха възстановени}}",
"undeletedrevisions-files": "{{PLURAL:$1|Една версия|$1 версии}} и {{PLURAL:$1|един файл|$2 файла}} бяха възстановени",
"undeletedfiles": "{{PLURAL:$1|Един файл беше възстановен|$1 файла бяха възстановени}}",
- "cannotundelete": "Ð\92Ñ\8aзÑ\81Ñ\82ановÑ\8fванеÑ\82о беÑ\88е неÑ\83Ñ\81пеÑ\88но:\n$1",
+ "cannotundelete": "Ð\95дна или повеÑ\87е опеÑ\80аÑ\86ии по вÑ\8aзÑ\81Ñ\82ановÑ\8fване Ñ\81е пÑ\80овалиÑ\85а:\n$1",
"undeletedpage": "'''Страницата „$1“ беше възстановена.'''\n\nМожете да видите последните изтрити и възстановени страници в [[Special:Log/delete|дневника на изтриванията]].",
"undelete-header": "Прегледайте [[Special:Log/delete|дневника на изтриванията]] за текущо изтритите страници.",
"undelete-search-title": "Търсене на изтрити страници",
"log-name-pagelang": "Дневник на езиковите промени",
"default-skin-not-found-row-enabled": "* <code>$1</code> / $2 (включено)",
"default-skin-not-found-row-disabled": "* <code>$1</code> / $2 (<strong>изключено</strong>)",
- "mediastatistics": "Ð\9cедиÑ\8f Ñ\81Ñ\82аÑ\82иÑ\81Ñ\82ики",
+ "mediastatistics": "СÑ\82аÑ\82иÑ\81Ñ\82ика за Ñ\84айлове",
"mediastatistics-table-mimetype": "MIME тип",
"mediastatistics-table-extensions": "Възможни разширения",
"mediastatistics-table-count": "Брой файлове",
"search-interwiki-caption": "সহপ্রকল্পসমূহ",
"search-interwiki-default": "$1 থেকে ফলাফলসমূহ:",
"search-interwiki-more": "(আরও)",
+ "search-interwiki-more-results": "আরও ফলাফল",
"search-relatedarticle": "সম্পর্কিত",
"searchrelated": "সম্পর্কিত",
"searchall": "সমস্ত",
"youremail": "ইমেইল *",
"username": "{{GENDER:$1|ব্যবহারকারী নাম}}:",
"prefs-memberingroups": "{{PLURAL:$1|দলের|দলসমূহের}} {{GENDER:$2|সদস্য}}:",
+ "group-membership-link-with-expiry": "$1 ($2 পর্যন্ত)",
"prefs-registration": "নিবন্ধনের সময়:",
"yourrealname": "আসল নাম *",
"yourlanguage": "ভাষা:",
"editusergroup": "ব্যবহারকারী দল লোড করুন",
"editinguser": "<strong>[[User:$1|$1]]</strong> $2 {{GENDER:$1|ব্যবহারকারীর}} ব্যবহারকারী অধিকার পরিবর্তন করছেন",
"viewinguserrights": "<strong>[[User:$1|$1]]</strong> $2 {{GENDER:$1|ব্যবহারকারীর}} ব্যবহারকারী অধিকার দেখছেন",
- "userrights-editusergroup": "ব্যবহারকারীর দল সম্পাদনা করো",
- "userrights-viewusergroup": "ব্যবহারকারী দল দেখা",
+ "userrights-editusergroup": "{{GENDER:$1|ব্যবহারকারী}} দল সম্পাদনা করে",
+ "userrights-viewusergroup": "{{GENDER:$1|ব্যবহারকারী}} দল দেখা",
"saveusergroups": "{{GENDER:$1|ব্যবহারকারীর}} দল সংরক্ষণ করো",
"userrights-groupsmember": "সদস্য:",
"userrights-groupsmember-auto": "শর্তহীন সদস্য",
- "userrights-groups-help": "à¦\86পনি à¦\8fà¦\87 বà§\8dযবহারà¦\95ারà§\80র বরà§\8dতমান দল পরিবরà§\8dতন à¦\95রতà§\87 পারবà§\87ন:\n* à¦\9fিà¦\95 à¦\9aিহà§\8dন দà§\87à¦\93য়া à¦\98রà§\87র à¦\85রà§\8dথ বà§\8dযবহারà¦\95ারà§\80 à¦\8fà¦\96ন à¦\90 দলà§\87র à¦\85নà§\8dতরà§\8dà¦à§\81à¦\95à§\8dত।\n* à¦\9fিà¦\95 à¦\9aিহà§\8dন বিহà§\80ন à¦\98রà§\87র à¦\85রà§\8dথ বà§\8dযবহারà¦\95ারà§\80 à¦\90 দলà§\87র à¦\85নà§\8dতরà§\8dà¦à§\81à¦\95à§\8dত নন।\n* à¦\8fà¦\95à¦\9fি তারà¦\95া à¦\9aিহà§\8dন (*) দà§\8dবারা বà§\8bà¦\9dানà§\8b হà¦\9aà§\8dà¦\9bà§\87 à¦\8fà¦\87 দলà§\87র à¦\85নà§\8dতরà§\8dà¦à§\81à¦\95à§\8dতির পর à¦\86পনি à¦\86র তা বাতিল à¦\95রতে পারবেন না।",
+ "userrights-groups-help": "à¦\86পনি à¦\8fà¦\87 বà§\8dযবহারà¦\95ারà§\80র বরà§\8dতমান দল পরিবরà§\8dতন à¦\95রতà§\87 পারবà§\87ন:\n* à¦\9fিà¦\95 à¦\9aিহà§\8dন দà§\87à¦\93য়া à¦\98রà§\87র à¦\85রà§\8dথ বà§\8dযবহারà¦\95ারà§\80 à¦\90 দলà§\87র à¦\85নà§\8dতরà§\8dà¦à§\81à¦\95à§\8dত।\n* à¦\9fিà¦\95 à¦\9aিহà§\8dন বিহà§\80ন à¦\98রà§\87র à¦\85রà§\8dথ বà§\8dযবহারà¦\95ারà§\80 à¦\90 দলà§\87র à¦\85নà§\8dতরà§\8dà¦à§\81à¦\95à§\8dত নন।\n* à¦\8fà¦\95à¦\9fি তারà¦\95া à¦\9aিহà§\8dন (*) দà§\8dবারা বà§\8bà¦\9dানà§\8b হà¦\9aà§\8dà¦\9bà§\87 à¦\8fà¦\87 দলà§\87র à¦\85নà§\8dতরà§\8dà¦à§\81à¦\95à§\8dতির পর à¦\86পনি à¦\86র তা বাতিল à¦\95রতà§\87 পারবà§\87ন না, বা তদà§\8dবিপরà§\80ত।\n* à¦\8fà¦\95à¦\9fি হà§\8dযাশ à¦\9aিহà§\8dন (#) দà§\8dবারা বà§\8bà¦\9dানà§\8b হà¦\9aà§\8dà¦\9bà§\87 à¦\86পনি শà§\81ধà§\81মাতà§\8dর à¦\8fà¦\87 দলà§\87র মà§\87য়াদ শà§\87ষ হà¦\93য়ার সময় পিà¦\9bনà§\87 নিতà§\87 পারবà§\87ন; à¦\95িনà§\8dতà§\81 সামনà§\87 নিতে পারবেন না।",
"userrights-reason": "কারণ (বাংলায় লিখুন):",
"userrights-no-interwiki": "আপনার অন্য উইকিতে ব্যবহারকারী অধিকার সম্পাদনা করার অনুমতি নেই।",
"userrights-nodatabase": "$1 ডাটাবেজটির হয় কোন অস্তিত্ব নেই অথবা এটি স্থানীয় ডাটাবেজ নয়।",
"userrights-changeable-col": "দল যা আপনি পরিবর্তন করতে পারেন",
"userrights-unchangeable-col": "দল যা আপনি পরিবর্তন করতে পারবেন না",
+ "userrights-expiry-current": "মেয়াদোত্তীর্ণের সময় $1",
+ "userrights-expiry-none": "মেয়াদোত্তীর্ণের সময় নেই",
+ "userrights-expiry": "মেয়াদোত্তীর্ণ হবে:",
+ "userrights-expiry-existing": "বিদ্যমান মেয়াদউত্তীর্ণের সময়: $3, $2",
+ "userrights-expiry-othertime": "অন্য সময়:",
+ "userrights-expiry-options": "১ দিন:1 day,১ সপ্তাহ:1 week,১ মাস:1 month,৩ মাস:3 months,৬ মাস:6 months,১ বছর:1 year",
+ "userrights-invalid-expiry": "\"$1\" দলের জন্য মেয়াদোত্তীর্ণের সময় অবৈধ।",
+ "userrights-expiry-in-past": "\"$1\" দলের জন্য মেয়াদোত্তীর্ণের সময় অতীতে।",
"userrights-conflict": "ব্যবহারকারী অধিকার দ্বন্দ্ব! অনুগ্রহ করে নিশ্চিত হোন এবং পুনরায় চেষ্টা করুন।",
"group": "দল:",
"group-user": "ব্যবহারকারীগণ",
"rcfilters-invalid-filter": "অকার্যকর ফিল্টার",
"rcfilters-empty-filter": "কোনো সক্রিয় ফিল্টার নেই। সমস্ত অবদান দেখানো হয়েছে।",
"rcfilters-filterlist-title": "ছাঁকনি",
+ "rcfilters-highlightbutton-title": "ফলাফল আলোকপাত করুন",
+ "rcfilters-highlightmenu-title": "একটি রং নির্বাচন করুন",
"rcfilters-filterlist-noresults": "কোনও ফিল্টার পাওয়া যায়নি",
"rcfilters-filtergroup-registration": "ব্যবহারকারী নিবন্ধন",
"rcfilters-filter-registered-label": "নিবন্ধিত",
"rcfilters-filter-registered-description": "প্রবেশকৃত সম্পাদকবৃন্দ।",
"rcfilters-filter-unregistered-label": "অনিবন্ধিত",
+ "rcfilters-filter-unregistered-description": "সম্পাদক যারা প্রবেশ করেন নি।",
"rcfilters-filtergroup-authorship": "কৃতি সম্পাদনা",
"rcfilters-filter-editsbyself-label": "আপনার নিজস্ব সম্পাদনা",
"rcfilters-filter-editsbyself-description": "আপনার দ্বারা সম্পাদনা।",
"rcfilters-filter-editsbyother-description": "অন্য ব্যবহারকারীদের দ্বারা করা সম্পাদনা (আপনার না)।",
"rcfilters-filtergroup-userExpLevel": "অভিজ্ঞতার স্তর (শুধু মাত্র নিবন্ধিত ব্যবহারকারীর জন্য)",
"rcfilters-filter-userExpLevel-newcomer-label": "নতুন আগত",
+ "rcfilters-filter-userExpLevel-newcomer-description": "১০টি সম্পাদনার কম ও ৪ দিনের কার্যকলাপ।",
"rcfilters-filter-userExpLevel-learner-label": "শিক্ষার্থী",
"rcfilters-filter-userExpLevel-experienced-label": "অভিজ্ঞ ব্যবহারকারী",
+ "rcfilters-filter-userExpLevel-experienced-description": "৩০ দিনের বেশী কার্যকলাপ ও ৫০০টি সম্পাদনা।",
+ "rcfilters-filtergroup-automated": "স্বয়ংক্রিয় অবদান",
"rcfilters-filter-bots-label": "বট",
+ "rcfilters-filter-bots-description": "স্বয়ংক্রিয় সরঞ্জাম দিয়ে করা সম্পাদনা।",
+ "rcfilters-filter-humans-label": "মানুষ (বট নয়)",
+ "rcfilters-filter-humans-description": "মানব সম্পাদক দ্বারা করা সম্পাদনা।",
+ "rcfilters-filtergroup-significance": "তাত্পর্য",
+ "rcfilters-filter-minor-label": "অনুল্লেখ্য সম্পাদনা",
+ "rcfilters-filter-major-label": "অ-অনুল্লেখ্য সম্পাদনা",
+ "rcfilters-filtergroup-changetype": "পরিবর্তনের ধরন",
"rcfilters-filter-pageedits-label": "পাতার সম্পাদনা",
+ "rcfilters-filter-pageedits-description": "উইকি বিষয়বস্তু, আলোচনা, বিষয়শ্রেণীর বিবরণ.... ইত্যাদিতে সম্পাদনা",
+ "rcfilters-filter-newpages-label": "পাতার সৃষ্টিকরণ",
+ "rcfilters-filter-newpages-description": "সম্পাদনা যা নতুন পাতা তৈরি করেছে।",
+ "rcfilters-filter-categorization-label": "বিষয়শ্রেণীর পরিবর্তন",
+ "rcfilters-filter-logactions-label": "প্রবেশকৃত কার্য",
+ "rcfilters-filter-logactions-description": "প্রশাসনিক কর্ম, অ্যাকাউন্ট সৃষ্টিকরণ, পাতা অপসারণ, আপলোড....",
"rcnotefrom": "<strong>$2</strong>টা থেকে সংঘটিত পরিবর্তনগুলি (সর্বোচ্চ <strong>$1টি</strong> দেখানো হয়েছে)।",
"rclistfrom": "$2, $3 তারিখের পর সংঘটিত নতুন পরিবর্তনগুলো দেখাও",
"rcshowhideminor": "অনুল্লেখ্য পরিবর্তনগুলো $1",
"apisandbox-results": "ফলাফল",
"apisandbox-sending-request": "API অনুরোধ পাঠানো হচ্ছে...",
"apisandbox-loading-results": "API ফলাফল গ্রহণ করা হচ্ছে...",
+ "apisandbox-results-error": "এপিআই কুয়েরির প্রতিক্রিয়া লোড করার সময় একটি ত্রুটি ঘটেছে: $1।",
"apisandbox-request-selectformat-label": "অনুরোধ উপাত্ত এভাবে দেখান:",
"apisandbox-request-format-url-label": "URL কোয়েরি স্ট্রিং",
"apisandbox-request-url-label": "অনুরোধের URL:",
"apisandbox-request-json-label": "JSON অনুরোধ:",
"apisandbox-request-time": "অনুরোধের সময়: {{PLURAL:$1|$1 মি.সে.}}",
"apisandbox-results-fixtoken": "টোকেন সংশোধন ও পুনরায় জমা",
+ "apisandbox-results-fixtoken-fail": "\"$1\" টোকেন আনতে ব্যর্থ হয়েছে।",
"apisandbox-alert-page": "এই পাতার ঘরগুলো বৈধ নয়।",
"apisandbox-alert-field": "এই ক্ষেত্রের মান বৈধ নয়।",
"apisandbox-continue": "অব্যাহত",
"undeletehistorynoadmin": "এই পাতাটি মুছে ফেলা হয়েছে। মুছে ফেলার কারণ নিচের সারাংশে দেখানো হল। সেই সাথে মুছে ফেলার আগে যেসমস্ত ব্যবহারকারী পাতাটি সম্পাদনা করেছেন, তাদের সম্পর্কেও বিস্তারিত দেখানো হল। এই মুছে ফেলা সংশোধনগুলির বিষয়বস্তু কেবল প্রশাসকদের কাছে লভ্য।",
"undelete-revision": "$3-এর করা $1 সংশোধন ($4 তারিখে, $5 সময়ের) মুছে ফেলা হয়েছে:",
"undeleterevision-missing": "সংশোধনটি অবৈধ কিংবা হারানো গেছে। আপনি হয়ত অচল সংযোগে ক্লিক করেছেন, কিংবা সংশোধনটি হয়ত বাতিল করে পাতাটি পূর্বাবস্থায় নেওয়া হয়েছে, অথবা সংশোধনটি আর্কাইভ থেকে মুছে ফেলা হয়েছে।",
+ "undeleterevision-duplicate-revid": "{{PLURAL:$1|একটি সংশোধন|$1টি সংশোধন}} পুনরুদ্ধার করা যাবে না, কারণ {{PLURAL:$1|এটির|এগুলির}} <code>rev_id</code> ইতিমধ্যেই ব্যবহৃত হয়েছে।",
"undelete-nodiff": "পূর্বের কোন সংশোধন খুঁজে পাওয়া যায়নি।",
"undeletebtn": "পুনরুদ্ধার",
"undeletelink": "দেখুন/পুনর্বহাল করুন",
"proxyblockreason": "আপনার আইপি ঠিকানাকে বাধা দেয়া হয়েছে কারণ এটি একটি উন্মুক্ত প্রক্সি। অনুগ্রহ করে আপনার ইন্টারনেট সেবা প্রদানকারী কোম্পানির সাথে কারিগরি সহায়তার ব্যাপারে যোগাযোগ করুন এবং এই গুরুত্বপূর্ণ নিরাপত্তা সমস্যার ব্যাপারে তাদেরকে অবহিত করুন।",
"sorbsreason": "আপনার আইপি ঠিকানাটি {{SITENAME}}-এর ব্যবহার করা DNSBL-এ উন্মুক্ত প্রক্সি হিসেবে তালিকাভুক্ত আছে।",
"sorbs_create_account_reason": "আপনার আইপি ঠিকানাটি {{SITENAME}}-এর ব্যবহার করা DNSBL-এ উন্মুক্ত প্রক্সি হিসেবে তালিকাভুক্ত আছে। আপনি কোন অ্যাকাউন্ট সৃষ্টি করতে পারবেন না।",
+ "softblockrangesreason": "বেনামী অবদান আপনার আইপি ঠিকানা থেকে অনুমোদিত নয় ($1)। দয়া করে প্রবেশ করুন।",
"xffblockreason": "X-Forwarded-For হেডারে থাকা আইপি ঠিকানাটি ব্লক করা হয়েছে, হয় এটি আপনার নিজের অথবা আপনার ব্যবহৃত প্রক্সি সার্ভারের আইপি ঠিকানা। ব্লক করার কারণ হল: $1",
"cant-see-hidden-user": "আপনি যে ব্যবহারকারীকে ব্লক বা লুকিয়ে রাখতে চাচ্ছেন তাকে আগে থেকেই ব্লক বা লুকিয়ে রাখা হয়েছে। এছাড়া আপনার Hideuser অধিকার নেই, তাই আপনি ব্যবহারকারীর অবস্থা পরিবর্তন করতে পারবেন না।",
"ipbblocked": "আপনি অন্য কোন ব্যবহারকরীকে ব্লক বা আনব্লক করতে পারবেন না, কারণ আপনি নিজেই ব্লক রয়েছেন",
"cant-move-category-page": "আপনার বিষয়শ্রেণী পাতা স্থানান্তরের অনুমতি নেই।",
"cant-move-to-category-page": "আপনার পাতাটিকে বিষয়শ্রেণী পাতায় স্থানান্তরের অনুমতি নেই।",
"cant-move-subpages": "আপনার উপপাতা স্থানান্তরের অনুমতি নেই।",
+ "namespace-nosubpages": "\"$1\" নামস্থান উপপাতার অনুমতি দেয় না।",
"newtitle": "নতুন শিরোনাম:",
"move-watch": "এই পাতাটি নজরে রাখুন",
"movepagebtn": "পাতা স্থানান্তর করুন",
"movelogpagetext": "সরানো পাতাগুলির একটি তালিকা নিচে দেয়া হল।",
"movesubpage": "{{PLURAL:$1|উপপাতা|উপপাতাসমূহ}}",
"movesubpagetext": "এই পাতার $1টি {{PLURAL:$1|উপপাতা}} রয়েছে যেগুলো নিচে দেখানো হচ্ছে।",
+ "movesubpagetalktext": "সংশ্লিষ্ট আলাপ পাতার $1টি {{PLURAL:$1|উপপাতা}} রয়েছে যেগুলো নিচে দেখানো হচ্ছে।",
"movenosubpage": "এই পাতাটির কোনো উপপাতা নেই।",
"movereason": "কারণ:",
"revertmove": "পূর্বাবস্থায় ফেরত নেওয়া হোক",
"tags-delete-reason": "কারণ:",
"tags-delete-submit": "অপরিবর্তনীয় এই ট্যাগ অপসারন করো",
"tags-delete-not-found": "\"$1\" ট্যাগ বিদ্যমান নয়।",
+ "tags-delete-too-many-uses": "\"$1\" ট্যাগটি $2টিরও অধিক {{PLURAL:$2|সংশোধনে}} প্রয়োগ করা হয়েছে, যার অর্থ এটি অপসারণ করা যাবে না।",
"tags-delete-no-permission": "আপনার পরিবর্তন ট্যাগ মুছে ফেলার অনুমতি নেই।",
"tags-activate-title": "সক্রিয় ট্যাগ",
"tags-activate-question": "আপনি ট্যাগ \"$1\" সক্রিয় করতে চলেছেন।",
"tags-deactivate-reason": "কারণ:",
"tags-deactivate-not-allowed": "ট্যাগ \"$1\" নিষ্ক্রিয় করা সম্ভব নয়।",
"tags-deactivate-submit": "নিষ্ক্রিয়",
+ "tags-apply-no-permission": "আপনার পরিবর্তনসহ আপনার ট্যাগ পরিবর্তন প্রয়োগ করার অনুমতি নেই।",
+ "tags-apply-not-allowed-one": "\"$1\" ট্যাগটি ম্যানুয়ালি প্রয়োগ করা যাবে না।",
+ "tags-apply-not-allowed-multi": "নিন্মলিখিত {{PLURAL:$2|ট্যাগটি|ট্যাগগুলি}} ম্যানুয়ালি প্রয়োগ করা যাবে না: $1",
+ "tags-update-no-permission": "স্বতন্ত্র সংশোধন বা লগের ভুক্তি থেকে আপনার ট্যাগ পরিবর্তন যোগ বা বাতিল করার অনুমতি নেই।",
+ "tags-update-add-not-allowed-one": "\"$1\" ট্যাগটি ম্যানুয়ালি যোগ করা যাবে না।",
+ "tags-update-add-not-allowed-multi": "নিন্মলিখিত {{PLURAL:$2|ট্যাগটি|ট্যাগগুলি}} ম্যানুয়ালি যোগ করা যাবে না: $1",
+ "tags-update-remove-not-allowed-one": "\"$1\" ট্যাগটি বাতিল করা যাবে না।",
+ "tags-update-remove-not-allowed-multi": "নিন্মলিখিত {{PLURAL:$2|ট্যাগটি|ট্যাগগুলি}} ম্যানুয়ালি বাতিল করা যাবে না: $1",
"tags-edit-title": "ট্যাগ সম্পাদনা করুন",
"tags-edit-manage-link": "ট্যাগ পরিচালনা করুন",
"tags-edit-revision-selected": "[[:$2]] পাতার {{PLURAL:$1|নির্বাচিত সংশোধন|নির্বাচিত সংশোধনসমূহ}}:",
"tags-edit-logentry-selected": "{{PLURAL:$1|নির্বাচিত লগ ইভেন্ট}}:",
+ "tags-edit-logentry-legend": "{{PLURAL:$1|এই লগের ভুক্তি|$1টি লগের ভুক্তি}} থেকে ট্যাগ যোগ বা বাতিল করুন",
"tags-edit-existing-tags": "বিদ্যমান ট্যাগ:",
"tags-edit-existing-tags-none": "<em>কোনটি নয়</em>",
"tags-edit-new-tags": "নতুন ট্যাগ:",
"tags-edit-chosen-placeholder": "কিছু ট্যাগ নির্বাচন করুন",
"tags-edit-chosen-no-results": "কোন ট্যাগ মিল পাওয়া যায়নি",
"tags-edit-reason": "কারণ:",
- "tags-edit-revision-submit": "Apply changes to {{PLURAL:$1|এই সংশোধনে|$1 সংশোধনসমূহে}} পরিবর্তন প্রয়োগ করুন",
+ "tags-edit-revision-submit": "{{PLURAL:$1|এই সংশোধনে|$1টি সংশোধনে}} পরিবর্তন প্রয়োগ করুন",
+ "tags-edit-logentry-submit": "{{PLURAL:$1|এই লগের ভুক্তিতে|$1টি লগের ভুক্তিতে}} পরিবর্তন প্রয়োগ করুন",
"tags-edit-success": "পরিবর্তন প্রয়োগ করা হয়েছে।",
"tags-edit-failure": "পরিবর্তন প্রয়োগ করা যায়নি: $1",
"tags-edit-nooldid-title": "লক্ষ্য সংশোধন অবৈধ",
"htmlform-date-placeholder": "বববব-মম-দদ",
"htmlform-time-placeholder": "ঘঘ:মম:সস",
"htmlform-datetime-placeholder": "বববব-মম-দদ ঘঘ:মম:সস",
+ "htmlform-date-invalid": "প্রদানকৃত মানটি স্বীকৃত তারিখ নয়। বববব-মম-দদ বিন্যাস ব্যবহার করে চেষ্টা করুন।",
+ "htmlform-time-invalid": "প্রদানকৃত মানটি স্বীকৃত সময় নয়। ঘঘ:মম:সস বিন্যাস ব্যবহার করে চেষ্টা করুন।",
+ "htmlform-datetime-invalid": "প্রদানকৃত মানটি স্বীকৃত তারিখ ও সময় নয়। বববব-মম-দদ ঘঘ:মম:সস বিন্যাস ব্যবহার করে চেষ্টা করুন।",
+ "htmlform-date-toolow": "আপনার প্রদানকৃত মানটি অনুমোদিত তারিখ $1-এর অনেক আগের।",
+ "htmlform-date-toohigh": "আপনার প্রদানকৃত মানটি অনুমোদিত তারিখ $1-এর অনেক পরের।",
+ "htmlform-time-toolow": "আপনার প্রদানকৃত মানটি অনুমোদিত সময় $1-এর অনেক আগের।",
+ "htmlform-time-toohigh": "আপনার প্রদানকৃত মানটি অনুমোদিত সময় $1-এর অনেক পরের।",
+ "htmlform-datetime-toolow": "আপনার প্রদানকৃত মানটি অনুমোদিত তারিখ ও সময় $1-এর অনেক আগের।",
+ "htmlform-datetime-toohigh": "আপনার প্রদানকৃত মানটি অনুমোদিত তারিখ ও সময় $1-এর অনেক পরের।",
"htmlform-title-badnamespace": "[[:$1]] \"{{ns:$2}}\" নামস্থানে খুঁজে পাওয়া যায়নি।",
"htmlform-title-not-creatable": "\"$1\" সৃষ্টিযোগ্য পাতার শিরোনাম নয়",
"htmlform-title-not-exists": "$1-এর অস্তিত্ব নেই।",
"logentry-upload-overwrite": "$1 $3-এর একটি নতুন সংস্করণ {{GENDER:$2|আপলোড করেছেন}}",
"logentry-upload-revert": "$1 $3 {{GENDER:$2|আপলোড করেছেন}}",
"log-name-managetags": "ট্যাগ ব্যবস্থাপনা লগ",
- "logentry-managetags-create": "$1 \"$4\" ট্যাগ {{GENDER:$2|তৈরি করেছে}}",
+ "logentry-managetags-create": "$1 \"$4\" ট্যাগটি {{GENDER:$2|তৈরি করেছেন}}",
"logentry-managetags-delete": "$1 \"$4\" ট্যাগটি {{GENDER:$2|অপসারণ করেছেন}} ($5টি {{PLURAL:$5|সংস্করণ বা লগ ভুক্তি|সংস্করণ ও/বা লগ ভুক্তি}} সরানো হয়েছে)",
+ "logentry-managetags-deactivate": "$1 \"$4\" ট্যাগটি ব্যবহারকারী ও বট দ্বারা ব্যবহারের জন্য {{GENDER:$2|নিষ্ক্রিয়}} করেছেন",
"log-name-tag": "ট্যাগ লগ",
"rightsnone": "(কিছু নাই)",
"revdelete-summary": "সম্পাদনা সারাংশ",
+ "rightslogentry-temporary-group": "$1 (সাময়িক, $2 পর্যন্ত)",
"feedback-adding": "পাতায় প্রতিক্রিয়া যোগ হচ্ছে...",
"feedback-back": "পিছনে",
"feedback-bugcheck": "উত্তম! যাচাই করুন যে এই [$1 জানা বাগের] কোন একটি কিনা।",
"api-error-emptypage": "নতুন পাতা তৈরি হচ্ছে, খালি পাতা গ্রহণযোগ্য নয়।",
"api-error-publishfailed": "অভ্যন্তরীন ত্রুটি: সার্ভার অস্থায়ী ফাইলটি প্রকাশ করতে ব্যর্থ হয়েছে।",
"api-error-stashfailed": "অভ্যন্তরীণ ত্রুটি: সার্ভার অস্থায়ী ফাইলটি সংরক্ষণ করতে ব্যর্থ হয়েছে।",
- "api-error-unknown-warning": "অজানা সতর্কীকরণ: $1",
+ "api-error-unknown-warning": "অজানা সতর্কীকরণ: \"$1\"।",
"api-error-unknownerror": "অজানা ত্রুটি: \"$1\"।",
"duration-seconds": "$1 {{PLURAL:$1|সেকেন্ড|সেকেন্ড}}",
"duration-minutes": "$1 {{PLURAL:$1|মিনিট|মিনিট}}",
"expand_templates_generate_xml": "XML পার্স বৃক্ষ দেখাও",
"expand_templates_generate_rawhtml": "এইচটিএমএল দেখাও",
"expand_templates_preview": "প্রাকদর্শন",
+ "expand_templates_preview_fail_html": "<em>{{SITENAME}}-এ raw HTML সক্রিয় আছে ও সেশন উপাত্ত হারিয়ে গিয়েছে, জাভাস্ক্রিপ্ট ভিত্তিক আক্রমণ থেকে প্রতিরক্ষার জন্য প্রাকদর্শনটি লুকায়িত আছে।</em>\n\n<strong>যদি এটি সম্পাদনার একটি বৈধ প্রচেষ্টা হয়, তবে অনুগ্রহ করে আবার চেষ্টা করুন।</strong>\nযদি তারপরেও কাজ না হয়, তবে অ্যাকাউন্ট থেকে [[Special:UserLogout|বেরিয়ে গিয়ে]] আবার প্রবেশ করুন, এবং পরীক্ষা করে দেখুন যে আপনার ব্রাউজারে এই সাইট থেকে কুকি অনুমতি দেয়।",
+ "expand_templates_preview_fail_html_anon": "<em>{{SITENAME}}-এ raw HTML সক্রিয় আছে ও আপনি প্রবেশ করেন নি, জাভাস্ক্রিপ্ট ভিত্তিক আক্রমণ থেকে প্রতিরক্ষার জন্য প্রাকদর্শনটি লুকায়িত আছে।</em>\n\n<strong>যদি এটি সম্পাদনার একটি বৈধ প্রচেষ্টা হয়, তবে অনুগ্রহ করে [[Special:UserLogin|প্রবেশ করুন]] ও আবার চেষ্টা করুন।</strong>",
"expand_templates_input_missing": "আপনাকে অন্তত কিছু ইনপুট লেখা প্রদান করতে হবে।",
"pagelanguage": "পাতার ভাষা পরিবর্তন করুন",
"pagelang-name": "পাতা",
"pagelang-select-lang": "ভাষা নির্বাচন করুন",
"pagelang-reason": "কারণ",
"pagelang-submit": "জমা দাও",
+ "pagelang-nonexistent-page": "$1 শিরোনামে কোন পাতা নেই।",
"pagelang-db-failed": "ডাটাবেস পৃষ্ঠার ভাষা পরিবর্তন করতে ব্যর্থ হয়েছে।",
"right-pagelang": "পাতার ভাষা পরিবর্তন করুন",
"action-pagelang": "পাতার ভাষা পরিবর্তন করুন",
"mw-widgets-titleinput-description-new-page": "পাতা এখনো বিদ্যমান নয়",
"mw-widgets-titleinput-description-redirect": "$1-এ পুনঃনির্দেশিত",
"mw-widgets-categoryselector-add-category-placeholder": "একটি বিষয়শ্রেণী যোগ করুন...",
+ "mw-widgets-usersmultiselect-placeholder": "আরও যোগ করুন...",
"sessionmanager-tie": "একাধিক অনুরোধের প্রমাণীকরণের ধরন একত্রিত করা যাবে না: $1।",
"sessionprovider-generic": "$1টি সেশন",
"sessionprovider-mediawiki-session-cookiesessionprovider": "কুকি-ভিত্তিক সেশন",
"create-local": "یأ توزی ڤولات نشيني إزافإ کونين",
"editthispage": "اصلاح ای صفحه",
"delete": "حذف",
+ "deletethispage": "اي بلگأ نأ پاکسا کونين",
+ "undeletethispage": "اي بلگأ نأ پاکسا نکونين",
"protect": "حفاظت وحمایت",
"protect_change": "آلإشت کونين",
+ "protectthispage": "ز اي بلگأ هامينداري کونين",
"newpage": "صفحه تازه",
"talkpage": "بحث ای صفحه",
"talkpagelinktext": "چأک چئنە",
"error": "خطا",
"databaseerror-query": "جوستکاری: $1",
"databaseerror-error": "خطا: $1",
+ "internalerror": "خطا مإنجقایي",
"badtitle": "عنوان بد",
"badtitletext": "عنوان درخواستی نامعتبر، خالی، یا عنوانی بین زبانی یا بینویکیای با پیوند نادرسته\nو ممکنه دارای یک یا چند کاراکتر بوه که در عنوان مربوط نوا زش استفاده کنین",
"viewsource": "مشاهده منبع",
"pt-createaccount": "راسد کردن هساڤ کارياري",
"pt-userlogout": "ز سامۈنإ درأڤوڌن",
"changepassword": "آلشد کردن رازينإ گوڤأرتن",
+ "oldpassword": "رازينإ گوڤأرتن ديندایي:",
+ "newpassword": "رازينإ گوڤأرتن تازأ:",
"retypenew": "تایپ دوباره رمز:",
+ "botpasswords": "رازينإیل گوڤأرتن بوتا",
"botpasswords-label-appid": "نوم بوت:",
"botpasswords-label-create": "راس كردن",
+ "botpasswords-label-update": "ب هنگوم سازی",
"botpasswords-label-cancel": "أنجومشيڤ کردن",
"botpasswords-label-delete": "پاکسا کردن",
"botpasswords-label-resetpassword": "ز نۉ داڌن رازينإ گوأرتن",
+ "botpasswords-label-grants-column": "داڌإ ڤابي",
+ "resetpass-submit-loggedin": "آلشد کردن رازينإ گوڤأرتن",
"resetpass-submit-cancel": "أنجومشيڤ کردن",
"passwordreset": "ز نۉ داڌن رازينإ گوأرتن",
"passwordreset-username": "نوم کارياري",
"anoneditwarning": "'''توجه:''' ایسا داخل سیستم نوابیدین.\nآی پی آدرستو درگزارش اصلاح صفحه ضبط ابوه.",
"summary-preview": "پیش نمایش - خلاصه:",
"blockedtext": " \"'''دسترسی نام کاربری یا نشانی اینترنتی ایسا بسته وابیده.'''\nای کار توسط $1 انجام شدهاست.\nدلیلی که گده اینه: $2''\n* آغاز قطع دسترسی: $8\n* زمان اتمام ای قطع دسترسی: $6\n* کاربری که قطع دسترسیاش در نظر بیده: $7\nایساترین با $1 یا یکی از [[{{MediaWiki:Grouppage-sysop}}|مدیران]] تماس بگیرین و در ای باره صحبت کنین.\nتوجه کنین که ایسا نترین زه امکان «ارسال پست الکترونیکی به ای کاربر» استفاده کنین مگر این که نشانی پست الکترونیکی معتبری در [[Special:Preferences|اولویتهای کاربری]]خود ثبت کرده بوین.\nنشانی IP ایسا $3 و شماره قطع دسترسی ایسا $5 است. لطفاً ای شمارهها را در همه کاوشهاتون ذکر کنین.\nایسا ترین با $1 یا یکی دیه زه [[{{MediaWiki:Grouppage-sysop}}|مدیران]] تماس بگیرین، تا در باره ای قطع دسترسی صحبت کنین.\nدقت کنین که سی ارسال پست الکترونیکی در ویکی، وا پست الکترونیکی خود را زه طریق صفحه[[Special:Preferences|تنظیمات]] فعال کرده بوین، و نیز، وا امکان استفاده زه ای ویژگی سی ایساقطع نبوه.\nنشانی اینترنتی الان ایسا $3 است و شماره قطع دسترسی $5 است.\nلطفاً ای شماره را در هر درخواستی که در ای مورد مطرح اکنین ذکر کنین",
+ "loginreqtitle": "ڤامإن إڤوڌن لازومإ",
"loginreqlink": "ڤامین اوڤیڌن",
+ "accmailtitle": "رازينإ گوڤأرتن فرشناڌإ ڤابيڌإ",
"newarticle": "(تازه)",
"newarticletext": "ايسا ز دين یأ هومپیڤأندي هڌين کإ نيڌس. سي رأڤأندياري بألگإ شورۈ کونين مإن اي جأڤإ دإڤۈني بنڤيسين(سي دونسدن بیشدر سإیل [$1]کونین).\nأر ايسا سي إشتڤاکاري ايچونين، دوگمإ رأهڌن ڤاپوشد نأ بپۈرنين.",
"noarticletext": " ايسإ اي بألگإ نإڤشدإیي نارإ، ايسا تإرين [[Special:Search/{{PAGENAME}}داسۈن اي بألگإ نإ مإن بألگإآ ديأري پی جۈري کونين]] یا [{{fullurl:{{FULLPAGENAME}}|action=edit}} اي بألگإ نأ ڤيرایشد کونين].",
"editing": "درحال اصلاح $1",
"creating": "راسد کردن $1",
"editingsection": "درحال اصلاح $1 (قسمت)",
+ "yourtext": "متن ايسا",
"copyrightwarning": "لطفاً دقت کنین که درنظر گریده ابوه که همه شراکتهای ایسا {{SITENAME}} تحت «$2» منتشر ابون ).\n\n\n(سی دیدن جزئیات بیشتر به $1 برین\n\nایر نه خوین نوشتههاتو بیرحمانه اصلاح بوه و به دلخواه ارسال بوه، ایچو نفرستن.<br />\nدرضمن ایسادارین به ایما قول ادین که خودتو یونه نوشتین یا هونه زه یک منبع آزاد با مالکیت عمومی یا مثل هو ورداشتین. '''کارهای دارای کارهای دارای حق کپی رایت را بیاجازه نفرستین!'''',",
"templatesused": "{{PLURAL:$1|چوٙأ|چوٙأیل}} ب کار گرهڌأ ڤابيڌإ مإن اي بألگأ:",
"templatesusedpreview": "قالبها یا الگوهای استفاده وابیده در ای پیش نمایش:",
"tog-previewonfirst": "Rakwelet tres ar bajenn kerkent hag an aozadenn gentañ",
"tog-enotifwatchlistpages": "Kas ur postel din pa vez kemmet ur bajenn zo war ma roll evezhiañ",
"tog-enotifusertalkpages": "Kas ur postel din pa vez kemmet ma fajenn gaozeal",
- "tog-enotifminoredits": "Kas ur postel din, ha pa vije evit kemenn kemmoù dister",
+ "tog-enotifminoredits": "Kas ur postel din, ha pa vije evit kemenn kemmoù dister war pajennoù pe restroù",
"tog-enotifrevealaddr": "Lakaat ma chomlec'h postel war wel er posteloù kemenn-diwall",
"tog-shownumberswatching": "Diskouez an niver a lennerien",
"tog-oldsig": "Ho sinadur evit poent :",
"tagline": "Eus {{SITENAME}}",
"help": "Skoazell",
"search": "Klask",
+ "search-ignored-headings": " #<!-- lezel al linenn-mañ tre evel m'emañ --> <pre>\n# Titloù a vo lezet a-gostez gant ar c'hlask.\n# Ar c'hemmoù graet amañ a vo lakaet e pleustr kerkent ha menegeret ar bajenn gant an titl.\n# Gallout a rit forsiñ un advenegeriñ ma rit ur c'hemm goullo en ur bajenn.\n# Setu penaos emañ an ereadur :\n# * Kement linenn zo, adalek an arouezenn \"#\" betek dibenn al linenn a zo un evezhiadenn.\n# * Kement linenn ha n'eo ket goullo a verk an titl rik a zo da vezañ lezet a-gostez, pennlizherennoù hag all.\nDaveennoù\nLiammoù diavaez\nGwelet ivez\n #</pre> <!-- lezel al linenn-mañ tre evel m'emañ -->",
"searchbutton": "Klask",
"go": "Kas",
"searcharticle": "Mont",
"ok": "Mat eo",
"retrievedfrom": "Adtapet diwar « $1 »",
"youhavenewmessages": "$1 zo ganeoc'h ($2).",
- "youhavenewmessagesfromusers": "$1 ho peus eus {{PLURAL:$3|un implijer all|$3 implijer}} ($2).",
+ "youhavenewmessagesfromusers": "{{PLURAL:$4|Bez' hoc'h eus}} $1 a-berzh {{PLURAL:$3|un implijer all|$3 implijer}} ($2).",
"youhavenewmessagesmanyusers": " $1 ho peus implijerien a-leizh ($2).",
- "newmessageslinkplural": "{{PLURAL:$1|ur gemennad nevez|999=kemennadoù nevez}}",
- "newmessagesdifflinkplural": "{{PLURAL:$1|kemennad diwezhañ|999=kemennadoù diwezhañ}}",
- "youhavenewmessagesmulti": "Kemennoù nevez zo ganeoc'h war $1",
+ "newmessageslinkplural": "{{PLURAL:$1|ur gemennadenn nevez|999=kemennadennoù nevez}}",
+ "newmessagesdifflinkplural": "{{PLURAL:$1|kemm diwezhañ|999=kemmoù diwezhañ}}",
+ "youhavenewmessagesmulti": "Kemennadennoù nevez zo ganeoc'h war $1",
"editsection": "kemmañ",
"editold": "kemmañ",
"viewsourceold": "sellet ouzh tarzh an destenn",
"databaseerror-query": "Reked : $1",
"databaseerror-function": "Arc'hwel : $1",
"databaseerror-error": "Fazi : $1",
+ "transaction-duration-limit-exceeded": "Kuit da lakaat kreskiñ betek re an termen respont eo bet nullet an treuzgread-mañ rak aet e oa ar pad skrivañ ($1) en tu all d'ar vevenn a $2 eilenn.\nM'emaoc'h o cheñch kalz elfennoù war un dro klaskit kentoc'h troc'hañ anezho e meur a oberiadenn disteroc'h.",
"laggedslavemode": "Diwallit : marteze a-walc'h n'emañ ket ar c'hemmoù diwezhañ war ar bajenn-mañ",
"readonly": "Hizivadurioù stanket war ar bank roadennoù",
"enterlockreason": "Merkit perak eo stanket hag istimit pegeit e chomo evel-henn",
"missingarticle-rev": "(adweladenn # : $1)",
"missingarticle-diff": "(Dif : $1, $2)",
"readonly_lag": "Stanket eo bet ar bank roadennoù ent emgefre p'emañ an eilservijerioù oc'h adpakañ o dale e-keñver ar pennservijer",
+ "nonwrite-api-promise-error": "Kaset e oa bet an talbenn HTTP 'Promise-Non-Write-API-Action' met savet e oa bet ar reked ouzh ur vodulenn skrivañ API.",
"internalerror": "Fazi diabarzh",
"internalerror_info": "Fazi diabarzh : $1",
+ "internalerror-fatal-exception": "Fazi groñs a seurt \"$1\"",
"filecopyerror": "Dibosupl eilañ \"$1\" war-du \"$2\".",
"filerenameerror": "Dibosupl da adenvel « $1 » e « $2 ».",
"filedeleteerror": "Dibosupl eo diverkañ « $1 ».",
"cannotdelete": "Dibosupl diverkañ ar bajenn pe ar restr \"$1\".\nMarteze e o bet diverket gant unan bennak all dija.",
"cannotdelete-title": "N'haller ket diverkañ ar bajenn \"$1\"",
"delete-hook-aborted": "Nullet ar c'hemmañ gant un astenn.\nAbeg dianav.",
+ "no-null-revision": "N'eus ket bet gallet krouiñ un adweladenn nevez c'houllo evit ar bajenn \"$1\"",
"badtitle": "Titl fall",
"badtitletext": "Faziek pe c'houllo eo titl ar bajenn goulennet; pe neuze eo faziek al liamm etreyezhel pe etrewiki.\nMarteze ez eus ennañ arouezennoù n'haller ket degemer en titloù.",
+ "title-invalid-empty": "Pe eo goullo titl ar bajenn c'houlennet pe n'eus ennañ nemet anv an esaouenn anv.",
+ "title-invalid-utf8": "Titl ar bajenn c'houlennet zo ennañ un heuliad UTF-8 direizh.",
+ "title-invalid-interwiki": "Titl ar bajenn c'houlennet zo ennañ ul liamm etrewiki n'haller ket ober gantañ en titloù.",
+ "title-invalid-talk-namespace": "Titl ar bajenn c'houlennet a ra dave d'ur bajenn gaozeal n'eus ket anezhi.",
+ "title-invalid-characters": "Titl ar bajenn c'houlennet zo ennañ arouezennoù direizh : \"$1\".",
+ "title-invalid-relative": "Un hent amvat zo gant an titl. Direizh eo titloù ar pajennoù amvat (./, ../) peogwir e vint dibosupl da dizhout dre merdeerioù implijet gant tud zo.",
+ "title-invalid-magic-tilde": "Titl ar bajenn c'houlennet zo ennañ un heuliad tildennoù burzhudus direizh (<nowiki>~~~</nowiki>).",
+ "title-invalid-too-long": "Re hir eo titl ar bajenn c'houlennet. N'hall ket bezañ hiroc'h eget $1 {{PLURAL:$1|okted}} er c'hod UTF-8.",
+ "title-invalid-leading-colon": "Titl ar bajenn c'houlennet zo ennañ un daoubik direizh er penn-kentañ.",
"perfcached": "Krubuilhet eo ar roadennoù da-heul ha marteze n'int ket bet hizivaet. D'ar muiañ e c'haller kaout {{PLURAL:$1|un disoc'h|$1 disoc'h}} er grubuilh.",
"perfcachedts": "Krubuilhet eo ar roadennoù da-heul hag hizivaet int bet da ziwezhañ d'an $1. D'ar muiañ e c'haller kaout {{PLURAL:$4|un disoc'h|$4 disoc'h}} er grubuilh.",
"querypage-no-updates": "Diweredekaet eo an hizivaat evit ar bajenn-mañ. Evit poent ne vo ket nevesaet ar roadennoù amañ.",
"viewsource": "Sellet ouzh tarzh an destenn",
"viewsource-title": "Gwelet an tarzh evit $1",
"actionthrottled": "Ober daleet",
- "actionthrottledtext": "A-benn dizarbenn ar strob, n'haller ket implijout an ober-mañ re alies en ur frapad amzer lakaet, hag aet oc'h dreist ar muzul. Klaskit en-dro a-benn un nebeut munutennoù.",
+ "actionthrottledtext": "A-benn dizarbenn ar strob, n'haller ket implijout an ober-mañ re alies en ur frapad amzer lakaet, hag aet oc'h dreist ar muzul. Klaskit en-dro a-benn un nebeudig munutennoù.",
"protectedpagetext": "Prennet eo bet ar bajenn-mañ kuit na vefe skrivet pe cheñchet un dra bennak enni",
- "viewsourcetext": "Gallout a rit gwelet hag eilañ danvez ar bajenn-mañ",
+ "viewsourcetext": "Gallout a rit gwelet hag eilañ mammenn ar bajenn-mañ.",
"viewyourtext": "Gallout a rit gwelet hag eilañ mammenn ho <strong>kemmoù</strong> d'ar bajenn-mañ.",
"protectedinterface": "Testenn ar bajenn-mañ a dalvez evit etrefas ar meziant er wiki-mañ. Setu perak eo bet gwarezet ar bajenn.",
"editinginterface": "'''Diwallit :''' Emaoc'h o kempenn ur bajenn a dalvez da sevel skridoù evit etrefas ar meziant. Ar c'hemmoù graet d'ar bajenn-mañ a cheñcho etrefas an holl implijerien. Mar fell deoc'h skoazellañ evit treiñ traoù, soñjit kentoc'h implijout [https://translatewiki.net/wiki/Main_Page?setlang=br translatewiki.net], ar raktres evit lec'helaat MediaWiki.",
- "cascadeprotected": "Gwarezet eo ar bajenn-mañ; n'haller ket kemmañ anezhi ken p'he c'haver {{PLURAL:$1|er bajenn|e-mesk ar pajennoù}} da-heul zo bet gwarezet en ur zibab an dibarzh \"skalierad\" :\n$2",
+ "translateinterface": "Evit ouzhpennañ pe cheñch troidigezhioù en holl wikioù, grit gant [https://translatewiki.net/ translatewiki.net], anezhañ raktres lec'helaat MediaWiki.",
+ "cascadeprotected": "Gwarezet eo ar bajenn-mañ ; n'haller ket kemmañ anezhi ken p'he c'haver treuzkludet {{PLURAL:$1|er bajenn|e-mesk ar pajennoù}} da-heul zo bet gwarezet en ur zibab an dibarzh \"skalierad\" :\n$2",
"namespaceprotected": "N'oc'h ket aotreet da gemmañ pajennoù an esaouenn anv '''$1'''.",
"customcssprotected": "N'oc'h ket aotreet da gemmañ ar bajenn CSS-mañ rak kavout a reer enni arventennoù personel un implijer all.",
"customjsprotected": "N'oc'h ket aotreet da gemmañ ar bajenn JavaScript-mañ rak kavout a reer enni arventennoù personel un implijer all.",
"mypreferencesprotected": "N'ho peus ket ar gwirioù evit kemmañ ho Penndibaboù.",
"ns-specialprotected": "N'haller ket kemmañ ar pajennoù en esaouenn anv {{ns:special}}.",
"titleprotected": "Gwarezet eo bet an titl-mañ p'eo bet krouet gant [[User:$1|$1]].\nSetu amañ perak <em>$2</em>.",
- "filereadonlyerror": "Dibosupl kemmañ ar restr \"$1\" abalamour m'emañ ar c'havlec'h restroù \"$2\" e mod lenn nemetken.\n\n\"''$3''\" eo an abeg roet gant ar merour en deus prennet anezhi.",
+ "filereadonlyerror": "Dibosupl kemmañ ar restr \"$1\" abalamour m'emañ ar c'havlec'h restroù \"$2\" e mod lenn nemetken.\n\n\"$3\" eo an abeg roet gant merour ar reizhiad en deus prennet anezhi.",
"invalidtitle-knownnamespace": "Titl direizh gant an esaouenn anv \"$2\" hag an destenn \"$3\"",
"invalidtitle-unknownnamespace": "Titl direizh gant an niverenn esaouenn anv $1 hag an destenn \"$2\" dianav",
"exception-nologin": "N'oc'h ket kevreet",
"yourname": "Anv implijer :",
"userlogin-yourname": "Anv implijer",
"userlogin-yourname-ph": "Merkit hoc'h anv implijer",
- "createacct-another-username-ph": "Ebarzhiñ an anv implijer",
+ "createacct-another-username-ph": "Merkañ an anv implijer",
"yourpassword": "Ger-tremen :",
"userlogin-yourpassword": "Ger-tremen",
"userlogin-yourpassword-ph": "Merkit ho ker-tremen",
"createacct-emailrequired": "Chomlec'h postel",
"createacct-emailoptional": "Chomlec'h postel (diret)",
"createacct-email-ph": "Skrivit ho chomlec'h postel",
- "createacct-another-email-ph": "Ebarzhiñ ur chomlec'h postel",
+ "createacct-another-email-ph": "Merkañ ur chomlec'h postel",
"createaccountmail": "Implijout ur ger-tremen dibad ha kas anezhañ d'ar chomlec'h postel diferetDre bostel",
"createaccountmail-help": "Gallout a ra bezañ implijet evit krouiñ ur gont evit unan bennak all hep gouzout ar ger-tremen.",
"createacct-realname": "Anv gwir (diret)",
"wrongpassword": "Ger-tremen kamm. Klaskit en-dro.",
"wrongpasswordempty": "Ger-tremen ebet. Lakait unan mar plij.",
"passwordtooshort": "{{PLURAL:$1|1 arouezenn|$1 arouezenn}} hir a rank bezañ ar gerioù-tremen da nebeutañ.",
- "passwordtoolong": "N'hall ket ar gerioù-tremen bezañ enno ouzhpenn $1 arouezenn.",
+ "passwordtoolong": "N'hall ket ar gerioù-tremen bezañ enno ouzhpenn $1 {{PLURAL:$1|1 arouezenn|$1 arouezenn}}.",
+ "passwordtoopopular": "N'haller ket ober gant gerioù-ter boutin betek re. Grit gant ur ger-tremen raloc'h.",
"password-name-match": "Rankout a ra ho ker-tremen bezañ disheñvel diouzh hoc'h anv implijer.",
"password-login-forbidden": "Berzet eo ober gant an anv implijer hag ar ger-tremen-mañ.",
"mailmypassword": "Adderaouekaat ar ger-tremen",
"noemail": "N'eus bet enrollet chomlec'h postel ebet evit an implijer \"$1\".",
"noemailcreate": "Ret eo deoc'h merkañ ur chomlec'h postel reizh",
"passwordsent": "Kaset ez eus bet ur ger-tremen nevez da chomlec'h postel an implijer \"$1\".\nTrugarez deoc'h da gevreañ kerkent ha ma vo bet resevet ganeoc'h.",
- "blocked-mailpassword": "N'haller ket kemmañ pajennoù gant ar chomlec'h IP-mañ ken rak stanket eo bet. Gant se n'hallit ket implijout an arc'hwel adtapout gerioù-tremen, kuit m'en em ledfe gwallimplijoù.",
+ "blocked-mailpassword": "N'haller ket kemmañ pajennoù gant ar chomlec'h IP-mañ ken rak stanket eo bet. Kuit m'en em ledfe gwallimplijoù n'hallit ket implijout an arc'hwel adtapout gerioù-tremen adalek ar chomlec'h IP-mañ.",
"eauthentsent": "Kaset ez eus bet ur postel kadarnaat war-du ar chomlec'h postel spisaet.\nA-raok na vije kaset postel ebet d'ar gont-se e vo ret deoc'h heuliañ ar c'huzulioù merket er postel resevet evit kadarnaat ez eo mat ho kont deoc'h.",
"throttled-mailpassword": "Kaset ez eus bet deoc'h ur postel adderaouekaat e-kerzh an\n{{PLURAL:$1|eurvezh|$1 eurvezh}} tremenet. Evit mirout ouzh nep gaou ne gaser ket ouzhpenn ur postel a seurt-se bep {{PLURAL:$1|eurvezh|$1 eurvezh}}.",
"mailerror": "Fazi en ur gas ar postel : $1",
- "acct_creation_throttle_hit": "{{PLURAL:$1|1 gont|$1 kont}} zo bet krouet c'hoazh nevez zo dre ho chomlec'h IP gant gweladennerien d'ar wiki-mañ, ar pezh zo an niver brasañ aotreet. Dre se, n'hall ket ket ar weladennerien a implij an IP-mañ krouiñ kontoù mui evit ar mare.",
+ "acct_creation_throttle_hit": "Gweladennerien zo o deus implijet ho chomlec'h IP evit krouiñ {{PLURAL:$1|1 gont|$1 kont}} e-kerzh an $2 diwezhañ, ar pezh zo an niver brasañ aotreet. Dre se, n'hall ket ket ar weladennerien a implij an IP-mañ krouiñ kontoù mui evit ar mare.",
"emailauthenticated": "Gwiriet eo bet ho chomlec'h postel d'an $2 da $3.",
"emailnotauthenticated": "N'eo ket bet gwiriekaet ho chomlec'h postel evit c'hoazh.\nNe vo ket tu da gas postel ebet deoc'h evit hini ebet eus an dezverkoù dindan.",
"noemailprefs": "Merkit ur chomlec'h postel mar fell deoc'h ez afe an arc'hwelioù-mañ en-dro.",
"botpasswords-label-delete": "Dilemel",
"botpasswords-label-resetpassword": "Adderaouekaat ar ger-tremen",
"botpasswords-label-grants": "Aotreoù a c'haller ober ganto :",
+ "botpasswords-help-grants": "Gant an aotreoù e c'haller kaout ar gwirioù grataet d'ho kont implijer. N'eo ket peogwir e vo gweredekaet un aotre amañ e vo digoret gwirioù ouzhpenn deoc'h estreget ar re zo stag ouzh ho kont implijer. Kit da welet [[Special:ListGrants|taolenn an aotreoù]] evit gouzout hiroc'h.",
"botpasswords-label-grants-column": "Aotreet",
"botpasswords-bad-appid": "N'eo ket reizh anv ar robot « $1 »",
"botpasswords-insert-failed": "C'hwitet eo ouzhpennadenn ar robot « $1 ». Hag ouzhpennet eo bet ?",
"botpasswords-update-failed": "C'hwitet eo bet hizivadur anv ar robot « $1 ». Ha dilamet eo bet ?",
"botpasswords-created-title": "Ger-tremen robotoù krouet",
- "botpasswords-created-body": "Krouet mat eo bet ar ger-tremen « $1 ».",
+ "botpasswords-created-body": "Krouet eo bet ger-tremen ar robot \"$1\" evit an implijer \"$2\".",
"botpasswords-updated-title": "Ger-tremen robotoù hizivaet",
- "botpasswords-updated-body": "Hizivaet mat eo bet ar ger-tremen « $1 ».",
+ "botpasswords-updated-body": "Hizivaet mat eo bet ger-tremen ar robot \"$1\" evit an implijer \"$2\".",
"botpasswords-deleted-title": "Ger-tremen robotoù dilamet",
- "botpasswords-deleted-body": "Ar ger-tremen robotoù « $1 » zo bet dilamet.",
- "botpasswords-newpassword": "<strong>\"$2\"</strong> eo ar ger-tremen evit kevreañ gant <strong>$1</strong>. Enrollit anezhañ, par plij, evit ober dave dezhañ diwezhatoc'h.</em>",
+ "botpasswords-deleted-body": "Dilamet eo bet ger-tremen ar robot \"$1\" evit an implijer \"$2\".",
+ "botpasswords-newpassword": "<strong>\"$2\"</strong> eo ar ger-tremen nevez evit kevreañ ouzh <strong>$1</strong>. Enrollit anezhañ evit ober dave dezhañ diwezhatoc'h.</em>(Evit ar robotoù kozh zo rekis evito e vefe heñvel an anv kevreañ ouzh hini an implijer a c'hall bezañ, e c'hallit ober gant <strong>$3</strong> da anv implijer ha gant <strong>$4</strong> evel ger-tremen).",
"botpasswords-no-provider": "N'eo ket hegerz BotPasswordsSessionProvider.",
+ "botpasswords-restriction-failed": "N'hallit ket kevreañ abalamour d'ar strishadurioù war gerioù-tremen ar robotoù.",
+ "botpasswords-invalid-name": "N'eus ket a zispartier gerioù-tremen robot en anv implijer spisaet (\"$1\").",
"botpasswords-not-exist": "N'eus ger-tremen bot ebet anvet \"$2\" gant an implijer \"$1\".",
"resetpass_forbidden": "N'haller ket cheñch ar gerioù-termen",
"resetpass_forbidden-reason": "N'haller ket cheñch ar gerioù-termen : $1",
"resetpass-temp-password": "Ger-tremen da c'hortoz :",
"resetpass-abort-generic": "Nullet eo bet kemm ar ger-tremen gant un astenn.",
"resetpass-expired": "Deuet eo ho ker-tremen d'e dermen. Lakait ur ger-tremen nevez, mar plij, evit kevreañ.",
+ "resetpass-expired-soft": "Aet eo ho ker-tremen d'e dermen, ret eo adderaouekaat anezhañ. Dibabit ur ger-tremen nevez diouzhtu pe klikit war \"{{int:authprovider-resetpass-skip-label}}\" evit ober war-dro diwezhatoc'h.",
+ "resetpass-validity-soft": "Direizh eo ho ker-tremen : $1\n\nDibabit ur ger-tremen nevez diouzhtu, pe klikit war \"{{int:authprovider-resetpass-skip-label}}\" evit ober war-dro diwezhatoc'h.",
"passwordreset": "Adderaouekaat ar ger-tremen",
"passwordreset-text-one": "Leugnit ar furmskrid-mañ evit adderaouekaat ho ker-tremen.",
"passwordreset-text-many": "{{PLURAL:$1|Leugnit unan eus ar maeziennoù da adderaouekaat ho ker-tremen.}}",
"passwordreset-emailtext-ip": "Unan bennak (c'hwi moarvat gant ar chomlec'h IP $1) en deus goulennet ma vefe degaset soñj dezhañ eus titouroù e gont evit {{SITENAME}} ($4). Emañ liammet {{PLURAL:$3|ar gont implijer|ar c'hontoù implijer}} da-heul gant ar chomlec'h postel-mañ :\n\n$2\n\nMont a raio da get {{PLURAL:$3|ar ger-tremen da c'hortoz|ar gerioù-tremen da c'hortoz}} a-benn {{PLURAL:$5|un devezh|$5 deiz}}.\nMat e vefe deoc'h kevreañ ha dibab ur ger-tremen nevez bremañ. Mard eo bet goulennet kement-se gant unan bennak all pe m'hoc'h eus soñj eus ho ker-tremen orin ha mar ne fell ket deoc'h e cheñch ken, na daolit ket evezh ouzh ar gemennadenn-mañ ha dalc'hit d'ober gant ho ker-tremen kozh.",
"passwordreset-emailtext-user": "Goulennet en deus an implijer $1 war {{SITENAME}} e vefe degaset soñj dezhañ eus titouroù e gont evit {{SITENAME}} ($4). Emañ liammet {{PLURAL:$3|ar gont implijer|ar c'hontoù implijer}} da-heul gant ar chomlec'h postel-mañ :\n\n$2\n\nMont a raio da get {{PLURAL:$3|ar ger-tremen da c'hortoz|ar gerioù-tremen da c'hortoz}} a-benn {{PLURAL:$5|un devezh|$5 deiz}}.\nMat e vefe deoc'h kevreañ ha dibab ur ger-tremen nevez bremañ. Mard eo bet goulennet kement-se gant unan bennak all pe m'hoc'h eus soñj eus ho ker-tremen orin ha mar ne fell ket deoc'h e cheñch ken, na daolit ket evezh ouzh ar gemennadenn-mañ ha dalc'hit d'ober gant ho ker-tremen kozh.",
"passwordreset-emailelement": "Anv implijer : \n$1\n\nGer-tremen da c'hortoz : \n$2",
- "passwordreset-emailsentemail": "Kaset ez eus bet ur postel deoc'h da adderaouekaat ho ker-tremen.",
+ "passwordreset-emailsentemail": "Mard eo liammet ar chomlec'h postel-mañ ouzh ho kont, neuze e vo kaset ur postel deoc'h da adderaouekaat ho ker-tremen.",
+ "passwordreset-emailsentusername": "Mard eo liammet ar chomlec'h postel-mañ gant an anv implijer-mañ, neuze e vo kaset ur postel deoc'h da adderaouekaat ho ker-tremen.",
"passwordreset-nocaller": "Ret eo merkañ anv ur galver",
"passwordreset-nosuchcaller": "N'eus ket eus ar galver : $1",
+ "passwordreset-ignored": "N'eus ket bet gallet adderaouekaat ar ger-termen. Marteze a-walc'h peogwir n'eus ket bet kefluniet pourvezer ebet ?",
"passwordreset-invalidemail": "Chomlec'h postel direizh",
"passwordreset-nodata": "N'eus bet lakaet anv implijer na chomlec'h postel ebet",
"changeemail": "Kemmañ pe dilemel ar chomlec'h postel",
- "changeemail-header": "Kemmañ chomlec'h postel ar gont",
+ "changeemail-header": "Leuniit ar furmskrid-mañ evit cheñch ho chomlec'h postel. Mar fell deoc'h distagañ ur chomlec'h postel bennak diouzh ho kont, lezit goullo lec'h ar chomlec'h postel nevez a-raok kadarnaat ar furmskrid.",
"changeemail-no-info": "Ret eo deoc'h bezañ kevreet a-benn mont d'ar bajenn-se war-eeun.",
"changeemail-oldemail": "Chomlec'h postel a-vremañ :",
"changeemail-newemail": "Chomlec'h postel nevez :",
+ "changeemail-newemail-help": "Goullo e tlefe chom ar vaezienn-mañ mar fell deoc'h lemel kuit ho chomlec'h postel. Ne viot ket gouest da adderaouekaat ur ger-tremen ankouaet ganeoc'h ken ha ne resevot postel ebet a-berzh ar wiki-mañ ma lamit kuit ar chomlec'h postel.",
"changeemail-none": "(hini ebet)",
"changeemail-password": "Ho ker-tremen war {{SITENAME}}:",
"changeemail-submit": "Cheñch chomlec'h postel",
"changeemail-throttled": "Betek re hoc'h heus klasket kevreañ en aner.\nGortozit $1, mar plij, a-raok esaeañ en-dro.",
"changeemail-nochange": "Merkit ur chomlec'h postel all.",
"resettokens": "Adderaouekaat ar jedoueroù",
+ "resettokens-text": "Gallout a ri adderaouekaat amañ ar jedoueroù a aotre ac'hanoc'h da vont war roadennoù prevez zo hag a zo staget ouzh ho kont.\n\nMat e vefe deoc'h en ober m'hoc'h eus rannet anezho gant unan bennak dre fazi pe mard eo bet implijet ho kont gant unan bennak all mod pe vod.",
"resettokens-no-tokens": "N'eus jedouer ebet da adderaouekaat.",
"resettokens-tokens": "Jedoueroù :",
"resettokens-token-label": "$1 (talvoud bremañ : $2)",
+ "resettokens-watchlist-token": "Jedouer evit lanvad web (Atom/RSS) [[Special:Watchlist|kemmañ pajennoù eus ho roll evezhiañ]]",
"resettokens-done": "Jedoueroù adderaouekaet.",
"resettokens-resetbutton": "Adderaouekaat ar jedoueroù diuzet",
"bold_sample": "Testenn dev",
"preview": "Rakwelet",
"showpreview": "Rakwelet",
"showdiff": "Diskouez ar c'hemmoù",
+ "blankarticle": "<strong>Taolit evezh :</strong> Goullo eo ar bajenn emaoc'h o krouiñ.\nMar klikit war \"{{int:savearticle}}\" en-dro e vo krouet hep netra ebet e-barzh.",
"anoneditwarning": "</strong>Diwallit :</strong> N'oc'h ket kevreet.\nGallout a raio an holl dud gwelet ho chomlec'h IP ma rit kemmoù. Ma <strong>[$1kevreit]</strong>pe<strong>[$2 krouit ur gont]</strong>, e vo deroet ho kemmoù d'hoc'h anv-implijer, e-touez spletoù all.",
"anonpreviewwarning": "''N'oc'h ket kevreet. Enrollañ a lakao war-wel ho chomlec'h IP e istor kemmoù ar bajenn.''",
"missingsummary": "'''Taolit evezh:''' N'hoc'h eus ket lakaet tamm testenn diverrañ ebet evit ho kemmoù. Mar klikit war enrollañ en-dro, e vo enrollet ho testenn evel m'emañ hepmuiken.",
+ "selfredirect": "<strong>Taolit evezh :</strong> Emaoc'h oc'h adkas ar bajenn-mañ warni hec'h-unan.\nPe hoc'h eus spisaet ur pal a-dreuz evit an adkas pe emaoc'h o cheñch ur bajenn n'emañ ket da vezañ cheñchet evel-se.\nMar klikit war \"{{int:savearticle}}\" en-dro, e vo krouet an adkas forzh penaos.",
"missingcommenttext": "Skrivit hoc'h evezhiadenn a-is.",
- "missingcommentheader": "'''Taolit evezh :''' N'hoc'h eus lakaet tamm danvez/titl ebet d'hoc'h evezhiadenn.\nMar klikit war \"{{int:savearticle}}\" en-dro, e vo enrollet ho testenn evel m'emañ hepmuiken.",
- "summary-preview": "Rakwelet an diverrañ :",
+ "missingcommentheader": "<strong>Taolit evezh :</strong> N'hoc'h eus lakaet tamm danvez/titl ebet d'hoc'h evezhiadenn.\nMar klikit war \"{{int:savearticle}}\" en-dro, e vo enrollet ho testenn evel m'emañ hepmuiken.",
+ "summary-preview": "Rakwelet un diverrañ eus ar c'hemmoù :",
"subject-preview": "Rakwelet an danvez :",
"previewerrortext": "C'hoarvezet ez eus ur fazi e-ser klask rakwelet ho kemmoù",
"blockedtitle": "Implijer stanket",
"blockedtext": "'''Stanket eo bet ho kont implijer pe ho chomlec'h IP'''\n\nGant $1 eo bet graet.\nSetu an abeg evit se : ''$2''.\n\n* Stanket adalek : $8\n* Stanket betek : $6\n* Pad ar stankadenn : $7\n\nGallout a rit mont e darempred gant $1 pe gant unan eus ar [[{{MediaWiki:Grouppage-sysop}}|verourien]] all evit eskemm ganto war se. N'hallit implijout an arc'hwel 'kas ur postel d'an implijer-mañ' nemet ma'z eus bet spisaet ganeoc'h ur chomlec'h postel reizh en ho [[Special:Preferences|penndibaboù kont]] ha ma n'eo ket bet stanket.\n$3 eo ho chomlec'h IP, ha #$5 eo niverenn an identelezh stanket.\nMerkit anezho en ho koulennoù bep tro.",
"autoblockedtext": "Stanket eo bet ho chomlec'h IP ent emgefreek rak implijet e veze gant un implijer all bet stanket gant $1.\nSetu aze an abeg :\n\n: ''$2''\n\n* Deroù ar stankadenn : $8\n* Termen ar stankadenn : $6\n* Kont stanket : $7\n\nGallout a rit mont e darempred gant $1 pe gant unan eus ar\n[[{{MediaWiki:Grouppage-sysop}}|verourien]] all ma kavit abeg er stankadenn.\n\nNotennit mat ne c'hallot implijout an dibarzh \"kas ur postel d'an implijer\" nemet ma'z eus bet merket ganeoc'h ur chomlec'h postel reizh en ho [[Special:Preferences|penndibaboù implijer]] ha ma n'eo ket bet stanket ivez.\n\n$3 eo ho chomlec'h IP evit poent ha #$5 ho niverenn stankadenn.\nMerkit mat an titouroù-se war kement goulenn savet ganeoc'h.\n\n$5 eo ho niverenn stankadenn. Merkit mat an niverenn-se pa rit goulennoù.",
+ "systemblockedtext": "Stanket eo bet hoc'h anv implijer pe ho chomlec'h IP ent emgefre gant MediaWiki.\nSetu perak :\n\n:<em>$2</em>\n\n* Deroù ar stankadenn : $8\n* Termen ar stankadenn : $6\n* Hinienn a sell ar stankadenn outi : $7\n\n$3 eo ho chomlec'h IP diouzhtu.\nMerkit mat ar munudoù skrivet a-us er c'hlemmoù a c'halljec'h ober.",
"blockednoreason": "n'eus bet roet abeg ebet",
"whitelistedittext": "Ret eo deoc'h en em $1 evit gallout skridaozañ.",
"confirmedittext": "Rankout a ri bezañ kadarnaet ho chomlec'h postel a-raok gallout kemmañ pajennoù. Skrivit ha kadarnait ho chomlec'h postel en ho [[Special:Preferences|penndibaboù implijer]] mar plij.",
"accmailtext": "Kaset ez eus bet ur ger-tremen dargouezhek evit [[User talk:$1|$1]] da $2. Cheñchet e c'hall ar ger-tremen evit ar gont nevez-mañ bezañ war ar bajenn ''[[Special:ChangePassword|cheñch ger-tremen]]'', ur wezh kevreet.",
"newarticle": "(Nevez)",
"newarticletext": "Heuliet hoc'h eus ul liamm a gas d'ur bajenn n'eo ket bet savet evit c'hoazh.\nA-benn krouiñ ar bajenn-se, krogit da skrivañ er prenestr skridaozañ dindan (gwelet ar [$1 bajenn skoazell] evit gouzout hiroc'h).\nM'emaoc'h en em gavet amañ dre fazi, klikit war bouton '''kent''' ho merdeer evit mont war ho kiz.",
- "anontalkpagetext": "---- ''Homañ eo ar bajenn gaozeal evit un implijer(ez) dizanv n'eus ket krouet kont ebet evit c'hoazh pe na implij ket anezhi.\nSetu perak e rankomp ober gant ar chomlec'h IP niverel evit anavezout anezhañ/i.\nGallout a ra ur chomlec'h a seurt-se bezañ rannet etre meur a implijer(ez).\nMa'z oc'h un implijer(ez) dizanv ha ma stadit ez eus bet kaset deoc'h kemennadennoù na sellont ket ouzhoc'h, gallout a rit [[Special:CreateAccount|krouiñ ur gont]]pe [[Special:UserLogin|kevreañ]] kuit a vagañ muioc'h a gemmesk gant implijerien dizanv all.",
+ "anontalkpagetext": "<em>Homañ eo ar bajenn gaozeal evit un implijer dizanv n'en deus ket krouet kont ebet evit c'hoazh pe na implij ket anezhi</em>.\nSetu perak e rankomp ober gant ar chomlec'h IP niverel evit anavezout anezhañ.\nGallout a ra ur chomlec'h a seurt-se bezañ rannet etre meur a implijer.\nMa'z oc'h un implijer dizanv ha ma stadit ez eus bet kaset deoc'h kemennadennoù na sellont ket ouzhoc'h, gallout a rit [[Special:CreateAccount|krouiñ ur gont]] pe [[Special:UserLogin|kevreañ]] kuit a vagañ muioc'h a gemmesk gant implijerien dizanv all.",
"noarticletext": "N'eus tamm skrid ebet war ar bajenn-mañ evit poent.\nGallout a rit [[Special:Search/{{PAGENAME}}|klask an titl anezhi]] e pajennoù all,\n<span class=\"plainlinks\">[{{fullurl:{{#Special:Log}}|page={{FULLPAGENAMEE}}}} klask en oberiadennoù liammet], pe [{{fullurl:{{FULLPAGENAME}}|action=edit}} krouiñ ar bajenn]</span>.",
"noarticletext-nopermission": "N'eus, evit ar mare, tamm testenn ebet war ar bajenn-mañ.\nGallout a rit [[Special:Search/{{PAGENAME}}|klask titl ar bajenn-mañ]] war pajennoù all,\npe <span class=\"plainlinks\">[{{fullurl:{{#Special:Log}}|page={{FULLPAGENAMEE}}}} klask er marilhoù kar]</span>, met n'oc'h ket aotreet da grouiñ ar bajenn-mañ.",
"missing-revision": "N'eus ket eus adwel niv. $1 eus ar bajenn anvet « {{FULLPAGENAME}} ».\n\nC'hoarvezout a ra peurliesañ pa vez heuliet ul liamm istorel dispredet war-zu ur bajenn zo bet dilamet.\nGallout a reot kavout muioc'h a vunudoù e [{{fullurl:{{#Special:Log}}/delete|page={{FULLPAGENAMEE}}}} renabl an dilamadurioù].",
"userpage-userdoesnotexist": "N'eo ket enrollet ar gont \"<nowiki>$1</nowiki>\". Merkit ma fell deoc'h krouiñ/kemmañ ar bajenn-mañ.",
"userpage-userdoesnotexist-view": "N'eo ket enrollet ar gont implijer \"$1\".",
"blocked-notice-logextract": "Stanket eo an implijer-mañ evit poent.\nDindan emañ merket moned diwezhañ marilh ar stankadennoù, d'ho kelaouiñ :",
- "clearyourcache": "Notenn :''' Goude bezañ enrollet ho pajenn e rankot freskaat krubuilh ho merdeer a-benn gwelet ar c'hemmoù.\n* '''Firefox / Safari:''' Derc'hel da bouezañ war ''Pennlizherenn'' en ur glikañ war ''Adkargañ'', pe pouezañ war ''Ctrl-F5'' pe ''Ctrl-R'' (''⌘-R'' war ur Mac); \n* ''''Google Chrome:''' Pouezañ war ''Ctrl-Pennlizh-R'' (''⌘-Shift-R'' war ur Mac)\n* '''Internet Explorer:''' Derc'hel da bouezañ war ''Ctrl'' en ur glikañ war ''Freskaat,'' pe pouezañ war ''Ctrl-F5''\n* ''''Konqueror: '''Klikañ war ''Adkargañ'' pe pouezañ war ''F5;'' \n* '''Opera:''' Riñsañ ar grubuilh e ''Ostilhoù → Penndibaboù''",
+ "clearyourcache": "<strong>Notenn :</strong> Goude bezañ enrollet ho pajenn e rankot freskaat krubuilh ho merdeer a-benn gwelet ar c'hemmoù.\n* <strong>Firefox / Safari:</strong> Derc'hel da bouezañ war <em>Pennlizherenn</em> en ur glikañ war <em>Adkargañ</em>, pe pouezañ war <em>Ctrl-F5</em> pe <em>Ctrl-R</em> (<em>⌘-R</em> war ur Mac); \n* <strong>Google Chrome:</strong> Pouezañ war <em>Ctrl-Pennlizh-R</em> (<em>⌘-Shift-R</em> war ur Mac)\n* <strong>Internet Explorer :</strong> Derc'hel da bouezañ war <em>Ctrl</em> en ur glikañ war <em>Freskaat</em>, pe pouezañ war <em>Ctrl-F5</em>\n* <strong>Konqueror :</strong> Klikañ war <em>Adkargañ</em> pe pouezañ war <em>F5</em>\n* <strong>Opera :</strong> Mont da <em>Arventennoù → lañser</em> (<em>Opera → Penndibaboù</em> war ur Mac) ha goude mont da <em>Prevezded & surentez → Riñsañ roadennoù ar grubuilh → Skeudennoù krubuilhet ha restroù</em>.",
"usercssyoucanpreview": "'''Tun :''' Grit gant ar bouton \"{{int:showpreview}}\" evit testiñ ho follenn CSS nevez a-raok enrollañ anezhi.",
"userjsyoucanpreview": "'''Tun :''' Grit gant ar bouton \"{{int:showpreview}}\" evit testiñ ho follenn JS nevez a-raok enrollañ anezhi.",
"usercsspreview": "'''Dalc'hit soñj n'emaoc'h ken nemet o rakwelet ho follenn CSS deoc'h.'''\n'''N'eo ket bet enrollet evit c'hoazh!'''",
"previewnote": "'''Diwallit mat, n'eus ken ur rakweled eus an destenn-mañ.'''\nN'eo ket bet enrollet ho kemmoù evit c'hoazh !",
"continue-editing": "Mont d'an takad kemmañ",
"previewconflict": "Gant ar rakweled e teu testenn ar bajenn war wel evel ma vo pa vo bet enrollet.",
- "session_fail_preview": "'''Ho tigarez! N'eus ket bet tu da enrollañ ho kemmoù rak kollet eo bet roadennoù an dalc'h.'''\nKlaskit en-dro mar plij.\nMa ne'z a ket en-dro c'hoazh, klaskit [[Special:UserLogout|digevreañ]] hag adkevreañ war-lerc'h.",
- "session_fail_preview_html": "'''Ho tigarez! N'omp ket bet gouest da enrollañ ho kemmoù rak kollet ez eus bet roadennoù e-kerzh an dalc'h.'''\n\n''Gweredekaet eo al linennoù HTML e {{SITENAME}}. Rak-se eo kuzh ar rakweledoù a-benn en em zifenn diouzh an tagadennoù JavaScript.''\n\n'''Mard e oa onest ar c'hemmoù hoc'h eus klasket degas, klaskit en-dro. '''\nMar ned a ket en-dro, klaskit [[Special:UserLogout|digevreañ]] ha kevreañ en-dro.",
+ "session_fail_preview": "Ho tigarez ! N'eus ket bet tu da enrollañ ho kemmoù rak kollet eo bet roadennoù an dalc'h.\n\nMarteze n'oc'h ket kevreet ken. <strong>Gwiriit emaoc'h mat kevreet ha klaskit en-dro</strong>.\n\nMa ne'z a ket en-dro, klaskit [Special:UserLogout|digevreañ]] hag adkevreañ war-lerc'h. Gwiriit e asant mat ho merdeet resev toupinoù a-berzh al lec'hienn-mañ ivez.",
+ "session_fail_preview_html": "Ho tigarez ! N'omp ket bet gouest da enrollañ ho kemmoù rak kollet ez eus bet roadennoù e-kerzh an dalc'h.\n\n<em>Gweredekaet eo al linennoù HTML e {{SITENAME}}. Rak-se eo kuzh ar rakweledoù a-benn en em zifenn diouzh an tagadennoù JavaScript.</em>\n\n<strong>Ma oa reizh ar c'hemmoù hoc'h eus klasket degas, klaskit en-dro.</strong>\nMa ned a ket en-dro, klaskit [[Special:UserLogout|digevreañ]] hag adkevreañ goude. Gwiriit e asant mat ho merdeer degemer toupinoù a-berzh al lec'hienn-mañ ivez.",
"token_suffix_mismatch": "'''Distaolet eo bet ar c'hemmoù degaset ganeoc'h abalamour ma oa bet kemmesket an arouezennoù poentadur gant ho merdeer en daveer kemmañ. Distaolet eo bet ar c'hemmoù kuit na vije breinet ar bajennad skrid.\nC'hoarvezout a ra a-wechoù pa implijit ur servijer proksi dreinek dizanav.'''",
"edit_form_incomplete": "'''Darn eus ar furmskrid kemmañ zo chomet hep tizhout ar servijer ; gwiriit ervat emañ mat ho kemmoù tre evel m'int bet graet ganeoc'h ha klaskit en-dro.'''",
"editing": "Oc'h aozañ $1",
"yourdiff": "Diforc'hioù",
"copyrightwarning": "Sellet e vez ouzh an holl degasadennoù graet war {{SITENAME}} evel ouzh degasadennoù a zouj da dermenoù ar $2 (Sellet ouzh $1 evit gouzout hiroc'h). Mar ne fell ket deoc'h e vefe embannet ha skignet ho skridoù, arabat kas anezho.<br />\nHeñveldra, prometiñ a rit kemer perzh dre zegas skridoù savet ganeoc'h hepken pe tennet eus ur vammenn frank a wirioù.\n'''NA IMPLIJIT KET LABOURIOÙ GANT GWIRIOÙ AOZER (COPYRIGHT) HEP AOTRE D'OBER KEMENT-SE!'''",
"copyrightwarning2": "Notit mat e c'hall kement degasadenn graet ganeoc'h war {{SITENAME}} bezañ kemmet, adaozet pe lamet kuit gant an implijerien all. Mar ne fell ket deoc'h e vije kemmet-digemmet ar pezh hoc'h eus skrivet na gemerit ket perzh er raktres-mañ.<br /> Gouestlañ a rit ivez eo bet savet ar boued spered ganeoc'h pe eilet diwar ur vammenn frank a wirioù pe en domani foran (gwelet $1 evit gouzout hiroc'h). '''NA IMPLIJIT KET LABOURIOÙ GANT GWIRIOÙ AOZER HEP AOTRE D'OBER KEMENT-SE!'''",
+ "editpage-cannot-use-custom-model": "N'haller ket cheñch patrom danvez ar bajenn-mañ.",
"longpageerror": "'''FAZI : {{PLURAL:$1|Ur c'hilookted|$1 kilookted}} hir eo an destenn lakaet ganeoc'h, ar pezh zo hiroc'h eget {{PLURAL:$2|ur c'hilookted|$2 kilookted}}, ar vent vrasañ aotreet. N'haller ket enrollañ.'''",
- "readonlywarning": "'''KEMENN DIWALL : prennet eo bet an diaz titouroù evit bezañ trezalc'het; setu ne viot ket evit enrollañ ho kemmoù diouzhtu-diouzhtu eta.'''\n\nGallout a rit eilañ ha pegañ ho testenn en ur restr skrid all hag enrollañ anezhi a-benn diwezhatoc'hik.'''\n\nSetu an displegadenn lakaet gant ar merour eo bet prennet an traoù gantañ : $1",
+ "readonlywarning": "<strong>Diwallit : prennet eo bet an diaz roadennoù evit bezañ trezalc'het; setu ne viot ket evit enrollañ ho kemmoù diouzhtu-diouzhtu eta.</strong>\n\nGallout a rit eilañ ha pegañ ho skrid en ur restr testenn all hag enrollañ anezhañ a-benn diwezhatoc'hik.\n\nSetu an displegadenn lakaet gant ar merour reizhiad eo bet prennet an traoù gantañ : $1",
"protectedpagewarning": "'''KEMENN DIWALL: Gwarezet eo bet ar bajenn-mañ. N'eus nemet an implijerien ganto ar statud merour a c'hall kemmañ anezhi.'''\nEnmont diwezhañ ar marilh a ziskouezer amañ a-is evel dave :",
"semiprotectedpagewarning": "''Notenn :''' Gwarezet eo ar bajenn-mañ; n'eus nemet an implijerien bet krouet ur gont ganto a kemmañ anezhi. Kasadenn ziwezhañ ar marilh zo diskouezet amañ a-is evel dave :",
- "cascadeprotectedwarning": "'''Diwallit :''' Prennet eo ar bajenn-mañ. N'eus nemet ar verourien a c'hall kemmañ anezhi peogwir he c'haver {{PLURAL:$1|er bajenn|e-mesk ar pajennoù}} da-heul zo bet gwarezet en ur zibab an dibarzh \"skalierad\" :",
+ "cascadeprotectedwarning": "<strong>Diwallit :</strong> Prennet eo ar bajenn-mañ. N'eus nemet ar verourien a c'hall kemmañ anezhi peogwir emañ treuzkludet {{PLURAL:$1|er bajenn|e-mesk ar pajennoù}} da-heul zo bet gwarezet en ur zibab an dibarzh \"skalierad\" :",
"titleprotectedwarning": "'''DIWALLIT : Gwarezet eo bet ar bajenn-mañ e doare ma ranker kaout [[Special:ListGroupRights|gwirioù dibar]] a-benn krouiñ anezhi.''' Kasadenn ziwezhañ ar marilh a zo diskouezet amañ a-is evel dave :",
"templatesused": "{{PLURAL:$1|Patrom|Patromoù}} implijet war ar bajenn-mañ :",
"templatesusedpreview": "{{PLURAL:$1|Patrom|Patromoù}} implijet er rakweladenn-mañ :",
"permissionserrors": "Fazi aotre",
"permissionserrorstext": "N'oc'h ket aotreet d'ober kement-mañ evit {{PLURAL:$1|an abeg-mañ|an abegoù-mañ}} :",
"permissionserrorstext-withaction": "N'oc'h ket aotreet da $2, evit an {{PLURAL:$1|abeg-mañ|abeg-mañ}} :",
+ "contentmodelediterror": "N'hallit ket kemmañ an adweladenn-mañ peogwir ez eo par he fatrom danvez da <code>$1</code>, ar pezh zo disheñvel diouzh ar patrom danvez implijet bremañ war ar bajenn <code>$2</code>.",
"recreate-moveddeleted-warn": "'''Diwallit : Emaoc'h o krouiñ ur bajenn zo bet diverket c'hoazh.'''\n\nEn em soñjit ervat ha talvoudus eo kenderc'hel krouiñ ar bajenn.\nDeoc'h da c'houzout, aze emañ ar marilhoù diverkañ hag adenvel :",
"moveddeleted-notice": "Diverket eo bet ar bajenn-mañ.\nDindan emañ ar marilh diverkañ hag adenvel.",
+ "moveddeleted-notice-recent": "Ho tigarez, nevez ziverket eo bet ar bajenn-mañ (e-kerzh an 24 eurvezh tremenet).\nDindan emañ ar marilhoù diverkañ hag adenvel evit ho kelaouiñ.",
"log-fulllog": "Gwelet ar marilh klok",
"edit-hook-aborted": "C'hwitet ar c'hemmañ gant un astenn.\nAbeg dianav.",
"edit-gone-missing": "Dibosupl hizivaat ar bajenn.\nDiverket eo bet evit doare.",
"invalid-content-data": "n'eo ket mat roadennoù an endalc'had",
"content-not-allowed-here": "N'eo ket aotreet an endalc'had \"$1\" er bajenn [[$2]]",
"editwarning-warning": "Mar kuitait ar bajenn-mañ e c'hallit koll ar c'hemmoù degaset ganeoc'h.\nMa'z oc'h kevreet e c'hallit diweredekaat ar c'hemenn-diwall-mañ e rann \"{{int:prefs-editing}}\" en ho penndibaboù.",
+ "editpage-invalidcontentmodel-title": "N'eo ket skoret ar patrom danvez",
+ "editpage-invalidcontentmodel-text": "N'eo ket skoret ar patrom danvez \"$1\".",
"editpage-notsupportedcontentformat-title": "Furmad endalc'had ha n'eo ket kemeret e karg",
+ "editpage-notsupportedcontentformat-text": "N'eo ket skoret ar patrom $1 gant ar patrom danvez $2.",
"content-model-wikitext": "wikitestenn",
"content-model-text": "testenn blaen",
"content-model-javascript": "Javascript",
"content-json-empty-object": "Elfenn goullo",
"content-json-empty-array": "Taolenn c'houllo",
"deprecated-self-close-category": "Pajennoù a ra gant tikedennoù HTML emserriñ direizh",
- "expensive-parserfunction-warning": "Diwallit : Re a c'halvoù koustus e-keñver an arc'hwelioù parser zo gant ar bajenn-mañ.\n\nDleout a rafe bezañ nebeutoc'h eget $2 {{PLURAL:$2|galv|galv}}, ha {{PLURAL:$1|$1 galv|$1 galv}} zo.",
+ "deprecated-self-close-category-desc": "Er bajenn-mañ ez eus tikedennoù HTML emserriñ, evel <code><b/></code> pe <code><span/></code>. Cheñch a raio o emzalc'h a-raok pell evit bezañ diouzh an erbedadennoù HTML5. Gant se eo dispredet implijout anezho er wikitestenn.",
+ "duplicate-args-warning": "<strong>Taolit evezh : Emañ </strong> [[:$1]] o c'hervel [[:$2]] gant muioc'h eget un talvoud evit an arventenn \"$3\". N'eus nemet an talvoud pourchaset da ziwezhañ a vo implijet.",
+ "duplicate-args-category": "Pajennoù a ra gant arguzennoù eilet er galvoù patrom",
+ "duplicate-args-category-desc": "Er bajenn-mañ ez eus galvoù patroù a ra gant arguzennoù eilet, evel <code><nowiki>{{foo|bar=1|bar=2}}</nowiki></code> pe <code><nowiki>{{foo|bar|1=baz}}</nowiki></code>.",
+ "expensive-parserfunction-warning": "<strong>Diwallit :</strong>: Re a c'halvoù koustus e-keñver an arc'hwelioù parser zo er bajenn-mañ.\n\nDleout a rafe bezañ nebeutoc'h eget $2 {{PLURAL:$2|galv}}, ha {{PLURAL:$1|$1 galv}} zo.",
"expensive-parserfunction-category": "Pagjennoù enno re a c'halvoù koustus e-keñver an arc'hwelioù parser.",
"post-expand-template-inclusion-warning": "Diwallit : re a batromoù zo war ar bajenn-mañ.\nLod anezho a vo lakaet a-gostez.",
"post-expand-template-inclusion-category": "Pajennoù enno re a batromoù",
"post-expand-template-argument-warning": "Diwallit : war ar bajenn-mañ ez eus eus da nebeutañ un arventenn eus ur patrom zo re vras.\nA-gostez eo bet lezet an arventenn-se.",
"post-expand-template-argument-category": "Pajennoù enno arventennoù patrom bet lezet a-gostez",
"parser-template-loop-warning": "Patrom e kelc'h detektet : [[$1]]",
- "parser-template-recursion-depth-warning": "Tizhet bevenn donder galvoù ar patromoù ($1)",
+ "parser-template-recursion-depth-warning": "Tizhet bevenn donder galvoù rekursivek ar patromoù ($1)",
"language-converter-depth-warning": "Aet eur en tu all d'ar vevenn amdreiñ yezhoù ($1)",
"node-count-exceeded-category": "Pajennoù m'eur aet en tu all d'an niver a skoulmoù",
"node-count-exceeded-category-desc": "Mont a ra ar bajenn-mañ en tu all da gont uhelañ ar skoulmoù.",
"search-interwiki-caption": "Raktresoù kar",
"search-interwiki-default": "Disoc'hoù eus $1 :",
"search-interwiki-more": "(muioc'h)",
+ "search-interwiki-more-results": "Muioc'h a zisoc'hoù",
"search-relatedarticle": "Disoc'hoù kar",
"searchrelated": "disoc'hoù kar",
"searchall": "An holl",
"showingresultsinrange": "O tiskouez amañ dindan betek {{PLURAL:$1|<strong>1</strong> disoc'h|<strong>$1</strong> a zisoc'hoù}} etre #<strong>$2</strong> ha #<strong>$3</strong>.",
"search-showingresults": "{{PLURAL:$4|Disoc'h <strong>$1</strong> of <strong>$3</strong>|a zisoc'hoù <strong>$1 - $2</strong> diwar <strong>$3</strong>}}",
"search-nonefound": "An enklask-mañ ne zisoc'h war netra.",
+ "search-nonefound-thiswiki": "N'eus bet kavet disoc'h ebet o klotañ gant ar reked el lec'hienn-mañ.",
"powersearch-legend": "Klask araokaet",
"powersearch-ns": "Klask en esaouennoù anv :",
"powersearch-togglelabel": "Dibab :",
"search-external": "Klask diavaez",
"searchdisabled": "<p>Diweredekaet eo bet an arc'hwel klask war an destenn a-bezh evit ur frapad rak ur samm re vras e oa evit ar servijer. Emichañs e vo tu d'e adlakaat pa vo ur servijer galloudusoc'h ganeomp. Da c'hortoz e c'hallit klask gant Google:</p>",
"search-error": "Ur fazi a zo bet e-ser klask : $1",
+ "search-warning": "Ur c'hemenn-diwall zo bet e-ser klask : $1",
"preferences": "Penndibaboù",
"mypreferences": "Penndibaboù",
"prefs-edits": "Niver a zegasadennoù :",
"prefs-rc": "Kemmoù diwezhañ",
"prefs-watchlist": "Roll evezhiañ",
"prefs-editwatchlist": "Kemmañ ar roll evezhiañ",
+ "prefs-editwatchlist-label": "Kemmañ titloù eus ho roll evezhiañ :",
"prefs-editwatchlist-edit": "Gwelet ha lemel titloù a-ziwar ho roll evezhiañ",
"prefs-editwatchlist-raw": "Kemmañ ar roll evezhiañ (mod diginkl)",
"prefs-editwatchlist-clear": "Diverkañ ho roll evezhiañ",
"prefs-help-recentchangescount": "Kemer a ra an dra-mañ e kont ar c'hemmoù diwezhañ, istor ar pajennoù hag ar marilhoù.",
"prefs-help-watchlist-token2": "Homañ zo an alc'hwez kuzh d'ho roll-evezhiañ davit boued war ar web. Forzh piv a anavez anezhañ a c'hall lenn ho roll-evezhiañ, setu na lavarit grit diwar e benn. M'ho pez ezhomm, e c'hallit [[Special:ResetTokens|assevel anezhañ]].",
"savedprefs": "Enrollet eo bet ar penndibaboù.",
+ "savedrights": "Enrollet eo bet strolladoù implijer {{GENDER:$1|$1}}.",
"timezonelegend": "Takad eur :",
"localtime": "Eur lec'hel :",
"timezoneuseserverdefault": "Ober gant talvoudenn dre ziouer ar wiki ($1)",
"youremail": "Postel :",
"username": "{{GENDER:$1|Anv implijer|Anv implijerez}}:",
"prefs-memberingroups": "{{GENDER:$2|Ezel}} eus {{PLURAL:$1|ar strollad|ar strolladoù}}:",
+ "group-membership-link-with-expiry": "$1 (betek $2)",
"prefs-registration": "Deiziad enskrivañ :",
"yourrealname": "Anv gwir*",
"yourlanguage": "Yezh an etrefas ",
"badsig": "Direizh eo ho sinadur kriz; gwiriit ho palizennoù HTML.",
"badsiglength": "Re hir eo ho sinadur.\nDre ret e rank bezañ nebeutoc'h eget {{PLURAL:$1|arouezenn|arouezenn}} ennañ.",
"yourgender": "Penaos eo plij deoc'h bezañ deskrivet ?",
- "gender-unknown": "Gwell eo ganin tevel war se",
+ "gender-unknown": "Pa vo graet anv ac'hanoc'h gant ar meziant e vo graet gant gerioù dic'hour bep tro ma vo posupl",
"gender-male": "Aozañ a ra-eñ pajennoù wiki",
"gender-female": "Aozañ a ra-hi pajennoù wiki",
"prefs-help-gender": "Diret : implijet evit kenglotadurioù gour e troidigezh etrefas ar meziant.\nA-wel d'an holl e vo an titour-mañ.",
"email": "Postel",
- "prefs-help-realname": "Diret eo skrivañ hoc'h anv gwir.\nMa skrivit anezhañ e vo implijet evit lakaat war wel ar pezh a vo bet degaset ganeoc'h.",
+ "prefs-help-realname": "Diret eo skrivañ e anv gwir.\nMa rit gantañ e c'hall bezañ implijet evit reiñ hoc'h anv d'ar pezh a vo bet degaset ganeoc'h.",
"prefs-help-email": "Diret eo merkañ ur chomlec'h postel met ma lakait unan e vo tu da adkas ur ger-tremen nevez deoc'h ma tichañsfe deoc'h disoñjal ho hini.",
"prefs-help-email-others": "Gallout a rit lezel tud all da vont e darempred ganeoc'h dre ho pajennoù implijer ha kaozeal hep na vefe ret deoc'h diskuliañ piv oc'h ivez.",
"prefs-help-email-required": "Ezhomm zo eus ur chomlec'h postel.",
"userrights-nodatabase": "N'eus ket eus an diaz titouroù $1 pe n'eo ket lec'hel.",
"userrights-changeable-col": "Ar strolladoù a c'hallit cheñch",
"userrights-unchangeable-col": "Ar strolladoù n'hallit ket cheñch",
+ "userrights-expiry-current": "A ya d'e dermen d'an $1",
+ "userrights-expiry-none": "Didermen",
+ "userrights-expiry": "Termen :",
+ "userrights-expiry-existing": "Termen echuiñ merket : $3, $2",
+ "userrights-expiry-othertime": "Termen all :",
+ "userrights-expiry-options": "1 deiz:1 day,1 sizhun:1 week,1 miz:1 month,3 miz:3 months,6 miz:6 months, bloaz:1 year",
+ "userrights-invalid-expiry": "Direizh eo termen echuiñ ar strollad \"$1\".",
+ "userrights-expiry-in-past": "Re gozh eo termen echuiñ ar strollad \"$1\".",
"userrights-conflict": "Bec'h zo abalamour da gemmoù e gwirioù an implijerien. Adwelit an traoù, mar plij, ha kadarnait ho kemmoù.",
"group": "Strollad :",
"group-user": "Implijerien",
"action-writeapi": "Ober gant an API skrivañ",
"action-delete": "diverkañ ar bajenn-mañ",
"action-deleterevision": "diverkañ adweladennoù",
- "action-deletedhistory": "Gwelet istor diverket ar bajenn-mañ",
+ "action-deletelogentry": "Diverkañ enmontoù ar marilh",
+ "action-deletedhistory": "Gwelet istor diverket ur bajenn",
+ "action-deletedtext": "gwelet testenn diverket ar stumm-mañ",
"action-browsearchive": "Klask pajennoù bet diverket",
"action-undelete": "diziverkañ pajennoù",
"action-suppressrevision": "gwiriañ hag assevel an adweladennoù kuzh",
"action-viewmywatchlist": "gwelet ho roll evezhiañ",
"action-viewmyprivateinfo": "Gwelet ho titouroù prevez",
"action-editmyprivateinfo": "aozañ ho titouroù prevez",
+ "action-editcontentmodel": "Kemmañ patrom danvez ur bajenn",
+ "action-managechangetags": "krouiñ ha gweredekaat/diweredekaat tikedennoù",
+ "action-applychangetags": "lakaat e pleustr an tikedennoù a-gevret gant ho kemmoù",
"action-deletechangetags": "Diverkañ tikedennoù a-ziwar an diaz-roadennoù",
"action-purge": "spurjañ ar bajenn-mañ",
"nchanges": "$1 {{PLURAL:$1|kemm|kemm}}",
"recentchanges-legend-newpage": "{{int:recentchanges-label-newpage}} (gwelet ivez [[Special:NewPages|roll ar pajennoù nevez]])",
"recentchanges-submit": "Diskouez",
"rcfilters-activefilters": "Siloù oberiant",
+ "rcfilters-restore-default-filters": "Assevel ar siloù dre ziouer",
"rcfilters-clear-all-filters": "Riñsañ an holl siloù",
+ "rcfilters-search-placeholder": "Silañ ar c'hemmoù diwezhañ (merdeiñ pe kregiñ da skrivañ)",
"rcfilters-invalid-filter": "Sil direizh",
+ "rcfilters-empty-filter": "Sil oberiant ebet. War wel emañ an holl gemmoù.",
"rcfilters-filterlist-title": "Siloù",
+ "rcfilters-highlightbutton-title": "Lakaat an disoc'hoù war wel",
+ "rcfilters-highlightmenu-title": "Dibabit ul liv",
"rcfilters-filterlist-noresults": "N'eus bet kavet sil ebet",
+ "rcfilters-filtergroup-registration": "Enskrivadur an implijer",
"rcfilters-filter-registered-label": "Marilhet",
+ "rcfilters-filter-registered-description": "Aozerien gevreet.",
"rcfilters-filter-unregistered-label": "Divarilh",
"rcfilters-filter-unregistered-description": "Aozerien n'int ket kevreet.",
+ "rcfilters-filtergroup-authorship": "Kemmañ anv an aozer",
"rcfilters-filter-editsbyself-label": "Kemmet ganeoc'h",
"rcfilters-filter-editsbyself-description": "Kemmet ganeoc'h",
"rcfilters-filter-editsbyother-label": "Kemmet gant tud all",
"rcfilters-filter-editsbyother-description": "Kemmoù graet gant implijerien all (ket ganeoc'h).",
- "rcfilters-filtergroup-userExpLevel": "Live skiant-prenañ an implijer",
+ "rcfilters-filtergroup-userExpLevel": "Live skiant-prenañ (evit an implijer enrollet hepken)",
"rcfilters-filter-userExpLevel-newcomer-label": "Tud nevez-deuet",
+ "rcfilters-filter-userExpLevel-newcomer-description": "Nebeutoc'h eget 10 kemm ha 4 devezh obererezh.",
"rcfilters-filter-userExpLevel-learner-label": "Deskarded",
+ "rcfilters-filter-userExpLevel-learner-description": "Muioc'h a zeizioù obererezh hag a gemmoù eget \"deraouidi\" hogen nebeutoc'h eget an \"implijerien arroutet\".",
"rcfilters-filter-userExpLevel-experienced-label": "Implijerien arroutet",
"rcfilters-filter-userExpLevel-experienced-description": "Ouzhpenn 30 devezh oberiantiz ha 500 kemm.",
+ "rcfilters-filtergroup-automated": "Degasadennoù emgefre",
"rcfilters-filter-bots-label": "Robot",
"rcfilters-filter-bots-description": "Kemmoù graet gant ostilhoù emgefre.",
"rcfilters-filter-humans-label": "Den (ket ur robot)",
+ "rcfilters-filter-humans-description": "Kemmoù graet gant tud kig-hag-eskern.",
+ "rcfilters-filtergroup-significance": "Talvoudegezh",
"rcfilters-filter-minor-label": "Kemmoù dister",
+ "rcfilters-filter-minor-description": "Kemmoù merket evel dister gant an aozer.",
+ "rcfilters-filter-major-label": "Kemmoù n'int ket dister",
+ "rcfilters-filter-major-description": "Kemmoù n'int ket bet merket evel dister",
"rcfilters-filtergroup-changetype": "Seurt kemm",
"rcfilters-filter-pageedits-label": "Kemmoù pajennoù",
+ "rcfilters-filter-pageedits-description": "Kemmoù da danvez ar wiki, d'ar c'haozeadennoù, da zeskrivadurioù rummadoù...",
"rcfilters-filter-newpages-label": "Krouidigezhioù pajennoù",
+ "rcfilters-filter-newpages-description": "Kemmoù a grou pajennoù nevez.",
"rcfilters-filter-categorization-label": "Kemmoù rummad",
+ "rcfilters-filter-categorization-description": "Roll ar pajennoù ouzhpennet da rummadoù zo pe dilamet diouto.",
+ "rcfilters-filter-logactions-label": "Obererezhioù enrollet",
"rcnotefrom": "Setu aze {{PLURAL:$5|ar c'hemm|ar c'hemmoù}} c'hoarvezet abaoe an <strong>$3, $4</strong> (<strong>$1</strong> d'ar muiañ).",
"rclistfrom": "Diskouez ar c'hemmoù diwezhañ abaoe an/ar $3 $2",
"rcshowhideminor": "$1 ar c'hemmoù dister",
"rcshowhidemine": "$1 ma c'hemmoù",
"rcshowhidemine-show": "Diskouez",
"rcshowhidemine-hide": "Kuzhat",
+ "rcshowhidecategorization": "$1 rummatadur ar bajenn",
"rcshowhidecategorization-show": "Diskouez",
"rcshowhidecategorization-hide": "Kuzhat",
"rclinks": "Diskouez an/ar $1 kemm diwezhañ c'hoarvezet e-pad an/ar $2 devezh diwezhañ.<br />$3",
"newpageletter": "N",
"boteditletter": "b",
"number_of_watching_users_pageview": "[$1 {{PLURAL:$1|implijer o heuliañ|implijer}} o heuliañ]",
- "rc_categories": "Bevenn ar rummadoù (dispartiañ gant \"|\")",
+ "rc_categories": "Bevenniñ d'ar rummadoù (dispartiet gant \"|\") :",
"rc_categories_any": "Unan e-touez ar re zibabet",
"rc-change-size-new": "$1 {{PLURAL:$1|okted|okted}} goude kemmañ",
"newsectionsummary": "/* $1 */ rann nevez",
"recentchangeslinked-feed": "Heuliañ ar pajennoù liammet",
"recentchangeslinked-toolbox": "Heuliañ ar pajennoù liammet",
"recentchangeslinked-title": "Kemmoù a denn da \"$1\"",
- "recentchangeslinked-summary": "Rollet eo war ar bajenn dibar-mañ ar c'hemmoù diwezhañ bet degaset war ar pajennoù liammet ouzh ur bajenn lakaet (pe ouzh izili ur rummad lakaet).\nE '''tev''' emañ ar pajennoù zo war ho [[Special:Watchlist|roll evezhiañ]].",
+ "recentchangeslinked-summary": "Rollet eo war ar bajenn dibar-mañ ar c'hemmoù diwezhañ bet degaset war ar pajennoù liammet ouzh ur bajenn lakaet (pe ouzh izili ur rummad lakaet).\nE <strong>tev</strong> emañ ar pajennoù zo war ho [[Special:Watchlist|roll evezhiañ]].",
"recentchangeslinked-page": "Anv ar bajenn :",
"recentchangeslinked-to": "Diskouez ar c'hemmoù war-du ar pajennoù liammet kentoc'h eget re ar bajenn lakaet",
"recentchanges-page-added-to-category": "[[:$1]] ouzhpennet d'ar rummad",
"listfiles-delete": "dilemel",
"listfiles-summary": "Diskouez a ra ar bajenn dibar-mañ an holl restroù bet ezporzhiet.",
"listfiles_search_for": "Klask anv ar skeudenn :",
+ "listfiles-userdoesnotexist": "N'eo ket enrollet ar gont implijer \"$1\".",
"imgfile": "restr",
"listfiles": "Roll ar skeudennoù",
"listfiles_thumb": "Munud",
"pageswithprop-prop": "Anv ar perzh :",
"pageswithprop-submit": "Mont",
"pageswithprop-prophidden-long": "talvoud perzh testenn hir kuzhet ($1)",
+ "pageswithprop-prophidden-binary": "Talvoud perzh binarel kuzhet ($1)",
"doubleredirects": "Adkasoù doubl",
"doubleredirectstext": "Rollañ a ra ar bajenn-mañ ar pajennoù a adkas da bajennoù adkas all.\nWar bep linenn ez eus liammoù war-du pajennoù an adkas kentañ hag en eil adkas, hag ivez war-du pajenn-dal an eil adkas zo sañset bezañ ar pal \"gwirion\" a zlefe an adkas kentañ kas di.\nDiskoulmet eo bet an enmontoù <del>barrennet</del>.",
"double-redirect-fixed-move": "Dilec'hiet eo [[$1]].\nHizivaet eo bet ent emgefre ha bremañ ez adkas da [[$2]].",
"apisandbox": "Poull-traezh API",
"apisandbox-api-disabled": "Diweredekaet eo API war al lec'hienn-mañ.",
"apisandbox-intro": "Grit gant ar bajenn-mañ evit amprouiñ '''servij Web API MediaWiki'''.\nKit da deuler ur sell war [https://www.mediawiki.org/wiki/API:Main_page titouroù an API] evit gouzout hiroc'h war an doare da embreger API. Da skouer :\n[https://www.mediawiki.org/wiki/API#A_simple_example gwelet danvez ur bennbajenn]. Dibabit un oberiadenn bennak evit gwelet skouerioù all",
+ "apisandbox-fullscreen": "Dispakañ ar banell",
"apisandbox-unfullscreen": "Diskouez ar bajenn",
"apisandbox-submit": "Sevel ar goulenn",
"apisandbox-reset": "Riñsañ",
"apisandbox-results": "Disoc'hoù",
"apisandbox-request-url-label": "Goulenn URL :",
"apisandbox-request-time": "Pad ar goulenn: $1",
+ "apisandbox-alert-field": "Talvoud ar vaezienn-mañ n'eo ket reizh.",
"apisandbox-continue": "Kenderc'hel",
"apisandbox-continue-clear": "Riñsañ",
"apisandbox-multivalue-all-namespaces": "$1 (An holl esaouennoù anv)",
"activeusers-count": "$1 {{PLURAL:$1|oberiadenn}} abaoe an {{PLURAL:$3|deiz|$3 deiz}} diwezhañ",
"activeusers-from": "Diskouez an implijerien adal :",
"activeusers-noresult": "N'eus bet kavet implijer ebet.",
+ "activeusers-submit": "Diskouez an implijerien oberiant",
"listgrouprights": "Gwirioù ar strolladoù implijer",
"listgrouprights-summary": "Da-heul ez eus ur roll eus ar strolladoù implijerien termenet war ar wiki-mañ, gant ar gwirioù moned stag outo.\nGallout a ra bezañ [[{{MediaWiki:Listgrouprights-helppage}}|titouroù ouzhpenn]] diwar-benn ar gwirioù hiniennel.",
"listgrouprights-key": "Alc'hwez :\n* <span class=\"listgrouprights-granted\">Gwirioù grataet</span>\n* <span class=\"listgrouprights-revoked\">Gwirioù lamet</span>",
"wlshowlast": "Diskouez an $1 eurvezh $2 devezh diwezhañ",
"watchlist-hide": "Kuzhat",
"watchlist-submit": "Diskouez",
+ "wlshowtime": "Prantad amzer war wel :",
"wlshowhideminor": "kemmoù dister",
"wlshowhidebots": "robotoù",
"wlshowhideliu": "implijerien enrollet",
"wlshowhideanons": "implijerien dizanv",
+ "wlshowhidepatr": "kemmoù gwiriet",
"wlshowhidemine": "ma c'hemmoù",
+ "wlshowhidecategorization": "rummatadur ar bajenn",
"watchlist-options": "Dibarzhioù ar roll evezhiañ",
"watching": "Heuliet...",
"unwatching": "Paouez da evezhiañ...",
"import-logentry-upload-detail": "$1 {{PLURAL:$1|adweladenn}} enporzhiet",
"import-logentry-interwiki-detail": "$1 {{PLURAL:$1|adweladenn}} enporzhiet eus $2",
"javascripttest": "Amprouadenn JavaScript",
+ "javascripttest-pagetext-unknownaction": "Obererezh dianav \"$1\".",
"javascripttest-qunit-intro": "Sellet ouzh [$1 an teulioù amprouiñ] e mediawiki.org.",
"tooltip-pt-userpage": "{{GENDER:|Ho pajenn}} implijer",
"tooltip-pt-anonuserpage": "Ar bajenn implijer evit ar c'homlec'h IP implijet ganeoc'h",
"tooltip-pt-preferences": "{{GENDER:|Ma}} fenndibaboù",
"tooltip-pt-watchlist": "Roll ar pajennoù evezhiet ganeoc'h.",
"tooltip-pt-mycontris": "Roll ho tegasadennoù",
+ "tooltip-pt-anoncontribs": "Ur roll eus ar c'hemmoù graet adalek ar chomlec'h IP-mañ",
"tooltip-pt-login": "Daoust ma n'eo ket ret, ec'h aliomp deoc'h kevreañ",
"tooltip-pt-logout": "Digevreañ",
"tooltip-pt-createaccount": "Erbedet eo deoc'h krouiñ ur gont ha kevreañ ; n'eo ket ret koulskoude.",
"tooltip-feed-rss": "Magañ ar red RSS evit ar bajenn-mañ",
"tooltip-feed-atom": "Magañ ar red Atom evit ar bajenn-mañ",
"tooltip-t-contributions": "Gwelet roll degasadennoù {{GENDER:$1|this user}} an implijer-mañ",
- "tooltip-t-emailuser": "Kas ur postel d'an implijer-mañ",
+ "tooltip-t-emailuser": "Kas ur postel d'an {{GENDER:$1|implijer-mañ|implijerez-mañ}}",
"tooltip-t-info": "Titouroù ouzhpenn a-zivout ar bajenn-mañ",
"tooltip-t-upload": "Enporzhiañ ur skeudenn pe ur restr media war ar servijer",
"tooltip-t-specialpages": "Roll an holl bajennoù dibar",
"lastmodifiedatby": "Kemmet eo bet ar bajenn-mañ da ziwezhañ da $2, d'an $1 gant $3",
"othercontribs": "Diazezet war labour $1.",
"others": "re all",
- "siteusers": "$1 {{PLURAL:$2|implijer|implijer}} eus {{SITENAME}}",
+ "siteusers": "{{PLURAL:$2|{{GENDER:$1|An implijer|An implijerez}}|{{GENDER:$1|An implijerien|An implijerezed}}}} $1 eus {{SITENAME}}",
"anonusers": "{{PLURAL:$2|implijer dizanv|implijerien dizanv}} $1 eus {{SITENAME}}",
"creditspage": "Pajennoù kredoù",
"nocredits": "N'eus tamm titour kred hegerz ebet evit ar bajenn-mañ.",
"pageinfo-robot-index": "Aotreet",
"pageinfo-robot-noindex": "Diaotreet",
"pageinfo-watchers": "Niver a dud o heuliañ",
+ "pageinfo-visiting-watchers": "Niver a dud oc'h evezhiañ ar bajenn-mañ o deus sellet ouzh ar c'hemmoù diwezhañ bet graet enni",
"pageinfo-few-watchers": "Nebeutoc'h eget $1 {{PLURAL:$1|lenner}}",
"pageinfo-redirects-name": "Niver a adkasoù war-zu ar bajenn-mañ",
"pageinfo-subpages-name": "Ispajennoù eus ar bajenn-mañ",
"pageinfo-contentpage-yes": "Ya",
"pageinfo-protect-cascading-yes": "Ya",
"pageinfo-category-info": "Titouroù ar rummad",
+ "pageinfo-category-total": "Niver hollek a izili",
"pageinfo-category-pages": "Niver a bajennoù",
"pageinfo-category-subcats": "Niver a isrummadoù",
"pageinfo-category-files": "Niver a restroù",
"exif-compression-4": "CCITT Strollad 4 kodañ ar pelleiler",
"exif-copyrighted-true": "Pep gwir miret strizh",
"exif-copyrighted-false": "Domani foran",
+ "exif-photometricinterpretation-1": "Gwenn ha du (0 zo evit du)",
"exif-unknowndate": "Deiziad dianav",
"exif-orientation-1": "Boutin",
"exif-orientation-2": "Eilpennet a-hed",
"confirmemail_body_set": "Unan bennak, c'hwi moarvat, gant ar chomlec'h IP $1,\nen deus enrollet ur gont \"$2\" gant ar chomlec'h postel-mañ war lec'hienn {{SITENAME}}.\n\nEvit kadarnaat eo deoc'h ar gont-se ha gweredekaat en-dro\nan arc'hwelioù postelerezh war {{SITENAME}}, digorit al liamm-mañ en ho merdeer :\n\n$3\n\nMa n'eo *ket* deoc'h ar gont heuilhit al liamm-mañ\nevit nullañ kadarnaat ar chomlec'h postel :\n\n$5\n\nMont a raio ar c'hod-mañ d'e dermen d'ar $4.",
"confirmemail_invalidated": "Nullet eo bet kadarnaat ar chomlec'h postel",
"invalidateemail": "Nullañ kadarnaat ar postel",
+ "notificationemail_subject_changed": "Cheñchet eo bet ar chomlec'h postel enrollet e {{SITENAME}}",
+ "notificationemail_subject_removed": "Lamet eo bet ar chomlec'h postel enrollet e {{SITENAME}}",
"scarytranscludedisabled": "[Diweredekaet eo an treuzkludañ etrewiki]",
"scarytranscludefailed": "[N'eus ket bet gallet tapout ar patrom evit $1]",
"scarytranscludefailed-httpstatus": "[c'hwitet adtapout ar patrom evit $1: HTTP $2]",
"version-extensions": "Astennoù staliet",
"version-skins": "Gwiskadurioù staliet",
"version-specialpages": "Pajennoù dibar",
- "version-parserhooks": "Galvoù dielfennañ",
+ "version-parserhooks": "Astennoù an dielfenner",
"version-variables": "Argemmennoù",
"version-antispam": "Mirout ouzh ar strob",
"version-other": "Diseurt",
"version-mediahandlers": "Merer danvez liesvedia",
- "version-hooks": "Galvoù",
- "version-parser-extensiontags": "Balizenn dielfennañ o tont eus an astennoù",
- "version-parser-function-hooks": "Galv an arc'hwelioù dielfennañ",
+ "version-hooks": "Krogoù",
+ "version-parser-extensiontags": "Tikedenn astennet an dielfenner ereadurel",
+ "version-parser-function-hooks": "Arc'hwelioù astennet an dielfenner ereadurel",
"version-hook-name": "Anv ar galv",
"version-hook-subscribedby": "Termenet gant",
"version-version": "($1)",
"blankpage": "Pajenn c'houllo",
"intentionallyblankpage": "A-ratozh e leusker gwenn ar bajenn-mañ",
"external_image_whitelist": " #Lezel al linenn-mañ tre evel m'emañ<pre>\n#Merkañ an tammoù bommoù reoliek (ar rann zo etre ar // nemetken) a-is\n#Klotañ a raint gant URLoù ar skeudennoù diavaez (gourliammet)\n#En em ziskwel evel skeudennoù a raio ar re a glot, evit ar re all e vo diskwelet ul liamm war-du ar skeudenn nemetken\n#Sellet e vo ouzh a linennoù a grog gant # evel ouzh notennoù\n#Kizidik eo ar roll-mañ ouzh an diforc'h etre lizherennoù bihan ha lizherennoù bras\n\n#Merkit holl rannoù ar bommoù reoliek a-us d'al linenn-mañ. Lezit al linenn ziwezhañ-mañ tre evel m'emañ</pre>",
- "tags": "Balizennoù ar c'hemmoù reizh",
- "tag-filter": "Silañ ar [[Special:Tags|balizennoù]] :",
+ "tags": "Tikedennoù ar c'hemmoù reizh",
+ "tag-filter": "Silañ an [[Special:Tags|tikedennoù]] :",
"tag-filter-submit": "Silañ",
- "tag-list-wrapper": "([[Special:Tags|{{PLURAL:$1|Balizenn}}]]: $2)",
- "tags-title": "Balizennoù",
- "tags-intro": "Rollañ a ra ar bajenn-mañ ar balizennoù a c'hall ar meziant implijout da verkañ kemmoù hag an dalvoudegezh anezho.",
- "tags-tag": "Anv ar valizenn",
+ "tag-list-wrapper": "([[Special:Tags|{{PLURAL:$1|Dikedenn|Tikedenn}}]] : $2)",
+ "tags-title": "Tikedennoù",
+ "tags-intro": "Rollañ a ra ar bajenn-mañ an tikedennoù a c'hall ar meziant implijout da verkañ kemmoù hag o zalvoudegezh.",
+ "tags-tag": "Anv an dikedenn",
"tags-display-header": "Neuz e rolloù ar c'hemmoù",
- "tags-description-header": "Deskrivadur klok ar valizenn",
+ "tags-description-header": "Deskrivadur klok an dalvoudegezh",
"tags-source-header": "Mammenn",
"tags-active-header": "Oberiant ?",
"tags-hitcount-header": "Kemmoù balizennet",
"tags-actions-header": "Oberoù",
"tags-active-yes": "Ya",
"tags-active-no": "Ket",
+ "tags-source-extension": "Termenet gant ar meziant",
+ "tags-source-none": "N'emañ ket en implij ken",
"tags-edit": "aozañ",
"tags-delete": "diverkañ",
"tags-activate": "gweredekaat",
"tags-create-no-name": "Rekis eo merkañ anv un dikedenn.",
"tags-delete-title": "Diverkañ an dikedenn",
"tags-delete-reason": "Abeg :",
+ "tags-delete-not-found": "N'eus ket eus an dikedenn \"$1\".",
+ "tags-activate-title": "Gweredekaat an dikedenn",
"tags-activate-reason": "Abeg :",
"tags-activate-submit": "Gweredekaat",
+ "tags-deactivate-title": "Diweredekaat an dikedenn",
"tags-deactivate-reason": "Abeg :",
"tags-deactivate-submit": "Diweredekaat",
+ "tags-edit-title": "Kemmañ an tikedennoù",
+ "tags-edit-manage-link": "Merañ an tikedennoù",
"tags-edit-existing-tags": "Tikedennoù zo anezho :",
"tags-edit-existing-tags-none": "<em>Hini ebet</em>",
"tags-edit-new-tags": "Tikedennoù nevez :",
"logentry-upload-revert": "$1 {{GENDER:$2|en deus|he deus}} ezporzhiet $3",
"rightsnone": "(netra)",
"revdelete-summary": "diverradenn eus ar c'hemmoù",
+ "rightslogentry-temporary-group": "$1 (da c'hortoz, betek $2)",
"feedback-adding": "Oc'h ouzhpennañ ho soñj war ar bajenn...",
"feedback-back": "Distreiñ",
"feedback-bugcheck": "Eus ar c'hentañ ! Gwiriit mat n'emañ ket e-touez an [$1 draen diskoachet c'hoazh].",
"api-error-emptypage": "N'eo ket aotreet krouiñ pajennoù goullo.",
"api-error-publishfailed": "Fazi diabarzh : dibosupl d'ar servijer embann ar restr padennek.",
"api-error-stashfailed": "Fazi diabarzh : dibosupl d'ar servijer enrollañ ar restr padennek.",
- "api-error-unknown-warning": "Kemenn diwall dianav : $1",
+ "api-error-unknown-warning": "Kemenn-diwall dianav : \"$1\".",
"api-error-unknownerror": "Fazi dianav : \"$1\".",
"duration-seconds": "$1 {{PLURAL:$1|eilenn|eilenn}}",
"duration-minutes": "$1 {{PLURAL:$1|munut|munut}}",
"expand_templates_html_output": "Disoc'h HTML kriz",
"expand_templates_ok": "Mat eo",
"expand_templates_remove_comments": "Lemel an notennoù kuit",
- "expand_templates_remove_nowiki": "Diverkañ a ra ar balizennoù <nowiki> en disoc'h",
+ "expand_templates_remove_nowiki": "Diverkañ a ra an tikedennoù <nowiki> en disoc'h",
"expand_templates_generate_xml": "Gwelet ar gwezennadur XML",
"expand_templates_generate_rawhtml": "Diskouez an HTML kriz",
"expand_templates_preview": "Rakwelet",
"pagelang-language": "Yezh",
"pagelang-use-default": "Implijout ar yezh dre ziouer",
"pagelang-select-lang": "Dibab ar yezh",
+ "pagelang-reason": "Abeg",
"pagelang-submit": "Kas",
+ "pagelang-nonexistent-page": "N'eus ket eus ar bajenn $1.",
+ "pagelang-unchanged-language": "Kefluniet eo c'hoazh ar bajenn $1 e $2.",
"right-pagelang": "Cheñch yezh ar bajenn",
"action-pagelang": "cheñch yezh ar bajenn",
- "log-name-pagelang": "Cheñch yezh",
+ "log-name-pagelang": "Marilh ar cheñchamantoù yezh",
"log-description-pagelang": "Hemañ zo ur marilh eus ar c'hemmoù e pajenn ar yezhoù.",
- "logentry-pagelang-pagelang": "$1 {{GENDER:$2|en deus|he deus}} cheñchet yezh ar bajenn evit $3 eus $4 da $5.",
+ "logentry-pagelang-pagelang": "$1 {{GENDER:$2|en deus|he deus}} cheñchet yezh ar bajenn $3 eus $4 da $5.",
"default-skin-not-found-row-enabled": "* <code>$1</code> / $2 (gweredekaet)",
"default-skin-not-found-row-disabled": "* <code>$1</code> / $2 (<strong>diweredekaet</strong>)",
"mediastatistics": "Stadegoù ar media",
"special-characters-group-ipa": "LFE (IPA)",
"special-characters-group-symbols": "Arouezennoù",
"special-characters-group-greek": "Gresianek",
+ "special-characters-group-greekextended": "Gresianeg astennet",
"special-characters-group-cyrillic": "Kirillek",
"special-characters-group-arabic": "Arabeg",
"special-characters-group-arabicextended": "Arabeg astennet",
"special-characters-group-thai": "Thai",
"special-characters-group-lao": "Laoseg",
"special-characters-group-khmer": "Khmer",
+ "mw-widgets-mediasearch-noresults": "N'eus bet kavet disoc'h ebet.",
+ "mw-widgets-titleinput-description-new-page": "N'eus ket eus ar bajenn-se c'hoazh",
"mw-widgets-titleinput-description-redirect": "adkas war-zu $1",
"mw-widgets-categoryselector-add-category-placeholder": "Ouzhpennañ ur rummad...",
+ "mw-widgets-usersmultiselect-placeholder": "Ouzhpennañ muioc'h...",
+ "sessionprovider-generic": "$1 estez",
+ "sessionprovider-mediawiki-session-cookiesessionprovider": "Eztez diazezet war toupinoù",
+ "sessionprovider-nocookies": "Marteze eo diweredekaet an toupinoù. Bezit sur eo gweredekaet an toupinoù ha klaskit en-dro.",
"randomrootpage": "Pajenn wrizienn dargouezhek",
"log-action-filter-block": "Seurt bloc'had :",
+ "log-action-filter-contentmodel": "Mod kemmañ ar patrom danvez :",
+ "log-action-filter-delete": "Mod diverkañ :",
+ "log-action-filter-import": "Seurt enporzhiadur :",
+ "log-action-filter-managetags": "Mod embreger ar merañ tikedennoù :",
+ "log-action-filter-move": "Mod dilec'hiañ :",
+ "log-action-filter-newusers": "Seurt krouidigezh kont :",
+ "log-action-filter-patrol": "Mod evezhiañ :",
+ "log-action-filter-protect": "Mod gwareziñ :",
+ "log-action-filter-rights": "Mod kemmañ ar gwirioù :",
+ "log-action-filter-suppress": "Mod dilemel :",
+ "log-action-filter-upload": "Mod enporzhiañ :",
"log-action-filter-all": "An holl",
"log-action-filter-block-block": "Stankañ",
+ "log-action-filter-block-reblock": "Stankañ ar c'hemm",
"log-action-filter-block-unblock": "Distankañ",
+ "log-action-filter-contentmodel-change": "Cheñch ar patrom danvez",
+ "log-action-filter-contentmodel-new": "Krouiñ pajennoù gant ur patrom danvez n'eo ket raktermenet",
+ "log-action-filter-delete-delete": "Diverkañ pajennoù",
+ "log-action-filter-delete-delete_redir": "Adkas ar frikañ",
+ "log-action-filter-delete-restore": "Diziverkañ pajennoù",
+ "log-action-filter-delete-event": "Diverkañ ar marilh",
+ "log-action-filter-delete-revision": "Diverkañ an adweladennoù",
+ "log-action-filter-import-interwiki": "Enporzh Treuzwiki",
+ "log-action-filter-import-upload": "Enporzh dre bellgarg XML",
+ "log-action-filter-managetags-create": "Krouiñ tikedenn",
+ "log-action-filter-managetags-delete": "Diverkañ tikedenn",
+ "log-action-filter-managetags-activate": "Gweredekaat tikedenn",
+ "log-action-filter-managetags-deactivate": "Diweredekaat tikedenn",
+ "log-action-filter-move-move": "Dilec'hiañ hep frikañ an adkasoù",
+ "log-action-filter-move-move_redir": "Dilec'hiañ en ur frikañ an adkasoù",
+ "log-action-filter-newusers-create": "Krouiñ gant un implijer dizanv",
+ "log-action-filter-newusers-create2": "Krouiñ gant un implijer enrollet",
+ "log-action-filter-newusers-autocreate": "Krouiñ ent emgefre",
+ "log-action-filter-newusers-byemail": "Krouiñ gant ur ger-tremen kaset dre bostel",
+ "log-action-filter-patrol-patrol": "Gwiriet gant an dorn",
+ "log-action-filter-patrol-autopatrol": "Gwiriet ent emgefre",
"log-action-filter-protect-protect": "Gwarez",
+ "log-action-filter-protect-modify": "Cheñchamant er gwarez",
"log-action-filter-protect-unprotect": "Diwarez",
+ "log-action-filter-protect-move_prot": "Gwarez dilec'hiañ",
+ "log-action-filter-rights-rights": "Cheñchamant graet gant an dorn",
"log-action-filter-rights-autopromote": "Kemm emgefre",
+ "log-action-filter-suppress-event": "Diverkañ marilhoù",
+ "log-action-filter-suppress-revision": "Diverkañ adweladennoù",
+ "log-action-filter-suppress-delete": "Diverkañ pajennoù",
+ "log-action-filter-suppress-block": "Diverkañ implijerien dre stankadennoù",
+ "log-action-filter-suppress-reblock": "Diverkañ implijerien dre stankadennoù lies",
+ "log-action-filter-upload-upload": "Enporzhiadenn nevez",
+ "log-action-filter-upload-overwrite": "Adenporzhiañ",
"authmanager-authn-no-primary": "N'eus ket bet gallet gwiriañ an titouroù kred lakaet.",
"authmanager-authn-no-local-user-link": "Reizh eo an titouroù kred lakaet met n'int ket liammet ouzh implijer ebet eus ar wiki-mañ. Ma kevreit en ur mod all pe ma krouit ur gont implijer nevez e c'hallot liammañ ho titouroù kred kent ouzh ar gont-mañ.",
"authmanager-change-not-supported": "N'haller ket cheñch an titouroù kred rak netra na rafe ganto.",
+ "authmanager-create-disabled": "Diweredekaet eo ar c'hrouiñ kontoù.",
+ "authmanager-create-from-login": "Evit krouiñ ho kont, leuniit ar maeziennoù.",
"authmanager-create-no-primary": "N'eus ket bet gallet implijout an titouroù kred lakaet evit krouiñ ur gont.",
"authmanager-authplugin-setpass-failed-title": "C'hwitet eo bet ar cheñchamant ger-tremen",
"authmanager-authplugin-setpass-bad-domain": "Domani direizh.",
"authmanager-userdoesnotexist": "N'eo ket enrollet ar gont implijer \"$1\".",
+ "authmanager-username-help": "Anv implijer evit ar gwiriekaat.",
+ "authmanager-password-help": "Ger-tremen evit ar gwiriekaat.",
+ "authmanager-domain-help": "Domani evit ar gwiriekaat diavaez.",
"authmanager-retype-help": "Adkadarnaat ar ger-tremen.",
"authmanager-email-label": "Postel",
"authmanager-email-help": "Chomlec'h postel",
"authmanager-realname-help": "Anv gwir an implijer",
"authmanager-provider-password": "Gwiriekadur diazezet war ur ger-termen",
"authmanager-provider-temporarypassword": "Ger-tremen da c'hortoz",
+ "authprovider-confirmlink-request-label": "Kontoù a zlefe bezañ liammet",
"authprovider-confirmlink-success-line": "$1: bet liammet ervat.",
"authprovider-resetpass-skip-label": "Lammat",
"authprovider-resetpass-skip-help": "Lammat adderaouekaat ar ger-tremen.",
"specialpage-securitylevel-not-allowed-title": "Berzet",
"authpage-cannot-login": "N'haller ket kregiñ da gevreañ",
"authpage-cannot-create": "N'haller ket kregiñ da grouiñ ar gont.",
+ "authpage-cannot-link": "Dibosupl kregiñ da liammañ ar gont.",
+ "authpage-cannot-link-continue": "Dibosupl kenderc'hel da liammañ ar gont. Aet eo an eztez d'he zermen moarvat.",
"cannotauth-not-allowed-title": "Aotre nac'het",
"cannotauth-not-allowed": "N'oc'h ket aotreet d'ober gant ar bajenn-mañ",
"changecredentials": "Kemmañ an titouroù kred",
"changecredentials-submit": "Kemmañ an titouroù kred",
"changecredentials-invalidsubpage": "N'eo ket $1 ur seurt titour kred reizh.",
+ "changecredentials-success": "Cheñchet eo bet ho titouroù anaout.",
"removecredentials": "Lemel an titouroù kred",
"removecredentials-submit": "Lemel an aotreoù",
"removecredentials-invalidsubpage": "N'eo ket $1 ur seurt titour kred reizh.",
+ "removecredentials-success": "Lamet kuit eo bet ho titouroù anaout.",
"credentialsform-provider": "Seurt titouroù kred :",
"credentialsform-account": "Anv ar gont :",
"cannotlink-no-provider-title": "N'eus kont ebet da liammañ",
"linkaccounts-submit": "Liammañ ar c'hontoù",
"unlinkaccounts": "Diliammañ ar c'hontoù",
"unlinkaccounts-success": "Diliammet eo bet ar gont.",
+ "authenticationdatachange-ignored": "N'eus ket bet gallet cheñch ho roadennoù anaout. Marteze a-wac'h peogwir ne oa ket bet kefluniet pourvezer ebet.",
+ "restrictionsfield-badip": "Chomlec'h IP pe lijorenn direizh : $1",
+ "restrictionsfield-label": "Lijorennoù IP aotreet :",
+ "restrictionsfield-help": "Ur chomlec'h IP pe un esaouenn CIDR dre linenn. Evit gweredekaat pep tra, ober gant <pre>0.0.0.0/0\n::/0</pre>",
"revid": "Adweladenn $1",
"pageid": "ID ar bajenn $1"
}
"Emir Mujadzic",
"Srdjan m",
"Semso98",
- "Matma Rex"
+ "Matma Rex",
+ "Сербијана"
]
},
"tog-underline": "Podvuci veze:",
"underline-default": "Prema predodređenim postavkama teme ili preglednika",
"editfont-style": "Stil fonta u okviru za uređivanje:",
"editfont-default": "Po postavkama preglednika",
- "editfont-monospace": "Slova sa jednostrukim razmakom",
+ "editfont-monospace": "Neproporcionalni font",
"editfont-sansserif": "Beserifni font",
"editfont-serif": "Serifni font",
"sunday": "nedjelja",
"userlogin-reauth": "Morate se ponovo prijaviti da bismo potvrdili da ste zaista {{GENDER:$1|$1}}.",
"userlogin-createanother": "Napravi još jedan račun",
"createacct-emailrequired": "Adresa e-pošte",
- "createacct-emailoptional": "Adresa e-pošte (opcionalno)",
+ "createacct-emailoptional": "Adresa e-pošte (neobavezno)",
"createacct-email-ph": "Unesite Vašu adresu e-pоšte",
"createacct-another-email-ph": "Unesite adresu e-pošte",
"createaccountmail": "Koristite privremenu, slučajno stvorenu lozinku i pošaljite na navedenu adrеsu e-pošte",
"createacct-reason": "Razlog",
"createacct-reason-ph": "Zašto pravite još jedan korisnički račun?",
"createacct-reason-help": "Poruka koja se prikazuje u zapisniku stvaranja korisničkih računa",
- "createacct-submit": "Napravite svoj korisnički račun",
+ "createacct-submit": "Napravi račun",
"createacct-another-submit": "Napravi korisnički račun",
"createacct-continue-submit": "Nastavi sa stvaranjem računa",
"createacct-another-continue-submit": "Nastavi sa stvaranjem računa",
"createacct-benefit-heading": "{{GRAMMAR:akuzativ|{{SITENAME}}}} stvaraju ljudi poput Vas.",
- "createacct-benefit-body1": "{{PLURAL:$1|izmjena|izmjene}}",
+ "createacct-benefit-body1": "{{PLURAL:$1|izmjena|izmjene|izmjena}}",
"createacct-benefit-body2": "{{PLURAL:$1|stranica|stranice|stranica}}",
- "createacct-benefit-body3": "nedavnih {{PLURAL:$1|doprinosa}}",
+ "createacct-benefit-body3": "{{PLURAL:$1|nedavni korisnik|nedavnih korisnika}}",
"badretype": "Lozinke koje ste unijeli se ne poklapaju",
"usernameinprogress": "Račun za ovo korisničko ime već se pravi. Molimo sačekajte.",
"userexists": "Korisničko ime je već u upotrebi.\nIzaberite drugo.",
"noarticletext": "Na ovoj stranici trenutno nema teksta.\nMožete [[Special:Search/{{PAGENAME}}|tražiti naslov ove stranice]] na drugim stranicama,\n<span class=\"plainlinks\">[{{fullurl:{{#Special:Log}}|page={{FULLPAGENAMEE}}}} tražiti u povezanim zapisnicima] ili [{{fullurl:{{FULLPAGENAME}}|action=edit}} napraviti ovu stranicu]</span>.",
"noarticletext-nopermission": "Trenutno nema teksta na ovoj stranici.\nMožete [[Special:Search/{{PAGENAME}}|tražiti ovaj naslov stranice]] na drugim stranicama ili <span class=\"plainlinks\">[{{fullurl:{{#Special:Log}}|page={{FULLPAGENAMEE}}}} pretražiti povezane zapisnike]</span>, ali nemate dozvolu da napravite ovu stranicu.",
"missing-revision": "Uređivanje broj $1 na stranici \"{{FULLPAGENAME}}\" ne postoji.\n\nOvo se obično dešava kad pratite zastarjelu vezu na stranicu koja je obrisana.\nViše informacija možete pronaći u [{{fullurl:{{#Special:Log}}/delete|page={{FULLPAGENAMEE}}}} protokolu brisanja].",
- "userpage-userdoesnotexist": "Korisnički račun \"<nowiki>$1</nowiki>\" nije registrovan.\nMolimo provjerite da li želite napraviti/izmijeniti ovu stranicu.",
- "userpage-userdoesnotexist-view": "Korisnički račun \"$1\" nije registrovan.",
+ "userpage-userdoesnotexist": "Korisnički račun \"$1\" nije registriran.\nRazmislite želite li zaista napraviti/izmijeniti ovu stranicu.",
+ "userpage-userdoesnotexist-view": "Korisnički račun \"$1\" nije registriran.",
"blocked-notice-logextract": "Ovaj korisnik je trenutno blokiran.\nPosljednje stavke zapisnika blokiranja možete pogledati ispod:",
"clearyourcache": "<strong>Napomena:</strong> Nakon što sačuvate izmjene, možda ćete morati osvježiti keš preglednika da biste vidjeli izmjene.\n* <strong>Firefox / Safari:</strong> Držite <em>Shift</em> i kliknite na <em>Reload</em> ili pritisnite <em>Ctrl-F5</em> ili <em>Ctrl-R</em> (<em>⌘-R</em> na Macu)\n* <strong>Google Chrome:</strong> Pritisnite <em>Ctrl-Shift-R</em> (<em>⌘-Shift-R</em> na Macu)\n* <strong>Internet Explorer:</strong> Držite <em>Ctrl</em> i kliknite na <em>Refresh</em> ili pritisnite <em>Ctrl-F5</em>\n* <strong>Opera:</strong> Idite na <em>Menu → Settings</em> (<em>Opera → Preferences</em> na Macu) i zatim <em>Privacy & security → Clear browsing data → Cached images and files</em>.",
"usercssyoucanpreview": "'''Pažnja:''' Koristite dugme \"{{int:showpreview}}\" da testirate svoj novi CSS prije nego što sačuvate.",
"last": "preth",
"page_first": "prva",
"page_last": "posljednja",
- "histlegend": "Odabir razlika: označite radio dugme verzija koje uspoređujete i pritistnite enter ili dugme na dnu. <br />\nObjašnjenje: '''(tren)''' = razlika sa trenutnom verzijom,\n'''(preth)''' = razlika sa prethodnom verzijom, '''m''' = mala izmjena.",
+ "histlegend": "Odabir razlika: označite radio dugme verzija koje uspoređujete i pritistnite enter ili dugme na dnu. <br />\nObjašnjenje: <strong>({{int:cur}})</strong> = razlika sa trenutnom verzijom, <strong>({{int:last}})</strong> = razlika sa prethodnom verzijom, <strong>{{int:minoreditletter}}</strong> = mala izmjena.",
"history-fieldset-title": "Pretraga historije",
"history-show-deleted": "Samo obrisane",
"histfirst": "najstarije",
"showhideselectedversions": "Prikaži/sakrij izabrane izmjene",
"editundo": "poništi",
"diff-empty": "(Nema razlike)",
- "diff-multi-sameuser": "({{PLURAL:$1|Nije prikazana jedna međurevizija|Nisu prikazane $1 međurevizije}} istog korisnika)",
+ "diff-multi-sameuser": "({{PLURAL:$1|Nije prikazana jedna međuizmjena|Nisu prikazane $1 međuizmjene|Nije prikazano $1 međuizmjena}} istog korisnika)",
"diff-multi-otherusers": "(Nije prikazana {{PLURAL:$1|jedna međuverzija|$1 međuverzija}} {{PLURAL:$2|drugog korisnika|$2 korisnika}})",
"diff-multi-manyusers": "({{PLURAL:$1|Jedna međurevizija|$1 međurevizije|$1 međurevizija}} od više od $2 {{PLURAL:$2|korisnika|korisnika}} {{PLURAL:$1|nije prikazana|nisu prikazane}})",
"difference-missing-revision": "{{PLURAL:$2|Jedna izmjena|$2 izmjene}} od ove razlike ($1) ne {{PLURAL:$2|postoji|postoje}}.\n\nOvo se obično dešava kada pratite zastarjelu vezu na stranice koja je obrisana.\nViše informacija možete pronaći u [{{fullurl:{{#Special:Log}}/delete|page={{FULLPAGENAMEE}}}} protokol brisanja].",
"action-changetags": "dodate ili uklonite razne oznake na pojedinačnim verzijama i unosima u zapisnicima",
"action-deletechangetags": "brišete oznake iz baze podataka",
"action-purge": "osvježite keš ove stranice",
- "nchanges": "$1 {{PLURAL:$1|promjena|promjene|promjena}}",
+ "nchanges": "$1 {{PLURAL:$1|izmjena|izmjene|izmjena}}",
"enhancedrc-since-last-visit": "$1 {{PLURAL:$1|izmjena od Vaše posljedne posjete}}",
"enhancedrc-history": "historija",
"recentchanges": "Nedavne izmjene",
"rcshowhidebots": "$1 botove",
"rcshowhidebots-show": "Prikaži",
"rcshowhidebots-hide": "Sakrij",
- "rcshowhideliu": "$1 registrovane korisnike",
+ "rcshowhideliu": "$1 registrirane korisnike",
"rcshowhideliu-show": "Prikaži",
"rcshowhideliu-hide": "Sakrij",
"rcshowhideanons": "$1 anonimne korisnike",
"recentchangeslinked-summary": "Ova posebna stranica prikazuje promjene na povezanim stranicama.\nStranice koje su na vašem [[Special:Watchlist|spisku praćenja]] su '''podebljane'''.",
"recentchangeslinked-page": "Naslov stranice:",
"recentchangeslinked-to": "Pokaži promjene stranica koji su povezane sa datom stranicom",
- "recentchanges-page-added-to-category": "[[:$1]] dodana je u kategoriju",
+ "recentchanges-page-added-to-category": "Stranica [[:$1]] dodana je u kategoriju",
"recentchanges-page-added-to-category-bundled": "Stranica [[:$1]] dodana je u kategoriju, [[Special:WhatLinksHere/$1|ovu stranicu sadrže druge stranice]]",
- "recentchanges-page-removed-from-category": "[[:$1]] je uklonjena iz kategorije",
+ "recentchanges-page-removed-from-category": "Stranica [[:$1]] uklonjena je iz kategorije",
"recentchanges-page-removed-from-category-bundled": "Stranica [[:$1]] uklonjena je iz kategorije, [[Special:WhatLinksHere/$1|ovu stranicu sadrže druge stranice]]",
"autochange-username": "Automatska promjena MediaWikija",
"upload": "Postavi datoteku",
"listfiles-delete": "obriši",
"listfiles-summary": "Ova posebna stranica prikazuje sve postavljene datoteke.",
"listfiles_search_for": "Traži medije po imenu:",
- "listfiles-userdoesnotexist": "Korisnički račun \"$1\" nije registrovan.",
+ "listfiles-userdoesnotexist": "Korisnički račun \"$1\" nije registriran.",
"imgfile": "datoteka",
"listfiles": "Spisak slika",
"listfiles_thumb": "Smanjeni pregled",
"listduplicatedfiles": "Spisak duplih datoteka",
"listduplicatedfiles-summary": "Ovo je spisak datoteka koje su duplikat nekih drugih datoteka. Prikazane su samo lokalne datoteke.",
"listduplicatedfiles-entry": "[[:File:$1|$1]] ima [[$3|{{PLURAL:$2|jedan duplikat|$2 duplikata}}]].",
- "unusedtemplates": "Nekorišteni šabloni",
+ "unusedtemplates": "Neiskorišteni šabloni",
"unusedtemplatestext": "Ova stranica prikazuje sve stranice u imenskom prostoru {{ns:template}} koji se ne koriste.\nPrije brisanja provjerite da li druge stranice vode na te šablone.",
"unusedtemplateswlh": "ostali linkovi",
"randompage": "Slučajna stranica",
"statistics-files": "Broj postavljenih datoteka",
"statistics-edits": "Broj izmjena od kako je instalirana {{SITENAME}}",
"statistics-edits-average": "Prosječno izmjena po stranici",
- "statistics-users": "Registrovani [[Special:ListUsers|korisnici]]",
+ "statistics-users": "Registrirani [[Special:ListUsers|korisnici]]",
"statistics-users-active": "Aktivni korisnici",
"statistics-users-active-desc": "Korisnici koji su izvršili akciju u toku {{PLURAL:$1|posljednjeg dana|posljednja $1 dana|posljednjih $1 dana}}",
"pageswithprop": "Stranice sa svojstvom stranice",
"brokenredirectstext": "Sljedeća preusmjerenja vode na nepostojeće stranice:",
"brokenredirects-edit": "uredi",
"brokenredirects-delete": "obriši",
- "withoutinterwiki": "Članci bez interwiki linkova",
+ "withoutinterwiki": "Stranice bez jezičkih linkova",
"withoutinterwiki-summary": "Slijedeće stranice nemaju linkove prema verzijama na drugim jezicima.",
"withoutinterwiki-legend": "Prefiks",
"withoutinterwiki-submit": "Prikaži",
- "fewestrevisions": "Stranice sa najmanje izmjena",
+ "fewestrevisions": "Stranice s najmanje izmjena",
"nbytes": "$1 {{PLURAL:$1|bajt|bajta|bajtova}}",
"ncategories": "$1 {{PLURAL:$1|kategorija|kategorije}}",
"ninterwikis": "$1 {{PLURAL:$1|međujezična veza|međujezične veze}}",
"specialpage-empty": "Nema rezultata za ovaj izvještaj.",
"lonelypages": "Siročad",
"lonelypagestext": "Sljedeće stranice nisu povezane niti su uključene transkluzijom u druge stranice na {{GRAMMAR:dativ|{{SITENAME}}}}.",
- "uncategorizedpages": "Nekategorisane stranice",
- "uncategorizedcategories": "Nekategorisane kategorije",
- "uncategorizedimages": "Slike bez kategorije",
- "uncategorizedtemplates": "Šabloni bez kategorije",
+ "uncategorizedpages": "Nekategorizirane stranice",
+ "uncategorizedcategories": "Nekategorizirane kategorije",
+ "uncategorizedimages": "Nekategorizirane datoteke",
+ "uncategorizedtemplates": "Nekategorizirani šabloni",
"unusedcategories": "Neiskorištene kategorije",
"unusedimages": "Nekorištene slike",
"wantedcategories": "Tražene kategorije",
- "wantedpages": "Najpotrebnije stranice",
+ "wantedpages": "Tražene stranice",
"wantedpages-summary": "Spisak nepostojećih stranica sa najviše veza ka njima. Na spisku se ne nalaze stranice do kojih vode preusmjerenja. Za spisak nepostojećih stranica na koje su povezana preumsjerenja, pogledajte [[{{#special:BrokenRedirects}}|spisak pokvarenih preusmerenja]].",
"wantedpages-badtitle": "Nevaljan naslov u setu rezultata: $1",
"wantedfiles": "Tražene datoteke",
"wantedfiletext-cat-noforeign": "Sljedeće datoteke se koriste, ali ne postoje. Dodatno, stranice koje ugrađuju datoteke koje ne postoje prikazane su u [[:$1]].",
"wantedfiletext-nocat": "Sljedeće datoteke se koriste, ali ne postoje. Datoteke iz drugih baza mogu biti navedene iako postoje. Takve datoteke će biti <del>precrtane</del> sa spiska.",
"wantedfiletext-nocat-noforeign": "Sljedeće datoteke se koriste, ali ne postoje.",
- "wantedtemplates": "Potrebni šabloni",
+ "wantedtemplates": "Traženi šabloni",
"mostlinked": "Članci sa najviše linkova",
"mostlinkedcategories": "Kategorije sa najviše linkova",
"mostlinkedtemplates": "Najviše uključene stranice",
"mostimages": "Datoteke s najviše veza",
"mostinterwikis": "Stranice sa najviše međuwikija",
"mostrevisions": "Članci sa najviše izmjena",
- "prefixindex": "Sve stranice sa prefiksom",
+ "prefixindex": "Sve stranice s prefiksom",
"prefixindex-namespace": "Sve stranice s predmetkom (imenski prostor $1)",
"prefixindex-submit": "Prikaži",
"prefixindex-strip": "Sakrij prefiks u spisku",
"shortpages": "Kratke stranice",
- "longpages": "Dugačke stranice",
- "deadendpages": "Stranice bez unutrašnjih veza",
+ "longpages": "Duge stranice",
+ "deadendpages": "Stranice bez unutrašnjih linkova",
"deadendpagestext": "Slijedeće stranice nisu povezane s drugim stranicama na {{SITENAME}}.",
"protectedpages": "Zaštićene stranice",
"protectedpages-indef": "Samo neograničena zaštićenja",
"categories-submit": "Prikaži",
"categoriespagetext": "{{PLURAL:$1|Slijedeća kategorija sadrži|Slijedeće kategorije sadrže}} stranice ili multimedijalne datoteke.\n[[Special:UnusedCategories|Nekorištene kategorije]] nisu prikazane ovdje.\nVidi također [[Special:WantedCategories|zatražene kategorije]].",
"categoriesfrom": "Prikaži kategorije počev od:",
- "deletedcontributions": "Obrisani doprinosi korisnika",
+ "deletedcontributions": "Obrisani korisnički doprinosi",
"deletedcontributions-title": "Obrisani doprinosi korisnika",
"sp-deletedcontributions-contribs": "doprinosi",
"linksearch": "Pretraga vanjskih linkova",
"listgrants-summary": "Ovo je spisak OAuth dozvola s odgovarajućim pravima uz svaku dozvolu s desne strane. Korisnici aplikacijama mogu odobriti da koriste njihov korisnički račun ali uz ograničena prava u zavisnosti od tog koju dozvolu im korisnik omogući. Međutim, aplikacija koja se koristi korisničkim računom ne može koristiti prava koja korisnik ne posjeduje. Moguće je da postoje [[{{MediaWiki:Listgrouprights-helppage}}|dodatne informacije]] o pojedinim pravima.",
"listgrants-grant": "Dozvola",
"listgrants-rights": "Prava",
- "trackingcategories": "Praćenje kategorija",
+ "trackingcategories": "Kategorije za praćenje",
"trackingcategories-summary": "Ova stranica prikazuje prateće kategorije koje MediaWiki softver automatski popunjava. Njihovi nazivi se mogu promijeniti izmjenom odgovarajućih sistemskih poruka u imenskom prostoru {{ns:8}}.",
"trackingcategories-msg": "Praćenje kategorije",
"trackingcategories-name": "Ime poruke",
"wlshowtime": "Vremensko razdoblje za prikaz:",
"wlshowhideminor": "manje izmjene",
"wlshowhidebots": "botove",
- "wlshowhideliu": "registrovane korisnike",
+ "wlshowhideliu": "registrirane korisnike",
"wlshowhideanons": "anonimne korisnike",
"wlshowhidepatr": "patrolirane izmjene",
"wlshowhidemine": "moje izmjene",
"namespace_association": "Povezan imenski prostor",
"tooltip-namespace_association": "Označite ovu kutiju da također uključite razgovor ili imenski prostor teme koja je povezana sa odabranim imenskim prostorom",
"blanknamespace": "(glavni)",
- "contributions": "Doprinosi {{GENDER:$1|korisnika|korisnice|korisnika}}",
+ "contributions": "{{GENDER:$1|Korisnički}} doprinosi",
"contributions-title": "Doprinosi korisnika $1",
"mycontris": "Doprinosi",
"anoncontribs": "Doprinosi",
"contribsub2": "Za {{GENDER:$3|$1}} ($2)",
- "contributions-userdoesnotexist": "Korisnički račun \"$1\" nije registrovan.",
+ "contributions-userdoesnotexist": "Korisnički račun \"$1\" nije registriran.",
"nocontribs": "Nisu nađene promjene koje zadovoljavaju ove uslove.",
"uctop": "(trenutno)",
"month": "Od mjeseca (i ranije):",
"movepagetalktext": "Ako označite ovu kutijicu, odgovarajuća stranica za razgovor, ako postoji, automatski će biti premještena na novi naziv, osim ako već postoji sadržaj na odredišnoj stranici za razgovor.\n\nU tom slučaju, morat ćete ručno premjestiti ili prekopirati stranicu ako to želite.",
"moveuserpage-warning": "<strong>Upozorenje:</strong> Premještate korisničku stranicu. Imajte u vidu da će samo stranica biti premještena, a sam korisnik <em>neće</em> biti preimenovan.",
"movecategorypage-warning": "<strong>Upozorenje:</strong> Premještate stranicu kategorije. Imajte na umu da će samo stranica biti premještena i da sve stranice u staroj kategoriji <em>neće</em> biti ponovo kategorirane u novu kategoriju.",
- "movenologintext": "Morate biti registrovani korisnik i [[Special:UserLogin|prijavljeni]] da biste premjestili stranicu.",
+ "movenologintext": "Morate biti registrirani korisnik i [[Special:UserLogin|prijavljeni]] da biste premjestili stranicu.",
"movenotallowed": "Nemate dopuštenje za premještanje stranica.",
"movenotallowedfile": "Nemate dopuštenja da premještanje datoteke.",
"cant-move-user-page": "Nemate dopuštenje da premještate korisničke stranice (bez podstranica).",
"tooltip-search": "Pretraži {{GRAMMAR:akuzativ|{{SITENAME}}}}",
"tooltip-search-go": "Idi na stranicu s tačno ovim imenom ako postoji",
"tooltip-search-fulltext": "Pretražite stranice s ovim tekstom",
- "tooltip-p-logo": "Glavna stranica",
+ "tooltip-p-logo": "Posjetite početnu stranicu",
"tooltip-n-mainpage": "Posjetite početnu stranicu",
"tooltip-n-mainpage-description": "Posjetite početnu stranicu",
"tooltip-n-portal": "O projektu, šta možete da uradite, gdje se šta nalazi",
"markedaspatrollederror": "Ne može se označiti kao patrolirano",
"markedaspatrollederrortext": "Morate izabrati izmjenu koju želite označiti patroliranom.",
"markedaspatrollederror-noautopatrol": "Nije Vam dopušteno da vlastite izmjene označavate patroliranim.",
- "markedaspatrollednotify": "Ova izmjena na stranici „$1“ je označena kao pregledana.",
+ "markedaspatrollednotify": "Ova izmjena na stranici $1 označena je kao patrolirana.",
"markedaspatrollederrornotify": "Označavanje stranice pregledanom nije uspjelo.",
"patrol-log-page": "Zapisnik patroliranja",
"patrol-log-header": "Ovo je zapisnik patroliranih izmjena.",
"tags-update-remove-not-allowed-multi": "{{PLURAL:$2|Sljedeća oznaka ne dozvoljava da se ručno ukloni|Sljedeće oznake ne dozvoljavaju da se ručno uklone}}: $1",
"tags-edit-title": "Uredi oznake",
"tags-edit-manage-link": "Upravljaj oznakama",
- "tags-edit-revision-selected": "{{PLURAL:$1|Izabrana verzija|Izabrane verzije}} od [[:$2]]:",
+ "tags-edit-revision-selected": "{{PLURAL:$1|Izabrana verzija|Izabrane verzije}} stranice [[:$2]]:",
"tags-edit-logentry-selected": "{{PLURAL:$1|Izabran unos zapisnika|Izabrani unosi zapisnika}}:",
"tags-edit-revision-legend": "Dodaj ili ukloni oznake sa {{PLURAL:$1|ove verzije|svih $1 verzija}}",
"tags-edit-logentry-legend": "Dodaj ili ukloni oznake sa {{PLURAL:$1|ove zapisničke stavke|svih $1 zapisničkih stavki}}",
"rcfilters-invalid-filter": "Filtre no vàlid",
"rcfilters-empty-filter": "No hi ha cap filtre actiu. Es mostren totes les contribucions.",
"rcfilters-filterlist-title": "Filtres",
+ "rcfilters-highlightmenu-title": "Selecciona un color",
"rcfilters-filterlist-noresults": "No s'ha trobat cap filtre",
"rcfilters-filtergroup-registration": "Registre d'usuari",
"rcfilters-filter-registered-label": "Registrats",
"rcfilters-filter-categorization-label": "Canvis de categoria",
"rcfilters-filter-categorization-description": "Registres de pàgines afegides o suprimides de les categories.",
"rcfilters-filter-logactions-label": "Accions registrades",
+ "rcfilters-filter-logactions-description": "Accions administratives, creacions de comptes, eliminacions de pàgines, càrregues...",
"rcnotefrom": "A sota hi ha {{PLURAL:$5|el canvi|els canvis}} a partir de <strong>$3, $4</strong> (fins a <strong>$1</strong>).",
"rclistfrom": "Mostra els canvis nous des de $3, $2",
"rcshowhideminor": "$1 edicions menors",
"apisandbox-reset": "Neteja",
"apisandbox-retry": "Torna a provar",
"apisandbox-loading": "S'està carregant la informació del mòdul d'API «$1»...",
+ "apisandbox-no-parameters": "Aquest mòdul API no té paràmetres.",
"apisandbox-helpurls": "Enllaços d'ajuda",
"apisandbox-examples": "Exemples",
"apisandbox-dynamic-parameters": "Paràmetres adicionals",
"apisandbox-sending-request": "S'està enviant una sol·licitud API...",
"apisandbox-loading-results": "S'estan reben els resultats de l'API...",
"apisandbox-results-error": "S'ha produït un error en carregar la resposta de la consulta de l'API: $1.",
+ "apisandbox-request-selectformat-label": "Mostra les dades de sol·licitud com:",
+ "apisandbox-request-format-url-label": "Cadena de consulta de l'URL",
"apisandbox-request-url-label": "Sol·licita URL:",
"apisandbox-request-json-label": "JSON de sol·licitud:",
"apisandbox-request-time": "Temps de sol·licitud: {{PLURAL:$1|$1 ms}}",
"move-page": "Reanomena $1",
"move-page-legend": "Reanomena la pàgina",
"movepagetext": "Amb el formulari següent reanomenareu una pàgina, movent tot el seu historial al nou nom.\nEl títol anterior es convertirà en una pàgina de redirecció al nou títol.\nPodeu actualitzar automàticament les redireccions que apuntin al títol original.\nSi no ho feu, assegureu-vos de verificar les redireccions [[Special:DoubleRedirects|dobles]] o [[Special:BrokenRedirects|trencades]].\nSerà de la vostra responsabilitat verificar que els enllaços segueixin apuntant cap a on se suposa que ho han de fer.\n\nTingueu en compte que la pàgina <strong>no</strong> serà traslladada si ja existeix una pàgina amb el títol nou, tret que sigui una redirecció sense més historial.\nAixò significa que podeu reanomenar de nou una pàgina al seu títol original si cometeu un error, i que no podeu sobreescriure una pàgina existent.\n\n<strong>Nota:</strong>\nAçò pot ser un canvi dràstic i inesperat en una pàgina que sigui popular; \nassegureu-vos d'entendre les conseqüències que comporta abans de seguir endavant.",
- "movepagetext-noredirectfixer": "Utilizatz lo formulari çaijós per renomenar una pagina, en desplaçant tot son istoric cap al nom novèl.\nL’ancian títol vendrà una pagina de redireccion cap al novèl títol.\nVerificatz plan las [[Special:DoubleRedirects|doblas redireccions]] o las [[Special:BrokenRedirects|redireccions copadas]].\nAvètz la responsabilitat de vos assegurar que los ligams contuhan de puntar cap a lor destinacion supausada.\n\nNotatz que la pagina serà <strong>pas</strong> desplaçada se existís ja una pagina amb lo títol novèl, levat se aquesta darrièra a un istoric de modificacions verge e es siá void, siá una simpla redireccion. Aquò permet de renomenar una pagina cap a sa posicion d’origina se lo desplaçament s’avèra erronèu, e es impossible d’espotir una pagina existenta.\n\n<strong>Atencion !</strong>\nAquò pòt provocar un cambiament radical e imprevist per una pagina sovent consultada ; asseguratz-vos de n'aver comprés las consequéncias abans de contunhar.",
+ "movepagetext-noredirectfixer": "Amb el formulari següent podeu reanomenar una pàgina movent tot el seu historial al nom nou.\nEl títol anterior es convertirà en una pàgina de redirecció al nou títol. \nAssegureu-vos de verificar les redireccions [[Special:DoubleRedirects|dobles]] o [[Special:BrokenRedirects|trencades]].\nÉs responsabilitat vostra assegurar que els enllaços continuen apuntant cap a on se suposa que han d'anar. \n\nTingueu en compte que la pàgina <strong>no</strong> serà traslladada si ja existeix una pàgina amb el títol nou, tret que sigui una redirecció i no tingui més historial. \nAixò significa que podeu reanomenar de nou una pàgina al seu títol original si cometeu un error, i que no podeu sobreescriure una pàgina existent.\n \n<strong>Nota:</strong>\nAixò pot ser un canvi dràstic i inesperat per una pàgina popular; \nassegureu-vos que sabeu el que feu abans de continuar.",
"movepagetalktext": "Si marqueu aquesta casella, la pàgina de discussió associada també serà traslladada automàticament al nou títol, tret que ja existeixi allà una pàgina de discussió no buida.\n\nEn aquest cas, haureu de traslladar o fusionar la pàgina manualment si ho desitgeu.",
"moveuserpage-warning": "'''Atenció:''' Esteu a punt de moure una pàgina d'usuari. Tingueu en compte que només la pàgina es desplaçarà i que el compte d'usuari ''no'' canviarà de nom.",
"movecategorypage-warning": "<strong>Avís:</strong> Esteu a punt de moure una pàgina de categoria. Tingueu en compte que només es mourà aquesta pàgina, i que les pàgines dins la categoria antiga <em>no</em> es recategoritzaran automàticament en la nova.",
"log-name-tag": "Registre d'etiquetes",
"rightsnone": "(cap)",
"revdelete-summary": "el resum d'edició",
+ "rightslogentry-temporary-group": "$1 (temporal, fins a $2)",
"feedback-adding": "S'està afegint el comentari a la pàgina...",
"feedback-back": "Enrere",
"feedback-bugcheck": "Fantàstic! Comproveu que no sigui un dels [$1 problemes ja coneguts].",
"cannotauth-not-allowed": "No teniu permisos per utilitzar la pàgina",
"changecredentials": "Canvi de dades credencials",
"changecredentials-submit": "Canvia les dades credencials",
+ "changecredentials-invalidsubpage": "$1 no és tipus de credencial vàlid.",
"changecredentials-success": "Les vostres credencials han estat canviades.",
"removecredentials": "Suprimeix les credencials",
"removecredentials-submit": "Suprimeix les credencials",
"showhideselectedlogentries": "Гайта/къайлаяха хаьржина башхонаш",
"checkbox-select": "Харжар: $1",
"checkbox-all": "Массо",
- "checkbox-none": "ХӀума а",
+ "checkbox-none": "ХӀума",
"checkbox-invert": "Инверт ян",
"allpages": "Массо агӀонаш",
"nextpage": "ТӀаьхьа йогӀу агӀо ($1)",
"talk": "وتووێژ",
"views": "بینینەکان",
"toolbox": "ئامرازەکان",
+ "tool-link-userrights-readonly": "بینینی گرووپەکانی {{GENDER:$1|بەکارھێنەر}}",
+ "tool-link-emailuser": "ئیمەیلی ئەم {{GENDER:$1|بەکارھێنەر}}ە",
"userpage": "بینینی پەڕەی بەکارھێنەر",
"projectpage": "پەڕەی پرۆژە نیشان بدە",
"imagepage": "پەڕەی پەڕگە نیشان بدە",
"jumptonavigation": "ڕێدۆزی",
"jumptosearch": "گەڕان",
"view-pool-error": "ببورە، لەم کاتەدا ڕاژەکارەکان زیادەباریان لە سەرە.\nژمارەیەکی زۆر لە بەکارھێنەران ھاوکات ھەوڵی دیتنی ئەم پەڕەیان داوە.\nتکایە پێش ھەوڵی دووبارە بۆ دیتنی ئەم پەڕە، نەختێک بوەستە.\n\n$1",
+ "generic-pool-error": "ببورە، لەم کاتەدا ڕاژەکارەکان زیادەباریان لە سەرە.\nژمارەیەکی زۆر لە بەکارھێنەران ھاوکات ھەوڵی دیتنی ئەم پەڕەیان داوە.\nتکایە پێش ھەوڵی دووبارە بۆ دیتنی ئەم پەڕە، کەمێک بووەستە.",
"pool-timeout": "لەکات دەرچوون ڕوویدا لەکاتی چاوەڕوانکردنی داخستندا",
"pool-errorunknown": "هەڵەی نەزانراو",
"aboutsite": "دەربارەی {{SITENAME}}",
"resetpass-submit-loggedin": "تێپەڕوشە بگۆڕە",
"resetpass-submit-cancel": "ھەڵوەشاندنەوە",
"resetpass-wrong-oldpass": "تێپەڕوشەی ھەنووکەیی یان تێپەڕوشەی کاتی ھەڵەیە.\nوا دیارە تێپەڕوشەکەت بە سەرکەوتوویی گۆڕدراوە یان داوای تێپەڕوشەیەکی نوێت کردووە.",
+ "resetpass-temp-emailed": "تۆ بە تێپەڕوشەیەکی کاتیی ھاتوویتە ژوورەوە. بۆ تەواوکردنی چوونە ژوورەوە تێپەڕوشەیەکی نوێ لێرە دابنێ.",
"resetpass-temp-password": "تێپەڕوشەی کاتی:",
"passwordreset": "ڕێکخستنەوەی تێپەڕوشە",
+ "passwordreset-text-one": "ئەم فۆرمە تەواو بکە بۆ بەدەستھێنانی تێپەڕ وشەیەکی کاتیی بە ئیمەیڵ",
+ "passwordreset-text-many": "{{PLURAL:$1|یەکێک لەم بۆشاییانە بڕ بکەرەوە بۆ بەدەستھێنانی تێپەڕ وشەیەکی کاتیی بە ئیمەیڵ}}",
"passwordreset-username": "ناوی بەکارھێنەری:",
"passwordreset-domain": "پاوان:",
"passwordreset-email": "ناونیشانی ئیمەیل:",
"passwordreset-emailtext-ip": "کەسێک (لەوانەیە خۆت، بە ناونیشانی ئایپیی $1) داوای ڕیسێتکردنەوەی تێپەڕوشەکەت لە {{SITENAME}}دا ($4) کردووە. {{PLURAL:$3|ھەژماری بەکارھێنەریی ژێرەوە پەیوەندیی ھەیە|ھەژمارە بەکارھێنەرییەکانی ژێرەوە پەیوەندییان ھەیە}} بەم ناونیشانەی ئیمەیلەوە:\n\n$2\n\n{{PLURAL:$3|ئەم تێپەڕوشە کاتییە|ئەم تێپەڕوشە کاتییانە}} لە {{PLURAL:$5|ڕۆژێک|$5 ڕۆژ}}دا بەسەردەچێت.\nدەبێ بچیتە ژوورەوە و ھەر ئێستا تێپەڕوشەیەکی نوێ ھەڵبژێریت. ئەگەر کەسێکی تر ئەم داواکارییەی کردووە،\nیان ئەگەر تێپەڕوشە سەرەتاییەکەت ھاتووەتەوە بیرت و ئیتر ناتەوێ بیگۆڕی، دەتوانی گوێ بەم پەیامە نەدەیت و ھەر لە تێپەڕوشە کۆنەکەت کەڵک وەربگریت.",
"passwordreset-emailtext-user": "بەکارھێنەر $1 لە {{SITENAME}} ڕیسێتکردنەوەی تێپەڕوشەکەت لە {{SITENAME}}دا ($4) کردووە. {{PLURAL:$3|ھەژماری بەکارھێنەریی ژێرەوە پەیوەندیی ھەیە|ھەژمارە بەکارھێنەرییەکانی ژێرەوە پەیوەندییان ھەیە}} بەم ناونیشانەی ئیمەیلەوە:\n\n$2\n\n{{PLURAL:$3|ئەم تێپەڕوشە کاتییە|ئەم تێپەڕوشە کاتییانە}} لە {{PLURAL:$5|ڕۆژێک|$5 ڕۆژ}}دا بەسەردەچێت.\nدەبێ بچیتە ژوورەوە و ھەر ئێستا تێپەڕوشەیەکی نوێ ھەڵبژێریت. ئەگەر کەسێکی تر ئەم داواکارییەی کردووە، یان ئەگەر تێپەڕوشە سەرەتاییەکەت ھاتووەتەوە بیرت و ئیتر ناتەوێ بیگۆڕی، \nدەتوانی گوێ بەم پەیامە نەدەیت و ھەر لە تێپەڕوشە کۆنەکەت کەڵک وەربگریت.",
"passwordreset-emailelement": "ناوی بەکارھێنەری: \n$1\n\nتێپەڕوشەی کاتی: \n$2",
- "passwordreset-emailsentemail": "ئیمەیلێکی ڕیسێتکردنەوەی تێپەڕوشە نێردرا.",
+ "passwordreset-emailsentemail": "ئەگەر ناونیشانی ئەم ئیمەیڵە بەستراوەتەوە بە ھەژمارەکەتەوە، ئەوا ڕێکخستنەوەی تێپەڕ وشەت بە ئیمەیڵ پێ دەگات.",
+ "passwordreset-emailsentusername": "ئەگەر ناونیشانی ئەم ئیمەیڵە بەستراوەتەوە بە ناوی بەکارھێنەرتەوە، ئەوا ڕێکخستنەوەی تێپەڕ وشەت بە ئیمەیڵ پێ دەگات.",
+ "passwordreset-invalidemail": "ناونیشانی ئیمەیڵی نەگونجاو",
+ "passwordreset-nodata": "نە ئیمەیڵێک یان ناوی بەکارھێنەرێک ھەڵبژێردرا",
"changeemail": "گۆڕینی ناونیشانی ئیمەیل",
- "changeemail-header": "ناونیشانی ئیمەیلی ھەژمار بگۆڕە",
+ "changeemail-header": "ئەم فۆرمە تەواو بکە بۆ گۆڕینی ناونیشانی ئیمەیڵەکەت. ئەگەر ئارەزووی ئەوە دەکەیت کە ھەر ئیمەیڵێک لە ھەژمارەکەت بکەیتەوە، بۆشایی ئیمەیڵی نوێ بە بەتاڵی بەجێ بھێڵە لەکاتی پاشەکەوتکردنی فۆرمەکە.",
"changeemail-no-info": "بۆ گەیشتنی راستەوخۆ بەم پەڕە دەبێت بچیتە ژوورەوە.",
"changeemail-oldemail": "ئەدرەسی ئیمەیڵی ئێستا:",
"changeemail-newemail": "ناونیشانی ئیمەیلی نوێ:",
+ "changeemail-newemail-help": "ئەم بۆشاییە دەبێت خاڵی بێت ئەگەر دەتەوێت ناونیشانی ئیمەیڵەکەت لابەریت. تۆ ناتوانیت ئیمەیڵی ڕێکخستنەوەی تێپەڕە وشە یاخود ھەر ئیمەیڵێکی تری ئەم ویکییەت پێ بگات ئەگەر ناونیشانی پۆستە ئەلیکترۆنییەکە لاببرێت.",
"changeemail-none": "(ھیچ)",
"changeemail-password": "تێپەڕوشەکەت لە {{SITENAME}}:",
"changeemail-submit": "ئەمەیل بگۆڕە",
+ "changeemail-nochange": "تکایە ناونیشانی ئیمەیڵێکی جیاواز بەکار بھێنە.",
"bold_sample": "دەقی ئەستوور",
"bold_tip": "دەقی ئەستوور",
"italic_sample": "دەقی لار",
"editusergroup": "گرووپەکانی بەکارھێنەر دەستکاری بکە",
"editinguser": "گۆڕینی مافە بەکارھێنەرییەکانی {{GENDER:$1|بەکارھێنەر}} <strong>[[User:$1|$1]]</strong> $2",
"userrights-editusergroup": "گرووپە بەکارھێنەرییەکان دەستکاری بکە",
+ "userrights-viewusergroup": "بینینی گرووپەکانی {{GENDER:$1|بەکارھێنەر}}",
"saveusergroups": "گرووپەکانی بەکارھێنەر پاشەکەوت بکە",
"userrights-groupsmember": "ئەندامە لە:",
"userrights-groupsmember-auto": "ئەندامی ناڕاشکاوە لە:",
"right-override-export-depth": "هەناردنی لاپەڕەکان کە لاپەڕەکانی بەستەر پێدراو تا قووڵایی 5 لەخۆ بگرێت",
"right-sendemail": "ناردنی ئیمەیل بۆ بەکارھێنەرانی تر",
"right-managechangetags": "دروستکردن و سڕینەوەی [[Special:Tags|تاگەکان]] لە بنکەدراوە",
+ "grant-group-email": "ناردنی ئیمەیل",
+ "grant-sendemail": "ناردنی ئیمەیل بۆ بەکارھێنەرانی تر",
"newuserlogpage": "لۆگی دروستکردنی بەکارھێنەر",
"newuserlogpagetext": "ئەمە لۆگێکی دروستکردنی بەکارھێنەرە.",
"rightslog": "لۆگی مافەکانی بەکارھێنەر",
"emailpagetext": "دەتوانی لەم فۆرمەی ژێرەوە بۆ ناردنی ئیمەیلێک بۆ ئەم {{GENDER:$1|بەکارھێنەر}}ە کەڵک وەربگریت.\nئەو ناونیشانە ئیمەیلە لە [[Special:Preferences|ھەڵبژاردەکانی بەکارھێنەریتدا]] نووسیوتە، لە ناونیشانی «لەلایەن»ی (From) ئیمەیلەکەدا نیشان دەدرێت، کە وایە بەکارھێنەری وەرگر دەتوانێ ڕاستەوخۆ وەڵامت بداتەوە.",
"defemailsubject": "ئیمەیلی {{SITENAME}} لە بەکارھێنەر «$1»ەوە",
"usermaildisabled": "ئیمەیڵی بەکارهێنەر لەکاردانیە",
+ "usermaildisabledtext": "ناتوانیت ئیمەیڵ بۆ بەکارھێنەرانی تر بنێریت لەسەر ئەم ویکیپیدیایە",
"noemailtitle": "هیچ ناونیشانێکی ئیمەیل نییە",
"noemailtext": "ئەم بەکارھێنەرە ناونێشانێکی گونجاوی ئیمێلی دەستنیشان نەکردووە.",
"nowikiemailtext": "ئەم بەکارهێنەرە تایبەتمەندیی وەرنەگرتنی ئیمەیل لە بەکارهێنەرانی دیکەی هەلبژاردووە.",
"enotif_lastvisited": "بۆ بینینی ھەموو گۆرانکارییەکانی پاش دوایین سەردانت $1 ببینە.",
"enotif_lastdiff": "بۆ بینینی ئەم گۆڕانکارییە $1 ببینە.",
"enotif_anon_editor": "بەکارھێنەری نەناسراو $1",
- "enotif_body": "â\80«$WATCHINGUSERNAMEÛ\8c بÛ\95Ú\95Û\8eزØ\8c\n\n$PAGEINTRO $NEWPAG\n\nÚ©Ù\88رتÛ\95Û\8c دÛ\95ستکارÛ\8cÛ\8cÛ\95Ú©Û\95Û\8c: $PAGESUMMARY $PAGEMINOREDIT\n\nÙ¾Û\95Û\8cÙ\88Û\95Ù\86دÛ\8c Ù\84Û\95Ú¯Û\95Úµ دÛ\95ستکارÛ\8cÚ©Û\95ر:\nÙ\86اÙ\85Û\95: $PAGEEDITOR_EMAIL\nÙ\88Û\8cÚ©Û\8c: $PAGEEDITOR_WIKI\n\nتا سÛ\95رداÙ\86Û\8c ئÛ\95Ù\85 Ù¾Û\95Ú\95Û\95Û\8cÛ\95 Ù\86Û\95Ú©Û\95Û\8cتØ\8c Ú¯Û\86Ú\95اÙ\86کارÛ\8cÛ\8cÛ\95کاÙ\86Û\8c داھاتÙ\88Ù\88Û\8c Ù¾Û\95Ú\95Û\95Ú©Û\95ت Ù¾Û\8e Ú\95اÙ\86اگÛ\95Û\8cÛ\8eÙ\86درÛ\8eت. Ù\87Û\95رÙ\88Û\95ھا دÛ\95تÙ\88اÙ\86Û\8c ئاڵاکاÙ\86Û\8c Ú\95اگÛ\95Û\8cاÙ\86دÙ\86 Ù\84Û\95 Ù¾Û\95Ú\95Û\95Û\8c Ú\86اÙ\88دÛ\8eرÛ\8cÛ\8cÛ\95Ú©Û\95تدا Ù\84Û\95 سÛ\95رÛ\95تاÙ\88Û\95 Ú\95Û\8eÚ© بخÛ\95Û\8cتÛ\95Ù\88Û\95.\n\nبÛ\95 سپاسÛ\95Ù\88Û\95Ø\8c سÛ\8cستÛ\95می ڕاگەیاندنی {{SITENAME}}\n\n--\nبۆ گۆڕینی رێکخستنەکانی ڕاگەیاندن بە ئیمەیل، بڕوانە\n{{canonicalurl:{{#special:Preferences}}}}\n\nبۆ گۆڕینی ڕێکخستنەکانی پێرستی چاودێرییەکەت، بڕوانە\n{{canonicalurl:{{#special:EditWatchlist}}}}\n\nبۆ سڕینەوەی پەڕەکە لە پێرستی چاودێرییەکەت، بڕوانە\n$UNWATCHURL\n\nکاردانەوە و یارمەتیی زۆرتر:\n$HELPPAGE",
+ "enotif_body": "â\80«$WATCHINGUSERNAMEÛ\8c بÛ\95Ú\95Û\8eزØ\8c\n\n$PAGEINTRO $NEWPAG\n\nÚ©Ù\88رتÛ\95Û\8c دÛ\95ستکارÛ\8cÛ\8cÛ\95Ú©Û\95Û\8c: $PAGESUMMARY $PAGEMINOREDIT\n\nÙ¾Û\95Û\8cÙ\88Û\95Ù\86دÛ\8c Ù\84Û\95Ú¯Û\95Úµ دÛ\95ستکارÛ\8cÚ©Û\95ر:\nÙ\86اÙ\85Û\95: $PAGEEDITOR_EMAIL\nÙ\88Û\8cÚ©Û\8c: $PAGEEDITOR_WIKI\n\nتا سÛ\95رداÙ\86Û\8c ئÛ\95Ù\85 Ù¾Û\95Ú\95Û\95Û\8cÛ\95 Ù\86Û\95Ú©Û\95Û\8cتØ\8c Ú¯Û\86Ú\95اÙ\86کارÛ\8cÛ\8cÛ\95کاÙ\86Û\8c داھاتÙ\88Ù\88Û\8c Ù¾Û\95Ú\95Û\95Ú©Û\95ت Ù¾Û\8e Ú\95اÙ\86اگÛ\95Û\8cÛ\8eÙ\86درÛ\8eت. Ù\87Û\95رÙ\88Û\95ھا دÛ\95تÙ\88اÙ\86Û\8c ئاڵاکاÙ\86Û\8c Ú\95اگÛ\95Û\8cاÙ\86دÙ\86 Ù\84Û\95 Ù¾Û\95Ú\95Û\95Û\8c Ú\86اÙ\88دÛ\8eرÛ\8cÛ\8cÛ\95Ú©Û\95تدا Ù\84Û\95 سÛ\95رÛ\95تاÙ\88Û\95 Ú\95Û\8eÚ© بخÛ\95Û\8cتÛ\95Ù\88Û\95.\n\nبÛ\95 سÙ\88پاسÛ\95Ù\88Û\95Ø\8c سÛ\8cستمی ڕاگەیاندنی {{SITENAME}}\n\n--\nبۆ گۆڕینی رێکخستنەکانی ڕاگەیاندن بە ئیمەیل، بڕوانە\n{{canonicalurl:{{#special:Preferences}}}}\n\nبۆ گۆڕینی ڕێکخستنەکانی پێرستی چاودێرییەکەت، بڕوانە\n{{canonicalurl:{{#special:EditWatchlist}}}}\n\nبۆ سڕینەوەی پەڕەکە لە پێرستی چاودێرییەکەت، بڕوانە\n$UNWATCHURL\n\nکاردانەوە و یارمەتیی زۆرتر:\n$HELPPAGE",
"created": "دروستکرا",
"changed": "گۆڕدرا",
"deletepage": "پەڕە بسڕەوە",
"alreadyrolled": "دوایین گۆڕانکارییەکان لەسەر [[:$1]] لە لایەن [[User:$2|$2]] ناگەڕێندرێنەوە ([[User talk:$2|لێدوان]]{{int:pipe-separator}}[[Special:Contributions/$2|{{int:contribslink}}]])؛ کەسێکی تر لە پێشدا دەستکاریی کردووە یان گەڕاندوویەتەوە.\n\nدوایین دەستکاری ئەم پەڕە [[User:$3|$3]] کردوویە ([[User talk:$3|لێدوان]]{{int:pipe-separator}}[[Special:Contributions/$3|{{int:contribslink}}]]).",
"editcomment": "پوختەی دەستکاری <em>$1</em> بوو.",
"revertpage": "گەڕاندنەوەی دەستکارییەکانی [[Special:Contributions/$2|$2]] ([[User talk:$2|لێدوان]]) بۆ دوایین پێداچوونەوەی [[User:$1|$1]]",
- "revertpage-nouser": "دەستکارییەکانی بەکارھێنەرێکی شاڕدراوە بۆ دوایین پێداچوونەوەی {{GENDER:$1|[[User:$1|$1]]}} گەڕێنرایەوە.",
+ "revertpage-nouser": "دەستکارییەکانی بەکارھێنەرێکی شاردراوە بۆ دوایین پێداچوونەوەی {{GENDER:$1|[[User:$1|$1]]}} گەڕێنرایەوە.",
"rollback-success": "دەستکارییەکانی $1 وەرگێرایەوە؛<br />\nگۆڕدرا بۆ دوایین پێداچوونەوەی $2.",
"sessionfailure": "لەوەدەچی کێشەیەک لە دانیشتنی چوونەژوورەوەت (login session)دا ببێت.\nئەم کردەوە هەڵوەشێندرایەوە بۆ بەرگری لە دزینی دراوەکانی دانیشتن.\nتکایە بگەڕێوە بۆ پەڕەی پێشوو و نوێی بکەوە، ئینجا دیسان تاقیی بکەوە.",
"changecontentmodel-title-label": "سەرناوی پەڕە",
"confirmemail_body_set": "کەسێک، لەوانەیە خۆت، لە ناونیشانی IPی $1 ـەوە،\nلە {{SITENAME}}دا، ناونیشانیی ئیمێلی ھەژماری «$2»ی کردووە بەم ناونیشانە.\n\nبۆ پشتڕاستکردنەوەی ئەوەی کە ئەم ھەژمارە بە ڕاستی ھی تۆیە و بۆ چالاککردنەوەی ئامرازە ئیمێلییەکانی {{SITENAME}}، ئەم لینکە لە وێبگەڕەکەتدا بکەرەوە:\n\n$3\n\nئەگەر ھەژمارەکە ھی تۆ *نییە*، بۆ هەڵوەشاندنەوەی پشتڕاستکردنەوەی ناونیشانی ئیمێل، شوێنی ئەم لینکە بکەوە:\n\n$5\n\nماوەی ئەم کۆدی پشتڕاستکردنەوەیە لە $4دا بە سەر دەچێت.",
"confirmemail_invalidated": "بڕواپیکردنی ناونیشانی ئیمەیل هەڵوەشێندراوە",
"invalidateemail": "هەڵوەشاندنەوەی بڕواپێکردنی ئیمەیل",
+ "notificationemail_body_changed": "کەسێک، کە لەوانەیە خۆت بووبێت، لە ناونیشانی IPی $1، ناونیشانی پۆستی ئەلیکترۆنی لە $2ەوە گۆڕی بە $3 لە {{SITENAME}}.\n\nئەگەر ئەمە تۆ نەبوویت، ھەر ئێستا پەیوەندی بە بەڕێوەبەرێکی سایتەکەوە بکە.",
"scarytranscludetoolong": "[URL زۆر درێژە]",
"deletedwhileediting": "'''ھۆشیار بە''': ئەم پەڕە دوای ئەوە تۆ دەستکاریکردنیت دەستپێکرد سڕاوەتەوە!",
"confirmrecreate-noreason": "بەکارھێنەر [[User:$1|$1]] ([[User talk:$1|talk]]) پەڕەکەی سڕییەوە پاش ئەوەی تۆ دەستکاریکردنی پەڕەکەت دەستپێکرد. تکایە پشتڕاستی بکەوە کە بە ڕاستی دەتەوێ دیسان ئەم پەڕە دروست بکەیتەوە.",
"special-characters-group-thai": "تایلەندی",
"special-characters-group-khmer": "خمێری",
"log-action-filter-all": "ھەموو",
- "log-action-filter-upload-upload": "بارکردنی نوێ"
+ "log-action-filter-upload-upload": "بارکردنی نوێ",
+ "authmanager-email-label": "ئیمەیڵ"
}
"sig_tip": "Имзанъыз ве тарих",
"hr_tip": "Горизонталь сызыкъ (пек сыкъ къулланманъыз)",
"summary": "Денъиштирменинъ къыскъа тарифи:",
- "subject": "Мевзу/серлева:",
+ "subject": "Мевзу:",
"minoredit": "Бу, кичик денъиштирмедир",
"watchthis": "Саифени козет",
"savearticle": "Саифени сакъла",
+ "savechanges": "Денъиштирмелерни сакъла",
"preview": "Бакъып чыкъув",
"showpreview": "Бакъып чыкъ",
"showdiff": "Денъиштирмелерни косьтер",
"saveprefs": "Сакъла",
"restoreprefs": "Бутюн ог бельгиленген сазламаларны къайтар",
"prefs-editing": "Саифелерни денъиштирюв",
- "rows": "Сатыр",
- "columns": "Сутун",
"searchresultshead": "Къыдырув",
"recentchangesdays": "Сонъки денъиштирмелер саифесинде косьтериледжек кунь сайысы:",
"recentchangesdays-max": "(энъ чокъ $1 {{PLURAL:$1|1=кунь|кунь}})",
"sig_tip": "İmzañız ve tarih",
"hr_tip": "Gorizontal sızıq (pek sıq qullanmañız)",
"summary": "Deñiştirmeniñ qısqa tarifi:",
- "subject": "Mevzu/serleva:",
+ "subject": "Mevzu:",
"minoredit": "Bu, kiçik deñiştirmedir",
"watchthis": "Saifeni közet",
"savearticle": "Saifeni saqla",
+ "savechanges": "Deñiştirmelerni saqla",
"preview": "Baqıp çıquv",
"showpreview": "Baqıp çıq",
"showdiff": "Deñiştirmelerni köster",
"saveprefs": "Saqla",
"restoreprefs": "Bütün ög belgilengen sazlamalarnı qaytar",
"prefs-editing": "Saifelerni deñiştirüv",
- "rows": "Satır",
- "columns": "Sutun",
"searchresultshead": "Qıdıruv",
"recentchangesdays": "Soñki deñiştirmeler saifesinde kösterilecek kün sayısı:",
"recentchangesdays-max": "(eñ çoq $1 {{PLURAL:$1|kün|kün}})",
"difference-title": "$1: Porovnání verzí",
"difference-title-multipage": "$1 a $2: Porovnání stránek",
"difference-multipage": "(Rozdíly mezi stránkami)",
- "lineno": "Řádka $1:",
+ "lineno": "Řádek $1:",
"compareselectedversions": "Porovnat vybrané verze",
"showhideselectedversions": "Zobrazit/skrýt vybrané revize",
"editundo": "zrušit editaci",
"editcomment": "Shrnutí editace bylo: <em>$1</em>.",
"revertpage": "Editace uživatele „[[Special:Contributions/$2|$2]]“ ([[User talk:$2|diskuse]]) vráceny do předchozího stavu, jehož autorem je „[[User:$1|$1]]“",
"revertpage-nouser": "Editace skrytého uživatele vráceny do předchozího stavu, jehož {{GENDER:$1|autorem|autorkou}} je „[[User:$1|$1]]“",
- "rollback-success": "Editace uživatele $1 byly vráceny na poslední verzi od uživatele $2.",
+ "rollback-success": "Editace {{GENDER:$3|uživatele|uživatelky}} $1 byly vráceny na poslední verzi od {{GENDER:$4|uživatele|uživatelky}} $2.",
"rollback-success-notify": "Editace uživatele $1 byly vráceny;\nobnovena poslední verze od uživatele $2. [$3 Zobrazit změny]",
"sessionfailure-title": "Chyba relace",
"sessionfailure": "Zřejmě je nějaký problém s vaším přihlášením;\nvámi požadovaná činnost byla stornována jako prevence před neoprávněným přístupem.\nStiskněte tlačítko „zpět“, obnovte stránku, ze které jste přišli, a zkuste činnost znovu.",
"createacct-emailoptional": "Adres e-mail (òptacëjno)",
"createacct-email-ph": "Pòdôj swój adres e-mail.",
"createaccountmail": "Ùżij timczasowégò hasła i wësli je na pòdóny adres e-mail.",
+ "createaccountreason": "Przëczëna:",
+ "createacct-reason": "Przëczëna",
"createacct-submit": "Ùsadzë kònto",
"badretype": "Wprowadzone parole jinaczą sã midze sobą.",
"userexists": "To miono brëkòwnika je ju w ùżëcym. Proszã wëbrac jiné miono.",
"hiddencategories": "Na starna przënôleżi do w {{PLURAL:$1|1 zatacony kategòrëji|$1 zataconych kategòrëjów}}:",
"permissionserrorstext-withaction": "Ni môsz przëstãpù do $2, z {{PLURAL:$1|nôslédny przëczënë|nôslédnych przëczënów}}:",
"recreate-moveddeleted-warn": "'''Bôczënk! Chcesz usadzëc starnã, chtërna wczasni òsta rëmniãtô.'''\n\nÙgwësni sã, czë pònowné ùsôdzenié ti starnë je kònieczné. \nNiżi je widzec register rëmaniów i zmian pòzwë ti starnë:",
+ "undo-summary": "Anulowanié wersje $1 aùtora [[Special:Contributions/$2|$2]] ([[User talk:$2|diskùsjô]])",
"viewpagelogs": "Òbôczë rejestrë dzéjanió dlô ti starnë",
"currentrev": "Aktualnô wersëjô",
"currentrev-asof": "Aktualnô wersëjô na dzéń $1",
"page_last": "kùńc",
"histlegend": "Legenda: (aktualnô) = różnice w przërównanim do aktualny wersëje,\n(wczasniészô) = różnice w przërównanim do wczasniészi wersëje, D = drobné edicëje",
"history-fieldset-title": "Przezérôj historëjã",
+ "history-show-deleted": "Leno rëmniãté",
"histfirst": "òd nôstarszich",
"histlast": "òd nônowszich",
"history-feed-item-nocomment": "$1 ò $2",
"revdelete-show-file-submit": "Jo",
"revdelete-radio-set": "ùtacony",
"revdelete-radio-unset": "widzawny",
+ "revdelete-log": "Przëczëna:",
"revdel-restore": "Zjinaczë widzawnotã",
"pagehist": "Historëjô starnë",
"deletedhist": "Rëmniãtô historëjô edicëji",
"revdelete-hide-current": "Pòkôza sã fela przë taceniu wersëji datowóny na $2, $1. To je nônowszô wersëjô starnë, chtërnô ni mòże bëc zataconô.",
"revdelete-show-no-access": "Pòkôza sã fela przë próbie wëskrzënieniô elementu datowónegò na $2, $1. Widzawnota negò elementu òsta ògrańczonô - ni môsz przëstãpù.",
+ "mergehistory-reason": "Przëczëna:",
"revertmerge": "Rozdzélë",
"history-title": "Historiô zjinaków dlô \"$1\"",
"difference-title": "$1 — rozeszłoscë midzë wersjama",
"prefs-help-realname": "Prôwdzëwé miono je òptacjowé, a czej je dôsz, òstanié ùżëté do pòdpisaniô Twòjégò wkładu",
"prefs-help-email": "Adresa e-mail je òptacëjnô, zezwôlô równak sélac do ce nową parolã jak tã zabëjesz.\nMòżesz zezwòlëc jinszim brëkòwniką na łączbã z Tobą przez Twòją starnã abò starnã diskùsëji, bez mùszebnotë wëskrzënianiô swòjich pòdôwków.",
"editinguser": "Zmiana praw brëkòwnika '''[[User:$1|$1]]''' ([[User talk:$1|{{int:talkpagelinktext}}]]{{int:pipe-separator}}[[Special:Contributions/$1|{{int:contribslink}}]])",
+ "userrights-reason": "Przëczëna:",
"group": "Karno:",
"group-user": "Brëkòwnicë",
"group-autoconfirmed": "Aùtomatno zacwierdzony brëkòwnicë",
"nolinkstoimage": "Niżódnô starna nie òdwòłëje sã do negò lopka.",
"sharedupload": "Nen lopk je na $1 ë mòże bëc brëkòwóny w jinych ùdbach.",
"uploadnewversion-linktext": "Wladëjë nową wersëjã negò lopka",
+ "filerevert-comment": "Przëczëna:",
+ "filedelete-comment": "Przëczëna:",
"listredirects": "Lësta przeczerowaniów",
"unusedtemplates": "Pùsté szablónë",
"randompage": "Kawlowô starna",
"shortpages": "Nôkrótszé starnë",
"longpages": "Nôdłëgszé starnë",
"protectedpages": "Zazychrowóné starnë",
+ "protectedpages-timestamp": "Czasowô sygnatura",
+ "protectedpages-reason": "Przëczëna",
"listusers": "Lësta brëkòwników",
"newpages": "Nowé starnë",
"newpages-username": "Pòzwa brëkòwnika:",
"allpagessubmit": "Pòkôżë",
"allpagesprefix": "Pòkôżë naczënającë sã òd:",
"categories": "Kategòrëje",
+ "deletedcontributions": "Rëmniãti wkłôd brëkòwnika",
+ "deletedcontributions-title": "Rëmniãti wkłôd brëkòwnika",
"linksearch": "Bùtnowé lënczi",
"activeusers": "Lësta aktiwnëch brëkòwników",
"listgrouprights-members": "(lësta nôlëżników karna)",
"rollbacklink": "copnij",
"rollbackfailed": "Nie szło copnąc zmianë",
"alreadyrolled": "Ni mòże copnąc slédny edicëji starnë [[:$1]], chtërny ùsôdzcą je [[User:$2|$2]] ([[User talk:$2|Diskùsëjô]]{{int:pipe-separator}}[[Special:Contributions/$2|{{int:contribslink}}]]);\nchtos jiny ju zeditowôł starnã abò copnął zmianë.\n\nSlédnym ùsódzcą starnë bëł [[User:$3|$3]] ([[User talk:$3|Diskùsëjô]]{{int:pipe-separator}}[[Special:Contributions/$3|{{int:contribslink}}]]).",
+ "revertpage": "Edicje brëkòwnika [[Special:Contributions/$2|$2]] ([[User talk:$2|diskùsjô]]) òstałë òdrzucóné. Aùtorã przëwrócóny wersji je [[User:$1|$1]].",
+ "rollback-success": "Edicje brëkòwnika $1 òstałë òdrzucóné; \nòsta przëwrócónô òstatnô wersjô, aùtorã chtërny je $2.",
+ "rollback-success-notify": "Edicje brëkòwnika $1 òstałë òdrzucóné; \nòsta przëwrócónô òstatnô wersjô, aùtorã chtërny je $2. [$3 Pòkażë zjinaczi]",
"protectlogpage": "Zazychrowóné",
"protectedarticle": "zazychrowónô [[$1]]",
"modifiedarticleprotection": "zmienionô léga zazychrowaniô [[$1]]",
"viewdeletedpage": "Òbaczë rëmóne starnë",
"undeletebtn": "Doprowadzë nazôd",
"undeletelink": "wëskrzëni abò doprowadzë nazôd",
+ "undeletecomment": "Przëczëna:",
"undelete-show-file-submit": "Jo",
"namespace": "Rum mionów:",
"invert": "Òdwrócë zaznaczenié",
+ "namespace_association": "sparłãczóné òbrëmié mionów",
"blanknamespace": "(Przédnô)",
"contributions": "Wkłôd {{GENDER:$1|brëkòwnika|brëkòwniczczi}}",
"contributions-title": "Wkłôd brëkòwnika $1",
"sp-contributions-newbies": "Pòkażë edicëjã blós nowich brëkòwników",
"sp-contributions-newbies-sub": "Dlô nowich brëkòwników",
"sp-contributions-blocklog": "historëjô blokòwaniô",
+ "sp-contributions-deleted": "rëmniãti wkłôd brëkòwnika",
"sp-contributions-talk": "diskùsjô",
+ "sp-contributions-blocked-notice-anon": "Ta adresa IP je w tim sztërkù zablokòwónô.\nSlédny wpisënk z registru blokòwaniów je widzec niżi:",
"sp-contributions-search": "Szëkba za edicëjama",
"sp-contributions-username": "Adresa IP abò miono brëkòwnika:",
+ "sp-contributions-toponly": "Pòkażë leno slédné wersje",
+ "sp-contributions-newonly": "Pòkażë leno te edicje, jaczé twòrzą nową starnã",
+ "sp-contributions-hideminor": "Zatacy drobné zjinaczi",
"sp-contributions-submit": "Szëkôj",
"whatlinkshere": "Lënkùjącé",
"whatlinkshere-title": "Starnë lënkùjącé do \"$1\"",
"blockipsuccesssub": "Zascëgónié dało sã",
"blockipsuccesstext": "Brëkòwnik [[Special:Contributions/$1|$1]] òstał zascëgóny.<br />\nBiéj do [[Special:BlockList|lëstë zascëgónëch adresów IP]] abë òbaczëc zascëdżi.",
"ipblocklist": "Lësta zablokòwónëch adresów IP ë mionów brëkòwników",
+ "blocklist-timestamp": "Czasowô sygnatura",
+ "blocklist-target": "Cél",
+ "blocklist-expiry": "Ùpłiwô",
+ "blocklist-by": "Blokùjący sprôwnik",
+ "blocklist-params": "Paramétrë blokòwaniô",
+ "blocklist-reason": "Przëczëna",
"infiniteblock": "na wiedno",
+ "createaccountblock": "blokada ùsadzaniô kòntów",
+ "emailblock": "zablokòwónô adresa e-mail",
+ "blocklist-nousertalk": "ni mòże editowac gwôsny starnë diskùsje",
"blocklink": "blokùjë",
"unblocklink": "òdblokùjë",
"change-blocklink": "zmieni blokòwanié",
"blocklogpage": "Historëjô blokòwaniô",
"blocklogentry": "zablokòwôł [[$1]], czas blokadë: $2 $3",
"unblocklogentry": "òdblokòwôł $1",
+ "block-log-flags-anononly": "leno anonimòwi",
"block-log-flags-nocreate": "blokada ùsôdzaniô kònta",
+ "block-log-flags-noemail": "zablokòwónô adresa e-mail",
"lockbtn": "Zascëgôj bazã pòdôwków",
"move-page-legend": "Przeniesë starnã",
"movepagetext": "Z pòmòcą ùiższegò fòrmùlôra zjinaczisz miono starnë, przenosząc równoczasno ji historëjã.\nPòd stôrim titlã bãdze ùsôdzonô przeczérowùjącô starna.\nMòżesz aùtomatno zaktualniac przeczérowania wskazëwôjące titel przed zjinaką.\nJeżlë nie wëbiérzesz ti òptacëji, ùgwësni sã pò przenieseniu starnë, czë nie òstałé ùsôdzoné [[Special:DoubleRedirects|dëbeltné]] abò [[Special:BrokenRedirects|zerwóné przeczérowania]].\nJes òdpòwiedzalny za to, abë lënczi dali robiłë tam dze mają.\n\nStarna '''ni''' bãdze przeniosłô, jeżlë starna ò nowim mionie ju je, chòba że je òna pùstô abò je przeczérowaniém ë mô pùstą historëjã edicëji.\nTo òznôczô, że lëchą òperacëjã zjinaczi miona mòże doprowôdzëc bezpieczno nazôd, zjinaczając nowé miono starnë nawczasniészą, ë że ni mòże nadpisac stranë chtërną ju dô.\n\n'''BÔCZËNK!'''\nTo mòże bëc drasticznô abò nieprzewidëwólnô zjinaka w przëtrôfkù pòpùlarnych starnów.\nÙgwësni sã co do skùtków ti òperacëji, niglë to zrobisz.",
"watchlisttools-raw": "Editëjë sërą lëstã",
"version": "Wersëjô",
"specialpages": "Specjalné starnë",
+ "tags-create-reason": "Przëczëna:",
+ "tags-delete-reason": "Przëczëna:",
+ "tags-activate-reason": "Przëczëna:",
+ "tags-deactivate-reason": "Przëczëna:",
"logentry-delete-delete": "$1 {{GENDER:$2|rëmnął|rëmnãła}} starnã $3",
"revdelete-restricted": "nastôwi ògrańczenia dlô sprôwników",
"revdelete-unrestricted": "rëmôj ògrańczenia dlô sprôwników",
"logentry-protect-protect": "$1 {{GENDER:$2|zazychrowôł|zazychrowała}} $3 $4",
"revdelete-summary": "òpisënk zjinaczi",
+ "pagelang-reason": "Przëczëna",
"special-characters-group-ipa": "IPA",
"special-characters-group-symbols": "Céchë",
"special-characters-group-greek": "Grecczi",
"Wolliger Mensch",
"ОйЛ",
"아라",
- "Илья Драконов"
+ "Илья Драконов",
+ "Vvs-dm"
]
},
"tog-oldsig": "нꙑнѣшьн҄ь аѵтографъ :",
"prefs-resetpass": "таина словєсє иꙁмѣнѥниѥ",
"saveprefs": "съхранѥниѥ",
"prefs-editing": "исправлѥниѥ",
- "rows": "рѧдꙑ :",
"searchresultshead": "исканиѥ",
"savedprefs": "твои строи иꙁмѣнєнъ ѥстъ",
"localtime": "мѣстьно врѣмѧ :",
"sourcefilename": "источьна дѣла имꙗ :",
"watchthisupload": "си дѣла блюдєниѥ",
"upload-dialog-button-cancel": "отъмѣтаниѥ",
+ "upload-form-label-infoform-categories": "Катигории",
"license": "прощєниѥ :",
"license-header": "прощєниѥ",
"imgfile": "дѣло",
"invalid-content-data": "Ugyldig indholdsdata",
"content-not-allowed-here": "\"$1\" indhold er ikke tilladt på siden [[$2]]",
"editwarning-warning": "Hvis du forlader siden nu, risikerer du at miste alle ændringer, som du har lavet.\nDenne advarsel kan slås fra under \"{{int:prefs-editing}}\" i dine indstillinger.",
+ "editpage-invalidcontentmodel-title": "Indholdsmodellen er ikke understøttet",
"editpage-notsupportedcontentformat-title": "Indholdsformatet understøttes ikke",
"editpage-notsupportedcontentformat-text": "Indholdsformatet $1 understøttes ikke af indholdsmodellen $2",
"content-model-wikitext": "wikitekst",
"content-model-css": "CSS",
"content-json-empty-object": "Tomt objekt",
"content-json-empty-array": "Tomt array",
+ "deprecated-self-close-category": "Sider, der bruger ugyldige, selvlukkende HTML-tags",
"duplicate-args-category": "Sider der bruger samme argument mere end en gang i en skabelon",
"duplicate-args-category-desc": "Siden indeholder en skabelon hvor et argument er brugt mere end en gang, som <code><nowiki>{{foo|bar=1|bar=2}}</nowiki></code> eller <code><nowiki>{{foo|bar|1=baz}}</nowiki></code>.",
"expensive-parserfunction-warning": "Advarsel: Der er for mange beregningstunge oversætter-funktionskald på denne side.\n\nDer bør være færre end {{PLURAL:$2|$2 kald}}, lige nu er der {{PLURAL:$1|$1 kald}}.",
"search-interwiki-caption": "Søsterprojekter",
"search-interwiki-default": "Resultater fra $1:",
"search-interwiki-more": "(mere)",
+ "search-interwiki-more-results": "flere resultater",
"search-relatedarticle": "Relateret",
"searchrelated": "relateret",
"searchall": "alle",
"youremail": "Din e-mailadresse:",
"username": "{{GENDER:$1|Brugernavn}}:",
"prefs-memberingroups": "{{GENDER:$2|Medlem}} af {{PLURAL:$1|gruppen|grupperne}}:",
+ "group-membership-link-with-expiry": "$1 (indtil $2)",
"prefs-registration": "Registreringstidspunkt:",
"yourrealname": "Dit rigtige navn:",
"yourlanguage": "Sprog:",
"userrights-user-editname": "Skriv et brugernavn:",
"editusergroup": "Indlæs brugergrupper",
"editinguser": "Ændrer brugerrettigheder for {{GENDER:$1|brugeren}} <strong>[[User:$1|$1]]</strong> $2",
- "userrights-editusergroup": "Redigér brugergrupper",
+ "userrights-editusergroup": "Redigér {{GENDER:$1|brugergrupper}}",
"saveusergroups": "Gem {{GENDER:$1|brugergrupper}}",
"userrights-groupsmember": "Medlem af:",
"userrights-groupsmember-auto": "Implicit medlem af:",
"userrights-nodatabase": "Databasen $1 eksisterer ikke lokalt.",
"userrights-changeable-col": "Redigerbare grupper",
"userrights-unchangeable-col": "Uredigerbare grupper",
+ "userrights-expiry-current": "Udløber $1",
+ "userrights-expiry-none": "Udløber ikke",
"userrights-conflict": "Konflikt i ændringer af brugerrettigheder!\nVær venlig at gennemse og bekræft dine ændringer.",
"group": "Gruppe:",
"group-user": "Brugere",
"booksources-search": "Søg",
"booksources-text": "Dette er en liste med henvisninger til Internetsider, som sælger nye og brugte bøger. Der kan der også findes yderligere informationer om bøgerne. {{SITENAME}} er ikke forbundet med nogen af dem.",
"booksources-invalid-isbn": "Det angivne ISBN-nummer ser forkert ud. Tjek med kilden om det er skrevet korrekt.",
+ "magiclink-tracking-rfc": "Sider, der bruger automatiske RFC-henvisninger",
+ "magiclink-tracking-pmid": "Sider, der bruger automatiske PMID-henvisninger",
"magiclink-tracking-isbn": "Sider, der bruger automatiske ISBN-henvisninger",
"specialloguserlabel": "Udført af:",
"speciallogtitlelabel": "Mål (titel eller {{ns:user}}:brugernavn for bruger):",
"exif-compression-6": "JPEG (gammel)",
"exif-copyrighted-true": "Ophavsretligt beskyttet",
"exif-copyrighted-false": "Status for ophavsret er ikke angivet",
+ "exif-photometricinterpretation-1": "Sort-hvid (sort er 0)",
"exif-unknowndate": "Ukendt dato",
"exif-orientation-1": "Normal",
"exif-orientation-2": "Horisontalt spejlet",
"logentry-upload-revert": "$1 {{GENDER:$2|lagde}} $3 op",
"rightsnone": "(-)",
"revdelete-summary": "redigeringsbeskrivelse",
+ "rightslogentry-temporary-group": "$1 (midlertidig, indtil $2)",
"feedback-adding": "Tilføjer kommentar til side...",
"feedback-back": "Tilbage",
"feedback-bugcheck": "Skønt! Men tjek venligst, at det ikke er en af de [$1 kendte fejl].",
"permissionserrorstext-withaction": "Du bist aus {{PLURAL:$1|dem folgenden Grund|den folgenden Gründen}} nicht berechtigt, $2:",
"contentmodelediterror": "Du kannst diese Version nicht bearbeiten, da das Inhaltsmodell <code>$1</code> vom aktuellen Inhaltsmodell der Seite <code>$2</code> abweicht.",
"recreate-moveddeleted-warn": "<strong>Achtung: Du erstellst eine Seite, die bereits früher gelöscht wurde.</strong>\n\nBitte prüfe sorgfältig, ob die erneute Seitenerstellung den Richtlinien entspricht.\nZu deiner Information folgt das Lösch- und Verschiebungs-Logbuch mit der Begründung für die vorhergehende Löschung:",
- "moveddeleted-notice": "Diese Seite wurde gelöscht. Zur Information folgt das Lösch- und Verschiebungs-Logbuch dieser Seite.",
- "moveddeleted-notice-recent": "Leider wurde diese Seite kürzlich gelöscht (innerhalb der letzten 24 Stunden).\nZur Information wird das Lösch- und Verschiebungs-Logbuch für die Seite unten angezeigt.",
+ "moveddeleted-notice": "Diese Seite wurde gelöscht.\nZur Information folgt das Lösch- und Verschiebungs-Logbuch dieser Seite.",
+ "moveddeleted-notice-recent": "Diese Seite wurde kürzlich gelöscht (innerhalb der letzten 24 Stunden).\nZur Information folgt das Lösch- und Verschiebungs-Logbuch dieser Seite.",
"log-fulllog": "Alle Logbucheinträge ansehen",
"edit-hook-aborted": "Die Bearbeitung wurde ohne Erklärung durch eine Schnittstelle abgebrochen.",
"edit-gone-missing": "Die Seite konnte nicht aktualisiert werden.\nSie wurde anscheinend gelöscht.",
"rcfilters-invalid-filter": "Ungültiger Filter",
"rcfilters-empty-filter": "Keine aktiven Filter. Es werden alle Beiträge angezeigt.",
"rcfilters-filterlist-title": "Filter",
+ "rcfilters-highlightbutton-title": "Ergebnisse hervorheben",
+ "rcfilters-highlightmenu-title": "Eine Farbe auswählen",
"rcfilters-filterlist-noresults": "Keine Filter gefunden",
"rcfilters-filtergroup-registration": "Benutzerregistrierung",
"rcfilters-filter-registered-label": "Angemeldet",
"editcomment": "Die Änderungszusammenfassung lautet: <em>$1</em>.",
"revertpage": "Änderungen von [[Special:Contributions/$2|$2]] ([[User talk:$2|Diskussion]]) wurden auf die letzte Version von [[User:$1|$1]] zurückgesetzt",
"revertpage-nouser": "Änderungen von einem versteckten Benutzer rückgängig gemacht und letzte Version von {{GENDER:$1|[[User:$1|$1]]}} wiederhergestellt",
- "rollback-success": "Die Änderungen von $1 wurden rückgängig gemacht und die letzte Version von $2 wurde wiederhergestellt.",
+ "rollback-success": "Die Änderungen von {{GENDER:$3|$1}} wurden rückgängig gemacht und die letzte Version von {{GENDER:$4|$2}} wurde wiederhergestellt.",
"rollback-success-notify": "Bearbeitungen von $1 rückgängig gemacht;\nzurückgeändert auf die letzte Version von $2. [$3 Änderungen zeigen]",
"sessionfailure-title": "Sitzungsfehler",
"sessionfailure": "Es gab ein Problem bei der Übertragung deiner Benutzerdaten.\nDiese Aktion wurde daher sicherheitshalber abgebrochen, um eine falsche Zuordnung deiner Änderungen zu einem anderen Benutzer zu verhindern.\nBitte gehe zurück zur vorherigen Seite, lade sie erneut und versuche, den Vorgang erneut auszuführen.",
"pageinfo-few-visiting-watchers": "Es könnte einen beobachtenden Benutzer geben oder nicht, der die letzten Bearbeitungen besucht hat",
"pageinfo-redirects-name": "Anzahl der Weiterleitungen zu dieser Seite",
"pageinfo-redirects-value": "$1",
- "pageinfo-subpages-name": "Unterseiten dieser Seite",
+ "pageinfo-subpages-name": "Anzahl der Unterseiten dieser Seite",
"pageinfo-subpages-value": "$1 ($2 {{PLURAL:$2|Weiterleitung|Weiterleitungen}}; $3 {{PLURAL:$3|Unterseite|Unterseiten}})",
"pageinfo-firstuser": "Seitenersteller",
"pageinfo-firsttime": "Datum der Seitenerstellung",
]
},
"tog-underline": "Bınê gırey de xete bance:",
- "tog-hideminor": "Vurnayışanê şenıkan pela vurnayışanê peyênan de bınımne",
+ "tog-hideminor": "Vırnayışanê peyênan ra vırnayışanê werdiyan bınımne",
"tog-hidepatrolled": "Vurnayışanê qontrol kerdeyan perra vurnayışê peyêni de bınımne",
"tog-newpageshidepatrolled": "Pelanê qontrol kerdeyan lista peranê neweyan de bınımne",
"tog-hidecategorization": "Pera kategorizasyoni bınımne",
"listingcontinuesabbrev": "dewam...",
"index-category": "Perrê rêzıni",
"noindex-category": "Perrê bêrêzıni",
- "broken-file-category": "Perrê ke gıreyê dosyeyanê ğeletan muhtewa kenê",
+ "broken-file-category": "Perri be linkanê dosya çewte",
"categoryviewer-pagedlinks": "($1) ($2)",
"about": "Heqa",
"article": "Wesiqe",
"searcharticle": "Şo",
"history": "Tarixê perrer",
"history_short": "Veror",
+ "history_small": "tarix",
"updatedmarker": "cı kewtena mına peyêne ra dıme biyo rocane",
"printableversion": "Versiyonê çapkerdışi",
"permalink": "Gıreyo vınderde",
"delete": "Bestern",
"deletethispage": "Na perrer bestern",
"undeletethispage": "Na perer mebesterne",
- "undelete_short": "{{PLURAL:$1|Yew vurnayışi|$1 Vurnayışan}} mestere",
+ "undelete_short": "{{PLURAL:$1|Yew vırnayışi|$1 Vırnayışan}} mestere",
"viewdeleted_short": "{{PLURAL:$1|Jew vurnayış esternayi|$1 Vurnayışanê esternayan}} bımotne",
"protect": "Bıstarnê",
"protect_change": "bıvurne",
"specialpage": "Perra xısusiye",
"personaltools": "Hacetê şexsiy",
"articlepage": "Pera zerreki bıvin",
- "talk": "Diskusiyon",
+ "talk": "Werênayış",
"views": "Asayışi",
"toolbox": "Haceti",
"tool-link-userrights": "Grubanê {{GENDER:$1|karberi}} bıvırnë",
"badtitle": "Sernameyo xırabın",
"badtitletext": "Sernameyê pela ke şıma waşt, nêvêrd, vengo ya zi zıwano miyanêno ğelet gırêdaye ya zi sernameyê wiki.\nBeno ke, tede yew ya zi zêdê işareti estê ke sernameyan de nêxebetiyenê.",
"title-invalid-empty": "Waziyaye sernamey perrer venonyana teyna canamey nami sero esto.",
+ "title-invalid-utf8": "Sernamey perre ke şıma wazenê, yew rêza UTF-8iya ke nêvêrene xo sero kırışeno.",
"perfcached": "Datay cı ver hazır biye. No semedê ra nıkayin niyo! tewr zaf {{PLURAL:$1|netice|$1 netice}} debêno de",
"perfcachedts": "Cêr de malumatê nımıteyi esti, demdê newe kerdışo peyın: $1. Tewr zaf {{PLURAL:$4|netice|$4 neticey cı}} debyayo de",
"querypage-no-updates": "Rocanebiyayışê na pele nıka cadayiyê.\nDayiyi tiya nıka newe nêbenê.",
"summary": "Xulasa:",
"subject": "Mewzu:",
"minoredit": "No yew vırnayışo werdiyo",
- "watchthis": "Bewni ena per",
+ "watchthis": "Şıma bewnê ena perre",
"savearticle": "Perre qeyd ke",
"savechanges": "Vırnayışan qeyd ke",
"publishpage": "Perer bıhesırne",
"missingsummary": "'''DİQET:''' Şıma jû xulasa nênuşte.\nEke şıma \"{{int:savearticle}}\" reyna bıtıknê, vırnayışê şıma bê xulasa qeyd beno.",
"missingcommenttext": "Cêr de jû fıkır bınusên, şıma rê zehmet.",
"missingcommentheader": "'''Diqet:''' Şıma seba nê fıkrvaci yew mewzu/sernuşte nênuşt.\nEke şıma reyna \"{{int:savearticle}}\" bıtıknê, vırnayışê şıa bê mewzu/sernuşte do qeyd bo.",
- "summary-preview": "Verqaytê xulasa:",
+ "summary-preview": "Verasayışê xulasa:",
"subject-preview": "Verqaytê mewzu:",
"previewerrortext": "Verasayışê vırnayışê şıma de yew xeta veciya miyan.",
"blockedtitle": "Karber blokekerdeo",
"yourtext": "nuşteyê şıma",
"storedversion": "Nuşteyo qaydbiyaye",
"nonunicodebrowser": "'''DİQET: Browserê şıma u unicode yewbini nêgeni. Qey izin dayişê vurnayişê pelan: Karakteri ke ASCII niyê; zerreyê qutiyê vurnayişi de kodi (cod) şiyes-şiyes aseni.'''",
- "editingold": "'''İkaz: Şımayé rewizyon da kehan da perer d vırnayış kené.'''\nVanése qeyd k,lakin rewziyoné veréni dé vınibé.",
+ "editingold": "'''İqaz: Şıma ena perre sera yew çım ra viyarnayışê kıhani vırnenê.'''\nEger şıma ey qeyd kerê, pêro vırnayışê ke çım ra viyarnayış ra heta ewro biy, ê benê vıni.",
"yourdiff": "pêverronayiş",
"copyrightwarning": "'''Recay iqazi:'''Sitey {{SITENAME}} ra iştıraki pêro umışiya $2 zerre deyo (teferuatan rê $1 bıvênê).\n\nİştırakê şıma, şıma qayıl niyê ke yewna merdımi kerpeyina bıvurnê ya zi yewna cayi ra vıla kerê ke, iştırakiştıraq = iştırak. mekewê.<br />\nFına zi qayılê ke iştıraq kewê, şıma qayılê ke şar vaco eno nuşte fılan kesi nusnayo ya zi meqemanê resmiyan ra zanayışê cı û malumatê cı esto / cayanê xoseran ra gırewtışi rê şıma garanti danê. '''Tiya de şıma werê telifi ra ke mısade nêgırewto, eserê cı tiya vıla mekerê! '''",
"copyrightwarning2": "Ney bızanê ke nuşteyê ke şıma ruşnenê (şawenê) keyepela {{SITENAME}} herkes eşkeno nê nuşteyanê şıma ser kay bıkero. Eke şıma qayil niyê kes bıvurno, nuşteyanê xo meerzê ita. <br />\nWexto ke şıma nuşteyi zi erzenê ita; şıma gani teahud bıdê koti ra ardo (qandê teferuati ra referans: $1).",
"node-count-exceeded-category": "Pela ra hetê kotya amardışê cı ravêrya",
"node-count-exceeded-category-desc": "Pela azami amora gozgıray ravêr da.",
"node-count-exceeded-warning": "Pela amora gozgıra ravêr da",
- "expansion-depth-exceeded-category": "Pela dı hetê canaya zoriya herayin ravêrya",
+ "expansion-depth-exceeded-category": "Perrê ke xoriyiya herabiyayışi tede ravêrdeya.",
"expansion-depth-exceeded-warning": "Ravêriya pela xori herayêna",
"parser-unstrip-loop-warning": "Unstrip lete vineya",
"parser-unstrip-recursion-limit": "Sinorê limit dê qayış dê ($1) ravêrya",
"revisionasof": "Çımraviyarnayışê $1",
"revision-info": "Vurnayışo ke $1 de terefê {{GENDER:$6|$2}}$7 ra biyo",
"previousrevision": "← Çımraviyarnayışo kıhanêr",
- "nextrevision": "Rewizyono newên →",
+ "nextrevision": "Çımraviyarnayışo neweyêr →",
"currentrevisionlink": "Tewr halê peyn",
"cur": "ferq",
"next": "bahdoyên",
"grouppage-suppress": "{{ns:project}}:Teftişkar",
"right-read": "Pera bıwané",
"right-edit": "Perre bıvırnê",
- "right-createpage": "Pele vıraze (pelê ke ê werênayışi niyê)",
+ "right-createpage": "Perran vıraze (peprrê ke ê werênayışi niyê)",
"right-createtalk": "Pela werênayışi vıraze",
"right-createaccount": "Hesabê karberi vıraze",
"right-autocreateaccount": "Xarici yew name dê karberi ya ronıştış ake",
- "right-minoredit": "Vurnayışan qıckek nışan bıde.",
+ "right-minoredit": "Vırnayışan zey werdi nışan bıde.",
"right-move": "Pele bere",
"right-move-subpages": "Pele be bınpelanê cı ra pia bere",
"right-move-rootuserpages": "Pelanê kaberiê rıstımi bere",
"right-deletedtext": "Mabênê newede vurnayışanê esterıtiyan de qaytê nuştey esterıtey u vurnayışan ke",
"right-browsearchive": "Pelanê esterıteyan bıgeyre",
"right-undelete": "Yew pela esterıtiye peyser biya",
- "right-suppressrevision": "İdarekeran ra miyanki, newede vurnayışan de qayt ke u newede vıraze",
+ "right-suppressrevision": "Yew karber ra çım ra viyarnayışanê perran bıvênê, bınımnê u bımocnê.",
"right-viewsuppressed": "İdarekeran ra miyanki newede vurnayışan de qayt ke",
"right-suppressionlog": "Rocekanê xasan bıvêne",
"right-block": "Karberanê binan karê vurnayışi ra bloke bıke",
"recentchanges-noresult": "Goreyê kriteranê kıfşkerdeyan ra qet yew vurnayış nêvêniya.",
"recentchanges-feed-description": "Ena feed dı vurnayişanê tewr peniyan teqip bık.",
"recentchanges-label-newpage": "Enê vırnayışi yew perra newiye vıraşta.",
- "recentchanges-label-minor": "No yew vurnayışo werdiyo",
+ "recentchanges-label-minor": "No yew vırnayışo werdiyo",
"recentchanges-label-bot": "Eno vırnayış terefê yew boti ra vıraziyo",
"recentchanges-label-unpatrolled": "Eno vurnayış hewna dewriya nêbiyo",
"recentchanges-label-plusminus": "Ebadê perre de bazê bayti de vayey cı",
"recentchanges-submit": "Bımotne",
"rcnotefrom": "Cêr de <strong>$2</strong> ra nata {{PLURAL:$5|vurnayışiyê}} asenê (tewr vêşi <strong>$1</strong> asenê) <strong>$3, $4</strong>",
"rclistfrom": "$3 sehat $2 ra tepiya vurnayışanê neweyan bımotne",
- "rcshowhideminor": "Vurnayışê werdiy $1",
+ "rcshowhideminor": "Vırnayışê werdiy $1",
"rcshowhideminor-show": "Bımotne",
"rcshowhideminor-hide": "Bınımne",
"rcshowhidebots": "botan $1",
"rc-enhanced-hide": "Melumat bınımne",
"rc-old-title": "\"$1\"i orcinalê cı vıraşt",
"recentchangeslinked": "Vırnayışê bestiyaey",
- "recentchangeslinked-feed": "Vurnayışê elaqeyıni",
- "recentchangeslinked-toolbox": "Vurnayışê elaqeyıni",
+ "recentchangeslinked-feed": "Vırnayışê bestiyaey",
+ "recentchangeslinked-toolbox": "Vırnayışê bestiyaey",
"recentchangeslinked-title": "Heqa \"$1\" de vurnayışi",
"recentchangeslinked-summary": "Lista cêrêne, pela bêlikerdiye rê (ya zi karberanê kategoriya bêlikerdiye rê) pelanê gırêdayoğan de lista de vurnayışê peyênana.\n[[Special:Watchlist|Lista şımaya seyrkedışi de]] peli be nuşteyo '''qolınd''' bêli kerdê.",
"recentchangeslinked-page": "Namey perrer:",
"watchlistanontext": "qey vurnayişê maddeya listeya temaşakerdiş ronıştış akerê",
"watchnologin": "Şıma cıkewtış nêvıraşto",
"addwatch": "Lista seyrkerdışi ke",
- "addedwatchtext": "Ma pele \"[[:$1]]\" zerri [[Special:Watchlist|listeya seyri]] tı kerd de.\nEna deme ra, ma qe vurnayışan ser ena pele tı haberdar keni.",
+ "addedwatchtext": "\"[[:$1]]\" u perra cıya werênayışi [[Special:Watchlist|lista şımaya ewniyayışi]] rê ameyo cıkerdış.",
"addedwatchtext-short": "Pera $1`i çebyê listeya seyran de şıma",
"removewatch": "Lista seyrkerdışi ra wedare",
"removedwatchtext": "Ena pela \"[[:$1]]\" biya wedariya [[Special:Watchlist|listeyê seyr-kerdışi şıma]].",
"removedwatchtext-short": "Pera $1`i listeya seyran de şıma ra wedari yê",
"watch": "Seyr ke",
- "watchthispage": "Bewni ena per",
+ "watchthispage": "Şıma bewnê ena perre",
"unwatch": "Teqib meke",
"unwatchthispage": "temaşa kerdışê peli vındarn.",
"notanarticle": "mebhesê peli niyo",
"wlshowhidebots": "boti",
"wlshowhideliu": "karberê qeydıni",
"wlshowhideanons": "karberê anonimi",
- "wlshowhidepatr": "vurnayışê pawıteyi",
- "wlshowhidemine": "vurnayışê mı",
+ "wlshowhidepatr": "Vırnayışê çım ra viyarniyaey",
+ "wlshowhidemine": "vırnayışê mı",
"wlshowhidecategorization": "kategorizasyonê pele",
"watchlist-options": "Tercihê liste da seyri",
"watching": "Seyr ke...",
"deleteotherreason": "Sebebo bin:",
"deletereasonotherlist": "Sebebo bin",
"deletereason-dropdown": "* Sebebê esterıtışê pêroyi\n** Vurnayışo nêwaşte (spam)\n** Vandalizm\n** İxlalê heqa telifi\n** Waştışê nuştoği\n** Oryantasyono xırabe",
- "delete-edit-reasonlist": "Sebebê vurnayışan bıvurne",
+ "delete-edit-reasonlist": "Sebebê vırnayışan bıvurnê",
"delete-toobig": "no pel, pê $1 {{PLURAL:$1|tene vuriyayiş|tene vuriyayiş}}i wayirê yew tarixo kehen o.\nqey hewna nêşiyayişi wina pelani u {{SITENAME}}nêxerebnayişê keyepeli yew hed niyaya ro.",
"delete-warning-toobig": "no pel wayirê tarixê vurnayiş ê derg o, $1 {{PLURAL:$1|revizyonê|revizyonê}} seri de.\nhewn a kerdışê ıney {{SITENAME}} şuxul bıne gırano;\nbı diqqet dewam kerê.",
"deleteprotected": "Şıma nêşenê ena perer esternê, çıkı per starya ya.",
"tooltip-ca-nstab-template": "Şabloni bıvêne",
"tooltip-ca-nstab-help": "Pela peşti bıvêne",
"tooltip-ca-nstab-category": "Pela kategoriye bıvêne",
- "tooltip-minoredit": "Nay vırnayışa werdi nışan bıkeré",
+ "tooltip-minoredit": "Ney vırnayışo werdi nışan bıkerê",
"tooltip-save": "Vurnayışanê xo qeyd ke",
"tooltip-publish": "Vurnayışê xo vıla kı",
"tooltip-preview": "Vurnayışanê xo çım ra bıviyarnê. Qeydkerdış ra ver bıgurê cı!",
- "tooltip-diff": "Metni sero vurnayışan mocneno",
+ "tooltip-diff": "Kamci vırnayışê ke şıma nuştey sero kerdê, inan bıvênê.",
"tooltip-compareselectedversions": "Ena per de ferqê rewziyonan de dı weçinaya bıvinê",
"tooltip-watch": "Ena pele lista xoya seyrkerdışi ke",
"tooltip-watchlistedit-normal-submit": "Sernuşteyan wedare",
"pageinfo-firsttime": "Vıraştena tarixê perrer",
"pageinfo-lastuser": "Vurnayoğo peyên",
"pageinfo-lasttime": "Deme u vurnayışo peyên",
- "pageinfo-edits": "Amarina vurnayışan pêro",
+ "pageinfo-edits": "Amarê vırnayışano pêroyi",
"pageinfo-authors": "Amarina nuştekaran pêro",
"pageinfo-recent-edits": "Amariya vurnayışan ($1 ra nata)",
"pageinfo-recent-authors": "Amarina nuştekaran pêro",
"specialpages-group-maintenance": "Raporê pawıtışi",
"specialpages-group-other": "Pelê xısusiyê bini",
"specialpages-group-login": "Dekew / hesab vıraz",
- "specialpages-group-changes": "Vurnayışê peyêni û qeydi",
+ "specialpages-group-changes": "Vırnayışê peyêni u qeydi",
"specialpages-group-media": "Raporê medya û barkerdışi",
"specialpages-group-users": "Karberi u heqê inan",
"specialpages-group-highuse": "Peleyê ke vêşi karênê",
"deleting-backlinks-warning": "<strong>Προσοχή:</strong> [[Special:WhatLinksHere/{{FULLPAGENAME}}|Άλλες σελίδες]] συνδέουν ή ενσωματώνουν τη σελίδα που πρόκειται να διαγράψετε.",
"rollback": "Επαναφορά επεξεργασιών",
"rollbacklink": "αναστροφή",
- "rollbacklinkcount": "Î\95Ï\80αναÏ\86οÏ\81ά $1 {{PLURAL:$1|επεξεργασίας|επεξεργασιών}}",
- "rollbacklinkcount-morethan": "εÏ\80αναÏ\86οÏ\81ά περισσότερων από $1 {{PLURAL:$1|επεξεργασία|επεξεργασίες}}",
+ "rollbacklinkcount": "Î\91ναÏ\83Ï\84Ï\81οÏ\86ή $1 {{PLURAL:$1|επεξεργασίας|επεξεργασιών}}",
+ "rollbacklinkcount-morethan": "αναÏ\83Ï\84Ï\81οÏ\86ή περισσότερων από $1 {{PLURAL:$1|επεξεργασία|επεξεργασίες}}",
"rollbackfailed": "Η επαναφορά απέτυχε.",
"cantrollback": "Δεν είναι δυνατή η αναίρεση αυτής της αλλαγής, πρόκειται για την αρχική ενέργεια δημιουργίας της σελίδας.",
"alreadyrolled": "Αδύνατον να αναιρεθεί η τελευταία αλλαγή της σελίδας [[:$1]] από το χρήστη ([[User:$2|$2]] ([[User talk:$2|Συζήτηση]]){{int:pipe-separator}}[[Special:Contributions/$2|{{int:contribslink}}]]), διότι κάποιος έχει ήδη αναιρέσει την αλλαγή ή έχει αλλάξει εκ νέου τη σελίδα.\n\nΤελευταία αλλαγή από το χρήστη ([[User:$3|$3]] ([[User talk:$3|Συζήτηση]]){{int:pipe-separator}}[[Special:Contributions/$3|{{int:contribslink}}]]).",
"show-big-image-preview-differ": "Το μέγεθος αυτής της $3 προεπισκόπησης αυτού του $2 το αρχείο: $1.",
"show-big-image-other": "Άλλες {{PLURAL:$2|ανάλυση|αναλύσεις}}: $1.",
"show-big-image-size": "$1 × $2 εικονοστοιχεία",
- "file-info-gif-looped": "περιτυλιγμένο",
- "file-info-gif-frames": "$1 {{PLURAL:$1|πλαίσιο|πλαίσια}}",
- "file-info-png-looped": "Σε άÏ\80ειÏ\81ο βÏ\81Ï\8cγÏ\87ο",
+ "file-info-gif-looped": "κυκλικά επαναλαμβανόμενο",
+ "file-info-gif-frames": "$1 {{PLURAL:$1|καρέ}}",
+ "file-info-png-looped": "κÏ\85κλικά εÏ\80αναλαμβανÏ\8cμενο",
"file-info-png-repeat": "έπαιξε $1 {{PLURAL:$1|φορά|φορές}}",
"file-info-png-frames": "$1 {{PLURAL:$1|πλαίσιο|πλαίσια}}",
"file-no-thumb-animation": "'''Σημείωση: λόγω τεχνικών περιορισμών, μικρογραφίες αυτού του τύπου αρχείου δεν θα είναι κινούμενες.'''",
"rcfilters-invalid-filter": "Invalid filter",
"rcfilters-empty-filter": "No active filters. All contributions are shown.",
"rcfilters-filterlist-title": "Filters",
+ "rcfilters-highlightbutton-title": "Highlight results",
+ "rcfilters-highlightmenu-title": "Select a color",
"rcfilters-filterlist-noresults": "No filters found",
"rcfilters-filtergroup-registration": "User registration",
"rcfilters-filter-registered-label": "Registered",
"editcomment": "The edit summary was: <em>$1</em>.",
"revertpage": "Reverted edits by [[Special:Contributions/$2|$2]] ([[User talk:$2|talk]]) to last revision by [[User:$1|$1]]",
"revertpage-nouser": "Reverted edits by a hidden user to last revision by {{GENDER:$1|[[User:$1|$1]]}}",
- "rollback-success": "Reverted edits by $1;\nchanged back to last revision by $2.",
+ "rollback-success": "Reverted edits by {{GENDER:$3|$1}};\nchanged back to last revision by {{GENDER:$4|$2}}.",
"rollback-success-notify": "Reverted edits by $1;\nchanged back to last revision by $2. [$3 Show changes]",
"sessionfailure-title": "Session failure",
"sessionfailure": "There seems to be a problem with your login session;\nthis action has been canceled as a precaution against session hijacking.\nGo back to the previous page, reload that page and then try again.",
"rcfilters-invalid-filter": "Filtro no válido",
"rcfilters-empty-filter": "No hay filtros activos. Se muestran todas las contribuciones.",
"rcfilters-filterlist-title": "Filtros",
+ "rcfilters-highlightbutton-title": "Resaltar los resultados",
+ "rcfilters-highlightmenu-title": "Selecciona un color",
"rcfilters-filterlist-noresults": "No se encontraron filtros",
"rcfilters-filtergroup-registration": "Registro de usuario",
"rcfilters-filter-registered-label": "Registrados",
"editcomment": "El resumen de la edición fue: <em>$1</em>.",
"revertpage": "Revertidos los cambios de [[Special:Contributions/$2|$2]] ([[User talk:$2|disc.]]) a la última edición de [[User:$1|$1]]",
"revertpage-nouser": "Revertidas las ediciones hechas por un usuario oculto a la última revisión hecha por {{GENDER:$1|[[User:$1|$1]]}}",
- "rollback-success": "Revertidas las ediciones de $1; recuperada la última versión de $2.",
+ "rollback-success": "Revertidas las ediciones de {{GENDER:$3|$1}};\nrecuperada la última versión de {{GENDER:$4|$2}}.",
"rollback-success-notify": "Revertidas las ediciones de $1 hasta la última revisión de $2. [$3 Ver cambios]",
"sessionfailure-title": "Error de sesión",
- "sessionfailure": "Parece que hay un problema con tu sesión;\nesta acción ha sido cancelada como medida de precaución contra secuestros de sesión.\nPor favor, pulsa «Atrás», recarga la página de la que viniste e inténtalo de nuevo.",
+ "sessionfailure": "Parece que hay un problema con tu sesión;\nse ha cancelado esta acción como medida de precaución contra el robo de sesiones.\nVuelve a la página anterior, recárgala e inténtalo de nuevo.",
"changecontentmodel": "Cambiar el modelo de contenido de una página",
"changecontentmodel-legend": "Cambiar el modelo de contenido",
"changecontentmodel-title-label": "Título de página",
"createacct-email-ph": "Sisesta e-posti aadress",
"createacct-another-email-ph": "Sisesta e-posti aadress",
"createaccountmail": "Kasuta juhuslikku parooli ja saada see määratud e-posti aadressile",
+ "createaccountmail-help": "Saab kasutada konto loomiseks teisele kasutajale ilma parooli teada saamata.",
"createacct-realname": "Pärisnimi (valikuline)",
"createaccountreason": "Põhjus:",
"createacct-reason": "Põhjus",
"createacct-reason-ph": "Miks lood teist kontot?",
+ "createacct-reason-help": "Sõnum, mida näidatakse konto loomise logis",
"createacct-submit": "Loo konto",
"createacct-another-submit": "Loo konto",
+ "createacct-continue-submit": "Jätka konto loomist",
+ "createacct-another-continue-submit": "Jätka konto loomist",
"createacct-benefit-heading": "{{SITENAME}} on sinusuguste inimeste tehtud.",
"createacct-benefit-body1": "{{PLURAL:$1|muudatus|muudatust}}",
"createacct-benefit-body2": "{{PLURAL:$1|lehekülg|lehekülge}}",
"nocookiesnew": "Kasutajakonto loodi, aga sa ei ole sisse logitud, sest {{SITENAME}} kasutab kasutajate tuvastamisel küpsiseid. Sinu brauseris on küpsised keelatud. Palun sea küpsised lubatuks ja logi siis oma vastse kasutajanime ning parooliga sisse.",
"nocookieslogin": "{{SITENAME}} kasutab kasutajate tuvastamisel küpsiseid. Sinu brauseris on küpsised keelatud. Palun sea küpsised lubatuks ja proovi siis uuesti.",
"nocookiesfornew": "Kasutajakonto jäi loomata, kuna me ei saanud selle allikat kindlaks teha.\nVeendu, et sul on küpsised lubatud, taaslaadi see lehekülg ja proovi uuesti.",
+ "createacct-loginerror": "Konto on edukalt loodud, aga automaatselt ei õnnestunud sisse logida. Et jätkata, [[Special:UserLogin|logi palun sisse käsitsi]].",
"noname": "Sa ei sisestanud kasutajanime lubataval kujul.",
"loginsuccesstitle": "Sisse logitud",
"loginsuccess": "Oled sisse loginud. Sinu kasutajanimi on \"$1\".",
"missingcommenttext": "Palun sisesta siit allapoole kommentaar.",
"missingcommentheader": "<strong>Meeldetuletus:</strong> Sa pole kirjutanud kommentaarile teemat.\nKui klõpsad uuesti \"{{int:savearticle}}\", salvestatakse su kommentaar ilma teemata.",
"summary-preview": "Resümee eelvaade:",
- "subject-preview": "Alaosa pealkirja eelvaade:",
+ "subject-preview": "Resümee eelvaade:",
"previewerrortext": "Sinu muudatuste eelvaatluse juures esines tõrge.",
"blockedtitle": "Kasutaja on blokeeritud",
"blockedtext": "'''Sinu kasutajanimi või IP-aadress on blokeeritud.'''\n\nBlokeeris $1.\nTema põhjendus on järgmine: ''$2''.\n\n* Blokeeringu algus: $8\n* Blokeeringu lõpp: $6\n* Sooviti blokeerida: $7\n\nKüsimuse arutamiseks võid pöörduda kasutaja $1 või mõne teise [[{{MediaWiki:Grouppage-sysop}}|administraatori]] poole.\n\nPane tähele, et sa ei saa kasutajale teadet saata, kui sa pole kinnitanud oma [[Special:Preferences|eelistuste lehel]] kehtivat e-posti aadressi.\n\nSinu praegune IP-aadress on $3 ning blokeeringu number on #$5. Lisa need andmed kõigile järelepärimistele, mida kavatsed teha.",
"searcharticle": "برو",
"history": "تاریخچهٔ صفحه",
"history_short": "تاریخچه",
+ "history_small": "تاریخچه",
"updatedmarker": "بهروزشده از آخرین باری که سرزدهام",
"printableversion": "نسخهٔ قابل چاپ",
"permalink": "پیوند پایدار",
"search-interwiki-caption": "پروژههای خواهر",
"search-interwiki-default": "نتایج از $1:",
"search-interwiki-more": "(بیشتر)",
+ "search-interwiki-more-results": "نتایج بیشتر",
"search-relatedarticle": "مرتبط",
"searchrelated": "مرتبط",
"searchall": "همه",
"userrights-nodatabase": "پایگاه دادهٔ $1 وجود ندارد یا محلی نیست.",
"userrights-changeable-col": "گروههایی که میتوانید تغییر دهید",
"userrights-unchangeable-col": "گروههایی که نمیتوانید تغییر دهید",
+ "userrights-expiry-current": "منقضی$1",
+ "userrights-expiry-none": "دایمی است",
+ "userrights-expiry": "زمان سرآمدن:",
+ "userrights-expiry-existing": "زمان انقضای موجود: $2، $3",
+ "userrights-expiry-othertime": "زمانی دیگر:",
"userrights-conflict": "تعارض دسترسیهای کاربری! لطفاً بررسی کنید و تغییرات را تأیید کنید.",
"group": "گروه:",
"group-user": "کاربران",
"search-file-match": "(vastaa tiedoston sisältöä)",
"search-suggest": "Tarkoititko: $1",
"search-rewritten": "Näytetään tulokset haulla $1. Haluatko hakea haulla $2?",
- "search-interwiki-caption": "Sisarprojektit",
+ "search-interwiki-caption": "Sisarhankkeet",
"search-interwiki-default": "Tulokset osoitteesta $1:",
"search-interwiki-more": "(lisää)",
"search-interwiki-more-results": "lisää tuloksia",
"rcfilters-filterlist-title": "Suodattimet",
"rcfilters-filterlist-noresults": "Ei löytynyt suodattimia",
"rcfilters-filter-registered-label": "Rekisteröitynyt",
+ "rcfilters-filter-registered-description": "Kirjautuneet muokkaukset.",
+ "rcfilters-filter-unregistered-description": "Muokkaajat, jotka eivät ole kirjautuneet sisään.",
"rcfilters-filter-editsbyself-label": "Omat muokkauksesi",
"rcfilters-filter-editsbyself-description": "Muokkauksesi",
"rcfilters-filter-editsbyother-label": "Muiden muokkaukset",
"rcfilters-filter-bots-label": "Botti",
"rcfilters-filter-bots-description": "Muokkaukset jotka tehty automaattisilla työkaluilla.",
"rcfilters-filter-humans-label": "Ihminen (ei botti)",
+ "rcfilters-filtergroup-significance": "Merkitys",
"rcfilters-filter-minor-label": "Pienet muutokset",
"rcfilters-filter-major-label": "Ei-pienet muutokset",
"rcfilters-filter-major-description": "Muokkauksia ei ole merkitty kuin pieniksi.",
"Pymouss",
"Derugon",
"Benoit Rochon",
- "Fitoschido"
+ "Fitoschido",
+ "Archaeodontosaurus",
+ "Trizek (WMF)"
]
},
"tog-underline": "Soulignement des liens :",
"rcfilters-invalid-filter": "Filtre non valide",
"rcfilters-empty-filter": "Aucun filtre actif. Toutes les contributions sont affichées.",
"rcfilters-filterlist-title": "Filtres",
+ "rcfilters-highlightbutton-title": "Mettre en valeur les résultats",
+ "rcfilters-highlightmenu-title": "Choisir une couleur",
"rcfilters-filterlist-noresults": "Aucun filtre trouvé",
"rcfilters-filtergroup-registration": "Inscription de l’utilisateur",
"rcfilters-filter-registered-label": "Enregistré",
"rcfilters-filter-registered-description": "Éditeurs connectés.",
- "rcfilters-filter-unregistered-label": "Désinscrit",
+ "rcfilters-filter-unregistered-label": "Non connectés",
"rcfilters-filter-unregistered-description": "Éditeurs qui ne sont pas connectés.",
"rcfilters-filtergroup-authorship": "Modifier la paternité",
"rcfilters-filter-editsbyself-label": "Vos propres modifications",
"editcomment": "Le résumé de la modification était : <em>$1</em>.",
"revertpage": "Révocation des modifications de [[Special:Contributions/$2|$2]] ([[User talk:$2|discussion]]) vers la dernière version de [[User:$1|$1]]",
"revertpage-nouser": "Révocation des modifications par un utilisateur masqué à la dernière version par {{GENDER:$1|[[User:$1|$1]]}}",
- "rollback-success": "Révocation des modifications effectuées par $1 ;\nrétablissement de la dernière version par $2.",
+ "rollback-success": "Révocation des modifications effectuées par {{GENDER:$3|$1}} ;\nrétablissement de la dernière version par {{GENDER:$4|$2}}.",
"rollback-success-notify": "Modifications annulées par $1 ;\nretour à la dernière révision par $2. [$3 Voir les changements]",
"sessionfailure-title": "Erreur de session",
"sessionfailure": "Votre session de connexion semble avoir des problèmes ;\ncette action a été annulée en prévention d'un piratage de session.\nVeuillez cliquer sur « Précédent », rechargez la page d'où vous venez, puis réessayez.",
"minoredit": "Seo mùthadh beag",
"watchthis": "Cum sùil air an duilleag seo",
"savearticle": "Sàbhail an duilleag",
+ "savechanges": "Sàbhail na dh’atharraich thu",
"publishpage": "Foillsich an duilleag",
"publishchanges": "Foillsich na mùthaidhean",
"preview": "Ro-shealladh",
"modifiedarticleprotection": "a dh'atharraich an ìre dìon de \"[[$1]]\"",
"unprotectedarticle": "a neo-dhìon \"[[$1]]\"",
"movedarticleprotection": "chaidh roghainn an dìona a ghluasad o \"[[$2]]\" gu \"[[$1]]\"",
+ "modifiedarticleprotection-comment": "Dh’atharraich {{GENDER:$2|ìre an dìon}} aig “[[$1]]”",
"protect-title": "Atharraich an dìon airson \"$1\"",
"protect-title-notallowed": "Seall an dìon airson \"$1\"",
"prot_1movedto2": "chaidh [[$1]] a ghluasad gu [[$2]]",
"selfredirect": "<strong>Atención:</strong> Está redirixindo esta páxina a si mesma.\nQuizais especificou incorrectamente a páxina de destino ou poida que estea a editar unha páxina errónea.\nSe preme en \"{{int:savearticle}}\" de novo, crearase a redireción de calquera xeito.",
"missingcommenttext": "Por favor, escriba un comentario a continuación.",
"missingcommentheader": "<strong>Aviso:</strong> Non escribiu ningún texto no asunto deste comentario.\nSe preme en \"{{int:savearticle}}\" de novo, a súa edición gardarase sen el.",
- "summary-preview": "Vista previa do resumo:",
+ "summary-preview": "Vista previa do resumo de edición:",
"subject-preview": "Vista previa do asunto:",
"previewerrortext": "Produciuse un erro ao intentar previsualizar os cambios.",
"blockedtitle": "O usuario está bloqueado",
"saveusergroups": "Gardar os grupos {{GENDER:$1|do usuario|da usuaria}}",
"userrights-groupsmember": "Membro de:",
"userrights-groupsmember-auto": "Membro implícito de:",
- "userrights-groups-help": "Pode cambiar os grupos aos que {{GENDER:$1|o usuario|a usuaria}} pertence:\n* Se a caixa ten un sinal (✓) significa que {{GENDER:$1|o usuario|a usuaria}} pertence a ese grupo.\n* Se, pola contra, non o ten, significa que non pertence.\n* Un asterisco (*) indica que non pode eliminar o grupo unha vez que o engadiu, e viceversa.",
+ "userrights-groups-help": "Pode cambiar os grupos aos que {{GENDER:$1|o usuario|a usuaria}} pertence:\n* Se a caixa ten un sinal (✓) significa que {{GENDER:$1|o usuario|a usuaria}} pertence a ese grupo.\n* Se, pola contra, non o ten, significa que non pertence.\n* Un asterisco (*) indica que non pode eliminar o grupo unha vez que o engadiu, e viceversa.\n* Un # indica que só se pode atrasar a data de caducidade deste grupo; non se pode adiantar.",
"userrights-reason": "Motivo:",
"userrights-no-interwiki": "Non ten os permisos necesarios para editar os dereitos de usuario noutros wikis.",
"userrights-nodatabase": "A base de datos \"$1\" non existe ou non é local.",
"userrights-expiry-options": "1 día:1 día,1 semana:1 semana,1 mes:1 mes,3 meses:3 meses,6 meses:6 meses,1 ano:1 ano",
"userrights-invalid-expiry": "O tempo de caducidade para o grupo \"$1\" non é válido.",
"userrights-expiry-in-past": "O tempo de caducidade para o grupo \"$1\" está no pasado.",
+ "userrights-cannot-shorten-expiry": "Non pode adiantar a data de caducidade do grupo \"$1\". Só os usuarios con permisos para engadir e eliminar este grupo poden adiantar datas de caducidade.",
"userrights-conflict": "Hai un conflito na modificación dos dereitos de usuario! Por favor, revíseo e confirme os seus cambios.",
"group": "Grupo:",
"group-user": "Usuarios",
"rcfilters-invalid-filter": "Filtro no válido",
"rcfilters-empty-filter": "Non hai filtros activos. Móstranse tódalas contribucións.",
"rcfilters-filterlist-title": "Filtros",
+ "rcfilters-highlightbutton-title": "Resaltar resultados",
+ "rcfilters-highlightmenu-title": "Seleccione unha cor",
"rcfilters-filterlist-noresults": "Non se atoparon filtros",
"rcfilters-filtergroup-registration": "Rexistro de usuario",
"rcfilters-filter-registered-label": "Rexistrado",
"editfont-default": "Browsera pormonnem",
"sunday": "Aitar",
"monday": "Somar",
- "tuesday": "Munglar",
- "wednesday": "Budhwar",
- "thursday": "Birestar",
+ "tuesday": "Mongllar",
+ "wednesday": "Budvar",
+ "thursday": "Brestar",
"friday": "Sukrar",
- "saturday": "Sonvar",
+ "saturday": "Son'var",
"sun": "Ait",
"mon": "Som",
- "tue": "Mung",
- "wed": "Budh",
- "thu": "Bres",
- "fri": "Sukr",
+ "tue": "Mon",
+ "wed": "Bud",
+ "thu": "Bre",
+ "fri": "Suk",
"sat": "Son",
"january": "Janer",
"february": "Febrer",
"minoredit": "Hem ek dhaktem bodol",
"watchthis": "Hea panar nodor dovor",
"savearticle": "Pan samball",
+ "savechanges": "Bodlopam samball",
"preview": "Zholok",
"showpreview": "Zholok dakhoi",
"showdiff": "Bodolpam dakhoi",
"rcfilters-invalid-filter": "מסנן בלתי־תקין",
"rcfilters-empty-filter": "אין מסננים פעילים. כל התרומות מוצגות.",
"rcfilters-filterlist-title": "מסננים",
+ "rcfilters-highlightbutton-title": "הבלטת התוצאות",
+ "rcfilters-highlightmenu-title": "בחירת צבע",
"rcfilters-filterlist-noresults": "לא נמצאו מסננים",
"rcfilters-filtergroup-registration": "רישום העורכים",
"rcfilters-filter-registered-label": "רשומים",
"editcomment": "תקציר העריכה היה: <em>$1</em>.",
"revertpage": "שוחזר מעריכות של [[Special:Contributions/$2|$2]] ([[User talk:$2|שיחה]]) לעריכה האחרונה של [[User:$1|$1]]",
"revertpage-nouser": "שוחזר מעריכות של משתמש מוסתר לעריכה האחרונה של {{GENDER:$1|[[User:$1|$1]]}}",
- "rollback-success": "שוחזר מעריכות של $1 לעריכה האחרונה של $2.",
+ "rollback-success": "שוחזר מעריכות של {{GENDER:$3|$1}} לעריכה האחרונה של {{GENDER:$4|$2}}.",
"rollback-success-notify": "שוחזר מעריכות של $1 לעריכה האחרונה של $2. [$3 הצגת שינויים]",
"sessionfailure-title": "בעיה בחיבור",
"sessionfailure": "נראה שיש בעיה בחיבור שלך לאתר;\nפעולה זו בוטלה כאמצעי זהירות נגד התחזות לתקשורת ממחשבך.\nנא לחזור לדף הקודם, לטעון אותו מחדש ולנסות שוב.",
"Ziyaurr",
"NehalDaveND",
"Susant purohit",
- "Jayprakash12345"
+ "Jayprakash12345",
+ "Dr. Shikha Jaggi",
+ "Shyamal"
]
},
"tog-underline": "कड़ियाँ अधोरेखन:",
"passwordreset-emailelement": "सदस्यनाम: \n$1\n\nअस्थायी कूटशब्द: \n$2",
"passwordreset-emailsentemail": "यदि आपका यह ईमेल आपके खाते के साथ जोड़ा गया है तो पासवर्ड बदलने का ईमेल इसमें भेज दिया गया है।",
"passwordreset-emailsentusername": "यदि कोई ईमेल इस खाते से जुड़ी है तो पासवर्ड आपके ईमेल में भेज दिया जाएगा।",
+ "passwordreset-nocaller": "कॉलर प्रदान किया जाना चाहिए",
+ "passwordreset-nosuchcaller": "कॉलर मौजूद नहीं है: $1",
+ "passwordreset-ignored": "पासवर्ड रीसेट नहीं संभाला गया। हो सकता है कि कोई प्रदाता कॉन्फ़िगर नही किया गया हो?",
"passwordreset-invalidemail": "अवैध ईमेल पता",
+ "passwordreset-nodata": "न तो यूजर नाम और न ही ईमेल पता आपूर्ति की गई",
"changeemail": "ई-मेल पता परिवर्तित करें",
"changeemail-header": "अपना ईमेल पता परिवर्तन हेतु इसे पूरा करें। यदि आप अपना वर्तमान ईमेल पता हटाना चाहते हैं, तो इसे खाली छोड़ दें और इसे भेजें।",
"changeemail-no-info": "इस पृष्ठ का सीधे प्रयोग करने के लिए आपको लॉग इन करना होगा।",
"blockedtitle": "सदस्य अवरुद्ध है",
"blockedtext": "'''आपका सदस्यनाम अथवा आइ॰पी पता अवरोधित कर दिया गया हैं ।'''\n\nअवरोध $1 द्वारा किया गया था।\nअवरोध का कारण है ''$2''\n\n* अवरोध का आरंभ: $8\n* अवरोध की समाप्ति: $6\n* अवरोधित इकाई: $7\n\nइस अवरोध के बारे में चर्चा करने के लिए आप $1 या किसी अन्य [[{{MediaWiki:Grouppage-sysop}}|प्रबन्धक]] से संपर्क कर सकते हैं।\nअगर आपने [[Special:Preferences|अपनी वरीयताओं]] में वैध ई-मेल पता प्रविष्ट किया है तो ही आप 'इस प्रयोक्ता को ई-मेल भेजें' वाली सुविधा का इस्तेमाल कर सकते हैं और आपको इसका इस्तेमाल करने से नहीं रोका गया है।\nआपका मौजूदा आइ॰पी पता $3 है और अवरोध क्रमांक #$5 है।\nअपने किसी भी प्रश्न में कृपया यह सभी जानकारी भी शामिल करें।",
"autoblockedtext": "एक और सदस्य आपके ही आइ॰पी का प्रयोग कर रहे थे और उन्हें $1 द्वारा अवरोधित कर दिया गया था। फलस्वरूप आपका आइ॰पी पता भी स्वचालित रूप से अवरोधित हो गया है।\nअवरोध करने का कारण है:\n\n:''$2''\n\n* अवरोध प्रारंभ: $8\n* अवरोध समाप्ति: $6\n* अवरोधित सदस्य: $7\n\nअवरोध की चर्चा करने के लिए आप $1 या किसी अन्य [[{{MediaWiki:Grouppage-sysop}}|प्रबंधक]] से संपर्क कर सकते हैं।\n\nकृपया ध्यान दें कि यदि आपक \"इस सदस्य को ई-मेल भेजें\" वाली सुविधा का प्रयोग करना चाहते हैं तो आपकी [[Special:Preferences|वरीयताओं]] में वैध ई-मेल पता होना चाहिए और इसका प्रयोग आपके लिए अवरोधित नहीं होना चाहिए।\n\nआपका मौजूदा आइ॰पी पता $3 है और अवरोध क्रमांक #$5 है।\nअपने किसी भी प्रश्न में कृपया यह सभी जानकारी भी शामिल करें।",
+ "systemblockedtext": "आपका यूज़र नेम या आईपी का पता स्वचालित रूप से MediaWiki द्वारा अवरुद्ध कर दिया गया है।\nकारण दिया है:\n:<em>$2</em>\n\n* ब्लॉक का प्रारंभ: $8\n* ब्लॉक की समय सीमा समाप्त: $6\n* इरादा : $7\n\nआपका वर्तमान आईपी पता $3 है।\nआप किसी भी प्रश्न में सभी जानकारी भी शामिल करें।",
"blockednoreason": "कोई कारण नहीं दिया है",
"whitelistedittext": "पृष्ठ संपादित करने के लिये आपको $1 करना होगा।",
"confirmedittext": "संपादन करने से पहले अपना ई-मेल पता प्रमाणित करना आवश्यक है।\nकृपया अपनी [[Special:Preferences|सदस्य वरीयताओं]] में जाकर अपना ई-मेल पता दें और उसे प्रमाणित करें।",
"invalid-content-data": "अवैध डाटा सामग्री",
"content-not-allowed-here": "[[$2]] पृष्ठ पर \"$1\" सामग्री मना है।",
"editwarning-warning": "इस पृष्ठ को छोड़ने पर आपके द्वारा किये गए कोई भी बदलाव गायब हो जाएँगे।\nयदि आपने लॉग इन किया हुआ है तो आप इस सूचना का दिखना अपनी वरीयताओं के \"{{int:prefs-editing}}\" भाग में बंद कर सकते हैं।",
+ "editpage-invalidcontentmodel-title": "सामग्री मॉडल समर्थित नहीं",
+ "editpage-invalidcontentmodel-text": "सामग्री मॉडल \"$1\" समर्थित नहीं है।",
"editpage-notsupportedcontentformat-title": "सामग्री स्वरूप समर्थित नहीं है",
"editpage-notsupportedcontentformat-text": "$1 सामग्री स्वरूप $2 सामग्री मॉडल द्वारा समर्थित नहीं है।",
"content-model-wikitext": "विकिपाठ्य",
"content-model-json": "जेसन",
"content-json-empty-object": "रिक्त ऑब्जेक्ट",
"content-json-empty-array": "रिक्त ऐरे",
+ "deprecated-self-close-category": "अवैध एचटीएमएल टैग का उपयोग कर रहे पृष्ठ",
"duplicate-args-warning": "<strong>चेतावनी:</strong> [[:$1]] प्राचल \"$3\" के लिए [[:$2]] को एक से अधिक बार काम में ले रहा है। केवल अन्त में दिया गया मान ही काम में लिया जायेगा।",
"duplicate-args-category": "टेम्पलेट कॉल में डुप्लिकेट तर्क का उपयोग करते हुए पन्ने",
"duplicate-args-category-desc": "पेज जैसे तर्कों के डुप्लिकेट का उपयोग करने वाले टेम्पलेट कॉल, जैसे <code><nowiki>{{foo|bar=1|bar=2}}</nowiki></code> और <code><nowiki>{{foo|bar|1=baz}}</nowiki></code>.",
"rcfilters-invalid-filter": "अमान्य फ़िल्टर",
"rcfilters-empty-filter": "कोई सक्रिय फिल्टर नहीं। सभी योगदान दिखाए गए है।",
"rcfilters-filterlist-title": "फिल्टर",
+ "rcfilters-highlightbutton-title": "परिणाम रेखांकन करें",
+ "rcfilters-highlightmenu-title": "रंग चुनें",
"rcfilters-filterlist-noresults": "कोई फिल्टर नहीं पाया",
"rcfilters-filtergroup-registration": "उपयोगकर्ता पंजीकरण",
"rcfilters-filter-registered-label": "पंजीकृत:",
"rcfilters-filter-editsbyself-label": "आपके अपने संपादन",
"rcfilters-filter-editsbyself-description": "आपके द्वारा संपादित",
"rcfilters-filter-editsbyother-label": "दूसरों के द्वारा संपादित",
+ "rcfilters-filter-userExpLevel-newcomer-label": "अपरिचित",
+ "rcfilters-filter-userExpLevel-learner-label": "शिक्षार्थियों",
"rcfilters-filter-bots-label": "बॉट",
"rcfilters-filter-humans-label": "मानव (बॉट नहीं)",
"rcfilters-filter-humans-description": "मानव संपादक द्वारा किए गए संपादन।",
"pageinfo-length": "पृष्ठ आकार (बाइट्स में)",
"pageinfo-article-id": "पृष्ठ आइ॰डी",
"pageinfo-language": "पृष्ठ सामग्री भाषा",
+ "pageinfo-language-change": "परिवर्तन",
"pageinfo-content-model": "पृष्ठ सामग्री का नमूना",
"pageinfo-content-model-change": "बदलें",
"pageinfo-robot-policy": "सर्च इंजन बॉट द्वारा अनुक्रमण",
"log-show-hide-patrol": "परीक्षण लॉग $1",
"log-show-hide-tag": "$1 टैग लॉग",
"confirm-markpatrolled-button": "ठीक है",
+ "confirm-markpatrolled-top": "$2 के $3 संशोधन को परीक्षित चिन्ह्नत करे?",
"deletedrevision": "पुराना अवतरण $1 हटा दिया",
"filedeleteerror-short": "फ़ाईल हटानेमें समस्या: $1",
"filedeleteerror-long": "फ़ाईल हटानेमें आईं समस्यायें:\n\n$1",
"tag-filter": "[[Special:Tags|चिप्पी]] छननी:",
"tag-filter-submit": "छननी",
"tag-list-wrapper": "([[Special:Tags|{{PLURAL:$1|टैग}}]]: $2)",
+ "tag-mw-contentmodelchange": "सामग्री मॉडल परिवर्तन",
"tags-title": "चिप्पियाँ",
"tags-intro": "यह पृष्ठ अर्थ सहित वह चिप्पियाँ दर्शाता है जिनका कोई तंत्रांश किसी संपादन पर निशान लगाने के लिए इस्तेमाल कर सकता है।",
"tags-tag": "चिप्पी का नाम",
"authprovider-confirmlink-success-line": "$1 : सफलतापूर्वक जुड़ा।",
"authprovider-confirmlink-failed": "खाता जोड़ने का काम पूरी तरह से नहीं हो पाया : $1",
"authprovider-resetpass-skip-label": "छोड़ें",
+ "authprovider-resetpass-skip-help": "पासवर्ड को रीसेट करना छोड़ें।",
"authform-newtoken": "टोकन लापता है $1",
"authform-notoken": "टोकन लापता है",
"authform-wrongtoken": "गलत टोकन",
"linkaccounts-success-text": "खाता जुड़ गया।",
"linkaccounts-submit": "खाता जोड़ें",
"unlinkaccounts": "खाता अलग करें",
- "unlinkaccounts-success": "खाता अलग हो गया।"
+ "unlinkaccounts-success": "खाता अलग हो गया।",
+ "restrictionsfield-badip": "अमान्य आईपी पते या सीमा: $1",
+ "restrictionsfield-label": "अनुमत आईपी सीमा:",
+ "revid": "अवतरण $1",
+ "pageid": "पेज आईडी"
}
"Teoo3",
"Matma Rex",
"Vrhnje",
- "Ivi104"
+ "Ivi104",
+ "Сербијана"
]
},
"tog-underline": "Podcrtavanje poveznica",
"period-am": "AM",
"period-pm": "PM",
"pagecategories": "{{PLURAL:$1|Kategorija|Kategorije|Kategorija}}",
- "category_header": "Stranice u kategoriji \"$1\"",
+ "category_header": "Stranice u kategoriji »$1«",
"subcategories": "Potkategorije",
- "category-media-header": "Mediji u kategoriji \"$1\":",
+ "category-media-header": "Mediji u kategoriji »$1«",
"category-empty": "''U ovoj kategoriji trenutačno nema članaka ni medija.''",
"hidden-categories": "{{PLURAL:$1|Skrivena kategorija|Skrivene kategorije|Skrivenih kategorija}}",
"hidden-category-category": "Skrivene kategorije",
"searchbutton": "Traži",
"go": "Kreni",
"searcharticle": "Kreni",
- "history": "Stare izmjene",
+ "history": "Povijest stranice",
"history_short": "Stare izmjene",
"history_small": "stare izmjene",
"updatedmarker": "obnovljeno od posljednjeg posjeta",
"toolbox": "Pomagala",
"tool-link-userrights": "Promijeni {{GENDER:$1|suradnikove|suradničine}} grupe",
"tool-link-userrights-readonly": "Vidi {{GENDER:$1|suradnikovu|suradničinu|suradničku}} pripadnost skupinama",
- "tool-link-emailuser": "Pošalji e-poštu {{GENDER:$1|suradniku|suradnici}}",
+ "tool-link-emailuser": "Pošalji {{GENDER:$1|suradniku|suradnici}} e-poruku",
"userpage": "Vidi suradnikovu stranicu",
"projectpage": "Vidi stranicu o projektu",
"imagepage": "Vidi stranicu datoteke",
"passwordreset-emailsentemail": "Ako je ova adresa povezana s Vašim suradničkim računom, na nju će biti poslan podsjetnik na zaporku.",
"passwordreset-invalidemail": "Nevaljala adresa e-pošte",
"changeemail": "Promijeni ili izbriši e-mail adresu",
- "changeemail-header": "Promijeni adresu e-pošte računa",
+ "changeemail-header": "Ispunite ovaj obrazac da biste promijenili svoju adresu e-pošte. Ukoliko želite ukloniti povezanost svoje adrese e-pošte i suradničkoga računa, prilikom popunjavanja obrasca ostavite prazno polje umjesto upisivanja nove adrese e-pošte.",
"changeemail-no-info": "Morate biti prijavljeni da biste izravno pristupili ovoj stranici.",
"changeemail-oldemail": "Trenutačna adresa e-pošte:",
"changeemail-newemail": "Nova adresa e-pošte:",
"changeemail-password": "Zaporka za projekt {{SITENAME}}:",
"changeemail-submit": "Promijeni e-mail",
"changeemail-throttled": "Nedavno ste se previše puta pokušali prijaviti.\nMolimo Vas pričekajte $1 prije nego što pokušate ponovno.",
+ "changeemail-nochange": "Molimo vas, upišite neku novu adresu e-pošte.",
"bold_sample": "Podebljani tekst",
"bold_tip": "Podebljani tekst",
"italic_sample": "Kurzivni tekst",
"minoredit": "Ovo je manja promjena",
"watchthis": "Prati ovu stranicu",
"savearticle": "Sačuvaj stranicu",
- "savechanges": "Spremi promjene",
+ "savechanges": "Sačuvaj stranicu",
"publishpage": "Objavi stranicu",
"publishchanges": "Objavi izmjene",
"preview": "Pregled kako će stranica izgledati",
"missingsummary": "'''Podsjetnik:''' Niste unijeli sažetak promjena. Ako ponovno kliknete na \"Sačuvaj stranicu\", Vaše će promjene biti snimljene bez sažetka.",
"selfredirect": "<strong>Upozorenje:</strong> Stvarate preusmjeravanje na isti članak.\nMožda ste izabrali pogrješnu odredišnu stranicu za preusmjeravanje ili uređujete pogrješnu stranicu.\nAko pritisnete na \"{{int:savearticle}}\" još jednom, preusmjeravanje će svejedno biti stvoreno.",
"missingcommenttext": "Molim unesite sažetak.",
- "missingcommentheader": "'''Podsjetnik:''' Niste napisali sažetak ovog komentara. Ako ponovno kliknete \"{{int:savearticle}}\", Vaš će komentar biti snimljen bez sažetka.",
- "summary-preview": "Pregled sažetka:",
- "subject-preview": "Pregled predmeta:",
+ "missingcommentheader": "<strong>Podsjetnik:</strong> Niste napisali sažetak ovoga komentara. Ukoliko ponovo kliknete \"{{int:savearticle}}\", Vaš će komentar biti snimljen bez sažetka.",
+ "summary-preview": "Pregled polja Sažetak:",
+ "subject-preview": "Pregled teme:",
+ "previewerrortext": "Pri pokušaju prikazivanja pretpregleda vaših promjena došlo je do pogrješke.",
"blockedtitle": "Suradnik je blokiran",
"blockedtext": "'''Vaše suradničko ime ili IP adresa je blokirana'''\n\nBlokirao Vas je $1.\nRazlog blokiranja je sljedeći: ''$2''.\n\n* Početak blokade: $8\n* Istek blokade: $6\n* Ime blokiranog suradnika: $7\n\nMožete kontaktirati $1 ili jednog od [[{{MediaWiki:Grouppage-sysop}}|administratora]] kako bi Vam pojasnili razlog blokiranja.\n\nPrimijetite da ne možete koristiti opciju \"Pošalji mu e-poruku\" ako niste upisali valjanu adresu e-pošte u Vašim [[Special:Preferences|suradničkim postavkama]] i ako niste u tome onemogućeni prilikom blokiranja.\n\nVaša trenutačna IP adresa je $3, a oznaka bloka #$5. Molimo navedite ovaj broj kod svakog upita vezano za razlog blokiranja.",
"autoblockedtext": "Vaša IP adresa automatski je blokirana zbog toga što ju je koristio drugi suradnik, kojeg je blokirao $1.\nRazlog blokiranja je sljedeći:\n\n:''$2''\n\n* Početak blokade: $8\n* Blokada istječe: $6\n* Ime blokiranog suradnika: $7\n\nMožete kontaktirati $1 ili jednog od [[{{MediaWiki:Grouppage-sysop}}|administratora]] kako bi Vam pojasnili razlog blokiranja.\n\nPrimijetite da ne možete rabiti opciju \"Pošalji mu e-poruku\" ako niste upisali valjanu adresu e-pošte u Vašim [[Special:Preferences|suradničkim postavkama]] i ako niste u tome onemogućeni prilikom blokiranja.\n\nVaša trenutačna IP adresa je $3, a oznaka bloka #$5. Molimo navedite ovaj broj kod svakog upita vezano za razlog blokiranja.",
"yourdiff": "Razlike",
"copyrightwarning": "Molimo uočite da se svi doprinosi {{SITENAME}} smatraju objavljenima pod uvjetima $2 (vidi $1 za detalje). Ako ne želite da se Vaše pisanje nemilosrdno uređuje i slobodno raspačava, nemojte ga ovamo slati.<br />\nTakođer nam obećavate da ste ovo sami napisali, ili da ste to prepisali iz nečeg što je u javnom vlasništvu ili pod sličnom slobodnom licencijom.\n'''NE POSTAVLJAJTE RADOVE ZAŠTIĆENE AUTORSKIM PRAVIMA BEZ DOPUŠTENJA!'''",
"copyrightwarning2": "Molimo uočite da svi suradnici mogu mijenjati sve doprinose na {{SITENAME}}. Ako ne želite da se Vaše pisanje nemilosrdno uređuje, nemojte ga slati ovdje.<br /> Također nam obećavate da ste ovo sami napisali, ili da ste to prepisali iz nečeg što je u javnom vlasništvu ili pod sličnom slobodnom licencijom (vidi $1 za detalje). '''NE POSTAVLJAJTE RADOVE ZAŠTIĆENE AUTORSKIM PRAVIMA BEZ DOPUŠTENJA!'''",
+ "editpage-cannot-use-custom-model": "Model sadržaja ove stranice ne može se mijenjati.",
"longpageerror": "'''Pogrješka: Tekst koji ste unijeli dug je {{PLURAL:$1|jedan kilobajt|$1 kilobajta}}, što je više od maksimalno {{PLURAL:$2|jednog kilobajta|$2 kilobajta}}.'''\nNije ga moguće snimiti.",
"readonlywarning": "'''UPOZORENJE: Baza podataka je zaključana zbog održavanja, pa trenutačno ne možete sačuvati svoje\npromjene. Najbolje je da kopirate i zaljepite tekst u tekstualnu datoteku te je snimite za kasnije.'''\n\nAdministrator je zaključao bazu iz razloga: $1",
"protectedpagewarning": "'''UPOZORENJE: Ova stranica je zaključana i mogu je uređivati samo suradnici s administratorskim pravima.'''\nPosljednja stavka u evidenciji navedena je niže kao napomena:",
"content-json-empty-object": "Prazan objekt",
"content-json-empty-array": "Prazno polje",
"duplicate-args-warning": "<strong>Upozorenje:</strong> [[:$1]] poziva na [[:$2]] s više od jedne vrijednosti za parametar \"$3\". Rabit će se samo posljednja navedena vrijednost.",
+ "duplicate-args-category": "Stranice u kojima se ponavljaju argumenti u predlošcima",
"expensive-parserfunction-warning": "Upozorenje: Ova stranica sadrži previše opterećujućih poziva parserskih funkcija\n\nTrebala bi imati manje od $2 {{PLURAL:$2|poziva|poziva}}, sada ima {{PLURAL:$1|$1 poziv|$1 poziva}}.",
"expensive-parserfunction-category": "Stranice s previše poziva opterećujućih parserskih funkcija",
"post-expand-template-inclusion-warning": "Upozorenje: Veličina uključenih predložaka je prevelika.\nNeki predlošci neće biti uključeni.",
"last": "pret",
"page_first": "prva",
"page_last": "zadnja",
- "histlegend": "Uputa: (sad) = razlika od trenutačne inačice,\n(pret) = razlika od prethodne inačice, m = manja promjena",
+ "histlegend": "Izbor za usporedbu: označi kružiće pokraj dvije inačice koje želiš usporediti i pritisni \"Enter\" ili tipku na dnu.<br />\nUputa: <strong>({{int:cur}})</strong> = razlika od trenutačne inačice, <strong>({{int:last}})</strong> = razlika od prethodne inačice, <strong>{{int:minoreditletter}}</strong> = manja promjena.",
"history-fieldset-title": "Pretraži povijest",
"history-show-deleted": "Samo izbrisane",
"histfirst": "najstarije",
"history-feed-description": "Povijest promjena ove stranice na wikiju",
"history-feed-item-nocomment": "$1 u (test) $2",
"history-feed-empty": "Tražena stranica ne postoji.\nStranica je vjerojatno prethodno izbrisana s wikija, ili preimenovana.\nPokušajte [[Special:Search|pretražiti]] važnije nove stranice na wikiju.",
+ "history-edit-tags": "Uredi oznake označenih izmjena",
"rev-deleted-comment": "(komentar uklonjen)",
"rev-deleted-user": "(suradničko ime uklonjeno)",
"rev-deleted-event": "(zapis uklonjen)",
"revdelete-no-file": "Navedena datoteka ne postoji.",
"revdelete-show-file-confirm": "Jeste li sigurni da želite pregledati izbrisanu inačicu datoteke \"<nowiki>$1</nowiki>\" od $2 u $3?",
"revdelete-show-file-submit": "Da",
- "revdelete-selected-text": "{{PLURAL:$1|Označena izmjena|Označene izmjene}} stranice [[:$2]]:",
- "revdelete-selected-file": "{{PLURAL:$1|Označena inačica|Označene inačice}} datoteke [[:$2]]:",
+ "revdelete-selected-text": "{{PLURAL:$1|Označena izmjena|Označene izmjene|Označenih izmjena}} stranice [[:$2]]:",
+ "revdelete-selected-file": "{{PLURAL:$1|Označena inačica|Označene inačice|Označenih inačica}} datoteke [[:$2]]:",
"logdelete-selected": "{{PLURAL:$1|Odabrani zapis u evidenciji|Odabrani zapisi u evidenciji}}:",
"revdelete-text-text": "Izbrisane izmjene će i dalje biti vidljive u povijesti stranice, ali dijelovi sadržaja neće biti javno vidljivi.",
"revdelete-text-file": "Izbrisane inačice datoteke će i dalje biti vidljive u povijesti datoteke, ali neki dijelovi sadržaja neće biti javno vidljivi.",
"mergehistory-empty": "Nema spojivih promjena (spajanje nije moguće).",
"mergehistory-done": "$3 {{PLURAL:$3|izmjena|izmjene}} stranice $1 uspješno {{PLURAL:$3|spojena|spojene}} u povijest stranice [[:$2]].",
"mergehistory-fail": "Nemoguće spojiti povijest stranica, molimo provjerite stranice i vremenske parametre.",
+ "mergehistory-fail-bad-timestamp": "Oznaka vremena nije valjana.",
"mergehistory-no-source": "Izvorna stranica $1 ne postoji.",
"mergehistory-no-destination": "Ciljna stranica $1 ne postoji.",
"mergehistory-invalid-source": "Izvorna stranica mora imati valjani naziv.",
"mergelog": "Evidencija spajanja povijesti stranica",
"revertmerge": "Razdvoji",
"mergelogpagetext": "Slijedi popis posljednjih spajanja povijesti stranica.",
- "history-title": "Povijest izmjena stranice \"$1\"",
- "difference-title": "Razlika između inačica stranice $1",
+ "history-title": "Povijest izmjena stranice »$1«",
+ "difference-title": "Razlika između inačica stranice »$1«",
"difference-title-multipage": "Razlika između stranica \"$1\" i \"$2\"",
"difference-multipage": "(Razlika između stranica)",
"lineno": "Redak $1:",
"prefs-labs": "Labs mogućnosti",
"prefs-user-pages": "Suradničke stranice",
"prefs-personal": "Podaci o suradniku",
- "prefs-rc": "Nedavne promjene i kratki članci",
+ "prefs-rc": "Nedavne promjene",
"prefs-watchlist": "Praćene stranice",
"prefs-editwatchlist": "Uredi popis praćenja",
"prefs-editwatchlist-label": "Uredi stavke na popisu praćenja:",
"prefs-rendering": "Izgled",
"saveprefs": "Spremi",
"restoreprefs": "Vrati sve postavke na prvotno zadane",
- "prefs-editing": "Širina okvira za uređivanje",
+ "prefs-editing": "Uređivanje",
"searchresultshead": "Prikaz rezultata pretrage",
"stub-threshold": "Prag za formatiranje poveznice na mrve ($1):",
"stub-threshold-disabled": "Onemogućeno",
"editusergroup": "Učitaj suradničke skupine",
"editinguser": "Promjena suradničkih prava {{GENDER:$1|suradnika|suradnice}} <strong>[[User:$1|$1]]</strong> $2",
"viewinguserrights": "Pregled suradničkih prava {{GENDER:$1|suradnika|suradnice}} <strong>[[User:$1|$1]]</strong> $2",
- "userrights-editusergroup": "Uredi suradničke skupine",
- "userrights-viewusergroup": "Vidi suradničke skupine",
+ "userrights-editusergroup": "Uredi {{GENDER:$1|suradničke}} skupine",
+ "userrights-viewusergroup": "Vidi {{GENDER:$1|suradničke}} skupine",
"saveusergroups": "Spremi {{GENDER:$1|suradničke}} grupe",
- "userrights-groupsmember": "Član:",
- "userrights-groupsmember-auto": "Uključeni član:",
- "userrights-groups-help": "Možete promijeniti skupine za ovog suradnika:\n* označena kućica pokazuje skupinu kojoj suradnik pripada;\n* neoznačena kućica pokazuje skupinu kojoj suradnik ne pripada;\n* zvjezdica (*) označava skupinu koju ne možete ukloniti kad ju jednom dodate, ili obratno.",
+ "userrights-groupsmember": "{{GENDER:$2|Pripadnik|Pripadnica}} skupina:",
+ "userrights-groupsmember-auto": "{{GENDER:$2|Pripadnik|Pripadnica}} obuhvaćenih skupina:",
+ "userrights-groups-help": "Možete promijeniti skupine za ovog suradnika:\n* označena kućica pokazuje skupinu kojoj suradnik pripada;\n* neoznačena kućica pokazuje skupinu kojoj suradnik ne pripada;\n* zvjezdica (*) označava skupinu koju ne možete ukloniti kad ju jednom dodate, ili obratno.\n* povisilica (#) označava da rok valjanosti pripadanja skupini možete samo skratiti, a ne i produljiti",
"userrights-reason": "Razlog:",
"userrights-no-interwiki": "Nemate dopuštenje za uređivanje suradničkih prava na drugim wikijima.",
"userrights-nodatabase": "Baza podataka $1 ne postoji ili nije lokalno dostupna.",
"userrights-changeable-col": "Skupine koje možete promijeniti",
"userrights-unchangeable-col": "Skupine koje ne možete promijeniti",
+ "userrights-expiry-none": "Neograničeno trajanje statusa",
"userrights-conflict": "Sukob promjene suradničkih prava! Molimo provjerite i potvrdite svoje promjene.",
"group": "Skupina:",
"group-user": "Suradnici",
"right-move": "Premještanje stranica",
"right-move-subpages": "Premještanje stranica s njihovim podstranicama",
"right-move-rootuserpages": "Premještanje osnovne stranice suradnika",
+ "right-move-categorypages": "premještanja kategorizacijskih stranica",
"right-movefile": "Premještanje datoteka",
"right-suppressredirect": "Ne raditi preusmjeravanje od starog imena prilikom premještanja stranice",
"right-upload": "Postavljanje datoteka",
"right-ipblock-exempt": "Iznimka od blokiranja IP adresa, auto-bloka i blokiranja opsega",
"right-unblockself": "Odblokirati se",
"right-protect": "Mijenjanje razina zaštićivanja i uređivanje zaštićenih stranica",
- "right-editprotected": "Uređivanje zaštićenih stranica (bez prenosive zaštite)",
- "right-editsemiprotected": "Uređivanje zaštićenih stranica kao \"{{int: zaštititi-nivo-autoconfirmed}}\"",
+ "right-editprotected": "Uređivanje stranica zaštićenih kao \"{{int:protect-level-sysop}}\"",
+ "right-editsemiprotected": "Uređivanje stranica zaštićenih kao \"{{int:protect-level-autoconfirmed}}\"",
"right-editinterface": "Uređivanje suradničkog sučelja",
"right-editusercssjs": "Uređivanje CSS i JS stranica drugih suradnika",
"right-editusercss": "Uređivanje CSS stranica drugih suradnika",
"right-import": "Uvoženje stranica s drugih wikija",
"right-importupload": "Uvoženje stranica kao datoteke",
"right-patrol": "Označavanje izmjena pregledanim",
- "right-autopatrol": "Izmjene su automatski označene kao pregledane",
+ "right-autopatrol": "Izmjene su automatski označene kao ophođene",
"right-patrolmarks": "Vidljive oznake pregledavanja u nedavnim promjenama",
"right-unwatchedpages": "Vidljiv popis nepraćenih stranica",
"right-mergehistory": "Spajanje povijesti stranica",
"action-import": "uvoženje ove stranice s drugog wikija",
"action-importupload": "uvoženje ove stranice postavljanjem datoteke",
"action-patrol": "označavanje tuđih izmjena pregledanim",
- "action-autopatrol": "automatsko označavanje pregledanim za svoje izmjene",
+ "action-autopatrol": "automatsko označavanje vlastitih izmjena ophođenim",
"action-unwatchedpages": "gledanje popisa stranica koje nisu praćene",
"action-mergehistory": "spajanje povijesti ove stranice",
"action-userrights": "uređivanje svih suradničkih prava",
"filehist-dimensions": "Dimenzije",
"filehist-filesize": "Veličina datoteke",
"filehist-comment": "Komentar",
- "imagelinks": "Upotreba datoteke",
+ "imagelinks": "Uporaba datoteke",
"linkstoimage": "{{PLURAL:$1|Sljedeća stranica povezuje|$1 sljedeće stranice povezuju|$1 sljedećih stranica povezuje}} na ovu datoteku:",
"linkstoimage-more": "Više od $1 {{PLURAL:$1|stranice povezuje|stranica povezuje}} na ovu datoteku.\nSljedeći popis prikazuje {{PLURAL:$1|stranice koje|prvih $1 stranica koje}} vode na ovu datoteku.\n[[Special:WhatLinksHere/$2|Ovdje se nalazi]] potpuni popis.",
"nolinkstoimage": "Nijedna stranica ne povezuje na ovu sliku.",
"listusersfrom": "Prikaži suradnike počevši od:",
"listusers-submit": "Prikaži",
"listusers-noresult": "Nema takvih suradnika.",
- "listusers-blocked": "(blokiran)",
+ "listusers-blocked": "({{GENDER:$1|blokirani|blokirana}})",
"activeusers": "Popis aktivnih suradnika",
"activeusers-intro": "Ovo je popis suradnika koji su napravili neku aktivnost u {{PLURAL:$1|posljednji $1 dan|posljednja $1 dana|posljednjih $1 dana}}.",
"activeusers-count": "{{PLURAL:$1|nedavna $1 izmjena|nedavne $1 izmjene|nedavnih $1 izmjena}} u {{PLURAL:$3|posljednji $3 dan|posljednja $3 dana|posljednjih $3 dana}}",
"emailccsubject": "Kopija Vaše poruke suradniku $1: $2",
"emailsent": "E-mail poslan",
"emailsenttext": "Vaša poruka je poslana.",
- "emailuserfooter": "Ovu je e-poruku {{GENDER:$1|poslao suradnik|poslala suradnica}} $1 {{GENDER:$2|suradniku $2|suradnici $2}} uporabom mogućnosti \"{{int:emailuser}}\" s projekta {{SITENAME}}.",
+ "emailuserfooter": "Ovu je e-poruku {{GENDER:$1|poslao suradnik|poslala suradnica}} $1 {{GENDER:$2|suradniku $2|suradnici $2}} uporabom mogućnosti \"{{int:emailuser}}\" s projekta {{SITENAME}}. Ukoliko {{GENDER:$2|odgovorite}} na tu e-poruku, {{GENDER:$2|Vaša}} će poruka biti izravno poslana {{GENDER:$1|izvornom pošiljatelju}}, otkrivajući pritom {{GENDER:$2|Vašu}} adresu e-pošte {{GENDER:$1|pošiljatelju|pošiljateljici}}.",
"usermessage-summary": "Ostavljanje poruke sustava.",
"usermessage-editor": "Uređivač sistemskih poruka",
"watchlist": "Popis praćenja",
"bad_image_list": "Rabi se sljedeći format:\n\nSamo retci koji počinju sa zvjezdicom su prikazani. Prva poveznica u retku mora biti poveznica na nevaljanu sliku.\nSvaka sljedeća poveznica u istom retku je izuzetak, npr. kod stranica gdje se slike pojavljuju ''inline''.",
"variantname-sr-ec": "ćirilica",
"variantname-sr-el": "latinica",
- "metadata": "Metapodaci",
+ "metadata": "Metapodatci",
"metadata-help": "Ova datoteka sadržava dodatne podatke koje je vjerojatno dodala digitalna kamera ili skener u procesu snimanja odnosno digitalizacije. Ako je datoteka mijenjana, podatci možda nisu u skladu sa stvarnim stanjem.",
"metadata-expand": "Pokaži sve podatke",
"metadata-collapse": "Sakrij dodatne podatke",
"tags": "Valjane oznake izmjena",
"tag-filter": "Filtar [[Special:Tags|oznaka]]:",
"tag-filter-submit": "Filtar",
- "tag-list-wrapper": "([[Special:Tags|{{PLURAL:$1|Oznaka|Oznake}}]]: $2)",
+ "tag-list-wrapper": "([[Special:Tags|{{PLURAL:$1|Oznaka|Oznake|Oznaka}}]]: $2)",
"tag-mw-contentmodelchange": "promjena modela sadržaja",
"tag-mw-contentmodelchange-description": "Uređivanja koja [https://www.mediawiki.org/wiki/Special:MyLanguage/Help:ChangeContentModel mijenjanju model sadržaja] stranice",
"tags-title": "Oznake",
"tags-deactivate-submit": "Isključi",
"tags-edit-title": "Uredi oznake",
"tags-edit-manage-link": "Upravljaj oznakama",
+ "tags-edit-revision-selected": "{{PLURAL:$1|Označena izmjena|Označene izmjene|Označenih izmjena}} stranice [[:$2]]:",
"tags-edit-existing-tags": "Postojeće oznake:",
"tags-edit-existing-tags-none": "\"Nema\"",
"tags-edit-new-tags": "Nove oznake:",
"htmlform-time-invalid": "Unesena vrijednost nije prepoznati format vremena. Pokušajte koristiti format HH:MM:SS.",
"htmlform-datetime-toohigh": "Uneseni datum i vrijeme su veći od $1",
"logentry-delete-delete": "$1 je {{GENDER:$2|obrisao|obrisala}} stranicu $3",
- "logentry-delete-delete_redir": "$1 je {{GENDER:$2|obrisao|obrisala}} preusmjeravanje $3 prepisivanjem",
+ "logentry-delete-delete_redir": "$1 je premještanjem {{GENDER:$2|pobrisao|pobrisala}} preusmjeravanje $3",
"logentry-delete-restore": "$1 je {{GENDER:$2|vratio|vratila}} stranicu $3",
"logentry-delete-event": "$1 je {{GENDER:$2|promijenio|promijenila}} vidljivost {{PLURAL:$5|zapisa u evidenciji|$5 zapisa u evidenciji}} na $3: $4",
"logentry-delete-revision": "$1 je {{GENDER:$2|promijenio|promijenila}} vidljivost {{PLURAL:$5|uređivanja|$5 uređivanja}} na stranici $3: $4",
"right-pagelang": "Promijeni jezik stranice",
"mediastatistics": "Statistika datoteka",
"mediastatistics-summary": "Slijede statistike postavljenih datoteka koje pokazuju zadnju inačicu datoteke. Starije ili izbrisane inačice nisu prikazane.",
+ "mediastatistics-bytespertype": "Ukupna veličina datoteka za ovaj odlomak: {{PLURAL:$1|$1 bajt|$1 bajta|$1 bajtova}} ($2; $3%).",
+ "mediastatistics-allbytes": "Ukupna veličina svih datoteka: {{PLURAL:$1|$1 bajt|$1 bajta|$1 bajtova}} ($2).",
"mediastatistics-header-drawing": "Crteži (vektorske slike)",
"mediastatistics-header-audio": "Audio",
"mediastatistics-header-video": "Videozapisi",
"mw-widgets-dateinput-placeholder-month": "GGGG-MM",
"mw-widgets-titleinput-description-new-page": "stranica još ne postoji",
"mw-widgets-titleinput-description-redirect": "preusmjeravanje na $1",
+ "randomrootpage": "Slučajna korijenska stranica",
"log-action-filter-block": "Vrsta blokiranja:",
"log-action-filter-delete": "Vrsta brisanja:",
"log-action-filter-import": "Vrsta uvoza:",
"searcharticle": "Անցնել",
"history": "Էջի պատմություն",
"history_short": "Պատմություն",
- "updatedmarker": "թարմացվել է իմ վերջին այցից հետո",
+ "updatedmarker": "փոփոխվել է ձեր վերջին այցից հետո",
"printableversion": "Տպելու տարբերակ",
"permalink": "Մշտական հղում",
"print": "Տպել",
"retypenew": "Հաստատեք նոր գաղտնաբառը.",
"resetpass_submit": "Հաստատել գաղտնաբառը և մտնել համակարգ",
"changepassword-success": "Ձեր գաղտնաբառը փոփոխվեց։",
- "botpasswords": "Ô²Õ¸Õ¿Õ¥Ö\80Õ« Õ®Õ¡Õ®Õ¯Õ¡Õ£Ö\80եր",
- "botpasswords-disabled": "Ô²Õ¸Õ¿Õ¥Ö\80Õ« Õ®Õ¡Õ®Õ¯Õ¡Õ£Ö\80Õ¥Ö\80Õ¶ անջատված են:",
- "botpasswords-existing": "Ô³Õ¸ÕµÕ¸Ö\82Õ©ÕµÕ¸Ö\82Õ¶ Õ¸Ö\82Õ¶Õ¥Ö\81Õ¸Õ² Õ¢Õ¸Õ¿Õ¡ÕµÕ«Õ¶ Õ®Õ¡Õ®Õ¯Õ¡Õ£Ö\80Õ¥Ö\80Õ¨",
- "botpasswords-createnew": "Õ\8dÕ¿Õ¥Õ²Õ®Õ¥Õ¬ Õ¶Õ¸Ö\80 Õ¢Õ¸Õ¿Õ¡ÕµÕ«Õ¶ Õ®Õ¡Õ®Õ¯Õ¡Õ£Õ«Ö\80",
- "botpasswords-editexisting": "Խմբագրել առկա բոտային ծածկագիրը",
+ "botpasswords": "Ô²Õ¸Õ¿Õ¥Ö\80Õ« Õ£Õ¡Õ²Õ¿Õ¶Õ¡Õ¢Õ¡Õ¼եր",
+ "botpasswords-disabled": "Ô²Õ¸Õ¿Õ¥Ö\80Õ« Õ£Õ¡Õ²Õ¿Õ¶Õ¡Õ¢Õ¡Õ¼Õ¥Ö\80Õ¨ անջատված են:",
+ "botpasswords-existing": "Ô³Õ¸ÕµÕ¸Ö\82Õ©ÕµÕ¸Ö\82Õ¶ Õ¸Ö\82Õ¶Õ¥Ö\81Õ¸Õ² Õ¢Õ¸Õ¿Õ¥Ö\80Õ« Õ£Õ¡Õ²Õ¿Õ¶Õ¡Õ¢Õ¡Õ¼Õ¥Ö\80",
+ "botpasswords-createnew": "Õ\8dÕ¿Õ¥Õ²Õ®Õ¥Õ¬ Õ¶Õ¸Ö\80 Õ¢Õ¸Õ¿Õ« Õ£Õ¡Õ²Õ¿Õ¶Õ¡Õ¢Õ¡Õ¼",
+ "botpasswords-editexisting": "Փոխել եղած բոտի գաղտնաբառը",
"botpasswords-label-appid": "Բոտի անուն՝",
"botpasswords-label-create": "Ստեղծել",
"botpasswords-label-update": "Թարմացնել",
"botpasswords-label-cancel": "Չեղարկել",
"botpasswords-label-delete": "Ջնջել",
- "botpasswords-label-resetpassword": "Õ\8eÕ¥Ö\80Õ¡Õ¯Õ¡Õ¶Õ£Õ¶Õ¥Õ¬ Õ®Õ¡Õ®Õ¯Õ¡Õ£Õ«Ö\80ը",
+ "botpasswords-label-resetpassword": "Õ\8eÕ¥Ö\80Õ¡Õ¯Õ¡Õ¶Õ£Õ¶Õ¥Õ¬ Õ£Õ¡Õ²Õ¿Õ¶Õ¡Õ¢Õ¡Õ¼ը",
"botpasswords-label-grants-column": "Թույլատրված է",
"botpasswords-bad-appid": "\"$1\" բոտի անունն անթույլատրելի է:",
"botpasswords-created-title": "Բոտի ծածկագիրը ստեղծվել է",
"botpasswords-created-body": "$2 մասնակցի $1 բոտի համար բոտի ծածկագիրը ստեղծվել է:",
- "botpasswords-updated-title": "Ô²Õ¸Õ¿Õ« Õ®Õ¡Õ®Õ¯Õ¡Õ£Õ«Ö\80ը թարմացվել է",
- "botpasswords-updated-body": "$2 Õ´Õ¡Õ½Õ¶Õ¡Õ¯Ö\81Õ« $1 Õ¢Õ¸Õ¿Õ« Õ°Õ¡Õ´Õ¡Ö\80 Õ¢Õ¸Õ¿Õ« Õ®Õ¡Õ®Õ¯Õ¡Õ£Õ«Ö\80Õ¨ Õ½Õ¿Õ¥Õ²Õ®Õ¾Õ¥Õ¬ Õ§:",
- "botpasswords-deleted-title": "Ô²Õ¸Õ¿Õ« Õ®Õ¡Õ®Õ¯Õ¡Õ£Õ«Ö\80Õ¨ Õ»Õ¶Õ»Õ¾Õ¡Õ® Õ§",
+ "botpasswords-updated-title": "Ô²Õ¸Õ¿Õ« Õ£Õ¡Õ²Õ¿Õ¶Õ¡Õ¢Õ¡Õ¼ը թարմացվել է",
+ "botpasswords-updated-body": "$2 Õ´Õ¡Õ½Õ¶Õ¡Õ¯Ö\81Õ« $1 Õ¢Õ¸Õ¿Õ« Õ£Õ¡Õ²Õ¿Õ¶Õ¡Õ¢Õ¡Õ¼Õ¨ Ö\83Õ¸Ö\83Õ¸ÕÕ¾Õ¥Ö\81:",
+ "botpasswords-deleted-title": "Ô²Õ¸Õ¿Õ« Õ£Õ¡Õ²Õ¿Õ¶Õ¡Õ¢Õ¡Õ¼Õ¨ Õ»Õ¶Õ»Õ¾Õ¥Ö\81",
"botpasswords-deleted-body": "$2 մասնակցի $1 բոտի համար բոտի ծածկագիրը ջնջվել է:",
"resetpass_forbidden": "Գաղտնաբառը չի կարող փոխվել",
"resetpass-no-info": "Այս էջին ուղիղ դիմելու համար անհրաժեշտ է մտնել համակարգ։",
"selfredirect": "<strong>Attention:</strong> Tu redirige iste pagina verso se mesme.\nTu pote haber specificate le mal destination pro le redirection, o tu modifica forsan le mal pagina.\nSi tu clicca sur \"{{int:savearticle}}\" de novo, le redirection essera create in despecto de isto.",
"missingcommenttext": "Per favor entra un commento infra.",
"missingcommentheader": "<strong>Rememoration:</strong> Tu non ha fornite un subjecto pro iste commento.\nSi tu clicca super \"{{int:savearticle}}\" de novo, le modification essera publicate sin subjecto.",
- "summary-preview": "Previsualisation del summario:",
+ "summary-preview": "Previsualisation del summario de modification:",
"subject-preview": "Previsualisation del subjecto:",
"previewerrortext": "Un error ha occurrite durante le tentativa de previsualisar le cambiamentos.",
"blockedtitle": "Le usator es blocate",
"fileduplicatesearch-noresults": "Mistókst að finna skrána \"$1\"",
"specialpages": "Kerfissíður",
"specialpages-note-top": "Fyrirsögn",
- "specialpages-note": "* Venjulegar kerfisíður.\n* <span class=\"mw-specialpagerestricted\">Kerfisíður með takmörkuðum aðgangi.</span>",
+ "specialpages-note": "* Venjulegar kerfissíður.\n* <span class=\"mw-specialpagerestricted\">Kerfissíður með takmörkuðum aðgangi.</span>",
"specialpages-group-maintenance": "Viðhaldsskýrslur",
"specialpages-group-other": "Aðrar kerfissíður",
"specialpages-group-login": "Innskrá / Búa til aðgang",
"specialpages-group-pages": "Listar yfir síður",
"specialpages-group-pagetools": "Síðuverkfæri",
"specialpages-group-wiki": "Gögn og tól",
- "specialpages-group-redirects": "Tilvísaðar kerfisíður",
+ "specialpages-group-redirects": "Tilvísaðar kerfissíður",
"specialpages-group-spam": "Amasendingasíur",
"specialpages-group-developer": "Forritaratól",
"blankpage": "Tóm síða",
"Saracrovetto",
"Tosky",
"Selven",
- "Margherita.mignanelli"
+ "Margherita.mignanelli",
+ "Redredsonia"
]
},
"tog-underline": "Sottolinea i collegamenti:",
"userrights-expiry-current": "Scade il $1",
"userrights-expiry-none": "Non ha scadenza",
"userrights-expiry": "Scadenza:",
+ "userrights-expiry-existing": "Scadenza attuale: $2, $3",
+ "userrights-expiry-othertime": "Altra durata:",
"userrights-expiry-options": "1 giorno:1 day,1 settimana:1 week,1 mese:1 month,3 mesi:3 months,6 mesi:6 months,1 anno:1 year",
"userrights-conflict": "Conflitto di modifica dei diritti utente! Controlla e conferma le tue modifiche.",
"group": "Gruppo:",
"rcfilters-invalid-filter": "Filtro non valido",
"rcfilters-empty-filter": "Nessun filtro attivo. Sono mostrati tutti i contributi.",
"rcfilters-filterlist-title": "Filtri",
+ "rcfilters-highlightmenu-title": "Seleziona un colore",
"rcfilters-filterlist-noresults": "Nessun filtro trovato",
"rcfilters-filtergroup-registration": "Registrazione utente",
"rcfilters-filter-registered-label": "Registrato",
"editcomment": "L'oggetto della modifica era: <em>$1</em>.",
"revertpage": "Annullate le modifiche di [[Special:Contributions/$2|$2]] ([[User talk:$2|discussione]]), riportata alla versione precedente di [[User:$1|$1]]",
"revertpage-nouser": "Annullate le modifiche di un utente nascosto, riportata alla versione precedente di {{GENDER:$1|[[User:$1|$1]]}}",
- "rollback-success": "Annullate le modifiche di $1; pagina riportata all'ultima versione di $2.",
+ "rollback-success": "Annullate le modifiche di {{GENDER:$3|$1}}; pagina riportata all'ultima versione di {{GENDER:$4|$2}}.",
"rollback-success-notify": "Annullate le modifiche di $1;\npagina riportata all'ultima revisione di $2. [$3 Mostra le modifiche]",
"sessionfailure-title": "Sessione fallita",
"sessionfailure": "Si è verificato un problema nella sessione che identifica l'accesso; il sistema non ha eseguito il comando impartito per precauzione. Tornare alla pagina precedente con il tasto 'Indietro' del proprio browser, ricaricare la pagina e riprovare.",
"protect-expiry-indefinite": "infinito",
"protect-cascade": "Protezione ricorsiva (estende la protezione a tutte le pagine incluse in questa).",
"protect-cantedit": "Non è possibile modificare i livelli di protezione per la pagina in quanto non si dispone dei permessi necessari per modificare la pagina stessa.",
- "protect-othertime": "Durata non in elenco:",
- "protect-othertime-op": "durata non in elenco",
+ "protect-othertime": "Altra durata:",
+ "protect-othertime-op": "altra durata",
"protect-existing-expiry": "Scadenza attuale: $2, $3",
"protect-existing-expiry-infinity": "Scadenza attuale: infinito",
"protect-otherreason": "Altri motivi/dettagli:",
"ipbemailban": "Impedisci all'utente l'invio di email",
"ipbenableautoblock": "Blocca automaticamente l'ultimo indirizzo IP usato dall'utente e i successivi con cui vengono tentate modifiche",
"ipbsubmit": "Blocca l'utente",
- "ipbother": "Durata non in elenco:",
+ "ipbother": "Altra durata:",
"ipboptions": "2 ore:2 hours,1 giorno:1 day,3 giorni:3 days,1 settimana:1 week,2 settimane:2 weeks,1 mese:1 month,3 mesi:3 months,6 mesi:6 months,1 anno:1 year,infinito:infinite",
"ipbhidename": "Nascondi il nome utente dalle modifiche e dagli elenchi.",
"ipbwatchuser": "Segui le pagine e le discussioni utente di questo utente",
"authmanager-create-not-in-progress": "アカウントの作成が行われていない、またはセッションデータが失われました。最初からやり直してください。",
"authmanager-create-no-primary": "指定された証明情報は、アカウントの作成に使用できませんでした。",
"authmanager-link-no-primary": "指定された証明情報は、アカウントの関連付けに使用できませんでした。",
- "authmanager-link-not-in-progress": "アカウントの関連付けが行われていない、またはセッションデータが失われました。最初からやり直してください。",
+ "authmanager-link-not-in-progress": "アカウントの関連付けが処理されていないか、セッションデータが失われています。最初からやり直してください。",
"authmanager-authplugin-setpass-failed-title": "パスワードの変更に失敗しました",
"authmanager-authplugin-setpass-failed-message": "パスワードの変更は、認証プラグインによって拒否されました。",
"authmanager-authplugin-create-fail": "アカウントの作成は、認証プラグインによって拒否されました。",
"recentchanges-legend-newpage": "{{int:recentchanges-label-newpage}} (იხ. აგრეთვე [[Special:NewPages|ახალი გვერდების სია]])",
"recentchanges-legend-plusminus": "(<em>±123</em>)",
"recentchanges-submit": "ჩვენება",
+ "rcfilters-highlightmenu-title": "ფერის არჩევა",
"rcnotefrom": "ქვემოთ {{PLURAL:$5|ნაჩვენებია ცვლილება|ნაჩვენებია ცვლილებები}} <strong>$3, $4</strong>-დან (ნაჩვენებია არაუმეტეს <strong>$1</strong>).",
"rclistfrom": "ახალი ცვლილებების ჩვენება დაწყებული $3 $2-დან",
"rcshowhideminor": "მცირე რედაქტირების $1",
"selfredirect": "<strong>경고:</strong> 자기 자신으로 문서를 넘겨주고 있습니다.\n넘겨줄 대상을 잘못 입력했거나, 잘못된 문서를 편집하고 있을 수 있습니다.\n\"{{int:savearticle}}\"을 입력하면, 넘겨주기 문서가 생성될 것입니다.",
"missingcommenttext": "아래에 내용을 채워 넣어 주세요.",
"missingcommentheader": "<strong>알림:</strong> 글의 제목을 입력하지 않았습니다.\n다시 \"{{int:savearticle}}\" 버튼을 클릭하면 글이 제목 없이 저장됩니다.",
- "summary-preview": "요약 미리 보기:",
+ "summary-preview": "편집 요약 미리 보기:",
"subject-preview": "주제 미리 보기:",
"previewerrortext": "변경사항을 미리보기하는 도중 오류가 발생했습니다.",
"blockedtitle": "사용자가 차단됨",
"allpages": "모든 문서 목록",
"nextpage": "다음 문서 ($1)",
"prevpage": "이전 문서 ($1)",
- "allpagesfrom": "다음으로 시작하는 문서 보기:",
- "allpagesto": "다음으로 끝나는 문서 보기:",
+ "allpagesfrom": "다음으로 시작하는 문서 표시:",
+ "allpagesto": "다음으로 끝나는 문서 표시:",
"allarticles": "모든 문서",
"allinnamespace": "$1 이름공간의 모든 문서",
"allpagessubmit": "보기",
- "allpagesprefix": "다음으로 시작하는 문서 보기:",
+ "allpagesprefix": "다음 접두어로 시작하는 문서 표시:",
"allpagesbadtitle": "주어진 문서 제목이 잘못되었거나 다른 사이트로 연결되는 인터위키가 있습니다.\n문서 제목에 사용할 수 없는 문자를 사용했을 수 있습니다.",
"allpages-bad-ns": "{{SITENAME}}에서는 \"$1\" 이름공간을 사용하지 않습니다.",
"allpages-hide-redirects": "넘겨주기 숨기기",
"categories": "분류 목록",
"categories-submit": "보이기",
"categoriespagetext": "문서나 자료를 {{PLURAL:$1|포함하고 있는 분류}} 목록입니다.\n[[Special:UnusedCategories|사용되지 않는 분류]]는 여기에 보이지 않습니다.\n[[Special:WantedCategories|필요한 분류]]도 참조하세요.",
- "categoriesfrom": "다음으로 시작하는 분류를 보여주기:",
+ "categoriesfrom": "다음으로 시작하는 분류 표시:",
"deletedcontributions": "삭제된 사용자 기여",
"deletedcontributions-title": "삭제된 사용자 기여",
"sp-deletedcontributions-contribs": "기여",
"linksearch-text": "\"*.wikipedia.org\"와 같이 와일드 카드를 사용할 수 있습니다.\n적어도 \"*.org\"와 같이 최상위 도메인을 입력해야 합니다.<br />\n지원하는 {{PLURAL:$2|프로토콜}}: $1 (프로토콜을 지정하지 않을 때 기본값은 http://)",
"linksearch-line": "$1가 $2에서 링크됩니다.",
"linksearch-error": "와일드카드는 주소의 처음 부분에만 사용될 수 있습니다.",
- "listusersfrom": "다음으로 시작하는 사용자 보기:",
+ "listusersfrom": "다음으로 시작하는 사용자 표시:",
"listusers-submit": "보기",
"listusers-noresult": "사용자를 찾을 수 없습니다.",
"listusers-blocked": "(차단됨)",
"activeusers": "활동하는 사용자 목록",
"activeusers-intro": "다음은 최근 $1{{PLURAL:$1|일}} 동안 활동한 사용자의 목록입니다.",
"activeusers-count": "마지막 {{PLURAL:$3|$3일}} 사이의 {{PLURAL:$1|활동}} $1회",
- "activeusers-from": "다음으로 시작하는 사용자를 보기:",
+ "activeusers-from": "다음으로 시작하는 사용자 표시:",
"activeusers-groups": "그룹에 속한 사용자 표시:",
"activeusers-excludegroups": "그룹에 속한 사용자 제외:",
"activeusers-noresult": "사용자를 찾을 수 없습니다.",
- "activeusers-submit": "활동하고 있는 사용자 보이기",
+ "activeusers-submit": "활동하고 있는 사용자 표시",
"listgrouprights": "사용자 권한 목록",
"listgrouprights-summary": "다음은 이 위키에 있는 사용자 권한 그룹의 목록입니다.\n각각의 권한에 대해서는 [[{{MediaWiki:Listgrouprights-helppage}}|추가 정보]]를 참조하세요.",
"listgrouprights-key": "범례:\n* <span class=\"listgrouprights-granted\">부여된 권한</span>\n* <span class=\"listgrouprights-revoked\">해제된 권한</span>",
"size-bytes": "$1 {{PLURAL:$1|바이트}}",
"size-pixel": "$1 {{PLURAL:$1|픽셀}}",
"lag-warn-normal": "최근 $1{{PLURAL:$1|초}} 안에 바뀐 문서는 이 목록에서 빠졌을 수 있습니다.",
- "lag-warn-high": "데이터베이스 서버의 과도한 부하 때문에 최근 $1{{PLURAL:$1|초}} 안에 바뀐 문서 목록은 보이지 않을 수 있습니다.",
+ "lag-warn-high": "데이터베이스 서버의 과도한 부하 때문에 최근 $1{{PLURAL:$1|초|초}} 안에 바뀐 문서 목록은 보이지 않을 수 있습니다.",
"watchlistedit-normal-title": "주시문서 목록 편집하기",
"watchlistedit-normal-legend": "주시문서 목록에서 문서 제거하기",
"watchlistedit-normal-explain": "주시문서 목록에 있는 문서의 제목이 아래에 나와 있습니다.\n주시문서 목록에서 제거하려는 문서가 있으면 각 항목의 확인 상자를 선택한 다음 \"{{int:Watchlistedit-normal-submit}}\"를 클릭해주세요.\n또는 [[Special:EditWatchlist/raw|목록을 직접 편집]]할 수도 있습니다.",
"signature": "[[{{ns:user}}:$1|$2]] ([[{{ns:user_talk}}:$1|토론]])",
"timezone-local": "로컬",
"duplicate-defaultsort": "<strong>경고:</strong> 기본 정렬 키 \"$2\"가 이전의 기본 정렬 키 \"$1\"를 덮어쓰고 있습니다.",
- "duplicate-displaytitle": "<strong>경고:</strong> \"$2\" 제목 표시는 기존의 표시되는 제목 \"$1\"을 덮어씁니다.",
+ "duplicate-displaytitle": "<strong>경고:</strong> \"$2\" 표시 제목은 먼저번의 표시 제목 \"$1\"을 덮어씁니다.",
"restricted-displaytitle": "<strong>경고:</strong> 표시하려는 제목 \"$1\"은(는) 문서의 실제 제목과 동일하지 않으므로 무시되었습니다.",
"invalid-indicator-name": "<strong>오류:</strong> 문서 상태 표시기의 <code>name</code> 특성은 비어 있지 않아야 합니다.",
"version": "버전",
"rcshowhideanons-show": "nîşan bide",
"rcshowhideanons-hide": "veşêre",
"rcshowhidepatr": "Guherandinên kontrolkirî $1",
- "rcshowhidepatr-show": "Nîşan bide",
- "rcshowhidepatr-hide": "Veşêre",
+ "rcshowhidepatr-show": "nîşan bide",
+ "rcshowhidepatr-hide": "veşêre",
"rcshowhidemine": "Guherandinên min $1",
"rcshowhidemine-show": "nîşan bide",
"rcshowhidemine-hide": "veşêre",
"searchsuggest-containing": "dihundirîne...",
"api-error-unknownerror": "Çewtiya nenas: \"$1\".",
"duration-years": "$1 {{PLURAL:$1|sal}}",
+ "duration-centuries": "$1 {{PLURAL:$1|sedsal}}",
"expand_templates_output": "Encam",
"expand_templates_ok": "Baş e",
"expand_templates_preview": "Pêşdîtin",
"rcfilters-search-placeholder": "Rezent Ännerunge filteren (duerchsichen oder ufänke mat tippen)",
"rcfilters-invalid-filter": "Net valabele Filter",
"rcfilters-filterlist-title": "Filteren",
+ "rcfilters-highlightmenu-title": "Eng Faarf eraussichen",
"rcfilters-filterlist-noresults": "Keng Filtere fonnt",
"rcfilters-filter-editsbyself-label": "Är eegen Ännerungen",
"rcfilters-filter-editsbyself-description": "Ännerunge vun Iech.",
"editcomment": "De Resumé vun der Ännerung war: <em>$1</em>.",
"revertpage": "Ännerunge vum [[Special:Contributions/$2|$2]] ([[User talk:$2|Diskussioun]]) zréckgesat op déi lescht Versioun vum [[User:$1|$1]]",
"revertpage-nouser": "Zréckgesaten Ännerungen duerch e verstoppte Benotzer op déi lescht Versioun vum {{GENDER:$1|[[User:$1|$1]]}}",
- "rollback-success": "D'Ännerunge vum $1 goufen zréckgesat op déi lescht Versioun vum $2.",
+ "rollback-success": "D'Ännerunge vum {{GENDER:$3|$1}} goufen zréckgesat op déi lescht Versioun vum {{GENDER:$4|$2}}.",
"rollback-success-notify": "Zréckgesat Ännerunge vum $1:\nzréckgeännert op déi lescht Versioun vum $2. [$3 Ännerunge weisen]",
"sessionfailure-title": "Setzungsfeeler",
"sessionfailure": "Et schéngt e Problem mat Ärer Loginseance ze ginn;\nDës Aktioun gouf aus Sécherheetsgrënn ofgebrach, fir ze verhënneren datt Är Seance piratéiert ka ginn.\nKlickt w.e.g. op \"Zréck\" a luet déi Säit vun där Dir komm sidd nei, a versicht et dann nach eng Kéier.",
"wantedfiletext-nocat-noforeign": "I seguenti file son in doeuvia, ma no existan.",
"wantedtemplates": "Template domandæ",
"mostlinked": "Paggine ciû collegæ",
- "mostlinkedcategories": "Categorîe ciû collegæ",
+ "mostlinkedcategories": "Categorie ciu conligæ",
"mostlinkedtemplates": "Paggine ciu incluse",
"mostcategories": "Voxe con ciû categorîe",
"mostimages": "Immaggini con ciû collegamenti",
"protectedtitles-summary": "Questa pagina a l'elenca i titoli che son attualmente protetti da-a creaçion. Pe 'n elenco de pagine existente che son protette, amia [[{{#special:ProtectedPages}}|{{int:protectedpages}}]].",
"protectedtitlesempty": "Tittoli protezui con sti parammetri pe-o momento no ghe n'è.",
"protectedtitles-submit": "Mostra tittoli",
- "listusers": "Lista d'ûtenti",
+ "listusers": "Lista di utenti",
"listusers-editsonly": "Mostra solo i utenti con di contributi",
"listusers-creationsort": "Ordina pe dæta de creaçion",
"listusers-desc": "Ordina in senso decrescente",
"rcfilters-clear-all-filters": "Valyti visus filtrus",
"rcfilters-invalid-filter": "Negalimas filtras",
"rcfilters-filterlist-title": "Filtrai",
+ "rcfilters-highlightmenu-title": "Pasirinkti spalvą",
"rcfilters-filterlist-noresults": "Nerastas toks filtras",
"rcfilters-filtergroup-registration": "Vartotojo registracija",
"rcfilters-filter-registered-label": "Registruoti",
"searcharticle": "Aiziet!",
"history": "hronoloģija",
"history_short": "Vēsture",
+ "history_small": "vēsture",
"updatedmarker": "atjaunināti kopš pēdējā apmeklējuma",
"printableversion": "Drukājama versija",
"permalink": "Pastāvīgā saite",
"views": "Apskates",
"toolbox": "Rīki",
"tool-link-userrights": "Mainīt {{GENDER:$1|dalībnieka|dalībnieces}} grupas",
+ "tool-link-userrights-readonly": "Apskatīt {{GENDER:$1|dalībnieka|dalībnieces}} grupas",
"tool-link-emailuser": "Nosūtīt e-pastu {{GENDER:$1|šim dalībniekam|šai dalībniecei}}",
"userpage": "Skatīt dalībnieka lapu",
"projectpage": "Skatīt projekta lapu",
"newarticletext": "Šajā projektā vēl nav lapas ar šādu nosaukumu.\nLai izveidotu lapu, sāc rakstīt teksta logā apakšā (par teksta formatēšanu un sīkākai informācija skatīt [$1 palīdzības lapu]).\nJa tu šeit nonāci kļūdas pēc, vienkārši uzspied <strong>back</strong> pogu pārlūkprogrammā.",
"anontalkpagetext": "----''Šī ir diskusiju lapa anonīmam dalībniekam, kurš vēl nav kļuvis par reģistrētu dalībnieku vai arī neizmanto savu dalībnieka vārdu. Tādēļ mums ir jāizmanto skaitliskā IP adrese, lai viņu identificētu.\nŠāda IP adrese var būt vairākiem dalībniekiem.\nJa tu esi anonīms dalībnieks un uzskati, ka tev ir adresēti neatbilstoši komentāri, lūdzu, [[Special:CreateAccount|kļūsti par dalībnieku]] vai arī [[Special:UserLogin|izmanto jau izveidotu dalībnieka vārdu]], lai izvairītos no turpmākām neskaidrībām un tu netiktu sajaukts ar citiem anonīmiem dalībniekiem.''",
"noarticletext": "Šajā lapā šobrīd nav nekāda teksta, tu vari [[Special:Search/{{PAGENAME}}|meklēt citās lapās pēc šīs lapas nosaukuma]], <span class=\"plainlinks\">[{{fullurl:{{#Special:Log}}|page={{FULLPAGENAMEE}}}} meklēt saistītos reģistru ierakstos] vai arī [{{fullurl:{{FULLPAGENAME}}|action=edit}} sākt rediģēt šo lapu]</span>.",
- "noarticletext-nopermission": "Šajā lapā pašlaik nav nekāda teksta.\nTu vari [[Special:Search/{{PAGENAME}}|meklēt šīs lapas nosaukumu]] citās lapās,\nvai <span class=\"plainlinks\">[{{fullurl:{{#Special:Log}}|page={{FULLPAGENAMEE}}}} meklēt saistītus reģistru ierakstus]</span>, bet jums nav atļauja izveidot si lapu.",
+ "noarticletext-nopermission": "Šajā lapā pašlaik nav nekāda teksta.\nTu vari [[Special:Search/{{PAGENAME}}|meklēt šīs lapas nosaukumu]] citās lapās,\nvai <span class=\"plainlinks\">[{{fullurl:{{#Special:Log}}|page={{FULLPAGENAMEE}}}} meklēt saistītus reģistru ierakstus]</span>, bet jums nav atļauja izveidot šo lapu.",
"userpage-userdoesnotexist": "Lietotājs \"<nowiki>$1</nowiki>\" nav reģistrēts.\nLūdzu, pārliecinies vai vēlies izveidot/izmainīt šo lapu.",
"userpage-userdoesnotexist-view": "Dalībnieks \"$1\" nav reģistrēts.",
"blocked-notice-logextract": "Šis dalībnieks pašlaik ir nobloķēts.\n\nPēdējais bloķēšanas reģistra ieraksts ir apskatāms zemāk:",
"right-unblockself": "Atbloķēt sevi",
"right-protect": "Izmainīt aizsargātās lapas un to aizsardzības līmeni",
"right-editprotected": "Labot aizsargātās lapas (bez kaskādes aizsardzības)",
+ "right-editcontentmodel": "Labot lapas satura modeli",
"right-editinterface": "Izmainīt dalībnieka interfeisu",
"right-editusercssjs": "Izmainīt citu dalībnieku CSS un JS failus",
"right-editusercss": "Izmainīt citu dalībnieku CSS failus",
"action-upload_by_url": "augšupielādēt šo failu no URL",
"action-writeapi": "izmantot rakstīto lietojumprogrammu saskarni",
"action-delete": "izdzēst šo lapu",
- "action-deleterevision": "izdzēst šo versiju",
- "action-deletedhistory": "skatīt šīs lapas dzēsto hronoloģiju",
+ "action-deleterevision": "dzēst versijas",
+ "action-deletelogentry": "dzēst žurnāla ierakstus",
+ "action-deletedhistory": "skatīt šīs lapas dzēsto vēsturi",
"action-browsearchive": "meklēt dzēstās lapas",
"action-undelete": "atjaunot šo lapu",
"action-suppressrevision": "pārskatīt un atjaunot šo slēpto versiju",
"recentchanges-legend-heading": "<strong>Apzīmējumi:</strong>",
"recentchanges-legend-newpage": "{{int:recentchanges-label-newpage}} (skatīt arī [[Special:NewPages|jaunās lapas]])",
"recentchanges-submit": "Rādīt",
+ "rcfilters-invalid-filter": "Nederīgs filtrs",
+ "rcfilters-filterlist-title": "Filtri",
+ "rcfilters-filterlist-noresults": "Filtri nav atrasti",
+ "rcfilters-filtergroup-registration": "Lietotāja reģistrācija",
+ "rcfilters-filtergroup-changetype": "Izmaiņu veids",
+ "rcfilters-filter-pageedits-label": "Lapu labojumi",
+ "rcfilters-filter-pageedits-description": "Labojumi vikivietnes saturā, diskusijā, kategoriju aprakstos...",
+ "rcfilters-filter-newpages-label": "Lapu veidošana",
+ "rcfilters-filter-newpages-description": "Labojumi, kas veido jaunas lapas.",
+ "rcfilters-filter-categorization-label": "Kategoriju izmaiņas",
+ "rcfilters-filter-categorization-description": "Ieraksti par lapu pievienošanu vai noņemšanu no kategorijām.",
+ "rcfilters-filter-logactions-label": "Reģistrētās darbības",
+ "rcfilters-filter-logactions-description": "Administratīvās darbības, kontu veidošana, lapu dzēšana, augšupielādes...",
"rcnotefrom": "Šobrīd redzamas izmaiņas kopš '''$2''' (parādītas ne vairāk par '''$1''').",
"rclistfrom": "Parādīt jaunas izmaiņas kopš $3 $2",
"rcshowhideminor": "$1 maznozīmīgos",
"apihelp-no-such-module": "Modulis \"$1\" nav atrasts.",
"apisandbox": "API smilškaste",
"apisandbox-api-disabled": "API ir atspējots šajā tīmekļa vietnē.",
+ "apisandbox-unfullscreen": "Rādīt lapau",
+ "apisandbox-submit": "Izveidot pieprasījumu",
"apisandbox-reset": "Notīrīt",
"apisandbox-retry": "Mēģināt vēlreiz",
"apisandbox-no-parameters": "Šo API modulim nav parametru.",
"apisandbox-dynamic-parameters-add-placeholder": "Parametra nosaukums",
"apisandbox-results": "Rezultāti",
"apisandbox-request-url-label": "Pieprasījuma URL:",
+ "apisandbox-request-json-label": "Pieprasījuma JSON:",
"apisandbox-request-time": "Pieprasījuma izpildes laiks: {{PLURAL:$1|$1 ms}}",
+ "apisandbox-continue": "Turpināt",
"apisandbox-continue-clear": "Notīrīt",
+ "apisandbox-multivalue-all-namespaces": "$1 (visas vārdtelpas)",
+ "apisandbox-multivalue-all-values": "$1 (visas vērtības)",
"booksources": "Grāmatu avoti",
"booksources-search-legend": "Meklēt grāmatu avotus",
"booksources-search": "Meklēt",
"pageinfo-watchers": "Lapas uzraudzītāju skaits",
"pageinfo-redirects-name": "Pāradresāciju skaits uz šo lapu",
"pageinfo-subpages-name": "Šīs lapas apakšlapas",
+ "pageinfo-firstuser": "Lapas izveidotājs",
+ "pageinfo-firsttime": "Lapas izveides datums",
"pageinfo-lastuser": "Pēdējais labotājs",
+ "pageinfo-lasttime": "Pēdējā labojuma datums",
"pageinfo-edits": "Kopējais izmaiņu skaits",
"pageinfo-authors": "Kopējais atsevišķu autoru skaits",
"pageinfo-toolboxlink": "Lapas informācija",
"pageinfo-category-pages": "Lapu skaits",
"pageinfo-category-subcats": "Apakškategoriju skaits",
"pageinfo-category-files": "Failu skaits",
+ "pageinfo-user-id": "Lietotāja ID",
"markaspatrolleddiff": "Atzīmēt kā pārbaudītu",
"markaspatrolledtext": "Atzīmēt šo lapu kā pārbaudītu",
"markedaspatrolled": "Atzīmēta kā pārbaudīta",
"patrol-log-page": "Pārbaudes reģistrs",
"patrol-log-header": "Šis ir pārbaudīto versiju reģistrs.",
"log-show-hide-patrol": "$1 pārbaudes reģistrs",
+ "confirm-markpatrolled-button": "Labi",
"deletedrevision": "Izdzēstā vecā versija $1",
"filedeleteerror-short": "Kļūda dzēšot failu: $1",
"filedeleteerror-long": "Kļūdas, kas radās failu dzēšanas laikā:\n\n$1",
"feedback-submit": "Iesniegt",
"feedback-thanks": "Paldies! Jūsu atsauksmes ir ievietotas lapā \"[$2 $1]\".",
"feedback-thanks-title": "Paldies!",
+ "feedback-useragent": "Lietotāja aģents:",
"searchsuggest-search": "Meklēt {{SITENAME}}",
"searchsuggest-containing": "Meklējamā frāze:",
"api-error-unknown-warning": "Nezināms brīdinājums: $1",
"api-error-unknownerror": "Nezināma kļūda: \"$1\"",
+ "duration-seconds": "$1 {{PLURAL:$1|sekundes|sekunde|sekundes}}",
+ "duration-minutes": "$1 {{PLURAL:$1|minūtes|minūte|minūtes}}",
+ "duration-hours": "$1 {{PLURAL:$1|stundas|stunda|stundas}}",
+ "duration-days": "$1 {{PLURAL:$1|dienas|diena|dienas}}",
+ "duration-weeks": "$1 {{PLURAL:$1|nedēļas|nedēļa|nedēļas}}",
+ "duration-years": "$1 {{PLURAL:$1|gadi|gads|gadi}}",
+ "duration-decades": "$1 {{PLURAL:$1|desmitgades|desmitgade|desmitgades}}",
+ "duration-centuries": "$1 {{PLURAL:$1|gadsimti|gadsimts|gadsimti}}",
+ "duration-millennia": "$1 {{PLURAL:$1|tūkstošgades|tūkstošgade|tūkstošgades}}",
"limitreport-title": "Parsētāja profilēšanas dati:",
+ "limitreport-cputime-value": "$1 {{PLURAL:$1|sekundes|sekunde|sekundes}}",
+ "limitreport-walltime-value": "$1 {{PLURAL:$1|sekundes|sekunde|sekundes}}",
"limitreport-postexpandincludesize-value": "$1/$2 {{PLURAL:$2|baiti|baits|baiti}}",
"limitreport-templateargumentsize": "Veidnes argumenta izmērs",
"limitreport-templateargumentsize-value": "$1/$2 {{PLURAL:$2|baiti|baits|baiti}}",
"special-characters-group-gujarati": "Gudžarati",
"mw-widgets-dateinput-no-date": "Nav izvēlēts datums",
"mw-widgets-titleinput-description-new-page": "lapa vēl nepastāv",
+ "mw-widgets-categoryselector-add-category-placeholder": "Pievienot kategoriju...",
+ "sessionprovider-generic": "$1 sesijas",
"authmanager-email-label": "E-pasts",
"authmanager-email-help": "E-pasta adrese",
"authmanager-realname-label": "Tavs īstais vārds",
"tog-watchdefault": "Hanaraka ny pejy ary ny rakitra ovaiko",
"tog-watchmoves": "Hanaraka ny pejy ary ny rakitra ovaiko anarana",
"tog-watchdeletion": "Hanaraka ny pejy ary ny rakitra voafafako",
+ "tog-watchuploads": "Ampiana amin'ny pejy arahako ireo rakitra vaovao nalefako",
"tog-watchrollback": "Hanaraka pejy nanaovako famoana",
"tog-minordefault": "Mariho ho madinika foana aloha ny fanovana rehetra",
"tog-previewontop": "Asehoy alohan'ny boaty fanovana ny tsipalotra",
"tagline": "Avy amin'i {{SITENAME}}",
"help": "Fanoroana",
"search": "Tadiavo",
+ "search-ignored-headings": "#<!-- Avelao ho toa izao ity andalana ity --> <pre>\n# Ny lohatenim-pizarana dia tsy horaharahiana amin'ny karoka.\n# Ny fiovana atao eto dia hihatra rehefa voasoratra ao amin'ny tondro ilay pejy miaraka amin'ilay lohateny.\n# Azonao atao ny famerenana an-tondro an'ilay pejy amin'ny alalan'ny fanovana tsy misy inona inona.\n# Ny rariteny dia ireo manaraka:\n# *Izay andalana rehetra manomboka amin'ny \"#\" dia resaka\n# *Izay andalana tsy fotsy dia lohateny tsy horaharahiana, iaraka amin'ny haben-tsoratra\nTsiahy\nRohy ivelany\nJereo koa\n#</pre> <!-- Avelao ho toa izao ity andalana ity -->",
"searchbutton": "Tadiavo",
"go": "Ndao",
"searcharticle": "Tsidiho",
"missingarticle-rev": "(famerenana faha : $1)",
"missingarticle-diff": "(diff : $1 ; $2)",
"readonly_lag": "\nMihidy ho azy aloha ny banky angona mandra-pahatratran'ny serveur andevo ny tompony",
+ "nonwrite-api-promise-error": "Ny loha HTTP \"<code>Promise-Non-Write-API-Action:</code>\" dia nalefa fa tsy natao tany amina module fanoratana API ny hataka",
"internalerror": "Tsy fetezana anatin'ny rindrankajy",
"internalerror_info": "Tsy fetezana ety anatiny : $1",
"internalerror-fatal-exception": "Karazana-kadisoana nampijanona \"$1\"",
"passwordreset-emailtext-user": "Nisy mpikambana mitondra anarana $1 eo amin'i {{SITENAME}} nangataka fampatsiahivana mikasika ny kaontinao eo amin'i {{SITENAME}} ($4). Manana io adiresy imailaka {{PLURAL:$3|io kaontim-pikambana io|ireo kaontim-pikambana ireo}} :\n\n$2\n\nHitsahatra afaka {{PLURAL:$5|iray|$5}} andro {{PLURAL:$3|io|ireo}} tenimiafina {{PLURAL:$3|io|ireo}}. Mila miditra dien'izao ianao izao ary mifidy tenimiafina vaovao. Raha tsy avy aminao ity hataka ity na efa nahatadidy ny tenimiafinao taloha ianao, ary raha tsy tianao hovaina intsony ilay tenimiafinao, dia azonao tsy raharahiana ity hafatra ity ary mampiasa ny tenimiafinao taloha.",
"passwordreset-emailelement": "Anaram-pikambana : \n$1\n\nTenimiafina miserana : \n$2",
"passwordreset-emailsentemail": "Lasa ny mailaka famerenana tenimiafina.",
- "changeemail": "Hanova ny adiresy imailaka",
- "changeemail-header": "Hanova ny adiresy imailak'ilay kaonty",
+ "passwordreset-nocaller": "Mila manitsy mpiantso",
+ "passwordreset-nosuchcaller": "Tsy misy ilay mpiantso: $1",
+ "passwordreset-invalidemail": "Adiresy mailaka tsy azo raisina",
+ "passwordreset-nodata": "Tsy nanome anaram-pikambana na adiresy mailaka",
+ "changeemail": "Hanova na hanala adiresy mailaka",
+ "changeemail-header": "Fenoy ity fôrmiolera ity ahafahanao manova ny adiresy mailakao. Raha tianao ho esorina ny fifandraisan'ity mailaka ity amin'ny kaontinao dia avelao ho fotsy ny saha rehefa mandefa fôrmiolera.",
"changeemail-no-info": "Mila tafiditra ianao vao avaka mijery ity pejy ity.",
"changeemail-oldemail": "Adiresy imailaka ankehitriny :",
"changeemail-newemail": "Adiresy imailaka vaovao :",
"yourdiff": "Fampitahana",
"copyrightwarning": "Ny zavatra rehetra apetraka amin'ny {{SITENAME}} dia raisina ho azo adika malalaka araka ny fahazoan-dalana $2 (Jereo $1 ny fanazavana fanampiny). Raha toa ka tianao ho anao manokana ny tahirin-kevitra dia aleo tsy apetraka ato.\n\n<b>AZA MAMPIASA TAHIRINKEVITRA TSY NAHAZOAN-DALANA</b>",
"copyrightwarning2": "Ny fandraisana anjara ao amin'i {{SITENAME}} dia azo ovaina ary fafan'ny mpikambana hafa. Raha tsy tianao ho ampiasainan, ovaina na zarazaraina ny soratrao, dia aza alefa eto ilay vokatr'asanao<br />\nNy zava-tsoratanao eto dia vokatr'asa naverinao soratana na nodikainao tany amina loharano ao amin'ny vala sarababem-bahoaka na loharano malalaka hafa (Jereo $1 ho an'ny antsipirihany).\n\n'''Aza mampiasa tahirin-kevitra tsy nahazoan-dalana!'''",
+ "editpage-cannot-use-custom-model": "Tsy mety ovaina ny modelim-botoatin'ity pejy ity.",
"longpageerror": "'''Hadisoana : Ny tahirin-tsoratra nalefanao dia manana halava {{PLURAL:$1|iray|$1}} kilooktety, izay lava kokoa nohon'ny fetra avo indridra izay natao ho {{PLURAL:$2|iray|$2}} kilooktety.'''\nTsy afaka tahirizina ilay tahirin-tsoratra.",
"readonlywarning": "'''FAMPITANDREMANA: Nohidiana noho ny antony fikolokoloana aloha ny banky angona,\nkoa tsy afaka mitahiry ny fanovana nataonao aloha ianao izao. Angamba tokony hanao Couper coller aloha\nianao dia tehirizo anaty rakitra ny fanovanao mandra-paha.'''\n\nNy mpandrindra nanidy ny banky angona dia nanome ny antony : <br />$1",
"protectedpagewarning": "'''FAMPITANDREMANA: Voaaro ity pejy ity ka ny mpikambana manana ny fahazoan-dàlana sysop ihany no afaka manova azy.'''",
"invalid-content-data": "Data anaty votoatiny tsy miady amin'ny fepetra",
"content-not-allowed-here": "Votoatiny ''$1'' voarara eo amin'ny pejy [[$2]]",
"editwarning-warning": "Mety hahavery ny fanovana nataonao ny fialanao amin'ity pejy ity.\nRaha tafiditra ianao dia azonao esorina ity fampitandremana ity ao amin'ny fizarana \"{{int:prefs-editing}}\" ao amin'ny safidinao.",
+ "editpage-invalidcontentmodel-title": "Andrefim-botoatiny tsy zaka",
+ "editpage-invalidcontentmodel-text": "Andrefim-botoatiny \"$1\" tsy zaka.",
"editpage-notsupportedcontentformat-title": "Tsy zaka io andrefim-botoatiny io",
"editpage-notsupportedcontentformat-text": "Tsy zakan'ny maodelim-botoatiny $1 ny firafi-botoatiny $1",
"content-model-wikitext": "wiki-soratra",
"content-model-css": "CSS",
"content-json-empty-object": "Zavatra foana",
"content-json-empty-array": "Tabilao foana",
+ "deprecated-self-close-category": "Pejy mampiasa balizy HTML mihidy ho azy izay tsy azo raisina",
"duplicate-args-category": "Pejy mampiasa dika mitovy hevitra amin'ny fiantsoana endrika",
"expensive-parserfunction-warning": "Tandremo : Betsaka loatra ny fanantsoana ny tao parser.\n\nTsy maintsy latsaky ny $2 ny tao, kanefa misy $1. {{PLURAL:$2||}}",
"expensive-parserfunction-category": "Pejy mampiasa be loatra ny tao parser",
"search-interwiki-caption": "zandri-tetikasa",
"search-interwiki-default": "Valiny amin'ny $1 :",
"search-interwiki-more": "(be kokoa)",
+ "search-interwiki-more-results": "Valiny be kokoa",
"search-relatedarticle": "voadinika",
"searchrelated": "voadinika",
"searchall": "rehetra",
"search-external": "Hikaroka any ivelany",
"searchdisabled": "Tsy nalefa ny karoka eto amin'i {{SITENAME}}. Afaka mampiasa an'i Google aloha ianao mandra-paha. Nefa fantaro fa mety ho efa lany daty ny valiny omeny.",
"search-error": "Hadisoana nitranga tam-pikarohana: $1",
+ "search-warning": "Fampitandremana nitranga teo am-pikarohana: $1",
"preferences": "Ny momba anao",
"mypreferences": "Safidy",
"prefs-edits": "isa ny fanovàna :",
"youremail": "Imailaka:",
"username": "{{GENDER:$1}}Anaram-pikambana :",
"prefs-memberingroups": "Mpikambana{{GENDER:$2}} ao amin'ny vondrona{{PLURAL:$1}}:",
+ "group-membership-link-with-expiry": "$1 (hatramin'i $2)",
"prefs-registration": "Daty fidirana :",
"yourrealname": "Tena anarana marina:",
"yourlanguage": "Tenim-pirenena:",
"prefswarning-warning": "Efa nanova tamin'ny safidinao tsy mbola voatahiry ianao. Raha miala amin'ity pejy ity amin'ny alalan'ny fanindriana an'i \"$1\" ianao dia tsy ho voavao ny safidinao.",
"prefs-tabs-navigation-hint": "Torohevitra: afaka mampiasa ny zana-tsipika havia ary havanana ianao ho an'ny fitetezana ny vakizoro ao amin'ny lisi-bakizoro",
"userrights": "Fandrindràna ny fahefahan'ny mpikambana",
- "userrights-lookup-user": "Handrindra vondrom-pikambana",
+ "userrights-lookup-user": "Hisafidy mpikambana",
"userrights-user-editname": "Manomeza solonanarana:",
- "editusergroup": "Hanova satan'ny {{GENDER:$1|}}mpikambana",
+ "editusergroup": "Hampiditra vondrom-pikambana",
"editinguser": "Fanovana ny zon'ny mpikambana <strong>{{GENDER:$1|}}[[User:$1|$1]]</strong> $2",
"userrights-editusergroup": "Hanova vondrom-pikambana",
"saveusergroups": "{{GENDER:$1|}}Tehirizo ny vondrom-pikambana",
"userrights-changeable-col": "Ny gropy azonao ovaina",
"userrights-unchangeable-col": "Ny gropy tsy azonao ovaina",
"userrights-expiry-current": "Mitsahatra ny $1",
+ "userrights-expiry-none": "Tsy mitsahatra",
"userrights-expiry": "Fitsaharana:",
+ "userrights-expiry-existing": "Fotoam-pitsaharana ankehitriny: $3, $2",
+ "userrights-expiry-othertime": "Fotoana hafa:",
+ "userrights-expiry-options": "1 andro:1 day,herinandro:1 week,1 volana:1 month,3 volana:3 months,6 volana:6 months,herintaona:1 year",
+ "userrights-invalid-expiry": "Tsy azo raisina ny fotoam-pitsaharana ho an'ny vondrona \"$1\".",
"userrights-conflict": "Fifandonana fanovana zom-pikambana! Avereno vakiana ary marino ny fanovanao.",
"group": "Gropy :",
"group-user": "Mpikambana",
"grant-group-watchlist-interaction": "Mifanakalo amin'ny lisitry ny pejy arahanao",
"grant-group-email": "Mandefa mailaka",
"grant-group-high-volume": "Manao zavatra haingana",
+ "grant-group-customization": "Fikirakirana ary safidy",
"grant-group-administration": "Hanao asam-pandrindrana",
"grant-group-other": "Manao hetsika maro samihafa",
"grant-blockusers": "Manakana sy manala sakan'ny mpikambana",
"rcfilters-invalid-filter": "Sivana tsy azo raisina",
"rcfilters-empty-filter": "Tsy misy sivana miasa. Aseho avokoa ireo fandraisan'anjara.",
"rcfilters-filterlist-title": "Sivana",
+ "rcfilters-highlightbutton-title": "Hampibaribary ny valiny",
+ "rcfilters-highlightmenu-title": "Hisafidy loko",
"rcfilters-filterlist-noresults": "Tsy nahitana sivana",
"rcfilters-filtergroup-registration": "Fisoratan'ny mpikambana",
"rcfilters-filter-registered-label": "Nisoratra anarana",
"rcfilters-filter-registered-description": "Mpanova tafiditra.",
"rcfilters-filter-unregistered-label": "Tsy nisoratra anarana",
"rcfilters-filter-unregistered-description": "Mpikambana tsy niditra.",
+ "rcfilters-filter-editsbyself-label": "Ny fiovanao",
+ "rcfilters-filter-editsbyself-description": "Fiovana nataonao",
+ "rcfilters-filter-editsbyother-label": "Fiovana nataon'ny hafa",
+ "rcfilters-filter-editsbyother-description": "Fiovana noforonin'ny mpikambana hafa (tsy ianao).",
+ "rcfilters-filtergroup-userExpLevel": "Lentan'ny traikefa (ho an'ireo mpikambana nisoratra anarana ihany)",
+ "rcfilters-filter-userExpLevel-newcomer-label": "Vao tonga",
+ "rcfilters-filter-userExpLevel-newcomer-description": "Latsaky ny fiovana folo ary latsaky ny 4 andro niasana",
+ "rcfilters-filter-userExpLevel-learner-label": "Mpianatra",
+ "rcfilters-filter-userExpLevel-learner-description": "Efa betsaka andro nandraisana anjara ary nanova im-betsaka nohon'ny \"Vao tonga\" fa mbola kely nohon'ny \"Manan-traikefa\".",
+ "rcfilters-filter-userExpLevel-experienced-label": "Mpikambana manan-traikefa",
+ "rcfilters-filter-userExpLevel-experienced-description": "Mahery ny 30 andro nandraisana anjara ary fiovana mahery ny 500.",
+ "rcfilters-filtergroup-automated": "Fandraisan'anjara alefa ho azy",
+ "rcfilters-filter-bots-label": "Rôbô",
+ "rcfilters-filter-bots-description": "Fiovana nataon'ny rôbô aotômatika.",
+ "rcfilters-filter-humans-label": "Olona (tsy rôbô)",
+ "rcfilters-filter-humans-description": "Fiovana nataon'ny olombelona mpikambana.",
+ "rcfilters-filtergroup-significance": "Dikany",
+ "rcfilters-filter-minor-label": "Fiovana madinika",
+ "rcfilters-filter-minor-description": "Fiovana nataon'ny tompony ho madinika.",
+ "rcfilters-filter-major-label": "Fiovana tsy madinika",
+ "rcfilters-filter-major-description": "Fiovana tsy natao ho madinika.",
+ "rcfilters-filtergroup-changetype": "Karazam-piovana",
+ "rcfilters-filter-pageedits-label": "Fiovam-pejy",
+ "rcfilters-filter-newpages-label": "Famoronam-pejy",
+ "rcfilters-filter-newpages-description": "Fiovana nahatonga famoronam-pejy.",
+ "rcfilters-filter-categorization-label": "Fiovana amin'ny sokajy",
+ "rcfilters-filter-categorization-description": "Fandraiketana an'ireo pejy ampiana na esorina amin'ny sokajy.",
+ "rcfilters-filter-logactions-label": "Asa voalaogy",
"rcnotefrom": "Eo ambany dia ahitana ireo fiovana{{PLURAL:$5}} hatry ny <strong>$3, $4</strong> (naseho hatramin'ny <strong>$1</strong>).",
"rclistfrom": "Asehoy izay vao niova manomboka ny $3 $2",
"rcshowhideminor": "$1 ny fanovàna kely",
"upload-copy-upload-invalid-domain": "Tsy misy eto amin'ity dômenina ity ny tahaky ny upload.",
"upload-dialog-title": "Hanafatra rakitra",
"upload-dialog-button-cancel": "Aoka",
+ "upload-dialog-button-back": "Hiverina",
"upload-dialog-button-done": "Vita",
"upload-dialog-button-save": "Tehirizina",
"upload-dialog-button-upload": "Mampiditra",
"special-characters-group-khmer": "kimera",
"special-characters-title-endash": "tsipika anglisy",
"special-characters-title-emdash": "tsipika em",
- "special-characters-title-minus": "marika mainosy"
+ "special-characters-title-minus": "marika mainosy",
+ "sessionmanager-tie": "Tsy afaka mampikambana karazan-kataka fampamantarana maromaro: $1.",
+ "authmanager-authn-not-in-progress": "Tsy andalam-panaovana ny fampamantarana, na very ny angon'ny sesiôna. Avereno hatramin'ny voalohany azafady.",
+ "authmanager-authplugin-setpass-failed-title": "Tsy nahomby ny fanovana tenimiafina",
+ "authmanager-authplugin-setpass-failed-message": "Nandà ny fanovana tenimiafina ny plugin fampamantarana.",
+ "authmanager-authplugin-create-fail": "Nandà ny famoronan-kaonty ny plugin fampamantarana.",
+ "authmanager-authplugin-setpass-denied": "Tsy ahafahana manova tenimiafina ny plugin fampamantarana.",
+ "authmanager-userlogin-remembermypassword-help": "Milaza raha tsy maintsy tadidiana mihoatra ny halafan'ny fotoam-pitsidihana ny tenimiafina.",
+ "authmanager-username-help": "Anaram-pikambana ho an'ny fampamantarana.S",
+ "authmanager-password-help": "Tenimiafina ho an'ny fampamantarana.",
+ "authmanager-retype-help": "tenimiafina indray hanamarinana.",
+ "authmanager-provider-password": "Fampamamtarana mifototra amin'ny tenimiafina",
+ "authmanager-provider-password-domain": "Fampamantarana mifototra amin'ny tenimiafina ary vala",
+ "authmanager-provider-temporarypassword": "Tenimiafina vonjimaika",
+ "authprovider-resetpass-skip-help": "Handingana ny famerenam-tenimiafina.",
+ "authform-nosession-login": "nahomby ny fidirana, fa tsy mahatadidy anao tafiditra ny mpitety tranonkalanao."
}
"mytalk": "Каҥашымаш",
"anontalk": "Каҥашымаш тиде IP нерген",
"navigation": "Навигаций",
+ "and": " да",
"qbfind": "Муаш",
"qbedit": "Тӧрлаташ",
"qbpageoptions": "Тиде лаштык",
"view": "Ончалаш",
"edit": "Тӧрлаташ",
"create": "Ышташ",
- "editthispage": "Тӧрлаташ тиде лаштыкым",
+ "editthispage": "Тиде лаштыкым тӧрлаташ",
"create-this-page": "Тиде лаштыкым ышташ",
"delete": "Шӧраш",
"deletethispage": "Тиде лаштыкым шӧраш",
"emailauthenticated": "Тыйын почто адресетым пеҥгыдемдыме $2, $3.",
"loginlanguagelabel": "Йылме: $1",
"pt-login": "Пураш",
+ "pt-createaccount": "Регистрацийым эрте",
"pt-userlogout": "Лекташ",
"changepassword": "Шолыпмутым вашталташ",
"oldpassword": "Тошто шолыпмут:",
"preview": "Ончылгоч ончымаш",
"showpreview": "Ончылгоч ончымаш",
"showdiff": "Тӧрлатымашым ончыкташ",
- "anoneditwarning": "'''ТӱÑ\82кӧ лий:''': ТÑ\8bй авÑ\82оÑ\80изаÑ\86ийÑ\8bм Ñ\8dÑ\80Ñ\82ен оÑ\82Ñ\8bл. ТÑ\8bйÑ\8bн IP-адÑ\80еÑ\81еÑ\82 лаÑ\88Ñ\82Ñ\8bкÑ\8bн ваÑ\88Ñ\82алÑ\82Ñ\8bмаÑ\88 иÑ\81Ñ\82оÑ\80ийÑ\8bÑ\88Ñ\82Ñ\8bже возалÑ\82 кодеÑ\88. Шке лӱмеÑ\82 ден пÑ\83Ñ\80еÑ\82 але Ñ\80егиÑ\81Ñ\82Ñ\80аÑ\86ийÑ\8bм Ñ\8dÑ\80Ñ\82еÑ\82 гÑ\8bн, Ñ\88каланет пашам ышташ йӧнлырак лиеш.",
+ "anoneditwarning": "'''ТӱÑ\82кӧ лий:''': ТÑ\8bй авÑ\82оÑ\80изаÑ\86ийÑ\8bм Ñ\8dÑ\80Ñ\82ен оÑ\82Ñ\8bл. ТÑ\8bйÑ\8bн IP-адÑ\80еÑ\81еÑ\82 лаÑ\88Ñ\82Ñ\8bкÑ\8bн ваÑ\88Ñ\82алÑ\82Ñ\8bмаÑ\88 иÑ\81Ñ\82оÑ\80ийÑ\8bÑ\88Ñ\82Ñ\8bже возалÑ\82 кодеÑ\88. Шке лӱмеÑ\82 ден пÑ\83Ñ\80еÑ\82 але Ñ\80егиÑ\81Ñ\82Ñ\80аÑ\86ийÑ\8bм Ñ\8dÑ\80Ñ\82еÑ\82 гÑ\8bн, Ñ\82Ñ\8bлат пашам ышташ йӧнлырак лиеш.",
"summary-preview": "Тӧрлатымаш нерген ончылгоч ончымаш:",
"accmailtitle": "Шолыпмут колтымо.",
"newarticle": "(У)",
"protectexpiry": "Мучашлалтеш:",
"protect_expiry_invalid": "Йоҥылыш мучашлалтше жап.",
"protect_expiry_old": "Мучашлалтше жап эртен.",
- "protect-text": "Тыште тый '''$1''' лаштыкын шыгыремдымашыжым ончалаш да тӧрлаташ кертат.",
+ "protect-text": "Тыште тый '''$1''' лаштыкын аралымаш уровеньжым ончалын але вашталтен кертат.",
"protect-locked-access": "Тыйын лаштыкын шыгыремдымашыжым тӧрлаш кертмешет шагал.\nӰлнӧ '''$1''' лаштыкын кызытсе келыштарымаш.",
"protect-cascadeon": "Тиде лаштыкым тӧрлатымаш деч аралыме. \nКаскадный аралымашан {{PLURAL:$1|лаштык-влак}} тудо пура.",
"protect-default": "Чыла пайдаланыше-влаклан йӧным пуаш",
"specialpages-group-pagetools": "Лаштык ӱзгар-влак",
"specialpages-group-redirects": "Вес вере колтышо спецлаштык-влак",
"external_image_whitelist": " #Оставьте эту строчку такой, как она есть<pre>\n#Разместите здесь фрагменты регулярных выражений (ту часть, что находится между //)\n#они будут соотнесены с URL внешних изображений.\n#Подходящие будут показаны как изображения, остальные будут показаны как ссылки на изображения.\n#Строки, начинающиеся с # считаются комментариями.\n#Строки не чувствительны к регистру\n\n#Размещайте фрагменты регулярных выражений над этой строчкой. Оставьте эту строчку такой, как она есть.</pre>",
- "logentry-delete-delete": "$1 {{GENDER:$2|лыктын|лыктын}} странице $3",
+ "logentry-delete-delete": "$1 {{GENDER:$2|шӧрен|шӧрен}} лаштыкым $3",
"revdelete-summary": "тӧрлатымаш-влакым возен ончыктымаш",
- "searchsuggest-search": "Кычалаш",
+ "searchsuggest-search": "{{SITENAME}} сайтым кычалаш",
"expand_templates_ok": "Йӧра",
"expand_templates_preview": "Ончылгоч ончымаш"
}
"selfredirect": "<strong>Предупредување:</strong> Создавате пренасочување кон истата статија.\nМоже да сте укажале грешна целна страница, или пак уредувате погрешна страница.\nАко стиснете на „{{int:savearticle}}“ повторно, тогаш пренасочувањето бездруго ќе се создаде.",
"missingcommenttext": "Ве молиме внесете коментар подолу.",
"missingcommentheader": "<strong>Потсетување:</strong> Не внесовте наслов за овој коментар.\nАко повторно стиснете на „{{int:savearticle}}“, уредувањето ќе биде зачувано без наслов.",
- "summary-preview": "Ð\98зглед на описот:",
+ "summary-preview": "Ð\9fÑ\80еглед на описот:",
"subject-preview": "Преглед на насловот:",
"previewerrortext": "Се појави грешка при обидот да се прегледаат промените.",
"blockedtitle": "Корисникот е блокиран",
"rcfilters-invalid-filter": "Неважечки филтер",
"rcfilters-empty-filter": "Нема активни филтри. Прикажани се сите придонеси.",
"rcfilters-filterlist-title": "Филтри",
+ "rcfilters-highlightbutton-title": "Истакнување на исход",
+ "rcfilters-highlightmenu-title": "Изберете боја",
"rcfilters-filterlist-noresults": "Не пронајдов ниеден филтер",
"rcfilters-filtergroup-registration": "Регистрација на корисници",
"rcfilters-filter-registered-label": "Регистрирани",
"editcomment": "Коментарот на уредувањето беше: <em>$1</em>.",
"revertpage": "Отстрането уредувањето на [[Special:Contributions/$2|$2]] ([[User talk:$2|разговор]]), вратено на последната верзија на [[User:$1|$1]]",
"revertpage-nouser": "Вратени уредувања од скриен корисник на последната преработка на {{GENDER:$1|[[User:$1|$1]]}}",
- "rollback-success": "Откажани уредувањата на $1; вратено на последната верзија на $2.",
+ "rollback-success": "Откажани уредувањата на {{GENDER:$3|$1}};; вратено на последната верзија на {{GENDER:$4|$2}}.",
"rollback-success-notify": "Откажани уредувањата на $1;\nвратено на последната преработка на $2. [$3 Пок. промени]",
"sessionfailure-title": "Седницата не успеа",
"sessionfailure": "Има проблем со вашата седница;\nоваа дејство е откажано како превентива против преземање седници.\nПритиснете го копчето „назад“ и повторно вчитајте ја страницата од која дојдовте и обидете се повторно.",
"Hex",
"Xxmarijnw",
"Mainframe98",
- "QZanden"
+ "QZanden",
+ "Huhbakker"
]
},
"tog-underline": "Verwijzingen onderstrepen:",
"passwordreset-emailsentusername": "Als er een e-mailadres geregistreerd is voor die gebruikersnaam, dan wordt er een e-mail verzonden om uw wachtwoord opnieuw in te stellen.",
"passwordreset-nocaller": "Een aanroeper moet worden opgegeven",
"passwordreset-nosuchcaller": "Aanroeper bestaat niet: $1",
- "passwordreset-ignored": "Opnieuw instellen van het wachtwoord niet is afgehandeld. Misschien is er geen provider geconfigureerd?",
+ "passwordreset-ignored": "Het opnieuw instellen van het wachtwoord niet is afgehandeld. Misschien is er geen provider geconfigureerd?",
"passwordreset-invalidemail": "Ongeldig e-mailadres",
"passwordreset-nodata": "Er is geen gebruikersnaam of e-mailadres opgegeven",
"changeemail": "E-mailadres wijzigen of verwijderen",
"rcfilters-invalid-filter": "Ongeldig filter",
"rcfilters-empty-filter": "Geen actieve filters. Alle bijdragen worden weergeven.",
"rcfilters-filterlist-title": "Filters",
+ "rcfilters-highlightbutton-title": "Resultaten markeren",
+ "rcfilters-highlightmenu-title": "Kies een kleur",
"rcfilters-filterlist-noresults": "Geen filters gevonden",
"rcfilters-filtergroup-registration": "Gebruikers-registratie",
"rcfilters-filter-registered-label": "Geregistreerd",
"rcfilters-filter-registered-description": "Ingelogde gebruikers.",
"rcfilters-filter-unregistered-label": "Niet-geregistreerd",
"rcfilters-filter-unregistered-description": "Gebruikers die niet zijn ingelogd.",
+ "rcfilters-filtergroup-authorship": "Bewerken auteurschap",
"rcfilters-filter-editsbyself-label": "Uw eigen bewerkingen",
"rcfilters-filter-editsbyself-description": "Bewerkingen door u.",
"rcfilters-filter-editsbyother-label": "Bewerkingen door anderen",
"editcomment": "De bewerkingssamenvatting was: <em>$1</em>.",
"revertpage": "Wijzigingen door [[Special:Contributions/$2|$2]] ([[User talk:$2|Overleg]]) hersteld tot de laatste versie door [[User:$1|$1]]",
"revertpage-nouser": "Wijzigingen door een verborgen gebruiker teruggedraaid naar de laatste versie door {{GENDER:$1|[[User:$1|$1]]}}",
- "rollback-success": "De wijzigingen door $1 zijn teruggedraaid.\nDe laatste versie van $2 is hersteld.",
+ "rollback-success": "De wijzigingen door {{GENDER:$3|$1}} zijn teruggedraaid.\nDe laatste versie van {{GENDER:$4|$2}} is hersteld.",
"rollback-success-notify": "De wijzigingen door $1 zijn teruggedraaid;\nde laatste versie van $2 is hersteld. [$3 Wijzigingen weergeven]",
"sessionfailure-title": "Sessiefout",
"sessionfailure": "Er lijkt een probleem te zijn met uw aanmeldsessie.\nUw handeling is gestopt uit voorzorg tegen een beveiligingsrisico (dat bestaat uit mogelijke \"hijacking\" van deze sessie).\nGa een pagina terug, laad die pagina opnieuw en probeer het nog eens.",
"log-action-filter-suppress-reblock": "Verbergen van gebruiker tijdens wijzigen blokkade",
"log-action-filter-upload-upload": "Nieuwe upload",
"log-action-filter-upload-overwrite": "Herupload",
+ "authmanager-authn-not-in-progress": "Verificatie is niet in uitvoering of de sessiegegevens zijn verloren gegaan. Gelieve opnieuw starten vanaf het begin.",
+ "authmanager-authn-no-primary": "De meegeleverde inloggegevens kunnen niet worden geverifieerd.",
+ "authmanager-authn-no-local-user": "De ingevoerde inloggegevens zijn niet geassocieerd met een gebruiker op deze wiki.",
+ "authmanager-authn-no-local-user-link": "De meegeleverde inloggegevens zijn geldig, maar zijn niet gekoppeld aan enige gebruiker op deze wiki. Log in op een andere manier, of creëer een nieuwe gebruiker, en u heeft een optie om uw eerdere inloggegevens van te koppelen.",
"authmanager-authn-autocreate-failed": "Het automatisch aanmaken van een lokaal account is mislukt: $1",
+ "authmanager-change-not-supported": "De meegeleverde inloggegevens kunnen niet worden gewijzigd, omdat niets deze zou gebruiken.",
"authmanager-create-disabled": "Het aanmaken van accounts is uitgeschakeld.",
"authmanager-create-from-login": "Om een account aan te maken, gelieve de velden in te vullen.",
+ "authmanager-create-not-in-progress": "Het maken van een account is niet in uitvoering of de sessiegegevens zijn verloren gegaan. Gelieve opnieuw starten vanaf het begin.",
+ "authmanager-create-no-primary": "De meegeleverde inloggegevens kunnen niet worden gebruikt voor het aanmaken van uw account.",
+ "authmanager-link-no-primary": "De meegeleverde inloggegevens kunnen niet worden gebruikt om een account te koppelen.",
+ "authmanager-link-not-in-progress": "Account koppelen is niet gestart of de sessiegegevens zijn verloren gegaan. Gelieve opnieuw starten vanaf het begin.",
"authmanager-authplugin-setpass-failed-title": "Wachtwoord wijzigen is mislukt",
+ "authmanager-authplugin-setpass-failed-message": "De verificatie-invoegtoepassing heeft het wijzigen van het wachtwoord geweigerd.",
+ "authmanager-authplugin-create-fail": "De verificatie-invoegtoepassing heeft geweigerd uw account aan te maken.",
"authmanager-authplugin-setpass-denied": "De verificatie-invoegtoepassing staat het wijzigen van wachtwoorden niet toe.",
"authmanager-authplugin-setpass-bad-domain": "Ongeldig domein.",
"authmanager-autocreate-noperm": "Het automatisch aanmaken van accounts is niet toegestaan.",
"authmanager-provider-password": "Op wachtwoord gebaseerde authenticatie",
"authmanager-provider-password-domain": "Wachtwoord- en domeingebaseerde authentificatie",
"authmanager-provider-temporarypassword": "Tijdelijk wachtwoord",
+ "authprovider-confirmlink-message": "Op basis van uw recente login pogingen, kan het volgende account worden gekoppeld aan uw wiki account. Het koppelen van stelt U in staat in te loggen via deze accounts. Gelieve te selecteren welk account moet worden gekoppeld.",
"authprovider-confirmlink-request-label": "Accounts die aan elkaar moeten worden gekoppeld.",
"authprovider-confirmlink-success-line": "$1: Succesvol gekoppeld.",
"authprovider-confirmlink-failed": "Account koppelen is niet volledig gelukt: $1",
+ "authprovider-confirmlink-ok-help": "Doorgaan na het weergeven van de storingsmeldingen over het koppelen.",
"authprovider-resetpass-skip-label": "Overslaan",
"authprovider-resetpass-skip-help": "Sla het resetten van het wachtwoord over.",
+ "authform-nosession-login": "De verificatie is geslaagd, maar uw browser heeft niet \"onthouden\" ingelogd te zijn.\n!\n$1",
+ "authform-nosession-signup": "Het account is aangemaakt, maar uw browser heeft niet \"onthouden\" om ingelogd te zijn.\n!\n$1",
"authform-newtoken": "Ontbrekend token. $1",
"authform-notoken": "Ontbrekend token",
"authform-wrongtoken": "Verkeerd token",
"specialpage-securitylevel-not-allowed-title": "Niet toegestaan",
+ "specialpage-securitylevel-not-allowed": "Sorry, het is u niet toegestaan gebruik te maken van deze pagina omdat uw identiteit niet kon worden geverifieerd.",
+ "authpage-cannot-login": "Niet in staat om te beginnen met aanmelden.",
+ "authpage-cannot-login-continue": "Niet mogelijk om in te loggen. Uw sessie is waarschijnlijk verlopen.",
"authpage-cannot-create": "Kon het account aanmaken niet starten.",
+ "authpage-cannot-create-continue": "Kan niet doorgaan met het aanmaken van een account. Uw sessie is waarschijnlijk verlopen.",
+ "authpage-cannot-link": "Niet in staat om het account te kunnen koppelen.",
+ "authpage-cannot-link-continue": "Niet mogelijk het account te koppelen. Uw sessie is waarschijnlijk verlopen.",
"cannotauth-not-allowed-title": "Geen toegang",
"cannotauth-not-allowed": "U hebt geen toestemming om deze pagina te gebruiken",
"changecredentials": "Authenticatiegegevens wijzigen",
"linkaccounts-submit": "Accounts koppelen",
"unlinkaccounts": "Accounts ontkoppelen",
"unlinkaccounts-success": "Het account is ontkoppeld.",
+ "authenticationdatachange-ignored": "De wijziging van de authenticatie gegevens zijn niet afgehandeld. Misschien is er geen provider is geconfigureerd?",
"userjsispublic": "Let op: JavaScript deelpagina's moeten geen vertrouwelijke gegevens bevatten omdat ze kunnen worden bekeken door andere gebruikers.",
"usercssispublic": "Let op: CSS deelpagina's moeten geen vertrouwelijke gegevens bevatten omdat ze kunnen worden bekeken door andere gebruikers.",
"restrictionsfield-badip": "Ongeldig IP-adres of range: $1",
"modifiedarticleprotection": "endra nivået på vernet av «[[$1]]»",
"unprotectedarticle": "fjerna vern av «[[$1]]»",
"movedarticleprotection": "flytta verneinnstillingar frå «[[$2]]» til «[[$1]]»",
+ "unprotectedarticle-comment": "{{GENDER:$2|Fjerna}} vern av «[[$1]]»",
"protect-title": "Vernar «$1»",
"protect-title-notallowed": "Sjå vernenivået til «$1»",
"prot_1movedto2": "«[[$1]]» flytt til «[[$2]]»",
"logentry-newusers-create2": "Brukarkontoen $3 vart {{GENDER:$2|oppretta}} av $1",
"logentry-newusers-byemail": "Brukarkontoen $3 vart {{GENDER:$2|oppretta}} av $1 og passord vart sendt med e-post",
"logentry-newusers-autocreate": "Brukarkontoen $1 vart {{GENDER:$2|oppretta}} av seg sjølv",
+ "logentry-protect-unprotect": "$1 {{GENDER:$2|fjerna}} vern av $3",
"logentry-protect-protect": "$1 {{GENDER:$2|verna}} $3 $4",
"logentry-rights-rights": "$1 {{GENDER:$2|endra}} gruppemedlemskap for $3 frå $4 til $5",
"logentry-rights-rights-legacy": "$1 {{GENDER:$2|endra}} gruppemedlemskap for $3",
"Matma Rex",
"Xð",
"Nicolas Eynaud",
- "Fitoschido"
+ "Fitoschido",
+ "Vriullop"
]
},
"tog-underline": "Soslinhar los ligams :",
"tog-watchdeletion": "Apondre las paginas e los fichièrs que suprimissi de ma lista de seguiment",
"tog-watchuploads": "Apondre los novèls fichièrs qu’impòrti a ma lista de seguiment",
"tog-watchrollback": "Apondre a ma lista de seguiment las paginas sus las qualas ai efectuat una revocacion",
- "tog-minordefault": "Considerar mas modificacions coma menoras per defaut",
+ "tog-minordefault": "Considerar totas las modificacions coma menoras per defaut",
"tog-previewontop": "Far veire la previsualizacion al dessús de la zòna de modificacion",
"tog-previewonfirst": "Far veire la previsualizacion al moment de la primièra edicion",
"tog-enotifwatchlistpages": "M’avertir per corrièr electronic quand una pagina o un fichièr de ma lista de seguiment es modificat",
"oct": "d'oct",
"nov": "de nov",
"dec": "de dec",
- "january-date": "$1 de genièr",
- "february-date": "$1 de febrièr",
- "march-date": "$1 de març",
+ "january-date": "{{PLURAL:$1|1=1èr|$1}} de genièr",
+ "february-date": "{{PLURAL:$1|1=1èr|$1}} de febrièr",
+ "march-date": "{{PLURAL:$1|1=1èr|$1}} de març",
"april-date": "$1 d'abril",
"may-date": "$1 de mai",
"june-date": "$1 de junh",
"september-date": "$1 de setembre",
"october-date": "$1 d'octobre",
"november-date": "$1 de novembre",
- "december-date": "$1 de decembre",
+ "december-date": "{{PLURAL:$1|1=1èr|$1}} de decembre",
"period-am": "AM",
"period-pm": "PM",
"pagecategories": "{{PLURAL:$1|Categoria|Categorias}}",
"edit": "Modificar",
"edit-local": "Modificar la descripcion locala",
"create": "Crear",
- "create-local": "apondre una descripcion locala",
+ "create-local": "Apondre una descripcion locala",
"editthispage": "Modificar aquesta pagina",
"create-this-page": "Crear aquesta pagina",
"delete": "Suprimir",
"permissionserrorstext": "Avètz pas la permission d’efectuar l’operacion demandada per {{PLURAL:$1|la rason seguenta|las rasons seguentas}} :",
"permissionserrorstext-withaction": "Sètz pas autorizat(ada) a $2, per {{PLURAL:$1|la rason seguenta|las rasons seguentas}} :",
"recreate-moveddeleted-warn": "'''Atencion : sètz a tornar crear una pagina qu'es estada suprimida precedentament.'''\n\nDemandatz-vos s'es vertadièrament apropriat de contunhar de l’editar.\nL’istoric de las supressions e dels cambiaments de nom es afichat çaijós :",
- "moveddeleted-notice": "Aquesta pagina es estat suprimida.\nL'istoric de las supressions e dels cambiaments de nom es afichat çaijós coma referéncia.",
+ "moveddeleted-notice": "Aquesta pagina es estada suprimida.\nL'istoric de las supressions e dels cambiaments de nom es afichat çaijós coma referéncia.",
"log-fulllog": "Veire lo jornal complet",
"edit-hook-aborted": "Modificacion fracassada per croquet.\nCap d'explicacion pas balhada.",
"edit-gone-missing": "A pas pogut metre a jorn la pagina.\nSembla que siá estada suprimida.",
"allpagesfrom": "Afichar las paginas a partir de :",
"allpagesto": "Afichar las paginas fins a :",
"allarticles": "Totas las paginas",
- "allinnamespace": "Totas las paginas (espaci de noms $1)",
+ "allinnamespace": "Totas las paginas (dins l'espaci de noms $1)",
"allpagessubmit": "Validar",
"allpagesprefix": "Afichar las paginas que començan pel prefix :",
"allpagesbadtitle": "Lo títol rensenhat per la pagina es incorrècte o possedís un prefix reservat. Conten segurament un o mantun caractèr especial que pòt pas èsser utilizats dins los títols.",
"move-page": "Renomenar $1",
"move-page-legend": "Renomenar una pagina",
"movepagetext": "Utilizatz lo formulari çaijós per renomenar una pagina, en desplaçant tot son istoric cap al nom novèl. Lo títol ancian vendrà una pagina de redireccion cap al títol novèl.\nPodètz metre a jorn automaticament las redireccions actualas que puntan cap al títol original.\nSe causissètz de lo far pas, asseguratz-vos de verificar tota [[Special:DoubleRedirects|redireccion dobla]] o [[Special:BrokenRedirects|redireccion copada]]. Avètz la responsabilitat de vos assegurar que los ligams contunhan de puntar cap a lor destinacion supausada.\n\nNotatz que la pagina serà <strong>pas</strong> renomada s'existís ja una pagina amb lo novèl títol, levat se aquesta darrièra a un istoric de modificacions verge e es una simpla redireccion. \nAquò significa que podètz renomenar una pagina cap a sa posicion d'origina se vos sètz enganat e que podètz pas espotir una pagina existenta.\n\n<strong>Atencion !</strong>\nAquò pòt provocar un cambiament radical e imprevist per una pagina consultada frequentament ; asseguratz-vos qu'avètz comprés las consequéncias de vòstra accion abans de contunhar.",
+ "movepagetext-noredirectfixer": "Utilizatz lo formulari çaijós per renomenar una pagina, en desplaçant tot son istoric cap al nom novèl.\nL’ancian títol vendrà una pagina de redireccion cap al novèl títol.\nVerificatz plan las [[Special:DoubleRedirects|doblas redireccions]] o las [[Special:BrokenRedirects|redireccions copadas]].\nAvètz la responsabilitat de vos assegurar que los ligams contuhan de puntar cap a lor destinacion supausada.\n\nNotatz que la pagina serà <strong>pas</strong> desplaçada se existís ja una pagina amb lo títol novèl, levat se aquesta darrièra a un istoric de modificacions verge e es siá void, siá una simpla redireccion. Aquò permet de renomenar una pagina cap a sa posicion d’origina se lo desplaçament s’avèra erronèu, e es impossible d’espotir una pagina existenta.\n\n<strong>Atencion !</strong>\nAquò pòt provocar un cambiament radical e imprevist per una pagina sovent consultada ; asseguratz-vos de n'aver comprés las consequéncias abans de contunhar.",
"movepagetalktext": "Se marcatz aquesta casa, la pagina de discussion associada serà automaticament renomenada levat se una pagina de discussion, non voida, existís ja amb aqueste nom novèl.\n\nDins aqueste cas, vos caldrà renomenar o fusionar la pagina manualament se o volètz.",
"moveuserpage-warning": "'''Atencion :''' Sètz a mand de tornar nomenar una pagina d’utilizaire. Notatz que sola la pagina serà renomenada e que l’utilizaire '''ne''' serà '''pas''' renomenat.",
"movenologintext": "Per poder renomenar una pagina, vos cal èsser [[Special:UserLogin|indentific{{GENDER:||t|da)}}]]\nen tant qu'utilizaire enregistrat amb pro d'ancianetat.",
"import-interwiki-sourcewiki": "Wiki font :",
"import-interwiki-sourcepage": "Pagina font :",
"import-interwiki-history": "Copiar totas las versions de l'istoric d'aquesta pagina",
- "import-interwiki-templates": "Enclure totes los modèls",
+ "import-interwiki-templates": "Inclure totes los modèls",
"import-interwiki-submit": "Importar",
"import-mapping-default": "Importar als emplaçaments per defaut",
"import-mapping-namespace": "Importar cap a un espaci de noms :",
"spambot_username": "Netejatge de spam de MediaWiki",
"spam_reverting": "Restabliment de la darrièra version que conten pas de ligam cap a $1",
"spam_blanking": "Totas las versions que contenon de ligams cap a $1 son blanquidas",
- "spam_deleting": "Totas las versions contenonián de ligams cap a $1, supression",
+ "spam_deleting": "Totas las versions contenián de ligams cap a $1, supression",
"simpleantispam-label": "Verificacion antispam.\nInscriviscatz '''PAS RES''' dedins !",
"pageinfo-title": "Informacions per « $1 »",
"pageinfo-not-current": "O planhèm, impossible de provesir aquesta informacion per las ancianas revisions.",
"selfredirect": "<strong>Ostrzeżenie:</strong> Przekierowujesz tę stronę do niej samej.\nByć może został przez Ciebie wybrany zły cel przekierowania lub edytujesz niewłaściwą stronę.\nJeżeli ponownie klikniesz „{{int:savearticle}}”, przekierowanie zostanie utworzone.",
"missingcommenttext": "Wprowadź komentarz poniżej.",
"missingcommentheader": "<strong>Uwaga:</strong> treść tytułu komentarza jest pusta.\nJeśli ponownie klikniesz „{{int:savearticle}}”, zmiany zostaną zapisane bez niego.",
- "summary-preview": "Podgląd opisu:",
+ "summary-preview": "Podgląd opisu zmian:",
"subject-preview": "Podgląd tematu:",
"previewerrortext": "Wystąpił błąd podczas próby podglądu Twoich zmian.",
"blockedtitle": "Użytkownik jest zablokowany",
"rcfilters-invalid-filter": "Nieprawidłowy filtr",
"rcfilters-empty-filter": "Brak aktywnych filtrów. Wyświetlane są wszystkie zmiany.",
"rcfilters-filterlist-title": "Filtry",
+ "rcfilters-highlightmenu-title": "Wybierz kolor",
"rcfilters-filterlist-noresults": "Nie znaleziono filtrów",
"rcfilters-filtergroup-registration": "Rejestracja użytkownika",
"rcfilters-filter-registered-label": "Zarejestrowany",
"zip-file-open-error": "Wystąpił błąd podczas otwierania pliku ZIP, aby go sprawdzić.",
"zip-wrong-format": "Wybrany plik nie jest w formacie ZIP.",
"zip-bad": "Plik ZIP jest uszkodzony lub w inny sposób niemożliwy do odczytania. \nNie może zostać odpowiednio sprawdzony pod kątem bezpieczeństwa.",
- "zip-unsupported": "Plik jest w formacie ZIP ale wykorzystuje funkcje, które nie są obsługiwane przez MediaWiki.\nPlik nie może zostać odpowiednio sprawdzony pod kątem bezpieczeństwa.",
+ "zip-unsupported": "Plik jest w formacie ZIP, ale wykorzystuje funkcje, które nie są obsługiwane przez MediaWiki.\nPlik nie może zostać odpowiednio sprawdzony pod kątem bezpieczeństwa.",
"uploadstash": "Schowek z przesłanymi plikami",
"uploadstash-summary": "Ta strona umożliwia dostęp do przesłanych lub właśnie przesyłanych plików, ale jeszcze nie opublikowanych na wiki. Pliki widzi wyłącznie użytkownik, które je przesłał.",
"uploadstash-clear": "Wyczyść schowek z plikami",
"editcomment": "Edycję opisał: <em>$1</em>.",
"revertpage": "Wycofano edycje użytkownika [[Special:Contributions/$2|$2]] ([[User talk:$2|dyskusja]]). Autor przywróconej wersji to [[User:$1|$1]].",
"revertpage-nouser": "Wycofano edycje ukrytego użytkownika. Autor przywróconej wersji to {{GENDER:$1|[[User:$1|$1]]}}.",
- "rollback-success": "Wycofano edycje użytkownika $1;\nprzywrócono ostatnią wersję autorstwa $2.",
+ "rollback-success": "Wycofano edycje {{GENDER:$3|użytkownika|użytkowniczki}} $1;\nprzywrócono ostatnią wersję autorstwa {{GENDER:$4|$2}}.",
"rollback-success-notify": "Wycofano edycje użytkownika $1;\nprzywrócono ostatnią wersję autorstwa $2. [$3 Pokaż zmiany]",
"sessionfailure-title": "Błąd sesji",
"sessionfailure": "Wystąpił problem z weryfikacją zalogowania.\nPolecenie zostało anulowane, aby uniknąć przechwycenia sesji.\nNaciśnij „wstecz” w przeglądarce, przeładuj stronę, po czym ponownie wydaj polecenie.",
"invalidateemail": "Anulowanie potwierdzenia adresu e‐mail",
"notificationemail_subject_changed": "Został zmieniony zarejestrowany adres e-mail na {{SITENAME}}",
"notificationemail_subject_removed": "Zarejestrowany adres e-mail w {{GRAMMAR:MS.lp|SITENAME}} został usunięty",
+ "notificationemail_body_changed": "Ktoś, najprawdopodobniej Ty, z adresu IP $1,\nzmienił adres e-mail przypisany do konta „$2” na „$3” w {{GRAMMAR:MS.lp|{{SITENAME}}}}.\n\nJeżeli nie zostało to zrobione przez Ciebie, skontaktuj się niezwłocznie z administratorem.",
+ "notificationemail_body_removed": "Ktoś, najprawdopodobniej Ty, z adresu IP $1,\nusunął adres e-mail przypisany do konta „$2” w {{GRAMMAR:MS.lp|{{SITENAME}}}}.\n\nJeżeli nie zostało to zrobione przez Ciebie, skontaktuj się niezwłocznie z administratorem.",
"scarytranscludedisabled": "[Transkluzja przez interwiki jest wyłączona]",
"scarytranscludefailed": "[Pobranie szablonu dla $1 nie powiodło się]",
"scarytranscludefailed-httpstatus": "[Pobranie szablonu dla $1 nie powiodło się: HTTP $2]",
"Macofe",
"Matma Rex",
"Saanvel",
- "Satdeep gill"
+ "Satdeep gill",
+ "Abbas dhothar"
]
},
- "tog-underline": "Øوڑ تھلے لین:",
+ "tog-underline": "جوڑ تھلے لین:",
"tog-hideminor": "چھوٹیاں تبدیلیاں چھپاؤ",
"tog-hidepatrolled": "ویکھیاں تبدیلیاں لکاؤ",
"tog-newpageshidepatrolled": "نویاں صفیاں توں ویکھیاں تبدیلیاں لکاؤ",
- "tog-hidecategorization": "صÙ\81ØÛ\8cاں دÛ\8c Ú¯Ù¹Ú¾ Ù\84کائÙ\88۔",
+ "tog-hidecategorization": "صÙ\81ØÛ\92Ø¢Úº دÛ\8c Ú¯Ù¹Ú¾ Ù\84Ù\8fکاؤ۔",
"tog-extendwatchlist": "نظر تھلے رکھے صفحے نوں ودھاو, تاں جے اوہ تبدیلیاں جیڑیاں کم دے قابل نیں ویکھیاں جا سکن",
- "tog-usenewrc": "تھوڑا خر پہلے کیتیاں گیاں تبدیلیاں ورتو",
+ "tog-usenewrc": "نویاں تبدیلیاں اتے میری اکھ تھلے لسٹ وچ صفحہ وار گروپ تبدیلیاں",
"tog-numberheadings": "آپ نمبر دین والیاں سرخیاں",
"tog-showtoolbar": "ایڈٹ ٹولبار وکھاؤ",
"tog-editondblclick": "صفیاں تے ڈبل کلک کرن تے تبدیلیاں لیاؤ",
"tog-enotifminoredits": "صفحیاں چ چھوٹیاں موٹیاں تبدیلیاں تے وی مینوں ای میل کر دیو",
"tog-enotifrevealaddr": "میرے ای میل دے پتے نوں سندیسے آلی ای میل دے وچ وکھاؤ۔",
"tog-shownumberswatching": "ویکھن آلے لوکاں دی گنتی وکھاؤ۔",
- "tog-oldsig": "ہن والے دسخط:",
+ "tog-oldsig": "تواڈے ہُن والے دستخط:",
"tog-fancysig": "دستخط نوں وکی ٹیکسڈ ونگوں؎ ورتو(without an automatic link)",
"tog-uselivepreview": "لائیو پریویو ورتو",
"tog-forceeditsummary": "مینون اوسے ویلے دسو جدوں خالی سمری تے آؤ۔",
"newwindow": "(نئی ونڈو چ کھولو)",
"cancel": "مکاؤ",
"moredotdotdot": "مزید۔۔۔۔",
- "morenotlisted": "ایہ لسٹ پوری نئی۔",
+ "morenotlisted": "ایہ لسٹ پوری نئیں۔",
"mypage": "صفہ",
"mytalk": "میریاں گلاں",
"anontalk": "گل",
"faq": "FAQ",
"faqpage": "Project:FAQ",
"actions": "کم",
- "namespaces": "ناواں دی تھاں:",
+ "namespaces": "ناں تھانواں:",
"variants": "قسماں",
"navigation-heading": "کھوج پتر",
"errorpagetitle": "مسئلہ",
"search": "کھوج",
"searchbutton": "کھوج",
"go": "جاؤ",
- "searcharticle": "چلو جی",
+ "searcharticle": "چلو",
"history": "پچھلے کم",
"history_short": "ریکارڈ",
+ "history_small": "تریخ",
"updatedmarker": "میرے پچھلی وار آن توں مگروں دیاں تبدیلیاں",
- "printableversion": "چھپن جوگا صفہ",
+ "printableversion": "چھپن جوگا صفحہ",
"permalink": "پکا جوڑ",
"print": "چھاپو",
"view": "وکھالہ",
"articlepage": "مضمون آلا صفحہ",
"talk": "گل بات",
"views": "وکھالے",
- "toolbox": "اÙ\88زار",
+ "toolbox": "سÙ\8eÙ\86د",
"userpage": "ورتن آلے دا صفہ ویکھو",
"projectpage": "ویونت والا صفہ ویکھو",
"imagepage": "فائل آلا صفہ ویکھو",
"redirectedfrom": "(لیایا گیا $1)",
"redirectpagesub": "صفحہ ریڈائریکٹ کرو",
"redirectto": "اگے کرو:",
- "lastmodifiedat": "اس صفحے نوں آخری آری $1 تریخ نوں $2 وجے بدلیا گیا۔",
+ "lastmodifiedat": "اس صفحے نوں آخری واری $1 تریخ نوں $2 وجے بدلیا گیا۔",
"viewcount": "اس صفحے نوں {{PLURAL:$1|اک واری|$1 واری}} کھولیا گیا اے۔",
"protectedpage": "بجایا صفحہ",
"jumpto": "جاؤ:",
"copyrightpage": "{{ns:project}}:نقل دے حق",
"currentevents": "اج کل دیاں گلاں",
"currentevents-url": "Project:اج کل دیاں گلاں",
- "disclaimers": "Ù\85Ù\86کرÙ\86ا",
- "disclaimerpage": "Project:عاÙ\85 Ù\85Ù\86کرÙ\86ا",
+ "disclaimers": "Ù\84اتعÙ\84Ù\82Û\8c اظÛ\81ار",
+ "disclaimerpage": "Project:عاÙ\85 Ù\84اتعÙ\84Ù\82Û\8c اظÛ\81ار",
"edithelp": "لکھن وچ مدد",
+ "helppage-top-gethelp": "مدد",
"mainpage": "پہلا صفہ",
- "mainpage-description": "پہلا صفہ",
+ "mainpage-description": "پہلا صفحہ",
"policy-url": "Project:پالیسی",
"portal": "بیٹھک",
"portal-url": "ویونت:بیٹھک",
- "privacy": "بچاؤ پالیسی",
- "privacypage": "Project:بچاؤ پالیسی",
+ "privacy": "پرائیویسی پالیسی",
+ "privacypage": "Project:پرائیویسی پالیسی",
"badaccess": "اجازت دے وچ غلطی اے",
"badaccess-group0": "تھاونوں ایس کم دی اجازت نیں جیہڑا تسیں آکھیا اے۔",
"badaccess-groups": "جیڑا کم تسی کرنا چا رۓ او اوہ صرف {{PLURAL:$2|اس گروپ|ایناں گروپاں}} دے ورتن آلے کر سکدے نیں: $1۔",
"toc": "حصے",
"showtoc": "وکھاؤ",
"hidetoc": "چھپاؤ",
- "collapsible-collapse": "ڈگنا",
+ "collapsible-collapse": "لُکاؤ",
"collapsible-expand": "ودھاؤ",
+ "confirmable-no": "نئیں",
"thisisdeleted": "$1 ویکھو یا واپس لاؤ",
"viewdeleted": "ویکھو 1$ ؟",
"restorelink": "{{PLURAL:$1|اک مٹائی گئی تبدیلی|1$ مٹائیاں گئیاں تبدیلیاں}}",
"nstab-main": "صفہ",
"nstab-user": "ورتن والے دا صفہ",
"nstab-media": "میڈیا آلا صفہ",
- "nstab-special": "خاص صفہ",
+ "nstab-special": "خاص صفحہ",
"nstab-project": "ویونت دا صفہ",
"nstab-image": "فائل",
- "nstab-mediawiki": "سنیعا",
+ "nstab-mediawiki": "سنیہہ",
"nstab-template": "سانچہ",
"nstab-help": "مدد آلا صفہ",
"nstab-category": "گٹھ",
"badarticleerror": "اے کم اس صفحے تے نئیں ہو سکدا۔",
"cannotdelete": "صفحہ یا فائل \"$1\" نوں مٹایا نا جاسکیا۔\nاینوں پہلاں توں ای کسے نے مٹایا ہوۓ گا۔",
"cannotdelete-title": "صفہ مٹا نئیں سکدے \"$1\"",
- "badtitle": "Ù¾Û\8cÚ\91ا عÙ\86Ù\88اÙ\86",
+ "badtitle": "بھÛ\8cÚ\91ا عÙ\86Ù\88اÙ\86",
"badtitletext": "منگیا گۓ صفے دا ناں غلط اے، خالی، یا ایہ غلط ول نال جوڑیا گیا اے۔\nہوسکدا اے ایدے چ اک دو ھندسے ایسے ہون جیڑے ناں وچ ورتے نہیں جاسکدے۔",
"perfcached": "تھلے دتا گیا ڈیٹا کاشیڈ اے تے پانویں نواں ناں ہووے. زیادہ توں زیادہ کاشے چ {{PLURAL:$1|اک نتیجہ ہووے|$1 نتیجے ہوون}} گے.",
"perfcachedts": "تھلے دتا گیا ڈیٹا کاشیڈ اے تے $1 نوں نواں کیتا گیا۔ زیادہ توں زیادہ {{PLURAL:$4|اک نتیجہ ہووے|$4 نتیجے ہوون}} نتیجے کاشے چ ہیگے نیں .",
"protectedpagetext": "اس صفحے دے اتے تبدیلی کرن نوں روکیا گیا اے۔",
"viewsourcetext": "تسی اس صفحے دی لکھائی نوں ویکھ تے نقل کر سکدے او:",
"viewyourtext": "تسیں آپنی تبدیلیاں دا ذریعہ ایس صفے تے ویکھ تے کاپی کرسکدے او۔",
- "protectedinterface": "اÛ\92 صفحے سافٹویئر نوں ورتن دی تھاں دیندا اے تے ایدے غلط ورتن نوں روکن واسطے اینوں بچایا ہویا اے۔",
+ "protectedinterface": "اÛ\8cÛ\81 صفحے سافٹویئر نوں ورتن دی تھاں دیندا اے تے ایدے غلط ورتن نوں روکن واسطے اینوں بچایا ہویا اے۔",
"editinginterface": "'''خبردار:''' تسیں اک ایسا صفہ بدل رۓ او جیہڑا مکھی صفے دے سوفٹویر نوں لکھت دیندا اے۔ ایس صفے ج تبدیلی ورتنن والیاں دے مکھی صفے دے وکھالے نوں بدل دے گی۔ بولی وٹاندرے لئی، مہربانی کرکے میڈیاوکی بولی ویونت [https://translatewiki.net/wiki/Main_Page?setlang=en translatewiki.net] ول ویکھو۔",
"cascadeprotected": "ایس صفے نوں تبدیلی توں بچایا گیا اے، کیوں جے ایہ تھلے دتے گۓ {{PLURAL:$1|صفہ|صفے}} چ ہیگا اے تے اینوں ''کیسکیڈنگ'' چنوتی نال بچایا گیا اے:\n\n $2",
"namespaceprotected": "'''$1''' ناں دے صفحے تسی نئیں لکھ سکدے۔",
"createacct-email-ph": "اپنا ای-میل پتہ دیؤ",
"createaccountmail": "ای میل دے نال",
"createaccountreason": "وجہ:",
+ "createacct-reason": "وجہ",
+ "createacct-reason-ph": "تسیں اک ہور کھاتہ کیوں بنا رہے او",
"createacct-submit": "اپنا کھاتا کھولو",
"createacct-benefit-heading": "پنجابی وکی نوں تواڈے ورگے لوکاں نے بنایا اے۔",
"createacct-benefit-body1": "$1 {{PLURAL:$1|تبدیلی|تبدیلیاں}}",
"blocked-mailpassword": "تواڈے IP پتے تے تبدیلی کرن تے روک اے، تے تسی کنجی وی واپس نئیں لیا سکدے تاکے ایدا غلط ورت نا ہوۓ۔",
"eauthentsent": "اک کنفرمیشن ای میل دتے گۓ ای میل پتے تے پیج دتی گئی اے۔ اس توں پہلاں کہ کوئی دوجی ای میل کھاتے تے پیجی جاۓ، توانوں ای میل چ دتیاں ہدایات تے عمل کرنا ہوۓ گا، تا کے اے پکا ہو سکے کہ اے کھاتہ تواڈا ہی اے۔",
"throttled-mailpassword": "اک کنجی بارے سنیعہ پہلے ای پیجیا جاچکیا اے، پچھلے {{PLURAL:$1|کینٹہ|$1 کینٹے}} چ۔ \nکوئی غلط کم ہون توں پہلے صرف اک کنجی سنیغہ {{PLURAL:$1|کینٹہ|$1 کینٹے}} پیجیا جائیکا۔",
- "mailerror": "چٹھی پیجن چ غلطی: $1",
+ "mailerror": "ای میل بھیجن وچ غلطی: $1",
"acct_creation_throttle_hit": "ایس وکی تے آن والے تے تواڈے آئی پی پتے ورتدیاں ہویاں {{PLURAL:$1|1 کھاتہ|$1 کھاتے}} پچھلے دن چ جیہڑا کی ایس ویلے چ زیادہ توں زیادہ دی اجازت اے۔ \nایس لئی ایتھے آن والے تے ایس آئی پی پتے نوں ورتن والے ایس ویلے ہور کھاتہ نئیں کھول سکدے۔",
"emailauthenticated": "تھواڈا ای-میل پتہ $2 نوں $3 تے پکا کیتا گیا۔",
- "emailnotauthenticated": "تھواڈا ای-میل پتہ ہجے پکا نئیں ہویا۔\nکوئی ای-میل اینج دے فیچر والی نئیں پیجی جاۓ گی۔",
+ "emailnotauthenticated": "تھواڈا ای-میل پتہ ہجے پکا نئیں ہویا۔\nکوئی ای-میل اینج دے فیچر والی نئیں بھیجی جائے گی۔",
"noemailprefs": "ایناں فیچراں نوں کم کرن لئی اپنیاں تانگاں چ ای-میل پتہ دسو۔",
"emailconfirmlink": "ای میل پتہ پکا کرو",
"invalidemailaddress": "ایہ ای-میل پتہ نئیں چلے گا کیوں جے اے ناں منے جان والے فارمیٹ تے بنیا ہویا اے۔\nمہربانی کرکے منے جان والے فارمیٹ پتے نوں دسو یا فیر اے تھاں خالی چھڈ دیو۔",
"resetpass_announce": "تسی اک کچے ای-میل کود تے لاگ ان ہوگۓ او۔\nلاگ ان مکان لئی تھوانوں ایتھے اک نویں کنجی بنانی پوے گی:",
"resetpass_header": "کھاتے دی کنجی بدلو",
"oldpassword": "پرانی کنجی:",
- "newpassword": "نوی کنجی:",
- "retypenew": "نئی کنجی دوبارہ لکھو:",
+ "newpassword": "نویں کنجی:",
+ "retypenew": "نویں کنجی دوبارہ لکھو:",
"resetpass_submit": "کنجی رکھو تے لاگ ان ہو جاو",
- "changepassword-success": "تھواڈی کنجی بدلی جاچکی اے!\nتسی لاگ ان ہورۓ او۔۔۔۔۔۔",
+ "changepassword-success": "تھواڈی کنجی بدلی جاچکی اے!\nتسی لاگ ان ہو رہے او۔۔۔۔۔۔",
+ "botpasswords-label-appid": "بوٹ ناں",
+ "botpasswords-label-create": "بناؤ",
"resetpass_forbidden": "کنجی بدلی نئیں جاسکدی",
"resetpass-no-info": "تسی لاگ ان ہوکے ای اس صفحے نوں ویکھ سکدے او۔",
"resetpass-submit-loggedin": "کنجی بدلو",
"passwordreset-disabled": "اس وکی تے کنجی واپس نئیں لیائی جاسکدی۔",
"passwordreset-username": "ورتن ناں:",
"passwordreset-domain": "ڈومین",
- "passwordreset-capture": "آن والی ای-میل ویکھو؟",
- "passwordreset-capture-help": "اگر تسیں اے ڈبہ چیک کروگے ای-میل (عارضی کنجی نال) وکھائی جاۓ گی توانوں تے پیجی وی جاۓ گی۔",
"passwordreset-email": "ای-میل پتہ:",
"passwordreset-emailtitle": "{{SITENAME}} دے اتے کھاتے دی معلومات:",
"passwordreset-emailtext-ip": "کسے نے (خورے تساں آئی پی پتے $1) تواڈے کھاتے دا ویروا منگیا اے {{SITENAME}} ($4) لئی۔ تھلے دتا گیا ورتنوالا {{PLURAL:$3|کھاتہ|کھاتے}} ایس ای-میل پتے نال جوڑ رکھدا اے:\n\n$2\n\n{{PLURAL:$3|اے عارضی کنجی|اے عارضی کنجیاں}} {{PLURAL:$5|اک دن|$5 دناں}} چ مک جاوے گی۔ تسیں لاگان ہوو تے اپنی اک نويں کنجی چنو. اگر کسے ہور نے اے کنجی والی چٹھی پیجی اے یا توانوں پرانی کنجی یاد آگئی اے تے تسیں پرانی کنجی نال ای کم چلانا چاندے او تے تسیں ایس سنیعے نوں پل جاؤ تے پرانی کنجی ای ورتو۔",
"passwordreset-emailtext-user": "ورتنوالے $1 نے {{سائیٹناں}} تے تواڈے کھاتے بارے پچھیا اے {{SITENAME}} لئی ($4)۔ تھلے دتا گیا ورتن {{PLURAL:$3|کھاتہ|کھاتے}} ایس ای-میل نال جڑدا اے۔\n\n$2\n\n{{PLURAL:$3|ایہ عارضی کنجی|اے عارضی کنجیاں}} مک جائیگا {{PLURAL:$5|اک دن|$5 دن}}۔ تسیں ہن لاکان ہوو تے نویں کنجی چنو۔ اگر کسے ہور نے اے چٹھی پیجی یا توانوں اپنی پہلی کنجی یاد آگئی اے تے تسیں اونوں بدلنا نئیں چاندے تے تسیں ایس سنیعے نوں پھل جاؤ تے پرانی کنجی نال ای کم چلاؤ۔",
"passwordreset-emailelement": "ورتن ناں: \n$1\n\nعارضی کنجی: \n$2",
- "passwordreset-emailsentemail": "یاد کران واسطے اک ای-میل Ù¾Û\8cج دتÛ\8c گئÛ\8c اÛ\92Û\94",
+ "passwordreset-emailsentemail": "یاد کران واسطے اک ای-میل بھÛ\8cج دتÛ\8c گئÛ\8c اÛ\92Û\94",
"changeemail": "ای-میل پتہ بدلو",
"changeemail-header": "کھاتے دا ای-میل پتہ بدلو",
"changeemail-no-info": "تسی لاگ ان ہوکے ای اس صفحے نوں ویکھ سکدے او۔",
"headline_sample": "شہ سرخی",
"headline_tip": "دوسرے درجے دی سرخی",
"nowiki_sample": "فارمیٹ نہ ہوئی لکھائی ایتھے پاؤ",
- "nowiki_tip": "وکی فارمیٹ رھندیو۔",
+ "nowiki_tip": "وکی فارمیٹ رہن دیؤ۔",
"image_sample": "Example.jpg",
"image_tip": "وچ مورت لگاؤ",
"media_sample": "Example.ogg",
"blockednoreason": "کوئی وجہ نئیں دسی گئی",
"whitelistedittext": "تھواڈے کول $1 ہونا چآغیدا اے صفے تبدیل کرن لئی۔",
"confirmedittext": "توانوں اپنا ای-میل پتہ پکا کرنا چائیدا اے تبدیلیاں کرن توں پہلے۔\nمہربانی کرکے اپنا ای-میل پتہ بناؤ تے پکا کرو [[Special:Preferences|user preferences]]",
- "nosuchsectiontitle": "اÛ\92 ہو جیا کوئی ٹوٹا نئیں",
+ "nosuchsectiontitle": "اÛ\8cہو جیا کوئی ٹوٹا نئیں",
"nosuchsectiontext": "تساں اک ایسے پاسے نوں بدلن دی کوشش کیتی اے جیہڑا ہے ای نئیں۔\nخورے جدوں تسی تک رۓ سے اودوں اینوں مٹادتا گیا ہووۓ یا بدل دتا گیا ہووے۔",
"loginreqtitle": "لاگ ان چائیدا اے",
"loginreqlink": "لاگ ان ہو جاو",
"editconflict": "تبدیلی رپھڑ: $1",
"explainconflict": "جدوں تسیں لکھنا شروع کیتا کسے ہور نے صفہ بدل دتا اے۔ اتلا لکھت تھاں چ چ لکھت ہے جیویں اوہ ہن ہیگی اے۔\nتواڈیاں تبدیلیاں تھلویں لکھت چ دسیاں جاریاں نیں۔ توانوں اپنیاں تبدیلیاں ہن دی لکھت چ رلانیاں پین گیاں۔\nتوانوں اپنیاں تبدیلیاںہن دی لکھت چ رلانیاں پین گیا۔\n'''صرف''' اتلی لکھت ددی تھاں بچائی جاسیگی جدوں تسیں \"{{int:savearticle}}\" دباؤ گے",
"yourtext": "تواڈی لکھائی",
- "storedversion": "سانبیا ورژن",
- "nonunicodebrowser": "'''خبردار: تھواڈا براؤزر تے یونیکوڈ نئیں چلدا۔'''\nاک کم تھانوں ایس قابل کریگا جے بچت نال صفے بچا سکو: non-ASCII کیریکٹر تبدیلی ڈبے چ ہیکساڈیسیمل کوڈ دسن گے۔",
+ "storedversion": "سانبھی لکھائی",
+ "nonunicodebrowser": "'''خبردار: تھواڈے براؤزر اُتے یونیکوڈ نئیں چلدا۔'''\nاک کم تھانوں ایس قابل کریگا جے بچت نال صفے بچا سکو: non-ASCII کیریکٹر تبدیلی ڈبے چ ہیکساڈیسیمل کوڈ دسن گے۔",
"editingold": "'''خبردار: تسیں ایس صفے دی پرانی ریوین بدل رۓ او۔'''\nاگر تسیں اینوں بچاندےاو، ایس ریوین مگروں کوئی وی تبدیلی مک جائیگی۔",
"yourdiff": "تبدیلیاں",
"copyrightwarning": "مہربانی کر کے اے گل یاد رکھ لو کے سارے کم {{SITENAME}} ایتھے $2 دے تھلے آن گے (زیادہ علم واسطے $1 تکو)۔<br />\nاگر تسی نئیں چاندے کے تواڑی لکھائی نوں بے رحمی نال ٹھیک کیتا جاۓ تے نالے اپنی مرضی نال اونھوں چھاپیا جاۓ تے ایتدے مت لکھو۔<br />\nتسی اے وی ساڈے نال وعدہ کر رہے او کہ اینوں تسی آپ لکھیا اے یا فیر کسی پبلک ڈومین توں یا ایہو جۓ کسے آزاد ذریعے توں نقل کیتا اے۔<br />\n'''ایتھے او کم بغیر اجازت توں نا لکھو جیدے حق راکھویں نے '''",
"post-expand-template-inclusion-category": "صفے جتھے ٹمپلیٹ ناپ وڈا ہوگیا اے۔",
"post-expand-template-argument-warning": "'''خبردار:''' ایس صفے تے اک ٹمپلیٹ گل بات دتی گئی اے جیہڑا چوکھا وڈا اے۔\nاے گلاں کڈ دتیاں گیاں نیں۔",
"post-expand-template-argument-category": "صفے جناں چ کڈے گۓ ٹمپلیٹ دیاں گلاں نیں۔",
- "parser-template-loop-warning": "ٹمپلیٹ لوپ لب لئی گئی: [[$1]]",
+ "parser-template-loop-warning": "سانچہ لوپ لبھ لئی گئی: [[$1]]",
"parser-template-recursion-depth-warning": "ٹمپلیٹ ریکرشن ڈپتھ لمٹ ودی ($1)",
"language-converter-depth-warning": "بولی بدلن دی ولگن ودی ($1)",
"undo-success": "تبدیلیاں واپس ہوسکدیاں نیں۔\nتھلے فرق ویکھو اے ویکھن لئی جے ایہو ای تسی چاندے او، تے تھلے تبدیلیاں بچاؤ، تبدیلیاں مکاں دی روک نوں۔",
"currentrevisionlink": "موجودہ حالت",
"cur": "ہنوالا",
"next": "اگلا",
- "last": "پہلا",
+ "last": "پچھلا",
"page_first": "پہلا",
"page_last": "آخری",
"histlegend": "ڈف سلیکشن: وکھری تبدیلیاں دا مقابلا کرن واسطے ریڈیو ڈبیاں تے نشان لاؤ تے اینٹر یا تھلے دتا گیا بٹن دباؤ۔<br />\nلیجنڈ: (موجودہ) = موجودہ تبدیلی نال مقابلہ،\n(آخری) = پچھلی تبدیلی توں فرق، M = تھوڑی تبدیلی",
"history-fieldset-title": "ریکارڈ ویکھو",
"history-show-deleted": "صرف مٹایا گیا اے۔",
- "histfirst": "سب توں پہلا",
- "histlast": "سب توں نواں",
+ "histfirst": "سبتوں پرانا",
+ "histlast": "سبتوں نواں",
"historysize": "({{PLURAL:$1|1 بائٹ|$1 بائٹس}})",
"historyempty": "(خالی)",
- "history-feed-title": "ریوین رکارڈ",
- "history-feed-description": "ریوین رکارڈ ایس صفے لئی وکی تے اے۔",
+ "history-feed-title": "ریویژن رکارڈ",
+ "history-feed-description": "ریویژن رکارڈ ایس صفے لئی وکی تے اے۔",
"history-feed-item-nocomment": "$2 نوں $1",
"history-feed-empty": "چائیدا صفہ ہے ای نئیں۔\nہوسکدا اے اینوں وکی توں ہٹا دتا گیا ہووے یا مٹادتا گیا ہووے۔\n[[Special:Search|searching on the wiki]] کرو چائیدے نویں صفیاں لئی۔",
"rev-deleted-comment": "تبدیلی سمری مٹادتی گئی۔",
"revdelete-confirm": "اے پکا کرلو جے تسیں ایہ کرنا چاندے او، تے توانوں ایدے نتیجے دا پتہ اے، تے تسیں [[{{MediaWiki:Policy-url}}|پالیسی]] تے چل کے ک رۓ او۔",
"revdelete-suppress-text": "دبانا اودوں ای ٹھیک اے جدوں اے تھلے دتے کۓ مسلیاں لئی ہووے۔\n* غلط جانکاری\n**تھوڑی اپنے بارے جانکاری\n*:''کعر دا پتہ تے فون نمبر.''",
"revdelete-legend": "ویکھن چانن دیاں ولگناں بناؤ",
- "revdelete-hide-text": "ریوژن ٹیکسٹ لکاؤ",
+ "revdelete-hide-text": "ریویژن ٹیکسٹ",
"revdelete-hide-image": "فائل دا مواد لکاؤ",
- "revdelete-hide-name": "کم تے نشانہ چھپاؤ",
- "revdelete-hide-comment": "Ù\84Ú©Ú¾Ù\86 دÛ\92 بارÛ\92 Ú\86 صÙ\84اع Ù\84کاؤ",
+ "revdelete-hide-name": "پیرامیٹر تے ٹارگٹ چھپاؤ",
+ "revdelete-hide-comment": "Ù\84Ú©Ú¾Ù\86 سÙ\85رÛ\8c",
"revdelete-hide-user": "لکھن آلے دا ناں/آئی پی پتہ لکاؤ",
"revdelete-hide-restricted": "ایڈمنسٹریٹراں تے ہوراں کولاں ڈیٹا لکاؤ۔",
"revdelete-radio-same": "(اینوں ناں بدلو)",
- "revdelete-radio-set": "ہاں",
- "revdelete-radio-unset": "Ù\86ئÛ\8cÚº",
+ "revdelete-radio-set": "لُکی",
+ "revdelete-radio-unset": "Ù\86ظز Ø¢Ù\86دÛ\8c",
"revdelete-suppress": "چھڈن دی چنوتی",
"revdelete-unsuppress": "واپس کیتیاں ریویناں چ روکاں نوں ہٹاؤ۔",
"revdelete-log": "وجہ:",
"revdelete-submit": "{{PLURAL:$1|ریوین|ریویناں}} تے ورتو",
- "revdelete-success": "'''ریوین وکھالہ کامیابی نال نواں کردتا گیا اے.'''",
+ "revdelete-success": "'''ریویژن وکھالہ کامیابی نال نواں کردتا گیا اے.'''",
"revdelete-failure": "'''ریوین وکھالہ نویں نئیں کیتی جاسکدی:'''\n$1",
- "logdelete-success": "'''Ù\84اک وکھالہ کامیابی نال سیٹ کردتا گیا.'''",
+ "logdelete-success": "'''Ù\84اگ وکھالہ کامیابی نال سیٹ کردتا گیا.'''",
"logdelete-failure": "'''لاک وکھالہ ویکھیا نئیں جاسکدا:'''\n$1",
"revdel-restore": "وکھالا بدلو",
"pagehist": "صفحے دی تریخ",
"deletedhist": "مٹائی گئی تریخ",
- "revdelete-hide-current": "آئیٹم نوں $2 تے $1 تریخاں چ لکان چ غلطی۔\nایہ نئیں لکائی جاسکدی۔",
- "revdelete-show-no-access": "$2، $1 دی تریخاں دیاں آئٹماں دے دسن چ غلطی ہوئی اے : ایہ آئٹم حد چ اے۔\nتسیں ایدے تک نئیں جاسکدے او۔",
+ "revdelete-hide-current": "آئیٹم نوں $2 تے $1 تریخاں چ لُکان وچ غلطی۔\nایہ نئیں لکائی جاسکدی۔",
+ "revdelete-show-no-access": "$2، $1 دی تریخاں دیاں آئٹماں دے دسن چ غلطی ہوئی اے : ایہ آئٹم حد وچ اے۔\nتسیں ایدے تک نئیں جاسکدے او۔",
"revdelete-modify-no-access": "$2، $1 تریخ دی آئٹم بدلن چ غلطی ہوئی: ایہ آئٹم نوں حد چ رکھیا اے۔ تواڈی ایتھوں تک رسائی نئیں۔",
"revdelete-modify-missing": "آئی ڈی آئیٹم $1 توں بدلن چ فلطی: ایہ ڈیٹابیس چ نئیں اے۔",
"revdelete-no-change": "'''خبردار:''' $2 تریخ دی آئیٹم، $1 پہلے ای دیس سیٹنگ لئی آکھی جاچکی اے۔",
"revdelete-otherreason": ":دوجی وجہ",
"revdelete-reasonotherlist": "ہور وجہ",
"revdelete-edit-reasonlist": "مٹانے دی وجہ لکھو",
- "revdelete-offender": "ریوین لکھاری",
+ "revdelete-offender": "ریویژن لکھاری",
"suppressionlog": "دبان لاگ",
- "suppressionlogtext": "تھÙ\84Û\92 Ù\85ٹاÙ\86 تÛ\92 رÙ\88Ú©Ù\86 دÛ\92 Ú©Ù\85 دÛ\8c Ù\84سٹ اÛ\92 جÛ\8cÛ\81Ú\91ا Ù\85Ú©Ú¾Û\8cاÙ\88اں Ú©Ù\88Ù\84Ù\88Úº Ù\84Ú©Û\8cا اÛ\92Û\94\n[[Special:BlockList|IP block list]] Ù\88Û\8cÚ©Ú¾Ù\88 Û\81Ù\86 دÛ\8c اوپریشنل بنداں تے روکاں تے۔",
+ "suppressionlogtext": "تھÙ\84Û\92 Ù\85ٹاÙ\86 تÛ\92 رÙ\88Ú©Ù\86 دÛ\92 Ú©Ù\85 دÛ\8c Ù\84سٹ اÛ\92 جÛ\8cÛ\81Ú\91ا پربÙ\86دھکاں Ú©Ù\88Ù\84Ù\88Úº Ù\84Ù\8fÚ©Û\8cا اÛ\92Û\94\nÙ\88Û\8cÚ©Ú¾Ù\88[[Special:BlockList|IP block list]] Û\81Ù\86 دÛ\8cاں اوپریشنل بنداں تے روکاں تے۔",
"mergehistory": "صفیاں دا رکارڈ رلاؤ",
"mergehistory-header": "ایہ صفہ توانوں اک سورس صفے دیاں ریویناں دا رکارڈ اک ہور صفے چ رلان دیوے گا۔\nایہ گل پکی کرو جے تبدیلی رکارڈ دی لکاتاری نوں رکھے گی۔",
"mergehistory-box": "دوصفیاں دیاں رلیاں ریویني",
"searchprofile-advanced-tooltip": "کسٹم ناواں چ لبو",
"search-result-size": "$1 ({{PLURAL:$2|1 شبد|$2 شبد}})",
"search-result-category-size": "{{PLURAL:$1|1 سنگی|$1 سنگی}} ({{PLURAL:$2|1 نکیاں گٹھاں|$2 نکیاں گٹھاں}}, {{PLURAL:$3|1 فائل|$3 فائلاں}})",
- "search-redirect": "($1 رÛ\8cÚ\88ائرÛ\8cÚ©Ù¹)",
+ "search-redirect": "($1 تÙ\88Úº Ù\85Ú\91 رجÙ\88ع)",
"search-section": "($1 ٹوٹا)",
+ "search-category": "(کیٹیگری $1)",
"search-suggest": "تسی $1 دی گل تے نئیں کر رۓ:",
"search-interwiki-caption": "رلدے ویونت",
"search-interwiki-default": "$1 نتارے:",
"search-interwiki-more": "(اور)",
+ "search-interwiki-more-results": "ہور نتیجے",
"search-relatedarticle": "جڑیاں",
"searchrelated": "جڑیا",
"searchall": "سارے",
"saveprefs": "بچاؤ",
"restoreprefs": "ڈیفالٹ سیٹنگز دوبارہ لیاؤ",
"prefs-editing": "لکھائی",
- "rows": "قطار:",
- "columns": "کالم:",
"searchresultshead": "کھوج",
"stub-threshold": "بوآ <a href=\"#\" class=\"stub\">stub link</a> formatting (bytes): لئی",
"stub-threshold-disabled": "ناکارہ",
"timezoneuseserverdefault": "وکی ڈیفالٹ ($1) ورتو۔",
"timezoneuseoffset": "دوجے (آفسٹ دسو)",
"servertime": "سرور دا ویلا:",
- "guesstimezone": "براؤزر توں پعرو۔",
+ "guesstimezone": "براؤزر توں بھرو۔",
"timezoneregion-africa": "افریقہ",
"timezoneregion-america": "امریکہ",
"timezoneregion-antarctica": "انٹارکٹکا",
"yourlanguage": "بولی:",
"yourvariant": "ورتی بولی دی اک ہور ونڈ:",
"prefs-help-variant": "تسیں وکھرے یا اورتوگرافی چنی اے ایس وکی دیاں لکھتاں نوں دکھان لئی۔",
- "yournick": "دسخط:",
- "prefs-help-signature": "Ú¯Ù\84 بات صÙ\81Û\92 تÛ\92 \"<nowiki>~~~~</nowiki>\" دÛ\92 Ù\86اÙ\84 دسخط Û\81Ù\88Ù\86Û\92 Ú\86ائÛ\8cدÛ\92 Ù\86Û\8cÚº جÙ\86اں Ù\86Ù\88Úº دسخط تÛ\92 Ù\88Û\8cÙ\84Û\92 چ دسیا جائیگا۔",
- "badsig": "ناں منیا جان والا کچا دسخط۔\nایچ ٹی ایم ایل ٹیگ۔",
- "badsiglength": "تھÙ\88اÚ\88Û\92 دسخط بعÙ\88ت Ù\84Ù\85بÛ\92 Ù\86Û\8cÚºÛ\94\n\nاÛ\92 $1 {{PLURAL:$1|اکرا|اکرے}}توں لمبے ناں ہون۔",
+ "yournick": "نویں دستخط:",
+ "prefs-help-signature": "Ú¯Ù\84 بات صÙ\81Û\92 تÛ\92 \"<nowiki>~~~~</nowiki>\" دÛ\92 Ù\86اÙ\84 دستخط Û\81Ù\88Ù\86Û\92 Ú\86ائÛ\8cدÛ\92 Ù\86Û\8cÚº جÙ\86Û\81اں Ù\86Ù\88Úº دستخط تÛ\92 Ù\88Û\8cÙ\84Û\92 Ù\88چ دسیا جائیگا۔",
+ "badsig": "Ù\86اں Ù\85Ù\86Û\8cا جاÙ\86 Ù\88اÙ\84ا Ú©Ú\86ا دستخطÛ\94\nاÛ\8cÚ\86 Ù¹Û\8c اÛ\8cÙ\85 اÛ\8cÙ\84 Ù¹Û\8cÚ¯Û\94",
+ "badsiglength": "تھÙ\88اÚ\88Û\92 دستخط بÙ\88Û\81ت Ù\84Ù\85بÛ\92 Ù\86Û\8cÚºÛ\94\n\nاÛ\8cÛ\81 $1 {{PLURAL:$1|اکرا|اکرے}}توں لمبے ناں ہون۔",
"yourgender": "جنس",
"gender-unknown": "نئیں دسیا گیا۔",
"gender-male": "نر",
"prefs-help-email": "ای-میل پتہ اوپشنل اے، پر کنجی ٹھیک کرن لئی ورتیا جاندا اے، کیا تسیں اپنی کنجی پعل جاؤگے۔",
"prefs-help-email-others": "تسیں آپ چن سکدے او جے توانوں ملیا جاوے ای-میل توں تواڈے جوڑ توں تواڈے ورتن والے یا گل بات صفے تے۔\nتواڈا ای-میل پتہ نئیں دسیا جاندا جدوں دوجے ورتن والے توانوں ملدے نیں۔",
"prefs-help-email-required": "ای میل پتہ چائیدا اے۔",
- "prefs-info": "مڈلی جانکاری",
+ "prefs-info": "مڈھلی جانکاری",
"prefs-i18n": "انٹرنیشنلائزیشن",
- "prefs-signature": "دسخط",
+ "prefs-signature": "دستخط",
"prefs-dateformat": "تریخ فارمیٹ",
"prefs-timeoffset": "ٹائم آفسیٹ",
"prefs-advancedediting": "ہور چنوتیاں",
"prefs-displayrc": "چنوتیاں دسو",
"prefs-displaywatchlist": "چنوتیاں دسو",
"prefs-diffs": "ڈفز",
- "userrights": "Ù\88رتÙ\86 Ù\88اÙ\84Û\8cاں دÛ\92 ØÙ\82اں دا سعاب کتاب",
+ "userrights": "Ù\88رتÙ\86 Ù\88اÙ\84Û\8cاں دÛ\92 ØÙ\82اں دا Øساب کتاب",
"userrights-lookup-user": "ورتن ٹولی بچاؤ",
"userrights-user-editname": "اک ورتن والا ناں لکھو:",
"editusergroup": "ورتن ٹولی چ تبدیلی",
"userrights-reason": "وجہ:",
"userrights-no-interwiki": "تساں نوں ورتن حق بدلن دی اجازت دوسرے وکی تے نئیں۔",
"userrights-nodatabase": "ڈیٹابیس $1 ہے ای نئیں یا لوکل نئیں۔",
- "userrights-nologin": "تسیں لازمی [[Special:UserLogin|log in]] اک مکھیا کھاتے نال اپنے حاں لئی۔",
- "userrights-notallowed": "تواڈے کھاتے نوں اے اجازت نئیں جے اے ورتن حق دے سکے۔",
"userrights-changeable-col": "ٹولیاں جیہڑیاں تسی بدل ےکدے او۔",
"userrights-unchangeable-col": "ٹولیاں جیہڑیاں تسی بدل نئیں سکدے",
"group": "ٹولی:",
"group-user": "ورتن آلے",
"group-autoconfirmed": "اپنے آپ منے گۓ ورتن والے",
"group-bot": "بوٹ",
- "group-sysop": "Ù\85Ú©Ú¾Û\8cÛ\93",
+ "group-sysop": "پربÙ\86دھک",
"group-bureaucrat": "بیوروکریٹ",
"group-suppress": "چھڈیا گیا",
"group-all": "(سارے)",
"group-user-member": "{{GENDER:$1|ورتن والا}}",
"group-autoconfirmed-member": "{{GENDER:$1|اپنے آپ منے گۓ ورتن والے}}",
"group-bot-member": "{{GENDER:$1|بوٹ}}",
- "group-sysop-member": "{{GENDER:$1|Ù\85Ú©Ú¾Û\8cا}}",
+ "group-sysop-member": "{{GENDER:$1|پربÙ\86دھک}}",
"group-bureaucrat-member": "{{GENDER:$1|بیوروکریٹ}}",
"group-suppress-member": "{{GENDER:$1|چھڈی گئی}}",
"grouppage-user": "{{ns:project}}:ورتن آلے",
"right-move-rootuserpages": "ورتن جڑ صفے لے چلو",
"right-movefile": "فائلاں لے چلو۔",
"right-suppressredirect": "جدوں صفے بل رۓ ہوو تے سورس توں ریڈائرکٹس ناں بناؤ",
- "right-upload": "فائل چڑہاؤ",
- "right-reupload": "پہلاں دی لکھی ہوئی فائل دے اتے لکھو",
- "right-reupload-own": "آپ چڑھائیاں ہوئیاں فائلاں تے لکھو۔",
- "right-reupload-shared": "رلی میڈیا فائلاں تے چڑھاؤ",
- "right-upload_by_url": "ۃڈي توں چرھائی گئی فاغلاں",
+ "right-upload": "فائل چڑھاؤ",
+ "right-reupload": "پہلاں دی لکھی ہوئی فائل دے اُتے لکھو",
+ "right-reupload-own": "آپ Ú\86Ú\91ھائÛ\8cاں Û\81Ù\88ئÛ\8cاں Ù\81ائÙ\84اں اÙ\8fتÛ\92 Ù\84Ú©Ú¾Ù\88Û\94",
+ "right-reupload-shared": "رÙ\84Û\8c Ù\85Û\8cÚ\88Û\8cا Ù\81ائÙ\84اں اÙ\8fتÛ\92 Ú\86Ú\91ھاؤ",
+ "right-upload_by_url": "URL توں چرھائیاں گئیاں فائلاں",
"right-purge": "جیہڑے صفے دی پک ناں ہووے اوس دی سائٹ کاشے صاف کرو",
- "right-autoconfirmed": "کج بچاۓ گۓ صفے نوں تبدیل کرو۔",
+ "right-autoconfirmed": "آئی پی بیسڈ ریٹ حداں توں پریشان نا ہوو",
"right-bot": "اپنے آپ ہوندے کم ورگا ورتو",
"right-nominornewtalk": "نکیاں تبدیلیاں کوئی نين گل بات والے صفے تے جیہڑیاں نویں سنیعے نون ٹران",
"right-apihighlimits": "API کھوجاں چ آخدی جد تک جاؤ",
"right-deleterevision": "مٹاؤ تے واپس لیاؤ صفیاں دیاں خاص ریوین",
"right-deletedhistory": "مٹایا ہویا ریکارڈ ویکھو بنا اودیاں لکھتاں دے۔",
"right-deletedtext": "مٹائی لکھت تے مٹیاں ریویناں دیاں تبدیلیاں ویکھو۔",
- "right-browsearchive": "مٹاۓ ہوۓ صفحے کھوجو",
+ "right-browsearchive": "مٹائے ہوئے صفحے کھوجو",
"right-undelete": "مٹایا صفحہ واپس لیاو",
"right-suppressrevision": "اوہ ریویناں نوں دوبارہ لیاؤ تے ویکھو جیہڑیاں مکھیاں توں لکیاں نیں۔",
"right-suppressionlog": "پرائیویٹ لاگز ویکھو",
"right-siteadmin": "ڈیٹابیس نوں کھولو تے بند کرو",
"right-override-export-depth": "5 تک صفے تے جڑے صفے لے کے جاؤ",
"right-sendemail": "دوجے ورتن والیاں نوں ای-میل کرو",
- "right-passwordreset": "کنجی بدلی ای-میلاں نوں وکھاؤ",
"newuserlogpage": "ورتنوالا بنان آلی لاگ",
"newuserlogpagetext": "اے ورتن والا بنان دی لاگ اے۔",
"rightslog": "ورتن والے دے حقاں دی لاگ",
"action-autopatrol": "کیا تساں تبدیلی دے نشاں تے گشت دا نشان لایا",
"action-unwatchedpages": "بنا اکھ تھلے رکھیاں صفیاں دی لسٹ ویکھو",
"action-mergehistory": "ایس صفے دا رکارڈ رلاؤ",
- "action-userrights": "ورتن حق چ تبدیلی کرو",
+ "action-userrights": "ورتن حق وچ تبدیلی کرو",
"action-userrights-interwiki": "ورتن حقاں نوں دوجے وکیاں تے تبدیل کرو۔",
"action-siteadmin": "ڈیٹابیس نوں کھولو یا بند کرو",
- "action-sendemail": "ای-میلاں Ù¾Û\8cجÙ\88",
+ "action-sendemail": "ای-میلاں بھÛ\8cجÙ\88",
"nchanges": "$1 {{PLURAL:$1|change|تبدیلیاں}}",
"enhancedrc-history": "پچھلا کم",
"recentchanges": "نویاں تبدیلیاں",
"rclistfrom": "$3 $2 توں ہونے آلیاں نویاں تبدیلیاں وکھاؤ",
"rcshowhideminor": "$1 معمولی تبدیلیاں",
"rcshowhideminor-show": "وکھاو",
- "rcshowhideminor-hide": "لکاؤ",
+ "rcshowhideminor-hide": "لُکاؤ",
"rcshowhidebots": "$1 بوٹ",
"rcshowhidebots-show": "وکھاؤ",
- "rcshowhidebots-hide": "لکاؤ",
+ "rcshowhidebots-hide": "لُکاؤ",
"rcshowhideliu": "$1 ورتن آلے اندر نیں",
- "rcshowhideliu-hide": "لکاؤ",
+ "rcshowhideliu-hide": "لُکاؤ",
"rcshowhideanons": "$1 گمنام ورتن والے",
"rcshowhideanons-show": "وکھاو",
- "rcshowhideanons-hide": "لکاؤ",
+ "rcshowhideanons-hide": "لُکاؤ",
"rcshowhidepatr": "$1 ویکھی گئی لکھائی",
"rcshowhidemine": "$1 میرے کم",
"rcshowhidemine-show": "وکھاو",
- "rcshowhidemine-hide": "لکاؤ",
+ "rcshowhidemine-hide": "لُکاؤ",
"rclinks": "آخری $2 دناں دیاں $1 تبدیلیاں وکھاؤ<br />$3",
"diff": "فرق",
"hist": "پچھلا کم",
"minoreditletter": "چھوٹا کم",
"newpageletter": "نواں",
"boteditletter": "بوٹ",
- "number_of_watching_users_pageview": "[ $1 ویکہ ریا اے{{PLURAL:$1|ورتن والا|والے}}]",
+ "number_of_watching_users_pageview": "[ $1 ویکھ رہیا اے{{PLURAL:$1|ورتن والا|والے}}]",
"rc_categories": "گٹھاں دی حد (وکھرے کرو \"|\")",
"rc_categories_any": "کوئی",
"rc-change-size-new": "$1 {{PLURAL:$1|بائٹ|بائٹاں}} تبدیلی مگروں",
"newsectionsummary": "/* $1 */ نواں پاسہ",
- "rc-enhanced-expand": "لمبی کہانی وکھاؤ (جاوا سکرپٹ چائیدا اے)",
- "rc-enhanced-hide": "لمبی کہانی لکاؤ",
+ "rc-enhanced-expand": "تفضیل وکھاؤ (جاوا سکرپٹ چائیدا اے)",
+ "rc-enhanced-hide": "تفضیل لکاؤ",
"recentchangeslinked": "ملدیاں جلدیاں تبدیلیاں",
"recentchangeslinked-feed": "ملدیاں جلدیاں تبدیلیاں",
"recentchangeslinked-toolbox": "رلدیاں ملدیاں تبدیلیاں",
"windows-nonascii-filename": "اے وکی فائل ناں جناں چ کوئی خاص کیریکٹر ہووے سپورٹ نئیں کردا۔",
"fileexists": "اک فائل ایس ناں نال پہلے ای ہے مہربانی کرکے <strong>[[:$1]]</strong> ویکھو\nاگر تھانوں یقین نئیں اگ تسیں اینون بدلنا چاندے اوہ۔\n[[$1|thumb]]",
"filepageexists": "ایس فائل دا دسن والا صفہ پہلے ای <strong>[[:$1]]</strong> تے بنایا جاچکیا اے، پر این ناں دی کوئی فائل ایس ویلے نئیں ہیگی۔\nسمری جیہڑی تسیں لکھو گے اوہ دسن والے صفے تے نئیں دسے گی۔\nاپنی سموری اوتھے دیکھن لئی توانوں اپنے ہتھیں اینون تبدیل کرنا پوے گا۔\n[[$1|thumb]]",
- "fileexists-extension": "ایس ناں دی شائل ہیگی اے: [[$2|thumb]]\n* چڑھائی گئی فائل دا ناں: <strong>[[:$1]]</strong>\n* ہیگی فائل دا ناں: <strong>[[:$2]]</strong>\nمہربانی کرکے وکھرا ناں چنو.",
+ "fileexists-extension": "ایس ناں دی فائل ہیگی اے: [[$2|thumb]]\n* چڑھائی گئی فائل دا ناں: <strong>[[:$1]]</strong>\n* ہیگی فائل دا ناں: <strong>[[:$2]]</strong>\nمہربانی کرکے وکھرا ناں چنو.",
"fileexists-thumbnail-yes": "ایہ اک ناپ دی مورت دی فائل دسدی اے ''(تھمبنیل)''.\n[[$1|thumb]]\nمہربانی کرکے فائل ویکھو <strong>[[:$1]]</strong>.\nاگر ویکھی فائل اوسے مورت دے اصل ناپ دی اے تے فیر ایہ ضروری نئیں جے اک فالتو تھمبنیل چڑھائی جاۓ۔.",
"file-thumbnail-no": "فائل ناں <strong>$1</strong> توں شروع ہوندا اے۔\nاے اک نکے ناپ دی مورت لگدی اے ''(تھمبنیل)''۔\nاگر تواڈے کول ایہ مورت پورے وڈے ناپ چ اے تسیں اینوں چڑھا سکدے او، نئیں تے فیر ایس فائل دا ناں بدلو۔",
"fileexists-forbidden": "ایس ناں دی فائل پہلے ای ہیگی اے تے اودے اتے نئیں لکھیا جاسکدا۔\nاگر تسیں ہلے وی اپنی فائل چڑھاناں چاندے اوہ مہربانی کرکے نویں ناں نال چڑھاؤ۔\n[[File:$1|تھمب|وشکار|$1]]",
"uploadwarning": "فائل چڑانے توں خبردار",
"uploadwarning-text": "تھلے فائل بارے دس بدلو تے فیر کوشش کرو۔",
"savefile": "فائل بچاؤ",
- "uploaddisabled": "فائل چڑانا بند اے",
+ "uploaddisabled": "فائل چڑھانا بند اے",
"copyuploaddisabled": "یو آر این لے چڑھانا نکارہ کیتا۔",
- "uploaddisabledtext": "فائل چڑانے چ رکاوٹ اے۔",
+ "uploaddisabledtext": "فائل چڑھانے وچ رکاوٹ اے۔",
"php-uploaddisabledtext": "پی ایچ پی چ فائل چڑھانا نکارہ کیتا ہویا جے۔\nمہربانی کرکے فائل چڑھان دی سیٹنک ویکھو۔",
- "uploadscripted": "ایس فائل چ ایچ ٹی ایم ایل یا سکرپٹ کوڈ ہیگا اے جینوں کسے ویب براؤزر نے غلط سمجیا ہووے۔",
+ "uploadscripted": "ایس فائل چ ایچ ٹی ایم ایل یا سکرپٹ کوڈ ہیگا اے جینوں کسے ویب براؤزر نے غلط سمجھیا ہووے۔",
"uploadvirus": "اس فائل چ وائرس اے! تفصیل: $1",
"uploadjava": "ایہ فائل اک زپ فائل اے جیدے چ جاوا کلاس فائل اے۔\nجاوا فائلاں نوں چڑھان دی اجازت نئیں کیوں جے او بچاؤ ولاں توں بچ کے لنکدے نیں۔",
"upload-source": "سورس فائل",
"backend-fail-readonly": "سٹوریج بیکنڈ \"$1\" ایس ویلے صرف پڑھیا جاسکدا اے۔ وجہ دتی اے: \"$2\"",
"backend-fail-synced": "فائل \"$1\" اندرلے سٹوریح بیکنڈ چ اک کچی حالت چ اے۔",
"backend-fail-connect": "سٹوریج بیکنڈ \"$1\" نال جوڑ ناں ہوسکیا۔",
- "backend-fail-internal": "اک نان سمج ج ان والی غلطی سٹوریج بیکنڈ \"$1\" چ ہوؤی۔",
+ "backend-fail-internal": "اک ن سمجھ وچ آن والی غلطی سٹوریج بیکنڈ \"$1\" وچ ہوئی۔",
"backend-fail-contenttype": "\"$1\" تے فائل نوں سٹور کرن لئی فائل دے اندر کی اے نئیں پتہ لگ سکیا۔",
"backend-fail-batchsize": "سٹوریج بیکنڈ نوں $1 فائل دا بیچ {{PLURAL:$1|اوپریشن|اوپریشن}} دتا گیا؛ ایدی حد $2 {{PLURAL:$2|اوپریشن|اوپریشن}} جے۔",
"lockmanager-notlocked": "\"$1\" ناں کھولیا جاسکیا؛ اینوں تالا نئیں سی لگیا۔",
"upload_source_file": " (تواڈے کمپیوٹر تے اک فائل)",
"listfiles-summary": "ایس خاص صفے تے ساریاں چڑھائیاں فائلاں دسیاں نیں۔\nجدوں ورتن والا اینوں فلٹر کرے، صرف اوہ فائلاں جتھے ورتن والے نیں نویں ورین دیاں فائلاں چڑھاغیاں ہون دسیاں جاندیاں نیں۔",
"listfiles_search_for": "میڈیا نان نوں کھوجو:",
- "imgfile": "فائل",
+ "imgfile": "تصویر",
"listfiles": "فائل لسٹ",
"listfiles_thumb": "نکی مورت",
"listfiles_date": "تریخ",
"listfiles_size": "ناپ",
"listfiles_description": "تفصیل",
"listfiles_count": "ورژن",
- "file-anchor-link": "فائل",
+ "file-anchor-link": "تصویر",
"filehist": "فائل ورتن",
"filehist-help": "فائل نو اس ویلے دی حالت وچ ویکھن واسطے تاریخ/ویلے تے کلک کرو۔",
"filehist-deleteall": "سب نوں مٹاؤ",
"filehist-user": "ورتن والا",
"filehist-dimensions": "پاسے",
"filehist-filesize": "فائل دا ناپ",
- "filehist-comment": "راۓ",
+ "filehist-comment": "رائے",
"imagelinks": "فائل ورتن",
"linkstoimage": "تھلے دتے گۓ {{PLURAL:$1|$1 صفے}} اس فائل نال جڑدے نے",
"linkstoimage-more": "$1 توں چوکھے {{PLURAL:$1|صفہ جوڑ|صفہ جوڑ}} ایس فائل نوں۔\nتھلے دتی گئی لسٹ {{PLURAL:$1|پہلا صفہ جوڑ|پہلا $1 صفہ جوڑ}} ایس فائل نال دسدی اے۔\nاک خاص [[Special:WhatLinksHere/$2|پوری لسٹ]] ہیگی اے۔",
"nolinkstoimage": "اس فائل نال جڑیا کوئی صفحہ نہیں۔",
"morelinkstoimage": "ایس فائل نوں [[Special:WhatLinksHere/$1|ہور جوڑ]] ویکھو",
- "linkstoimage-redirect": "$1 (فائل رÛ\8cÚ\88ائÛ\8cدکٹ) $2",
+ "linkstoimage-redirect": "$1 (فائل Ù\85Ú\91 رجÙ\88ع) $2",
"duplicatesoffile": "تھلے دتی گئی {{PLURAL:$1|فائل دوہری اے|1$ فائل دوہری نیں}} ایس فائل دیاں ([[Special:FileDuplicateSearch/$2|ہور گلاں]]) کاپی نیں۔",
"sharedupload": "اے فائل $1 مشترکہ اپلوڈ اے تے اے دوجے منصوبے وی استعمال کر سکدے نے۔",
"sharedupload-desc-there": "ایہ فائل $1 توں اے تے اینوں دوجے ویونت وی ورت سکدے نیں۔\nمہربانی کرکے [$2 فائل دس صفہ] ویکھو ہور دساں لئی۔",
"download": "فائل کاپی کرو",
"unwatchedpages": "اندیکھے صفحے",
"listredirects": "لسٹ ریڈائریکٹس",
- "unusedtemplates": "نا استعمال ہوۓ سچے",
+ "unusedtemplates": "نا استعمال ہوۓ سانچے",
"unusedtemplatestext": "ایس صفے چ سارے صفیاں دی لسٹ اے {{ns:ٹمپلیٹ}} تے جیہڑے کسے ہور صفے نال نئیں رلے۔ ٹمپلیٹ تے ہور جوڑ ویکھ لو مٹان توں پہلے۔",
"unusedtemplateswlh": "دوجے جوڑ",
"randompage": "رلے ملے صفے",
"statistics-header-pages": "صفے دے آنکڑے",
"statistics-header-edits": "تبدیلیاں دا آنکڑہ",
"statistics-header-users": "ورتن آلیاں دا سعاب کتاب",
- "statistics-header-hooks": "دÙ\88جÛ\92 سعاب کتاب",
+ "statistics-header-hooks": "دÙ\88جÛ\92 Øساب کتاب",
"statistics-articles": "لسٹ صفے",
"statistics-pages": "صفحے",
"statistics-pages-desc": "اس وکی دے سارے صفحے، گل بات، اگے ٹور آلے تے دوجے صفحے ملا کے۔",
"listusers-creationsort": "بنان تریخ توں وکھریاں کرو۔",
"usereditcount": "$1 {{PLURAL:$1|تبدیلی|تبدیلیاں}}",
"usercreated": "{{GENDER:$3|بنائی گئی}} نوں $1 تے $2",
- "newpages": "نویں صفے",
+ "newpages": "نویں صفحے",
"newpages-username": "ورتن آلا ناں:",
"ancientpages": "سب توں پرانے صفے",
"move": "لے چلو",
"suppress": "چھڈیا گیا",
"querypage-disabled": "اے صفہ ناکارہ کیتا گیا پرفارمنس وجہ توں۔",
"booksources": "کتاب توں اتہ پتہ",
- "booksources-search-legend": "اس مضمون تے کتاباں لبو",
+ "booksources-search-legend": "اس مضمون تے کتاباں لبھو",
"booksources-search": "کھوج",
"booksources-text": "تھلے اوناں جوڑاں دی لسٹ اے جتھے نویاں تے پرانیاں کتاباں وکدیاں نیں، تے ہور وی جانکاری ہوسکدی اے کتاباں بارے تسیں ویکھدے او:",
"booksources-invalid-isbn": "دتی گئی آئی ایس بی این چلدی نئیں لکدی ؛ اصل سورس نوں چیک کرو کاپی کرن توں پہلے۔",
"activeusers-count": "$1 {{PLURAL:$1|تبدیلی|تبدیلیاں}} پچھلے{{PLURAL:$3|دن|$3 دن}} چ",
"activeusers-from": "ورتن والے ایس توں شروع ہون والے دسو:",
"activeusers-noresult": "کوئی ورتن والا نئیں لبیا۔",
- "listgrouprights": "ورتن ٹرلی حق",
+ "listgrouprights": "ورتن گروہ حق",
"listgrouprights-summary": "تھلے اک لسٹ اے ورتن ٹولیاں دی ای وکی تے، اپنے رلدے حقاں نال۔ \n\nہربندے دے حقاں [[{{MediaWiki:Listgrouprights-helppage}}|ہور جانکاری]]",
"listgrouprights-key": "* <span class=\"listgrouprights-granted\">حق دتا گیا</span>\n* <span class=\"listgrouprights-revoked\">حق راپس</span>",
"listgrouprights-group": "ٹولی",
"listgrouprights-removegroup-self": "ہٹاؤ {{PLURAL:$2|ٹولی|ٹولیاں}} اپنے کھاتے چوں: $1",
"listgrouprights-addgroup-self-all": "ساریاں ٹولیاں کٹھیاں کرو کھاتہ لئی",
"listgrouprights-removegroup-self-all": "ایس کھاتے توں ساریاں ٹولیاں ہٹاؤ",
- "mailnologin": "Ù\86اں Ù¾Û\8cØ Ù¾ØªÛ\81",
+ "mailnologin": "پتÛ\81 Ù\86ئÛ\8cÚº بھÛ\8cجÛ\8cا",
"mailnologintext": "تسیں لازمی [[Special:UserLogin|لاگان]] ہوو تے اک پکا ای-میل پتہ تواڈی [[Special:Preferences|تانگ]] چ ہووے تاں جے دوجے ورتن والے توانوں ای-میل کرسکن۔",
"emailuser": "اس ورتن والے نو ای میل کرو",
"emailpagetext": "تسیں تھلے دتا گیا فارم ورت سکدے اوہ ایس ورتن والے نوں ای-میل سنیعہ کلن لئی۔ \nای-میل پتہ تساں [[Special:Preferences|تواڈے ورتن تانکآں]] چ پایا اے ای-میل توں تواڈا پتہ دسے گا جتھے چٹھی چلی تاں جے چٹھی لین والا توانوں سدا جواب دے سکے۔",
"emailnotarget": "لین والے ۂئی ناں ہون والا ورتن ناں۔",
"emailtarget": "لین والے دا ورتن ناں لکھو",
"emailusername": "ورتن آلے دا ناں:",
- "emailusernamesubmit": "Ù¾Û\8cجÙ\88",
+ "emailusernamesubmit": "بھÛ\8cجÙ\88",
"email-legend": "دوجے ورتن والے نوں {{سائٹ ناں}} ای-میل پیجو",
"emailfrom": "توں:",
"emailto": "نوں:",
"emailsubject": "مضمون:",
- "emailmessage": "سنیعا:",
- "emailsend": "Ù¾Û\8cجÙ\88",
- "emailccme": "میرے سنیعÛ\92 دÛ\8c Ù\85Û\8cÙ\86Ù\88Úº اک اÛ\8c-Ù\85Û\8cÙ\84 کاپÛ\8c Ù¾Û\8cجÙ\88Û\94",
- "emailccsubject": "تھواڈے سنیعے دی کاپی $1 نوں:$2",
- "emailsent": "ای-میل Ù¾Û\8cج دتÛ\8c گئÛ\8cÛ\94",
- "emailsenttext": "تھواڈا ای-میل سنیعہ پیج دتا گیا اے۔",
+ "emailmessage": "سنیہہ:",
+ "emailsend": "بھÛ\8cجÙ\88",
+ "emailccme": "میرے سنیÛ\81Û\92 دÛ\8c Ù\85Û\8cÙ\86Ù\88Úº اک اÛ\8c-Ù\85Û\8cÙ\84 کاپÛ\8c بھÛ\8cجÙ\88Û\94",
+ "emailccsubject": "تھواڈے سنیہے دی کاپی $1 نوں:$2",
+ "emailsent": "ای-میل بھÛ\8cج دتÛ\8c گئÛ\8cÛ\94",
+ "emailsenttext": "تھواڈا ای-میل سنیہہ پیج دتا گیا اے۔",
"emailuserfooter": "ایہ ای-میل $1 نے پیجی $2 نوں {{SITENAME}} تے \"ای-میل ورتن\" فنکشن نال",
- "usermessage-summary": "پربندھ چھڈن سنیعہ",
+ "usermessage-summary": "پربندھ چھڈن سنیہہ",
"usermessage-editor": "پربندھ ڈاکیا۔",
"watchlist": "میریاں اکھاں تھلے رکھی لسٹ",
"mywatchlist": "میری اکھ تھلے رکھی لسٹ",
"watchlistfor2": "$1 تے $2 لی",
"nowatchlist": "تھواڈی اکھ تھلے لسٹ چ کوئی شے نئیں۔",
"watchlistanontext": "مہربانی کرکے $1 نوں ویکھو یا اپنی اکھ تھلے رکھی لسٹ نوں بدلو۔",
- "watchnologin": "لاگ ان نئیں ہوۓ او",
+ "watchnologin": "لاگ ان نئیں ہوئے او",
"addwatch": "اکھ تھلے کرو",
"addedwatchtext": "اے صفحہ \"[[:$1]] تواڈیاں اکھاں تھلے آگیا اے۔<br />\nمستقبل وچ اس صفحہ تے ایدے بارے چ گل بات نویاں تبدیلیاں وچ موٹے نظر آن گے تا کہ آسانی نال کھوجیا جا سکے۔",
"removewatch": "اکھ تھلیوں ہٹاؤ",
"protectlogpage": "بچت لاگ",
"protectlogtext": "تھلے صفے نوں بچان لئی تبدیلیاں دی لسٹ اے۔\n[[Special:ProtectedPages|بچاۓ صفیاں دی لسٹ]] ویکھو ہن دے اوپریشنل صفیاں دے بچاؤ دی لسٹ ویکھو۔",
"protectedarticle": "\"[[$1]]\" بچایا گیا اے",
- "modifiedarticleprotection": "\"[[$1]]\" آستے بچاؤ بدلیا",
+ "modifiedarticleprotection": "\"[[$1]]\" واسطے بچاؤ بدلیا",
"unprotectedarticle": "\"[[$1]]\" توں بچاؤ ہٹا لیا گیا۔",
"movedarticleprotection": "بچاؤ سیٹنگ \"[[$2]]\" توں \"[[$1]]\" ول پلٹی۔",
"protect-title": "\"$1\" لئی بچاؤ پدھر تبدیل۔",
"protect-cantedit": "تسی اس صفحے دے حفاظتی درجے نوں نہیں بدل سکدے کیونکہ توانوں اس کم دی اجازت نہیں اے۔",
"protect-othertime": "دوجے ویلے:",
"protect-othertime-op": "دوجے ویلے:",
- "protect-existing-expiry": "ہن دا مکن ویاہ: $3، $2",
+ "protect-existing-expiry": "مُکن ویلہ حالے ہیگا اے: $3، $2",
"protect-otherreason": ":دوجی وجہ",
"protect-otherreason-op": "ہور وجہ",
"protect-dropdown": "*بچاؤ دیاں عام وجہاں\n** زیادہ وینڈالزم\n** زیادہ سپامنگ\n** بے مقصد لکھت چگڑے\n** زیادہ ویکھیا جان والا صفہ",
"restriction-edit": "لکھو",
"restriction-move": "لے چلو",
"restriction-create": "بناؤ",
- "restriction-upload": "اتے چاڑو",
+ "restriction-upload": "اُتے چاڑھو",
"restriction-level-sysop": "پوری طرح بچایا ہویا",
"restriction-level-autoconfirmed": "کج بچایا گیا",
"restriction-level-all": "کسے وی درجے تے",
"undelete-cleanup-error": "ناں ورتی گئی آرکائیو فائل \"$1\" دے مٹانے چ غلطی۔",
"undelete-missing-filearchive": "فائل آرکائیو آئی ڈی $1 نوں واپس کرن چ ناکامی کیوں جے اے ڈیٹابیس نئیں اے۔\nخورے اے پہلے ای مٹ چکی ہووے۔",
"undelete-error": "مٹاۓ صفے واپس لیان چ غلطی",
- "undelete-error-short": "Ù\81اغÙ\84 Ù\88اپس کرÙ\86 چ غلطی: $1",
+ "undelete-error-short": "Ù\81ائÙ\84 Ù\88اپس کرÙ\86 Ù\88چ غلطی: $1",
"undelete-error-long": "فائل واپس کرن لگیاں غلطیاں ہوئیاں:\n$1",
"undelete-show-file-confirm": "تساں نوں کیا پک اے جے تسیں فائل \"<nowiki>$1</nowiki>\" دی مٹائی ریوین $2 توں $3 تک ویکھنا چاندے او؟",
"undelete-show-file-submit": "ہاں جی",
"month": "مہینے توں (تے پہلاں):",
"year": "سال توں (تے پہلاں):",
"sp-contributions-newbies": "صرف نویں ورتن والیاں دے کم وکھاؤ",
- "sp-contributions-newbies-sub": "نویں کھاتیاں آستے",
- "sp-contributions-newbies-title": "نویں کھاتے چ ورتن والے دے کم",
+ "sp-contributions-newbies-sub": "نویاں کھاتےآں واسطے",
+ "sp-contributions-newbies-title": "نویں کھاتے وچ ورتن والے دے کم",
"sp-contributions-blocklog": "لاگ روکو",
"sp-contributions-deleted": "ورتن والے دے کم مٹادتے گۓ۔",
"sp-contributions-uploads": "چڑھائیاں فائلاں",
"sp-contributions-logs": "لاگز",
"sp-contributions-talk": "گل بات",
- "sp-contributions-userrights": "Ù\88رتÙ\86 Ù\88اÙ\84Û\8cاں دÛ\92 ØÙ\82اں دا سعاب کتاب",
+ "sp-contributions-userrights": "Ù\88رتÙ\86 Ù\88اÙ\84Û\8cاں دÛ\92 ØÙ\82اں دا Øساب کتاب",
"sp-contributions-blocked-notice": "ایس ورتن والے تے اجکل روک اے۔ \nروکن لاگ چ ایدے بارے تھلے لکھیا اے۔",
"sp-contributions-blocked-notice-anon": "ایس آئی پی پتے تے اجکل روک اے۔ \nروکن لاگ چ ایدے بارے تھلے لکھیا اے۔",
- "sp-contributions-search": "حصے پان آلیاں دی تلاش",
+ "sp-contributions-search": "حصے پاؤن آلیاں دی تلاش",
"sp-contributions-username": "آئی پی پتہ یا ورتن آلا ناں:",
"sp-contributions-toponly": "صرف اوہ تبدیلیاں وکھاؤ جیہڑیاں سب توں نیڑے ویلے ہویاں نیں۔",
"sp-contributions-submit": "کھوجو",
"whatlinkshere": "ایتھے کیدا جوڑ اے",
- "whatlinkshere-title": "اÙ\88 صÙ\81Û\92 جÛ\8cڑے \"$1\" نال جڑے نیں",
+ "whatlinkshere-title": "اÙ\88 صÙ\81Û\92 جÛ\81ڑے \"$1\" نال جڑے نیں",
"whatlinkshere-page": "صفہ:",
"linkshere": "تھلے دتے گۓ صفے اس دے نال جڑدے نے '''[[:$1]]''':",
"nolinkshere": "'''[[:$1]]''' دے نال کسے دا جوڑ نہیں",
"whatlinkshere-prev": "{{PLURAL:$1|پچھلا $1ا|پچھلا}}",
"whatlinkshere-next": "{{PLURAL:$1|اگلا $1|اگلا}}",
"whatlinkshere-links": "← جوڑ",
- "whatlinkshere-hideredirs": "$1 ریڈائریکٹس",
+ "whatlinkshere-hideredirs": "$1 ریڈائریکٹ",
"whatlinkshere-hidetrans": "$1 ٹرانسکلوژن",
"whatlinkshere-hidelinks": "$1 جوڑ",
"whatlinkshere-hideimages": "$1 مورت جوڑ",
"ipb-unblock": "ورتن والا یا آئی پی پتہ کھولو",
"ipb-blocklist": "روکیاں گياں نوں ویکھو",
"ipb-blocklist-contribs": "$1 دے کم",
+ "ipb-blocklist-duration-left": "سجے",
"unblockip": "ورتن آلے تے روک بند کرو",
"unblockiptext": "تھلے دتا گیا فارم ورتو لکھن دی ازادی لین لئی پہلاں توں روکے آئی پی پتے یا ورتن ناں لئی۔",
"ipusubmit": "ایس روک نوں ہٹاؤ",
"semiprotectedpagemovewarning": "'''نوٹ:''' ایہ صفہ نوں بچایا گیا اے تاں جے کھاتے والے ورتن والے ای اینوں ایتھں لجا سکن۔\nآخری لاگ انٹری اتے پتے لئی تھلے دتی گئی اے:",
"move-over-sharedrepo": "== فائل ہیگی ==\nفائل نون ایس ٹائٹل[[:$1]] ول لجانا اک ہور فائل تے اینوں چڑھا دے گا۔.",
"file-exists-sharedrepo": "جیہڑا فائل ناں چنیاں گیا جے اوہ پہلے ای اک سانجی چ ورتیا جاریا اے۔\nمہربانی کرکے اک ہور ناں چنو۔",
- "export": "صفحے باہر Ù¾Û\8cجÙ\88",
+ "export": "صفحے باہر بھÛ\8cجÙ\88",
"exporttext": "تسیں اے لکھت اگے پیج سکدے او تے لکھت تریخ اک خاص صفے دی یا کسے ایکس ایم ایل چ صفیاں صفیاں چ لپیٹی۔ اے کسے ہور وکی چ وی لیایا جاسکدا اے میڈیاوکی ورتدیاں [[Special:Import|صفے لیاؤ]] دی راہ۔\n\nصفے بار لجان لئی، تھلے دتے گۓ لکھت ڈبے چ سرناواں لکھو، اک سرناواں اک لائن چ اور چنوں کیا جے تسیں ہن دی ریوین چاندے پرانیاں دے ناۂ نال، رکارڈ صفہ لین چ، یا ہن دی ریوین آخری تبدیلی دی جانکاری نال۔\n\nدوجے کیس چ تسیں جوڑ وی ورت سکدے او، ادھارن لئی [[{{#Special:Export}}/{{MediaWiki:Mainpage}}]] صفہ \"[[{{MediaWiki:Mainpage}}]]\" لئی۔",
"exportall": "سارے صفے لجاؤ",
"exportcuronly": "صرف ہن والیاں ریوین نال نئں۔ پورا ریکارڈ نیں۔",
"export-download": "فائل دے طور تے بچاؤ",
"export-templates": "سچہ شامل کرو",
"export-pagelinks": "جوڑ والے صفے جوڑو ایتھوں تک:",
- "allmessages": "سسٹم سنیآ",
+ "allmessages": "سسٹم سنیہہ",
"allmessagesname": "ناں",
"allmessagesdefault": "ڈیفالٹ لکھائی",
"allmessagescurrent": "موجودہ لکھائی",
"importfailed": "لیانا فیل: <nowiki>$1</nowiki>",
"importunknownsource": "انجان لیان سورس ٹائپ",
"importcantopen": "لیاندی گئی فائل نئیں کھولی جاسکی",
- "importbadinterwiki": "Ù¾Û\8cÚ\91ا اÙ\86ٹرÙ\88Ú©Û\8c Ù\84Ù\86Ú©",
+ "importbadinterwiki": "بھÛ\8cÚ\91ا اÙ\86ٹرÙ\88Ú©Û\8c Ù\84Ù\86Ú©",
"importsuccess": "لے کے آگۓ آں!",
"importnosources": "کوئی ٹرانسوکی امپورٹ سورسز نئیں دسیا گیا تے ڈائرکٹ رکارڈ چڑھاۓ کم نئیں کر رۓ۔",
"importnofile": "لیاندی ہوئی کوئی فائل نئیں چڑہائی گئی۔",
"import-error-special": "\"$1\" صفہ نئیں لیایا گیا کیوں جے ایہ اک خاص ناں تھان توں نال جڑدا اے جیءرا صفیاں لئی نئیں۔",
"import-error-invalid": "\"$1\" صفہ نئیں لیایا گیا ایدا ناں نئیں رکھیا جاسکدا۔",
"importlogpage": "لاگ لے کے آؤ",
- "importlogpagetext": "پربنھک لیان صفیاں دا ایڈٹ رکارڈ نال دوجے وکیاں توں۔",
+ "importlogpagetext": "پربندھک لیان صفیاں دا ایڈٹ رکارڈ نال دوجے وکیاں توں۔",
"import-logentry-upload-detail": "$1 {{PLURAL:$1|ریوین|ریویناں}}",
"import-logentry-interwiki-detail": "$1 {{PLURAL:$1|ریوین|ریویناں }} $2 توں",
"javascripttest": "JavaScript ٹیسٹنگ",
"tooltip-ca-talk": "اس صفے بارے گل بات",
"tooltip-ca-edit": "اس صفے تے لکھو",
"tooltip-ca-addsection": "اس گل بات وچ حصہ لے لو۔",
- "tooltip-ca-viewsource": "اے صفہ بچایا گیا اے۔\nتسی اینو صرف ویکھ سکدے او۔",
- "tooltip-ca-history": "اس صفے دا پرانہ ورژن۔",
+ "tooltip-ca-viewsource": "اے صفہ بچایا گیا اے۔\nتسی اینوں صرف ویکھ سکدے او۔",
+ "tooltip-ca-history": "اس صفے دا پرانا ورژن۔",
"tooltip-ca-protect": "اس صفے نوں بچاؤ",
"tooltip-ca-unprotect": "ایس صفے دا بچاؤ بدلو۔",
"tooltip-ca-delete": "اس صفے نوں مٹاؤ",
"tooltip-ca-watch": "اس صفحہ تے نظر رکھو",
"tooltip-ca-unwatch": "اس صفحے توں نظر ہٹاؤ",
"tooltip-search": "کھوج {{SITENAME}}",
- "tooltip-search-go": "اس Ù\86اں دÛ\92 صÙ\81Û\92 تÛ\92 Ú\86Ù\84Ù\88Ø\8c اگر ایہ ہیگا اے",
- "tooltip-search-fulltext": "اس شبد نوں صفیاں چ لبو",
- "tooltip-p-logo": "پہلا صفہ",
+ "tooltip-search-go": "اس Ù\86اں دÛ\92 صÙ\81Û\92 تÛ\92 Ú\86Ù\84Ù\88Ø\8c جÛ\92 ایہ ہیگا اے",
+ "tooltip-search-fulltext": "اس شبد نوں صفحےآں وچ لبھو",
+ "tooltip-p-logo": "پہلا صفہ ویکھو",
"tooltip-n-mainpage": "پہلے صفے نوں ویکھو",
"tooltip-n-mainpage-description": "پہلے صفے تے جاؤ",
- "tooltip-n-portal": "پربندھ بارے ، تسیں کی کر سکدے او تے کنج کھوج سکدے او",
+ "tooltip-n-portal": "پربندھ بارے ، تسیں کیہ کر سکدے او تے کنج کھوج سکدے او",
"tooltip-n-currentevents": "موجودہ حالات تے پچھلیاں معلومات دیکھو",
"tooltip-n-recentchanges": "وکی تے نویاں تبدیلیاں۔",
"tooltip-n-randompage": "کوئی صفہ کھولو۔",
- "tooltip-n-help": "Ù\85دد Ù\84Û\8cÙ\86Û\92 Ø¢Ù\84ی جگہ۔",
+ "tooltip-n-help": "Ù\84بھÙ\86 دی جگہ۔",
"tooltip-t-whatlinkshere": "اس نال جڑے سارے وکی صفے۔",
"tooltip-t-recentchangeslinked": "اس صفے توں جڑے صفیاں چ نویاں تبدیلیاں",
"tooltip-feed-rss": "RSS feed for this page",
"tooltip-t-emailuser": "اس ورتن والے نو ای میل کرو",
"tooltip-t-upload": "فائل چڑھاؤ",
"tooltip-t-specialpages": "سارے خاص صفیاں دی اک لسٹ",
- "tooltip-t-print": "اس صفے دا چھپنے آلا ورژن ویکھو",
+ "tooltip-t-print": "اس صفحے دا چھپن والا ورژن ویکھو",
"tooltip-t-permalink": "اس صفے دے اس ورژن نال پکا جوڑ",
"tooltip-ca-nstab-main": "مواد آلا صفہ ویکھو",
"tooltip-ca-nstab-user": "ورتن آلے دا صفہ ویکھو",
"tooltip-ca-nstab-special": "ایہ اک خاص صفہ اے، تے ایہنوں لکھیا نئی جا سکدا۔",
"tooltip-ca-nstab-project": "وینت دا صفہ ویکھو",
"tooltip-ca-nstab-image": "فائل دا صفہ ویکھو",
- "tooltip-ca-nstab-mediawiki": "پربÙ\86دھ سÙ\86Û\8cعہ ویکھو",
+ "tooltip-ca-nstab-mediawiki": "Ù\86ظاÙ\85Û\8c سÙ\86Û\8cÛ\81ہ ویکھو",
"tooltip-ca-nstab-template": "سانچہ ویکھو",
"tooltip-ca-nstab-help": "مدد دا صفحہ ویکھو",
"tooltip-ca-nstab-category": "کیٹاگری آلا صفہ ویکھو",
"spamprotectiontitle": "سپام بچاؤ فلٹر",
"spamprotectiontext": "لکھت جیہڑی تسی بچانا چاندے او اونوں سپام فلٹر نے روکیا اے۔\nایہ خورے کسے جوڑ دی بارلے بلیکلسٹڈ سائٹ نال ہون توں ہوئی اے۔",
"spamprotectionmatch": "تھلے دتی گئی لکھت نے ساڈے سپام فلٹر نوں چلایا: $1",
- "spambot_username": "Ù\85Û\8cÚ\88Û\8cاÙ\88Ú©Û\8c سپاÙ\85 سفائی",
+ "spambot_username": "Ù\85Û\8cÚ\88Û\8cاÙ\88Ú©Û\8c سپاÙ\85 صفائی",
"spam_reverting": "آخری ریوین ول جیدے چ $1 دے جوڑ ناں ہون۔",
"spam_blanking": "سارے ریوین جناں چ $1 نوں جوڑ نیں، طاف کیتا جاریا اے۔",
"simpleantispam-label": "سپام روک پھاٹک\nDo <strong>not</strong> fill this in!",
"pageinfo-watchers": "ویکھن والے",
"pageinfo-edits": "تبدیلیاں گنتی",
"pageinfo-authors": "وکھرے لکھاریاں دی گنتی",
- "pageinfo-toolboxlink": "صفہ وات",
+ "pageinfo-toolboxlink": "صفحہ جانکاری",
"markaspatrolleddiff": "ویکھے گۓ دا نشان لاؤ",
"markaspatrolledtext": "ایس صفے تے ویکھن دا نشان لاؤ",
"markedaspatrolled": "ویکھن دا نشان لاؤ",
"file-info": "فائل ناپ: $1، MIME ٹائپ: $2",
"file-info-size": "پکسل:$1 × $2, فائل سائز: $3, مائم ٹائپ: $4",
"file-info-size-pages": "$1 × $2 پکسل, فائل ناپ: $3, مائم ٹائپ: $4, $5 {{PLURAL:$5|صفہ|صفے}}",
- "file-nohires": "اس تÙ\88Úº Ù\88Ú\88Û\8c Ù\81Ù\88Ù¹Ù\88 موجود نہیں۔",
+ "file-nohires": "اس تÙ\88Úº Ù\88Ú\88Û\8c Ù\85Ù\88رت موجود نہیں۔",
"svg-long-desc": "ایس وی جی فائل، پکسل:$1 × $2، فائل سائز: $3",
"show-big-image": "اصلی فائل",
"show-big-image-preview": "ایس وکھالے دا ناپ: $1۔",
"watchlisttools-view": "ملدیاں ہوئیاں تبدیلیاں ویکھو",
"watchlisttools-edit": "اکھ تھلے رکھے ہوۓ صفحیاں نوں ویکھو تے تبدیل کرو",
"watchlisttools-raw": "کچی اکھ تھلے رکھی ہوئی نو تبدیل کرو",
+ "hijri-calendar-m1": "محرم",
+ "hijri-calendar-m2": "صفر",
+ "hijri-calendar-m3": "ربیع الاول",
+ "hijri-calendar-m4": "ربیع الثانی",
+ "hijri-calendar-m5": "جمادی الاول",
+ "hijri-calendar-m6": "جمادی الثانی",
+ "hijri-calendar-m7": "رجب",
+ "hijri-calendar-m8": "شعبان",
+ "hijri-calendar-m9": "رمضان",
+ "hijri-calendar-m10": "شوال",
+ "hijri-calendar-m11": "ذوالقعدہ",
+ "hijri-calendar-m12": "ذوالحجہ",
"signature": "[[{{ns:user}}:$1|$2]] ([[{{ns:user_talk}}:$1|talk]])",
"duplicate-defaultsort": "'''خبردار:''' ڈیفالٹ چابی \"$2\" پہلی ڈیفالٹ چابی \"$1\" دے اتے لگ گئی اے۔",
"version": "ورژن",
"feedback-thanks": "شکریہ ! تواڈی صلاع صفہ \"[$2 $1]\" تے چاڑ دتی گئی اے۔",
"searchsuggest-search": "کھوج",
"searchsuggest-containing": "بند کر ریا اے۔۔۔",
- "api-error-badaccess-groups": "تھوانوں ایس وکی تے فائلاں چڑھان دی اجازت نئیں۔",
"api-error-badtoken": "اندر دی غلطی: برا ٹوکن",
- "api-error-copyuploaddisabled": "یو آر ایل نال فائل چڑھانا ایس سرور تے نکام",
- "api-error-duplicate": "ایتھے {{PLURAL:$1|ہے اک ہور فائل|ہین کچ ہور فائلاں}} ایسے مواد نال ایس تھاں تے پہلے ای ہے۔",
- "api-error-duplicate-archive": "ایتھے {{PLURAL:$1|سی اک ہور فائل|سن کج ہور فائلاں}} پہلے ای ایس تھاں تے اے اکو جے مواد نال پر {{PLURAL:$1|اے سی|اوہ سن}} مٹایا گیا۔",
- "api-error-empty-file": "جیڑی فائل تسی دسی اے اوہ حالی اے۔",
"api-error-emptypage": "نواں بناریا آن، خالی صفیاں دی اجازت نئیں۔",
- "api-error-fetchfileerror": "اندر دی غلطی: فائل لیندیاں کوئی غلطی ہوئی۔",
- "api-error-file-too-large": "جیڑی فائل تسی دسی اے اوہ بوت وڈی اے۔",
- "api-error-filename-tooshort": "اس فائل دا ناں بوت چھوٹا اے۔",
- "api-error-filetype-banned": "اس قسم دی فائل تے پابندی اے۔",
- "api-error-filetype-banned-type": "$1 {{PLURAL:$4|اینج دی فائل دی اجازت نئیں|اینج دیاں فائلاں دی اجازت نئیں}} اجازت دتی {{PLURAL:$3|فائل ٹائپ اے|فائل ٹائپ نیں}} $2۔",
- "api-error-filetype-missing": "فائل چ ایکسٹنشن نئیں اے۔",
- "api-error-hookaborted": "جیڑی تبدیلی تسی کرنا چاہی اے، اونوں اک ایکسٹنشن کنڈے نیں بند کردتا اے۔",
- "api-error-http": "انٹرنیٹ ئلطی: سرور نال کوئی جوڑ نئیں۔",
- "api-error-illegal-filename": "اس فائل دے ناں تے پابندی اے۔",
- "api-error-internal-error": "اندر دی غلطی: تواڈے وکی تے چڑھاندیاں کوئی غلطی ہوئی اے۔",
- "api-error-invalid-file-key": "اندر دی غلطی: فائل ناں لبی کچے سٹور ج",
- "api-error-missingparam": "اندر دی غلطی: غیب پیرامیٹرز منگن تے۔",
- "api-error-missingresult": "اندر دی غلطی: سعاب نئیں لاسکدے جے کاپی چلے گی۔",
- "api-error-mustbeloggedin": "فائلاں اپلوڈ کرن واسطے توانوں لاگ ان کرنا ضروری اے۔",
- "api-error-mustbeposted": "اندر دی غلطی: ایچ ٹیٹیپی پوسٹ چائیدی اے۔",
- "api-error-noimageinfo": "فائل چڑھانا کامیاب، پر سرور نے فائل بارے سانوں کوئی دس نئیں پیجی۔",
- "api-error-nomodule": "انٹنیٹ غلطی: فائل چڑھان والا موڈیول سیٹ ںئیں",
- "api-error-ok-but-empty": "انٹرنیٹ غلطی: سرور ولوں کوئی جواب نئیں۔",
- "api-error-overwrite": "اک ہونی فائل تے ہور لکھن دی اجازت نئیں۔",
"api-error-stashfailed": "اندر دی غلطی: سرور کچیاں فائلاں نوں رکھن چ نکام۔",
- "api-error-timeout": "سرور نے توقع رکھے ویلے ج جواب نئیں دتا۔",
- "api-error-unclassified": "اک انجان غلطی ہوگئی اے۔",
- "api-error-unknown-code": "انجان غلطی:\"$1\"",
- "api-error-unknown-error": "اندر دی غلطی: کوئی چیز غلط ہوئی جدوں تسی فائل چڑھاندے سی۔",
"api-error-unknown-warning": "انجان خبرداری: $1",
"api-error-unknownerror": "انجان غلطی : \"$1\"۔",
- "api-error-uploaddisabled": "فائل جڑھانا ایس وکی تے بند اے۔",
- "api-error-verification-error": "اے فائل کرپٹ ہو سکدی یا فیر ایدا فارمیٹ غلط اے۔",
"special-characters-group-latin": "لاطینی",
"special-characters-group-latinextended": "ودویں لاطینی",
"special-characters-group-ipa": "IPA",
"special-characters-group-gujarati": "گجراتی",
"special-characters-group-thai": "تھائی",
"special-characters-group-lao": "لاؤ",
- "special-characters-group-khmer": "کھیمر"
+ "special-characters-group-khmer": "کھیمر",
+ "mw-widgets-titleinput-description-redirect": "مڑ رجوع $1 نوں"
}
"selfredirect": "<strong>Aviso:</strong> Está a redirecionar esta página para si mesma.\nPode ter especificado o destino errado para a página ou até a editar a página errada.\nSe clicar em \"{{int:savearticle}}\" novamente, o redirecionamento será criado na mesma.",
"missingcommenttext": "Introduza um comentário abaixo, por favor.",
"missingcommentheader": "<strong>Atenção:</strong> Não introduziu um assunto para este comentário.\nSe clicar novamente \"{{int:savearticle}}\", a sua edição será gravada sem assunto.",
- "summary-preview": "Antevisão do resumo:",
+ "summary-preview": "Antevisão do resumo de edição:",
"subject-preview": "Antevisão do assunto:",
"previewerrortext": "Ocorreu um erro enquanto tentava antever as suas alterações.",
"blockedtitle": "O utilizador está bloqueado",
"permissionserrorstext-withaction": "This message is \"with action\" version of {{msg-mw|Permissionserrorstext}}.\n\nParameters:\n* $1 - the number of reasons that were found why the action cannot be performed\n* $2 - one of the action-* messages (for example {{msg-mw|action-edit}}) or other such messages tagged with {{tl|doc-action}} in their documentation\n\nPlease report at [[Support]] if you are unable to properly translate this message. Also see [[phab:T16246]] (now closed) for background.",
"contentmodelediterror": "Error message shown when trying to edit an old revision with a content model different from that of the current revision\n* $1 - content model of the old revision\n* $2 - content model of the current revision",
"recreate-moveddeleted-warn": "Warning shown when creating a page which has already been deleted. See for example [[Test]].",
- "moveddeleted-notice": "Shown on top of a deleted page in normal view modus ([{{canonicalurl:Test}} example]).",
- "moveddeleted-notice-recent": "Shown on top of a recently deleted page in normal view modus ([{{canonicalurl:Test}} example]).",
+ "moveddeleted-notice": "Shown on top of a deleted page in normal view modus ([{{canonicalurl:Test}} example]).\n\nSee also {{msg-mw|moveddeleted-notice-recent}}",
+ "moveddeleted-notice-recent": "Shown on top of a recently deleted page in normal view modus ([{{canonicalurl:Test}} example]).\n\nSee also {{msg-mw|moveddeleted-notice}}",
"log-fulllog": "Used as link text.",
"edit-hook-aborted": "Used as error message.\n\nSee also:\n* {{msg-mw|edit-gone-missing}}\n* {{msg-mw|edit-conflict}}\n* {{msg-mw|edit-no-change}}\n* {{msg-mw|edit-already-exists}}",
"edit-gone-missing": "Used as error message.\n\nSee also:\n* {{msg-mw|edit-hook-aborted}}\n* {{msg-mw|edit-conflict}}\n* {{msg-mw|edit-no-change}}\n* {{msg-mw|edit-already-exists}}",
"rcfilters-invalid-filter": "A label for an invalid filter.",
"rcfilters-empty-filter": "Placeholder for the filter list when no filters were chosen.",
"rcfilters-filterlist-title": "Title for the filters list.\n{{Identical|Filter}}",
+ "rcfilters-highlightbutton-title": "Title for the highlight button used to toggle the highlight feature on and off.",
+ "rcfilters-highlightmenu-title": "Title for the highlight menu used to select the highlight color for an individual filter.",
"rcfilters-filterlist-noresults": "Message showing no results found for searching a filter.",
"rcfilters-filtergroup-registration": "Title for the filter group for editor registration type.",
"rcfilters-filter-registered-label": "Label for the filter for showing edits made by logged-in users.\n{{Identical|Registered}}",
"booksources-text": "Used in [[Special:BookSources/1]].\n\nThis message is followed by a list of links to other sites.\n\nSee also:\n* {{msg-mw|Booksources|title}}\n* {{msg-mw|Booksources-text|text}}",
"booksources-invalid-isbn": "This message is displayed after an invalid ISBN is entered on [[Special:Booksources]].",
"magiclink-tracking-rfc": "Name of the [[mw:Special:MyLanguage/Help:Tracking categories|tracking category]] where pages that use RFC magic links will be added.\n\nSee [https://en.wikipedia.org/wiki/Help:Magic_links#RFC Help:Magic links] for more information on RFC magic links.",
- "magiclink-tracking-rfc-desc": "Description of the tracking category {{mw-msg|magiclink-tracking-rfc}}",
+ "magiclink-tracking-rfc-desc": "Description of the tracking category {{msg-mw|magiclink-tracking-rfc}}",
"magiclink-tracking-pmid": "Name of the [[mw:Special:MyLanguage/Help:Tracking categories|tracking category]] where pages that use PMID magic links will be added.",
- "magiclink-tracking-pmid-desc": "Description of the tracking category {{mw-msg|magiclink-tracking-pmid}}",
+ "magiclink-tracking-pmid-desc": "Description of the tracking category {{msg-mw|magiclink-tracking-pmid}}",
"magiclink-tracking-isbn": "Name of the [[mw:Special:MyLanguage/Help:Tracking categories|tracking category]] where pages that use ISBN magic links will be added.",
- "magiclink-tracking-isbn-desc": "Description of the tracking category {{mw-msg|magiclink-tracking-isbn}}",
+ "magiclink-tracking-isbn-desc": "Description of the tracking category {{msg-mw|magiclink-tracking-isbn}}",
"rfcurl": "{{notranslate}}\nParameters:\n* $1 - RFC number\nSee also:\n* {{msg-mw|Pubmedurl}}",
"pubmedurl": "{{notranslate}}\nParameters:\n* $1 - Pubmed number\nSee also:\n* {{msg-mw|Rfcurl}}",
"specialloguserlabel": "Used in [[Special:Log]] as a label for an input field with which the log can be filtered for entries describing actions ''performed'' by the specified user. \"Carried out\" and \"done\" are possible alternatives for \"performed\".",
"editcomment": "Only shown if there is an edit {{msg-mw|Summary}}. Parameters:\n* $1 - the edit summary",
"revertpage": "Parameters:\n* $1 - username 1\n* $2 - username 2\n* $3 - (Optional) revision ID of the revision reverted to\n* $4 - (Optional) timestamp of the revision reverted to\n* $5 - (Optional) revision ID of the revision reverted from\n* $6 - (Optional) timestamp of the revision reverted from\nSee also:\n* {{msg-mw|Revertpage-nouser}}\n{{Identical|Revert}}",
"revertpage-nouser": "This is a confirmation message a user sees after reverting, when the username of the version is hidden with RevisionDelete.\n\nIn other cases the message {{msg-mw|Revertpage}} is used.\n\nParameters:\n* $1 - username 1, can be used for GENDER\n* $2 - (Optional) username 2\n* $3 - (Optional) revision ID of the revision reverted to\n* $4 - (Optional) timestamp of the revision reverted to\n* $5 - (Optional) revision ID of the revision reverted from\n* $6 - (Optional) timestamp of the revision reverted from",
- "rollback-success": "This message shows up on screen after successful revert (generally visible only to admins). $1 describes user whose changes have been reverted, $2 describes user which produced version, which replaces reverted version.\n{{Identical|Revert}}\n{{Identical|Rollback}}",
+ "rollback-success": "This message shows up on screen after successful revert (generally visible only to admins). Parameters:\n* $1 - user whose changes have been reverted\n* $2 - user who produced version, which replaces reverted version\n* $3 - the first user's name, can be used for GENDER\n* $4 - the second user's name, can be used for GENDER\n{{Identical|Revert}}\n{{Identical|Rollback}}",
"rollback-success-notify": "Notification shown after a successful revert.\n* $1 - User whose changes have been reverted\n* $2 - User that made the edit that was restored\n* $3 - Url to the diff of the rollback\nSee also:\n* {{msg-mw|showdiff}}\n{{related|rollback-success}}\n{{Format|jquerymsg}}",
"sessionfailure-title": "Used as title of the error message {{msg-mw|Sessionfailure}}.",
"sessionfailure": "Used as error message.\n\nThe title for this error message is {{msg-mw|Sessionfailure-title}}.",
"Mailman",
"Аль-Гимравий",
"Gamliel Fishkin",
- "Ping08"
+ "Ping08",
+ "Yuryleb"
]
},
"tog-underline": "Подчёркивание ссылок:",
- "tog-hideminor": "СкÑ\80Ñ\8bваÑ\82Ñ\8c малÑ\8bе пÑ\80авки из списка свежих правок",
+ "tog-hideminor": "СкÑ\80Ñ\8bваÑ\82Ñ\8c малÑ\8bе изменениÑ\8f из списка свежих правок",
"tog-hidepatrolled": "Скрывать патрулированные правки в списке свежих правок",
"tog-newpageshidepatrolled": "Скрывать отпатрулированные страницы в списке новых страниц",
"tog-hidecategorization": "Скрывать категоризацию страниц",
"selfredirect": "<strong>Внимание:</strong> Вы создаёте перенаправление на ту же самую статью.\nВозможно, Вы выбрали неправильную целевую страницу для перенаправления или редактируете не ту страницу.\nЕсли Вы нажмёте кнопку «{{int:savearticle}}» ещё раз, перенаправление всё же будет создано.",
"missingcommenttext": "Пожалуйста, введите ниже ваше сообщение.",
"missingcommentheader": "<strong>Напоминание.</strong> Вы не указали тему/заголовок для этого комментария.\nПри повторном нажатии на кнопку «{{int:savearticle}}», ваша правка будет записана без заголовка.",
- "summary-preview": "Ð\9eпиÑ\81ание бÑ\83деÑ\82:",
- "subject-preview": "Ð\97аголовок бÑ\83деÑ\82 вÑ\8bглÑ\8fдеÑ\82Ñ\8c Ñ\82ак:",
+ "summary-preview": "Ð\9fÑ\80едпÑ\80оÑ\81моÑ\82Ñ\80 опиÑ\81аниÑ\8f изменениÑ\8f:",
+ "subject-preview": "Ð\9fÑ\80едпÑ\80оÑ\81моÑ\82Ñ\80 Ñ\82емÑ\8b/заголовка:",
"previewerrortext": "При попытке отобразить предварительный просмотр ваших изменений произошла ошибка.",
"blockedtitle": "Участник заблокирован",
"blockedtext": "<strong>Ваша учётная запись или IP-адрес заблокированы.</strong>\n\nБлокировка произведена администратором $1.\nУказана следующая причина: «<em>$2</em>».\n\n* Начало блокировки: $8\n* Окончание блокировки: $6\n* Цель блокировки: $7\n\nВы можете связаться с $1 или любым другим [[{{MediaWiki:Grouppage-sysop}}|администратором]], чтобы обсудить блокировку.\nОбратите внимание, что не сможете использовать функцию «письмо участнику», если в своих [[Special:Preferences|персональных настройках]] не задали или не подтвердили корректный адрес электронной почты, или если ваша блокировка включает запрет отправки писем подобным образом.\nВаш IP-адрес — $3, идентификатор блокировки — $5.\nПожалуйста, указывайте эти сведения в любых своих обращениях.",
"userrights": "Управление правами участника",
"userrights-lookup-user": "Выбор участника",
"userrights-user-editname": "Введите имя учётной записи:",
- "editusergroup": "Ð\97агÑ\80Ñ\83зка гÑ\80Ñ\83пп участников",
+ "editusergroup": "Ð\97агÑ\80Ñ\83зиÑ\82Ñ\8c гÑ\80Ñ\83ппÑ\8b участников",
"editinguser": "Изменение прав {{GENDER:$1|участника|участницы}} <strong>[[User:$1|$1]]</strong> $2",
"viewinguserrights": "Просмотр прав {{GENDER:$1|участника|участницы}} <strong>[[User:$1|$1]]</strong> $2",
"userrights-editusergroup": "Изменение групп {{GENDER:$1|участника|участницы}}",
"rcfilters-invalid-filter": "Недопустимый фильтр",
"rcfilters-empty-filter": "Нет активных фильтров. Показываются все правки.",
"rcfilters-filterlist-title": "Фильтры",
+ "rcfilters-highlightbutton-title": "Выделить результаты",
+ "rcfilters-highlightmenu-title": "Выберите цвет",
"rcfilters-filterlist-noresults": "Фильтры не найдены",
"rcfilters-filtergroup-registration": "Регистрация участников",
"rcfilters-filter-registered-label": "Зарегистрированные",
"editcomment": "Было дано описание изменения: <em>$1</em>.",
"revertpage": "Откат правок [[Special:Contributions/$2|$2]] ([[User talk:$2|обсуждение]]) к версии [[User:$1|$1]]",
"revertpage-nouser": "Откат правок (имя участника скрыто) к версии {{GENDER:$1|[[User:$1|$1]]}}",
- "rollback-success": "Откачены правки $1; возврат к версии $2.",
+ "rollback-success": "Откачены правки {{GENDER:$3|$1}}; возврат к версии {{GENDER:$4|$2}}.",
"rollback-success-notify": "Откачены правки $1; возврат к последней версии $2. [$3 Показать изменения]",
"sessionfailure-title": "Ошибка сеанса",
"sessionfailure": "Похоже, возникли проблемы с текущим сеансом работы;\nэто действие было отменено в целях предотвращения «захвата сеанса».\nПожалуйста, нажмите кнопку «Назад» и перезагрузите страницу, с которой вы пришли.",
"spam_blanking": "Все версии содержат ссылки на $1, очистка",
"spam_deleting": "Все версии содержали ссылки на $1, производится удаление",
"simpleantispam-label": "Анти-спам проверка.\n<strong>Не</strong> заполняйте это!",
- "pageinfo-title": "СведениÑ\8f по «$1»",
+ "pageinfo-title": "СведениÑ\8f о Ñ\81Ñ\82Ñ\80аниÑ\86е «$1»",
"pageinfo-not-current": "К сожалению, невозможно предоставить эту информацию для старых версий.",
"pageinfo-header-basic": "Основные сведения",
"pageinfo-header-edits": "История изменений",
"아라",
"Dicto23456",
"Macofe",
- "Matma Rex"
+ "Matma Rex",
+ "KHMELNYTSKYIA"
]
},
"tog-underline": "Підкреслёвати одказы:",
"currentevents": "Актуалны подїї",
"currentevents-url": "Project:Актуалны подїї",
"disclaimers": "Вылучіня одповідности",
- "disclaimerpage": "Project:Ð\92Ñ\8bлÑ\83Ñ\87Ñ\96нÑ\8f одповÑ\96дноÑ\81Ñ\82и",
+ "disclaimerpage": "Project:Ð\92Ñ\96дмова вÑ\96д вÑ\96дповÑ\96далÑ\8cноÑ\81Ñ\82Ñ\96",
"edithelp": "Поміч едітованя",
"mainpage": "Головна сторінка",
"mainpage-description": "Головна сторінка",
"passwordreset-emaildisabled": "Функції електронічной пошты были выпнуы на тій вікі.",
"passwordreset-username": "Мено хоснователя:",
"passwordreset-domain": "Домена:",
- "passwordreset-capture": "Посмотрити выслїдный імейл?",
- "passwordreset-capture-help": "Кідь означіте тото поличко, буде імейл (з дочасным геслом) оркем посланя хоснователёви указаный і вам.",
"passwordreset-email": "Адреса електронічной пошты:",
"passwordreset-emailtitle": "Детайлы конта на {{SITENAME}}",
"passwordreset-emailtext-ip": "Дахто (може Вы, з IP адресы $1) попросив о наставлїня нового гесла до вашого конта на {{grammar:6sg|{{SITENAME}}}} ($4). З тов адресов {{PLURAL:$3|є повязане слїдуюче конто|суть повязаны слїдуючі конта}}:\n\n$2\n\n{{PLURAL:$3|Тото дочасне гесло стане неплатным|Тоты дочасны гесла стануть неплатныма}} {{PLURAL:$5|за день|за $5 днї|за $5 днїв}}.\nТеперь бы сьте ся мали приголосити і зволити собі нове гесло. Кідь тоту просьбу послав хтось другый або сьте собі на своє старе гесло спомянули і не хочете го змінити, можете тото повідомлїня іґноровати і дале хосновати старе гесло.",
"saveprefs": "Уложыти",
"restoreprefs": "Обновити вшыткы штандартны наставлїня (у вшыткых секціях)",
"prefs-editing": "Едітованя",
- "rows": "Рядкы:",
- "columns": "Колонкы:",
"searchresultshead": "Гляданя",
"stub-threshold": "Поріг про форматованя одказу як <a href=\"#\" class=\"stub\">одказів на \"stub\"</a> (v bajtech):",
"stub-threshold-disabled": "Выпнуте",
"userrights-reason": "Причіна:",
"userrights-no-interwiki": "Не маєте поволїня мінити права хоснователїв на іншых вікі.",
"userrights-nodatabase": "Датабаза $1 не екзістує або не є місцёва.",
- "userrights-nologin": "Мусите ся [[Special:UserLogin|приголосити]] на конто адміністратора, жебы сьте могли мінити права хоснователїв.",
- "userrights-notallowed": "Вы не мате права придати або одстранити хосновательскы права.",
"userrights-changeable-col": "Ґрупы, котры можете змінити",
"userrights-unchangeable-col": "Ґрупы, котры не можете змінити",
"userrights-conflict": "Конфлікт змін прав хоснователїв! Просиме, перевірьте зміны і потвердьте їх.",
- "userrights-removed-self": "Вы успішно позбавили ся властных прав. Зато уж веце не мате приступ до той сторінкы.",
"group": "Ґрупа:",
"group-user": "Хоснователї",
"group-autoconfirmed": "Автопотверджены хоснователї",
"right-siteadmin": "Замыкана і одомыканя датабазы",
"right-override-export-depth": "Експорт сторінок включаючі звязаны сторінкы з глубков до 5",
"right-sendemail": "Посыланя пошты іншым хоснователям",
- "right-passwordreset": "Перезераня імейлів про зміну гесла",
"newuserlogpage": "Лоґ вытварянь хоснователїв",
"newuserlogpagetext": "Тото є список ново реґістрованых хоснователїв.",
"rightslog": "Лоґ хосновательскых прав",
"blocklink": "заблоковати",
"unblocklink": "одблоковати",
"change-blocklink": "змінити блок",
- "contribslink": "пÑ\80иÑ\81пÑ\96вкÑ\8b",
+ "contribslink": "внеÑ\81ок",
"emaillink": "послати імейл",
"autoblocker": "Сьте были автоматічно блокованы, протоже здїляте IP-адресу з хоснователём „[[User:$1|$1]]“. Причіна блокованя того хоснователя: „$2“",
"blocklogpage": "Запис блоковань",
"version-license": "Ліценція",
"version-ext-license": "Ліценція",
"version-ext-colheader-name": "Росшырїня",
- "version-ext-colheader-version": "Верзія",
+ "version-ext-colheader-version": "Версія",
"version-ext-colheader-license": "Ліценція",
"version-ext-colheader-description": "Попис",
"version-ext-colheader-credits": "Авторы",
"feedback-thanks": "Дякуєме! Ваш коментарь быв приданый на сторінку „[$2 $1]“.",
"searchsuggest-search": "Глядати",
"searchsuggest-containing": "обсягуючій...",
- "api-error-badaccess-groups": "Не мате дозволено наладововати файлы на тоту вікі.",
"api-error-badtoken": "Внутрїшня хыба: планый знак.",
- "api-error-copyuploaddisabled": "Наладовованя з URL є на тім сервері заказане.",
- "api-error-duplicate": "На тій вікі уж {{PLURAL:$1|екзістує другый файл|екзістують іншы файлы}} з такым самым обсягом.",
- "api-error-duplicate-archive": "{{PLURAL:$1|быв другый файл|были даякы другы файлы}} з такым самым обсягом уж гев оперед {{PLURAL:$1|быв|были}}, але {{PLURAL:$1|быв змазаный|были змазаны}}.",
- "api-error-empty-file": "Наладованый файл є порожнїй.",
"api-error-emptypage": "Створїня новых, порожнїх сторінк неслободно.",
- "api-error-fetchfileerror": "Внутрїшня хыба: трафила ся хыба під час обтриманя файлу.",
- "api-error-fileexists-forbidden": "Файл з назвов „$1“ уж екзістує тай не годен го переписати.",
- "api-error-fileexists-shared-forbidden": "файл з назвов „$1“ уж екзістує в сполочнім усховищу тай не годен го переписати.",
- "api-error-file-too-large": "Наладованый файл є барз великый.",
- "api-error-filename-tooshort": "Назва файлу є барз курта.",
- "api-error-filetype-banned": "Тот тіп файлу є заказаный.",
- "api-error-filetype-banned-type": "$1 {{PLURAL:$4|є недозволеный формат файлів|суть недозволены форматы файлів}}. {{PLURAL:$3|Дозволеный формат фалів є|Дозволены форматы файлів суть}} $2.",
- "api-error-filetype-missing": "Тот файл не мать росшырїня.",
- "api-error-hookaborted": "Пожадована вами зміна была одмітнута дакотрым росшырінём.",
- "api-error-http": "Внутрїшня хыба: не вдало ся припоїти к серверу.",
- "api-error-illegal-filename": "Тота назва файлу не є дозволена.",
- "api-error-internal-error": "Внутрїшня хыба: притрафила ся хыба під час спрацованя вашого наладованого файлу.",
- "api-error-invalid-file-key": "Внутрїшня хыба: файл ся не нашов в дочаснім усховіщі.",
- "api-error-missingparam": "Внутрїшня хыба: хыбують параметры пожадавкы.",
- "api-error-missingresult": "Внутрїшня хыба: не годен становити, ці копірованя было успішне.",
- "api-error-mustbeloggedin": "Жебы наладовати файлы, мусите быти приголошеный.",
- "api-error-mustbeposted": "Внутрїшня хыба: пожадавка мусить быти через HTTP POST.",
- "api-error-noimageinfo": "Наладованя было успішне, але сервер не додав о файлї ниякы інформації.",
- "api-error-nomodule": "Внутрїшня хыба: не є наставленый модул наладовованя.",
- "api-error-ok-but-empty": "Внутрїшня хыба: сервер не одповідать.",
- "api-error-overwrite": "Не є дозволене переписати екзістуючій файл.",
- "api-error-stashfailed": "Внутрїшня хыба: серверу ся не вдало уложыти дочасный файл.",
"api-error-publishfailed": "Внутрїшня хыба: серверови ся не вдало опубліковати дочасный файл.",
- "api-error-timeout": "Сервер не одповідав в очекаванім часї.",
- "api-error-unclassified": "Трафила ся незнама хыба.",
- "api-error-unknown-code": "Незнама хыба: „$1“",
- "api-error-unknown-error": "Внутрїшня хыба: трафила ся хыба при спробі о наладованя файлу.",
+ "api-error-stashfailed": "Внутрїшня хыба: серверу ся не вдало уложыти дочасный файл.",
"api-error-unknown-warning": "Незнаме варованя: $1",
"api-error-unknownerror": "Незнама хыба: „$1“",
- "api-error-uploaddisabled": "Начітаваня файлів є на тій вікі выпнуте.",
- "api-error-verification-error": "Файл є може пошкодженый, або мать плане росшырїня.",
"duration-seconds": "$1 {{PLURAL:$1|секунда|секунды|секунд}}",
"duration-minutes": "$1 {{PLURAL:$1|минуту|минуты|минут}}",
"duration-hours": "$1 {{PLURAL:$1|година|годины|годин}}",
"statistics-articles": "موادي صفحا",
"statistics-pages": "صفحا",
"statistics-files": "چاڙهيل فائيل",
+ "statistics-edits": "{{SITENAME}} جي ٺھڻ کان صفحن ۾ ڪيل سموريون ترميمون",
"statistics-edits-average": "سراسري ترميمون في صفحو",
"statistics-users": "کاتيدار [[Special:ListUsers|يُوزرس]]",
"statistics-users-active": "سرگرم يُوزرس",
"mypage": "پەڕە",
"mytalk": "وەتوویش",
"navigation": "ڕێدەرکردن",
+ "and": " و",
"qbfind": "پیا بکە",
"qbbrowse": "بگەرد",
"qbedit": "وێراشتە",
"actions": "کردارەگان",
"namespaces": "شوونناوەگان",
"variants": "شێوەزارەگان",
+ "navigation-heading": "منۆێ ڕێدەرکردن",
"errorpagetitle": "غەڵەت",
"returnto": "بەورەو ئڕاێ $1.",
+ "tagline": "لە {{SITENAME}}",
"help": "یارمەتی",
"search": "مینە",
"searchbutton": "مینە",
"jumptonavigation": "ڕێدەرکردن",
"jumptosearch": "مینە",
"aboutsite": "سەبارەت وە {{SITENAME}}",
+ "aboutpage": "Project:لەوارەی",
"copyrightpage": "{{ns:project}}:مافەیل لەوەرگرتن",
"currentevents": "ڕووداوەیل ئێرەنگەیی",
"currentevents-url": "Project:ڕووداوەیل ئێرەنگەیی",
"nstab-mediawiki": "پەیام",
"nstab-help": "پەڕەێ کۆمەک",
"nstab-category": "پول",
+ "mainpage-nstab": "دەسپێک",
"missing-article": "دەیتابەیسەگە نەتۊەنست دەق پەڕەێگ وە ناو «$1» $2 پێیابکەێد ک ئەشێ پێیابکردیاتاد.\n\nئیە فرەتر لە مدووێ وەدۊاچین بەستیارێگ جیاواز یادیرۆک کۆنەێ پەڕەێگ سڕیاێ ڕوو دەێد.\n\nئەگەر لەێوا نیە، ئەوە گەھا گرفتێگ لەێ نەرمامێرە پێیاکردیەسە.\nتکایە ئیە وە ئاماژەدان وە ناونیشان URLـەگەیەو وە [[Special:ListUsers/sysop|وەڕێوەوەرێگ]] ڕاپۆرت بدە.",
"missingarticle-rev": "(نسخە#: $1)",
"badtitle": "ناونیشان خراو",
"loginlanguagelabel": "زوان: $1",
"pt-login": "بچووە ناو",
"pt-login-button": "بچووە ناو",
+ "pt-createaccount": "ھەژمار درس بکە",
"oldpassword": "تێپەڕوشەێ قەدیمی:",
"newpassword": "تێپەڕوشەێ نوو:",
"retypenew": "تێپەڕوشەێ نوو دوبارە بنۊسەو:",
"searchprofile-images-tooltip": "مینە ئڕاێ پەڕگەگان",
"searchprofile-everything-tooltip": "لە گشت ناوەرۆکێگ مینە بکە (تەنانەت پەڕەگان وتوویشیش)",
"searchprofile-advanced-tooltip": "مینە لەناو شوونناوە دڵخوازەگان",
+ "search-result-size": "$1 ({{PLURAL:$2|یەک وشە|$2 وشە}})",
"search-redirect": "(ڕەوانەکەر $1)",
"search-section": "(بەش $1)",
"search-suggest": "ئایا مەبەستت ئیە بۊ: $1",
"group-all": "(گشت)",
"right-read": "خوەنین پەڕەگان",
"right-edit": "وێراشتەکردن پەڕەگان",
+ "right-writeapi": "ئەوکاربردن API ئەڕاێ نۊساین",
"newuserlogpage": "پێرست درسکردن ئەوکاربەر",
"action-edit": "ئەی پەڕە وێراشتە بکە",
"nchanges": "$1 {{PLURAL:$1|گووڕانکاری}}",
"rcshowhidepatr": "وێراشتە نەگەردیاێەگان $1",
"rcshowhidemine": "وێراشتەگانم $1",
"rclinks": "دۊایین $1 گووڕانکاری $2 ڕووژ ویەردە نیشان بدە<br />$3",
+ "diff": "جیاوازی",
"hist": "دیرۆک",
"hide": "بشارەو",
"minoreditletter": "بێجگە",
+ "newpageletter": "ن",
+ "boteditletter": "بۆت",
+ "rc-change-size-new": "$1 {{PLURAL:$1|بایت}} پاش گووڕانکاری",
"rc-enhanced-expand": "وردەکاریەگان نیشان بدە",
"rc-enhanced-hide": "وردەکاریەگان بشارەو",
"recentchangeslinked": "گووڕانکاریە پەیوەندیدارەگان",
"statistics-pages": "پەڕەیل",
"pageswithprop-submit": "بچوو",
"brokenredirects-edit": "وێراشتە",
+ "nbytes": "$1 {{PLURAL:$1|بایت|بایت}}",
"prefixindex": "گشت پەڕەگان وە پێشگرەو",
"protectedpages-page": "پەڕە",
"protectedpages-unknown-timestamp": "نەناسریاێ",
"undelete-show-file-submit": "بەڵێ",
"namespace": "شوونناوەگان",
"invert": "ھەڵوژیاێەگان وەزێزەو بکە",
+ "blanknamespace": "(سەرەکی)",
"contributions": "بەشدارییەگان {{GENDER:$1|ئەوکاربەر}}",
"contributions-title": "بەشداریەگان ئەوکاربەر $1",
"mycontris": "بەشداریەیل",
"tooltip-pt-mycontris": "پێرست بەشداریەیلت",
"tooltip-pt-login": "پێشنیار ئەوپیت کریەێد بچیدە ناو؛ ھەرچەن زووری نیە",
"tooltip-pt-logout": "دەرچین",
+ "tooltip-pt-createaccount": "داوەت لەلیت بووت ک ھەژمارێگ درس بکەیت و بچیتە ناو، هەرچەن ئیە وە مەیل خوەتە",
"tooltip-ca-talk": "وەتوویش سەبارەت وە ناوەڕۆک پەڕە",
"tooltip-ca-edit": "تۊەنی وێراشتەێ ئەی پەڕەیە بکەید. تکایە وەر لە پاشدەسکردن دوگمەێ پێشدۊنن ئەوکاربوەێن.",
"tooltip-ca-addsection": "بەشێگ نوو دەس پی بکە",
"tooltip-feed-atom": "خواردەمەنی ئەتۆم ئڕاێ ئەی پەڕە",
"tooltip-t-contributions": "پێرست بەشداریەگان ئەی ئەوکاربەر",
"tooltip-t-emailuser": "ئیمەیلێگ بنارە ئڕاێ ئەی ئەوکاربەرە",
+ "tooltip-t-upload": "پەڕگەێگ بار بکە",
"tooltip-t-specialpages": "پێرست گشت پەڕە تایوەتەگان",
"tooltip-t-print": "نسخەێ چاپی ئەی پەڕە",
"tooltip-t-permalink": "بەسیار ھەمیشەیی وە ئەی وەشان لە ئەی پەڕە",
"tooltip-ca-nstab-main": "دۊنن پەڕەێ ناوەڕۆک",
"tooltip-ca-nstab-user": "پەڕەێ ئەوکاربەر تەماشا بکە",
- "tooltip-ca-nstab-special": "ئیە پەڕەێگ تایبەتە، نیەتۊەنی خوەێ ئەی پەڕە وێراشتە بکەید",
+ "tooltip-ca-nstab-special": "ئیە پەڕەێگ تایبەتە و وێراشتە نیەکریەێت",
"tooltip-ca-nstab-project": "دۊنن پەڕەێ پرۆژە",
"tooltip-ca-nstab-image": "دۊنن پەڕەێ پەڕگە",
"tooltip-ca-nstab-template": "دۊنن قاڵبەگە",
"tooltip-rollback": "«گەڕانن» گووڕانکاری/گووڕانکاریەگان ئەی پەڕە وە یەک کرتە گەڕانێدەو ئڕاێ دۊایین بەشداریکەر",
"tooltip-undo": "«بەتاڵکردن» ئەی گووڕانکاریە گووڕنێدەو و فۆرم وێراشتەکردن لە شێوەی پێشدۊنن وازەو کەێد. ئەی جوورە پووڕێد مدووێگ لە کورتەێ وێراشتە بنۊسریەێد.",
"tooltip-summary": "کۆرتەێگ لە لی بنۊسە",
+ "pageinfo-toolboxlink": "زانیاری پەڕە",
"pageinfo-redirectsto-info": "زانیاری",
"pageinfo-contentpage-yes": "بەڵێ",
"pageinfo-protect-cascading-yes": "بەڵێ",
"file-nohires": "رەزۆلوشن سەرتر لەیە لە وەردەستەو نیە.",
"svg-long-desc": "پەڕگەێ SVG، وە ناو $1 × $2 پیکسڵ، قەوارەێ پەڕگە: $3",
"show-big-image": "پەڕگەێ رەسەن",
+ "show-big-image-preview": "قەوارەێ ئەی پێشدۊنینە: $1.",
+ "show-big-image-other": "{{PLURAL:$2|ڕزێلووشن|ڕزێلووشنەیل}} تر: $1.",
+ "show-big-image-size": "$1 لە $2 پیکسەڵ",
"ilsubmit": "مینە",
"bad_image_list": "فۆرمەت وە شێوەێ خوارەسە:\n\nتەنیا ئەو باوەتەیلە ک پێرست کریانە (واتە ئەو ھێڵەیلە ک وە * دەس پێ کەن) لە وەر چاون.\nیەکەم بەسیار لە سەر ھەر ھێڵێگ، ئەشێ بەسیار فایلێگ خراو بوود.\nگشت بەسیارەگان دۊاێ ئەوە لە ئەو ھێڵە، چۊ نائاسایی(ئستسنا) تیەنە ئەژمار.",
"metadata": "متادەیتا",
"specialpages": "پەڕە تایوەتەگان",
"external_image_whitelist": " #ئەی ھێڵە ھەر وە ئەی جوورە ک ھەس، وەر بدەین<pre>\n#رستە وەنەزمەگان (regular expression) (تەنیا ئەو بەشە کە لە نێوان // جێ گرێد) لە خوارەو بنەین\n#ئیانە وەرد نیشانی ئینترنتی وێنەیل دەرەکی بەسیار دریای (hotlinked) چەترگیەن (تەتبیق دریەن).\n#ئەوانە ک چەترگیانە، چۊ وێنە نیشان دریەن؛ وەگەرنە تەنیا بەسیارێگ وە وێنە نیشان دەریەێد.\n#ئەو ھێڵەیلە وە # دەس پێ کەن، جوور شرۆڤە (comments) گیریەنە وەر چەو\n#ئەی ھێڵەیلە وە گەورە و بۊچگی پیتەگان ھەستیارە (case-insensitive)\n\n#گشت رستە وەنەزمەگان (regex) لە ژۊەر ئەی ھێڵە بنەین. ئەی ھێڵ ھەر وە ئەی جوورە کە ھەس، وەر بدەین</pre>",
"tag-filter": "پاڵووین [[Special:Tags|تاگ]]:",
+ "tag-list-wrapper": "([[Special:Tags|{{PLURAL:$1|تاگ|تاگەیل}}]]: $2)",
"tags-active-yes": "بەڵێ",
"tags-active-no": "نە",
"tags-edit": "وێراشتە",
"htmlform-no": "نە",
"htmlform-yes": "بەڵێ",
+ "logentry-newusers-create": "ھەژمار ئەوکاربەری $1 {{GENDER:$2|درس کریا}}",
"feedback-message": "پەیام:",
- "searchsuggest-search": "Ù\85Û\8cÙ\86ە",
+ "searchsuggest-search": "Ù\84Û\95 {{SITENAME}} Ù\85Û\8cÙ\86Û\95 بکە",
"expand_templates_ok": "باشە",
"pagelang-name": "پەڕە",
"pagelang-language": "زوان",
"invalidtitle-knownnamespace": "ႁူဝ်ၶေႃႈ ၽိတ်းပိူင်ႈဝႆႉ ၸွမ်းၼင်ႇ လွၵ်းၸိုဝ်ႈ \"$2\" လႄႈ တူဝ်လိၵ်ႈ \"$3\"",
"invalidtitle-unknownnamespace": "ႁူဝ်ၶေႃႈ ၽိတ်းပိူင်ႈဝႆႉ ၸွမ်းၼင်ႇ ဢမ်ႇလႆႈႁူႉ တၢင်းၼမ်လွၵ်းၸိုဝ်ႈ $1 လႄႈ တူဝ်လိၵ်ႈ \"$2\"",
"exception-nologin": "ဢမ်ႇလႆႈၶဝ်ႈဝႆ့",
+ "virus-unknownscanner": "ဢမ်ႇႁူႉၸၵ်း တူဝ်ၶႃႈမႅင်း:",
"cannotlogoutnow-title": "ဢမ်ႇၸၢင်ႈ လွၵ်ႉဢွၵ်ႇ ယၢမ်းလဵဝ်",
"cannotlogoutnow-text": "တေဢမ်ႇၸၢင်ႈ လွၵ်ႉၶဝ်ႈ ၽွင်းမိူဝ်ႈၸႂ်ႉ $1",
"welcomeuser": "ႁပ်ႉတွၼ်ႈယူႇ, $1!",
"nav-login-createaccount": "လွၵ်ႉဢိၼ်ႇ / သၢင်ႈဢၶွင်ႉ",
"userlogin": "လွၵ်ႉဢိၼ်ႇ / သၢင်ႈဢၶွင်ႉ",
"userloginnocreate": "လွၵ်ႉဢိၼ်ႇ",
- "logout": "á\80\9cá\80½á\81µá\80ºá\82\89á\80¢á\80\9d်ႉ",
- "userlogout": "á\80\9cá\80½á\81µá\80ºá\82\89á\80¢á\80\9d်ႉ",
+ "logout": "á\80\9cá\80½á\81µá\80ºá\82\89á\80¢á\80½á\81µ်ႉ",
+ "userlogout": "á\80\9cá\80½á\81µá\80ºá\82\89á\80¢á\80½á\81µ်ႉ",
"notloggedin": "ဢမ်ႇလႆႈၶဝ်ႈဝႆ့",
"userlogin-noaccount": "ပႆႇပႃႈမီးဢၶွင်ႉႁႃႉ?",
"userlogin-joinproject": "ႁူမ်ႈ {{SITENAME}}",
"pt-login-button": "လွၵ်ႉဢိၼ်ႇ",
"pt-login-continue-button": "သိုပ်ၶဝ်ႈလွၵ်ႉဢိၼ်ႇ",
"pt-createaccount": "ၵေႃႇသၢင်ႈဢၶွင်ႉ",
- "pt-userlogout": "á\80\9cá\80½á\81µá\80ºá\82\89á\80¢á\80\9d်ႉ",
+ "pt-userlogout": "á\80\9cá\80½á\81µá\80ºá\82\89á\80¢á\80½á\81µ်ႉ",
"php-mail-error-unknown": "ဢမ်ႇႁူႉ လွင်ႈၽိတ်းပိူင်ႈ ၵႃႈတီႈ PHP's mail() function ၼၼ်ႉ။",
"user-mail-no-addy": "ဢမ်ႇပႃး ႁဵင်းလိၵ်ႈဢီးမေးလ်သေ ၶတ်းၸႂ်သူင်ႇ ဢီးမေးလ်",
"user-mail-no-body": "ၶတ်းၸႂ်သူင်ႇဢီးမေးလ် လူၺ်ႈ လွင်ႈတၢင်းပဝ်ႇ ဢမ်ႇၼၼ် ပွင်ႈလိၵ်ႈ ဢၼ်ဢမ်ႇမီး တီႈပွင်ႇ",
"passwordreset-emailelement": "ၸိုဝ်ႈၽူႈၸႂ်ႉတိုဝ်း:\n$1\n\nၶေႃႈလပ်ႉ ၸူဝ်ႈၵႅပ်ႉ:\n$2",
"passwordreset-emailsentemail": "ႁဵင်းလိၵ်ႈ ဢီးမေးလ်ဢၼ်ၼႆႉၼႆႉ မၼ်းၵပ်းၵၢႆႇၵၼ်တင်း ဢၶွင်ႉၸဝ်ႈၵဝ်ႇ၊ ဢၼ်ပဵၼ် ဢီးမေးလ် တႃႇတင်ႈၶိုၼ်းမၢႆလပ်ႉၼၼ်ႉ တေထုၵ်ႇသူင်ႇၸူးယူႇ.",
"passwordreset-emailsentusername": "ႁဵင်းလိၵ်ႈ ဢီးမေးလ်ဢၼ်ၼႆႉၼႆႉ မၼ်းၵပ်းၵၢႆႇၵၼ်တင်း ၸိုဝ်ႈၽူႈၸႂ်ႉတိုဝ်း ဢၼ်ၼႆႉ၊ ဢၼ်ပဵၼ် ဢီးမေးလ် တႃႇတင်ႈၶိုၼ်းမၢႆလပ်ႉၼၼ်ႉ တေထုၵ်ႇသူင်ႇၸူးယူႇ.",
+ "passwordreset-nosuchcaller": "ၽူႈႁွင်ႉမႃး ဢမ်ႇမီးဝႆႉ:$1",
"passwordreset-invalidemail": "ႁဵင်းလိၵ်ႈ ဢီႈမေးလ် ၽိတ်းဝႆႉ။",
"passwordreset-nodata": "ၸိုဝ်ႈၽူႈၸႂ်ႉတိုဝ်းလႄႈ ႁဵင်းလိၵ်ႈဢီးမေးလ် ဢမ်ႇလႆႈၵမ်ႉထႅမ်ဝႆႉ သေဢၼ်။",
"changeemail": "လႅၵ်ႈလၢႆႈ ဢမ်ႇၼၼ် ထွၼ်ပႅတ်ႈ ႁဵင်းလိၵ်ႈ ဢီးမေးလ်",
"defaultmessagetext": "လိၵ်ႈၶေႃႈၶၢဝ်ႇ ပိူင်ႇၵႅဝ်ႈ",
"invalid-content-data": "ၶေႃႈမုၼ်းၶဝ်ႈပႃး ၽိတ်းပိူင်ႈဝႆႉ",
"content-not-allowed-here": "\"$1\" ၶေႃႈၶဝ်ႈပႃးၼႆႉ ဢမ်ႇၶႂၢင်းပၼ်ဝႆႉ တီႈၼႃႈ လိၵ်ႈ [[$2]]",
+ "editpage-invalidcontentmodel-title": "ပိူင်ႈၵေႃႇသၢင်ႈ လမ်းၼႂ်း ဢမ်ႇၵမ်ႉထႅမ်ဝႆႉ",
+ "editpage-invalidcontentmodel-text": "ပိူင်ၵေႃႇသၢင်ႈ လမ်းၼႂ်း \"$1\" ဢမ်ႇလႆႈၵမ်ႉထႅမ်ဝႆႉ",
"editpage-notsupportedcontentformat-title": "ပိူင်ၶေႃႈၶဝ်ႈပႃး ၼႆႉ ဢမ်ႇၵမ်ႉထႅမ်ဝႆႉပၼ်။",
"editpage-notsupportedcontentformat-text": "ပိူင်ၶေႃႈၶဝ်ႈပႃး $1 ၼႆႉ မၼ်းဢမ်ႇလႆႈ ၵမ်ႉထႅမ်ဝႆႉပၼ် တင်း ၽၢင်တူဝ် ၶေႃႈၶဝ်ႈပႃး $2",
"content-model-wikitext": "လိၵ်ႈဝီႇၶီႇ",
"viewpagelogs": "တူၺ်းသၢႆမၢႆ တွၼ်ႈတႃႇၼႃႈလိၵ်ႈၼႆႉ",
"nohistory": "တီႈၼႆႈ ဢမ်ႇမီး ပိုၼ်းထတ်းသၢင်ႈ တွၼ်ႈတႃႇၼႃႈလိၵ်ႈၼႆႉ",
"currentrev": "ၵၢၼ်ၶူၼ်ႉၶႆႈ ၵမ်းလိုၼ်းသုတ်း",
- "currentrev-asof": "á\81µá\81¢á\81¼á\80ºá\81¶á\80°á\81¼á\80ºá\82\89á\80\9cá\80° á\81µá\80\99á\80ºá\80¸á\80\9cá\80á\80¯á\81¼á\80ºá\80¸á\80\9eá\80¯á\80\90á\80ºá\80¸á\81¼á\80\84á\80ºá\82\87 $1",
+ "currentrev-asof": "á\81µá\81¢á\81¼á\80ºá\81¶á\80°á\81¼á\80ºá\82\89á\81¶á\82\86á\82\88 á\81µá\80\99á\80ºá\80¸á\80\9cá\80á\80¯á\81¼á\80ºá\80¸á\80\9eá\80¯á\80\90á\80ºá\80¸ á\80\99á\80á\80°á\80\9dá\80ºá\82\88 $1",
"revisionasof": "ၶိုၼ်းၶူၼ်ႉၶႆႈၼင်ႇ $1",
- "revision-info": "ၶူၼ်ႉလူၼင်ႇ $1 ၼင်ႇ {{GENDER:$6|$2}}$7",
+ "revision-info": "{{GENDER:$6|$2}}$7 ၵေႃႉ ၶူၼ်ႉၶႆႈမိူဝ်ႈ $1",
"previousrevision": "← လွင်ႈၶူၼ်ႉၶႆႈ ဢၼ်ၵဝ်ႇ",
"nextrevision": "ၵၢၼ်ၶူၼ်ႉလူဢၼ်မႂ်ႇ",
"currentrevisionlink": "ၵၢၼ်ၶူၼ်ႉၶႆႈ ၵမ်းလိုၼ်းသုတ်း",
"rev-deleted-event": "(သဵၼ်ႈမၢႆ ႁူဝ်ယွႆႈ ထွၼ်ဢွၵ်ႇပႅတ်ႈယဝ်ႉ)",
"rev-deleted-user-contribs": "[ၸိုဝ်ႈၽူႈၸႂ်ႉတိုဝ်း ဢမ်ႇၼၼ် မၢႆဢၢႆႇပီႇ ထွၼ်ဢွၵ်ႇပႅတ်ႈယဝ်ႉ - ၵၢၼ်မႄးထတ်း ၸိူဝ်းၼၼ်ႉ ထုၵ်ႇလပ်ႉဝႆႉ ၵႃႈတီႈ ၵၢၼ်ႁူမ်ႈသၢင်ႈ]",
"rev-deleted-text-permission": "ၼႃႈလိၵ်ႈၶူၼ်ႉၶႆႈၼႆႉ ထုၵ်ႇ <strong>မွတ်ႇပႅတ်ႈ</strong>ယဝ်ႉ။\nလွင်ႈႁူဝ်ယွႆႈမၼ်း တေၸၢင်ႈႁၼ်လႆႈ ၵႃႈတီႈ [{{fullurl:{{#Special:Log}}/delete|page={{FULLPAGENAMEE}}}} deletion log] ၼႆႈၶႃႈ။",
- "rev-suppressed-text-permission": "á\81¼á\82\83á\82\88á\80\9cá\80á\81µá\80ºá\82\88 á\81¶á\80°á\81¼á\80ºá\82\89á\80\9cá\80°ဢၼ်ၼႆႉ ထုၵ်ႇ <strong>တဵၵ်းၵိုတ်း</strong> ပႅတ်ႈယဝ်ႉ။\nလွင်ႈႁူဝ်ယွႆႈမၼ်း တေၸၢင်ႈႁၼ်လႆႈ ၵႃႈတီႈ [{{fullurl:{{#Special:Log}}/suppress|page={{FULLPAGENAMEE}}}} suppression log] ၼႆႈယူႇ။",
+ "rev-suppressed-text-permission": "á\81¼á\82\83á\82\88á\80\9cá\80á\81µá\80ºá\82\88 á\81¶á\80°á\81¼á\80ºá\82\89á\81¶á\82\86á\82\89ဢၼ်ၼႆႉ ထုၵ်ႇ <strong>တဵၵ်းၵိုတ်း</strong> ပႅတ်ႈယဝ်ႉ။\nလွင်ႈႁူဝ်ယွႆႈမၼ်း တေၸၢင်ႈႁၼ်လႆႈ ၵႃႈတီႈ [{{fullurl:{{#Special:Log}}/suppress|page={{FULLPAGENAMEE}}}} suppression log] ၼႆႈယူႇ။",
"rev-deleted-text-unhide": "ၼႃႈလိၵ်ႈၶူၼ်ႉၶႆႈၼႆႉ ထုၵ်ႇ <strong>မွတ်ႇပႅတ်ႈ</strong>ယဝ်ႉ။\nလွင်ႈႁူဝ်ယွႆႈမၼ်း တေၸၢင်ႈႁၼ်လႆႈ ၵႃႈတီႈ [{{fullurl:{{#Special:Log}}/delete|page={{FULLPAGENAMEE}}}} deletion log] ၼႆႈၶႃႈ။\nပေႃးဝႃႈ ၸဝ်ႈၵဝ်ႇ တိုၵ်ႉမီးၵၢင်ၸႂ် ၶႂ်ႈသိုပ်ႇ ႁဵတ်းၵႂႃႇၼႆ ၸဝ်ႈၵဝ်ႇ တိုၵ်ႉ [$1 တူၺ်း လွင်ႈၶူၼ်ႉလူၼႆႉ] ။",
- "rev-suppressed-text-unhide": "á\81¼á\82\83á\82\88á\80\9cá\80á\81µá\80ºá\82\88 á\81¶á\80°á\81¼á\80ºá\82\89á\80\9cá\80°ဢၼ်ၼႆႉ ထုၵ်ႇ <strong>တဵၵ်းၵိုတ်း</strong> ပႅတ်ႈယဝ်ႉ။\nလွင်ႈႁူဝ်ယွႆႈမၼ်း တေၸၢင်ႈႁၼ်လႆႈ ၵႃႈတီႈ [{{fullurl:{{#Special:Log}}/suppress|page={{FULLPAGENAMEE}}}} suppression log] ၼႆႈယူႇ။\nပေႃးဝႃႈ ၸဝ်ႈၵဝ်ႇ တိုၵ်ႉမီးၵၢင်ၸႂ် ၶႂ်ႈသိုပ်ႇ ႁဵတ်းၵႂႃႇၼႆ ၸဝ်ႈၵဝ်ႇ တိုၵ်ႉ [$1 တူၺ်း လွင်ႈၶူၼ်ႉၶႆႈၼႆႉ] ။",
- "rev-deleted-text-view": "á\81¼á\82\83á\82\88á\80\9cá\80á\81µá\80ºá\82\88 á\81¶á\80°á\81¼á\80ºá\82\89á\80\9cá\80°ဢၼ်ၼႆႉ ထုၵ်ႇ <strong>မွတ်ႇပႅတ်ႈ</strong> ၵႂႃႇယဝ်ႉ။\nၸဝ်ႈၵဝ်ႇတိုၵ်ႉၸၢင်ႈတူၺ်ႈမၼ်းသေ လွင်ႈႁူဝ်ယွႆႈမၼ်းတႄႉ တေၸၢင်ႈႁၼ်လႆႈ ၵႃႈတီႈ [{{fullurl:{{#Special:Log}}/delete|page={{FULLPAGENAMEE}}}} deletion log] ၼႆႈယူႇ။",
- "rev-suppressed-text-view": "á\81¼á\82\83á\82\88á\80\9cá\80á\81µá\80ºá\82\88 á\81¶á\80°á\81¼á\80ºá\82\89á\80\9cá\80°ဢၼ်ၼႆႉ ထုၵ်ႇ <strong>တဵၵ်းၵိုတ်း</strong> ပႅတ်ႈယဝ်ႉ။\nၸဝ်ႈၵဝ်ႇတိုၵ်ႉၸၢင်ႈတူၺ်းသေ လွင်ႈႁူဝ်ယွႆႈမၼ်း တေၸၢင်ႈႁၼ်လႆႈ ၵႃႈတီႈ [{{fullurl:{{#Special:Log}}/suppress|page={{FULLPAGENAMEE}}}} suppression log] ၼႆႈယူႇ။",
+ "rev-suppressed-text-unhide": "á\81¼á\82\83á\82\88á\80\9cá\80á\81µá\80ºá\82\88 á\81¶á\80°á\81¼á\80ºá\82\89á\81¶á\82\86á\82\88ဢၼ်ၼႆႉ ထုၵ်ႇ <strong>တဵၵ်းၵိုတ်း</strong> ပႅတ်ႈယဝ်ႉ။\nလွင်ႈႁူဝ်ယွႆႈမၼ်း တေၸၢင်ႈႁၼ်လႆႈ ၵႃႈတီႈ [{{fullurl:{{#Special:Log}}/suppress|page={{FULLPAGENAMEE}}}} suppression log] ၼႆႈယူႇ။\nပေႃးဝႃႈ ၸဝ်ႈၵဝ်ႇ တိုၵ်ႉမီးၵၢင်ၸႂ် ၶႂ်ႈသိုပ်ႇ ႁဵတ်းၵႂႃႇၼႆ ၸဝ်ႈၵဝ်ႇ တိုၵ်ႉ [$1 တူၺ်း လွင်ႈၶူၼ်ႉၶႆႈၼႆႉ] ။",
+ "rev-deleted-text-view": "á\81¼á\82\83á\82\88á\80\9cá\80á\81µá\80ºá\82\88 á\81¶á\80°á\81¼á\80ºá\82\89á\81¶á\82\86á\82\88ဢၼ်ၼႆႉ ထုၵ်ႇ <strong>မွတ်ႇပႅတ်ႈ</strong> ၵႂႃႇယဝ်ႉ။\nၸဝ်ႈၵဝ်ႇတိုၵ်ႉၸၢင်ႈတူၺ်ႈမၼ်းသေ လွင်ႈႁူဝ်ယွႆႈမၼ်းတႄႉ တေၸၢင်ႈႁၼ်လႆႈ ၵႃႈတီႈ [{{fullurl:{{#Special:Log}}/delete|page={{FULLPAGENAMEE}}}} deletion log] ၼႆႈယူႇ။",
+ "rev-suppressed-text-view": "á\81¼á\82\83á\82\88á\80\9cá\80á\81µá\80ºá\82\88 á\81¶á\80°á\81¼á\80ºá\82\89á\81¶á\82\86á\82\88ဢၼ်ၼႆႉ ထုၵ်ႇ <strong>တဵၵ်းၵိုတ်း</strong> ပႅတ်ႈယဝ်ႉ။\nၸဝ်ႈၵဝ်ႇတိုၵ်ႉၸၢင်ႈတူၺ်းသေ လွင်ႈႁူဝ်ယွႆႈမၼ်း တေၸၢင်ႈႁၼ်လႆႈ ၵႃႈတီႈ [{{fullurl:{{#Special:Log}}/suppress|page={{FULLPAGENAMEE}}}} suppression log] ၼႆႈယူႇ။",
"rev-deleted-no-diff": "ၸဝ်ႈၵဝ်ႇ တေဢမ်ႇၸၢင်ႈတူၺ်း လွင်ႈပႅၵ်ႇပိူင်ႈဢၼ်ၼႆႉ၊ ယွၼ်ႉပိူဝ်ႈဝႃႈ ၼႂ်ႈၵႃႈ ၵၢၼ်ၶူၼ်ႉၶႆႈဢၼ်ၼိုင်ႈၼႆႉ ထုၵ်ႇ<strong>မွတ်ႇပႅတ်ႈ</strong> ၵႂႃႇယဝ်ႉ။\nလွင်ႈႁူဝ်ယွႆႈမၼ်း တေၸၢင်ႈႁၼ်လႆႈ ၵႃႈတီႈ [{{fullurl:{{#Special:Log}}/delete|page={{FULLPAGENAMEE}}}} deletion log] ၼႆႈယူႇ။",
"rev-suppressed-no-diff": "ၸဝ်ႈၵဝ်ႇ တေဢမ်ႇၸၢင်ႈတူၺ်း လွင်ႈပႅၵ်ႇပိူင်ႈဢၼ်ၼႆႉ၊ ယွၼ်ႉပိူဝ်ႈဝႃႈ ၼႂ်ႈၵႃႈ ၵၢၼ်ၶူၼ်ႉလူဢၼ်ၼိုင်ႈၼႆႉ ထုၵ်ႇ<strong>မွတ်ႇပႅတ်ႈ</strong> ၵႂႃႇယဝ်ႉ။",
"rev-deleted-unhide-diff": "ၸဝ်ႈၵဝ်ႇ တေဢမ်ႇၸၢင်ႈတူၺ်း လွင်ႈပႅၵ်ႇပိူင်ႈဢၼ်ၼႆႉ၊ ယွၼ်ႉပိူဝ်ႈဝႃႈ ၼႂ်ႈၵႃႈ ၵၢၼ်ၶူၼ်ႉၶႆႈဢၼ်ၼိုင်ႈၼႆႉ ထုၵ်ႇ<strong>မွတ်ႇပႅတ်ႈ</strong> ၵႂႃႇယဝ်ႉ။\nလွင်ႈႁူဝ်ယွႆႈမၼ်း တေၸၢင်ႈႁၼ်လႆႈ ၵႃႈတီႈ [{{fullurl:{{#Special:Log}}/delete|page={{FULLPAGENAMEE}}}} deletion log] ၼႆႈယူႇ။\nပေႃးၸဝ်ႈၵဝ်ႇတိုၵ်ႉၶႂ်ႈ သိုပ်ႇႁဵတ်းၵႂႃႇယူႇၼႆ ၸဝ်ႈၵဝ်ႇတေၸၢင်ႈ [$1တူၺ်း လွင်ႈပႅၵ်ႈပိူင်ႈ] ၼႆႉလႆႈ။",
"search-interwiki-caption": "ၼႃႈၵၢၼ် ပီႈၼွင်ႉၵၼ်",
"search-interwiki-default": "ၽွၼ်းလႆႈ ၵႃႈတီႈ $1 :",
"search-interwiki-more": "(လိူဝ်)",
+ "search-interwiki-more-results": "ၽွၼ်းလႆႈ ဢၼ်ၼမ်လိူဝ်",
"search-relatedarticle": "ၸိူဝ်းၵပ်းၵၢႆႇ",
"searchrelated": "ၸိူဝ်းၵပ်းၵၢႆႇ",
"searchall": "တင်းမူတ်း",
"editusergroup": "ပိုတ်ႇၸုမ်း ၽူႈၸႂ်ႉတိုဝ်း",
"editinguser": "လႅၵ်ႈလၢႆႈသုၼ်ႇလႆႈ ၽူႈၸႂ်ႉတိုဝ်း ၶွင် {{GENDER:$1|ၽူႈၸႂ်ႉတိုဝ်း}} <strong>[[User:$1|$1]]</strong> $2",
"userrights-editusergroup": "မႄးထတ်း ၸုမ်း{{GENDER:$1|ၽူႈၸႂ်ႉတိုဝ်း}}",
+ "userrights-viewusergroup": "တူၺ်း ၸုမ်း {{GENDER:$1|ၽူႈၸႂ်ႉတိုဝ်း}}",
"saveusergroups": "သိမ်း ၸိူဝ်းၸုမ်း {{GENDER:$1|ၽူႈၸႂ်ႉတိုဝ်း}}",
"userrights-groupsmember": "ၽူႈၶဝ်ႈၸုမ်း တီႈ :",
"userrights-groupsmember-auto": "ၽူႈၶဝ်ႈၸုမ်းပႃးဝႆႉ တီႈ :",
"watchthisupload": "ပႂ်ႉတူၺ်းၾၢႆႇဢၼ်ၼႆႉ",
"upload-dialog-title": "လူတ်ႇၶိုၼ်ႈၾၢႆႇ",
"upload-dialog-button-cancel": "ဢမ်ႇႁဵတ်း",
+ "upload-dialog-button-back": "ႁူၼ်လင်",
"upload-dialog-button-done": "ယဝ်ႉ",
"upload-dialog-button-save": "ၵဵပ်းသိမ်း",
"upload-dialog-button-upload": "လူတ်ႇၶိုၼ်ႈ",
"logentry-contentmodel-change-revertlink": "ပိၼ်ႈၶိုၼ်း",
"logentry-contentmodel-change-revert": "ပိၼ်ႈၶိုၼ်း",
"protectlogpage": "မၢႆတမ်း ၵၢၼ်ႁေႉၵင်ႈ",
+ "protect-default": "ၶႂၢင်းပၼ် ၽူႈၸႂ်ႉတိုဝ်း တၢင်းသဵင်ႈ",
+ "protect-fallback": "ၶႂၢင်းပၼ် ၽူႈၸႂ်ႉတိုဝ်း ဢၼ်တင်း လွင်ႈၶႂၢင်းပၼ် \"$1\" ၼၼ်ႉၵူၺ်း",
+ "protect-level-autoconfirmed": "ၶႂၢင်းပၼ် ၽူႈၸႂ်ႉတိုဝ်း ဢၼ်ၼႄႉၼွၼ်းႁင်းၵူၺ်းၼၼ်ႉ ၵူၺ်း",
+ "protect-level-sysop": "ၶႂၢင်းပၼ် ၽူႈၵုမ်းၵၢၼ်ၵူၺ်း",
+ "protect-othertime": "တၢင်ႇၶၢဝ်း :",
+ "protect-othertime-op": "တၢင်ႇၶၢဝ်း",
"restriction-edit": "မႄးထတ်း",
"restriction-move": "ၶၢႆႉ",
"restriction-create": "ၵေႃႇသၢင်ႈ",
"ipb_hide_invalid": "ဢမ်ႇၸၢင်ႈႁူမ်ႇလပ်ႉဝႆႉ ဢၶွင်ႉဢၼ်ၼႆႉ; မၼ်းမီးလိူဝ်ဝႆႉ {{PLURAL:$1|လွင်ႈမႄးထတ်း ဢၼ်ၼိုင်ႈ|$1 လွင်ႈမႄးထတ်းတင်းၼမ်}}။",
"ipb_already_blocked": "\"$1\" ၼႆႉ ထုၵ်ႇ ႁႄႉတတ်းဝႆႉယဝ်ႉ။",
"ipb-needreblock": "$1 ၼႆႉ ထုၵ်ႇႁႄႉတတ်းဝႆႉယဝ်ႉ။ ၸွင်ႇၸဝ်ႈၵဝ်ႇ ၶႂ်ႈလႅၵ်ႈလၢႆႈ ၵၼ်တင်ႈႁိုဝ်?",
+ "ipbnounblockself": "ၸဝ်ႈၵဝ်ႇ ဢမ်ႇမီးသုၼ်ႇ တွၼ်ႈတႃႇ ပိုတ်ႇသေႃးၶိုၼ်းတႃႇၸဝ်ႈၵဝ်ႇ။",
+ "lockdb": "ၶတ်းယွင်ၶေႃႈမုၼ်း",
+ "unlockdb": "ပိုတ်ႇသေႃး ယွင်ၶေႃႈမုၼ်း",
+ "lockdbtext": "လွင်ႈၶတ်းသေႃး ယွင်ၶေႃႈမုၼ်းၼႆႉ မၼ်းတေယင်ႉၵိုတ်းဝႆႉၸူဝ်ႈၵႅပ်ႉ ၵပ်းၵၢႆႇလူၺ်ႈ လွင်ႈၽူႈၸႂ်ႉတိုဝ်းတင်းသဵင်ႈ မႄးထတ်းၼႃႈလိၵ်ႈ၊ လႅၵ်ႈလၢႆႈ ငဝ်ႈၵုမ်းပိူင်ၶဝ်၊ မႄးထတ်း သဵၼ်ႈမၢႆပႂ်ႉတူၺ်းၶဝ် လႄႈ ၸိူဝ်းဢၼ်တေလူဝ်ႇ လႅၵ်ႈလၢႆႈ တီႈၼႂ်း ယွင်ၶေႃႈမုၼ်းၼၼ်ႉ။ ၶႅၼ်းတေႃႈ ၸဝ်ႈၵဝ်ႇ ၼႄ့ၼွၼ်းဝႃႈ ၸဝ်ႈၵဝ်ႇယိူင်းဢၢၼ်းဝႃႈ ၶႂ်ႈႁဵတ်းသင် ၼႆသေ သင်ၸိူဝ်ႉဝႃႈ လွင်ႈမႄးၶိုၼ်းၸဝ်ႈၵဝ်ႇ ယဝ်ႉတူဝ်ႈယဝ်ႉၼႆ ၸဝ်ႈၵဝ်ႇ တေၸၢင်ႈၶိုၼ်း ပိုတ်ႇသေႃး ယွင်ၶေႃႈမုၼ်းလႆႈယူႇ။",
+ "unlockdbtext": "လွင်ႈပိုတ်ႇသေႃး ယွင်ၶေႃႈမုၼ်းၼႆႉ မၼ်းတေဝႆႉၶိုၼ်း လွင်ႈႁဵတ်းသၢင်ႈလႆႈ ၵပ်းၵၢႆႇလူၺ်ႈ ၽူႈၸႂ်ႉတိုဝ်းၶဝ် မႄးထတ်းၼႃႈလိၵ်ႈ၊ လႅၵ်ႈလၢႆႈ ငဝ်ႈၵုမ်းပိူင်ၶဝ်၊ မႄးထတ်း သဵၼ်ႈမၢႆ ပႂ်ႉတူၺ်းၶဝ် လႄႈ ၸိူဝ်းဢၼ်တေလူဝ်ႇ လႅၵ်ႈလၢႆႈ တီႈၼႂ်း ယွင်ၶေႃႈမုၼ်းၼၼ်ႉ။ ၶႅၼ်းတေႃႈ ၸဝ်ႈၵဝ်ႇ ၼႄ့ၼွၼ်းဝႃႈ ၸဝ်ႈၵဝ်ႇယိူင်းဢၢၼ်းဝႃႈ ၶႂ်ႈႁဵတ်းသင် ဢၼ်ဝႃႈၼၼ်ႉ။",
+ "lockconfirm": "ၸႂ်ႈယဝ်ႉ။ ၵဝ်ၶႃႈ ၶႂ်ႈၶတ်းသေႃး ယွင်ၶေႃႈမုၼ်း တႄႉတႄႉဢေႃႈ။",
+ "unlockconfirm": "ၸႂ်ႈယဝ်ႉ၊ ၵဝ်ၶႃႈ ၶႂ်ႈပိုတ်ႇသေႃး ယွင်ၶေႃႈမုၼ်း တႄႉတႄႉဢေႃႈ။",
+ "lockbtn": "ၶတ်းယွင်ၶေႃႈမုၼ်း",
+ "unlockbtn": "ပိုတ်ႇသေႃး ယွင်ၶေႃႈမုၼ်း",
+ "locknoconfirm": "ၸဝ်ႈၵဝ်ႇ ဢမ်ႇလႆႈပၼ်မၢႆမႅၼ်ႈ တီႈတိူၵ်ႈၼႄႉၼွၼ်း။",
+ "lockdbsuccesssub": "ၶတ်းသေႃး ယွင်ၶေႃႈမုၼ်း ၶႅမ်ႉလႅပ်ႈယဝ်ႉ။",
+ "unlockdbsuccesssub": "လွင်ႈၶတ်းသေႃး ယွင်ၶေႃႈမုၼ်း ထွၼ်ပႅတ်ႈယဝ်ႉယဝ်ႈ",
+ "lockdbsuccesstext": "ၶတ်းသေႃး ယွင်ၶေႃႈမုၼ်း ဝႆႉယဝ်ႉယဝ်ႈ<br />\nဝၢႆးသေ လွင်ႈမႄးၶိုၼ်း ၸဝ်ႈၵဝ်ႇၼၼ်ႉ ယဝ်ႉတူဝ်ႈယဝ်ႈၼႆ ယႃႇပေလိုမ်း တႃႇ [[Special:UnlockDB|ထွၼ်ပႅတ်ႈ သေႃး]] ။",
+ "unlockdbsuccesstext": "ပိုတ်ႇသေႃး ယွင်ၶေႃႈမုၼ်း ဝႆႉယဝ်ႉယဝ်ႈ။",
+ "lockfilenotwritable": "ၾၢႆႇၶတ်းသေႃး ယွင်ၶေႃႈမုၼ်းၼၼ်ႉ ဢမ်ႇၸၢင်ႈၶဝ်ႈတႅမ်ႈလႆႈ။\nလုၵ်ႉတီႈ သႃႇပိူဝ်ႇဝႅမ်ႉ သေ ဢၼ်ၼႆႉ မၼ်းလူဝ်ႇၶဝ်ႈတႅမ်ႈလႆႈတီႈ ၶတ်းသေႃး ဢမ်ႇၼၼ် ပိုတ်ႇသေႃး ယွင်ၶေႃႈမုၼ်းဢေႃႈ။",
+ "databaselocked": "ယွင်ၶေႃႈမုၼ်းၼႆႉ ပေႃးၶတ်းသေႃးဝႆႉယဝ်ႉ။",
+ "databasenotlocked": "ယွင်ၶေႃႈမုၼ်းၼႆႉ ဢမ်ႇလႆႈၶတ်းသေႃးဝႆႉ။",
+ "lockedbyandtime": "( {{GENDER:$1|$1}} ၵေႃႉ မိူဝ်ႈ $2 ၶၢဝ်းယၢမ်း $3)",
"move-page": "ၶၢႆႉ $1",
"move-page-legend": "ၶၢႆႉၼႃႈလိၵ်ႈ",
+ "movenologintext": "တွၼ်ႈတႃႇၶၢႆႉၼႃႈလိၵ်ႈၼႆႉ ၸဝ်ႈၵဝ်ႇ တေလႆႈပဵၼ် ၽူႈၸႂ်ႉတိုဝ်း ဢၼ်တၢင်ႇ မၢႆၽၢင်ယဝ်ႉလႄႈ တေလႆႈ [[Special:UserLogin|ၶဝ်ႈလွၵ်ႉဢိၼ်ႇဝႆႉ]]။",
+ "movenotallowed": "ၸဝ်ႈၵဝ်ႇ ဢမ်ႇမီးသုၼ်ႇ တွၼ်ႈတႃႇၶၢႆႉ ၼႃႈလိၵ်ႈ။",
+ "movenotallowedfile": "ၸဝ်ႈၵဝ်ႇ ဢမ်ႇမီးသုၼ်ႇ တွၼ်ႈတႃႇ ၶၢႆႉၾၢႆႇ။",
+ "cant-move-user-page": "ၸဝ်ႈၵဝ်ႇ ဢမ်ႇမီးသုၼ်ႇ တွၼ်ႈတႃႇၶၢႆႉ ၼႃႈလိၵ်ႈ ၽူႈၸႂ်ႉတိုဝ်း (ယၢၼ်ဢဝ်တီႈ ၼႃႈလိၵ်ႈၽႄ)။",
+ "cant-move-to-user-page": "ၸဝ်ႈၵဝ်ႇ ဢမ်ႇမီးသုၼ်ႇ တွၼ်ႈတႃႇၶၢႆႉ ၼႃႈလိၵ်ႈၸူး ၼႃႈလိၵ်ႈ ၽူႈၸႂ်ႉတိုဝ်း (လိူဝ်သေ ၸူး ၼႃႈလိၵ်ႈၽႄ ၽူႈၸႂ်ႉတိုဝ်း)။",
+ "cant-move-category-page": "ၸဝ်ႈၵဝ်ႇဢမ်ႇမီးသုၼ်ႇ တွၼ်ႈတႃႇၶၢႆႉ ၼႃႈလိၵ်ႈလိူင်ႈ။",
+ "cant-move-to-category-page": "ၸဝ်ႈၵဝ်ႇ ဢမ်ႇမီးသုၼ်ႇ တွၼ်ႈတႃႇၶၢႆႉ ၼႃႈလိၵ်ႈၸူး ၼႃႈလိၵ်ႈလိူင်ႈ။",
+ "cant-move-subpages": "ၸဝ်ႈၵဝ်ႇ ဢမ်ႇမီးသုၼ်ႇ တႃႇၶၢႆႉ ၼႃႈလိၵ်ႈၽႄ။",
+ "namespace-nosubpages": "ဢွင်ႈၸိုဝ်ႈ \"$1\" ဢမ်ႇၶႂၢင်းပၼ် ၼႃႈလိၵ်ႈၽႄ။",
+ "newtitle": "ႁူဝ်ၶေႃႈ ဢၼ်မႂ်ႇ :",
+ "move-watch": "တူၺ်း ၼႃႈလိၵ်ႈငဝ်ႈငႃႇ လႄႈ ၼႃႈလိၵ်ႈယိူင်းၸူး",
+ "movepagebtn": "ၶၢႆႉၼႃႈလိၵ်ႈ",
+ "pagemovedsub": "ၶၢႆႉၶႅမ်ႉလႅပ်ႈၵႂႃႇယဝ်ႉ",
+ "movepage-moved": "<strong>\"$1\" ၶၢႆႉၸူး \"$2\"</strong> ယဝ်ႉယဝ်ႈ",
"movelogpage": "ၶၢႆႉသၢႆမၢႆ",
"movenosubpage": "ၼႃးလိၵ်ႈဢၼ်ၼႆ့ ဢမ်ႇမီးဝႆႉ ၼႃႈလိၵ်ႈၽႄ။",
"movereason": "လွင်ႈတၢင်း :",
"tooltip-pt-mycontris": "သဵၼ်ႈမၢႆ ၶေႃႈလိၵ်ႈၸဝ်ႈၵဝ်ႇ",
"tooltip-pt-anoncontribs": "သဵၼ်ႈမၢႆ လွင်ႈမႄးထတ်း ၸိူဝ်းႁဵတ်းဝႆႉ ၵႃႈတီႈ ႁဵင်းလိၵ်ႈ ဢၢႆႇၽီႇဢၼ်ၼႆႉ",
"tooltip-pt-login": "ဢမ်ႇလွၵ်ႉဢိၼ်ႇၵေႃႈမူၼ်ႉမႄးလႆႈ ၵူၺ်း တိုၵ်းသူၼ်းႁႂ်ႈလွၵ်ႉဢိၼ်ႇ",
- "tooltip-pt-logout": "á\80\9cá\80½á\81µá\80ºá\82\89á\80¢á\80\9d်ႉ",
+ "tooltip-pt-logout": "á\80\9cá\80½á\81µá\80ºá\82\89á\80¢á\80½á\81µ်ႉ",
"tooltip-pt-createaccount": "ၸဝ်ႈၵဝ်ႇထုၵ်ႇပၼ်ႁႅင်း တွၼ်ႈတႃႇၵေႃႇသၢင်ႈ ဢၶွင်ႉလႄႈ လွၵ်ႉဢိၼ်ႇ။ ႁူမ်ႈဝႃႈၼၼ်သေတႃႉ ဢမ်ႇၸႂ်ႈဝႃႈ ဢမ်ႇႁဵတ်းဢမ်ႇလႆႈၼင်ႇၵဝ်ႇ။",
"tooltip-ca-talk": "ဢုပ်ႇဢူဝ်းလွင်ႈပႃးဝႆႉၼႂ်းၼႃႈလိၵ်ႈ",
"tooltip-ca-edit": "မႄးထတ်း ၼႃးလိၵ်ႈၼႆႉ",
"exif-datetimedigitized": "ဝၼ်းထီႉလႄႈ ၶၢဝ်းယၢမ်းတႃႇ digitizing",
"exif-orientation-1": "သႃမၺ်း",
"exif-exposureprogram-1": "မိုဝ်းႁဵတ်း",
+ "exif-dc-contributor": "ၽူႈၶဝ်ႈႁူမ်ႈ",
"namespacesall": "တင်းမူတ်း",
"monthsall": "တင်းမူတ်း",
"confirm-rollback-top": "တေပိၼ်ႈၶိုၼ်း လွင်ႈမႄးထတ်း ၼႃႈလိၵ်ႈဢၼ်ၼႆႉၼႄႇ?",
"rcfilters-invalid-filter": "Neveljaven filter",
"rcfilters-empty-filter": "Ni dejavnih filtrov. Prikazani so vsi prispevki.",
"rcfilters-filterlist-title": "Filtri",
+ "rcfilters-highlightbutton-title": "Označi rezultate",
+ "rcfilters-highlightmenu-title": "Izberite barvo",
"rcfilters-filterlist-noresults": "Nismo našli nobenega filtra",
"rcfilters-filtergroup-registration": "Registracija uporabnika",
"rcfilters-filter-registered-label": "Registriran",
"editcomment": "Povzetek urejanja je bil: <em>$1</em>.",
"revertpage": "vrnitev sprememb uporabnika [[Special:Contributions/$2|$2]] ([[User talk:$2|pogovor]]) na zadnje urejanje uporabnika [[User:$1|$1]]",
"revertpage-nouser": "vrnitev sprememb skritega uporabnika na zadnjo redakcijo {{GENDER:$1|[[User:$1|$1]]}}",
- "rollback-success": "Razveljavljene spremembe uporabnika $1;\nvrnjeno na urejanje uporabnika $2.",
+ "rollback-success": "Razveljavljene spremembe {{GENDER:$3|uporabnika|uporabnice}} $1;\nvrnjeno na urejanje {{GENDER:$4|uporabnika|uporabnice}} $2.",
"rollback-success-notify": "Povrnili smo urejanja $1;\nspremenjeno nazaj na zadnjo redakcijo $2. [$3 Prikaži spremembe]",
"sessionfailure-title": "Neuspeh seje",
"sessionfailure": "Vaša prijava ni uspela; da bi preprečili ugrabitev seje, je bilo dejanje preklicano. Prosimo, izberite »Nazaj« in ponovno naložite stran, s katere prihajate, nato poskusite znova.",
"searcharticle": "Shko",
"history": "Historiku i faqes",
"history_short": "Historiku",
+ "history_small": "historiku",
"updatedmarker": "përditësuar që nga vizita ime e fundit",
"printableversion": "Versioni i printueshëm",
"permalink": "Lidhje e përhershme",
"nocookieslogin": "{{SITENAME}} shfrytëzon \"cookies\" për identifikimin e përdoruesve.\nYou nuk lejoni shfrytëzimin e \"cookies\".\nJu lutemi, lejoni shfrytëzimin e \"cookies\" dhe provojeni përsëri.",
"nocookiesfornew": "Llogaria e përdoruesit nuk u krijua, pasi ne nuk mund të konfirmojmë burimin e tij.\nSigurohuni që ju lejoni shfrytëzimin e \"cookies\", rifreskoni këtë faqe dhe provojen përsëri.",
"noname": "Nuk keni dhënë një emër përdoruesi të pranueshëm.",
- "loginsuccesstitle": "Identifikim i suksesshëm",
+ "loginsuccesstitle": "I/e identifikuar",
"loginsuccess": "'''Ju tani jeni identifikuar tek {{SITENAME}} si \"$1\".'''",
"nosuchuser": "Nuk ka ndonjë përdorues me emrin \"$1\".\nKontrolloni shkrimin ose [[Special:CreateAccount|hapni një llogari të re]].",
"nosuchusershort": "Nuk ka asnjë përdorues me emrin \"$1\".",
"saveprefs": "Ruaj parapëlqimet",
"restoreprefs": "Rikthe të gjitha të dhënat e mëparshme",
"prefs-editing": "Redaktimi",
- "rows": "Rreshta:",
- "columns": "Kollona:",
"searchresultshead": "Kërkimi",
"stub-threshold": "Kufiri për formatin e <a href=\"#\" class=\"stub\">lidhjeve cung</a> (B):",
"stub-threshold-sample-link": "shembull",
"feedback-thanks-title": "Ju faleminderit!",
"searchsuggest-search": "Kërko",
"searchsuggest-containing": "përmban ...",
- "api-error-badaccess-groups": "Ju nuk lejoheni të ngarkoni skeda në këtë wiki.",
"api-error-badtoken": "Gabim i brendshëm: Shenjë e keqe.",
- "api-error-copyuploaddisabled": "Ngarkimi nga URL-ja është çaktivizuar në këtë server.",
- "api-error-duplicate": "{{PLURAL:$1|Ekziston një skedë tjetër|Ekzistojnë disa skeda të tjera}} me të njëjtën përmbajtje.",
- "api-error-duplicate-archive": "{{PLURAL:$1|Ekzistonte një skedë tjetër|Ekzistonin disa skeda të tjera}} me të njëjtën përmbajtje, por {{PLURAL:$1|ajo është|ato janë}} fshirë.",
- "api-error-empty-file": "Skeda që paraqitët ishte bosh.",
"api-error-emptypage": "Nuk lejohet krijimi i faqeve të reja bosh.",
- "api-error-fetchfileerror": "Gabim i brendshëm: Diçka shkoi keq gjatë marrjes së skedës.",
- "api-error-fileexists-forbidden": "Një skedar me emrin \"$1\" tashmë ekziston dhe nuk mund të mbishkruhet.",
- "api-error-fileexists-shared-forbidden": "Një skedar me emrin \"$1\" tashmë ekziston në depon për skedarët e shpërndarë dhe nuk mund të mbishkruhet.",
- "api-error-file-too-large": "Skeda që paraqitët ishte shumë e madhe.",
- "api-error-filename-tooshort": "Emri i skedës është shumë i shkurtër.",
- "api-error-filetype-banned": "Ky lloj i skedës është përjashtuar.",
- "api-error-filetype-banned-type": "$1 {{PLURAL:$4|nuk është një lloj i skedës së lejuar|nuk janë lloje të lejuara të skedave}}. {{PLURAL:$3|Lloji i lejuar i skedës është|Llojet e lejuara të skedave janë}} $2.",
- "api-error-filetype-missing": "Skedës i mungon një shtesë.",
- "api-error-hookaborted": "Modifikimi që provuat të bëni u ndërpre nga një goditje shtese.",
- "api-error-http": "Gabim i brendshëm: Nuk mund të lidhet me serverin.",
- "api-error-illegal-filename": "Emri i skedës nuk lejohet.",
- "api-error-internal-error": "Gabim i brendshëm: Diçka shkoi keq me procesimin e ngarkimit tuaj në wiki.",
- "api-error-invalid-file-key": "Gabim i brendshëm: Skeda nuk u gjet në ruajtjen e përkohshme.",
- "api-error-missingparam": "Gabim i brendshëm: Mungesë e parametrave në kërkesë.",
- "api-error-missingresult": "Gabim i brendshëm: Nuk mund të përcaktohet nëse kopjimi doli me sukses.",
- "api-error-mustbeloggedin": "Ju duhet të identifikoheni për të ngarkuar skeda.",
- "api-error-mustbeposted": "Gabim i brendshëm: Kërkesa kërkon HTTP POST.",
- "api-error-noimageinfo": "Ngarkimi u krye me sukses, por serveri nuk na dha ndonjë informacion për këtë skedë.",
- "api-error-nomodule": "Gabim i brendshëm: Nuk ka modul ngarkimi të vendosur.",
- "api-error-ok-but-empty": "Gabim i brendshëm: Nuk ka përgjigje nga serveri.",
- "api-error-overwrite": "Mbishkrimi i një skede ekzistuese nuk lejohet.",
"api-error-stashfailed": "Gabim i brendshëm: Serveri nuk arriti të ruajë skedën e përkohshme.",
- "api-error-timeout": "Serveri nuk u përgjigj gjatës kohës që pritej.",
- "api-error-unclassified": "Një gabim i panjohur ndodhi.",
- "api-error-unknown-code": "Gabim i panjohur: \"$1\"",
- "api-error-unknown-error": "Gabim i brendshëm: Diçka shkoi gabim kur provuat të ngarkoni skedën tuaj.",
"api-error-unknown-warning": "Paralajmërim i panjohur: $1",
"api-error-unknownerror": "Gabim i papërcaktuar: \"$1\".",
- "api-error-uploaddisabled": "Ngarkimi është i çaktivizuar në këte wiki.",
- "api-error-verification-error": "Skeda mund të jetë e korruptuar ose ka shtesë të gabuar.",
"duration-seconds": "$1 {{PLURAL:$1|sekondë|sekonda}}",
"duration-minutes": "$1 {{PLURAL:$1|minutë|minuta}}",
"duration-hours": "$1 {{PLURAL:$1|orë|orë}}",
"selfredirect": "<strong>Упозорење:</strong> преусмеравате ову страницу на њу саму.\nМожда вам је одредишна страница погрешна или уређујете погрешну страницу.\nАко још једном притиснете „{{int:savearticle}}“ преусмерење ће свеједно бити направљено.",
"missingcommenttext": "Унесите коментар испод.",
"missingcommentheader": "<strong>Напомена:</strong> нисте унели наслов овог коментара.\nАко поново кликнете на „{{int:savearticle}}“, ваша измена ће бити сачувана без наслова.",
- "summary-preview": "Преглед описа:",
+ "summary-preview": "Преглед описа измене:",
"subject-preview": "Преглед теме:",
"previewerrortext": "Догодила се грешка приликом приказивања ваших измена.",
"blockedtitle": "Корисник је блокиран",
"nonunicodebrowser": "'''Упозорење: ваш прегледач не подржава уникод.'''\nПромените га пре него што почнете с уређивањем.",
"editingold": "<strong>Упозорење: уређујете застарелу измену ове странице.</strong>\nАко је сачувате, све новије измене ће бити изгубљене.",
"yourdiff": "Разлике",
- "copyrightwarning": "Имајте на уму да се сви доприноси на овом викију сматрају као објављени под лиценцом $2 (више на $1).\nАко не желите да се ваши текстови мењају и размењују без ограничења, онда их не шаљите овде.<br />\nИсто тако обећавате да сте ви аутор текста, или да сте га умножили с извора који је у јавном власништву.\n'''Не шаљите радове заштићене ауторским правима без дозволе!'''",
- "copyrightwarning2": "Имајте на уму да се сви доприноси на овом викију могу мењати, враћати или брисати од других корисника.\nАко не желите да се ваши текстови слободно мењају и расподељују, не шаљите их овде.<br />\nИсто тако обећавате да сте ви аутор текста, или да сте га умножили с извора који је у јавном власништву (више на $1).\n'''Не шаљите радове заштићене ауторским правима без дозволе!'''",
+ "copyrightwarning": "Имајте на уму да се сви доприноси на овом викију сматрају као објављени под лиценцом $2 (више на $1).\nАко не желите да се ваши текстови мењају и размењују без ограничења, онда их не шаљите овде.<br />\nИсто тако обећавате да сте ви аутор текста, или да сте га умножили с извора који је у јавном власништву.\n<strong>Не шаљите радове заштићене ауторским правима без дозволе!</strong>",
+ "copyrightwarning2": "Имајте на уму да се сви доприноси на овом викију могу мењати, враћати или брисати од других корисника.\nАко не желите да се ваши текстови слободно мењају и расподељују, не шаљите их овде.<br />\nИсто тако обећавате да сте ви аутор текста, или да сте га умножили с извора који је у јавном власништву (више на $1).\n<strong>Не шаљите радове заштићене ауторским правима без дозволе!</strong>",
"editpage-cannot-use-custom-model": "Модел садржаја ове странице се не може променити.",
"longpageerror": "'''Грешка: текст који сте унели је величине {{PLURAL:$1|један килобајт|$1 килобајта|$1 килобајта}}, што је веће од {{PLURAL:$2|дозвољеног једног килобајта|дозвољена $2 килобајта|дозвољених $2 килобајта}}.'''\nСтраница не може бити сачувана.",
"readonlywarning": "<strong>Упозорење: база података је закључана ради одржавања, тако да тренутно нећете моћи да сачувате измене.</strong>\nМожда бисте желели сачувати текст за касније у некој текстуалној датотеци.\n\nСистемски администратор је навео следеће објашњење: $1",
"last": "разл",
"page_first": "прва",
"page_last": "последња",
- "histlegend": "Избор разлика: изаберите кутијице измена за упоређивање и притисните ентер или дугме на дну.<br />\nОбјашњење: <strong>({{int:cur}})</strong> – разлика с тренутном изменом,\n<strong>({{int:last}})</strong> – разлика с претходном изменом, <strong>{{int:minoreditletter}}</strong> – мала измена",
+ "histlegend": "Избор разлика: изаберите кутијице измена за упоређивање и притисните ентер или дугме на дну.<br />\nОбјашњење: <strong>({{int:cur}})</strong> = разлика с тренутном изменом, <strong>({{int:last}})</strong> = разлика с претходном изменом, <strong>{{int:minoreditletter}}</strong> = мала измена",
"history-fieldset-title": "Преглед историје",
"history-show-deleted": "Само обрисано",
"histfirst": "најстарије",
"prefs-help-recentchangescount": "Подразумева скорашње измене, историје страница и дневнике.",
"prefs-help-watchlist-token2": "Ово је тајни кључ за веб-довод Вашег списка надгледања. \nСвако ко зна овај кључ биће у могућности да види Ваша надгледања; стога, кључ немојте одавати никоме. \nАко је потребно, кључ можете [[Special:ResetTokens|ресетовати]].",
"savedprefs": "Ваша подешавања су сачувана.",
- "savedrights": "Ð\9aоÑ\80иÑ\81ниÑ\87ка пÑ\80ава за {{GENDER:$1|$1}} Ñ\81Ñ\83 Ñ\81аÑ\87Ñ\83вана.",
+ "savedrights": "Ð\9aоÑ\80иÑ\81ниÑ\87ке гÑ\80Ñ\83пе за {{GENDER:$1|$1}} Ñ\81Ñ\83 Ñ\81аÑ\87Ñ\83ване.",
"timezonelegend": "Временска зона:",
"localtime": "Локално време:",
"timezoneuseserverdefault": "подразумеване вредности ($1)",
"prefswarning-warning": "Променили сте ваша подешавања али нисте их још сачували.\nАко не притиснете „$1“ ваша подешавања ће бити изгубљена.",
"prefs-tabs-navigation-hint": "Савет: можете користити типке са левом и десном стрелицом за кретање кроз картице.",
"userrights": "Управљање корисничким правима",
- "userrights-lookup-user": "УпÑ\80авÑ\99аÑ\9aе коÑ\80иÑ\81ниÑ\87ким гÑ\80Ñ\83пама",
+ "userrights-lookup-user": "Ð\98забеÑ\80и коÑ\80иÑ\81ника",
"userrights-user-editname": "Корисничко име:",
- "editusergroup": "УÑ\80еди {{GENDER:$1|коÑ\80иÑ\81ниÑ\87ке}} групе",
+ "editusergroup": "УÑ\87иÑ\82аÑ\98 коÑ\80иÑ\81ниÑ\87ке групе",
"editinguser": "Мењате корисничка права {{GENDER:$1|корисника|кориснице}} <strong>[[User:$1|$1]]</strong> $2",
"viewinguserrights": "Корисничка права {{GENDER:$1|корисника|кориснице}} <strong>[[User:$1|$1]]</strong> $2",
- "userrights-editusergroup": "Промена корисничких група",
- "userrights-viewusergroup": "Преглед корисничких група",
+ "userrights-editusergroup": "Промена {{GENDER:$1|корисничких}} група",
+ "userrights-viewusergroup": "Преглед {{GENDER:$1|корисничких}} група",
"saveusergroups": "Сачувај {{GENDER:$1|корисничке}} групе",
"userrights-groupsmember": "Члан:",
"userrights-groupsmember-auto": "Подразумевано члан и:",
"action-upload_by_url": "отпремање ове датотеке преко веб-адресе",
"action-writeapi": "писање АПИ-ја",
"action-delete": "брисање ове странице",
- "action-deleterevision": "бÑ\80иÑ\81аÑ\9aе ове измене",
- "action-deletedhistory": "прегледање обрисане историје ове странице",
+ "action-deleterevision": "бÑ\80иÑ\81аÑ\9aе измена",
+ "action-deletedhistory": "прегледање обрисане историје странице",
"action-browsearchive": "претраживање обрисаних страница",
- "action-undelete": "враћање ове странице",
- "action-suppressrevision": "прегледање и враћање ове сакривене измене",
+ "action-undelete": "враћање страница",
+ "action-suppressrevision": "прегледање и враћање сакривених измена",
"action-suppressionlog": "прегледање ове приватне историје",
"action-block": "блокирање даљих измена овог корисника",
"action-protect": "мењање степена заштите ове странице",
"booksources-search": "Претражи",
"booksources-text": "Испод се налази списак веза ка сајтовима који се баве продајом нових и половних књига, а који би могли имати додатне податке о књигама које тражите:",
"booksources-invalid-isbn": "Наведени ISBN број није исправан. Проверите да није дошло до грешке при умножавању из првобитног извора.",
+ "magiclink-tracking-isbn": "Странице са ISBN магичним везама",
"specialloguserlabel": "Извршилац:",
"speciallogtitlelabel": "Циљ (наслов или {{ns:user}}:корисничко име):",
"log": "Дневници",
"api-error-emptypage": "Стварање нових празних страница није дозвољено.",
"api-error-publishfailed": "Унутрашња грешка: сервер није успео да објави привремену датотеку.",
"api-error-stashfailed": "Унутрашња грешка: сервер не може да сачува привремену датотеку.",
- "api-error-unknown-warning": "Непознато упозорење: $1",
+ "api-error-unknown-warning": "Непознато упозорење: „$1”.",
"api-error-unknownerror": "Непозната грешка: „$1“.",
"duration-seconds": "$1 {{PLURAL:$1|секунд|секунде|секунди}}",
"duration-minutes": "$1 {{PLURAL:$1|минут|минута|минута}}",
"last": "razl",
"page_first": "prva",
"page_last": "poslednja",
- "histlegend": "Izbor razlika: izaberite kutijice izmena za upoređivanje i pritisnite enter ili dugme na dnu.<br />\nObjašnjenje: <strong>({{int:cur}})</strong> – razlika s trenutnom izmenom,\n<strong>({{int:last}})</strong> – razlika s prethodnom izmenom, <strong>{{int:minoreditletter}}</strong> – mala izmena",
+ "histlegend": "Izbor razlika: izaberite kutijice izmena za upoređivanje i pritisnite enter ili dugme na dnu.<br />\nObjašnjenje: <strong>({{int:cur}})</strong> = razlika s trenutnom izmenom, <strong>({{int:last}})</strong> = razlika s prethodnom izmenom, <strong>{{int:minoreditletter}}</strong> = mala izmena",
"history-fieldset-title": "Pregled istorije",
"history-show-deleted": "Samo obrisane",
"histfirst": "najstarije",
"booksources-search": "Pretraži",
"booksources-text": "Ispod se nalazi spisak veza ka sajtovima koji se bave prodajom novih i polovnih knjiga, a koji bi mogli imati dodatne podatke o knjigama koje tražite:",
"booksources-invalid-isbn": "Navedeni ISBN broj nije ispravan. Proverite da nije došlo do greške pri umnožavanju iz prvobitnog izvora.",
+ "magiclink-tracking-isbn": "Stranice sa ISBN magičnim vezama",
"specialloguserlabel": "Izvršilac:",
"speciallogtitlelabel": "Cilj (naslov ili {{ns:user}}:korisničko ime):",
"log": "Dnevnici",
"selfredirect": "<strong>Varning:</strong> Du omdirigerar denna sida till sig själv.\nDu kanske angav fel mål för din omdirigering, eller redigerar fel sida.\nOm du klickar på \"{{int:savearticle}}\" igen kommer omdirigeringen att skapas trots detta.",
"missingcommenttext": "Var god och skriv in en kommentar nedan.",
"missingcommentheader": "<strong>Påminnelse:</strong> Du har inte skrivit något ämne för den här kommentaren.\nOm du trycker på \"{{int:savearticle}}\" igen kommer din redigering sparas utan rubrik.",
- "summary-preview": "Förhandsgranskning av sammanfattning:",
- "subject-preview": "Rubrikförhandsgranskning:",
+ "summary-preview": "Förhandsgranskning av redigeringssammanfattning:",
+ "subject-preview": "Förhandsgranskning av ämne:",
"previewerrortext": "Ett fel uppstod när dina ändringar skulle förhandsgranskas.",
"blockedtitle": "Användaren är blockerad",
"blockedtext": "'''Din IP-adress eller ditt användarnamn är blockerat.'''\n\nBlockeringen utfördes av $1 med motiveringen: ''$2''.\n\n* Blockeringen startade: $8\n* Blockeringen gäller till: $6.\n* Blockeringen var avsedd för: $7.\n\nDu kan kontakta $1 eller någon annan av [[{{MediaWiki:Grouppage-sysop}}|administratörerna]] för att diskutera blockeringen.\nOm du är inloggad och har uppgivit en e-postadress i dina [[Special:Preferences|inställningar]] så kan du använda funktionen 'Skicka e-post till den här användaren', såvida du inte blivit blockerad från funktionen.\n\nDin IP-adress är $3 och blockerings-ID är #$5.\nVänligen ange informationen ovan i alla förfrågningar som du gör i ärendet.",
"rcfilters-invalid-filter": "Ogiltigt filter",
"rcfilters-empty-filter": "Inga aktiva filter. Alla bidrag visas.",
"rcfilters-filterlist-title": "Filter",
+ "rcfilters-highlightbutton-title": "Markera resultat",
+ "rcfilters-highlightmenu-title": "Välj en färg",
"rcfilters-filterlist-noresults": "Inga filter hittades",
"rcfilters-filtergroup-registration": "Användarregistrering",
"rcfilters-filter-registered-label": "Registrerade",
"editcomment": "Redigeringskommentaren var: <em>$1</em>.",
"revertpage": "Återställde redigeringar av [[Special:Contributions/$2|$2]] ([[User talk:$2|användardiskussion]]) till senaste versionen av [[User:$1|$1]]",
"revertpage-nouser": "Återställde redigeringar av en dold användare till den senaste versionen av {{GENDER:$1|[[User:$1|$1]]}}",
- "rollback-success": "Återställde ändringar av $1;\nändrade tillbaka till senaste version av $2.",
+ "rollback-success": "Återställde ändringar av {{GENDER:$3|$1}};\nändrade tillbaka till senaste versionen av {{GENDER:$4|$2}}.",
"rollback-success-notify": "Återställde ändringar av $1;\nändrade tillbaka till senaste sidversion av $2. [$3 Visa ändringar]",
"sessionfailure-title": "Sessionsfel",
"sessionfailure": "Något med din session som inloggad är på tok. Din begärda åtgärd har avbrutits, för att förhindra att någon kapar din session. Klicka på \"Tillbaka\" i din webbläsare och ladda om den sida du kom ifrån. Försök sedan igen.",
"tog-watchdefault": "நான் தொகுக்கும் பக்கங்கள் மற்றும் கோப்புகளை என் கவனிப்புப் பட்டியலில் சேர்",
"tog-watchmoves": "நான் நகர்த்தும் பக்கங்கள் மற்றும் கோப்புகளை என் கவனிப்புப் பட்டியலில் சேர்.",
"tog-watchdeletion": "நான் நீக்கும் பக்கங்கள் மற்றும் கோப்புகளை என் கவனிப்புப் பட்டியலில் சேர்",
+ "tog-watchuploads": "நான் பதிவேற்றும் புதிய கோப்புகளை எனது கவனிப்புப் பட்டியலில் சேர்க்கவும்",
"tog-watchrollback": "நான் பின்மாற்றம் செய்த எனது கவனிப்பு பட்டியலில் பக்கங்களை சேர்",
"tog-minordefault": "இயல்பிருப்பாக அனைத்து தொகுப்புகளையும் சிறியது எனக் குறித்துக்கொள்.",
"tog-previewontop": "தொகுப்புப் பெட்டிக்கு முன்பு முன்தோற்றத்தைக் காட்டு",
"tog-ccmeonemails": "ஏனைய பயனர்களுக்கு நான் அனுப்பும் மின்னஞ்சல்களின் நகலொன்றை எனக்கு அனுப்பு",
"tog-diffonly": "மாற்றங்களை ஒப்பிடும் போது அதன் கீழ் பக்க உள்ளடக்கத்தைக் காட்டாதே",
"tog-showhiddencats": "மறைக்கப்பட்ட பகுப்புகளைக் காட்டு",
- "tog-norollbackdiff": "à®®à¯\81னà¯\8dபிரà¯\81நà¯\8dத நிலà¯\88à®\95à¯\8dà®\95à¯\81à®\95à¯\8d à®\95à¯\8aணà¯\8dà®\9fà¯\81வநà¯\8dதபினà¯\8d விதà¯\8dதியாà®\9aà®\99à¯\8dà®\95ளà¯\88 விà®\9fà¯\8dà®\9fà¯\81விà®\9fவà¯\81à®®à¯\8d (à®\95ாà®\9fà¯\8dà®\9fதà¯\8dதà¯\87வà¯\88யிலà¯\8dலà¯\88).",
+ "tog-norollbackdiff": "à®®à¯\81னà¯\8dபிரà¯\81நà¯\8dத நிலà¯\88à®\95à¯\8dà®\95à¯\81à®\95à¯\8d à®\95à¯\8aணà¯\8dà®\9fà¯\81வநà¯\8dதபினà¯\8d விதà¯\8dதியாà®\9aà®\99à¯\8dà®\95ளà¯\88 à®\95ாà®\9fà¯\8dà®\9fதà¯\8dதà¯\87வà¯\88யிலà¯\8dலà¯\88",
"tog-useeditwarning": "தொகுத்துக் கொண்டிருக்கும் பக்கத்தை சேமிக்காமல் வெளியேறினால் எனக்கு எச்சரிக்கை செய்",
"tog-prefershttps": "புகுபதிகை செய்யும்போது எப்போதுமே பாதுகாப்பான இணைப்பை பயன்படுத்தவும்",
"underline-always": "எப்பொழுதும்",
"password-change-forbidden": "நீங்கள் விக்கிகளில் கடவுச் சொற்களை மாற்ற முடியாது",
"externaldberror": "வெளி உறுதிப்படுத்தலில் ஏற்பட்ட தவறு காரணமாக உங்கள் வெளி கணக்கை இற்றைப்படுத்த முடியாது.",
"login": "புகுபதிகை",
+ "login-security": "தங்கள் அடையாளத்தை உறுதிப்படுத்தவும்",
"nav-login-createaccount": "புகுபதிகை/பயனர் கணக்கு தொடக்கம்",
"userlogin": "புகுபதிகை/பயனர் கணக்கு தொடக்கம்",
"userloginnocreate": "புகுபதிகை",
"createacct-reason-ph": "தாங்கள் ஏன் மற்றொரு கணக்கைத் துவங்குகிறீர்கள்?",
"createacct-submit": "உங்கள் கணக்கை உருவாக்குக",
"createacct-another-submit": "கணக்கை உருவாக்கவும்",
+ "createacct-continue-submit": "கணக்கு தொடக்கத்தை தொடரவும்",
+ "createacct-another-continue-submit": "கணக்கு தொடக்கத்தை தொடரவும்",
"createacct-benefit-heading": "{{SITENAME}} தங்களைப் போன்றோர்களால் உருவாக்கப்பட்டது",
"createacct-benefit-body1": "{{PLURAL:$1|தொகுப்பு|தொகுப்புகள்}}",
"createacct-benefit-body2": "{{PLURAL:$1|பக்கம்|பக்கங்கள்}}",
"createacct-another-realname-tip": "உண்மையான பெயர் கட்டாயமற்றது.\nநீங்கள் இதை கொடுத்தால் உங்கள் ஆக்கங்களுக்கான உரிமையளிப்புகளின் போது இது பயன்படும்.",
"pt-login": "உள்நுழை",
"pt-login-button": "புகுபதிகை",
+ "pt-login-continue-button": "உள்நுழைவை தொடரவும்",
"pt-createaccount": "புதிய கணக்கை உருவாக்கவும்",
"pt-userlogout": "விடுபதிகை",
"php-mail-error-unknown": "PHP 's mail() செயல்பாட்டில் அறியப்படாத பிழை.",
"newpassword": "புதிய கடவுச்சொல்:",
"retypenew": "புதிய கடவுச்சொல்லை மீண்டும் தட்டச்சிடு",
"resetpass_submit": "கடவுச்சொல்லை பதிவுசெய்து புகுபதிகை செய்",
- "changepassword-success": "à®\89à®\99à¯\8dà®\95ளதà¯\81 à®\95à®\9fவà¯\81à®\9aà¯\8dà®\9aà¯\8aலà¯\8d வà¯\86à®±à¯\8dறிà®\95ரமாà®\95 மாறà¯\8dறபà¯\8dபà®\9fà¯\8dà®\9fà¯\81ளà¯\8dளது!",
+ "changepassword-success": "à®\89à®\99à¯\8dà®\95ளà¯\8d à®\95à®\9fவà¯\81à®\9aà¯\8dà®\9aà¯\8aலà¯\8d மாறà¯\8dறபà¯\8dபà®\9fà¯\8dà®\9fது!",
"changepassword-throttled": "தாங்கள் மிக அண்மையில் பலமுறை புகுபதிகை செய்ய முயற்சி செய்துள்ளீர்கள்.\nமீண்டும் முயற்சிக்கும் முன் $1 காத்திருக்கவும்.",
"botpasswords": "தானியங்கி கடவுச்சொற்கள்",
"botpasswords-disabled": "தானியங்கி கடவுச்சொற்கள் பயன்பாட்டில் இல்லை.",
"botpasswords-insert-failed": "\"$1\" என்ற தானியங்கி பெயரை இணைக்க முடியவில்லை. ஏற்கனவே இருக்குமோ?",
"botpasswords-update-failed": "\"$1\" என்ற தானியங்கி பெயரை புதிப்பிக்க முடியவில்லை. அது நீக்கப்பட்டதா?",
"botpasswords-created-title": "தானியங்கி கடவுச்சொல் உருவாக்கப்பட்டது.",
- "botpasswords-created-body": "\"$1\"-க்கான தானியங்கி கடவுச்சொல் முழுமையாக உருவாக்கப்பட்டது.",
+ "botpasswords-created-body": "\"$2\" பயனரின் \"$1\"-க்கான தானியங்கி கடவுச்சொல் முழுமையாக உருவாக்கப்பட்டது.",
"botpasswords-updated-title": "தானியங்கி கடவுச்சொல் புதுப்பிக்கப்பட்டது",
- "botpasswords-updated-body": "\"$1\" தானியங்கி கடவுச்சொல் முழுமையாக புதிப்பிக்கப்பட்டது.",
+ "botpasswords-updated-body": "\"$2\" பயனரின் \"$1\" தானியங்கி கடவுச்சொல் முழுமையாக புதிப்பிக்கப்பட்டது.",
"botpasswords-deleted-title": "தானியங்கி கடவுச்சொல் நீக்கப்பட்டது",
- "botpasswords-deleted-body": "\"$1\"-க்கான தானியங்கி கடவுச்சொல் நீக்கப்பட்டது.",
+ "botpasswords-deleted-body": "\"$2\" பயனரின் \"$1\"-க்கான தானியங்கி கடவுச்சொல் நீக்கப்பட்டது.",
"botpasswords-newpassword": "<strong>$1</strong>-இற்கு புகுபதிகை செய்வதற்கான புதிய கடவுச்சொல் <strong>$2</strong> ஆகும். <em>தயவு செய்து வருங்கால மேற்கோளுக்கு இதனை பதிக.</em><br>(பழைய முகவர்கள் பயனாளர் பெயரை உள்ளீட்டிற்கு பயன்படுத்தலாம், மேலும் நீங்கள் <strong>$3</strong> ஐ பயனாளர் பெயராகவும் <strong>$4</strong> ஐ கடவுச்சொல்லாகவும் பயன்படுத்தலாம்.)",
"botpasswords-no-provider": "தானியங்கிகடவுச்சொல்அமர்வுவழங்குநர் பயன்பாட்டில் இல்லை.",
"botpasswords-restriction-failed": "தானியங்கி கடவுச்சொல் புகுபதிகை செய்ய தடுக்கிறது.",
"botpasswords-invalid-name": "தானியங்கி கடவுச்சொல் பிரிப்பானை (\"$1\") குறிக்கப்பட்ட பயனர் பெயர் கொண்டிருக்கவில்லை.",
"botpasswords-not-exist": "\"$1\" என்ற பயனர் \"$2\" என்ற தானியங்கி கடவுச்சொல்லை கொண்டிருக்கவில்லை.",
"resetpass_forbidden": "கடவுச்சொற்கள் மாற்றப்பட முடியாது",
+ "resetpass_forbidden-reason": "கடவுச்சொற்கள் மாற்றப்பட முடியாது:$1",
"resetpass-no-info": "இப்பக்கத்தை நேரடியாக அணுகுவதற்கு நீங்கள் புகுபதிகை செய்திருக்கவேண்டும்.",
"resetpass-submit-loggedin": "கடவுச்சொல்லை மாற்று",
"resetpass-submit-cancel": "விட்டுவிடு",
"passwordreset-emailelement": "பயனர் பெயர்: \n$1\n\nதற்காலிகக் கடவுச்சொல்: \n$2",
"passwordreset-emailsentemail": "இது உங்கள் கணக்கிற்கான பதிவு செய்யப்பட்ட மின்னஞ்சலாயின், கடவுச்சொல் மீட்டமைக்கும் மின்னஞ்சல் அனுப்பப்படும்",
"passwordreset-emailsentusername": "இது உங்கள் கணக்கிற்கான பதிவு செய்யப்பட்ட மின்னஞ்சலாயின், கடவுச்சொல் மீட்டமைக்கும் மின்னஞ்சல் அனுப்பப்படும்",
+ "passwordreset-invalidemail": "செல்லுபடியற்ற அஞ்சல் முகவரி",
+ "passwordreset-nodata": "பயனர் பெயர் மற்றும் மின்னஞ்சல் முகவரி கொடுக்கப்படவில்லை",
"changeemail": "மின்னஞ்சல் முகவரியை மாற்று / நீக்கு",
"changeemail-header": "இந்த படிவத்தை உங்கள் மின்னஞ்சல் முகவரியை மாற்ற பூர்த்தி செய்யவும். நீங்கள் இந்த மாற்றத்தை உறுதிசெய்ய உங்கள் கடவுச்சொல்லை உள்ளிட வேண்டிவரும். உங்கள் கணக்கிலிருந்து ஏதாவது மின்னஞ்சலை நீக்க விரும்பினால், படிவத்தை சமர்ப்பிக்கும்போது மின்னஞ்சல் முகவரியை காலியாக விடவும்.",
"changeemail-no-info": "இப்பக்கத்தை நேரடியாக அணுகுவதற்கு நீங்கள் புகுபதிகை செய்திருக்கவேண்டும்.",
"content-model-css": "சிஎஸ்எஸ்",
"content-json-empty-object": "காலி பொருள்",
"content-json-empty-array": "காலி அணி",
+ "deprecated-self-close-category": "தவறாக சுய மூடப்பட்ட HTML குறிச்சொற்களை பயன்படுத்தும் பக்கங்கள்",
"duplicate-args-category": "வார்ப்புரு அழைப்பில் ஒத்த விவாதங்களை கொண்ட பக்கங்கள்",
"duplicate-args-category-desc": "இப்பக்கம் விவாதங்களின் ஒத்த வடிவங்களைப் பயன்படுத்தும் வார்ப்புருக்களை, எடுத்துக்காட்டக <code><nowiki>{{foo|bar=1|bar=2}}</nowiki></code> or <code><nowiki>{{foo|bar|1=baz}}</nowiki></code> கொண்டுள்ளது.",
"expensive-parserfunction-warning": "எச்சரிக்கை: இப்பக்கம் அதிகளவு இலக்கணப் பாகுபடுத்திச் சார்புகளைக் கொண்டுள்ளது.\n\nஇது $2 {{PLURAL:$2|சார்புக்கும்|சார்புகளுக்கும் }} குறைவான இலக்கணப் பாகுபடுத்திச் சார்புகளைக் கொண்டிருக்க வேண்டும், ஆனால் தற்போது இதில் {{PLURAL:$1|$1 சார்பு|$1 சார்புகள்}} உள்ளன.",
"mergehistory-empty": "இணைக்கப்படக்கூடிய திருத்தங்கள் எதுவுமில்லை.",
"mergehistory-done": "$1 பக்கத்தின் {{PLURAL:$3|ஒரு திருத்தம்|$3 திருத்தங்கள்}} வெற்றிகரமாக [[:$2]] பக்கத்தில் இணைக்கப்பட்ட{{PLURAL:$3|து|ன}}.",
"mergehistory-fail": "வரலாற்றை இணைக்க முடியவில்லை. அருள் கூர்ந்து நேரங்களை ஒரு முறை சரி பார்க்கவும்.",
+ "mergehistory-fail-bad-timestamp": "செல்லுப்படியாகாத நேர முத்திரை.",
"mergehistory-fail-invalid-source": "மூலப்பக்கம் பயன்பாட்டில் இல்லை.",
"mergehistory-fail-invalid-dest": "இலக்குப் பக்கம் செல்லுபடியற்றது.",
+ "mergehistory-fail-permission": "வரலாறுகளை ஒன்றினைக்க தேவையாக அதிகாரங்கள் இல்லை.",
"mergehistory-fail-toobig": "$1 அளவுக்கு மேல் வரலாறு இணைப்பு செய்ய இயலவில்லை {{PLURAL:$1|revision|திருத்தங்கள்}} நகர்த்தப்படும்.",
"mergehistory-no-source": "மூலப் பக்கம் $1 இல்லை.",
"mergehistory-no-destination": "இலக்குப் பக்கம் $1 இல்லை.",
"search-interwiki-caption": "உறவுத் திட்டங்கள்",
"search-interwiki-default": "$1 தளத்திலிருந்து முடிவுகள்:",
"search-interwiki-more": "(மேலும்)",
+ "search-interwiki-more-results": "மேலும் முடிவுகள்",
"search-relatedarticle": "தொடர்புடையவை",
"searchrelated": "தொடர்புடையவை",
"searchall": "அனைத்தும்",
"action-userrights-interwiki": "ஏனைய விக்கித் தளங்களின் பயனர் உரிமைகளைத் தொகு",
"action-siteadmin": "தரவுதளத்தை பூட்டு அல்லது பூட்டாதே",
"action-sendemail": "மின்னஞ்சல்கள் அனுப்பு",
+ "action-editmyoptions": "உங்கள் விருப்பத்தேர்வுகளை தொகு",
"action-editmywatchlist": "உங்கள் கவனிப்பு பட்டியலை தொகு",
"action-viewmywatchlist": "உங்கள் கவனிப்பு பட்டியலை பார்",
"action-viewmyprivateinfo": "உங்கள் தனிப்பட்ட தகவல்களைப் பார்",
"action-managechangetags": "தரவுதளத்திலிருந்து அடையாளங்களை உருவாக்கு அல்லது நீக்கு",
"action-applychangetags": "உங்கள் மாற்றங்களுடன் அடையாளங்களைச் செயற்படுத்து",
"action-changetags": "தனியொருவரின் திருத்தம் மற்றும் செயற்பாட்டு பதிவுகளில் அடையாளங்களைச் சேர் அல்லது நீக்கு",
+ "action-purge": "இப்பக்கத்தினை துப்புரவாக்கு",
"nchanges": "{{PLURAL:$1|ஓர் மாற்றம்|$1 மாற்றங்கள்}}",
"enhancedrc-since-last-visit": "$1 {{PLURAL:$1|கடந்த வருகையிலிருந்து}}",
"enhancedrc-history": "வரலாறு",
"recentchanges-legend-newpage": "{{int:recentchanges-label-newpage}} ([[Special:NewPages|புதிய பக்கங்கள் பட்டியலையும்]] காணவும்)",
"recentchanges-submit": "காட்டு",
"rcfilters-filterlist-title": "வடிப்பான்கள்",
+ "rcfilters-highlightmenu-title": "ஒரு நிறத்தை தேர்ந்தெடுக்கவும்",
+ "rcfilters-filterlist-noresults": "எந்த வடிப்பானும் காணப்படவில்லை",
"rcfilters-filtergroup-registration": "பயனர் பதிகை",
"rcfilters-filter-registered-label": "பதிவுசெய்யப்பட்டது",
"rcfilters-filter-unregistered-label": "பதிவு நீக்கம் செய்யப்பட்டது",
"rcfilters-filter-editsbyself-label": "தங்களின் சொந்த தொகுப்புகள்",
+ "rcfilters-filter-editsbyself-description": "தங்களது தொகுப்புகள்.",
+ "rcfilters-filter-editsbyother-label": "மற்றவர் தொகுப்புகள்",
"rcfilters-filter-userExpLevel-newcomer-label": "புது வரவுகள்",
"rcfilters-filter-userExpLevel-learner-label": "கற்போர்",
+ "rcfilters-filter-userExpLevel-experienced-label": "அனுபவமுள்ள பயனர்கள்",
+ "rcfilters-filter-userExpLevel-experienced-description": "30 நாட்கள் நடவடிக்கை மற்றும் 500 தொகுப்புகளுக்கு மேல்",
+ "rcfilters-filtergroup-automated": "தானியக்க பங்களிப்பு",
"rcfilters-filter-bots-label": "தானியங்கி",
+ "rcfilters-filter-bots-description": "தானியக்க கருவிகளால ஆன தொகுப்புகள்",
"rcfilters-filter-humans-label": "மனிதன் (தானியங்கி அல்ல)",
+ "rcfilters-filter-humans-description": "மனித தொகுப்பாளர்களால் ஆன தொகுப்பு",
+ "rcfilters-filtergroup-significance": "சிறப்பு",
+ "rcfilters-filter-minor-label": "சிறு தொகுப்பு",
"rcfilters-filtergroup-changetype": "மாற்ற வகை",
+ "rcfilters-filter-pageedits-label": "பக்க தொகுப்புகள்",
"rcfilters-filter-newpages-label": "பக்க உருவாக்கங்கள்",
"rcnotefrom": "கீழே காணப்படுவது <strong>$3, $4</strong> இலிருந்து செய்யப்பட்ட (<strong>$1</strong> வரைக் காட்டப்பட்டுள்ளது) {{PLURAL:$5|மாற்றமாகும்.|மாற்றங்களாகும்.}}",
"rclistfrom": "$2, $3 முதல் இன்று வரை செய்யப்பட்ட புதிய மாற்றங்களைக் காட்டவும்",
"uploaddisabledtext": "கோப்பு பதிவேற்றங்கள் செயலிழக்கச் செய்யப்பட்டுள்ளன.",
"php-uploaddisabledtext": "கோப்பு தரவேற்றம் PHP இல் முடக்கப்பட்டுள்ளது.தயவுகூர்ந்து file_uploads அமைப்பை சரிபார்க்கவும்.",
"uploadscripted": "இந்தக் கோப்பு உலாவியால் பிழையாக விளங்கிக் கொள்ளக்கூடிய எச்.டி.எம்.எல். அல்லது வேறு நிரல்களைக் கொண்டுள்ளது.",
- "uploadscriptednamespace": "இந்த SVG கோப்பு ஒரு சரியில்லாத பெயரிடைவெளியை \"<nowiki>$1</nowiki>\" கொண்டுள்ளது.",
+ "uploadscriptednamespace": "இந்த SVG கோப்பு ஒரு சரியில்லாத பெயரிடைவெளியை கொண்டுள்ளது \"<nowiki>$1</nowiki>\".",
"uploadinvalidxml": "ஏற்றபட்ட கோப்பில் உள்ள XML ஆராய முடியாது.",
"uploadvirus": "கோப்பு நச்சுநிரலைக் (வைரஸ்) கொண்டுள்ளது! விபரங்கள்:$1",
"uploadjava": "இது ஒரு zip கோப்பு.இதில் java.class என்ற கோப்பு உள்ளது.\nஜாவா கோப்புகளை தகவலேற்றுவது தடைசெய்யப்பட்டுள்ளது.ஏனெனில் அது பாதுகாப்பு தடைகளை மீற வழிவகுக்கும்.",
"apisandbox-request-url-label": "URL வேண்டுகோள்:",
"apisandbox-request-time": "வேண்டுகோள் நேரம்: {{PLURAL:$1|$1 மிசெ}}",
"apisandbox-results-fixtoken": "அட்டையை திருத்தி மீண்டும் சமர்பிக்கவும்",
+ "apisandbox-continue": "தொடரவும்",
+ "apisandbox-continue-clear": "வெறுமையாக்குக",
"booksources": "நூல் மூலங்கள்",
"booksources-search-legend": "நூல் மூலங்களைத் தேடு",
"booksources-search": "தேடுக",
"listgrouprights-namespaceprotection-header": "பெயர்வெளி கட்டுப்பாடு",
"listgrouprights-namespaceprotection-namespace": "பெயர்வெளி",
"listgrouprights-namespaceprotection-restrictedto": "பயனரை திருத்த அனுமதிக்கும் உரிமை(கள்)",
+ "listgrants-grant": "நல்கை",
"listgrants-rights": "அணுக்கங்கள்",
"trackingcategories": "பகுப்புகளை தடமறி",
"trackingcategories-msg": "பகுப்புகளை தடமறிதல்",
"changecontentmodel-title-label": "பக்கத் தலைப்பு",
"changecontentmodel-model-label": "புது உள்ளடக்க மாதிரி",
"changecontentmodel-reason-label": "காரணம்:",
+ "changecontentmodel-submit": "மாற்றுக",
"changecontentmodel-success-title": "உள்ளடக்க மாதிரி மாற்றப்பட்டது",
"changecontentmodel-success-text": "[[:$1]]-இன் உள்ளடக்க வகை மாற்றப்பட்டது",
"log-name-contentmodel": "உள்ளடக்க மாதிரி மாற்றப் பதிகை",
"ipb-unblock": "ஐ.பி. அல்லது பயனருக்கான தடையை நீக்கு",
"ipb-blocklist": "தற்போதுள்ள தடுப்புகளைப் பார்",
"ipb-blocklist-contribs": "{{GENDER:$1|$1}}க்கு பங்களிப்புகள்",
+ "ipb-blocklist-duration-left": "$1 வெளியேறினர்",
"unblockip": "பயனர் தடையை நீக்கு",
"unblockiptext": "முன்னர் தடுக்கப்பட்ட ஐ.பி. முகவரி அல்லது பயனர்பெயரின் எழுத்து அணுக்கத்தை மீழ்விப்பதற்கு கீழேயுள்ள படிவத்தை பயன்படுத்தவும்.",
"ipusubmit": "இந்தத் தடையை நீக்கு",
"lockdbsuccesstext": "தரவுத்தளம் பூட்டப் பட்டது.<br />பராமரிப்பு முடிவடைந்ததும் [[Special:UnlockDB|பூட்டை நீக்க]] மறவாதீர்.",
"unlockdbsuccesstext": "தரவுத்தளம் திறக்கப்பட்டது.",
"lockfilenotwritable": "தரவுதள பூட்டு கோப்பு எழுதுமாறு இல்லை.\nஇத்தரவுதளத்தை பூட்ட அல்லது பூட்டியதை நீக்க , இது வலை சேவகன் எழுதுவதற்க்கேற்றவாறு இருக்க வேண்டும்.",
+ "databaselocked": "தரவுத்தளம் ஏற்கனவே பூட்டப்பட்டுள்ளது.",
"databasenotlocked": "தரவுத்தளம் பூட்டப்படவில்லை.",
"lockedbyandtime": "(இதன்படி{{GENDER:$1|$1}} on $2 at $3)",
"move-page": "$1 பக்கத்தை நகர்த்து",
"export-download": "கோப்பாக சேமி",
"export-templates": "வார்ப்புருக்களையும் உள்ளடக்கு",
"export-pagelinks": "இணைத்த பக்கங்களை கீழ்வரும் ஆழம் வரை சேர்:",
+ "export-manual": "கைமுறையாக பக்கங்களை சேர்க:",
"allmessages": "அனைத்து முறைமைசார் தகவல்கள் அட்டவணை",
"allmessagesname": "பெயர்",
"allmessagesdefault": "இயல்பிருப்பு உரை",
"tooltip-ca-nstab-category": "பகுப்புப் பக்கத்தை பார்க்க",
"tooltip-minoredit": "இம்மாற்றத்தை சிறிய தொகுப்பாக கருது",
"tooltip-save": "உங்கள் மாற்றங்களைச் சேமிக்கவும்.",
+ "tooltip-publish": "மாற்றங்களைப் பதிப்பிடுக",
"tooltip-preview": "நீங்கள் செய்த மாற்றங்களின் முன்தோற்றம் பார்க்கவும்! தயவுசெய்து, மாற்றங்களை சேமிக்கும் முன்னர் இதனைப் பயன்படுத்தவும்!",
"tooltip-diff": "உரையில் நீங்கள் செய்த மாற்றங்களைக் காட்டவும்.",
"tooltip-compareselectedversions": "இப் பக்கத்தின் தெரிவு செய்யப்பட்ட இரண்டு பதிப்புக்களுக்கு இடையிலான வேறுபாடுகளைப் பார்க்கவும்.",
"pageinfo-category-pages": "பக்கங்களின் எண்ணிக்கை",
"pageinfo-category-subcats": "துணைபகுப்புகளின் எண்ணிக்கை",
"pageinfo-category-files": "கோப்புகளின் எண்ணிக்கை",
+ "pageinfo-user-id": "பயனர் அடையாளம்",
"markaspatrolleddiff": "ரோந்திட்டதாக குறி",
"markaspatrolledtext": "இதனை சுற்றுக்காவல் செய்ததாகக் குறி",
"markaspatrolledtext-file": "இக்கோப்பு பதிப்பினை ரோந்திட்டதாக குறி",
"patrol-log-header": "இது ரோந்து செய்யப்பட்ட பரிசீலனைகளுக்கான குறிப்பேடு.",
"log-show-hide-patrol": "$1 ரோந்து குறிப்பேடு",
"log-show-hide-tag": "$1 அடையாள பதிவு",
+ "confirm-markpatrolled-button": "சரி",
"deletedrevision": "பழைய திருத்தம் $1 நீக்கப்பட்டது",
"filedeleteerror-short": "பின்வரும் கோப்பை நீக்குவதில் தவறு: $1",
"filedeleteerror-long": "கோப்பை நீக்கும் போது தவறுகள் ஏற்பட்டுள்ளன:\n\n$1",
"newimages-showbots": "தானியிங்கி பதிவேற்றங்களைக் காட்டு",
"newimages-hidepatrolled": "ரோந்திட்ட பதிவேற்றங்களை மறை",
"noimages": "பார்வைக்கு ஓன்றுமில்லை.",
+ "gallery-slideshow-toggle": "வில்லைப்படங்களை ஊசலாடு",
"ilsubmit": "தேடுக",
"bydate": "நாள் வழி",
"sp-newimages-showfrom": "$1, $2க்குப் பின்னரான புதியக் கோப்புக்களைக் காட்டுக",
"confirm-watch-top": "இப்பக்கத்தை உங்கள் கவனிப்புப் பட்டியலில் சேர்க்க வேண்டுமா?",
"confirm-unwatch-button": "சரி",
"confirm-unwatch-top": "இப்பக்கத்தை உங்கள் கவனிப்புப் பட்டியலிருந்து நீக்கா வேண்டுமா?",
+ "confirm-rollback-button": "சரி",
"quotation-marks": "\"$1\"",
"imgmultipageprev": "← முந்திய பக்கம்",
"imgmultipagenext": "அடுத்தப் பக்கம் →",
"htmlform-cloner-create": "மேலும் சேர்க",
"htmlform-cloner-delete": "நீக்குக",
"htmlform-cloner-required": "குறைந்து ஒரு மதிப்பு தேவைப்படும்.",
+ "htmlform-date-placeholder": "வவவவ-மாமா-தேதே",
+ "htmlform-time-placeholder": "மம:நிநி:நொநொ",
+ "htmlform-datetime-placeholder": "வவவவ-மாமா-தேதே மம:நிநி:நொநொ",
"htmlform-title-badnamespace": "\"{{ns:$2}}\" பெயர்வெளியில் [[:$1]] இல்லை",
"htmlform-title-not-creatable": "\"$1\" ஒரு உருவாக்கத்தக்க பக்கத் தலைப்பு அல்ல",
"htmlform-title-not-exists": "$1 இ்டம்பெறவில்லை.",
"pagelang-select-lang": "மொழியைத் தேர்ந்தெடு",
"pagelang-reason": "காரணம்",
"pagelang-submit": "சமர்ப்பி",
+ "pagelang-nonexistent-page": "பக்கம் $1 காணப்படவில்லை.",
"right-pagelang": "பக்க மொழியை மாற்றுக",
"action-pagelang": "பக்க மொழியை மாற்றுக",
"log-name-pagelang": "மொழி பதிவை மாற்றுக",
"log-description-pagelang": "இது பக்க மொழி மாற்றச் செயல்பாட்டின் பதிவு.",
"logentry-pagelang-pagelang": "$3 க்கான பக்க மொழியை $4 இலிருந்து $5 க்கு $1 {{GENDER:$2|மாற்றினார்}}.",
+ "mediastatistics": "ஊடகம் பற்றிய புள்ளிவிவரங்கள்",
"mediastatistics-bytespertype": "இந்த பிரிவக்கான மொத்த கோப்பளவு: $1 எண்ணுண்மி",
"mediastatistics-allbytes": "அனைத்து கோப்புகளின் மொத்த கோப்பளவு: $1 எண்ணுண்மி",
"mediastatistics-table-count": "கோப்புகளின் எண்ணிக்கை",
"mediastatistics-header-video": "காணொளிகள்",
"mediastatistics-header-office": "அலுவலகம்",
"mediastatistics-header-text": "உரை வடிவ",
+ "mediastatistics-header-archive": "அமுக்கிய வடிவங்கள்",
"mediastatistics-header-total": "அனைத்துக் கோப்புக்களும்",
"json-error-syntax": "தொடரியல் பிழை",
"special-characters-group-latin": "இலத்தீன்",
"special-characters-group-ipa": "பன்னாட்டு ஒலிப்பு அரிச்சுவடி",
"special-characters-group-symbols": "குறியீடுகள்",
"special-characters-group-greek": "கிரேக்கம்",
+ "special-characters-group-greekextended": "நீடித்த கிரேக்கம்",
"special-characters-group-cyrillic": "சைரிலிக் (Cyrillic)",
"special-characters-group-arabic": "அரபு",
"special-characters-group-arabicextended": "அரபு விரிவு",
"special-characters-title-emdash": "பெரு கோடு",
"special-characters-title-minus": "கழித்தல் குறி",
"mw-widgets-dateinput-no-date": "திகதி தெரிவுச் செய்யப்படவில்லை",
+ "mw-widgets-mediasearch-noresults": "முடிவுகள் எதுவும் காணப்படவில்லை.",
"mw-widgets-titleinput-description-new-page": "இப்பக்கம் இன்னும் உருவாக்கப்படவில்லை",
"mw-widgets-titleinput-description-redirect": "$1-க்கு வழிமாற்று",
+ "mw-widgets-categoryselector-add-category-placeholder": "ஒரு பகுப்பைச் சேர்க...",
+ "mw-widgets-usersmultiselect-placeholder": "மேலும் சேர்க...",
"sessionprovider-generic": "$1 பகுதி",
"sessionprovider-mediawiki-session-cookiesessionprovider": "குக்கீயை அடிபடையாக்கக் கொண்ட பகுதிகள்",
"sessionprovider-nocookies": "குக்கீசு செயலற்று இருக்கலாம். உங்களது குக்கீசு செயலில் உள்ளது என உறுதிப்படுத்திவிட்டு மீண்டும் முயல்க.",
"recentchanges-legend-newpage": "{{int:recentchanges-label-newpage}} ([[Special:NewPages|కొత్త పేజీల జాబితా]]ను కూడా చూడండి)",
"recentchanges-submit": "చూపించు",
"rcfilters-filterlist-title": "వడపోతలు",
+ "rcfilters-highlightmenu-title": "ఒక రంగును ఎంచుకోండి",
"rcfilters-filtergroup-registration": "వాడుకరి నమోదు",
"rcfilters-filter-editsbyself-label": "మీ స్వంత దిద్దుబాట్లు",
"rcfilters-filter-editsbyself-description": "మీ దిద్దుబాట్లు.",
"selfredirect": "<strong>คำเตือน:</strong> คุณกำลังสร้างการเปลี่ยนทางไปบทความเดียวกัน\nคุณอาจระบุเป้าหมายของการเปลี่ยนทางผิด หรือคถณอาจแก้ไขหน้าผิด \nหากคุณคลิก \"{{int:savearticle}}\" อีกครั้ง จะสร้างการเปลี่ยนทาง",
"missingcommenttext": "กรุณากรอกความเห็นด้านล่าง",
"missingcommentheader": "<strong>อย่าลืม:</strong> คุณยังไม่ได้ใส่เรื่องสำหรับความเห็นนี้ \nถ้าคุณคลิก \"{{int:savearticle}}\" อีก จะบันทึกการแก้ไขของคุณโดยไม่ระบุเรื่อง",
- "summary-preview": "ตัวอย่างคำอธิบาย:",
- "subject-preview": "ตัวอย่างเรื่อง:",
+ "summary-preview": "ตัวอย่างคำอธิบายการแก้ไข:",
+ "subject-preview": "à¸\95ัวà¸à¸¢à¹\88าà¸\87à¸\8aืà¹\88à¸à¹\80รืà¹\88à¸à¸\87:",
"previewerrortext": "เกิดข้อผิดพลาดขณะกำลังพยายามดูตัวอย่างการเปลี่ยนแปลงของคุณ",
"blockedtitle": "ผู้ใช้ถูกบล็อก",
"blockedtext": "<strong>ชื่อผู้ใช้หรือเลขที่อยู่ไอพีของคุณถูกบล็อก</strong>\n\nการบล็อกนี้ดำเนินการโดย $1\nซึ่งให้เหตุผลว่า ''$2''\n\n* เริ่มการบล็อก: $8\n* หมดเขตการบล็อก: $6\n* ผู้ถูกบล็อกที่เจตนา: $7\n\nคุณสามารถติดต่อ $1 หรือ[[{{MediaWiki:Grouppage-sysop}}|ผู้ดูแลระบบ]]คนอื่นเพื่ออภิปรายการบล็อกนี้ได้\nคุณไม่สามารถใช้คุณลักษณะ \"ส่งอีเมลหาผู้ใช้รายนี้ได้\" จนกว่าจะระบุที่อยู่อีเมลให้ถูกต้องใน[[Special:Preferences|การตั้งค่าบัญชี]]ของคุณ และคุณมิได้ถูกห้ามใช้ความสามารถนี้\nเลขที่อยู่ไอพีปัจจุบันของคุณคือ $3 และหมายเลขการบล็อกคือ #$5 \nโปรดแสดงรายละเอียดข้างต้นทั้งหมดในการสอบถามใด ๆ",
"invalid-content-data": "ข้อมูลเนื้อหาไม่ถูกต้อง",
"content-not-allowed-here": "ไม่อนุญาตเนื้อหา \"$1\" ในหน้า [[$2]]",
"editwarning-warning": "การออกจากหน้านี้อาจทำให้ความเปลี่ยนแปลงที่คุณดำเนินการสูญหาย\nถ้าคุณล็อกอินแล้ว คุณสามารถปิดคำเตือนนี้ได้ที่ส่วน \"{{int:prefs-editing}}\" ในการตั้งค่าของคุณ",
+ "editpage-invalidcontentmodel-title": "ไม่รองรับรูปแบบเนื้อหานี้",
"editpage-notsupportedcontentformat-title": "รูปแบบเนื้อหาไม่ได้รับการรองรับ",
"editpage-notsupportedcontentformat-text": "ตัวแบบเนื้อหา $2 ไม่รองรับตัวแบบเนื้อหา $1",
"content-model-wikitext": "ข้อความวิกิ",
"editinguser": "กำลังเปลี่ยนสิทธิผู้ใช้ของผู้ใช้ <strong>[[User:$1|$1]]</strong> $2",
"viewinguserrights": "กำลังดูสิทธิผู้ใช้ของผู้ใช้ <strong>[[User:$1|$1]]</strong> $2",
"userrights-editusergroup": "แก้ไขกลุ่มผู้ใช้",
- "userrights-viewusergroup": "ดูกลุ่มผู้ใช้",
+ "userrights-viewusergroup": "ดูกลุ่ม{{GENDER:$1|ผู้ใช้}}",
"saveusergroups": "บันทึกกลุ่ม{{GENDER:$1|ผู้ใช้}}",
"userrights-groupsmember": "สมาชิกของ:",
"userrights-groupsmember-auto": "สมาชิกโดยปริยายของ:",
"passwordreset-emaildisabled": "Le funsionalità de posta eletrònega le xe stà disabilità su sta wiki.",
"passwordreset-username": "Nome utente:",
"passwordreset-domain": "Dominio",
- "passwordreset-capture": "Vixuałixare el contenuto del mesajo de posta ełetronega?",
- "passwordreset-capture-help": "Se se sełesiona sta caxeła, l'indiriso de posta ełetronega (co' ła password tenporanea) ve vegnarà mostrà anca a voialtri oltre che esare invià a 'l utente.",
"passwordreset-email": "Indiriso de posta ełetronega",
"passwordreset-emailtitle": "Detaji de l'account so {{SITENAME}}",
"passwordreset-emailtext-ip": "Cualcheduni (probabilmente ti, co indiriso IP $1) ga richiesto l'invio de na nova password par l'aceso a {{SITENAME}} ($4). {{PLURAL:$3|L'utente asocià|I utenti asociadi}} a sto indiriso de posta ełetronega łi xe:\n\n$2\n\n{{PLURAL:$3|Sta password tenporanea ła scadarà|Ste password tenporanee łe scadarà}} dopo {{PLURAL:$5|un dì|$5 dì}}.\n\nSarìa mejo acedare e deçidare na nova password sùito. Se no te si stà ti a fare ła richiesta, o se te te ghe ricordà ła password originałe e no te vołi pi canbiarla, te połi ignorare sto mesajo e continuar doparare ła to password vecia.",
"userinvalidcssjstitle": "'''Ocio:''' No ghe xe nissuna skin con nome \"$1\". Nota che le pagine par i .css e .js personalizà le gà l'iniziale del titolo minuscola, par esenpio {{ns:user}}:Esenpio/vector.css e no {{ns:user}}:Esenpio/Vector.css.",
"updated": "(Agiornà)",
"note": "'''Nota:'''",
- "previewnote": "Sta cua ła xe soło n'anteprima; i canbiamenti a ła pajina NO i xe gnancora stà salvài!",
+ "previewnote": "'''Tiente in mente che sta qua la xe solo n'anteprima.'''\nI to canbiamenti NO i xe gnancora stà salvài!",
"continue-editing": "Va a l'area de modifega",
"previewconflict": "Sta anteprima la corisponde al testo ne la casèla de edizion de sora, e la fa védar come vegnarà fora la pagina se te machi \"Salva la pagina\" in sto momento.",
"session_fail_preview": "No xè stà possibiłe salvar le to modifiche parché i dati de la session i xè andai persi.\nPar piaser, riproa da novo.\nSe no funsiona gnancora, proa a [[Special:UserLogout|scołegarte]] e a cołegarte de novo.'''",
"saveprefs": "Salva le preferense",
"restoreprefs": "Ripristina le inpostassion predefinìe",
"prefs-editing": "Canbiamento",
- "rows": "Righe:",
- "columns": "Cołone:",
"searchresultshead": "Riserca",
"stub-threshold": "Valor minimo par i <a href=\"#\" class=\"stub\">colegamenti ai stub</a>:",
"stub-threshold-disabled": "Disativà",
"userrights-reason": "Motivassion:",
"userrights-no-interwiki": "No te ghè i parmessi necessari par modificar i diriti dei utenti su altri siti.",
"userrights-nodatabase": "El database $1 no l'esiste mìa o no l'è un database local.",
- "userrights-nologin": "Par assegnarghe diriti ai utenti te ghè da [[Special:UserLogin|efetuar l'acesso]] come aministrador.",
- "userrights-notallowed": "No te ghe i parmesi necesari par xontarghe o cavarghe diriti ai utenti.",
"userrights-changeable-col": "Grupi che te pol canbiar",
"userrights-unchangeable-col": "Grupi che no te pol canbiar",
"userrights-conflict": "Conflito de diriti utente! Aplica de novo le to modifiche.",
"right-siteadmin": "Bloca e desbloca el database",
"right-override-export-depth": "Esporta le pàxene, includendo le pàxene ligàe fin a na profondità de 5",
"right-sendemail": "Mandarghe e-mail a cheialtri utenti",
- "right-passwordreset": "Vedi i mesaji de rinpostasion de ła password",
"newuserlogpage": "Novi utenti",
"newuserlogpagetext": "Sto qua el xè el registro dei novi utenti registrai.",
"rightslog": "Diriti de i utenti",
"sp-contributions-search": "Serca contributi",
"sp-contributions-username": "Indirizo IP o nome utente:",
"sp-contributions-toponly": "Mostra solo i contributi che i xe l'ultima revision de la pagina",
+ "sp-contributions-newonly": "Fame védar solo le creassion de pagina",
+ "sp-contributions-hideminor": "Scondi i canbiamenti picenini",
"sp-contributions-submit": "Riserca",
"whatlinkshere": "Punta qua",
"whatlinkshere-title": "Pagine che ponta a ''$1''",
"feedback-thanks-title": "Grassie!",
"searchsuggest-search": "Serca drento de {{SITENAME}}",
"searchsuggest-containing": "che contien...",
- "api-error-badaccess-groups": "Nó te si autorixà a cargar documenti so sta wiki.",
"api-error-badtoken": "Eror interno: token fałà.",
- "api-error-copyuploaddisabled": "El cargamento tramite URL el xe dixabiłità so sto server.",
- "api-error-duplicate": "So'l sito {{PLURAL:$1|ghe xe xà 'n altro documento|ghe xe xà altri documenti}} có 'l steso contegnuo.",
- "api-error-duplicate-archive": "{{PLURAL:$1|Ghe xera 'n altro file|Ghe xera altri file}} xà inte'l sito có 'l steso contegnuo, ma {{PLURAL:$1|el xe sta scansełà|i xe stai scansełai}}.",
- "api-error-empty-file": "El file sełesionà el gera vodo.",
"api-error-emptypage": "Ła creasion de nove pàjine vode nó ła xe consentia.",
- "api-error-fetchfileerror": "Eror interno: ghe xe sta un problema durante el recupero del documento.",
- "api-error-fileexists-forbidden": "Un file de nome \"$1\" 'l existe xà e nò 'l pol esar sovrascrito.",
- "api-error-fileexists-shared-forbidden": "Un file de nome \"$1\" 'l existe xà inte'l repository condivixo e nó 'l pol esar sovrascrito.",
- "api-error-file-too-large": "El file sełesionà el gera masa grando.",
- "api-error-filename-tooshort": "El nome del file el xe massa curto.",
- "api-error-filetype-banned": "Sto tipo de file el xe vietà.",
- "api-error-filetype-banned-type": "$1 {{PLURAL:$4|nó 'l xe un tipo de file consentio|nó i xe tipi de file consentìi}}. {{PLURAL:$3|El tipo de file consentio el xe|I tipi de file consentìi i xe}} $2.",
- "api-error-filetype-missing": "Al file ghe manca l'estension.",
- "api-error-hookaborted": "Ła modifega che te ghe proà a far ła xe sta interota da na estension.",
- "api-error-http": "Eror interno: inposibiłe conetarse al server.",
- "api-error-illegal-filename": "El nome del file nó 'l xe parmeso.",
- "api-error-internal-error": "Eror interno: calcosa xe ndà storo có l'elaborasion del to cargamento so ła wiki.",
- "api-error-invalid-file-key": "Eror interno: file nó prexente inte ła carteła de i file tenporanei.",
- "api-error-missingparam": "Eror interno: parametri de ła dimanda mancanti.",
- "api-error-missingresult": "Eror interno: inposibiłe determinar se ła copia ła xe riusia.",
- "api-error-mustbeloggedin": "Te ghe da efetuar 'l aceso par cargar i file.",
- "api-error-mustbeposted": "Eror interno: ła dimanda dimanda HTTP POST.",
- "api-error-noimageinfo": "El cargamento el xe riusio, ma 'l server nó el ne ga dato gnauna informasion so'l file.",
- "api-error-nomodule": "Eror interno: nó xe sta inpostà el moduło de cargamento.",
- "api-error-ok-but-empty": "Eror interno: nisuna risposta dal server.",
- "api-error-overwrite": "Nó xe parmeso de sorascrìvar un file existente.",
- "api-error-stashfailed": "Eror interno: el server nó 'l xe riusio a memorixar el documento tenporaneo.",
"api-error-publishfailed": "Eror interno: el server nó 'l xe riusio a publicar el documento tenporaneo.",
- "api-error-timeout": "El server nó 'l ga risposto entro el tenpo previsto.",
- "api-error-unclassified": "Se gà verifegà un eror sconosùo.",
- "api-error-unknown-code": "Eror sconosùo: \"$1\"",
- "api-error-unknown-error": "Eror interno: calcosa xe ndà storto có se jera drio proar a cargar el file.",
+ "api-error-stashfailed": "Eror interno: el server nó 'l xe riusio a memorixar el documento tenporaneo.",
"api-error-unknown-warning": "Avixo sconosùo: \"$1\".",
"api-error-unknownerror": "Eror sconosùo: \"$1\".",
- "api-error-uploaddisabled": "El cargamento el xe dixabiłità so sta wiki.",
- "api-error-verification-error": "Sto file el podaria esar danegià, o 'ver l'estension sbałià.",
"duration-seconds": "$1 {{PLURAL:$1|secondo|secondi}}",
"duration-minutes": "$1 {{PLURAL:$1|minuto|minuti}}",
"duration-hours": "$1 {{PLURAL:$1|ora|ore}}",
"whatlinkshere-filters": "Mga panara",
"whatlinkshere-submit": "Kadto-a",
"block": "Pugngi an gumaramit",
- "blockip": "Pugngi an{{GENDER:$1|gumaramit}}",
+ "blockip": "Pugngi an {{GENDER:$1|gumaramit}}",
"blockip-legend": "Pugngi an gumaramit",
"ipaddressorusername": "IP address o agnay-hit-gumaramit:",
"ipbexpiry": "Matitima an dulot:",
"createacct-email-ph": "קלאַפט ארײַן אײַער בליצפּאָסט אַדרעס",
"createacct-another-email-ph": "אַרײַנגעבן בליצפּאָסט אַדרעס",
"createaccountmail": "ניצן א פראוויזאריש פאסווארט און שיקן צום געצייכנטן ע-פאסט אדרעס",
+ "createaccountmail-help": "קען ווערן באניצט צו שאפֿן קאנטע פֿאר א צווייטן אן צו דערגיין דאס פאסווארט.",
"createacct-realname": "עכטער נאמען (אפציאנאל)",
"createaccountreason": "אורזאַך:",
"createacct-reason": "אורזאך",
"content-model-css": "CSS",
"content-json-empty-object": "ליידיגער אביעקט",
"content-json-empty-array": "ליידיגער אריי",
+ "deprecated-self-close-category": "בלעטער וואס ניצן אומגילטיגע אליין־פֿאַרמאַכטע HTML טאַגן",
"duplicate-args-warning": "<strong>ווארענונג:</strong> [[:$1]] רופט [[:$2]] מיט מער ווי איין ווערט פארן פאראמעטער \"$3\". נאר דעם לעצטן ווערט וועט מען ניצן.",
"duplicate-args-category": "בלעטער וואס ניצן געטאפלטע ארגומענטן אין א מוסטער־רוף",
"duplicate-args-category-desc": "דער בלאט אנטהאלט מוסטער־אויפרופן וואס ניצן דופליקאטן פון ארגומענטן, ווי למשל <code><nowiki>{{foo|bar=1|bar=2}}</nowiki></code> or <code><nowiki>{{foo|bar|1=baz}}</nowiki></code>.",
"search-interwiki-caption": "שוועסטער פראיעקטן",
"search-interwiki-default": "רעזולטאטן פון $1:",
"search-interwiki-more": "(נאך)",
+ "search-interwiki-more-results": "נאך רעזולטאטן",
"search-relatedarticle": "פארבינדן",
"searchrelated": "פארבינדן",
"searchall": "אלץ",
"youremail": "ע-פאסט:",
"username": "{{GENDER:$1|באַניצער־נאָמען}}:",
"prefs-memberingroups": "{{GENDER:$2|מיטגליד}} אין {{PLURAL:$1|גרופע|גרופעס}}:",
+ "group-membership-link-with-expiry": "$1 (ביז $2)",
"prefs-registration": "אײַנשרײַבן צײַט:",
"yourrealname": "עכטער נאָמען:",
"yourlanguage": "שפּראַך:",
"userrights-nodatabase": "דאַטנבאַזע $1 אדער עקזיסטירט נישט אדער איז נישט ארטיק.",
"userrights-changeable-col": "גרופעס איר קענט ענדערן",
"userrights-unchangeable-col": "גרופעס איר קענט נישט ענדערן",
+ "userrights-expiry-current": "לאזט אויס $1",
+ "userrights-expiry-none": "לאזט נישט אויס",
+ "userrights-expiry": "גייט אויס:",
+ "userrights-expiry-existing": "עקזיסטירנדע אויסלאז צײַט: $3, $2",
+ "userrights-expiry-othertime": "אַנדער צײט:",
+ "userrights-expiry-options": "1 טאג:1 day,1 וואך:1 week,1 Monat:1 month,3 מאנאט:3 months,6 מאנאטן:6 months,1 יאר:1 year",
"userrights-conflict": "קאנפֿליקט פון באניצער־רעכטן ענדערונגען! זייט אזוי גוט רעצענזירן און באשטעטיקן אײַערע ענדערונגען.",
"group": "גרופע:",
"group-user": "באניצערס",
"recentchanges-legend-newpage": "{{int:recentchanges-label-newpage}} (זעט אויך [[Special:NewPages|די רשימה פון נייע בלעטער]])",
"recentchanges-legend-plusminus": "(''±123'')",
"recentchanges-submit": "ווייזן",
+ "rcfilters-invalid-filter": "אומגילטיגער פֿילטער",
+ "rcfilters-filterlist-title": "פֿילטערס",
+ "rcfilters-filterlist-noresults": "קיין פֿילטערס נישט געטראפֿן",
+ "rcfilters-filter-bots-label": "באט",
"rcnotefrom": "פֿאלגנד {{PLURAL:$5|איז די ענדערונג| זענען די ענדערונגען}} זײַט <strong>$3, $4</strong> (ביז <strong>$1</strong>).",
"rclistfrom": "װײַזן נײַע ענדערונגען פֿון $3 $2",
"rcshowhideminor": "$1 מינערדיגע ענדערונגען",
"period-am": "AM",
"period-pm": "PM",
"pagecategories": "{{PLURAL:$1|分类}}",
- "category_header": "å\88\86ç±»â\80\9c$1â\80\9dä¸的页面",
+ "category_header": "å\88\86ç±»â\80\9c$1â\80\9dä¸\8b的页面",
"subcategories": "子分类",
"category-media-header": "分类“$1”中的媒体文件",
"category-empty": "<em>本分类目前不含有任何页面或媒体文件。</em>",
"rcfilters-invalid-filter": "无效过滤器",
"rcfilters-empty-filter": "没有活跃的过滤器。已显示所有贡献。",
"rcfilters-filterlist-title": "过滤器",
+ "rcfilters-highlightbutton-title": "高亮结果",
+ "rcfilters-highlightmenu-title": "选择颜色",
"rcfilters-filterlist-noresults": "找不到过滤器",
"rcfilters-filtergroup-registration": "用户注册",
"rcfilters-filter-registered-label": "已注册",
"recentchangeslinked-feed": "相关更改",
"recentchangeslinked-toolbox": "相关更改",
"recentchangeslinked-title": "与“$1”有关的更改",
- "recentchangeslinked-summary": "这是链接自指定页面(或至指定分类的成员)的页面的最近更改的列表。[[Special:Watchlist|你的监视列表]]中的页面以<strong>粗体</strong>显示。",
+ "recentchangeslinked-summary": "这是链接自指定页面(或至指定分类的成员)的页面的最近更改的列表。[[Special:Watchlist|您的监视列表]]中的页面以<strong>粗体</strong>显示。",
"recentchangeslinked-page": "页面名称:",
"recentchangeslinked-to": "显示链到所给出的页面",
"recentchanges-page-added-to-category": "[[:$1]]已添加至分类",
"randompage-nopages": "在以下{{PLURAL:$2|名字空间}}中没有页面:$1。",
"randomincategory": "分类中随机页面",
"randomincategory-invalidcategory": "“$1”不是一个有效的分类名称。",
- "randomincategory-nopages": "[[:Category:$1|$1]]å\88\86ç±»ä¸没有页面。",
+ "randomincategory-nopages": "[[:Category:$1|$1]]å\88\86ç±»ä¸\8b没有页面。",
"randomincategory-category": "分类:",
"randomincategory-legend": "分类中随机页面",
"randomincategory-submit": "提交",
"ancientpages": "最老页面",
"move": "移动",
"movethispage": "移动本页",
- "unusedimagestext": "以下文件实际存在,但并没有插入任何页面。请注意,其他网站可能会使用直接URL链接某个文件,因此它即使被实际使用也可能在这里列出。",
+ "unusedimagestext": "存在以下没有插入任何页面的文件。请注意,其他网站可能会使用直接URL链接某个文件,因此它即使被实际使用也可能在这里列出。",
"unusedcategoriestext": "以下分类页面实际存在,即使没有其它页面或分类利用它们。",
"notargettitle": "无目标",
"notargettext": "您还没有指定一个目标页面或用户以进行此项操作。",
"editcomment": "编辑摘要:<em>$1</em>。",
"revertpage": "恢复[[Special:Contributions/$2|$2]]([[User talk:$2|讨论]])的编辑至[[User:$1|$1]]的最后版本",
"revertpage-nouser": "恢复隐藏用户的编辑至{{GENDER:$1|[[User:$1|$1]]}}的最后版本",
- "rollback-success": "已恢复$1的编辑,更改回$2的最后版本。",
+ "rollback-success": "已恢复{{GENDER:$3|$1}}的编辑;更改回{{GENDER:$4|$2}}的最后版本。",
"rollback-success-notify": "已回退$1的编辑,更改回$2的最后版本。[$3 显示更改]",
"sessionfailure-title": "会话无效",
"sessionfailure": "似乎您的登录会话有问题;\n为了防止会话劫持,这个操作已经被取消。\n请返回先前的页面,重新载入该页面,然后重试。",
"tooltip-pt-mytalk": "{{GENDER:|您}}的讨论页面",
"tooltip-pt-anontalk": "有关本IP地址的编辑的讨论",
"tooltip-pt-preferences": "{{GENDER:|您}}的设置",
- "tooltip-pt-watchlist": "你正在监视更改的页面的列表",
+ "tooltip-pt-watchlist": "您正在监视更改的页面的列表",
"tooltip-pt-mycontris": "{{GENDER:|您}}的贡献的列表",
"tooltip-pt-anoncontribs": "来自此IP地址的编辑列表",
"tooltip-pt-login": "我们鼓励您登录;然而,这不是强制性的",
"siteuser": "{{SITENAME}}用户$1",
"anonuser": "{{SITENAME}}匿名用户$1",
"lastmodifiedatby": "本页面被$3最后修改于$1 $2。",
- "othercontribs": "å\9fºäº\8e$1ç\9a\84å·¥ä½\9cã\80\82",
+ "othercontribs": "å\9fºäº\8e$1ç\9a\84å\8a³å\8a¨æ\88\90æ\9e\9cã\80\82",
"others": "其他",
"siteusers": "{{SITENAME}}{{PLURAL:$2|{{GENDER:$1|用户}}}}$1",
"anonusers": "{{SITENAME}}匿名{{PLURAL:$2|用户}}$1",
"variantname-gan-hant": "hant",
"variantname-kk-cyrl": "kk-cyrl",
"metadata": "元数据",
- "metadata-help": "此文件中包含有扩展的信息。这些信息可能是由数码相机或扫描仪在创建或数字化过程中所添加的。\n\n如果此文件的源文件已经被修改,一些信息在修改后的文件中将不能完全反映出来。",
+ "metadata-help": "此文件中包含有额外的信息。这些信息可能是由数码相机或扫描仪在创建或数字化过程中所添加的。如果文件自初始状态已受到修改,一些详细说明可能无法反映修改后的文件。",
"metadata-expand": "显示详细资料",
"metadata-collapse": "隐藏详细资料",
"metadata-fields": "在本信息中所列出的 EXIF 元数据域将包含在图片显示页面,当元数据表损坏时只显示以下信息。\n其他的元数据默认为隐藏。\n* make\n* model\n* datetimeoriginal\n* exposuretime\n* fnumber\n* isospeedratings\n* focallength\n* artist\n* copyright\n* imagedescription\n* gpslatitude\n* gpslongitude\n* gpsaltitude",
"Maskers",
"Knch903",
"Winstonyin",
- "Wmr"
+ "Wmr",
+ "烈羽"
]
},
"tog-underline": "底線標示連結:",
"talk": "討論",
"views": "檢視",
"toolbox": "工具",
- "tool-link-userrights": "更改{{GENDER:$1|使用者}}群組",
+ "tool-link-userrights": "變更{{GENDER:$1|使用者}}群組",
"tool-link-userrights-readonly": "檢視{{GENDER:$1|使用者}}群組",
"tool-link-emailuser": "寄信給這位{{GENDER:$1|使用者}}",
"userpage": "檢視使用者頁面",
"selfredirect": "<strong>警告:</strong> 您正建立連結至自己的重新導向。\n您可能指定錯要重新導向的目標頁面或者編輯錯頁面。\n若您再點選 \"{{int:savearticle}}\" 一次,將會繼續建立重新導向。",
"missingcommenttext": "請在下方輸入評論。",
"missingcommentheader": "<strong>提醒:</strong>您未填寫此評論的主旨。\n若您再點選 \"{{int:savearticle}}\" 一次,將略過主旨/標題直接儲存您的評論。",
- "summary-preview": "摘要預覽:",
+ "summary-preview": "預覽摘要:",
"subject-preview": "主旨預覽:",
"previewerrortext": "嘗試預覽您的變更時發生錯誤。",
"blockedtitle": "使用者已被封鎖",
"newarticle": "(新)",
"newarticletext": "您正連結至一頁不存在頁面。\n要建立該頁面,請在下方的編輯方塊中輸入內容 (詳情請參考 [$1 使用說明頁面]) 。\n如果您是不小心來到此頁面,請點選瀏覽器的 <strong>返回</strong> 按鈕。",
"anontalkpagetext": "----\n<em>此討論頁面是給尚未建立帳號的匿名使用者使用</em>\n因此我們必須使用 IP 位址來辨識身份,但相同的 IP 位址可能由許多不同的使用者所共用。\n如果您是匿名使用者並且覺得評論的內容與您無關,請 [[Special:CreateAccount|建立新帳號]] 或 [[Special:UserLogin|登入]] 避免與其他匿名使用者混淆。",
- "noarticletext": "此頁面目前沒有內容,您可以在其它頁面中[[Special:Search/{{PAGENAME}}|搜尋此頁面標題]]、<span class=\"plainlinks\">[{{fullurl:{{#Special:Log}}|page={{FULLPAGENAMEE}}}} 搜尋相關日誌]或[{{fullurl:{{FULLPAGENAME}}|action=edit}} 建立此頁]</span>。",
+ "noarticletext": "此頁面目前沒有內容,您可以在其它頁面中[[Special:Search/{{PAGENAME}}|搜尋此頁面標題]]、<span class=\"plainlinks\">[{{fullurl:{{#Special:Log}}|page={{FULLPAGENAMEE}}}} 搜尋相關日誌]或[{{fullurl:{{FULLPAGENAME}}|action=edit}} 建立此頁面]</span>。",
"noarticletext-nopermission": "此頁面目前沒有內容,\n您可以在其它頁面中 [[Special:Search/{{PAGENAME}}|搜尋此頁面標題]],或 <span class=\"plainlinks\">[{{fullurl:{{#Special:Log}}|page={{FULLPAGENAMEE}}}} 搜尋相關日誌]</span>,但您沒有權限建立此頁面。",
"missing-revision": "頁面名稱 \"{{FULLPAGENAME}}\" 的 #$1 修訂版本不存在。\n\n通常是因連結到過期的歷史頁面,該頁面已被刪除。\n詳情請參考 [{{fullurl:{{#Special:Log}}/delete|page={{FULLPAGENAMEE}}}} 刪除日誌]。",
"userpage-userdoesnotexist": "使用者帳號 \"$1\" 尚未註冊。\n若您要建立/編輯此頁面,請先檢查是否正確。",
"search-interwiki-caption": "姐妹專案",
"search-interwiki-default": "來自 $1 的結果:",
"search-interwiki-more": "(更多)",
+ "search-interwiki-more-results": "更多結果",
"search-relatedarticle": "相關",
"searchrelated": "相關",
"searchall": "全部",
"editinguser": "變更{{GENDER:$1|使用者}} <strong>[[User:$1|$1]]</strong> 的使用者權限 $2",
"viewinguserrights": "檢視{{GENDER:$1|使用者}}<strong>[[User:$1|$1]]</strong>的使用者權限 $2",
"userrights-editusergroup": "編輯使用者群組",
- "userrights-viewusergroup": "檢視使用者群組",
+ "userrights-viewusergroup": "檢視{{GENDER:$1|使用者}}群組",
"saveusergroups": "儲存{{GENDER:$1|使用者}}群組",
"userrights-groupsmember": "所屬群組:",
"userrights-groupsmember-auto": "所屬隱含群組:",
"rcfilters-search-placeholder": "過濾最近變更(瀏覽或開始輸入)",
"rcfilters-invalid-filter": "過濾規則無效",
"rcfilters-filterlist-title": "篩選器",
+ "rcfilters-highlightmenu-title": "選擇顏色",
"rcfilters-filterlist-noresults": "找不到過濾規則",
"rcfilters-filtergroup-authorship": "編輯者",
"rcfilters-filter-editsbyself-label": "您自己的編輯",
"variantname-gan-hans": "中文(简体)",
"variantname-gan-hant": "中文(繁體)",
"metadata": "詮釋資料",
- "metadata-help": "æ¤æª\94æ¡\88å\8c\85å\90«é¡\8då¤\96ç\9a\84è³\87è¨\8aï¼\8cå\8f¯è\83½ç\94±æ\95¸ä½\8dç\9b¸æ©\9fæ\88\96æ\8e\83æ\8f\8fæ©\9fæ\89\80建ç«\8bç\9a\84ã\80\82\nè\8b¥ä¿®æ\94¹æ¤æª\94æ¡\88ï¼\8cé\83¨ä»½è³\87è¨\8aå°\87ç\84¡æ³\95ä¿\9dç\95\99。",
+ "metadata-help": "æ¤æ\96\87件ä¸å\8c\85å\90«é¡\8då¤\96ä¿¡æ\81¯ã\80\82é\80\99äº\9bä¿¡æ\81¯å\8f¯è\83½æ\98¯ç\94±æ\95¸ç¢¼ç\9b¸æ©\9fæ\88\96æ\8e\83æ\8f\8få\84\80å\9c¨å\89µå»ºæ\88\96æ\95¸å\97å\8c\96é\81\8eç¨\8bä¸æ\89\80æ·»å\8a ç\9a\84ã\80\82å¦\82æ\9e\9cæ\96\87件è\87ªå\88\9då§\8bç\8b\80æ\85\8bå·²å\8f\97å\88°ä¿®æ\94¹ï¼\8cä¸\80äº\9b詳細說æ\98\8eå\8f¯è\83½ç\84¡æ³\95å\8f\8dæ\98 ä¿®æ\94¹å¾\8cç\9a\84æ\96\87件。",
"metadata-expand": "顯示詳細資料",
"metadata-collapse": "隱藏詳細資料",
"metadata-fields": "在本訊息中所列出的 EXIF 詮釋資料域將包含在圖片顯示頁面,當詮釋資料表損壞時只顯示以下訊息。\n其他的詮釋資料預設為隱藏。\n* make\n* model\n* datetimeoriginal\n* exposuretime\n* fnumber\n* isospeedratings\n* focallength\n* artist\n* copyright\n* imagedescription\n* gpslatitude\n* gpslongitude\n* gpsaltitude",
'pagesincategory_files' => [ '0', 'فايلات', 'ملفات', 'files' ],
];
-// (bug 16469) Override Eastern Arabic numberals, use Western
+// (T18469) Override Eastern Arabic numberals, use Western
$digitTransformTable = [
'0' => '0',
'1' => '1',
*
*/
+$fallback = 'fr';
+
$namespaceNames = [
NS_MEDIA => 'Media',
NS_SPECIAL => 'Dibar',
'Kaozeadenn_Skeudenn' => NS_FILE_TALK,
];
+$namespaceGenderAliases = [];
+
$specialPageAliases = [
'Activeusers' => [ 'ImplijerienOberiant' ],
'Allmessages' => [ 'HollGemennadennoù' ],
];
$magicWords = [
+ 'redirect' => [ '0', '#REDIRECCIÓ', '#REDIRECCIO', '#REDIRECT' ],
'numberofarticles' => [ '1', 'NOMBRED\'ARTICLES', 'NUMBEROFARTICLES' ],
'numberoffiles' => [ '1', 'NOMBRED\'ARXIUS', 'NUMBEROFFILES' ],
'numberofusers' => [ '1', 'NOMBRED\'USUARIS', 'NUMBEROFUSERS' ],
$defaultDateFormat = 'dmy';
$bookstoreList = [
- 'Catàleg Col·lectiu de les Universitats de Catalunya' => 'http://ccuc.cbuc.es/cgi-bin/vtls.web.gateway?searchtype=control+numcard&searcharg=$1',
- 'Totselsllibres.com' => 'http://www.totselsllibres.com/tel/publi/busquedaAvanzadaLibros.do?ISBN=$1',
+ 'Catàleg Col·lectiu de les Universitats de Catalunya' => 'http://ccuc.cbuc.cat/search*cat/X?SEARCH=$1',
'inherit' => true,
];
'Mostlinkedtemplates' => [ 'Nejpoužívanější_šablony', 'Nejpouzivanejsi_sablony' ],
'Mostrevisions' => [ 'Stránky_s_nejvíce_editacemi', 'Stranky_s_nejvice_editacemi', 'Stránky_s_nejvyšším_počtem_editací' ],
'Movepage' => [ 'Přesunout_stránku', 'Přejmenovat_stránku' ],
- 'Mycontributions' => [ 'Mé_příspěvky', 'Me_prispevky' ],
+ 'Mycontributions' => [ 'Moje_příspěvky', 'Mé_příspěvky', 'Me_prispevky' ],
'MyLanguage' => [ 'V_mém_jazyce', 'Můj_jazyk' ],
- 'Mypage' => [ 'Moje_stránka', 'Moje_stranka' ],
- 'Mytalk' => [ 'Moje_diskuse' ],
+ 'Mypage' => [ 'Moje_stránka', 'Moje_stranka', 'Má_stránka' ],
+ 'Mytalk' => [ 'Moje_diskuse', 'Má_diskuse' ],
'Myuploads' => [ 'Moje_soubory', 'Mé_soubory' ],
'Newimages' => [ 'Nové_obrázky', 'Galerie_nových_obrázků', 'Nove_obrazky' ],
'Newpages' => [ 'Nové_stránky', 'Nove_stranky', 'Nejnovější_stránky', 'Nejnovejsi_stranky' ],
'img_center' => [ '1', 'erdian', 'center', 'centre' ],
];
-$separatorTransformTable = [ ',' => '.', '.' => ',' ]; /* Bug 15717 */
+$separatorTransformTable = [ ',' => '.', '.' => ',' ]; /* T17717 */
NS_CATEGORY_TALK => 'Ñemohenda_myangekõi',
];
-// Remove Spanish gender aliases (bug 37090)
+// Remove Spanish gender aliases (T39090)
$namespaceGenderAliases = [];
*
*/
-# $fallback = 'ru'; // bug 27785
+# $fallback = 'ru'; // T29785
$namespaceNames = [
NS_MEDIA => 'Медиа',
'Diskusyón_de_Katēggoría' => NS_CATEGORY_TALK,
];
-// Remove Spanish gender aliases (bug 37090)
+// Remove Spanish gender aliases (T39090)
$namespaceGenderAliases = [];
$specialPageAliases = [
$linkPrefixExtension = true;
-# Same as the French (bug 8485)
+# Same as the French (T10485)
$separatorTransformTable = [ ',' => "\xc2\xa0", '.' => ',' ];
NS_CATEGORY_TALK => 'Neneuhcāyōtl_tēixnāmiquiliztli',
];
-// Remove Spanish gender aliases (bug 37090)
+// Remove Spanish gender aliases (T39090)
$namespaceGenderAliases = [];
$namespaceAliases = [
--- /dev/null
+<?php
+/** Norman (normaund)
+ *
+ * To improve a translation please visit https://translatewiki.net
+ *
+ * @ingroup Language
+ * @file
+ *
+ */
+
+$fallback = 'fr';
* @author לערי ריינהארט
*/
-$fallback = 'ca';
+$fallback = 'ca, fr';
$bookstoreList = [
'Amazon.fr' => 'https://www.amazon.fr/exec/obidos/ISBN=$1'
$fallback8bitEncoding = 'iso-8859-2';
$separatorTransformTable = [
- ',' => "\xc2\xa0", // @bug 2749
+ ',' => "\xc2\xa0", // T4749
'.' => ','
];
];
$separatorTransformTable = [ ',' => "\xc2\xa0", '.' => ',' ];
-$linkTrail = '/^([áâãàéêẽçíòóôõq̃úüűũa-z]+)(.*)$/sDu'; # Bug 21168, 27633
+$linkTrail = '/^([áâãàéêẽçíòóôõq̃úüűũa-z]+)(.*)$/sDu'; # T23168, T29633
$specialPageAliases = [
'Activeusers' => [ 'Utilizadores_activos' ],
NS_CATEGORY_TALK => 'Katiguriya_rimanakuy',
];
-// Remove Spanish gender aliases (bug 37090)
+// Remove Spanish gender aliases (T39090)
$namespaceGenderAliases = [];
$specialPageAliases = [
NS_CATEGORY_TALK => 'Samiyachiy_rimanakuy',
];
-// Remove Spanish gender aliases (bug 37090)
+// Remove Spanish gender aliases (T39090)
$namespaceGenderAliases = [];
$linkTrail = '/^([a-zåäöéÅÄÖÉ]+)(.*)$/sDu';
$separatorTransformTable = [
- ',' => "\xc2\xa0", // @bug 2749
+ ',' => "\xc2\xa0", // T4749
'.' => ','
];
];
$namespaceAliases = [
- // Aliases for Polish namespaces (bug 34988).
+ // Aliases for Polish namespaces (T36988).
'Specjalna' => NS_SPECIAL,
'Dyskusja' => NS_TALK,
'Użytkownik' => NS_USER,
$namespaceAliases = [
'సభ్యులు' => NS_USER,
'సభ్యులపై_చర్చ' => NS_USER_TALK,
- 'సభ్యుడు' => NS_USER, # set for bug 11615
+ 'సభ్యుడు' => NS_USER, # set for T13615
'సభ్యునిపై_చర్చ' => NS_USER_TALK,
'బొమ్మ' => NS_FILE,
'బొమ్మపై_చర్చ' => NS_FILE_TALK,
/**
* Namespace names
- * (bug 8708)
+ * (T10708)
*/
$namespaceNames = [
NS_MEDIA => 'Media',
--- /dev/null
+<?php
+/**
+ * Psy CodeCleaner to allow PHP super globals.
+ *
+ * https://github.com/bobthecow/psysh/issues/353
+ *
+ * Copyright © 2017 Justin Hileman <justin@justinhileman.info>
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License along
+ * with this program; if not, write to the Free Software Foundation, Inc.,
+ * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ * http://www.gnu.org/copyleft/gpl.html
+ *
+ * @file
+ * @ingroup Maintenance
+ *
+ * @author Justin Hileman <justin@justinhileman.info>
+ */
+
+/**
+ * Prefix the real command with a bunch of 'global $VAR;' commands, one for each global.
+ * This will make the shell behave as if it was running in the global scope (almost;
+ * variables created in the shell won't become global if no global variable by that name
+ * existed before).
+ */
+class CodeCleanerGlobalsPass extends \Psy\CodeCleaner\CodeCleanerPass {
+ private static $superglobals = [
+ 'GLOBALS', '_SERVER', '_ENV', '_FILES', '_COOKIE', '_POST', '_GET', '_SESSION'
+ ];
+
+ public function beforeTraverse( array $nodes ) {
+ $names = [];
+ foreach ( array_diff( array_keys( $GLOBALS ), self::$superglobals ) as $name ) {
+ array_push( $names, new \PhpParser\Node\Expr\Variable( $name ) );
+ }
+
+ array_unshift( $nodes, new \PhpParser\Node\Stmt\Global_( $names ) );
+
+ return $nodes;
+ }
+}
+
--- /dev/null
+<?php
+
+use MediaWiki\MediaWikiServices;
+
+$basePath = getenv( 'MW_INSTALL_PATH' ) !== false ? getenv( 'MW_INSTALL_PATH' ) : __DIR__ . '/..';
+
+require_once $basePath . '/maintenance/Maintenance.php';
+
+/**
+ * Maintenance script for adding a site definition into the sites table.
+ *
+ * @since 1.29
+ *
+ * @license GNU GPL v2+
+ * @author Florian Schmidt
+ */
+class AddSite extends Maintenance {
+
+ public function __construct() {
+ $this->addDescription( 'Add a site definition into the sites table.' );
+
+ $this->addArg( 'globalid', 'The global id of the site to add, e.g. "wikipedia".', true );
+ $this->addArg( 'group', 'In which group this site should be sorted in.', true );
+ $this->addOption( 'language', 'The language code of the site, e.g. "de".' );
+ $this->addOption( 'interwiki-id', 'The interwiki ID of the site.' );
+ $this->addOption( 'navigation-id', 'The navigation ID of the site.' );
+ $this->addOption( 'pagepath', 'The URL to pages of this site, e.g.' .
+ ' https://example.com/wiki/\$1.' );
+ $this->addOption( 'filepath', 'The URL to files of this site, e.g. https://example
+ .com/w/\$1.' );
+
+ parent::__construct();
+ }
+
+ /**
+ * Imports the site described by the parameters (see self::__construct()) passed to this
+ * maintenance sccript into the sites table of MediaWiki.
+ */
+ public function execute() {
+ $siteStore = MediaWikiServices::getInstance()->getSiteStore();
+ $siteStore->reset();
+
+ $globalId = $this->getArg( 0 );
+ $group = $this->getArg( 1 );
+ $language = $this->getOption( 'language' );
+ $interwikiId = $this->getOption( 'interwiki-id' );
+ $navigationId = $this->getOption( 'navigation-id' );
+ $pagepath = $this->getOption( 'pagepath' );
+ $filepath = $this->getOption( 'filepath' );
+
+ if ( !is_string( $globalId ) || !is_string( $group ) ) {
+ echo "Arguments globalid and group need to be strings.\n";
+ return false;
+ }
+
+ if ( $siteStore->getSite( $globalId ) !== null ) {
+ echo "Site with global id $globalId already exists.\n";
+ return false;
+ }
+
+ $site = new MediaWikiSite();
+ $site->setGlobalId( $globalId );
+ $site->setGroup( $group );
+ if ( $language !== null ) {
+ $site->setLanguageCode( $language );
+ }
+ if ( $interwikiId !== null ) {
+ $site->addInterwikiId( $interwikiId );
+ }
+ if ( $navigationId !== null ) {
+ $site->addNavigationId( $navigationId );
+ }
+ if ( $pagepath !== null ) {
+ $site->setPagePath( $pagepath );
+ }
+ if ( $filepath !== null ) {
+ $site->setFilePath( $filepath );
+ }
+
+ $siteStore->saveSites( [ $site ] );
+
+ if ( method_exists( $siteStore, 'reset' ) ) {
+ $siteStore->reset();
+ }
+
+ echo "Done.\n";
+ }
+}
+
+$maintClass = 'AddSite';
+require_once RUN_MAINTENANCE_IF_MAIN;
--
-- patch-archive-ar_id.sql
--
--- Bug 39675. Add archive.ar_id.
+-- T41675. Add archive.ar_id.
ALTER TABLE /*$wgDBprefix*/archive
ADD COLUMN ar_id int unsigned NOT NULL AUTO_INCREMENT FIRST,
--
-- patch-categorylinks-better-collation.sql
--
--- Bugs 164, 1211, 23682. This is the second version of this patch; the
+-- T2164, T3211, T25682. This is the second version of this patch; the
-- changes are also incorporated into patch-categorylinks-better-collation2.sql,
-- for the benefit of trunk users who applied the original.
--
--- Due to bug 25254, the length limit of 255 bytes for cl_sortkey_prefix
+-- Due to T27254, the length limit of 255 bytes for cl_sortkey_prefix
-- is also enforced in php. If you change the length of that field, make
-- sure to also change the check in LinksUpdate.php.
ALTER TABLE /*$wgDBprefix*/categorylinks
--
-- patch-extenallinks-el_id.sql
--
--- Bug 15441. Add externallinks.el_id.
+-- T17441. Add externallinks.el_id.
ALTER TABLE /*$wgDBprefix*/externallinks
ADD COLUMN el_id int unsigned NOT NULL AUTO_INCREMENT FIRST,
--- Increase the length of up_property from 32 -> 255 bytes. Bug 19408
+-- Increase the length of up_property from 32 -> 255 bytes. T21408
ALTER TABLE /*_*/user_properties
MODIFY up_property varbinary(255);
require_once __DIR__ . '/Maintenance.php';
require_once __DIR__ . '/../includes/export/DumpFilter.php';
+use Wikimedia\Rdbms\LoadBalancer;
+
/**
* @ingroup Dump Maintenance
*/
"United States of America", // 7bit ASCII
"S%C3%A9rie%20t%C3%A9l%C3%A9vis%C3%A9e",
"Acteur%7CAlbert%20Robbins%7CAnglais%7CAnn%20Donahue%7CAnthony%20E.%20Zuiker%7CCarol%20Mendelsohn",
- // This comes from bug 36839
+ // This comes from T38839
"Acteur%7CAlbert%20Robbins%7CAnglais%7CAnn%20Donahue%7CAnthony%20E.%20Zuiker%7CCarol%20Mendelsohn%7C"
. "Catherine%20Willows%7CDavid%20Hodges%7CDavid%20Phillips%7CGil%20Grissom%7CGreg%20Sanders%7CHodges%7C"
. "Internet%20Movie%20Database%7CJim%20Brass%7CLady%20Heather%7C"
* if the target title exists in the image table, or if both the
* original and target titles exist in the page table, append
* increasing version numbers until the target title exists in
- * neither. (See also bug 16916.)
+ * neither. (See also T18916.)
*/
$version = 0;
$final = $new;
$prior = $title->getDBkey();
}
- # Old cleanupTitles could move articles there. See bug 23147.
+ # Old cleanupTitles could move articles there. See T25147.
$ns = $row->page_namespace;
if ( $ns < 0 ) {
$ns = 0;
}
# Namespace which no longer exists. Put the page in the main namespace
- # since we don't have any idea of the old namespace name. See bug 68501.
+ # since we don't have any idea of the old namespace name. See T70501.
if ( !MWNamespace::exists( $ns ) ) {
$ns = 0;
}
require_once __DIR__ . '/backup.inc';
require_once __DIR__ . '/../includes/export/WikiExporter.php';
+use Wikimedia\Rdbms\LoadBalancer;
+
/**
* @ingroup Maintenance
*/
// We do /not/ retry upon failure, but delegate to encapsulating logic, to avoid
// individually retrying at different layers of code.
- // 1. The LoadBalancer.
try {
$this->lb = wfGetLBFactory()->newMainLB();
} catch ( Exception $e ) {
. " rotating DB failed to obtain new load balancer (" . $e->getMessage() . ")" );
}
- // 2. The Connection, through the load balancer.
try {
$this->db = $this->lb->getConnection( DB_REPLICA, 'dump' );
} catch ( Exception $e ) {
'rd_from = pa.page_id',
'rd_namespace = pb.page_namespace',
'rd_title = pb.page_title',
- 'rd_interwiki IS NULL OR rd_interwiki = ' . $dbr->addQuotes( '' ), // bug 40352
+ 'rd_interwiki IS NULL OR rd_interwiki = ' . $dbr->addQuotes( '' ), // T42352
'pb.page_is_redirect' => 1,
];
function fileEntry( $url, $date, $priority ) {
return
"\t<url>\n" .
- // bug 34666: $url may contain bad characters such as ampersands.
+ // T36666: $url may contain bad characters such as ampersands.
"\t\t<loc>" . htmlspecialchars( $url ) . "</loc>\n" .
"\t\t<lastmod>$date</lastmod>\n" .
"\t\t<priority>$priority</priority>\n" .
* @param int $namespace
*/
function generateLimit( $namespace ) {
- // bug 17961: make a title with the longest possible URL in this namespace
+ // T19961: make a title with the longest possible URL in this namespace
$title = Title::makeTitle( $namespace, str_repeat( "\xf0\xa8\xae\x81", 63 ) . "\xe5\x96\x83" );
$this->limit = [
$skipped = 0;
foreach ( $queue->getAllAbandonedJobs() as $job ) {
/** @var Job $job */
- if ( $job->getQueuedTimestamp() < $lastRepushTime ) {
+ if ( $job->getQueuedTimestamp() < wfTimestamp( TS_UNIX, $lastRepushTime ) ) {
++$skipped;
continue; // already re-pushed in prior round
}
$affected += $dbw->affectedRows();
$this->commitTransaction( $dbw, __METHOD__ );
- // Clear cache for the affected users (bug 40340)
+ // Clear cache for the affected users (T42340)
if ( $affected > 0 ) {
// XXX: This also invalidates cache of unaffected users that
// were in the new group and not in the group.
-- conversion algorithm is run. We store this so that we can update
-- collations without reparsing all pages.
-- Note: If you change the length of this field, you also need to change
- -- code in LinksUpdate.php. See bug 25254.
+ -- code in LinksUpdate.php. See T27254.
cl_sortkey_prefix varbinary(255) NOT NULL default 0x,
-- This isn't really used at present. Provided for an optional
-- Size chosen to allow IPv6
-- FIXME: these fields were originally blank for single-IP blocks,
-- but now they are populated. No migration was ever done. They
- -- should be fixed to be blank again for such blocks (bug 49504).
+ -- should be fixed to be blank again for such blocks (T51504).
ipb_range_start varchar(255) NOT NULL,
ipb_range_end varchar(255) NOT NULL,
$content = $rev->getContent();
if ( !$content ) {
- # This should not happen, but sometimes does (bug 20757)
+ # This should not happen, but sometimes does (T22757)
$id = $row->$idCol;
$this->output( "Content of $table $id unavailable!\n" );
} catch ( Exception $e ) {
$this->output( "Data of revision with {$idCol}={$row->$idCol} unavailable!\n" );
- return false; // bug 22624?
+ return false; // T24624?
}
if ( !is_string( $text ) ) {
- # This should not happen, but sometimes does (bug 20757)
+ # This should not happen, but sometimes does (T22757)
$this->output( "Data of revision with {$idCol}={$row->$idCol} unavailable!\n" );
return false;
} catch ( Exception $e ) {
$this->output( "Text of revision with timestamp {$row->ar_timestamp} unavailable!\n" );
- return false; // bug 22624?
+ return false; // T24624?
}
$text = $rev->getSerializedData();
if ( !is_string( $text ) ) {
- # This should not happen, but sometimes does (bug 20757)
+ # This should not happen, but sometimes does (T22757)
$this->output( "Data of revision with timestamp {$row->ar_timestamp} unavailable!\n" );
return false;
MediaWiki\suppressWarnings(); // header notices
// Cache ?action=view
- $wgRequestTime = microtime( true ); # bug 22852
+ $wgRequestTime = microtime( true ); # T24852
ob_start();
$article->view();
$context->getOutput()->output();
$viewHtml = ob_get_clean();
$viewCache->saveToFileCache( $viewHtml );
// Cache ?action=history
- $wgRequestTime = microtime( true ); # bug 22852
+ $wgRequestTime = microtime( true ); # T24852
ob_start();
Action::factory( 'history', $article, $context )->show();
$context->getOutput()->output();
--- /dev/null
+<?php
+/**
+ * Modern interactive shell within the MediaWiki engine.
+ *
+ * Merely wraps around http://psysh.org/ and drop an interactive PHP shell in
+ * the global scope.
+ *
+ * Copyright © 2017 Antoine Musso <hashar@free.fr>
+ * Copyright © 2017 Gergő Tisza <tgr.huwiki@gmail.com>
+ * Copyright © 2017 Justin Hileman <justin@justinhileman.info>
+ * Copyright © 2017 Wikimedia Foundation Inc.
+ * https://www.mediawiki.org/
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License along
+ * with this program; if not, write to the Free Software Foundation, Inc.,
+ * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ * http://www.gnu.org/copyleft/gpl.html
+ *
+ * @file
+ * @ingroup Maintenance
+ *
+ * @author Antoine Musso <hashar@free.fr>
+ * @author Justin Hileman <justin@justinhileman.info>
+ * @author Gergő Tisza <tgr.huwiki@gmail.com>
+ */
+
+require_once __DIR__ . '/Maintenance.php';
+
+/**
+ * Interactive shell with completion and global scope.
+ *
+ */
+class MediaWikiShell extends Maintenance {
+
+ public function __construct() {
+ parent::__construct();
+ $this->addOption( 'd',
+ 'For back compatibility with eval.php. ' .
+ '0 send debug to stdout. ' .
+ 'With 1 additionally initialize database with debugging ',
+ false, true
+ );
+ }
+
+ public function execute() {
+ if ( !class_exists( \Psy\Shell::class ) ) {
+ $this->error( 'PsySH not found. Please run composer with the --dev option.', 1 );
+ }
+
+ $traverser = new \PhpParser\NodeTraverser();
+ $codeCleaner = new \Psy\CodeCleaner( null, null, $traverser );
+
+ // add this after initializing the code cleaner so all the default passes get added first
+ $traverser->addVisitor( new CodeCleanerGlobalsPass() );
+
+ $config = new \Psy\Configuration( [ 'codeCleaner' => $codeCleaner ] );
+ $config->setUpdateCheck( \Psy\VersionUpdater\Checker::NEVER );
+ $shell = new \Psy\Shell( $config );
+ if ( $this->hasOption( 'd' ) ) {
+ $this->setupLegacy();
+ }
+
+ $shell->run();
+ }
+
+ /**
+ * For back compatibility with eval.php
+ */
+ protected function setupLegacy() {
+ global $wgDebugLogFile;
+
+ $d = intval( $this->getOption( 'd' ) );
+ if ( $d > 0 ) {
+ $wgDebugLogFile = 'php://stdout';
+ }
+ if ( $d > 1 ) {
+ # Set DBO_DEBUG (equivalent of $wgDebugDumpSql)
+ # XXX copy pasted from eval.php :(
+ $lb = wfGetLB();
+ $serverCount = $lb->getServerCount();
+ for ( $i = 0; $i < $serverCount; $i++ ) {
+ $server = $lb->getServerInfo( $i );
+ $server['flags'] |= DBO_DEBUG;
+ $lb->setServerInfo( $i, $server );
+ }
+ }
+ }
+
+}
+
+$maintClass = 'MediaWikiShell';
+require_once RUN_MAINTENANCE_IF_MAIN;
}
if ( $historyFile ) {
# Delimiter is eated by streamStatementEnd, we add it
- # up in the history (bug 37020)
+ # up in the history (T39020)
readline_add_history( $wholeLine . ';' );
readline_write_history( $historyFile );
}
-- Unique indexes need to be handled with INSERT SELECT since just running
-- the CREATE INDEX statement will fail if there are duplicate values.
--
--- Ignore duplicates, several tables will have them (e.g. bug 16966) but in
+-- Ignore duplicates, several tables will have them (e.g. T18966) but in
-- most cases it's harmless to discard them.
--------------------------------------------------------------------------------
+++ /dev/null
-<?php
-/**
- * Script to fix bug 20757.
- *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or
- * (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License along
- * with this program; if not, write to the Free Software Foundation, Inc.,
- * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
- * http://www.gnu.org/copyleft/gpl.html
- *
- * @file
- * @ingroup Maintenance ExternalStorage
- */
-
-require_once __DIR__ . '/../Maintenance.php';
-
-/**
- * Maintenance script to fix bug 20757.
- *
- * @ingroup Maintenance ExternalStorage
- */
-class FixBug20757 extends Maintenance {
- public $batchSize = 10000;
- public $mapCache = [];
- public $mapCacheSize = 0;
- public $maxMapCacheSize = 1000000;
-
- function __construct() {
- parent::__construct();
- $this->addDescription( 'Script to fix bug 20757 assuming that blob_tracking is intact' );
- $this->addOption( 'dry-run', 'Report only' );
- $this->addOption( 'start', 'old_id to start at', false, true );
- }
-
- function execute() {
- $dbr = $this->getDB( DB_REPLICA );
- $dbw = $this->getDB( DB_MASTER );
-
- $dryRun = $this->getOption( 'dry-run' );
- if ( $dryRun ) {
- print "Dry run only.\n";
- }
-
- $startId = $this->getOption( 'start', 0 );
- $numGood = 0;
- $numFixed = 0;
- $numBad = 0;
-
- $totalRevs = $dbr->selectField( 'text', 'MAX(old_id)', false, __METHOD__ );
-
- // In MySQL 4.1+, the binary field old_text has a non-working LOWER() function
- $lowerLeft = 'LOWER(CONVERT(LEFT(old_text,22) USING latin1))';
-
- while ( true ) {
- print "ID: $startId / $totalRevs\r";
-
- $res = $dbr->select(
- 'text',
- [ 'old_id', 'old_flags', 'old_text' ],
- [
- 'old_id > ' . intval( $startId ),
- 'old_flags LIKE \'%object%\' AND old_flags NOT LIKE \'%external%\'',
- "$lowerLeft = 'o:15:\"historyblobstub\"'",
- ],
- __METHOD__,
- [
- 'ORDER BY' => 'old_id',
- 'LIMIT' => $this->batchSize,
- ]
- );
-
- if ( !$res->numRows() ) {
- break;
- }
-
- $secondaryIds = [];
- $stubs = [];
-
- foreach ( $res as $row ) {
- $startId = $row->old_id;
-
- // Basic sanity checks
- $obj = unserialize( $row->old_text );
- if ( $obj === false ) {
- print "{$row->old_id}: unrecoverable: cannot unserialize\n";
- ++$numBad;
- continue;
- }
-
- if ( !is_object( $obj ) ) {
- print "{$row->old_id}: unrecoverable: unserialized to type " .
- gettype( $obj ) . ", possible double-serialization\n";
- ++$numBad;
- continue;
- }
-
- if ( strtolower( get_class( $obj ) ) !== 'historyblobstub' ) {
- print "{$row->old_id}: unrecoverable: unexpected object class " .
- get_class( $obj ) . "\n";
- ++$numBad;
- continue;
- }
-
- // Process flags
- $flags = explode( ',', $row->old_flags );
- if ( in_array( 'utf-8', $flags ) || in_array( 'utf8', $flags ) ) {
- $legacyEncoding = false;
- } else {
- $legacyEncoding = true;
- }
-
- // Queue the stub for future batch processing
- $id = intval( $obj->mOldId );
- $secondaryIds[] = $id;
- $stubs[$row->old_id] = [
- 'legacyEncoding' => $legacyEncoding,
- 'secondaryId' => $id,
- 'hash' => $obj->mHash,
- ];
- }
-
- $secondaryIds = array_unique( $secondaryIds );
-
- if ( !count( $secondaryIds ) ) {
- continue;
- }
-
- // Run the batch query on blob_tracking
- $res = $dbr->select(
- 'blob_tracking',
- '*',
- [
- 'bt_text_id' => $secondaryIds,
- ],
- __METHOD__
- );
- $trackedBlobs = [];
- foreach ( $res as $row ) {
- $trackedBlobs[$row->bt_text_id] = $row;
- }
-
- // Process the stubs
- foreach ( $stubs as $primaryId => $stub ) {
- $secondaryId = $stub['secondaryId'];
- if ( !isset( $trackedBlobs[$secondaryId] ) ) {
- // No tracked blob. Work out what went wrong
- $secondaryRow = $dbr->selectRow(
- 'text',
- [ 'old_flags', 'old_text' ],
- [ 'old_id' => $secondaryId ],
- __METHOD__
- );
- if ( !$secondaryRow ) {
- print "$primaryId: unrecoverable: secondary row is missing\n";
- ++$numBad;
- } elseif ( $this->isUnbrokenStub( $stub, $secondaryRow ) ) {
- // Not broken yet, and not in the tracked clusters so it won't get
- // broken by the current RCT run.
- ++$numGood;
- } elseif ( strpos( $secondaryRow->old_flags, 'external' ) !== false ) {
- print "$primaryId: unrecoverable: secondary gone to {$secondaryRow->old_text}\n";
- ++$numBad;
- } else {
- print "$primaryId: unrecoverable: miscellaneous corruption of secondary row\n";
- ++$numBad;
- }
- unset( $stubs[$primaryId] );
- continue;
- }
- $trackRow = $trackedBlobs[$secondaryId];
-
- // Check that the specified text really is available in the tracked source row
- $url = "DB://{$trackRow->bt_cluster}/{$trackRow->bt_blob_id}/{$stub['hash']}";
- $text = ExternalStore::fetchFromURL( $url );
- if ( $text === false ) {
- print "$primaryId: unrecoverable: source text missing\n";
- ++$numBad;
- unset( $stubs[$primaryId] );
- continue;
- }
- if ( md5( $text ) !== $stub['hash'] ) {
- print "$primaryId: unrecoverable: content hashes do not match\n";
- ++$numBad;
- unset( $stubs[$primaryId] );
- continue;
- }
-
- // Find the page_id and rev_id
- // The page is probably the same as the page of the secondary row
- $pageId = intval( $trackRow->bt_page );
- if ( !$pageId ) {
- $revId = $pageId = 0;
- } else {
- $revId = $this->findTextIdInPage( $pageId, $primaryId );
- if ( !$revId ) {
- // Actually an orphan
- $pageId = $revId = 0;
- }
- }
-
- $newFlags = $stub['legacyEncoding'] ? 'external' : 'external,utf-8';
-
- if ( !$dryRun ) {
- // Reset the text row to point to the original copy
- $this->beginTransaction( $dbw, __METHOD__ );
- $dbw->update(
- 'text',
- // SET
- [
- 'old_flags' => $newFlags,
- 'old_text' => $url
- ],
- // WHERE
- [ 'old_id' => $primaryId ],
- __METHOD__
- );
-
- // Add a blob_tracking row so that the new reference can be recompressed
- // without needing to run trackBlobs.php again
- $dbw->insert( 'blob_tracking',
- [
- 'bt_page' => $pageId,
- 'bt_rev_id' => $revId,
- 'bt_text_id' => $primaryId,
- 'bt_cluster' => $trackRow->bt_cluster,
- 'bt_blob_id' => $trackRow->bt_blob_id,
- 'bt_cgz_hash' => $stub['hash'],
- 'bt_new_url' => null,
- 'bt_moved' => 0,
- ],
- __METHOD__
- );
- $this->commitTransaction( $dbw, __METHOD__ );
- $this->waitForSlaves();
- }
-
- print "$primaryId: resolved to $url\n";
- ++$numFixed;
- }
- }
-
- print "\n";
- print "Fixed: $numFixed\n";
- print "Unrecoverable: $numBad\n";
- print "Good stubs: $numGood\n";
- }
-
- function waitForSlaves() {
- static $iteration = 0;
- ++$iteration;
- if ( ++$iteration > 50 == 0 ) {
- wfWaitForSlaves();
- $iteration = 0;
- }
- }
-
- function findTextIdInPage( $pageId, $textId ) {
- $ids = $this->getRevTextMap( $pageId );
- if ( !isset( $ids[$textId] ) ) {
- return null;
- } else {
- return $ids[$textId];
- }
- }
-
- function getRevTextMap( $pageId ) {
- if ( !isset( $this->mapCache[$pageId] ) ) {
- // Limit cache size
- while ( $this->mapCacheSize > $this->maxMapCacheSize ) {
- $key = key( $this->mapCache );
- $this->mapCacheSize -= count( $this->mapCache[$key] );
- unset( $this->mapCache[$key] );
- }
-
- $dbr = $this->getDB( DB_REPLICA );
- $map = [];
- $res = $dbr->select( 'revision',
- [ 'rev_id', 'rev_text_id' ],
- [ 'rev_page' => $pageId ],
- __METHOD__
- );
- foreach ( $res as $row ) {
- $map[$row->rev_text_id] = $row->rev_id;
- }
- $this->mapCache[$pageId] = $map;
- $this->mapCacheSize += count( $map );
- }
-
- return $this->mapCache[$pageId];
- }
-
- /**
- * This is based on part of HistoryBlobStub::getText().
- * Determine if the text can be retrieved from the row in the normal way.
- * @param array $stub
- * @param stdClass $secondaryRow
- * @return bool
- */
- function isUnbrokenStub( $stub, $secondaryRow ) {
- $flags = explode( ',', $secondaryRow->old_flags );
- $text = $secondaryRow->old_text;
- if ( in_array( 'external', $flags ) ) {
- $url = $text;
- MediaWiki\suppressWarnings();
- list( /* $proto */, $path ) = explode( '://', $url, 2 );
- MediaWiki\restoreWarnings();
-
- if ( $path == "" ) {
- return false;
- }
- $text = ExternalStore::fetchFromURL( $url );
- }
- if ( !in_array( 'object', $flags ) ) {
- return false;
- }
-
- if ( in_array( 'gzip', $flags ) ) {
- $obj = unserialize( gzinflate( $text ) );
- } else {
- $obj = unserialize( $text );
- }
-
- if ( !is_object( $obj ) ) {
- // Correct for old double-serialization bug.
- $obj = unserialize( $obj );
- }
-
- if ( !is_object( $obj ) ) {
- return false;
- }
-
- $obj->uncompress();
- $text = $obj->getItem( $stub['hash'] );
-
- return $text !== false;
- }
-}
-
-$maintClass = 'FixBug20757';
-require_once RUN_MAINTENANCE_IF_MAIN;
--- /dev/null
+<?php
+/**
+ * Script to fix T22757.
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License along
+ * with this program; if not, write to the Free Software Foundation, Inc.,
+ * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ * http://www.gnu.org/copyleft/gpl.html
+ *
+ * @file
+ * @ingroup Maintenance ExternalStorage
+ */
+
+require_once __DIR__ . '/../Maintenance.php';
+
+/**
+ * Maintenance script to fix T22757.
+ *
+ * @ingroup Maintenance ExternalStorage
+ */
+class FixT22757 extends Maintenance {
+ public $batchSize = 10000;
+ public $mapCache = [];
+ public $mapCacheSize = 0;
+ public $maxMapCacheSize = 1000000;
+
+ function __construct() {
+ parent::__construct();
+ $this->addDescription( 'Script to fix T22757 assuming that blob_tracking is intact' );
+ $this->addOption( 'dry-run', 'Report only' );
+ $this->addOption( 'start', 'old_id to start at', false, true );
+ }
+
+ function execute() {
+ $dbr = $this->getDB( DB_REPLICA );
+ $dbw = $this->getDB( DB_MASTER );
+
+ $dryRun = $this->getOption( 'dry-run' );
+ if ( $dryRun ) {
+ print "Dry run only.\n";
+ }
+
+ $startId = $this->getOption( 'start', 0 );
+ $numGood = 0;
+ $numFixed = 0;
+ $numBad = 0;
+
+ $totalRevs = $dbr->selectField( 'text', 'MAX(old_id)', false, __METHOD__ );
+
+ // In MySQL 4.1+, the binary field old_text has a non-working LOWER() function
+ $lowerLeft = 'LOWER(CONVERT(LEFT(old_text,22) USING latin1))';
+
+ while ( true ) {
+ print "ID: $startId / $totalRevs\r";
+
+ $res = $dbr->select(
+ 'text',
+ [ 'old_id', 'old_flags', 'old_text' ],
+ [
+ 'old_id > ' . intval( $startId ),
+ 'old_flags LIKE \'%object%\' AND old_flags NOT LIKE \'%external%\'',
+ "$lowerLeft = 'o:15:\"historyblobstub\"'",
+ ],
+ __METHOD__,
+ [
+ 'ORDER BY' => 'old_id',
+ 'LIMIT' => $this->batchSize,
+ ]
+ );
+
+ if ( !$res->numRows() ) {
+ break;
+ }
+
+ $secondaryIds = [];
+ $stubs = [];
+
+ foreach ( $res as $row ) {
+ $startId = $row->old_id;
+
+ // Basic sanity checks
+ $obj = unserialize( $row->old_text );
+ if ( $obj === false ) {
+ print "{$row->old_id}: unrecoverable: cannot unserialize\n";
+ ++$numBad;
+ continue;
+ }
+
+ if ( !is_object( $obj ) ) {
+ print "{$row->old_id}: unrecoverable: unserialized to type " .
+ gettype( $obj ) . ", possible double-serialization\n";
+ ++$numBad;
+ continue;
+ }
+
+ if ( strtolower( get_class( $obj ) ) !== 'historyblobstub' ) {
+ print "{$row->old_id}: unrecoverable: unexpected object class " .
+ get_class( $obj ) . "\n";
+ ++$numBad;
+ continue;
+ }
+
+ // Process flags
+ $flags = explode( ',', $row->old_flags );
+ if ( in_array( 'utf-8', $flags ) || in_array( 'utf8', $flags ) ) {
+ $legacyEncoding = false;
+ } else {
+ $legacyEncoding = true;
+ }
+
+ // Queue the stub for future batch processing
+ $id = intval( $obj->mOldId );
+ $secondaryIds[] = $id;
+ $stubs[$row->old_id] = [
+ 'legacyEncoding' => $legacyEncoding,
+ 'secondaryId' => $id,
+ 'hash' => $obj->mHash,
+ ];
+ }
+
+ $secondaryIds = array_unique( $secondaryIds );
+
+ if ( !count( $secondaryIds ) ) {
+ continue;
+ }
+
+ // Run the batch query on blob_tracking
+ $res = $dbr->select(
+ 'blob_tracking',
+ '*',
+ [
+ 'bt_text_id' => $secondaryIds,
+ ],
+ __METHOD__
+ );
+ $trackedBlobs = [];
+ foreach ( $res as $row ) {
+ $trackedBlobs[$row->bt_text_id] = $row;
+ }
+
+ // Process the stubs
+ foreach ( $stubs as $primaryId => $stub ) {
+ $secondaryId = $stub['secondaryId'];
+ if ( !isset( $trackedBlobs[$secondaryId] ) ) {
+ // No tracked blob. Work out what went wrong
+ $secondaryRow = $dbr->selectRow(
+ 'text',
+ [ 'old_flags', 'old_text' ],
+ [ 'old_id' => $secondaryId ],
+ __METHOD__
+ );
+ if ( !$secondaryRow ) {
+ print "$primaryId: unrecoverable: secondary row is missing\n";
+ ++$numBad;
+ } elseif ( $this->isUnbrokenStub( $stub, $secondaryRow ) ) {
+ // Not broken yet, and not in the tracked clusters so it won't get
+ // broken by the current RCT run.
+ ++$numGood;
+ } elseif ( strpos( $secondaryRow->old_flags, 'external' ) !== false ) {
+ print "$primaryId: unrecoverable: secondary gone to {$secondaryRow->old_text}\n";
+ ++$numBad;
+ } else {
+ print "$primaryId: unrecoverable: miscellaneous corruption of secondary row\n";
+ ++$numBad;
+ }
+ unset( $stubs[$primaryId] );
+ continue;
+ }
+ $trackRow = $trackedBlobs[$secondaryId];
+
+ // Check that the specified text really is available in the tracked source row
+ $url = "DB://{$trackRow->bt_cluster}/{$trackRow->bt_blob_id}/{$stub['hash']}";
+ $text = ExternalStore::fetchFromURL( $url );
+ if ( $text === false ) {
+ print "$primaryId: unrecoverable: source text missing\n";
+ ++$numBad;
+ unset( $stubs[$primaryId] );
+ continue;
+ }
+ if ( md5( $text ) !== $stub['hash'] ) {
+ print "$primaryId: unrecoverable: content hashes do not match\n";
+ ++$numBad;
+ unset( $stubs[$primaryId] );
+ continue;
+ }
+
+ // Find the page_id and rev_id
+ // The page is probably the same as the page of the secondary row
+ $pageId = intval( $trackRow->bt_page );
+ if ( !$pageId ) {
+ $revId = $pageId = 0;
+ } else {
+ $revId = $this->findTextIdInPage( $pageId, $primaryId );
+ if ( !$revId ) {
+ // Actually an orphan
+ $pageId = $revId = 0;
+ }
+ }
+
+ $newFlags = $stub['legacyEncoding'] ? 'external' : 'external,utf-8';
+
+ if ( !$dryRun ) {
+ // Reset the text row to point to the original copy
+ $this->beginTransaction( $dbw, __METHOD__ );
+ $dbw->update(
+ 'text',
+ // SET
+ [
+ 'old_flags' => $newFlags,
+ 'old_text' => $url
+ ],
+ // WHERE
+ [ 'old_id' => $primaryId ],
+ __METHOD__
+ );
+
+ // Add a blob_tracking row so that the new reference can be recompressed
+ // without needing to run trackBlobs.php again
+ $dbw->insert( 'blob_tracking',
+ [
+ 'bt_page' => $pageId,
+ 'bt_rev_id' => $revId,
+ 'bt_text_id' => $primaryId,
+ 'bt_cluster' => $trackRow->bt_cluster,
+ 'bt_blob_id' => $trackRow->bt_blob_id,
+ 'bt_cgz_hash' => $stub['hash'],
+ 'bt_new_url' => null,
+ 'bt_moved' => 0,
+ ],
+ __METHOD__
+ );
+ $this->commitTransaction( $dbw, __METHOD__ );
+ $this->waitForSlaves();
+ }
+
+ print "$primaryId: resolved to $url\n";
+ ++$numFixed;
+ }
+ }
+
+ print "\n";
+ print "Fixed: $numFixed\n";
+ print "Unrecoverable: $numBad\n";
+ print "Good stubs: $numGood\n";
+ }
+
+ function waitForSlaves() {
+ static $iteration = 0;
+ ++$iteration;
+ if ( ++$iteration > 50 == 0 ) {
+ wfWaitForSlaves();
+ $iteration = 0;
+ }
+ }
+
+ function findTextIdInPage( $pageId, $textId ) {
+ $ids = $this->getRevTextMap( $pageId );
+ if ( !isset( $ids[$textId] ) ) {
+ return null;
+ } else {
+ return $ids[$textId];
+ }
+ }
+
+ function getRevTextMap( $pageId ) {
+ if ( !isset( $this->mapCache[$pageId] ) ) {
+ // Limit cache size
+ while ( $this->mapCacheSize > $this->maxMapCacheSize ) {
+ $key = key( $this->mapCache );
+ $this->mapCacheSize -= count( $this->mapCache[$key] );
+ unset( $this->mapCache[$key] );
+ }
+
+ $dbr = $this->getDB( DB_REPLICA );
+ $map = [];
+ $res = $dbr->select( 'revision',
+ [ 'rev_id', 'rev_text_id' ],
+ [ 'rev_page' => $pageId ],
+ __METHOD__
+ );
+ foreach ( $res as $row ) {
+ $map[$row->rev_text_id] = $row->rev_id;
+ }
+ $this->mapCache[$pageId] = $map;
+ $this->mapCacheSize += count( $map );
+ }
+
+ return $this->mapCache[$pageId];
+ }
+
+ /**
+ * This is based on part of HistoryBlobStub::getText().
+ * Determine if the text can be retrieved from the row in the normal way.
+ * @param array $stub
+ * @param stdClass $secondaryRow
+ * @return bool
+ */
+ function isUnbrokenStub( $stub, $secondaryRow ) {
+ $flags = explode( ',', $secondaryRow->old_flags );
+ $text = $secondaryRow->old_text;
+ if ( in_array( 'external', $flags ) ) {
+ $url = $text;
+ MediaWiki\suppressWarnings();
+ list( /* $proto */, $path ) = explode( '://', $url, 2 );
+ MediaWiki\restoreWarnings();
+
+ if ( $path == "" ) {
+ return false;
+ }
+ $text = ExternalStore::fetchFromURL( $url );
+ }
+ if ( !in_array( 'object', $flags ) ) {
+ return false;
+ }
+
+ if ( in_array( 'gzip', $flags ) ) {
+ $obj = unserialize( gzinflate( $text ) );
+ } else {
+ $obj = unserialize( $text );
+ }
+
+ if ( !is_object( $obj ) ) {
+ // Correct for old double-serialization bug.
+ $obj = unserialize( $obj );
+ }
+
+ if ( !is_object( $obj ) ) {
+ return false;
+ }
+
+ $obj->uncompress();
+ $text = $obj->getItem( $stub['hash'] );
+
+ return $text !== false;
+ }
+}
+
+$maintClass = 'FixT22757';
+require_once RUN_MAINTENANCE_IF_MAIN;
echo "Doing integrity check...\n";
$dbr = wfGetDB( DB_REPLICA );
- // Scan for HistoryBlobStub objects in the text table (bug 20757)
+ // Scan for HistoryBlobStub objects in the text table (T22757)
$exists = $dbr->selectField( 'text', 1,
'old_flags LIKE \'%object%\' AND old_flags NOT LIKE \'%external%\' ' .
exit( 1 );
}
- // Scan the archive table for HistoryBlobStub objects or external flags (bug 22624)
+ // Scan the archive table for HistoryBlobStub objects or external flags (T24624)
$flags = $dbr->selectField( 'archive', 'ar_flags',
'ar_flags LIKE \'%external%\' OR (' .
'ar_flags LIKE \'%object%\' ' .
-- conversion algorithm is run. We store this so that we can update
-- collations without reparsing all pages.
-- Note: If you change the length of this field, you also need to change
- -- code in LinksUpdate.php. See bug 25254.
+ -- code in LinksUpdate.php. See T27254.
cl_sortkey_prefix varchar(255) binary NOT NULL default '',
-- This isn't really used at present. Provided for an optional
-- Size chosen to allow IPv6
-- FIXME: these fields were originally blank for single-IP blocks,
-- but now they are populated. No migration was ever done. They
- -- should be fixed to be blank again for such blocks (bug 49504).
+ -- should be fixed to be blank again for such blocks (T51504).
ipb_range_start tinyblob NOT NULL,
ipb_range_end tinyblob NOT NULL,
}
$lang = Language::factory( 'en' );
- // Set global language to ensure localised errors are in English (bug 20633)
+ // Set global language to ensure localised errors are in English (T22633)
RequestContext::getMain()->setLanguage( $lang );
$wgLang = $lang; // BackCompat
# Don't try to access the database
# This needs to be disabled early since extensions will try to use the l10n
- # cache from $wgExtensionFunctions (bug 20471)
+ # cache from $wgExtensionFunctions (T22471)
$wgLocalisationCacheConf = [
'class' => 'LocalisationCache',
'storeClass' => 'LCStoreNull',
margin: 0 0 10px 10px;
}
-td, h3, p, h1, pre {
+h1,
+h3,
+p,
+pre,
+td {
margin: 0 20px 20px 20px;
font-size: 11px;
line-height: 140%;
.config-block-label {
display: block;
- margin-bottom: .2em;
+ margin-bottom: 0.2em;
}
-.config-block-label label, .config-label {
+.config-block-label label,
+.config-label {
font-weight: bold;
- padding-right: .5em;
- padding-top: .2em;
+ padding-right: 0.5em;
+ padding-top: 0.2em;
}
.config-block-elements {
.btn-install {
font-weight: bold;
font-size: 110%;
- padding: .2em .3em;
+ padding: 0.2em 0.3em;
}
.success-message {
background-position: left center;
background-repeat: no-repeat;
cursor: pointer;
- font-size: .8em;
+ font-size: 0.8em;
text-decoration: underline;
color: #0645ad;
}
"grunt-eslint": "19.0.0",
"grunt-jsonlint": "1.1.0",
"grunt-karma": "2.0.0",
- "grunt-stylelint": "0.6.0",
+ "grunt-stylelint": "0.7.0",
"karma": "1.1.0",
"karma-chrome-launcher": "2.0.0",
"karma-firefox-launcher": "1.0.0",
"karma-qunit": "1.0.0",
"qunitjs": "1.22.0",
- "stylelint-config-wikimedia": "0.3.0"
+ "stylelint-config-wikimedia": "0.4.1"
}
}
/* MediaWiki Special pages */
- 'mediawiki.rcfilters.filters' => [
+ 'mediawiki.rcfilters.filters.dm' => [
'scripts' => [
'resources/src/mediawiki.rcfilters/mw.rcfilters.js',
'resources/src/mediawiki.rcfilters/dm/mw.rcfilters.dm.FilterItem.js',
'resources/src/mediawiki.rcfilters/dm/mw.rcfilters.dm.FilterGroup.js',
'resources/src/mediawiki.rcfilters/dm/mw.rcfilters.dm.FiltersViewModel.js',
'resources/src/mediawiki.rcfilters/dm/mw.rcfilters.dm.ChangesListViewModel.js',
+ 'resources/src/mediawiki.rcfilters/mw.rcfilters.Controller.js',
+ ],
+ 'dependencies' => [
+ 'oojs',
+ 'mediawiki.Uri',
+ ],
+ ],
+ 'mediawiki.rcfilters.filters.ui' => [
+ 'scripts' => [
'resources/src/mediawiki.rcfilters/ui/mw.rcfilters.ui.CheckboxInputWidget.js',
'resources/src/mediawiki.rcfilters/ui/mw.rcfilters.ui.FiltersListWidget.js',
'resources/src/mediawiki.rcfilters/ui/mw.rcfilters.ui.FilterGroupWidget.js',
'resources/src/mediawiki.rcfilters/ui/mw.rcfilters.ui.FilterWrapperWidget.js',
'resources/src/mediawiki.rcfilters/ui/mw.rcfilters.ui.ChangesListWrapperWidget.js',
'resources/src/mediawiki.rcfilters/ui/mw.rcfilters.ui.FormWrapperWidget.js',
- 'resources/src/mediawiki.rcfilters/mw.rcfilters.Controller.js',
+ 'resources/src/mediawiki.rcfilters/ui/mw.rcfilters.ui.FilterItemHighlightButton.js',
+ 'resources/src/mediawiki.rcfilters/ui/mw.rcfilters.ui.HighlightColorPickerWidget.js',
+ 'resources/src/mediawiki.rcfilters/mw.rcfilters.HighlightColors.js',
'resources/src/mediawiki.rcfilters/mw.rcfilters.init.js',
],
'styles' => [
+ 'resources/src/mediawiki.rcfilters/styles/mw.rcfilters.mixins.less',
+ 'resources/src/mediawiki.rcfilters/styles/mw.rcfilters.variables.less',
+ 'resources/src/mediawiki.rcfilters/styles/mw.rcfilters.ui.less',
'resources/src/mediawiki.rcfilters/styles/mw.rcfilters.ui.Overlay.less',
+ 'resources/src/mediawiki.rcfilters/styles/mw.rcfilters.less',
'resources/src/mediawiki.rcfilters/styles/mw.rcfilters.ui.FilterItemWidget.less',
'resources/src/mediawiki.rcfilters/styles/mw.rcfilters.ui.CapsuleItemWidget.less',
'resources/src/mediawiki.rcfilters/styles/mw.rcfilters.ui.FilterGroupWidget.less',
'resources/src/mediawiki.rcfilters/styles/mw.rcfilters.ui.FiltersListWidget.less',
'resources/src/mediawiki.rcfilters/styles/mw.rcfilters.ui.FilterWrapperWidget.less',
'resources/src/mediawiki.rcfilters/styles/mw.rcfilters.ui.FilterCapsuleMultiselectWidget.less',
+ 'resources/src/mediawiki.rcfilters/styles/mw.rcfilters.ui.ChangesListWrapperWidget.less',
+ 'resources/src/mediawiki.rcfilters/styles/mw.rcfilters.ui.HighlightColorPickerWidget.less',
+ 'resources/src/mediawiki.rcfilters/styles/mw.rcfilters.ui.FilterItemHighlightButton.less',
],
'messages' => [
'rcfilters-activefilters',
'rcfilters-filter-categorization-description',
'rcfilters-filter-logactions-label',
'rcfilters-filter-logactions-description',
+ 'rcfilters-highlightbutton-title',
+ 'rcfilters-highlightmenu-title',
'recentchanges-noresult',
],
'dependencies' => [
'oojs-ui',
- 'mediawiki.Uri',
- 'oojs-ui.styles.icons-moderation'
+ 'mediawiki.rcfilters.filters.dm',
+ 'oojs-ui.styles.icons-moderation',
+ 'oojs-ui.styles.icons-editing-core',
],
],
'mediawiki.special' => [
.arrowSteps li {
float: left;
- padding: 0px;
- margin: 0px;
- border: 0 none;
+ padding: 0;
+ margin: 0;
+ border: 0;
}
.arrowSteps li div {
.mw-badge-inline {
margin-left: 3px;
display: inline-block;
- /* Hack for IE6 and IE7 (bug 47926) */
+ /* Hack for IE6 and IE7 (T49926) */
zoom: 1;
- *display: inline;
+ *display: inline; /* stylelint-disable-line declaration-block-no-duplicate-properties */
}
.mw-badge-overlay {
// Chop off characters from the end of the "inserted content" string
// until the limit is statisfied.
if ( fn ) {
- // stop, when there is nothing to slice - bug 41450
+ // stop, when there is nothing to slice - T43450
while ( $.byteLength( fn( inpParts.join( '' ) ) ) > byteLimit && inpParts[ 1 ].length > 0 ) {
inpParts[ 1 ] = inpParts[ 1 ].slice( 0, -1 );
}
}
// Always adjust prevSafeVal to reflect the input value. Not doing this could cause
// trimByteLength to compare the new value to an empty string instead of the
- // old value, resulting in trimming always from the end (bug 40850).
+ // old value, resulting in trimming always from the end (T42850).
prevSafeVal = res.newVal;
} );
} );
position: absolute;
cursor: crosshair;
}
-.farbtastic, .farbtastic .wheel {
+.farbtastic,
+.farbtastic .wheel {
width: 195px;
height: 195px;
}
-.farbtastic .color, .farbtastic .overlay {
+.farbtastic .color,
+.farbtastic .overlay {
top: 47px;
left: 47px;
width: 101px;
*
* @author Timo Tijhof, 2011-2012
*/
+/* eslint-env qunit */
( function ( mw, $ ) {
'use strict';
/* IE < 8 */
zoom: 1;
- *display: inline;
+ *display: inline; /* stylelint-disable-line declaration-block-no-duplicate-properties */
}
top: 0;
left: 0;
width: 0;
- border: none;
+ border: 0;
z-index: 1099;
padding: 0;
margin: -1px 0 0 0;
background-color: #fff;
cursor: pointer;
border: solid 1px #aaa;
- padding: 0;
margin: 0;
margin-top: -2px;
display: none;
// Don't interfere with special clicks (e.g. to open in new tab)
if ( !( e.which !== 1 || e.altKey || e.ctrlKey || e.shiftKey || e.metaKey ) ) {
// This will hide the link we're just clicking on, which causes problems
- // when done synchronously in at least Firefox 3.6 (bug 62858).
+ // when done synchronously in at least Firefox 3.6 (T64858).
setTimeout( function () {
$.suggestions.hide( context );
}, 0 );
// Don't interfere with special clicks (e.g. to open in new tab)
if ( !( e.which !== 1 || e.altKey || e.ctrlKey || e.shiftKey || e.metaKey ) ) {
// This will hide the link we're just clicking on, which causes problems
- // when done synchronously in at least Firefox 3.6 (bug 62858).
+ // when done synchronously in at least Firefox 3.6 (T64858).
setTimeout( function () {
$.suggestions.hide( context );
}, 0 );
var $node = $( node ),
// Use data-sort-value attribute.
// Use data() instead of attr() so that live value changes
- // are processed as well (bug 38152).
+ // are processed as well (T40152).
data = $node.data( 'sortValue' );
if ( data !== null && data !== undefined ) {
( function ( $ ) {
if ( document.selection && document.selection.createRange ) {
// On IE, patch the focus() method to restore the windows' scroll position
- // (bug 32241)
+ // (T34241)
$.fn.extend( {
focus: ( function ( jqFocus ) {
return function () {
*/
function activateElementOnIE( element ) {
if ( element.setActive ) {
- element.setActive(); // bug 32241: doesn't scroll
+ element.setActive(); // T34241: doesn't scroll
} else {
$( element ).focus(); // may scroll (but we patched it above)
}
// IE
// Note that IE9 will trigger the next section unless we check this first.
- // See bug 35201.
+ // See bug T37201.
activateElementOnIE( this );
if ( context ) {
// IE doesn't properly report non-selected caret position through
// the selection ranges when textarea isn't focused. This can
// lead to saving a bogus empty selection, which then screws up
- // whatever we do later (bug 31847).
+ // whatever we do later (T33847).
activateElementOnIE( e );
preFinished = false;
display: inline-block;
/* IE7 */
zoom: 1;
- *display: inline;
+ *display: inline; /* stylelint-disable declaration-block-no-duplicate-properties */
}
// This should be moved down to '#editform', but is kept on the body for now
// because the LiquidThreads extension is re-using this module with only half
- // the EditPage (doesn't include #editform presumably, bug 55463).
+ // the EditPage (doesn't include #editform presumably, T57463).
$( document.body ).on( 'click', '#wpPreview, #wpDiff', doLivePreview );
} );
font-size: 0.9em;
}
-#wpSummary {
+input#wpSummary {
display: block;
+ background-color: #fff;
+ color: #000;
+ width: 80%;
margin-top: 0;
- margin-bottom: 0.5em;
+ margin-bottom: 1em;
+ padding: 0.625em 0.546875em 0.546875em;
+ border: 1px solid #a2a9b1;
+ border-radius: 2px;
+ box-shadow: inset 0 0 0 1px #fff;
+ font-family: inherit;
+ font-size: inherit;
+ -webkit-transition: border-color 200ms cubic-bezier( 0.39, 0.575, 0.565, 1 ), box-shadow 200ms cubic-bezier( 0.39, 0.575, 0.565, 1 );
+ -moz-transition: border-color 200ms cubic-bezier( 0.39, 0.575, 0.565, 1 ), box-shadow 200ms cubic-bezier( 0.39, 0.575, 0.565, 1 );
+ transition: border-color 200ms cubic-bezier( 0.39, 0.575, 0.565, 1 ), box-shadow 200ms cubic-bezier( 0.39, 0.575, 0.565, 1 );
+}
+
+input#wpSummary:focus,
+input#wpSummary:active {
+ outline: 0;
+ border-color: #36c;
+ box-shadow: inset 0 0 0 1px #36c;
}
.editButtons input:first-child {
- margin-left: .1em;
+ margin-left: 0.1em;
}
/*
// Recheck preference so extensions can do a hack to disable this code.
if ( parseInt( mw.user.options.get( 'editondblclick' ), 10 ) ) {
e.preventDefault();
- // Trigger native HTMLElement click instead of opening URL (bug 43052)
+ // Trigger native HTMLElement click instead of opening URL (T45052)
$a = $( '#ca-edit a' );
- // Not every page has an edit link (bug 57713)
+ // Not every page has an edit link (T59713)
if ( $a.length ) {
$a.get( 0 ).click();
}
/*
* Add a checkered background image on hover for file
- * description pages. (bug 26470)
+ * description pages. (T28470)
*/
.filehistory a img,
#file img:hover {
font-size: 0.8em;
margin-left: 0.5em;
margin-bottom: 0.5em;
+ border: 0;
+ border-collapse: collapse;
width: 400px;
}
font-weight: bold;
}
-.mw_metadata th {
- font-weight: normal;
- text-align: center;
-}
-
-.mw_metadata td {
- padding: 0.1em;
-}
-
-.mw_metadata {
- border: none;
- border-collapse: collapse;
-}
-
.mw_metadata td,
.mw_metadata th {
border: 1px solid #a2a9b1;
.mw_metadata th {
background-color: #f8f9fa;
+ font-weight: normal;
+ text-align: center;
}
.mw_metadata td {
background-color: #fcfcfc;
+ padding-top: 0.1em;
+ padding-bottom: 0.1em;
}
.mw_metadata ul.metadata-langlist {
position: relative;
top: 0.6em;
left: -50%;
- padding: .6em 3.6em .6em 1.1em;
+ padding: 0.6em 3.6em 0.6em 1.1em;
line-height: 1.5625em;
color: #626465;
background-color: #f4f4f4;
.postedit-close {
position: absolute;
- padding: 0 .8em;
+ padding: 0 0.8em;
right: 0;
top: 0;
font-size: 1.25em;
// inside the heading (e.g. to do things like copy URL, open in new tab, ..).
// e.target can be the heading, but it can also be anything inside the heading.
if ( e.target.nodeName.toLowerCase() !== 'a' ) {
- // Trigger native HTMLElement click instead of opening URL (bug 43052)
+ // Trigger native HTMLElement click instead of opening URL (T45052)
e.preventDefault();
$edit.get( 0 ).click();
}
content: " (https:" attr( href ) ")";
}
-/* MSIE/Win doesn't understand 'inherit' */
a,
a.external,
a.new,
a.stub {
+ /* IE 6 & 7 don't understand `inherit` */
color: #000 !important;
text-decoration: none !important;
-}
-
-/* Continue ... */
-a,
-a.external,
-a.new,
-a.stub {
- color: inherit !important;
- text-decoration: inherit !important;
+ /* Modern browser will apply this, IE 6 & 7 ignore the unknown */
+ color: inherit !important; /* stylelint-disable-line declaration-block-no-duplicate-properties */
+ text-decoration: inherit !important; /* stylelint-disable-line declaration-block-no-duplicate-properties */
}
/**
}
html .thumbcaption {
- border: none;
+ border: 0;
text-align: left;
line-height: 1.4em;
padding: 3px;
.catlinks li {
display: inline-block;
line-height: 1.15em;
- padding: 0 .4em;
+ padding: 0 0.4em;
border-left: 1pt solid #aaa;
margin: 0.1em 0;
}
.catlinks li:first-child {
- padding-left: .2em;
+ padding-left: 0.2em;
border-left: 0;
}
font-size: 1em;
}
-h1, h2, h3, h4, h5, h6 {
+h1,
+h2,
+h3,
+h4,
+h5,
+h6 {
font-weight: bolder;
}
/* thumbnails */
div.thumb {
- margin-bottom: .5em;
+ margin-bottom: 0.5em;
border-style: solid;
border-color: #fff;
width: auto;
}
html .thumbcaption {
- border: none;
+ border: 0;
line-height: 1.4em;
padding: 3px;
font-size: 94%;
div.tright {
clear: right;
float: right;
- border-width: .5em 0 .8em 1.4em;
+ border-width: 0.5em 0 0.8em 1.4em;
}
/* @noflip */
div.tleft {
float: left;
clear: left;
- margin-right: .5em;
- border-width: .5em 1.4em .8em 0;
+ margin-right: 0.5em;
+ border-width: 0.5em 1.4em 0.8em 0;
}
img.thumbborder {
}
img {
- border: none;
+ border: 0;
}
#toc,
.toc {
border: 1px solid #bba;
background-color: #f7f8ff;
- padding: 5px;
+ padding: 7px;
font-size: 95%;
text-align: center;
display: inline-block;
/* IE7 and earlier */
zoom: 1;
- *display: inline;
-
- padding: 7px;
+ *display: inline; /* stylelint-disable-line declaration-block-no-duplicate-properties */
}
/* CSS for backwards-compatibility with cached page renders and creative uses in wikitext */
#toc h2,
.toc h2 {
display: inline;
- border: none;
+ border: 0;
padding: 0;
font-size: 100%;
font-weight: bold;
}
.editExternally {
- border-style: solid;
- border-width: 1px;
- border-color: #808080;
+ border: 1px solid #808080;
background: #fff;
padding: 3px;
margin-top: 0.5em;
/* Classes for Exif data display */
table.mw_metadata {
margin-left: 0.5em;
+ border: 0;
+ border-collapse: collapse;
}
table.mw_metadata caption {
font-weight: bold;
}
-table.mw_metadata th {
- font-weight: normal;
-}
-
-table.mw_metadata td {
- padding: 0.1em;
-}
-
-table.mw_metadata {
- border: none;
- border-collapse: collapse;
-}
-
table.mw_metadata td,
table.mw_metadata th {
border: 1px solid #aaa;
table.mw_metadata th {
background-color: #f9f9f9;
+ font-weight: normal;
}
table.mw_metadata td {
background-color: #fcfcfc;
+ padding-top: 0.1em;
+ padding-bottom: 0.1em;
}
table.mw_metadata td.spacer {
background: inherit;
- border-top: none;
- border-bottom: none;
+ border-width: 0 1px;
}
.visualClear {
}
div.multipageimagenavbox {
- border: solid 1px #c0c0c0;
+ border: 1px solid #c0c0c0;
padding: 4px;
margin: 1em;
background: #f0f0f0;
}
div.multipageimagenavbox div.thumb {
- border: none;
+ border: 0;
margin-left: 2em;
margin-right: 2em;
}
cursor: help;
}
-@supports (text-decoration: underline dotted) {
+@supports ( text-decoration: underline dotted ) {
abbr[title],
.explain[title] {
- border-bottom: none;
+ border-bottom: 0;
text-decoration: underline dotted;
}
}
*/
td.mw-label {
text-align: right;
+ vertical-align: middle;
}
td.mw-input {
td.mw-submit {
text-align: left;
-}
-
-td.mw-label {
- vertical-align: middle;
-}
-
-td.mw-submit {
white-space: nowrap;
}
-input#wpSummary {
- background-color: #fff;
- color: #000;
- width: 80%;
- margin-bottom: 1em;
- padding: 0.625em 0.546875em 0.546875em;
- border: 1px solid #a2a9b1;
- border-radius: 2px;
- box-shadow: inset 0 0 0 1px #fff;
- font-family: inherit;
- font-size: inherit;
- -webkit-transition: border-color 200ms cubic-bezier( 0.39, 0.575, 0.565, 1 ), box-shadow 200ms cubic-bezier( 0.39, 0.575, 0.565, 1 );
- -moz-transition: border-color 200ms cubic-bezier( 0.39, 0.575, 0.565, 1 ), box-shadow 200ms cubic-bezier( 0.39, 0.575, 0.565, 1 );
- transition: border-color 200ms cubic-bezier( 0.39, 0.575, 0.565, 1 ), box-shadow 200ms cubic-bezier( 0.39, 0.575, 0.565, 1 );
-}
-
-input#wpSummary:focus,
-input#wpSummary:active {
- outline: 0;
- border-color: #36c;
- box-shadow: inset 0 0 0 1px #36c;
-}
-
.mw-input-with-label {
white-space: nowrap;
display: inline-block;
#catlinks {
/**
* Overrides text justification (user preference)
- * See bug 31990
+ * See T33990
*/
text-align: left;
}
margin: 0.125em 0;
padding: 0 0.5em;
zoom: 1;
- display: inline !ie;
+ display: inline !ie; /* stylelint-disable-line declaration-block-no-duplicate-properties */
}
.catlinks li:first-child {
padding-left: 0.25em;
- border-left: none;
+ border-left: 0;
}
-/* (bug 5346) make category redirects italic */
+/* (T7346) make category redirects italic */
.catlinks li a.mw-redirect {
font-style: italic;
}
text-align: center;
}
-/* red links; see bug 36276 */
+/* red links; see T38276 */
a.new {
color: #ba0000;
}
padding: 0 !important;
}
-/* External URLs should always be treated as LTR (bug 4330) */
+/* External URLs should always be treated as LTR (T6330) */
/* @noflip */ .rtl a.external.free,
.rtl a.external.autonumber {
direction: ltr;
.warningbox,
.successbox {
border: 1px solid;
- padding: .5em 1em;
+ padding: 0.5em 1em;
margin-bottom: 1em;
display: inline-block;
zoom: 1;
- *display: inline;
+ *display: inline; /* stylelint-disable-line declaration-block-no-duplicate-properties */
}
.errorbox h2,
color: inherit;
font-weight: bold;
display: inline;
- margin: 0 .5em 0 0;
- border: none;
+ margin: 0 0.5em 0 0;
+ border: 0;
}
.errorbox {
background-repeat: no-repeat;
}
-/* Language specific height correction for titles. Ref Bug 29405 and Bug 30809 */
+/* Language specific height correction for titles. Ref T31405 and T32809 */
/* Languages like hi or ml require slightly more vertical space to show diacritics properly */
-h1:lang(anp),
-h1:lang(as),
-h1:lang(bh), /* Macrolanguage, used on bh.wikipedia.org, should be removed one day */
-h1:lang(bho),
-h1:lang(bn),
-h1:lang(gu),
-h1:lang(hi),
-h1:lang(kn),
-h1:lang(ks),
-h1:lang(ml),
-h1:lang(mr),
-h1:lang(my),
-h1:lang(mai),
-h1:lang(ne),
-h1:lang(new),
-h1:lang(or),
-h1:lang(pa),
-h1:lang(pi),
-h1:lang(sa),
-h1:lang(ta),
-h1:lang(te) {
+h1:lang( anp ),
+h1:lang( as ),
+h1:lang( bh ), /* Macrolanguage, used on bh.wikipedia.org, should be removed one day */
+h1:lang( bho ),
+h1:lang( bn ),
+h1:lang( gu ),
+h1:lang( hi ),
+h1:lang( kn ),
+h1:lang( ks ),
+h1:lang( ml ),
+h1:lang( mr ),
+h1:lang( my ),
+h1:lang( mai ),
+h1:lang( ne ),
+h1:lang( new ),
+h1:lang( or ),
+h1:lang( pa ),
+h1:lang( pi ),
+h1:lang( sa ),
+h1:lang( ta ),
+h1:lang( te ) {
line-height: 1.6em !important;
}
-h2:lang(anp), h3:lang(anp), h4:lang(anp), h5:lang(anp), h6:lang(anp),
-h2:lang(as), h3:lang(as), h4:lang(as), h5:lang(as), h6:lang(as),
-h2:lang(bho), h3:lang(bho), h4:lang(bho), h5:lang(bho), h6:lang(bho),
-h2:lang(bh), h3:lang(bh), h4:lang(bh), h5:lang(bh), h6:lang(bh),
-h2:lang(bn), h3:lang(bn), h4:lang(bn), h5:lang(bn), h6:lang(bn),
-h2:lang(gu), h3:lang(gu), h4:lang(gu), h5:lang(gu), h6:lang(gu),
-h2:lang(hi), h3:lang(hi), h4:lang(hi), h5:lang(hi), h6:lang(hi),
-h2:lang(kn), h3:lang(kn), h4:lang(kn), h5:lang(kn), h6:lang(kn),
-h2:lang(ks), h3:lang(ks), h4:lang(ks), h5:lang(ks), h6:lang(ks),
-h2:lang(ml), h3:lang(ml), h4:lang(ml), h5:lang(ml), h6:lang(ml),
-h2:lang(mr), h3:lang(mr), h4:lang(mr), h5:lang(mr), h6:lang(mr),
-h2:lang(my), h3:lang(my), h4:lang(my), h5:lang(my), h6:lang(my),
-h2:lang(mai), h3:lang(mai), h4:lang(mai), h5:lang(mai), h6:lang(mai),
-h2:lang(ne), h3:lang(ne), h4:lang(ne), h5:lang(ne), h6:lang(ne),
-h2:lang(new), h3:lang(new), h4:lang(new), h5:lang(new), h6:lang(new),
-h2:lang(or), h3:lang(or), h4:lang(or), h5:lang(or), h6:lang(or),
-h2:lang(pa), h3:lang(pa), h4:lang(pa), h5:lang(pa), h6:lang(pa),
-h2:lang(pi), h3:lang(pi), h4:lang(pi), h5:lang(pi), h6:lang(pi),
-h2:lang(sa), h3:lang(sa), h4:lang(sa), h5:lang(sa), h6:lang(sa),
-h2:lang(ta), h3:lang(ta), h4:lang(ta), h5:lang(ta), h6:lang(ta),
-h2:lang(te), h3:lang(te), h4:lang(te), h5:lang(te), h6:lang(te) {
+/* stylelint-disable selector-list-comma-newline-after */
+h2:lang( anp ), h3:lang( anp ), h4:lang( anp ), h5:lang( anp ), h6:lang( anp ),
+h2:lang( as ), h3:lang( as ), h4:lang( as ), h5:lang( as ), h6:lang( as ),
+h2:lang( bho ), h3:lang( bho ), h4:lang( bho ), h5:lang( bho ), h6:lang( bho ),
+h2:lang( bh ), h3:lang( bh ), h4:lang( bh ), h5:lang( bh ), h6:lang( bh ),
+h2:lang( bn ), h3:lang( bn ), h4:lang( bn ), h5:lang( bn ), h6:lang( bn ),
+h2:lang( gu ), h3:lang( gu ), h4:lang( gu ), h5:lang( gu ), h6:lang( gu ),
+h2:lang( hi ), h3:lang( hi ), h4:lang( hi ), h5:lang( hi ), h6:lang( hi ),
+h2:lang( kn ), h3:lang( kn ), h4:lang( kn ), h5:lang( kn ), h6:lang( kn ),
+h2:lang( ks ), h3:lang( ks ), h4:lang( ks ), h5:lang( ks ), h6:lang( ks ),
+h2:lang( ml ), h3:lang( ml ), h4:lang( ml ), h5:lang( ml ), h6:lang( ml ),
+h2:lang( mr ), h3:lang( mr ), h4:lang( mr ), h5:lang( mr ), h6:lang( mr ),
+h2:lang( my ), h3:lang( my ), h4:lang( my ), h5:lang( my ), h6:lang( my ),
+h2:lang( mai ), h3:lang( mai ), h4:lang( mai ), h5:lang( mai ), h6:lang( mai ),
+h2:lang( ne ), h3:lang( ne ), h4:lang( ne ), h5:lang( ne ), h6:lang( ne ),
+h2:lang( new ), h3:lang( new ), h4:lang( new ), h5:lang( new ), h6:lang( new ),
+h2:lang( or ), h3:lang( or ), h4:lang( or ), h5:lang( or ), h6:lang( or ),
+h2:lang( pa ), h3:lang( pa ), h4:lang( pa ), h5:lang( pa ), h6:lang( pa ),
+h2:lang( pi ), h3:lang( pi ), h4:lang( pi ), h5:lang( pi ), h6:lang( pi ),
+h2:lang( sa ), h3:lang( sa ), h4:lang( sa ), h5:lang( sa ), h6:lang( sa ),
+h2:lang( ta ), h3:lang( ta ), h4:lang( ta ), h5:lang( ta ), h6:lang( ta ),
+h2:lang( te ), h3:lang( te ), h4:lang( te ), h5:lang( te ), h6:lang( te ) {
line-height: 1.2em;
}
+/* stylelint-enable selector-list-comma-newline-after */
/* Localised ordered list numbering for some languages */
-ol:lang(azb) li,
-ol:lang(bcc) li,
-ol:lang(bgn) li,
-ol:lang(bqi) li,
-ol:lang(fa) li,
-ol:lang(glk) li,
-ol:lang(kk-arab) li,
-ol:lang(lrc) li,
-ol:lang(luz) li,
-ol:lang(mzn) li {
+ol:lang( azb ) li,
+ol:lang( bcc ) li,
+ol:lang( bgn ) li,
+ol:lang( bqi ) li,
+ol:lang( fa ) li,
+ol:lang( glk ) li,
+ol:lang( kk-arab ) li,
+ol:lang( lrc ) li,
+ol:lang( luz ) li,
+ol:lang( mzn ) li {
list-style-type: -moz-persian;
list-style-type: persian;
}
-ol:lang(ckb) li,
-ol:lang(sdh) li {
+ol:lang( ckb ) li,
+ol:lang( sdh ) li {
list-style-type: -moz-arabic-indic;
list-style-type: arabic-indic;
}
-ol:lang(hi) li,
-ol:lang(mr) li {
+ol:lang( hi ) li,
+ol:lang( mr ) li {
list-style-type: -moz-devanagari;
list-style-type: devanagari;
}
-ol:lang(as) li,
-ol:lang(bn) li {
+ol:lang( as ) li,
+ol:lang( bn ) li {
list-style-type: -moz-bengali;
list-style-type: bengali;
}
-ol:lang(or) li {
+ol:lang( or ) li {
list-style-type: -moz-oriya;
list-style-type: oriya;
}
-#toc ul, .toc ul {
- margin: .3em 0;
+#toc ul,
+.toc ul {
+ margin: 0.3em 0;
}
/* Correct directionality when page dir is different from site/user dir */
position: relative;
}
-/* bug 12205 */
+/* T14205 */
#mw-credits a {
unicode-bidi: embed;
}
-webkit-transform: rotate( @deg );
-moz-transform: rotate( @deg );
transform: rotate( @deg );
-}
\ No newline at end of file
+}
order: @order;
}
+/* stylelint-disable selector-no-vendor-prefix, at-rule-no-unknown */
+.mixin-placeholder( @rules ) {
+ // WebKit, Blink, Edge
+ &::-webkit-input-placeholder {
+ @rules();
+ }
+ // Internet Explorer 10-11
+ &:-ms-input-placeholder {
+ @rules();
+ }
+ // Firefox 19-
+ &::-moz-placeholder {
+ @rules();
+ }
+ // Firefox 4-18
+ &:-moz-placeholder {
+ @rules();
+ }
+ // W3C Standard Selectors Level 4
+ &::placeholder {
+ @rules();
+ }
+ // For inputs that use jquery.placeholder.js e.g. IE9
+ &.placeholder {
+ @rules();
+ }
+}
+/* stylelint-enable selector-no-vendor-prefix, at-rule-no-unknown */
// Screen Reader Helper Mixin
.mixin-screen-reader-text() {
* @cfg {boolean} [selected] The item is selected
* @cfg {string[]} [subset] Defining the names of filters that are a subset of this filter
* @cfg {string[]} [conflictsWith] Defining the names of filters that conflict with this item
+ * @cfg {string} [cssClass] The class identifying the results that match this filter
*/
mw.rcfilters.dm.FilterItem = function MwRcfiltersDmFilterItem( name, groupModel, config ) {
config = config || {};
this.included = false;
this.conflicted = false;
this.fullyCovered = false;
+
+ // Highlight
+ this.cssClass = config.cssClass;
+ this.highlightColor = null;
+ this.highlightEnabled = false;
};
/* Initialization */
this.emit( 'update' );
}
};
+
+ /**
+ * Set the highlight color
+ *
+ * @param {string|null} highlightColor
+ */
+ mw.rcfilters.dm.FilterItem.prototype.setHighlightColor = function ( highlightColor ) {
+ if ( this.highlightColor !== highlightColor ) {
+ this.highlightColor = highlightColor;
+ this.emit( 'update' );
+ }
+ };
+
+ /**
+ * Clear the highlight color
+ */
+ mw.rcfilters.dm.FilterItem.prototype.clearHighlightColor = function () {
+ this.setHighlightColor( null );
+ };
+
+ /**
+ * Get the highlight color, or null if none is configured
+ *
+ * @return {string|null}
+ */
+ mw.rcfilters.dm.FilterItem.prototype.getHighlightColor = function () {
+ return this.highlightColor;
+ };
+
+ /**
+ * Get the CSS class that matches changes that fit this filter
+ * or null if none is configured
+ *
+ * @return {string|null}
+ */
+ mw.rcfilters.dm.FilterItem.prototype.getCssClass = function () {
+ return this.cssClass;
+ };
+
+ /**
+ * Toggle the highlight feature on and off for this filter.
+ * It only works if highlight is supported for this filter.
+ *
+ * @param {boolean} enable Highlight should be enabled
+ */
+ mw.rcfilters.dm.FilterItem.prototype.toggleHighlight = function ( enable ) {
+ enable = enable === undefined ? !this.highlightEnabled : enable;
+
+ if ( !this.isHighlightSupported() ) {
+ return;
+ }
+
+ if ( enable === this.highlightEnabled ) {
+ return;
+ }
+
+ this.highlightEnabled = enable;
+ this.emit( 'update' );
+ };
+
+ /**
+ * Check if the highlight feature is currently enabled for this filter
+ *
+ * @return {boolean}
+ */
+ mw.rcfilters.dm.FilterItem.prototype.isHighlightEnabled = function () {
+ return !!this.highlightEnabled;
+ };
+
+ /**
+ * Check if the highlight feature is supported for this filter
+ *
+ * @return {boolean}
+ */
+ mw.rcfilters.dm.FilterItem.prototype.isHighlightSupported = function () {
+ return !!this.getCssClass();
+ };
}( mediaWiki ) );
this.groups = {};
this.defaultParams = {};
this.defaultFiltersEmpty = null;
+ this.highlightEnabled = false;
// Events
this.aggregate( { update: 'filterItemUpdate' } );
* Filter item has changed
*/
+ /**
+ * @event highlightChange
+ * @param {boolean} Highlight feature is enabled
+ *
+ * Highlight feature has been toggled enabled or disabled
+ */
+
/* Methods */
/**
group: group,
label: data.filters[ i ].label,
description: data.filters[ i ].description,
- subset: data.filters[ i ].subset
+ subset: data.filters[ i ].subset,
+ cssClass: data.filters[ i ].class
} );
// For convenience, we should store each filter's "supersets" -- these are
return result;
};
+ /**
+ * Get the highlight parameters based on current filter configuration
+ *
+ * @return {object} Object where keys are "<filter name>_color" and values
+ * are the selected highlight colors.
+ */
+ mw.rcfilters.dm.FiltersViewModel.prototype.getHighlightParameters = function () {
+ var result = { highlight: this.isHighlightEnabled() };
+
+ this.getItems().forEach( function ( filterItem ) {
+ result[ filterItem.getName() + '_color' ] = filterItem.getHighlightColor();
+ } );
+ return result;
+ };
+
/**
* Sanitize value group of a string_option groups type
* Remove duplicates and make sure to only use valid
* @return {boolean} Current filters are all empty
*/
mw.rcfilters.dm.FiltersViewModel.prototype.areCurrentFiltersEmpty = function () {
- var currFilters = this.getSelectedState();
-
- return Object.keys( currFilters ).every( function ( filterName ) {
- return !currFilters[ filterName ];
+ var model = this;
+
+ // Check if there are either any selected items or any items
+ // that have highlight enabled
+ return !this.getItems().some( function ( filterItem ) {
+ return (
+ filterItem.isSelected() ||
+ ( model.isHighlightEnabled() && filterItem.getHighlightColor() )
+ );
} );
};
return result;
};
+ /**
+ * Get items that are highlighted
+ *
+ * @return {mw.rcfilters.dm.FilterItem[]} Highlighted items
+ */
+ mw.rcfilters.dm.FiltersViewModel.prototype.getHighlightedItems = function () {
+ return this.getItems().filter( function ( filterItem ) {
+ return filterItem.isHighlightSupported() &&
+ filterItem.getHighlightColor();
+ } );
+ };
+
+ /**
+ * Toggle the highlight feature on and off.
+ * Propagate the change to filter items.
+ *
+ * @param {boolean} enable Highlight should be enabled
+ * @fires highlightChange
+ */
+ mw.rcfilters.dm.FiltersViewModel.prototype.toggleHighlight = function ( enable ) {
+ enable = enable === undefined ? !this.highlightEnabled : enable;
+
+ if ( this.highlightEnabled !== enable ) {
+ this.highlightEnabled = enable;
+
+ this.getItems().forEach( function ( filterItem ) {
+ filterItem.toggleHighlight( this.highlightEnabled );
+ }.bind( this ) );
+
+ this.emit( 'highlightChange', this.highlightEnabled );
+ }
+ };
+
+ /**
+ * Check if the highlight feature is enabled
+ * @return {boolean}
+ */
+ mw.rcfilters.dm.FiltersViewModel.prototype.isHighlightEnabled = function () {
+ return this.highlightEnabled;
+ };
+
+ /**
+ * Set highlight color for a specific filter item
+ *
+ * @param {string} filterName Name of the filter item
+ * @param {string} color Selected color
+ */
+ mw.rcfilters.dm.FiltersViewModel.prototype.setHighlightColor = function ( filterName, color ) {
+ this.getItemByName( filterName ).setHighlightColor( color );
+ };
+
+ /**
+ * Clear highlight for a specific filter item
+ *
+ * @param {string} filterName Name of the filter item
+ */
+ mw.rcfilters.dm.FiltersViewModel.prototype.clearHighlightColor = function ( filterName ) {
+ this.getItemByName( filterName ).clearHighlightColor();
+ };
+
+ /**
+ * Clear highlight for all filter items
+ */
+ mw.rcfilters.dm.FiltersViewModel.prototype.clearAllHighlightColors = function () {
+ this.getItems().forEach( function ( filterItem ) {
+ filterItem.clearHighlightColor();
+ } );
+ };
}( mediaWiki, jQuery ) );
)
);
+ // Initialize highlights
+ this.filtersModel.toggleHighlight( !!uri.query.highlight );
+ this.filtersModel.getItems().forEach( function ( filterItem ) {
+ var color = uri.query[ filterItem.getName() + '_color' ];
+ if ( !color ) {
+ return;
+ }
+
+ filterItem.setHighlightColor( color );
+ } );
+
// Check all filter interactions
this.filtersModel.reassessFilterInteractions();
};
*/
mw.rcfilters.Controller.prototype.resetToDefaults = function () {
this.filtersModel.setFiltersToDefaults();
+ // Check all filter interactions
+ this.filtersModel.reassessFilterInteractions();
+
this.updateURL();
this.updateChangesList();
};
*/
mw.rcfilters.Controller.prototype.emptyFilters = function () {
this.filtersModel.emptyAllFilters();
+ this.filtersModel.clearAllHighlightColors();
+ // Check all filter interactions
+ this.filtersModel.reassessFilterInteractions();
+
this.updateURL();
this.updateChangesList();
};
* @param {boolean} isSelected Filter selected state
*/
mw.rcfilters.Controller.prototype.updateFilter = function ( filterName, isSelected ) {
- var obj = {};
+ var obj = {},
+ filterItem = this.filtersModel.getItemByName( filterName );
- obj[ filterName ] = isSelected;
+ if ( filterItem.isSelected() !== isSelected ) {
+ obj[ filterName ] = isSelected;
+ this.filtersModel.updateFilters( obj );
- this.filtersModel.updateFilters( obj );
- this.updateURL();
- this.updateChangesList();
+ this.updateURL();
+ this.updateChangesList();
- // Check filter interactions
- this.filtersModel.reassessFilterInteractions( this.filtersModel.getItemByName( filterName ) );
+ // Check filter interactions
+ this.filtersModel.reassessFilterInteractions( this.filtersModel.getItemByName( filterName ) );
+ }
};
/**
* Update the URL of the page to reflect current filters
*/
mw.rcfilters.Controller.prototype.updateURL = function () {
- var uri = new mw.Uri();
+ var uri = this.getUpdatedUri();
+ window.history.pushState( { tag: 'rcfilters' }, document.title, uri.toString() );
+ };
+
+ /**
+ * Get an updated mw.Uri object based on the model state
+ *
+ * @return {mw.Uri} Updated Uri
+ */
+ mw.rcfilters.Controller.prototype.getUpdatedUri = function () {
+ var uri = new mw.Uri(),
+ highlightParams = this.filtersModel.getHighlightParameters();
// Add to existing queries in URL
// TODO: Clean up the list of filters; perhaps 'falsy' filters
// and see if current state of a specific filter is needed?
uri.extend( this.filtersModel.getParametersFromFilters() );
- // Update the URL itself
- window.history.pushState( { tag: 'rcfilters' }, document.title, uri.toString() );
+ // highlight params
+ Object.keys( highlightParams ).forEach( function ( paramName ) {
+ if ( highlightParams[ paramName ] ) {
+ uri.query[ paramName ] = highlightParams[ paramName ];
+ } else {
+ delete uri.query[ paramName ];
+ }
+ } );
+
+ return uri;
};
/**
* Fetch the list of changes from the server for the current filters
*
- * @returns {jQuery.Promise} Promise object that will resolve with the changes list
+ * @return {jQuery.Promise} Promise object that will resolve with the changes list
*/
mw.rcfilters.Controller.prototype.fetchChangesList = function () {
- var uri = new mw.Uri(),
+ var uri = this.getUpdatedUri(),
requestId = ++this.requestCounter,
latestRequest = function () {
return requestId === this.requestCounter;
}
}.bind( this ) );
};
+
+ /**
+ * Toggle the highlight feature on and off
+ */
+ mw.rcfilters.Controller.prototype.toggleHighlight = function () {
+ this.filtersModel.toggleHighlight();
+ this.updateURL();
+ };
+
+ /**
+ * Set the highlight color for a filter item
+ *
+ * @param {string} filterName Name of the filter item
+ * @param {string} color Selected color
+ */
+ mw.rcfilters.Controller.prototype.setHighlightColor = function ( filterName, color ) {
+ this.filtersModel.setHighlightColor( filterName, color );
+ this.updateURL();
+ };
+
+ /**
+ * Clear highlight for a filter item
+ *
+ * @param {string} filterName Name of the filter item
+ */
+ mw.rcfilters.Controller.prototype.clearHighlightColor = function ( filterName ) {
+ this.filtersModel.clearHighlightColor( filterName );
+ this.updateURL();
+ };
}( mediaWiki, jQuery ) );
--- /dev/null
+( function ( mw ) {
+ /**
+ * Supported highlight colors.
+ * Warning: These are also hardcoded in "styles/mw.rcfilters.variables.less"
+ *
+ * @type {string[]}
+ */
+ mw.rcfilters.HighlightColors = [ 'c1', 'c2', 'c3', 'c4', 'c5' ];
+}( mediaWiki ) );
// eslint-disable-next-line no-new
new mw.rcfilters.ui.ChangesListWrapperWidget(
- changesListModel, $( '.mw-changeslist, .mw-changeslist-empty' ) );
+ filtersModel, changesListModel, $( '.mw-changeslist, .mw-changeslist-empty' ) );
// eslint-disable-next-line no-new
new mw.rcfilters.ui.FormWrapperWidget(
{
name: 'hideliu',
label: mw.msg( 'rcfilters-filter-registered-label' ),
- description: mw.msg( 'rcfilters-filter-registered-description' )
+ description: mw.msg( 'rcfilters-filter-registered-description' ),
+ 'class': 'mw-changeslist-liu'
},
{
name: 'hideanons',
label: mw.msg( 'rcfilters-filter-unregistered-label' ),
- description: mw.msg( 'rcfilters-filter-unregistered-description' )
+ description: mw.msg( 'rcfilters-filter-unregistered-description' ),
+ 'class': 'mw-changeslist-anon'
}
]
},
name: 'newcomer',
label: mw.msg( 'rcfilters-filter-userExpLevel-newcomer-label' ),
description: mw.msg( 'rcfilters-filter-userExpLevel-newcomer-description' ),
- conflicts: [ 'hideanons' ]
+ conflicts: [ 'hideanons' ],
+ 'class': 'mw-changeslist-user-newcomer'
},
{
name: 'learner',
label: mw.msg( 'rcfilters-filter-userExpLevel-learner-label' ),
description: mw.msg( 'rcfilters-filter-userExpLevel-learner-description' ),
- conflicts: [ 'hideanons' ]
+ conflicts: [ 'hideanons' ],
+ 'class': 'mw-changeslist-user-learner'
},
{
name: 'experienced',
label: mw.msg( 'rcfilters-filter-userExpLevel-experienced-label' ),
description: mw.msg( 'rcfilters-filter-userExpLevel-experienced-description' ),
- conflicts: [ 'hideanons' ]
+ conflicts: [ 'hideanons' ],
+ 'class': 'mw-changeslist-user-experienced'
}
]
},
{
name: 'hidemyself',
label: mw.msg( 'rcfilters-filter-editsbyself-label' ),
- description: mw.msg( 'rcfilters-filter-editsbyself-description' )
+ description: mw.msg( 'rcfilters-filter-editsbyself-description' ),
+ 'class': 'mw-changeslist-self'
},
{
name: 'hidebyothers',
label: mw.msg( 'rcfilters-filter-editsbyother-label' ),
- description: mw.msg( 'rcfilters-filter-editsbyother-description' )
+ description: mw.msg( 'rcfilters-filter-editsbyother-description' ),
+ 'class': 'mw-changeslist-others'
}
]
},
name: 'hidebots',
label: mw.msg( 'rcfilters-filter-bots-label' ),
description: mw.msg( 'rcfilters-filter-bots-description' ),
- 'default': true
+ 'default': true,
+ 'class': 'mw-changeslist-bot'
},
{
name: 'hidehumans',
label: mw.msg( 'rcfilters-filter-humans-label' ),
description: mw.msg( 'rcfilters-filter-humans-description' ),
- 'default': false
+ 'default': false,
+ 'class': 'mw-changeslist-human'
}
]
},
{
name: 'hideminor',
label: mw.msg( 'rcfilters-filter-minor-label' ),
- description: mw.msg( 'rcfilters-filter-minor-description' )
+ description: mw.msg( 'rcfilters-filter-minor-description' ),
+ 'class': 'mw-changeslist-minor'
},
{
name: 'hidemajor',
label: mw.msg( 'rcfilters-filter-major-label' ),
- description: mw.msg( 'rcfilters-filter-major-description' )
+ description: mw.msg( 'rcfilters-filter-major-description' ),
+ 'class': 'mw-changeslist-major'
}
]
},
name: 'hidepageedits',
label: mw.msg( 'rcfilters-filter-pageedits-label' ),
description: mw.msg( 'rcfilters-filter-pageedits-description' ),
- 'default': false
+ 'default': false,
+ 'class': 'mw-changeslist-src-mw-edit'
+
},
{
name: 'hidenewpages',
label: mw.msg( 'rcfilters-filter-newpages-label' ),
description: mw.msg( 'rcfilters-filter-newpages-description' ),
- 'default': false
+ 'default': false,
+ 'class': 'mw-changeslist-src-mw-new'
},
{
name: 'hidecategorization',
label: mw.msg( 'rcfilters-filter-categorization-label' ),
description: mw.msg( 'rcfilters-filter-categorization-description' ),
- 'default': true
+ 'default': true,
+ 'class': 'mw-changeslist-src-mw-categorize'
},
{
name: 'hidelog',
label: mw.msg( 'rcfilters-filter-logactions-label' ),
description: mw.msg( 'rcfilters-filter-logactions-description' ),
- 'default': false
+ 'default': false,
+ 'class': 'mw-changeslist-src-mw-log'
}
]
}
--- /dev/null
+// Corrections for the standard special page
+.rcoptions {
+ border: 0;
+ border-bottom: 1px solid #a2a9b1;
+
+ legend {
+ display: none;
+ }
+}
--- /dev/null
+@import "mediawiki.mixins";
+@import "mw.rcfilters.variables";
+
+// This is a general mixin for a color circle
+.mw-rcfilters-mixin-circle( @color: white, @diameter: 2em, @padding: 0.5em, @border: false ) {
+ border-radius: 50%;
+ min-width: @diameter;
+ width: @diameter;
+ min-height: @diameter;
+ height: @diameter;
+ margin: @padding;
+ .box-sizing( border-box );
+
+ background-color: @color;
+
+ & when (@border = true) {
+ border: 1px solid #565656;
+ }
+}
+
+// This is the circle that appears next to the results
+// Its visibility is directly dependent on whether there is
+// a color class on its parent element
+.result-circle( @colorName: 'none' ) {
+ &-@{colorName} {
+ .mw-rcfilters-mixin-circle( ~"@{highlight-@{colorName}}", @result-circle-diameter, 0 );
+ display: none;
+
+ .mw-rcfilters-highlight-color-@{colorName} & {
+ display: inline-block;
+ }
+ }
+}
+
+// This mixin produces color mixes for two, three and four colors
+.highlight-color-mix( @color1, @color2, @color3: false, @color4: false ) {
+ @highlight-color-class-var: ~".mw-rcfilters-highlight-color-@{color1}.mw-rcfilters-highlight-color-@{color2}";
+
+ // The nature of these variables and them being inside
+ // a 'tint' and 'average' LESS functions is such where
+ // the parsing is failing if it is done inside those functions.
+ // Instead, we first construct their LESS variable names,
+ // and then we call them inside those functions by calling @@var
+ @c1var: ~"highlight-@{color1}";
+ @c2var: ~"highlight-@{color2}";
+
+ // Two colors
+ @{highlight-color-class-var} when ( @color3 = false ) and ( @color4 = false ) and not ( @color1 = false ), ( @color2 = false ) {
+ background-color: tint( average( @@c1var, @@c2var ), 50% );
+ }
+ // Three colors
+ @{highlight-color-class-var}.mw-rcfilters-highlight-color-@{color3} when ( @color4 = false ) and not ( @color3 = false ) {
+ @c3var: ~"highlight-@{color3}";
+ background-color: tint( mix( @@c1var, average( @@c2var, @@c3var ), 33% ), 30% );
+ }
+
+ // Four colors
+ @{highlight-color-class-var}.mw-rcfilters-highlight-color-@{color3}.mw-rcfilters-highlight-color-@{color4} when not ( @color4 = false ) {
+ @c3var: ~"highlight-@{color3}";
+ @c4var: ~"highlight-@{color4}";
+ background-color: tint( mix( @@c1var, mix( @@c2var, average( @@c3var, @@c4var ), 25% ), 25% ), 25% );
+ }
+}
+@import "mw.rcfilters.mixins";
+
.mw-rcfilters-ui-capsuleItemWidget {
- &-popup {
- padding: 1em;
+ &-popup-content {
+ padding: 0.5em;
+ color: #54595d;
}
- .oo-ui-popupWidget {
- // Fix the positioning of the popup itself
- margin-top: 1em;
+ &.oo-ui-labelElement .oo-ui-labelElement-label {
+ vertical-align: middle;
+ cursor: pointer;
}
&-muted {
- opacity: 0.5;
+ // Muted state
+ // We want everything muted except the circle
+ background-color: rgba( 255, 255, 255, @muted-opacity );
+
+ .oo-ui-labelElement-label,
+ .oo-ui-buttonWidget {
+ opacity: @muted-opacity;
+ }
+ }
+
+ &-highlight {
+ display: none;
+ padding-right: 0.5em;
+
+ &-highlighted {
+ display: inline-block;
+
+ }
+
+ &[data-color="c1"] {
+ .mw-rcfilters-mixin-circle( @highlight-c1, 0.7em, ~"0 0.5em 0 0" );
+ }
+ &[data-color="c2"] {
+ .mw-rcfilters-mixin-circle( @highlight-c2, 0.7em, ~"0 0.5em 0 0" );
+ }
+ &[data-color="c3"] {
+ .mw-rcfilters-mixin-circle( @highlight-c3, 0.7em, ~"0 0.5em 0 0" );
+ }
+ &[data-color="c4"] {
+ .mw-rcfilters-mixin-circle( @highlight-c4, 0.7em, ~"0 0.5em 0 0" );
+ }
+ &[data-color="c5"] {
+ .mw-rcfilters-mixin-circle( @highlight-c5, 0.7em, ~"0 0.5em 0 0" );
+ }
}
}
--- /dev/null
+@import 'mw.rcfilters.mixins';
+
+.mw-rcfilters-ui-changesListWrapperWidget {
+ &-highlighted {
+ ul {
+ list-style: none;
+ // Each li's margin-left should be the width of the highlights
+ // element + the margin
+ margin-left: ~"calc( ( @{result-circle-diameter} + @{result-circle-margin} ) * 5 + @{result-circle-general-margin} )";
+ }
+ }
+
+ // Correction for Enhanced RC
+ // This is outside the scope of the 'highlights' wrapper
+ table.mw-enhanced-rc {
+ margin-left: ~"calc( ( @{result-circle-diameter} + @{result-circle-margin} ) * 5 + @{result-circle-general-margin} )";
+
+ td:last-child {
+ width: 100%;
+ }
+ }
+
+ &-highlights {
+ display: none;
+ padding: 0 @result-circle-general-margin 0 0;
+ text-align: right;
+ // The width is 5 circles times their diameter + individual margin
+ // and then plus the general margin
+ width: ~"calc( ( @{result-circle-diameter} + @{result-circle-margin} ) * 5 )";
+ // And we want to shift the entire block to the left of the li
+ position: absolute;
+ left: 0;
+
+ .mw-rcfilters-ui-changesListWrapperWidget-highlighted & {
+ display: inline-block;
+ }
+
+ div {
+ .box-sizing( border-box );
+ margin-right: @result-circle-margin;
+ vertical-align: middle;
+ // This is to make the dots appear at the center of the
+ // text itself; it's a horrendous hack and blame JamesF for it.
+ margin-top: -2px;
+ }
+
+ &-color {
+
+ &-none {
+ .mw-rcfilters-mixin-circle( @highlight-none, @result-circle-diameter, 0, true );
+ display: inline-block;
+
+ .mw-rcfilters-highlight-color-c1 &,
+ .mw-rcfilters-highlight-color-c2 &,
+ .mw-rcfilters-highlight-color-c3 &,
+ .mw-rcfilters-highlight-color-c4 &,
+ .mw-rcfilters-highlight-color-c5 & {
+ display: none;
+ }
+ }
+ .result-circle( c1 );
+ .result-circle( c2 );
+ .result-circle( c3 );
+ .result-circle( c4 );
+ .result-circle( c5 );
+ }
+ }
+
+ // One color
+ .mw-rcfilters-highlight-color-c1 {
+ background-color: tint( @highlight-c1, 70% );
+ }
+
+ .mw-rcfilters-highlight-color-c2 {
+ background-color: tint( @highlight-c2, 70% );
+ }
+
+ .mw-rcfilters-highlight-color-c3 {
+ background-color: tint( @highlight-c3, 70% );
+ }
+
+ .mw-rcfilters-highlight-color-c4 {
+ background-color: tint( @highlight-c4, 70% );
+ }
+
+ .mw-rcfilters-highlight-color-c5 {
+ background-color: tint( @highlight-c5, 70% );
+ }
+
+ // Two colors
+ .highlight-color-mix( c1, c2 );
+ .highlight-color-mix( c1, c3 );
+ .highlight-color-mix( c1, c4 );
+ .highlight-color-mix( c1, c5 );
+ .highlight-color-mix( c2, c3 );
+ .highlight-color-mix( c2, c4 );
+ .highlight-color-mix( c2, c5 );
+ .highlight-color-mix( c3, c4 );
+ .highlight-color-mix( c3, c5 );
+ .highlight-color-mix( c4, c5 );
+
+ // Three colors
+ .highlight-color-mix( c1, c2, c3 );
+ .highlight-color-mix( c1, c2, c5 );
+ .highlight-color-mix( c1, c2, c4 );
+ .highlight-color-mix( c1, c3, c4 );
+ .highlight-color-mix( c1, c3, c5 );
+ .highlight-color-mix( c1, c4, c5 );
+ .highlight-color-mix( c2, c3, c4 );
+ .highlight-color-mix( c2, c3, c5 );
+ .highlight-color-mix( c2, c4, c5 );
+ .highlight-color-mix( c3, c4, c5 );
+
+ // Four colors
+ .highlight-color-mix( c1, c2, c3, c4 );
+ .highlight-color-mix( c1, c2, c3, c5 );
+ .highlight-color-mix( c1, c2, c4, c5 );
+ .highlight-color-mix( c1, c3, c4, c5 );
+ .highlight-color-mix( c2, c3, c4, c5 );
+
+ // Five colors:
+ .mw-rcfilters-highlight-color-c1.mw-rcfilters-highlight-color-c2.mw-rcfilters-highlight-color-c3.mw-rcfilters-highlight-color-c4.mw-rcfilters-highlight-color-c5 {
+ background-color: tint( mix( @highlight-c1, mix( @highlight-c2, mix( @highlight-c3, average( @highlight-c4, @highlight-c5 ), 20% ), 20% ), 20% ), 15% );
+ }
+}
color: #72777d;
}
- &-table {
- display: table;
+ &-cell-filters {
width: 100%;
}
-
- &-row {
- display: table-row;
- }
-
- &-cell {
- display: table-cell;
-
- &:last-child {
- text-align: right;
- }
+ &-cell-reset {
+ text-align: right;
+ padding-left: 0.5em;
}
.oo-ui-capsuleItemWidget {
--- /dev/null
+@import "mw.rcfilters.mixins";
+
+.mw-rcfilters-ui-filterItemHighlightButton {
+
+ &-circle {
+ display: inline-block;
+ vertical-align: middle;
+ background-image: none;
+ margin-right: 0.2em;
+
+ &-color {
+ &-c1 {
+ // These values duplicate the sizing of the icon
+ // width/height 1.875em
+ .mw-rcfilters-mixin-circle( @highlight-c1, 1.875em, 0 );
+ }
+ &-c2 {
+ .mw-rcfilters-mixin-circle( @highlight-c2, 1.875em, 0 );
+ }
+ &-c3 {
+ .mw-rcfilters-mixin-circle( @highlight-c3, 1.875em, 0 );
+ }
+ &-c4 {
+ .mw-rcfilters-mixin-circle( @highlight-c4, 1.875em, 0 );
+ }
+ &-c5 {
+ .mw-rcfilters-mixin-circle( @highlight-c5, 1.875em, 0 );
+ }
+ }
+ }
+}
@import "mediawiki.mixins";
.mw-rcfilters-ui-filterItemWidget {
- padding-left: 0.5em;
+ padding: 0 0.5em;
.box-sizing( border-box );
+ .mw-rcfilters-ui-table {
+ padding-top: 0.5em;
+ }
+
+ &-muted {
+ background-color: #f8f9fa; // Base90 AAA
+ .mw-rcfilters-ui-filterItemWidget-label-title,
+ .mw-rcfilters-ui-filterItemWidget-label-desc {
+ color: #54595d; // Base20 AAA
+ }
+ }
+
&-label {
&-title {
font-weight: bold;
}
}
- .oo-ui-fieldLayout.oo-ui-fieldLayout-align-inline {
- // Override margin-top and -bottom rules from FieldLayout
- margin: 0 !important;
+ &-filterCheckbox {
+ .oo-ui-fieldLayout.oo-ui-fieldLayout-align-inline {
+ // Override margin-top and -bottom rules from FieldLayout
+ margin: 0 !important;
+ }
+
}
- &-muted {
- opacity: 0.5;
+ &-highlightButton {
+ width: 4em;
+ padding-left: 1em;
}
}
.mw-rcfilters-ui-filterWrapperWidget {
width: 100%;
+ // Make sure this uses the interface direction, not the content direction
+ direction: ltr;
&-popup {
// We have to override OOUI's definition, which is set
// on the inline style of the popup
margin-top: 2.4em !important;
max-width: 650px;
+
+ .oo-ui-popupWidget-body {
+ max-height: 70vh;
+ }
}
&-search {
margin-top: -0.5em;
input {
- // Make sure this uses the interface direction, not the content direction
+ // We need to reiterate the directionality
+ // for the input as well to literally override
+ // a MediaWiki CSS rule that turns it 'ltr'
direction: ltr;
}
}
color: #54595d;
border-bottom: 1px solid #c8ccd1;
background: #f8f9fa;
+ overflow: hidden;
}
&-noresults {
// TODO: Unify colors with official design palette
color: #666;
}
+
+ &-hightlightButton {
+ float: right;
+ }
}
--- /dev/null
+@import "mw.rcfilters.mixins";
+
+.mw-rcfilters-ui-highlightColorPickerWidget {
+ &-label {
+ display: block;
+ font-weight: bold;
+ font-size: 1.2em;
+ }
+
+ &-buttonSelect {
+ &-color {
+ .oo-ui-iconElement-icon {
+ width: 2em;
+ height: 2em;
+ }
+
+ &-none {
+ .mw-rcfilters-mixin-circle( @highlight-none, 2em, 0.5em, true );
+
+ &.oo-ui-buttonOptionWidget.oo-ui-buttonElement-active,
+ &.oo-ui-buttonOptionWidget.oo-ui-optionWidget-pressed,
+ &.oo-ui-buttonOptionWidget.oo-ui-optionWidget-selected {
+ background-color: @highlight-none;
+ }
+ }
+ &-c1 {
+ .mw-rcfilters-mixin-circle( @highlight-c1 );
+
+ &.oo-ui-buttonOptionWidget.oo-ui-buttonElement-active,
+ &.oo-ui-buttonOptionWidget.oo-ui-optionWidget-pressed,
+ &.oo-ui-buttonOptionWidget.oo-ui-optionWidget-selected {
+ background-color: @highlight-c1;
+ }
+ }
+ &-c2 {
+ .mw-rcfilters-mixin-circle( @highlight-c2 );
+
+ &.oo-ui-buttonOptionWidget.oo-ui-buttonElement-active,
+ &.oo-ui-buttonOptionWidget.oo-ui-optionWidget-pressed,
+ &.oo-ui-buttonOptionWidget.oo-ui-optionWidget-selected {
+ background-color: @highlight-c2;
+ }
+ }
+ &-c3 {
+ .mw-rcfilters-mixin-circle( @highlight-c3 );
+
+ &.oo-ui-buttonOptionWidget.oo-ui-buttonElement-active,
+ &.oo-ui-buttonOptionWidget.oo-ui-optionWidget-pressed,
+ &.oo-ui-buttonOptionWidget.oo-ui-optionWidget-selected {
+ background-color: @highlight-c3;
+ }
+ }
+ &-c4 {
+ .mw-rcfilters-mixin-circle( @highlight-c4 );
+
+ &.oo-ui-buttonOptionWidget.oo-ui-buttonElement-active,
+ &.oo-ui-buttonOptionWidget.oo-ui-optionWidget-pressed,
+ &.oo-ui-buttonOptionWidget.oo-ui-optionWidget-selected {
+ background-color: @highlight-c4;
+ }
+ }
+ &-c5 {
+ .mw-rcfilters-mixin-circle( @highlight-c5 );
+
+ &.oo-ui-buttonOptionWidget.oo-ui-buttonElement-active,
+ &.oo-ui-buttonOptionWidget.oo-ui-optionWidget-pressed,
+ &.oo-ui-buttonOptionWidget.oo-ui-optionWidget-selected {
+ background-color: @highlight-c5;
+ }
+ }
+ }
+ }
+}
--- /dev/null
+.mw-rcfilters-ui {
+ &-table {
+ display: table;
+ width: 100%;
+ }
+
+ &-row {
+ display: table-row;
+ }
+
+ &-cell {
+ display: table-cell;
+ vertical-align: top;
+ }
+}
+
--- /dev/null
+// Highlight color definitions
+@highlight-none: #fff;
+@highlight-c1: #36c;
+@highlight-c2: #00af89;
+@highlight-c3: #fc3;
+@highlight-c4: #ff6d22;
+@highlight-c5: #d33;
+
+// Muted state
+@muted-opacity: 0.5;
+
+// Result list circle indicators
+// Defined and used in mw.rcfilters.ui.ChangesListWrapperWidget.less
+@result-circle-margin: 0.1em;
+@result-circle-general-margin: 0.5em;
+// In these small sizes, 'em' appears
+// squished and inconsistent.
+// Pixels are better for this use case:
+@result-circle-diameter: 5px;
*/
mw.rcfilters.ui.CapsuleItemWidget = function MwRcfiltersUiCapsuleItemWidget( controller, model, config ) {
var $popupContent = $( '<div>' )
- .addClass( 'mw-rcfilters-ui-capsuleItemWidget-popup' ),
+ .addClass( 'mw-rcfilters-ui-capsuleItemWidget-popup-content' ),
descLabelWidget = new OO.ui.LabelWidget();
// Configuration initialization
// Mixin constructors
OO.ui.mixin.PopupElement.call( this, $.extend( {
popup: {
- padded: true,
+ padded: false,
align: 'center',
$content: $popupContent
.append( descLabelWidget.$element ),
- $floatableContainer: this.$element
+ $floatableContainer: this.$element,
+ classes: [ 'mw-rcfilters-ui-capsuleItemWidget-popup' ]
}
}, config ) );
// Set initial text for the popup - the description
descLabelWidget.setLabel( this.model.getDescription() );
+ this.$highlight = $( '<div>' )
+ .addClass( 'mw-rcfilters-ui-capsuleItemWidget-highlight' );
+
// Events
this.model.connect( this, { update: 'onModelUpdate' } );
- this.closeButton.connect( this, { click: 'onCapsuleRemovedByUser' } );
+ this.closeButton.$element.on( 'mousedown', this.onCloseButtonMouseDown.bind( this ) );
// Initialization
this.$overlay.append( this.popup.$element );
this.$element
+ .prepend( this.$highlight )
.attr( 'aria-haspopup', 'true' )
.addClass( 'mw-rcfilters-ui-capsuleItemWidget' )
.on( 'mouseover', this.onHover.bind( this, true ) )
.on( 'mouseout', this.onHover.bind( this, false ) );
this.setCurrentMuteState();
+ this.setHighlightColor();
};
OO.inheritClass( mw.rcfilters.ui.CapsuleItemWidget, OO.ui.CapsuleItemWidget );
*/
mw.rcfilters.ui.CapsuleItemWidget.prototype.onModelUpdate = function () {
this.setCurrentMuteState();
+
+ this.setHighlightColor();
+ };
+
+ /**
+ * Override mousedown event to prevent its propagation to the parent,
+ * since the parent (the multiselect widget) focuses the popup when its
+ * mousedown event is fired.
+ *
+ * @param {jQuery.Event} e Event
+ */
+ mw.rcfilters.ui.CapsuleItemWidget.prototype.onCloseButtonMouseDown = function ( e ) {
+ e.stopPropagation();
+ };
+
+ /**
+ * Override the event listening to the item close button click
+ */
+ mw.rcfilters.ui.CapsuleItemWidget.prototype.onCloseClick = function () {
+ var element = this.getElementGroup();
+
+ if ( element && $.isFunction( element.removeItems ) ) {
+ element.removeItems( [ this ] );
+ }
+
+ // Respond to user removing the filter
+ this.controller.updateFilter( this.model.getName(), false );
+ this.controller.clearHighlightColor( this.model.getName() );
+ };
+
+ mw.rcfilters.ui.CapsuleItemWidget.prototype.setHighlightColor = function () {
+ var selectedColor = this.model.isHighlightEnabled() ? this.model.getHighlightColor() : null;
+
+ this.$highlight
+ .attr( 'data-color', selectedColor )
+ .toggleClass(
+ 'mw-rcfilters-ui-capsuleItemWidget-highlight-highlighted',
+ !!selectedColor
+ );
};
/**
this.$element
.toggleClass(
'mw-rcfilters-ui-capsuleItemWidget-muted',
+ !this.model.isSelected() ||
this.model.isIncluded() ||
this.model.isConflicted() ||
this.model.isFullyCovered()
}
};
- /**
- * Respond to the user removing the capsule with the close button
- */
- mw.rcfilters.ui.CapsuleItemWidget.prototype.onCapsuleRemovedByUser = function () {
- this.controller.updateFilter( this.model.getName(), false );
- };
-
/**
* Remove and destroy external elements of this widget
*/
* @mixins OO.ui.mixin.PendingElement
*
* @constructor
- * @param {mw.rcfilters.dm.ChangesListViewModel} model View model
+ * @param {mw.rcfilters.dm.FiltersViewModel} filtersViewModel View model
+ * @param {mw.rcfilters.dm.ChangesListViewModel} changesListViewModel View model
* @param {jQuery} $changesListRoot Root element of the changes list to attach to
* @param {Object} config Configuration object
*/
- mw.rcfilters.ui.ChangesListWrapperWidget = function MwRcfiltersUiChangesListWrapperWidget( model, $changesListRoot, config ) {
- config = config || {};
+ mw.rcfilters.ui.ChangesListWrapperWidget = function MwRcfiltersUiChangesListWrapperWidget(
+ filtersViewModel,
+ changesListViewModel,
+ $changesListRoot,
+ config
+ ) {
+ config = $.extend( {}, config, {
+ $element: $changesListRoot
+ } );
// Parent
- mw.rcfilters.ui.ChangesListWrapperWidget.parent.call( this, $.extend( {}, config, {
- $element: $changesListRoot
- } ) );
+ mw.rcfilters.ui.ChangesListWrapperWidget.parent.call( this, config );
// Mixin constructors
OO.ui.mixin.PendingElement.call( this, config );
- this.model = model;
+ this.filtersViewModel = filtersViewModel;
+ this.changesListViewModel = changesListViewModel;
// Events
- this.model.connect( this, {
+ this.filtersViewModel.connect( this, {
+ itemUpdate: 'onItemUpdate',
+ highlightChange: 'onHighlightChange'
+ } );
+ this.changesListViewModel.connect( this, {
invalidate: 'onModelInvalidate',
update: 'onModelUpdate'
} );
+
+ this.$element.addClass( 'mw-rcfilters-ui-changesListWrapperWidget' );
+
+ // Set up highlight containers
+ this.setupHighlightContainers( this.$element );
};
/* Initialization */
OO.mixinClass( mw.rcfilters.ui.ChangesListWrapperWidget, OO.ui.mixin.PendingElement );
/**
- * Respond to model invalidate
+ * Respond to the highlight feature being toggled on and off
+ *
+ * @param {boolean} highlightEnabled
+ */
+ mw.rcfilters.ui.ChangesListWrapperWidget.prototype.onHighlightChange = function ( highlightEnabled ) {
+ if ( highlightEnabled ) {
+ this.applyHighlight();
+ } else {
+ this.clearHighlight();
+ }
+ };
+
+ /**
+ * Respond to a filter item model update
+ */
+ mw.rcfilters.ui.ChangesListWrapperWidget.prototype.onItemUpdate = function () {
+ if ( this.filtersViewModel.isHighlightEnabled() ) {
+ this.clearHighlight();
+ this.applyHighlight();
+ }
+ };
+
+ /**
+ * Respond to changes list model invalidate
*/
mw.rcfilters.ui.ChangesListWrapperWidget.prototype.onModelInvalidate = function () {
this.pushPending();
};
/**
- * Respond to model update
+ * Respond to changes list model update
*
- * @param {jQuery|string} changesListContent The content of the updated changes list
+ * @param {jQuery|string} $changesListContent The content of the updated changes list
*/
- mw.rcfilters.ui.ChangesListWrapperWidget.prototype.onModelUpdate = function ( changesListContent ) {
- var isEmpty = changesListContent === 'NO_RESULTS';
+ mw.rcfilters.ui.ChangesListWrapperWidget.prototype.onModelUpdate = function ( $changesListContent ) {
+ var isEmpty = $changesListContent === 'NO_RESULTS';
+
this.$element.toggleClass( 'mw-changeslist', !isEmpty );
this.$element.toggleClass( 'mw-changeslist-empty', isEmpty );
- this.$element.empty().append(
- isEmpty ?
- document.createTextNode( mw.message( 'recentchanges-noresult' ).text() ) :
- changesListContent
- );
+ if ( isEmpty ) {
+ this.$changesListContent = null;
+ this.$element.empty().append(
+ document.createTextNode( mw.message( 'recentchanges-noresult' ).text() )
+ );
+ } else {
+ this.$changesListContent = $changesListContent;
+ this.$element.empty().append( this.$changesListContent );
+ // Set up highlight containers
+ this.setupHighlightContainers( this.$element );
+
+ // Apply highlight
+ this.applyHighlight();
+
+ // Make sure enhanced RC re-initializes correctly
+ mw.hook( 'wikipage.content' ).fire( this.$element );
+ }
this.popPending();
};
+
+ /**
+ * Set up the highlight containers with all color circle indicators.
+ *
+ * @param {jQuery|string} $content The content of the updated changes list
+ */
+ mw.rcfilters.ui.ChangesListWrapperWidget.prototype.setupHighlightContainers = function ( $content ) {
+ var $highlights = $( '<div>' )
+ .addClass( 'mw-rcfilters-ui-changesListWrapperWidget-highlights' )
+ .append(
+ $( '<div>' )
+ .addClass( 'mw-rcfilters-ui-changesListWrapperWidget-highlights-color-none' )
+ .prop( 'data-color', 'none' )
+ );
+
+ mw.rcfilters.HighlightColors.forEach( function ( color ) {
+ $highlights.append(
+ $( '<div>' )
+ .addClass( 'mw-rcfilters-ui-changesListWrapperWidget-highlights-color-' + color )
+ .prop( 'data-color', color )
+ );
+ } );
+
+ if ( Number( mw.user.options.get( 'usenewrc' ) ) ) {
+ // Enhanced RC
+ $content.find( 'td.mw-enhanced-rc' )
+ .parent()
+ .prepend(
+ $( '<td>' )
+ .append( $highlights.clone() )
+ );
+ } else {
+ // Regular RC
+ $content.find( 'ul.special li' )
+ .prepend( $highlights.clone() );
+ }
+ };
+
+ /**
+ * Apply color classes based on filters highlight configuration
+ */
+ mw.rcfilters.ui.ChangesListWrapperWidget.prototype.applyHighlight = function () {
+ if ( !this.filtersViewModel.isHighlightEnabled() ) {
+ return;
+ }
+
+ this.filtersViewModel.getHighlightedItems().forEach( function ( filterItem ) {
+ // Add highlight class to all highlighted list items
+ this.$element.find( '.' + filterItem.getCssClass() )
+ .addClass( 'mw-rcfilters-highlight-color-' + filterItem.getHighlightColor() );
+ }.bind( this ) );
+
+ // Turn on highlights
+ this.$element.addClass( 'mw-rcfilters-ui-changesListWrapperWidget-highlighted' );
+ };
+
+ /**
+ * Remove all color classes
+ */
+ mw.rcfilters.ui.ChangesListWrapperWidget.prototype.clearHighlight = function () {
+ // Remove highlight classes
+ mw.rcfilters.HighlightColors.forEach( function ( color ) {
+ this.$element.find( '.mw-rcfilters-highlight-color-' + color ).removeClass( 'mw-rcfilters-highlight-color-' + color );
+ }.bind( this ) );
+
+ // Turn off highlights
+ this.$element.removeClass( 'mw-rcfilters-ui-changesListWrapperWidget-highlighted' );
+ };
}( mediaWiki ) );
* @param {OO.ui.InputWidget} filterInput A filter input that focuses the capsule widget
* @param {Object} config Configuration object
* @cfg {jQuery} [$overlay] A jQuery object serving as overlay for popups
+ * @cfg {number} [topScrollOffset=10] When scrolling the entire widget to the top, leave this
+ * much space (in pixels) above the widget.
*/
mw.rcfilters.ui.FilterCapsuleMultiselectWidget = function MwRcfiltersUiFilterCapsuleMultiselectWidget( controller, model, filterInput, config ) {
+ var title = new OO.ui.LabelWidget( {
+ label: mw.msg( 'rcfilters-activefilters' ),
+ classes: [ 'mw-rcfilters-ui-filterCapsuleMultiselectWidget-wrapper-content-title' ]
+ } ),
+ $contentWrapper = $( '<div>' )
+ .addClass( 'mw-rcfilters-ui-filterCapsuleMultiselectWidget-wrapper' );
+
+ this.$overlay = config.$overlay || this.$element;
+
// Parent
- mw.rcfilters.ui.FilterCapsuleMultiselectWidget.parent.call( this, $.extend( {
- $autoCloseIgnore: filterInput.$element
+ mw.rcfilters.ui.FilterCapsuleMultiselectWidget.parent.call( this, $.extend( true, {
+ popup: { $autoCloseIgnore: filterInput.$element.add( this.$overlay ) }
}, config ) );
this.controller = controller;
this.model = model;
- this.$overlay = config.$overlay || this.$element;
-
this.filterInput = filterInput;
- this.$content.prepend(
- $( '<div>' )
- .addClass( 'mw-rcfilters-ui-filterCapsuleMultiselectWidget-content-title' )
- .text( mw.msg( 'rcfilters-activefilters' ) )
- );
+ this.topScrollOffset = config.topScrollOffset || 10;
this.resetButton = new OO.ui.ButtonWidget( {
icon: 'trash',
label: mw.msg( 'rcfilters-empty-filter' ),
classes: [ 'mw-rcfilters-ui-filterCapsuleMultiselectWidget-emptyFilters' ]
} );
+ this.$content.append( this.emptyFilterMessage.$element );
// Events
this.resetButton.connect( this, { click: 'onResetButtonClick' } );
- this.model.connect( this, { itemUpdate: 'onModelItemUpdate' } );
+ this.model.connect( this, {
+ itemUpdate: 'onModelItemUpdate',
+ highlightChange: 'onModelHighlightChange'
+ } );
+ this.popup.connect( this, { toggle: 'onPopupToggle' } );
+
// Add the filterInput as trigger
this.filterInput.$input
.on( 'focus', this.focus.bind( this ) );
+ // Build the content
+ $contentWrapper.append(
+ title.$element,
+ $( '<div>' )
+ .addClass( 'mw-rcfilters-ui-table' )
+ .append(
+ // The filter list and button should appear side by side regardless of how
+ // wide the button is; the button also changes its width depending
+ // on language and its state, so the safest way to present both side
+ // by side is with a table layout
+ $( '<div>' )
+ .addClass( 'mw-rcfilters-ui-row' )
+ .append(
+ this.$content
+ .addClass( 'mw-rcfilters-ui-cell' )
+ .addClass( 'mw-rcfilters-ui-filterCapsuleMultiselectWidget-cell-filters' ),
+ $( '<div>' )
+ .addClass( 'mw-rcfilters-ui-cell' )
+ .addClass( 'mw-rcfilters-ui-filterCapsuleMultiselectWidget-cell-reset' )
+ .append( this.resetButton.$element )
+ )
+ )
+ );
+
// Initialize
- this.$content.append( this.emptyFilterMessage.$element );
- this.$handle
- .append(
- // The content and button should appear side by side regardless of how
- // wide the button is; the button also changes its width depending
- // on language and its state, so the safest way to present both side
- // by side is with a table layout
- $( '<div>' )
- .addClass( 'mw-rcfilters-ui-filterCapsuleMultiselectWidget-table' )
- .append(
- $( '<div>' )
- .addClass( 'mw-rcfilters-ui-filterCapsuleMultiselectWidget-row' )
- .append(
- $( '<div>' )
- .addClass( 'mw-rcfilters-ui-filterCapsuleMultiselectWidget-content' )
- .addClass( 'mw-rcfilters-ui-filterCapsuleMultiselectWidget-cell' )
- .append( this.$content ),
- $( '<div>' )
- .addClass( 'mw-rcfilters-ui-filterCapsuleMultiselectWidget-cell' )
- .append( this.resetButton.$element )
- )
- )
- );
+ this.$handle.append( $contentWrapper );
this.$element
.addClass( 'mw-rcfilters-ui-filterCapsuleMultiselectWidget' );
* @param {mw.rcfilters.dm.FilterItem} item Filter item model
*/
mw.rcfilters.ui.FilterCapsuleMultiselectWidget.prototype.onModelItemUpdate = function ( item ) {
- if ( item.isSelected() ) {
+ if (
+ item.isSelected() ||
+ (
+ this.model.isHighlightEnabled() &&
+ item.isHighlightSupported() &&
+ item.getHighlightColor()
+ )
+ ) {
this.addItemByName( item.getName() );
} else {
this.removeItemByName( item.getName() );
this.reevaluateResetRestoreState();
};
+ /**
+ * Respond to highlightChange event
+ *
+ * @param {boolean} isHighlightEnabled Highlight is enabled
+ */
+ mw.rcfilters.ui.FilterCapsuleMultiselectWidget.prototype.onModelHighlightChange = function ( isHighlightEnabled ) {
+ var highlightedItems = this.model.getHighlightedItems();
+
+ if ( isHighlightEnabled ) {
+ // Add capsule widgets
+ highlightedItems.forEach( function ( filterItem ) {
+ this.addItemByName( filterItem.getName() );
+ }.bind( this ) );
+ } else {
+ // Remove capsule widgets if they're not selected
+ highlightedItems.forEach( function ( filterItem ) {
+ if ( !filterItem.isSelected() ) {
+ this.removeItemByName( filterItem.getName() );
+ }
+ }.bind( this ) );
+ }
+ };
+
/**
* Respond to click event on the reset button
*/
}
};
+ /**
+ * Respond to popup toggle event
+ *
+ * @param {boolean} isVisible Popup is visible
+ */
+ mw.rcfilters.ui.FilterCapsuleMultiselectWidget.prototype.onPopupToggle = function ( isVisible ) {
+ if ( isVisible ) {
+ this.scrollToTop();
+ }
+ };
+
+ /**
+ * Scroll the capsule to the top of the screen
+ */
+ mw.rcfilters.ui.FilterCapsuleMultiselectWidget.prototype.scrollToTop = function () {
+ var container = OO.ui.Element.static.getClosestScrollableContainer( this.$element[ 0 ], 'y' );
+
+ $( container ).animate( {
+ scrollTop: this.$element.offset().top - this.topScrollOffset
+ } );
+ };
+
/**
* Reevaluate the restore state for the widget between setting to defaults and clearing all filters
*/
$label: $( '<div>' )
.addClass( 'mw-rcfilters-ui-filterGroupWidget-title' )
} ) );
+ this.$overlay = config.$overlay || this.$element;
// Populate
this.populateFromModel();
filterItem,
{
label: filterItem.getLabel(),
- description: filterItem.getDescription()
+ description: filterItem.getDescription(),
+ $overlay: widget.$overlay
}
);
} )
--- /dev/null
+( function ( mw, $ ) {
+ /**
+ * A button to configure highlight for a filter item
+ *
+ * @extends OO.ui.PopupButtonWidget
+ *
+ * @constructor
+ * @param {mw.rcfilters.Controller} controller RCFilters controller
+ * @param {mw.rcfilters.dm.FilterItem} model Filter item model
+ * @param {Object} [config] Configuration object
+ */
+ mw.rcfilters.ui.FilterItemHighlightButton = function MwRcfiltersUiFilterItemHighlightButton( controller, model, config ) {
+ config = config || {};
+
+ this.colorPickerWidget = new mw.rcfilters.ui.HighlightColorPickerWidget( controller, model );
+
+ // Parent
+ mw.rcfilters.ui.FilterItemHighlightButton.parent.call( this, $.extend( {}, config, {
+ icon: 'edit',
+ indicator: 'down',
+ popup: {
+ anchor: false,
+ padded: true,
+ align: 'backwards',
+ width: 290,
+ $content: this.colorPickerWidget.$element
+ }
+ } ) );
+
+ this.controller = controller;
+ this.model = model;
+
+ // Event
+ this.model.connect( this, { update: 'onModelUpdate' } );
+ this.colorPickerWidget.connect( this, { chooseColor: 'onChooseColor' } );
+
+ this.$element
+ .addClass( 'mw-rcfilters-ui-filterItemHighlightButton' );
+ };
+
+ /* Initialization */
+
+ OO.inheritClass( mw.rcfilters.ui.FilterItemHighlightButton, OO.ui.PopupButtonWidget );
+
+ /* Methods */
+
+ /**
+ * Respond to item model update event
+ */
+ mw.rcfilters.ui.FilterItemHighlightButton.prototype.onModelUpdate = function () {
+ var currentColor = this.model.getHighlightColor(),
+ widget = this;
+
+ this.$icon.toggleClass(
+ 'mw-rcfilters-ui-filterItemHighlightButton-circle',
+ currentColor !== null
+ );
+
+ mw.rcfilters.HighlightColors.forEach( function ( c ) {
+ widget.$icon
+ .toggleClass(
+ 'mw-rcfilters-ui-filterItemHighlightButton-circle-color-' + c,
+ c === currentColor
+ );
+ } );
+ };
+
+ mw.rcfilters.ui.FilterItemHighlightButton.prototype.onChooseColor = function () {
+ this.popup.toggle( false );
+ };
+}( mediaWiki, jQuery ) );
);
}
+ this.highlightButton = new mw.rcfilters.ui.FilterItemHighlightButton(
+ this.controller,
+ this.model,
+ {
+ $overlay: config.$overlay || this.$element
+ }
+ );
+ this.highlightButton.toggle( this.model.isHighlightEnabled() );
+
layout = new OO.ui.FieldLayout( this.checkboxWidget, {
label: $label,
align: 'inline'
this.$element
.addClass( 'mw-rcfilters-ui-filterItemWidget' )
.append(
- layout.$element
+ $( '<div>' )
+ .addClass( 'mw-rcfilters-ui-table' )
+ .append(
+ $( '<div>' )
+ .addClass( 'mw-rcfilters-ui-row' )
+ .append(
+ $( '<div>' )
+ .addClass( 'mw-rcfilters-ui-cell mw-rcfilters-ui-filterItemWidget-filterCheckbox' )
+ .append( layout.$element ),
+ $( '<div>' )
+ .addClass( 'mw-rcfilters-ui-cell mw-rcfilters-ui-filterItemWidget-highlightButton' )
+ .append( this.highlightButton.$element )
+ )
+ )
);
};
!this.model.isSelected()
)
);
+
+ this.highlightButton.toggle( this.model.isHighlightEnabled() );
};
+
/**
* Get the name of this filter
*
mw.rcfilters.ui.FilterItemWidget.prototype.getName = function () {
return this.model.getName();
};
-
}( mediaWiki, jQuery ) );
this.controller,
this.model,
{
- label: mw.msg( 'rcfilters-filterlist-title' )
+ label: mw.msg( 'rcfilters-filterlist-title' ),
+ $overlay: this.$overlay
}
);
mw.rcfilters.ui.FilterWrapperWidget.prototype.onTextInputChange = function ( newValue ) {
// Filter the results
this.filterPopup.filter( this.model.findMatches( newValue ) );
+ this.capsule.popup.clip();
};
/**
this.controller = controller;
this.model = model;
+ this.$overlay = config.$overlay || this.$element;
+
+ this.highlightButton = new OO.ui.ButtonWidget( {
+ label: mw.message( 'rcfilters-highlightbutton-title' ).text(),
+ classes: [ 'mw-rcfilters-ui-filtersListWidget-hightlightButton' ]
+ } );
+
+ this.$label.append( this.highlightButton.$element );
this.noResultsLabel = new OO.ui.LabelWidget( {
label: mw.msg( 'rcfilters-filterlist-noresults' ),
} );
// Events
+ this.highlightButton.connect( this, { click: 'onHighlightButtonClick' } );
this.model.connect( this, {
- initialize: 'onModelInitialize'
+ initialize: 'onModelInitialize',
+ highlightChange: 'onHighlightChange'
} );
// Initialize
Object.keys( this.model.getFilterGroups() ).map( function ( groupName ) {
return new mw.rcfilters.ui.FilterGroupWidget(
widget.controller,
- widget.model.getGroup( groupName )
+ widget.model.getGroup( groupName ),
+ {
+ $overlay: widget.$overlay
+ }
);
} )
);
};
+ mw.rcfilters.ui.FiltersListWidget.prototype.onHighlightChange = function ( highlightEnabled ) {
+ this.highlightButton.setActive( highlightEnabled );
+ };
+
+ /**
+ * Respond to highlight button click
+ */
+ mw.rcfilters.ui.FiltersListWidget.prototype.onHighlightButtonClick = function () {
+ this.controller.toggleHighlight();
+ };
+
/**
* Switch between showing the 'no results' message for filtering results or the result list.
*
--- /dev/null
+( function ( mw, $ ) {
+ /**
+ * A widget representing a filter item highlight color picker
+ *
+ * @extends OO.ui.Widget
+ * @mixins OO.ui.mixin.LabelElement
+ *
+ * @constructor
+ * @param {mw.rcfilters.Controller} controller RCFilters controller
+ * @param {mw.rcfilters.dm.FilterItem} model Filter item model
+ * @param {Object} [config] Configuration object
+ */
+ mw.rcfilters.ui.HighlightColorPickerWidget = function MwRcfiltersUiHighlightColorPickerWidget( controller, model, config ) {
+ var colors = [ 'none' ].concat( mw.rcfilters.HighlightColors );
+ config = config || {};
+
+ // Parent
+ mw.rcfilters.ui.HighlightColorPickerWidget.parent.call( this, config );
+ // Mixin constructors
+ OO.ui.mixin.LabelElement.call( this, $.extend( {}, config, {
+ label: mw.message( 'rcfilters-highlightmenu-title' ).text()
+ } ) );
+
+ this.controller = controller;
+ this.model = model;
+
+ this.currentSelection = '';
+ this.buttonSelect = new OO.ui.ButtonSelectWidget( {
+ items: colors.map( function ( color ) {
+ return new OO.ui.ButtonOptionWidget( {
+ icon: color === 'none' ? 'check' : null,
+ data: color,
+ classes: [
+ 'mw-rcfilters-ui-highlightColorPickerWidget-buttonSelect-color',
+ 'mw-rcfilters-ui-highlightColorPickerWidget-buttonSelect-color-' + color
+ ],
+ framed: false
+ } );
+ } ),
+ classes: 'mw-rcfilters-ui-highlightColorPickerWidget-buttonSelect'
+ } );
+ this.selectColor( 'none' );
+
+ // Event
+ this.model.connect( this, { update: 'onModelUpdate' } );
+ this.buttonSelect.connect( this, { choose: 'onChooseColor' } );
+
+ this.$element
+ .addClass( 'mw-rcfilters-ui-highlightColorPickerWidget' )
+ .append(
+ this.$label
+ .addClass( 'mw-rcfilters-ui-highlightColorPickerWidget-label' ),
+ this.buttonSelect.$element
+ );
+ };
+
+ /* Initialization */
+
+ OO.inheritClass( mw.rcfilters.ui.HighlightColorPickerWidget, OO.ui.Widget );
+ OO.mixinClass( mw.rcfilters.ui.HighlightColorPickerWidget, OO.ui.mixin.LabelElement );
+
+ /* Events */
+
+ /**
+ * @event chooseColor
+ * @param {string} The chosen color
+ *
+ * A color has been chosen
+ */
+
+ /* Methods */
+
+ /**
+ * Respond to item model update event
+ */
+ mw.rcfilters.ui.HighlightColorPickerWidget.prototype.onModelUpdate = function () {
+ this.selectColor( this.model.getHighlightColor() || 'none' );
+ };
+
+ /**
+ * Select the color for this widget
+ *
+ * @param {string} color Selected color
+ */
+ mw.rcfilters.ui.HighlightColorPickerWidget.prototype.selectColor = function ( color ) {
+ var previousItem = this.buttonSelect.getItemFromData( this.currentSelection ),
+ selectedItem = this.buttonSelect.getItemFromData( color );
+
+ if ( this.currentSelection !== color ) {
+ this.currentSelection = color;
+
+ this.buttonSelect.selectItem( selectedItem );
+ if ( previousItem ) {
+ previousItem.setIcon( null );
+ }
+
+ if ( selectedItem ) {
+ selectedItem.setIcon( 'check' );
+ }
+ }
+ };
+
+ mw.rcfilters.ui.HighlightColorPickerWidget.prototype.onChooseColor = function ( button ) {
+ var color = button.data;
+ if ( color === 'none' ) {
+ this.controller.clearHighlightColor( this.model.getName() );
+ } else {
+ this.controller.setHighlightColor( this.model.getName(), color );
+ }
+ this.emit( 'chooseColor', color );
+ };
+}( mediaWiki, jQuery ) );
/* IE7 and earlier */
zoom: 1;
- *display: inline;
+ *display: inline; /* stylelint-disable declaration-block-no-duplicate-properties */
padding: 7px;
}
#toc h2,
.toc h2 {
display: inline;
- border: none;
+ border: 0;
padding: 0;
font-size: 100%;
font-weight: bold;
}
/* Images */
-/* @noflip */div.floatright, table.floatright {
- margin: 0 0 .5em .5em;
+/* @noflip */
+div.floatright,
+table.floatright {
+ margin: 0 0 0.5em 0.5em;
}
div.floatright p {
font-style: italic;
}
-/* @noflip */div.floatleft, table.floatleft {
- margin: 0 .5em .5em 0;
+/* @noflip */
+div.floatleft,
+table.floatleft {
+ margin: 0 0.5em 0.5em 0;
}
div.floatleft p {
/* Thumbnails */
div.thumb {
- margin-bottom: .5em;
+ margin-bottom: 0.5em;
width: auto;
background-color: transparent;
}
}
html .thumbcaption {
- border: none;
+ border: 0;
line-height: 1.4em;
padding: 3px;
font-size: 94%;
/* @noflip */
div.tright {
- margin: .5em 0 1.3em 1.4em;
+ margin: 0.5em 0 1.3em 1.4em;
}
/* @noflip */
div.tleft {
- margin: .5em 1.4em 1.3em 0;
+ margin: 0.5em 1.4em 1.3em 0;
}
/* Hide elements that are marked as "empty" according to legacy Tidy rules,
* Icons and colors for external links.
*/
-/* Bug 66091 is blocking is from converting this file to LESS
+/* T68091 is blocking is from converting this file to LESS
* and using the .background-image-svg mixin. */
/* SVG support using a transparent gradient to guarantee cross-browser
padding-right: 15px;
}
-.mw-body a.external[href$=".ogg"], .mw-body a.external[href$=".OGG"],
-.mw-body a.external[href$=".mid"], .mw-body a.external[href$=".MID"],
-.mw-body a.external[href$=".midi"], .mw-body a.external[href$=".MIDI"],
-.mw-body a.external[href$=".mp3"], .mw-body a.external[href$=".MP3"],
-.mw-body a.external[href$=".wav"], .mw-body a.external[href$=".WAV"],
-.mw-body a.external[href$=".wma"], .mw-body a.external[href$=".WMA"],
+.mw-body a.external[href$=".ogg"],
+.mw-body a.external[href$=".OGG"],
+.mw-body a.external[href$=".mid"],
+.mw-body a.external[href$=".MID"],
+.mw-body a.external[href$=".midi"],
+.mw-body a.external[href$=".MIDI"],
+.mw-body a.external[href$=".mp3"],
+.mw-body a.external[href$=".MP3"],
+.mw-body a.external[href$=".wav"],
+.mw-body a.external[href$=".WAV"],
+.mw-body a.external[href$=".wma"],
+.mw-body a.external[href$=".WMA"],
.link-audio {
background: url( images/audio-ltr.png ) center right no-repeat;
/* @embed */
padding-right: 15px;
}
-.mw-body a.external[href$=".ogm"], .mw-body a.external[href$=".OGM"],
-.mw-body a.external[href$=".avi"], .mw-body a.external[href$=".AVI"],
-.mw-body a.external[href$=".mpeg"], .mw-body a.external[href$=".MPEG"],
-.mw-body a.external[href$=".mpg"], .mw-body a.external[href$=".MPG"],
+.mw-body a.external[href$=".ogm"],
+.mw-body a.external[href$=".OGM"],
+.mw-body a.external[href$=".avi"],
+.mw-body a.external[href$=".AVI"],
+.mw-body a.external[href$=".mpeg"],
+.mw-body a.external[href$=".MPEG"],
+.mw-body a.external[href$=".mpg"],
+.mw-body a.external[href$=".MPG"],
.link-video {
background: url( images/video.png ) center right no-repeat;
/* @embed */
padding-right: 15px;
}
-.mw-body a.external[href$=".pdf"], .mw-body a.external[href$=".PDF"],
-.mw-body a.external[href*=".pdf#"], .mw-body a.external[href*=".PDF#"],
-.mw-body a.external[href*=".pdf?"], .mw-body a.external[href*=".PDF?"],
+.mw-body a.external[href$=".pdf"],
+.mw-body a.external[href$=".PDF"],
+.mw-body a.external[href*=".pdf#"],
+.mw-body a.external[href*=".PDF#"],
+.mw-body a.external[href*=".pdf?"],
+.mw-body a.external[href*=".PDF?"],
.link-document {
background: url( images/document-ltr.png ) center right no-repeat;
/* @embed */
unicode-bidi: isolate;
}
-sup, sub {
+sup,
+sub {
line-height: 1;
}
&.mw-halign-right {
/* @noflip */
- margin: .5em 0 1.3em 1.4em;
+ margin: 0.5em 0 1.3em 1.4em;
/* @noflip */
clear: right;
/* @noflip */
&.mw-halign-left {
/* @noflip */
- margin: .5em 1.4em 1.3em 0;
+ margin: 0.5em 1.4em 1.3em 0;
/* @noflip */
clear: left;
/* @noflip */
}
&.mw-halign-center {
- margin: 0 auto .5em auto;
+ margin: 0 auto 0.5em auto;
display: table;
clear: none;
float: none;
background-color: #f9f9f9;
// Default to right alignment. This is needed since Parsoid only specifies the
// alignment class when the alignment is explicitly set.
- margin: .5em 0 1.3em 1.4em;
+ margin: 0.5em 0 1.3em 1.4em;
clear: right;
float: right;
}
.mw-image-border > *:first-child > img {
border: 1px solid #ccc;
margin: 3px;
+ background: #fff;
}
/* Hide the caption for frameless and plain floated images */
figure[typeof~="mw:Image/Frameless"] > figcaption,
-figure[typeof~="mw:Image"] > figcaption { display: none }
+figure[typeof~="mw:Image"] > figcaption {
+ display: none;
+}
color: #faa700;
}
-a:hover, a:focus {
+a:hover,
+a:focus {
text-decoration: underline;
}
-a:lang(ar),
-a:lang(kk-arab),
-a:lang(mzn),
-a:lang(ps),
-a:lang(ur) {
+a:lang( ar ),
+a:lang( kk-arab ),
+a:lang( mzn ),
+a:lang( ps ),
+a:lang( ur ) {
text-decoration: none;
}
color: #723;
}
-a.new, #p-personal a.new {
+a.new,
+#p-personal a.new {
color: #ba0000;
}
-a.new:visited, #p-personal a.new:visited {
+a.new:visited,
+#p-personal a.new:visited {
color: #a55858;
}
}
.mw-body a.external:visited {
- color: #636; /* bug 3112 */
+ color: #636; /* T5112 */
}
.mw-body a.external:active {
/* Inline Elements */
img {
- border: none;
+ border: 0;
vertical-align: middle;
}
color: #a2a9b1;
background-color: #a2a9b1;
border: 0;
- margin: .2em 0;
+ margin: 0.2em 0;
}
/* Structural Elements */
font-weight: normal;
margin: 0;
overflow: hidden;
- padding-top: .5em;
- padding-bottom: .17em;
+ padding-top: 0.5em;
+ padding-bottom: 0.17em;
border-bottom: 1px solid #a2a9b1;
}
h4,
h5,
h6 {
- border-bottom: none;
+ border-bottom: 0;
font-weight: bold;
}
/* Some space under the headers in the content area */
h1,
h2 {
- margin-bottom: .6em;
+ margin-bottom: 0.6em;
}
h3,
h4,
h5 {
- margin-bottom: .3em;
+ margin-bottom: 0.3em;
}
p {
- margin: .4em 0 .5em 0;
+ margin: 0.4em 0 0.5em 0;
}
p img {
ul {
list-style-type: square;
- margin: .3em 0 0 1.6em;
+ margin: 0.3em 0 0 1.6em;
padding: 0;
}
ol {
- margin: .3em 0 0 3.2em;
+ margin: 0.3em 0 0 3.2em;
padding: 0;
list-style-image: none;
}
li {
- margin-bottom: .1em;
+ margin-bottom: 0.1em;
}
dt {
font-weight: bold;
- margin-bottom: .1em;
+ margin-bottom: 0.1em;
}
dl {
- margin-top: .2em;
- margin-bottom: .5em;
+ margin-top: 0.2em;
+ margin-bottom: 0.5em;
}
dd {
margin-left: 1.6em;
- margin-bottom: .1em;
+ margin-bottom: 0.1em;
}
-pre, code, tt, kbd, samp, .mw-code {
+pre,
+code,
+tt,
+kbd,
+samp,
+.mw-code {
/*
* Some browsers will render the monospace text too small, namely Firefox, Chrome and Safari.
* Specifying any valid, second value will trigger correct behavior without forcing a different font.
}
legend {
- padding: .5em;
+ padding: 0.5em;
font-size: 95%;
}
form {
- border: none;
+ border: 0;
margin: 0;
}
textarea {
width: 100%;
- padding: .1em;
+ padding: 0.1em;
display: block;
-moz-box-sizing: border-box;
-webkit-box-sizing: border-box;
.editOptions {
background-color: #f8f9fa;
border: 1px solid #c8ccd1;
- border-top: none;
+ border-top: 0;
padding: 1em 1em 1.5em 1em;
margin-bottom: 2em;
}
color: #000;
font-weight: bold;
margin: 2em 0 1em;
- padding: .5em 1em;
+ padding: 0.5em 1em;
vertical-align: middle;
}
}
.firstHeading {
- margin-bottom: .1em;
- /* These two rules hack around bug 2013 (fix for more limited bug 11325).
- * When bug 2013 is fixed properly, they should be removed. */
+ margin-bottom: 0.1em;
+ /* These two rules hack around T4013 (fix for more limited T13325).
+ * When T4013 is fixed properly, they should be removed. */
line-height: 1.2em;
padding-bottom: 0;
}
}
.mw-apisandbox-help-field:last-child {
- border-bottom: none;
+ border-bottom: 0;
}
.mw-apisandbox-optionalWidget {
}
/* Common for Special:Allpages and Special:PrefixIndex */
-.mw-allpages-body, .mw-prefixindex-body {
+.mw-allpages-body,
+.mw-prefixindex-body {
columns: 22em 3;
-moz-columns: 22em 3;
-webkit-columns: 22em 3;
.iw-headline {
font-weight: bold;
- font-size: 1rem;
- font-size: 16px;
- opacity: 0.7;
+ font-size: 1rem;
+ font-size: 16px;
+ opacity: 0.7;
}
.iw-results {
- list-style: none;
+ list-style: none;
margin: 0;
}
.iw-resultset {
margin-bottom: 1.2em;
background-color: #f2f4f7;
- vertical-align: top;
- width: 100%;
- float: left;
- list-style-type: none;
+ vertical-align: top;
+ width: 100%;
+ float: left;
+ list-style-type: none;
}
/* clearfix */
.iw-result:after {
- visibility: hidden;
+ visibility: hidden;
display: block;
font-size: 0;
content: " ";
height: 0;
}
-* html .interwiki-result { zoom: 1; } /* IE6 */
-*:first-child+html .iw-resultset { zoom: 1; } /* IE7 */
+* html .interwiki-result { /* IE6 */
+ zoom: 1;
+}
+*:first-child + html .iw-resultset { /* IE7 */
+ zoom: 1;
+}
/* padding each .iw-resultset section seperately.
This allows us greater flexibility in the design.
.iw-result__title,
.iw-result__content,
.iw-result__footer {
- padding-left: 0.85em;
- padding-right: 0.85em;
- padding-top: 0.25em;
- padding-bottom: 0.25em;
+ padding: 0.25em 0.85em;
}
/* definition titles appear inline,
to resemble a traditional dictionary definition */
.iw-resultset--definition .iw-result__title {
- display: inline;
- padding: 0;
+ display: inline;
+ padding: 0;
}
.iw-resultset > div:first-child {
- padding-top: 0.85em;
+ padding-top: 0.85em;
}
.iw-resultset > div:last-child {
- padding-bottom: 0.85em;
+ padding-bottom: 0.85em;
}
.iw-result__title {
- font-size: 16px; /* rem fallback */
- font-size: 1rem;
+ font-size: 16px; /* rem fallback */
+ font-size: 1rem;
}
.iw-result__title a.extiw {
- color: #252525;
- font-weight: bold;
+ color: #252525;
+ font-weight: bold;
}
.iw-result__content:after { /* clearfix */
- visibility: hidden;
- display: block;
- font-size: 0;
- content: " ";
- clear: both;
- height: 0;
+ visibility: hidden;
+ display: block;
+ font-size: 0;
+ content: " ";
+ clear: both;
+ height: 0;
}
.iw-result__footer {
- float: right;
+ float: right;
}
.iw-result__icon {
- display: inline-block;
- width: 24px;
- height: 24px;
- vertical-align: middle;
- margin-right: 0.25em;
- background: url( images/special.search/definition-icon.svg ) no-repeat 0 0;
- background-size: 100% 100%;
+ display: inline-block;
+ width: 24px;
+ height: 24px;
+ vertical-align: middle;
+ margin-right: 0.25em;
+ background: url( images/special.search/definition-icon.svg ) no-repeat 0 0;
+ background-size: 100% 100%;
}
@interwikiContentTypes: definition, travel, quotation, book, course, news, textbook, image;
.generate-iwIcons();
.generate-iwIcons( @i:1 ) when ( @i =< length( @interwikiContentTypes ) ) {
- @iwIcon: extract( @interwikiContentTypes, @i );
+ @iwIcon: extract( @interwikiContentTypes, @i );
- .iw-result__icon--@{iwIcon} {
- /* stylelint-disable-next-line function-url-quotes */
- background-image: url( 'images/special.search/@{iwIcon}-icon.png' );
- /* stylelint-disable-next-line function-url-quotes */
- background-image: url( 'images/special.search/@{iwIcon}-icon.svg' );
- }
+ .iw-result__icon--@{iwIcon} {
+ /* stylelint-disable-next-line function-url-quotes */
+ background-image: url( 'images/special.search/@{iwIcon}-icon.png' );
+ /* stylelint-disable-next-line function-url-quotes */
+ background-image: url( 'images/special.search/@{iwIcon}-icon.svg' );
+ }
- .generate-iwIcons( @i + 1 );
+ .generate-iwIcons( @i + 1 );
}
/* image search result */
.iw-result__mini-gallery {
- position: relative;
- float: left;
- width: 60%;
- height: 200px;
- box-sizing: border-box;
- padding: 0.25rem;
+ position: relative;
+ float: left;
+ width: 60%;
+ height: 200px;
+ box-sizing: border-box;
+ padding: 0.25rem;
}
-.iw-result__mini-gallery__image {
- display: block;
- position: relative;
- width: 100%;
- height: 100%;
- background-size: cover;
- background-repeat: no-repeat;
- background-position: center center;
+/* second and third images are small */
+.iw-result__mini-gallery:nth-child( 2 ),
+.iw-result__mini-gallery:nth-child( 3 ) { /* stylelint-disable-line indentation */
+ width: 40%;
+ height: 100px;
}
-.iw-result__mini-gallery__image:hover > .iw-result__mini-gallery__caption {
- visibility: visible;
+.iw-result__mini-gallery__image {
+ display: block;
+ position: relative;
+ width: 100%;
+ height: 100%;
+ background-size: cover;
+ background-repeat: no-repeat;
+ background-position: center center;
}
.iw-result__mini-gallery__image > .iw-result__mini-gallery__caption { /* image gallery text */
- visibility: hidden;
- position: absolute;
- bottom: 0;
- left: 0;
- text-align: center;
- color: #fff;
- text-shadow: 0 0 10px rgba( 0, 0, 0, 0.4 ); /* improves legibility on white background*/
- font-size: 0.8em;
- padding: 5px;
- background-color: rgba( 0, 0, 0, 0.5 );
+ visibility: hidden;
+ position: absolute;
+ bottom: 0;
+ left: 0;
+ text-align: center;
+ color: #fff;
+ text-shadow: 0 0 10px rgba( 0, 0, 0, 0.4 ); /* improves legibility on white background*/
+ font-size: 0.8em;
+ padding: 5px;
+ background-color: rgba( 0, 0, 0, 0.5 );
}
-.iw-result__mini-gallery:nth-child(2),
-.iw-result__mini-gallery:nth-child(3) { /* second and third images are small */
- width: 40%;
- height: 100px;
+.iw-result__mini-gallery__image:hover > .iw-result__mini-gallery__caption {
+ visibility: visible;
}
/* different types of interwiki result boxes */
/* quotation box */
.iw-resultset--quotation .iw-result__content {
- border-left: 4px solid #afb1b5;
- margin-left: 1em;
- padding-top: 0;
- margin-top: 0.25em;
+ border-left: 4px solid #afb1b5;
+ margin-left: 1em;
+ padding-top: 0;
+ margin-top: 0.25em;
}
-.iw-resultset--quotation .iw-result__title{
- margin-left: 1em;
+.iw-resultset--quotation .iw-result__title {
+ margin-left: 1em;
}
-.iw-result--quotation .iw-result__title:before{
- content: ' — ';
- display: inline-block;
+.iw-result--quotation .iw-result__title:before {
+ content: ' — ';
+ display: inline-block;
}
.iw-result--quotation .iw-result__footer {
- text-align: right;
+ text-align: right;
}
/* no results
*/
.mw-search-nonefound ~ #mw-search-interwiki {
- width: 100%;
+ width: 100%;
}
.mw-search-nonefound ~ #mw-search-interwiki .iw-resultset {
- width: 30%;
- max-width: 300px;
- margin-left: 0.5em;
- margin-right: 0.5em;
+ width: 30%;
+ max-width: 300px;
+ margin-left: 0.5em;
+ margin-right: 0.5em;
}
/* mobile */
-@media only screen and ( max-width:768px ) {
- #mw-interwiki-results {
- width: 100%;
- }
- .mw-search-results {
- max-width: none !important;
- }
- .iw-resultset {
- width: 45% !important;
- margin-left: 0.5em !important;
- margin-right: 0.5em !important;
- }
-
-}
-
-@media only screen and ( max-width:600px ) {
- .iw-resultset {
- width: 100% !important;
- margin-left: 0 !important;
- margin-right: 0 !important;
- max-width: none !important;
- }
-}
-
-/* Evil temporary hax for cawiki */
-#sisterproject {
- display: none;
+@media only screen and ( max-width: 768px ) {
+ #mw-interwiki-results {
+ width: 100%;
+ }
+ .mw-search-results {
+ max-width: none !important;
+ }
+ .iw-resultset {
+ width: 45% !important;
+ margin-left: 0.5em !important;
+ margin-right: 0.5em !important;
+ }
+
+}
+
+@media only screen and ( max-width: 600px ) {
+ .iw-resultset {
+ width: 100% !important;
+ margin-left: 0 !important;
+ margin-right: 0 !important;
+ max-width: none !important;
+ }
}
display: inline !ie;
}
.searchresults {
- margin: 1em 0 1em .4em;
+ margin: 1em 0 1em 0.4em;
}
/* needs extra specificity to override `.mw-body p` selector */
.mw-body .mw-search-nonefound {
// Output result
if ( $( '#wpDestFile' ).length ) {
// Call decodeURIComponent function to remove possible URL-encoded characters
- // from the file name (bug 30390). Especially likely with upload-form-url.
+ // from the file name (T32390). Especially likely with upload-form-url.
// decodeURIComponent can throw an exception if input is invalid utf-8
try {
$( '#wpDestFile' ).val( decodeURIComponent( fname ) );
*/
.mw-destfile-warning {
border: 1px solid #fde29b;
- padding: .5em 1em;
+ padding: 0.5em 1em;
margin-bottom: 1em;
color: #705000;
background-color: #fdf1d1;
having to assign it as a button type. `.mw-ui-anchor` only changes the text color, and should not be used in combination
with other base classes, such as `.mw-ui-button`.
-
Markup:
<a href="#" class="mw-ui-anchor mw-ui-progressive">Progressive</a>
<a href="#" class="mw-ui-anchor mw-ui-destructive">Destructive</a>
//
// Styleguide 2.1.
.mw-ui-button {
- // Inherit the font rather than apply user agent stylesheet (bug 70072)
+ // Inherit the font rather than apply user agent stylesheet (T72072)
font-family: inherit;
font-size: 1em;
// Container layout
display: inline-block;
min-width: 4em;
max-width: 28.75em; // equivalent to 460px, @see T95367
- padding: .5em 1em;
+ padding: 0.546875em 1em;
+ line-height: 1.286;
margin: 0;
border-radius: @borderRadius;
.box-sizing( border-box );
// IE 6 & 7 hack
// https://stackoverflow.com/a/5838575/365238
- *display: inline;
+ *display: inline; /* stylelint-disable-line declaration-block-no-duplicate-properties */
zoom: 1;
// Ensure that buttons and inputs are nicely aligned when they have differing heights
}
}
+input.mw-ui-button,
+button.mw-ui-button {
+ // Buttons in Firefox have extra height
+ &::-moz-focus-inner {
+ margin-top: -1px;
+ margin-bottom: -1px;
+ }
+}
+
a.mw-ui-button {
text-decoration: none;
&:focus {
text-decoration: none;
}
-
- // a-tags behave different to inputs if the line-height attribute is inherited
- // from another element (e.g. mw-body-content). They appear bigger as input
- // tags. See Bug T116427. To fix that, apply the correct line-height (used
- // for inputs) to a-tags, too.
- line-height: normal;
}
// Button groups
display: table;
* {
- // reset font sizes (see bug 72727)
+ // reset font sizes (see T74727)
font: inherit;
vertical-align: middle;
}
// ensure the invisible checkbox takes up the required width
width: @checkboxSize;
height: @checkboxSize;
- // This is needed for Firefox mobile (See bug 71750 to workaround default Firefox stylesheet)
+ // This is needed for Firefox mobile (See T73750 to workaround default Firefox stylesheet)
max-width: none;
margin: 0 0.4em 0 0;
display: table-cell;
&.mw-ui-icon-small:before {
background-size: 66.67% auto; // 66.67% of 24px equals 16px
}
-}
\ No newline at end of file
+}
width: 100%;
border: 1px solid @colorFieldBorder;
border-radius: @borderRadius;
- padding: 0.3em 0.3em 0.3em 0.6em;
+ padding: 0.625em 0.546875em 0.546875em;
// necessary for smooth transition
box-shadow: inset 0 0 0 0.1em #fff;
font-family: inherit;
font-size: inherit;
- line-height: inherit;
+ line-height: 1.172em;
vertical-align: middle;
// Normalize & style placeholder text, see T139034
- // Placeholder styles can't be grouped, otherwise they're ignored as invalid.
-
- // Placeholder mixin
- .mixin-placeholder() {
+ /* stylelint-disable indentation */
+ .mixin-placeholder( {
color: @colorGray7;
- font-style: italic;
- }
- // Firefox 4-18
- &:-moz-placeholder { // stylelint-disable-line selector-no-vendor-prefix
- .mixin-placeholder;
- opacity: 1;
- }
- // Firefox 19-
- &::-moz-placeholder { // stylelint-disable-line selector-no-vendor-prefix
- .mixin-placeholder;
opacity: 1;
- }
- // Internet Explorer 10-11
- &:-ms-input-placeholder { // stylelint-disable-line selector-no-vendor-prefix
- .mixin-placeholder;
- }
- // WebKit, Blink, Edge
- // Don't set `opacity < 1`, see https://developer.microsoft.com/en-us/microsoft-edge/platform/issues/3901363/
- &::-webkit-input-placeholder { // stylelint-disable-line selector-no-vendor-prefix
- .mixin-placeholder;
- }
- // W3C Standard Selectors Level 4
- &:placeholder-shown {
- .mixin-placeholder;
- }
+ } );
+ /* stylelint-enable indentation */
// Firefox: Remove red outline when `required` attribute set and invalid content.
// See https://developer.mozilla.org/en-US/docs/Web/CSS/:invalid
// Remove the inner padding and cancel buttons in Chrome on OS X and Safari on OS X
&::-webkit-search-cancel-button,
&::-webkit-search-decoration {
- -webkit-appearance: none;
+ -webkit-appearance: none;
}
}
}
font-size: 1.75em;
font-weight: bold;
line-height: 1.25em;
+ padding: 0.3673em 0.3265em 0.3265em;
}
line-height: @radioSize;
* {
- // reset font sizes (see bug 72727)
+ // reset font sizes (see T74727)
font: inherit;
vertical-align: middle;
}
// ensure the invisible radio takes up the required width
width: @radioSize;
height: @radioSize;
- // This is needed for Firefox mobile (See bug 71750 to workaround default Firefox stylesheet)
+ // This is needed for Firefox mobile (See T73750 to workaround default Firefox stylesheet)
max-width: none;
margin-right: 0.4em;
&.mw-ui-destructive {
color: @colorDestructive;
}
-}
\ No newline at end of file
+}
+/* stylelint-disable no-duplicate-selectors */
@import "mediawiki.widgets.datetime.definitions";
.mw-widgets-datetime-calendarWidget {
display: inline-block;
position: relative;
vertical-align: middle;
- padding: .5em;
+ padding: 0.5em;
&.mw-widgets-datetime-calendarWidget-dependent {
display: block;
.oo-ui-buttonElement-button {
width: 100%;
- border: 1px dotted rgba( 255, 255, 255, 0.0 );
+ border: 1px dotted rgba( 255, 255, 255, 0 );
.oo-ui-box-sizing( border-box );
}
+/* stylelint-disable no-duplicate-selectors */
@import "mediawiki.widgets.datetime.definitions";
.mw-widgets-datetime-dateTimeInputWidget {
margin: 0;
background-color: #fff;
color: #000;
- border: solid 1px #ccc;
box-shadow: inset 0 0 0 0 @progressive;
border-radius: 0.1em;
.oo-ui-transition(box-shadow @quick-ease);
font-family: inherit;
background-color: transparent;
color: inherit;
- border: none;
+ border: 0;
box-shadow: none;
text-align: center;
vertical-align: middle;
* @license The MIT License (MIT); see LICENSE.txt
*/
+/* stylelint-disable no-duplicate-selectors */
@import 'mediawiki.mixins';
@calendarWidth: 21em;
.mw-widget-calendarWidget-header .mw-widget-calendarWidget-labelButton {
margin: 0 auto;
display: block;
- width: @calendarWidth - 2*3em;
+ width: @calendarWidth - 2 * 3em;
.oo-ui-buttonElement-button {
- width: @calendarWidth - 2*3em;
+ width: @calendarWidth - 2 * 3em;
text-align: center;
}
}
+@import 'mediawiki.mixins';
+
.mw-widgets-stashedFileWidget {
display: inline-block;
vertical-align: middle;
vertical-align: middle;
position: relative;
overflow: hidden;
- -webkit-box-sizing: border-box;
- -moz-box-sizing: border-box;
- box-sizing: border-box;
+ .box-sizing( border-box );
> .mw-widgets-stashedFileWidget-label {
line-height: 2.3em;
margin: 0;
overflow: hidden;
white-space: nowrap;
- -webkit-box-sizing: border-box;
- -moz-box-sizing: border-box;
- box-sizing: border-box;
+ .box-sizing( border-box );
text-overflow: ellipsis;
left: 0.5em;
right: 2.375em;
}
.mw-widgets-stashedFileWidget-info {
- border: none;
+ border: 0;
background: none;
display: block;
height: 100%;
}
}
-
.mw-widgets-stashedFileWidget-empty {
.mw-widgets-stashedFileWidget-thumbnail-container {
text-align: center;
} );
// If not found, run value through mw.Title to avoid treating a match as a
- // mismatch where normalisation would make them matching (bug 48476)
+ // mismatch where normalisation would make them matching (T50476)
pageExistsExact = (
Object.prototype.hasOwnProperty.call( pageData, this.getQueryValue() ) &&
}
}
- &.oo-ui-optionWidget-highlighted, &.oo-ui-optionWidget-selected {
+ &.oo-ui-optionWidget-highlighted,
+ &.oo-ui-optionWidget-selected {
&.oo-ui-iconElement > .mw-widget-titleOptionWidget-hasImage {
opacity: 1;
}
}
}
- &:not(&-withDescriptions) {
+ &:not( &-withDescriptions ) {
.mw-widget-titleOptionWidget-description {
display: none;
}
}
// Pre-populate with fake ajax promises to save http requests for tokens
- // we already have on the page via the user.tokens module (bug 34733).
+ // we already have on the page via the user.tokens module (T36733).
promises[ defaultOptions.ajax.url ] = {};
$.each( mw.user.tokens.get(), function ( key, value ) {
// This requires #getToken to use the same key as user.tokens.
'stashwrongowner',
'stashnosuchfilekey'
];
- mw.log.deprecate( mw.Api, 'errors', mw.Api.errors, 'mw.Api.errors' );
+ mw.log.deprecate( mw.Api, 'errors', mw.Api.errors, null, 'mw.Api.errors' );
/**
* @static
'duplicate',
'exists'
];
- mw.log.deprecate( mw.Api, 'warnings', mw.Api.warnings, 'mw.Api.warnings' );
+ mw.log.deprecate( mw.Api, 'warnings', mw.Api.warnings, null, 'mw.Api.warnings' );
}( mediaWiki, jQuery ) );
margin-left: 4px;
}
-.mw-icon-question:lang(ar),
-.mw-icon-question:lang(fa),
-.mw-icon-question:lang(ur) {
+/* stylelint-disable indentation */
+.mw-icon-question:lang( ar ),
+.mw-icon-question:lang( fa ),
+.mw-icon-question:lang( ur ) {
-webkit-transform: scaleX( -1 );
-ms-transform: scaleX( -1 );
transform: scaleX( -1 );
color: #555;
}
}
-}
\ No newline at end of file
+}
.mw-upload-bookletLayout-filePreview .oo-ui-progressBarWidget-bar {
height: 0.5em;
-}
\ No newline at end of file
+}
width: 20em;
}
-.apihelp-deprecated, .apihelp-flag-deprecated,
+.apihelp-deprecated,
+.apihelp-flag-deprecated,
.apihelp-flag-internal strong {
font-weight: bold;
color: #f00;
}
.apihelp-parameters dt:after {
- content: ':\A0'
+ content: ':\A0';
}
.apihelp-parameters dd {
padding: 0;
margin: 0;
background: none;
- border: none;
+ border: 0;
}
table {
tr {
background-color: #fff;
- &:nth-child(even) {
+ &:nth-child( even ) {
background-color: #f9f9f9;
}
}
display: inline-block;
padding: 10px 5px;
font-size: 13px;
- /* IE-hack for display: inline-block */
- zoom: 1;
- *display: inline;
}
.mw-debug-panelink {
}
/* Cheapo hack to hide the first 3 lines of the backtrace */
-.mw-debug-backtrace li:nth-child(-n+3) {
+.mw-debug-backtrace li:nth-child( -n+3 ) {
display: none;
}
* Diff rendering
*/
table.diff {
- border: none;
+ border: 0;
border-spacing: 4px;
margin: 0;
width: 100%;
.feedback-spinner {
display: inline-block;
zoom: 1;
- *display: inline; /* IE7 and below */
+ *display: inline; /* IE7 and below */ /* stylelint-disable declaration-block-no-duplicate-properties */
/* @embed */
background: url( mediawiki.feedback.spinner.gif );
width: 18px;
display: inline;
}
/* Display nested lists inline */
-.hlist dl dl, .hlist dl ol, .hlist dl ul,
-.hlist ol dl, .hlist ol ol, .hlist ol ul,
-.hlist ul dl, .hlist ul ol, .hlist ul ul {
+.hlist dl dl,
+.hlist dl ol,
+.hlist dl ul,
+.hlist ol dl,
+.hlist ol ol,
+.hlist ol ul,
+.hlist ul dl,
+.hlist ul ol,
+.hlist ul ul {
display: inline;
}
/* Generate interpuncts */
content: none;
}
/* Add parentheses around nested lists */
-.hlist dd dd:first-child:before, .hlist dd dt:first-child:before, .hlist dd li:first-child:before,
-.hlist dt dd:first-child:before, .hlist dt dt:first-child:before, .hlist dt li:first-child:before,
-.hlist li dd:first-child:before, .hlist li dt:first-child:before, .hlist li li:first-child:before {
+.hlist dd dd:first-child:before,
+.hlist dd dt:first-child:before,
+.hlist dd li:first-child:before,
+.hlist dt dd:first-child:before,
+.hlist dt dt:first-child:before,
+.hlist dt li:first-child:before,
+.hlist li dd:first-child:before,
+.hlist li dt:first-child:before,
+.hlist li li:first-child:before {
content: "(";
font-weight: normal;
}
-.hlist dd dd:last-child:after, .hlist dd dt:last-child:after, .hlist dd li:last-child:after,
-.hlist dt dd:last-child:after, .hlist dt dt:last-child:after, .hlist dt li:last-child:after,
-.hlist li dd:last-child:after, .hlist li dt:last-child:after, .hlist li li:last-child:after {
+.hlist dd dd:last-child:after,
+.hlist dd dt:last-child:after,
+.hlist dd li:last-child:after,
+.hlist dt dd:last-child:after,
+.hlist dt dt:last-child:after,
+.hlist dt li:last-child:after,
+.hlist li dd:last-child:after,
+.hlist li dt:last-child:after,
+.hlist li li:last-child:after {
content: ")";
font-weight: normal;
}
/* For IE8 */
-.hlist dd dd.hlist-last-child:after, .hlist dd dt.hlist-last-child:after, .hlist dd li.hlist-last-child:after,
-.hlist dt dd.hlist-last-child:after, .hlist dt dt.hlist-last-child:after, .hlist dt li.hlist-last-child:after,
-.hlist li dd.hlist-last-child:after, .hlist li dt.hlist-last-child:after, .hlist li li.hlist-last-child:after {
+.hlist dd dd.hlist-last-child:after,
+.hlist dd dt.hlist-last-child:after,
+.hlist dd li.hlist-last-child:after,
+.hlist dt dd.hlist-last-child:after,
+.hlist dt dt.hlist-last-child:after,
+.hlist dt li.hlist-last-child:after,
+.hlist li dd.hlist-last-child:after,
+.hlist li dt.hlist-last-child:after,
+.hlist li li.hlist-last-child:after {
content: ")";
font-weight: normal;
}
el.media = media;
}
// If you end up here from an IE exception "SCRIPT: Invalid property value.",
- // see #addEmbeddedCSS, bug 31676, and bug 47277 for details.
+ // see #addEmbeddedCSS, T33676, and T49277 for details.
el.href = url;
$( getMarker() ).before( el );
* { <media>: css }
* { <media>: [url, ..] }
*
- * The reason css strings are not concatenated anymore is bug 31676. We now check
+ * The reason css strings are not concatenated anymore is T33676. We now check
* whether it's safe to extend the stylesheet.
*
* @protected
// Support: IE 7-8
// Use properties instead of attributes as IE throws security
// warnings when inserting a <link> tag with a protocol-relative
- // URL set though attributes - when on HTTPS. See bug 41331.
+ // URL set though attributes - when on HTTPS. See T43331.
l = document.createElement( 'link' );
l.rel = 'stylesheet';
l.href = modules;
// Whether the store is in use on this page.
enabled: null,
+ // Modules whose string representation exceeds 100 kB are
+ // ineligible for storage. See bug T66721.
MODULE_SIZE_MAX: 100 * 1000,
// The contents of the store, mapping '[name]@[version]' keys
* immediate execution after this amount of time (in milliseconds) if it didn't run
* by that time.
*/
- mw.requestIdleCallback = mw.requestIdleCallbackInternal;
- /*
- // XXX: Polyfill disabled due to https://bugs.chromium.org/p/chromium/issues/detail?id=647870
- mw.requestIdleCallback = window.requestIdleCallback
+ mw.requestIdleCallback = window.requestIdleCallback ?
// Bind because it throws TypeError if context is not window
- ? window.requestIdleCallback.bind( window )
- : mw.requestIdleCallbackInternal;
- */
+ window.requestIdleCallback.bind( window ) :
+ mw.requestIdleCallbackInternal;
+ // Note: Polyfill was previously disabled due to
+ // https://bugs.chromium.org/p/chromium/issues/detail?id=647870
+ // See also <http://codepen.io/Krinkle/full/XNGEvv>
}( mediaWiki ) );
}
// Update tooltip for the access key after inserting into DOM
- // to get a localized access key label (bug 67946).
+ // to get a localized access key label (T69946).
$link.updateTooltipAccessKeys();
return $item[ 0 ];
.removeAttr( 'height' );
// Stretch image to take up the required size
- if ( this.$thumbnail.width() > this.$thumbnail.height() ) {
- this.$img.attr( 'width', this.imageWidth + 'px' );
- } else {
- this.$img.attr( 'height', this.imageHeight + 'px' );
- }
+ this.$img.attr( 'height', ( this.imageHeight - this.$imgCaption.outerHeight() ) + 'px' );
// Make the image smaller in case the current image
// size is larger than the original file size.
var imageLi = this.getCurrentImage(),
caption = imageLi.find( '.gallerytext' );
- // Highlight current thumbnail
+ // The order of the following is important for size calculations
+ // 1. Highlight current thumbnail
this.$gallery
.find( '.gallerybox.slideshow-current' )
.removeClass( 'slideshow-current' );
imageLi.addClass( 'slideshow-current' );
- // Show thumbnail stretched to the right size while the image loads
+ // 2. Show thumbnail
this.$thumbnail = imageLi.find( 'img' );
this.$img.attr( 'src', this.$thumbnail.attr( 'src' ) );
this.$img.attr( 'alt', this.$thumbnail.attr( 'alt' ) );
this.$imgLink.attr( 'href', imageLi.find( 'a' ).eq( 0 ).attr( 'href' ) );
- this.setImageSize();
- // Copy caption
+ // 3. Copy caption
this.$imgCaption
.empty()
.append( caption.clone() );
- // Load image at the required size
+ // 4. Stretch thumbnail to correct size
+ this.setImageSize();
+
+ // 5. Load image at the required size
this.loadImage( this.$thumbnail ).done( function ( info, $img ) {
// Show this image to the user only if its still the current one
if ( this.$thumbnail.attr( 'src' ) === $img.attr( 'src' ) ) {
/* new gallery stuff */
ul.mw-gallery-nolines li.gallerybox div.thumb {
background-color: transparent;
- border: none;
+ border: 0;
}
ul.mw-gallery-nolines li.gallerybox div.gallerytext {
ul.mw-gallery-packed-overlay li.gallerybox div.thumb,
ul.mw-gallery-packed-hover li.gallerybox div.thumb {
background-color: transparent;
- border: none;
+ border: 0;
}
ul.mw-gallery-packed li.gallerybox div.thumb img,
ul.mw-gallery-packed-hover li.gallerybox.mw-gallery-focused div.gallerytextwrapper {
position: absolute;
background: #fff;
- background: rgba(255, 255, 255, 0.8);
+ background: rgba( 255, 255, 255, 0.8 );
padding: 5px 10px;
bottom: 0;
left: 0; /* Needed for IE */
}
ul.mw-gallery-slideshow li.gallerybox div.thumb {
- border: none;
+ border: 0;
background: transparent;
}
display: inline-block;
}
-ul.gallery, li.gallerybox {
+ul.gallery,
+li.gallerybox {
zoom: 1;
*display: inline;
}
var page, url;
// Generate the same URL on client side as the one generated in ImagePage::openShowImage.
- // We avoid using the URL in the link directly since it could have been manipulated (bug 66608)
+ // We avoid using the URL in the link directly since it could have been manipulated (T68608)
page = Number( mw.util.getParamValue( 'page', this.href ) );
url = mw.util.getUrl( mw.config.get( 'wgPageName' ), { page: page } );
updateWatchLink( $link, otherAction );
// Update the "Watch this page" checkbox on action=edit when the
- // page is watched or unwatched via the tab (bug 12395).
+ // page is watched or unwatched via the tab (T14395).
$( '#wpWatchthis' ).prop( 'checked', watchResponse.watched === true );
} )
.fail( function () {
];
$wgAuth = new MediaWiki\Auth\AuthManagerAuthPlugin();
- // Bug 44192 Do not attempt to send a real e-mail
+ // T46192 Do not attempt to send a real e-mail
Hooks::clear( 'AlternateUserMailer' );
Hooks::register(
'AlternateUserMailer',
MediaWikiServices::getInstance()->resetServiceForTesting( 'MediaHandlerFactory' );
};
- // SqlBagOStuff broke when using temporary tables on r40209 (bug 15892).
+ // SqlBagOStuff broke when using temporary tables on r40209 (T17892).
// It seems to have been fixed since (r55079?), but regressed at some point before r85701.
// This works around it for now...
global $wgObjectCaches;
private function appendNamespaceSetup( &$setup, &$teardown ) {
// Add a namespace shadowing a interwiki link, to test
- // proper precedence when resolving links. (bug 51680)
+ // proper precedence when resolving links. (T53680)
$setup['wgExtraNamespaces'] = [
100 => 'MemoryAlpha',
101 => 'MemoryAlpha_talk'
if ( $this->useTemporaryTables ) {
if ( $this->db->getType() == 'sqlite' ) {
# Under SQLite the searchindex table is virtual and need
- # to be explicitly destroyed. See bug 29912
+ # to be explicitly destroyed. See T31912
# See also MediaWikiTestCase::destroyDB()
wfDebug( __METHOD__ . " explicitly destroying sqlite virtual table parsertest_searchindex\n" );
$this->db->query( "DROP TABLE `parsertest_searchindex`" );
You can optionally filter by title using --filter, e.g.
- ./phpunit.php --testsuite parsertests --filter="Bug 6200"
+ ./phpunit.php --testsuite parsertests --filter="T6400"
!! end
-# this example taken from the [[simple:Moon]] article (bug 47326)
+# this example taken from the [[simple:Moon]] article (T49326)
!! test
Italics and possessives (1)
!! wikitext
</p>
!! end
-# this example taken from [[en:Flaming Pie]] (bug 49926)
+# this example taken from [[en:Flaming Pie]] (T51926)
!! test
Italics and possessives (2)
!! wikitext
</p>
!! end
-# this example taken from [[en:Dictionary]] (bug 49926)
+# this example taken from [[en:Dictionary]] (T51926)
!! test
Italics and possessives (3)
!! wikitext
!! end
!! test
-<wbr> is valid wikitext (bug 52468)
+<wbr> is valid wikitext (T54468)
!! wikitext
<wbr>
!! html
# The next two test different paths in the sanitizer.
!! test
-Non-word characters don't terminate tag names (bug 17663, 40670, 52022)
+Non-word characters don't terminate tag names (T19663, T42670, T54022)
!! wikitext
<blockquote|>a</blockquote>
!! end
!! test
-Isolated close tags should be treated as literal text (bug 52760)
+Isolated close tags should be treated as literal text (T54760)
!! options
parsoid=wt2html
!! wikitext
###
!! test
-Bare pipe character (bug 52363)
+Bare pipe character (T54363)
!! wikitext
|
!! html
!! end
!! test
-Bare pipe character from a template (bug 52363)
+Bare pipe character from a template (T54363)
!! wikitext
{{pipe}}
!! html
Entities inside <nowiki>
!! wikitext
<nowiki><</nowiki>
-!! html
+!! html/php
<p><
</p>
+!! html/parsoid
+<p><span typeof="mw:Nowiki"><span typeof="mw:Entity" data-parsoid='{"src":"&lt;","srcContent":"<"}'><</span></span></p>
!! end
!! test
!! end
!! test
-Bug 52763: Preformatted in <blockquote>
+T54763: Preformatted in <blockquote>
!! wikitext
<blockquote>
Blah
!! end
!! test
-Bug 51086: Double newlines in blockquotes should be turned into paragraphs
+T53086: Double newlines in blockquotes should be turned into paragraphs
!! wikitext
<blockquote>
Foo
!! end
!! test
-Bug 15491: <ins>/<del> in blockquote
+T17491: <ins>/<del> in blockquote
!! wikitext
<blockquote>
Foo <del>bar</del> <ins>baz</ins> quux
# Note that the p-wrapping is newline sensitive, which could be
# considered a bug: tidy will wrap only the 'Foo' in the example
-# below in a <p> tag. (see comment 23-25 of bug #6200)
+# below in a <p> tag. (see comment 23-25 of T8200)
!! test
-Bug 15491: <ins>/<del> in blockquote (2)
+T17491: <ins>/<del> in blockquote (2)
!! wikitext
<blockquote>Foo <del>bar</del> <ins>baz</ins> quux
</blockquote>
!! end
!! test
-<pre> with attributes (bug 3202)
+<pre> with attributes (T5202)
!! wikitext
<pre style="background: blue; color:white">Bluescreen of WikiDeath</pre>
!! html
!! end
!! test
-<pre> with width attribute (bug 3202)
+<pre> with width attribute (T5202)
!! wikitext
<pre width="8">Narrow screen goodies</pre>
!! html
!! end
!! test
-<pre> with forbidden attribute (bug 3202)
+<pre> with forbidden attribute (T5202)
!! wikitext
<pre width="8" onmouseover="alert(document.cookie)">Narrow screen goodies</pre>
!! html
!! end
!! test
-<pre> with forbidden attribute values (bug 3202)
+<pre> with forbidden attribute values (T5202)
!! wikitext
<pre width="8" style="border-width: expression(alert(document.cookie))">Narrow screen goodies</pre>
!! html
!! end
!! test
-<nowiki> inside <pre> (bug 13238)
+<nowiki> inside <pre> (T15238)
!! wikitext
<pre>
<nowiki>
<pre about="#mwt1" typeof="mw:Transclusion" data-parsoid='{"pi":[[{"k":"1"}]]}' data-mw='{"parts":[{"template":{"target":{"wt":"#tag:pre","function":"#tag"},"params":{"1":{"wt":"Foo <nowiki>&rarr;bar</nowiki>"}},"i":0}}]}'>Foo <span typeof="mw:Entity">→</span>bar</pre>
!! end
+## Don't expect this to rt, Parsoid drops the unmatched closing pre tags that
+## aren't enclosed in nowikis.
!! test
<nowiki> and <pre> preference (first one wins)
+!! options
+parsoid=wt2html
!! wikitext
<pre>
<nowiki>
</pre>
</p>
!! html/parsoid
-<pre data-parsoid='{"stx":"html","strippedNL":true}'><nowiki>
+<pre typeof="mw:Extension/pre" about="#mwt2" data-mw='{"name":"pre","attrs":{},"body":{"extsrc":"\n<nowiki>\n"}}'><nowiki>
</pre>
-<p><span typeof="mw:Placeholder" data-parsoid='{"src":"</nowiki>"}'></nowiki></span>
-</pre></p>
+<p></nowiki></p>
+
<p><span typeof="mw:Nowiki">
<pre>
<nowiki>
</pre>
-</span>
-</pre></p>
+</span></p>
!! end
!! test
# Parsoid doesn't strip empty tags, like Tidy does.
!! test
-Empty pre; pre inside other HTML tags (bug 54946)
-!! options
-parsoid=wt2html,wt2wt
+Empty pre; pre inside other HTML tags (T56946)
!! wikitext
a
!! html/parsoid
<p>a</p>
-<div><pre>foo
+<div data-parsoid='{"stx":"html"}'><pre typeof="mw:Extension/pre" about="#mwt2" data-parsoid='{"stx":"html"}' data-mw='{"name":"pre","attrs":{},"body":{"extsrc":"\nfoo\n"}}'>foo
</pre></div>
-<pre></pre>
+<pre typeof="mw:Extension/pre" about="#mwt4" data-parsoid='{"stx":"html"}' data-mw='{"name":"pre","attrs":{},"body":{"extsrc":""}}'></pre>
!! end
!! test
# Note that tidy removes the empty <p> tags from the start and end.
# Parsoid does not, by design.
-!!test
+!! test
Block tag pre
!! wikitext
<p><pre>foo</pre></p>
foo
</pre>
!! html/parsoid
-<p data-parsoid='{"stx":"html","autoInsertedEnd":true}'></p><pre data-parsoid='{"stx":"html"}'>foo</pre><p data-parsoid='{"autoInsertedStart":true,"stx":"html"}'></p>
-!!end
+<p data-parsoid='{"stx":"html","autoInsertedEnd":true}'></p><pre typeof="mw:Extension/pre" about="#mwt2" data-parsoid='{"stx":"html"}' data-mw='{"name":"pre","attrs":{},"body":{"extsrc":"foo"}}'>foo</pre><p data-parsoid='{"autoInsertedStart":true,"stx":"html"}'></p>
+!! end
!!test
Templates: Indent-Pre: 1a. Templates that break a line should suppress <pre>
</pre>
!!end
+## Hmm, should Parsoid rt this?
!! test
Pres with newline attributes
+!! options
+parsoid=wt2html,html2html
!! wikitext
<pre class="one
two">hi</pre>
<pre class="one two">hi</pre>
!! html/parsoid
-<pre class="one
-two" data-parsoid='{"stx":"html"}'>hi</pre>
+<pre typeof="mw:Extension/pre" about="#mwt2" class="one two" data-mw='{"name":"pre","attrs":{"class":"one two"},"body":{"extsrc":"hi"}}'>hi</pre>
!! end
!! test
!! end
!! test
-Handle broken pre-like tags (bug 64025)
+Handle broken pre-like tags (T66025)
!! options
parsoid=wt2html
!! wikitext
</pre>
<p><pre</p>
!! html/parsoid
-<pre about="#mwt1" typeof="mw:Transclusion" data-parsoid='{"a":{"<pre":null},"sa":{"<pre":""},"stx":"html","pi":[[{"k":"1"}]]}' data-mw='{"parts":[{"template":{"target":{"wt":"echo","href":"./Template:Echo"},"params":{"1":{"wt":"<pre <pre>x</pre>"}},"i":0}}]}'>x</pre>
+<pre about="#mwt1" typeof="mw:Transclusion mw:Extension/pre" data-parsoid='{"a":{"<pre":null},"sa":{"<pre":""},"stx":"html","pi":[[{"k":"1"}]]}' data-mw='{"parts":[{"template":{"target":{"wt":"echo","href":"./Template:Echo"},"params":{"1":{"wt":"<pre <pre>x</pre>"}},"i":0}}]}'>x</pre>
<p><pre </p>
<pre style="width:50%;">{{echo|foo}}</pre>
!! html/parsoid
-<pre style="width:50%;">{{echo|foo}}</pre>
+<pre typeof="mw:Extension/pre" about="#mwt2" style="width:50%;" data-mw='{"name":"pre","attrs":{"style":"width:50%;"},"body":{"extsrc":"{{echo|foo}}"}}'>{{echo|foo}}</pre>
!! end
# TODO / maybe: fix wt2wt for this
!!end
!! test
-Templates: Handle comments in parameter names (bug 67657)
+Templates: Handle comments in parameter names (T69657)
!! wikitext
{{echo|1
<!-- should be ignored -->
!!end
!! test
-Templates: Other wikitext in parameter names (bug 67657)
+Templates: Other wikitext in parameter names (T69657)
!! wikitext
{{echo|''1''=foo}}
!! html/php
</p>
!! end
-## Bug 52824
+## T54824
!! test
Templates: '=' char in nested transclusions should not trigger nowiki escapes or conversion to named param
!! options
<p about="#mwt1" typeof="mw:Transclusion" data-mw='{"parts":[{"template":{"target":{"wt":"echo","href":"./Template:Echo"},"params":{"1":{"wt":"{{echo|1=bar}}"}},"i":0}}]}'>bar</p>
!! end
-## Bug 56733
+## T58733
!! test
Templates parameters with special tokenizing behavior dont get modified because of arg escaping
!! wikitext
<p about="#mwt1" typeof="mw:Transclusion" data-mw='{"parts":[{"template":{"target":{"wt":"echo","href":"./Template:Echo"},"params":{"1":{"wt":"a : b"}},"i":0}}]}'>a<span typeof="mw:DisplaySpace mw:Placeholder" data-parsoid='{"isDisplayHack":true}'> </span>: b</p>
!! end
-## Bug T73412
+## T73412
!! test
Templates: Preserve blank parameter names
!! wikitext
!!end
!!test
-2c. Indent-Pre and tables (bug 42252)
+2c. Indent-Pre and tables (T44252)
!! wikitext
{|
|+ foo
!!end
!! test
-2g. Indented table markup mixed with indented pre content (proposed in bug 6200)
+2g. Indented table markup mixed with indented pre content (proposed in T8200)
!! wikitext
<table>
<tr>
a <pre typeof="mw:Extension/tag" about="#mwt2" data-parsoid='{}' data-mw='{"name":"tag","attrs":{},"body":null}'></pre>
!! end
+!! test
+5. Indent-Pre and html pre
+!! wikitext
+ <pre class="123">hi</pre>
+!! html/php
+ <pre class="123">hi</pre>
+
+!! html/parsoid
+ <pre typeof="mw:Extension/pre" about="#mwt2" class="123" data-mw='{"name":"pre","attrs":{"class":"123"},"body":{"extsrc":"hi"}}'>hi</pre>
+!! end
+
!!test
Render paragraphs when indent-pre is suppressed in blocklevels
!! wikitext
foo
</pre>
!! html/parsoid
-<pre data-parsoid='{"stx":"html"}'>foo</pre>
+<pre typeof="mw:Extension/pre" about="#mwt2" data-mw='{"name":"pre","attrs":{},"body":{"extsrc":"foo"}}'>foo</pre>
-<pre data-parsoid='{"stx":"html","strippedNL":"\n"}'>
-foo
+<pre typeof="mw:Extension/pre" about="#mwt4" data-mw='{"name":"pre","attrs":{},"body":{"extsrc":"\nfoo\n"}}'>foo
</pre>
-<pre data-parsoid='{"stx":"html"}'>
+<pre typeof="mw:Extension/pre" about="#mwt6" data-mw='{"name":"pre","attrs":{},"body":{"extsrc":"\n\nfoo\n"}}'>
foo
</pre>
-<pre data-parsoid='{"stx":"html"}'>
+<pre typeof="mw:Extension/pre" about="#mwt8" data-mw='{"name":"pre","attrs":{},"body":{"extsrc":"\n\n\nfoo\n"}}'>
foo
</pre>
!! html/parsoid
-<pre data-parsoid='{"stx":"html"}'>
+<pre typeof="mw:Extension/pre" about="#mwt2" data-parsoid='{"stx":"html"}' data-mw='{"name":"pre","attrs":{},"body":{"extsrc":"\n\n\n\n\nhaha\n\n\n\n\nhaha\n\n\n\n\n"}}'>
</pre>
!! html/parsoid
-<pre data-parsoid='{"stx":"html","strippedNL":true}'>* foo
+<pre typeof="mw:Extension/pre" about="#mwt2" data-mw='{"name":"pre","attrs":{},"body":{"extsrc":"\n* foo\n# bar\n= no-h =\n'' no-italic ''\n[[ NoLink ]]\n"}}'>* foo
# bar
= no-h =
'' no-italic ''
!! end
!! test
-Bug 11748: Literal closing tags
+Definition lists: ignore colons inside tags
+!! wikitext
+;one <b>two : tag <i>fun:</i>:</b>: def
+!! html
+<dl><dt>one <b>two : tag <i>fun:</i>:</b></dt>
+<dd> def</dd></dl>
+
+!! end
+
+!! test
+Definition lists: excess closed tags
+!! wikitext
+;one</b>two : bad tag fun
+!! html/php+tidy
+<dl>
+<dt>onetwo </dt>
+<dd>bad tag fun</dd>
+</dl>
+!! html/parsoid
+<dl>
+<dt>onetwo</dt>
+<dd>bad tag fun</dd>
+</dl>
+!! end
+
+!! test
+T13748: Literal closing tags
!! wikitext
<dl>
<dt>test 1</dt>
!! end
!! test
-Definition Lists: Hacky use to indent tables, with comments (bug 63979)
+Definition Lists: Hacky use to indent tables, with comments (T65979)
!! wikitext
<!-- foo -->
::{|
</p>
!! end
-# parsoid doesn't explicitly mark autonumbered links, see bug 53505
+# parsoid doesn't explicitly mark autonumbered links, see T55505
!! test
External links: numbered
!! wikitext
</p>
!! end
-# parsoid doesn't explicitly mark autonumbered links, see bug 53505
+# parsoid doesn't explicitly mark autonumbered links, see T55505
!! test
External links: dollar sign in URL (autonumber)
!! wikitext
!!end
!! test
-External links: open square bracket forbidden in URL (bug 4377)
+External links: open square bracket forbidden in URL (T6377)
!! options
parsoid=wt2html,wt2wt,html2html
!! wikitext
!! end
!! test
-External links: open square bracket forbidden in URL (named) (bug 4377)
+External links: open square bracket forbidden in URL (named) (T6377)
!! options
parsoid=wt2html,html2html
!! wikitext
# parsoid adds a space before the link name
!! test
-External links: open square bracket forbidden in URL (named) (bug 4377)
+External links: open square bracket forbidden in URL (named) (T6377)
Parsoid variant.
!! wikitext
[http://example.com/1 [2345]
!!end
!! test
-External links: nowiki in URL link text (bug 6230)
+External links: nowiki in URL link text (T8230)
!! wikitext
[http://example.com/ <nowiki>''example site''</nowiki>]
!! html
!! end
!! test
-External links: newline forbidden in text (bug 6230 regression check)
+External links: newline forbidden in text (T8230 regression check)
!! wikitext
[http://example.com/ first
second]
</p>
!! end
-# parsoid doesn't explicitly mark autonumbered links, see bug 53505
+# parsoid doesn't explicitly mark autonumbered links, see T55505
!! test
External links: protocol-relative URL in brackets without text
!! wikitext
!!end
!! test
-External links: protocol-relative URL in the middle of a word is left alone (bug 30269)
+External links: protocol-relative URL in the middle of a word is left alone (T32269)
!! wikitext
foo//example.com/Foo
!! html
!! end
!! test
-External links: No preceding word characters allowed (bug 65278)
+External links: No preceding word characters allowed (T67278)
!! wikitext
NOPEhttp://example.com
N0http://example.com
!! end
!! test
-External links: encoded equals (bug 6102)
+External links: encoded equals (T8102)
!! wikitext
http://example.com/?foo=bar
!! html/php
##
## Note that parsoid doesn't explicit mark autonumbered links, nor
-## does it number them. As discussed in bug 53505, we can identify
+## does it number them. As discussed in T55505, we can identify
## autonumbered links via CSS.
##
# note that parsoid html is identical to [raw equals] case; so html2wt
# mode will return the [raw equals] wikitext
!! test
-External links: [encoded equals] (bug 6102)
+External links: [encoded equals] (T8102)
!! options
parsoid=wt2html,wt2wt,html2html
!! wikitext
!! end
!! test
-External links: www.jpeg.org (bug 554)
+External links: www.jpeg.org (T2554)
!! wikitext
http://www.jpeg.org
!! html
</p>
!! end
-# parsoid doesn't explicitly mark autonumbered links, see bug 53505
+# parsoid doesn't explicitly mark autonumbered links, see T55505
!! test
-External links: URL within URL (original bug 2)
+External links: URL within URL (T2002)
!! wikitext
[http://www.unausa.org/newindex.asp?place=http://www.unausa.org/programs/mun.asp]
!! html/php
!! end
!! test
-BUG 361: URL inside bracketed URL
+T2361: URL inside bracketed URL
!! wikitext
[http://www.example.com/foo http://www.example.com/bar]
!! html
!! end
!! test
-BUG 361: URL within URL, not bracketed
+T2361: URL within URL, not bracketed
!! wikitext
http://www.example.com/foo?=http://www.example.com/bar
!! html
!! end
!! test
-BUG 289: ">"-token in URL-tail
+T2289: ">"-token in URL-tail
!! wikitext
http://www.example.com/<hello>
!! html
!!end
!! test
-BUG 289: literal ">"-token in URL-tail
+T2289: literal ">"-token in URL-tail
!! wikitext
http://www.example.com/<b>html</b>
!! html/php
!! end
!! test
-BUG 289: ">"-token in bracketed URL
+T2289: ">"-token in bracketed URL
!! wikitext
[http://www.example.com/<hello> stuff]
!! html
!!end
!! test
-BUG 289: literal ">"-token in bracketed URL
+T2289: literal ">"-token in bracketed URL
!! wikitext
[http://www.example.com/<b>html</b> stuff]
!! html
!!end
!! test
-BUG 289: literal double quote at end of URL
+T2289: literal double quote at end of URL
!! wikitext
http://www.example.com/"hello"
!! html
!!end
!! test
-BUG 289: literal double quote in bracketed URL
+T2289: literal double quote in bracketed URL
!! wikitext
[http://www.example.com/"hello" stuff]
!! html
!!end
!! test
-External links: multiple legal whitespace is fine, Magnus. Don't break it please. (bug 5081)
+External links: multiple legal whitespace is fine, Magnus. Don't break it please. (T7081)
!! wikitext
[http://www.example.com test]
!! html
!! end
!! test
-External links: wiki links within external link (Bug 3695)
+External links: wiki links within external link (T5695)
!! options
parsoid=wt2html,html2html
!! wikitext
!! end
!! test
-BUG 787: Links with one slash after the url protocol are invalid
+T2787: Links with one slash after the url protocol are invalid
!! wikitext
http:/example.com
!! end
!! test
-Bug 2702: Mismatched <i>, <b> and <a> tags are invalid
+T4702: Mismatched <i>, <b> and <a> tags are invalid
!! wikitext
''[http://example.com text'']
[http://example.com '''text]'''
!! test
-Bug 4781: %26 in URL
+T6781: %26 in URL
!! wikitext
http://www.example.com/?title=AT%26T
!! html/php
# According to https://www.w3.org/TR/2011/WD-html5-20110525/Overview.html#parsing-urls a plain
# % is actually legal in HTML5. Any change in output would need testing though.
!! test
-Bug 4781, 5267: %25 in URL
+T6781, T7267: %25 in URL
!! wikitext
http://www.example.com/?title=100%25_Bran
!! html/php
!! end
!! test
-Bug 4781, 5267: %28, %29 in URL
+T6781, T7267: %28, %29 in URL
!! wikitext
http://www.example.com/?title=Ben-Hur_%281959_film%29
!! html/php
!! test
-Bug 4781: %26 in autonumber URL
+T6781: %26 in autonumber URL
!! wikitext
[http://www.example.com/?title=AT%26T]
!! html/php
!! end
!! test
-Bug 4781, 5267: %26 in autonumber URL
+T6781, T7267: %26 in autonumber URL
!! wikitext
[http://www.example.com/?title=100%25_Bran]
!! html/php
!! end
!! test
-Bug 4781, 5267: %28, %29 in autonumber URL
+T6781, T7267: %28, %29 in autonumber URL
!! wikitext
[http://www.example.com/?title=Ben-Hur_%281959_film%29]
!! html/php
!! test
-Bug 4781: %26 in bracketed URL
+T6781: %26 in bracketed URL
!! wikitext
[http://www.example.com/?title=AT%26T link]
!! html/php
!! end
!! test
-Bug 4781, 5267: %25 in bracketed URL
+T6781, T7267: %25 in bracketed URL
!! wikitext
[http://www.example.com/?title=100%25_Bran link]
!! html
!! end
!! test
-Bug 4781, 5267: %28, %29 in bracketed URL
+T6781, T7267: %28, %29 in bracketed URL
!! wikitext
[http://www.example.com/?title=Ben-Hur_%281959_film%29 link]
!! html/php
!! end
!! test
-External link containing a period in the anchor. (bug 63947)
+External link containing a period in the anchor. (T65947)
!! wikitext
[//foo.org/bar#baz. bang]
!! end
!! test
-External link containing a single quote. (bug 63947)
+External link containing a single quote. (T65947)
!! wikitext
[//foo.org/bar'baz]
!! end
!! test
-External link containing double-single-quotes in text '' (bug 4598 sanity check)
+External link containing double-single-quotes in text '' (T6598 sanity check)
!! wikitext
Some [http://example.com/ pretty ''italics'' and stuff]!
!! html
!! end
!! test
-External link containing double-single-quotes in text embedded in italics (bug 4598 sanity check)
+External link containing double-single-quotes in text embedded in italics (T6598 sanity check)
!! wikitext
''Some [http://example.com/ pretty ''italics'' and stuff]!''
!! html
!! end
!! test
-Invalid attributes in table cell (bug 1830)
+Invalid attributes in table cell (T3830)
!! wikitext
{|
|Cell:|broken
<td>foo</td></tr></tbody></table>
!! end
-## Note that Parsoid output differs from PHP and PHP+tidy here.
-## The lack of <tr> tags in the PHP output is arguably a bug in the
-## PHP parser, which tidy then compounds by fostering the content
-## entirely out of the table. Parsoid recognizes the table context
-## and generates <tr> and <td> wrappers as needed. Hopefully nobody
-## depends on PHP's treatment of broken table markup!
!! test
Implicit <td> after a |-
!! options
!! html/php+tidy
<p>a</p>
!! html/parsoid
-<table>
-<tr><td>a</td></tr>
-</table>
-!! end
-
-# Again, Parsoid adds implicit <td>s here, PHP and Tidy strip the b out.
-!! test
-<pre> tags should be recognized in an explicit <td> context, but not in an implicit <td> context
-!! options
-parsoid=wt2html,html2html
-!! wikitext
-{|
-|-
-|
- a
-|-
- b
-|}
-!! html/php
-<table>
-
-<tr>
-<td>
-<pre>a
-</pre>
-</td></tr>
- b
-</table>
+<p data-parsoid='{"fostered":true,"autoInsertedEnd":true}'>a</p><table>
+<tbody><tr data-parsoid='{"startTagSrc":"|-","autoInsertedEnd":true}'>
-!! html/php+tidy
-<p>b</p>
-<table>
-<tr>
-<td>
-<pre>
-a
-</pre></td>
-</tr>
-</table>
-!! html/parsoid
-<table>
-<tbody>
-<tr><td><pre>a</pre></td></tr>
-<tr><td> b</td></tr>
-</tbody>
-</table>
+</tr></tbody></table>
!! end
-# PHP + Tidy strips the list out of the table; Parsoid wraps it.
-# Parsoid generates the missing <td>, so wt2wt won't succeed.
!! test
Lists should be recognized in an implicit <td> context
!! options
<li>a</li>
</ul>
!! html/parsoid
-<table>
-<tr>
-<td><ul>
-<li>a</li>
-</ul></td>
-</tr>
-</table>
+<ul data-parsoid='{"fostered":true,"autoInsertedEnd":true}'><li>a</li></ul><table>
+<tbody><tr data-parsoid='{"startTagSrc":"|-","autoInsertedEnd":true}'>
+
+</tr></tbody></table>
!! end
!! test
!! html/parsoid
<table>
<tbody><tr data-parsoid='{"startTagSrc":"|-","autoInsertedEnd":true}'>
-<td style="background-color:#DC241f;" width="10px" about="#mwt1" typeof="mw:Transclusion" data-parsoid='{"autoInsertedEnd":true,"pi":[[]]}' data-mw='{"parts":["",{"template":{"target":{"wt":"table_attribs_4","href":"./Template:Table_attribs_4"},"params":{},"i":0}}," "]}'> </td><td data-parsoid='{"stx_v":"row","autoInsertedEnd":true}'> a </td><td data-parsoid='{"stx_v":"row","autoInsertedEnd":true}'> b</td></tr>
-</tbody></table>
+<td style="background-color:#DC241f;" width="10px" about="#mwt1" typeof="mw:Transclusion" data-parsoid='{"autoInsertedEnd":true,"pi":[[]]}' data-mw='{"parts":[{"template":{"target":{"wt":"table_attribs_4","href":"./Template:Table_attribs_4"},"params":{},"i":0}}," || a || b"]}'> </td><td about="#mwt1"> a </td><td about="#mwt1"> b</td></tr>
!! end
!! test
-Parsoid: Round-trip tables directly followed by content (bug 51219)
+Parsoid: Round-trip tables directly followed by content (T53219)
!! options
parsoid=wt2html,wt2wt
!! wikitext
!! end
!! test
-Parsoid: Default to a newline after tables in new content (bug 51219)
+Parsoid: Default to a newline after tables in new content (T53219)
!! options
parsoid=html2wt
!! html/parsoid
!! test
Piped link with empty link text
!! wikitext
-[[Main Page|<nowiki />]] - empty nowiki
+[[Main Page|<nowiki/>]] - empty nowiki
[[Main Page| ]] - empty space
[[Main Page| ]] - empty non breaking space
!! html/php
<a href="/wiki/Main_Page" title="Main Page"> </a> - empty non breaking space
</p>
!! html/parsoid
-<p><a rel="mw:WikiLink" href="./Main_Page" title="Main Page"><meta typeof="mw:Placeholder" data-parsoid='{"src":"<nowiki />"}'/></a> - empty nowiki
+<p><a rel="mw:WikiLink" href="./Main_Page" title="Main Page"><span typeof="mw:Nowiki"></span></a> - empty nowiki
<a rel="mw:WikiLink" href="./Main_Page" title="Main Page"> </a> - empty space
<a rel="mw:WikiLink" href="./Main_Page" title="Main Page"><span typeof="mw:Entity" data-parsoid='{"src":"&nbsp;","srcContent":" "}'> </span></a> - empty non breaking space</p>
!! end
!! endarticle
!! test
-Bug 43661: Piped links with identical prefixes
+T45661: Piped links with identical prefixes
!! wikitext
[[prefixed article|prefixed articles with spaces]]
!! end
!! test
-Anchor containing a #. (bug 63430)
+Anchor containing a #. (T65430)
!! wikitext
[[Main Page#And#Link]]
!! html/php
!! endarticle
!! test
-Namespace takes precedence over interwiki link (bug 51680)
+Namespace takes precedence over interwiki link (T53680)
!! wikitext
[[MemoryAlpha:AlphaTest]]
!! html
!! end
!! test
-Link containing double-single-quotes '' (bug 4598)
+Link containing double-single-quotes '' (T6598)
!! wikitext
[[Lista d''e paise d''o munno]]
!! html/php
!! end
!! test
-Link containing double-single-quotes '' in text (bug 4598 sanity check)
+File containing double quotes and spaces
+!! wikitext
+[[File:Cool "Gator".png]]
+!! html/parsoid
+<p><span class="mw-default-size" typeof="mw:Error mw:Image" data-parsoid='{"optList":[]}' data-mw='{"errors":[{"key":"missing-image","message":"This image does not exist."}]}'><a href="./File:Cool_%22Gator%22.png" data-parsoid='{"a":{"href":"./File:Cool_%22Gator%22.png"},"sa":{"href":"File:Cool \"Gator\".png"}}'><img resource='./File:Cool_"Gator".png' src="./Special:FilePath/Cool_%22Gator%22.png" height="220" width="220" data-parsoid='{"a":{"resource":"./File:Cool_\"Gator\".png","height":"220","width":"220","src":"./Special:FilePath/Cool_%22Gator%22.png"},"sa":{"resource":"File:Cool \"Gator\".png","src":"./Special:FilePath/Cool_\"Gator\".png"}}'/></a></span></p>
+!! end
+
+!! test
+Redirect containing double quotes and spaces
+!! wikitext
+#REDIRECT [[Cool "Gator"]]
+!! html/parsoid
+<link rel="mw:PageProp/redirect" href="./Cool_%22Gator%22" data-parsoid='{"src":"#REDIRECT ","a":{"href":"./Cool_%22Gator%22"},"sa":{"href":"Cool \"Gator\""}}'/>
+!! end
+
+!! test
+Link containing double-single-quotes '' in text (T6598 sanity check)
!! wikitext
Some [[Link|pretty ''italics'' and stuff]]!
!! html/php
!! end
!! test
-Link containing double-single-quotes '' in text embedded in italics (bug 4598 sanity check)
+Link containing double-single-quotes '' in text embedded in italics (T6598 sanity check)
!! wikitext
''Some [[Link|pretty ''italics'' and stuff]]!''
!! html
!! end
!! test
-Broken image links with HTML captions (bug 39700)
+Broken image links with HTML captions (T41700)
!! wikitext
[[File:Nonexistent|<script></script>]]
[[File:Nonexistent|100x100px|<script></script>]]
!! end
!! test
-BUG 2: [[page|http://url/]] should link to page, not http://url/
+T2002: [[page|http://url/]] should link to page, not http://url/
!! wikitext
[[Main Page|http://url/]]
!! html/php
# Parsoid does not mark self-links, by design.
!! test
-BUG 337: Escaped self-links should be bold
+T2337: Escaped self-links should be bold
!! options
title=[[Bug462]]
!! wikitext
!!end
!! test
-Internal link with ca linktrail, surrounded by bold apostrophes (bug 27473 primary issue)
+Internal link with ca linktrail, surrounded by bold apostrophes (T29473 primary issue)
!! options
language=ca
!! wikitext
!! end
!! test
-Internal link with ca linktrail, surrounded by italic apostrophes (bug 27473 primary issue)
+Internal link with ca linktrail, surrounded by italic apostrophes (T29473 primary issue)
!! options
language=ca
!! wikitext
!! end
!! test
-Internal link with en linktrail: no apostrophes (bug 27473)
+Internal link with en linktrail: no apostrophes (T29473)
!! options
language=en
!! wikitext
!! end
!! test
-Internal link with ca linktrail with apostrophes (bug 27473)
+Internal link with ca linktrail with apostrophes (T29473)
!! options
language=ca
!! wikitext
!! end
!! test
-Internal link with kaa linktrail with apostrophes (bug 27473)
+Internal link with kaa linktrail with apostrophes (T29473)
!! options
language=kaa
!! wikitext
!! end
!! test
-Link with multiple ":" in a subpage-supporting namespace (bug 63636)
+Link with multiple ":" in a subpage-supporting namespace (T65636)
!! wikitext
[[User:Foo/Test/63636:Bar|Test]]
!! html/php
!! end
!! test
-Inline interwiki link with empty title (bug 2372)
+Inline interwiki link with empty title (T4372)
!! options
parsoid=wt2html,wt2wt,html2html
!! wikitext
!! end
!! test
-Interwiki link encoding conversion (bug 1636)
+Interwiki link encoding conversion (T3636)
!! wikitext
*[[Wikipedia:ro:Olteniţa]]
*[[Wikipedia:ro:Olteniţa]]
!! end
!! test
-Interwiki link with fragment (bug 2130)
+Interwiki link with fragment (T4130)
!! wikitext
[[MeatBall:SoftSecurity#foo]]
!! html
!! end
!! test
-Local interwiki link: prefix only (bug 64167)
+Local interwiki link: prefix only (T66167)
!! options
parsoid=wt2html,wt2wt,html2html
!! wikitext
!! end
!! test
-Local interwiki link: with additional interwiki prefix (bug 61357)
+Local interwiki link: with additional interwiki prefix (T63357)
!! options
parsoid=wt2html,wt2wt,html2html
!! wikitext
!! end
!! test
-Escaping of interlanguage links
+Escaping of interlanguage links (T129218, T156308)
!! wikitext
Blah blah blah
[[:es:Spanish]]
<a href="http://zh.wikipedia.org/wiki/Chinese" class="extiw" title="zh:Chinese"> zh : Chinese </a>
</p>
!! html/parsoid
-<p><a rel="mw:ExtLink" href="http://es.wikipedia.org/wiki/Spanish" title="es:Spanish">es:Spanish</a>
+<p>Blah blah blah
+<a rel="mw:ExtLink" href="http://es.wikipedia.org/wiki/Spanish" title="es:Spanish">es:Spanish</a>
<a rel="mw:ExtLink" href="http://zh.wikipedia.org/wiki/Chinese" title="zh:Chinese"> zh : Chinese </a></p>
!! end
!! end
!! test
-Double interlanguage link, with prefix links (bug 8897)
+Double interlanguage link, with prefix links (T10897)
!! options
language=ln
!! wikitext
!! end
!! test
-"Extra" interlanguage links (bug 32189 / gerrit 111390)
+"Extra" interlanguage links (T34189 / gerrit 111390)
!! wikitext
Blah blah blah
[[mul:Article]]
!! end
!! test
-Parsoid bug 53221: Wikilinks should be properly entity-escaped
+Parsoid T55221: Wikilinks should be properly entity-escaped
!! options
parsoid={ "modes": ["html2wt"], "suppressErrors": true }
!! html/parsoid
!! end
!! test
-Handle interwiki links pointing to the current wiki as plain wiki links (bug 45209)
+Handle interwiki links pointing to the current wiki as plain wiki links (T47209)
!! wikitext
[[mi:Foo]]
!! html/php
!! end
!! test
-Interlanguage link with preceding local interwiki link (bug 68085)
+Interlanguage link with preceding local interwiki link (T70085)
!! options
parsoid=wt2html,wt2wt,html2html
!! wikitext
</p>
!! end
-# TODO: Fix html2html mode (bug 51055)!
+# TODO: Fix html2html mode (T53055)!
!! test
Parsoid: Broken br tag recognition
!! options
!! end
!! test
-List items are not parsed correctly following a <pre> block (bug 785)
+List items are not parsed correctly following a <pre> block (T2785)
!! wikitext
* <pre>foo</pre>
* <pre>bar</pre>
<li> zar</li></ul>
!! html/parsoid
-<ul><li> <pre data-parsoid='{"stx":"html"}'>foo</pre></li>
-<li> <pre data-parsoid='{"stx":"html"}'>bar</pre></li>
+<ul><li> <pre typeof="mw:Extension/pre" about="#mwt2" data-mw='{"name":"pre","attrs":{},"body":{"extsrc":"foo"}}'>foo</pre></li>
+<li> <pre typeof="mw:Extension/pre" about="#mwt4" data-mw='{"name":"pre","attrs":{},"body":{"extsrc":"bar"}}'>bar</pre></li>
<li> zar</li></ul>
!! end
!! end
# Parsoid fails this test, but it might be tricky to support properly.
-# See bug 68395.
+# See T70395.
!! test
Unbalanced closing non-block tags don't break a list
(php parser relies on Tidy to fix up)
<li><s> b </s></li></ol>
!! end
-# See bug 68395.
+# See T70395.
!!test
1. List embedded in a formatting tag
!! wikitext
!! end
!! test
-Magic Word: {{CURRENTWEEK}} (@bug 4594)
+Magic Word: {{CURRENTWEEK}} (T6594)
!! wikitext
{{CURRENTWEEK}}
!! html
!! end
!! test
-Magic Word: {{PAGENAME}} with metacharacters (bug 26781)
+Magic Word: {{PAGENAME}} with metacharacters (T28781)
!! options
title=[[*RFC 1234 http://example.com/]]
!! wikitext
!! end
!! test
-Magic Word: {{PAGENAMEE}} with metacharacters (bug 26781)
+Magic Word: {{PAGENAMEE}} with metacharacters (T28781)
!! options
title=[[*RFC 1234 http://example.com/]]
!! wikitext
!! end
!! test
-Namespace 0 {{ns:0}} (bug 4783)
+Namespace 0 {{ns:0}} (T6783)
!! wikitext
{{ns:0}}
!! html
!! end
!! test
-Namespace 0 {{ns:00}} (bug 4783)
+Namespace 0 {{ns:00}} (T6783)
!! wikitext
{{ns:00}}
!! html
### Magic links
###
!! test
-Magic links: internal link to RFC (bug 479)
+Magic links: internal link to RFC (T2479)
!! wikitext
[[RFC 123]]
!! html/php
!! end
!! test
-Magic links: RFC (bug 479)
+Magic links: RFC (T2479)
!! wikitext
RFC 822
!! html/php
!! end
!! test
-Magic links: RFC (bug 65278)
+Magic links: RFC (T67278)
!! wikitext
This is RFC 822 but thisRFC 822 is not RFC 822linked.
!! html/php
!! end
!! test
-Magic links: RFC (w/ non-newline whitespace, bug 28950/29025)
+Magic links: RFC (w/ non-newline whitespace, T30950/T31025)
!! wikitext
RFC      822
RFC
!! end
!! test
-Magic links: ISBN (bug 1937)
+Magic links: ISBN (T3937)
!! wikitext
ISBN 0-306-40615-2
!! html/php
!! end
!! test
-Magic links: ISBN (bug 65278)
+Magic links: ISBN (T67278)
!! wikitext
This is ISBN 978-0-316-09811-3 but thisISBN 978-0-316-09811-3 is not ISBN 978-0-316-09811-3linked.
!! html/php
!! end
!! test
-Magic links: ISBN (w/ non-newline whitespace, bug 28950/29025)
+Magic links: ISBN (w/ non-newline whitespace, T30950/T31025)
!! wikitext
ISBN      978 0 316 09811 3
ISBN
!! end
!! test
-Magic links: PMID (bug 65278)
+Magic links: PMID (T67278)
!! wikitext
This is PMID 1234 but thisPMID 1234 is not PMID 1234linked.
!! html/php
!! end
!! test
-Magic links: PMID (w/ non-newline whitespace, bug 28950/29025)
+Magic links: PMID (w/ non-newline whitespace, T30950/T31025)
!! wikitext
PMID      1234
PMID
!! end
!! test
-Template with just whitespace in it, bug #68421
+Template with just whitespace in it, T70421
!! wikitext
{{echo|{{ }}}}
!! html/parsoid
!! end
!! test
-BUG 553: link with two variables in a piped link
+T2553: link with two variables in a piped link
!! wikitext
{|
|[[{{{1}}}|{{{2}}}]]
!! endarticle
!! test
-BUG 529: Template with table, not included at beginning of line
+T2529: Template with table, not included at beginning of line
!! wikitext
foo {{table}}
!! html
!! end
!! test
-BUG 523: Template shouldn't eat newline (or add an extra one before table)
+T2523: Template shouldn't eat newline (or add an extra one before table)
!! wikitext
foo
{{table}}
!! end
!! test
-BUG 41: Template parameters shown as broken links
+T2041: Template parameters shown as broken links
!! wikitext
{{{parameter}}}
!! html
!!endarticle
!! test
-Bug 6563: Edit link generation for section shown by <includeonly>
+T8563: Edit link generation for section shown by <includeonly>
!! wikitext
{{includeonly section}}
!! html
# Uses same input as the contents of [[Template:Includeonly section]]
!! test
-Bug 6563: Section extraction for section shown by <includeonly>
+T8563: Section extraction for section shown by <includeonly>
!! options
section=T-2
!! wikitext
!! end
!! test
-Bug 6563: Edit link generation for section suppressed by <includeonly>
+T8563: Edit link generation for section suppressed by <includeonly>
!! wikitext
<includeonly>
==Includeonly section==
!! end
!! test
-Bug 6563: Section extraction for section suppressed by <includeonly>
+T8563: Section extraction for section suppressed by <includeonly>
!! options
section=1
!! wikitext
parsoid=wt2html,wt2wt
!! wikitext
<table>[[Category:foo1]]<tr><td>foo</td></tr></table>
-<!--Two categories (Bug 50330)-->
+<!--Two categories (T52330)-->
<table>[[Category:bar1]][[Category:bar2]]<tr><td>foo</td></tr></table>
!! html
<link rel="mw:PageProp/Category" href="./Category:Foo1"><table><tbody><tr><td>foo</td></tr></tbody></table>
-<!--Two categories (Bug 50330)-->
+<!--Two categories (T52330)-->
<link rel="mw:PageProp/Category" href="./Category:Bar1"><link rel="mw:PageProp/Category" href="./Category:Bar2"><table><tbody><tr><td>foo</td></tr></tbody></table>
!!end
</p>
!! end
-# Bug 64017 -- ugly wikitext with fostered content generates two template ranges that
+# T66017 -- ugly wikitext with fostered content generates two template ranges that
# have a true overlap (T1-start - T2-start - T1-end - T2-end).
!! test
Templates: Ugly templates: 5. Template encapsulation test: Non-trivial overlap of template ranges is properly handled
</table>
!! end
-# Bug 64017 -- ugly wikitext with fostered content generates two template ranges
+# T66017 -- ugly wikitext with fostered content generates two template ranges
# that are "identical" and generate nesting cycles in the algorithm
!! test
Templates: Ugly templates: 6. Template encapsulation test: Cyclical nesting of template ranges is properly handled
MediaWiki
!! end
-# This is bug 89, which I fixed. -- wtm
+# This is T2089, which I fixed. -- wtm
!! test
pre-save transform: subst: templates with parameters
!! options
!! endarticle
!! test
-pre-save transform: nowiki in subst (bug 1188)
+pre-save transform: nowiki in subst (T3188)
!! options
pst
!! wikitext
!! endarticle
!! test
-pre-save transform: comment in subst (bug 1936)
+pre-save transform: comment in subst (T3936)
!! options
pst
!! wikitext
!!endarticle
!!test
-(confirming safety of fix for subst bug 1936)
+(confirming safety of fix for subst T3936)
!! wikitext
{{Template:dangerous}}
!! html
!! end
!! test
-pre-save transform: comment containing gallery (bug 5024)
+pre-save transform: comment containing gallery (T7024)
!! options
pst
!! wikitext
!!end
!! test
-pre-save transform: <noinclude> in subst (bug 3298)
+pre-save transform: <noinclude> in subst (T5298)
!! options
pst
!! wikitext
!! end
!! test
-pre-save transform: <onlyinclude> in subst (bug 3298)
+pre-save transform: <onlyinclude> in subst (T5298)
!! options
pst
!! wikitext
!! endarticle
!! test
-bug 22297: safesubst: works during PST
+T24297: safesubst: works during PST
!! options
pst
!! wikitext
!! end
!! test
-bug 22297: safesubst: works during normal parse
+T24297: safesubst: works during normal parse
!! wikitext
{{SafeSubstTest}}
!! html
!! end
!! test
-pre-save transform: context links ("pipe trick") with full-width parens and no space (Japanese and Chinese style, bug 30149)
+pre-save transform: context links ("pipe trick") with full-width parens and no space (Japanese and Chinese style, T32149)
!! options
pst
!! wikitext
!! end
!! test
-pre-save transform: context links ("pipe trick") with full-width parens and space (Japanese and Chinese style, bug 30149)
+pre-save transform: context links ("pipe trick") with full-width parens and space (Japanese and Chinese style, T32149)
!! options
pst
!! wikitext
!! end
!! test
-pre-save transform: context links ("pipe trick") with parens and no space (Korean style, bug 30149)
+pre-save transform: context links ("pipe trick") with parens and no space (Korean style, T32149)
!! options
pst
!! wikitext
!! end
!! test
-pre-save transform: context links ("pipe trick") with commas (bug 21660)
+pre-save transform: context links ("pipe trick") with commas (T23660)
!! options
pst
!! wikitext
!! test
-pre-save transform: Signature expansion in nowiki tags (bug 93)
+pre-save transform: Signature expansion in nowiki tags (T2093)
!! options
pst disabled
!! wikitext
!! end
!! test
-message transform: <noinclude> in transcluded template (bug 4926)
+message transform: <noinclude> in transcluded template (T6926)
!! options
msg
!! wikitext
!! end
!! test
-message transform: <onlyinclude> in transcluded template (bug 4926)
+message transform: <onlyinclude> in transcluded template (T6926)
!! options
msg
!! wikitext
!! end
!! test
-Image with caption, bug 53312 #1
+Image with caption, T55312 #1
!! wikitext
[[File:Foobar.jpg|right|Caption page stuff]]
!! html/php
!! end
!! test
-Image with caption, bug 53312 #2
+Image with caption, T55312 #2
!! wikitext
[[File:Foobar.jpg|right|Caption page=]]
!! html/php
!! end
!! test
-Image with caption, bug 53312 #3
+Image with caption, T55312 #3
!! wikitext
[[File:Foobar.jpg|right|Caption page=stuff]]
!! html/php
!! end
!! test
-Allow empty links in image captions (Bug 60753)
+Allow empty links in image captions (T62753)
!! options
thumbsize=220
!! wikitext
!! end
!! test
-Image with multiple alignments -- use first (bug 48664)
+Image with multiple alignments -- use first (T50664)
!! options
thumbsize=220
!! wikitext
# a sad bit of backward-compatibility
!! test
-Image with size specified with pxpx (bug 13500, 51628)
+Image with size specified with pxpx (T15500, T53628)
!! options
parsoid=wt2html,wt2wt,html2html
!! wikitext
<p><span class="mw-default-size" typeof="mw:Image"><a href="./Main_Page"><img resource="./File:Foobar.jpg" src="//example.com/images/3/3a/Foobar.jpg" data-file-width="1941" data-file-height="220" data-file-type="bitmap" height="220" width="1941"/></a></span></p>
!! end
-# parsoid bug 49293 (part 1)
+# parsoid T51293 (part 1)
!! test
Image with link parameter, URL target
!! wikitext
<p><span class="mw-default-size" typeof="mw:Image"><a href="http://example.com/"><img resource="./File:Foobar.jpg" src="//example.com/images/3/3a/Foobar.jpg" data-file-width="1941" data-file-height="220" data-file-type="bitmap" height="220" width="1941"/></a></span></p>
!! end
-# parsoid bug 49293 (part 2)
+# parsoid T51293 (part 2)
!! test
Image with link parameter, protocol-less URL target
!! wikitext
!! end
!! test
-bug 18784 Link to non-existent image page with caption should use caption as link text
+T20784 Link to non-existent image page with caption should use caption as link text
!! wikitext
[[:Image:test|caption]]
!! html
!! end
!! test
-BUG 1887: A ISBN with a thumbnail
+T3887: A ISBN with a thumbnail
!! wikitext
[[File:Foobar.jpg|thumb|ISBN 1235467890]]
!! html/php
!! end
!! test
-BUG 1887: A RFC with a thumbnail
+T3887: A RFC with a thumbnail
!! wikitext
[[File:Foobar.jpg|thumb|This is RFC 12354]]
!! html/php
!! end
!! test
-BUG 1887: A mailto link with a thumbnail
+T3887: A mailto link with a thumbnail
!! wikitext
[[File:Foobar.jpg|thumb|Please mailto:nobody@example.com]]
!! html/php
<figure class="mw-default-size" typeof="mw:Image/Thumb"><a href="./File:Foobar.jpg"><img resource="./File:Foobar.jpg" src="//example.com/images/thumb/3/3a/Foobar.jpg/220px-Foobar.jpg" data-file-width="1941" data-file-height="220" data-file-type="bitmap" height="25" width="220"/></a><figcaption>Please <a rel="mw:ExtLink" href="mailto:nobody@example.com">mailto:nobody@example.com</a></figcaption></figure>
!! end
-# Pending resolution to bug 368
+# Pending resolution to T2368
!! test
-BUG 648: Frameless image caption with a link
+T2648: Frameless image caption with a link
!! wikitext
[[File:Foobar.jpg|text with a [[link]] in it]]
!! html/php
!! end
!! test
-BUG 648: Frameless image caption with a link (suffix)
+T2648: Frameless image caption with a link (suffix)
!! wikitext
[[File:Foobar.jpg|text with a [[link]]foo in it]]
!! html/php
!! end
!! test
-BUG 648: Frameless image caption with an interwiki link
+T2648: Frameless image caption with an interwiki link
!! wikitext
[[File:Foobar.jpg|text with a [[MeatBall:Link]] in it]]
!! html/php
!! end
!! test
-BUG 648: Frameless image caption with a piped interwiki link
+T2648: Frameless image caption with a piped interwiki link
!! wikitext
[[File:Foobar.jpg|text with a [[MeatBall:Link|link]] in it]]
!! html/php
!! end
!! test
-BUG 499: Alt text should have Ӓ, not &1234;
+T2499: Alt text should have Ӓ, not &1234;
!! wikitext
[[File:Foobar.jpg|♀]]
!! html/php
!! end
!! test
-Bug 3090: External links other than http: in image captions
+T5090: External links other than http: in image captions
!! wikitext
[[File:Foobar.jpg|thumb|200x200px|This caption has [irc://example.net irc] and [https://example.com Secure] ext links in it.]]
!! html/php
# Note that 'right' is the default alignment, despite the misspelled 'righ' below
!! test
-Invalid image attributes (bug 62500)
+Invalid image attributes (T64500)
!! options
thumbsize=220
parsoid=wt2html,wt2wt,html2html
!! end
!! test
-Render invalid page names as plain text (bug 51090)
+Render invalid page names as plain text (T53090)
!! wikitext
[[./../foo|bar]]
[[foo�|bar]]
!! end
!! test
-BUG 561: {{/Subpage}}
+T2561: {{/Subpage}}
!! options
subpage title=[[Page]]
!! wikitext
##
## The whitespace on the empty line is part of the test. Please do not delete
!! test
-1. Categories and newlines: All preceding newlines should be suppressed (courtesy bug 87)
+1. Categories and newlines: All preceding newlines should be suppressed (courtesy T2087)
!! options
parsoid=wt2html
!! wikitext
##
## The whitespace on the empty line is part of the test. Please do not delete
!! test
-2. Categories and newlines: All preceding newlines should be suppressed (courtesy bug 87)
+2. Categories and newlines: All preceding newlines should be suppressed (courtesy T2087)
!! options
parsoid=wt2html
!! wikitext
!! end
!! test
-Normalize hrefs properly before testing for invalid link targets (bug 70894)
+Normalize hrefs properly before testing for invalid link targets (T72894)
!! options
parsoid=html2wt
!! html/parsoid
!! end
!! test
-Duplicate interlanguage links (bug 24502)
+Duplicate interlanguage links (T26502)
!! options
ill
!! wikitext
!! end
!! test
-TOC with wgMaxTocLevel=3 (bug 6204)
+TOC with wgMaxTocLevel=3 (T8204)
!! options
wgMaxTocLevel=3
!! wikitext
!! end
!! test
-TOC with wgMaxTocLevel=3 and two level four headings (bug 6204)
+TOC with wgMaxTocLevel=3 and two level four headings (T8204)
!! options
wgMaxTocLevel=3
!! wikitext
!! end
!! test
-Resolving duplicate section names with differing case (bug 10721)
+Resolving duplicate section names with differing case (T12721)
!! wikitext
== Foo bar ==
== Foo Bar ==
!! end
!! test
-BUG 1219 URL next to image (good)
+T3219 URL next to image (good)
!! wikitext
http://example.com [[File:Foobar.jpg]]
!! html/php
!!end
!! test
-Short headings with trailing space should match behavior of Parser::doHeadings (bug 19910)
+Short headings with trailing space should match behavior of Parser::doHeadings (T21910)
!! wikitext
===
The line above must have a trailing space!
!! end
!! test
-Header with special characters (bug 25462)
+Header with special characters (T27462)
!! wikitext
The tooltips shall not show entities to the user (ie. be double escaped)
!! end
!! test
-HTML headers vs TOC (bug 23393)
+HTML headers vs TOC (T25393)
(__NOEDITSECTION__ for clearer output, doesn't matter here)
!! wikitext
<h1>Header 1</h1>
!! end
!! test
-BUG 1219 URL next to image (broken)
+T3219 URL next to image (broken)
!! wikitext
http://example.com[[File:Foobar.jpg]]
!! html/php
!!end
!! test
-Bug 1186 news: in the middle of text
+T3186 news: in the middle of text
!! wikitext
http://en.wikinews.org/wiki/Wikinews:Workplace
!! html
!! end
###
-### Nesting tests (see bug 41545, 50604, 51081)
+### Nesting tests (see T43545, T52604, T53081)
###
-# This test case is fixed in Parsoid by domino 1.0.12. (bug 50604)
+# This test case is fixed in Parsoid by domino 1.0.12. (T52604)
# Note that html2wt is considerably more difficult if we use <b> in
# the test case, instead of <small>
!! test
</p>
!! end
-# This was bug 41545 in the PHP parser.
+# This was T43545 in the PHP parser.
# Note that tidy doesn't handle this correctly.
!! test
Nesting of <kbd>
</p>
!! end
-# The following cases were bug 51081 in the PHP parser.
+# The following cases were T53081 in the PHP parser.
# Note that there are some other nestable tags (b, i, etc) which are
-# not covered; see bug 51081 for discussion.
+# not covered; see T53081 for discussion.
# Note that tidy doesn't handle this correctly.
!! test
!! end
!! test
-Media link to nonexistent file (bug 1702)
+Media link to nonexistent file (T3702)
!! wikitext
[[Media:No such.jpg]]
!! html
!! end
!! test
-Image link to nonexistent file (bug 1850 - good)
+Image link to nonexistent file (T3850 - good)
!! wikitext
[[File:No_such.jpg]]
!! html/php
!! end
!! test
-:Image link to nonexistent file (bug 1850 - bad)
+:Image link to nonexistent file (T3850 - bad)
!! wikitext
[[:Image:No such.jpg]]
!! html/php
!! test
-Character reference normalization in link text (bug 1938)
+Character reference normalization in link text (T3938)
!! wikitext
[[Main Page|this&that]]
!! html
!! endarticle
!! test
-(bug 19451) Links should refer to the normalized form.
+(T21451) Links should refer to the normalized form.
!! wikitext
[[אַ]]
[[אַ]]
!! end
!! test
-Empty attribute crash test (bug 2067)
+Empty attribute crash test (T4067)
!! wikitext
<font color="">foo</font>
!! html
!! end
!! test
-Empty attribute crash test single-quotes (bug 2067)
+Empty attribute crash test single-quotes (T4067)
!! wikitext
<font color=''>foo</font>
!! html
!! end
!! test
-Bug 2095: link with three closing brackets
+T4095: link with three closing brackets
!! wikitext
[[Main Page]]]
!! html/php
!! end
!! test
-Bug 2095: link with pipe and three closing brackets
+T4095: link with pipe and three closing brackets
!! wikitext
[[Main Page|link]]]
!! html/php
!! end
!! test
-Bug 2095: link with pipe and three closing brackets, version 2
+T4095: link with pipe and three closing brackets, version 2
!! wikitext
[[Main Page|[http://example.com/]]]
!! html/php
!! endarticle
!! test
-Bug 2304: HTML attribute safety (safe template; regression bug 2309)
+T4304: HTML attribute safety (safe template; regression T4309)
!! wikitext
<div title="{{test}}"></div>
!! html/php
# Parsoid has enough context to handle this case
!! test
-Bug 2304: HTML attribute safety (dangerous template; 2309)
+T4304: HTML attribute safety (dangerous template; 2309)
!! wikitext
<div title="{{dangerous attribute}}"></div>
!! html/php
!! end
!! test
-Bug 2304: HTML attribute safety (dangerous style template; 2309)
+T4304: HTML attribute safety (dangerous style template; 2309)
!! wikitext
<div style="{{dangerous style attribute}}"></div>
!! html/php
!! end
!! test
-Bug 2304: HTML attribute safety (safe parameter; 2309)
+T4304: HTML attribute safety (safe parameter; 2309)
!! wikitext
{{div style|width: 200px}}
!! html/php
!! end
!! test
-Bug 2304: HTML attribute safety (unsafe parameter; 2309)
+T4304: HTML attribute safety (unsafe parameter; 2309)
!! wikitext
{{div style|width: expression(alert(document.cookie))}}
!! html/php
## Parsoid output here differs; needs investigation.
!! test
-Bug 2304: HTML attribute safety (unsafe breakout parameter; 2309)
+T4304: HTML attribute safety (unsafe breakout parameter; 2309)
!! wikitext
{{div style|"><script>alert(document.cookie)</script>}}
!! html
## Parsoid output here differs; needs investigation.
!! test
-Bug 2304: HTML attribute safety (unsafe breakout parameter 2; 2309)
+T4304: HTML attribute safety (unsafe breakout parameter 2; 2309)
!! wikitext
{{div style|" ><script>alert(document.cookie)</script>}}
!! html
!! end
!! test
-Bug 2304: HTML attribute safety (link)
+T4304: HTML attribute safety (link)
!! wikitext
<div title="[[Main Page]]"></div>
!! html
!! end
!! test
-Bug 2304: HTML attribute safety (italics)
+T4304: HTML attribute safety (italics)
!! wikitext
<div title="''foobar''"></div>
!! html
!! end
!! test
-Bug 2304: HTML attribute safety (bold)
+T4304: HTML attribute safety (bold)
!! wikitext
<div title="'''foobar'''"></div>
!! html
!! end
!! test
-Bug 2304: HTML attribute safety (ISBN)
+T4304: HTML attribute safety (ISBN)
!! wikitext
<div title="ISBN 1234567890"></div>
!! html
!! end
!! test
-Bug 2304: HTML attribute safety (RFC)
+T4304: HTML attribute safety (RFC)
!! wikitext
<div title="RFC 1234"></div>
!! html
!! end
!! test
-Bug 2304: HTML attribute safety (PMID)
+T4304: HTML attribute safety (PMID)
!! wikitext
<div title="PMID 1234567890"></div>
!! html
!! end
!! test
-Bug 2304: HTML attribute safety (web link)
+T4304: HTML attribute safety (web link)
!! wikitext
<div title="http://example.com/"></div>
!! html
!! end
!! test
-Bug 2304: HTML attribute safety (named web link)
+T4304: HTML attribute safety (named web link)
!! wikitext
<div title="[http://example.com/ link]"></div>
!! html
!! end
!! test
-Bug 3244: HTML attribute safety (extension; safe)
+T5244: HTML attribute safety (extension; safe)
!! wikitext
<div style="<nowiki>background:blue</nowiki>"></div>
!! html/php
!! end
!! test
-Bug 3244: HTML attribute safety (extension; unsafe)
+T5244: HTML attribute safety (extension; unsafe)
!! wikitext
<div style="<nowiki>border-left:expression(alert(document.cookie))</nowiki>"></div>
!! html/php
!! end
!! test
-CSS safety test (all browsers): vertical tab (bug 55332 / CVE-2013-4567)
+CSS safety test (all browsers): vertical tab (T57332 / CVE-2013-4567)
!! wikitext
<p style="font-size: 100px; background-image:url\b(https://www.google.com/images/srpr/logo6w.png)">A</p>
!! html/php
!! end
!! test
-MSIE 6 CSS safety test: Fullwidth (bug 55332)
+MSIE 6 CSS safety test: Fullwidth (T57332)
!! wikitext
<p style="font-size: 100px; color: expression((title='XSSed'),'red')">A</p>
<div style="top:EXPRESSION(alert())">B</div>
!! end
!! test
-MSIE 6 CSS safety test: IPA extensions (bug 55332)
+MSIE 6 CSS safety test: IPA extensions (T57332)
!! wikitext
<div style="background-image:uʀʟ(javascript:alert())">A</div>
<p style="font-size: 100px; color: expʀessɪoɴ((title='XSSed'),'red')">B</p>
!! end
!! test
-MSIE 6 CSS safety test: sup/sub script (bug 55332)
+MSIE 6 CSS safety test: sup/sub script (T57332)
!! wikitext
<div style="background-image:url⁽javascript:alert())">A</div>
<div style="background-image:url₍javascript:alert())">B</div>
!! end
!! test
-MSIE 6 CSS safety test: Repetition markers (bug 55332)
+MSIE 6 CSS safety test: Repetition markers (T57332)
!! wikitext
<p style="font-size: 100px; color: expres〱ion((title='XSSed'),'red')">A</p>
<p style="font-size: 100px; color: expresゝion((title='XSSed'),'red')">B</p>
!! endarticle
!! test
-Expansion of multi-line templates in attribute values (bug 6255)
+Expansion of multi-line templates in attribute values (T8255)
!! wikitext
<div style="background: {{identity|#00FF00}}">-</div>
!! html
!! end
!! test
-Expansion of multi-line templates in attribute values (bug 6255 sanity check)
+Expansion of multi-line templates in attribute values (T8255 sanity check)
!! wikitext
-<div style="background:
+<div style="background:
#00FF00">-</div>
!! html/php
<div style="background: #00FF00">-</div>
!! html/parsoid
-<div style="background:
+<div style="background:
#00FF00">-</div>
!! end
!! test
-Expansion of multi-line templates in attribute values (bug 6255 sanity check 2)
+Expansion of multi-line templates in attribute values (T8255 sanity check 2)
!! wikitext
<div style="background: #00FF00">-</div>
!! html
!! end
!! test
-Parser hook: argument containing a forward slash (bug 5344)
+Parser hook: argument containing a forward slash (T7344)
!! wikitext
<tag filename="/tmp/bla"></tag>
!! html/php
## Don't expect parsoid to rt this form.
!! test
-Parser hook: empty input using terminated empty elements (bug 2374)
+Parser hook: empty input using terminated empty elements (T4374)
!! options
parsoid=wt2html,html2html
!! wikitext
## </tag> should be output literally since there is no matching tag that begins it
## Don't expect parsoid to rt this form.
!! test
-Parser hook: basic arguments using terminated empty elements (bug 2374)
+Parser hook: basic arguments using terminated empty elements (T4374)
!! options
parsoid=wt2html
!! wikitext
# In HTML5, the restrictions are that id must contain at least one character,
# and must not contain any space characters.
!! test
-Sanitizer: Validating the contents of the id attribute (bug 4515)
+Sanitizer: Validating the contents of the id attribute (T6515)
!! options
disabled
!! wikitext
# In HTML5, id must be unique amongst all the ids in the element's home subtree.
!! test
-Sanitizer: Validating id attribute uniqueness (bug 4515, bug 6301)
+Sanitizer: Validating id attribute uniqueness (T6515, T8301)
!! options
disabled
!! wikitext
!! end
!! test
-Language converter: output gets cut off unexpectedly (bug 5757)
+Language converter: output gets cut off unexpectedly (T7757)
!! options
language=zh
!! wikitext
!! end
!! test
-Self closed html pairs (bug 5487)
+Self closed html pairs (T7487)
!! options
!! wikitext
<center><font id="bug" />Centered text</center>
!! end
!! test
-Punctuation: CSS !important (bug 11874)
+Punctuation: CSS !important (T13874)
!! wikitext
<div style="width:50% !important">important</div>
!! html
!!end
!! test
-Punctuation: CSS ! important (bug 11874; with space after)
+Punctuation: CSS ! important (T13874; with space after)
!! wikitext
<div style="width:50% ! important">important</div>
!! html
!!end
!! test
-HTML bullet list, closed tags (bug 5497)
+HTML bullet list, closed tags (T7497)
!! wikitext
<ul>
<li>One</li>
!! end
!! test
-HTML bullet list, unclosed tags (bug 5497)
+HTML bullet list, unclosed tags (T7497)
!! wikitext
<ul>
<li>One
!! end
!! test
-HTML ordered list, closed tags (bug 5497)
+HTML ordered list, closed tags (T7497)
!! wikitext
<ol>
<li>One</li>
!! end
!! test
-HTML ordered list, unclosed tags (bug 5497)
+HTML ordered list, unclosed tags (T7497)
!! options
!! wikitext
<ol>
!! end
!! test
-HTML nested bullet list, closed tags (bug 5497)
+HTML nested bullet list, closed tags (T7497)
!! wikitext
<ul>
<li>One</li>
!! end
!! test
-HTML nested bullet list, open tags (bug 5497)
+HTML nested bullet list, open tags (T7497)
!! wikitext
<ul>
<li>One
!! end
!! test
-HTML nested ordered list, closed tags (bug 5497)
+HTML nested ordered list, closed tags (T7497)
!! wikitext
<ol>
<li>One</li>
!! end
!! test
-HTML nested ordered list, open tags (bug 5497)
+HTML nested ordered list, open tags (T7497)
!! wikitext
<ol>
<li>One
!! end
-# parsoid doesn't explicitly mark autonumbered links, see bug 53505
+# parsoid doesn't explicitly mark autonumbered links, see T55505
!!test
-bug 5918: autonumbering
+T7918: autonumbering
!! wikitext
[http://first/] [http://second] [ftp://ftp]
# <li class="||">
# }}}blah" onmouseover="alert('hello world');" align="left"<b>MOVE MOUSE CURSOR OVER HERE</b>
!!test
-Fuzz testing: Parser25 (bug 6055)
+Fuzz testing: Parser25 (T8055)
!! wikitext
{{{
|
<p><a rel="mw:ExtLink" href="http://example.com" data-parsoid='{"stx":"url"}'>http://example.com</a><span typeof="mw:Nowiki">junk</span></p>
!! end
-!!test
+!! test
Fuzz testing: URL adjacent extension (no space, dirty; pre)
!! wikitext
http://example.com<pre>junk</pre>
junk
</pre>
!! html/parsoid
-<p><a rel="mw:ExtLink" href="http://example.com" data-parsoid='{"stx":"url"}'>http://example.com</a></p><pre data-parsoid='{"stx":"html"}'>junk</pre>
-!!end
+<p><a rel="mw:ExtLink" href="http://example.com" data-parsoid='{"stx":"url"}'>http://example.com</a></p><pre typeof="mw:Extension/pre" about="#mwt2" data-mw='{"name":"pre","attrs":{},"body":{"extsrc":"junk"}}'>junk</pre>
+!! end
-!!test
+!! test
Fuzz testing: image with bogus manual thumbnail
!! wikitext
[[Image:foobar.jpg|thumbnail= ]]
!! html/parsoid
<figure class="mw-default-size" typeof="mw:Error mw:Image/Thumb" data-parsoid='{"optList":[{"ck":"manualthumb","ak":"thumbnail= "}]}' data-mw='{"errors":[{"key":"missing-thumbnail","message":"This thumbnail does not exist.","params":{"name":""}}],"thumb":""}'><a href="./File:Foobar.jpg" data-parsoid='{"a":{"href":"./File:Foobar.jpg"},"sa":{}}'><img resource="./File:Foobar.jpg" src="./Special:FilePath/" height="220" width="220" data-parsoid='{"a":{"resource":"./File:Foobar.jpg","height":"220","width":"220"},"sa":{"resource":"Image:foobar.jpg"}}'/></a></figure>
-!!end
+!! end
!! test
-Fuzz testing: encoded newline in generated HTML replacements (bug 6577)
+Fuzz testing: encoded newline in generated HTML replacements (T8577)
!! wikitext
<pre dir=" "></pre>
-!! html
+!! html/php
<pre dir=" "></pre>
+!! html/parsoid
+<pre typeof="mw:Extension/pre" about="#mwt2" dir="&#10;" data-mw='{"name":"pre","attrs":{"dir":"&#10;"},"body":{"extsrc":""}}'></pre>
!! end
!! test
-Parsing optional HTML elements (Bug 6171)
+Parsing optional HTML elements (T8171)
!! options
!! wikitext
<table>
!! end
!! test
-Correct handling of <td>, <tr> (Bug 6171)
+Correct handling of <td>, <tr> (T8171)
!! options
!! wikitext
<table>
!! end
!! test
-Special page transclusion twice (bug 5021)
+Special page transclusion twice (T7021)
!! options
!! wikitext
{{Special:Prefixindex/Xyzzyx}}
==b==
!! end
-# Formerly testing for bug 2587, now resolved by the use of unmarked sections
+# Formerly testing for T4587, now resolved by the use of unmarked sections
# instead of respecting commented sections
!! test
Section extraction prefixed by comment (section 1)
!!end
-# Formerly testing for bug 2607, now resolved by the use of unmarked sections
+# Formerly testing for T4607, now resolved by the use of unmarked sections
# instead of respecting HTML-style headings
!! test
Section extraction, mixed wiki and html (section 1)
!! end
-# Formerly testing for bug 3342
+# Formerly testing for T5342
!! test
Section extraction, heading surrounded by <noinclude>
!! options
==marked==
!!end
-# Test behavior of bug 19910
+# Test behavior of T21910
!! test
Sectiion with all-equals
!! options
!! end
!! test
-Section replacement test with initial whitespace (bug 13728)
+Section replacement test with initial whitespace (T15728)
!! options
replace=2,"xxx"
!! wikitext
!! test
-Section extraction, heading followed by pre with 20 spaces (bug 6398)
+Section extraction, heading followed by pre with 20 spaces (T8398)
!! options
section=1
!! wikitext
!! end
!! test
-Section extraction, heading followed by pre with 19 spaces (bug 6398 sanity check)
+Section extraction, heading followed by pre with 19 spaces (T8398 sanity check)
!! options
section=1
!! wikitext
!! test
-Section extraction, <pre> around bogus header (bug 10309)
+Section extraction, <pre> around bogus header (T12309)
!! options
section=2
!! wikitext
!! end
!! test
-Section replacement, <pre> around bogus header (bug 10309)
+Section replacement, <pre> around bogus header (T12309)
!! options
replace=2,"xxx"
!! wikitext
!! end
!! test
-HTML Hex character encoding bogus encoding (bug 26437 regression check)
+HTML Hex character encoding bogus encoding (T28437 regression check)
!! wikitext
&#xsee;&#XSEE;
!! html/php
!! end
!! test
-Bug 22905: <abbr> followed by ISBN followed by </a>
+T24905: <abbr> followed by ISBN followed by </a>
!! wikitext
<abbr>(fr)</abbr> ISBN 2753300917 [http://www.example.com example.com]
!! html/php
!! test
-ISBN with trailing year (bug 8110)
+ISBN with trailing year (T9110)
!! wikitext
ISBN 1-234-56789-0 - 2006
!! end
!! test
-anchorencode encodes like the TOC generator: (bug 18431)
+anchorencode encodes like the TOC generator: (T20431)
!! wikitext
=== _ +:.3A%3A&&]] ===
{{anchorencode: _ +:.3A%3A&&]] }}
!! end
!! test
-Bug 6200: blockquotes and paragraph formatting
+T8200: blockquotes and paragraph formatting
!! wikitext
<blockquote>
foo
!! end
!! test
-Bug 8293: Use of center tag ruins paragraph formatting
+T10293: Use of center tag ruins paragraph formatting
!! wikitext
<center>
foo
## This wikitext usage is going to be fairly uncommon in production and
## selser will take care of preserving formatting in those scenarios.
!! test
-Don't convert blue categorylinks to another variant (bug 33210)
+Don't convert blue categorylinks to another variant (T35210)
!! options
cat
language=zh
!! end
!! test
-Bug 24072: more test on conversion rule for title
+T26072: more test on conversion rule for title
!! options
language=zh variant=zh-tw showtitle
!! wikitext
</p>
!! end
-# Since Parsoid is starting to emit canonical wikitext for links,
-# [http://example.com http://example.com] will not RT back to that
-# form anymore.
!! test
HTML markups with conversion syntax in attribs, nested in other conversion blocks
!! options
</p>
!! end
+# Since Parsoid is starting to emit canonical wikitext for links,
+# [http://example.com http://example.com] will not RT back to that
+# form anymore.
!! test
Proper conversion of text in external links
!! options
!! end
-# FIXME: This test is currently broken in the PHP parser (bug 52661)
!! test
-Don't break list handling if language converter markup is in the item.
+T153135: Don't break list handling if language converter markup is in the item.
!! options
language=zh variant=zh-cn
!! wikitext
;-{zh-cn:AAA;zh-tw:BBB}-
+;-{R|foo:bar}-
+!! html/php
+<dl><dt>AAA</dt>
+<dt>foo:bar</dt></dl>
+
+!! html/parsoid
+<dl>
+<dt><span typeof="mw:LanguageVariant" data-mw='{"bidir":[{"l":"zh-cn","t":"AAA"},{"l":"zh-tw","t":"BBB"}],"show":true}'></span></dt>
+<dt><span typeof="mw:LanguageVariant" data-mw='{"disabled":true,"show":true,"text":"foo:bar"}'></span></dt>
+</dl>
+!! end
+
+// Note that parsoid does not protect colons unless language converter
+// markup is properly nested, because it is a backtracking parser.
+!! test
+T153135: Unclosed markup in definition list (code coverage)
+!! options
+language=zh variant=zh-cn
+!! wikitext
+;<b>foo:bar
+;-{zh-cn:AAA
+!! html/php
+<dl><dt><b>foo:bar</dt>
+<dt>-{zh-cn:AAA</b></dt></dl>
+
+!! html/parsoid
+<dl>
+<dt><b>foo:bar</b></dt>
+<b>
+<dt>-{zh-cn</dt>
+<dd>AAA</dd>
+</b></dl>
+!! end
+
+!! test
+T153135: Nested language converter markup in definition list (code coverage)
+!! options
+language=zh variant=zh-cn
+!! wikitext
+;-{zh-cn:AAA -{zh-hans|foo:bar}- -{R|bat:baz}-}-:def
!! html/php
-<dl><dt><span class="error">在手动语言转换规则中检测到错误</span></dd></dl>
+<dl><dt>AAA foo:bar bat:baz</dt>
+<dd>def</dd></dl>
!! html/parsoid
-<dl><dt>AAA
-</dt></dl>
+<dl>
+<dt><span typeof="mw:LanguageVariant" data-mw='{"bidir":[{"l":"zh-cn","t":"AAA <span typeof=\"mw:LanguageVariant\" data-parsoid='{\"fl\":[\"zh-hans\"],\"dsr\":[13,32,null,2]}' data-mw='{\"filter\":[\"zh-hans\"],\"text\":\"bar\"}'></span> <span typeof=\"mw:LanguageVariant\" data-parsoid='{\"fl\":[\"R\"],\"dsr\":[33,46,null,2]}' data-mw='{\"disabled\":true,\"show\":true,\"text\":\"bat:baz\"}'></span>"}],"show":true}'></span></dt>
+<dd>def</dd>
+</dl>
!! end
!! test
!! end
!! test
-Bug 529: Uncovered bullet
+T2529: Uncovered bullet
!! wikitext
* Foo {{bullet}}
!! html
# To test realistic parsing behavior, apply a tidy-like transformation to both
# the expected output and your parser's output.
!! test
-Bug 529: Uncovered bullet leaving empty list, normally removed by tidy
+T2529: Uncovered bullet leaving empty list, normally removed by tidy
!! wikitext
******* Foo {{bullet}}
!! html
!! end
!! test
-Bug 529: Uncovered table already at line-start
+T2529: Uncovered table already at line-start
!! wikitext
x
!! end
!! test
-Bug 529: Uncovered bullet in parser function result
+T2529: Uncovered bullet in parser function result
!! wikitext
* Foo {{lc:{{bullet}} }}
!! html
!! end
!! test
-Bug 5678: Double-parsed template argument
+T7678: Double-parsed template argument
!! wikitext
{{lc:{{{1}}}|hello}}
!! html
!! end
!! test
-Bug 5678: Double-parsed template invocation
+T7678: Double-parsed template invocation
!! wikitext
{{lc:{{paramtest {{!}} param = hello }} }}
!! html
!! end
!! test
-Case insensitivity of parser functions for non-ASCII characters (bug 8143)
+Case insensitivity of parser functions for non-ASCII characters (T10143)
!! options
language=cs
title=[[Main Page]]
</p>
!! end
-# Bug 6200: <blockquote> should behave like <div> with respect to line breaks
+# T8200: <blockquote> should behave like <div> with respect to line breaks
!! test
-Bug 6200: paragraphs inside blockquotes (no extra line breaks)
+T8200: paragraphs inside blockquotes (no extra line breaks)
!! wikitext
<blockquote>Line one
!! end
!! test
-Bug 6200: paragraphs inside blockquotes (extra line break on open)
+T8200: paragraphs inside blockquotes (extra line break on open)
!! wikitext
<blockquote>
Line one
!! end
!! test
-Bug 6200: paragraphs inside blockquotes (extra line break on close)
+T8200: paragraphs inside blockquotes (extra line break on close)
!! wikitext
<blockquote>Line one
!! end
!! test
-Bug 6200: paragraphs inside blockquotes (extra line break on open and close)
+T8200: paragraphs inside blockquotes (extra line break on open and close)
!! wikitext
<blockquote>
Line one
!! end
!! test
-Bug 15196: localised external link numbers
+T17196: localised external link numbers
!! options
language=fa
!! wikitext
!!end
!! test
-Edit comment with subpage link (bug 14080)
+Edit comment with subpage link (T16080)
!! options
comment
subpage
!!end
!! test
-Edit comment with subpage link and link text (bug 14080)
+Edit comment with subpage link and link text (T16080)
!! options
comment
subpage
!!end
!! test
-Edit comment with bogus subpage link in non-subpage NS (bug 14080)
+Edit comment with bogus subpage link in non-subpage NS (T16080)
!! options
comment
title=[[Subpage test]]
!! end
!! test
-Space normalisation on autocomment (bug 22784)
+Space normalisation on autocomment (T24784)
!! options
comment
title=[[Main Page]]
!! end
!! test
-percent-encoding and + signs in comments (Bug 26410)
+percent-encoding and + signs in comments (T28410)
!! options
comment
!! wikitext
<a href="/index.php?title=ABC3D%25_%2B%2B&action=edit&redlink=1" class="new" title="ABC3D% ++ (page does not exist)">ABC3D% ++</a> <a href="/index.php?title=ABC3D%25_%2B%2B&action=edit&redlink=1" class="new" title="ABC3D% ++ (page does not exist)">+%20</a>
!! end
-# Parsoid doesn't support this yet: see bug 73581
+# Parsoid doesn't support this yet: see T75581
# but it *should* omit the 'src' attribute if the image is bad.
# PHP side of tests was disabled in
# mediawiki/core:6bd31e7d95161a6e88fa86df60871051da997c3c
!! end
!! test
-Bad images - bug 16039: text after bad image disappears
+Bad images - T18039: text after bad image disappears
!! wikitext
Foo bar
[[File:Bad.jpg]]
!! end
!! test
-Verify that displaytitle works (bug #22501) no displaytitle
+Verify that displaytitle works (T24501) no displaytitle
!! options
showtitle
!! config
!! end
!! test
-Verify that displaytitle works (bug #22501) RestrictDisplayTitle=false
+Verify that displaytitle works (T24501) RestrictDisplayTitle=false
!! options
showtitle
title=[[Screen]]
!! end
!! test
-Verify that displaytitle works (bug #22501) RestrictDisplayTitle=true mismatch
+Verify that displaytitle works (T24501) RestrictDisplayTitle=true mismatch
!! options
showtitle
title=[[Screen]]
!! end
!! test
-Verify that displaytitle works (bug #22501) RestrictDisplayTitle=true matching
+Verify that displaytitle works (T24501) RestrictDisplayTitle=true matching
!! options
showtitle
title=[[Screen]]
!! end
!! test
-Verify that displaytitle works (bug #22501) AllowDisplayTitle=false
+Verify that displaytitle works (T24501) AllowDisplayTitle=false
!! options
showtitle
title=[[Screen]]
!! end
!! test
-Verify that displaytitle works (bug #22501) AllowDisplayTitle=false no DISPLAYTITLE
+Verify that displaytitle works (T24501) AllowDisplayTitle=false no DISPLAYTITLE
!! options
showtitle
title=[[Screen]]
!! end
!! test
-Verify that displaytitle handles inline CSS styles (bug 26547) - rejected value
+Verify that displaytitle handles inline CSS styles (T28547) - rejected value
!! options
showtitle
title=[[Screen]]
!! end
!! test
-Verify that displaytitle handles inline CSS styles (bug 26547) - accepted value
+Verify that displaytitle handles inline CSS styles (T28547) - accepted value
!! options
showtitle
title=[[Screen]]
!! end
!! test
-Play a bit with r67090 and bug 3158
+Play a bit with r67090 and T5158
!! wikitext
<div style="width:50% !important"> </div>
<div style="width:50% !important"> </div>
!! end
!! test
-percent-encoding and + signs in internal links (Bug 26410)
+percent-encoding and + signs in internal links (T28410)
!! wikitext
[[User:+%]] [[Page+title%]]
[[%+]] [[%+|%20]] [[%+ ]] [[%+r]]
!! end
!! test
-Special characters in embedded file links (bug 27679)
+Special characters in embedded file links (T29679)
!! wikitext
[[File:Contains & ampersand.jpg]]
[[File:Does not exist.jpg|Title with & ampersand]]
!! end
!! test
-Bug 19052 U+3000 IDEOGRAPHIC SPACE should terminate free external links
+T21052 U+3000 IDEOGRAPHIC SPACE should terminate free external links
!! wikitext
http://www.example.org/ <-- U+3000 (vim: ^Vu3000)
!! html
!! end
!! test
-Bug 19052 U+3000 IDEOGRAPHIC SPACE should terminate bracketed external links
+T21052 U+3000 IDEOGRAPHIC SPACE should terminate bracketed external links
!! wikitext
[http://www.example.org/ ideograms]
!! html
!! end
!! test
-Bug 19052 U+3000 IDEOGRAPHIC SPACE should terminate external images links
+T21052 U+3000 IDEOGRAPHIC SPACE should terminate external images links
!! wikitext
http://www.example.org/pic.png <-- U+3000 (vim: ^Vu3000)
!! html
!! endarticle
!! test
-Bug 31098 Template which includes system messages which includes the template
+T33098 Template which includes system messages which includes the template
!! wikitext
{{Identical}}
!! html
!! end
!! test
-Bug31490 Turkish: ucfirst 'blah'
+T33490 Turkish: ucfirst 'blah'
!! options
language=tr
!! wikitext
!! end
!! test
-Bug31490 Turkish: ucfirst 'ix'
+T33490 Turkish: ucfirst 'ix'
!! options
language=tr
!! wikitext
!! end
!! test
-Bug31490 Turkish: lcfirst 'BLAH'
+T33490 Turkish: lcfirst 'BLAH'
!! options
language=tr
!! wikitext
!! end
!! test
-Bug31490 Turkish: ucfırst (with a dotless i)
+T33490 Turkish: ucfırst (with a dotless i)
!! options
language=tr
!! wikitext
!! end
!! test
-Bug31490 ucfırst (with a dotless i) with English language
+T33490 ucfırst (with a dotless i) with English language
!! options
language=en
!! wikitext
!! end
!! test
-Bug 26375: TOC with italics
+T28375: TOC with italics
!! options
title=[[Main Page]]
!! wikitext
!! end
!! test
-Bug 26375: TOC with bold
+T28375: TOC with bold
!! options
title=[[Main Page]]
!! wikitext
!! end
!! test
-Bug 33845: Headings become cursive in TOC when they contain an image
+T35845: Headings become cursive in TOC when they contain an image
!! options
title=[[Main Page]]
!! wikitext
!! end
!! test
-Bug 33845 (2): Headings become bold in TOC when they contain a blockquote
+T35845 (2): Headings become bold in TOC when they contain a blockquote
!! options
title=[[Main Page]]
!! wikitext
!! end
!! test
-Bug 72884: bdi element in ToC
+T74884: bdi element in ToC
!! wikitext
__TOC__
== <bdi>test</bdi> ==
!! end
!! article
-MediaWiki:Bug32057
+MediaWiki:T34057
!! text
== {{int:headline_sample}} ==
!! endarticle
!! test
-Bug 32057: Title needed when expanding <h> nodes.
+T34057: Title needed when expanding <h> nodes.
!! options
title=[[Main Page]]
!! wikitext
-{{int:Bug32057}}
+{{int:T34057}}
!! html
<h2><span class="mw-headline" id="Headline_text">Headline text</span><span class="mw-editsection"><span class="mw-editsection-bracket">[</span><a href="/index.php?title=Main_Page&action=edit&section=1" title="Edit section: Headline text">edit</a><span class="mw-editsection-bracket">]</span></span></h2>
!! end
!! test
-Wrong option for formatNum (bug 56199)
+Wrong option for formatNum (T58199)
!! wikitext
{{formatnum:1,234.56|Random}}
{{formatnum:1,234.56|EVERYTHING}}
!! end
!! test
-nowiki inside link inside heading (bug 18295)
+nowiki inside link inside heading (T20295)
!! wikitext
==[[foo|x<nowiki>y</nowiki>z]]==
!! html
!! end
!! test
-new support for bdi element (bug 31817)
+new support for bdi element (T33817)
!! wikitext
<p dir="rtl" lang="he">ולדימיר לנין (ברוסית: <bdi lang="ru">Владимир Ленин</bdi>, 24 באפריל 1870–22 בינואר 1924) הוא מנהיג פוליטי קומוניסטי רוסי.</p>
!! html
!! end
-!!test
-Gallery override link with WikiLink (bug 34852)
-!! wikitext
-<gallery>
-File:foobar.jpg|caption|alt=galleryalt|link=InterWikiLink
-</gallery>
-!! html
-<ul class="gallery mw-gallery-traditional">
- <li class="gallerybox" style="width: 155px"><div style="width: 155px">
- <div class="thumb" style="width: 150px;"><div style="margin:68px auto;"><a href="/wiki/InterWikiLink"><img alt="galleryalt" src="http://example.com/images/thumb/3/3a/Foobar.jpg/120px-Foobar.jpg" width="120" height="14" srcset="http://example.com/images/thumb/3/3a/Foobar.jpg/180px-Foobar.jpg 1.5x, http://example.com/images/thumb/3/3a/Foobar.jpg/240px-Foobar.jpg 2x" /></a></div></div>
- <div class="gallerytext">
-<p>caption
-</p>
- </div>
- </div></li>
-</ul>
-
-!! end
-
!!test
Language parser function
!! wikitext
!! end
!!test
-Bug 34939 - Case insensitive link parsing ([HttP://])
+T36939 - Case insensitive link parsing ([HttP://])
!! wikitext
[HttP://MediaWiki.Org/]
!! html/php
!! end
!!test
-Bug 34939 - Case insensitive link parsing ([HttP:// title])
+T36939 - Case insensitive link parsing ([HttP:// title])
!! wikitext
[HttP://MediaWiki.Org/ MediaWiki]
!! html
!! end
!!test
-Bug 34939 - Case insensitive link parsing (HttP://)
+T36939 - Case insensitive link parsing (HttP://)
!! wikitext
HttP://MediaWiki.Org/
!! html/php
#### Parsoid-specific functionality tests
#### -----------------------------------------------------------------
-# Bug 63642/66749: Formatting elt fixup around images is cleaned up.
+# T65642/T68749: Formatting elt fixup around images is cleaned up.
# We know wt2wt will fail, but we expect selser to pass.
# Due to the nature of our testing, wt2wt and selser tests will enter the
# blacklist and we'll catch selser regressions based on changes to the
<p></p>
!! end
-#### ----------------------------------------------------------------
-#### Parsoid-only testing of Parsoid's impl of <ref> and <references>
-#### tags. Parsoid's output for these tags differs from that of the
-#### PHP parser.
-#### ----------------------------------------------------------------
-
-!!test
-Ref: 1. ref-location should be replaced with an index span
-!! wikitext
-A <ref>foo</ref>
-B <ref name="x">foo</ref>
-C <ref name="y" />
-<references />
-!! html/parsoid
-<p>A <span about="#mwt2" class="mw-ref" id="cite_ref-1" rel="dc:references" typeof="mw:Extension/ref" data-mw='{"name":"ref","body":{"id":"mw-reference-text-cite_note-1"},"attrs":{}}'><a href="./Main_Page#cite_note-1"><span class="mw-reflink-text">[1]</span></a></span>
-B <span about="#mwt4" class="mw-ref" id="cite_ref-x_2-0" rel="dc:references" typeof="mw:Extension/ref" data-mw='{"name":"ref","body":{"id":"mw-reference-text-cite_note-x-2"},"attrs":{"name":"x"}}'><a href="./Main_Page#cite_note-x-2"><span class="mw-reflink-text">[2]</span></a></span>
-C <span about="#mwt6" class="mw-ref" id="cite_ref-y_3-0" rel="dc:references" typeof="mw:Extension/ref" data-mw='{"name":"ref","attrs":{"name":"y"}}'><a href="./Main_Page#cite_note-y-3"><span class="mw-reflink-text">[3]</span></a></span></p>
-<ol class="mw-references" typeof="mw:Extension/references" about="#mwt8" data-mw='{"name":"references","attrs":{}}'>
-<li about="#cite_note-1" id="cite_note-1"><a href="./Main_Page#cite_ref-1" rel="mw:referencedBy"><span class="mw-linkback-text">↑ </span></a> <span id="mw-reference-text-cite_note-1" class="mw-reference-text">foo</span></li>
-<li about="#cite_note-x-2" id="cite_note-x-2"><a href="./Main_Page#cite_ref-x_2-0" rel="mw:referencedBy"><span class="mw-linkback-text">↑ </span></a> <span id="mw-reference-text-cite_note-x-2" class="mw-reference-text">foo</span></li>
-<li about="#cite_note-y-3" id="cite_note-y-3"><a href="./Main_Page#cite_ref-y_3-0" rel="mw:referencedBy"><span class="mw-linkback-text">↑ </span></a> <span id="mw-reference-text-cite_note-y-3" class="mw-reference-text"></span></li>
-</ol>
-!!end
-
-!!test
-Ref: 2. ref-tags with identical names should all get the same index
-!! wikitext
-A <ref name="x">foo</ref>
-B <ref name="x" />
-<references />
-!! html/parsoid
-<p>A <span about="#mwt2" class="mw-ref" id="cite_ref-x_1-0" rel="dc:references" typeof="mw:Extension/ref" data-mw='{"name":"ref","body":{"id":"mw-reference-text-cite_note-x-1"},"attrs":{"name":"x"}}'><a href="./Main_Page#cite_note-x-1"><span class="mw-reflink-text">[1]</span></a></span>
-B <span about="#mwt4" class="mw-ref" id="cite_ref-x_1-1" rel="dc:references" typeof="mw:Extension/ref" data-mw='{"name":"ref","attrs":{"name":"x"}}'><a href="./Main_Page#cite_note-x-1"><span class="mw-reflink-text">[1]</span></a></span></p>
-<ol class="mw-references" typeof="mw:Extension/references" about="#mwt6" data-mw='{"name":"references","attrs":{}}'>
-<li about="#cite_note-x-1" id="cite_note-x-1"><span rel="mw:referencedBy"><a href="./Main_Page#cite_ref-x_1-0"><span class="mw-linkback-text">1 </span></a><a href="./Main_Page#cite_ref-x_1-1"><span class="mw-linkback-text">2 </span></a></span> <span id="mw-reference-text-cite_note-x-1" class="mw-reference-text">foo</span></li>
-</ol>
-!!end
-
-!!test
-Ref: 3. spaces in ref-names should be ignored
-!! wikitext
-A <ref name="x">foo</ref>
-B <ref name=" x " />
-C <ref name= x />
-<references />
-!! html/parsoid
-<p>A <span about="#mwt2" class="mw-ref" id="cite_ref-x_1-0" rel="dc:references" typeof="mw:Extension/ref" data-mw='{"name":"ref","body":{"id":"mw-reference-text-cite_note-x-1"},"attrs":{"name":"x"}}'><a href="./Main_Page#cite_note-x-1"><span class="mw-reflink-text">[1]</span></a></span>
-B <span about="#mwt4" class="mw-ref" id="cite_ref-x_1-1" rel="dc:references" typeof="mw:Extension/ref" data-mw='{"name":"ref","attrs":{"name":"x"}}'><a href="./Main_Page#cite_note-x-1"><span class="mw-reflink-text">[1]</span></a></span>
-C <span about="#mwt6" class="mw-ref" id="cite_ref-x_1-2" rel="dc:references" typeof="mw:Extension/ref" data-mw='{"name":"ref","attrs":{"name":"x"}}'><a href="./Main_Page#cite_note-x-1"><span class="mw-reflink-text">[1]</span></a></span></p>
-<ol class="mw-references" typeof="mw:Extension/references" about="#mwt8" data-mw='{"name":"references","attrs":{}}'>
-<li about="#cite_note-x-1" id="cite_note-x-1"><span rel="mw:referencedBy"><a href="./Main_Page#cite_ref-x_1-0"><span class="mw-linkback-text">1 </span></a><a href="./Main_Page#cite_ref-x_1-1"><span class="mw-linkback-text">2 </span></a><a href="./Main_Page#cite_ref-x_1-2"><span class="mw-linkback-text">3 </span></a></span> <span id="mw-reference-text-cite_note-x-1" class="mw-reference-text">foo</span></li>
-</ol>
-!!end
-
-# NOTE: constructor is a predefined property in JS and constructor as a ref-name can clash with it if not handled properly)
-!!test
-Ref: 4. 'constructor' should be accepted as a valid ref-name
-!! wikitext
-A <ref name="constructor">foo</ref>
-<references />
-!! html/parsoid
-<p>A <span about="#mwt2" class="mw-ref" id="cite_ref-constructor_1-0" rel="dc:references" typeof="mw:Extension/ref" data-mw='{"name":"ref","body":{"id":"mw-reference-text-cite_note-constructor-1"},"attrs":{"name":"constructor"}}'><a href="./Main_Page#cite_note-constructor-1"><span class="mw-reflink-text">[1]</span></a></span></p>
-<ol class="mw-references" typeof="mw:Extension/references" about="#mwt4" data-mw='{"name":"references","attrs":{}}'>
-<li about="#cite_note-constructor-1" id="cite_note-constructor-1"><a href="./Main_Page#cite_ref-constructor_1-0" rel="mw:referencedBy"><span class="mw-linkback-text">↑ </span></a> <span id="mw-reference-text-cite_note-constructor-1" class="mw-reference-text">foo</span></li>
-</ol>
-!!end
-
-!!test
-Ref: 5. body should accept generic wikitext
-!! wikitext
-A <ref>
- This is a '''[[bolded link]]''' and this is a {{echo|transclusion}}
-</ref>
-
-<references />
-!! html/parsoid
-<p>A <span about="#mwt2" class="mw-ref" id="cite_ref-1" rel="dc:references" typeof="mw:Extension/ref" data-mw='{"name":"ref","body":{"id":"mw-reference-text-cite_note-1"},"attrs":{}}'><a href="./Main_Page#cite_note-1"><span class="mw-reflink-text">[1]</span></a></span></p>
-
-<ol class="mw-references" typeof="mw:Extension/references" about="#mwt5" data-mw='{"name":"references","attrs":{}}'>
-<li about="#cite_note-1" id="cite_note-1"><a href="./Main_Page#cite_ref-1" rel="mw:referencedBy"><span class="mw-linkback-text">↑ </span></a> <span id="mw-reference-text-cite_note-1" class="mw-reference-text">This is a <b><a rel="mw:WikiLink" href="./Bolded_link" title="Bolded link">bolded link</a></b> and this is a <span about="#mwt3" typeof="mw:Transclusion" data-mw='{"parts":[{"template":{"target":{"wt":"echo","href":"./Template:Echo"},"params":{"1":{"wt":"transclusion"}},"i":0}}]}'>transclusion</span>
-</span></li>
-</ol>
-!!end
-
-!!test
-Ref: 6. indent-pres should not be output in ref-body
-!! wikitext
-A <ref>
- foo
- bar
- baz
-</ref>
-
-<references />
-!! html/parsoid
-<p>A <span about="#mwt2" class="mw-ref" id="cite_ref-1" rel="dc:references" typeof="mw:Extension/ref" data-mw='{"name":"ref","body":{"id":"mw-reference-text-cite_note-1"},"attrs":{}}'><a href="./Main_Page#cite_note-1"><span class="mw-reflink-text">[1]</span></a></span></p>
-
-<ol class="mw-references" typeof="mw:Extension/references" about="#mwt4" data-mw='{"name":"references","attrs":{}}'>
-<li about="#cite_note-1" id="cite_note-1"><a href="./Main_Page#cite_ref-1" rel="mw:referencedBy"><span class="mw-linkback-text">↑ </span></a> <span id="mw-reference-text-cite_note-1" class="mw-reference-text">foo
- bar
- baz
-</span></li>
-</ol>
-!!end
-
-!!test
-Ref: 7. No p-wrapping in ref-body
-!! wikitext
-A <ref>
-foo
-
-bar
-
-
-baz
-
-
-
-booz
-</ref>
-
-<references />
-!! html/parsoid
-<p>A <span about="#mwt2" class="mw-ref" id="cite_ref-1" rel="dc:references" typeof="mw:Extension/ref" data-mw='{"name":"ref","body":{"id":"mw-reference-text-cite_note-1"},"attrs":{}}'><a href="./Main_Page#cite_note-1"><span class="mw-reflink-text">[1]</span></a></span></p>
-
-<ol class="mw-references" typeof="mw:Extension/references" about="#mwt4" data-mw='{"name":"references","attrs":{}}'>
-<li about="#cite_note-1" id="cite_note-1"><a href="./Main_Page#cite_ref-1" rel="mw:referencedBy"><span class="mw-linkback-text">↑ </span></a> <span id="mw-reference-text-cite_note-1" class="mw-reference-text">foo
-
-bar
-
-
-baz
-
-
-
-booz
-</span></li>
-</ol>
-!!end
-
-!!test
-Ref: 8. transclusion wikitext has lower precedence
-!! wikitext
-A <ref> foo {{echo|</ref> B C}}
-
-<references />
-!! html/parsoid
-<p>A <span about="#mwt2" class="mw-ref" id="cite_ref-1" rel="dc:references" typeof="mw:Extension/ref" data-mw='{"name":"ref","body":{"id":"mw-reference-text-cite_note-1"},"attrs":{}}'><a href="./Main_Page#cite_note-1"><span class="mw-reflink-text">[1]</span></a></span> B C}}</p>
-<ol class="mw-references" typeof="mw:Extension/references" about="#mwt4" data-mw='{"name":"references","attrs":{}}'>
-<li about="#cite_note-1" id="cite_note-1"><a href="./Main_Page#cite_ref-1" rel="mw:referencedBy"><span class="mw-linkback-text">↑ </span></a> <span id="mw-reference-text-cite_note-1" class="mw-reference-text">foo {{echo|</span></li>
-</ol>
-!!end
-
-!!test
-Ref: 9. unclosed comments should not leak out of ref-body
-!! wikitext
-A <ref> foo <!--</ref> B C
-<references />
-!! html/parsoid
-<p>A <span about="#mwt2" class="mw-ref" id="cite_ref-1" rel="dc:references" typeof="mw:Extension/ref" data-mw='{"name":"ref","body":{"id":"mw-reference-text-cite_note-1"},"attrs":{}}'><a href="./Main_Page#cite_note-1"><span class="mw-reflink-text">[1]</span></a></span> B C</p>
-<ol class="mw-references" typeof="mw:Extension/references" about="#mwt4" data-mw='{"name":"references","attrs":{}}'>
-<li about="#cite_note-1" id="cite_note-1"><a href="./Main_Page#cite_ref-1" rel="mw:referencedBy"><span class="mw-linkback-text">↑ </span></a> <span id="mw-reference-text-cite_note-1" class="mw-reference-text">foo <!----></span></li>
-</ol>
-!!end
-
-!!test
-Ref: 10. Unclosed HTML tags should not leak out of ref-body
-!! wikitext
-A <ref> <b> foo </ref> B C
-
-<references />
-!! html/parsoid
-<p>A <span about="#mwt2" class="mw-ref" id="cite_ref-1" rel="dc:references" typeof="mw:Extension/ref" data-mw='{"name":"ref","body":{"id":"mw-reference-text-cite_note-1"},"attrs":{}}'><a href="./Main_Page#cite_note-1"><span class="mw-reflink-text">[1]</span></a></span> B C</p>
-
-
-<ol class="mw-references" typeof="mw:Extension/references" about="#mwt4" data-mw='{"name":"references","attrs":{}}'>
-<li about="#cite_note-1" id="cite_note-1"><a href="./Main_Page#cite_ref-1" rel="mw:referencedBy"><span class="mw-linkback-text">↑ </span></a> <span id="mw-reference-text-cite_note-1" class="mw-reference-text"><b data-parsoid='{"stx":"html","autoInsertedEnd":true}'> foo </b></span></li>
-</ol>
-!!end
-
-!!test
-Ref: 11. ref-tags acts like an inline element wrt P-wrapping
-!! wikitext
-A <ref>foo</ref> B
-C <ref>bar</ref> D
-<references />
-!! html/parsoid
-<p>A <span about="#mwt2" class="mw-ref" id="cite_ref-1" rel="dc:references" typeof="mw:Extension/ref" data-mw='{"name":"ref","body":{"id":"mw-reference-text-cite_note-1"},"attrs":{}}'><a href="./Main_Page#cite_note-1"><span class="mw-reflink-text">[1]</span></a></span> B
-C <span about="#mwt4" class="mw-ref" id="cite_ref-2" rel="dc:references" typeof="mw:Extension/ref" data-mw='{"name":"ref","body":{"id":"mw-reference-text-cite_note-2"},"attrs":{}}'><a href="./Main_Page#cite_note-2"><span class="mw-reflink-text">[2]</span></a></span> D</p>
-<ol class="mw-references" typeof="mw:Extension/references" about="#mwt6" data-mw='{"name":"references","attrs":{}}'>
-<li about="#cite_note-1" id="cite_note-1"><a href="./Main_Page#cite_ref-1" rel="mw:referencedBy"><span class="mw-linkback-text">↑ </span></a> <span id="mw-reference-text-cite_note-1" class="mw-reference-text">foo</span></li>
-<li about="#cite_note-2" id="cite_note-2"><a href="./Main_Page#cite_ref-2" rel="mw:referencedBy"><span class="mw-linkback-text">↑ </span></a> <span id="mw-reference-text-cite_note-2" class="mw-reference-text">bar</span></li>
-</ol>
-!!end
-
-!!test
-Ref: 12. ref-tags act as trailing newline migration barrier
-!! wikitext
-<!--the newline at the end of this line moves out of the p tag-->a
-
-b<!--the newline at the end of this line stays inside the p tag--> <ref />
-<ref />
-
-c
-<references />
-!! html/parsoid
-<!--the newline at the end of this line moves out of the p tag--><p>a</p>
-
-
-<p>b<!--the newline at the end of this line stays inside the p tag--> <span about="#mwt2" class="mw-ref" id="cite_ref-1" rel="dc:references" typeof="mw:Extension/ref" data-mw='{"name":"ref","attrs":{}}'><a href="./Main_Page#cite_note-1"><span class="mw-reflink-text">[1]</span></a></span>
-<span about="#mwt4" class="mw-ref" id="cite_ref-2" rel="dc:references" typeof="mw:Extension/ref" data-mw='{"name":"ref","attrs":{}}'><a href="./Main_Page#cite_note-2"><span class="mw-reflink-text">[2]</span></a></span></p>
-
-<p>c</p>
-<ol class="mw-references" typeof="mw:Extension/references" about="#mwt6" data-mw='{"name":"references","attrs":{}}'>
-<li about="#cite_note-1" id="cite_note-1"><a href="./Main_Page#cite_ref-1" rel="mw:referencedBy"><span class="mw-linkback-text">↑ </span></a> <span id="mw-reference-text-cite_note-1" class="mw-reference-text"></span></li>
-<li about="#cite_note-2" id="cite_note-2"><a href="./Main_Page#cite_ref-2" rel="mw:referencedBy"><span class="mw-linkback-text">↑ </span></a> <span id="mw-reference-text-cite_note-2" class="mw-reference-text"></span></li></ol>
-!!end
-
-!!test
-Ref: 13. ref-tags are not SOL-transparent and block indent-pres
-!! wikitext
-<ref>foo</ref> A
-<ref>bar
-</ref> B
-<references />
-!! html/parsoid
-<p><span about="#mwt2" class="mw-ref" id="cite_ref-1" rel="dc:references" typeof="mw:Extension/ref" data-mw='{"name":"ref","body":{"id":"mw-reference-text-cite_note-1"},"attrs":{}}'><a href="./Main_Page#cite_note-1"><span class="mw-reflink-text">[1]</span></a></span> A
-<span about="#mwt4" class="mw-ref" id="cite_ref-2" rel="dc:references" typeof="mw:Extension/ref" data-mw='{"name":"ref","body":{"id":"mw-reference-text-cite_note-2"},"attrs":{}}'><a href="./Main_Page#cite_note-2"><span class="mw-reflink-text">[2]</span></a></span> B</p>
-<ol class="mw-references" typeof="mw:Extension/references" about="#mwt6" data-mw='{"name":"references","attrs":{}}'>
-<li about="#cite_note-1" id="cite_note-1"><a href="./Main_Page#cite_ref-1" rel="mw:referencedBy"><span class="mw-linkback-text">↑ </span></a> <span id="mw-reference-text-cite_note-1" class="mw-reference-text">foo</span></li>
-<li about="#cite_note-2" id="cite_note-2"><a href="./Main_Page#cite_ref-2" rel="mw:referencedBy"><span class="mw-linkback-text">↑ </span></a> <span id="mw-reference-text-cite_note-2" class="mw-reference-text">bar
-</span></li>
-</ol>
-!!end
-
-## Roundtripping fails because of nowiki'ing
-!! test
-Ref: 14. A nested ref-tag should be emitted as plain text
-!! options
-parsoid=wt2html
-!! wikitext
-<ref>foo <ref>bar</ref> baz</ref>
-
-<references />
-!! html/parsoid
-<p><span about="#mwt2" class="mw-ref" id="cite_ref-1" rel="dc:references" typeof="mw:Extension/ref" data-mw='{"name":"ref","body":{"id":"mw-reference-text-cite_note-1"},"attrs":{}}'><a href="./Main_Page#cite_note-1" style="counter-reset: mw-Ref 1;"><span class="mw-reflink-text">[1]</span></a></span> baz</ref></p>
-
-<ol class="mw-references" typeof="mw:Extension/references" about="#mwt4" data-mw='{"name":"references","attrs":{}}'><li about="#cite_note-1" id="cite_note-1"><a href="./Main_Page#cite_ref-1" rel="mw:referencedBy"><span class="mw-linkback-text">↑ </span></a> <span id="mw-reference-text-cite_note-1" class="mw-reference-text" data-parsoid="{}">foo <ref>bar</span></li></ol>
-!! end
-
-!!test
-Ref: 15. ref-tags with identical names should get identical indexes
-!! wikitext
-A1 <ref name="a">foo</ref> A2 <ref name="a" />
-B1 <ref name="b" /> B2 <ref name="b">bar</ref>
-
-<references />
-!! html/parsoid
-<p>A1 <span about="#mwt3" class="mw-ref" id="cite_ref-a_1-0" rel="dc:references" typeof="mw:Extension/ref" data-mw='{"name":"ref","body":{"id":"mw-reference-text-cite_note-a-1"},"attrs":{"name":"a"}}'><a href="./Main_Page#cite_note-a-1"><span class="mw-reflink-text">[1]</span></a></span> A2 <span about="#mwt4" class="mw-ref" id="cite_ref-a_1-1" rel="dc:references" typeof="mw:Extension/ref" data-mw='{"name":"ref","attrs":{"name":"a"}}'><a href="./Main_Page#cite_note-a-1"><span class="mw-reflink-text">[1]</span></a></span>
-B1 <span about="#mwt7" class="mw-ref" id="cite_ref-b_2-0" rel="dc:references" typeof="mw:Extension/ref" data-mw='{"name":"ref","attrs":{"name":"b"}}'><a href="./Main_Page#cite_note-b-2"><span class="mw-reflink-text">[2]</span></a></span> B2 <span about="#mwt8" class="mw-ref" id="cite_ref-b_2-1" rel="dc:references" typeof="mw:Extension/ref" data-mw='{"name":"ref","body":{"id":"mw-reference-text-cite_note-b-2"},"attrs":{"name":"b"}}'><a href="./Main_Page#cite_note-b-2"><span class="mw-reflink-text">[2]</span></a></span></p>
-
-<ol class="mw-references" typeof="mw:Extension/references" about="#mwt10" data-mw='{"name":"references","attrs":{}}'><li about="#cite_note-a-1" id="cite_note-a-1"><span rel="mw:referencedBy"><a href="./Main_Page#cite_ref-a_1-0"><span class="mw-linkback-text">1 </span></a><a href="./Main_Page#cite_ref-a_1-1"><span class="mw-linkback-text">2 </span></a></span> <span id="mw-reference-text-cite_note-a-1" class="mw-reference-text">foo</span></li><li about="#cite_note-b-2" id="cite_note-b-2"><span rel="mw:referencedBy"><a href="./Main_Page#cite_ref-b_2-0"><span class="mw-linkback-text">1 </span></a><a href="./Main_Page#cite_ref-b_2-1"><span class="mw-linkback-text">2 </span></a></span> <span id="mw-reference-text-cite_note-b-2" class="mw-reference-text">bar</span></li>
-</ol>
-!!end
-
-## We don't bother wt2wt-ing non-standard whitespace
-!!test
-Ref: 16. Tokenizer should accept non-standard whitespace in <ref> and </ref> tags
-!!options
-parsoid=wt2html
-!! wikitext
-A <ref >foo</ref >
-
-<references />
-!! html/parsoid
-<p>A <span about="#mwt2" class="mw-ref" id="cite_ref-1" rel="dc:references" typeof="mw:Extension/ref" data-mw='{"name":"ref","body":{"id":"mw-reference-text-cite_note-1"},"attrs":{}}'><a href="./Main_Page#cite_note-1"><span class="mw-reflink-text">[1]</span></a></span></p>
-<ol class="mw-references" typeof="mw:Extension/references" about="#mwt4" data-mw='{"name":"references","attrs":{}}'>
-<li about="#cite_note-1" id="cite_note-1"><a href="./Main_Page#cite_ref-1" rel="mw:referencedBy"><span class="mw-linkback-text">↑ </span></a> <span id="mw-reference-text-cite_note-1" class="mw-reference-text">foo</span></li></ol>
-!!end
-
-!!test
-Ref: 17. Generate valid HTML5 id/about attributes
-!!wikitext
-<ref name="a b">foo</ref>
-<ref name=":0">ve-created name</ref>
-
-<references />
-!!html/parsoid
-<p><span about="#mwt2" class="mw-ref" id="cite_ref-a_b_1-0" rel="dc:references" typeof="mw:Extension/ref" data-mw='{"name":"ref","body":{"id":"mw-reference-text-cite_note-a_b-1"},"attrs":{"name":"a b"}}'><a href="./Main_Page#cite_note-a_b-1" style="counter-reset: mw-Ref 1;"><span class="mw-reflink-text">[1]</span></a></span>
-<span about="#mwt4" class="mw-ref" id="cite_ref-:0_2-0" rel="dc:references" typeof="mw:Extension/ref" data-mw='{"name":"ref","body":{"id":"mw-reference-text-cite_note-:0-2"},"attrs":{"name":":0"}}'><a href="./Main_Page#cite_note-:0-2" style="counter-reset: mw-Ref 2;"><span class="mw-reflink-text">[2]</span></a></span>
-
-<ol class="mw-references" typeof="mw:Extension/references" about="#mwt6" data-mw='{"name":"references","attrs":{}}'><li about="#cite_note-a_b-1" id="cite_note-a_b-1"><a href="./Main_Page#cite_ref-a_b_1-0" rel="mw:referencedBy"><span class="mw-linkback-text">↑ </span></a> <span id="mw-reference-text-cite_note-a_b-1" class="mw-reference-text">foo</span></li><li about="#cite_note-:0-2" id="cite_note-:0-2"><a href="./Main_Page#cite_ref-:0_2-0" rel="mw:referencedBy"><span class="mw-linkback-text">↑ </span></a> <span id="mw-reference-text-cite_note-:0-2" class="mw-reference-text">ve-created name</span></li></ol>
-
-!!end
-
-!!test
-Ref: 18. T58916: Extension attributes should be parsed as plain text
-!!wikitext
-<ref name="{{echo|a}}">foo</ref>
-
-<references />
-!!html/parsoid
-<p><span class="mw-ref" id="cite_ref-.7B.7Becho.7Ca.7D.7D_1-0" rel="dc:references" typeof="mw:Extension/ref" data-mw='{"name":"ref","body":{"id":"mw-reference-text-cite_note-.7B.7Becho.7Ca.7D.7D-1"},"attrs":{"name":"{{echo|a}}"}}'><a href="./Main_Page#cite_note-.7B.7Becho.7Ca.7D.7D-1"><span class="mw-reflink-text">[1]</span></a></span>
-</p>
-
-<ol class="mw-references" typeof="mw:Extension/references" about="#mwt4" data-mw='{"name":"references","attrs":{}}'>
-<li about="#cite_note-.7B.7Becho.7Ca.7D.7D-1" id="cite_note-.7B.7Becho.7Ca.7D.7D-1"><a href="./Main_Page#cite_ref-.7B.7Becho.7Ca.7D.7D_1-0" rel="mw:referencedBy"><span class="mw-linkback-text">↑ </span></a> <span id="mw-reference-text-cite_note-.7B.7Becho.7Ca.7D.7D-1" class="mw-reference-text">foo</span></li>
-</ol>
-!!end
-
-!!test
-Ref: 19. ref-tags with identical name encodings should get identical indexes
-!! wikitext
-1 <ref name="a & b">foo</ref> 2 <ref name="a & b" />
-
-<references />
-!! html/parsoid
-<p>1 <span about="#mwt3" class="mw-ref" id="cite_ref-a_.26_b_1-0" rel="dc:references" typeof="mw:Extension/ref" data-mw='{"name":"ref","body":{"id":"mw-reference-text-cite_note-a_.26_b-1"},"attrs":{"name":"a & b"}}'><a href="./Main_Page#cite_note-a_.26_b-1"><span class="mw-reflink-text">[1]</span></a></span> 2 <span about="#mwt4" class="mw-ref" id="cite_ref-a_.26_b_1-1" rel="dc:references" typeof="mw:Extension/ref" data-mw='{"name":"ref","attrs":{"name":"a &amp; b"}}'><a href="./Main_Page#cite_note-a_.26_b-1"><span class="mw-reflink-text">[1]</span></a></span>
-</p>
-<ol class="mw-references" typeof="mw:Extension/references" about="#mwt6" data-mw='{"name":"references","attrs":{}}'>
-<li about="#cite_note-a_.26_b-1" id="cite_note-a_.26_b-1"><span rel="mw:referencedBy"><a href="./Main_Page#cite_ref-a_.26_b_1-0"><span class="mw-linkback-text">1 </span></a><a href="./Main_Page#cite_ref-a_.26_b_1-1"><span class="mw-linkback-text">2 </span></a></span> <span id="mw-reference-text-cite_note-a_.26_b-1" class="mw-reference-text">foo</span></li>
-</ol>
-!!end
-
-!!test
-Ref: 20. ref-tags with identical names but different content should keep it
-!! wikitext
-A <ref name="foo">Foo one</ref>
-B <ref name="foo">Foo two</ref>
-C <ref name="foo" />
-
-<references />
-!! html/parsoid
-<p>A <span about="#mwt2" class="mw-ref" id="cite_ref-foo_1-0" rel="dc:references" typeof="mw:Extension/ref" data-mw='{"name":"ref","body":{"id":"mw-reference-text-cite_note-foo-1"},"attrs":{"name":"foo"}}'><a href="./Main_Page#cite_note-foo-1"><span class="mw-reflink-text">[1]</span></a></span>
-B <span about="#mwt4" class="mw-ref" id="cite_ref-foo_1-1" rel="dc:references" typeof="mw:Extension/ref" data-mw='{"name":"ref","body":{"html":"Foo two"},"attrs":{"name":"foo"}}'><a href="./Main_Page#cite_note-foo-1"><span class="mw-reflink-text">[1]</span></a></span>
-C <span about="#mwt6" class="mw-ref" id="cite_ref-foo_1-2" rel="dc:references" typeof="mw:Extension/ref" data-mw='{"name":"ref","attrs":{"name":"foo"}}'><a href="./Main_Page#cite_note-foo-1"><span class="mw-reflink-text">[1]</span></a></span></p>
-
-<ol class="mw-references" typeof="mw:Extension/references" about="#mwt8" data-mw='{"name":"references","attrs":{}}'><li about="#cite_note-foo-1" id="cite_note-foo-1"><span rel="mw:referencedBy"><a href="./Main_Page#cite_ref-foo_1-0"><span class="mw-linkback-text">1 </span></a><a href="./Main_Page#cite_ref-foo_1-1"><span class="mw-linkback-text">2 </span></a><a href="./Main_Page#cite_ref-foo_1-2"><span class="mw-linkback-text">3 </span></a></span> <span id="mw-reference-text-cite_note-foo-1" class="mw-reference-text">Foo one</span></li>
-</ol>
-!!end
-
-!!test
-References: 1. references tag without any refs should be handled properly
-!! wikitext
-<references />
-!! html/parsoid
-<ol class="mw-references" typeof="mw:Extension/references" about="#mwt2" data-mw='{"name":"references","attrs":{}}'></ol>
-!!end
-
-!!test
-References: 2. references tag with group only outputs references from that group
-!! wikitext
-A <ref group="a">foo</ref>
-B <ref group="b">bar</ref>
-C <ref>baz</ref>
-
-<references group="a" />
-<references />
-<references group="b" />
-!! html/parsoid
-<p>A <span about="#mwt2" class="mw-ref" id="cite_ref-1" rel="dc:references" typeof="mw:Extension/ref" data-mw='{"name":"ref","body":{"id":"mw-reference-text-cite_note-1"},"attrs":{"group":"a"}}'><a href="./Main_Page#cite_note-1" data-mw-group="a"><span class="mw-reflink-text">[a 1]</span></a></span>
-B <span about="#mwt4" class="mw-ref" id="cite_ref-2" rel="dc:references" typeof="mw:Extension/ref" data-mw='{"name":"ref","body":{"id":"mw-reference-text-cite_note-2"},"attrs":{"group":"b"}}'><a href="./Main_Page#cite_note-2" data-mw-group="b"><span class="mw-reflink-text">[b 1]</span></a></span>
-C <span class="mw-ref" id="cite_ref-3" rel="dc:references" typeof="mw:Extension/ref" data-mw='{"name":"ref","body":{"id":"mw-reference-text-cite_note-3"},"attrs":{}}'><a href="./Main_Page#cite_note-3"><span class="mw-reflink-text">[1]</span></a></span></p>
-
-<ol class="mw-references" typeof="mw:Extension/references" about="#mwt8" data-mw-group="a" data-mw='{"name":"references","attrs":{"group":"a"}}'>
-<li about="#cite_note-1" id="cite_note-1"><a href="./Main_Page#cite_ref-1" data-mw-group="a" rel="mw:referencedBy"><span class="mw-linkback-text">↑ </span></a> <span id="mw-reference-text-cite_note-1" class="mw-reference-text">foo</span></li>
-</ol>
-<ol class="mw-references" typeof="mw:Extension/references" about="#mwt10" data-mw='{"name":"references","attrs":{}}'>
-<li about="#cite_note-3" id="cite_note-3"><a href="./Main_Page#cite_ref-3" rel="mw:referencedBy"><span class="mw-linkback-text">↑ </span></a> <span id="mw-reference-text-cite_note-3" class="mw-reference-text">baz</span></li>
-</ol>
-<ol class="mw-references" typeof="mw:Extension/references" about="#mwt12" data-mw-group="b" data-mw='{"name":"references","attrs":{"group":"b"}}'>
-<li about="#cite_note-2" id="cite_note-2"><a href="./Main_Page#cite_ref-2" data-mw-group="b" rel="mw:referencedBy"><span class="mw-linkback-text">↑ </span></a> <span id="mw-reference-text-cite_note-2" class="mw-reference-text">bar</span></li>
-</ol>
-!!end
-
-!!test
-References: 3. ref list should be cleared after processing references
-!! wikitext
-A <ref>foo</ref>
-
-<references />
-
-B <ref>bar</ref>
-
-<references />
-!! html/parsoid
-<p>A <span about="#mwt2" class="mw-ref" id="cite_ref-1" rel="dc:references" typeof="mw:Extension/ref" data-mw='{"name":"ref","body":{"id":"mw-reference-text-cite_note-1"},"attrs":{}}'><a href="./Main_Page#cite_note-1"><span class="mw-reflink-text">[1]</span></a></span></p>
-
-<ol class="mw-references" typeof="mw:Extension/references" about="#mwt4" data-mw='{"name":"references","attrs":{}}'><li about="#cite_note-1" id="cite_note-1"><a href="./Main_Page#cite_ref-1" rel="mw:referencedBy"><span class="mw-linkback-text">↑ </span></a> <span id="mw-reference-text-cite_note-1" class="mw-reference-text">foo</span></li>
-</ol>
-
-<p>B <span about="#mwt6" class="mw-ref" id="cite_ref-2" rel="dc:references" typeof="mw:Extension/ref" data-mw='{"name":"ref","body":{"id":"mw-reference-text-cite_note-2"},"attrs":{}}'><a href="./Main_Page#cite_note-2"><span class="mw-reflink-text">[1]</span></a></span></p>
-
-<ol class="mw-references" typeof="mw:Extension/references" about="#mwt8" data-mw='{"name":"references","attrs":{}}'>
-<li about="#cite_note-2" id="cite_note-2"><a href="./Main_Page#cite_ref-2" rel="mw:referencedBy"><span class="mw-linkback-text">↑ </span></a> <span id="mw-reference-text-cite_note-2" class="mw-reference-text">bar</span></li>
-</ol>
-!!end
-
-!!test
-References: 4. only referenced group should be cleared after processing references
-!! wikitext
-A <ref group="a">afoo</ref>
-B <ref>bfoo</ref>
-
-<references group="a" />
-
-C <ref>cfoo</ref>
-
-<references />
-!! html/parsoid
-<p>A <span about="#mwt2" class="mw-ref" id="cite_ref-1" rel="dc:references" typeof="mw:Extension/ref" data-mw='{"name":"ref","body":{"id":"mw-reference-text-cite_note-1"},"attrs":{"group":"a"}}'><a href="./Main_Page#cite_note-1" data-mw-group="a"><span class="mw-reflink-text">[a 1]</span></a></span>
-B <span about="#mwt4" class="mw-ref" id="cite_ref-2" rel="dc:references" typeof="mw:Extension/ref" data-mw='{"name":"ref","body":{"id":"mw-reference-text-cite_note-2"},"attrs":{}}'><a href="./Main_Page#cite_note-2"><span class="mw-reflink-text">[1]</span></a></span></p>
-
-<ol class="mw-references" typeof="mw:Extension/references" about="#mwt6" data-mw-group="a" data-mw='{"name":"references","attrs":{"group":"a"}}'><li about="#cite_note-1" id="cite_note-1"><a href="./Main_Page#cite_ref-1" data-mw-group="a" rel="mw:referencedBy"><span class="mw-linkback-text">↑ </span></a> <span id="mw-reference-text-cite_note-1" class="mw-reference-text">afoo</span></li>
-</ol>
-
-<p>C <span about="#mwt8" class="mw-ref" id="cite_ref-3" rel="dc:references" typeof="mw:Extension/ref" data-mw='{"name":"ref","body":{"id":"mw-reference-text-cite_note-3"},"attrs":{}}'><a href="./Main_Page#cite_note-3"><span class="mw-reflink-text">[2]</span></a></span></p>
-
-<ol class="mw-references" typeof="mw:Extension/references" about="#mwt10" data-mw='{"name":"references","attrs":{}}'><li about="#cite_note-2" id="cite_note-2"><a href="./Main_Page#cite_ref-2" rel="mw:referencedBy"><span class="mw-linkback-text">↑ </span></a> <span id="mw-reference-text-cite_note-2" class="mw-reference-text">bfoo</span></li><li about="#cite_note-3" id="cite_note-3"><a href="./Main_Page#cite_ref-3" rel="mw:referencedBy"><span class="mw-linkback-text">↑ </span></a> <span id="mw-reference-text-cite_note-3" class="mw-reference-text">cfoo</span></li>
-</ol>
-!!end
-
-## Don't expect this to rt since we're dropping content
-!! test
-References: 5. ref tags in references should be processed while ignoring all other content
-!! options
-parsoid=wt2html,html2html
-!! wikitext
-A <ref name="a" />
-B <ref name="b">bar</ref>
-
-<references>
-<ref name="a">foo</ref>
-This should just get lost.
-</references>
-!! html/parsoid
-<p>A <span about="#mwt2" class="mw-ref" id="cite_ref-a_1-0" rel="dc:references" typeof="mw:Extension/ref" data-mw='{"name":"ref","attrs":{"name":"a"}}'><a href="./Main_Page#cite_note-a-1"><span class="mw-reflink-text">[1]</span></a></span>
-B <span about="#mwt4" class="mw-ref" id="cite_ref-b_2-0" rel="dc:references" typeof="mw:Extension/ref" data-mw='{"name":"ref","body":{"id":"mw-reference-text-cite_note-b-2"},"attrs":{"name":"b"}}'><a href="./Main_Page#cite_note-b-2"><span class="mw-reflink-text">[2]</span></a></span></p>
-
-
-<ol class="mw-references" typeof="mw:Extension/references" about="#mwt6" data-mw='{"name":"references","attrs":{},"body":{"html":"\n<span about=\"#mwt8\" class=\"mw-ref\" rel=\"dc:references\" typeof=\"mw:Extension/ref\" data-parsoid='{\"dsr\":[59,82,14,6]}' data-mw='{\"name\":\"ref\",\"body\":{\"id\":\"mw-reference-text-cite_note-a-1\"},\"attrs\":{\"name\":\"a\"}}'><a href=\"./Main_Page#cite_note-a-1\" style=\"counter-reset: mw-Ref 1;\" data-parsoid=\"{}\"><span class=\"mw-reflink-text\" data-parsoid=\"{}\">[1]</span></a></span>\n"}}'><li about="#cite_note-a-1" id="cite_note-a-1"><a href="./Main_Page#cite_ref-a_1-0" rel="mw:referencedBy"><span class="mw-linkback-text">↑ </span></a> <span id="mw-reference-text-cite_note-a-1" class="mw-reference-text">foo</span></li><li about="#cite_note-b-2" id="cite_note-b-2"><a href="./Main_Page#cite_ref-b_2-0" rel="mw:referencedBy"><span class="mw-linkback-text">↑ </span></a> <span id="mw-reference-text-cite_note-b-2" class="mw-reference-text">bar</span></li>
-</ol>
-!! end
-
-!! test
-References: 6. <references /> from a transclusion
-!! wikitext
-<ref>Foo</ref> {{echo|<references />}}
-!! html/parsoid
-<p><span about="#mwt3" class="mw-ref" id="cite_ref-1" rel="dc:references" typeof="mw:Extension/ref" data-mw='{"name":"ref","body":{"id":"mw-reference-text-cite_note-1"},"attrs":{}}'><a href="./Main_Page#cite_note-1"><span class="mw-reflink-text">[1]</span></a></span></p> <ol class="mw-references" typeof="mw:Extension/references mw:Transclusion" about="#mwt4" data-mw='{"parts":[{"template":{"target":{"wt":"echo","href":"./Template:Echo"},"params":{"1":{"wt":"<references />"}},"i":0}}]}'><li about="#cite_note-1" id="cite_note-1"><a href="./Main_Page#cite_ref-1" rel="mw:referencedBy"><span class="mw-linkback-text">↑ </span></a> <span id="mw-reference-text-cite_note-1" class="mw-reference-text">Foo</span></li>
-</ol>
-!! end
-
-!! test
-References: 7. Multiple references tags (one without and one with nested refs) should be correctly handled
-!! wikitext
-A <ref>foo bar for a</ref>
-B <ref group="X" name="b" />
-
-<references />
-
-<references group="X">
-<ref name="b">foo</ref>
-</references>
-!! html/parsoid
-<p>A <span about="#mwt2" class="mw-ref" id="cite_ref-1" rel="dc:references" typeof="mw:Extension/ref" data-mw='{"name":"ref","body":{"id":"mw-reference-text-cite_note-1"},"attrs":{}}'><a href="./Main_Page#cite_note-1"><span class="mw-reflink-text">[1]</span></a></span>
-B <span about="#mwt4" class="mw-ref" id="cite_ref-b_2-0" rel="dc:references" typeof="mw:Extension/ref" data-mw='{"name":"ref","attrs":{"group":"X","name":"b"}}'><a href="./Main_Page#cite_note-b-2" data-mw-group="X"><span class="mw-reflink-text">[X 1]</span></a></span>
-</p>
-
-<ol class="mw-references" typeof="mw:Extension/references" about="#mwt6" data-mw='{"name":"references","attrs":{}}'>
-<li about="#cite_note-1" id="cite_note-1"><a href="./Main_Page#cite_ref-1" rel="mw:referencedBy"><span class="mw-linkback-text">↑ </span></a> <span id="mw-reference-text-cite_note-1" class="mw-reference-text">foo bar for a</span></li>
-</ol>
-
-<ol class="mw-references" typeof="mw:Extension/references" about="#mwt8" data-mw-group="X" data-mw='{"name":"references","attrs":{"group":"X"},"body":{"html":"\n<span about=\"#mwt10\" class=\"mw-ref\" rel=\"dc:references\" typeof=\"mw:Extension/ref\" data-parsoid='{\"dsr\":[96,119,14,6]}' data-mw='{\"name\":\"ref\",\"body\":{\"id\":\"mw-reference-text-cite_note-b-2\"},\"attrs\":{\"name\":\"b\"}}'><a href=\"./Main_Page#cite_note-b-2\" style=\"counter-reset: mw-Ref 1;\" data-mw-group=\"X\" data-parsoid=\"{}\"><span class=\"mw-reflink-text\" data-parsoid=\"{}\">[X 1]</span></a></span>\n"}}'>
-<li about="#cite_note-b-2" id="cite_note-b-2"><a href="./Main_Page#cite_ref-b_2-0" data-mw-group="X" rel="mw:referencedBy"><span class="mw-linkback-text">↑ </span></a> <span id="mw-reference-text-cite_note-b-2" class="mw-reference-text">foo</span></li>
-</ol>
-!! end
-
-!! test
-References: 8. T88019: Remove <meta>s from templates inside <ref> that's itself inside a template
-!! wikitext
-X{{echo|<ref>foo {{echo|<b>bar</b>}} and {{echo|baz}} boo</ref>}}
-<references />
-!! html/parsoid
-<p>X<span about="#mwt2" class="mw-ref" id="cite_ref-1" rel="dc:references" typeof="mw:Transclusion mw:Extension/ref" data-mw='{"parts":[{"template":{"target":{"wt":"echo","href":"./Template:Echo"},"params":{"1":{"wt":"<ref>foo {{echo|<b>bar</b>}} and {{echo|baz}} boo</ref>"}},"i":0}}]}'><a href="./Main_Page#cite_note-1"><span class="mw-reflink-text">[1]</span></a></span></p>
-<ol class="mw-references" typeof="mw:Extension/references" about="#mwt7" data-mw='{"name":"references","attrs":{}}'><li about="#cite_note-1" id="cite_note-1"><a href="./Main_Page#cite_ref-1" rel="mw:referencedBy"><span class="mw-linkback-text">↑ </span></a> <span id="mw-reference-text-cite_note-1" class="mw-reference-text">foo <b data-parsoid='{"stx":"html"}'>bar</b> and baz boo</span></li>
-</ol>
-!!end
-
-# This test only works in wt2html now as the <references /> are always generated
-# unless selser is active. Once T72722 is fixed, we should add a changes test
-# here to ensure that unrelated changes don't add the new <references />
-# when selser is active.
-!! test
-References: 9. Generate missing references list at the end
-!! wikitext
-A <ref>foo</ref>
-B <ref group="inexistent">bar</ref>
-!! html/parsoid
-<p>A <span class="mw-ref" id="cite_ref-1" rel="dc:references" typeof="mw:Extension/ref" data-mw='{"name":"ref","body":{"id":"mw-reference-text-cite_note-1"},"attrs":{}}'><a href="./Main_Page#cite_note-1"><span class="mw-reflink-text">[1]</span></a></span> B <span class="mw-ref" id="cite_ref-2" rel="dc:references" typeof="mw:Extension/ref" data-mw='{"name":"ref","body":{"id":"mw-reference-text-cite_note-2"},"attrs":{"group":"inexistent"}}'><a href="./Main_Page#cite_note-2" data-mw-group="inexistent"><span class="mw-reflink-text">[inexistent 1]</span></a></span></p>
-<ol class="mw-references" typeof="mw:Extension/references" about="#mwt5" data-mw='{"name":"references","attrs":{},"autoGenerated":true}'>
-<li about="#cite_note-1" id="cite_note-1"><a href="./Main_Page#cite_ref-1" rel="mw:referencedBy"><span class="mw-linkback-text">↑ </span></a> <span id="mw-reference-text-cite_note-1" class="mw-reference-text">foo</span></li>
-</ol>
-<ol class="mw-references" typeof="mw:Extension/references" about="#mwt6" data-mw-group="inexistent" data-mw='{"name":"references","attrs":{"group":"inexistent"},"autoGenerated":true}'>
-<li about="#cite_note-2" id="cite_note-2"><a href="./Main_Page#cite_ref-2" data-mw-group="inexistent" rel="mw:referencedBy"><span class="mw-linkback-text">↑ </span></a> <span id="mw-reference-text-cite_note-2" class="mw-reference-text">bar</span></li>
-</ol>
-!! end
-
-!! test
-References: 10. New <references/> shouldn't be added for unrelated edits.
-!! options
-parsoid={
- "modes": ["selser"],
- "changes": [["#x", "remove"]],
- "selser": "noauto"
-}
-!! wikitext
-Unrelated text<span id="x"> that's going to disappear</span>.
-A <ref>foo</ref>
-!! wikitext/edited
-Unrelated text.
-A <ref>foo</ref>
-!!end
-
-!! test
-Entities in ref name
-!! wikitext
-<ref name="test & me">hi</ref>
-<references />
-!! html/parsoid
-<p><span about="#mwt2" class="mw-ref" id="cite_ref-test_.26_me_1-0" rel="dc:references" typeof="mw:Extension/ref" data-mw='{"name":"ref","body":{"id":"mw-reference-text-cite_note-test_.26_me-1"},"attrs":{"name":"test &amp; me"}}'><a href="./Main_Page#cite_note-test_.26_me-1"><span class="mw-reflink-text">[1]</span></a></span></p>
-<ol class="mw-references" typeof="mw:Extension/references" about="#mwt4" data-mw='{"name":"references","attrs":{}}'>
-<li about="#cite_note-test_.26_me-1" id="cite_note-test_.26_me-1"><a href="./Main_Page#cite_ref-test_.26_me_1-0" rel="mw:referencedBy"><span class="mw-linkback-text">↑ </span></a> <span id="mw-reference-text-cite_note-test_.26_me-1" class="mw-reference-text">hi</span></li>
-</ol>
-!! end
-
-## The output here may look funny, but it's what the php parser will do. The
-## unclosed references tag becomes escaped text, and then a new references
-## tag is auto-generated. The test is wt2html only because it roundtrips with
-## nowiki tags, and the auto-generated references tag is only dropped in
-## rtTestMode.
-!! test
-Generate references for unclosed references tag
-!! options
-parsoid=wt2html
-!! wikitext
-a<ref>foo</ref>
-
-<references>
-!! html/parsoid
-<p>a<span about="#mwt2" class="mw-ref" id="cite_ref-1" rel="dc:references" typeof="mw:Extension/ref" data-mw='{"name":"ref","body":{"id":"mw-reference-text-cite_note-1"},"attrs":{}}'><a href="./Main_Page#cite_note-1" style="counter-reset: mw-Ref 1;"><span class="mw-reflink-text">[1]</span></a></span></p>
-
-<p><references></p>
-<ol class="mw-references" typeof="mw:Extension/references" about="#mwt3" data-mw='{"name":"references","attrs":{},"autoGenerated":true}'><li about="#cite_note-1" id="cite_note-1"><a href="./Main_Page#cite_ref-1" rel="mw:referencedBy"><span class="mw-linkback-text">↑ </span></a> <span id="mw-reference-text-cite_note-1" class="mw-reference-text">foo</span></li></ol>
-!! end
-
-!! test
-New reference serializes on its own line
-!! options
-parsoid=wt2wt,html2wt
-!! wikitext
-foo
-<references />
-!! html/parsoid
-foo<ol class="mw-references" typeof="mw:Extension/references" about="#mwt2" data-mw='{"name":"references","attrs":{}}'></ol>
-!! end
-
#### ----------------------------------------------------------------
#### Parsoid-only testing of Parsoid's impl of LST
#### Not implemented yet, see
!! end
!! test
-Links 6. Add <nowiki/>s between text-nodes and url-links when required (bug 64300)
+Links 6. Add <nowiki/>s between text-nodes and url-links when required (T66300)
!! options
parsoid=html2wt
!! html/parsoid
!! end
!! test
-Links 7a. Don't add spurious <nowiki/>s between text-nodes and url-links (bug 64300)
+Links 7a. Don't add spurious <nowiki/>s between text-nodes and url-links (T66300)
!! options
parsoid=html2wt
!! html/parsoid
!! end
!! test
-Links 7b. Don't add spurious <nowiki/>s between text-nodes and url-links (bug 64300)
+Links 7b. Don't add spurious <nowiki/>s between text-nodes and url-links (T66300)
!! options
parsoid=html2wt
!! html/parsoid
!! end
!! test
-Links 8. Add <nowiki/>s between text-nodes and RFC-links when required (bug 64300)
+Links 8. Add <nowiki/>s between text-nodes and RFC-links when required (T66300)
!! options
parsoid=html2wt
!! html/parsoid
!! end
!! test
-Links 9. Don't add spurious <nowiki/>s between text-nodes and RFC-links (bug 64300)
+Links 9. Don't add spurious <nowiki/>s between text-nodes and RFC-links (T66300)
!! options
parsoid=html2wt
!! html/parsoid
!! end
!! test
-Links 10. Add <nowiki/>s between text-nodes and PMID-links when required (bug 64300)
+Links 10. Add <nowiki/>s between text-nodes and PMID-links when required (T66300)
!! options
parsoid=html2wt
!! html/parsoid
!! end
!! test
-Links 11. Don't add spurious <nowiki/>s between text-nodes and PMID-links (bug 64300)
+Links 11. Don't add spurious <nowiki/>s between text-nodes and PMID-links (T66300)
!! options
parsoid=html2wt
!! html/parsoid
!! end
!! test
-Links 12. Add <nowiki/>s between text-nodes and ISBN-links when required (bug 64300)
+Links 12. Add <nowiki/>s between text-nodes and ISBN-links when required (T66300)
!! options
parsoid=html2wt
!! html/parsoid
!! end
!! test
-Links 13. Don't add spurious <nowiki/>s between text-nodes and ISBN-links (bug 64300)
+Links 13. Don't add spurious <nowiki/>s between text-nodes and ISBN-links (T66300)
!! options
parsoid=html2wt
!! html/parsoid
## The quote-char in the input is necessary for triggering the bug
!! test
-(Bug 52035) Nowiki-escaping should not get tripped by " :" in text
+(T54035) Nowiki-escaping should not get tripped by " :" in text
!! options
parsoid=html2wt
!! html/parsoid
</table>
!!end
-# Parsoid only for bug 64747
+# Parsoid only for T66747
!! test
Properly encapsulate empty-content transclusions in fosterable positions
!! wikitext
# 'mi' is a localinterwiki prefix as well as a language
!! test
-Serialize interwiki links pointing to the current wiki as plain wiki links (bug 65869)
+Serialize interwiki links pointing to the current wiki as plain wiki links (T67869)
!! options
parsoid=html2wt
!! html/parsoid
!!end
!! test
-Image: Modifying alignment of an image (bug 48665)
+Image: Modifying alignment of an image (T50665)
!! options
parsoid={
"modes": ["wt2wt"],
!! end
!! test
-Image: Modifying mw-default-size of an frameless image (bug 62805)
+Image: Modifying mw-default-size of an frameless image (T64805)
!! options
parsoid={
"modes": ["wt2wt"],
!! end
!! test
-Image: Modifying valign of an image (bug 49221)
+Image: Modifying valign of an image (T51221)
!! options
parsoid={
"modes": ["wt2wt"],
!! end
!! test
-Image: Modifying alt attribute of an image (bug 56400)
+Image: Modifying alt attribute of an image (T58400)
!! options
parsoid={
"modes": ["wt2wt"],
!!end
!! test
-Image: empty alt attribute (bug 48924)
+Image: empty alt attribute (T50924)
!! options
parsoid
!! wikitext
!! end
!! test
-Image: new attributes should be serialized in wiki's language for RTL languages (bug 51852)
+Image: new attributes should be serialized in wiki's language for RTL languages (T53852)
!! options
parsoid=html2wt
language=ar
#------------------------------
!!test
-Bug 54262: New entities
+T56262: New entities
!! options
parsoid=html2wt
!! html/parsoid
parsoid={
"modes": ["wt2wt"],
"changes": [
- [ "meta", "remove" ]
+ [ "span", "remove" ]
]
}
!! wikitext
class_exists( Memcached::class ) ? [] : [ 'tests/phan/stubs/memcached.php' ],
[
'maintenance/7zip.inc',
- 'maintenance/backupPrefetch.inc',
- 'maintenance/commandLine.inc',
- 'maintenance/sqlite.inc',
- 'maintenance/userOptions.inc',
'maintenance/backup.inc',
+ 'maintenance/backupPrefetch.inc',
'maintenance/cleanupTable.inc',
+ 'maintenance/CodeCleanerGlobalsPass.inc',
+ 'maintenance/commandLine.inc',
'maintenance/importImages.inc',
+ 'maintenance/sqlite.inc',
'maintenance/userDupes.inc',
+ 'maintenance/userOptions.inc',
'maintenance/language/checkLanguage.inc',
'maintenance/language/languages.inc',
]
}
/**
- * per bug 26425
+ * per T28425
*/
public function testBug26425BlockTimestampDefaultsToTime() {
// delta to stop one-off errors when things happen to go over a second mark.
/**
* CheckUser since being changed to use Block::newFromTarget started failing
* because the new function didn't accept empty strings like Block::load()
- * had. Regression bug 29116.
+ * had. Regression T31116.
*
* @dataProvider provideBug29116Data
* @covers Block::newFromTarget
false
],
[
- "An initial section with a fake heder (bug 32617)\n\n== Test == ??\nwtf",
+ "An initial section with a fake heder (T34617)\n\n== Test == ??\nwtf",
false
],
[
"Section"
],
[
- "== Section== \t\r\n followed by whitespace (bug 35051)",
+ "== Section== \t\r\n followed by whitespace (T37051)",
'Section',
],
];
}
/**
- * @see Bug 8689
+ * @see T10689
* @covers Parser::parse
*/
public function testLongNumericLinesDontKillTheParser() {
/**
* This test checks wfTimestamp() with values outside.
* It needs PHP 64 bits or PHP > 5.1.
- * See r74778 and bug 25451
+ * See r74778 and T27451
* @dataProvider provideOldTimestamps
*/
public function testOldTimestamps( $input, $outputType, $output, $message ) {
$timestamp = wfTimestamp( $outputType, $input );
if ( substr( $output, 0, 1 ) === '/' ) {
- // Bug 64946: Day of the week calculations for very old
+ // T66946: Day of the week calculations for very old
// timestamps varies from system to system.
$this->assertRegExp( $output, $timestamp, $message );
} else {
}
/**
- * FIXME: This should not need database, but Language#formatExpiry does (bug 55912)
+ * FIXME: This should not need database, but Language#formatExpiry does (T57912)
* @group Database
* @covers Message::expiryParam
* @covers Message::expiryParams
}
/**
- * Placeholder to verify bug 34302
+ * Placeholder to verify T36302
* @covers Preferences::profilePreferences
*/
public function testEmailAuthenticationFieldWhenUserHasNoEmail() {
}
/**
- * Placeholder to verify bug 34302
+ * Placeholder to verify T36302
* @covers Preferences::profilePreferences
*/
public function testEmailAuthenticationFieldWhenUserEmailNotAuthenticated() {
}
/**
- * Placeholder to verify bug 34302
+ * Placeholder to verify T36302
* @covers Preferences::profilePreferences
*/
public function testEmailAuthenticationFieldWhenUserEmailIsAuthenticated() {
],
] ],
[ [
- 'Exact match not on top (bug 70958)',
+ 'Exact match not on top (T72958)',
'provision' => [
'Barcelona',
'Bar',
],
] ],
[ [
- 'Exact match missing (bug 70958)',
+ 'Exact match missing (T72958)',
'provision' => [
'Barcelona',
'Barbara',
[ [ 'foo6' => 'baz' ], 'foo6=baz', 'Numbers are allowed' ],
# This bit is more relaxed than XML rules, but some extensions use
- # it, like ProofreadPage (see bug 27539)
+ # it, like ProofreadPage (see T29539)
[ [ '1foo' => 'baz' ], '1foo=baz', 'Leading numbers are allowed' ],
[ [], 'foo$=baz', 'Symbols are not allowed' ],
[ [], 'foo@=baz', 'Symbols are not allowed' ],
[ ' ', '/* /* */' ],
[ 'display: block;', "display:/* foo */block;" ],
[ 'display: block;', "display:\\2f\\2a foo \\2a\\2f block;",
- 'Backslash-escaped comments must be stripped (bug 28450)' ],
+ 'Backslash-escaped comments must be stripped (T30450)' ],
[ '', '/* unfinished comment structure',
'Remove anything after a comment-start token' ],
[ '', "\\2f\\2a unifinished comment'",
}
/**
- * bug 26948 : comma were matched by an incorrect regexp range
+ * T28948 : comma were matched by an incorrect regexp range
*/
public function testEmailWithCommasAreInvalids() {
$this->invalid( "user,foo@example.org" );
$this->assertEquals(
$expectedParam,
$par,
- "Bug 31100 regression check: Title->fixSpecialName() should preserve parameter"
+ "T33100 regression check: Title->fixSpecialName() should preserve parameter"
);
}
$this->assertEquals(
'<input name="name" value="0" />',
Xml::input( 'name', false, 0 ),
- 'Input with a value of 0 (bug 23797)'
+ 'Input with a value of 0 (T25797)'
);
}
/**
* Test action=edit§ion=new
* Run it twice so we test adding a new section on a
- * page that doesn't exist (bug 52830) and one that
+ * page that doesn't exist (T54830) and one that
* does exist
*/
public function testEditNewSection() {
$count++;
/*
- * bug 41990: if the target page has a newer revision than the redirect, then editing the
+ * T43990: if the target page has a newer revision than the redirect, then editing the
* redirect while specifying 'redirect' and *not* specifying 'basetimestamp' erroneously
* caused an edit conflict to be detected.
*/
$context->setRequest( new FauxRequest( [ 'errorformat' => 'plaintext' ] ) );
$context->setLanguage( 'en' );
$context->setConfig( new MultiConfig( [
- new HashConfig( [ 'ShowHostnames' => true, 'ShowSQLErrors' => false ] ),
+ new HashConfig( [
+ 'ShowHostnames' => true, 'ShowSQLErrors' => false,
+ 'ShowExceptionDetails' => true, 'ShowDBErrorBacktrace' => true,
+ ] ),
$context->getConfig()
] ) );
}
/**
- *Test bug 25702
+ *Test T27702
*Prefixes of API search requests are not handled with case sensitivity and may result
*in wrong search results
*/
}
/**
- * Test bug 51821
+ * Test T53821
*/
public function testGeneratorRedirects() {
$this->editPage( 'AQBT-Target', 'test' );
$provider->postAuthentication( \User::newFromName( 'SomeUser' ),
AuthenticationResponse::newPass() );
$this->assertSame( [
- [ \Psr\Log\LogLevel::ERROR, 'throttler data not found for {user}' ],
+ [ \Psr\Log\LogLevel::INFO, 'throttler data not found for {user}' ],
], $logger->getBuffer() );
}
}
public function testRecacheFallbacksWithHooks() {
// Use hook to provide updates for messages. This is what the
- // LocalisationUpdate extension does. See bug 68781.
+ // LocalisationUpdate extension does. See T70781.
$this->mergeMwGlobalArrayValue( 'wgHooks', [
'LocalisationCacheRecacheFallback' => [
function (
// Existing message with customizations on the fallbacks
[ 'sunday', 'ab', 'амҽыш' ],
- // bug 46579
+ // T48579
[ 'FallbackLanguageTest-NoDervContLang', 'de', 'de/none' ],
// UI language different from content language should only use de/none as last option
[ 'FallbackLanguageTest-NoDervContLang', 'fit', 'de/none' ],
/**
* Feeds testAddIdentifierQuotes
*
- * Named per bug 20281 convention.
+ * Named per T22281 convention.
*/
function provideDiapers() {
return [
$this->assertNotEquals(
'',
$this->updateText( $text ),
- 'Bug 18609'
+ 'T20609'
);
}
/**
* @covers SearchUpdate::updateText
- * Test bug 32712
+ * Test T34712
* Test if unicode quotes in article links make its search index empty
*/
public function testUnicodeLinkSearchIndexError() {
/**
* Test Http::isValidURI()
- * @bug 27854 : Http::isValidURI is too lax
+ * T29854 : Http::isValidURI is too lax
* @dataProvider provideURI
* @covers Http::isValidURI
*/
*
* These tests are for code that makes use of an artifact of how CURL
* handles header reporting on redirect pages, and will need to be
- * rewritten when bug 29232 is taken care of (high-level handling of
+ * rewritten when T31232 is taken care of (high-level handling of
* HTTP redirects).
*/
public function testRelativeRedirections() {
* Added this test based on an issue experienced with HHVM 3.3.0-dev
* where it did not define a cURL constant.
*
- * @bug 70570
+ * T72570
* @dataProvider provideCurlConstants
*/
public function testCurlConstants( $value ) {
[ "foo, bar {\n\tprop: value; /* comment */\n}", "foo,bar{prop:value; }" ],
// Keep track of things that aren't as minified as much as they
- // could be (bug 35493)
+ // could be (T37493)
[ 'foo { prop: value ;}', 'foo{prop:value }' ],
[ 'foo { prop : value; }', 'foo{prop :value}' ],
[ 'foo { prop: value ; }', 'foo{prop:value }' ],
'foo { prop: url(http://example.org/bar.png); }',
],
[
- 'With trailing slash on remote (bug 27052)',
+ 'With trailing slash on remote (T29052)',
[ 'foo { prop: url(../bar.png); }', false, 'http://example.org/quux/', false ],
'foo { prop: url(http://example.org/bar.png); }',
],
'{ background: /*asd*/ url(http://localhost/w/something.png); background: /*jkl*/ url(http://localhost/w/something.png); }',
],
[
- 'Sanity check for offending line from jquery.ui.theme.css (bug 60077)',
+ 'Sanity check for offending line from jquery.ui.theme.css (T62077)',
'.ui-state-default, .ui-widget-content .ui-state-default, .ui-widget-header .ui-state-default { border: 1px solid #d3d3d3/*{borderColorDefault}*/; background: #e6e6e6/*{bgColorDefault}*/ url(images/ui-bg_glass_75_e6e6e6_1x400.png)/*{bgImgUrlDefault}*/ 50%/*{bgDefaultXPos}*/ 50%/*{bgDefaultYPos}*/ repeat-x/*{bgDefaultRepeat}*/; font-weight: normal/*{fwDefault}*/; color: #555555/*{fcDefault}*/; }',
'.ui-state-default, .ui-widget-content .ui-state-default, .ui-widget-header .ui-state-default { border: 1px solid #d3d3d3/*{borderColorDefault}*/; background: #e6e6e6/*{bgColorDefault}*/ url(http://localhost/w/images/ui-bg_glass_75_e6e6e6_1x400.png)/*{bgImgUrlDefault}*/ 50%/*{bgDefaultXPos}*/ 50%/*{bgDefaultYPos}*/ repeat-x/*{bgDefaultRepeat}*/; font-weight: normal/*{fwDefault}*/; color: #555555/*{fcDefault}*/; }',
],
}
/**
- * Seperated because they are currently broken (bug 35492)
+ * Seperated because they are currently broken (T37492)
*
* @group Broken
* @dataProvider provideStringCases
[ "/* Foo *\n*bar\n*/", "" ],
/**
- * Slashes used inside block comments (bug 26931).
+ * Slashes used inside block comments (T28931).
* At some point there was a bug that caused this comment to be ended at '* /',
* causing /M... to be left as the beginning of a regex.
*/
[ "5.3.\nx;", "5.3.x;" ],
// Semicolon insertion between an expression having an inline
- // comment after it, and a statement on the next line (bug 27046).
+ // comment after it, and a statement on the next line (T29046).
[
"var a = this //foo bar \n for ( b = 0; c < d; b++ ) {}",
"var a=this\nfor(b=0;c<d;b++){}"
// newline insertion after 1000 chars: break after the "++", not before
[ str_repeat( ';', 996 ) . "if(x++);", str_repeat( ';', 996 ) . "if(x++\n);" ],
- // Unicode letter characters should pass through ok in identifiers (bug 31187)
+ // Unicode letter characters should pass through ok in identifiers (T33187)
[ "var KaŝSkatolVal = {}", 'var KaŝSkatolVal={}' ],
// Per spec unicode char escape values should work in identifiers,
/**
* Test to make sure that encoder=ffmpeg2theora doesn't trigger
- * MEDIATYPE_VIDEO (bug 63584)
+ * MEDIATYPE_VIDEO (T65584)
*/
function testOggRecognize() {
$oggFile = __DIR__ . '/../../../data/media/say-test.ogg';
namespace Wikimedia\Tests\Rdbms;
use IDatabase;
-use LoadBalancer;
+use Wikimedia\Rdbms\LoadBalancer;
use PHPUnit_Framework_MockObject_MockObject;
use Wikimedia\Rdbms\ConnectionManager;
namespace Wikimedia\Tests\Rdbms;
use IDatabase;
-use LoadBalancer;
+use Wikimedia\Rdbms\LoadBalancer;
use PHPUnit_Framework_MockObject_MockObject;
use Wikimedia\Rdbms\SessionConsistentConnectionManager;
[ 'invalid-child-not-struct', 'Test child props not in struct or ignored' ],
[ 'no-recognized-props', 'Test namespace and no recognized props' ],
[ 'no-namespace', 'Test non-namespaced attributes are ignored' ],
- [ 'bag-for-seq', "Allow bag's instead of seq's. (bug 27105)" ],
+ [ 'bag-for-seq', "Allow bag's instead of seq's. (T29105)" ],
[ 'utf16BE', 'UTF-16BE encoding' ],
[ 'utf16LE', 'UTF-16LE encoding' ],
[ 'utf32BE', 'UTF-32BE encoding' ],
/**
* The testIrcMsgForAction* tests are supposed to cover the hacky
- * LogFormatter::getIRCActionText / bug 34508
+ * LogFormatter::getIRCActionText / T36508
*
* Third parties bots listen to those messages. They are clever enough
* to fetch the i18n messages from the wiki and then analyze the IRC feed
$this->assertNotNull( $dateIndex, 'Date entry exists in metadata' );
$this->assertEquals( '0000:01:00 00:02:27',
$meta['visible'][$dateIndex]['value'],
- 'File with invalid date metadata (bug 29471)' );
+ 'File with invalid date metadata (T31471)' );
}
/**
],
[
"$base/Toll_Texas_1.svg",
- // This file triggered bug 31719, needs entity expansion in the xmlns checks
+ // This file triggered T33719, needs entity expansion in the xmlns checks
[
'width' => 385,
'height' => 385,
*/
class ArticleTablesTest extends MediaWikiLangTestCase {
/**
- * Make sure that bug 14404 doesn't strike again. We don't want
+ * Make sure that T16404 doesn't strike again. We don't want
* templatelinks based on the user language when {{int:}} is used, only the
* content language.
*
* @covers Title::getLinksFrom
*/
public function testTemplatelinksUsesContentLanguage() {
- $title = Title::newFromText( 'Bug 14404' );
+ $title = Title::newFromText( 'T16404' );
$page = WikiPage::factory( $title );
$user = new User();
$user->mRights = [ 'createpage', 'edit', 'purge' ];
$page->doEditContent(
new WikitextContent( '{{:{{int:history}}}}' ),
- 'Test code for bug 14404',
+ 'Test code for T16404',
0,
false,
$user
// We need an edit, a purge is not enough to regenerate the tables
$page->doEditContent(
new WikitextContent( '{{:{{int:history}}}}' ),
- 'Test code for bug 14404',
+ 'Test code for T16404',
EDIT_UPDATE,
false,
$user
/**
* @group Database
+ * @covers Parser
*/
-
class ParserMethodsTest extends MediaWikiLangTestCase {
public static function providePreSaveTransform() {
/**
* @dataProvider providePreSaveTransform
- * @covers Parser::preSaveTransform
*/
public function testPreSaveTransform( $text, $expected ) {
global $wgParser;
/**
* @dataProvider provideStripOuterParagraph
- * @covers Parser::stripOuterParagraph
*/
public function testStripOuterParagraph( $text, $expected ) {
$this->assertEquals( $expected, Parser::stripOuterParagraph( $text ) );
* @expectedException MWException
* @expectedExceptionMessage Parser state cleared while parsing.
* Did you call Parser::parse recursively?
- * @covers Parser::lock
*/
public function testRecursiveParse() {
global $wgParser;
return 'bar';
}
- /**
- * @covers Parser::callParserFunction
- */
public function testCallParserFunction() {
global $wgParser;
}
/**
- * @covers Parser::parse
+ * @covers Parser
* @covers ParserOutput::getSections
*/
public function testGetSections() {
/**
* @dataProvider provideNormalizeLinkUrl
- * @covers Parser::normalizeLinkUrl
- * @covers Parser::normalizeUrlComponent
*/
public function testNormalizeLinkUrl( $explanation, $url, $expected ) {
$this->assertEquals( $expected, Parser::normalizeLinkUrl( $url ), $explanation );
/**
* Basic tests for Parser::getPreloadText
* @author Antoine Musso
+ *
+ * @covers Parser
+ * @covers StripState
+ *
+ * @covers Preprocessor_DOM
+ * @covers PPDStack
+ * @covers PPDStackElement
+ * @covers PPDPart
+ * @covers PPFrame_DOM
+ * @covers PPTemplateFrame_DOM
+ * @covers PPCustomFrame_DOM
+ * @covers PPNode_DOM
+ *
+ * @covers Preprocessor_Hash
+ * @covers PPDStack_Hash
+ * @covers PPDStackElement_Hash
+ * @covers PPDPart_Hash
+ * @covers PPFrame_Hash
+ * @covers PPTemplateFrame_Hash
+ * @covers PPCustomFrame_Hash
+ * @covers PPNode_Hash_Tree
+ * @covers PPNode_Hash_Text
+ * @covers PPNode_Hash_Array
+ * @covers PPNode_Hash_Attr
*/
class ParserPreloadTest extends MediaWikiTestCase {
/**
unset( $this->title );
}
- /**
- * @covers Parser::getPreloadText
- */
public function testPreloadSimpleText() {
$this->assertPreloaded( 'simple', 'simple' );
}
- /**
- * @covers Parser::getPreloadText
- */
public function testPreloadedPreIsUnstripped() {
$this->assertPreloaded(
'<pre>monospaced</pre>',
'<pre>monospaced</pre>',
- '<pre> in preloaded text must be unstripped (bug 27467)'
+ '<pre> in preloaded text must be unstripped (T29467)'
);
}
- /**
- * @covers Parser::getPreloadText
- */
public function testPreloadedNowikiIsUnstripped() {
$this->assertPreloaded(
'<nowiki>[[Dummy title]]</nowiki>',
'<nowiki>[[Dummy title]]</nowiki>',
- '<nowiki> in preloaded text must be unstripped (bug 27467)'
+ '<nowiki> in preloaded text must be unstripped (T29467)'
);
}
[ "Factorial" ], # https://en.wikipedia.org/w/index.php?title=Template:Factorial&oldid=98548758 GFDL + CC BY-SA by Polonium
[ "All_system_messages" ], # https://tl.wiktionary.org/w/index.php?title=Suleras:All_system_messages&oldid=2765 GPL text generated by MediaWiki
[ "Fundraising" ], # https://tl.wiktionary.org/w/index.php?title=MediaWiki:Sitenotice&oldid=5716 GFDL + CC BY-SA, copied there by Sky Harbor.
- [ "NestedTemplates" ], # bug 27936
+ [ "NestedTemplates" ], # T29936
] );
// @codingStandardsIgnoreEnd
}
/**
* @group Database
* @group Parser
+ *
+ * @covers Parser
+ * @covers StripState
+ *
+ * @covers Preprocessor_DOM
+ * @covers PPDStack
+ * @covers PPDStackElement
+ * @covers PPDPart
+ * @covers PPFrame_DOM
+ * @covers PPTemplateFrame_DOM
+ * @covers PPCustomFrame_DOM
+ * @covers PPNode_DOM
+ *
+ * @covers Preprocessor_Hash
+ * @covers PPDStack_Hash
+ * @covers PPDStackElement_Hash
+ * @covers PPDPart_Hash
+ * @covers PPFrame_Hash
+ * @covers PPTemplateFrame_Hash
+ * @covers PPCustomFrame_Hash
+ * @covers PPNode_Hash_Tree
+ * @covers PPNode_Hash_Text
+ * @covers PPNode_Hash_Array
+ * @covers PPNode_Hash_Attr
*/
class TagHookTest extends MediaWikiTestCase {
public static function provideValidNames() {
/**
* @dataProvider provideValidNames
- * @covers Parser::setHook
*/
public function testTagHooks( $tag ) {
global $wgParserConf, $wgContLang;
/**
* @dataProvider provideBadNames
* @expectedException MWException
- * @covers Parser::setHook
*/
public function testBadTagHooks( $tag ) {
global $wgParserConf, $wgContLang;
/**
* @dataProvider provideValidNames
- * @covers Parser::setFunctionTagHook
*/
public function testFunctionTagHooks( $tag ) {
global $wgParserConf, $wgContLang;
/**
* @dataProvider provideBadNames
* @expectedException MWException
- * @covers Parser::setFunctionTagHook
*/
public function testBadFunctionTagHooks( $tag ) {
global $wgParserConf, $wgContLang;
'context' => [ 'debug' => true ],
'modules' => [ 'test.styles.pure', 'test.styles.mixed' ],
'only' => ResourceLoaderModule::TYPE_STYLES,
- 'output' => '<link rel="stylesheet" href="/w/load.php?debug=true&lang=nl&modules=test.styles.pure&only=styles&skin=fallback"/>' . "\n"
- . '<link rel="stylesheet" href="/w/load.php?debug=true&lang=nl&modules=test.styles.mixed&only=styles&skin=fallback"/>',
+ 'output' => '<link rel="stylesheet" href="/w/load.php?debug=true&lang=nl&modules=test.styles.mixed&only=styles&skin=fallback"/>' . "\n"
+ . '<link rel="stylesheet" href="/w/load.php?debug=true&lang=nl&modules=test.styles.pure&only=styles&skin=fallback"/>',
+ ],
+ [
+ 'context' => [ 'debug' => false ],
+ 'modules' => [ 'test.styles.pure', 'test.styles.mixed' ],
+ 'only' => ResourceLoaderModule::TYPE_STYLES,
+ 'output' => '<link rel="stylesheet" href="/w/load.php?debug=false&lang=nl&modules=test.styles.mixed%2Cpure&only=styles&skin=fallback"/>',
],
[
'context' => [],
// to avoid notices during testMakeModuleResponse for missing
// wgResourceLoaderLESSVars keys in extension hooks.
'wgHooks' => [],
+ 'wgShowExceptionDetails' => true,
] );
}
],
] ],
[ [
- 'Exact match not on top (bug 70958)',
+ 'Exact match not on top (T72958)',
'provision' => [
'Barcelona',
'Bar',
],
] ],
[ [
- 'Exact match missing (bug 70958)',
+ 'Exact match missing (T72958)',
'provision' => [
'Barcelona',
'Barbara',
$this->assertFalse( $loadSessionInfoFromStore( $info ) );
$this->assertSame( [
[
- LogLevel::WARNING,
+ LogLevel::INFO,
'Session "{session}": Unverified user provided and no metadata to auth it',
]
], $logger->getBuffer() );
[ '9780136091817', false ],
[ '123456789X', true ],
- // Bug 67021
+ // T69021
[ '1413304541', false ],
[ '141330454X', false ],
[ '1413304540', true ],
}
/**
- * @bug 2429
+ * T4429
* @dataProvider provideNamespacesAssociations
*/
public function testRcNsFilterAssociation( $ns1, $ns2 ) {
}
/**
- * @bug 2429
+ * T4429
* @dataProvider provideNamespacesAssociations
*/
public function testRcNsFilterAssociationWithInversion( $ns1, $ns2 ) {
[
$EMPTY_REQUEST, $NO_USER_PREF,
'default', $defaultNS,
- 'Bug 33270: No request nor user preferences should give default profile'
+ 'T35270: No request nor user preferences should give default profile'
],
[
[ 'ns5' => 1 ], $NO_USER_PREF,
return "searchNs$ns";
}, $defaultNS ), 0 ),
'advanced', [ 2, 14 ],
- 'Bug 33583: search with no option should honor User search preferences'
+ 'T35583: search with no option should honor User search preferences'
. ' and have all other namespace disabled'
],
];
}
/**
- * @covers MediaWiki\Tidy\Balancer::balance
+ * @covers MediaWiki\Tidy\Balancer
+ * @covers MediaWiki\Tidy\BalanceSets
+ * @covers MediaWiki\Tidy\BalanceElement
+ * @covers MediaWiki\Tidy\BalanceStack
+ * @covers MediaWiki\Tidy\BalanceMarker
+ * @covers MediaWiki\Tidy\BalanceActiveFormattingElements
* @dataProvider provideBalancerTests
*/
public function testBalancer( $description, $input, $expected, $useTidy ) {
'<?xml version="1.0" encoding="UTF-8" standalone="no"?> <svg xmlns:xlink="http://www.w3.org/1999/xlink"> <image xlink:href="https://upload.wikimedia.org/wikipedia/commons/3/34/Bahnstrecke_Zeitz-Camburg_1930.png" /> </svg>',
true,
true,
- 'SVG with non-local image href (bug 65839)'
+ 'SVG with non-local image href (T67839)'
],
[
'<?xml version="1.0" ?> <?xml-stylesheet type="text/xsl" href="/w/index.php?title=User:Jeeves/test.xsl&action=raw&format=xml" ?> <svg> <height>50</height> <width>100</width> </svg>',
true,
true,
- 'SVG with remote stylesheet (bug 57550)'
+ 'SVG with remote stylesheet (T59550)'
],
[
'<svg xmlns="http://www.w3.org/2000/svg" viewbox="-1 -1 15 15"> <rect y="0" height="13" width="12" stroke="#179" rx="1" fill="#2ac"/> <text x="1.5" y="11" font-family="courier" stroke="white" font-size="16"><![CDATA[B]]></text> <iframe xmlns="http://www.w3.org/1999/xhtml" srcdoc="<script>alert('XSSED => Domain('+top.document.domain+')');</script>"></iframe> </svg>',
true,
true,
- 'SVG with rembeded iframe (bug 60771)'
+ 'SVG with rembeded iframe (T62771)'
],
[
'<svg xmlns="http://www.w3.org/2000/svg" viewBox="6 3 177 153" xmlns:xlink="http://www.w3.org/1999/xlink"> <style>@import url("https://fonts.googleapis.com/css?family=Bitter:700&text=WebPlatform.org");</style> <g transform="translate(-.5,-.5)"> <text fill="#474747" x="95" y="150" text-anchor="middle" font-family="Bitter" font-size="20" font-weight="bold">WebPlatform.org</text> </g> </svg>',
true,
true,
- 'SVG with @import in style element (bug 69008)'
+ 'SVG with @import in style element (T71008)'
],
[
'<svg xmlns="http://www.w3.org/2000/svg" viewBox="6 3 177 153" xmlns:xlink="http://www.w3.org/1999/xlink"> <style>@import url("https://fonts.googleapis.com/css?family=Bitter:700&text=WebPlatform.org");<foo/></style> <g transform="translate(-.5,-.5)"> <text fill="#474747" x="95" y="150" text-anchor="middle" font-family="Bitter" font-size="20" font-weight="bold">WebPlatform.org</text> </g> </svg>',
true,
true,
- 'SVG with @import in style element and child element (bug 69008#c11)'
+ 'SVG with @import in style element and child element (T71008#c11)'
],
[
'<svg xmlns="http://www.w3.org/2000/svg" viewBox="6 3 177 153" xmlns:xlink="http://www.w3.org/1999/xlink"> <style>@imporT "https://fonts.googleapis.com/css?family=Bitter:700&text=WebPlatform.org";</style> <g transform="translate(-.5,-.5)"> <text fill="#474747" x="95" y="150" text-anchor="middle" font-family="Bitter" font-size="20" font-weight="bold">WebPlatform.org</text> </g> </svg>',
'<svg xmlns="http://www.w3.org/2000/svg"> <rect width="100" height="100" style="background-image:url(https://www.google.com/images/srpr/logo11w.png)"/> </svg>',
true,
true,
- 'SVG with remote background image (bug 69008)'
+ 'SVG with remote background image (T71008)'
],
[
'<svg xmlns="http://www.w3.org/2000/svg"> <rect width="100" height="100" style="background-image:\55rl(https://www.google.com/images/srpr/logo11w.png)"/> </svg>',
true,
true,
- 'SVG with remote background image, encoded (bug 69008)'
+ 'SVG with remote background image, encoded (T71008)'
],
[
'<svg xmlns="http://www.w3.org/2000/svg"> <style> #a { background-image:\55rl(\'https://www.google.com/images/srpr/logo11w.png\'); } </style> <rect width="100" height="100" id="a"/> </svg>',
true,
true,
- 'SVG with remote background image, in style element (bug 69008)'
+ 'SVG with remote background image, in style element (T71008)'
],
[
// This currently doesn't seem to work in any browsers, but in case
'<svg xmlns="http://www.w3.org/2000/svg"> <rect width="100" height="100" style="background-image:image(\'sprites.svg#xywh=40,0,20,20\')"/> </svg>',
true,
true,
- 'SVG with remote background image using image() (bug 69008)'
+ 'SVG with remote background image using image() (T71008)'
],
[
// As reported by Cure53
protected function setUp() {
parent::setUp();
- // Setup a file for bug 29408
+ // Setup a file for T31408
$this->bug29408File = wfTempDir() . '/bug29408';
file_put_contents( $this->bug29408File, "\x00" );
// Throws exception caught by PHPUnit on failure
$file = $stash->stashFile( $this->bug29408File );
- // We'll never reach this point if we hit bug 29408
+ // We'll never reach this point if we hit T31408
$this->assertTrue( true, 'Unrecognized file without extension' );
$stash->removeFile( $file->getFileKey() );
}
/**
- * Bug 37963
+ * T39963
* Make sure defaults are loaded when setOption is called.
* @covers User::loadOptions
*/
// Clean up.
$block->delete();
}
+
+ public function testIsPingLimitable() {
+ $request = new FauxRequest();
+ $request->setIP( '1.2.3.4' );
+ $user = User::newFromSession( $request );
+
+ $this->setMwGlobals( 'wgRateLimitsExcludedIPs', [] );
+ $this->assertTrue( $user->isPingLimitable() );
+
+ $this->setMwGlobals( 'wgRateLimitsExcludedIPs', [ '1.2.3.4' ] );
+ $this->assertFalse( $user->isPingLimitable() );
+
+ $this->setMwGlobals( 'wgRateLimitsExcludedIPs', [ '1.2.3.0/8' ] );
+ $this->assertFalse( $user->isPingLimitable() );
+
+ $this->setMwGlobals( 'wgRateLimitsExcludedIPs', [] );
+ $noRateLimitUser = $this->getMockBuilder( User::class )->disableOriginalConstructor()
+ ->setMethods( [ 'getIP', 'getRights' ] )->getMock();
+ $noRateLimitUser->expects( $this->any() )->method( 'getIP' )->willReturn( '1.2.3.4' );
+ $noRateLimitUser->expects( $this->any() )->method( 'getRights' )->willReturn( [ 'noratelimit' ] );
+ $this->assertFalse( $noRateLimitUser->isPingLimitable() );
+ }
+
+ public function provideExperienceLevel() {
+ return [
+ [ 2, 2, 'newcomer' ],
+ [ 12, 3, 'newcomer' ],
+ [ 8, 5, 'newcomer' ],
+ [ 15, 10, 'learner' ],
+ [ 450, 20, 'learner' ],
+ [ 460, 33, 'learner' ],
+ [ 525, 28, 'learner' ],
+ [ 538, 33, 'experienced' ],
+ ];
+ }
+
+ /**
+ * @dataProvider provideExperienceLevel
+ */
+ public function testExperienceLevel( $editCount, $memberSince, $expLevel ) {
+ $this->setMwGlobals( [
+ 'wgLearnerEdits' => 10,
+ 'wgLearnerMemberSince' => 4,
+ 'wgExperiencedUserEdits' => 500,
+ 'wgExperiencedUserMemberSince' => 30,
+ ] );
+
+ $db = wfGetDB( DB_MASTER );
+
+ $data = new stdClass();
+ $data->user_id = 1;
+ $data->user_name = 'name';
+ $data->user_real_name = 'Real Name';
+ $data->user_touched = 1;
+ $data->user_token = 'token';
+ $data->user_email = 'a@a.a';
+ $data->user_email_authenticated = null;
+ $data->user_email_token = 'token';
+ $data->user_email_token_expires = null;
+ $data->user_editcount = $editCount;
+ $data->user_registration = $db->timestamp( time() - $memberSince * 86400 );
+ $user = User::newFromRow( $data );
+
+ $this->assertEquals( $expLevel, $user->getExperienceLevel() );
+ }
+
+ public function testExperienceLevelAnon() {
+ $user = User::newFromName( '10.11.12.13', false );
+
+ $this->assertFalse( $user->getExperienceLevel() );
+ }
}
--- /dev/null
+<?php
+
+/**
+ * @covers ClassCollector
+ */
+class ClassCollectorTest extends PHPUnit_Framework_TestCase {
+
+ public static function provideCases() {
+ return [
+ [
+ "class Foo {}",
+ [ 'Foo' ],
+ ],
+ [
+ "namespace Example;\nclass Foo {}\nclass Bar {}",
+ [ 'Example\Foo', 'Example\Bar' ],
+ ],
+ [
+ "class_alias( 'Foo', 'Bar' );",
+ [ 'Bar' ],
+ ],
+ [
+ "namespace Example;\nclass Foo {}\nclass_alias( 'Example\Foo', 'Foo' );",
+ [ 'Example\Foo', 'Foo' ],
+ ],
+ [
+ "namespace Example;\nclass Foo {}\nclass_alias( 'Example\Foo', 'Bar' );",
+ [ 'Example\Foo', 'Bar' ],
+ ],
+ [
+ "class_alias( Foo::class, 'Bar' );",
+ [ 'Bar' ],
+ ],
+ [
+ "namespace Example;\nclass Foo {}\nclass_alias( Foo::class, 'Bar' );",
+ [ 'Example\Foo', 'Bar' ],
+ ],
+ ];
+ }
+
+ /**
+ * @dataProvider provideCases
+ */
+ public function testGetClasses( $code, array $classes, $message = null ) {
+ $cc = new ClassCollector();
+ $this->assertEquals( $classes, $cc->getClasses( "<?php\n$code" ), $message );
+ }
+}
"Acteur%7CAlbert%20Robbins%7CAnglais%7CAnn%20Donahue%7CAnthony%20E.%20Zuiker%7CCarol%20Mendelsohn"
)
],
- // The following two data sets come from bug 36839. They fail if checkTitleEncoding uses a regexp to test for
+ // The following two data sets come from T38839. They fail if checkTitleEncoding uses a regexp to test for
// valid UTF-8 encoding and the pcre.recursion_limit is low (like, say, 1024). They succeed if checkTitleEncoding
// uses mb_check_encoding for its test.
[
}
/**
- * @see bug 23156 & r64981
+ * @see T25156 & r64981
* @covers Language::commafy
*/
public function testSearchRightSingleQuotationMarkAsApostroph() {
$this->assertEquals(
"'",
$this->getLang()->normalizeForSearch( '’' ),
- 'bug 23156: U+2019 conversion to U+0027'
+ 'T25156: U+2019 conversion to U+0027'
);
}
/**
- * @see bug 23156 & r64981
+ * @see T25156 & r64981
* @covers Language::commafy
*/
public function testCommafy() {
}
/**
- * @see bug 23156 & r64981
+ * @see T25156 & r64981
* @covers Language::commafy
*/
public function testDoesNotCommafyFourDigitsNumber() {
/**
* @dataProvider providerFormatNum
- * @see bug 29495
+ * T31495
* @covers Language::formatNum
*/
public function testFormatNum( $result, $value ) {
class LanguageTrTest extends LanguageClassesTestCase {
/**
- * See @bug 28040
+ * See T30040
* Credits to irc://irc.freenode.net/wikipedia-tr users:
* - berm
* - []LuCkY[]
[ 'lcfirst', 'ı', 'lower', 'ı' ],
[ 'lcfirst', 'i', 'lower', 'i' ],
- # A real example taken from bug 28040 using
+ # A real example taken from T30040 using
# https://tr.wikipedia.org/wiki/%C4%B0Phone
[ 'lcfirst', 'iPhone', 'lower', 'iPhone' ],
$this->dump->close();
}
- // Bug 37458, parent teardown need to be done after closing the
+ // T39458, parent teardown need to be done after closing the
// dump or it might cause some permissions errors.
parent::tearDown();
}
/**
* August 22 – The theft of the Mona Lisa is discovered in the Louvre."
- * @bug 20281
+ * T22281
*/
public function getSize() {
return 1911;
}
/**
- * bug 33321 - Make sure there's a | after transforming.
+ * T35321 - Make sure there's a | after transforming.
* @group Database
* @covers SkinTemplate::addToSidebarPlain
*/
}
// We could use token_get_all() here, but this is faster
+ // Note: Keep in sync with ClassCollector
$matches = [];
preg_match_all( '/
^ [\t ]* (?:
([\'"]) (?P<original> [^\'"]+) \g{-2} \s* , \s*
([\'"]) (?P<alias> [^\'"]+ ) \g{-2} \s*
\) \s* ;
+ |
+ class_alias \s* \( \s*
+ (?P<originalStatic> [a-zA-Z0-9_]+)::class \s* , \s*
+ ([\'"]) (?P<aliasString> [^\'"]+ ) \g{-2} \s*
+ \) \s* ;
)
/imx', $contents, $matches, PREG_SET_ORDER );
foreach ( $matches as $match ) {
if ( !empty( $match['class'] ) ) {
+ // 'class Foo {}'
$class = $fileNamespace . $match['class'];
$actual[$class] = $file;
$classesInFile[$class] = true;
} else {
- $aliasesInFile[$match['alias']] = $match['original'];
+ if ( !empty( $match['original'] ) ) {
+ // 'class_alias( "Foo", "Bar" );'
+ $aliasesInFile[$match['alias']] = $match['original'];
+ } else {
+ // 'class_alias( Foo::class, "Bar" );'
+ $aliasesInFile[$match['aliasString']] = $fileNamespace . $match['originalStatic'];
+ }
}
}
--- /dev/null
+{
+ "extends": "../../.eslintrc.json",
+ "env": {
+ "qunit": true
+ },
+ "globals": {
+ "sinon": false
+ },
+ "rules": {
+ "operator-linebreak": 0,
+ "quote-props": [ "error", "as-needed" ],
+ "valid-jsdoc": 0
+ }
+}
'mediawiki.util',
'mediawiki.viewport',
'mediawiki.special.recentchanges',
- 'mediawiki.rcfilters.filters',
+ 'mediawiki.rcfilters.filters.dm',
'mediawiki.language',
'mediawiki.cldr',
'mediawiki.cookie',
/*
* @example QUnit
* <code>
- QUnit.test( 'Output matches PHP parser', mw.libs.phpParserData.tests.length, function ( assert ) {
+ QUnit.test( 'Output matches PHP parser', function ( assert ) {
mw.messages.set( mw.libs.phpParserData.messages );
$.each( mw.libs.phpParserData.tests, function ( i, test ) {
QUnit.stop();
. "// languages, and parser modes. Intended for use by a unit test framework by looping\n"
. "// through the object and comparing its parser return value with the 'result' property.\n"
. '// Last generated with ' . basename( __FILE__ ) . ' at ' . gmdate( 'r' ) . "\n"
- . "//jscs:disable\n"
+ . "/* eslint-disable */\n"
. "\n"
. 'mediaWiki.libs.phpParserData = ' . FormatJson::encode( $phpParserData, true ) . ";\n";
// languages, and parser modes. Intended for use by a unit test framework by looping
// through the object and comparing its parser return value with the 'result' property.
// Last generated with generateJqueryMsgData.php at Fri, 10 Jul 2015 11:44:08 +0000
-//jscs:disable
+/* eslint-disable */
mediaWiki.libs.phpParserData = {
"messages": {
-/*global CompletenessTest, sinon */
+/* global CompletenessTest, sinon */
( function ( $, mw, QUnit ) {
'use strict';
- var mwTestIgnore, mwTester, addons;
+ var mwTestIgnore, addons;
/**
* Add bogus to url to prevent IE crazy caching
QUnit.config.testTimeout = 60 * 1000;
// Reduce default animation duration from 400ms to 0ms for unit tests
+ // eslint-disable-next-line no-underscore-dangle
$.fx.speeds._default = 0;
// Add a checkbox to QUnit header to toggle MediaWiki ResourceLoader debug mode.
return false;
};
- mwTester = new CompletenessTest( mw, mwTestIgnore );
+ // eslint-disable-next-line no-new
+ new CompletenessTest( mw, mwTestIgnore );
}
/**
}
function freshMessagesCopy( custom ) {
- return $.extend( /*deep=*/true, {}, liveMessages.get(), custom );
+ return $.extend( /* deep */true, {}, liveMessages.get(), custom );
}
/**
}
} ) );
- QUnit.test( 'Setup', 3, function ( assert ) {
+ QUnit.test( 'Setup', function ( assert ) {
assert.equal( mw.html.escape( 'foo' ), 'mocked', 'setup() callback was ran.' );
assert.equal( mw.config.get( 'testVar' ), 'foo', 'config object applied' );
assert.equal( mw.messages.get( 'testMsg' ), 'Foo.', 'messages object applied' );
mw.messages.set( 'testMsg', 'Bar.' );
} );
- QUnit.test( 'Teardown', 2, function ( assert ) {
+ QUnit.test( 'Teardown', function ( assert ) {
assert.equal( mw.config.get( 'testVar' ), 'foo', 'config object restored and re-applied after test()' );
assert.equal( mw.messages.get( 'testMsg' ), 'Foo.', 'messages object restored and re-applied after test()' );
} );
- QUnit.test( 'Loader status', 2, function ( assert ) {
+ QUnit.test( 'Loader status', function ( assert ) {
var i, len, state,
modules = mw.loader.getModuleNames(),
error = [],
assert.deepEqual( missing, [], 'Modules in missing state' );
} );
- QUnit.test( 'htmlEqual', 8, function ( assert ) {
+ QUnit.test( 'htmlEqual', function ( assert ) {
assert.htmlEqual(
'<div><p class="some classes" data-length="10">Child paragraph with <a href="http://example.com">A link</a></p>Regular text<span>A span</span></div>',
'<div><p data-length=\'10\' class=\'some classes\'>Child paragraph with <a href=\'http://example.com\' >A link</a></p>Regular text<span>A span</span></div>',
QUnit.module( 'test.mediawiki.qunit.testrunner-after', QUnit.newMwEnvironment() );
- QUnit.test( 'Teardown', 3, function ( assert ) {
+ QUnit.test( 'Teardown', function ( assert ) {
assert.equal( mw.html.escape( '<' ), '<', 'teardown() callback was ran.' );
assert.equal( mw.config.get( 'testVar' ), null, 'config object restored to live in next module()' );
assert.equal( mw.messages.get( 'testMsg' ), null, 'messages object restored to live in next module()' );
( function ( $ ) {
+ var getAccessKeyPrefixTestData, updateTooltipAccessKeysTestData;
+
QUnit.module( 'jquery.accessKeyLabel', QUnit.newMwEnvironment( {
messages: {
brackets: '[$1]',
}
} ) );
- var getAccessKeyPrefixTestData = [
- // ua string, platform string, expected prefix
- // Internet Explorer
- [ 'Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 5.1)', 'Win32', 'alt-' ],
- [ 'Mozilla/5.0 (compatible; MSIE 10.0; Windows NT 6.1; Trident/6.0)', 'Win32', 'alt-' ],
- [ 'Mozilla/5.0 (Windows NT 6.3; Win64; x64; Trident/7.0; rv:11.0) like Gecko', 'Win64', 'alt-' ],
- [ 'Mozilla/5.0 (Windows NT 10.0) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/42.0.2311.135 Safari/537.36 Edge/12.10136', 'Win64', 'alt-' ],
- // Firefox
- [ 'Mozilla/5.0 (Macintosh; U; Intel Mac OS X 10.5; en-US; rv:1.9.1.19) Gecko/20110420 Firefox/3.5.19', 'MacIntel', 'ctrl-' ],
- [ 'Mozilla/5.0 (X11; U; Linux i686; en-US; rv:1.9.2.17) Gecko/20110422 Ubuntu/10.10 (maverick) Firefox/3.6.17', 'Linux i686', 'alt-shift-' ],
- [ 'Mozilla/5.0 (Windows NT 6.0; rv:2.0.1) Gecko/20100101 Firefox/4.0.1', 'Win32', 'alt-shift-' ],
- [ 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10.12; rv:50.0) Gecko/20100101 Firefox/50.0', 'MacIntel', 'ctrl-option-' ],
- [ 'Mozilla/5.0 (X11; Linux x86_64; rv:17.0) Gecko/20121202 Firefox/17.0 Iceweasel/17.0.1', 'Linux 1686', 'alt-shift-' ],
- [ 'Mozilla/5.0 (Windows NT 5.2; U; de; rv:1.8.0) Gecko/20060728 Firefox/1.5.0', 'Win32', 'alt-' ],
- // Safari / Konqueror
- [ 'Mozilla/5.0 (Macintosh; U; Intel Mac OS X 10_6_7; nl-nl) AppleWebKit/531.22.7 (KHTML, like Gecko) Version/4.0.5 Safari/531.22.7', 'MacIntel', 'ctrl-option-' ],
- [ 'Mozilla/5.0 (Macintosh; U; Intel Mac OS X 10_5_7; de-de) AppleWebKit/525.28.3 (KHTML, like Gecko) Version/3.2.3 Safari/525.28.3', 'MacIntel', 'ctrl-' ],
- [ 'Mozilla/5.0 (Windows; U; Windows NT 5.1; cs-CZ) AppleWebKit/525.28.3 (KHTML, like Gecko) Version/3.2.3 Safari/525.29', 'Win32', 'alt-' ],
- [ 'Mozilla/5.0 (Windows; U; Windows NT 6.0; cs-CZ) AppleWebKit/533.21.1 (KHTML, like Gecko) Version/4.0.5 Safari/531.22.7', 'Win32', 'alt-' ],
- [ 'Mozilla/5.0 (X11; Linux i686) KHTML/4.9.1 (like Gecko) Konqueror/4.9', 'Linux i686', 'ctrl-' ],
- // Opera
- [ 'Opera/9.80 (Windows NT 5.1)', 'Win32', 'shift-esc-' ],
- [ 'Mozilla/5.0 (Windows NT 5.1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/28.0.1500.52 Safari/537.36 OPR/15.0.1147.130', 'Win32', 'alt-shift-' ],
- // Chrome
- [ 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_5_8) AppleWebKit/534.30 (KHTML, like Gecko) Chrome/12.0.742.112 Safari/534.30', 'MacIntel', 'ctrl-option-' ],
- [ 'Mozilla/5.0 (X11; Linux i686) AppleWebKit/534.30 (KHTML, like Gecko) Chrome/12.0.742.68 Safari/534.30', 'Linux i686', 'alt-shift-' ],
- // Unknown! Note: These aren't necessarily *right*, this is just
- // testing that we're getting the expected output based on the
- // platform.
- [ 'Mozilla/5.0 (Macintosh; U; PPC Mac OS X; en-US; rv:1.0.1) Gecko/20021111 Chimera/0.6', 'MacPPC', 'ctrl-' ],
- [ 'Mozilla/5.0 (X11; U; Linux i686; en-US; rv:1.3a) Gecko/20021207 Phoenix/0.5', 'Linux i686', 'alt-' ]
- ],
- // strings appended to title to make sure updateTooltipAccessKeys handles them correctly
- updateTooltipAccessKeysTestData = [ '', ' [a]', ' [test-a]', ' [alt-b]' ];
+ getAccessKeyPrefixTestData = [
+ // ua string, platform string, expected prefix
+ // Internet Explorer
+ [ 'Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 5.1)', 'Win32', 'alt-' ],
+ [ 'Mozilla/5.0 (compatible; MSIE 10.0; Windows NT 6.1; Trident/6.0)', 'Win32', 'alt-' ],
+ [ 'Mozilla/5.0 (Windows NT 6.3; Win64; x64; Trident/7.0; rv:11.0) like Gecko', 'Win64', 'alt-' ],
+ [ 'Mozilla/5.0 (Windows NT 10.0) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/42.0.2311.135 Safari/537.36 Edge/12.10136', 'Win64', 'alt-' ],
+ // Firefox
+ [ 'Mozilla/5.0 (Macintosh; U; Intel Mac OS X 10.5; en-US; rv:1.9.1.19) Gecko/20110420 Firefox/3.5.19', 'MacIntel', 'ctrl-' ],
+ [ 'Mozilla/5.0 (X11; U; Linux i686; en-US; rv:1.9.2.17) Gecko/20110422 Ubuntu/10.10 (maverick) Firefox/3.6.17', 'Linux i686', 'alt-shift-' ],
+ [ 'Mozilla/5.0 (Windows NT 6.0; rv:2.0.1) Gecko/20100101 Firefox/4.0.1', 'Win32', 'alt-shift-' ],
+ [ 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10.12; rv:50.0) Gecko/20100101 Firefox/50.0', 'MacIntel', 'ctrl-option-' ],
+ [ 'Mozilla/5.0 (X11; Linux x86_64; rv:17.0) Gecko/20121202 Firefox/17.0 Iceweasel/17.0.1', 'Linux 1686', 'alt-shift-' ],
+ [ 'Mozilla/5.0 (Windows NT 5.2; U; de; rv:1.8.0) Gecko/20060728 Firefox/1.5.0', 'Win32', 'alt-' ],
+ // Safari / Konqueror
+ [ 'Mozilla/5.0 (Macintosh; U; Intel Mac OS X 10_6_7; nl-nl) AppleWebKit/531.22.7 (KHTML, like Gecko) Version/4.0.5 Safari/531.22.7', 'MacIntel', 'ctrl-option-' ],
+ [ 'Mozilla/5.0 (Macintosh; U; Intel Mac OS X 10_5_7; de-de) AppleWebKit/525.28.3 (KHTML, like Gecko) Version/3.2.3 Safari/525.28.3', 'MacIntel', 'ctrl-' ],
+ [ 'Mozilla/5.0 (Windows; U; Windows NT 5.1; cs-CZ) AppleWebKit/525.28.3 (KHTML, like Gecko) Version/3.2.3 Safari/525.29', 'Win32', 'alt-' ],
+ [ 'Mozilla/5.0 (Windows; U; Windows NT 6.0; cs-CZ) AppleWebKit/533.21.1 (KHTML, like Gecko) Version/4.0.5 Safari/531.22.7', 'Win32', 'alt-' ],
+ [ 'Mozilla/5.0 (X11; Linux i686) KHTML/4.9.1 (like Gecko) Konqueror/4.9', 'Linux i686', 'ctrl-' ],
+ // Opera
+ [ 'Opera/9.80 (Windows NT 5.1)', 'Win32', 'shift-esc-' ],
+ [ 'Mozilla/5.0 (Windows NT 5.1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/28.0.1500.52 Safari/537.36 OPR/15.0.1147.130', 'Win32', 'alt-shift-' ],
+ // Chrome
+ [ 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_5_8) AppleWebKit/534.30 (KHTML, like Gecko) Chrome/12.0.742.112 Safari/534.30', 'MacIntel', 'ctrl-option-' ],
+ [ 'Mozilla/5.0 (X11; Linux i686) AppleWebKit/534.30 (KHTML, like Gecko) Chrome/12.0.742.68 Safari/534.30', 'Linux i686', 'alt-shift-' ],
+ // Unknown! Note: These aren't necessarily *right*, this is just
+ // testing that we're getting the expected output based on the
+ // platform.
+ [ 'Mozilla/5.0 (Macintosh; U; PPC Mac OS X; en-US; rv:1.0.1) Gecko/20021111 Chimera/0.6', 'MacPPC', 'ctrl-' ],
+ [ 'Mozilla/5.0 (X11; U; Linux i686; en-US; rv:1.3a) Gecko/20021207 Phoenix/0.5', 'Linux i686', 'alt-' ]
+ ];
+ // strings appended to title to make sure updateTooltipAccessKeys handles them correctly
+ updateTooltipAccessKeysTestData = [ '', ' [a]', ' [test-a]', ' [alt-b]' ];
function makeInput( title, accessKey ) {
// The properties aren't escaped, so make sure you don't call this function with values that need to be escaped!
return '<input title="' + title + '" ' + ( accessKey ? 'accessKey="' + accessKey + '" ' : '' ) + ' />';
}
- QUnit.test( 'getAccessKeyPrefix', getAccessKeyPrefixTestData.length, function ( assert ) {
+ QUnit.test( 'getAccessKeyPrefix', function ( assert ) {
var i;
for ( i = 0; i < getAccessKeyPrefixTestData.length; i++ ) {
assert.equal( $.fn.updateTooltipAccessKeys.getAccessKeyPrefix( {
}
} );
- QUnit.test( 'updateTooltipAccessKeys - current browser', 2, function ( assert ) {
+ QUnit.test( 'updateTooltipAccessKeys - current browser', function ( assert ) {
var title = $( makeInput( 'Title', 'a' ) ).updateTooltipAccessKeys().prop( 'title' ),
// The new title should be something like "Title [alt-a]", but the exact label will depend on the browser.
// The "a" could be capitalized, and the prefix could be anything, e.g. a simple "^" for ctrl-
assert.notEqual( result[ 1 ], 'test-', 'Prefix used for testing shouldn\'t be used in production.' );
} );
- QUnit.test( 'updateTooltipAccessKeys - no access key', updateTooltipAccessKeysTestData.length, function ( assert ) {
+ QUnit.test( 'updateTooltipAccessKeys - no access key', function ( assert ) {
var i, oldTitle, $input, newTitle;
for ( i = 0; i < updateTooltipAccessKeysTestData.length; i++ ) {
oldTitle = 'Title' + updateTooltipAccessKeysTestData[ i ];
}
} );
- QUnit.test( 'updateTooltipAccessKeys - with access key', updateTooltipAccessKeysTestData.length, function ( assert ) {
- $.fn.updateTooltipAccessKeys.setTestMode( true );
+ QUnit.test( 'updateTooltipAccessKeys - with access key', function ( assert ) {
var i, oldTitle, $input, newTitle;
+ $.fn.updateTooltipAccessKeys.setTestMode( true );
for ( i = 0; i < updateTooltipAccessKeysTestData.length; i++ ) {
oldTitle = 'Title' + updateTooltipAccessKeysTestData[ i ];
$input = $( makeInput( oldTitle, 'a' ) );
$.fn.updateTooltipAccessKeys.setTestMode( false );
} );
- QUnit.test( 'updateTooltipAccessKeys with label element', 2, function ( assert ) {
+ QUnit.test( 'updateTooltipAccessKeys with label element', function ( assert ) {
+ var html, $label, $input;
$.fn.updateTooltipAccessKeys.setTestMode( true );
- var html = '<label for="testInput" title="Title">Label</label><input id="testInput" accessKey="a" />',
- $label, $input;
+ html = '<label for="testInput" title="Title">Label</label><input id="testInput" accessKey="a" />';
$( '#qunit-fixture' ).html( html );
$label = $( '#qunit-fixture label' );
$input = $( '#qunit-fixture input' );
$.fn.updateTooltipAccessKeys.setTestMode( false );
} );
- QUnit.test( 'updateTooltipAccessKeys with label element as parent', 2, function ( assert ) {
+ QUnit.test( 'updateTooltipAccessKeys with label element as parent', function ( assert ) {
+ var html, $label, $input;
$.fn.updateTooltipAccessKeys.setTestMode( true );
- var html = '<label title="Title">Label<input id="testInput" accessKey="a" /></label>',
- $label, $input;
+ html = '<label title="Title">Label<input id="testInput" accessKey="a" /></label>';
$( '#qunit-fixture' ).html( html );
$label = $( '#qunit-fixture label' );
$input = $( '#qunit-fixture input' );
return i;
}
- QUnit.test( 'Position right', 4, function ( assert ) {
+ QUnit.test( 'Position right', function ( assert ) {
// We need this thing to be visible, so append it to the DOM
var $span, spanText, d, spanTextNew,
origText = 'This is a really long random string and there is no way it fits in 100 pixels.',
( function ( $ ) {
QUnit.module( 'jquery.byteLength', QUnit.newMwEnvironment() );
- QUnit.test( 'Simple text', 5, function ( assert ) {
+ QUnit.test( 'Simple text', function ( assert ) {
var azLc = 'abcdefghijklmnopqrstuvwxyz',
azUc = 'ABCDEFGHIJKLMNOPQRSTUVWXYZ',
num = '0123456789',
} );
- QUnit.test( 'Special text', 4, function ( assert ) {
+ QUnit.test( 'Special text', function ( assert ) {
// https://en.wikipedia.org/wiki/UTF-8
var u0024 = '$',
// Cent symbol
expected: ''
}, options );
- QUnit.asyncTest( opt.description, 1, function ( assert ) {
- setTimeout( function () {
- opt.$input.appendTo( '#qunit-fixture' );
+ QUnit.test( opt.description, function ( assert ) {
+ opt.$input.appendTo( '#qunit-fixture' );
- // Simulate pressing keys for each of the sample characters
- addChars( opt.$input, opt.sample );
+ // Simulate pressing keys for each of the sample characters
+ addChars( opt.$input, opt.sample );
- assert.equal(
- opt.$input.val(),
- opt.expected,
- 'New value matches the expected string'
- );
-
- QUnit.start();
- } );
+ assert.equal(
+ opt.$input.val(),
+ opt.expected,
+ 'New value matches the expected string'
+ );
} );
}
} );
byteLimitTest( {
- description: 'Plain text input. Calling byteLimit with no parameters and no maxlength attribute (bug 36310)',
+ description: 'Plain text input. Calling byteLimit with no parameters and no maxlength attribute (T38310)',
$input: $( '<input>' ).attr( 'type', 'text' )
.byteLimit(),
sample: simpleSample,
expected: '1234'
} );
- // Regression tests for bug 41450
+ // Regression tests for T43450
byteLimitTest( {
description: 'Input filter of which the base exceeds the limit',
$input: $( '<input>' ).attr( 'type', 'text' )
expected: ''
} );
- QUnit.test( 'Confirm properties and attributes set', 4, function ( assert ) {
- var $el, $elA, $elB;
+ QUnit.test( 'Confirm properties and attributes set', function ( assert ) {
+ var $el;
$el = $( '<input>' ).attr( 'type', 'text' )
.attr( 'maxlength', '7' )
assert.strictEqual( $el.attr( 'maxlength' ), undefined, 'maxlength attribute removed for limit with callback' );
- $elA = $( '<input>' ).attr( 'type', 'text' )
+ $( '<input>' ).attr( 'type', 'text' )
.addClass( 'mw-test-byteLimit-foo' )
.attr( 'maxlength', '7' )
.appendTo( '#qunit-fixture' );
- $elB = $( '<input>' ).attr( 'type', 'text' )
+ $( '<input>' ).attr( 'type', 'text' )
.addClass( 'mw-test-byteLimit-foo' )
.attr( 'maxlength', '12' )
.appendTo( '#qunit-fixture' );
$el.byteLimit();
} );
- QUnit.test( 'Trim from insertion when limit exceeded', 2, function ( assert ) {
+ QUnit.test( 'Trim from insertion when limit exceeded', function ( assert ) {
var $el;
- // Use a new <input /> because the bug only occurs on the first time
- // the limit it reached (bug 40850)
+ // Use a new <input> because the bug only occurs on the first time
+ // the limit it reached (T42850)
$el = $( '<input>' ).attr( 'type', 'text' )
.appendTo( '#qunit-fixture' )
.byteLimit( 3 )
( function ( $ ) {
QUnit.module( 'jquery.colorUtil', QUnit.newMwEnvironment() );
- QUnit.test( 'getRGB', 18, function ( assert ) {
+ QUnit.test( 'getRGB', function ( assert ) {
assert.strictEqual( $.colorUtil.getRGB(), undefined, 'No arguments' );
assert.strictEqual( $.colorUtil.getRGB( '' ), undefined, 'Empty string' );
assert.deepEqual( $.colorUtil.getRGB( [ 0, 100, 255 ] ), [ 0, 100, 255 ], 'Parse array of rgb values' );
assert.strictEqual( $.colorUtil.getRGB( 'mediaWiki' ), undefined, 'Inexisting color name' );
} );
- QUnit.test( 'rgbToHsl', 1, function ( assert ) {
+ QUnit.test( 'rgbToHsl', function ( assert ) {
var hsl, ret;
// Cross-browser differences in decimals...
assert.deepEqual( ret, [ 0.33, 0.73, 0.75 ], 'rgb(144, 238, 144): hsl(0.33, 0.73, 0.75)' );
} );
- QUnit.test( 'hslToRgb', 1, function ( assert ) {
+ QUnit.test( 'hslToRgb', function ( assert ) {
var rgb, ret;
rgb = $.colorUtil.hslToRgb( 0.3, 0.7, 0.8 );
assert.deepEqual( ret, [ 183, 240, 168 ], 'hsl(0.3, 0.7, 0.8): rgb(183, 240, 168)' );
} );
- QUnit.test( 'getColorBrightness', 2, function ( assert ) {
+ QUnit.test( 'getColorBrightness', function ( assert ) {
var a, b;
a = $.colorUtil.getColorBrightness( 'red', +0.1 );
assert.equal( a, 'rgb(255,50,50)', 'Start with named color "red", brighten 10%' );
( function ( $ ) {
QUnit.module( 'jquery.getAttrs', QUnit.newMwEnvironment() );
- QUnit.test( 'getAttrs()', 1, function ( assert ) {
+ QUnit.test( 'getAttrs()', function ( assert ) {
var attrs = {
foo: 'bar',
- 'class': 'lorem',
+ class: 'lorem',
'data-foo': 'data value'
},
$el = $( '<div>' ).attr( attrs );
( function ( $ ) {
QUnit.module( 'jquery.hidpi', QUnit.newMwEnvironment() );
- QUnit.test( 'devicePixelRatio', 1, function ( assert ) {
+ QUnit.test( 'devicePixelRatio', function ( assert ) {
var devicePixelRatio = $.devicePixelRatio();
assert.equal( typeof devicePixelRatio, 'number', '$.devicePixelRatio() returns a number' );
} );
- QUnit.test( 'bracketedDevicePixelRatio', 1, function ( assert ) {
- var devicePixelRatio = $.devicePixelRatio();
- assert.equal( typeof devicePixelRatio, 'number', '$.bracketedDevicePixelRatio() returns a number' );
+ QUnit.test( 'bracketedDevicePixelRatio', function ( assert ) {
+ var ratio = $.bracketedDevicePixelRatio();
+ assert.equal( typeof ratio, 'number', '$.bracketedDevicePixelRatio() returns a number' );
} );
- QUnit.test( 'bracketDevicePixelRatio', 8, function ( assert ) {
+ QUnit.test( 'bracketDevicePixelRatio', function ( assert ) {
assert.equal( $.bracketDevicePixelRatio( 0.75 ), 1, '0.75 gives 1' );
assert.equal( $.bracketDevicePixelRatio( 1 ), 1, '1 gives 1' );
assert.equal( $.bracketDevicePixelRatio( 1.25 ), 1.5, '1.25 gives 1.5' );
assert.equal( $.bracketDevicePixelRatio( 3 ), 2, '3 gives 2' );
} );
- QUnit.test( 'matchSrcSet', 6, function ( assert ) {
+ QUnit.test( 'matchSrcSet', function ( assert ) {
var srcset = 'onefive.png 1.5x, two.png 2x';
// Nice exact matches
QUnit.module( 'jquery.highlightText', QUnit.newMwEnvironment() );
QUnit.test( 'Check', function ( assert ) {
- var $fixture, cases = [
- {
- desc: 'Test 001',
- text: 'Blue Öyster Cult',
- highlight: 'Blue',
- expected: '<span class="highlight">Blue</span> Öyster Cult'
- },
- {
- desc: 'Test 002',
- text: 'Blue Öyster Cult',
- highlight: 'Blue ',
- expected: '<span class="highlight">Blue</span> Öyster Cult'
- },
- {
- desc: 'Test 003',
- text: 'Blue Öyster Cult',
- highlight: 'Blue Ö',
- expected: '<span class="highlight">Blue</span> <span class="highlight">Ö</span>yster Cult'
- },
- {
- desc: 'Test 004',
- text: 'Blue Öyster Cult',
- highlight: 'Blue Öy',
- expected: '<span class="highlight">Blue</span> <span class="highlight">Öy</span>ster Cult'
- },
- {
- desc: 'Test 005',
- text: 'Blue Öyster Cult',
- highlight: ' Blue',
- expected: '<span class="highlight">Blue</span> Öyster Cult'
- },
- {
- desc: 'Test 006',
- text: 'Blue Öyster Cult',
- highlight: ' Blue ',
- expected: '<span class="highlight">Blue</span> Öyster Cult'
- },
- {
- desc: 'Test 007',
- text: 'Blue Öyster Cult',
- highlight: ' Blue Ö',
- expected: '<span class="highlight">Blue</span> <span class="highlight">Ö</span>yster Cult'
- },
- {
- desc: 'Test 008',
- text: 'Blue Öyster Cult',
- highlight: ' Blue Öy',
- expected: '<span class="highlight">Blue</span> <span class="highlight">Öy</span>ster Cult'
- },
- {
- desc: 'Test 009: Highlighter broken on starting Umlaut?',
- text: 'Österreich',
- highlight: 'Österreich',
- expected: '<span class="highlight">Österreich</span>'
- },
- {
- desc: 'Test 010: Highlighter broken on starting Umlaut?',
- text: 'Österreich',
- highlight: 'Ö',
- expected: '<span class="highlight">Ö</span>sterreich'
- },
- {
- desc: 'Test 011: Highlighter broken on starting Umlaut?',
- text: 'Österreich',
- highlight: 'Öst',
- expected: '<span class="highlight">Öst</span>erreich'
- },
- {
- desc: 'Test 012: Highlighter broken on starting Umlaut?',
- text: 'Österreich',
- highlight: 'Oe',
- expected: 'Österreich'
- },
- {
- desc: 'Test 013: Highlighter broken on punctuation mark?',
- text: 'So good. To be there',
- highlight: 'good',
- expected: 'So <span class="highlight">good</span>. To be there'
- },
- {
- desc: 'Test 014: Highlighter broken on space?',
- text: 'So good. To be there',
- highlight: 'be',
- expected: 'So good. To <span class="highlight">be</span> there'
- },
- {
- desc: 'Test 015: Highlighter broken on space?',
- text: 'So good. To be there',
- highlight: ' be',
- expected: 'So good. To <span class="highlight">be</span> there'
- },
- {
- desc: 'Test 016: Highlighter broken on space?',
- text: 'So good. To be there',
- highlight: 'be ',
- expected: 'So good. To <span class="highlight">be</span> there'
- },
- {
- desc: 'Test 017: Highlighter broken on space?',
- text: 'So good. To be there',
- highlight: ' be ',
- expected: 'So good. To <span class="highlight">be</span> there'
- },
- {
- desc: 'Test 018: en de Highlighter broken on special character at the end?',
- text: 'So good. xbß',
- highlight: 'xbß',
- expected: 'So good. <span class="highlight">xbß</span>'
- },
- {
- desc: 'Test 019: en de Highlighter broken on special character at the end?',
- text: 'So good. xbß.',
- highlight: 'xbß.',
- expected: 'So good. <span class="highlight">xbß.</span>'
- },
- {
- desc: 'Test 020: RTL he Hebrew',
- text: 'חסיד אומות העולם',
- highlight: 'חסיד אומות העולם',
- expected: '<span class="highlight">חסיד</span> <span class="highlight">אומות</span> <span class="highlight">העולם</span>'
- },
- {
- desc: 'Test 021: RTL he Hebrew',
- text: 'חסיד אומות העולם',
- highlight: 'חסי',
- expected: '<span class="highlight">חסי</span>ד אומות העולם'
- },
- {
- desc: 'Test 022: ja Japanese',
- text: '諸国民の中の正義の人',
- highlight: '諸国民の中の正義の人',
- expected: '<span class="highlight">諸国民の中の正義の人</span>'
- },
- {
- desc: 'Test 023: ja Japanese',
- text: '諸国民の中の正義の人',
- highlight: '諸国',
- expected: '<span class="highlight">諸国</span>民の中の正義の人'
- },
- {
- desc: 'Test 024: fr French text and « french quotes » (guillemets)',
- text: '« L\'oiseau est sur l’île »',
- highlight: '« L\'oiseau est sur l’île »',
- expected: '<span class="highlight">«</span> <span class="highlight">L\'oiseau</span> <span class="highlight">est</span> <span class="highlight">sur</span> <span class="highlight">l’île</span> <span class="highlight">»</span>'
- },
- {
- desc: 'Test 025: fr French text and « french quotes » (guillemets)',
- text: '« L\'oiseau est sur l’île »',
- highlight: '« L\'oise',
- expected: '<span class="highlight">«</span> <span class="highlight">L\'oise</span>au est sur l’île »'
- },
- {
- desc: 'Test 025a: fr French text and « french quotes » (guillemets) - does it match the single strings "«" and "L" separately?',
- text: '« L\'oiseau est sur l’île »',
- highlight: '« L',
- expected: '<span class="highlight">«</span> <span class="highlight">L</span>\'oiseau est sur <span class="highlight">l</span>’île »'
- },
- {
- desc: 'Test 026: ru Russian',
- text: 'Праведники мира',
- highlight: 'Праведники мира',
- expected: '<span class="highlight">Праведники</span> <span class="highlight">мира</span>'
- },
- {
- desc: 'Test 027: ru Russian',
- text: 'Праведники мира',
- highlight: 'Праве',
- expected: '<span class="highlight">Праве</span>дники мира'
- },
- {
- desc: 'Test 028 ka Georgian',
- text: 'მთავარი გვერდი',
- highlight: 'მთავარი გვერდი',
- expected: '<span class="highlight">მთავარი</span> <span class="highlight">გვერდი</span>'
- },
- {
- desc: 'Test 029 ka Georgian',
- text: 'მთავარი გვერდი',
- highlight: 'მთა',
- expected: '<span class="highlight">მთა</span>ვარი გვერდი'
- },
- {
- desc: 'Test 030 hy Armenian',
- text: 'Նոնա Գափրինդաշվիլի',
- highlight: 'Նոնա Գափրինդաշվիլի',
- expected: '<span class="highlight">Նոնա</span> <span class="highlight">Գափրինդաշվիլի</span>'
- },
- {
- desc: 'Test 031 hy Armenian',
- text: 'Նոնա Գափրինդաշվիլի',
- highlight: 'Նոն',
- expected: '<span class="highlight">Նոն</span>ա Գափրինդաշվիլի'
- },
- {
- desc: 'Test 032: th Thai',
- text: 'พอล แอร์ดิช',
- highlight: 'พอล แอร์ดิช',
- expected: '<span class="highlight">พอล</span> <span class="highlight">แอร์ดิช</span>'
- },
- {
- desc: 'Test 033: th Thai',
- text: 'พอล แอร์ดิช',
- highlight: 'พอ',
- expected: '<span class="highlight">พอ</span>ล แอร์ดิช'
- },
- {
- desc: 'Test 034: RTL ar Arabic',
- text: 'بول إيردوس',
- highlight: 'بول إيردوس',
- expected: '<span class="highlight">بول</span> <span class="highlight">إيردوس</span>'
- },
- {
- desc: 'Test 035: RTL ar Arabic',
- text: 'بول إيردوس',
- highlight: 'بو',
- expected: '<span class="highlight">بو</span>ل إيردوس'
- }
- ];
- QUnit.expect( cases.length );
+ var $fixture,
+ cases = [
+ {
+ desc: 'Test 001',
+ text: 'Blue Öyster Cult',
+ highlight: 'Blue',
+ expected: '<span class="highlight">Blue</span> Öyster Cult'
+ },
+ {
+ desc: 'Test 002',
+ text: 'Blue Öyster Cult',
+ highlight: 'Blue ',
+ expected: '<span class="highlight">Blue</span> Öyster Cult'
+ },
+ {
+ desc: 'Test 003',
+ text: 'Blue Öyster Cult',
+ highlight: 'Blue Ö',
+ expected: '<span class="highlight">Blue</span> <span class="highlight">Ö</span>yster Cult'
+ },
+ {
+ desc: 'Test 004',
+ text: 'Blue Öyster Cult',
+ highlight: 'Blue Öy',
+ expected: '<span class="highlight">Blue</span> <span class="highlight">Öy</span>ster Cult'
+ },
+ {
+ desc: 'Test 005',
+ text: 'Blue Öyster Cult',
+ highlight: ' Blue',
+ expected: '<span class="highlight">Blue</span> Öyster Cult'
+ },
+ {
+ desc: 'Test 006',
+ text: 'Blue Öyster Cult',
+ highlight: ' Blue ',
+ expected: '<span class="highlight">Blue</span> Öyster Cult'
+ },
+ {
+ desc: 'Test 007',
+ text: 'Blue Öyster Cult',
+ highlight: ' Blue Ö',
+ expected: '<span class="highlight">Blue</span> <span class="highlight">Ö</span>yster Cult'
+ },
+ {
+ desc: 'Test 008',
+ text: 'Blue Öyster Cult',
+ highlight: ' Blue Öy',
+ expected: '<span class="highlight">Blue</span> <span class="highlight">Öy</span>ster Cult'
+ },
+ {
+ desc: 'Test 009: Highlighter broken on starting Umlaut?',
+ text: 'Österreich',
+ highlight: 'Österreich',
+ expected: '<span class="highlight">Österreich</span>'
+ },
+ {
+ desc: 'Test 010: Highlighter broken on starting Umlaut?',
+ text: 'Österreich',
+ highlight: 'Ö',
+ expected: '<span class="highlight">Ö</span>sterreich'
+ },
+ {
+ desc: 'Test 011: Highlighter broken on starting Umlaut?',
+ text: 'Österreich',
+ highlight: 'Öst',
+ expected: '<span class="highlight">Öst</span>erreich'
+ },
+ {
+ desc: 'Test 012: Highlighter broken on starting Umlaut?',
+ text: 'Österreich',
+ highlight: 'Oe',
+ expected: 'Österreich'
+ },
+ {
+ desc: 'Test 013: Highlighter broken on punctuation mark?',
+ text: 'So good. To be there',
+ highlight: 'good',
+ expected: 'So <span class="highlight">good</span>. To be there'
+ },
+ {
+ desc: 'Test 014: Highlighter broken on space?',
+ text: 'So good. To be there',
+ highlight: 'be',
+ expected: 'So good. To <span class="highlight">be</span> there'
+ },
+ {
+ desc: 'Test 015: Highlighter broken on space?',
+ text: 'So good. To be there',
+ highlight: ' be',
+ expected: 'So good. To <span class="highlight">be</span> there'
+ },
+ {
+ desc: 'Test 016: Highlighter broken on space?',
+ text: 'So good. To be there',
+ highlight: 'be ',
+ expected: 'So good. To <span class="highlight">be</span> there'
+ },
+ {
+ desc: 'Test 017: Highlighter broken on space?',
+ text: 'So good. To be there',
+ highlight: ' be ',
+ expected: 'So good. To <span class="highlight">be</span> there'
+ },
+ {
+ desc: 'Test 018: en de Highlighter broken on special character at the end?',
+ text: 'So good. xbß',
+ highlight: 'xbß',
+ expected: 'So good. <span class="highlight">xbß</span>'
+ },
+ {
+ desc: 'Test 019: en de Highlighter broken on special character at the end?',
+ text: 'So good. xbß.',
+ highlight: 'xbß.',
+ expected: 'So good. <span class="highlight">xbß.</span>'
+ },
+ {
+ desc: 'Test 020: RTL he Hebrew',
+ text: 'חסיד אומות העולם',
+ highlight: 'חסיד אומות העולם',
+ expected: '<span class="highlight">חסיד</span> <span class="highlight">אומות</span> <span class="highlight">העולם</span>'
+ },
+ {
+ desc: 'Test 021: RTL he Hebrew',
+ text: 'חסיד אומות העולם',
+ highlight: 'חסי',
+ expected: '<span class="highlight">חסי</span>ד אומות העולם'
+ },
+ {
+ desc: 'Test 022: ja Japanese',
+ text: '諸国民の中の正義の人',
+ highlight: '諸国民の中の正義の人',
+ expected: '<span class="highlight">諸国民の中の正義の人</span>'
+ },
+ {
+ desc: 'Test 023: ja Japanese',
+ text: '諸国民の中の正義の人',
+ highlight: '諸国',
+ expected: '<span class="highlight">諸国</span>民の中の正義の人'
+ },
+ {
+ desc: 'Test 024: fr French text and « french quotes » (guillemets)',
+ text: '« L\'oiseau est sur l’île »',
+ highlight: '« L\'oiseau est sur l’île »',
+ expected: '<span class="highlight">«</span> <span class="highlight">L\'oiseau</span> <span class="highlight">est</span> <span class="highlight">sur</span> <span class="highlight">l’île</span> <span class="highlight">»</span>'
+ },
+ {
+ desc: 'Test 025: fr French text and « french quotes » (guillemets)',
+ text: '« L\'oiseau est sur l’île »',
+ highlight: '« L\'oise',
+ expected: '<span class="highlight">«</span> <span class="highlight">L\'oise</span>au est sur l’île »'
+ },
+ {
+ desc: 'Test 025a: fr French text and « french quotes » (guillemets) - does it match the single strings "«" and "L" separately?',
+ text: '« L\'oiseau est sur l’île »',
+ highlight: '« L',
+ expected: '<span class="highlight">«</span> <span class="highlight">L</span>\'oiseau est sur <span class="highlight">l</span>’île »'
+ },
+ {
+ desc: 'Test 026: ru Russian',
+ text: 'Праведники мира',
+ highlight: 'Праведники мира',
+ expected: '<span class="highlight">Праведники</span> <span class="highlight">мира</span>'
+ },
+ {
+ desc: 'Test 027: ru Russian',
+ text: 'Праведники мира',
+ highlight: 'Праве',
+ expected: '<span class="highlight">Праве</span>дники мира'
+ },
+ {
+ desc: 'Test 028 ka Georgian',
+ text: 'მთავარი გვერდი',
+ highlight: 'მთავარი გვერდი',
+ expected: '<span class="highlight">მთავარი</span> <span class="highlight">გვერდი</span>'
+ },
+ {
+ desc: 'Test 029 ka Georgian',
+ text: 'მთავარი გვერდი',
+ highlight: 'მთა',
+ expected: '<span class="highlight">მთა</span>ვარი გვერდი'
+ },
+ {
+ desc: 'Test 030 hy Armenian',
+ text: 'Նոնա Գափրինդաշվիլի',
+ highlight: 'Նոնա Գափրինդաշվիլի',
+ expected: '<span class="highlight">Նոնա</span> <span class="highlight">Գափրինդաշվիլի</span>'
+ },
+ {
+ desc: 'Test 031 hy Armenian',
+ text: 'Նոնա Գափրինդաշվիլի',
+ highlight: 'Նոն',
+ expected: '<span class="highlight">Նոն</span>ա Գափրինդաշվիլի'
+ },
+ {
+ desc: 'Test 032: th Thai',
+ text: 'พอล แอร์ดิช',
+ highlight: 'พอล แอร์ดิช',
+ expected: '<span class="highlight">พอล</span> <span class="highlight">แอร์ดิช</span>'
+ },
+ {
+ desc: 'Test 033: th Thai',
+ text: 'พอล แอร์ดิช',
+ highlight: 'พอ',
+ expected: '<span class="highlight">พอ</span>ล แอร์ดิช'
+ },
+ {
+ desc: 'Test 034: RTL ar Arabic',
+ text: 'بول إيردوس',
+ highlight: 'بول إيردوس',
+ expected: '<span class="highlight">بول</span> <span class="highlight">إيردوس</span>'
+ },
+ {
+ desc: 'Test 035: RTL ar Arabic',
+ text: 'بول إيردوس',
+ highlight: 'بو',
+ expected: '<span class="highlight">بو</span>ل إيردوس'
+ }
+ ];
$.each( cases, function ( i, item ) {
$fixture = $( '<p>' ).text( item.text ).highlightText( item.highlight );
( function ( $, mw ) {
QUnit.module( 'jquery.localize', QUnit.newMwEnvironment() );
- QUnit.test( 'Handle basic replacements', 4, function ( assert ) {
+ QUnit.test( 'Handle basic replacements', function ( assert ) {
var html, $lc;
mw.messages.set( 'basic', 'Basic stuff' );
assert.strictEqual( $lc.attr( 'placeholder' ), 'Basic stuff', 'Attribute: placeholder-msg' );
} );
- QUnit.test( 'Proper escaping', 2, function ( assert ) {
+ QUnit.test( 'Proper escaping', function ( assert ) {
var html, $lc;
mw.messages.set( 'properfoo', '<proper esc="test">' );
assert.strictEqual( $lc.attr( 'title' ), mw.msg( 'properfoo' ), 'Attributes are not inserted raw.' );
} );
- QUnit.test( 'Options', 7, function ( assert ) {
+ QUnit.test( 'Options', function ( assert ) {
+ var html, $lc, x, sitename = 'Wikipedia';
mw.messages.set( {
'foo-lorem': 'Lorem',
'foo-ipsum': 'Ipsum',
'foo-bazz-label': 'The Bazz ($1)',
'foo-welcome': 'Welcome to $1! (last visit: $2)'
} );
- var html, $lc, x, sitename = 'Wikipedia';
// Message key prefix
html = '<div><span title-msg="lorem"><html:msg key="ipsum" /></span></div>';
assert.strictEqual( $lc.attr( 'title' ), 'Read more about bazz at Wikipedia (last modified: 3 minutes ago)', 'Combination of options prefix, params and keys - attr' );
} );
- QUnit.test( 'Handle data text', 2, function ( assert ) {
+ QUnit.test( 'Handle data text', function ( assert ) {
var html, $lc;
mw.messages.set( 'option-one', 'Item 1' );
mw.messages.set( 'option-two', 'Item 2' );
assert.strictEqual( $lc.eq( 1 ).text(), mw.msg( 'option-two' ), 'data-msg-text becomes text of options' );
} );
- QUnit.test( 'Handle data html', 2, function ( assert ) {
+ QUnit.test( 'Handle data html', function ( assert ) {
var html, $lc;
mw.messages.set( 'html', 'behold... there is a <a>link</a> here!!' );
html = '<div><div data-msg-html="html"></div></div>';
}
// This test is first because if it fails, then almost all of the latter tests are meaningless.
- QUnit.test( 'testing hooks/triggers', 4, function ( assert ) {
- var test = this,
- $collapsible = prepareCollapsible(
+ QUnit.test( 'testing hooks/triggers', function ( assert ) {
+ var $collapsible = prepareCollapsible(
'<div class="mw-collapsible">' + loremIpsum + '</div>'
),
$content = $collapsible.find( '.mw-collapsible-content' ),
$toggle.trigger( 'click' );
} );
- QUnit.test( 'basic operation (<div>)', 5, function ( assert ) {
- var test = this,
- $collapsible = prepareCollapsible(
+ QUnit.test( 'basic operation (<div>)', function ( assert ) {
+ var $collapsible = prepareCollapsible(
'<div class="mw-collapsible">' + loremIpsum + '</div>'
),
$content = $collapsible.find( '.mw-collapsible-content' ),
$toggle.trigger( 'click' );
} );
- QUnit.test( 'basic operation (<table>)', 7, function ( assert ) {
- var test = this,
- $collapsible = prepareCollapsible(
+ QUnit.test( 'basic operation (<table>)', function ( assert ) {
+ var $collapsible = prepareCollapsible(
'<table class="mw-collapsible">' +
'<tr><td>' + loremIpsum + '</td><td>' + loremIpsum + '</td></tr>' +
'<tr><td>' + loremIpsum + '</td><td>' + loremIpsum + '</td></tr>' +
$toggle.trigger( 'click' );
}
- QUnit.test( 'basic operation (<table> with caption)', 10, function ( assert ) {
+ QUnit.test( 'basic operation (<table> with caption)', function ( assert ) {
tableWithCaptionTest( prepareCollapsible(
'<table class="mw-collapsible">' +
'<caption>' + loremIpsum + '</caption>' +
), this, assert );
} );
- QUnit.test( 'basic operation (<table> with caption and <thead>)', 10, function ( assert ) {
+ QUnit.test( 'basic operation (<table> with caption and <thead>)', function ( assert ) {
tableWithCaptionTest( prepareCollapsible(
'<table class="mw-collapsible">' +
'<caption>' + loremIpsum + '</caption>' +
$toggle.trigger( 'click' );
}
- QUnit.test( 'basic operation (<ul>)', 7, function ( assert ) {
+ QUnit.test( 'basic operation (<ul>)', function ( assert ) {
listTest( 'ul', this, assert );
} );
- QUnit.test( 'basic operation (<ol>)', 7, function ( assert ) {
+ QUnit.test( 'basic operation (<ol>)', function ( assert ) {
listTest( 'ol', this, assert );
} );
- QUnit.test( 'basic operation when synchronous (options.instantHide)', 2, function ( assert ) {
+ QUnit.test( 'basic operation when synchronous (options.instantHide)', function ( assert ) {
var $collapsible = prepareCollapsible(
'<div class="mw-collapsible">' + loremIpsum + '</div>',
{ instantHide: true }
assert.assertTrue( $content.is( ':hidden' ), 'after collapsing: content is hidden' );
} );
- QUnit.test( 'mw-made-collapsible data added', 1, function ( assert ) {
+ QUnit.test( 'mw-made-collapsible data added', function ( assert ) {
var $collapsible = prepareCollapsible(
'<div>' + loremIpsum + '</div>'
);
assert.equal( $collapsible.data( 'mw-made-collapsible' ), true, 'mw-made-collapsible data present' );
} );
- QUnit.test( 'mw-collapsible added when missing', 1, function ( assert ) {
+ QUnit.test( 'mw-collapsible added when missing', function ( assert ) {
var $collapsible = prepareCollapsible(
'<div>' + loremIpsum + '</div>'
);
assert.assertTrue( $collapsible.hasClass( 'mw-collapsible' ), 'mw-collapsible class present' );
} );
- QUnit.test( 'mw-collapsed added when missing', 1, function ( assert ) {
+ QUnit.test( 'mw-collapsed added when missing', function ( assert ) {
var $collapsible = prepareCollapsible(
'<div>' + loremIpsum + '</div>',
{ collapsed: true }
assert.assertTrue( $collapsible.hasClass( 'mw-collapsed' ), 'mw-collapsed class present' );
} );
- QUnit.test( 'initial collapse (mw-collapsed class)', 2, function ( assert ) {
+ QUnit.test( 'initial collapse (mw-collapsed class)', function ( assert ) {
var $collapsible = prepareCollapsible(
'<div class="mw-collapsible mw-collapsed">' + loremIpsum + '</div>'
),
$collapsible.find( '.mw-collapsible-toggle' ).trigger( 'click' );
} );
- QUnit.test( 'initial collapse (options.collapsed)', 2, function ( assert ) {
+ QUnit.test( 'initial collapse (options.collapsed)', function ( assert ) {
var $collapsible = prepareCollapsible(
'<div class="mw-collapsible">' + loremIpsum + '</div>',
{ collapsed: true }
$collapsible.find( '.mw-collapsible-toggle' ).trigger( 'click' );
} );
- QUnit.test( 'clicks on links inside toggler pass through (options.linksPassthru)', 2, function ( assert ) {
+ QUnit.test( 'clicks on links inside toggler pass through (options.linksPassthru)', function ( assert ) {
var $collapsible = prepareCollapsible(
'<div class="mw-collapsible">' +
'<div class="mw-collapsible-toggle">' +
assert.assertTrue( $content.is( ':hidden' ), 'click event on non-link inside toggle toggles content' );
} );
- QUnit.test( 'collapse/expand text (data-collapsetext, data-expandtext)', 2, function ( assert ) {
+ QUnit.test( 'collapse/expand text (data-collapsetext, data-expandtext)', function ( assert ) {
var $collapsible = prepareCollapsible(
'<div class="mw-collapsible" data-collapsetext="Collapse me!" data-expandtext="Expand me!">' +
loremIpsum +
$collapsible.find( '.mw-collapsible-toggle' ).trigger( 'click' );
} );
- QUnit.test( 'collapse/expand text (options.collapseText, options.expandText)', 2, function ( assert ) {
+ QUnit.test( 'collapse/expand text (options.collapseText, options.expandText)', function ( assert ) {
var $collapsible = prepareCollapsible(
'<div class="mw-collapsible">' + loremIpsum + '</div>',
{ collapseText: 'Collapse me!', expandText: 'Expand me!' }
$collapsible.find( '.mw-collapsible-toggle' ).trigger( 'click' );
} );
- QUnit.test( 'cloned collapsibles can be made collapsible again', 2, function ( assert ) {
- var test = this,
- $collapsible = prepareCollapsible(
+ QUnit.test( 'cloned collapsibles can be made collapsible again', function ( assert ) {
+ var $collapsible = prepareCollapsible(
'<div class="mw-collapsible">' + loremIpsum + '</div>'
),
$clone = $collapsible.clone() // clone without data and events
}
} ) );
- QUnit.test( 'String functions', 7, function ( assert ) {
+ QUnit.test( 'String functions', function ( assert ) {
assert.equal( $.trimLeft( ' foo bar ' ), 'foo bar ', 'trimLeft' );
assert.equal( $.trimRight( ' foo bar ' ), ' foo bar', 'trimRight' );
assert.equal( $.ucFirst( 'foo' ), 'Foo', 'ucFirst' );
assert.equal( $.escapeRE( '0123456789' ), '0123456789', 'escapeRE - Leave numbers alone' );
} );
- QUnit.test( 'isDomElement', 6, function ( assert ) {
+ QUnit.test( 'isDomElement', function ( assert ) {
assert.strictEqual( $.isDomElement( document.createElement( 'div' ) ), true,
'isDomElement: HTMLElement' );
assert.strictEqual( $.isDomElement( document.createTextNode( '' ) ), true,
'isDomElement: Plain Object' );
} );
- QUnit.test( 'isEmpty', 7, function ( assert ) {
+ QUnit.test( 'isEmpty', function ( assert ) {
assert.strictEqual( $.isEmpty( 'string' ), false, 'isEmpty: "string"' );
assert.strictEqual( $.isEmpty( '0' ), true, 'isEmpty: "0"' );
assert.strictEqual( $.isEmpty( '' ), true, 'isEmpty: ""' );
assert.strictEqual( $.isEmpty( { length: 0 } ), true, 'isEmpty: { length: 0 }' );
} );
- QUnit.test( 'Comparison functions', 5, function ( assert ) {
+ QUnit.test( 'Comparison functions', function ( assert ) {
assert.ok( $.compareArray( [ 0, 'a', [], [ 2, 'b' ] ], [ 0, 'a', [], [ 2, 'b' ] ] ),
'compareArray: Two deep arrays that are excactly the same' );
assert.ok( !$.compareArray( [ 1 ], [ 2 ] ), 'compareArray: Two different arrays (false)' );
( function ( $ ) {
+ var html, testElement;
QUnit.module( 'jquery.placeholder', QUnit.newMwEnvironment() );
- QUnit.test( 'caches results of feature tests', 2, function ( assert ) {
+ QUnit.test( 'caches results of feature tests', function ( assert ) {
assert.strictEqual( typeof $.fn.placeholder.input, 'boolean', '$.fn.placeholder.input' );
assert.strictEqual( typeof $.fn.placeholder.textarea, 'boolean', '$.fn.placeholder.textarea' );
} );
return;
}
- var html = '<form>' +
- '<input id="input-type-search" type="search" placeholder="Search this site...">' +
- '<input id="input-type-text" type="text" placeholder="e.g. John Doe">' +
- '<input id="input-type-email" type="email" placeholder="e.g. address@example.ext">' +
- '<input id="input-type-url" type="url" placeholder="e.g. http://mathiasbynens.be/">' +
- '<input id="input-type-tel" type="tel" placeholder="e.g. +32 472 77 69 88">' +
- '<input id="input-type-password" type="password" placeholder="e.g. hunter2">' +
- '<textarea id="textarea" name="message" placeholder="Your message goes here"></textarea>' +
- '</form>',
+ html = '<form>' +
+ '<input id="input-type-search" type="search" placeholder="Search this site...">' +
+ '<input id="input-type-text" type="text" placeholder="e.g. John Doe">' +
+ '<input id="input-type-email" type="email" placeholder="e.g. address@example.ext">' +
+ '<input id="input-type-url" type="url" placeholder="e.g. http://mathiasbynens.be/">' +
+ '<input id="input-type-tel" type="tel" placeholder="e.g. +32 472 77 69 88">' +
+ '<input id="input-type-password" type="password" placeholder="e.g. hunter2">' +
+ '<textarea id="textarea" name="message" placeholder="Your message goes here"></textarea>' +
+ '</form>';
testElement = function ( $el, assert ) {
-
var el = $el[ 0 ],
placeholder = el.getAttribute( 'placeholder' );
$el.placeholder( placeholder );
};
- QUnit.test( 'emulates placeholder for <input type=text>', 22, function ( assert ) {
+ QUnit.test( 'emulates placeholder for <input type=text>', function ( assert ) {
$( '<div>' ).html( html ).appendTo( $( '#qunit-fixture' ) );
testElement( $( '#input-type-text' ), assert );
} );
- QUnit.test( 'emulates placeholder for <input type=search>', 22, function ( assert ) {
+ QUnit.test( 'emulates placeholder for <input type=search>', function ( assert ) {
$( '<div>' ).html( html ).appendTo( $( '#qunit-fixture' ) );
testElement( $( '#input-type-search' ), assert );
} );
- QUnit.test( 'emulates placeholder for <input type=email>', 22, function ( assert ) {
+ QUnit.test( 'emulates placeholder for <input type=email>', function ( assert ) {
$( '<div>' ).html( html ).appendTo( $( '#qunit-fixture' ) );
testElement( $( '#input-type-email' ), assert );
} );
- QUnit.test( 'emulates placeholder for <input type=url>', 22, function ( assert ) {
+ QUnit.test( 'emulates placeholder for <input type=url>', function ( assert ) {
$( '<div>' ).html( html ).appendTo( $( '#qunit-fixture' ) );
testElement( $( '#input-type-url' ), assert );
} );
- QUnit.test( 'emulates placeholder for <input type=tel>', 22, function ( assert ) {
+ QUnit.test( 'emulates placeholder for <input type=tel>', function ( assert ) {
$( '<div>' ).html( html ).appendTo( $( '#qunit-fixture' ) );
testElement( $( '#input-type-tel' ), assert );
} );
- QUnit.test( 'emulates placeholder for <input type=password>', 13, function ( assert ) {
+ QUnit.test( 'emulates placeholder for <input type=password>', function ( assert ) {
+ var $el, el, placeholder, selector = '#input-type-password';
+
$( '<div>' ).html( html ).appendTo( $( '#qunit-fixture' ) );
- var selector = '#input-type-password',
- $el = $( selector ),
- el = $el[ 0 ],
- placeholder = el.getAttribute( 'placeholder' );
+ $el = $( selector );
+ el = $el[ 0 ];
+ placeholder = el.getAttribute( 'placeholder' );
assert.strictEqual( $el.placeholder(), $el, 'should be chainable' );
} );
- QUnit.test( 'emulates placeholder for <textarea></textarea>', 22, function ( assert ) {
+ QUnit.test( 'emulates placeholder for <textarea>', function ( assert ) {
$( '<div>' ).html( html ).appendTo( $( '#qunit-fixture' ) );
testElement( $( '#textarea' ), assert );
} );
( function ( $ ) {
QUnit.module( 'jquery.tabIndex', QUnit.newMwEnvironment() );
- QUnit.test( 'firstTabIndex', 2, function ( assert ) {
+ QUnit.test( 'firstTabIndex', function ( assert ) {
var html, $testA, $testB;
html = '<form>' +
'<input tabindex="7" />' +
assert.strictEqual( $testB.firstTabIndex(), null, 'Return null if none available.' );
} );
- QUnit.test( 'lastTabIndex', 2, function ( assert ) {
+ QUnit.test( 'lastTabIndex', function ( assert ) {
var html, $testA, $testB;
html = '<form>' +
'<input tabindex="7" />' +
'jul', 'aug', 'sep', 'oct', 'nov', 'dec' ]
},
names: [ 'January', 'February', 'March', 'April', 'May', 'June',
- 'July', 'August', 'September', 'October', 'November', 'December' ],
+ 'July', 'August', 'September', 'October', 'November', 'December' ],
genitive: [ 'January', 'February', 'March', 'April', 'May', 'June',
- 'July', 'August', 'September', 'October', 'November', 'December' ],
+ 'July', 'August', 'September', 'October', 'November', 'December' ],
abbrev: [ 'Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun',
- 'Jul', 'Aug', 'Sep', 'Oct', 'Nov', 'Dec' ]
+ 'Jul', 'Aug', 'Sep', 'Oct', 'Nov', 'Dec' ]
};
},
teardown: function () {
* @param {function($table)} callback something to do before we start the testcase
*/
function parserTest( msg, parserId, data, callback ) {
- QUnit.test( msg, data.length * 2, function ( assert ) {
+ QUnit.test( msg, function ( assert ) {
var extractedR, extractedF, parser;
if ( callback !== undefined ) {
} );
}
- text = [
+ text = [
[ 'Mars', true, 'mars', 'Simple text' ],
[ 'Mẘas', true, 'mẘas', 'Non ascii character' ],
[ 'A sentence', true, 'a sentence', 'A sentence with space chars' ]
} );
} );
- // TODO add numbers sorting tests for bug 8115 with a different language
+ // TODO add numbers sorting tests for T10115 with a different language
}( jQuery, mediaWiki ) );
'jul', 'aug', 'sep', 'oct', 'nov', 'dec' ]
},
names: [ 'January', 'February', 'March', 'April', 'May', 'June',
- 'July', 'August', 'September', 'October', 'November', 'December' ],
+ 'July', 'August', 'September', 'October', 'November', 'December' ],
genitive: [ 'January', 'February', 'March', 'April', 'May', 'June',
- 'July', 'August', 'September', 'October', 'November', 'December' ],
+ 'July', 'August', 'September', 'October', 'November', 'December' ],
abbrev: [ 'Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun',
- 'Jul', 'Aug', 'Sep', 'Oct', 'Nov', 'Dec' ]
+ 'Jul', 'Aug', 'Sep', 'Oct', 'Nov', 'Dec' ]
};
},
teardown: function () {
$tr.appendTo( $thead );
for ( i = 0; i < data.length; i++ ) {
- /*jshint loopfunc: true */
$tr = $( '<tr>' );
+ // eslint-disable-next-line no-loop-func
$.each( data[ i ], function ( j, str ) {
var $td = $( '<td>' );
$td.text( str ).appendTo( $tr );
simple,
simpleAsc,
function ( $table ) {
+ var event;
$table.tablesorter(
{ sortList: [ { 0: 'desc' }, { 1: 'desc' } ] }
);
$table.find( '.headerSort:eq(0)' ).click();
// Pretend to click while pressing the multi-sort key
- var event = $.Event( 'click' );
+ event = $.Event( 'click' );
event[ $table.data( 'tablesorter' ).config.sortMultiSortKey ] = true;
$table.find( '.headerSort:eq(1)' ).trigger( event );
}
);
- QUnit.test( 'Reset sorting making table appear unsorted', 3, function ( assert ) {
+ QUnit.test( 'Reset sorting making table appear unsorted', function ( assert ) {
var $table = tableCreate( header, simple );
$table.tablesorter(
{ sortList: [
}
);
- QUnit.test( 'Basic planet table: one unsortable column', 3, function ( assert ) {
+ QUnit.test( 'Basic planet table: one unsortable column', function ( assert ) {
var $table = tableCreate( header, planets ),
$cell;
$table.find( 'tr:eq(0) > th:eq(0)' ).addClass( 'unsortable' );
// Regression tests!
tableTest(
- 'Bug 28775: German-style (dmy) short numeric dates',
+ 'T30775: German-style (dmy) short numeric dates',
[ 'Date' ],
[
// German-style dates are day-month-year
);
tableTest(
- 'Bug 28775: American-style (mdy) short numeric dates',
+ 'T30775: American-style (mdy) short numeric dates',
[ 'Date' ],
[
// American-style dates are month-day-year
);
tableTest(
- 'Bug 17141: IPv4 address sorting',
+ 'T19141: IPv4 address sorting',
[ 'IP' ],
ipv4,
ipv4Sorted,
}
);
tableTest(
- 'Bug 17141: IPv4 address sorting (reverse)',
+ 'T19141: IPv4 address sorting (reverse)',
[ 'IP' ],
ipv4,
reversed( ipv4Sorted ),
}
);
- QUnit.test( 'Rowspan not exploded on init', 1, function ( assert ) {
+ QUnit.test( 'Rowspan not exploded on init', function ( assert ) {
var $table = tableCreate( header, planets );
// Modify the table to have a multiple-row-spanning cell:
}
);
- QUnit.test( 'Test detection routine', 1, function ( assert ) {
+ QUnit.test( 'Test detection routine', function ( assert ) {
var $table;
$table = $(
'<table class="sortable">' +
} );
/** FIXME: the diff output is not very readeable. */
- QUnit.test( 'bug 32047 - caption must be before thead', 1, function ( assert ) {
+ QUnit.test( 'T34047 - caption must be before thead', function ( assert ) {
var $table;
$table = $(
'<table class="sortable">' +
assert.equal(
$table.children().get( 0 ).nodeName,
'CAPTION',
- 'First element after <thead> must be <caption> (bug 32047)'
+ 'First element after <thead> must be <caption> (T34047)'
);
} );
- QUnit.test( 'data-sort-value attribute, when available, should override sorting position', 3, function ( assert ) {
+ QUnit.test( 'data-sort-value attribute, when available, should override sorting position', function ( assert ) {
var $table, data;
// Example 1: All cells except one cell without data-sort-value,
], 'Order matches expected order (based on data-sort-value attribute values)' );
// Example 3: Test that live changes are used from data-sort-value,
- // even if they change after the tablesorter is constructed (bug 38152).
+ // even if they change after the tablesorter is constructed (T40152).
$table = $(
'<table class="sortable"><thead><tr><th>Data</th></tr></thead>' +
'<tbody>' +
.tablesorter()
.find( '.headerSort:eq(0)' ).click();
- // Change the sortValue data properties (bug 38152)
+ // Change the sortValue data properties (T40152)
// - change data
$table.find( 'td:contains(A)' ).data( 'sortValue', 3 );
// - add data
} );
- tableTest( 'bug 8115: sort numbers with commas (ascending)',
+ tableTest( 'T10115: sort numbers with commas (ascending)',
[ 'Numbers' ], numbers, numbersAsc,
function ( $table ) {
$table.tablesorter();
}
);
- tableTest( 'bug 8115: sort numbers with commas (descending)',
+ tableTest( 'T10115: sort numbers with commas (descending)',
[ 'Numbers' ], numbers, reversed( numbersAsc ),
function ( $table ) {
$table.tablesorter();
$table.find( '.headerSort:eq(0)' ).click().click();
}
);
- // TODO add numbers sorting tests for bug 8115 with a different language
+ // TODO add numbers sorting tests for T10115 with a different language
- QUnit.test( 'bug 32888 - Tables inside a tableheader cell', 2, function ( assert ) {
+ QUnit.test( 'T34888 - Tables inside a tableheader cell', function ( assert ) {
var $table;
$table = $(
'<table class="sortable" id="mw-bug-32888">' +
assert.equal(
$table.find( '> thead:eq(0) > tr > th.headerSort' ).length,
1,
- 'Child tables inside a headercell should not interfere with sortable headers (bug 32888)'
+ 'Child tables inside a headercell should not interfere with sortable headers (T34888)'
);
assert.equal(
$( '#mw-bug-32888-2' ).find( 'th.headerSort' ).length,
0,
- 'The headers of child tables inside a headercell should not be sortable themselves (bug 32888)'
+ 'The headers of child tables inside a headercell should not be sortable themselves (T34888)'
);
} );
}
);
- QUnit.test( 'Sorting images using alt text', 1, function ( assert ) {
+ QUnit.test( 'Sorting images using alt text', function ( assert ) {
var $table = $(
'<table class="sortable">' +
'<tr><th>THEAD</th></tr>' +
);
} );
- QUnit.test( 'Sorting images using alt text (complex)', 1, function ( assert ) {
+ QUnit.test( 'Sorting images using alt text (complex)', function ( assert ) {
var $table = $(
'<table class="sortable">' +
'<tr><th>THEAD</th></tr>' +
);
} );
- QUnit.test( 'Sorting images using alt text (with format autodetection)', 1, function ( assert ) {
+ QUnit.test( 'Sorting images using alt text (with format autodetection)', function ( assert ) {
var $table = $(
'<table class="sortable">' +
'<tr><th>THEAD</th></tr>' +
);
} );
- QUnit.test( 'bug 38911 - The row with the largest amount of columns should receive the sort indicators', 3, function ( assert ) {
+ QUnit.test( 'T40911 - The row with the largest amount of columns should receive the sort indicators', function ( assert ) {
var $table = $(
'<table class="sortable">' +
'<thead>' +
);
} );
- QUnit.test( 'rowspans in table headers should prefer the last row when rows are equal in length', 2, function ( assert ) {
+ QUnit.test( 'rowspans in table headers should prefer the last row when rows are equal in length', function ( assert ) {
var $table = $(
'<table class="sortable">' +
'<thead>' +
);
} );
- QUnit.test( 'holes in the table headers should not throw JS errors', 2, function ( assert ) {
+ QUnit.test( 'holes in the table headers should not throw JS errors', function ( assert ) {
var $table = $(
'<table class="sortable">' +
'<thead>' +
);
} );
- // bug 53527
- QUnit.test( 'td cells in thead should not be taken into account for longest row calculation', 2, function ( assert ) {
+ // T55527
+ QUnit.test( 'td cells in thead should not be taken into account for longest row calculation', function ( assert ) {
var $table = $(
'<table class="sortable">' +
'<thead>' +
);
} );
- // bug 41889 - exploding rowspans in more complex cases
+ // T43889 - exploding rowspans in more complex cases
tableTestHTML(
'Rowspan exploding with row headers',
'<table class="sortable">' +
]
);
- // bug 53211 - exploding rowspans in more complex cases
+ // T55211 - exploding rowspans in more complex cases
QUnit.test(
- 'Rowspan exploding with row headers and colspans', 1, function ( assert ) {
+ 'Rowspan exploding with row headers and colspans', function ( assert ) {
var $table = $( '<table class="sortable">' +
'<thead><tr><th rowspan="2">n</th><th colspan="2">foo</th><th rowspan="2">baz</th></tr>' +
'<tr><th>foo</th><th>bar</th></tr></thead>' +
]
);
- QUnit.test( 'bug 105731 - incomplete rows in table body', 3, function ( assert ) {
+ QUnit.test( 'T105731 - incomplete rows in table body', function ( assert ) {
var $table, parsers;
$table = $(
'<table class="sortable">' +
);
} );
- QUnit.test( 'bug T114721 - use of expand-child class', 2, function ( assert ) {
+ QUnit.test( 'bug T114721 - use of expand-child class', function ( assert ) {
var $table, parsers;
$table = $(
'<table class="sortable">' +
( function ( $ ) {
+ var caretSample,
+ sig = {
+ pre: '--~~~~'
+ },
+ bold = {
+ pre: '\'\'\'',
+ peri: 'Bold text',
+ post: '\'\'\''
+ },
+ h2 = {
+ pre: '== ',
+ peri: 'Heading 2',
+ post: ' ==',
+ regex: /^(\s*)(={1,6})(.*?)\2(\s*)$/,
+ regexReplace: '$1==$3==$4',
+ ownline: true
+ },
+ ulist = {
+ pre: '* ',
+ peri: 'Bulleted list item',
+ post: '',
+ ownline: true,
+ splitlines: true
+ };
QUnit.module( 'jquery.textSelection', QUnit.newMwEnvironment() );
}, opt.after );
QUnit.test( opt.description, function ( assert ) {
- var $textarea, start, end, options, text, selected,
- tests = 1;
- if ( opt.after.selected !== null ) {
- tests++;
- }
- QUnit.expect( tests );
+ var $textarea, start, end, options, text, selected;
$textarea = $( '<textarea>' );
} );
}
- var caretSample,
- sig = {
- pre: '--~~~~'
- },
- bold = {
- pre: '\'\'\'',
- peri: 'Bold text',
- post: '\'\'\''
- },
- h2 = {
- pre: '== ',
- peri: 'Heading 2',
- post: ' ==',
- regex: /^(\s*)(={1,6})(.*?)\2(\s*)$/,
- regexReplace: '$1==$3==$4',
- ownline: true
- },
- ulist = {
- pre: '* ',
- peri: 'Bulleted list item',
- post: '',
- ownline: true,
- splitlines: true
- };
-
encapsulateTest( {
description: 'Adding sig to end of text',
before: {
} );
function caretTest( options ) {
- QUnit.test( options.description, 2, function ( assert ) {
+ QUnit.test( options.description, function ( assert ) {
var pos,
$textarea = $( '<textarea>' ).text( options.text );
caretSample = 'Some big text that we like to work with. Nothing fancy... you know what I mean?';
- /* @broken: Disabled per bug 34820
+ /* @broken: Disabled per T36820
caretTest({
- description: 'getCaretPosition with original/empty selection - bug 31847 with IE 6/7/8',
+ description: 'getCaretPosition with original/empty selection - T33847 with IE 6/7/8',
text: caretSample,
start: [0, caretSample.length], // Opera and Firefox (prior to FF 6.0) default caret to the end of the box (caretSample.length)
end: [0, caretSample.length], // Other browsers default it to the beginning (0), so check both.
}
} ) );
- QUnit.test( 'origin is included in GET requests', 1, function ( assert ) {
+ QUnit.test( 'origin is included in GET requests', function ( assert ) {
var api = new mw.ForeignApi( '//localhost:4242/w/api.php' );
this.server.respond( function ( request ) {
return api.get( {} );
} );
- QUnit.test( 'origin is included in POST requests', 2, function ( assert ) {
+ QUnit.test( 'origin is included in POST requests', function ( assert ) {
var api = new mw.ForeignApi( '//localhost:4242/w/api.php' );
this.server.respond( function ( request ) {
}
} ) );
- QUnit.test( '.getCategoriesByPrefix()', 1, function ( assert ) {
+ QUnit.test( '.getCategoriesByPrefix()', function ( assert ) {
this.server.respondWith( [ 200, { 'Content-Type': 'application/json' },
'{ "query": { "allpages": [ ' +
'{ "title": "Category:Food" },' +
pages: [ {
pageid: 1,
ns: 0,
- title: 'Sandbox',
+ title: 'Sandbox',
revisions: [ {
timestamp: '2016-01-01T12:00:00Z',
contentformat: 'text/x-wiki',
pages: [ {
pageid: 4,
ns: 0,
- title: 'Async',
+ title: 'Async',
revisions: [ {
timestamp: '2016-02-01T12:00:00Z',
contentformat: 'text/x-wiki',
pages: [ {
pageid: 3,
ns: 0,
- title: 'Param',
+ title: 'Param',
revisions: [ {
timestamp: '2016-03-01T12:00:00Z',
contentformat: 'text/x-wiki',
if ( /edit.+text=Sand/.test( req.requestBody ) ) {
req.respond( 200, { 'Content-Type': 'application/json' }, JSON.stringify( {
edit: {
- 'new': true,
+ new: true,
result: 'Success',
newrevid: 41,
newtimestamp: '2016-04-01T12:00:00Z'
}
} ) );
- QUnit.test( '.getMessages()', 1, function ( assert ) {
+ QUnit.test( '.getMessages()', function ( assert ) {
this.server.respondWith( /ammessages=foo%7Cbaz/, [
200,
{ 'Content-Type': 'application/json' },
}
} ) );
- QUnit.test( 'saveOption', 2, function ( assert ) {
+ QUnit.test( 'saveOption', function ( assert ) {
var api = new mw.Api(),
stub = this.sandbox.stub( mw.Api.prototype, 'saveOptions' );
assert.deepEqual( stub.getCall( 0 ).args, [ { foo: 'bar' } ], '#saveOptions called correctly' );
} );
- QUnit.test( 'saveOptions without Unit Separator', 13, function ( assert ) {
+ QUnit.test( 'saveOptions without Unit Separator', function ( assert ) {
var api = new mw.Api( { useUS: false } );
// We need to respond to the request for token first, otherwise the other requests won't be sent
// Requests are POST, match requestBody instead of url
this.server.respond( function ( request ) {
- switch ( request.requestBody ) {
+ if ( $.inArray( request.requestBody, [
// simple
- case 'action=options&format=json&formatversion=2&change=foo%3Dbar&token=%2B%5C':
+ 'action=options&format=json&formatversion=2&change=foo%3Dbar&token=%2B%5C',
// two options
- case 'action=options&format=json&formatversion=2&change=foo%3Dbar%7Cbaz%3Dquux&token=%2B%5C':
+ 'action=options&format=json&formatversion=2&change=foo%3Dbar%7Cbaz%3Dquux&token=%2B%5C',
// not bundleable
- case 'action=options&format=json&formatversion=2&optionname=foo&optionvalue=bar%7Cquux&token=%2B%5C':
- case 'action=options&format=json&formatversion=2&optionname=bar&optionvalue=a%7Cb%7Cc&token=%2B%5C':
- case 'action=options&format=json&formatversion=2&change=baz%3Dquux&token=%2B%5C':
+ 'action=options&format=json&formatversion=2&optionname=foo&optionvalue=bar%7Cquux&token=%2B%5C',
+ 'action=options&format=json&formatversion=2&optionname=bar&optionvalue=a%7Cb%7Cc&token=%2B%5C',
+ 'action=options&format=json&formatversion=2&change=baz%3Dquux&token=%2B%5C',
// reset an option
- case 'action=options&format=json&formatversion=2&change=foo&token=%2B%5C':
+ 'action=options&format=json&formatversion=2&change=foo&token=%2B%5C',
// reset an option, not bundleable
- case 'action=options&format=json&formatversion=2&optionname=foo%7Cbar%3Dquux&token=%2B%5C':
- assert.ok( true, 'Repond to ' + request.requestBody );
- request.respond( 200, { 'Content-Type': 'application/json' },
- '{ "options": "success" }' );
- break;
- default:
- assert.ok( false, 'Unexpected request: ' + request.requestBody );
+ 'action=options&format=json&formatversion=2&optionname=foo%7Cbar%3Dquux&token=%2B%5C'
+ ] ) !== -1 ) {
+ assert.ok( true, 'Repond to ' + request.requestBody );
+ request.respond( 200, { 'Content-Type': 'application/json' },
+ '{ "options": "success" }' );
+ } else {
+ assert.ok( false, 'Unexpected request: ' + request.requestBody );
}
} );
);
} );
- QUnit.test( 'saveOptions with Unit Separator', 14, function ( assert ) {
+ QUnit.test( 'saveOptions with Unit Separator', function ( assert ) {
var api = new mw.Api( { useUS: true } );
// We need to respond to the request for token first, otherwise the other requests won't be sent
// Requests are POST, match requestBody instead of url
this.server.respond( function ( request ) {
- switch ( request.requestBody ) {
+ if ( $.inArray( request.requestBody, [
// simple
- case 'action=options&format=json&formatversion=2&change=foo%3Dbar&token=%2B%5C':
+ 'action=options&format=json&formatversion=2&change=foo%3Dbar&token=%2B%5C',
// two options
- case 'action=options&format=json&formatversion=2&change=foo%3Dbar%7Cbaz%3Dquux&token=%2B%5C':
+ 'action=options&format=json&formatversion=2&change=foo%3Dbar%7Cbaz%3Dquux&token=%2B%5C',
// bundleable with unit separator
- case 'action=options&format=json&formatversion=2&change=%1Ffoo%3Dbar%7Cquux%1Fbar%3Da%7Cb%7Cc%1Fbaz%3Dquux&token=%2B%5C':
+ 'action=options&format=json&formatversion=2&change=%1Ffoo%3Dbar%7Cquux%1Fbar%3Da%7Cb%7Cc%1Fbaz%3Dquux&token=%2B%5C',
// not bundleable with unit separator
- case 'action=options&format=json&formatversion=2&optionname=baz%3Dbaz&optionvalue=quux&token=%2B%5C':
- case 'action=options&format=json&formatversion=2&change=%1Ffoo%3Dbar%7Cquux%1Fbar%3Da%7Cb%7Cc&token=%2B%5C':
+ 'action=options&format=json&formatversion=2&optionname=baz%3Dbaz&optionvalue=quux&token=%2B%5C',
+ 'action=options&format=json&formatversion=2&change=%1Ffoo%3Dbar%7Cquux%1Fbar%3Da%7Cb%7Cc&token=%2B%5C',
// reset an option
- case 'action=options&format=json&formatversion=2&change=foo&token=%2B%5C':
+ 'action=options&format=json&formatversion=2&change=foo&token=%2B%5C',
// reset an option, not bundleable
- case 'action=options&format=json&formatversion=2&optionname=foo%7Cbar%3Dquux&token=%2B%5C':
- assert.ok( true, 'Repond to ' + request.requestBody );
- request.respond( 200, { 'Content-Type': 'application/json' },
+ 'action=options&format=json&formatversion=2&optionname=foo%7Cbar%3Dquux&token=%2B%5C'
+ ] ) !== -1 ) {
+ assert.ok( true, 'Repond to ' + request.requestBody );
+ request.respond( 200, { 'Content-Type': 'application/json' },
'{ "options": "success" }' );
- break;
- default:
- assert.ok( false, 'Unexpected request: ' + request.requestBody );
+ } else {
+ assert.ok( false, 'Unexpected request: ' + request.requestBody );
}
} );
] );
return new mw.Api().parse( new mw.Title( 'Earth' ) ).done( function ( html ) {
- assert.equal( html, '<p><b>Earth</b> is a planet.</p>', 'Parse page by Title object' );
+ assert.equal( html, '<p><b>Earth</b> is a planet.</p>', 'Parse page by Title object' );
} );
} );
}( mediaWiki ) );
]
) );
- // Don't cache error (bug 65268)
+ // Don't cache error (T67268)
return api.getToken( 'testerror' )
.then( null, function ( err ) {
assert.equal( err, 'bite-me', 'Expected error' );
return api.postWithToken( 'testassertpost', { action: 'example', key: 'foo', assert: 'user' } )
// Cast error to success and vice versa
- .then( function ( ) {
+ .then( function () {
return $.Deferred().reject( 'Unexpected success' );
}, function ( errorCode ) {
assert.equal( errorCode, 'assertuserfailed', 'getToken fails assert' );
this.server.respond( [ 200, { 'Content-Type': 'application/json' }, '{ "example": "quux" }' ] );
return api.postWithToken( 'csrf',
- { action: 'example' },
- {
- headers: {
- 'X-Foo': 'Bar'
- }
+ { action: 'example' },
+ {
+ headers: {
+ 'X-Foo': 'Bar'
}
- )
- .then( function () {
- assert.equal( test.server.requests[ 0 ].requestHeaders[ 'X-Foo' ], 'Bar', 'Header sent' );
+ }
+ )
+ .then( function () {
+ assert.equal( test.server.requests[ 0 ].requestHeaders[ 'X-Foo' ], 'Bar', 'Header sent' );
- return api.postWithToken( 'csrf',
- { action: 'example' },
- function () {
- assert.ok( false, 'This parameter cannot be a callback' );
- }
- );
- } )
- .then( function ( data ) {
- assert.equal( data.example, 'quux' );
+ return api.postWithToken( 'csrf',
+ { action: 'example' },
+ function () {
+ assert.ok( false, 'This parameter cannot be a callback' );
+ }
+ );
+ } )
+ .then( function ( data ) {
+ assert.equal( data.example, 'quux' );
- assert.equal( test.server.requests.length, 2, 'Request made' );
- } );
+ assert.equal( test.server.requests.length, 2, 'Request made' );
+ } );
} );
QUnit.test( 'postWithToken() - badtoken', function ( assert ) {
}
} );
- QUnit.test( '#abort', 3, function ( assert ) {
+ QUnit.test( '#abort', function ( assert ) {
this.api.get( {
a: 1
} );
( function ( mw, $ ) {
QUnit.module( 'mediawiki.api.upload', QUnit.newMwEnvironment( {} ) );
- QUnit.test( 'Basic functionality', 2, function ( assert ) {
+ QUnit.test( 'Basic functionality', function ( assert ) {
var api = new mw.Api();
assert.ok( api.upload );
assert.throws( function () {
} );
} );
- QUnit.test( 'Set up iframe upload', 5, function ( assert ) {
+ QUnit.test( 'Set up iframe upload', function ( assert ) {
var $iframe, $form, $input,
api = new mw.Api();
hidefilter4: 0,
hidefilter5: 0,
hidefilter6: 0,
- group3: 'all',
+ group3: 'all'
},
'Unselected filters return all parameters falsey or \'all\'.'
);
filters: [
{ name: 'filter1' },
{ name: 'filter2' },
- { name: 'filter3' },
+ { name: 'filter3' }
]
},
group2: {
filters: [
{ name: 'filter4' },
{ name: 'filter5' },
- { name: 'filter6' },
+ { name: 'filter6' }
]
}
},
+ model = new mw.rcfilters.dm.FiltersViewModel(),
isCapsuleItemMuted = function ( filterName ) {
var itemModel = model.getItemByName( filterName ),
groupModel = itemModel.getGroupModel();
filter4: false,
filter5: false,
filter6: false
- },
- model = new mw.rcfilters.dm.FiltersViewModel();
+ };
model.initializeFilters( definition );
conflicts: [ 'filter3' ]
},
{
- name: 'filter6',
+ name: 'filter6'
}
]
}
$.extend( true, {}, baseFullState, {
filter1: { selected: true },
filter2: { conflicted: true },
- filter4: { conflicted: true },
+ filter4: { conflicted: true }
} ),
'Selecting a filter set its conflicts list as "conflicted".'
);
$.extend( true, {}, baseFullState, {
filter1: { selected: true, conflicted: true },
filter2: { conflicted: true },
- filter4: { selected: true, conflicted: true },
+ filter4: { selected: true, conflicted: true }
} ),
'Selecting a conflicting filter sets both sides to conflicted and selected.'
);
'Selecting a non-conflicting filter from a conflicting group removes the conflict'
);
} );
+
+ QUnit.test( 'Filter highlights', function ( assert ) {
+ var definition = {
+ group1: {
+ title: 'Group 1',
+ type: 'string_options',
+ filters: [
+ { name: 'filter1', class: 'class1' },
+ { name: 'filter2', class: 'class2' },
+ { name: 'filter3', class: 'class3' },
+ { name: 'filter4', class: 'class4' },
+ { name: 'filter5', class: 'class5' },
+ { name: 'filter6' }
+ ]
+ }
+ },
+ model = new mw.rcfilters.dm.FiltersViewModel();
+
+ model.initializeFilters( definition );
+
+ assert.ok(
+ !model.isHighlightEnabled(),
+ 'Initially, highlight is disabled.'
+ );
+
+ model.toggleHighlight( true );
+ assert.ok(
+ model.isHighlightEnabled(),
+ 'Highlight is enabled on toggle.'
+ );
+
+ model.setHighlightColor( 'filter1', 'color1' );
+ model.setHighlightColor( 'filter2', 'color2' );
+
+ assert.deepEqual(
+ model.getHighlightedItems().map( function ( item ) {
+ return item.getName();
+ } ),
+ [
+ 'filter1',
+ 'filter2'
+ ],
+ 'Highlighted items are highlighted.'
+ );
+
+ assert.equal(
+ model.getItemByName( 'filter1' ).getHighlightColor(),
+ 'color1',
+ 'Item highlight color is set.'
+ );
+
+ model.setHighlightColor( 'filter1', 'color1changed' );
+ assert.equal(
+ model.getItemByName( 'filter1' ).getHighlightColor(),
+ 'color1changed',
+ 'Item highlight color is changed on setHighlightColor.'
+ );
+
+ model.clearHighlightColor( 'filter1' );
+ assert.deepEqual(
+ model.getHighlightedItems().map( function ( item ) {
+ return item.getName();
+ } ),
+ [
+ 'filter2'
+ ],
+ 'Clear highlight from an item results in the item no longer being highlighted.'
+ );
+
+ // Reset
+ model = new mw.rcfilters.dm.FiltersViewModel();
+ model.initializeFilters( definition );
+
+ model.setHighlightColor( 'filter1', 'color1' );
+ model.setHighlightColor( 'filter2', 'color2' );
+ model.setHighlightColor( 'filter3', 'color3' );
+
+ assert.deepEqual(
+ model.getHighlightedItems().map( function ( item ) {
+ return item.getName();
+ } ),
+ [
+ 'filter1',
+ 'filter2',
+ 'filter3'
+ ],
+ 'Even if highlights are not enabled, the items remember their highlight state'
+ // NOTE: When actually displaying the highlights, the UI checks whether
+ // highlighting is generally active and then goes over the highlighted
+ // items. The item models, however, and the view model in general, still
+ // retains the knowledge about which filters have different colors, so we
+ // can seamlessly return to the colors the user previously chose if they
+ // reapply highlights.
+ );
+
+ // Reset
+ model = new mw.rcfilters.dm.FiltersViewModel();
+ model.initializeFilters( definition );
+
+ model.setHighlightColor( 'filter1', 'color1' );
+ model.setHighlightColor( 'filter6', 'color6' );
+
+ assert.deepEqual(
+ model.getHighlightedItems().map( function ( item ) {
+ return item.getName();
+ } ),
+ [
+ 'filter1'
+ ],
+ 'Items without a specified class identifier are not highlighted.'
+ );
+ } );
}( mediaWiki, jQuery ) );
// TODO: verify checkboxes == [ 'nsassociated', 'nsinvert' ]
- QUnit.test( '"all" namespace disable checkboxes', 8, function ( assert ) {
+ QUnit.test( '"all" namespace disable checkboxes', function ( assert ) {
var selectHtml, $env, $options,
rc = require( 'mediawiki.special.recentchanges' );
( function ( mw, $ ) {
QUnit.module( 'mediawiki.RegExp' );
- QUnit.test( 'escape', 16, function ( assert ) {
+ QUnit.test( 'escape', function ( assert ) {
var specials, normal;
specials = [
( function ( mw, $ ) {
+ /* eslint-disable camelcase */
var repeat = function ( input, multiplier ) {
- return new Array( multiplier + 1 ).join( input );
- },
- cases = {
+ return new Array( multiplier + 1 ).join( input );
+ },
// See also TitleTest.php#testSecureAndSplit
- valid: [
- 'Sandbox',
- 'A "B"',
- 'A \'B\'',
- '.com',
- '~',
- '"',
- '\'',
- 'Talk:Sandbox',
- 'Talk:Foo:Sandbox',
- 'File:Example.svg',
- 'File_talk:Example.svg',
- 'Foo/.../Sandbox',
- 'Sandbox/...',
- 'A~~',
- ':A',
- // Length is 256 total, but only title part matters
- 'Category:' + repeat( 'x', 248 ),
- repeat( 'x', 252 )
- ],
- invalid: [
- '',
- ':',
- '__ __',
- ' __ ',
- // Bad characters forbidden regardless of wgLegalTitleChars
- 'A [ B',
- 'A ] B',
- 'A { B',
- 'A } B',
- 'A < B',
- 'A > B',
- 'A | B',
- 'A \t B',
- 'A \n B',
- // URL encoding
- 'A%20B',
- 'A%23B',
- 'A%2523B',
- // XML/HTML character entity references
- // Note: The ones with # are commented out as those are interpreted as fragment and
- // as such end up being valid.
- 'A é B',
- // 'A é B',
- // 'A é B',
- // Subject of NS_TALK does not roundtrip to NS_MAIN
- 'Talk:File:Example.svg',
- // Directory navigation
- '.',
- '..',
- './Sandbox',
- '../Sandbox',
- 'Foo/./Sandbox',
- 'Foo/../Sandbox',
- 'Sandbox/.',
- 'Sandbox/..',
- // Tilde
- 'A ~~~ Name',
- 'A ~~~~ Signature',
- 'A ~~~~~ Timestamp',
- repeat( 'x', 256 ),
- // Extension separation is a js invention, for length
- // purposes it is part of the title
- repeat( 'x', 252 ) + '.json',
- // Namespace prefix without actual title
- 'Talk:',
- 'Category: ',
- 'Category: #bar'
- ]
- };
+ cases = {
+ valid: [
+ 'Sandbox',
+ 'A "B"',
+ 'A \'B\'',
+ '.com',
+ '~',
+ '"',
+ '\'',
+ 'Talk:Sandbox',
+ 'Talk:Foo:Sandbox',
+ 'File:Example.svg',
+ 'File_talk:Example.svg',
+ 'Foo/.../Sandbox',
+ 'Sandbox/...',
+ 'A~~',
+ ':A',
+ // Length is 256 total, but only title part matters
+ 'Category:' + repeat( 'x', 248 ),
+ repeat( 'x', 252 )
+ ],
+ invalid: [
+ '',
+ ':',
+ '__ __',
+ ' __ ',
+ // Bad characters forbidden regardless of wgLegalTitleChars
+ 'A [ B',
+ 'A ] B',
+ 'A { B',
+ 'A } B',
+ 'A < B',
+ 'A > B',
+ 'A | B',
+ 'A \t B',
+ 'A \n B',
+ // URL encoding
+ 'A%20B',
+ 'A%23B',
+ 'A%2523B',
+ // XML/HTML character entity references
+ // Note: The ones with # are commented out as those are interpreted as fragment and
+ // as such end up being valid.
+ 'A é B',
+ // 'A é B',
+ // 'A é B',
+ // Subject of NS_TALK does not roundtrip to NS_MAIN
+ 'Talk:File:Example.svg',
+ // Directory navigation
+ '.',
+ '..',
+ './Sandbox',
+ '../Sandbox',
+ 'Foo/./Sandbox',
+ 'Foo/../Sandbox',
+ 'Sandbox/.',
+ 'Sandbox/..',
+ // Tilde
+ 'A ~~~ Name',
+ 'A ~~~~ Signature',
+ 'A ~~~~~ Timestamp',
+ repeat( 'x', 256 ),
+ // Extension separation is a js invention, for length
+ // purposes it is part of the title
+ repeat( 'x', 252 ) + '.json',
+ // Namespace prefix without actual title
+ 'Talk:',
+ 'Category: ',
+ 'Category: #bar'
+ ]
+ };
QUnit.module( 'mediawiki.Title', QUnit.newMwEnvironment( {
// mw.Title relies on these three config vars
// testing custom / localized namespace
100: 'Penguins'
},
- // jscs: disable requireCamelCaseOrUpperCaseIdentifiers
wgNamespaceIds: {
media: -2,
special: -1,
penguins: 100,
antarctic_waterfowl: 100
},
- // jscs: enable requireCamelCaseOrUpperCaseIdentifiers
wgCaseSensitiveNamespaces: []
}
} ) );
- QUnit.test( 'constructor', cases.invalid.length, function ( assert ) {
+ QUnit.test( 'constructor', function ( assert ) {
var i, title;
for ( i = 0; i < cases.valid.length; i++ ) {
title = new mw.Title( cases.valid[ i ] );
}
for ( i = 0; i < cases.invalid.length; i++ ) {
- /*jshint loopfunc:true */
title = cases.invalid[ i ];
+ // eslint-disable-next-line no-loop-func
assert.throws( function () {
return new mw.Title( title );
}, cases.invalid[ i ] );
}
} );
- QUnit.test( 'newFromText', cases.valid.length + cases.invalid.length, function ( assert ) {
+ QUnit.test( 'newFromText', function ( assert ) {
var i;
for ( i = 0; i < cases.valid.length; i++ ) {
assert.equal(
}
} );
- QUnit.test( 'makeTitle', 6, function ( assert ) {
+ QUnit.test( 'makeTitle', function ( assert ) {
var cases, i, title, expected,
NS_MAIN = 0,
NS_TALK = 1,
}
} );
- QUnit.test( 'Basic parsing', 21, function ( assert ) {
+ QUnit.test( 'Basic parsing', function ( assert ) {
var title;
title = new mw.Title( 'File:Foo_bar.JPG' );
assert.equal( title.getPrefixedText(), '.foo' );
} );
- QUnit.test( 'Transformation', 12, function ( assert ) {
+ QUnit.test( 'Transformation', function ( assert ) {
var title;
title = new mw.Title( 'File:quux pif.jpg' );
assert.equal( title.getFragment(), ' foo bar baz', 'Fragment' );
} );
- QUnit.test( 'Namespace detection and conversion', 10, function ( assert ) {
+ QUnit.test( 'Namespace detection and conversion', function ( assert ) {
var title;
title = new mw.Title( 'File:User:Example' );
assert.equal( title.toString(), 'Penguins:Flightless_yet_cute.jpg' );
} );
- QUnit.test( 'Throw error on invalid title', 1, function ( assert ) {
+ QUnit.test( 'Throw error on invalid title', function ( assert ) {
assert.throws( function () {
return new mw.Title( '' );
}, 'Throw error on empty string' );
} );
- QUnit.test( 'Case-sensivity', 5, function ( assert ) {
+ QUnit.test( 'Case-sensivity', function ( assert ) {
var title;
// Default config
assert.equal( title.toString(), 'User:John', '$wgCapitalLinks=false: User namespace is insensitive, first-letter becomes uppercase' );
} );
- QUnit.test( 'toString / toText', 2, function ( assert ) {
+ QUnit.test( 'toString / toText', function ( assert ) {
var title = new mw.Title( 'Some random page' );
assert.equal( title.toString(), title.getPrefixedDb() );
assert.equal( title.toText(), title.getPrefixedText() );
} );
- QUnit.test( 'getExtension', 7, function ( assert ) {
+ QUnit.test( 'getExtension', function ( assert ) {
function extTest( pagename, ext, description ) {
var title = new mw.Title( pagename );
assert.equal( title.getExtension(), ext, description || pagename );
extTest( 'MediaWiki:Vector.js', 'js' );
extTest( 'User:Example/common.css', 'css' );
- extTest( 'File:Example.longextension', 'longextension', 'Extension parsing not limited (bug 36151)' );
+ extTest( 'File:Example.longextension', 'longextension', 'Extension parsing not limited (T38151)' );
extTest( 'Example/information.json', 'json', 'Extension parsing not restricted from any namespace' );
extTest( 'Foo.', null, 'Trailing dot is not an extension' );
extTest( 'Foo..', null, 'Trailing dots are not an extension' );
// extTest( '.NET', null, 'Leading dot is (or is not?) an extension' );
} );
- QUnit.test( 'exists', 3, function ( assert ) {
+ QUnit.test( 'exists', function ( assert ) {
var title;
// Empty registry, checks default to null
} );
- QUnit.test( 'getUrl', 4, function ( assert ) {
+ QUnit.test( 'getUrl', function ( assert ) {
var title;
mw.config.set( {
wgScript: '/w/index.php',
assert.equal( title.getUrl( { meme: true } ), '/w/index.php?title=User_talk:John_Cena&meme=true#And_His_Name_Is', 'title with fragment and query parameter' );
} );
- QUnit.test( 'newFromImg', 44, function ( assert ) {
+ QUnit.test( 'newFromImg', function ( assert ) {
var title, i, thisCase, prefix,
cases = [
{
}
} );
- QUnit.test( 'getRelativeText', 5, function ( assert ) {
+ QUnit.test( 'getRelativeText', function ( assert ) {
var i, thisCase, title,
cases = [
{
}
} );
- QUnit.test( 'normalizeExtension', 5, function ( assert ) {
+ QUnit.test( 'normalizeExtension', function ( assert ) {
var extension, i, thisCase, prefix,
cases = [
{
}
} );
- QUnit.test( 'newFromUserInput', 12, function ( assert ) {
+ QUnit.test( 'newFromUserInput', function ( assert ) {
var title, i, thisCase, prefix,
cases = [
{
}
} );
- QUnit.test( 'newFromFileName', 54, function ( assert ) {
+ QUnit.test( 'newFromFileName', function ( assert ) {
var title, i, thisCase, prefix,
cases = [
{
} ) );
$.each( [ true, false ], function ( i, strictMode ) {
- QUnit.test( 'Basic construction and properties (' + ( strictMode ? '' : 'non-' ) + 'strict mode)', 2, function ( assert ) {
+ QUnit.test( 'Basic construction and properties (' + ( strictMode ? '' : 'non-' ) + 'strict mode)', function ( assert ) {
var uriString, uri;
uriString = 'http://www.ietf.org/rfc/rfc2396.txt';
uri = new mw.Uri( uriString, {
} );
} );
- QUnit.test( 'Constructor( String[, Object ] )', 11, function ( assert ) {
+ QUnit.test( 'Constructor( String[, Object ] )', function ( assert ) {
var uri;
uri = new mw.Uri( 'http://www.example.com/dir/?m=foo&m=bar&n=1', {
} );
assert.equal( uri.toString(), 'http://example.com/bar/baz', 'normalize URI without protocol or // in loose mode' );
- /*jshint -W001 */
uri = new mw.Uri( 'http://example.com/index.php?key=key&hasOwnProperty=hasOwnProperty&constructor=constructor&watch=watch' );
assert.deepEqual(
uri.query,
},
'Keys in query strings support names of Object prototypes (bug T114344)'
);
- /*jshint +W001 */
} );
- QUnit.test( 'Constructor( Object )', 3, function ( assert ) {
+ QUnit.test( 'Constructor( Object )', function ( assert ) {
var uri = new mw.Uri( {
protocol: 'http',
host: 'www.foo.local',
);
} );
- QUnit.test( 'Constructor( empty[, Object ] )', 5, function ( assert ) {
+ QUnit.test( 'Constructor( empty[, Object ] )', function ( assert ) {
var testuri, MyUri, uri;
testuri = 'http://example.org/w/index.php?a=1&a=2';
assert.deepEqual( uri.query, { a: '2' }, 'null, with options' );
} );
- QUnit.test( 'Properties', 8, function ( assert ) {
+ QUnit.test( 'Properties', function ( assert ) {
var uriBase, uri;
uriBase = new mw.Uri( 'http://en.wiki.local/w/api.php' );
assert.ok( uri.toString().indexOf( 'pif=paf' ) >= 0, 'extend query arguments' );
} );
- QUnit.test( '.getQueryString()', 2, function ( assert ) {
+ QUnit.test( '.getQueryString()', function ( assert ) {
var uri = new mw.Uri( 'http://search.example.com/?q=uri' );
assert.deepEqual(
} );
- QUnit.test( '.clone()', 6, function ( assert ) {
+ QUnit.test( '.clone()', function ( assert ) {
var original, clone;
original = new mw.Uri( 'http://foo.example.org/index.php?one=1&two=2' );
assert.deepEqual(
original.query,
{ one: '1', two: '2' },
- 'Properties is deep cloned (bug 37708)'
+ 'Properties is deep cloned (T39708)'
);
} );
- QUnit.test( '.toString() after query manipulation', 8, function ( assert ) {
+ QUnit.test( '.toString() after query manipulation', function ( assert ) {
var uri;
uri = new mw.Uri( 'http://www.example.com/dir/?m=foo&m=bar&n=1', {
assert.equal( uri.toString(), 'http://www.example.com/dir/', 'empty array value is ommitted' );
} );
- QUnit.test( 'Variable defaultUri', 2, function ( assert ) {
+ QUnit.test( 'Variable defaultUri', function ( assert ) {
var uri,
href = 'http://example.org/w/index.php#here',
UriClass = mw.UriRelative( function () {
);
} );
- QUnit.test( 'Advanced URL', 11, function ( assert ) {
+ QUnit.test( 'Advanced URL', function ( assert ) {
var uri, queryString, relativePath;
uri = new mw.Uri( 'http://auth@www.example.com:81/dir/dir.2/index.htm?q1=0&&test1&test2=value+%28escaped%29#top' );
assert.ok( relativePath.indexOf( uri.fragment ) >= 0, 'fragment in relative path' );
} );
- QUnit.test( 'Parse a uri with an @ symbol in the path and query', 1, function ( assert ) {
+ QUnit.test( 'Parse a uri with an @ symbol in the path and query', function ( assert ) {
var uri = new mw.Uri( 'http://www.example.com/test@test?x=@uri&y@=uri&z@=@' );
assert.deepEqual(
);
} );
- QUnit.test( 'Handle protocol-relative URLs', 5, function ( assert ) {
+ QUnit.test( 'Handle protocol-relative URLs', function ( assert ) {
var UriRel, uri;
UriRel = mw.UriRelative( 'glork://en.wiki.local/foo.php' );
assert.equal( uri.toString(), 'http://en.wiki.local/foo.com', 'handle absolute paths by supplying host from document in strict mode' );
} );
- QUnit.test( 'bug 35658', 2, function ( assert ) {
+ QUnit.test( 'T37658', function ( assert ) {
var testProtocol, testServer, testPort, testPath, UriClass, uri, href;
testProtocol = 'https://';
( function ( mw, $ ) {
- QUnit.module( 'mediawiki.cldr', QUnit.newMwEnvironment() );
-
var pluralTestcases = {
/*
* Sample:
]
};
+ QUnit.module( 'mediawiki.cldr', QUnit.newMwEnvironment() );
+
function pluralTest( langCode, tests ) {
- QUnit.test( 'Plural Test for ' + langCode, tests.length, function ( assert ) {
- for ( var i = 0; i < tests.length; i++ ) {
+ QUnit.test( 'Plural Test for ' + langCode, function ( assert ) {
+ var i;
+ for ( i = 0; i < tests.length; i++ ) {
assert.equal(
mw.language.convertPlural( tests[ i ][ 0 ], tests[ i ][ 1 ] ),
tests[ i ][ 2 ],
}
} ) );
- QUnit.test( 'set( key, value )', 7, function ( assert ) {
+ QUnit.test( 'set( key, value )', function ( assert ) {
var call;
// Simple case
assert.strictEqual( call[ 1 ], '0', '0 is value' );
} );
- QUnit.test( 'set( key, value, expires )', 6, function ( assert ) {
+ QUnit.test( 'set( key, value, expires )', function ( assert ) {
var date, options;
date = new Date();
assert.strictEqual( options.expires, date, 'custom expiration (with wgCookieExpiration=0)' );
} );
- QUnit.test( 'set( key, value, options )', 4, function ( assert ) {
+ QUnit.test( 'set( key, value, options )', function ( assert ) {
var date, call;
mw.cookie.set( 'foo', 'bar', {
}, 'Options (incl. expires)' );
} );
- QUnit.test( 'get( key ) - no values', 6, function ( assert ) {
+ QUnit.test( 'get( key ) - no values', function ( assert ) {
var key, value;
mw.cookie.get( 'foo' );
assert.strictEqual( value, 'bar', 'Custom default value' );
} );
- QUnit.test( 'get( key ) - with value', 1, function ( assert ) {
+ QUnit.test( 'get( key ) - with value', function ( assert ) {
var value;
$.cookie.returns( 'bar' );
assert.strictEqual( value, 'bar', 'Return value of cookie' );
} );
- QUnit.test( 'get( key, prefix )', 1, function ( assert ) {
+ QUnit.test( 'get( key, prefix )', function ( assert ) {
var key;
mw.cookie.get( 'foo', 'bar' );
( function ( $, mw ) {
QUnit.module( 'mediawiki.errorLogger', QUnit.newMwEnvironment() );
- QUnit.test( 'installGlobalHandler', 7, function ( assert ) {
+ QUnit.test( 'installGlobalHandler', function ( assert ) {
var w = {},
errorMessage = 'Foo',
errorUrl = 'http://example.com',
w.onerror( errorMessage, errorUrl, errorLine, errorColumn, errorObject );
sinon.assert.calledWithExactly( mw.track, 'global.error',
sinon.match( { errorMessage: errorMessage, url: errorUrl, lineNumber: errorLine,
- columnNumber: errorColumn, errorObject: errorObject } ) );
+ columnNumber: errorColumn, errorObject: errorObject } ) );
w = { onerror: oldHandler };
QUnit.module( 'mediawiki.experiments' );
- QUnit.test( 'getBucket( experiment, token )', 4, function ( assert ) {
+ QUnit.test( 'getBucket( experiment, token )', function ( assert ) {
var experiment = createExperiment(),
token = '123457890';
( function ( mw ) {
QUnit.module( 'mediawiki.html' );
- QUnit.test( 'escape', 2, function ( assert ) {
+ QUnit.test( 'escape', function ( assert ) {
assert.throws(
function () {
mw.html.escape();
);
} );
- QUnit.test( 'element()', 1, function ( assert ) {
+ QUnit.test( 'element()', function ( assert ) {
assert.equal(
mw.html.element(),
'<undefined/>',
);
} );
- QUnit.test( 'element( tagName )', 1, function ( assert ) {
+ QUnit.test( 'element( tagName )', function ( assert ) {
assert.equal( mw.html.element( 'div' ), '<div/>', 'DIV' );
} );
- QUnit.test( 'element( tagName, attrs )', 2, function ( assert ) {
+ QUnit.test( 'element( tagName, attrs )', function ( assert ) {
assert.equal( mw.html.element( 'div', {} ), '<div/>', 'DIV' );
assert.equal(
);
} );
- QUnit.test( 'element( tagName, attrs, content )', 8, function ( assert ) {
+ QUnit.test( 'element( tagName, attrs, content )', function ( assert ) {
assert.equal( mw.html.element( 'div', {}, '' ), '<div></div>', 'DIV with empty attributes and content' );
( function ( mw, $ ) {
+ /* eslint-disable camelcase */
var formatText, formatParse, formatnumTests, specialCharactersPageName, expectedListUsers,
expectedListUsersSitename, expectedLinkPagenamee, expectedEntrypoints,
mwLanguageCache = {},
},
config: {
wgArticlePath: '/wiki/$1',
- // jscs:disable requireCamelCaseOrUpperCaseIdentifiers
wgNamespaceIds: {
template: 10,
template_talk: 11,
szablon: 10,
dyskusja_szablonu: 11
},
- // jscs:enable requireCamelCaseOrUpperCaseIdentifiers
wgFormattedNamespaces: {
// Localised
10: 'Szablon',
* that may be asynchronous. Invoke the callback parameter when done.
*/
function process( tasks ) {
- /*jshint latedef:false */
function abort() {
tasks.splice( 0, tasks.length );
+ // eslint-disable-next-line no-use-before-define
next();
}
function next() {
+ var task;
if ( !tasks ) {
// This happens if after the process is completed, one of our callbacks is
// invoked. This can happen if a test timed out but the process was still
// running. In that case, ignore it. Don't invoke complete() a second time.
return;
}
- var task = tasks.shift();
+ task = tasks.shift();
if ( task ) {
task( next, abort );
} else {
next();
}
- QUnit.test( 'Replace', 15, function ( assert ) {
+ QUnit.test( 'Replace', function ( assert ) {
mw.messages.set( 'simple', 'Foo $1 baz $2' );
assert.equal( formatParse( 'simple' ), 'Foo $1 baz $2', 'Replacements with no substitutes' );
);
} );
- QUnit.test( 'Plural', 9, function ( assert ) {
+ QUnit.test( 'Plural', function ( assert ) {
assert.equal( formatParse( 'plural-msg', 0 ), 'Found 0 items', 'Plural test for english with zero as count' );
assert.equal( formatParse( 'plural-msg', 1 ), 'Found 1 item', 'Singular test for english' );
assert.equal( formatParse( 'plural-msg', 2 ), 'Found 2 items', 'Plural test for english' );
assert.equal( formatParse( 'plural-empty-explicit-form', 2 ), 'There is me and other people.' );
} );
- QUnit.test( 'Gender', 15, function ( assert ) {
+ QUnit.test( 'Gender', function ( assert ) {
var originalGender = mw.user.options.get( 'gender' );
// TODO: These tests should be for mw.msg once mw.msg integrated with mw.jqueryMsg
mw.user.options.set( 'gender', originalGender );
} );
- QUnit.test( 'Case changing', 8, function ( assert ) {
+ QUnit.test( 'Case changing', function ( assert ) {
mw.messages.set( 'to-lowercase', '{{lc:thIS hAS MEsSed uP CapItaliZatiON}}' );
assert.equal( formatParse( 'to-lowercase' ), 'this has messed up capitalization', 'To lowercase' );
assert.equal( formatParse( 'all-caps-except-first' ), 'tHIS HAS MESSED UP CAPITALIZATION', 'To opposite sentence case' );
} );
- QUnit.test( 'Grammar', 2, function ( assert ) {
+ QUnit.test( 'Grammar', function ( assert ) {
assert.equal( formatParse( 'grammar-msg' ), 'Przeszukaj Wiki', 'Grammar Test with sitename' );
mw.messages.set( 'grammar-msg-wrong-syntax', 'Przeszukaj {{GRAMMAR:grammar_case_xyz}}' );
assert.equal( formatParse( 'grammar-msg-wrong-syntax' ), 'Przeszukaj ', 'Grammar Test with wrong grammar template syntax' );
} );
- QUnit.test( 'Match PHP parser', mw.libs.phpParserData.tests.length, function ( assert ) {
+ QUnit.test( 'Match PHP parser', function ( assert ) {
+ var tasks;
mw.messages.set( mw.libs.phpParserData.messages );
- var tasks = $.map( mw.libs.phpParserData.tests, function ( test ) {
+ tasks = $.map( mw.libs.phpParserData.tests, function ( test ) {
var done = assert.async();
return function ( next, abort ) {
getMwLanguage( test.lang )
.then( function ( langClass ) {
+ var parser;
mw.config.set( 'wgUserLanguage', test.lang );
- var parser = new mw.jqueryMsg.parser( { language: langClass } );
+ // eslint-disable-next-line new-cap
+ parser = new mw.jqueryMsg.parser( { language: langClass } );
assert.equal(
parser.parse( test.key, test.args ).html(),
test.result,
process( tasks );
} );
- QUnit.test( 'Links', 15, function ( assert ) {
+ QUnit.test( 'Links', function ( assert ) {
var testCases,
expectedDisambiguationsText,
expectedMultipleBars,
} );
} );
- QUnit.test( 'Replacements in links', 14, function ( assert ) {
+ QUnit.test( 'Replacements in links', function ( assert ) {
var testCases = [
[
'extlink-param-href-full',
} );
// Tests that {{-transformation vs. general parsing are done as requested
- QUnit.test( 'Curly brace transformation', 16, function ( assert ) {
+ QUnit.test( 'Curly brace transformation', function ( assert ) {
var oldUserLang = mw.config.get( 'wgUserLanguage' );
assertBothModes( assert, [ 'gender-msg', 'Bob', 'male' ], 'Bob: blue', 'gender is resolved' );
mw.config.set( 'wgUserLanguage', oldUserLang );
} );
- QUnit.test( 'Int', 4, function ( assert ) {
+ QUnit.test( 'Int', function ( assert ) {
var newarticletextSource = 'You have followed a link to a page that does not exist yet. To create the page, start typing in the box below (see the [[{{Int:Foobar}}|foobar]] for more info). If you are here by mistake, click your browser\'s back button.',
expectedNewarticletext,
helpPageTitle = 'Help:Foobar';
);
} );
- QUnit.test( 'Ns', 4, function ( assert ) {
+ QUnit.test( 'Ns', function ( assert ) {
mw.messages.set( 'ns-template-talk', '{{ns:Template talk}}' );
assert.equal(
formatParse( 'ns-template-talk' ),
// Tests that getMessageFunction is used for non-plain messages with curly braces or
// square brackets, but not otherwise.
- QUnit.test( 'mw.Message.prototype.parser monkey-patch', 22, function ( assert ) {
+ QUnit.test( 'mw.Message.prototype.parser monkey-patch', function ( assert ) {
var oldGMF, outerCalled, innerCalled;
mw.messages.set( {
}
];
- QUnit.test( 'formatnum', formatnumTests.length, function ( assert ) {
+ QUnit.test( 'formatnum', function ( assert ) {
+ var queue;
mw.messages.set( 'formatnum-msg', '{{formatnum:$1}}' );
mw.messages.set( 'formatnum-msg-int', '{{formatnum:$1|R}}' );
- var queue = $.map( formatnumTests, function ( test ) {
+ queue = $.map( formatnumTests, function ( test ) {
var done = assert.async();
return function ( next, abort ) {
getMwLanguage( test.lang )
.then( function ( langClass ) {
+ var parser;
mw.config.set( 'wgUserLanguage', test.lang );
- var parser = new mw.jqueryMsg.parser( { language: langClass } );
+ // eslint-disable-next-line new-cap
+ parser = new mw.jqueryMsg.parser( { language: langClass } );
assert.equal(
parser.parse( test.integer ? 'formatnum-msg-int' : 'formatnum-msg',
[ test.number ] ).html(),
} );
// HTML in wikitext
- QUnit.test( 'HTML', 33, function ( assert ) {
+ QUnit.test( 'HTML', function ( assert ) {
mw.messages.set( 'jquerymsg-italics-msg', '<i>Very</i> important' );
assertBothModes( assert, [ 'jquerymsg-italics-msg' ], mw.messages.get( 'jquerymsg-italics-msg' ), 'Simple italics unchanged' );
);
} );
- QUnit.test( 'Nowiki', 3, function ( assert ) {
+ QUnit.test( 'Nowiki', function ( assert ) {
mw.messages.set( 'jquerymsg-nowiki-link', 'Foo <nowiki>[[bar]]</nowiki> baz.' );
assert.equal(
formatParse( 'jquerymsg-nowiki-link' ),
);
} );
- QUnit.test( 'Behavior in case of invalid wikitext', 3, function ( assert ) {
+ QUnit.test( 'Behavior in case of invalid wikitext', function ( assert ) {
+ var logSpy;
mw.messages.set( 'invalid-wikitext', '<b>{{FAIL}}</b>' );
this.suppressWarnings();
- var logSpy = this.sandbox.spy( mw.log, 'warn' );
+ logSpy = this.sandbox.spy( mw.log, 'warn' );
assert.equal(
formatParse( 'invalid-wikitext' ),
assert.equal( logSpy.callCount, 2, 'mw.log.warn calls' );
} );
- QUnit.test( 'Integration', 5, function ( assert ) {
+ QUnit.test( 'Integration', function ( assert ) {
var expected, logSpy, msg;
expected = '<b><a title="Bold" href="/wiki/Bold">Bold</a>!</b>';
( function ( $ ) {
QUnit.module( 'mediawiki.jscompat', QUnit.newMwEnvironment() );
- QUnit.test( 'Variable with Unicode letter in name', 3, function ( assert ) {
+ QUnit.test( 'Variable with Unicode letter in name', function ( assert ) {
var orig, ŝablono;
orig = 'some token';
});
*/
- QUnit.test( 'Stripping of single initial newline from textarea\'s literal contents (bug 12130)', function ( assert ) {
+ QUnit.test( 'Stripping of single initial newline from textarea\'s literal contents (T14130)', function ( assert ) {
var maxn, n,
expected, $textarea;
maxn = 4;
- QUnit.expect( maxn * 2 );
function repeat( str, n ) {
var out;
( function ( mw, $ ) {
'use strict';
+ var grammarTests;
+
QUnit.module( 'mediawiki.language', QUnit.newMwEnvironment( {
setup: function () {
this.liveLangData = mw.language.data;
}
} ) );
- QUnit.test( 'mw.language getData and setData', 3, function ( assert ) {
+ QUnit.test( 'mw.language getData and setData', function ( assert ) {
mw.language.setData( 'en', 'testkey', 'testvalue' );
assert.equal( mw.language.getData( 'en', 'testkey' ), 'testvalue', 'Getter setter test for mw.language' );
assert.equal( mw.language.getData( 'en', 'invalidkey' ), undefined, 'Getter setter test for mw.language with invalid key' );
assert.equal( mw.language.getData( 'en-US', 'testkey' ), 'testvalue', 'Case insensitive test for mw.language' );
} );
- QUnit.test( 'mw.language.commafy test', 9, function ( assert ) {
+ QUnit.test( 'mw.language.commafy test', function ( assert ) {
mw.language.setData( 'en', 'digitGroupingPattern', null );
mw.language.setData( 'en', 'digitTransformTable', null );
mw.language.setData( 'en', 'separatorTransformTable', null );
assert.equal( mw.language.commafy( 123456789.567, '###,###,#0.00' ), '1,234,567,89.56', 'Decimal part as group of 3 and last one 2' );
} );
- QUnit.test( 'mw.language.convertNumber', 2, function ( assert ) {
+ QUnit.test( 'mw.language.convertNumber', function ( assert ) {
mw.language.setData( 'en', 'digitGroupingPattern', null );
mw.language.setData( 'en', 'digitTransformTable', null );
mw.language.setData( 'en', 'separatorTransformTable', { ',': '.', '.': ',' } );
mw.config.set( 'wgUserLanguage', 'en' );
+ mw.config.set( 'wgTranslateNumerals', true );
assert.equal( mw.language.convertNumber( 1800 ), '1.800', 'formatting' );
assert.equal( mw.language.convertNumber( '1.800', true ), '1800', 'unformatting' );
} );
+ QUnit.test( 'mw.language.convertNumber - digitTransformTable', function ( assert ) {
+ mw.config.set( 'wgUserLanguage', 'hi' );
+ mw.config.set( 'wgTranslateNumerals', true );
+ mw.language.setData( 'hi', 'digitGroupingPattern', null );
+ mw.language.setData( 'hi', 'separatorTransformTable', { ',': '.', '.': ',' } );
+
+ // Example from Hindi (MessagesHi.php)
+ mw.language.setData( 'hi', 'digitTransformTable', {
+ 0: '०',
+ 1: '१',
+ 2: '२'
+ } );
+
+ assert.equal( mw.language.convertNumber( 1200 ), '१.२००', 'format' );
+ assert.equal( mw.language.convertNumber( '१.२००', true ), '1200', 'unformat from digit transform' );
+ assert.equal( mw.language.convertNumber( '1.200', true ), '1200', 'unformat plain' );
+
+ mw.config.set( 'wgTranslateNumerals', false );
+
+ assert.equal( mw.language.convertNumber( 1200 ), '1.200', 'format (digit transform disabled)' );
+ assert.equal( mw.language.convertNumber( '१.२००', true ), '1200', 'unformat from digit transform (when disabled)' );
+ assert.equal( mw.language.convertNumber( '1.200', true ), '1200', 'unformat plain (digit transform disabled)' );
+ } );
+
function grammarTest( langCode, test ) {
// The test works only if the content language is opt.language
// because it requires [lang].js to be loaded.
QUnit.test( 'Grammar test for lang=' + langCode, function ( assert ) {
- QUnit.expect( test.length );
-
- for ( var i = 0; i < test.length; i++ ) {
+ var i;
+ for ( i = 0; i < test.length; i++ ) {
assert.equal(
mw.language.convertGrammar( test[ i ].word, test[ i ].grammarForm ),
test[ i ].expected,
}
// These tests run only for the current UI language.
- var grammarTests = {
+ grammarTests = {
bs: [
{
word: 'word',
}
} );
- QUnit.test( 'List to text test', 4, function ( assert ) {
+ QUnit.test( 'List to text test', function ( assert ) {
assert.equal( mw.language.listToText( [] ), '', 'Blank list' );
assert.equal( mw.language.listToText( [ 'a' ] ), 'a', 'Single item' );
assert.equal( mw.language.listToText( [ 'a', 'b' ] ), 'a and b', 'Two items' );
function isCssImportApplied() {
// Trigger reflow, repaint, redraw, whatever (cross-browser)
- var x = $element.css( 'height' );
- x = el.innerHTML;
+ $element.css( 'height' );
+ el.innerHTML;
el.className = el.className;
- x = document.documentElement.clientHeight;
+ document.documentElement.clientHeight;
return $element.css( prop ) === val;
}
);
}
- QUnit.test( 'Basic', 2, function ( assert ) {
+ QUnit.test( 'Basic', function ( assert ) {
var isAwesomeDone;
mw.loader.testCallback = function () {
} );
} );
- QUnit.test( 'Object method as module name', 2, function ( assert ) {
+ QUnit.test( 'Object method as module name', function ( assert ) {
var isAwesomeDone;
mw.loader.testCallback = function () {
} );
} );
- QUnit.test( '.using( .. ) Promise', 2, function ( assert ) {
+ QUnit.test( '.using( .. ) Promise', function ( assert ) {
var isAwesomeDone;
mw.loader.testCallback = function () {
).always( done );
} );
- QUnit.test( '.load() - Error: Unregistered (ignored)', 0, function ( assert ) {
+ QUnit.test( '.load() - Error: Unregistered (ignored)', function ( assert ) {
+ assert.expect( 0 );
mw.loader.load( 'test.using.unreg2' );
} );
- QUnit.test( '.implement( styles={ "css": [text, ..] } )', 2, function ( assert ) {
+ QUnit.test( '.implement( styles={ "css": [text, ..] } )', function ( assert ) {
var $element = $( '<div class="mw-test-implement-a"></div>' ).appendTo( '#qunit-fixture' );
assert.notEqual(
return mw.loader.using( 'test.implement.a' );
} );
- QUnit.test( '.implement( styles={ "url": { <media>: [url, ..] } } )', 7, function ( assert ) {
+ QUnit.test( '.implement( styles={ "url": { <media>: [url, ..] } } )', function ( assert ) {
var $element1 = $( '<div class="mw-test-implement-b1"></div>' ).appendTo( '#qunit-fixture' ),
$element2 = $( '<div class="mw-test-implement-b2"></div>' ).appendTo( '#qunit-fixture' ),
$element3 = $( '<div class="mw-test-implement-b3"></div>' ).appendTo( '#qunit-fixture' ),
url: {
print: [ urlStyleTest( '.mw-test-implement-b1', 'text-align', 'center' ) ],
screen: [
- // bug 40834: Make sure it actually works with more than 1 stylesheet reference
+ // T42834: Make sure it actually works with more than 1 stylesheet reference
urlStyleTest( '.mw-test-implement-b2', 'float', 'left' ),
urlStyleTest( '.mw-test-implement-b3', 'float', 'right' )
]
} );
// Backwards compatibility
- QUnit.test( '.implement( styles={ <media>: text } ) (back-compat)', 2, function ( assert ) {
+ QUnit.test( '.implement( styles={ <media>: text } ) (back-compat)', function ( assert ) {
var $element = $( '<div class="mw-test-implement-c"></div>' ).appendTo( '#qunit-fixture' );
assert.notEqual(
} );
// Backwards compatibility
- QUnit.test( '.implement( styles={ <media>: [url, ..] } ) (back-compat)', 4, function ( assert ) {
+ QUnit.test( '.implement( styles={ <media>: [url, ..] } ) (back-compat)', function ( assert ) {
var $element = $( '<div class="mw-test-implement-d"></div>' ).appendTo( '#qunit-fixture' ),
$element2 = $( '<div class="mw-test-implement-d2"></div>' ).appendTo( '#qunit-fixture' ),
done = assert.async();
'test.implement.d',
function () {
assertStyleAsync( assert, $element, 'float', 'right', function () {
- assert.notEqual( $element2.css( 'text-align' ), 'center', 'print style is not applied (bug 40500)' );
+ assert.notEqual( $element2.css( 'text-align' ), 'center', 'print style is not applied (T42500)' );
done();
} );
},
mw.loader.load( 'test.implement.d' );
} );
- // @import (bug 31676)
- QUnit.test( '.implement( styles has @import )', 7, function ( assert ) {
+ // @import (T33676)
+ QUnit.test( '.implement( styles has @import )', function ( assert ) {
var isJsExecuted, $element,
done = assert.async();
} );
} );
- QUnit.test( '.implement( dependency with styles )', 4, function ( assert ) {
+ QUnit.test( '.implement( dependency with styles )', function ( assert ) {
var $element = $( '<div class="mw-test-implement-e"></div>' ).appendTo( '#qunit-fixture' ),
$element2 = $( '<div class="mw-test-implement-e2"></div>' ).appendTo( '#qunit-fixture' );
return mw.loader.using( 'test.implement.e' );
} );
- QUnit.test( '.implement( only scripts )', 1, function ( assert ) {
+ QUnit.test( '.implement( only scripts )', function ( assert ) {
mw.loader.implement( 'test.onlyscripts', function () {} );
assert.strictEqual( mw.loader.getState( 'test.onlyscripts' ), 'ready' );
} );
- QUnit.test( '.implement( only messages )', 2, function ( assert ) {
- assert.assertFalse( mw.messages.exists( 'bug_29107' ), 'Verify that the test message doesn\'t exist yet' );
+ QUnit.test( '.implement( only messages )', function ( assert ) {
+ assert.assertFalse( mw.messages.exists( 'T31107' ), 'Verify that the test message doesn\'t exist yet' );
- // jscs: disable requireCamelCaseOrUpperCaseIdentifiers
- mw.loader.implement( 'test.implement.msgs', [], {}, { bug_29107: 'loaded' } );
- // jscs: enable requireCamelCaseOrUpperCaseIdentifiers
+ mw.loader.implement( 'test.implement.msgs', [], {}, { T31107: 'loaded' } );
return mw.loader.using( 'test.implement.msgs', function () {
- assert.ok( mw.messages.exists( 'bug_29107' ), 'Bug 29107: messages-only module should implement ok' );
+ assert.ok( mw.messages.exists( 'T31107' ), 'T31107: messages-only module should implement ok' );
}, function () {
assert.ok( false, 'Error callback fired while implementing "test.implement.msgs" module' );
} );
} );
- QUnit.test( '.implement( empty )', 1, function ( assert ) {
+ QUnit.test( '.implement( empty )', function ( assert ) {
mw.loader.implement( 'test.empty' );
assert.strictEqual( mw.loader.getState( 'test.empty' ), 'ready' );
} );
- QUnit.test( 'Broken indirect dependency', 4, function ( assert ) {
+ QUnit.test( 'Broken indirect dependency', function ( assert ) {
// don't emit an error event
this.sandbox.stub( mw, 'track' );
assert.strictEqual( mw.track.callCount, 1 );
} );
- QUnit.test( 'Out-of-order implementation', 9, function ( assert ) {
+ QUnit.test( 'Out-of-order implementation', function ( assert ) {
mw.loader.register( [
[ 'test.module4', '0' ],
[ 'test.module5', '0', [ 'test.module4' ] ],
assert.strictEqual( mw.loader.getState( 'test.module6' ), 'ready', 'Expected "ready" state for test.module6' );
} );
- QUnit.test( 'Missing dependency', 13, function ( assert ) {
+ QUnit.test( 'Missing dependency', function ( assert ) {
mw.loader.register( [
[ 'test.module7', '0' ],
[ 'test.module8', '0', [ 'test.module7' ] ],
);
} );
- QUnit.test( 'Dependency handling', 5, function ( assert ) {
+ QUnit.test( 'Dependency handling', function ( assert ) {
var done = assert.async();
mw.loader.register( [
// [module, version, dependencies, group, source]
);
} );
- QUnit.test( 'Skip-function handling', 5, function ( assert ) {
+ QUnit.test( 'Skip-function handling', function ( assert ) {
mw.loader.register( [
// [module, version, dependencies, group, source, skip]
[ 'testSkipped', '1', [], null, 'testloader', 'return true;' ],
);
} );
- QUnit.asyncTest( '.load( "//protocol-relative" ) - T32825', 2, function ( assert ) {
+ QUnit.asyncTest( '.load( "//protocol-relative" ) - T32825', function ( assert ) {
// This bug was actually already fixed in 1.18 and later when discovered in 1.17.
// Test is for regressions!
mw.loader.load( target );
} );
- QUnit.asyncTest( '.load( "/absolute-path" )', 2, function ( assert ) {
+ QUnit.asyncTest( '.load( "/absolute-path" )', function ( assert ) {
// Forge a URL to the test callback script
var target = QUnit.fixurl(
mw.config.get( 'wgScriptPath' ) + '/tests/qunit/data/qunitOkCall.js'
} );
} );
- QUnit.test( 'Executing race - T112232', 2, function ( assert ) {
+ QUnit.test( 'Executing race - T112232', function ( assert ) {
var done = false;
// The red herring schedules its CSS buffer first. In T112232, a bug in the
} );
} );
- QUnit.test( 'require()', 6, function ( assert ) {
+ QUnit.test( 'require()', function ( assert ) {
mw.loader.register( [
[ 'test.require1', '0' ],
[ 'test.require2', '0' ],
}
} ) );
- QUnit.test( 'register', 2, function ( assert ) {
+ QUnit.test( 'register', function ( assert ) {
var testMessagePosterConstructor = function () {};
mw.messagePoster.factory.register( TEST_MODEL, testMessagePosterConstructor );
}
} );
- QUnit.test( 'render', 2, function ( assert ) {
+ QUnit.test( 'render', function ( assert ) {
var html, htmlPartial, data, partials,
template = mw.template.get( 'stub', 'test_greeting.mustache' ),
partial = mw.template.get( 'stub', 'test_greeting_suffix.mustache' );
}
} );
- QUnit.test( 'add', 1, function ( assert ) {
+ QUnit.test( 'add', function ( assert ) {
assert.throws(
function () {
mw.template.add( 'module', 'test_templates_foo', 'hello' );
);
} );
- QUnit.test( 'compile', 1, function ( assert ) {
+ QUnit.test( 'compile', function ( assert ) {
assert.throws(
function () {
mw.template.compile( '{{foo}}', 'rainbow' );
);
} );
- QUnit.test( 'get', 4, function ( assert ) {
+ QUnit.test( 'get', function ( assert ) {
assert.strictEqual( mw.template.get( 'test.mediawiki.template', 'test_templates_foo.xyz' ), 'xyz compiler' );
assert.strictEqual( mw.template.get( 'test.mediawiki.template', 'test_templates_foo.abc' ), 'abc default compiler' );
assert.throws(
}
} ) );
- QUnit.test( 'Initial check', 8, function ( assert ) {
+ QUnit.test( 'Initial check', function ( assert ) {
assert.ok( window.jQuery, 'jQuery defined' );
assert.ok( window.$, '$ defined' );
assert.strictEqual( window.$, window.jQuery, '$ alias to jQuery' );
this.restoreWarnings();
} );
- QUnit.test( 'mw.format', 2, function ( assert ) {
+ QUnit.test( 'mw.format', function ( assert ) {
assert.equal(
mw.format( 'Format $1 $2', 'foo', 'bar' ),
'Format foo bar',
} );
- QUnit.test( 'mw.msg', 14, function ( assert ) {
+ QUnit.test( 'mw.msg', function ( assert ) {
assert.ok( mw.messages.set( 'hello', 'Hello <b>awesome</b> world' ), 'mw.messages.set: Register' );
assert.equal( mw.msg( 'hello' ), 'Hello <b>awesome</b> world', 'Gets message with default options (existing message)' );
assert.equal( mw.msg( 'goodbye' ), '⧼goodbye⧽', 'Gets message with default options (nonexistent message)' );
assert.equal( mw.msg( 'int-msg' ), 'Some Other Message', 'int is resolved' );
} );
- QUnit.test( 'mw.hook', 13, function ( assert ) {
+ QUnit.test( 'mw.hook', function ( assert ) {
var hook, add, fire, chars, callback;
mw.hook( 'test.hook.unfired' ).add( function () {
}
} ) );
- QUnit.asyncTest( 'toggleToc', 4, function ( assert ) {
+ QUnit.asyncTest( 'toggleToc', function ( assert ) {
var tocHtml, $toggleLink, $tocList;
assert.strictEqual( $( '#toc' ).length, 0, 'There is no table of contents on the page at the beginning' );
( function ( mw ) {
QUnit.module( 'mediawiki.track' );
- QUnit.test( 'track', 1, function ( assert ) {
+ QUnit.test( 'track', function ( assert ) {
var sequence = [];
mw.trackSubscribe( 'simple', function ( topic, data ) {
sequence.push( [ topic, data ] );
], 'Events after subscribing' );
} );
- QUnit.test( 'trackSubscribe', 4, function ( assert ) {
+ QUnit.test( 'trackSubscribe', function ( assert ) {
var now,
sequence = [];
mw.track( 'before', { key: 1 } );
} );
} );
- QUnit.test( 'trackUnsubscribe', 1, function ( assert ) {
+ QUnit.test( 'trackUnsubscribe', function ( assert ) {
var sequence = [];
function unsubber( topic, data ) {
sequence.push( [ topic, data ] );
[ false, ':::' ],
[ false, '::0:', 'IPv6 ending in a lone ":"' ],
- [ true, '::', 'IPv6 zero address' ],
+ [ true, '::', 'IPv6 zero address' ],
[ false, '::fc:100:a:d:1:e:ac:0', 'IPv6 with "::" and 8 words' ],
[ false, '::fc:100:a:d:1:e:ac:0:1', 'IPv6 with 9 words' ],
[ false, 'fc::100:', 'IPv6 ending with lone ":"' ],
[ false, 'fc:::100', 'IPv6 with ":::" in the middle' ],
- [ true, 'fc::100', 'IPv6 with "::" and 2 words' ],
- [ true, 'fc::100:a', 'IPv6 with "::" and 3 words' ],
- [ true, 'fc::100:a:d', 'IPv6 with "::" and 4 words' ],
- [ true, 'fc::100:a:d:1', 'IPv6 with "::" and 5 words' ],
- [ true, 'fc::100:a:d:1:e', 'IPv6 with "::" and 6 words' ],
- [ true, 'fc::100:a:d:1:e:ac', 'IPv6 with "::" and 7 words' ],
- [ true, '2001::df', 'IPv6 with "::" and 2 words' ],
- [ true, '2001:5c0:1400:a::df', 'IPv6 with "::" and 5 words' ],
- [ true, '2001:5c0:1400:a::df:2', 'IPv6 with "::" and 6 words' ],
+ [ true, 'fc::100', 'IPv6 with "::" and 2 words' ],
+ [ true, 'fc::100:a', 'IPv6 with "::" and 3 words' ],
+ [ true, 'fc::100:a:d', 'IPv6 with "::" and 4 words' ],
+ [ true, 'fc::100:a:d:1', 'IPv6 with "::" and 5 words' ],
+ [ true, 'fc::100:a:d:1:e', 'IPv6 with "::" and 6 words' ],
+ [ true, 'fc::100:a:d:1:e:ac', 'IPv6 with "::" and 7 words' ],
+ [ true, '2001::df', 'IPv6 with "::" and 2 words' ],
+ [ true, '2001:5c0:1400:a::df', 'IPv6 with "::" and 5 words' ],
+ [ true, '2001:5c0:1400:a::df:2', 'IPv6 with "::" and 6 words' ],
[ false, 'fc::100:a:d:1:e:ac:0', 'IPv6 with "::" and 8 words' ],
[ false, 'fc::100:a:d:1:e:ac:0:1', 'IPv6 with 9 words' ]
}
} ) );
- QUnit.test( 'rawurlencode', 1, function ( assert ) {
+ QUnit.test( 'rawurlencode', function ( assert ) {
assert.equal( mw.util.rawurlencode( 'Test:A & B/Here' ), 'Test%3AA%20%26%20B%2FHere' );
} );
- QUnit.test( 'escapeId', 17, function ( assert ) {
+ QUnit.test( 'escapeId', function ( assert ) {
mw.config.set( 'wgExperimentalHtmlIds', false );
$.each( {
'+': '.2B',
} );
} );
- QUnit.test( 'wikiUrlencode', 11, function ( assert ) {
+ QUnit.test( 'wikiUrlencode', function ( assert ) {
assert.equal( mw.util.wikiUrlencode( 'Test:A & B/Here' ), 'Test:A_%26_B/Here' );
// See also wfUrlencodeTest.php#provideURLS
$.each( {
} );
} );
- QUnit.test( 'getUrl', 14, function ( assert ) {
+ QUnit.test( 'getUrl', function ( assert ) {
var href;
mw.config.set( {
wgScript: '/w/index.php',
assert.equal( href, '/w/index.php?action=edit#.2B.26.3D:.3B.40.24-_..21.2A.2F.5B.5D.3C.3E.27.C2.A7', 'fragment with various characters' );
} );
- QUnit.test( 'wikiScript', 4, function ( assert ) {
+ QUnit.test( 'wikiScript', function ( assert ) {
mw.config.set( {
// customized wgScript for T41103
wgScript: '/w/i.php',
assert.equal( mw.util.wikiScript( 'api' ), '/w/api.php', 'API path' );
} );
- QUnit.test( 'addCSS', 3, function ( assert ) {
+ QUnit.test( 'addCSS', function ( assert ) {
var $el, style;
$el = $( '<div>' ).attr( 'id', 'mw-addcsstest' ).appendTo( '#qunit-fixture' );
$( style.ownerNode ).remove();
} );
- QUnit.test( 'getParamValue', 5, function ( assert ) {
+ QUnit.test( 'getParamValue', function ( assert ) {
var url;
url = 'http://example.org/?foo=wrong&foo=right#&foo=bad';
assert.strictEqual( mw.util.getParamValue( 'bar', url ), null, 'Return null when not found' );
url = 'http://example.org/#&foo=bad';
- assert.strictEqual( mw.util.getParamValue( 'foo', url ), null, 'Ignore hash if param is not in querystring but in hash (bug 27427)' );
+ assert.strictEqual( mw.util.getParamValue( 'foo', url ), null, 'Ignore hash if param is not in querystring but in hash (T29427)' );
url = 'example.org?' + $.param( { TEST: 'a b+c' } );
- assert.strictEqual( mw.util.getParamValue( 'TEST', url ), 'a b+c', 'Bug 30441: getParamValue must understand "+" encoding of space' );
+ assert.strictEqual( mw.util.getParamValue( 'TEST', url ), 'a b+c', 'T32441: getParamValue must understand "+" encoding of space' );
url = 'example.org?' + $.param( { TEST: 'a b+c d' } ); // check for sloppy code from r95332 :)
- assert.strictEqual( mw.util.getParamValue( 'TEST', url ), 'a b+c d', 'Bug 30441: getParamValue must understand "+" encoding of space (multiple spaces)' );
+ assert.strictEqual( mw.util.getParamValue( 'TEST', url ), 'a b+c d', 'T32441: getParamValue must understand "+" encoding of space (multiple spaces)' );
} );
- QUnit.test( '$content', 2, function ( assert ) {
+ QUnit.test( '$content', function ( assert ) {
assert.ok( mw.util.$content instanceof jQuery, 'mw.util.$content instance of jQuery' );
assert.strictEqual( mw.util.$content.length, 1, 'mw.util.$content must have length of 1' );
} );
* Previously, test elements where invisible to the selector since only
* one element can have a given id.
*/
- QUnit.test( 'addPortletLink', 13, function ( assert ) {
+ QUnit.test( 'addPortletLink', function ( assert ) {
var pTestTb, pCustom, vectorTabs, tbRL, cuQuux, $cuQuux, tbMW, $tbMW, tbRLDM, caFoo,
addedAfter, tbRLDMnonexistentid, tbRLDMemptyjquery;
assert.equal(
$( '#p-test-custom #c-barmenu ul li' ).length,
1,
- 'addPortletLink did not add the item to all <ul> elements in the portlet (bug 35082)'
+ 'addPortletLink did not add the item to all <ul> elements in the portlet (T37082)'
);
tbRLDM = mw.util.addPortletLink( 'p-test-tb', '//mediawiki.org/wiki/RL/DM',
assert.equal( tbRLDMemptyjquery, $( '#p-test-tb li:last' )[ 0 ], 'Fallback to adding at the end (nextnode as empty jQuery object)' );
} );
- QUnit.test( 'validateEmail', 6, function ( assert ) {
+ QUnit.test( 'validateEmail', function ( assert ) {
assert.strictEqual( mw.util.validateEmail( '' ), null, 'Should return null for empty string ' );
assert.strictEqual( mw.util.validateEmail( 'user@localhost' ), true, 'Return true for a valid e-mail address' );
assert.strictEqual( mw.util.validateEmail( 'userfoo@ex-ample.org' ), true, 'Emails may contain a hyphen' );
} );
- QUnit.test( 'isIPv6Address', 40, function ( assert ) {
+ QUnit.test( 'isIPv6Address', function ( assert ) {
$.each( IPV6_CASES, function ( i, ipCase ) {
assert.strictEqual( mw.util.isIPv6Address( ipCase[ 1 ] ), ipCase[ 0 ], ipCase[ 2 ] );
} );
} );
- QUnit.test( 'isIPv4Address', 11, function ( assert ) {
+ QUnit.test( 'isIPv4Address', function ( assert ) {
$.each( IPV4_CASES, function ( i, ipCase ) {
assert.strictEqual( mw.util.isIPv4Address( ipCase[ 1 ] ), ipCase[ 0 ], ipCase[ 2 ] );
} );
} );
- QUnit.test( 'isIPAddress', 51, function ( assert ) {
+ QUnit.test( 'isIPAddress', function ( assert ) {
$.each( IPV4_CASES, function ( i, ipCase ) {
assert.strictEqual( mw.util.isIPv4Address( ipCase[ 1 ] ), ipCase[ 0 ], ipCase[ 2 ] );
} );
}
} ) );
- QUnit.test( 'isElementInViewport', 6, function ( assert ) {
+ QUnit.test( 'isElementInViewport', function ( assert ) {
var viewport = $.extend( {}, DEFAULT_VIEWPORT );
assert.ok( mw.viewport.isElementInViewport( this.el, viewport ),
'It should return true when the element is fully enclosed in the viewport' );
'It should default to the window object if no viewport is given' );
} );
- QUnit.test( 'isElementInViewport with scrolled page', 1, function ( assert ) {
+ QUnit.test( 'isElementInViewport with scrolled page', function ( assert ) {
var viewport = {
top: 2000,
left: 0,
window.scrollTo( 0, 0 );
} );
- QUnit.test( 'isElementCloseToViewport', 3, function ( assert ) {
+ QUnit.test( 'isElementCloseToViewport', function ( assert ) {
var
viewport = {
top: 90,
-/*global isCompatible: true */
+/* global isCompatible: true */
( function ( $ ) {
var testcases = {
tested: [
QUnit.module( 'startup', QUnit.newMwEnvironment() );
- QUnit.test( 'isCompatible( featureTestable )', testcases.tested.length, function ( assert ) {
+ QUnit.test( 'isCompatible( featureTestable )', function ( assert ) {
$.each( testcases.tested, function ( i, ua ) {
- assert.strictEqual( isCompatible( ua ), true, ua );
- }
- );
+ assert.strictEqual( isCompatible( ua ), true, ua );
+ } );
} );
- QUnit.test( 'isCompatible( blacklisted )', testcases.blacklisted.length, function ( assert ) {
+ QUnit.test( 'isCompatible( blacklisted )', function ( assert ) {
$.each( testcases.blacklisted, function ( i, ua ) {
- assert.strictEqual( isCompatible( ua ), false, ua );
- }
- );
+ assert.strictEqual( isCompatible( ua ), false, ua );
+ } );
} );
}( jQuery ) );
// For 404 handled thumbnails, we only use the base name of the URI
// for the thumb params and the parent directory for the source file name.
// Check that the zone relative path matches up so squid caches won't pick
- // up thumbs that would not be purged on source file deletion (bug 34231).
+ // up thumbs that would not be purged on source file deletion (T36231).
if ( $rel404 !== null ) { // thumbnail was handled via 404
if ( rawurldecode( $rel404 ) === $img->getThumbRel( $thumbName ) ) {
// Request for the canonical thumbnail name