Merge "Apparently for certain (API) requests $this->getTitle() doesn't return a valid...
authorjenkins-bot <jenkins-bot@gerrit.wikimedia.org>
Thu, 12 Jun 2014 19:28:35 +0000 (19:28 +0000)
committerGerrit Code Review <gerrit@wikimedia.org>
Thu, 12 Jun 2014 19:28:35 +0000 (19:28 +0000)
68 files changed:
RELEASE-NOTES-1.23
RELEASE-NOTES-1.24
docs/hooks.txt
includes/DefaultSettings.php
includes/PrefixSearch.php
includes/api/ApiBase.php
includes/db/LBFactory.php
includes/db/LBFactoryMulti.php
includes/db/LoadBalancer.php
includes/installer/i18n/es.json
includes/installer/i18n/id.json
includes/rcfeed/MachineReadableRCFeedFormatter.php
includes/resourceloader/ResourceLoader.php
includes/resourceloader/ResourceLoaderFileModule.php
includes/resourceloader/ResourceLoaderModule.php
includes/resourceloader/ResourceLoaderStartUpModule.php
includes/specialpage/SpecialPage.php
includes/specials/SpecialLog.php
includes/specials/SpecialUserlogin.php
includes/specials/SpecialWatchlist.php
includes/utils/MWCryptRand.php
languages/i18n/ar.json
languages/i18n/be-tarask.json
languages/i18n/bn.json
languages/i18n/ca.json
languages/i18n/ckb.json
languages/i18n/cs.json
languages/i18n/diq.json
languages/i18n/egl.json
languages/i18n/el.json
languages/i18n/es.json
languages/i18n/fa.json
languages/i18n/id.json
languages/i18n/ka.json
languages/i18n/lmo.json
languages/i18n/nl.json
languages/i18n/sh.json
languages/i18n/sr-ec.json
languages/i18n/sr-el.json
languages/i18n/sv.json
languages/i18n/uk.json
languages/i18n/ur.json
languages/i18n/vi.json
languages/i18n/war.json
languages/i18n/zh-hans.json
resources/lib/oojs-ui/i18n/bs.json
resources/lib/oojs-ui/i18n/hu.json
resources/lib/oojs-ui/images/indicators/arrow-down.png [new file with mode: 0644]
resources/lib/oojs-ui/images/indicators/arrow-down.svg [new file with mode: 0644]
resources/lib/oojs-ui/images/indicators/arrow-ltr.png [new file with mode: 0644]
resources/lib/oojs-ui/images/indicators/arrow-ltr.svg [new file with mode: 0644]
resources/lib/oojs-ui/images/indicators/arrow-rtl.png [new file with mode: 0644]
resources/lib/oojs-ui/images/indicators/arrow-rtl.svg [new file with mode: 0644]
resources/lib/oojs-ui/images/indicators/arrow-up.png [new file with mode: 0644]
resources/lib/oojs-ui/images/indicators/arrow-up.svg [new file with mode: 0644]
resources/lib/oojs-ui/images/indicators/down.png [deleted file]
resources/lib/oojs-ui/images/indicators/down.svg [deleted file]
resources/lib/oojs-ui/images/indicators/up.png [deleted file]
resources/lib/oojs-ui/images/indicators/up.svg [deleted file]
resources/lib/oojs-ui/oojs-ui-apex.css
resources/lib/oojs-ui/oojs-ui.js
resources/lib/oojs-ui/oojs-ui.svg.css
resources/src/mediawiki/mediawiki.js
skins/vector/variables.less
tests/phpunit/ResourceLoaderTestCase.php
tests/phpunit/includes/resourceloader/ResourceLoaderStartupModuleTest.php
tests/qunit/data/load.mock.php
tests/qunit/suites/resources/mediawiki/mediawiki.test.js

index baf69c5..9d74e86 100644 (file)
@@ -472,6 +472,7 @@ changes to languages because of Bugzilla reports.
 
 ==== Removed globals ====
 * $wgBetterDirectionality (deprecated in 1.18)
+* $wgProxyKey (deprecated in 1.14)
 
 == Compatibility ==
 
index deeb6b8..746e0c7 100644 (file)
@@ -62,6 +62,11 @@ production.
   the Vector skin has gained a label that should make it more discoverable.
 * MWCryptHKDF added for fast, cryptographically secure random number generation
   that won't deplete openssl's entropy pool.
+* ResourceLoader: File modules can now provide a skip function that uses an
+  inline feature test to bypass loading of the module.
+* (bug 20210) Special pages may now provide autocompletion of their subpage
+  names in search suggestions. Right now the only useful implementation is in
+  Special:Log, but more are to come.
 
 === Bug fixes in 1.24 ===
 * (bug 49116) Footer copyright notice is now always displayed in user language
index cb76341..4c2fd89 100644 (file)
@@ -2039,6 +2039,16 @@ $oldtext : the text of the article before editing
 $subject : subject of the new section
 &$text : text of the new section
 
+'PostLoginRedirect': Modify the post login redirect behavior.
+Occurs after signing up or logging in, allows for interception of redirect.
+&$returnTo: The page name to return to, as a string
+&$returnToQuery: array of url parameters, mapping parameter names to values
+&$type: type of login redirect as string;
+  error: display a return to link ignoring $wgRedirectOnLogin
+  signup: display a return to link using $wgRedirectOnLogin if needed
+  success: display a return to link using $wgRedirectOnLogin if needed
+  successredirect: send an HTTP redirect using $wgRedirectOnLogin if needed
+
 'PreferencesGetLegend': Override the text used for the <legend> of a
 preferences section.
 $form: the PreferencesForm object. This is a ContextSource as well
index f9cafc9..6d06c49 100644 (file)
@@ -1710,6 +1710,7 @@ $wgLBFactoryConf = array( 'class' => 'LBFactorySimple' );
 
 /**
  * How long to wait for a slave to catch up to the master
+ * @deprecated since 1.24
  */
 $wgMasterWaitTimeout = 10;
 
@@ -4826,11 +4827,6 @@ $wgSecretKey = false;
  */
 $wgProxyList = array();
 
-/**
- * @deprecated since 1.14
- */
-$wgProxyKey = false;
-
 /** @} */ # end of proxy scanner settings
 
 /************************************************************************//**
index a796d35..13696ad 100644 (file)
@@ -166,10 +166,26 @@ abstract class PrefixSearch {
        protected function specialSearch( $search, $limit ) {
                global $wgContLang;
 
-               # normalize searchKey, so aliases with spaces can be found - bug 25675
-               $search = str_replace( ' ', '_', $search );
+               list( $searchKey, $subpageSearch ) = explode( '/', $search, 2 );
+
+               // Handle subpage search separately.
+               if ( $subpageSearch !== null ) {
+                       // Try matching the full search string as a page name
+                       $specialTitle = Title::makeTitleSafe( NS_SPECIAL, $searchKey );
+                       $special = SpecialPageFactory::getPage( $specialTitle->getText() );
+                       if ( $special ) {
+                               $subpages = $special->prefixSearchSubpages( $subpageSearch, $limit );
+                               return array_map( function ( $sub ) use ( $specialTitle ) {
+                                       return $specialTitle->getSubpage( $sub );
+                               }, $subpages );
+                       } else {
+                               return array();
+                       }
+               }
 
-               $searchKey = $wgContLang->caseFold( $search );
+               # normalize searchKey, so aliases with spaces can be found - bug 25675
+               $searchKey = str_replace( ' ', '_', $searchKey );
+               $searchKey = $wgContLang->caseFold( $searchKey );
 
                // Unlike SpecialPage itself, we want the canonical forms of both
                // canonical and alias title forms...
index b649adf..0313141 100644 (file)
@@ -87,17 +87,19 @@ abstract class ApiBase extends ContextSource {
         */
        const GET_VALUES_FOR_HELP = 1;
 
-       private $mMainModule, $mModuleName, $mModulePrefix;
+       /** @var ApiMain */
+       private $mMainModule;
+       /** @var string */
+       private $mModuleName, $mModulePrefix;
        private $mSlaveDB = null;
        private $mParamCache = array();
 
        /**
-        * Constructor
         * @param ApiMain $mainModule
         * @param string $moduleName Name of this module
         * @param string $modulePrefix Prefix to use for parameter names
         */
-       public function __construct( $mainModule, $moduleName, $modulePrefix = '' ) {
+       public function __construct( ApiMain $mainModule, $moduleName, $modulePrefix = '' ) {
                $this->mMainModule = $mainModule;
                $this->mModuleName = $moduleName;
                $this->mModulePrefix = $modulePrefix;
index bea195b..168d846 100644 (file)
@@ -236,7 +236,7 @@ class LBFactorySimple extends LBFactory {
         * @return LoadBalancer
         */
        function newMainLB( $wiki = false ) {
-               global $wgDBservers, $wgMasterWaitTimeout;
+               global $wgDBservers;
                if ( $wgDBservers ) {
                        $servers = $wgDBservers;
                } else {
@@ -267,7 +267,6 @@ class LBFactorySimple extends LBFactory {
 
                return new LoadBalancer( array(
                        'servers' => $servers,
-                       'masterWaitTimeout' => $wgMasterWaitTimeout
                ) );
        }
 
index 3c1885f..bda3dd6 100644 (file)
@@ -286,11 +286,9 @@ class LBFactoryMulti extends LBFactory {
         * @return LoadBalancer
         */
        function newLoadBalancer( $template, $loads, $groupLoads ) {
-               global $wgMasterWaitTimeout;
                $servers = $this->makeServerArray( $template, $loads, $groupLoads );
                $lb = new LoadBalancer( array(
                        'servers' => $servers,
-                       'masterWaitTimeout' => $wgMasterWaitTimeout
                ) );
 
                return $lb;
index 38c3d2d..ee35c13 100644 (file)
@@ -45,7 +45,6 @@ class LoadBalancer {
        /**
         * @param array $params with keys:
         *   servers           Required. Array of server info structures.
-        *   masterWaitTimeout Replication lag wait timeout
         *   loadMonitor       Name of a class used to fetch server lag and load.
         * @throws MWException
         */
@@ -54,12 +53,7 @@ class LoadBalancer {
                        throw new MWException( __CLASS__ . ': missing servers parameter' );
                }
                $this->mServers = $params['servers'];
-
-               if ( isset( $params['waitTimeout'] ) ) {
-                       $this->mWaitTimeout = $params['waitTimeout'];
-               } else {
-                       $this->mWaitTimeout = 10;
-               }
+               $this->mWaitTimeout = 10;
 
                $this->mReadIndex = -1;
                $this->mWriteIndex = -1;
index 3c58150..b37a1b7 100644 (file)
@@ -99,7 +99,7 @@
        "config-gd": "Se ha encontrado una biblioteca de gráficos GD integrada.\nLa miniaturización de imágenes se habilitará si habilitas las subidas.",
        "config-no-scaling": "No se ha encontrado ninguma biblioteca GD o ImageMagik.\nSe inhabilitará la miniaturización de imágenes.",
        "config-no-uri": "'''Error:''' No se pudo determinar el URI actual.\nSe interrumpió la instalación.",
-       "config-no-cli-uri": "''' Advertencia ''': No se ha especificado ningún <code>--scriptpath</code>, por defecto se usará: <code>$1</code> .",
+       "config-no-cli-uri": "<strong>Aviso:</strong> No se especificó <code>--scriptpath</code>; se usa el valor predeterminado: <code>$1</code>.",
        "config-using-server": "Utilizando el nombre de servidor \"<nowiki>$1</nowiki>\".",
        "config-using-uri": "Utilizando la dirección URL del servidor \"<nowiki>$1$2</nowiki>\".",
        "config-uploads-not-safe": "'''Atención:''' Su directorio por defecto para las cargas, <code>$1</code>, es vulnerable a la ejecución de scripts arbitrarios.\nAunque MediaWiki comprueba todos los archivos cargados por si hubiese amenazas de seguridad, es altamente recomendable [//www.mediawiki.org/wiki/Special:MyLanguage/Manual:Security#Upload_security cerrar esta vulnerabilidad de seguridad] antes de activar las cargas.",
index 5f01e6d..a37ed89 100644 (file)
@@ -7,7 +7,8 @@
                        "Reedy",
                        "아라",
                        "C5st4wr6ch",
-                       "Seb35"
+                       "Seb35",
+                       "Arifin.wijaya"
                ]
        },
        "config-desc": "Penginstal untuk MediaWiki",
@@ -57,7 +58,7 @@
        "config-unicode-using-intl": "Menggunakan [http://pecl.php.net/intl ekstensi PECL intl] untuk normalisasi Unicode.",
        "config-unicode-pure-php-warning": "'''Peringatan''': [http://pecl.php.net/intl Ekstensi intl PECL] untuk menangani normalisasi Unicode tidak tersedia, kembali menggunakan implementasi murni PHP yang lambat.\nJika Anda menjalankan situs berlalu lintas tinggi, Anda harus sedikit membaca [//www.mediawiki.org/wiki/Special:MyLanguage/Unicode_normalization_considerations normalisasi Unicode].",
        "config-unicode-update-warning": "'''Peringatan''': Versi terinstal dari pembungkus normalisasi Unicode menggunakan versi lama pustaka [http://site.icu-project.org/ proyek ICU].\nAnda harus [//www.mediawiki.org/wiki/Special:MyLanguage/Unicode_normalization_considerations memutakhirkannya] jika Anda ingin menggunakan Unicode.",
-       "config-no-db": "Pengandar basis data yang sesuai tidak ditemukan! Anda perlu menginstal pengandar basis data untuk PHP.\nJenis basis data yang didukung: $1.\n\nJika Anda menggunakan inang bersama, mintalah penyedia inang Anda untuk menginstal pengandar basis data yang sesuai.\nJika Anda mengompilasi sendiri PHP, ubahlah konfigurasinya dengan mengaktifkan klien basis data, misalnya menggunakan <code>./configure --with-mysql</code>.\nJika Anda menginstal PHP dari paket Debian atau Ubuntu, maka Anda juga perlu menginstal modul php5-mysql.",
+       "config-no-db": "Pengandar basis data yang sesuai tidak ditemukan! Anda perlu menginstal pengandar basis data untuk PHP.\nJenis basis data yang didukung: $1.\n\nJika Anda mengompilasi sendiri PHP, ubahlah konfigurasinya dengan mengaktifkan klien basis data, misalnya menggunakan <code>./configure --with-mysql</code>.\nJika Anda menginstal PHP dari paket Debian atau Ubuntu, maka Anda juga perlu menginstal modul php5-mysql.",
        "config-outdated-sqlite": "<strong>Peringatan:</strong> Anda menggunakan SQLite $1, yang lebih rendah dari versi minimum yang diperlukan $2. SQLite akan tidak tersedia.",
        "config-no-fts3": "'''Peringatan''': SQLite dikompilasi tanpa [//sqlite.org/fts3.html modul FTS3], fitur pencarian tidak akan tersedia pada konfigurasi ini.",
        "config-register-globals": "'''Peringatan: Opsi <code>[http://php.net/register_globals register_globals]</code> PHP diaktifkan.'''\n'''Nonaktifkan kalau bisa.'''\nMediaWiki akan bekerja, tetapi server Anda memiliki potensi kerentanan keamanan.",
        "config-mbstring": "'''Fatal: [http://www.php.net/manual/en/ref.mbstring.php#mbstring.overload mbstring.func_overload] aktif!'' '\nPilihan ini dapat menyebabkan kesalahan dan kerusakan data yang tidak terduga.\nAnda tidak dapat menginstal atau menggunakan MediaWiki kecuali pilihan ini dinonaktifkan.",
        "config-safe-mode": "''' Peringatan:''' [http://www.php.net/features.safe-mode Mode aman] PHP aktif.\nHal ini akan menyebabkan masalah, terutama jika menggunakan pengunggahan berkas dan dukungan <code>math</code>.",
        "config-xml-bad": "Modul XML PHP hilang.\nMediaWiki membutuhkan fungsi dalam modul ini dan tidak akan bekerja dalam konfigurasi ini.\nJika Anda menggunakan Mandrake, instal paket php-xml.",
+       "config-pcre-old": "<strong>Fatal:</strong> PCRE $1 atau kemudian diperlukan.\nBiner PHP Anda dihubungkan dengan PCRE $2. [https://www.mediawiki.org/wiki/Manual:Errors_and_symptoms/PCRE Selengkapnya].",
        "config-pcre-no-utf8": "'''Fatal''': Modul PCRE PHP tampaknya dikompilasi tanpa dukungan PCRE_UTF8.\nMediaWiki memerlukan dukungan UTF-8 untuk berfungsi dengan benar.",
        "config-memory-raised": "<code>memory_limit</code> PHP adalah $1, dinaikkan ke $2.",
        "config-memory-bad": "'''Peringatan:''' <code>memory_limit</code> PHP adalah $1.\nIni terlalu rendah.\nInstalasi terancam gagal!",
+       "config-ctype": "<strong>Fatal:</strong> PHP harus disusun dengan dukungan untuk [http://www.php.net/manual/en/ctype.installation.php ekstensi Ctype].",
        "config-xcache": "[http://xcache.lighttpd.net/ XCache] telah diinstal",
        "config-apc": "[http://www.php.net/apc APC] telah diinstal",
        "config-wincache": "[http://www.iis.net/download/WinCacheForPhp WinCache] telah diinstal",
        "config-no-cache": "'''Peringatan:''' Tidak dapat menemukan [http://www.php.net/apc APC], [http://xcache.lighttpd.net/ XCache], atau [http://www.iis.net/download/WinCacheForPhp WinCache]. Pinggahan obyek tidak dinonaktifkan.",
        "config-mod-security": "<strong>Peringatan:</strong> Server web Anda memiliki [http://modsecurity.org/ mod_security] yang diaktifkan. Jika salah dalam mengkonfigurasi, ini dapat menyebabkan masalah untuk MediaWiki atau perangkat lunak lain yang memungkinkan pengguna untuk mengirim sembarang konten.\nLihat [http://modsecurity.org/documentation/ dokumentasi mod_security] atau hubungi layanan host Anda jika Anda mengalami kesalahan acak.",
        "config-diff3-bad": "GNU diff3 tidak ditemukan.",
+       "config-git": "Menemukan perangkat lunak kontrol versi Git: <code>$1</code>.",
+       "config-git-bad": "Perangkat lunak kontrol versi Git tidak ditemukan.",
        "config-imagemagick": "ImageMagick ditemukan: <code>$1</code> .\nPembuatan gambar mini akan diaktifkan jika Anda mengaktifkan pengunggahan.",
        "config-gd": "Pustaka grafis GD terpasang ditemukan.\nPembuatan gambar mini akan diaktifkan jika Anda mengaktifkan pengunggahan.",
        "config-no-scaling": "Pustaka GD atau ImageMagick tidak ditemukan.\nPembuatan gambar mini dinonaktifkan.",
        "config-no-uri": "'''Kesalahan:''' URI saat ini tidak dapat ditentukan.\nInstalasi dibatalkan.",
+       "config-no-cli-uri": "<strong>Peringatan:</strong> Tidak ada <code>--scriptpath</code> yang ditentukan, dengan menggunakan standar: <code>$1</code>.",
+       "config-using-server": "Menggunakan nama server \"<nowiki>$1</nowiki>\".",
+       "config-using-uri": "Menggunakan URL server \"<nowiki>$1$2</nowiki>\".",
        "config-uploads-not-safe": "'''Peringatan:''' Direktori bawaan pengunggahan <code>$1</code> Anda rentan terhadap eksekusi skrip yang sewenang-wenang.\nMeskipun MediaWiki memeriksa semua berkas unggahan untuk ancaman keamanan, sangat dianjurkan untuk [//www.mediawiki.org/wiki/Special:MyLanguage/Manual:Security#Upload_security menutup kerentanan keamanan ini] sebelum mengaktifkan pengunggahan.",
        "config-brokenlibxml": "Sistem Anda memiliki kombinasi versi PHP dan libxml2 yang memiliki bug dan dapat menyebabkan kerusakan data tersembunyi pada MediaWiki dan aplikasi web lain.\nMutakhirkan ke PHP 5.2.9 atau yang lebih baru dan libxml2 2.7.3 atau yang lebih baru ([https://bugs.php.net/bug.php?id=45996 arsip bug di PHP]).\nInstalasi dibatalkan.",
        "config-suhosin-max-value-length": "Suhosin terpasang dan membatasi parameter GET <code>length</code> sebesar $1 bita. Komponen ResourceLoader MediaWiki akan berjalan dalam batasan ini, tetapi penanganannya akan menurunkan kinerja. Jika memungkinkan, Anda sebaiknya menetapkan nilai <code>suhosin.get.max_value_length</code> menjadi 1024 atau lebih tinggi dalam <code>php.ini</code> dan menyetel <code>$wgResourceLoaderMaxQueryLength</code> dengan nilai yang sama dalam <code>LocalSettings.php</code>.",
        "config-db-username": "Nama pengguna basis data:",
        "config-db-password": "Kata sandi basis data:",
        "config-db-password-empty": "Silakan masukkan sandi untuk pengguna basis data baru: $1.\nMeskipun dimungkinkan untuk membuat pengguna tanpa sandi, hal itu tidak aman.",
+       "config-db-username-empty": "Anda harus memasukkan nilai untuk \"{{int:config-db-username}}\".",
        "config-db-install-username": "Masukkan nama pengguna yang akan digunakan untuk terhubung ke basis data selama proses instalasi.\nIni bukan nama pengguna akun MediaWiki, melainkan nama pengguna untuk basis data Anda.",
        "config-db-install-password": "Masukkan sandi yang akan digunakan untuk terhubung ke basis data selama proses instalasi.\nIni bukan sandi untuk akun MediaWiki, melainkan sandi untuk basis data Anda.",
        "config-db-install-help": "Masukkan nama pengguna dan sandi yang akan digunakan untuk terhubung ke basis data pada saat proses instalasi.",
        "config-type-oracle": "Oracle",
        "config-support-info": "MediaWiki mendukung sistem basis data berikut:\n\n$1\n\nJika Anda tidak melihat sistem basis data yang Anda gunakan tercantum di bawah ini, ikuti petunjuk terkait di atas untuk mengaktifkan dukungan.",
        "config-dbsupport-mysql": "* [{{int:version-db-mysql-url}} MySQL] adalah target utama MediaWiki dan memiliki dukungan terbaik. MediaWiki juga berjalan dengan [{{int:version-db-mariadb-url}} MariaDB] dan [{{int:version-db-percona-url}} Server Percona], yang kompatibel dengan MySQL. ([http://www.php.net/manual/en/mysql.installation.php Cara mengompilasi PHP dengan dukungan MySQL])",
-       "config-dbsupport-postgres": "* $1 adalah sistem basis data sumber terbuka populer sebagai alternatif untuk MySQL ([http://www.php.net/manual/en/pgsql.installation.php cara mengompilasi PHP dengan dukungan PostgreSQL]). Mungkin ada beberapa bug terbuka dan alternatif ini tidak direkomendasikan untuk dipakai dalam lingkungan produksi.",
-       "config-dbsupport-sqlite": "* $1 adalah sistem basis data yang ringan yang sangat baik dukungannya. ([http://www.php.net/manual/en/pdo.installation.php cara mengompilasi PHP dengan dukungan SQLite], menggunakan PDO)",
-       "config-dbsupport-oracle": "* $1 adalah basis data komersial untuka perusahaan. ([http://www.php.net/manual/en/oci8.installation.php cara mengompilasi PHP dengan dukungan OCI8])",
+       "config-dbsupport-postgres": "* [{{int:version-db-postgres-url}} PostgreSQL] adalah sistem basis data sumber terbuka populer sebagai alternatif untuk MySQL. Mungkin ada beberapa bug terbuka dan alternatif ini tidak direkomendasikan untuk dipakai dalam lingkungan produksi. ([http://www.php.net/manual/en/pgsql.installation.php cara mengompilasi PHP dengan dukungan PostgreSQL])",
+       "config-dbsupport-sqlite": "* [{{int:version-db-sqlite-url}} SQLite] adalah sistem basis data yang ringan yang sangat baik dukungannya. ([http://www.php.net/manual/en/pdo.installation.php cara mengompilasi PHP dengan dukungan SQLite], menggunakan PDO)",
+       "config-dbsupport-oracle": "* [{{int:version-db-oracle-url}} Oracle] adalah basis data komersial untuk perusahaan. ([http://www.php.net/manual/en/oci8.installation.php cara mengompilasi PHP dengan dukungan OCI8])",
+       "config-dbsupport-mssql": "[{{int:version-db-mssql-url}} Microsoft SQL Server] adalah database perusahaan komersial untuk Windows. ([http://www.php.net/manual/en/sqlsrv.installation.php Bagaimana cara mengkompilasi PHP dengan dukungan SQLSRV])",
        "config-header-mysql": "Pengaturan MySQL",
        "config-header-postgres": "Pengaturan PostgreSQL",
        "config-header-sqlite": "Pengaturan SQLite",
        "config-header-oracle": "Pengaturan Oracle",
        "config-header-mssql": "Setelan Microsoft SQL Server",
        "config-invalid-db-type": "Jenis basis data tidak sah",
-       "config-missing-db-name": "Anda harus memasukkan nilai untuk \"Nama basis data\"",
-       "config-missing-db-host": "Anda harus memasukkan nilai untuk \"Inang basis data\"",
-       "config-missing-db-server-oracle": "Anda harus memasukkan nilai untuk \"TNS basis data\"",
+       "config-missing-db-name": "Anda harus memasukkan nilai untuk \"{{int:config-db-name}}\"",
+       "config-missing-db-host": "Anda harus memasukkan nilai untuk \"{{int:config-db-host}}\"",
+       "config-missing-db-server-oracle": "Anda harus memasukkan nilai untuk \"{{int:config-db-host-oracle}}\"",
        "config-invalid-db-server-oracle": "TNS basis data \"$1\" tidak sah.\nGunakan hanya huruf ASCII (a-z, A-Z), angka (0-9), garis bawah (_), dan titik (.).",
        "config-invalid-db-name": "Nama basis data \"$1\" tidak sah.\nGunakan hanya huruf ASCII (a-z, A-Z), angka (0-9), garis bawah (_), dan tanda hubung (-).",
        "config-invalid-db-prefix": "Prefiks basis data \"$1\" tidak sah.\nGunakan hanya huruf ASCII (a-z, A-Z), angka (0-9), garis bawah (_), dan tanda hubung (-).",
        "config-mysql-innodb": "InnoDB",
        "config-mysql-myisam": "MyISAM",
        "config-mysql-myisam-dep": "<strong>Peringatan:</strong> Anda telah memilih MyISAM sebagai mesin penyimpanan MySQL, yang tidak dianjurkan untuk digunakan dengan MediaWiki, karena:\n * nyaris tidak mendukung operasi bersamaan karena penguncian tabel\n * lebih rentan terhadap korupsi daripada mesin lain\n * basis kode MediaWiki tidak selalu menangani MyISAM sebagaimana mestinya\n\nJika instalasi MySQL Anda mendukung InnoDB, sangat disarankan bagi Anda memilih itu.\nJika instalasi MySQL tidak mendukung InnoDB, mungkin sudah waktunya untuk pemutakhiran.",
+       "config-mysql-only-myisam-dep": "<strong>Peringatan:</strong> MyISAM adalah satu-satunya mesin penyimpanan yang tersedia untuk MySQL pada mesin ini, dan hal ini tidak dianjurkan untuk digunakan dengan MediaWiki, karena:\n* hampir tidak mendukung konkurensi karena penguncian tabel\n* basis kode MediaWiki tidak selalu menangani MyISAM sebagaimana mestinya\n\nInstalasi MySQL Anda tidak mendukung InnoDB, mungkin sudah waktunya untuk peningkatan.",
        "config-mysql-engine-help": "'''InnoDB''' hampir selalu merupakan pilihan terbaik karena memiliki dukungan konkurensi yang baik.\n\n'''MyISAM''' mungkin lebih cepat dalam instalasi pengguna-tunggal atau hanya-baca.\nBasis data MyISAM cenderung lebih sering rusak daripada basis data InnoDB.",
        "config-mysql-charset": "Set karakter basis data:",
        "config-mysql-binary": "Biner",
        "config-mssql-auth": "Jenis otentikasi:",
        "config-mssql-install-auth": "Pilih jenis otentikasi yang akan digunakan untuk menyambung ke database selama proses instalasi.\nJika Anda memilih \"{{int:config-mssql-windowsauth}}\", kredensial dari pengguna apapun pada server web yang berjalan akan digunakan.",
        "config-mssql-web-auth": "Pilih jenis otentikasi yang akan digunakan oleh server web untuk menyambung ke server basis data, selama operasi biasa dari wiki.\nJika Anda memilih \"{{int:config-mssql-windowsauth}}\", kredensial dari pengguna apapun pada server web yang berjalan akan digunakan.",
+       "config-mssql-sqlauth": "Otentikasi Server SQL",
        "config-mssql-windowsauth": "Otentikasi Windows",
        "config-site-name": "Nama wiki:",
        "config-site-name-help": "Ini akan muncul di bilah judul peramban dan di berbagai tempat lainnya.",
        "config-install-pg-plpgsql": "Memeriksa bahasa PL / pgSQL",
        "config-pg-no-plpgsql": "Anda perlu menginstal bahasa PL/pgSQL pada basis data $1",
        "config-pg-no-create-privs": "Akun yang Anda tetapkan untuk instalasi tidak memiliki hak yang cukup untuk membuat akun.",
+       "config-pg-not-in-role": "Akun yang ditentukan untuk pengguna web sudah ada.\nAkun yang ditentukan untuk instalasi tidak superuser dan bukan anggota dari peran pengguna Web, sehingga tidak dapat membuat objek yang dimiliki oleh pengguna web.\n\nMediaWiki saat ini membutuhkan bahwa tabel dimiliki oleh pengguna web. Silakan tentukan nama account web lain, atau klik \"back\" dan tentukan pengguna yang terinstal sesuai istimewa.",
        "config-install-user": "Membuat pengguna basis data",
        "config-install-user-alreadyexists": "Pengguna \"$1\" sudah ada",
        "config-install-user-create-failed": "Pembuatan pengguna \"$1\" gagal: $2",
        "config-install-user-grant-failed": "Memberikan izin untuk pengguna \"$1\" gagal: $2",
        "config-install-user-missing": "Pengguna \"$1\" yang dimaksud tidak ditemukan.",
+       "config-install-user-missing-create": "Akun yang ditentukan \"$1\" tidak ada.\nSilahkan klik kotak centang \"Buat akun\" di bawah ini jika Anda ingin membuatnya.",
        "config-install-tables": "Membuat tabel",
        "config-install-tables-exist": "'''Peringatan''': Tabel MediaWiki sepertinya sudah ada.\nMelompati pembuatan.",
        "config-install-tables-failed": "'''Kesalahan''': Pembuatan tabel gagal dengan kesalahan berikut: $1",
        "config-install-done": "'''Selamat!'''\nAnda telah berhasil menginstal MediaWiki.\n\nPenginstal telah membuat berkas <code>LocalSettings.php</code>.\nBerkas itu berisi semua konfigurasi Anda.\n\nAnda perlu mengunduh berkas itu dan meletakkannya di direktori instalasi wiki (direktori yang sama dengan index.php). Pengunduhan akan dimulai secara otomatis.\n\nJika pengunduhan tidak terjadi, atau jika Anda membatalkannya, Anda dapat mengulangi pengunduhan dengan mengeklik tautan berikut:\n\n$3\n\n'''Catatan''': Jika Anda tidak melakukannya sekarang, berkas konfigurasi yang dihasilkan ini tidak akan tersedia lagi setelah Anda keluar dari proses instalasi tanpa mengunduhnya.\n\nSetelah melakukannya, Anda dapat '''[$2 memasuki wiki Anda]'''.",
        "config-download-localsettings": "Unduh <code>LocalSettings.php</code>",
        "config-help": "bantuan",
+       "config-help-tooltip": "klik untuk memperluas",
        "config-nofile": "Berkas \"$1\" tidak dapat ditemukan. Mungkin sudah dihapus?",
+       "config-extension-link": "Tahukah Anda bahwa wiki Anda mendukung [//www.mediawiki.org/wiki/Special:MyLanguage/Manual:Extensions ekstensi]?\n\nAnda dapat menjelajahi [//www.mediawiki.org/wiki/Special:MyLanguage/Category:Extensions_by_category ekstensi menurut kategori] atau [//www.mediawiki.org/wiki/Extension_Matrix Ekstensi Matriks] untuk melihat daftar lengkap ekstensi.",
        "mainpagetext": "'''MediaWiki telah terpasang dengan sukses'''.",
        "mainpagedocfooter": "Silakan baca [//www.mediawiki.org/wiki/Help:Contents Panduan Pengguna] untuk cara penggunaan perangkat lunak wiki ini.\n\n== Memulai penggunaan ==\n* [//www.mediawiki.org/wiki/Special:MyLanguage/Manual:Configuration_settings/id Daftar pengaturan konfigurasi]\n* [//www.mediawiki.org/wiki/Manual:FAQ/id Daftar pertanyaan yang sering diajukan mengenai MediaWiki]\n* [https://lists.wikimedia.org/mailman/listinfo/mediawiki-announce Milis rilis MediaWiki]\n* [//www.mediawiki.org/wiki/Special:MyLanguage/Localisation#Translation_resources Terjemahkan MediaWiki ke bahasa Anda]"
 }
index d61b6c0..18e6003 100644 (file)
@@ -87,6 +87,7 @@ abstract class MachineReadableRCFeedFormatter implements RCFeedFormatter {
                                break;
 
                        case RC_LOG:
+                               $packet['log_id'] = $attrib['rc_logid'];
                                $packet['log_type'] = $attrib['rc_log_type'];
                                $packet['log_action'] = $attrib['rc_log_action'];
                                if ( $attrib['rc_params'] ) {
index 7765714..5ac874d 100644 (file)
@@ -35,6 +35,9 @@ class ResourceLoader {
        /** @var array */
        protected static $requiredSourceProperties = array( 'loadScript' );
 
+       /** @var bool */
+       protected static $debugMode = null;
+
        /** @var array Module name/ResourceLoaderModule object pairs */
        protected $modules = array();
 
@@ -145,9 +148,10 @@ class ResourceLoader {
         *
         * @param string $filter Name of filter to run
         * @param string $data Text to filter, such as JavaScript or CSS text
+        * @param string $cacheReport Whether to include the cache key report
         * @return string Filtered data, or a comment containing an error message
         */
-       protected function filter( $filter, $data ) {
+       public function filter( $filter, $data, $cacheReport = true ) {
                global $wgResourceLoaderMinifierStatementsOnOwnLine, $wgResourceLoaderMinifierMaxLineLength;
                wfProfileIn( __METHOD__ );
 
@@ -179,11 +183,15 @@ class ResourceLoader {
                                                $wgResourceLoaderMinifierStatementsOnOwnLine,
                                                $wgResourceLoaderMinifierMaxLineLength
                                        );
-                                       $result .= "\n/* cache key: $key */";
+                                       if ( $cacheReport ) {
+                                               $result .= "\n/* cache key: $key */";
+                                       }
                                        break;
                                case 'minify-css':
                                        $result = CSSMin::minify( $data );
-                                       $result .= "\n/* cache key: $key */";
+                                       if ( $cacheReport ) {
+                                               $result .= "\n/* cache key: $key */";
+                                       }
                                        break;
                        }
 
@@ -1074,15 +1082,15 @@ class ResourceLoader {
         * Returns JS code which calls mw.loader.register with the given
         * parameters. Has three calling conventions:
         *
-        *   - ResourceLoader::makeLoaderRegisterScript( $name, $version, $dependencies, $group, $source ):
+        *   - ResourceLoader::makeLoaderRegisterScript( $name, $version, $dependencies, $group, $source, $skip ):
         *       Register a single module.
         *
         *   - ResourceLoader::makeLoaderRegisterScript( array( $name1, $name2 ) ):
         *       Register modules with the given names.
         *
         *   - ResourceLoader::makeLoaderRegisterScript( array(
-        *        array( $name1, $version1, $dependencies1, $group1, $source1 ),
-        *        array( $name2, $version2, $dependencies1, $group2, $source2 ),
+        *        array( $name1, $version1, $dependencies1, $group1, $source1, $skip1 ),
+        *        array( $name2, $version2, $dependencies1, $group2, $source2, $skip2 ),
         *        ...
         *     ) ):
         *        Registers modules with the given names and parameters.
@@ -1092,10 +1100,11 @@ class ResourceLoader {
         * @param array $dependencies List of module names on which this module depends
         * @param string $group Group which the module is in
         * @param string $source Source of the module, or 'local' if not foreign
+        * @param string $skip Script body of the skip function
         * @return string
         */
        public static function makeLoaderRegisterScript( $name, $version = null,
-               $dependencies = null, $group = null, $source = null
+               $dependencies = null, $group = null, $source = null, $skip = null
        ) {
                if ( is_array( $name ) ) {
                        return Xml::encodeJsCall(
@@ -1107,7 +1116,7 @@ class ResourceLoader {
                        $version = (int)$version > 1 ? (int)$version : 1;
                        return Xml::encodeJsCall(
                                'mw.loader.register',
-                               array( $name, $version, $dependencies, $group, $source ),
+                               array( $name, $version, $dependencies, $group, $source, $skip ),
                                ResourceLoader::inDebugMode()
                        );
                }
@@ -1201,13 +1210,24 @@ class ResourceLoader {
         * @return bool
         */
        public static function inDebugMode() {
-               global $wgRequest, $wgResourceLoaderDebug;
-               static $retval = null;
-               if ( is_null( $retval ) ) {
-                       $retval = $wgRequest->getFuzzyBool( 'debug',
-                               $wgRequest->getCookie( 'resourceLoaderDebug', '', $wgResourceLoaderDebug ) );
+               if ( self::$debugMode === null ) {
+                       global $wgRequest, $wgResourceLoaderDebug;
+                       self::$debugMode = $wgRequest->getFuzzyBool( 'debug',
+                               $wgRequest->getCookie( 'resourceLoaderDebug', '', $wgResourceLoaderDebug )
+                       );
                }
-               return $retval;
+               return self::$debugMode;
+       }
+
+       /**
+        * Reset static members used for caching.
+        *
+        * Global state and $wgRequest are evil, but we're using it right
+        * now and sometimes we need to be able to force ResourceLoader to
+        * re-evaluate the context because it has changed (e.g. in the test suite).
+        */
+       public static function clearCache() {
+               self::$debugMode = null;
        }
 
        /**
index f9ff029..fa9a8f0 100644 (file)
@@ -106,6 +106,11 @@ class ResourceLoaderFileModule extends ResourceLoaderModule {
         */
        protected $dependencies = array();
 
+       /**
+        * @var string File name containing the body of the skip function
+        */
+       protected $skipFunction = null;
+
        /**
         * @var array List of message keys used by this module
         * @par Usage:
@@ -204,6 +209,10 @@ class ResourceLoaderFileModule extends ResourceLoaderModule {
         *         'group' => [group name string],
         *         // Position on the page to load this module at
         *         'position' => ['bottom' (default) or 'top']
+        *         // Function that, if it returns true, makes the loader skip this module.
+        *         // The file must contain valid JavaScript for execution in a private function.
+        *         // The file must not contain the "function () {" and "}" wrapper though.
+        *         'skipFunction' => [file path]
         *     )
         * @endcode
         */
@@ -267,6 +276,7 @@ class ResourceLoaderFileModule extends ResourceLoaderModule {
                                case 'position':
                                case 'localBasePath':
                                case 'remoteBasePath':
+                               case 'skipFunction':
                                        $this->{$member} = (string)$option;
                                        break;
                                // Single booleans
@@ -410,6 +420,28 @@ class ResourceLoaderFileModule extends ResourceLoaderModule {
                return $this->dependencies;
        }
 
+       /**
+        * Get the skip function.
+        *
+        * @return string|null
+        */
+       public function getSkipFunction() {
+               if ( !$this->skipFunction ) {
+                       return null;
+               }
+
+               global $wgResourceLoaderValidateStaticJS;
+               $localPath = $this->getLocalPath( $this->skipFunction );
+               if ( !file_exists( $localPath ) ) {
+                       throw new MWException( __METHOD__ . ": skip function file not found: \"$localPath\"" );
+               }
+               $contents = file_get_contents( $localPath );
+               if ( $wgResourceLoaderValidateStaticJS ) {
+                       $contents = $this->validateScriptFile( $fileName, $contents );
+               }
+               return $contents;
+       }
+
        /**
         * @return bool
         */
@@ -463,6 +495,9 @@ class ResourceLoaderFileModule extends ResourceLoaderModule {
                        self::tryForKey( $this->skinScripts, $context->getSkin(), 'default' ),
                        $this->loaderScripts
                );
+               if ( $this->skipFunction ) {
+                       $files[] = $this->skipFunction;
+               }
                $files = array_map( array( $this, 'getLocalPath' ), $files );
                // File deps need to be treated separately because they're already prefixed
                $files = array_merge( $files, $this->getFileDependencies( $context->getSkin() ) );
@@ -511,6 +546,7 @@ class ResourceLoaderFileModule extends ResourceLoaderModule {
                        'targets',
                        'group',
                        'position',
+                       'skipFunction',
                        'localBasePath',
                        'remoteBasePath',
                        'debugRaw',
index 9ddd184..f636105 100644 (file)
@@ -293,6 +293,24 @@ abstract class ResourceLoaderModule {
                return $this->targets;
        }
 
+       /**
+        * Get the skip function.
+        *
+        * Modules that provide fallback functionality can provide a "skip function". This
+        * function, if provided, will be passed along to the module registry on the client.
+        * When this module is loaded (either directly or as a dependency of another module),
+        * then this function is executed first. If the function returns true, the module will
+        * instantly be considered "ready" without requesting the associated module resources.
+        *
+        * The value returned here must be valid javascript for execution in a private function.
+        * It must not contain the "function () {" and "}" wrapper though.
+        *
+        * @return string|null A JavaScript function body returning a boolean value, or null
+        */
+       public function getSkipFunction() {
+               return null;
+       }
+
        /**
         * Get the files this module depends on indirectly for a given skin.
         * Currently these are only image files referenced by the module's CSS.
index 63a444b..8a936c6 100644 (file)
@@ -222,12 +222,24 @@ class ResourceLoaderStartUpModule extends ResourceLoaderModule {
 
                        // FIXME: Convert to numbers, wfTimestamp always gives us stings, even for TS_UNIX
 
+                       $skipFunction = $module->getSkipFunction();
+                       if ( $skipFunction !== null && !ResourceLoader::inDebugMode() ) {
+                               $skipFunction = $resourceLoader->filter( 'minify-js',
+                                       $skipFunction,
+                                       // There will potentially be lots of these little string in the registrations
+                                       // manifest, we don't want to blow up the startup module with
+                                       // "/* cache key: ... */" all over it in non-debug mode.
+                                       /* cacheReport = */ false
+                               );
+                       }
+
                        $registryData[ $name ] = array(
                                'version' => $mtime,
                                'dependencies' => $module->getDependencies(),
                                'group' => $module->getGroup(),
                                'source' => $module->getSource(),
                                'loader' => $module->getLoaderScript(),
+                               'skip' => $skipFunction,
                        );
                }
 
@@ -255,17 +267,25 @@ class ResourceLoaderStartUpModule extends ResourceLoaderModule {
                        if (
                                !count( $data['dependencies'] ) &&
                                $data['group'] === null &&
-                               $data['source'] === 'local'
+                               $data['source'] === 'local' &&
+                               $data['skip'] === null
                        ) {
-                               // Modules without dependencies, a group or a foreign source;
+                               // Modules with no dependencies, group, foreign source or skip function;
                                // call mw.loader.register(name, timestamp)
                                $registrations[] = array( $name, $data['version'] );
-                       } elseif ( $data['group'] === null && $data['source'] === 'local' ) {
-                               // Modules with dependencies but no group or foreign source;
+                       } elseif (
+                               $data['group'] === null &&
+                               $data['source'] === 'local' &&
+                               $data['skip'] === null
+                       ) {
+                               // Modules with dependencies but no group, foreign source or skip function;
                                // call mw.loader.register(name, timestamp, dependencies)
                                $registrations[] = array( $name, $data['version'], $data['dependencies'] );
-                       } elseif ( $data['source'] === 'local' ) {
-                               // Modules with a group but no foreign source;
+                       } elseif (
+                               $data['source'] === 'local' &&
+                               $data['skip'] === null
+                       ) {
+                               // Modules with a group but no foreign source or skip function;
                                // call mw.loader.register(name, timestamp, dependencies, group)
                                $registrations[] = array(
                                        $name,
@@ -273,8 +293,8 @@ class ResourceLoaderStartUpModule extends ResourceLoaderModule {
                                        $data['dependencies'],
                                        $data['group']
                                );
-                       } else {
-                               // Modules with a foreign source;
+                       } elseif ( $data['skip'] === null ) {
+                               // Modules with a foreign source but no skip function;
                                // call mw.loader.register(name, timestamp, dependencies, group, source)
                                $registrations[] = array(
                                        $name,
@@ -283,6 +303,17 @@ class ResourceLoaderStartUpModule extends ResourceLoaderModule {
                                        $data['group'],
                                        $data['source']
                                );
+                       } else {
+                               // Modules with a skip function;
+                               // call mw.loader.register(name, timestamp, dependencies, group, source, skip)
+                               $registrations[] = array(
+                                       $name,
+                                       $data['version'],
+                                       $data['dependencies'],
+                                       $data['group'],
+                                       $data['source'],
+                                       $data['skip']
+                               );
                        }
                }
 
index 3968187..da51a33 100644 (file)
@@ -329,6 +329,25 @@ class SpecialPage {
                }
        }
 
+       /**
+        * Return an array of subpages beginning with $search that this special page will accept.
+        *
+        * For example, if a page supports subpages "foo", "bar" and "baz" (as in Special:PageName/foo,
+        * etc.):
+        *
+        *   - `prefixSearchSubpages( "ba" )` should return `array( "bar", "baz" )`
+        *   - `prefixSearchSubpages( "f" )` should return `array( "foo" )`
+        *   - `prefixSearchSubpages( "z" )` should return `array()`
+        *   - `prefixSearchSubpages( "" )` should return `array( foo", "bar", "baz" )`
+        *
+        * @param string $search Prefix to search for
+        * @param integer $limit Maximum number of results to return
+        * @return string[] Matching subpages
+        */
+       public function prefixSearchSubpages( $search, $limit = 10 ) {
+               return array();
+       }
+
        /**
         * Sets headers - this should be called from the execute() method of all derived classes!
         */
index 6da6674..aaa55a3 100644 (file)
@@ -115,6 +115,22 @@ class SpecialLog extends SpecialPage {
                $this->show( $opts, $qc );
        }
 
+       /**
+        * Return an array of subpages beginning with $search that this special page will accept.
+        *
+        * @param string $search Prefix to search for
+        * @param integer $limit Maximum number of results to return
+        * @return string[] Matching subpages
+        */
+       public function prefixSearchSubpages( $search, $limit = 10 ) {
+               global $wgLogTypes;
+               $subpages = $wgLogTypes;
+               $subpages[] = 'all';
+               sort( $subpages );
+               $escaped = preg_quote( $search );
+               return array_slice( preg_grep( "/^$escaped/i", $subpages ), 0, $limit );
+       }
+
        private function parseParams( FormOptions $opts, $par ) {
                global $wgLogTypes;
 
index dcc87a0..1ef96c3 100644 (file)
@@ -1010,7 +1010,7 @@ class LoginForm extends SpecialPage {
                wfRunHooks( 'UserLoginComplete', array( &$currentUser, &$injected_html ) );
 
                if ( $injected_html !== '' ) {
-                       $this->displaySuccessfulAction( $this->msg( 'loginsuccesstitle' ),
+                       $this->displaySuccessfulAction( 'success', $this->msg( 'loginsuccesstitle' ),
                                'loginsuccess', $injected_html );
                } else {
                        $this->executeReturnTo( 'successredirect' );
@@ -1038,18 +1038,22 @@ class LoginForm extends SpecialPage {
                 */
                wfRunHooks( 'BeforeWelcomeCreation', array( &$welcome_creation_msg, &$injected_html ) );
 
-               $this->displaySuccessfulAction( $this->msg( 'welcomeuser', $this->getUser()->getName() ),
-                       $welcome_creation_msg, $injected_html );
+               $this->displaySuccessfulAction(
+                       'signup',
+                       $this->msg( 'welcomeuser', $this->getUser()->getName() ),
+                       $welcome_creation_msg, $injected_html
+               );
        }
 
        /**
-        * Display an "successful action" page.
+        * Display a "successful action" page.
         *
+        * @param string $type condition of return to; see `executeReturnTo`
         * @param string|Message $title Page's title
         * @param string $msgname
         * @param string $injected_html
         */
-       private function displaySuccessfulAction( $title, $msgname, $injected_html ) {
+       private function displaySuccessfulAction( $type, $title, $msgname, $injected_html ) {
                $out = $this->getOutput();
                $out->setPageTitle( $title );
                if ( $msgname ) {
@@ -1058,7 +1062,7 @@ class LoginForm extends SpecialPage {
 
                $out->addHTML( $injected_html );
 
-               $this->executeReturnTo( 'success' );
+               $this->executeReturnTo( $type );
        }
 
        /**
@@ -1104,6 +1108,7 @@ class LoginForm extends SpecialPage {
         *
         * @param string $type One of the following:
         *    - error: display a return to link ignoring $wgRedirectOnLogin
+        *    - signup: display a return to link using $wgRedirectOnLogin if needed
         *    - success: display a return to link using $wgRedirectOnLogin if needed
         *    - successredirect: send an HTTP redirect using $wgRedirectOnLogin if needed
         * @param string $returnTo
@@ -1125,6 +1130,7 @@ class LoginForm extends SpecialPage {
         *
         * @param string $type One of the following:
         *    - error: display a return to link ignoring $wgRedirectOnLogin
+        *    - signup: display a return to link using $wgRedirectOnLogin if needed
         *    - success: display a return to link using $wgRedirectOnLogin if needed
         *    - successredirect: send an HTTP redirect using $wgRedirectOnLogin if needed
         */
@@ -1139,6 +1145,9 @@ class LoginForm extends SpecialPage {
                        $returnToQuery = wfCgiToArray( $this->mReturnToQuery );
                }
 
+               // Allow modification of redirect behavior
+               wfRunHooks( 'PostLoginRedirect', array( &$returnTo, &$returnToQuery, &$type ) );
+
                $returnToTitle = Title::newFromText( $returnTo );
                if ( !$returnToTitle ) {
                        $returnToTitle = Title::newMainPage();
index 490e81f..1add311 100644 (file)
@@ -79,6 +79,19 @@ class SpecialWatchlist extends ChangesListSpecialPage {
                parent::execute( $subpage );
        }
 
+       /**
+        * Return an array of subpages beginning with $search that this special page will accept.
+        *
+        * @param string $search Prefix to search for
+        * @param integer $limit Maximum number of results to return
+        * @return string[] Matching subpages
+        */
+       public function prefixSearchSubpages( $search, $limit = 10 ) {
+               $subpages = array( 'edit', 'raw' );
+               $escaped = preg_quote( $search );
+               return array_slice( preg_grep( "/^$escaped/i", $subpages ), 0, $limit );
+       }
+
        /**
         * Get a FormOptions object containing the default options
         *
index 0172974..eb74d12 100644 (file)
@@ -134,12 +134,10 @@ class MWCryptRand {
                // It's mostly worthless but throw the wiki's id into the data for a little more variance
                $state .= wfWikiID();
 
-               // If we have a secret key or proxy key set then throw it into the state as well
-               global $wgSecretKey, $wgProxyKey;
+               // If we have a secret key set then throw it into the state as well
+               global $wgSecretKey;
                if ( $wgSecretKey ) {
                        $state .= $wgSecretKey;
-               } elseif ( $wgProxyKey ) {
-                       $state .= $wgProxyKey;
                }
 
                return $state;
index 4649132..6b13368 100644 (file)
@@ -44,7 +44,8 @@
                        "وهراني",
                        "아라",
                        "Test Create account",
-                       "Kuwaity26"
+                       "Kuwaity26",
+                       "Calak"
                ]
        },
        "tog-underline": "سطر تحت الوصلات:",
        "vector-view-view": "اقرأ",
        "vector-view-viewsource": "اعرض المصدر",
        "actions": "أفعال",
+       "vector-more-actions": "مزيد",
        "namespaces": "فضاءات التسمية",
        "variants": "المتغيرات",
        "navigation-heading": "قائمة التصفح",
        "searchmenu-exists": "'''توجد صفحة اسمها \"[[:$1]]\" على هذه الويكي.''' {{PLURAL:$2|0=|انظر ايضا نتائج البحث الأخرى.}}",
        "searchmenu-new": "<strong>أنشئ الصفحة \"[[:$1]]\" على هذه الويكي!</strong>  {{PLURAL:$2|0=|انظر أيضا الصفحة التي تم العثور عليها من بحثك.|انظر ايضا نتائج البحث.}}",
        "searchprofile-articles": "صفحات المحتوى",
-       "searchprofile-project": "صفحات المساعدة والمشروع",
        "searchprofile-images": "الوسائط المتعددة",
        "searchprofile-everything": "الكل",
        "searchprofile-advanced": "متقدم",
        "searchprofile-articles-tooltip": "ابحث في $1",
-       "searchprofile-project-tooltip": "ابحث في $1",
        "searchprofile-images-tooltip": "ابحث عن الصور",
        "searchprofile-everything-tooltip": "ابحث في كل المحتوى (شاملا صفحات النقاش)",
        "searchprofile-advanced-tooltip": "ابحث في النطاقات المخصصة",
        "search-interwiki-default": "نتائح من $1:",
        "search-interwiki-more": "(المزيد)",
        "search-relatedarticle": "مرتبطة",
-       "searcheverything-enable": "ابحث في جميع النطاقات",
        "searchrelated": "مرتبطة",
        "searchall": "الكل",
        "showingresults": "معروض بالأسفل {{PLURAL:$1|'''1''' نتيجة|'''$1''' نتيجة}} بدءا من رقم '''$2'''.",
        "allowemail": "مكن تلقي البريد الإلكتروني من المستخدمين الآخرين",
        "prefs-searchoptions": "البحث",
        "prefs-namespaces": "أسماء النطاقات",
-       "defaultns": "أو ابحث في هذه النطاقات:",
        "default": "افتراضي",
        "prefs-files": "ملفات",
        "prefs-custom-css": "CSS مخصص",
        "emailuser-title-target": "راسل بالبريد الإلكتروني هذا  {{GENDER:$1| المستخدم}}",
        "emailuser-title-notarget": "مراسلة المستخدم",
        "emailpage": "إرسال رسالة للمستخدم",
-       "emailpagetext": "يمكنك استخدام الاستمارة بالأسفل لإرسال رسالة بريد إلكتروني إلى {{GENDER:$1|هذا المستخدم|هذه المستخدمة}}.\nسيظهر عنوان البريد الإلكتروني الذي أدخلته في [[Special:Preferences|تفضيلاتك]] كعنوان المرسل في البريد الإلكتروني، كي يستطيع المتلقي الرد عليك مباشرة.",
+       "emailpagetext": "يمكنك استخدام الاستمارة بالأسفل لإرسال رسالة بريد إلكتروني إلى {{GENDER:$1|هذا المستخدم|هذه المستخدمة}}.\n'''يمكن أن يرى المرسل إليه عنوان بريدك الإلكتروني''' الذي أدخلته في [[Special:Preferences|تفضيلاتك]] كعنوان المرسل في البريد الإلكتروني، كي يستطيع المتلقي الرد عليك مباشرة.",
        "defemailsubject": "رسالة {{SITENAME}} من المستخدم \"$1\"",
        "usermaildisabled": "بريد المستخدم الإلكتروني معطل",
        "usermaildisabledtext": "لا يمكنك إرسال بريد إلكتروني إلى مستخدمين آخرين على هذه الويكي",
        "tooltip-preferences-save": "احفظ التغييرات",
        "tooltip-summary": "أدخل ملخصا قصيرا",
        "common.css": "/* ستؤثر الأنماط المتراصة (CSS) المعروضة هنا على كل الواجهات */",
-       "cologneblue.css": "/* الأنماط المتراصة CSS المعروضة هنا ستؤثر على مستخدمي واجهة كولون بلو */",
        "monobook.css": "/* الأنماط المتراصة CSS المعروضة هنا ستؤثر على مستخدمي واجهة مونوبوك */",
-       "modern.css": "/* الأنماط المتراصة CSS المعروضة هنا ستؤثر على مستخدمي واجهة مودرن */",
        "vector.css": "/* الأنماط المتراصة CSS المعروضة هنا ستؤثر على مستخدمي واجهة فكتور */",
        "print.css": "/* الأنماط المتراصة CSS المعروضة هنا ستؤثر على ناتج الطباعة */",
        "noscript.css": "/* الأنماط المتراصة CSS المعروضة هنا ستؤثر على المستخدمين الذين الجافاسكريبت لديهم معطلة */",
        "group-sysop.css": "/* الأنماط المتراصة CSS المعروضة هنا ستؤثر على الإداريين فقط */",
        "group-bureaucrat.css": "/* الأنماط المتراصة CSS المعروضة هنا ستؤثر على البيروقراطيين فقط */",
        "common.js": "/* الجافاسكريبت الموضوع هنا سيتم تحميله لكل المستخدمين مع كل تحميل للصفحة. */",
-       "cologneblue.js": "/* أي جافاسكريبت هنا سيتم تحميلها للمستخدمين الذين يستعملون واجهة كولون بلو */",
        "monobook.js": "/* أي جافاسكريبت هنا سيتم تحميلها للمستخدمين الذين يستعملون واجهة مونوبوك */",
-       "modern.js": "/* أي جافاسكريبت هنا سيتم تحميلها للمستخدمين الذين يستعملون واجهة مودرن */",
        "vector.js": "/* أي جافاسكريبت هنا سيتم تحميلها للمستخدمين الذين يستعملون واجهة فكتور */",
        "group-autoconfirmed.js": "/* أي جافاسكريبت هنا سيتم تحميلها للمستخدمين المؤكدين تلقائيا فقط */",
        "group-bot.js": "/* أي جافاسكريبت هنا سيتم تحميلها للبوتات فقط */",
        "pageinfo-category-pages": "عدد الصفحات",
        "pageinfo-category-subcats": "عدد التصنيفات الفرعية",
        "pageinfo-category-files": "عدد الملفات",
-       "skinname-cologneblue": "كولون بلو",
        "skinname-monobook": "مونوبوك",
-       "skinname-modern": "مودرن",
        "skinname-vector": "فكتور",
        "markaspatrolleddiff": "علم بعلامة المراجعة",
        "markaspatrolledtext": "علم هذه الصفحة بعلامة المراجعة",
index 240795c..538ee00 100644 (file)
        "version-license-title": "Ліцэнзія для $1",
        "version-license-not-found": "Для гэтага пашырэньня няма падрабязных зьвестак пра ліцэнзію.",
        "version-credits-title": "Сьпіс аўтараў $1",
+       "version-credits-not-found": "Для гэтага пашырэньня ня знойдзена падрабязных зьвестак пра аўтараў.",
        "version-poweredby-credits": "{{SITENAME}} працуе на праграмным забесьпячэньні '''[https://www.mediawiki.org/ MediaWiki]''', copyright © 2001-$1 $2.",
        "version-poweredby-others": "іншыя",
        "version-poweredby-translators": "перакладчыкі з translatewiki.net",
index c79beaf..4d5d973 100644 (file)
        "extlink_tip": "বহিঃসংযোগ (মনে রাখবেন http:// উপসর্গ)",
        "headline_sample": "শিরোনাম",
        "headline_tip": "২য় স্তরের শিরোনাম",
-       "nowiki_sample": "à¦\85-ফরমà§\8dযাà¦\9fà¦\95à§\83ত à¦\9fà§\87à¦\95à§\8dসà¦\9f à¦\8fà¦\96ানà§\87 à¦ªà§\8dরবিষà§\8dà¦\9f করুন",
+       "nowiki_sample": "à¦\85-ফরমà§\8dযাà¦\9fà¦\95à§\83ত à¦\9fà§\87à¦\95à§\8dসà¦\9f à¦\8fà¦\96ানà§\87 à¦¯à§\8bà¦\97 করুন",
        "nowiki_tip": "উইকি ফরম্যাটিং উপেক্ষা করা হোক",
        "image_sample": "উদাহরণ.jpg",
        "image_tip": "গ্রথিত ফাইল",
index 35c0489..f1ad903 100644 (file)
@@ -40,7 +40,8 @@
                        "XVEC",
                        "Àlex",
                        "לערי ריינהארט",
-                       "아라"
+                       "아라",
+                       "Calak"
                ]
        },
        "tog-underline": "Subratlla els enllaços:",
        "vector-view-view": "Mostra",
        "vector-view-viewsource": "Mostra el codi",
        "actions": "Accions",
+       "vector-more-actions": "Més",
        "namespaces": "Espais de noms",
        "variants": "Variants",
        "navigation-heading": "Menú de navegació",
index 9e5748a..6fc021e 100644 (file)
        "vector-view-view": "بیخوێنەوە",
        "vector-view-viewsource": "سەرچاوەکەی ببینە",
        "actions": "کردەوەکان",
+       "vector-more-actions": "زیاتر",
        "namespaces": "شوێنناوەکان",
        "variants": "شێوەزارەکان",
        "navigation-heading": "مێنۆی ڕێدۆزی",
index ff48881..480eb63 100644 (file)
        "vector-view-view": "Číst",
        "vector-view-viewsource": "Zobrazit zdrojový kód",
        "actions": "Akce",
-       "vector-more-actions": "Další",
+       "vector-more-actions": "Více",
        "namespaces": "Jmenné prostory",
        "variants": "Varianty",
        "navigation-heading": "Navigační menu",
index 62a1421..be0c356 100644 (file)
@@ -19,7 +19,8 @@
                        "Xoser",
                        "Geitost",
                        "Microchip08",
-                       "아라"
+                       "아라",
+                       "Calak"
                ]
        },
        "tog-underline": "Bınê gırey de xete bance:",
        "vector-view-view": "Bıwane",
        "vector-view-viewsource": "Çımey bıvêne",
        "actions": "Hereketi",
+       "vector-more-actions": "Zêde",
        "namespaces": "Heruna naman",
        "variants": "Varyanti",
        "navigation-heading": "Menuyê navigasyoni",
index b50697d..e02e9ea 100644 (file)
        "vector-view-view": "Lēş",
        "vector-view-viewsource": "Guêrda la surzéia",
        "actions": "Asiòun",
+       "vector-more-actions": "Êter",
        "namespaces": "Spâsi di nòm",
        "variants": "Mudéfichi",
        "navigation-heading": "Lésta 'd navigasiòun",
        "showhideselectedversions": "Fà vèder/lōga versiòun sernîdi",
        "editundo": "scanşèla",
        "diff-empty": "(Nisóna diferèinsa)",
+       "diff-multi-sameuser": "({{PLURAL:$1|'Na versiòun ed mèz|$1 versiòun ed mèz }} 'd un stès uitèint în mìa mustrêdi)",
+       "diff-multi-otherusers": "({{PLURAL:$1|'Na versiòun ed mèz|$1 versiòun ed mèz }} ed {{PLURAL:$2|'n êter utèint|$2 utèint}} mìa fâti vèder)",
+       "diff-multi-manyusers": "({{PLURAL:$1|'Na versiòun ed mèz|$1 versiòun ed mèz }} pió in là ed $2{{PLURAL:$2|utèint}} mìa {{PLURAL:$1|mustrêda|mustrêdi}})",
+       "difference-missing-revision": "{{PLURAL:$2|'Na versiòun|$2 versiòun}} ed cla diferèinsa ché ($1) {{PLURAL:$2|an n'é mìa stêda catêda|în mìa stêdi catêdi}}. \n\nCòst a sucēd ed sôlit quând a's và adrē a un colegamèint vèc ed 'na diff a 'na pàgina scanşlêda. I particulêr a pōlen èser catê int al [{{fullurl:{{#Special:Log}}/delete|page={{FULLPAGENAMEE}}}} regéster dal scanşladûri].",
        "searchresults": "Rişultê 'd la sērca",
        "searchresults-title": "Rişultê 'd la sērca ed \"$1\"",
+       "toomanymatches": "Trôpi relasiòun. Cambiêr la dmânda.",
+       "titlematches": "Rapôrt int al tétol dal pàgini",
+       "textmatches": "Rapôrt int al tèst dal pàgini",
        "prevn": "{{PLURAL:$1|còl préma|quî préma $1}}",
        "nextn": "{{PLURAL:$1|al seguèint|i seguèint $1}}",
        "prevn-title": "{{PLURAL:$1|Al rişultêt ed préma|$1 i rişultêt ed préma}}",
index a3fe77c..538aa76 100644 (file)
@@ -36,7 +36,8 @@
                        "Περίεργος",
                        "לערי ריינהארט",
                        "Kolega2357",
-                       "아라"
+                       "아라",
+                       "Calak"
                ]
        },
        "tog-underline": "Υπογράμμιση συνδέσμων:",
        "vector-view-view": "Ανάγνωση",
        "vector-view-viewsource": "Προβολή κώδικα",
        "actions": "Ενέργειες",
+       "vector-more-actions": "Περισσότερα",
        "namespaces": "Χώροι ονομάτων",
        "variants": "Παραλλαγές",
        "navigation-heading": "Μενού πλοήγησης",
index 825efea..7e53eea 100644 (file)
        "tog-numberheadings": "Numerar automáticamente los encabezados",
        "tog-showtoolbar": "Mostrar la barra de edición",
        "tog-editondblclick": "Editar las páginas al hace doble clic",
-       "tog-editsectiononrightclick": "Activar la edición de secciones pulsando el botón derecho en los títulos de secciones",
+       "tog-editsectiononrightclick": "Permitir modificar secciones al pulsar con el botón secundario del ratón en sus títulos",
        "tog-watchcreations": "Añadir las páginas que cree y los archivos que suba a mi lista de seguimento",
        "tog-watchdefault": "Añadir las páginas y archivos que edite a mi lista de seguimiento",
        "tog-watchmoves": "Añadir las páginas y archivos que mueva a mi lista de seguimiento",
        "tog-watchlisthidepatrolled": "Ocultar las ediciones patrulladas en la lista de seguimiento",
        "tog-ccmeonemails": "Recibir copias de los mensajes que envíe a otros usuarios",
        "tog-diffonly": "No mostrar bajo las ''diferencias'' el contenido de la página",
-       "tog-showhiddencats": "Mostrar las categorías escondidas",
+       "tog-showhiddencats": "Mostrar las categorías ocultas",
        "tog-norollbackdiff": "Omitir la diferencia después de revertir",
-       "tog-useeditwarning": "Advertirme cuando abandone una página editada con cambios sin grabar",
+       "tog-useeditwarning": "Avisarme cuando abandone una página de edición con cambios sin guardar",
        "tog-prefershttps": "Utilizar una conexión segura siempre que haya iniciado una sesión",
        "underline-always": "Siempre",
        "underline-never": "Nunca",
        "portal": "Portal de la comunidad",
        "portal-url": "Project:Portal de la comunidad",
        "privacy": "Política de privacidad",
-       "privacypage": "Project:Política de protección de datos",
+       "privacypage": "Project:Política de privacidad",
        "badaccess": "Error de permisos",
        "badaccess-group0": "No estás autorizado a ejecutar la acción solicitada.",
        "badaccess-groups": "La acción que has solicitado está restringida a los usuarios {{PLURAL:$2|del grupo|de uno de estos $2 grupos}}: $1.",
        "nocookiesfornew": "No se pudo crear la cuenta de usuario, porque no pudimos confirmar su origen.\nAsegúrate de que tienes las cookies activadas, luego recarga esta página e inténtalo de nuevo.",
        "noname": "No se ha especificado un nombre de usuario válido.",
        "loginsuccesstitle": "Ya iniciaste sesión",
-       "loginsuccess": "'''Has iniciado sesión en {{SITENAME}} como «$1».'''",
+       "loginsuccess": "<strong>Has accedido a {{SITENAME}} como «$1».</strong>",
        "nosuchuser": "No existe ningún usuario llamado «$1».\nLos nombres de usuario son sensibles a las mayúsculas.\nRevisa la ortografía, o [[Special:UserLogin/signup|crea una cuenta nueva]].",
        "nosuchusershort": "No hay un usuario con el nombre «$1». Comprueba que lo has escrito correctamente.",
        "nouserspecified": "Debes especificar un nombre de usuario.",
        "prefs-advancedrendering": "Opciones avanzadas",
        "prefs-advancedsearchoptions": "Opciones avanzadas",
        "prefs-advancedwatchlist": "Opciones avanzadas",
-       "prefs-displayrc": "Opciones de mostrado",
+       "prefs-displayrc": "Opciones de visualización",
        "prefs-displaywatchlist": "Opciones de visualización",
        "prefs-tokenwatchlist": "Clave",
        "prefs-diffs": "Diferencias",
index eaec19a..ba44687 100644 (file)
        "vector-view-view": "خواندن",
        "vector-view-viewsource": "نمایش مبدأ",
        "actions": "عملکردها",
+       "vector-more-actions": "بیشتر",
        "namespaces": "فضاهای نام",
        "variants": "گویش‌ها",
        "navigation-heading": "منوی ناوبری",
index 8224a9c..273f495 100644 (file)
@@ -34,7 +34,8 @@
                        "לערי ריינהארט",
                        "아라",
                        "C5st4wr6ch",
-                       "Raynasution"
+                       "Raynasution",
+                       "Arifin.wijaya"
                ]
        },
        "tog-underline": "Garis bawahi pranala:",
        "vector-view-view": "Baca",
        "vector-view-viewsource": "Lihat sumber",
        "actions": "Tindakan",
+       "vector-more-actions": "Lainnya",
        "namespaces": "Ruang nama",
        "variants": "Varian",
        "navigation-heading": "Menu navigasi",
        "pool-timeout": "Lewat waktu menunggu kunci",
        "pool-queuefull": "Kumpulan antrean penuh",
        "pool-errorunknown": "Kesalahan yang tidak diketahui",
+       "pool-servererror": "Layanan penghitung pool ini tidak tersedia ($1).",
        "aboutsite": "Tentang {{SITENAME}}",
        "aboutpage": "Project:Perihal",
        "copyright": "Konten tersedia sesuai di bawah $1.",
        "parser-template-recursion-depth-warning": "Limit kedalaman hubungan berulang templat terlampaui ($1)",
        "language-converter-depth-warning": "Batas kedalaman pengonversi bahasa terlampaui ($1)",
        "node-count-exceeded-category": "Halaman dimana hitungan-node terlampaui",
+       "node-count-exceeded-category-desc": "Kategori untuk halaman dimana hitungan-node terlampaui.",
        "node-count-exceeded-warning": "Page exceeded the node-count",
        "expansion-depth-exceeded-category": "Pages where expansion depth is exceeded",
+       "expansion-depth-exceeded-category-desc": "Ini adalah kategori untuk halaman dimana kedalaman ekspansi terlampaui.",
        "expansion-depth-exceeded-warning": "Page exceeded the expansion depth",
        "parser-unstrip-loop-warning": "Unstrip loop detected",
        "parser-unstrip-recursion-limit": "Unstrip recursion limit exceeded ($1)",
        "currentrev": "Revisi terkini",
        "currentrev-asof": "Revisi terkini pada $1",
        "revisionasof": "Revisi per $1",
-       "revision-info": "Revisi per $1; $2",
+       "revision-info": "Revisi per $1 oleh {{GENDER:$6|$2}}$7",
        "previousrevision": "←Revisi sebelumnya",
        "nextrevision": "Revisi selanjutnya→",
        "currentrevisionlink": "Revisi terkini",
        "revdelete-selected-text": "{{PLURAL:$1|Revisi terpilih|Revisi terpilih}} dari [[:$2]]:",
        "revdelete-selected-file": "{{PLURAL:$1|Versi berkas terpilih|Versi berkas terpilih}} dari [[:$2]]:",
        "logdelete-selected": "{{PLURAL:$1|Log|Log-log}} pilihan untuk:",
+       "revdelete-text-text": "Revisi yang dihapus akan tetap muncul di halaman riwayat, tetapi bagian dari konten mereka akan menjadi tidak dapat diakses untuk umum.",
+       "revdelete-text-file": "Versi berkas yang dihapus akan tetap muncul di riwayat berkas, tetapi bagian dari konten mereka akan menjadi tidak dapat diakses untuk umum.",
+       "logdelete-text": "Acara log yang dihapus akan tetap muncul di log, tetapi bagian dari konten mereka akan menjadi tidak dapat diakses untuk umum.",
        "revdelete-text-others": "Pengurus lain pada {{SITENAME}} masih akan dapat mengakses konten tersembunyi dan dapat membatalkan penghapusan itu kembali melalui antarmuka yang sama ini, kecuali ada batasan-batasan tambahan yang ditetapkan.",
        "revdelete-confirm": "Tolong konfirmasi bahwa Anda memang bermaksud melakukan ini, memahami konsekuensinya, dan bahwa Anda melakukannya sesuai dengan [[{{MediaWiki:Policy-url}}|kebijakan]].",
        "revdelete-suppress-text": "Penyembunyian revisi '''hanya''' boleh digunakan untuk kasus-kasus berikut:\n* Informasi yang berpotensi memfitnah\n* Informasi pribadi yang tak sepantasnya\n*: ''alamat rumah dan nomor telepon, nomor kartu identitas, dan lain-lain.''",
        "editundo": "balikkan",
        "diff-empty": "(Tidak ada perbedaan)",
        "diff-multi-sameuser": "({{PLURAL:$1|Satu revisi antara|$1 revisi antara}} oleh pengguna yang sama tidak ditampilkan)",
+       "diff-multi-otherusers": "({{PLURAL:$1|Satu revisi antara|$1 revisi antara}} oleh {{PLURAL:$2|satu pengguna lainnya|$2 pengguna}} tidak ditampilkan)",
        "diff-multi-manyusers": "({{PLURAL:$1|Satu|$1}} revisi antara oleh lebih dari $2 {{PLURAL:$2|satu|$2}} pengguna tak ditampilkan)",
        "difference-missing-revision": "{{PLURAL:$2|Satu revisi|$2 revisi}} dari perbedaan ini ($1) {{PLURAL:$2|tidak|tidak}} ditemukan.\n\nHal ini biasanya disebabkan oleh tautan diff yang kedaluwarsa ke halaman yang sudah dihapus.\nRinciannya dapat ditemukan di [{{fullurl:{{#Special:Log}}/delete|page={{FULLPAGENAMEE}}}} log penghapusan].",
        "searchresults": "Hasil pencarian",
        "right-move": "Memindahkan halaman",
        "right-move-subpages": "Memindahkan halaman dengan seluruh subhalamannya",
        "right-move-rootuserpages": "Memindahkan halaman utama pengguna",
+       "right-move-categorypages": "Pindahkan halaman kategori",
        "right-movefile": "Memindahkan berkas",
        "right-suppressredirect": "Tidak membuat pengalihan dari nama lama ketika memindahkan halaman",
        "right-upload": "Memuat berkas",
        "action-createpage": "membuat halaman baru",
        "action-createtalk": "membuat halaman pembicaraan baru",
        "action-createaccount": "membuat akun pengguna ini",
+       "action-history": "lihat riwayat halaman ini",
        "action-minoredit": "menandai sebagai suntingan kecil",
        "action-move": "memindahkan halaman ini",
        "action-move-subpages": "memindahkan halaman ini, dan semua sub-halamannya",
        "action-move-rootuserpages": "memindahkan halaman utama pengguna",
+       "action-move-categorypages": "pindahkan halaman kategori",
        "action-movefile": "pindahkan berkas ini",
        "action-upload": "memuatkan berkas ini",
        "action-reupload": "menimpa berkas yang telah ada",
        "unwatchedpages": "Halaman yang tak dipantau",
        "listredirects": "Daftar pengalihan",
        "listduplicatedfiles": "Daftar berkas yang berduplikat",
+       "listduplicatedfiles-summary": "Ini adalah daftar berkas di mana versi terbaru dari berkas tersebut merupakan duplikat dari versi terbaru dari beberapa berkas lain. Hanya berkas lokal yang dianggap.",
        "listduplicatedfiles-entry": "[[:File:$1|$1]] memiliki [[$3|{{PLURAL:$2|sebuah duplikat|$2 duplikat}}]].",
        "unusedtemplates": "Templat yang tak digunakan",
        "unusedtemplatestext": "Daftar berikut adalah semua halaman pada ruang nama {{ns:template}} yang tidak dipakai di halaman mana pun.\nCek dahulu pranala lain ke templat tersebut sebelum menghapusnya.",
        "trackingcategories-name": "Nama pesan",
        "trackingcategories-desc": "Kriteria inklusi kategori",
        "noindex-category-desc": "Halaman tidak diindeks oleh robot karena ini mempunyai kata khusus <code><nowiki>__NOINDEX__</nowiki></code> padanya dan berada dalam ruang nama yang mengizinkan penanda itu.",
+       "index-category-desc": "Halaman ini memiliki <code><nowiki>__INDEX__</nowiki></code> di atasnya (dan dalam ruang nama yang mana bendera yang diperbolehkan), dan karenanya diindeks oleh robot di mana itu biasanya tidak akan.",
        "post-expand-template-inclusion-category-desc": "Setelah memperluas semua templat, ukuran halaman menjadi lebih besar dari <code>$wgMaxArticleSize</code>, sehingga beberapa templat tidak diperluas.",
+       "post-expand-template-argument-category-desc": "Setelah memperluas argumen templat (sesuatu dalam tiga tanda kurung, seperti <code>{{{Foo}}}</code>), halaman tersebut lebih besar dari <code>$wgMaxArticleSize</code>.",
+       "expensive-parserfunction-category-desc": "Terlalu banyak fungsi parser (seperti <code>#ifexist</code>) termasuk pada halaman. Lihat [https://www.mediawiki.org/wiki/Special:MyLanguage/Manual:$wgExpensiveParserFunctionLimit Manual:$wgExpensiveParserFunctionLimit].",
        "broken-file-category-desc": "Kategori ditambahkan jika halaman tersebut berisi pranala rusak (pranala untuk menanamkan sebuah berkas ketika berkas tersebut tidak ada).",
+       "hidden-category-category-desc": "Ini adalah kategori dengan <code><nowiki>__HIDDENCAT__</nowiki></code> di atasnya, yang mencegah dari muncul di kotak tautan kategori pada halaman, secara default.",
        "trackingcategories-nodesc": "Deskripsi tidak tersedia.",
        "trackingcategories-disabled": "Kategori dinonaktifkan",
        "mailnologin": "Tidak ada alamat surel",
        "watchnologin": "Belum masuk log",
        "addwatch": "Tambahkan ke daftar pantauan",
        "addedwatchtext": "Halaman \"[[:$1]]\" telah ditambahkan ke [[Special:Watchlist|daftar pantauan]] Anda.\nPerubahan-perubahan berikutnya pada halaman tersebut dan halaman pembicaraan terkaitnya akan tercantum di sini.",
+       "addedwatchtext-short": "Halaman \"$1\" telah ditambahkan ke daftar pantauan Anda.",
        "removewatch": "Hapus dari daftar pantauan",
        "removedwatchtext": "Halaman \"[[:$1]]\" telah dihapus dari [[Special:Watchlist|daftar pantauan]] Anda.",
+       "removedwatchtext-short": "Halaman \"$1\" telah dihapus dari daftar pantauan Anda.",
        "watch": "Pantau",
        "watchthispage": "Pantau halaman ini",
        "unwatch": "Batal pantau",
        "sp-contributions-newbies-sub": "Untuk pengguna baru",
        "sp-contributions-newbies-title": "Kontribusi pengguna baru",
        "sp-contributions-blocklog": "Log pemblokiran",
+       "sp-contributions-suppresslog": "kontribusi pengguna yang dihapus",
        "sp-contributions-deleted": "kontribusi pengguna yang dihapus",
        "sp-contributions-uploads": "unggahan",
        "sp-contributions-logs": "log",
        "blockipsuccesstext": "[[Special:Contributions/$1|$1]] telah diblokir.<br />\nLihat [[Special:BlockList|daftar pemblokiran]] untuk meninjau kembali pemblokiran.",
        "ipb-blockingself": "Anda akan memblokir diri sendiri! Apakah Anda yakin akan melakukannya?",
        "ipb-confirmhideuser": "Anda akan memblokir pengguna dengan mengaktifkan \"sembunyikan pengguna\" diaktifkan. Ini akan menyembunyikan nama pengguna pada semua daftar dan entri log. Apakah Anda yakin ingin melakukannya?",
+       "ipb-confirmaction": "Jika Anda yakin Anda benar-benar ingin melakukannya, periksa kolom \"{{int:ipb-confirm}}\" di bagian bawah.",
        "ipb-edit-dropdown": "Sunting alasan pemblokiran",
        "ipb-unblock-addr": "Hilangkan blokir $1",
        "ipb-unblock": "Hilangkan blokir seorang pengguna atau suatu alamat IP",
        "movepagetalktext": "Halaman pembicaraan yang berkaitan juga akan dipindahkan secara otomatis '''kecuali apabila:'''\n\n*Sebuah halaman pembicaraan yang tidak kosong telah ada di bawah judul baru, atau\n*Anda tidak memberi tanda cek pada kotak di bawah ini\n\nDalam kasus tersebut, apabila diinginkan, Anda dapat memindahkan atau menggabungkan halaman secara manual.",
        "movearticle": "Pindahkan halaman:",
        "moveuserpage-warning": "'''Peringatan:''' Anda tengah memindahkan halaman pengguna. Perlu diketahui bahwa hanya halaman yang akan dipindahkan namun pengguna ''tidak akan'' berganti nama.",
+       "movecategorypage-warning": "<strong>Peringatan:</strong> Anda akan memindahkan halaman kategori. Perlu diketahui bahwa hanya halaman yang akan dipindahkan dan setiap halaman dalam kategori lama <em>tidak</em> akan dikategorikan ulang ke yang baru.",
        "movenologintext": "Anda harus menjadi pengguna terdaftar dan telah [[Special:UserLogin|masuk log]] untuk dapat memindahkan suatu halaman.",
        "movenotallowed": "Anda tak memiliki hak akses untuk memindahkan halaman.",
        "movenotallowedfile": "Anda tak memiliki hak untuk memindahkan berkas.",
        "cant-move-user-page": "Anda tidak memiliki hak akses untuk memindahkan halaman pengguna (terpisah dari subhalaman).",
        "cant-move-to-user-page": "Anda tidak memiliki hak akses untuk memindahkan halaman ke suatu halaman pengguna (kecuali ke subhalaman pengguna).",
+       "cant-move-category-page": "Anda tidak memiliki izin untuk memindahkan halaman kategori.",
+       "cant-move-to-category-page": "Anda tidak memiliki izin untuk memindahkan halaman ke halaman kategori.",
        "newtitle": "Ke judul baru:",
        "move-watch": "Pantau halaman ini",
        "movepagebtn": "Pindahkan halaman",
        "thumbnail_image-type": "Tipe gambar tidak didukung",
        "thumbnail_gd-library": "Konfigurasi pustaka GD tak lengkap: tak ada fungsi $1",
        "thumbnail_image-missing": "Berkas yang tampaknya hilang: $1",
+       "thumbnail_image-failure-limit": "Ada terlalu banyak upaya yang gagal baru-baru ini ($1 atau lebih) untuk membuat miniatur ini. Silakan coba lagi nanti.",
        "import": "Impor halaman",
        "importinterwiki": "Impor transwiki",
        "import-interwiki-text": "Pilih suatu wiki dan judul halaman yang akan di impor.\nTanggal revisi dan nama penyunting akan dipertahankan.\nSemua aktivitas impor transwiki akan dicatat di [[Special:Log/import|log impor]].",
        "newimages-summary": "Halaman istimewa berikut menampilkan daftar berkas yang terakhir dimuat",
        "newimages-legend": "Penyaring",
        "newimages-label": "Nama berkas (atau sebagian dari nama berkas):",
+       "newimages-showbots": "Tampilkan unggahan oleh bot",
        "noimages": "Tidak ada yang dilihat.",
        "ilsubmit": "Cari",
        "bydate": "berdasarkan tanggal",
        "imgmultigo": "Cari!",
        "imgmultigoto": "Pergi ke halaman $1",
        "img-lang-default": "(bahasa default)",
+       "img-lang-info": "Jadikan gambar ini dalam $1. $2",
        "img-lang-go": "Tuju ke",
        "ascending_abbrev": "naik",
        "descending_abbrev": "turun",
        "watchlistedit-raw-done": "Daftar pantauan Anda telah diperbarui.",
        "watchlistedit-raw-added": "{{PLURAL:$1|$1 judul telah}} ditambahkan:",
        "watchlistedit-raw-removed": "{{PLURAL:$1|$1 judul telah}} dikeluarkan:",
+       "watchlistedit-clear-title": "Daftar pantauan dihapus",
+       "watchlistedit-clear-legend": "Hapus daftar pantauan",
+       "watchlistedit-clear-explain": "Semua judul akan dihapus dari daftar pantauan Anda",
+       "watchlistedit-clear-titles": "Judul:",
+       "watchlistedit-clear-submit": "Hapus daftar pantauan (Ini bersifat permanen!)",
+       "watchlistedit-clear-done": "Daftar pantauan Anda telah dihapus.",
+       "watchlistedit-clear-removed": "{{PLURAL:$1|1 judul telah|$1 judul telah}} dihapus:",
+       "watchlistedit-too-many": "Ada terlalu banyak halaman untuk ditampilkan di sini.",
+       "watchlisttools-clear": "Hapus daftar pantauan",
        "watchlisttools-view": "Tampilkan perubahan terkait",
        "watchlisttools-edit": "Tampilkan dan sunting daftar pantauan",
        "watchlisttools-raw": "Sunting daftar pantauan mentah",
        "duration-centuries": "{{PLURAL:$1||}}$1 abad",
        "duration-millennia": "{{PLURAL:$1||}}$1 milenium",
        "rotate-comment": "Gambar diputar $1 {{PLURAL:$1|derajat}} searah jarum jam",
+       "limitreport-title": "Parser profil data:",
        "limitreport-cputime": "Penggunaan waktu CPU",
        "limitreport-cputime-value": "$1 {{PLURAL:$1|detik|detik}}",
        "limitreport-walltime": "Penggunaan waktu riil",
        "limitreport-walltime-value": "$1 {{PLURAL:$1|detik|detik}}",
+       "limitreport-ppvisitednodes": "Preprosesor mengunjungi hitungan node",
+       "limitreport-ppgeneratednodes": "Preprosesor menghasilkan hitungan node",
+       "limitreport-postexpandincludesize": "Pasca memperluas mencakup ukuran",
        "limitreport-postexpandincludesize-value": "$1/$2 {{PLURAL:$2|bita|bita}}",
        "limitreport-templateargumentsize": "Ukuran argumen temlat",
        "limitreport-templateargumentsize-value": "$1/$2 {{PLURAL:$2|bita|bita}}",
index 62e368a..4d04671 100644 (file)
        "sp-contributions-toponly": "აჩვენე მხოლოდ ბოლო ვერსიები",
        "sp-contributions-submit": "ძიება",
        "whatlinkshere": "ბმული გვერდზე",
-       "whatlinkshere-title": "გვერდები, რომლებიც შეიცავენ ბმულებს „$1“-ზე",
+       "whatlinkshere-title": "გვერდები, რომლებიც შეიცავენ „$1“-ის ბმულებს",
        "whatlinkshere-page": "გვერდი:",
        "linkshere": "მომდევნო გვერდები შეიცავენ ბმულებს '''[[:$1]]'''-ზე:",
        "nolinkshere": "'''[[:$1]]'''-ზე ბმული არ არის.",
index 3e3fe0c..c10ba27 100644 (file)
@@ -67,7 +67,7 @@
        "editfont-sansserif": "Font sans-serif",
        "editfont-serif": "Font serif",
        "sunday": "Dumeniga",
-       "monday": "Lündesdí",
+       "monday": "Lünesdí",
        "tuesday": "Martedì",
        "wednesday": "Merculdí",
        "thursday": "Giuedí",
        "postcomment": "Sezión növa",
        "articlepage": "Varda l'articul",
        "talk": "Discüssión",
-       "views": "Visid",
+       "views": "Vìste",
        "toolbox": "Arnés",
        "userpage": "Vidè la pàgina del dovrat",
        "projectpage": "Varda la pagina de servizzi",
        "viewsourcelink": "fà vidè el codes surgent",
        "editsectionhint": "Mudifega la sezión $1",
        "toc": "Cuntegnüü",
-       "showtoc": "fà vidè",
+       "showtoc": "fà ved",
        "hidetoc": "scund",
        "collapsible-collapse": "sara sü",
-       "collapsible-expand": "slarga",
+       "collapsible-expand": "dèrf fò",
        "thisisdeleted": "Varda o rimet a post $1?",
-       "viewdeleted": "Te vöret vidè $1?",
+       "viewdeleted": "Vöret vidè $1?",
        "restorelink": "{{PLURAL:$1|1 mudifega scancelada|$1 mudifegh scancelaa}}",
        "feedlinks": "Feed:",
        "feed-invalid": "Mudalità de sotascrizión del feed minga valida",
        "directorycreateerror": "L'è mía staa pussibel creà la cartèla \"$1\"",
        "filenotfound": "L'è mía staa pussibel trövà l'archivi \"$1\"",
        "unexpected": "Valur inaspetaa: \"$1\"=\"$2\"",
+       "formerror": "Erur: el sistéma 'l rìa mìa a mandà vià 'l mòdulo",
+       "badarticleerror": "Operasiù mìa pirmitìda per chèsta pàgina.",
        "cannotdelete": "La pagina o l'archivi \"$1\" i g'ha mìa püdìt véser scancelàcc.\nPöl das che i sàpe zà stacc scancelàcc de vergü óter.",
        "cannotdelete-title": "L'è mìa stat pusìbol scancelà la pàgina \"$1\"",
        "delete-hook-aborted": "El scancelamènt l'è stat anulàt de l'hook.\nGh'è stat dat nesöna spiegasiù.",
        "mypreferencesprotected": "Te g'hét mìa i permès nesesàre per mudificà le tò preferènse",
        "ns-specialprotected": "I paginn special i pören mía vess mudifegaa",
        "exception-nologin": "Te seet minga dent in del sistema",
+       "exception-nologin-text": "Te g'harèset de [[Special:Userlogin|autenticàt]] (cioè fà 'l log-in) per püdì doprà chèsta pàgina o asiù.",
        "virus-scanfailed": "scansiù falìda (còdes $1)",
        "logouttext": "'''Ades te sét scolegàt.'''\n\nOcio che 'na quach pàgina la te pödarès vègner fò compàgn che se te g'hèset mìa fat el log-out enfìna a che te snètet mìa fò la cache del tò browser.",
        "welcomeuser": "Benvegnüü\\Benriàt, $1",
        "login-userblocked": "Chèsta ütènsa l'è blocàda. La conesiù l'è mìa cunsentìda.",
        "wrongpassword": "La ciav che t'hee metüü denter l'è nò giüsta. Pröva turna per piasè.",
        "wrongpasswordempty": "T'hee no metüü denter la parola ciav. Pröva turna per piasè.",
+       "passwordtooshort": "Le password le g'ha de ìga alméno {{PLURAL:$1|1 caràter|$1 caràter}}.",
        "password-name-match": "La tò password la g'ha de éser diferènta del tò nòm de ütènt",
+       "password-login-forbidden": "L'üzo de chesto nom ütent e de chèsta password l'è stat pruibìt.",
        "mailmypassword": "Tùrna a defenéser la password",
        "passwordremindertext": "Un quajdün (prubabilment ti, cun l'indiriz IP $1) l'ha ciamaa da mandagh 'na ciav növa per andà denter int 'l sistema de {{SITENAME}} ($4).\nLa ciav per 'l druvadur \"$2\" adess l'è \"$3\".\nSariss mej andà denter int 'l sit almanch una völta prima de cambià la ciav.\nLa to ciav tempuranea la scaderà da chì a {{PLURAL:$5|un dì|$5 dì}}.\n\nSe te nò staa ti a ciamà 'sta ciav chì, o magara t'hee truaa la ciav vegia e te vör pü cambiala, te pör ignurà 'stu messagg chì e 'ndà inanz a druà la ciav vegia.",
        "noemail": "Gh'è registràt nisü indirìs e-mail per l'ütènt \"$1\".",
        "pt-login-button": "Va dent",
        "pt-createaccount": "Creá un cünt",
        "pt-userlogout": "Va fö (logout)",
-       "changepassword": "Mudifega la paròla d'urdin",
+       "user-mail-no-addy": "Te g'hét sercàt de mandà vià 'na e-mail sènsa specificà l'indirìs",
+       "user-mail-no-body": "Te g'hét sercàt de mandà vià 'na e-mail conden tèst vöt o tròp cürt.",
+       "changepassword": "Càmbia la password",
        "resetpass_announce": "Per completà la conesiù, te g'hét de definì 'na password nöa.",
        "resetpass_header": "Càmbia la password de l'ütènsa",
        "oldpassword": "Password vècia:",
        "retypenew": "Tùrna a mèter dét la password nöa:",
        "resetpass_submit": "Defenés la password e regìstret (fà 'l log-in)",
        "changepassword-success": "La tò password l'è stàda cambiàda sènsa erùr!",
-       "changepassword-throttled": "Te g'hét fat tròp tacc tentatìf de cunitìt en poch tép, adès te g'hét de spetà $1 per püdì turnà a pröà.",
+       "changepassword-throttled": "Te g'hét fat tròp tacc tentatìf de autenticàt en poch tép, adès te g'hét de spetà $1 per püdì turnà a pröà.",
        "resetpass_forbidden": "Te pödet mìa cambià le password",
        "resetpass-no-info": "Te g'hét de éser cunitìt per acéder diretamènt a la pàgina",
        "resetpass-submit-loggedin": "Càmbia la password",
        "resetpass-submit-cancel": "Scancèla l'operasiù",
+       "resetpass-wrong-oldpass": "Password temporànea o atöàla mìa bùna.\nLa password la pödarès véser stàda zamò cambiàda, o sedenò te pödarèset vìga zamò fat domànda de 'na password temporànea nöa.",
+       "resetpass-recycled": "Te g'harèset de turnà a defenéser la tò password con vergót de diferènt de la password che te g'hét adès.",
+       "resetpass-temp-emailed": "L'autenticasiù l'è stàda fàda conden còdes temporàneo, mandàt per e-mail. Per completà la registrasiù, bizògna che te defenéset 'na password nöa ché:",
+       "resetpass-temp-password": "Password temporànea:",
+       "resetpass-abort-generic": "La mudìfica de la password l'è stàda blocàda de 'n estensiù.",
+       "resetpass-expired": "La tò password l'è scadìda. Te g'harèset de defenéser 'na password nöa semài che te öt autenticàt.",
+       "resetpass-validity-soft": "La tò password l'è mìa bùna: $1\n\nTe g'harèset de catà fò 'n ótra password o clicà sö \"{{int:resetpass-submit-cancel}}\" per turnà a definìla piö tàrde.",
        "passwordreset": "Tùrna a defenéser la password",
+       "passwordreset-text-one": "Empenés chèsto mòdulo per turnà a defenéser la tò password.",
        "passwordreset-legend": "Tùrna a defenéser la password",
        "passwordreset-disabled": "La ridefinisiù de la password l'è mìa atìva sö chèsta wiki",
        "passwordreset-emaildisabled": "Le funsiù de pòsta eletrònica i è stàde disativàde sö chèsta wiki.",
        "passwordreset-username": "Nòm de ütènt",
        "passwordreset-domain": "Domini:",
        "passwordreset-email": "Indirìs e-mail:",
+       "passwordreset-emailtitle": "Detài de l'ütènsa sö {{SITENAME}}",
+       "passwordreset-emailelement": "Nòm ütènt: $1\nPassword temporànea: $2",
+       "passwordreset-emailsent": "Gh'è stat mandàt vià 'na e-mail de redefinisiù de la password.",
+       "passwordreset-emailsent-capture": "Gh'è stat mandàt vià chèsta e-mail de redefinisiù de la password:",
+       "changeemail": "Càmbia l'indirìs e-mail",
+       "changeemail-header": "Càmbia l'indirìs e-mail de l'ütènsa",
        "changeemail-none": "(nisü)",
        "changeemail-password": "La password sö {{SITENAME}}:",
        "changeemail-submit": "Càmbia l'indirìs e-mail",
        "changeemail-cancel": "Scancèla l'operasiù",
+       "changeemail-throttled": "Te g'hét fat tròp tacc tentatìf de autenticàt, adès te g'hét de spetà $1 per püdì turnà a pröà.",
        "resettokens": "Redefenés i tokens",
+       "resettokens-no-tokens": "Gh'è nisü token de redefenéser.",
        "resettokens-legend": "Redefenés i tokens",
        "resettokens-tokens": "Token:",
        "resettokens-token-label": "$1 (valùr de adès: $2)",
        "showpreview": "Famm vedè prima",
        "showdiff": "Famm vedè i cambiament",
        "anoneditwarning": "Tì te set minga entraa. In de la crunulugia de la pagina se vedarà el tò IP.",
+       "anonpreviewwarning": "''Te g'hét mìa fat el log-in. Semài che te sàlvet la pàgina, el tò indirìs IP el vegnarà registràt endèla crunulugìa.''",
        "missingcommenttext": "Mèt dét en comènt ché sota",
        "summary-preview": "Pröva de l'uget:",
        "blockedtitle": "Ütènsa blocàda",
        "currentrev": "Versiù de adès",
        "currentrev-asof": "Versión curenta di $1",
        "revisionasof": "Revisión $1",
-       "revision-info": "Versiù del $4 a le $5 de $2",
+       "revision-info": "Versiù del $4 a le $5 de {{GENDER:$6|$2}}$7",
        "previousrevision": "←Versión püssee vegia",
        "nextrevision": "Revisión püssee növ →",
        "currentrevisionlink": "Varda la revisión curenta",
        "revdelete-radio-same": "(càmbia mìa)",
        "revdelete-radio-set": "Scond",
        "revdelete-radio-unset": "Fà vèt",
+       "revdelete-unsuppress": "Tira vià le restrisiù sö le versiù ripristinàde",
        "revdelete-log": "Mutìf:",
+       "revdelete-submit": "Aplica {{PLURAL:$1|a la versiù selesiunàda|a le versiù selesiunàde}}",
        "revdel-restore": "Cambia la visibilità",
        "pagehist": "Crunulugia de la pagina",
        "deletedhist": "Crunulugìa scancelàda",
        "mergehistory-reason": "Mutìf:",
        "pagemerge-logentry": "el g'ha ünìt [[$1]] a [[$2]] (reviziù 'nfìna al $3)",
        "revertmerge": "Scancela i ünión",
-       "history-title": "Cronolugia di mudifegh de \"$1\"",
+       "history-title": "Crunulugia di mudifegh de \"$1\"",
+       "difference-title-multipage": "Diferènsa 'ntra le pàgine \"$1\" e \"$2\"",
+       "difference-multipage": "(Diferènsa 'ntra le pàgine)",
        "lineno": "Riga $1:",
        "compareselectedversions": "Compara i versión seleziunaa",
        "editundo": "turna a 'me che l'era",
+       "diff-empty": "(Nesöna diferènsa)",
        "searchresults": "Risültaa de la recerca.",
        "searchresults-title": "Resültaa de la ricerca de \"$1\"",
        "toomanymatches": "Gh'è tropi curispundens. Mudifichè la richiesta.",
+       "titlematches": "Corespondènse endel tìtol de le pàgine",
        "textmatches": "Truvaa int 'l test di paginn",
        "notextmatches": "La vus che t'hee ciamaa la gh'ha minga una curispundenza in del test di paginn.",
        "prevn": "precedent {{PLURAL:$1|$1}}",
        "nextn": "pròssim {{PLURAL:$1|$1}}",
        "prevn-title": "{{PLURAL:$1|Rezültàt precedènt|$1 rezültàcc precedèncc}}",
        "nextn-title": "Next $1 {{PLURAL:$1|result|results}}",
-       "viewprevnext": "Vidé ($1 {{int:pipe-separator}} $2) ($3).",
+       "shown-title": "Fà ved {{PLURAL:$1|on resultaa|$1 resultaa}} per pàgina",
+       "viewprevnext": "Ved ($1 {{int:pipe-separator}} $2) ($3).",
        "searchmenu-new": "'''Trà in pee la pagina \"[[:$1]]\" ins quel sit chì!'''",
        "searchprofile-articles": "Paginn de cuntegnüü",
        "searchprofile-images": "Multimedia",
        "search-result-score": "Atinènsa: $1%",
        "search-redirect": "(redirezión $1)",
        "search-section": "(sessión $1)",
+       "search-file-match": "(corespondènsa endèl test de l'archivi)",
        "search-suggest": "Vurivet dì: $1",
        "search-interwiki-caption": "Pruget fredej",
        "search-interwiki-default": "Rezültàcc de $1:",
        "preferences": "Preferenz",
        "mypreferences": "Preferenz",
        "prefs-edits": "Quantità de mudifegh faa:",
+       "prefsnologintext2": "Te g'harèset de $1 per defenéser le preferènse de l'ütènt.",
        "prefs-skin": "Aspett de l'interfacia",
        "skin-preview": "Anteprìma",
        "datedefault": "Nesöna preferènsa",
        "prefs-watchlist-days": "Nümer de dì da mustrà ind i paginn da tegn d'ögg:",
        "prefs-watchlist-days-max": "Màsimo $1 {{PLURAL:$1|dé|dé}}",
        "prefs-watchlist-edits": "Nümer de mudifegh da mustrà cunt i fünzión avanzaa:",
+       "prefs-watchlist-edits-max": "Nömer màsim: 1000",
        "prefs-misc": "Ólter",
        "prefs-resetpass": "Càmbia la password",
        "prefs-changeemail": "Càmbia l'indirìs e-mail",
        "columns": "Culònn:",
        "searchresultshead": "Cerca",
        "stub-threshold-disabled": "Dezativàt",
+       "recentchangesdays": "Dé de fà éder endèi öltem cambiamèncc:",
+       "recentchangesdays-max": "Màsimo $1 {{PLURAL:$1|dé|dé}}",
        "recentchangescount": "Nümer de mudifegh da mustrà per ''default'':",
        "savedprefs": "I preferenz hinn stai salvaa.",
        "timezonelegend": "Füs oràre:",
        "prefs-help-variant": "La variant o grafia co la qual te preferéset véder le pàgine de la wiki.",
        "yournick": "Suranomm:",
        "prefs-help-signature": "I cument ind i paginn de discüssion i gh'han de vess firmaa cun \"<nowiki>~~~~</nowiki>\" che 'l sarà pö cunvertì int la tua firma cun tacada la data e l'ura.",
-       "yourgender": "Géner:",
+       "yourgender": "Gh'è de rivulgìs a té come màs·cc o fèmina?",
        "gender-unknown": "Preferissi specifegaa nò",
-       "gender-male": "Mas'c",
-       "gender-female": "Femena",
-       "prefs-help-gender": "Upziunal: druvaa per adatà i messagg del software a segónda del gener del druvadur. Questa infurmazion chì la sarà püblica.",
+       "gender-male": "L'è registrat sö {{SITENAME}}",
+       "gender-female": "L'è registràda sö {{SITENAME}}",
+       "prefs-help-gender": "La definisiù de chèsta preferènsa l'è m,ìa ubligatória.\nEl software el dòpra chèsto valur per rivulgìs a té o lüminàt ai óter col tò zèner gramaticàl giöst (al maschìl o al feminìl).\nChèsta 'nformasiù però la sarà püblica.",
        "email": "Indirizz de pòsta elettrònica.",
-       "prefs-help-email": "L'e-mail a l'è mia obligatòri, però al permet da mandàv una ciav noeva in cas che ve la desmenteghé. A podé apó scernì da lassà entrà i alter dovrat in contat con violter senza da busogn da svelà la vosta identità.",
+       "prefs-help-email": "L'indirìs e-mail l'è mìa ubligatóre, ma 'l serf per mandàt la tò password semài che te g'hèset de desmentegàtela.",
        "prefs-help-email-required": "L'indirìs e-mail l'è ubligatóre",
        "prefs-info": "Infurmazion de bas",
        "prefs-i18n": "Internaziunalizazión",
        "userrights-lookup-user": "Gestion di grüp di druvaduu",
        "userrights-user-editname": "Butée dent un nom da dovrat",
        "editusergroup": "Mudifega i grüp del druvadur",
-       "editinguser": "Mudifega di dirit del druvadur '''[[User:$1|$1]]''' ([[User talk:$1|{{int:talkpagelinktext}}]]{{int:pipe-separator}}[[Special:Contributions/$1|{{int:contribslink}}]])",
+       "editinguser": "Mudìfica i dirìcc de ütènt de l'ütènsa '''[[User:$1|$1]]''' $2",
        "userrights-editusergroup": "Mudifega i grüp del druvadur",
        "saveusergroups": "Salva i grüp di druvadur",
        "userrights-groupsmember": "El fà part di grüp:",
        "userrights-no-interwiki": "Te gh'hee mía i permiss necessari per pudè mudifegà i dirit di druvadur di olter wiki.",
        "userrights-nodatabase": "La base dat $1 a gh'é mia, o pura a l'é mia locala.",
        "userrights-nologin": "Al gh'a da [[Special:UserLogin|rintrà ent el sistema]] con un cunt d'administrator par podé dà di drecc ai dovracc.",
-       "userrights-notallowed": "A l'ha mia li permission par podé dà di drecc ai dovracc.",
+       "userrights-notallowed": "Te g'hét mìa l'autorizasiù per mudificà i permès de ütènt.",
        "userrights-changeable-col": "Grüp che te pö mudifegà",
        "userrights-unchangeable-col": "Grüp che te pö mia mudifegà",
        "group-user": "Druvadur",
        "grouppage-bot": "{{ns:project}}:Bots",
        "grouppage-sysop": "{{ns:project}}:Aministradur",
        "right-edit": "Edita pàgini",
-       "right-createaccount": "Crea cünt de dovratt bej-e növ",
+       "right-createtalk": "Creà pàgine de discusiù",
+       "right-createaccount": "Creà ütènse nöe",
+       "right-minoredit": "Segnà le mudìfiche come picinìne",
+       "right-move": "Spostà le pàgine",
+       "right-move-subpages": "Spostà le pàgine e le sotapàgine",
+       "right-move-rootuserpages": "Spostà le pàgine principài dei ütèncc",
+       "right-move-categorypages": "Spostà le categurìe",
+       "right-movefile": "Spostà i archivi",
+       "right-suppressredirect": "Mìa creà 'n ''redirect'' automàtich quan che se spòsta 'na pàgina",
+       "right-upload": "Cargà sö 'n archivi",
+       "right-reupload": "Surascrìer i archìvi che ezìste zamò",
+       "right-reupload-own": "Surascrìer en ardchivi che ezìste zamò cargàt sö del stès ütènt",
        "right-delete": "Scancelà pàgine",
+       "right-browsearchive": "Sercà pàgine scancelàde",
+       "right-undelete": "Ripristinà pàgine scancelàde",
+       "right-suppressrevision": "Eder e ripristinà versiù scundìde ai aministradùr",
+       "right-suppressionlog": "Eder regìster privàcc",
+       "right-block": "Blocà le mudìfiche de ótre ütènse",
+       "right-blockemail": "Fà in manera che quel ütent chì 'l poda mia spedì di messagg e-mail",
+       "right-hideuser": "Blocà en nòm de ütènt e scundìl al püblich",
+       "right-unblockself": "Desblocà sè stès",
        "right-siteadmin": "Blocà e desblocà el database",
        "newuserlogpage": "Register di ütent növ",
        "rightslog": "Dirit di druvat",
        "action-history": "ardà la crunulugìa de chèsta pàgina",
        "action-minoredit": "segnà chèsta mudìfica come picinìna",
        "action-move": "spostà chèsta pàgina",
+       "action-move-rootuserpages": "spostà le pàgine principài dei ütèncc",
        "action-move-categorypages": "spostà le categurìe",
-       "action-movefile": "Spòsta chèsto archivi",
-       "action-upload": "Càrga sö chèsto archivi",
+       "action-movefile": "spòsta chèsto archivi",
+       "action-upload": "càrga sö chèsto archivi",
        "action-reupload": "surascrìf chèsto archivi (che l'ezìste zà)",
        "action-upload_by_url": "cargà chèsto archivi de 'n indirìs URL",
        "action-writeapi": "doprà le API en scritüra",
        "action-undelete": "ripristinà chèsta pàgina",
        "action-suppressrevision": "riéder e ripristinà le mudìfiche scundìde",
        "action-suppressionlog": "éder chèsto regìster privàt",
+       "action-block": "blocà le mudìfiche de chèsto ütènt",
        "action-protect": "cambià i leèi de protesiù de chèsta pàgina",
        "action-import": "emportà pàgine de le ótre wiki",
        "action-importupload": "emportà pàgine col upload de archivi",
        "rcshowhidebots": "$1 i bot",
        "rcshowhidebots-show": "Fà ved",
        "rcshowhidebots-hide": "Scond",
-       "rcshowhideliu": "$1 i dupradur cunetüü",
+       "rcshowhideliu": "$1 ütèncc registràcc",
        "rcshowhideliu-show": "Fà ved",
        "rcshowhideliu-hide": "Scond",
        "rcshowhideanons": "$1 i dupradur anònim",
        "rcshowhideanons-show": "Fà ved",
        "rcshowhideanons-hide": "Scond",
+       "rcshowhidepatr": "$1 mudìfiche verificàde",
        "rcshowhidepatr-show": "Fà ved",
        "rcshowhidepatr-hide": "Scond",
        "rcshowhidemine": "$1 i mè mudifich",
        "diff": "dif",
        "hist": "stòria",
        "hide": "Scund",
-       "show": "Famm vedè",
+       "show": "Fà ved",
        "minoreditletter": "m",
        "newpageletter": "N",
        "boteditletter": "b",
+       "number_of_watching_users_pageview": "[tignìda d'öcc de {{PLURAL:$1|1 ütènt|$1 ütèncc}}]",
        "rc_categories_any": "Töcc",
        "rc-change-size-new": "$1 {{PLURAL:$1|byte|bytes}} dopo la mudìfica",
        "newsectionsummary": "/* $1 */ sezión növa",
-       "rc-enhanced-expand": "Fà ved i detali",
+       "rc-enhanced-expand": "Fà ved i detai",
        "rc-enhanced-hide": "Scund i detali",
        "rc-old-title": "creàda en urìgin come \"$1\"",
        "recentchangeslinked": "Cambiament culegaa",
        "filename": "Nom de l'archivi",
        "filedesc": "Sumari",
        "fileuploadsummary": "Sumari:",
+       "filesource": "Fónt:",
        "ignorewarnings": "Ignora tücc i avertimeent",
        "largefileserver": "Chel archivi-chí al è püssee graant che ul serviduur al sía cunfigüraa da permett.",
        "savefile": "Salva l'archivi",
        "filehist-thumb": "Miniadüra",
        "filehist-thumbtext": "Miniadüra de la versión di $1",
        "filehist-nothumb": "Nesöna miniadüra",
-       "filehist-user": "Dovrat",
-       "filehist-dimensions": "Dimensión",
+       "filehist-user": "Ütent",
+       "filehist-dimensions": "Dimensiù",
        "filehist-filesize": "Dimensiù de l'archivi",
        "filehist-comment": "Comènt",
        "imagelinks": "Üzo de l'archivi",
        "protectedpages": "Pàgine prutigìde",
        "protectedpages-indef": "Apéna protesiù infinìte",
        "protectedpages-noredirect": "Scond i redirezion (redirect)",
+       "protectedpages-page": "Articul",
+       "protectedpages-expiry": "Scadènsa:",
+       "protectedpages-performer": "Ütènt che l'ha prutigìda",
+       "protectedpages-params": "Tìpo de protesiù",
+       "protectedpages-reason": "Mutìf",
+       "protectedpages-unknown-timestamp": "Mìa cunusìt",
+       "protectedpages-unknown-performer": "Ütènt mìa cunusìt",
+       "protectedtitles": "Tìtoi prutigìcc",
        "listusers": "Lista di dupradur registraa",
        "listusers-editsonly": "Mustra dumà i dupradur cun di mudifegh",
        "listusers-creationsort": "Cavèzza per data de creazión",
+       "listusers-desc": "Mèt en ùrden a calà",
+       "usereditcount": "$1 {{PLURAL:$1|cambiamènt|cambiamèncc}}",
        "usercreated": "Creaa el $1 a $2",
        "newpages": "Paginn növ",
+       "newpages-username": "Nòm ütènt:",
        "ancientpages": "Paginn püssee vegg",
        "move": "Sposta",
        "movethispage": "Sposta quela pagina chì",
        "allpagesprefix": "Varda i pagin ch'i scumenza per:",
        "allpages-hide-redirects": "Scond i bot",
        "categories": "Categurij",
-       "deletedcontributions": "Cuntribüziun scancelaa",
+       "special-categories-sort-count": "mèt en ùrden per nömer",
+       "special-categories-sort-abc": "mèt en ùrden alfabétich",
+       "deletedcontributions": "Mudìfiche del ütènt scancelàde",
        "deletedcontributions-title": "Cuntribüziun scancelaa",
+       "sp-deletedcontributions-contribs": "mudìfiche",
        "linksearch": "Sérca ligam de föra",
        "listusersfrom": "Fàm vedè i dupradur a partì da:",
        "listusers-submit": "Fà ved",
+       "activeusers": "Lìsta dei ütèncc atìf",
        "activeusers-from": "Fàm vedè i dupradur a partì da:",
        "activeusers-hidebots": "Scond i bot",
-       "listgrouprights": "Dirit del grüp di druvat",
+       "activeusers-hidesysops": "Scond i aministradur",
+       "activeusers-noresult": "Nisü ütènt troàt",
+       "listgrouprights": "Diricc del grüp dei ütèncc",
+       "listgrouprights-group": "Grüp",
        "listgrouprights-rights": "Dirìcc",
        "listgrouprights-helppage": "Help:Diricc del grupo",
        "listgrouprights-members": "(Lista di member)",
        "modifiedarticleprotection": "A l'è müdaa el nivel de prutezión per \"[[$1]]\"",
        "unprotectedarticle": "l'ha sblucaa \"[[$1]]\"",
        "protect-title": "Prutezziún da \"$1\"",
+       "protect-title-notallowed": "Arda el leèl de protesiù de \"$1\"",
        "prot_1movedto2": "[[$1]] spustaa in [[$2]]",
-       "protect-legend": "Cunferma de blocch",
+       "protect-norestrictiontypes-title": "Pàgina che se pöl mìa protèger",
+       "protect-legend": "Cunferma la protesiù",
        "protectcomment": "Mutìf:",
        "protectexpiry": "Scadènsa:",
        "protect_expiry_invalid": "Scadenza pü bona",
        "protect-level-sysop": "dumà per i aministradur",
        "protect-summary-cascade": "recursiva",
        "protect-expiring": "scadenza: $1 (UTC)",
+       "protect-expiring-local": "scadés ai $1",
+       "protect-expiry-indefinite": "per semper",
        "protect-cascade": "Prutegg i paginn ch'i fan part de questa (prutezión recursiva)",
        "protect-cantedit": "Te pödet minga mudifegà i nivel de prutezión a quela pagina chì, per via che t'hee minga el permiss de mudifegala.",
        "protect-dropdown": "*Mutiv cumün per la prutezion\n** Tròp vandalism\n** Tròp spam\n** Edit war\n** Pagina cun parecc tràfich",
        "maximum-size": "Misüra màssima:",
        "pagesize": "(byte)",
        "restriction-edit": "Mudifega",
+       "restriction-move": "Sposta",
+       "restriction-create": "Crea",
+       "restriction-upload": "Carga sö",
+       "restriction-level-all": "töcc i leèi",
        "undelete": "Varda i pagin scancelaa",
+       "undeletepage": "Arda e riprìstina le pàgine scancelàde",
+       "viewdeletedpage": "Varda i pagin scancelaa",
+       "undelete-fieldset-title": "Riprìstina versiù",
        "undelete-nodiff": "Per questa pagina gh'è nanca una revisiun precedenta.",
        "undeletebtn": "Rimett a post",
        "undeletelink": "Varda/büta indree",
+       "undeleteviewlink": "arda",
+       "undeleteinvert": "Invertì la seleziòn",
+       "undeletecomment": "Mutìf:",
        "undeletedrevisions": "{{PLURAL:$1|1 revision|$1 versiun}} rimetüü a post",
+       "undelete-search-title": "Sérca pàgine scancelàde",
+       "undelete-search-box": "Sérca pàgine scancelàde",
        "undelete-search-prefix": "Fà ved i paginn che scumenzen per:",
+       "undelete-search-submit": "Sérca",
+       "undelete-show-file-submit": "Sé",
        "namespace": "Namespace:",
        "invert": "Invertì la seleziòn",
        "blanknamespace": "(Principal)",
        "linkshere": "I paginn chì de sota gh'hann di ligam che porten a '''[[:$1]]''':",
        "isredirect": "redirezión",
        "istemplate": "inclüsión",
-       "isimage": "ligam a una figüra",
+       "isimage": "ligam a un archivi",
        "whatlinkshere-prev": "{{PLURAL:$1|quel prima|$1 prima}}",
        "whatlinkshere-next": "{{PLURAL:$1|dopu|$1 dopu}}",
        "whatlinkshere-links": "← ligam",
        "unblockip": "Desblòca quel druvàt chì",
        "ipusubmit": "Tö via 'stu bloch chì",
        "unblocked": "[[User:$1|$1]] l'è staa desblucaa",
-       "ipblocklist": "Adrèss IP e druvàt blucaa",
+       "ipblocklist": "Ütèncc blocàcc",
+       "ipblocklist-legend": "Sérca 'n ütènt blocàt",
+       "blocklist-userblocks": "Scond i bloch dei ütencc registràcc",
+       "blocklist-tempblocks": "Scond i bloch temporanei",
+       "blocklist-addressblocks": "Scond i bloch de 'n IP",
+       "blocklist-rangeblocks": "Scond i bloch de pachècc de IP",
+       "blocklist-timestamp": "Data e ùra",
+       "blocklist-target": "Destinasiù",
+       "blocklist-expiry": "Scadés",
+       "blocklist-by": "Aministradur che g'ha blocàt",
+       "blocklist-params": "Tìpo de bloch",
        "blocklist-reason": "Mutìf",
+       "ipblocklist-submit": "Sérca",
+       "ipblocklist-localblock": "Bloch locàl",
+       "ipblocklist-otherblocks": "{{PLURAL:$1|Óter blòch|Óter blòch}}",
        "infiniteblock": "per semper",
        "expiringblock": "el finiss el $1 a $2",
        "anononlyblock": "dumà i anònim",
        "emailblock": "e-mail blucaa",
        "blocklist-nousertalk": "el pö mía mudifegà la soa pagina de discüssión",
        "ipblocklist-empty": "El register di bloch l'è vöj.",
+       "ipblocklist-no-results": "L'indirìs IP o 'l nòm de ütènt sercàt l'è mìa blocàt.",
        "blocklink": "bloca",
        "unblocklink": "desbloca",
        "change-blocklink": "cambia bloch",
        "noimages": "Gh'è negót de éder.",
        "ilsubmit": "Truvá",
        "bydate": "per data",
+       "monday-at": "Lönesdé a le $1",
+       "tuesday-at": "Martedé a le $1",
+       "wednesday-at": "Mercoldé a le $1",
+       "thursday-at": "Giöedé a le $1",
+       "friday-at": "Venerdé a le $1",
+       "saturday-at": "Sàbot a le $1",
+       "sunday-at": "Dümìnica a le $1",
+       "yesterday-at": "Gér a le $1",
        "bad_image_list": "El furmaa a l'è quest chì:\n\nSe tegnen bón dumà i list póntaa (i righ che scumincen per *).\nEl prim ligam de ogni riga la gh'ha de vess un ligam a un file minga desideraa.\nI ligam che i vegnen dopu, in sü l'istessa riga, i vegnen cónsideraa di ecezión (che'l vör dì paginn induè che 'l file se'l pö riciamà in manera nurmala).",
        "metadata": "Metadat",
        "metadata-help": "Quel file chì al gh'ha dent di infurmazión adiziunaj, che l'è prubabil che j'ha giuntaa la fotocamera o 'l scanner dupraa per fàl o digitalizàl. Se el file a l'è staa mudifegaa, un quajvün di detali i pudarien curespund pü ai mudifegh faa.",
        "metadata-expand": "Fà vidè i detali",
        "metadata-collapse": "Scund i detali",
        "metadata-fields": "I camp di metadat EXIF listaa in quel messagg chì i saran mustraa in de la pagina de la figüra quand che la tabela di metadat la sarà presentada furma cürta. Per impustazión i alter camp i saran scundüü.\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",
+       "exif-imagewidth": "Larghèsa",
+       "exif-imagelength": "Altèsa",
+       "exif-bitspersample": "Bit per componènt",
+       "exif-compression": "Sistéma de compresiù",
+       "exif-photometricinterpretation": "Strütüra dei pixel",
+       "exif-orientation": "Orientamènt",
+       "exif-samplesperpixel": "Nömer de le componencc",
+       "exif-planarconfiguration": "Dispuzisiù dei dati",
+       "exif-ycbcrsubsampling": "Rapórt de campinamènt Y / C",
+       "exif-ycbcrpositioning": "Puzisiù componèncc Y e C",
+       "exif-xresolution": "Resulusiù orizontàla",
+       "exif-yresolution": "Resulusiù verticàla",
+       "exif-stripoffsets": "Puzisiù dei dati de la foto",
+       "exif-rowsperstrip": "Nömer de rìghe per fàsa",
+       "exif-imagedescription": "Tìtol de la foto",
        "watchlistall2": "tücc",
        "namespacesall": "tücc",
        "monthsall": "tücc",
        "tags-active-yes": "Sé",
        "tags-active-no": "Nò",
        "tags-edit": "mudìfica",
-       "rightsnone": "(nisü)"
+       "rightsnone": "(nisü)",
+       "expand_templates_ok": "OK"
 }
index 85d11d5..faac6fd 100644 (file)
@@ -56,7 +56,8 @@
                        "Wolf Lambert",
                        "לערי ריינהארט",
                        "아라",
-                       "Mar(c)"
+                       "Mar(c)",
+                       "Calak"
                ]
        },
        "tog-underline": "Koppelingen onderstrepen:",
        "vector-view-view": "Lezen",
        "vector-view-viewsource": "Brontekst bekijken",
        "actions": "Acties",
+       "vector-more-actions": "Meer",
        "namespaces": "Naamruimten",
        "variants": "Varianten",
        "navigation-heading": "Navigatiemenu",
index c5a3b1e..35fa869 100644 (file)
        "uncategorizedimages": "Slike bez kategorije",
        "uncategorizedtemplates": "Šabloni bez kategorije",
        "unusedcategories": "Neiskorištene kategorije",
-       "unusedimages": "Neupotrebljene datoteke",
+       "unusedimages": "Neiskorišćene slike / Неискоришћене слике",
        "popularpages": "Popularne stranice",
        "wantedcategories": "Tražene kategorije",
        "wantedpages": "Tražene stranice / Тражене странице",
        "watchlistedit-raw-done": "Vaš spisak praćenja je ažuriran.",
        "watchlistedit-raw-added": "{{PLURAL:$1|1 naslov je dodan|$1 naslova su dodana|$1 naslova je dodano}}:",
        "watchlistedit-raw-removed": "{{PLURAL:$1|1 naslov je uklonjen|$1 naslova je uklonjeno}}:",
+       "watchlistedit-clear-legend": "Obriši spisak praćenja",
+       "watchlistedit-clear-done": "Vaš spisak praćenja je obrisan. Svi naslovi su uklonjeni.",
        "watchlisttools-view": "Vidi relevantne promjene",
        "watchlisttools-edit": "Vidi i uredi listu praćenja",
        "watchlisttools-raw": "Uredi grubu listu praćenja",
        "signature": "[[{{ns:user}}:$1|$2]] ([[{{ns:user_talk}}:$1|razgovor]])",
        "unknown_extension_tag": "Nepoznata oznaka ekstenzije \"$1\"",
        "duplicate-defaultsort": "'''Upozorenje''': Postavljeni ključ sortiranja \"$2\" zamjenjuje raniji ključ \"$1\".",
-       "version": "Verzija",
+       "version": "Verzija / Верзија",
        "version-extensions": "Instalirana proširenja (ekstenzije)",
        "version-specialpages": "Posebne stranice",
        "version-parserhooks": "Kuke parsera",
        "specialpages-group-media": "Multimedijalne datoteke \\ fajlovi i njihovo postavljanje / Мултимедијалне датотеке \\ фајлови и њихово постављање",
        "specialpages-group-users": "Korisnici i njihova prava / Корисници и њихова права",
        "specialpages-group-highuse": "Najčešće korištene stranice / Најчешће кориштене странице",
-       "specialpages-group-pages": "Spiskovi stranica",
+       "specialpages-group-pages": "Liste stranica / Листе страна",
        "specialpages-group-pagetools": "Alati za stranice",
-       "specialpages-group-wiki": "Podaci i alati",
+       "specialpages-group-wiki": "Wiki podaci i alati - Вики подаци и алати",
        "specialpages-group-redirects": "Posebne stranice za preusmjeravanje / Посебне стране за преусмеравање",
        "specialpages-group-spam": "Spam alati",
        "blankpage": "Prazna stranica",
index e2e4d0c..d6f1b07 100644 (file)
        "mostlinked": "Странице с највише веза",
        "mostlinkedcategories": "Чланци с највише категорија",
        "mostlinkedtemplates": "Шаблони с највише веза",
-       "mostcategories": "ЧланÑ\86и с највише категорија",
+       "mostcategories": "СÑ\82Ñ\80аниÑ\86е с највише категорија",
        "mostimages": "Датотеке с највише веза",
        "mostinterwikis": "Странице са највише међувикија",
        "mostrevisions": "Странице с највише измена",
index c27465a..6682e50 100644 (file)
        "mostlinked": "Stranice s najviše veza",
        "mostlinkedcategories": "Članci s najviše kategorija",
        "mostlinkedtemplates": "Šabloni s najviše veza",
-       "mostcategories": "Članci s najviše kategorija",
+       "mostcategories": "Stranice s najviše kategorija",
        "mostimages": "Datoteke s najviše veza",
        "mostinterwikis": "Stranice sa najviše međuvikija",
        "mostrevisions": "Stranice s najviše izmena",
index e635a45..0eee6ab 100644 (file)
        "version-hooks": "Hakar",
        "version-parser-extensiontags": "Tilläggstaggar",
        "version-parser-function-hooks": "Parserfunktioner",
-       "version-hook-name": "Namn",
+       "version-hook-name": "Namn på hook",
        "version-hook-subscribedby": "Används av",
        "version-version": "(Version $1)",
        "version-license": "MediaWiki-licens",
index 710c1e0..88574a1 100644 (file)
@@ -46,7 +46,8 @@
                        "Дар'я Козлова",
                        "Максим Підліснюк",
                        "Тест",
-                       "아라"
+                       "아라",
+                       "Calak"
                ]
        },
        "tog-underline": "Підкреслювати посилання:\nПідкреслювання посилань:",
        "vector-view-view": "Читати",
        "vector-view-viewsource": "Переглянути код",
        "actions": "Дії",
+       "vector-more-actions": "Більше",
        "namespaces": "Простори назв",
        "variants": "Варіанти",
        "navigation-heading": "Навігаційне меню",
index 1128468..22d26c3 100644 (file)
@@ -18,7 +18,8 @@
                        "سمرقندی",
                        "محبوب عالم",
                        "පසිඳු කාවින්ද",
-                       "아라"
+                       "아라",
+                       "Calak"
                ]
        },
        "tog-underline": "ربط کی خط کشیدگی:",
        "vector-view-view": "مطالعہ",
        "vector-view-viewsource": "مسودہ",
        "actions": "ایکشنز",
+       "vector-more-actions": "زیادہ",
        "namespaces": "جائے نام",
        "variants": "متغیرات",
        "errorpagetitle": "خطاء",
        "edit-gone-missing": "صفحہ تجدید نہیں کیا جاسکتا.\nلگتا ہے یہ حذف ہوچکا ہے.",
        "edit-conflict": "تنازعۂ تدوین.",
        "edit-no-change": "آپ کی تدوین کو نظرانداز کردیا گیا، کیونکہ متن میں کوئی تبدیلی نہیں ہوئی تھی.",
-       "postedit-confirmation": "آپ کی ترمیم محفوظ ہوگئی۔",
+       "postedit-confirmation-saved": "آپ کی ترمیم محفوظ ہوگئی۔",
        "edit-already-exists": "نیا صفحہ تخلیق نہیں کیا جاسکتا.\nیہ پہلے سے موجود ہے.",
        "content-model-text": "سادہ متن",
        "content-model-javascript": "جاوا اسکرپٹ",
        "searchmenu-exists": "'''اِس ویکی پر \"[[:$1]]\" نامی ایک صفحہ موجود ہے'''",
        "searchmenu-new": "'''اِس ویکی پر صفحہ \"[[:$1]]\" تخلیق کیجئے!'''",
        "searchprofile-articles": "مشمولاتی صفحات",
-       "searchprofile-project": "صفحاتِ مدد و منصوبہ",
        "searchprofile-images": "کثیرالوسیط",
        "searchprofile-everything": "سب کچھ",
        "searchprofile-advanced": "پیشرفتہ",
        "searchprofile-articles-tooltip": "$1 میں تلاش",
-       "searchprofile-project-tooltip": "$1 میں تلاش",
        "searchprofile-images-tooltip": "تلاش برائے ملفات",
        "searchprofile-everything-tooltip": " تلاش تمام مشمولات (بشمول تبادلۂ خیال صفحات) میں",
        "searchprofile-advanced-tooltip": "اپنی پسند کے جائے نام میں تلاش",
        "prefs-emailconfirm-label": "برقی پتہ کی تصدیق:",
        "youremail": "٭ برقی خط",
        "username": "اسم صارف",
-       "uid": "صارف نمبر:",
        "prefs-memberingroups": "{{PLURAL:$1|گروہ|گروہوں}} کا رُکن:",
        "prefs-registration": "وقتِ اندراج:",
        "yourrealname": "* اصلی نام",
        "speciallogtitlelabel": "عنوان:",
        "log": "نوشتہ جات",
        "allpages": "تمام صفحات",
-       "alphaindexline": "$1 تا $2",
        "nextpage": "اگلا صفحہ ($1)",
        "prevpage": "پچھلا صفحہ ($1)",
        "allpagesfrom": "مطلوبہ حرف شروع ہونے والے صفحات کی نمائش:",
        "file-nohires": "اس سے بڑی تصمیم دستیاب نہیں۔",
        "show-big-image": "مکمل تصمیم",
        "newimages": "نئی فائلوں کی گیلری",
-       "showhidebots": "($1 بوٹ)",
        "ilsubmit": "تلاش",
        "bydate": "بالحاظ تاریخ",
        "weeks": "{{PLURAL:$1|$1ہفتہ| $1  ہفتے}}",
index 0b2c78e..c276426 100644 (file)
        "vector-view-view": "Đọc",
        "vector-view-viewsource": "Xem mã nguồn",
        "actions": "Tác vụ",
-       "vector-more-actions": "Thêm nữa",
+       "vector-more-actions": "Khác",
        "namespaces": "Không gian tên",
        "variants": "Biến thể",
        "navigation-heading": "Trình đơn chuyển hướng",
index b8df457..d9a83f7 100644 (file)
        "vector-view-view": "Basaha",
        "vector-view-viewsource": "Kitaa an ginkuhaan",
        "actions": "Mga buhat",
+       "vector-more-actions": "Damo pa",
        "namespaces": "Mga ngaran-lat'ang",
        "variants": "Mga pagkadirudilain",
        "navigation-heading": "Menu hit nabigasyon",
        "permalink": "Sumpay nga unob",
        "print": "Igpatik",
        "view": "Kitaa",
+       "view-foreign": "Pagkita ha $1",
        "edit": "Igliwat",
+       "edit-local": "Igliwat an lokal nga pagpahayag",
        "create": "Himo-a",
+       "create-local": "Igdugang an lokal nga pagpahayag",
        "editthispage": "Igliwat ini nga pakli",
        "create-this-page": "Himo-a ini nga pakli",
        "delete": "Para-a",
        "jumptonavigation": "paglayag",
        "jumptosearch": "bilnga",
        "view-pool-error": "Pasayloa, an mga server diri na kaya yana nga takna.\nDamo nga nagamit in gusto sinmulod hini nga pakli.\nAlayon paghulat makadali san-o ka inmutro pagsulod hin nga pakli utro.\n\n$1",
+       "generic-pool-error": "Pasayloa, an mga server nasobrahan ha yanâ nga takna.\nDamo nga mga nágámit in karúyag sumulod hini nga kiritaon.\nAlayon paghulat magakadli san-o ka bumalik pagsulod hini nga kiritaon.",
        "pool-timeout": "An pagpaundang-hin-oras in naghuhulat hin trangka",
        "pool-queuefull": "Puno an katitirok nga pila",
        "pool-errorunknown": "Waray kasabti nga kasaypanan",
+       "pool-servererror": "An pool nga pag-ihap nga serbisyo diri yanâ magagamit ($)",
        "aboutsite": "Mahitungod han {{SITENAME}}",
        "aboutpage": "Project:Mahitungod han",
        "copyright": "An sulod mabiblingan ha ilarom han $1 antes may-ada pasabot.",
        "gotaccountlink": "Sakob",
        "userlogin-resetlink": "Nangalimot han imo detalye han pagsakob?",
        "userlogin-resetpassword-link": "¿Nangalimot ka han imo tigaman-pansulod?",
+       "userlogin-helplink2": "Búlig hin pagsakob",
        "userlogin-loggedin": "Nakalog-in kana komo hi {{GENDER:$1|$1}}.\nGamiti an porma ha ubos para makalog-in komo iba nga gumaramit.",
        "userlogin-createanother": "Paghimo hin iba nga akawnt",
        "createacct-emailrequired": "Email address",
        "loginlanguagelabel": "Pinulongan: $1",
        "suspicious-userlogout": "Waray ka tugoti pag-logout tungod nga baga ini ginpadangat hin usa nga broken browser o caching proxy.",
        "createacct-another-realname-tip": "Ada la ha imo kun karuyag mo igbutang an imo tinuod nga ngaran.\nKun pinili mo ito ighatag, gagamiton ini paghatag hin atribusyon ha gumaramit para hit ira buhat.",
+       "pt-login": "Sakob",
+       "pt-login-button": "Sakob",
+       "pt-createaccount": "Himo-a an akawnt",
+       "pt-userlogout": "Gawas",
        "php-mail-error-unknown": "Waray kasabti ha kanan PHP mail() function.",
        "user-mail-no-addy": "Nagsend hin email bisan waray email address.",
        "user-mail-no-body": "Nagsend hin email bisan waray o diri resonably kahalipot kaduro nga sulod.",
        "changepassword": "Igliwan an tigaman-pagsulod",
-       "resetpass_announce": "Nakalog-in ka hit temporaryo nga ginemail nga kodigo.\nPara mahuman paglalog-on, kinahanglan mo magbutang hin bag-o nga tigaman-panakob dinhi:",
+       "resetpass_announce": "Basi mahumán an pagsakob, ángay ka magpílì hin bag-o nga tigaman-panakob.",
        "resetpass_header": "Igliwan an akawnt nga tigaman-pagsulod",
        "oldpassword": "Daan nga tigaman-pagsulod:",
        "newpassword": "Bag-o nga tigaman-pagsulod:",
        "resetpass-submit-loggedin": "Igbal-iw an tigaman-pagsulod",
        "resetpass-submit-cancel": "Pasagdi",
        "resetpass-wrong-oldpass": "Diri balido an temporaryo o yana nga tigaman-panakob.\nImo malinamposon nga ginsalyuan an imo tigaman-panakob o umaro ka na hin bag-o nga temporaryo nga tigman-panakob.",
+       "resetpass-recycled": "Alayon pagreset han imo tigaman-pansakob hin lain tikang han imo yanâ nga tigaman-pansakob",
+       "resetpass-temp-emailed": "Nagsakob ka pinaagi hin temporary nga gin-email nga kodigo.\nBasi matapos an imo pagsakob, kinahanglan ka maghimo hin bag-o nga tigaman-pansakob dinhi:",
        "resetpass-temp-password": "Temporaryo nga tigaman-pagsakob:",
        "resetpass-abort-generic": "Ginpugong an pagbal-iw hin tigaman-panakob hin uska ekstensyon.",
+       "resetpass-expired": "Naubosan na hin panahon an im tigaman-pansakob.  Alayon paghimo hin bag-o nga tigaman-pansakob basi ka makasakob.",
        "passwordreset": "igreset an tigaman-hit-pagsulod",
        "passwordreset-text-one": "Kompletoha ini nga porma paramakareset hin imo tigaman-panakob.",
        "passwordreset-text-many": "{{PLURAL:$1|Butanga it usa nga mga surodlan basi makakarawat ko hin temporaryo nga tigaman-pansulod pinaagi ha email.}}",
        "log-fulllog": "Kitaa an bug-os nga taramdan",
        "edit-conflict": "Diri pagkakauroyon han pagliwat.",
        "edit-no-change": "Ginpabay-an an im pagliwat, mahitungod nga waray pagbalyo nga nabuhat ha nakasurat.",
-       "postedit-confirmation": "Natipig an imo ginliwat.",
+       "postedit-confirmation-saved": "Natipig an imo ginliwat.",
        "edit-already-exists": "Diri nakakahimo hin bag-o nga pakli.\nAada na ito.",
        "defaultmessagetext": "Aada-nga-daan nga teksto han mensahe",
        "invalid-content-data": "Sayop nga sulod nga datos",
        "currentrev": "Giurhii nga pagliwat",
        "currentrev-asof": "Giuurhii nga pagliwat han $1",
        "revisionasof": "Pagbabag-o han $1",
-       "revision-info": "Pagbag-o han $1 ni $",
+       "revision-info": "Pagbag-o tikang han $1 ni {{GENDER:$6|$2}}$7",
        "previousrevision": "← Durudaan nga pagliwat",
        "nextrevision": "Burubag-o nga pagliwat →",
        "currentrevisionlink": "Giurhii nga pagliwat",
        "searchmenu-exists": "'''May-ada pakli nga nakangaran hin \"[[:$1]]\" hini nga wiki.'''",
        "searchmenu-new": "<strong>Himoa an pakli nga \"[[:$1]]\" dinhi nga wiki!</strong> {{PLURAL:$2|0=|Kitaa gihapon an pakli nga nabilngan han imo pagbiling.|Kitaa gihapon an mga nabilngan nga ginmawas han pagbiling.}}",
        "searchprofile-articles": "Mga unod nga pakli",
-       "searchprofile-project": "Mga Bulig ngan Proyekto nga pakli",
        "searchprofile-images": "Multimedia",
        "searchprofile-everything": "Ngatanan",
        "searchprofile-advanced": "Abansado",
        "searchprofile-articles-tooltip": "Pamiling ha $1",
-       "searchprofile-project-tooltip": "Pamiling ha $1",
        "searchprofile-images-tooltip": "Pamiling hin mga fayl",
        "searchprofile-everything-tooltip": "Pamiling ha ngatanan nga sulod (lakip an mga hiruhimangraw nga pakli)",
        "searchprofile-advanced-tooltip": "Pamilnga ha mga nabatasan nga ngaran-lat'ang",
        "search-section": "(bahin $1)",
        "search-suggest": "Buot sidngon mo ba: $1",
        "search-interwiki-caption": "Mga bugto nga proyekto",
-       "search-interwiki-default": "$1 nga resulta:",
+       "search-interwiki-default": "Mga resulta tikang han $1:",
        "search-interwiki-more": "(damo pa)",
        "search-relatedarticle": "kasumapy",
-       "searcheverything-enable": "Pamilnga ha ngatanan nga ngaran-lat'ang",
        "searchrelated": "kadugtong",
        "searchall": "ngatanan",
        "showingresultsheader": "{{PLURAL:$5|Resulta '''$1''' han '''$3'''|Mga resulta '''$1 - $2''' han '''$3'''}} para ha '''$4'''",
        "allowemail": "Igpaandar an email nga tikang ha iba nga mga gumaramit",
        "prefs-searchoptions": "Pamilnga",
        "prefs-namespaces": "Ngaran-lat'ang",
-       "defaultns": "Kun diri, pamilnga hini nga mga ngaran-lat'ang:",
        "default": "aada-nga-daan",
        "prefs-files": "Mga paypay",
        "prefs-custom-css": "Custom CSS",
        "prefs-emailconfirm-label": "Kompirmasyon han email:",
        "youremail": "E-mail:",
        "username": "{{HENERO:$1|Agnay hit gumaramit}}:",
-       "uid": "ID hit {{HENERO:$1|Gumaramit}}:",
        "prefs-memberingroups": "{{GENDER:$2|Api}} han {{PLURAL:$1|grupo|mga grupo}}:",
        "prefs-registration": "Oras han pagrehistro:",
        "yourrealname": "Tinuod nga ngaran:",
        "recentchanges-label-minor": "Gutiay ini nga pagliwat",
        "recentchanges-label-bot": "Ini nga pagliwat in ginbuhat han bot",
        "recentchanges-label-unpatrolled": "Ini nga pagliwat in diri pa nakapatrol",
-       "rcnotefrom": "An ha ubos in mga pagbabag-o tikanng '''$''' (kutob ngadto ha '''$1''' nga ginpakita).",
+       "rcnotefrom": "An ha ubos in mga pagbabag-o tikang han <strong>$2</strong> (kutob ngadto ha <strong>$1</strong> nga ginpakita).",
        "rclistfrom": "Pakit-a an mga ginbag-ohan tikang han $3 $2",
        "rcshowhideminor": "$1 gudti nga mga pagliwat",
        "rcshowhidebots": "$1 mga bot",
        "log": "Mga talaan",
        "all-logs-page": "Ngatanan nga mga talaan panpubliko",
        "allpages": "Ngatanan nga mga pakli",
-       "alphaindexline": "$1 tubtob ha $2",
        "nextpage": "Sunod nga pakli ($1)",
        "prevpage": "Nahiuna nga pakli ($1)",
        "allpagesfrom": "Igpakita an mga pakli nga nagtitikang ha:",
        "unwatchthispage": "Undangi pagbantay",
        "notanarticle": "Diri uska unod nga pakli",
        "notvisiblerev": "An urhi nga pagliwat han iba nga gumaramit in ginpara",
-       "watchlist-details": "{{PLURAL:$1|$1 nga pakli|$1 nga mga pakli}} nga aada ha imo talaan nga binabantayan, diri lakip an mga hiruhimangraw-nga-pakli.",
+       "watchlist-details": "{{PLURAL:$1|$1 nga pakli|$1 nga mga pakli}} nga aada ha imo talaan nga binabantayan, diri bulag nga paglakip han mga hiruhimangraw-nga-pakli.",
        "wlshowlast": "Igpakita an katapusan nga $1 nga mga oras $2 nga mga adlaw $3",
        "watchlist-options": "Mga pirilian han talaan han binabantayan",
        "watching": "Ginbabantay...",
        "rollback_short": "Libot-pabalik",
        "rollbacklink": "libot-pabalik",
        "rollbackfailed": "Diri malinamposon an paglibot-pabalik",
-       "revertpage": "Ginpabalik an ginliwat ni [[Special:Contributions/|$2]] ([[User talk:$2|hiruhimangraw]]) ngadto ha urhi nga rebisyon ni [[User:$1|$1]] ngan",
+       "revertpage": "Ginpabalik an ginliwat ni [[Special:Contributions/$2|$2]] ([[User talk:$2|hiruhimangraw]]) ngadto ha urhi nga pagliwat ni [[User:$1|$1]]",
        "sessionfailure-title": "Pakyas an sesyon",
        "protectlogpage": "Talaan han pinasaliporan",
        "protectedarticle": "pinasaliporan \"[[$1]]\"",
        "block": "Pugngi an gumaramit",
        "blockip": "Pugngi an gumaramit",
        "blockip-legend": "Pugngi an gumaramit",
-       "ipadressorusername": "IP address o agnay-hit-gumaramit:",
+       "ipaddressorusername": "IP address o agnay-hit-gumaramit:",
        "ipbexpiry": "Matitima an dulot:",
        "ipbreason": "Katadungan:",
        "ipbreason-dropdown": "*Agsob nga mga rason hit pagpugong\n** Pagsusuksok hin sayop nga pananabutan\n** Pagtatangtang hin sulod tikang ha mga pakli\n** Bisan la ano nga pansusumpay ngadto ha gawas nga mga dapit\n** Pansusuksok hin inamasang/buro-buro ngadto ha mga pakli\n** Panhahadlok nga pamatasan/makakalilisang nga pansamok\n** Pan-abusar hin dirudilain nga mga akawnt\n** Diri makakarawat nga agnay-hit-gumaramit",
        "newimages": "Galeryia hin mga paypay nga bag-o",
        "newimages-legend": "Panara",
        "newimages-label": "Ngaran han paypay (o uska bahin hini):",
-       "showhidebots": "($1 ka mga bot)",
        "noimages": "Waray makikit-an.",
        "ilsubmit": "Bilnga",
        "bydate": "pinaagi han petsa",
index 4af148b..6ce8a9b 100644 (file)
        "enotif_subject_created": "{{SITENAME}}页面$1已被$2创建",
        "enotif_subject_moved": "{{SITENAME}}页面$1已被$2移动",
        "enotif_subject_restored": "{{SITENAME}}页面$1已经被$2{{GENDER:$2|还原}}",
-       "enotif_subject_changed": "{{SITENAME}}页面$1被$2更改",
+       "enotif_subject_changed": "{{SITENAME}}页面$1被$2更改",
        "enotif_body_intro_deleted": "{{SITENAME}}页面$1已于$PAGEEDITDATE被$2{{GENDER:$2|删除}},请见$3。",
        "enotif_body_intro_created": "{{SITENAME}}页面$1已于$PAGEEDITDATE被$2{{GENDER:$2|创建}},请浏览<$3>查看当前版本。",
        "enotif_body_intro_moved": "{{SITENAME}}页面$1已于$PAGEEDITDATE被$2{{GENDER:$2|移动}},请浏览<$3>查看当前版本。",
        "nolinkshere": "没有页面链接至'''[[:$1]]'''。",
        "nolinkshere-ns": "在所选的名字空间内没有页面链接到'''[[:$1]]'''。",
        "isredirect": "重定向页面",
-       "istemplate": "å\8c\85å\90«",
+       "istemplate": "åµ\8cå\85¥",
        "isimage": "文件链接",
        "whatlinkshere-prev": "{{PLURAL:$1|前|前$1个}}",
        "whatlinkshere-next": "{{PLURAL:$1|后|后$1个}}",
        "export-addnstext": "从名字空间添加页面:",
        "export-addns": "添加",
        "export-download": "另存为文件",
-       "export-templates": "包模板",
+       "export-templates": "包模板",
        "export-pagelinks": "包含链接页面的搜索深度:",
        "allmessages": "系统消息",
        "allmessagesname": "名称",
index 75e3547..14280a7 100644 (file)
@@ -8,5 +8,9 @@
        "ooui-outline-control-move-down": "Premjesti stavku dole",
        "ooui-outline-control-move-up": "Premjesti stavku gore",
        "ooui-outline-control-remove": "Ukloni stavku",
-       "ooui-toolbar-more": "Više"
+       "ooui-toolbar-more": "Više",
+       "ooui-dialog-confirm-title": "Potvrdi",
+       "ooui-dialog-confirm-default-prompt": "Da li ste sigurni?",
+       "ooui-dialog-confirm-default-ok": "U redu",
+       "ooui-dialog-confirm-default-cancel": "Otkaži"
 }
index 1adbb35..0f423b3 100644 (file)
@@ -12,5 +12,8 @@
        "ooui-outline-control-move-down": "Elem mozgatása lefelé",
        "ooui-outline-control-move-up": "Elem mozgatása felfelé",
        "ooui-outline-control-remove": "Elem eltávolítása",
-       "ooui-toolbar-more": "Tovább..."
+       "ooui-toolbar-more": "Tovább...",
+       "ooui-dialog-confirm-title": "Megerősítés",
+       "ooui-dialog-confirm-default-prompt": "Biztos vagy benne?",
+       "ooui-dialog-confirm-default-cancel": "Mégse"
 }
diff --git a/resources/lib/oojs-ui/images/indicators/arrow-down.png b/resources/lib/oojs-ui/images/indicators/arrow-down.png
new file mode 100644 (file)
index 0000000..47ff54c
Binary files /dev/null and b/resources/lib/oojs-ui/images/indicators/arrow-down.png differ
diff --git a/resources/lib/oojs-ui/images/indicators/arrow-down.svg b/resources/lib/oojs-ui/images/indicators/arrow-down.svg
new file mode 100644 (file)
index 0000000..c871f60
--- /dev/null
@@ -0,0 +1,8 @@
+<?xml version="1.0" encoding="iso-8859-1"?>
+<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
+<svg version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px" width="12px"
+        height="12px" viewBox="0 0 12 12" style="enable-background:new 0 0 12 12;" xml:space="preserve">
+<g id="down" style="opacity:0.75;">
+       <polygon id="arrow" style="fill-rule:evenodd;clip-rule:evenodd;" points="2.023,3 5.512,8.953 9,3"/>
+</g>
+</svg>
diff --git a/resources/lib/oojs-ui/images/indicators/arrow-ltr.png b/resources/lib/oojs-ui/images/indicators/arrow-ltr.png
new file mode 100644 (file)
index 0000000..7984007
Binary files /dev/null and b/resources/lib/oojs-ui/images/indicators/arrow-ltr.png differ
diff --git a/resources/lib/oojs-ui/images/indicators/arrow-ltr.svg b/resources/lib/oojs-ui/images/indicators/arrow-ltr.svg
new file mode 100644 (file)
index 0000000..cbc22a4
--- /dev/null
@@ -0,0 +1,8 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
+<svg version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px" width="12px"
+        height="12px" viewBox="0 0 12 12" style="enable-background:new 0 0 12 12;" xml:space="preserve">
+<g id="ltr" opacity="0.75">
+       <path d="M3.023,8.977 L3.023,2 L8.976,5.489 z" fill="#000000" id="arrow"/>
+</g>
+</svg>
diff --git a/resources/lib/oojs-ui/images/indicators/arrow-rtl.png b/resources/lib/oojs-ui/images/indicators/arrow-rtl.png
new file mode 100644 (file)
index 0000000..eebd509
Binary files /dev/null and b/resources/lib/oojs-ui/images/indicators/arrow-rtl.png differ
diff --git a/resources/lib/oojs-ui/images/indicators/arrow-rtl.svg b/resources/lib/oojs-ui/images/indicators/arrow-rtl.svg
new file mode 100644 (file)
index 0000000..71f73d5
--- /dev/null
@@ -0,0 +1,8 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
+<svg version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px" width="12px"
+        height="12px" viewBox="0 0 12 12" style="enable-background:new 0 0 12 12;" xml:space="preserve">
+<g id="rtl" opacity="0.75">
+       <path d="M3.023,5.489 L8.976,8.977 L8.976,2 z" fill="#000000" id="arrow"/>
+</g>
+</svg>
diff --git a/resources/lib/oojs-ui/images/indicators/arrow-up.png b/resources/lib/oojs-ui/images/indicators/arrow-up.png
new file mode 100644 (file)
index 0000000..b827f6d
Binary files /dev/null and b/resources/lib/oojs-ui/images/indicators/arrow-up.png differ
diff --git a/resources/lib/oojs-ui/images/indicators/arrow-up.svg b/resources/lib/oojs-ui/images/indicators/arrow-up.svg
new file mode 100644 (file)
index 0000000..a5d7f38
--- /dev/null
@@ -0,0 +1,8 @@
+<?xml version="1.0" encoding="iso-8859-1"?>
+<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
+<svg version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px" width="12px"
+        height="12px" viewBox="0 0 12 12" style="enable-background:new 0 0 12 12;" xml:space="preserve">
+<g id="up" style="opacity:0.75;">
+       <polygon id="arrow" style="fill-rule:evenodd;clip-rule:evenodd;" points="5.512,2.006 2,8 9.024,8                "/>
+</g>
+</svg>
diff --git a/resources/lib/oojs-ui/images/indicators/down.png b/resources/lib/oojs-ui/images/indicators/down.png
deleted file mode 100644 (file)
index 47ff54c..0000000
Binary files a/resources/lib/oojs-ui/images/indicators/down.png and /dev/null differ
diff --git a/resources/lib/oojs-ui/images/indicators/down.svg b/resources/lib/oojs-ui/images/indicators/down.svg
deleted file mode 100644 (file)
index c871f60..0000000
+++ /dev/null
@@ -1,8 +0,0 @@
-<?xml version="1.0" encoding="iso-8859-1"?>
-<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
-<svg version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px" width="12px"
-        height="12px" viewBox="0 0 12 12" style="enable-background:new 0 0 12 12;" xml:space="preserve">
-<g id="down" style="opacity:0.75;">
-       <polygon id="arrow" style="fill-rule:evenodd;clip-rule:evenodd;" points="2.023,3 5.512,8.953 9,3"/>
-</g>
-</svg>
diff --git a/resources/lib/oojs-ui/images/indicators/up.png b/resources/lib/oojs-ui/images/indicators/up.png
deleted file mode 100644 (file)
index b827f6d..0000000
Binary files a/resources/lib/oojs-ui/images/indicators/up.png and /dev/null differ
diff --git a/resources/lib/oojs-ui/images/indicators/up.svg b/resources/lib/oojs-ui/images/indicators/up.svg
deleted file mode 100644 (file)
index a5d7f38..0000000
+++ /dev/null
@@ -1,8 +0,0 @@
-<?xml version="1.0" encoding="iso-8859-1"?>
-<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
-<svg version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px" width="12px"
-        height="12px" viewBox="0 0 12 12" style="enable-background:new 0 0 12 12;" xml:space="preserve">
-<g id="up" style="opacity:0.75;">
-       <polygon id="arrow" style="fill-rule:evenodd;clip-rule:evenodd;" points="5.512,2.006 2,8 9.024,8                "/>
-</g>
-</svg>
index e915ee8..94ebbe3 100644 (file)
@@ -1,7 +1,21 @@
 .oo-ui-dialog {
   background-color: #fff;
   background-color: rgba(255, 255, 255, 0.5);
+  /* Opening and closing animation */
+
   opacity: 0;
+}
+
+.oo-ui-dialog > .oo-ui-window-frame {
+  -webkit-transform: scale(0.5);
+     -moz-transform: scale(0.5);
+      -ms-transform: scale(0.5);
+       -o-transform: scale(0.5);
+          transform: scale(0.5);
+}
+
+.oo-ui-dialog.oo-ui-window-setup,
+.oo-ui-dialog.oo-ui-window-setup > .oo-ui-window-frame {
   -webkit-transition: all 250ms ease-in-out;
      -moz-transition: all 250ms ease-in-out;
       -ms-transition: all 250ms ease-in-out;
@@ -9,6 +23,18 @@
           transition: all 250ms ease-in-out;
 }
 
+.oo-ui-dialog.oo-ui-window-ready {
+  opacity: 1;
+}
+
+.oo-ui-dialog.oo-ui-window-ready > .oo-ui-window-frame {
+  -webkit-transform: scale(1);
+     -moz-transform: scale(1);
+      -ms-transform: scale(1);
+       -o-transform: scale(1);
+          transform: scale(1);
+}
+
 .oo-ui-dialog-content .oo-ui-window-head,
 .oo-ui-dialog-content .oo-ui-window-body,
 .oo-ui-dialog-content .oo-ui-window-foot {
   background-color: #fff;
   border: solid 1px #ccc;
   border-radius: 0.5em;
-  -webkit-transform: scale(0.5);
-     -moz-transform: scale(0.5);
-      -ms-transform: scale(0.5);
-       -o-transform: scale(0.5);
-          transform: scale(0.5);
   box-shadow: 0 0.2em 1em rgba(0, 0, 0, 0.3);
-  -webkit-transition: all 250ms ease-in-out;
-     -moz-transition: all 250ms ease-in-out;
-      -ms-transition: all 250ms ease-in-out;
-       -o-transition: all 250ms ease-in-out;
-          transition: all 250ms ease-in-out;
 }
 
 .oo-ui-dialog-small > .oo-ui-window-frame {
   max-height: 690px;
 }
 
-.oo-ui-dialog-open {
-  opacity: 1;
-}
-
-.oo-ui-dialog-open > .oo-ui-window-frame {
-  -webkit-transform: scale(1);
-     -moz-transform: scale(1);
-      -ms-transform: scale(1);
-       -o-transform: scale(1);
-          transform: scale(1);
-}
-
 .oo-ui-dialog-content .oo-ui-window-head,
 .oo-ui-dialog-content .oo-ui-window-foot {
   z-index: 1;
index 6e45cef..0655397 100644 (file)
@@ -1,12 +1,12 @@
 /*!
- * OOjs UI v0.1.0-pre (99068355d6)
+ * OOjs UI v0.1.0-pre (c5ae888f67)
  * https://www.mediawiki.org/wiki/OOjs_UI
  *
  * Copyright 2011–2014 OOjs Team and other contributors.
  * Released under the MIT license
  * http://oojs.mit-license.org
  *
- * Date: Tue Jun 10 2014 11:03:38 GMT-0700 (PDT)
+ * Date: Wed Jun 11 2014 18:10:09 GMT-0700 (PDT)
  */
 ( function ( OO ) {
 
@@ -1023,20 +1023,29 @@ OO.mixinClass( OO.ui.Window, OO.EventEmitter );
 /* Events */
 
 /**
- * Open window.
+ * Window is setup.
  *
- * Fired after window has been opened.
+ * Fired after the setup process has been executed.
  *
- * @event open
+ * @event setup
  * @param {Object} data Window opening data
  */
 
 /**
- * Close window.
+ * Window is ready.
  *
- * Fired after window has been closed.
+ * Fired after the ready process has been executed.
  *
- * @event close
+ * @event ready
+ * @param {Object} data Window opening data
+ */
+
+/**
+ * Window is torn down
+ *
+ * Fired after the teardown process has been executed.
+ *
+ * @event teardown
  * @param {Object} data Window closing data
  */
 
@@ -1081,7 +1090,7 @@ OO.ui.Window.prototype.isVisible = function () {
  * @return {boolean} Window is opening
  */
 OO.ui.Window.prototype.isOpening = function () {
-       return !!this.opening && this.opening.state() !== 'resolved';
+       return !!this.opening && this.opening.state() === 'pending';
 };
 
 /**
@@ -1090,7 +1099,7 @@ OO.ui.Window.prototype.isOpening = function () {
  * @return {boolean} Window is closing
  */
 OO.ui.Window.prototype.isClosing = function () {
-       return !!this.closing && this.closing.state() !== 'resolved';
+       return !!this.closing && this.closing.state() === 'pending';
 };
 
 /**
@@ -1099,7 +1108,7 @@ OO.ui.Window.prototype.isClosing = function () {
  * @return {boolean} Window is opened
  */
 OO.ui.Window.prototype.isOpened = function () {
-       return !!this.opened && this.opened.state() !== 'resolved';
+       return !!this.opened && this.opened.state() === 'pending';
 };
 
 /**
@@ -1335,22 +1344,18 @@ OO.ui.Window.prototype.open = function ( data ) {
        this.frame.load().done( OO.ui.bind( function () {
                this.$element.show();
                this.visible = true;
-               this.emit( 'opening', data );
                this.getSetupProcess( data ).execute().done( OO.ui.bind( function () {
-                       this.emit( 'open', data );
+                       this.$element.addClass( 'oo-ui-window-setup' );
+                       this.emit( 'setup', data );
                        setTimeout( OO.ui.bind( function () {
-                               // Focus the content div (which has a tabIndex) to inactivate
-                               // (but not clear) selections in the parent frame.
-                               // Must happen after 'open' is emitted (to ensure it is visible)
-                               // but before 'ready' is emitted (so subclasses can give focus to something
-                               // else)
                                this.frame.$content.focus();
                                this.getReadyProcess( data ).execute().done( OO.ui.bind( function () {
+                                       this.$element.addClass( 'oo-ui-window-ready' );
                                        this.emit( 'ready', data );
                                        this.opened = $.Deferred();
-                                       this.opening.resolve( this.opened.promise() );
                                        // Now that we are totally done opening, it's safe to allow closing
                                        this.closing = null;
+                                       this.opening.resolve( this.opened.promise() );
                                }, this ) );
                        }, this ) );
                }, this ) );
@@ -1370,23 +1375,34 @@ OO.ui.Window.prototype.open = function ( data ) {
  * @return {jQuery.Promise} Promise resolved when window is closed
  */
 OO.ui.Window.prototype.close = function ( data ) {
+       var close;
+
        // Return existing promise if already closing or closed
        if ( this.closing ) {
                return this.closing.promise();
        }
 
+       // Close after opening is done if opening is in progress
+       if ( this.opening && this.opening.state() === 'pending' ) {
+               close = OO.ui.bind( function () {
+                       return this.close( data );
+               }, this );
+               return this.opening.then( close, close );
+       }
+
        // Close the window
        // This.closing needs to exist before we emit the closing event so that handlers can call
        // window.close() and trigger the safety check above
        this.closing = $.Deferred();
        this.frame.$content.find( ':focus' ).blur();
-       this.emit( 'closing', data );
+       this.$element.removeClass( 'oo-ui-window-ready' );
        this.getTeardownProcess( data ).execute().done( OO.ui.bind( function () {
+               this.$element.removeClass( 'oo-ui-window-setup' );
+               this.emit( 'teardown', data );
                // To do something different with #opened, resolve/reject #opened in the teardown process
-               if ( this.opened.state() === 'pending' ) {
+               if ( this.opened && this.opened.state() === 'pending' ) {
                        this.opened.resolve();
                }
-               this.emit( 'close', data );
                this.$element.hide();
                this.visible = false;
                this.closing.resolve();
@@ -1444,78 +1460,61 @@ OO.mixinClass( OO.ui.WindowSet, OO.EventEmitter );
 /* Events */
 
 /**
- * @event opening
- * @param {OO.ui.Window} win Window that's being opened
+ * @event setup
+ * @param {OO.ui.Window} win Window that's been setup
  * @param {Object} config Window opening information
  */
 
 /**
- * @event open
- * @param {OO.ui.Window} win Window that's been opened
+ * @event ready
+ * @param {OO.ui.Window} win Window that's ready
  * @param {Object} config Window opening information
  */
 
 /**
- * @event closing
- * @param {OO.ui.Window} win Window that's being closed
- * @param {Object} config Window closing information
- */
-
-/**
- * @event close
- * @param {OO.ui.Window} win Window that's been closed
+ * @event teardown
+ * @param {OO.ui.Window} win Window that's been torn down
  * @param {Object} config Window closing information
  */
 
 /* Methods */
 
 /**
- * Handle a window that's being opened.
+ * Handle a window setup event.
  *
- * @param {OO.ui.Window} win Window that's being opened
+ * @param {OO.ui.Window} win Window that's been setup
  * @param {Object} [config] Window opening information
- * @fires opening
+ * @fires setup
  */
-OO.ui.WindowSet.prototype.onWindowOpening = function ( win, config ) {
+OO.ui.WindowSet.prototype.onWindowSetup = function ( win, config ) {
        if ( this.currentWindow && this.currentWindow !== win ) {
                this.currentWindow.close();
        }
        this.currentWindow = win;
-       this.emit( 'opening', win, config );
+       this.emit( 'setup', win, config );
 };
 
 /**
- * Handle a window that's been opened.
+ * Handle a window ready event.
  *
- * @param {OO.ui.Window} win Window that's been opened
+ * @param {OO.ui.Window} win Window that's ready
  * @param {Object} [config] Window opening information
- * @fires open
+ * @fires ready
  */
-OO.ui.WindowSet.prototype.onWindowOpen = function ( win, config ) {
-       this.emit( 'open', win, config );
+OO.ui.WindowSet.prototype.onWindowReady = function ( win, config ) {
+       this.emit( 'ready', win, config );
 };
 
 /**
- * Handle a window that's being closed.
+ * Handle a window teardown event.
  *
- * @param {OO.ui.Window} win Window that's being closed
+ * @param {OO.ui.Window} win Window that's been torn down
  * @param {Object} [config] Window closing information
- * @fires closing
+ * @fires teardown
  */
-OO.ui.WindowSet.prototype.onWindowClosing = function ( win, config ) {
+OO.ui.WindowSet.prototype.onWindowTeardown = function ( win, config ) {
        this.currentWindow = null;
-       this.emit( 'closing', win, config );
-};
-
-/**
- * Handle a window that's been closed.
- *
- * @param {OO.ui.Window} win Window that's been closed
- * @param {Object} [config] Window closing information
- * @fires close
- */
-OO.ui.WindowSet.prototype.onWindowClose = function ( win, config ) {
-       this.emit( 'close', win, config );
+       this.emit( 'teardown', win, config );
 };
 
 /**
@@ -1562,7 +1561,7 @@ OO.ui.WindowSet.prototype.createWindow = function ( name ) {
  * Connects event handlers and attaches it to the DOM. Calling
  * OO.ui.Window#open will not work until the window is added to the set.
  *
- * @param {OO.ui.Window} win
+ * @param {OO.ui.Window} win Window to add
  */
 OO.ui.WindowSet.prototype.addWindow = function ( win ) {
        if ( this.windowList.indexOf( win ) !== -1 ) {
@@ -1572,10 +1571,9 @@ OO.ui.WindowSet.prototype.addWindow = function ( win ) {
        this.windowList.push( win );
 
        win.connect( this, {
-               'opening': [ 'onWindowOpening', win ],
-               'open': [ 'onWindowOpen', win ],
-               'closing': [ 'onWindowClosing', win ],
-               'close': [ 'onWindowClose', win ]
+               'setup': [ 'onWindowSetup', win ],
+               'ready': [ 'onWindowReady', win ],
+               'teardown': [ 'onWindowTeardown', win ]
        } );
        this.$element.append( win.$element );
 };
@@ -1608,7 +1606,6 @@ OO.ui.Dialog = function OoUiDialog( config ) {
 
        // Events
        this.$element.on( 'mousedown', false );
-       this.connect( this, { 'open': 'onOpen' } );
 
        // Initialization
        this.$element.addClass( 'oo-ui-dialog' );
@@ -1694,13 +1691,6 @@ OO.ui.Dialog.prototype.onFrameDocumentKeyDown = function ( e ) {
        }
 };
 
-/**
- * Handle window open events.
- */
-OO.ui.Dialog.prototype.onOpen = function () {
-       this.$element.addClass( 'oo-ui-dialog-open' );
-};
-
 /**
  * Set dialog size.
  *
@@ -1718,9 +1708,6 @@ OO.ui.Dialog.prototype.setSize = function ( size ) {
                state = name === size;
                cssClass = sizeCssClasses[name];
                this.$element.toggleClass( cssClass, state );
-               if ( this.frame.$content ) {
-                       this.frame.$content.toggleClass( cssClass, state );
-               }
        }
 };
 
@@ -1770,7 +1757,7 @@ OO.ui.Dialog.prototype.getSetupProcess = function ( data ) {
 OO.ui.Dialog.prototype.getTeardownProcess = function ( data ) {
        return OO.ui.Dialog.super.prototype.getTeardownProcess.call( this, data )
                .first( function () {
-                       this.$element.removeClass( 'oo-ui-dialog-open' );
+                       // Wait for closing transition
                        return OO.ui.Process.static.delay( 250 );
                }, this )
                .next( function () {
@@ -2113,7 +2100,7 @@ OO.ui.ConfirmationDialog.prototype.initialize = function () {
                this.cancelButton.$element
        );
 
-       this.connect( this, { 'close': [ 'close', 'cancel' ] } );
+       this.connect( this, { 'teardown': [ 'close', 'cancel' ] } );
 };
 
 /*
@@ -4380,7 +4367,6 @@ OO.ui.GridLayout.prototype.getPanel = function ( x, y ) {
  * @cfg {boolean} [autoFocus=true] Focus on the first focusable element when changing to a page
  * @cfg {boolean} [outlined=false] Show an outline
  * @cfg {boolean} [editable=false] Show controls for adding, removing and reordering pages
- * @cfg {Object[]} [adders] List of adders for controls, each with name, icon and title properties
  */
 OO.ui.BookletLayout = function OoUiBookletLayout( config ) {
        // Initialize configuration
@@ -4399,7 +4385,6 @@ OO.ui.BookletLayout = function OoUiBookletLayout( config ) {
        this.outlined = !!config.outlined;
        if ( this.outlined ) {
                this.editable = !!config.editable;
-               this.adders = config.adders || null;
                this.outlineControlsWidget = null;
                this.outlineWidget = new OO.ui.OutlineWidget( { '$': this.$ } );
                this.outlinePanel = new OO.ui.PanelLayout( { '$': this.$, 'scrollable': true } );
@@ -4410,8 +4395,7 @@ OO.ui.BookletLayout = function OoUiBookletLayout( config ) {
                this.outlineVisible = true;
                if ( this.editable ) {
                        this.outlineControlsWidget = new OO.ui.OutlineControlsWidget(
-                               this.outlineWidget,
-                               { '$': this.$, 'adders': this.adders }
+                               this.outlineWidget, { '$': this.$ }
                        );
                }
        }
@@ -7472,7 +7456,7 @@ OO.ui.OutlineControlsWidget = function OoUiOutlineControlsWidget( outline, confi
 
        // Initialization
        this.$element.addClass( 'oo-ui-outlineControlsWidget' );
-       this.$group.addClass( 'oo-ui-outlineControlsWidget-adders' );
+       this.$group.addClass( 'oo-ui-outlineControlsWidget-items' );
        this.$movers
                .addClass( 'oo-ui-outlineControlsWidget-movers' )
                .append( this.removeButton.$element, this.upButton.$element, this.downButton.$element );
index 79751f4..aa4d42e 100644 (file)
@@ -1,12 +1,12 @@
 /*!
- * OOjs UI v0.1.0-pre (99068355d6)
+ * OOjs UI v0.1.0-pre (c5ae888f67)
  * https://www.mediawiki.org/wiki/OOjs_UI
  *
  * Copyright 2011–2014 OOjs Team and other contributors.
  * Released under the MIT license
  * http://oojs.mit-license.org
  *
- * Date: Tue Jun 10 2014 11:03:38 GMT-0700 (PDT)
+ * Date: Wed Jun 11 2014 18:10:09 GMT-0700 (PDT)
  */
 
 /* Textures */
   height: 3em;
 }
 
-.oo-ui-outlineControlsWidget-adders,
+.oo-ui-outlineControlsWidget-items,
 .oo-ui-outlineControlsWidget-movers {
   float: left;
   height: 2em;
   background-repeat: no-repeat;
 }
 
-.oo-ui-outlineControlsWidget-adders {
+.oo-ui-outlineControlsWidget-items {
   float: left;
   margin-left: 0;
 }
 
-.oo-ui-outlineControlsWidget-adders .oo-ui-buttonWidget {
+.oo-ui-outlineControlsWidget-items .oo-ui-buttonWidget {
   float: left;
 }
 
 }
 
 .oo-ui-indicator-down {
-  background-image: /* @embed */ url(images/indicators/down.svg);
+  background-image: /* @embed */ url(images/indicators/arrow-down.svg);
+}
+
+.oo-ui-indicator-next {
+  background-image: /* @embed */ url(images/indicators/arrow-ltr.svg);
+}
+
+.oo-ui-indicator-previous {
+  background-image: /* @embed */ url(images/indicators/arrow-rtl.svg);
 }
 
 .oo-ui-indicator-required {
 }
 
 .oo-ui-indicator-up {
-  background-image: /* @embed */ url(images/indicators/up.svg);
+  background-image: /* @embed */ url(images/indicators/arrow-up.svg);
 }
\ No newline at end of file
index c1815a5..c1f1844 100644 (file)
                         * @throws {Error} If any unregistered module or a dependency loop is encountered
                         */
                        function sortDependencies( module, resolved, unresolved ) {
-                               var n, deps, len;
+                               var n, deps, len, skip;
 
                                if ( registry[module] === undefined ) {
                                        throw new Error( 'Unknown dependency: ' + module );
                                }
+
+                               if ( registry[module].skip !== null ) {
+                                       /*jshint evil:true */
+                                       skip = new Function( registry[module].skip );
+                                       registry[module].skip = null;
+                                       if ( skip() ) {
+                                               registry[module].dependencies = [];
+                                               registry[module].state = 'ready';
+                                               handlePending( module );
+                                               return;
+                                       }
+                               }
+
                                // Resolves dynamic loader function and replaces it with its own results
                                if ( $.isFunction( registry[module].dependencies ) ) {
                                        registry[module].dependencies = registry[module].dependencies();
                                 *  names on which this module depends, or a function that returns that array.
                                 * @param {string} [group=null] Group which the module is in
                                 * @param {string} [source='local'] Name of the source
+                                * @param {string} [skip=null] Script body of the skip function
                                 */
-                               register: function ( module, version, dependencies, group, source ) {
+                               register: function ( module, version, dependencies, group, source, skip ) {
                                        var m;
                                        // Allow multiple registration
                                        if ( typeof module === 'object' ) {
                                                dependencies: [],
                                                group: typeof group === 'string' ? group : null,
                                                source: typeof source === 'string' ? source : 'local',
-                                               state: 'registered'
+                                               state: 'registered',
+                                               skip: typeof skip === 'string' ? skip : null
                                        };
                                        if ( typeof dependencies === 'string' ) {
                                                // Allow dependencies to be given as a single module name
index 41cb1da..b17d15c 100644 (file)
@@ -1,4 +1,4 @@
-@html-font-size: 1em;
+@html-font-size: 100%;
 
 // Page content
 // FIXME: Use global variable since Echo and CentralNotice use this variable
index f8c4c6c..daf4bd9 100644 (file)
@@ -4,7 +4,6 @@ abstract class ResourceLoaderTestCase extends MediaWikiTestCase {
        protected static function getResourceLoaderContext() {
                $resourceLoader = new ResourceLoader();
                $request = new FauxRequest( array(
-                               'debug' => 'true',
                                'lang' => 'en',
                                'modules' => 'startup',
                                'only' => 'scripts',
@@ -17,6 +16,8 @@ abstract class ResourceLoaderTestCase extends MediaWikiTestCase {
        protected function setUp() {
                parent::setUp();
 
+               ResourceLoader::clearCache();
+
                $this->setMwGlobals( array(
                        // For ResourceLoader::inDebugMode since it doesn't have context
                        'wgResourceLoaderDebug' => true,
@@ -42,6 +43,7 @@ class ResourceLoaderTestModule extends ResourceLoaderModule {
        protected $dependencies = array();
        protected $group = null;
        protected $source = 'local';
+       protected $skipFunction = null;
        protected $targets = array( 'test' );
 
        public function __construct( $options = array() ) {
@@ -61,6 +63,10 @@ class ResourceLoaderTestModule extends ResourceLoaderModule {
        public function getSource() {
                return $this->source;
        }
+
+       public function getSkipFunction() {
+               return $this->skipFunction;
+       }
 }
 
 class ResourceLoaderFileModuleTestModule extends ResourceLoaderFileModule {
index c4412de..df08972 100644 (file)
@@ -114,6 +114,67 @@ mw.loader.addSource( {
         "example"
     ]
 ] );'
+                       ) ),
+                       array( array(
+                               'msg' => 'Conditional dependency function',
+                               'modules' => array(
+                                       'test.x.core' => new ResourceLoaderTestModule(),
+                                       'test.x.polyfill' => new ResourceLoaderTestModule( array(
+                                               'skipFunction' => 'return true;'
+                                       ) ),
+                                       'test.y.polyfill' => new ResourceLoaderTestModule( array(
+                                               'skipFunction' =>
+                                                       'return !!(' .
+                                                       '    window.JSON &&' .
+                                                       '    JSON.parse &&' .
+                                                       '    JSON.stringify' .
+                                                       ');'
+                                       ) ),
+                                       'test.z.foo' => new ResourceLoaderTestModule( array(
+                                               'dependencies' => array(
+                                                       'test.x.core',
+                                                       'test.x.polyfil',
+                                                       'test.y.polyfil',
+                                               ),
+                                       ) ),
+                               ),
+                               'out' => '
+mw.loader.addSource( {
+    "local": {
+        "loadScript": "/w/load.php",
+        "apiScript": "/w/api.php"
+    }
+} );mw.loader.register( [
+    [
+        "test.x.core",
+        "1388534400"
+    ],
+    [
+        "test.x.polyfill",
+        "1388534400",
+        [],
+        null,
+        "local",
+        "return true;"
+    ],
+    [
+        "test.y.polyfill",
+        "1388534400",
+        [],
+        null,
+        "local",
+        "return !!(    window.JSON \u0026\u0026    JSON.parse \u0026\u0026    JSON.stringify);"
+    ],
+    [
+        "test.z.foo",
+        "1388534400",
+        [
+            "test.x.core",
+            "test.x.polyfil",
+            "test.y.polyfil"
+        ]
+    ]
+] );',
                        ) ),
                        array( array(
                                // This may seem like an edge case, but a plain MediaWiki core install
@@ -278,4 +339,77 @@ mw.loader.addSource( {
                );
        }
 
+       public static function provideRegistrations() {
+               return array(
+                       array( array(
+                               'test.blank' => new ResourceLoaderTestModule(),
+                               'test.min' => new ResourceLoaderTestModule( array(
+                                       'skipFunction' =>
+                                               'return !!(' .
+                                               '    window.JSON &&' .
+                                               '    JSON.parse &&' .
+                                               '    JSON.stringify' .
+                                               ');',
+                                       'dependencies' => array(
+                                               'test.blank',
+                                       ),
+                               ) ),
+                       ) )
+               );
+       }
+       /**
+        * @dataProvider provideRegistrations
+        */
+       public function testRegistrationsMinified( $modules ) {
+               $this->setMwGlobals( 'wgResourceLoaderDebug', false );
+
+               $context = self::getResourceLoaderContext();
+               $rl = $context->getResourceLoader();
+               $rl->register( $modules );
+               $this->assertEquals(
+'mw.loader.addSource({"local":{"loadScript":"/w/load.php","apiScript":"/w/api.php"}});'
+. 'mw.loader.register(['
+. '["test.blank","1388534400"],'
+. '["test.min","1388534400",["test.blank"],null,"local",'
+. '"return!!(window.JSON\u0026\u0026JSON.parse\u0026\u0026JSON.stringify);"'
+. ']]);',
+                       ResourceLoaderStartUpModule::getModuleRegistrations( $context ),
+                       'Minified output'
+               );
+       }
+
+       /**
+        * @dataProvider provideRegistrations
+        */
+       public function testRegistrationsUnminified( $modules ) {
+               $context = self::getResourceLoaderContext();
+               $rl = $context->getResourceLoader();
+               $rl->register( $modules );
+               $this->assertEquals(
+'mw.loader.addSource( {
+    "local": {
+        "loadScript": "/w/load.php",
+        "apiScript": "/w/api.php"
+    }
+} );mw.loader.register( [
+    [
+        "test.blank",
+        "1388534400"
+    ],
+    [
+        "test.min",
+        "1388534400",
+        [
+            "test.blank"
+        ],
+        null,
+        "local",
+        "return !!(    window.JSON \u0026\u0026    JSON.parse \u0026\u0026    JSON.stringify);"
+    ]
+] );',
+                       ResourceLoaderStartUpModule::getModuleRegistrations( $context ),
+                       'Unminified output'
+               );
+       }
+
 }
index f6eff77..ee729e6 100644 (file)
@@ -30,15 +30,30 @@ require_once __DIR__ . '/../../../includes/Xml.php';
 $moduleImplementations = array(
        'testUsesMissing' => "
 mw.loader.implement( 'testUsesMissing', function () {
-       QUnit.ok( false, 'Module test.usesMissing script should not run.');
+       QUnit.ok( false, 'Module usesMissing script should not run.' );
        QUnit.start();
 }, {}, {});
 ",
 
        'testUsesNestedMissing' => "
 mw.loader.implement( 'testUsesNestedMissing', function () {
-       QUnit.ok( false, 'Module testUsesNestedMissing script should not run.');
+       QUnit.ok( false, 'Module testUsesNestedMissing script should not run.' );
+       QUnit.start();
+}, {}, {});
+",
+
+       'testSkipped' =>"
+mw.loader.implement( 'testSkipped', function () {
+       QUnit.ok( false, 'Module testSkipped was supposed to be skipped.' );
 }, {}, {});
+",
+
+       'testNotSkipped' =>"
+mw.loader.implement( 'testNotSkipped', function () {}, {}, {});
+",
+
+       'testUsesSkippable' =>"
+mw.loader.implement( 'testUsesSkippable', function () {}, {}, {});
 ",
 );
 
index 0f6b445..9681330 100644 (file)
                }
        } ) );
 
+       mw.loader.addSource(
+               'testloader',
+               {
+                       loadScript: QUnit.fixurl( mw.config.get( 'wgScriptPath' ) + '/tests/qunit/data/load.mock.php' )
+               }
+       );
+
        QUnit.test( 'Initial check', 8, function ( assert ) {
                assert.ok( window.jQuery, 'jQuery defined' );
                assert.ok( window.$, '$ defined' );
        } );
 
        QUnit.asyncTest( 'mw.loader dependency handling', 5, function ( assert ) {
-               mw.loader.addSource(
-                       'testloader',
-                       {
-                               loadScript: QUnit.fixurl( mw.config.get( 'wgScriptPath' ) + '/tests/qunit/data/load.mock.php' )
-                       }
-               );
-
                mw.loader.register( [
                        // [module, version, dependencies, group, source]
                        ['testMissing', '1', [], null, 'testloader'],
                );
        } );
 
+       QUnit.asyncTest( 'mw.loader skin-function handling', 5, function ( assert ) {
+               mw.loader.register( [
+                       // [module, version, dependencies, group, source, skip]
+                       ['testSkipped', '1', [], null, 'testloader', 'return true;'],
+                       ['testNotSkipped', '1', [], null, 'testloader', 'return false;'],
+                       ['testUsesSkippable', '1', ['testSkipped', 'testNotSkipped'], null, 'testloader']
+               ] );
+
+               function verifyModuleStates() {
+                       assert.equal( mw.loader.getState( 'testSkipped' ), 'ready', 'Module is ready when skipped' );
+                       assert.equal( mw.loader.getState( 'testNotSkipped' ), 'ready', 'Module is ready when not skipped but loaded' );
+                       assert.equal( mw.loader.getState( 'testUsesSkippable' ), 'ready', 'Module is ready when skippable dependencies are ready' );
+               }
+
+               mw.loader.using( ['testUsesSkippable'],
+                       function () {
+                               assert.ok( true, 'Success handler should be invoked.' );
+                               assert.ok( true ); // Dummy to match error handler and reach QUnit expect()
+
+                               verifyModuleStates();
+
+                               QUnit.start();
+                       },
+                       function ( e, badmodules ) {
+                               assert.ok( false, 'Error handler should not be invoked.' );
+                               assert.deepEqual( badmodules, [], 'Bad modules as expected.' );
+
+                               verifyModuleStates();
+
+                               QUnit.start();
+                       }
+               );
+       } );
+
        QUnit.asyncTest( 'mw.loader( "//protocol-relative" ) (bug 30825)', 2, function ( assert ) {
                // This bug was actually already fixed in 1.18 and later when discovered in 1.17.
                // Test is for regressions!