Liangent has submitted this change and it was merged.

Change subject: Initial version of the extension
......................................................................


Initial version of the extension

Bug: 49588
Change-Id: Ib754e512b6923a043d93c565ea3af9c936409ca3
---
A PageLanguage.body.php
A PageLanguage.i18n.php
A PageLanguage.magic.php
A PageLanguage.php
4 files changed, 135 insertions(+), 0 deletions(-)

Approvals:
  Liangent: Verified; Looks good to me, approved



diff --git a/PageLanguage.body.php b/PageLanguage.body.php
new file mode 100644
index 0000000..f3f4583
--- /dev/null
+++ b/PageLanguage.body.php
@@ -0,0 +1,69 @@
+<?php
+
+class PageLanguage {
+
+       private static $cache = array();
+
+       public static function onPageContentLanguage( Title $title, &$pageLang 
) {
+               if ( isset( self::$cache[$title->getPrefixedDBKey()] ) ) {
+                       $pageLang = self::$cache[$title->getPrefixedDBKey()];
+               } elseif ( $title->getArticleID() > 0 ) {
+                       $dbr = wfGetDB( DB_SLAVE );
+                       $langCode = $dbr->selectField(
+                               'page_props', 'pp_value', array(
+                                       'pp_page' => $title->getArticleID(),
+                                       'pp_propname' => 'pagelanguage',
+                               ), __METHOD__
+                       );
+
+                       if ( $langCode !== false && Language::isValidCode( 
$langCode ) ) {
+                               $pageLang = Language::factory( $langCode );
+                       }
+               }
+
+               return true;
+       }
+
+       public static function onParserFirstCallInit( Parser $parser ) {
+               $parser->setFunctionHook( 'pagelanguage', 
'PageLanguage::funcPageLanguage', SFH_NO_HASH );
+
+               return true;
+       }
+
+       public static function funcPageLanguage( Parser $parser, $langCode, 
$uarg = '' ) {
+               static $magicWords = null;
+               if ( is_null( $magicWords ) ) {
+                       $magicWords = new MagicWordArray( array( 
'pagelanguage_noerror', 'pagelanguage_noreplace' ) );
+               }
+               $arg = $magicWords->matchStartToEnd( $uarg );
+
+               $langCode = trim( $langCode );
+               if ( strlen( $langCode ) === 0 ) {
+                       return '';
+               }
+
+               if ( Language::isValidCode( $langCode ) ) {
+                       $lang = Language::factory( $langCode );
+               } else {
+                       return '<span class="error">' .
+                               wfMessage( 'pagelanguage-invalid' 
)->inContentLanguage()
+                                       ->params( wfEscapeWikiText( $langCode ) 
)->text() .
+                               '</span>';
+               }
+
+               $old = $parser->getOutput()->getProperty( 'pagelanguage' );
+               if ( $old === false || $arg !== 'pagelanguage_noreplace' ) {
+                       $parser->getOutput()->setProperty( 'pagelanguage', 
$lang->getCode() );
+                       self::$cache[$parser->getTitle()->getPrefixedDBKey()] = 
$lang;
+               }
+
+               if ( $old === false || $old === $lang->getCode() || $arg ) {
+                       return '';
+               } else {
+                       return '<span class="error">' .
+                               wfMessage( 'pagelanguage-duplicate' 
)->inContentLanguage()->params(
+                                       wfEscapeWikiText( $old ), 
wfEscapeWikiText( $lang->getCode() ) )->text() .
+                               '</span>';
+               }
+       }
+}
diff --git a/PageLanguage.i18n.php b/PageLanguage.i18n.php
new file mode 100644
index 0000000..615e1bc
--- /dev/null
+++ b/PageLanguage.i18n.php
@@ -0,0 +1,27 @@
+<?php
+/**
+ * Internationalisation file for PageLanguage extension.
+ *
+ * @file
+ * @ingroup Extensions
+ */
+
+$messages = array();
+
+/** English */
+$messages['en'] = array(
+       'pagelanguage-desc' => "Define page language per page",
+       'pagelanguage-invalid' => "'''Warning:''' Ignoring invalid language 
code \"$1\" for page language.",
+       'pagelanguage-duplicate' => "'''Warning:''' Page language \"$2\" 
overrides earlier page language \"$1\".",
+);
+
+/** Message documentation (Message documentation) */
+$messages['qqq'] = array(
+       'pagelanguage-desc' => '{{desc|name=Page 
Language|url=http://www.mediawiki.org/wiki/Extension:PageLanguage}}',
+       'pagelanguage-invalid' => 'Error message when an invalid language is 
used. $1 for the language code used.',
+       'pagelanguage-duplicate' => 'Error message when a different language is 
set overriding a previous one.
+
+Parameters:
+* $1: the language code set previously
+* $2: the language code being set now',
+);
diff --git a/PageLanguage.magic.php b/PageLanguage.magic.php
new file mode 100644
index 0000000..825bfc2
--- /dev/null
+++ b/PageLanguage.magic.php
@@ -0,0 +1,16 @@
+<?php
+/**
+* Internationalisation file for PageLanguage extension.
+*
+* @file
+* @ingroup Extensions
+*/
+
+$magicWords = array();
+
+/** English (English) */
+$magicWords['en'] = array(
+       'pagelanguage' => array( 1, 'PAGELANGUAGE' ),
+       'pagelanguage_noerror' => array( 0, 'noerror' ),
+       'pagelanguage_noreplace' => array( 0, 'noreplace' ),
+);
diff --git a/PageLanguage.php b/PageLanguage.php
new file mode 100644
index 0000000..0b7d09c
--- /dev/null
+++ b/PageLanguage.php
@@ -0,0 +1,23 @@
+<?php
+
+if ( !defined( 'MEDIAWIKI' ) ) {
+       die( 'Not a valid entry point' );
+}
+
+$wgExtensionCredits['other'][] = array(
+       'path' => __FILE__,
+       'name' => 'Page Language',
+       'author' => array( 'Liangent' ),
+       'url' => 'https://www.mediawiki.org/wiki/Extension:PageLanguage',
+       'descriptionmsg' => 'pagelanguage-desc',
+);
+
+$dir = __DIR__;
+
+$wgAutoloadClasses['PageLanguage'] = "$dir/PageLanguage.body.php";
+
+$wgExtensionMessagesFiles['PageLanguage'] =  "$dir/PageLanguage.i18n.php";
+$wgExtensionMessagesFiles['PageLanguageMagic'] =  
"$dir/PageLanguage.magic.php";
+
+$wgHooks['PageContentLanguage'][] = 'PageLanguage::onPageContentLanguage';
+$wgHooks['ParserFirstCallInit'][] = 'PageLanguage::onParserFirstCallInit';

-- 
To view, visit https://gerrit.wikimedia.org/r/68852
To unsubscribe, visit https://gerrit.wikimedia.org/r/settings

Gerrit-MessageType: merged
Gerrit-Change-Id: Ib754e512b6923a043d93c565ea3af9c936409ca3
Gerrit-PatchSet: 5
Gerrit-Project: mediawiki/extensions/PageLanguage
Gerrit-Branch: master
Gerrit-Owner: Liangent <liang...@gmail.com>
Gerrit-Reviewer: Legoktm <legoktm.wikipe...@gmail.com>
Gerrit-Reviewer: Liangent <liang...@gmail.com>
Gerrit-Reviewer: Nikerabbit <niklas.laxst...@gmail.com>
Gerrit-Reviewer: Siebrand <siebr...@wikimedia.org>

_______________________________________________
MediaWiki-commits mailing list
MediaWiki-commits@lists.wikimedia.org
https://lists.wikimedia.org/mailman/listinfo/mediawiki-commits

Reply via email to