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