Merge "LSG: Fix Makefile"
authorjenkins-bot <jenkins-bot@gerrit.wikimedia.org>
Sat, 24 Jan 2015 01:41:32 +0000 (01:41 +0000)
committerGerrit Code Review <gerrit@wikimedia.org>
Sat, 24 Jan 2015 01:41:32 +0000 (01:41 +0000)
34 files changed:
RELEASE-NOTES-1.25
docs/extension.schema.json
docs/hooks.txt
includes/DefaultSettings.php
includes/Setup.php
includes/Title.php
includes/api/ApiFeedContributions.php
includes/api/ApiPageSet.php
includes/api/i18n/av.json [new file with mode: 0644]
includes/api/i18n/vi.json
includes/api/i18n/zh-hans.json
includes/installer/i18n/vi.json
includes/page/WikiPage.php
includes/parser/ParserOutput.php
includes/registration/ExtensionProcessor.php
includes/skins/Skin.php
includes/specials/SpecialTrackingCategories.php
languages/i18n/awa.json
languages/i18n/bgn.json
languages/i18n/cs.json
languages/i18n/eo.json
languages/i18n/pms.json
languages/i18n/qqq.json
languages/i18n/sah.json
languages/i18n/uk.json
languages/i18n/ur.json
maintenance/convertExtensionToRegistration.php
maintenance/namespaceDupes.php
maintenance/update.php
resources/assets/poweredby_mediawiki_132x47.png [new file with mode: 0644]
resources/assets/poweredby_mediawiki_176x62.png [new file with mode: 0644]
resources/lib/oojs/oojs.jquery.js
resources/src/mediawiki/mediawiki.cookie.js
tests/phpunit/includes/registration/ExtensionProcessorTest.php

index f0c00f3..aa421cb 100644 (file)
@@ -131,6 +131,8 @@ production.
 * (T85192) Captcha position modified in Usercreate template. As a result:
 ** extrafields parameter added to Usercreate.php to insert additional data
 ** 'extend' method added to QuickTemplate to append additional values to any field of data array
+* (T86974) Several Title methods now load from the database when necessary
+  (instead of returning incorrect results) even when the page ID is known.
 
 === Action API changes in 1.25 ===
 * (T67403) XML tag highlighting is now only performed for formats
index 46f8623..4583559 100644 (file)
@@ -7,10 +7,6 @@
                        "type": "string",
                        "description": "The extension's canonical name."
                },
-               "info-files": {
-                       "type": "array",
-                       "description": "A list of filenames that should be loaded, in addition to this one"
-               },
                "type": {
                        "type": "string",
                        "description": "The extension's type, as an index to $wgExtensionCredits.",
@@ -39,9 +35,6 @@
                        },
                        "additionalItems": false
                },
-               "path": {
-                       "type": "string"
-               },
                "version": {
                        "type": "string",
                        "description": "The version of this release of the extension."
index 2de78dd..4717c38 100644 (file)
@@ -372,6 +372,17 @@ $editPage : the EditPage object
 $text : the new text of the article (has yet to be saved)
 &$resultArr : data in this array will be added to the API result
 
+'ApiFeedContributions::feedItem': Called to convert the result of ContribsPager
+into a FeedItem instance that ApiFeedContributions can consume. Implementors of
+this hook may cancel the hook to signal that the item is not viewable in the
+provided context.
+$row: A row of data from ContribsPager.  The set of data returned by ContribsPager
+ can be adjusted by handling the ContribsPager::reallyDoQuery hook.
+$context: An IContextSource implementation.
+&$feedItem: Set this to a FeedItem instance if the callback can handle the provided
+ row. This is provided to the hook as a null, if it is non null then another callback
+ has already handled the hook.
+
 'ApiFormatHighlight': Use to syntax-highlight API pretty-printed output. When
 highlighting, add output to $context->getOutput() and return false.
 $context: An IContextSource.
index 0b0c7d0..f9dc1ed 100644 (file)
@@ -3154,6 +3154,7 @@ $wgExperimentalHtmlIds = false;
  * for the icon, the following keys are used:
  * - src: An absolute url to the image to use for the icon, this is recommended
  *        but not required, however some skins will ignore icons without an image
+ * - srcset: optional additional-resolution images; see HTML5 specs
  * - url: The url to use in the a element around the text or icon, if not set an a element will
  *        not be outputted
  * - alt: This is the text form of the icon, it will be displayed without an image in
@@ -3170,7 +3171,7 @@ $wgFooterIcons = array(
        ),
        "poweredby" => array(
                "mediawiki" => array(
-                       "src" => null, // Defaults to "$wgResourceBasePath/resources/assets/poweredby_mediawiki_88x31.png"
+                       "src" => null, // Defaults to "$wgResourceBasePath/resources/assets/poweredby_mediawiki_88x31.png" plus srcset for 1.5x, 2x
                        "url" => "//www.mediawiki.org/",
                        "alt" => "Powered by MediaWiki",
                )
@@ -3855,20 +3856,12 @@ $wgNamespacesWithSubpages = array(
  * A message with the suffix '-desc' should be added as a description message
  * to have extra information on Special:TrackingCategories.
  *
+ * @deprecated since 1.25 Extensions should now register tracking categories using
+ *                        the new extension registration system.
+ *
  * @since 1.23
  */
-$wgTrackingCategories = array(
-       'index-category',
-       'noindex-category',
-       'duplicate-args-category',
-       'expensive-parserfunction-category',
-       'post-expand-template-argument-category',
-       'post-expand-template-inclusion-category',
-       'hidden-category-category',
-       'broken-file-category',
-       'node-count-exceeded-category',
-       'expansion-depth-exceeded-category',
-);
+$wgTrackingCategories = array();
 
 /**
  * Array of namespaces which can be deemed to contain valid "content", as far
index c75429e..4e63d91 100644 (file)
@@ -140,6 +140,9 @@ if ( isset( $wgFooterIcons['poweredby'] )
 ) {
        $wgFooterIcons['poweredby']['mediawiki']['src'] =
                "$wgResourceBasePath/resources/assets/poweredby_mediawiki_88x31.png";
+       $wgFooterIcons['poweredby']['mediawiki']['srcset'] =
+               "$wgResourceBasePath/resources/assets/poweredby_mediawiki_132x47.png 1.5x, " .
+               "$wgResourceBasePath/resources/assets/poweredby_mediawiki_176x62.png 2x";
 }
 
 /**
index 2d0cfda..463f75e 100644 (file)
@@ -942,9 +942,9 @@ class Title {
         * @return string Content model id
         */
        public function getContentModel( $flags = 0 ) {
-               # Calling getArticleID() loads the field from cache as needed
                if ( !$this->mContentModel && $this->getArticleID( $flags ) ) {
                        $linkCache = LinkCache::singleton();
+                       $linkCache->addLinkObj( $this ); # in case we already had an article ID
                        $this->mContentModel = $linkCache->getGoodLinkFieldObj( $this, 'model' );
                }
 
@@ -3185,13 +3185,13 @@ class Title {
                if ( !is_null( $this->mRedirect ) ) {
                        return $this->mRedirect;
                }
-               # Calling getArticleID() loads the field from cache as needed
                if ( !$this->getArticleID( $flags ) ) {
                        $this->mRedirect = false;
                        return $this->mRedirect;
                }
 
                $linkCache = LinkCache::singleton();
+               $linkCache->addLinkObj( $this ); # in case we already had an article ID
                $cached = $linkCache->getGoodLinkFieldObj( $this, 'redirect' );
                if ( $cached === null ) {
                        # Trust LinkCache's state over our own
@@ -3220,12 +3220,12 @@ class Title {
                if ( $this->mLength != -1 ) {
                        return $this->mLength;
                }
-               # Calling getArticleID() loads the field from cache as needed
                if ( !$this->getArticleID( $flags ) ) {
                        $this->mLength = 0;
                        return $this->mLength;
                }
                $linkCache = LinkCache::singleton();
+               $linkCache->addLinkObj( $this ); # in case we already had an article ID
                $cached = $linkCache->getGoodLinkFieldObj( $this, 'length' );
                if ( $cached === null ) {
                        # Trust LinkCache's state over our own, as for isRedirect()
@@ -3248,13 +3248,12 @@ class Title {
                if ( !( $flags & Title::GAID_FOR_UPDATE ) && $this->mLatestID !== false ) {
                        return intval( $this->mLatestID );
                }
-               # Calling getArticleID() loads the field from cache as needed
                if ( !$this->getArticleID( $flags ) ) {
                        $this->mLatestID = 0;
                        return $this->mLatestID;
                }
                $linkCache = LinkCache::singleton();
-               $linkCache->addLinkObj( $this );
+               $linkCache->addLinkObj( $this ); # in case we already had an article ID
                $cached = $linkCache->getGoodLinkFieldObj( $this, 'revision' );
                if ( $cached === null ) {
                        # Trust LinkCache's state over our own, as for isRedirect()
index ced5f0c..edda672 100644 (file)
@@ -95,7 +95,10 @@ class ApiFeedContributions extends ApiBase {
                                if ( ++$count > $limit ) {
                                        break;
                                }
-                               $feedItems[] = $this->feedItem( $row );
+                               $item = $this->feedItem( $row );
+                               if ( $item !== null ) {
+                                       $feedItems[] = $item;
+                               }
                        }
                }
 
@@ -103,6 +106,23 @@ class ApiFeedContributions extends ApiBase {
        }
 
        protected function feedItem( $row ) {
+               // This hook is the api contributions equivalent to the
+               // ContributionsLineEnding hook. Hook implementers may cancel
+               // the hook to signal the user is not allowed to read this item.
+               $feedItem = null;
+               $hookResult = Hooks::run(
+                       'ApiFeedContributions::feedItem',
+                       array( $row, $this->getContext(), &$feedItem )
+               );
+               // Hook returned a valid feed item
+               if ( $feedItem instanceof FeedItem ) {
+                       return $feedItem;
+               // Hook was canceled and did not return a valid feed item
+               } elseif ( !$hookResult ) {
+                       return null;
+               }
+
+               // Hook completed and did not return a valid feed item
                $title = Title::makeTitle( intval( $row->page_namespace ), $row->page_title );
                if ( $title && $title->userCan( 'read', $this->getUser() ) ) {
                        $date = $row->rev_timestamp;
index 981c119..e53e2b2 100644 (file)
@@ -315,6 +315,10 @@ class ApiPageSet extends ApiBase {
                        $pageFlds['page_is_redirect'] = null;
                }
 
+               if ( $this->getConfig()->get( 'ContentHandlerUseDB' ) ) {
+                       $pageFlds['page_content_model'] = null;
+               }
+
                // only store non-default fields
                $this->mRequestedPageFields = array_diff_key( $this->mRequestedPageFields, $pageFlds );
 
diff --git a/includes/api/i18n/av.json b/includes/api/i18n/av.json
new file mode 100644 (file)
index 0000000..df85c0b
--- /dev/null
@@ -0,0 +1,8 @@
+{
+       "@metadata": {
+               "authors": [
+                       "Аль-Гимравий"
+               ]
+       },
+       "apihelp-block-param-user": "Нужее блокалда лъезе бокьун вугев гІахьалчиясул цІар, IP-адрес яги IP-адресазул диапазон"
+}
index 30211af..dc401fc 100644 (file)
@@ -2,14 +2,18 @@
        "@metadata": {
                "authors": [
                        "Minh Nguyen",
-                       "Max20091"
+                       "Max20091",
+                       "Dinhxuanduyet"
                ]
        },
        "apihelp-main-param-action": "Tác vụ để thực hiện.",
        "apihelp-main-param-format": "Định dạng của dữ liệu được cho ra.",
        "apihelp-block-description": "Cấm người dùng.",
+       "apihelp-block-param-user": "Tên truy nhập, địa chỉ IP hoặc dãi IP mà bạn muốn chặn.",
        "apihelp-block-param-reason": "Lý do cấm.",
        "apihelp-block-param-nocreate": "Cấm tạo tài khoản.",
+       "apihelp-clearhasmsg-description": "Xóa cờ hasmsg cho người dùng hiện tại.",
+       "apihelp-clearhasmsg-example-1": "Xóa cờ hasmsg cho người dùng hiện tại",
        "apihelp-createaccount-description": "Mở tài khoản mới.",
        "apihelp-createaccount-param-name": "Tên người dùng.",
        "apihelp-createaccount-param-password": "Mật khẩu (được bỏ qua nếu $1mailpassword được đặt).",
        "apihelp-expandtemplates-description": "Bung tất cả bản mẫu trong văn bản wiki.",
        "apihelp-expandtemplates-param-title": "Tên trang.",
        "apihelp-expandtemplates-param-text": "Văn bản wiki để bung.",
+       "apihelp-filerevert-param-comment": "Tải lên bình luận.",
+       "apihelp-filerevert-param-archivename": "Tên lưu trữ của bản sửa đổi để trở lại .",
+       "apihelp-filerevert-example-revert": "Hoàn nguyên Wiki.png veef phiên bản 2011-03-05T15 : 27:40Z",
+       "apihelp-help-description": "Hiển thị trợ giúp cho các mô-đun xác định.",
        "apihelp-help-param-helpformat": "Định dạng của văn bản trợ giúp được cho ra.",
+       "apihelp-help-example-recursive": "Tất cả trợ giúp trong một trang",
+       "apihelp-help-example-help": "Trợ giúp cho chính bản thân module trợ giúp",
+       "apihelp-help-example-query": "Trợ giúp cho hai module con truy vấn",
+       "apihelp-imagerotate-description": "Xoay một hoặc nhiều hình ảnh.",
+       "apihelp-imagerotate-param-rotation": "Độ xoay hình ảnh theo chiều kim đồng hồ.",
        "apihelp-imagerotate-example-simple": "Xoay [[:Tập tin:Ví dụ.jpg]] 90 độ",
        "apihelp-imagerotate-example-generator": "Xoay tất cả các hình ảnh trong [[:Thể loại:Búng]] 180 độ",
        "apihelp-login-param-name": "Tên người dùng.",
@@ -70,6 +83,8 @@
        "apihelp-options-example-reset": "Mặc định lại các tùy chọn",
        "apihelp-paraminfo-param-helpformat": "Định dạng chuỗi trợ giúp.",
        "apihelp-parse-param-summary": "Lời tóm lược để phân tích.",
+       "apihelp-parse-param-section": "Chỉ truy xuất nội dung của số bộ phận này.",
+       "apihelp-parse-param-disablepp": "Vô hiệu hóa phân tích cú pháp đầu ra của Báo cáo PP .",
        "apihelp-parse-example-page": "Phân tích trang.",
        "apihelp-parse-example-text": "Phân tích văn bản wiki.",
        "apihelp-parse-example-texttitle": "Phân tích văn bản wiki theo tên trang.",
@@ -82,6 +97,7 @@
        "apihelp-query-param-prop": "Các thuộc tính để lấy khi truy vấn các trang.",
        "apihelp-query-param-list": "Các danh sách để lấy.",
        "apihelp-query-param-meta": "Siêu dữ liệu để lấy.",
+       "apihelp-query+allcategories-param-dir": "Hướng xếp loại.",
        "apihelp-format-example-generic": "Định dạng kết quả truy vấn dưới dạng $1",
        "apihelp-dbg-description": "Cho ra dữ liệu dưới dạng var_export() của PHP.",
        "apihelp-dbgfm-description": "Cho ra dữ liệu dưới dạng var_export() của PHP (định dạng bằng HTML).",
index 01b2718..2bb9389 100644 (file)
        "apihelp-query+allredirects-description": "列出至一个名字空间的重定向。",
        "apihelp-query+allredirects-param-namespace": "要列举的名字空间。",
        "apihelp-query+allredirects-param-limit": "返回的总计项目数。",
+       "apihelp-query+allredirects-param-dir": "罗列所采用的方向。",
        "apihelp-query+allredirects-example-unique": "列出孤立目标页面",
        "apihelp-query+allredirects-example-unique-generator": "获得所有目标页面,标记丢失的",
        "apihelp-query+allredirects-example-generator": "获得包含重定向的页面",
        "apihelp-query+alltransclusions-description": "列出所有嵌入页面(使用&#123;&#123;x&#125;&#125;嵌入的页面),包括不存在的。",
        "apihelp-query+alltransclusions-param-namespace": "要列举的名字空间。",
+       "apihelp-query+alltransclusions-param-dir": "罗列所采用的方向。",
        "apihelp-query+alltransclusions-example-unique": "列出孤立嵌入标题",
        "apihelp-query+allusers-param-dir": "排序方向。",
        "apihelp-query+allusers-param-group": "只包含指定组中的用户。",
        "apihelp-query+backlinks-param-title": "要搜索的标题。不能与$1pageid一起使用。",
        "apihelp-query+backlinks-param-pageid": "要搜索的页面ID。不能与$1title一起使用。",
        "apihelp-query+backlinks-param-namespace": "要列举的名字空间。",
+       "apihelp-query+backlinks-param-dir": "罗列所采用的方向。",
        "apihelp-query+backlinks-example-simple": "显示至[[首页]]的链接",
        "apihelp-query+backlinks-example-generator": "获取关于链接至[[首页]]的页面的信息",
        "apihelp-query+blocks-description": "列出所有被封禁的用户和IP地址。",
        "apihelp-query+blocks-example-users": "列出用户Alice和Bob的封禁",
        "apihelp-query+categories-param-show": "显示何种分类。",
        "apihelp-query+categories-param-limit": "返回多少分类。",
+       "apihelp-query+categories-param-dir": "罗列所采用的方向。",
        "apihelp-query+categories-example-simple": "获取属于[[阿尔伯特·爱因斯坦]]的分类列表",
        "apihelp-query+categories-example-generator": "获取有关用于[[阿尔伯特·爱因斯坦]]的分类的信息",
        "apihelp-query+categoryinfo-example-simple": "获取有关[[:Category:Foo]]和[[:Category:Bar]]的信息",
        "apihelp-query+deletedrevs-example-mode3-talk": "列出前50次讨论名字空间已删除页面(模式3):",
        "apihelp-query+disabled-description": "此查询模块已被禁用。",
        "apihelp-query+duplicatefiles-param-limit": "返回多少重复文件。",
+       "apihelp-query+duplicatefiles-param-dir": "罗列所采用的方向。",
+       "apihelp-query+duplicatefiles-param-localonly": "只看本地存储库的文件。",
        "apihelp-query+duplicatefiles-example-simple": "查找与[[:File:Albert Einstein Head.jpg]]重复的文件",
        "apihelp-query+duplicatefiles-example-generated": "查找所有文件的重复文件",
        "apihelp-query+embeddedin-param-title": "要搜索的标题。不能与$1pageid一起使用。",
        "apihelp-query+embeddedin-param-pageid": "要搜索的页面ID。不能与$1title一起使用。",
        "apihelp-query+embeddedin-param-namespace": "列举的名字空间。",
+       "apihelp-query+embeddedin-param-dir": "罗列所采用的方向。",
        "apihelp-query+embeddedin-param-filterredir": "如何过滤重定向。",
        "apihelp-query+embeddedin-param-limit": "返回的总计页面数。",
        "apihelp-query+embeddedin-example-simple": "显示嵌入[[Template:Stub]]的页面",
        "apihelp-query+extlinks-example-simple": "获取[[首页]]的外部链接列表",
        "apihelp-query+exturlusage-param-limit": "返回多少页面。",
        "apihelp-query+exturlusage-example-simple": "显示链接至http://www.mediawiki.org的页面",
+       "apihelp-query+filearchive-param-dir": "罗列所采用的方向。",
        "apihelp-query+filearchive-param-sha1": "图片的SHA1哈希值。覆盖$1sha1base36。",
        "apihelp-query+filearchive-param-sha1base36": "基于base 36的图片的SHA1哈希值(用于MediaWiki)。",
        "apihelp-query+filearchive-example-simple": "显示已删除文件列表",
        "apihelp-query+imageinfo-example-simple": "获取有关[[:File:Albert Einstein Head.jpg]]的当前版本的信息",
        "apihelp-query+imageinfo-example-dated": "获取有关[[:File:Albert Einstein Head.jpg]]自2008年以来版本的信息",
        "apihelp-query+images-param-limit": "返回多少文件。",
+       "apihelp-query+images-param-dir": "罗列所采用的方向。",
        "apihelp-query+images-example-simple": "获取[[首页]]使用的文件列表",
        "apihelp-query+images-example-generator": "获取有关[[首页]]使用的文件的信息",
        "apihelp-query+imageusage-param-title": "要搜索的标题。不能与$1pageid一起使用。",
        "apihelp-query+imageusage-param-pageid": "要搜索的页面ID。不能与$1title一起使用。",
        "apihelp-query+imageusage-param-namespace": "要列举的名字空间。",
+       "apihelp-query+imageusage-param-dir": "罗列所采用的方向。",
        "apihelp-query+imageusage-example-simple": "显示使用[[:File:Albert Einstein Head.jpg]]的页面",
        "apihelp-query+imageusage-example-generator": "获取有关使用[[:File:Albert Einstein Head.jpg]]的页面的信息",
        "apihelp-query+info-description": "获取基本页面信息。",
        "apihelp-query+info-param-prop": "要获取的额外属性:",
+       "apihelp-query+info-paramvalue-prop-watchers": "监视人员数,如果允许。",
        "apihelp-query+info-param-token": "请改用[[Special:ApiHelp/query+tokens|action=query&meta=tokens]]。",
        "apihelp-query+info-example-simple": "获取有关[[首页]]的信息",
        "apihelp-query+info-example-protection": "获取[[首页]]的一般和保护信息",
        "apihelp-query+iwbacklinks-param-prefix": "跨维基前缀。",
        "apihelp-query+iwbacklinks-param-limit": "返回的总计页面数。",
        "apihelp-query+iwbacklinks-param-prop": "要获取的属性:\n;iwprefix:加入跨wiki前缀。\n;iwtitle:加入跨wiki标题。",
+       "apihelp-query+iwbacklinks-param-dir": "罗列所采用的方向。",
        "apihelp-query+iwbacklinks-example-simple": "获取链接至[[wikibooks:Test]]的页面",
        "apihelp-query+iwbacklinks-example-generator": "获取有关链接至[[wikibooks:Test]]的页面的信息",
        "apihelp-query+iwlinks-param-url": "是否获取完整URL(不能与$1prop一起使用)。",
        "apihelp-query+iwlinks-param-limit": "返回多少跨wiki链接。",
        "apihelp-query+iwlinks-param-prefix": "只返回此前缀的跨wiki链接。",
        "apihelp-query+iwlinks-param-title": "用于搜索的跨wiki链接。必须与$1prefix一起使用。",
+       "apihelp-query+iwlinks-param-dir": "罗列所采用的方向。",
        "apihelp-query+iwlinks-example-simple": "从[[首页]]获取跨wiki链接",
        "apihelp-query+langbacklinks-param-lang": "用于语言链接的语言。",
        "apihelp-query+langbacklinks-param-title": "要搜索的语言链接。必须与$1lang一起使用。",
+       "apihelp-query+langbacklinks-param-dir": "罗列所采用的方向。",
        "apihelp-query+langbacklinks-example-simple": "获取链接至[[:fr:Test]]的页面",
        "apihelp-query+langbacklinks-example-generator": "获取链接至[[:fr:Test]]的页面的信息",
        "apihelp-query+langlinks-param-limit": "返回多少语言链接。",
        "apihelp-query+langlinks-param-url": "是否获取完整URL(不能与$1prop一起使用)。",
        "apihelp-query+langlinks-param-title": "要搜索的链接。必须与$1lang一起使用。",
+       "apihelp-query+langlinks-param-dir": "罗列所采用的方向。",
        "apihelp-query+langlinks-param-inlanguagecode": "本地化语言名称的语言代码。",
        "apihelp-query+langlinks-example-simple": "从[[首页]]获取跨语言链接",
        "apihelp-query+links-param-limit": "返回多少链接。",
+       "apihelp-query+links-param-dir": "罗列所采用的方向。",
        "apihelp-query+links-example-simple": "从[[首页]]获取链接",
        "apihelp-query+links-example-generator": "获取有关[[首页]]链接页面的信息",
        "apihelp-query+links-example-namespaces": "获取用户和模板名字空间中来自[[首页]]的链接",
        "apihelp-query+pagepropnames-description": "列出wiki中所有使用中的页面属性名称。",
        "apihelp-query+pagepropnames-example-simple": "获取前10个常用名称",
        "apihelp-query+pageprops-example-simple": "获取用于[[:Category:Foo]]的属性",
+       "apihelp-query+pageswithprop-param-dir": "排序的方向。",
        "apihelp-query+pageswithprop-example-simple": "列出前10个使用&#123;&#123;DISPLAYTITLE:&#125;&#125;的页面",
        "apihelp-query+pageswithprop-example-generator": "获取有关前10个使用_&#95;NOTOC_&#95;的页面的信息",
        "apihelp-query+prefixsearch-param-search": "搜索字符串。",
        "apihelp-query+recentchanges-param-excludeuser": "不要列出此用户的更改。",
        "apihelp-query+recentchanges-param-tag": "只列出带此标签的更改。",
        "apihelp-query+recentchanges-param-token": "请改用[[Special:ApiHelp/query+tokens|action=query&meta=tokens]]。",
+       "apihelp-query+recentchanges-param-limit": "返回的总计更新数。",
+       "apihelp-query+recentchanges-param-type": "显示的更改类型。",
        "apihelp-query+recentchanges-example-simple": "最近更改列表",
+       "apihelp-query+redirects-description": "返回至指定页面的所有重定向。",
        "apihelp-query+redirects-param-namespace": "只包含这些名字空间的页面。",
        "apihelp-query+redirects-param-limit": "返回多少重定向。",
        "apihelp-query+redirects-example-simple": "获取至[[Project:首页]]的重定向列表",
        "apihelp-query+templates-param-namespace": "只显示此名字空间的模板。",
        "apihelp-query+templates-param-limit": "返回多少模板。",
        "apihelp-query+templates-param-templates": "只列出这些模板。对于检查某一页面使用某一模板很有用。",
+       "apihelp-query+templates-param-dir": "罗列所采用的方向。",
        "apihelp-query+templates-example-simple": "从[[首页]]获取模板",
        "apihelp-query+templates-example-generator": "获取有关[[首页]]中的模板页面的信息",
        "apihelp-query+templates-example-namespaces": "从[[首页]]获取用户和模板名字空间中的模板",
index fd87b15..7f0f39d 100644 (file)
        "config-mysql-myisam": "MyISAM",
        "config-mysql-myisam-dep": "<strong>Cảnh báo:</strong> Bạn đã chọn MyISAM làm động cơ lưu trữ cho MySQL, điều này không được khuyến khích sử dụng với MediaWiki, bởi vì:\n* Nó ít hỗ trợ đồng thời do việc khóa bảng\n* Nó dễ bị lỗi hơn so với các động cơ khác\n* Kho mã nguồn của MediaWiki không phải khi nào cũng xử lý MyISAM như mong muốn\n\nNếu cài đặt MySQL của bạn hỗ trợ InnoDB, đặc biệt khuyến cáo bạn nên chọn để thay thế.\nNếu cài đặt MySQL của bạn không hỗ trợ InnoDB, có lẽ đã đến lúc để nâng cấp.",
        "config-mysql-only-myisam-dep": "<strong>Cảnh báo:</strong> MyISAM chỉ là công cụ lưu trữ có sẵn cho MySQL trên máy tính này, và điều này không được khuyến khích sử dụng với MediaWiki, bởi vì:\n* Nó ít hỗ trợ đồng thời do việc khóa khóa\n* Nó là dễ bị hư hỏng hơn các engine khác\n* Codebase MediaWiki không phải khi nào cũng xử lý MyISAM như mong muốn\n\nCài đặt MySQL của bạn không hỗ trợ InnoDB, có lẽ đã đến lúc để nâng cấp.",
+       "config-mysql-engine-help": "<strong>InnoDB</strong> hầu như luôn là tùy chọn tốt nhất, vì nó có hỗ trợ đồng thời rất tốt.\n\n<strong>MyISAM</strong> có thể nhanh hơn trong chế độ một người dùng hoặc các cài đặt chỉ-đọc (read-only).\nCơ sở dữ liệu MyISAM có xu hướng thường xuyên bị hỏng hóc hơn so với cơ sở dữ liệu InnoDB.",
        "config-mysql-charset": "Bảng mã cơ sở dữ liệu:",
        "config-mysql-binary": "Nhị phân",
        "config-mysql-utf8": "UTF-8",
+       "config-mysql-charset-help": "Trong <strong>chế độ nhị phân</strong>, MediaWiki lưu văn bản UTF-8 vào cơ sở dữ liệu trong các trường nhị phân.\nĐiều này hiệu quả hơn so với chế độ UTF-8 của MySQL, và cho phép bạn sử dụng đầy đủ các ký tự Unicode.\n\nTrong <strong>chế độ UTF-8 </strong>, MySQL sẽ biết những ký tự nào thiết lập dữ liệu của bạn, và có thể trình bày và chuyển đổi nó một cách thích hợp, nhưng nó sẽ không cho phép bạn lưu trữ các ký tự nằm trên [//en.wikipedia.org/wiki/Mapping_of_Unicode_character_planes Basic Multilingual Plane].",
        "config-mssql-auth": "Kiểu xác thực:",
+       "config-mssql-install-auth": "Chọn loại xác thực sẽ được sử dụng để kết nối với cơ sở dữ liệu trong quá trình cài đặt.\nNếu bạn chọn \"{{int:config-mssql-windowsauth}}\", thông tin của bất cứ người sử dụng nào mà máy chủ web đang chạy sẽ được sử dụng.",
+       "config-mssql-web-auth": "Chọn kiểu xác thực mà máy chủ web sẽ sử dụng để kết nối đến máy chủ cơ sở dữ liệu, trong quá trình hoạt động bình thường của wiki.\nNếu bạn chọn \"{{int:config-mssql-windowsauth}}\", thông tin của bất cứ người sử dụng nào mà máy chủ web đang hoạt động sẽ được sử dụng.",
        "config-mssql-sqlauth": "Xác thực SQL Server",
        "config-mssql-windowsauth": "Xác thực Windows",
        "config-site-name": "Tên wiki:",
+       "config-site-name-help": "Điều này sẽ xuất hiện trên thanh tiêu đề của trình duyệt và ở những nơi khác.",
        "config-site-name-blank": "Nhập tên của trang Web.",
        "config-project-namespace": "Không gian tên dự án:",
        "config-ns-generic": "Dự án",
        "config-ns-site-name": "Cùng với tên wiki: $1",
        "config-ns-other": "Khác (định rõ)",
        "config-ns-other-default": "WikiTôi",
+       "config-project-namespace-help": "Ví dụ sau đây của Wikipedia, nhiều wiki tách các trang sách họ với các trang nội dung, trong một \"''' không gian tên dự án'''\".\nTất cả các tiêu đề trang trong không gian tên này bắt đầu với một tiền tố nhất định, bạn có thể xác định ở đây.\nThông thường, tiền tố này được bắt nguồn từ tên của wiki, nhưng nó không thể chứa các ký tự đặc biệt như \"#\" hoặc \":\".",
+       "config-ns-invalid": "Không gian tên cụ thể \"<nowiki>$1</nowiki>\" không hợp lệ.\nXác định một không gian tên dự án khác.",
+       "config-ns-conflict": "Không gian tên cụ thể \"<nowiki>$1</nowiki>\" xung đột với một không gian tên MediaWiki mặc định.\nXác định một không gian tên dự án khác.",
        "config-admin-box": "Tài khoản bảo quản viên",
        "config-admin-name": "Tên người dùng của bạn:",
        "config-admin-password": "Mật khẩu:",
        "config-admin-password-confirm": "Nhập lại mật khẩu:",
+       "config-admin-help": "Nhập tên người dùng ưa thích ở đây, ví dụ như \" Joe Bloggs\" .\nĐây là tên mà bạn sẽ sử dụng để đăng nhập vào wiki.",
        "config-admin-name-blank": "Nhập tên người dùng của bảo quản viên.",
+       "config-admin-name-invalid": "Tên người dùng cụ thể \"<nowiki>$1</nowiki>\" không hợp lệ.\nChỉ định một tên người dùng khác.",
        "config-admin-password-blank": "Nhập mật khẩu của tài khoản bảo quản viên.",
        "config-admin-password-mismatch": "Bạn đã nhập hai mật khẩu không khớp với nhau.",
        "config-admin-email": "Địa chỉ thư điện tử:",
+       "config-admin-email-help": "Nhập một địa chỉ email vào đây để cho phép bạn nhận được email từ những người dùng khác trên wiki, thiết lập lại mật khẩu của bạn, và sẽ được thông báo về những thay đổi trong các trang nằm trong danh sách theo dõi của bạn. Bạn có thể để trống trường này.",
+       "config-admin-error-user": "Lỗi nội bộ khi tạo một admin với tên <nowiki>$1</nowiki>\".",
+       "config-admin-error-password": "Lỗi nội bộ khi thiết lập một mật khẩu cho admin \" <nowiki>$1</nowiki>\": <pre>$2</pre>",
        "config-admin-error-bademail": "Bạn đã nhập một địa chỉ thư điện tử không hợp lệ.",
        "config-subscribe": "Theo dõi [https://lists.wikimedia.org/mailman/listinfo/mediawiki-announce danh sách thư thông báo phát hành].",
+       "config-subscribe-help": "thông báo an ninh.\nBạn nên đồng ý với nó và cập nhật bản cài đặt MediaWiki của bạn khi phiên bản mới xuất hiện.",
+       "config-subscribe-noemail": "Bạn đã cố gắng để đăng ký vào danh sách nhận thư thông báo phát hành mà không cung cấp một địa chỉ email nào cả.\nVui lòng cung cấp một địa chỉ email nếu bạn muốn đăng ký vào danh sách nhận thư.",
+       "config-almost-done": "Bạn gần như đã hoàn tất!\nBây giờ bạn có thể bỏ qua cấu hình còn lại và cài đặt wiki ngay bây giờ.",
        "config-optional-continue": "Hỏi tôi về thêm chi tiết.",
        "config-optional-skip": "Chán quá, cài đặt wiki rỗi.",
        "config-profile": "Hồ sơ quyền người dùng:",
        "config-email-user": "Cho phép người dùng gửi thư điện tử cho người dùng khác",
        "config-email-usertalk": "Gửi thư thông báo về tin nhắn mới",
        "config-email-watchlist": "Gửi thư thông báo về bài theo dõi",
+       "config-email-watchlist-help": "Cho phép người dùng nhận được thông báo về các trang theo dõi của họ nếu họ đã kích hoạt nó trong ưu tiên của họ.",
        "config-email-auth": "Xác minh qua thư điện tử",
        "config-email-sender": "Địa chỉ thư điện tử trả lại:",
        "config-upload-settings": "Hình ảnh và tập tin tải lên",
        "config-upload-deleted": "Thư mục chứa các tập tin đã xóa:",
        "config-logo": "URL biểu trưng:",
        "config-instantcommons": "Kích hoạt Instant Commons",
+       "config-cc-error": "Người chọn giấy phép Creative Commons đã không đưa ra kết quả nào.\nNhập tên giấy phép bằng tay.",
        "config-cc-again": "Chọn một lần nữa…",
        "config-cc-not-chosen": "Chọn một giấy phép Creative Commons và bấm “Tiếp tục”.",
        "config-advanced-settings": "Thiết lập nâng cao",
        "config-cache-accel": "Bộ nhớ đệm đối tượng PHP (APC, XCache, hoặc WinCache)",
        "config-cache-memcached": "Sử dụng Memcached (cần thiết lập và cấu hình thêm)",
        "config-memcached-servers": "Máy chủ Memcached:",
+       "config-memcached-help": "Danh sách các địa chỉ IP để sử dụng cho Memcached .\nNên xác định trên một dòng và chỉ định các cổng được sử dụng. Ví dụ:\n 127.0.0.1:11211\n 192.168.1.25:1234",
        "config-memcache-needservers": "Bạn đã chọn Memcached là loại bộ nhớ đệm nhưng không định rõ máy chủ nào.",
        "config-memcache-badip": "Bạn đã nhập một địa chỉ IP không hợp lệ cho Memcached: $1.",
+       "config-memcache-noport": "Bạn không thể chỉ định một cổng để sử dụng cho máy chủ Memcached:$1.\nNếu bạn không biết cổng nào, mặc định là 11211.",
        "config-memcache-badport": "Số cổng Memcached phải từ $1 đến $2.",
        "config-extensions": "Phần mở rộng",
+       "config-extensions-help": "Mở rộng được liệt kê ở trên đã được phát hiện trong thư mục <code>./extensions</code> của bạn.\n\nChúng có thể yêu cầu thêm cấu hình, nhưng bạn có thể kích hoạt chúng ngay bây giờ.",
        "config-skins": "Giao diện",
        "config-skins-use-as-default": "Dùng giao diện này làm mặc định",
        "config-skins-must-enable-some": "Phải chọn ít nhất một giao diện để kích hoạt.",
index 9b98592..a0a3c69 100644 (file)
@@ -2029,7 +2029,8 @@ class WikiPage implements Page, IDBAccessObject {
         * Returns a stdClass with source, pst and output members
         *
         * @param Content $content
-        * @param int|null $revid
+        * @param Revision|int|null $revision Revision object. For backwards compatibility, a
+        *        revision ID is also accepted, but this is deprecated.
         * @param User|null $user
         * @param string|null $serialFormat
         * @param bool $useCache Check shared prepared edit cache
@@ -2039,10 +2040,23 @@ class WikiPage implements Page, IDBAccessObject {
         * @since 1.21
         */
        public function prepareContentForEdit(
-               Content $content, $revid = null, User $user = null, $serialFormat = null, $useCache = true
+               Content $content, $revision = null, User $user = null, $serialFormat = null, $useCache = true
        ) {
                global $wgContLang, $wgUser, $wgAjaxEditStash;
 
+               if ( is_object( $revision ) ) {
+                       $revid = $revision->getId();
+               } else {
+                       $revid = $revision;
+                       // This code path is deprecated, and nothing is known to
+                       // use it, so performance here shouldn't be a worry.
+                       if ( $revid !== null ) {
+                               $revision = Revision::newFromId( $revid, Revision::READ_LATEST );
+                       } else {
+                               $revision = null;
+                       }
+               }
+
                $user = is_null( $user ) ? $wgUser : $user;
                //XXX: check $user->getId() here???
 
@@ -2092,6 +2106,25 @@ class WikiPage implements Page, IDBAccessObject {
                if ( $cachedEdit ) {
                        $edit->output = $cachedEdit->output;
                } else {
+                       if ( $revision ) {
+                               // We get here if vary-revision is set. This means that this page references
+                               // itself (such as via self-transclusion). In this case, we need to make sure
+                               // that any such self-references refer to the newly-saved revision, and not
+                               // to the previous one, which could otherwise happen due to slave lag.
+                               $oldCallback = $edit->popts->setCurrentRevisionCallback(
+                                       function ( $title, $parser = false ) use ( $revision, &$oldCallback ) {
+                                               if ( $title->equals( $revision->getTitle() ) ) {
+                                                       return $revision;
+                                               } else {
+                                                       return call_user_func(
+                                                               $oldCallback,
+                                                               $title,
+                                                               $parser
+                                                       );
+                                               }
+                                       }
+                               );
+                       }
                        $edit->output = $edit->pstContent
                                ? $edit->pstContent->getParserOutput( $this->mTitle, $revid, $edit->popts )
                                : null;
@@ -2142,7 +2175,7 @@ class WikiPage implements Page, IDBAccessObject {
                // already pre-save transformed once.
                if ( !$this->mPreparedEdit || $this->mPreparedEdit->output->getFlag( 'vary-revision' ) ) {
                        wfDebug( __METHOD__ . ": No prepared edit or vary-revision is set...\n" );
-                       $editInfo = $this->prepareContentForEdit( $content, $revision->getId(), $user );
+                       $editInfo = $this->prepareContentForEdit( $content, $revision, $user );
                } else {
                        wfDebug( __METHOD__ . ": No vary-revision, using prepared edit...\n" );
                        $editInfo = $this->mPreparedEdit;
index 117e04a..e9e72be 100644 (file)
@@ -489,9 +489,10 @@ class ParserOutput extends CacheTime {
         * Add a tracking category, getting the title from a system message,
         * or print a debug message if the title is invalid.
         *
-        * Please add any message that you use with this function to
-        * $wgTrackingCategories. That way they will be listed on
-        * Special:TrackingCategories.
+        * Any message used with this function should be registered so it will
+        * show up on Special:TrackingCategories. Core messages should be added
+        * to SpecialTrackingCategories::$coreTrackingCategories, and extensions
+        * should add to "TrackingCategories" in their extension.json.
         *
         * @param string $msg Message key
         * @param Title $title title of the page which is being tracked
index 45bea64..fe86ca9 100644 (file)
@@ -11,7 +11,6 @@ class ExtensionProcessor implements Processor {
                'ResourceLoaderSources',
                'ResourceLoaderLESSVars',
                'ResourceLoaderLESSImportPaths',
-               'TrackingCategories',
                'DefaultUserOptions',
                'HiddenPrefs',
                'GroupPermissions',
@@ -129,7 +128,8 @@ class ExtensionProcessor implements Processor {
                foreach ( $info as $key => $val ) {
                        if ( in_array( $key, self::$globalSettings ) ) {
                                $this->storeToArray( "wg$key", $val, $this->globals );
-                       } elseif ( !in_array( $key, $this->processed ) ) {
+                       // Ignore anything that starts with a @
+                       } elseif ( $key[0] !== '@' && !in_array( $key, $this->processed ) ) {
                                $this->storeToArray( $key, $val, $this->attributes );
                        }
                }
index 999dda8..752387b 100644 (file)
@@ -837,9 +837,12 @@ abstract class Skin extends ContextSource {
        function getPoweredBy() {
                global $wgResourceBasePath;
 
-               $url = htmlspecialchars( "$wgResourceBasePath/resources/assets/poweredby_mediawiki_88x31.png" );
-               $text = '<a href="//www.mediawiki.org/"><img src="' . $url
-                       . '" height="31" width="88" alt="Powered by MediaWiki" /></a>';
+               $url1 = htmlspecialchars( "$wgResourceBasePath/resources/assets/poweredby_mediawiki_88x31.png" );
+               $url1_5 = htmlspecialchars( "$wgResourceBasePath/resources/assets/poweredby_mediawiki_132x47.png" );
+               $url2 = htmlspecialchars( "$wgResourceBasePath/resources/assets/poweredby_mediawiki_176x62.png" );
+               $text = '<a href="//www.mediawiki.org/"><img src="' . $url1
+                       . '" srcset="' . $url1_5 . ' 1.5x, ' . $url2 . ' 2x" '
+                       . 'height="31" width="88" alt="Powered by MediaWiki" /></a>';
                Hooks::run( 'SkinGetPoweredBy', array( &$text, $this ) );
                return $text;
        }
index 7684c05..d219c99 100644 (file)
@@ -36,6 +36,24 @@ class SpecialTrackingCategories extends SpecialPage {
                parent::__construct( 'TrackingCategories' );
        }
 
+       /**
+        * Tracking categories that exist in core
+        *
+        * @var array
+        */
+       private static $coreTrackingCategories = array(
+               'index-category',
+               'noindex-category',
+               'duplicate-args-category',
+               'expensive-parserfunction-category',
+               'post-expand-template-argument-category',
+               'post-expand-template-inclusion-category',
+               'hidden-category-category',
+               'broken-file-category',
+               'node-count-exceeded-category',
+               'expansion-depth-exceeded-category',
+       );
+
        function execute( $par ) {
                $this->setHeaders();
                $this->outputHeader();
@@ -120,8 +138,13 @@ class SpecialTrackingCategories extends SpecialPage {
         * @return array Array( 'msg' => Title, 'cats' => Title[] )
         */
        private function prepareTrackingCategoriesData() {
+               $categories = array_merge(
+                       self::$coreTrackingCategories,
+                       ExtensionRegistry::getInstance()->getAttribute( 'TrackingCategories' ),
+                       $this->getConfig()->get( 'TrackingCategories' ) // deprecated
+               );
                $trackingCategories = array();
-               foreach ( $this->getConfig()->get( 'TrackingCategories' ) as $catMsg ) {
+               foreach ( $categories as $catMsg ) {
                        /*
                         * Check if the tracking category varies by namespace
                         * Otherwise only pages in the current namespace will be displayed
index 1dfdb60..7932026 100644 (file)
        "talk": "चर्चा",
        "views": "दर्शाव",
        "toolbox": "साधन पेटी",
-       "userpage": "सदसà¥\8dय à¤ªà¤¨à¥\8dना à¤¦à¥\87à¤\96à¥\8b",
+       "userpage": "सदसà¥\8dय à¤ªà¤¨à¥\8dना à¤¦à¥\87à¤\96ा à¤\9cाय",
        "projectpage": "परियोजना पन्ना देखा जाय",
        "imagepage": "फ़ाइल पन्ना देखा जाय",
        "mediawikipage": "सनेशा पन्ना देखा जाय",
        "createaccount-text": "आप कय ई-मेल ठहर कय खर्तीन केहु दुसर {{SITENAME}} ($4) पे \"$2\" सदस्य नाँव से \"$3\" गुप्तकुंजी (पासवर्ड) सहित खाता खोले हैं।\nआप कय लॉग इन कइकै आपन गुप्त कुंजी (पासवर्ड) तुरंतय बदल लेक चाहि।\n\nयदि इ खाता गलती से खोला गा है, तव आप इ मैसेज कय अनदेखा कै सका जात है।",
        "login-throttled": "आप अबहिनय में कयु दाँइ लॉग इन करेक प्रयास किहा गा है।\nफिरसे प्रयास करय से पहीले तनी $1 रुका जाय।",
        "login-abort-generic": "आप कय लाग-इन असफल रहा - निष्फलित",
+       "login-migrated-generic": "आप कै खाता घुस्काई गय,अब आप कय सदस्य नाँव इ विकि पे नाई अहै ।",
        "loginlanguagelabel": "भाषा: $1",
        "suspicious-userlogout": "आप कय लॉग आउट करेक चिरौरी अस्वीकृत कई दिहा गा है काहे से अइसन लागत हय है कि ई कवनो खराब ब्राउज़र या कैश करय वाला प्रॉक्सी से भेजा ग रहा।",
        "createacct-another-realname-tip": "असली नाँव देब आवश्यक नाई है।\nयदि आप देवा जाई तव एकर प्रयोग सदस्यन् कय योगदान कय लिये श्रेय (attribution) देक लिये कई जाई।",
        "changeemail-submit": "ई-मेल बदला जाय",
        "changeemail-throttled": "आप अबहिनय में कयु दाँइ लॉग इन करेक प्रयास किहा गा है।\nफिरसे प्रयास करय से पहीले तनी $1 रुका जाय।",
        "resettokens": "टोकन रीसेट करा जाय",
+       "resettokens-text": "जो टोकन आपके खाते से सम्बद्ध कुछ विशिष्ट व्यक्तिगत जानकारी प्रदान करते हैं, आप उन्हें यहाँ रीसेट कर सकते हैं।\n\nयदि आपने उन्हें गलती से किसी को दिखा दिया है या फिर आपका खाता हैक हो गया है तो आपको इन्हें रीसेट कर देना चाहिए।",
        "resettokens-no-tokens": "रीसेट करेक लिए कवनो टोकन नाई है।",
        "resettokens-legend": "टोकन रीसेट करा जाय",
        "resettokens-tokens": "टोकन:",
        "anoneditwarning": "<strong>चेतावनी:</strong>आप लाग इन नाई करा गा है ।जब आप सम्पादन करा जाई तव आप कय IP address सब कय बिलगाइ। जब आप <strong>[$1 log in]</strong> या <strong>[$2 create an account]</strong> करा जाइ तब आप कय सम्पादन आप कय  सदस्यनाँव से जुडी जाई अव आप कय अउर सुविधओ मिली।",
        "anonpreviewwarning": "''आप लॉग्ड नाई होआ जात है। पन्ना सहेजे पे आप कय आइ॰पी ठाँव इ पन्ना कय इतिहास में दर्ज कइ जाई।''",
        "missingsummary": "'''ध्यान दिहा जाय:''' आप  संपादन सारांश नाइ दिहा गा है।\nअगर आप दुबारा \"{{int:savearticle}}\" पे क्लिक करा जाई तव आप कय संपादन बिना सारांश कय सहेज जाई।",
+       "selfredirect": "<strong>चेतावनी:</strong> आप इ पन्नवा कय इहि से निर्देश करय जावा जात है.\nआप या तव गलत लक्ष्य पे पुनर्निर्देश करा गा है, या तव गलत पन्ना संपादन करा जात है ।\nअगर आप \"{{int:savearticle}}\" पे फिरसे क्लिक करा जाइ तो इ पुनर्निर्देश बनि जाइ ।",
        "missingcommenttext": "कृपया नीचे टिप्पणी दिहा जाय।",
        "missingcommentheader": "'''ध्यान दिहा जाय:''' आप इ टिप्पणी कय कवनो शिर्षक नाइ दिहा गा है।\nअगर आप दुबारा \"{{int:savearticle}}\" पे क्लिक करा जाई तव आप कय बदलाव बिना शिर्षक कय सहेज जाई।",
        "summary-preview": "सारांश कय झलक:",
        "session_fail_preview": "'''क्षमा करा जाय! सेशन डाटा कय नष्ट होएक कारण आप कय बदलाव नाई सहेज मिला।'''\nकृपया फिरेसे प्रयास करा जाय।\nअगर एकरे बाद़ोमें अइसनय होइ तव कृपया [[Special:UserLogout|लॉग आउट]] कई कय फिरसे लॉग इन करा जाय।",
        "session_fail_preview_html": "'''क्षमा करा जाय! सेशन डाटा नष्ट होएक नाते आपकय बदलाव नाई सहेजि गय।'''\n\n''काहे से {{SITENAME}} पे raw HTML सक्षम है, जावास्क्रिप्ट हमलन् से बचाव कय खर्तिन झलक नाइ देखाई गा है।''\n\n'''अगर ई आप कय सहि संपादन प्रयास रह, तव कृपया फिरसे प्रयास करा जाय।'''\nअगर एकरे बाद़ोमें अइसनय होइ तव कृपया [[Special:UserLogout|लॉग आउट]] कैकय फिरसे लॉग इन करा जाय।",
        "token_suffix_mismatch": "'''आप कय करल बदलाव रद्द कै गा है काह से आपकय क्लायंट आपकय संपादन टोकन में दिहा विरामचिन्हन् में बदलाव करे हैं।'''\nलेख कय पाठ में खराबी ना आवे इहि कय नाते आपकय बदलाव रद्द कै गा है।\nअइसन तब्बय होइ सकत है जब आप कवनव खराब वेब-आधारित अनामक प्रौक्सी प्रयोग करा जात होय।",
+       "edit_form_incomplete": "'''सम्पादन फ़ॉर्म कय कुछ हिस्सा सर्वर तक नाइ पहुँच पाए; जाँच लिहा जाय कि आप कय द्वारा करल बदलाव वइसय है कि नाइ, अउर सहेजय कय प्रयास करा जाय।'''",
        "editing": "$1 सम्पादन",
        "creating": "$1 बनावा जात है",
        "editingsection": "$1 सम्पादन करा जात है (अनुभाग)",
        "editingcomment": "$1 सम्पादन करा जात है (नँवा अनुभाग)",
        "editconflict": "संपादन अंतर्विरोध: $1",
+       "explainconflict": "आप कय द्वारा सम्पादन शुरू करय कय बाद से कवनो दुसर मनई इ पन्ना में बदलाव करे हैं।\nऊपरी पाठ सम्पादन क्षेत्र में अभिन कय पाठ देखाइ गा है।\nनिचला क्षेत्र में आप कय बदलाव देखाइ गा है।\nआप कय आपन बदलाव अबहिन कय पाठ में अपने से एकट्ठा करेक परि।\nआपके \"{{int:savearticle}}\" पर क्लिक करने पर '''केवल''' ऊपरी क्षेत्र में दिखने वाला पाठ संजोया जायेगा।",
        "yourtext": "आप कय पाठ",
        "storedversion": "सहेज़ल अवतरण",
+       "nonunicodebrowser": "'''सावधान: आप कय ब्राउज़र युनिकोड कय स्वीकार नाइ करत है।'''\nआप से बढिया संपादन होएक लिये: ग़ैर-ASCII कैरैक्टर षट्‍पदी कोड (hexadecimal) में देखाइ जाई।",
+       "editingold": "'''चेतावनी: आप इ पन्ना कय पुरान(Out of Date) अवतरण संपादित करा जात है।'''\nअगर आप एका सहेजा जाइ , तव इ अवतरण कय बाद करल कुल बदलाव नष्ट होइ जाइ।",
        "yourdiff": "अंतर",
+       "copyrightwarning": "कृपया ध्यान दिहा जाय कि {{SITENAME}} मे करल कुल योगदान $2 शर्त कय निचे होंइ (ढेर जानकारी कय लिये $1 देखा जाय)।\nयदि आप आपन योगदान कय लगातार बदलत अव फिर से बटत़ नाइ देखय चाहा जात है तव यँह योगदान ना करा जाय।<br />\nआप इहो भी प्रमाणित करा जात है कि इ आप अपने से लिखा गा है या सार्वजनिक क्षेत्र या कवनो समान मुक्त स्रोत से प्रतिलिपित करा गा है।\n'''कॉपीराइट सुरक्षित काम कय बिना अनुमति कय यहँ ना करा जाय!'''",
+       "copyrightwarning2": "{{SITENAME}} पे करल कवनो भी योगदान अउर सदस्य लोग बदलि या हटाइ सकत हैँ ।\nयदि आप आपन योगदान कय लगातार बदलत अव फिर से बटत़ नाइ देखय चाहा जात है तव यँह योगदान ना करा जाय।<br />\nआप इहो भी प्रमाणित करा जात है कि इ आप अपने से लिखा गा है या सार्वजनिक क्षेत्र या कवनो समान मुक्त स्रोत से प्रतिलिपित करा गा है।\n'''कॉपीराइट सुरक्षित काम कय बिना अनुमति कय यहँ ना करा जाय!'''",
+       "longpageerror": "'''त्रुटि: आप कय दिहा पाठ {{PLURAL:|$1 किलोबाइट|$1 किलोबाइट}} लंमा है, जवन {{PLURAL:|$2 किलोबाइट|$2 किलोबाइट}} कय सीमा से बहरे है।\nएका नाइ सहेज सका जात है।'''",
+       "readonlywarning": "'''सावधान: डाटाबेस कय रख-रखाव कय खत्तिर बंद कै दिहा गा है, इहि कय नाते आप कय बदलाव अभीन नाइ सहेजि सका जात है।\nअगर आप चाहा जाय तव इ चिज कय बाद कय खत्तिर कॉपी-पेस्ट कइकय कवनो टेक्स्ट फ़ाइल में रखि सका जात है।'''\n\nबंद करय वाले प्रबंधक बंद करे कय इ कारण दिहे हैं: $1",
        "protectedpagewarning": "'''चेतावनी: इ पन्ना कय सुरक्षित कई  गा है अव एका खालि प्रबंधक सम्पादित कई सकत हँय।'''\nनँवा लॉग प्रविष्टि संदर्भ कय लिये नीचे दीहा है:",
        "semiprotectedpagewarning": "<strong>नोट:</strong> ई पन्ना बचावा है इही कय नाते खालि रजिष्टर करल सदस्य एका सम्पादन कई सकत हैं ।\nसंदर्भ कय खर्तिन अन्तिम दाइ कय लाग निचे दिहा है:",
-       "templatesused": "ई पन्ना इस्तेमाल करल {{PLURAL:$1|साँचा}}:",
+       "cascadeprotectedwarning": "'''सावधान:''' इ पन्ना निचे दिहा सुरक्षा-सीढ़ी {{PLURAL:$1|पन्ना से|पन्नन् से}} जोडाएक नाते सुरक्षित है, अव खाली प्रबंधक एहमा बदलाव कै सकत हैं:",
+       "titleprotectedwarning": "'''चेतावनी: इ पन्ना सुरक्षित है अव एका बनावेक खत्तिर [[Special:ListGroupRights|विशेष अधिकारन्]] कय आवश्यकता है।'''\nसंदर्भ कय खत्तिर नँवा लॉग प्रविष्टि नीचे दीहा है:",
+       "templatesused": "ई पन्ना में इस्तेमाल करल {{PLURAL:$1|साँचा}}:",
+       "templatesusedpreview": "ई झलक में इस्तेमाल करल {{PLURAL:$1|साँचा}}:",
        "templatesusedsection": "ई अनुभागमें इस्तेमाल करल {{PLURAL:$1|साँचा}}:",
        "template-protected": "(सुरक्षित)",
        "template-semiprotected": "(अर्ध-सुरक्षित)",
        "content-model-javascript": "जावास्क्रिप्ट",
        "content-json-empty-object": "खाली चिज",
        "content-json-empty-array": "खाली एरे",
+       "expensive-parserfunction-warning": "'''चेतावनी:''' इ पन्ना पे बहुत ढेर संख्या में कीमती पार्सर फ़ंक्शनों कय प्रयोग कई गा है।\n\nएकर प्रयोग $2 से कम दाइ होएक चाहि, इ समय प्रयोग $1 दाइ कै गा {{PLURAL:$1|है}}।",
        "expensive-parserfunction-category": "अईसन पन्ना जवन महङा पार्सर फ़ंक्शनन् कय ढेर प्रयोग करत हैं",
        "post-expand-template-inclusion-warning": "'''चेतावनी:''' साँचा जोडे कय सीमा पार होई चुका है।\nकवनो-कवनो साँचा नाई जुड़ी।",
        "post-expand-template-inclusion-category": "अईसन पन्ना जवने मे साँचा जोड़े कय सीमा पार होई गवा है",
+       "post-expand-template-argument-warning": "'''चेतावनी:''' इ पन्ना पे कवनो साँचा में कम-से-कम एकठु अइसन प्राचल है जवन बढ़ावे पे बहुत बड़ा होइ जाइ।\nअइसन प्राचलन् कय छोड़ दिहा गा है।",
        "post-expand-template-argument-category": "अईसन पन्ना जवनेमें प्राचल छोड़ी दिहा है",
        "parser-template-loop-warning": "साँचा चक्र मिला: [[$1]]",
        "parser-template-recursion-depth-warning": "साँचा पुनरावर्ती गहराई सीमा पार ($1)",
        "userrights-groupsmember": "निचे कय {{PLURAL:$1|समूह|समूहन्}} कय सदस्य:",
        "userrights-groupsmember-auto": "निचे कय {{PLURAL:$1|समूह|समूहन्}} कय अंतर्निहित सदस्य:",
        "userrights-reason": "कारण:",
+       "userrights-changeable-col": "गोल (ग्रुप) जवन आप बदलि सका जात है ।",
+       "userrights-unchangeable-col": "गोल (ग्रुप) जवन आप नाइ बदलि सका जात है ।",
+       "userrights-conflict": "सदस्य अधिकार बदलाव में अंतर्विरोध! कृपया आपन बदलाव जाँचा जाय और फिरसे सुनिश्चित करा जाय।",
+       "userrights-removed-self": "आप सफलतापूर्वक आपन अधिकार हटाए दिहा गए। इहिक नाते अब आप इ पन्ना नाइ देख सका जात है।",
        "group": "गोल:",
        "group-user": "सदस्य:",
        "group-autoconfirmed": "अपने आप बनल सदस्य",
        "right-purge": "पन्ना कय कैश मेमोरी खाली करा जाय",
        "right-autoconfirmed": "आई॰पी ठहर आधारित रेट लिमिट्स से बेअसर होई जाय",
        "right-bot": "स्वचलित प्रणाली माना जाय",
+       "right-nominornewtalk": "बातचीत पन्नन पे छोट बदलाव करय पे सदस्यन् कय \"आप कय खत्तिर नँवा सनेशा है\" पट्टी ना देखावा जाय",
+       "right-apihighlimits": "API पुँचताँछ में ऊँच सीमा प्रयोग करा जाय",
+       "right-writeapi": "लेखन ए॰पी॰आई कय प्रयोग करा जाय",
        "right-delete": "पन्ना मेटावा जाय",
        "right-bigdelete": "ढेर इतिहास वाले पन्नन्  कय हटावा जाय",
        "right-deletelogentry": "विशिष्ट लॉग प्रविष्टिन् कय लुकुआवा जाय अव देखावा जाय",
+       "right-deleterevision": "पन्नन कय विशिष्ट अवतरण हटावा जाय या पुनर्स्थापित करा जाय",
+       "right-deletedhistory": "हटावल इतिहास सूची, ओकरे साथे मिलय वाला पाठ कय बिना देखा जाय",
        "right-browsearchive": "हटावल पन्ना खोजा जाय",
        "right-undelete": "ई पन्ना कय पुनर्स्थापित करा जाय।",
        "right-suppressionlog": "खासगी लॉग देखा जाय",
        "statistics-header-hooks": "अउर आँकड़ा",
        "statistics-articles": "सामग्री पन्ना",
        "statistics-pages": "पन्ना",
+       "statistics-files": "अपलोड करल फाइल",
+       "statistics-edits": "{{SITENAME}} बनै कय बाद संपादन करल पन्ना",
+       "statistics-edits-average": "प्रति पन्ना औसत संपादन",
+       "statistics-users": "पंजीकृत [[Special:ListUsers|सदस्य]]",
+       "statistics-users-active": "सक्रिय सदस्य",
+       "pageswithprop": "पन्ना जवनन में पन्ना गुण है",
+       "pageswithprop-legend": "पन्ना जवनन में पन्ना गुण है",
+       "pageswithprop-prop": "गुण कय नाँव:",
+       "pageswithprop-submit": "खोजा जाय",
+       "doubleredirects": "दुईठु पुनर्निर्देश",
+       "double-redirect-fixer": "पुनर्निर्देशन मिस्त्री",
+       "brokenredirects": "टूटल पुनर्निर्देशन पन्ना",
+       "brokenredirects-edit": "सम्पादन करा जाय",
+       "brokenredirects-delete": "मेटावा जाय",
+       "withoutinterwiki": "बिना अंतरविकि कड़ि वाले पन्ना",
+       "withoutinterwiki-legend": "उपसर्ग",
        "withoutinterwiki-submit": "देखावा जाय",
        "fewestrevisions": "सबसे कम अवतरण वाला पन्ना",
        "nbytes": "$1 {{PLURAL:$1|बाइट|बाइट}}",
        "linksearch-ns": "नामस्थान:",
        "linksearch-ok": "खोजा जाय",
        "linksearch-line": "$2 में से $1 जोडान है",
+       "linksearch-error": "वाईल्डकार्ड्स होस्टनाम कय खालि शुरू में आइ सकत है।",
        "listusersfrom": "इ अक्षर से शुरु होय वाले सदस्य देखावा जाय:",
        "listusers-submit": "देखावा जाय",
        "listusers-noresult": "कवनो सदस्य नाइ मिला ।",
        "trackingcategories": "ट्रैक करय वाले श्रेणी",
        "trackingcategories-msg": "ट्रैक करय वाले श्रेणी",
        "trackingcategories-name": "सनेशा कय नाँव",
+       "trackingcategories-nodesc": "कवनो ढेर जानकारी नाइ है ।",
+       "trackingcategories-disabled": "श्रेणी अक्षम करा है",
+       "mailnologin": "कवनो पठवे वाला ठहर नाइ है",
+       "mailnologintext": "अउर सदस्यन् कय इ-मेल पठवे खत्तिर [[Special:UserLogin|लॉग इन]] करब आवश्यक है औ आप कय [[Special:Preferences|पसंद]] में वैध ई-मेल ठहर होब जरुरी है।",
+       "emailuser": "इ सदस्य कय ई-मेल पठवा जाय",
+       "emailuser-title-target": "इ {{GENDER:$1|सदस्य|सदस्या}} कय ई-मेल करा जाय।",
+       "emailuser-title-notarget": "सदस्य कय ई-मेल करा जाय",
+       "emailpage": "सदस्य कय ई-मेल करा जाय",
+       "defemailsubject": "{{SITENAME}} ई-मेल \"$1\" सदस्य से",
+       "usermaildisabled": "सदस्य ई-मेल अक्षम कै गय",
+       "usermaildisabledtext": "आप इ विकि पे अउर सदस्यन् कय ई-मेल नाइ भेज सका जात है",
+       "noemailtitle": "कवनो ई-मेल एड्रेस नाइ है",
+       "noemailtext": "इ सदस्य वैध ई-मेल ठहर नाइ दिहे हैं।",
+       "emailusername": "सदस्यनाँव",
+       "emailusernamesubmit": "भेजो",
+       "emailfrom": "प्रेषक:",
+       "emailto": "प्राप्तकर्ता:",
+       "emailsubject": "विषय:",
+       "emailmessage": "सनेशा:",
+       "emailsend": "भेजा जाय",
+       "usermessage-summary": "प्रणाली सन्देश छोडत है।",
+       "usermessage-editor": "सिस्टम दूत",
        "watchlist": "अवलोकन सुची",
+       "mywatchlist": "अवलोकन सुची",
+       "watchlistfor2": "$1 $2 कय खत्तिर",
+       "watchnologin": "लॉग इन नाइ करा गा है",
+       "addwatch": "ध्यानसूची में जोड़ा जाय",
+       "watch": "ध्यान रक्खा जाय",
+       "watchthispage": "इ पन्ना पे ध्यान रक्खा जाय",
+       "unwatch": "ध्यान हटावा जाय",
+       "unwatchthispage": "ध्यानसूची से हटावा जाय",
+       "notanarticle": "सामग्री पन्ना नाइ होय",
+       "wlshowlast": "पिछला $1 घंटा $2 दिन  देखा जाय",
+       "watchlist-options": "ध्यानसूची विकल्प",
+       "watching": "ध्यान देत हँय...",
        "undelete-nodiff": "कवनो पुरान अवतरण नाँइ मिला।",
        "undeletebtn": "वापस लै आवा जाय",
        "undeletelink": "देखा जाय/शुरु कय जैसन करा जाय",
index 394db69..34f6646 100644 (file)
        "changeemail-submit": "ایمیل ادرسی تغیر",
        "bold_sample": "پر رنگین متن",
        "bold_tip": "پر رنگین متن",
+       "nowiki_sample": "ایدا چوکاٹ بندی نه بوته ئین متن ئه داخل کنیت",
+       "nowiki_tip": "نادیده گیپتین ویکی ئی چوکاٹ بندیا",
        "media_tip": "فایل لینک",
        "summary": "خلاصه:",
        "watchthis": "دیستین ای تاکدیمی",
index 54b4a8b..c10c77c 100644 (file)
        "uploaderror": "Při načítání došlo k chybě",
        "upload-recreate-warning": "'''Upozornění: Soubor pod tímto názvem byl dříve smazán či přejmenován.'''\n\nZde je pro přehled zobrazen soupis mazání a přesunů této stránky:",
        "uploadtext": "Níže uvedený formulář slouží k načtení souborů. Již načtené soubory si můžete prohlížet a hledat pomocí [[Special:FileList|seznamu načtených souborů]], každé načtení se také zaznamenává do [[Special:Log/upload|knihy nahrávek]], smazání jsou v [[Special:Log/delete|knize smazaných stránek]].\n\nPro vložení obrázku do stránky použijte jeden z následujících způsobů zápisu:\n* '''<code><nowiki>[[</nowiki>{{ns:file}}<nowiki>:Soubor.jpg]]</nowiki></code>''' do stránky vloží celý obrázek,\n* '''<code><nowiki>[[</nowiki>{{ns:file}}<nowiki>:Soubor.png|thumb|left|Popisek]]</nowiki></code>''' vloží náhled v rámečku zarovnaném na levý okraj, s popiskem „Popisek“,\n* '''<code><nowiki>[[</nowiki>{{ns:media}}<nowiki>:Soubor.ogg]]</nowiki></code>''' vloží přímý odkaz na soubor, aniž by se ten na stránce zobrazoval.",
-       "upload-permitted": "Povolené formáty souborů: $1.",
-       "upload-preferred": "Upřednostňované formáty souborů: $1.",
-       "upload-prohibited": "Zakázané formáty souborů: $1.",
+       "upload-permitted": "{{PLURAL:$2|Povolený formát|Povolené formáty}} souborů: $1.",
+       "upload-preferred": "{{PLURAL:$2|Upřednostňovaný formát|Upřednostňované formáty}} souborů: $1.",
+       "upload-prohibited": "{{PLURAL:$2|Zakázaný formát|Zakázané formáty}} souborů: $1.",
        "uploadlogpage": "Kniha nahrávek",
        "uploadlogpagetext": "Níže najdete seznam nejnovějších souborů.",
        "filename": "Soubor",
        "listgrouprights-key": "Legenda:\n* <span class=\"listgrouprights-granted\">Udělená práva</span>\n* <span class=\"listgrouprights-revoked\">Odebraná práva</span>",
        "listgrouprights-group": "Skupina",
        "listgrouprights-rights": "Práva",
-       "listgrouprights-helppage": "Help:Práva skupiny",
+       "listgrouprights-helppage": "Help:Práva uživatelských skupin",
        "listgrouprights-members": "(seznam členů)",
        "listgrouprights-addgroup": "Přidávání uživatelů do {{PLURAL:$2|skupiny|skupin}} $1",
        "listgrouprights-removegroup": "Vyřazování uživatelů ze {{PLURAL:$2|skupiny|skupin}} $1",
index be3ad8e..e601e4b 100644 (file)
@@ -66,7 +66,7 @@
        "tog-shownumberswatching": "Montri la nombron da priatentaj uzantoj",
        "tog-oldsig": "Ekzistanta subskribo:",
        "tog-fancysig": "Trakti subskribon kiel vikitekston (sen aŭtomata ligo)",
-       "tog-uselivepreview": "Uzi tujan antaŭrigardon (per ĜavaSkripto) (Eksperimenta)",
+       "tog-uselivepreview": "Uzadi tujan antaŭrigardon",
        "tog-forceeditsummary": "Averti min kiam mi konservas malplenan redaktoresumon",
        "tog-watchlisthideown": "Kaŝi miajn redaktojn de la atentaro",
        "tog-watchlisthidebots": "Kaŝi robotajn redaktojn de la atentaro",
        "pool-queuefull": "Atendovico de servilaro estas plena.",
        "pool-errorunknown": "Nekonata eraro",
        "pool-servererror": "La servo manaĝanta aliron al serviloj ne estas disponebla ($1).",
+       "poolcounter-usage-error": "Uzeraro: $1",
        "aboutsite": "Pri {{SITENAME}}",
        "aboutpage": "Project:Enkonduko",
        "copyright": "La enhavo estas disponebla laŭ $1, se ne estas alia indiko.",
        "content-model-text": "ordinara teksto",
        "content-model-javascript": "JavaScript",
        "content-model-css": "CSS",
+       "content-json-empty-object": "Malplena objeto",
+       "content-json-empty-array": "Malplena tabelo",
        "duplicate-args-category": "Paĝoj kun pluroblaj argumentoj en ŝablonvokoj",
        "duplicate-args-category-desc": "La paĝo enhavas uzon de ŝablono kun pluroble uzitaj argumentoj, kiel ekzemple <code><nowiki>{{foo|bar=1|bar=2}}</nowiki></code> aŭ <code><nowiki>{{foo|bar|1=baz}}</nowiki></code>.",
        "expensive-parserfunction-warning": "Averto: Ĉi tiu paĝo enhavas tro da multekostaj sintaksaj funkcio-vokoj.\n\nĜi havu malpli ol $2 {{PLURAL:$2|vokon|vokojn}}, sed nun estas $1 {{PLURAL:$1|voko|vokoj}}.",
        "history-feed-empty": "La petita paĝo ne ekzistas.\nĜi verŝajne estis forigita de la vikio, aŭ alinomita.\nProvu [[Special:Search|serĉi en la vikio]] por rilataj novaj paĝoj.",
        "rev-deleted-comment": "(komento forigita)",
        "rev-deleted-user": "(uzanto-nomo forigita)",
-       "rev-deleted-event": "(protokola ago forigita)",
+       "rev-deleted-event": "(protokolaj detaloj forigitaj)",
        "rev-deleted-user-contribs": "[salutnomo aŭ IP-adreso estis forigita - redakto estas kaŝita en kontribuoj]",
        "rev-deleted-text-permission": "Ĉi tiu revizio de la paĝo estis '''forigita'''.\nEble estas detaloj en la [{{fullurl:{{#Special:Log}}/suppress|page={{FULLPAGENAMEE}}}} protokolo pri forigado].",
        "rev-suppressed-text-permission": "Ĉi tiu paĝa revizio estis '''kaŝita'''.\nDetaloj estas troveblaj en la [{{fullurl:{{#Special:Log}}/suppress|page={{FULLPAGENAMEE}}}} protokolo pri kaŝitoj revizioj].",
        "logdelete-selected": "{{PLURAL:$1|Selektata protokola evento|Selektataj protokolaj eventoj}}:",
        "revdelete-text-text": "Forigitaj versioj ankoraŭ restas en la versia historio, sed partoj de ilia enhavo ne estas alireblaj por la publiko.",
        "revdelete-text-file": "Forigitaj dosieraj versioj ankoraŭ restas en la dosiera historio, sed partoj de ilia enhavo ne estas alireblaj por la publiko.",
+       "logdelete-text": "Forigitaj protokolaĵoj plu aperos en la protokolo, sed partoj de ilia enhavo ne estos alireblaj por publiko.",
        "revdelete-text-others": "Aliaj administrantoj ankoraŭ havas aliron al la kaŝita enhavo kaj povas malforigi ĝin, tiel longe kiel aldonaj restriktoj ne estas difinitaj.",
        "revdelete-confirm": "Bonvolu konfirmi ke vi intencias fari ĉi tion, ke vi komprenas la konsekvencojn kaj ke vi faras ĉi tion laŭ [[{{MediaWiki:Policy-url}}|la regularo]].",
        "revdelete-suppress-text": "Subpremo '''nur''' estu uzata por la jenaj kazoj:\n* Ebla kalumnia informo\n* Netaŭga persona informo\n*: ''hejmaj adresoj kaj telefonnumeroj, ŝtataj identnumeroj, ktp.''",
        "revdelete-legend": "Fari videblecajn limigojn",
        "revdelete-hide-text": "Teksto de revizio",
        "revdelete-hide-image": "Kaŝi enhavon de dosieroj",
-       "revdelete-hide-name": "Kaŝi agon kaj celon",
+       "revdelete-hide-name": "Kaŝi celon kaj parametrojn",
        "revdelete-hide-comment": "Resumo de redakto",
        "revdelete-hide-user": "Salutnomo de redaktanto/IP-adreso",
        "revdelete-hide-restricted": "Subpremi ĉi tiujn datenojn de administrantoj kaj ankaŭ aliaj",
        "mergehistory-empty": "Neniuj versioj estas kunigeblaj.",
        "mergehistory-success": "$3 {{PLURAL:$3|versio|versioj}} de [[:$1]] sukcese {{PLURAL:$3|kunigita|kunigitaj}} en [[:$2]].",
        "mergehistory-fail": "Ne povis fari la historian kunigon; bonvolu konstati la paĝajn kaj tempajn parametrojn.",
+       "mergehistory-fail-toobig": "Ne eblas kunigi historiojn ĉar pli ol sojlo de $1 {{PLURAL:$1|revizio|revizioj}} estus {{PLURAL:$1|movita|movitaj}}.",
        "mergehistory-no-source": "Fontpaĝo $1 ne ekzistas.",
        "mergehistory-no-destination": "Celpaĝo $1 ne ekzistas.",
        "mergehistory-invalid-source": "Fontpaĝo devas esti valida titolo.",
        "prefs-tokenwatchlist": "Ĵetono",
        "prefs-diffs": "Diferencoj",
        "prefs-help-prefershttps": "Ĉi tiu agordo ekefikos je via sekva ensaluto.",
+       "prefswarning-warning": "Vi faris ŝanĝojn al viaj agordoj, kiuj ankoraŭ ne estas konservitaj.\nSe vi foriros de tiu ĉi paĝo sen klaki al \"$1\", viaj agordoj ne estos ĝisdatigitaj.",
        "prefs-tabs-navigation-hint": "Konsileto: Vi povas uzi la maldekstran kaj dekstran sagajn klavojn por navigi inter la langetoj en la langeta listo.",
        "email-address-validity-valid": "Ŝajnas ke la retpoŝtadreso estas valida",
        "email-address-validity-invalid": "Tajpu validan retpoŝtadreson",
        "uploaderror": "Eraro okazis dum alŝuto",
        "upload-recreate-warning": "''Atenton: dosiero kun tiu nomo estis forigita aŭ alinomita.'''\n\nLa forigo kaj mova protokoloj por ĉi tiu paĝo estas provizitaj ĉi tie por oportuno:",
        "uploadtext": "Uzu la jenan formularon por alŝuti dosierojn.\nVidi aŭ serĉi antaŭe alŝutitajn bildojn, iru al [[Special:FileList|Listo de alŝutitaj dosieroj]]; (re)alŝutaĵoj ankaŭ estas registrita en la [[Special:Log/upload|Protokolo de alŝutoj]], forigoj en la [[Special:Log/delete|protokolo de forigoj]].\n\nPor inkluzivi la dosieron en paĝon, skribu ligilon laŭ la formoj\n\n* '''<nowiki>[[</nowiki>{{ns:file}}<nowiki>:Bildo.jpg]]</nowiki>''' por uzi la plenan version de la dosiero\n* '''<nowiki>[[</nowiki>{{ns:file}}<nowiki>:Bildo.png|200px|thumb|left|alternativa teksto]]</nowiki>''' por uzi 200-rastrumeran version en kesto maldekstre (\"left\") kun \"alternativa teksto\" kiel priskribo.\n* '''<nowiki>[[</nowiki>{{ns:media}}<nowiki>:Dosiero.ogg]]</nowiki>''' por ligi rekte al la dosiero ne montrante la dosieron.",
-       "upload-permitted": "Permesitaj dosiertipoj: $1.",
-       "upload-preferred": "Preferitaj dosiertipoj: $1.",
-       "upload-prohibited": "Malpermesitaj dosiero-tipoj: $1.",
+       "upload-permitted": "{{PLURAL:$2|Permesita dosiertipo|Permesitaj dosiertipoj}}: $1.",
+       "upload-preferred": "{{PLURAL:$2|Preferata dosiertipo|Preferataj dosiertipoj}}: $1.",
+       "upload-prohibited": "{{PLURAL:$2|Malpermesita dosiertipo|Malpermesitaj dosiertipoj}}: $1.",
        "uploadlogpage": "Protokolo de alŝutoj",
        "uploadlogpagetext": "Jen la plej laste alŝutitaj dosieroj.\nĈiuj tempoj montriĝas laŭ la horzono UTC.",
        "filename": "Dosiernomo",
        "version-entrypoints": "Eniropunktaj URL-oj",
        "version-entrypoints-header-entrypoint": "Eniropunkto",
        "version-entrypoints-header-url": "Retadreso",
+       "version-libraries": "Instalitaj bibliotekoj",
+       "version-libraries-library": "Biblioteko",
+       "version-libraries-version": "Versio",
        "redirect-legend": "Alidirektilo al dosiero aŭ paĝo",
        "redirect-submit": "Ek",
        "redirect-lookup": "Traserĉi:",
        "compare-revision-not-exists": "La revizio kiun vi specifis ne ekzistas.",
        "dberr-problems": "Bedaŭrinde, ĉi tiu retejo suferas pro teknikaj problemoj.",
        "dberr-again": "Bonvolu atendi kelkajn minutojn kaj reŝargi.",
-       "dberr-info": "(Ne eblas kontakti la datenbazan servilon: $1)",
-       "dberr-info-hidden": "(Ne eblas kontakti la datenbazan servilon)",
+       "dberr-info": "(Ne eblas konekti la datumbazon: $1)",
+       "dberr-info-hidden": "(Ne eblas konekti la datenbazon)",
        "dberr-usegoogle": "Vi povas serĉi Guglon dume.",
        "dberr-outofdate": "Notu ke iliaj indeksoj de nia enhavo eble ne estas ĝisdatigaj.",
        "dberr-cachederror": "Jen kaŝmemorigita kopio de la petita paĝo, kaj eble ne estas ĝisdatigita.",
index e089ec9..bce71a7 100644 (file)
        "uploaderror": "Eror dëmentré che as cariava",
        "upload-recreate-warning": "'''Atension: n'archivi con col nòm a l'é già stàit ëscancelà o tramudà.'''\n\nËl registr dle scancelassion e dij tramud për sta pàgina a l'é butà ambelessì për comodità:",
        "uploadtext": "Dovra ël formolari sì-sota për carié dj'archivi.\nPër vardé ò sërché dle figure già carià, ch'a vada an sla [[Special:FileList|lista dle figure]], ij (ri)càrich a son ëdcò registrà ant ël [[Special:Log/upload|registr dij càrich]], jë scancelament ant ël [[Special:Log/delete|registr djë scancelament]].\n\nPër buté na figura ant n'artìcol, dovré n'anliura ant un-a dle forme sì sota:\n* '''<code><nowiki>[[</nowiki>{{ns:file}}<nowiki>:File.jpg]]</nowiki></code>''' për dovré la version pien-a dla figura\n* '''<code><nowiki>[[</nowiki>{{ns:file}}<nowiki>:File.png|200px|thumb|left|alt text]]</nowiki></code>''' për dovré na dimension ëd 200 pontin ant un quàder a la bordura snistra con 'alt text' com descrission\n* '''<code><nowiki>[[</nowiki>{{ns:media}}<nowiki>:File.ogg]]</nowiki></code>''' për coleghé diretament la figura sensa fé vëdde l'archivi",
-       "upload-permitted": "Sòrt d'archivi consentìe: $1.",
-       "upload-preferred": "Sòrt d'archivi preferìe: $1.",
-       "upload-prohibited": "Sòrt d'archivi proibìe: $1.",
+       "upload-permitted": "Sòrt d'archivi {{PLURAL:$2|consentìa|consentìe}}: $1.",
+       "upload-preferred": "Sòrt d'archivi {{PLURAL:$2|preferì|preferìe}}: $1.",
+       "upload-prohibited": "Sòrt d'archivi {{PLURAL:$2:proibì|proibìe}}: $1.",
        "uploadlogpage": "Registr dij càrich",
        "uploadlogpagetext": "Ambelessì-sota a-i é na lista dj'ùltim archivi carià.\nBeiché la [[Special:NewFiles|galarìa dj'archivi neuv]] për na presentassion pì visual.",
        "filename": "Nòm dl'archivi",
        "namespace": "Spassi nominal:",
        "invert": "Anvertì la selession",
        "tooltip-invert": "Ch'a selession-a sta casela për stërmé le modìfiche a le pàgine ant lë spassi nominal selessionà (e ant lë spassi nominal associà se selessionà)",
+       "tooltip-whatlinkshere-invert": "Ch'a selession-a sa casela për ëstërmé le liure dle pàgine ant lë spassi nominal selessionà.",
        "namespace_association": "Spassi nominal associà",
        "tooltip-namespace_association": "Ch'a selession-a sta casela për anserì ëdcò la discussion o lë spassi nominal dël soget associà a lë spassi nomina selessionà",
        "blanknamespace": "(Prinsipal)",
index 4fc6ee0..236e913 100644 (file)
        "booksources-summary": "{{doc-specialpagesummary|booksources}}",
        "booksources-search-legend": "Box heading on [[Special:BookSources|book sources]] special page. The box is for searching for places where a particular book can be bought or viewed.",
        "booksources-isbn": "{{optional}}\nThis is a label that appears before a text input field on the Special:BookSources page.\n{{Identical|ISBN}}",
-       "booksources-search": "Search button in [[Special:BookSources]]\n\n{{Identical|Go}}",
+       "booksources-search": "Search button in [[Special:BookSources]]\n\n{{Identical|Search}}",
        "booksources-text": "Used in [[Special:BookSources/1]].\n\nThis message is followed by a list of links to other sites.\n\nSee also:\n* {{msg-mw|Booksources|title}}\n* {{msg-mw|Booksources-text|text}}",
        "booksources-invalid-isbn": "This message is displayed after an invalid ISBN is entered on [[Special:Booksources]].",
        "rfcurl": "{{notranslate}}\nParameters:\n* $1 - RFC number\nSee also:\n* {{msg-mw|Pubmedurl}}",
index 75874f7..7dedda5 100644 (file)
@@ -10,7 +10,8 @@
                        "Nemo bis",
                        "Urhixidur",
                        "아라",
-                       "Purodha"
+                       "Purodha",
+                       "Krivoshapkina"
                ]
        },
        "tog-underline": "Сигэлэри аннынан тардыы:",
        "pool-queuefull": "Көрдөбүллэри хомуйуу туолбут",
        "pool-errorunknown": "Биллибэт алҕас",
        "pool-servererror": "Пул ааҕааччытын сулууспата үлэлээбэт($1).",
+       "poolcounter-usage-error": "Туһаныы алҕаһа: $1",
        "aboutsite": "{{SITENAME}} туһунан",
        "aboutpage": "Project:туһунан",
        "copyright": "Маны туһанары $1 лиссиэнсийэ көҥүллүүр (атын ыйыллыбытах буоллаҕына).",
        "delete-warning-toobig": "Бу сирэй уларыылара уһун историялаах, хас да ($1) {{PLURAL:$1|хат көрүүлээх|хат көрүүлэрдээх}}. Маны соттоххуна, {{SITENAME}} билэтин тиһигин алдьатыан сөп; салгыыр буоллаххына сэрэнэн үлэлээ.",
        "deleting-backlinks-warning": "'''Сэрэтии.''' Сотоору гынар сирэйгэр [[Special:WhatLinksHere/{{FULLPAGENAME}}|атын сирэйдэр]] сигэнэллэр эбит.",
        "rollback": "Уруккутугар төннөр",
-       "rollback_short": "Төннөрүү",
        "rollbacklink": "төннөр",
        "rollbacklinkcount": "$1 көннөрүүнү суох гын",
        "rollbacklinkcount-morethan": "$1 элбэх көннөрүүнү суох гын",
        "import-logentry-interwiki": "биикилэр ыккардыларынааҕы $1",
        "import-logentry-interwiki-detail": "барыта $2 барылтан $1 барыл",
        "javascripttest": "JavaScript тургутуу",
-       "javascripttest-title": "$1 тургутуу бара турар",
        "javascripttest-pagetext-noframework": "Бу сирэй JavaScript тургутууларга анаммыт.",
        "javascripttest-pagetext-unknownframework": "\"$1\" тургутуу биллибэт эйгэтэ.",
        "javascripttest-pagetext-frameworks": "Бука диэн, бу тургуутуу эйгэлэриттэн биирин тал: $1",
        "javascripttest-pagetext-skins": "Тургутууну ыытарга тас көрүҥүн бастаан тал:",
        "javascripttest-qunit-intro": "[$1 тургутуу документациятын] манна mediawiki.org көр.",
-       "javascripttest-qunit-heading": "MediaWiki JavaScript QUnit test suite",
        "tooltip-pt-userpage": "Кыттааччы быһыытынан тус сирэйиҥ",
        "tooltip-pt-anonuserpage": "Билигин киирбит IP-м сирэйэ",
        "tooltip-pt-mytalk": "Кэпсэтэр-ырытар сириҥ",
index dbc1968..44cf5e7 100644 (file)
        "thumbnail-temp-create": "Не вдалося створити тимчасовий файл мініатюри",
        "thumbnail-dest-create": "Не вдалося зберегти мініатюру до місця призначення",
        "thumbnail_invalid_params": "Помилковий параметр мініатюри",
+       "thumbnail_toobigimagearea": "Файл з розмірами більше, ніж $1",
        "thumbnail_dest_directory": "Неможливо створити цільову директорію",
        "thumbnail_image-type": "Тип зображення не підтримується",
        "thumbnail_gd-library": "Неповна конфігурація бібліотеки GD, відсутня функція $1",
        "javascripttest": "Тестування JavaScript",
        "javascripttest-pagetext-noframework": "Ця сторінка призначений для тестування JavaScript.",
        "javascripttest-pagetext-unknownframework": "Невідоме середовище тестування \" $1 \".",
+       "javascripttest-pagetext-unknownaction": "невідома дія \"$1\".",
        "javascripttest-pagetext-frameworks": "Будь ласка, оберіть одне з наступних середовищ тестування: $1",
        "javascripttest-pagetext-skins": "Виберіть оформлення сторінки запуску тесту:",
        "javascripttest-qunit-intro": "Переглянути [ $1  тестування документації] на mediawiki.org.",
        "version-entrypoints-header-url": "URL",
        "version-entrypoints-articlepath": "[https://www.mediawiki.org/wiki/Special:MyLanguage/Manual:$wgArticlePath Шлях до статей]",
        "version-entrypoints-scriptpath": "[https://www.mediawiki.org/wiki/Special:MyLanguage/Manual:$wgScriptPath Шлях до скриптів]",
+       "version-libraries": "Встановлені бібліотеки",
+       "version-libraries-library": "Бібліотека",
+       "version-libraries-version": "Версія",
        "redirect": "Перенаправлення за файлом, користувачем, сторінкою або ID версії",
        "redirect-legend": "Перенаправити на файл чи сторінку",
        "redirect-summary": "Ця спеціальна сторінка перенаправляє на файл (за поданою назвою файлу), сторінку (за поданим ID версії або сторінки) або сторінку користувача (за поданим числовим ID користувача). Використання: [[{{#Special:Redirect}}/file/Example.jpg]], [[{{#Special:Redirect}}/page/64308]],[[{{#Special:Redirect}}/revision/328429]] або [[{{#Special:Redirect}}/user/101]].",
index c608578..c508fed 100644 (file)
@@ -49,7 +49,7 @@
        "tog-shownumberswatching": "دیکھنے والے صارفین کی تعداد دکھاؤ",
        "tog-oldsig": "موجودہ دستخط:",
        "tog-fancysig": "(سادہ دستخط بلا خودکار ربط)",
-       "tog-uselivepreview": "براہ راست نمائش (آزمائشی) استعمال کریں",
+       "tog-uselivepreview": "براہ راست نمائش (آزمائشی) استعمال کیجئے",
        "tog-forceeditsummary": "جب میں ترمیمی خلاصہ خالی چھوڑوں تو مجھے آگاہ کرو",
        "tog-watchlisthideown": "زیرِنظرفہرست سے میری ترمیمات چھپاؤ",
        "tog-watchlisthidebots": "زیرِنظرفہرست میں سے روبالی ترمیمات چھپاؤ",
index 75500c2..5807fb6 100644 (file)
@@ -14,6 +14,22 @@ class ConvertExtensionToRegistration extends Maintenance {
                'ExtensionFunctions' => 'handleExtensionFunctions',
        );
 
+       /**
+        * Keys that should be put at the top of the generated JSON file (T86608)
+        *
+        * @var array
+        */
+       protected $promote = array(
+               'name',
+               'version',
+               'author',
+               'url',
+               'description',
+               'descriptionmsg',
+               'license-name',
+               'type',
+       );
+
        private $json, $dir;
 
        public function __construct() {
@@ -59,8 +75,18 @@ class ConvertExtensionToRegistration extends Maintenance {
                        }
                }
 
+               // Move some keys to the top
+               $out = array();
+               foreach ( $this->promote as $key ) {
+                       if ( isset( $this->json[$key] ) ) {
+                               $out[$key] = $this->json[$key];
+                               unset( $this->json[$key] );
+                       }
+               }
+               $out += $this->json;
+
                $fname = "{$this->dir}/extension.json";
-               $prettyJSON = FormatJson::encode( $this->json, "\t", FormatJson::ALL_OK );
+               $prettyJSON = FormatJson::encode( $out, "\t", FormatJson::ALL_OK );
                file_put_contents( $fname, $prettyJSON . "\n" );
                $this->output( "Wrote output to $fname.\n" );
        }
index cbc389b..27102ad 100644 (file)
@@ -172,15 +172,24 @@ class NamespaceConflictChecker extends Maintenance {
                        return true;
                }
 
+               $resolveableCount = 0;
+
                $ok = true;
                foreach ( $conflicts as $row ) {
                        $resolvable = $this->reportConflict( $row, $suffix );
                        $ok = $ok && $resolvable;
+
+                       if ( $resolvable ) {
+                               $resolveableCount++;
+                       }
+
                        if ( $fix && ( $resolvable || $suffix != '' ) ) {
                                $ok = $this->resolveConflict( $row, $resolvable, $suffix ) && $ok;
                        }
                }
 
+               $this->output( "{$count} conflicts. {$resolveableCount} are resolveable." );
+
                return $ok;
        }
 
@@ -260,7 +269,8 @@ class NamespaceConflictChecker extends Maintenance {
                        $row->oldtitle,
                        $newTitle->getNamespace(),
                        $newTitle->getDBkey(),
-                       $newTitle->getPrefixedText() ) );
+                       $newTitle->getPrefixedText() )
+               );
 
                $id = $newTitle->getArticleID();
                if ( $id ) {
@@ -275,7 +285,7 @@ class NamespaceConflictChecker extends Maintenance {
        /**
         * Resolve any conflicts
         *
-        * @param stClass $row Row from the page table to fix
+        * @param stdClass $row Row from the page table to fix
         * @param bool $resolvable
         * @param string $suffix Suffix to append to the fixed page
         * @return bool
index d1d17cf..8ab1ddb 100755 (executable)
@@ -131,6 +131,10 @@ class UpdateMediaWiki extends Maintenance {
                        wfCountdown( 5 );
                }
 
+               // Check external dependencies are up to date
+               $composerLockUpToDate = $this->runChild( 'CheckComposerLockUpToDate' );
+               $composerLockUpToDate->execute();
+
                # Attempt to connect to the database as a privileged user
                # This will vomit up an error if there are permissions problems
                $db = wfGetDB( DB_MASTER );
diff --git a/resources/assets/poweredby_mediawiki_132x47.png b/resources/assets/poweredby_mediawiki_132x47.png
new file mode 100644 (file)
index 0000000..a784ecf
Binary files /dev/null and b/resources/assets/poweredby_mediawiki_132x47.png differ
diff --git a/resources/assets/poweredby_mediawiki_176x62.png b/resources/assets/poweredby_mediawiki_176x62.png
new file mode 100644 (file)
index 0000000..7970801
Binary files /dev/null and b/resources/assets/poweredby_mediawiki_176x62.png differ
index 398ea8b..0b61721 100644 (file)
@@ -1,12 +1,12 @@
 /*!
- * OOjs v1.1.3 optimised for jQuery
+ * OOjs v1.1.4 optimised for jQuery
  * https://www.mediawiki.org/wiki/OOjs
  *
- * Copyright 2011-2014 OOjs Team and other contributors.
+ * Copyright 2011-2015 OOjs Team and other contributors.
  * Released under the MIT license
  * http://oojs.mit-license.org
  *
- * Date: 2014-11-17T19:17:29Z
+ * Date: 2015-01-23T20:11:25Z
  */
 ( function ( global ) {
 
@@ -170,7 +170,7 @@ oo.mixinClass = function ( targetFn, originFn ) {
  *
  * @param {Object} obj
  * @param {Mixed...} [keys]
- * @returns obj[arguments[1]][arguments[2]].... or undefined
+ * @return obj[arguments[1]][arguments[2]].... or undefined
  */
 oo.getProp = function ( obj ) {
        var i,
@@ -687,12 +687,15 @@ oo.isPlainObject = $.isPlainObject;
         * @return {boolean} If event was handled by at least one listener
         */
        oo.EventEmitter.prototype.emit = function ( event ) {
-               var i, len, binding, bindings, args, method;
+               var args = [],
+                       i, len, binding, bindings, method;
 
                if ( hasOwn.call( this.bindings, event ) ) {
                        // Slicing ensures that we don't get tripped up by event handlers that add/remove bindings
                        bindings = this.bindings[event].slice();
-                       args = Array.prototype.slice.call( arguments, 1 );
+                       for ( i = 1, len = arguments.length; i < len; i++ ) {
+                               args.push( arguments[i] );
+                       }
                        for ( i = 0, len = bindings.length; i < len; i++ ) {
                                binding = bindings[i];
                                if ( typeof binding.method === 'string' ) {
@@ -906,7 +909,8 @@ oo.Factory.prototype.register = function ( constructor ) {
  * @throws {Error} Unknown object name
  */
 oo.Factory.prototype.create = function ( name ) {
-       var args, obj,
+       var obj, i,
+               args = [],
                constructor = this.lookup( name );
 
        if ( !constructor ) {
@@ -914,7 +918,9 @@ oo.Factory.prototype.create = function ( name ) {
        }
 
        // Convert arguments to array and shift the first argument (name) off
-       args = Array.prototype.slice.call( arguments, 1 );
+       for ( i = 1; i < arguments.length; i++ ) {
+               args.push( arguments[i] );
+       }
 
        // We can't use the "new" operator with .apply directly because apply needs a
        // context. So instead just do what "new" does: create an object that inherits from
index 1b86b61..85f4ffa 100644 (file)
                 * @param {string|null} value Value of cookie. If `value` is `null` then this method will
                 *   instead remove a cookie by name of `key`.
                 * @param {Object|Date} [options] Options object, or expiry date
-                * @param {Date|null} [options.expires=wgCookieExpiration] The expiry date of the cookie.
+                * @param {Date|null} [options.expires] The expiry date of the cookie.
                 *
-                *   Default cookie expiration is based on `wgCookieExpiration`.  If `wgCookieExpiration` is
-                *   0, a session cookie is set (expires when the browser is closed).
+                *   If `options.expires` is null, then a session cookie is set.
+                *
+                *   By default cookie expiration is based on `wgCookieExpiration`. Similar to `WebResponse`
+                *   in PHP, we set a session cookie if `wgCookieExpiration` is 0. And for non-zero values
+                *   it is interpreted as lifetime in seconds.
                 *
-                *   If options.expires is null, then a session cookie is set.
                 * @param {string} [options.prefix=wgCookiePrefix] The prefix of the key
                 * @param {string} [options.domain=wgCookieDomain] The domain attribute of the cookie
                 * @param {string} [options.path=wgCookiePath] The path attribute of the cookie
index 221c258..e57c2b3 100644 (file)
@@ -18,6 +18,23 @@ class ExtensionProcessorTest extends MediaWikiTestCase {
                'name' => 'FooBar',
        );
 
+       /**
+        * @covers ExtensionProcessor::extractInfo
+        */
+       public function testExtractInfo() {
+               // Test that attributes that begin with @ are ignored
+               $processor = new ExtensionProcessor();
+               $processor->extractInfo( $this->dir, self::$default + array(
+                       '@metadata' => array( 'foobarbaz' ),
+                       'AnAttribute' => array( 'omg' ),
+               ) );
+
+               $extracted = $processor->getExtractedInfo();
+               $attributes = $extracted['attributes'];
+               $this->assertArrayHasKey( 'AnAttribute', $attributes );
+               $this->assertArrayNotHasKey( '@metadata', $attributes );
+       }
+
        public static function provideRegisterHooks() {
                return array(
                        // No hooks