Page MenuHomeWickedGov Phorge

Hooks.php
No OneTemporary

Size
59 KB
Referenced Files
None
Subscribers
None

Hooks.php

<?php
// phpcs:disable MediaWiki.NamingConventions.LowerCamelFunctionsName.FunctionName
// Need to be able to define ::onUploadForm_initial
namespace MediaWiki\Extension\WikimediaMessages;
use ErrorPageError;
use HtmlArmor;
use MediaWiki\Cache\Hook\MessageCacheFetchOverridesHook;
use MediaWiki\Config\Config;
use MediaWiki\Config\ConfigException;
use MediaWiki\Config\ServiceOptions;
use MediaWiki\Extension\WikimediaMessages\LogFormatter\WMUserMergeLogFormatter;
use MediaWiki\Hook\EditPageCopyrightWarningHook;
use MediaWiki\Hook\SidebarBeforeOutputHook;
use MediaWiki\Hook\SkinAddFooterLinksHook;
use MediaWiki\Hook\SkinCopyrightFooterMessageHook;
use MediaWiki\Hook\SkinTemplateNavigation__UniversalHook;
use MediaWiki\Hook\UploadForm_initialHook;
use MediaWiki\Html\Html;
use MediaWiki\Linker\Linker;
use MediaWiki\Linker\LinkRenderer;
use MediaWiki\MainConfigNames;
use MediaWiki\Message\Message;
use MediaWiki\Output\Hook\BeforePageDisplayHook;
use MediaWiki\Output\OutputPage;
use MediaWiki\Permissions\PermissionManager;
use MediaWiki\Registration\ExtensionRegistry;
use MediaWiki\ResourceLoader\Hook\ResourceLoaderRegisterModulesHook;
use MediaWiki\ResourceLoader\ResourceLoader;
use MediaWiki\SpecialPage\Hook\SpecialPageBeforeExecuteHook;
use MediaWiki\SpecialPage\SpecialPage;
use MediaWiki\Specials\SpecialUpload;
use MediaWiki\Title\Title;
use MediaWiki\User\Options\UserOptionsLookup;
use MessageCache;
use MessageLocalizer;
use MobileContext;
use Skin;
use SkinTemplate;
use Wikimedia\IPUtils;
use Wikimedia\Message\MessageSpecifier;
/**
* Hooks for WikimediaMessages extension
*
* @file
* @ingroup Extensions
*/
class Hooks implements
BeforePageDisplayHook,
EditPageCopyrightWarningHook,
MessageCacheFetchOverridesHook,
ResourceLoaderRegisterModulesHook,
SidebarBeforeOutputHook,
SkinAddFooterLinksHook,
SkinCopyrightFooterMessageHook,
SkinTemplateNavigation__UniversalHook,
SpecialPageBeforeExecuteHook,
UploadForm_initialHook
{
public const CONSTRUCTOR_OPTIONS = [
MainConfigNames::DBname,
MainConfigNames::ForceUIMsgAsContentMsg,
'WikimediaMessagesLicensing',
MainConfigNames::LanguageCode,
MainConfigNames::RightsText,
MainConfigNames::RightsPage,
MainConfigNames::RightsUrl,
];
private ExtensionRegistry $extensionRegistry;
private LinkRenderer $linkRenderer;
private PermissionManager $permissionManager;
private ServiceOptions $options;
private UserOptionsLookup $userOptionsLookup;
private ?MobileContext $mobileContext;
public function __construct(
ExtensionRegistry $extensionRegistry,
LinkRenderer $linkRenderer,
PermissionManager $permissionManager,
ServiceOptions $options,
UserOptionsLookup $userOptionsLookup,
?MobileContext $mobileContext = null
) {
$options->assertRequiredOptions( self::CONSTRUCTOR_OPTIONS );
$this->extensionRegistry = $extensionRegistry;
$this->linkRenderer = $linkRenderer;
$this->permissionManager = $permissionManager;
$this->options = $options;
$this->userOptionsLookup = $userOptionsLookup;
$this->mobileContext = $mobileContext;
}
public static function factory(
LinkRenderer $linkRenderer,
Config $mainConfig,
PermissionManager $permissionManager,
UserOptionsLookup $userOptionsLookup,
?MobileContext $mobileContext = null
): self {
return new self(
ExtensionRegistry::getInstance(),
$linkRenderer,
$permissionManager,
new ServiceOptions( self::CONSTRUCTOR_OPTIONS, $mainConfig ),
$userOptionsLookup,
$mobileContext
);
}
/**
* When core requests certain messages, change the key to a Wikimedia version.
*
* @see https://www.mediawiki.org/wiki/Manual:Hooks/MessageCacheFetchOverrides
* @param string[] &$keys
*/
public function onMessageCacheFetchOverrides( array &$keys ): void {
global $wmgRealm;
static $keysToOverride = [
'acct_creation_throttle_hit',
'centralauth-contribs-locked',
// T216347
'centralauth-login-error-locked',
// T86741
'centralauth-groupname',
// T345549
'checkuser-api-useragent-clienthints-explanation',
'checkuser-toollinks',
// T327281
# 'checkuser-tempaccount-enable-preference-description',
// T362548
'checkuser-investigateblock-warning-ips-and-users-in-targets',
'checkuser-summary',
'createacct-helpusername',
'createacct-imgcaptcha-help',
// T139797
'delete-toobig',
'feedback-termsofuse',
'globalblocking-blockedtext-ip',
'globalblocking-blockedtext-range',
'globalblocking-blockedtext-xff',
'globalblocking-blockedtext-user',
'globalblocking-blockedtext-autoblock',
'globalblocking-blockedtext-autoblock-xff',
'globalrenamequeue-email-body-approved',
'globalrenamequeue-email-body-rejected',
'interfaceadmin-info',
// T121639
'ipb-confirmhideuser',
'mwoauth-form-privacypolicy-link',
// T252375
'mobile-frontend-terms-url',
'mwoauthserver-invalid-user',
// T226059
'oathauth-step1-test',
// T189924
'oathauth-hint',
// T272412
'prefs-user-downloaddata-help-message',
'privacypage',
'sidebar',
// T140941
'sitematrix',
'sitematrix-others',
'sitematrix-summary',
'sulrenamewarning-usenew',
// T248367
'webauthn-module-description',
// T248367
'webauthn-ui-login-prompt',
// T218160
'log-action-filter-usermerge',
'log-action-filter-usermerge-mergeuser',
'log-action-filter-usermerge-deleteuser',
'notification-body-oathauth-disable-other',
'oathauth-notifications-disable-helplink',
// T307493
'ipinfo-source-geoip2',
'ipinfo-infobox-use-terms',
'ipinfo-preference-use-agreement',
'similareditors-error-default',
// T348926
'jsonconfig-license-copyrightwarning',
'jsonconfig-license-copyrightwarning-license-unset',
'jsonconfig-license-notice',
'jsonconfig-license-notice-license-unset',
// T340115
'campaignevents-edit-field-clickwrap-checkbox-label',
// T322209
'campaignevents-edit-form-questions-pii-notice',
// T357869
'pt-movepage-page-count-limit',
'grouppage-checkuser',
'grouppage-suppress',
];
static $allbutmetawikikeys = [
// T221526
'apierror-urlshortener-disabled',
// T230253
'apierror-urlshortener-permissiondenied',
// T331743
'centralauth-admin-log-otherwiki',
// T230253
'urlshortener-badaccessgroups',
// T221526
'urlshortener-disabled',
];
// Temporarily override grouppage-suppress to grouppage-oversight,
// to avoid breaking links. See T112147.
# $keys['grouppage-suppress'] = 'grouppage-oversight';
if ( $wmgRealm === 'labs' ) {
$keys['privacypage'] = 'wikimedia-privacypage-labs';
}
$languageCode = $this->options->get( MainConfigNames::LanguageCode );
$transformationCallback = static function ( string $key, MessageCache $cache ) use ( $languageCode ): string {
$transformedKey = "wikimedia-$key";
// MessageCache uses ucfirst if ord( key ) is < 128, which is true of all
// of the above. Revisit if non-ASCII keys are used.
$ucKey = ucfirst( $key );
if (
/*
* Override order:
* 1. If the MediaWiki:$ucKey page exists, use the key unprefixed
* (in all languages) with normal fallback order. Specific
* language pages (MediaWiki:$ucKey/xy) are not checked when
* deciding which key to use, but are still used if applicable
* after the key is decided.
*
* 2. Otherwise, use the prefixed key with normal fallback order
* (including MediaWiki pages if they exist).
*/
$cache->getMsgFromNamespace( $ucKey, $languageCode ) === false
) {
return $transformedKey;
}
return $key;
};
foreach ( $keysToOverride as $key ) {
$keys[$key] = $transformationCallback;
}
if ( $this->options->get( MainConfigNames::DBname ) !== 'metawiki' ) {
foreach ( $allbutmetawikikeys as $key ) {
$keys[$key] = $transformationCallback;
}
}
$licensing = $this->options->get( 'WikimediaMessagesLicensing' );
$rightsText = $this->options->get( MainConfigNames::RightsText );
switch ( $licensing ) {
case 'mediawiki':
$keys['mobile-frontend-license-links'] = 'mediawiki.org-mobile-license-links';
break;
case 'wikidata':
$keys['mobile-frontend-license-links'] = 'wikidata-mobile-license-links';
break;
case 'wikifunctions':
$keys['mobile-frontend-license-links'] = 'wikifunctions-mobile-license-links';
break;
case 'commons':
case 'standard':
$keys['mobile-frontend-license-links'] = 'wikimedia-mobile-license-links';
break;
case 'wikinews':
// This is necessary because MobileFrontend doesn't always display the license based on
// config settings (T296791)
if ( $rightsText === 'Creative Commons Attribution 3.0' ) {
$keys['mobile-frontend-license-links'] = 'wikinews-mobile-license-links-ccby30';
} else {
$keys['mobile-frontend-license-links'] = 'wikinews-mobile-license-links';
}
break;
default:
throw new ConfigException( "Unknown value for WikimediaMessagesLicensing: '$licensing'" );
}
$keys['mainpage-title-loggedin'] = function ( string $key ): string {
return ( $this->mobileContext && $this->mobileContext->shouldDisplayMobileView() ) ?
'wikimedia-mobile-mainpage-title-loggedin' : $key;
};
}
private function getShortRightsLink(): string {
$rightsText = $this->options->get( MainConfigNames::RightsText );
$rightsPage = $this->options->get( MainConfigNames::RightsPage );
$rightsUrl = $this->options->get( MainConfigNames::RightsUrl );
$commonLicenses = [
'Creative Commons Attribution-Share Alike 4.0' => 'CC BY-SA 4.0',
'Creative Commons Attribution-Share Alike 3.0' => 'CC BY-SA 3.0',
'Creative Commons Attribution 3.0' => 'CC BY 3.0',
'Creative Commons Attribution 2.5' => 'CC BY 2.5',
];
if ( isset( $commonLicenses[$rightsText] ) ) {
$rightsText = $commonLicenses[$rightsText];
}
if ( $rightsPage ) {
$title = Title::newFromText( $rightsPage );
$link = $this->linkRenderer->makeKnownLink( $title, new HtmlArmor( $rightsText ), [] );
} elseif ( $rightsUrl ) {
$link = Linker::makeExternalLink( $rightsUrl, $rightsText, true, '', [] );
} else {
$link = $rightsText;
}
return $link;
}
/**
* Override for copyright message in skin footer.
*
* @see https://www.mediawiki.org/wiki/Manual:Hooks/SkinCopyrightFooterMessage
*
* @param Title $title
* @param string $type
* @param MessageSpecifier &$msgSpec
*/
public function onSkinCopyrightFooterMessage( $title, $type, &$msgSpec ) {
if ( $type === 'history' ) {
return;
}
$licensing = $this->options->get( 'WikimediaMessagesLicensing' );
$isMobile = $this->mobileContext && $this->mobileContext->shouldDisplayMobileView();
switch ( $licensing ) {
case 'wikidata':
// Wikidata is licensed under CC-BY-SA 4.0 only, no GFDL. (Also, the data is under CC0.)
$msgSpec = Message::newFromSpecifier( 'wikidata-copyright-footer' );
break;
case 'mediawiki':
// MediaWiki.org has a special licence for the Help: namespace.
$msgSpec = Message::newFromSpecifier( 'mediawiki.org-copyright-footer' );
break;
case 'commons':
// Commons has a special licence for the structured data.
// TODO: Should we also mention the special Data: namespace?
$msgSpec = Message::newFromSpecifier( 'wikimedia-commons-copyright-footer' );
break;
case 'standard':
// Almost all Wikimedia wikis using CC-BY-SA 4.0 are also dual-licensed under GFDL.
$msgSpec = $isMobile
? Message::newFromSpecifier( 'mobile-frontend-copyright' )->rawParams( $this->getShortRightsLink() )
: Message::newFromSpecifier( 'wikimedia-copyright-footer' );
break;
case 'wikinews':
// Use the default MediaWiki message. (It's overridden locally on most Wikinewses.)
$msgSpec = $isMobile
? Message::newFromSpecifier( 'mobile-frontend-copyright' )->rawParams( $this->getShortRightsLink() )
: $msgSpec;
break;
case 'wikifunctions':
// Wikifunctions like Wikidata is licensed under CC-BY-SA 4.0 only, no GFDL. The data is
// under CC0. The code is under Apache 2.0.
$msgSpec = Message::newFromSpecifier( 'wikifunctions-site-footer-copyright-footer' );
break;
default:
throw new ConfigException( "Unknown value for WikimediaMessagesLicensing: '$licensing'" );
}
}
/**
* Override for copyright message on edit page.
*
* @see https://www.mediawiki.org/wiki/Manual:Hooks/EditPageCopyrightWarning
*
* @param Title $title
* @param array &$msg
*/
public function onEditPageCopyrightWarning( $title, &$msg ) {
$licensing = $this->options->get( 'WikimediaMessagesLicensing' );
switch ( $licensing ) {
case 'wikidata':
case 'wikifunctions':
// Wikidata and Wikifunctions are licensed under CC-BY-SA 4.0 only, no GFDL.
$msg = [ 'wikimedia-copyrightwarning-ccbysa40only' ];
break;
case 'mediawiki':
// MediaWiki.org pages are dual-licensed under CC-BY-SA 4.0 and GFDL, except for the Help: namespace.
$msg = [ 'mediawiki.org-copyrightwarning' ];
break;
case 'commons':
case 'standard':
// Almost all Wikimedia wikis using CC-BY-SA 4.0 are also dual-licensed under GFDL.
$msg = [ 'wikimedia-copyrightwarning' ];
break;
case 'wikinews':
// Use the default MediaWiki message. (It's overridden locally on most Wikinewses.)
break;
default:
throw new ConfigException( "Unknown value for WikimediaMessagesLicensing: '$licensing'" );
}
}
/**
* Override for copyright messages (DiscussionTools extension).
*
* @param array &$messages
* @param MessageLocalizer $context
* @param Config $config
*/
public static function onDiscussionToolsTermsOfUseMessages(
array &$messages, MessageLocalizer $context, Config $config
) {
$licensing = $config->get( 'WikimediaMessagesLicensing' );
switch ( $licensing ) {
case 'wikidata':
case 'wikifunctions':
// Do not use $wgRightsText or $wgRightsPage, as they are customized for the API (T112606).
$rightsUrl = $config->get( 'RightsUrl' );
$rightsText = 'Creative Commons Attribution-Share Alike 4.0';
$links = [ "[$rightsUrl $rightsText]", 1 ];
break;
case 'wikinews':
// Add the license name to the terms-of-use message
$rightsUrl = $config->get( 'RightsUrl' );
$rightsText = $config->get( 'RightsText' );
$links = [ "[$rightsUrl $rightsText]", 1 ];
break;
case 'commons':
case 'mediawiki':
case 'standard':
// Add the license names to the terms-of-use message - dual-licensed wikis
$links = [ $context->msg( 'wikimedia-license-links' )->plain(), 2 ];
break;
default:
throw new ConfigException( "Unknown value for WikimediaMessagesLicensing: '$licensing'" );
}
$messages['reply'] = array_merge( [ 'wikimedia-discussiontools-replywidget-terms-click',
$context->msg( 'discussiontools-replywidget-reply' )->text() ], $links );
$messages['newtopic'] = array_merge( [ 'wikimedia-discussiontools-replywidget-terms-click',
$context->msg( 'discussiontools-replywidget-newtopic' )->text() ], $links );
}
/**
* Override for copyright messages (Flow extension).
*
* @param array &$messages
* @param MessageLocalizer $context
* @param Config $config
*/
public static function onFlowTermsOfUseMessages(
array &$messages, MessageLocalizer $context, Config $config
) {
$licensing = $config->get( 'WikimediaMessagesLicensing' );
switch ( $licensing ) {
case 'wikidata':
case 'wikifunctions':
// Do not use $wgRightsText or $wgRightsPage, as they are customized for the API (T112606).
$rightsUrl = $config->get( 'RightsUrl' );
$rightsText = 'Creative Commons Attribution-Share Alike 4.0';
$links = [ "[$rightsUrl $rightsText]", 1 ];
break;
case 'wikinews':
// Add the license name to the terms-of-use message
$rightsUrl = $config->get( 'RightsUrl' );
$rightsText = $config->get( 'RightsText' );
$links = [ "[$rightsUrl $rightsText]", 1 ];
break;
case 'commons':
case 'mediawiki':
case 'standard':
// Add the license names to the terms-of-use message - dual-licensed wikis
$links = [ $context->msg( 'wikimedia-license-links' )->plain(), 2 ];
break;
default:
throw new ConfigException( "Unknown value for WikimediaMessagesLicensing: '$licensing'" );
}
$messages['edit'] = array_merge( [ 'wikimedia-flow-terms-of-use-edit' ], $links );
$messages['lock-topic'] = array_merge( [ 'wikimedia-flow-terms-of-use-lock-topic' ], $links );
$messages['new-topic'] = array_merge( [ 'wikimedia-flow-terms-of-use-new-topic' ], $links );
$messages['reply'] = array_merge( [ 'wikimedia-flow-terms-of-use-reply' ], $links );
$messages['summarize'] = array_merge( [ 'wikimedia-flow-terms-of-use-summarize' ], $links );
$messages['unlock-topic'] = array_merge( [ 'wikimedia-flow-terms-of-use-unlock-topic' ], $links );
}
/**
* Add links to the footer of every page:
* - "Developers" (T35464),
* - "Statistics" (T235803), and
* - "Cookie statement" (T124366)
*
* @see https://www.mediawiki.org/wiki/Manual:Hooks/SkinAddFooterLinks
*
* @param Skin $skin
* @param string $key
* @param array &$footerLinks
*/
/*
Not relevant to WickedGov --2025-04-15*/
public function onSkinAddFooterLinks( Skin $skin, string $key, array &$footerLinks ) {
return;
if ( $key !== 'places' ) {
return;
}
$devDestination = Skin::makeInternalOrExternalUrl(
$skin->msg( 'wikimedia-developers-url' )->inContentLanguage()->text()
);
$footerLinks['developers'] = Html::element(
'a',
[ 'href' => $devDestination ],
$skin->msg( 'wikimedia-developers' )->text()
);
$statsDestination = Skin::makeInternalOrExternalUrl(
$skin->msg(
'wikimedia-statslink-url', $skin->getConfig()->get( 'ServerName' )
)->inContentLanguage()->text()
);
$footerLinks['statslink'] = Html::element(
'a',
[ 'href' => $statsDestination ],
$skin->msg( 'wikimedia-statslink' )->text()
);
$cookieDestination = Skin::makeInternalOrExternalUrl(
$skin->msg( 'wikimedia-cookiestatement-page' )->inContentLanguage()->text()
);
$footerLinks['cookiestatement'] = Html::element(
'a',
[ 'href' => $cookieDestination ],
$skin->msg( 'wikimedia-cookiestatement' )->text()
);
}
/**
* Change which message is shown when TorBlock triggers (TorBlock extension)
*
* @todo FIXME: Should have a specific message for WMF projects (T44231)
*
* @todo once TorBlock updates to use hook interfaces that can be implemented,
* convert to using this class as a hook handler and make non-static with DI
*
* @param string &$msg The message key
*/
public static function onTorBlockBlockedMsg( &$msg ) {
$msg = 'wikimedia-torblock-blocked';
}
/**
* Require the creation of MediaWiki:Licenses to enable uploading.
* This should prevent a lot of uploading without licenses on small wikis;
* some or many of the small WMF wikis do not have any license options,
* which is really needed for our copyright policy.
*
* Do not require it when licenses is in $wgForceUIMsgAsContentMsg,
* to prevent checking each subpage of MediaWiki:Licenses.
*
* @param SpecialUpload $upload
* @throws ErrorPageError
*/
public function onUploadForm_initial( $upload ) {
$forceUIMsgAsContentMsg = $this->options->get( MainConfigNames::ForceUIMsgAsContentMsg );
// TODO inject something to replace use of wfMessage
if ( !in_array( 'licenses', $forceUIMsgAsContentMsg )
&& wfMessage( 'licenses' )->inContentLanguage()->isDisabled()
) {
throw new ErrorPageError( 'uploaddisabled', 'wikimedia-upload-nolicenses' );
}
}
/**
* Override `$wgGrammarForms` for Wikimedia sites as a more convenient form
* than setting in InitialiseSettings.php. Initial version was compiled from
* then-current Wikimedia configuration and contents of LanguageXx.php.
*/
public static function onRegistration() {
global $wgGrammarForms;
$wgGrammarForms['ang'] = [
// accusative
'wrēgendlīc' => [
'Wikipǣdia' => 'Wikipǣdie',
'Wikiwordbōc' => 'Wikiwordbōc',
],
// genitive
'geāgniendlīc' => [
'Wikipǣdia' => 'Wikipǣdie',
'Wikiwordbōc' => 'Wikiwordbēc',
],
// dative
'forgifendlīc' => [
'Wikipǣdia' => 'Wikipǣdie',
'Wikiwordbōc' => 'Wikiwordbēc',
],
// instrumental
'tōllīc' => [
'Wikipǣdia' => 'Wikipǣdie',
'Wikiwordbōc' => 'Wikiwordbēc',
],
];
$wgGrammarForms['be'] = [
// genitive
'родны' => [
'Віківіды' => 'Віківідаў',
'Вікіданыя' => 'Вікіданых',
'Вікікнігі' => 'Вікікніг',
'Вікікрыніцы' => 'Вікікрыніц',
'Вікінавіны' => 'Вікінавін',
'Вікіслоўнік' => 'Вікіслоўніка',
'Вікіпедыя' => 'Вікіпедыі',
],
// accusative
'вінавальны' => [
'Вікіпедыя' => 'Вікіпедыю',
],
// prepositional
'месны' => [
'Віківіды' => 'Віківідах',
'Вікіданыя' => 'Вікіданых',
'Вікікнігі' => 'Вікікнігах',
'Вікікрыніцы' => 'Вікікрыніцах',
'Вікінавіны' => 'Вікінавінах',
'Вікіслоўнік' => 'Вікіслоўніку',
'Вікіпедыя' => 'Вікіпедыі',
],
];
$wgGrammarForms['be-tarask'] = [
// genitive
'родны' => [
'Віківіды' => 'Віківідаў',
'Вікізьвесткі' => 'Вікізьвестак',
'Вікікнігі' => 'Вікікніг',
'Вікікрыніцы' => 'Вікікрыніц',
'Вікімэдыя' => 'Вікімэдыі',
'Вікінавіны' => 'Вікінавін',
'Вікіпэдыя' => 'Вікіпэдыі',
'Вікіслоўнік' => 'Вікіслоўніка',
'Вікісховішча' => 'Вікісховішча',
'Фундацыя «Вікімэдыя»' => 'Фундацыі «Вікімэдыя»',
],
// dative
'давальны' => [
'Віківіды' => 'Віківідам',
'Вікізьвесткі' => 'Вікізьвесткам',
'Вікікнігі' => 'Вікікнігам',
'Вікікрыніцы' => 'Вікікрыніцам',
'Вікімэдыя' => 'Вікімэдыі',
'Вікінавіны' => 'Вікінавінам',
'Вікіпэдыя' => 'Вікіпэдыі',
'Вікіслоўнік' => 'Вікіслоўніку',
'Вікісховішча' => 'Вікісховішчу',
'Фундацыя «Вікімэдыя»' => 'Фундацыі «Вікімэдыя»',
],
// accusative
'вінавальны' => [
'Віківіды' => 'Віківіды',
'Вікізьвесткі' => 'Вікізьвесті',
'Вікікнігі' => 'Вікікнігі',
'Вікікрыніцы' => 'Вікікрыніцы',
'Вікімэдыя' => 'Вікімэдыю',
'Вікінавіны' => 'Вікінавіны',
'Вікіпэдыя' => 'Вікіпэдыю',
'Вікіслоўнік' => 'Вікіслоўнік',
'Вікісховішча' => 'Вікісховішча',
'Фундацыя «Вікімэдыя»' => 'Фундацыю «Вікімэдыя»',
],
// instrumental
'творны' => [
'Віківіды' => 'Віківідамі',
'Вікізьвесткі' => 'Вікізьвесткамі',
'Вікікнігі' => 'Вікікнігамі',
'Вікікрыніцы' => 'Вікікрыніцамі',
'Вікімэдыя' => 'Вікімэдыяй',
'Вікінавіны' => 'Вікінавінамі',
'Вікіпэдыя' => 'Вікіпэдыяй',
'Вікіслоўнік' => 'Вікіслоўнікам',
'Вікісховішча' => 'Вікісховішчам',
'Фундацыя «Вікімэдыя»' => 'Фундацыяй «Вікімэдыя»',
],
// prepositional
'месны' => [
'Віківіды' => 'Віківідах',
'Вікізьвесткі' => 'Вікізьвестках',
'Вікікнігі' => 'Вікікнігах',
'Вікікрыніцы' => 'Вікікрыніцах',
'Вікімэдыя' => 'Вікімэдыі',
'Вікінавіны' => 'Вікінавінах',
'Вікіпэдыя' => 'Вікіпэдыі',
'Вікіслоўнік' => 'Вікіслоўніку',
'Вікісховішча' => 'Вікісховішчы',
'Фундацыя «Вікімэдыя»' => 'Фундацыі «Вікімэдыя»',
],
];
$wgGrammarForms['bs'] = [
// genitive
'genitiv' => [
'Vikirječnik' => 'Wikirječnika',
'Wikicitati' => 'Wikicitata',
'Wikiizvor' => 'Wikiizvora',
'Wikiknjige' => 'Wikiknjiga',
'Wikipedia' => 'Wikipedije',
'Wikipodaci' => 'Wikipodataka',
'Wikimedia Commons' => 'Wikimedia Commonsa',
],
// dative
'dativ' => [
'Vikirječnik' => 'Wikirječniku',
'Wikicitati' => 'Wikicitatima',
'Wikiizvor' => 'Wikiizvoru',
'Wikiknjige' => 'Wikiknjigama',
'Wikipedia' => 'Wikipediji',
'Wikipodaci' => 'Wikipodacima',
'Wikivijesti' => 'Wikivijestima',
'Wikimedia Commons' => 'Wikimedia Commonsu',
],
// accusative
'akuzativ' => [
'Vikirječnik' => 'Wikirječnik',
'Wikicitati' => 'Wikicitate',
'Wikiizvor' => 'Wikiizvora',
'Wikipedia' => 'Wikipediju',
'Wikipodaci' => 'Wikipodatke',
],
// vocative
'vokativ' => [
'Vikirječnik' => 'Wikirječniče',
'Wikiizvor' => 'Wikizivoru',
'Wikipedia' => 'Wikipedijo',
'Wikimedia Commons' => 'Wikimedia Commonse',
],
// instrumental
'instrumental' => [
'Vikirječnik' => 'Wikirječnikom',
'Wikicitati' => 'Wikicitatima',
'Wikiizvor' => 'Wikiizvorom',
'Wikiknjige' => 'Wikiknjigama',
// T130141
'Wikipedia' => 'Wikipedijom',
'Wikipodaci' => 'Wikipodacima',
'Wikivijesti' => 'Wikivijestima',
'Wikimedia Commons' => 'Wikimedia Commonsom',
],
// locative
'lokativ' => [
'Vikirječnik' => 'Wikirječniku',
'Wikicitati' => 'Wikicitatima',
'Wikiizvor' => 'Wikiizvoru',
'Wikiknjige' => 'Wikiknjigama',
'Wikipedia' => 'Wikipediji',
'Wikipodaci' => 'Wikipodacima',
'Wikivijesti' => 'Wikivijestima',
'Wikimedia Commons' => 'Wikimedia Commonsu',
],
];
$wgGrammarForms['cs'] = [
// only forms different than default/given
'1sg' => [
'Wikibooks' => 'Wikiknihy',
'Wikifunctions' => 'Wikifunkce',
'Wikinews' => 'Wikizprávy',
'Wikipedia' => 'Wikipedie',
'Wikiquote' => 'Wikicitáty',
'Wikisource' => 'Wikizdroje',
'Wikispecies' => 'Wikidruhy',
'Wikiversity' => 'Wikiverzita',
'Wikivoyage' => 'Wikicesty',
'Wiktionary' => 'Wikislovník',
],
'2sg' => [
'uživatel' => 'uživatele',
'Wikibooks' => 'Wikiknih',
'Wikidata' => 'Wikidat',
'Wikifunctions' => 'Wikifunkcí',
'Wikinews' => 'Wikizpráv',
'Wikipedia' => 'Wikipedie',
'Wikiquote' => 'Wikicitátů',
'Wikisource' => 'Wikizdrojů',
'Wikispecies' => 'Wikidruhů',
'Wikiversity' => 'Wikiverzity',
'Wikivoyage' => 'Wikicest',
'Wiktionary' => 'Wikislovníku',
'Wikicesty' => 'Wikicest',
'Wikicitáty' => 'Wikicitátů',
'Wikidruhy' => 'Wikidruhů',
'Wikifunkce' => 'Wikifunkcí',
'Wikiknihy' => 'Wikiknih',
'Wikislovník' => 'Wikislovníku',
'Wikiverzita' => 'Wikiverzity',
'Wikizdroje' => 'Wikizdrojů',
'Wikizprávy' => 'Wikizpráv',
],
'3sg' => [
'uživatel' => 'uživateli',
'Wikibooks' => 'Wikiknihám',
'Wikidata' => 'Wikidatům',
'Wikifunctions' => 'Wikifunkcím',
'Wikinews' => 'Wikizprávám',
'Wikipedia' => 'Wikipedii',
'Wikiquote' => 'Wikicitátům',
'Wikisource' => 'Wikizdrojům',
'Wikispecies' => 'Wikidruhům',
'Wikiversity' => 'Wikiverzitě',
'Wikivoyage' => 'Wikicestám',
'Wiktionary' => 'Wikislovníku',
'Wikicesty' => 'Wikicestám',
'Wikicitáty' => 'Wikicitátům',
'Wikidruhy' => 'Wikidruhům',
'Wikifunkce' => 'Wikifunkcím',
'Wikiknihy' => 'Wikiknihám',
'Wikipedie' => 'Wikipedii',
'Wikislovník' => 'Wikislovníku',
'Wikiverzita' => 'Wikiverzitě',
'Wikizdroje' => 'Wikizdrojům',
'Wikizprávy' => 'Wikizprávám',
],
'4sg' => [
'uživatel' => 'uživatele',
'Wikibooks' => 'Wikiknihy',
'Wikifunctions' => 'Wikifunkce',
'Wikinews' => 'Wikizprávy',
'Wikipedia' => 'Wikipedii',
'Wikiquote' => 'Wikicitáty',
'Wikisource' => 'Wikizdroje',
'Wikispecies' => 'Wikidruhy',
'Wikiversity' => 'Wikiverzitu',
'Wikivoyage' => 'Wikicesty',
'Wiktionary' => 'Wikislovník',
'Wikipedie' => 'Wikipedii',
'Wikiverzita' => 'Wikiverzitu',
],
'5sg' => [
'uživatel' => 'uživateli',
'Wikibooks' => 'Wikiknihy',
'Wikifunctions' => 'Wikifunkce',
'Wikinews' => 'Wikizprávy',
'Wikipedia' => 'Wikipedie',
'Wikiquote' => 'Wikicitáty',
'Wikisource' => 'Wikizdroje',
'Wikispecies' => 'Wikidruhy',
'Wikiversity' => 'Wikiverzito',
'Wikivoyage' => 'Wikicesty',
'Wiktionary' => 'Wikislovníku',
'Wikislovník' => 'Wikislovníku',
'Wikiverzita' => 'Wikiverzito',
],
'6sg' => [
'uživatel' => 'uživateli',
'Wikibooks' => 'Wikiknihách',
'Wikidata' => 'Wikidatech',
'Wikifunctions' => 'Wikifunkcích',
'Wikinews' => 'Wikizprávách',
'Wikipedia' => 'Wikipedii',
'Wikiquote' => 'Wikicitátech',
'Wikisource' => 'Wikizdrojích',
'Wikispecies' => 'Wikidruzích',
'Wikiversity' => 'Wikiverzitě',
'Wikivoyage' => 'Wikicestách',
'Wiktionary' => 'Wikislovníku',
'Wikicesty' => 'Wikicestách',
'Wikicitáty' => 'Wikicitátech',
'Wikidruhy' => 'Wikidruzích',
'Wikifunkce' => 'Wikifunkcích',
'Wikiknihy' => 'Wikiknihách',
'Wikipedie' => 'Wikipedii',
'Wikislovník' => 'Wikislovníku',
'Wikiverzita' => 'Wikiverzitě',
'Wikizdroje' => 'Wikizdrojích',
'Wikizprávy' => 'Wikizprávách',
],
'7sg' => [
'uživatel' => 'uživatelem',
'Wikibooks' => 'Wikiknihami',
'Wikidata' => 'Wikidaty',
'Wikifunctions' => 'Wikifunkcemi',
'Wikinews' => 'Wikizprávami',
'Wikipedia' => 'Wikipedií',
'Wikiquote' => 'Wikicitáty',
'Wikisource' => 'Wikizdroji',
'Wikispecies' => 'Wikidruhy',
'Wikiversity' => 'Wikiverzitou',
'Wikivoyage' => 'Wikicestami',
'Wiktionary' => 'Wikislovníkem',
'Wikicesty' => 'Wikicestami',
'Wikifunkce' => 'Wikifunkcemi',
'Wikiknihy' => 'Wikiknihami',
'Wikipedie' => 'Wikipedií',
'Wikislovník' => 'Wikislovníkem',
'Wikiverzita' => 'Wikiverzitou',
'Wikizdroje' => 'Wikizdroji',
'Wikizprávy' => 'Wikizprávami',
],
'1pl' => [
'uživatel' => 'uživatelé',
'Wikibooks' => 'Wikiknihy',
'Wikifunctions' => 'Wikifunkce',
'Wikinews' => 'Wikizprávy',
'Wikipedia' => 'Wikipedie',
'Wikiquote' => 'Wikicitáty',
'Wikisource' => 'Wikizdroje',
'Wikispecies' => 'Wikidruhy',
'Wikiversity' => 'Wikiverzity',
'Wikivoyage' => 'Wikicesty',
'Wiktionary' => 'Wikislovníky',
'Wikislovník' => 'Wikislovníky',
'Wikiverzita' => 'Wikiverzity',
],
'2pl' => [
'uživatel' => 'uživatelů',
'Wikibooks' => 'Wikiknih',
'Wikidata' => 'Wikidat',
'Wikifunctions' => 'Wikifunkcí',
'Wikinews' => 'Wikizpráv',
'Wikipedia' => 'Wikipedií',
'Wikiquote' => 'Wikicitátů',
'Wikisource' => 'Wikizdrojů',
'Wikispecies' => 'Wikidruhů',
'Wikiversity' => 'Wikiverzit',
'Wikivoyage' => 'Wikicest',
'Wiktionary' => 'Wikislovníků',
'Wikicesty' => 'Wikicest',
'Wikicitáty' => 'Wikicitátů',
'Wikidruhy' => 'Wikidruhů',
'Wikifunkce' => 'Wikifunkcí',
'Wikiknihy' => 'Wikiknih',
'Wikipedie' => 'Wikipedií',
'Wikislovník' => 'Wikislovníků',
'Wikiverzita' => 'Wikiverzit',
'Wikizdroje' => 'Wikizdrojů',
'Wikizprávy' => 'Wikizpráv',
],
'3pl' => [
'uživatel' => 'uživatelům',
'Wikibooks' => 'Wikiknihám',
'Wikidata' => 'Wikidatům',
'Wikifunctions' => 'Wikifunkcím',
'Wikinews' => 'Wikizprávám',
'Wikipedia' => 'Wikipediím',
'Wikiquote' => 'Wikicitátům',
'Wikisource' => 'Wikizdrojům',
'Wikispecies' => 'Wikidruhům',
'Wikiversity' => 'Wikiverzitám',
'Wikivoyage' => 'Wikicestám',
'Wiktionary' => 'Wikislovníkům',
'Wikicesty' => 'Wikicestám',
'Wikicitáty' => 'Wikicitátům',
'Wikidruhy' => 'Wikidruhům',
'Wikifunkce' => 'Wikifunkcím',
'Wikiknihy' => 'Wikiknihám',
'Wikipedie' => 'Wikipediím',
'Wikislovník' => 'Wikislovníkům',
'Wikiverzita' => 'Wikiverzitám',
'Wikizdroje' => 'Wikizdrojům',
'Wikizprávy' => 'Wikizprávám',
],
'4pl' => [
'uživatel' => 'uživatele',
'Wikibooks' => 'Wikiknihy',
'Wikifunctions' => 'Wikifunkce',
'Wikinews' => 'Wikizprávy',
'Wikipedia' => 'Wikipedie',
'Wikiquote' => 'Wikicitáty',
'Wikisource' => 'Wikizdroje',
'Wikispecies' => 'Wikidruhy',
'Wikiversity' => 'Wikiverzity',
'Wikivoyage' => 'Wikicesty',
'Wiktionary' => 'Wikislovníky',
'Wikislovník' => 'Wikislovníky',
'Wikiverzita' => 'Wikiverzity',
],
'5pl' => [
'uživatel' => 'uživatelé',
'Wikibooks' => 'Wikiknihy',
'Wikifunctions' => 'Wikifunkce',
'Wikinews' => 'Wikizprávy',
'Wikipedia' => 'Wikipedie',
'Wikiquote' => 'Wikicitáty',
'Wikisource' => 'Wikizdroje',
'Wikispecies' => 'Wikidruhy',
'Wikiversity' => 'Wikiverzity',
'Wikivoyage' => 'Wikicesty',
'Wiktionary' => 'Wikislovníky',
'Wikislovník' => 'Wikislovníky',
'Wikiverzita' => 'Wikiverzity',
],
'6pl' => [
'uživatel' => 'uživatelích',
'Wikibooks' => 'Wikiknihách',
'Wikidata' => 'Wikidatech',
'Wikifunctions' => 'Wikifunkcích',
'Wikinews' => 'Wikizprávách',
'Wikipedia' => 'Wikipediích',
'Wikiquote' => 'Wikicitátech',
'Wikisource' => 'Wikizdrojích',
'Wikispecies' => 'Wikidruzích',
'Wikiversity' => 'Wikiverzitách',
'Wikivoyage' => 'Wikicestách',
'Wiktionary' => 'Wikislovnících',
'Wikicesty' => 'Wikicestách',
'Wikicitáty' => 'Wikicitátech',
'Wikidruhy' => 'Wikidruzích',
'Wikifunkce' => 'Wikifunkcích',
'Wikiknihy' => 'Wikiknihách',
'Wikipedie' => 'Wikipediích',
'Wikislovník' => 'Wikislovnících',
'Wikiverzita' => 'Wikiverzitách',
'Wikizdroje' => 'Wikizdrojích',
'Wikizprávy' => 'Wikizprávách',
],
'7pl' => [
'uživatel' => 'uživateli',
'Wikibooks' => 'Wikiknihami',
'Wikidata' => 'Wikidaty',
'Wikifunctions' => 'Wikifunkcemi',
'Wikinews' => 'Wikizprávami',
'Wikipedia' => 'Wikipediemi',
'Wikiquote' => 'Wikicitáty',
'Wikisource' => 'Wikizdroji',
'Wikispecies' => 'Wikidruhy',
'Wikiversity' => 'Wikiverzitami',
'Wikivoyage' => 'Wikicestami',
'Wiktionary' => 'Wikislovníky',
'Wikicesty' => 'Wikicestami',
'Wikifunkce' => 'Wikifunkcemi',
'Wikiknihy' => 'Wikiknihami',
'Wikipedie' => 'Wikipediemi',
'Wikislovník' => 'Wikislovníky',
'Wikiverzita' => 'Wikiverzitami',
'Wikizdroje' => 'Wikizdroji',
'Wikizprávy' => 'Wikizprávami',
],
];
$wgGrammarForms['dsb'] = [
// genitive
'genitiw' => [
'Wikipedija' => 'Wikipedije',
'Wikiknihi' => 'Wikiknih',
'Wikinowiny' => 'Wikinowin',
'Wikižórło' => 'Wikižórła',
'Wikicitaty' => 'Wikicitatow',
'Wikisłownik' => 'Wikisłownika',
],
// dative
'datiw' => [
'Wikipedija' => 'Wikipediji',
'Wikiknihi' => 'Wikikniham',
'Wikinowiny' => 'Wikinowinam',
'Wikižórło' => 'Wikižórłu',
'Wikicitaty' => 'Wikicitatam',
'Wikisłownik' => 'Wikisłownikej',
],
// accusative
'akuzativ' => [
'Wikipedija' => 'Wikipediju',
'Wikiknihi' => 'Wikiknknihi',
],
// instrumental
'instrumental' => [
'Wikipedija' => 'Wikipediju',
'Wikiknihi' => 'Wikiknihami',
'Wikinowiny' => 'Wikinowinami',
'Wikižórło' => 'Wikižórłom',
'Wikicitaty' => 'Wikicitatami',
'Wikisłownik' => 'Wikisłownikom',
],
// locative
'lokatiw' => [
'Wikipedija' => 'Wikipediji',
'Wikiknihi' => 'Wikiknihach',
'Wikinowiny' => 'Wikinowinach',
'Wikižórło' => 'Wikižórłu',
'Wikicitaty' => 'Wikicitatach',
'Wikisłownik' => 'Wikisłowniku',
],
];
$wgGrammarForms['et'] = [
'genitive' => [
'Vikisõnastik' => 'Vikisõnastiku',
'Vikitekstid' => 'Vikitekstide',
'Vikitsitaadid' => 'Vikitsitaatide',
'Vikiõpikud' => 'Vikiõpikute',
],
'partitive' => [
'Vikipeedia' => 'Vikipeediat',
'Vikisõnastik' => 'Vikisõnastikku',
'Vikitekstid' => 'Vikitekste',
'Vikitsitaadid' => 'Vikitsitaate',
'Vikiõpikud' => 'Vikiõpikuid',
],
'illative' => [
'Vikipeedia' => 'Vikipeediasse',
'Vikisõnastik' => 'Vikisõnastikku',
'Vikitekstid' => 'Vikitekstidesse',
'Vikitsitaadid' => 'Vikitsitaatidesse',
'Vikiõpikud' => 'Vikiõpikutesse',
],
'inessive' => [
'Vikipeedia' => 'Vikipeedias',
'Vikisõnastik' => 'Vikisõnastikus',
'Vikitekstid' => 'Vikitekstides',
'Vikitsitaadid' => 'Vikitsitaatides',
'Vikiõpikud' => 'Vikiõpikutes',
],
'elative' => [
'Vikipeedia' => 'Vikipeediast',
'Vikisõnastik' => 'Vikisõnastikust',
'Vikitekstid' => 'Vikitekstidest',
'Vikitsitaadid' => 'Vikitsitaatidest',
'Vikiõpikud' => 'Vikiõpikutest',
],
];
$wgGrammarForms['fi'] = [
'genitive' => [
'Wikiuutiset' => 'Wikiuutisten',
'Wikisitaatit' => 'Wikisitaattien',
'Wikimedia Suomi' => 'Wikimedia Suomen',
'Wikimatkat' => 'Wikimatkojen',
],
'partitive' => [
'Wikiuutiset' => 'Wikiuutisia',
'Wikisitaatit' => 'Wikisitaatteja',
'Wikimedia Suomi' => 'Wikimedia Suomea',
'Wikimatkat' => 'Wikimatkoja',
],
'elative' => [
'Wikiuutiset' => 'Wikiuutisista',
'Wikisitaatit' => 'Wikisitaateista',
'Wikimedia Suomi' => 'Wikimedia Suomesta',
'Wikimatkat' => 'Wikimatkoista',
],
'inessive' => [
'Wikiuutiset' => 'Wikiuutisissa',
'Wikisitaatit' => 'Wikisitaateissa',
'Wikimedia Suomi' => 'Wikimedia Suomessa',
'Wikimatkat' => 'Wikimatkoissa',
],
'illative' => [
'Wikiuutiset' => 'Wikiuutisiin',
'Wikisitaatit' => 'Wikisitaatteihin',
'Wikimedia Suomi' => 'Wikimedia Suomeen',
'Wikimatkat' => 'Wikimatkoihin',
],
];
$wgGrammarForms['ga'] = [
'genitive' => [
'Vicipéid' => 'Vicipéide',
'Vicífhoclóir' => 'Vicífhoclóra',
'Vicíleabhair' => 'Vicíleabhar',
'Vicíshliocht' => 'Vicíshleachta',
'Vicífhoinse' => 'Vicífhoinse',
'Vicíghnéithe' => 'Vicíghnéithe',
'Vicínuacht' => 'Vicínuachta',
],
];
$wgGrammarForms['gsw'] = [
// dative
'dativ' => [
'Wikipedia' => 'vo de Wikipedia',
'Wikinorchrichte' => 'vo de Wikinochrichte',
'Wiktionaire' => 'vom Wiktionaire',
'Wikibuecher' => 'vo de Wikibuecher',
'Wikisprüch' => 'vo de Wikisprüch',
'Wikiquälle' => 'vo de Wikiquälle',
],
// accusative
'akkusativ' => [
'Wikipedia' => 'd Wikipedia',
'Wikinorchrichte' => 'd Wikinorchrichte',
'Wiktionaire' => 's Wiktionaire',
'Wikibuecher' => 'd Wikibuecher',
'Wikisprüch' => 'd Wikisprüch',
'Wikiquälle' => 'd Wikiquälle',
],
// nominative
'nominativ' => [
'Wikipedia' => 'd Wikipedia',
'Wikinorchrichte' => 'd Wikinorchrichte',
'Wiktionaire' => 's Wiktionaire',
'Wikibuecher' => 'd Wikibuecher',
'Wikisprüch' => 'd Wikisprüch',
'Wikiquälle' => 'd Wikiquälle',
],
];
$wgGrammarForms['hsb'] = [
// genitive
'genitiw' => [
'Wikipedija' => 'Wikipedije',
'Wikiknihi' => 'Wikiknih',
'Wikinowiny' => 'Wikinowin',
'Wikižórło' => 'Wikižórła',
'Wikicitaty' => 'Wikicitatow',
'Wikisłownik' => 'Wikisłownika',
],
// dative
'datiw' => [
'Wikipedija' => 'Wikipediji',
'Wikiknihi' => 'Wikikniham',
'Wikinowiny' => 'Wikinowinam',
'Wikižórło' => 'Wikižórłu',
'Wikicitaty' => 'Wikicitatam',
'Wikisłownik' => 'Wikisłownikej',
],
// accusative
'akuzativ' => [
'Wikipedija' => 'Wikipediju',
'Wikiknihi' => 'Wikiknknihi',
],
// instrumental
'instrumental' => [
'Wikipedija' => 'Wikipediju',
'Wikiknihi' => 'Wikiknihami',
'Wikinowiny' => 'Wikinowinami',
'Wikižórło' => 'Wikižórłom',
'Wikicitaty' => 'Wikicitatami',
'Wikisłownik' => 'Wikisłownikom',
],
// locative
'lokatiw' => [
'Wikipedija' => 'Wikipediji',
'Wikiknihi' => 'Wikiknihach',
'Wikinowiny' => 'Wikinowinach',
'Wikižórło' => 'Wikižórłu',
'Wikicitaty' => 'Wikicitatach',
'Wikisłownik' => 'Wikisłowniku',
],
];
$wgGrammarForms['hu'] = [
'rol' => [
'Wikipédia' => 'Wikipédiáról',
'Wikidézet' => 'Wikidézetről',
'Wikiszótár' => 'Wikiszótárról',
'Wikikönyvek' => 'Wikikönyvekről',
],
'ba' => [
'Wikipédia' => 'Wikipédiába',
'Wikidézet' => 'Wikidézetbe',
'Wikiszótár' => 'Wikiszótárba',
'Wikikönyvek' => 'Wikikönyvekbe',
],
'k' => [
'Wikipédia' => 'Wikipédiák',
'Wikidézet' => 'Wikidézetek',
'Wikiszótár' => 'Wikiszótárak',
],
];
// T289767
$wgGrammarForms['ks'] = [
// ergative
'کرٛاوَل' => [
'وِکیٖلۄغَتھ' => 'وِکیٖلۄغتَن',
],
// dative
'دُکرٛٲوؠ' => [
'وِکیٖلۄغَتھ' => 'وِکیٖلۄغتَس',
],
// ablative
'آیِتؠ' => [
'وِکیٖلۄغَتھ' => 'وِکیٖلۄغتہٕ',
],
];
$wgGrammarForms['la'] = [
'genitive' => [
'Vicimedia Communia' => 'Vicimediorum Communium',
],
'ablative' => [
'Vicimedia Communia' => 'Vicimediis Communibus',
],
];
$wgGrammarForms['lv'] = [
'ģenitīvs' => [
'Vikipēdija' => 'Vikipēdijas',
'Vikivārdnīca' => 'Vikivārdnīcas',
],
'datīvs' => [
'Vikipēdija' => 'Vikipēdijai',
'Vikivārdnīca' => 'Vikivārdnīcai',
],
'akuzatīvs' => [
'Vikipēdija' => 'Vikipēdiju',
'Vikivārdnīca' => 'Vikivārdnīcu',
],
'lokatīvs' => [
'Vikipēdija' => 'Vikipēdijā',
'Vikivārdnīca' => 'Vikivārdnīcā',
],
];
$wgGrammarForms['pl'] = [
'D.lp' => [
'Wikicytaty' => 'Wikicytatów',
'Wikipedia' => 'Wikipedii',
'Wikipodróże' => 'Wikipodróży',
'Wikisłownik' => 'Wikisłownika',
'Wikiźródła' => 'Wikiźródeł',
'Wikidane' => 'Wikidanych',
'Wikimania' => 'Wikimanii',
'Wikifunkcje' => 'Wikifunkcji',
],
'C.lp' => [
'Wikicytaty' => 'Wikicytatom',
'Wikipedia' => 'Wikipedii',
'Wikipodróże' => 'Wikipodróżom',
'Wikisłownik' => 'Wikisłownikowi',
'Wikiźródła' => 'Wikiźródłom',
'Wikidane' => 'Wikidanym',
'Wikimania' => 'Wikimanii',
'Wikifunkcje' => 'Wikifunkcjom',
],
'B.lp' => [
'Wikipedia' => 'Wikipedię',
'Wikimania' => 'Wikimanię',
],
'N.lp' => [
'Wikicytaty' => 'Wikicytatami',
'Wikipedia' => 'Wikipedią',
'Wikipodróże' => 'Wikipodróżami',
'Wikisłownik' => 'Wikisłownikiem',
'Wikiźródła' => 'Wikiźródłami',
'Wikidane' => 'Wikidanymi',
'Wikimania' => 'Wikimanią',
'Wikifunkcje' => 'Wikifunkcjami',
],
'MS.lp' => [
'Wikicytaty' => 'Wikicytatach',
'Wikipedia' => 'Wikipedii',
'Wikipodróże' => 'Wikipodróżach',
'Wikisłownik' => 'Wikisłowniku',
'Wikiźródła' => 'Wikiźródłach',
'Wikidane' => 'Wikidanych',
'Wikimania' => 'Wikimanii',
'Wikifunkcje' => 'Wikifunkcjach',
],
'W.lp' => [
'Wikipedia' => 'Wikipedio',
'Wikisłownik' => 'Wikisłowniku',
'Wikimania' => 'Wikimanio',
],
];
$wgGrammarForms['rmy'] = [
// genitive (m.sg.)
'genitive-m-sg' => [
'Vikipidiya' => 'Vikipidiyako',
'Vikcyonaro' => 'Vikcyonaresko',
],
// genitive (f.sg.)
'genitive-f-sg' => [
'Vikipidiya' => 'Vikipidiyaki',
'Vikcyonaro' => 'Vikcyonareski',
],
// genitive (pl.)
'genitive-pl' => [
'Vikipidiya' => 'Vikipidiyake',
'Vikcyonaro' => 'Vikcyonareske',
],
// dative
'dativ' => [
'Vikipidiya' => 'Wikipediji',
'Vikcyonaro' => 'Vikcyonareske',
],
// locative
'locative' => [
'Vikipidiya' => 'Wikipedijo',
'Vikcyonaro' => 'Vikcyonareste',
],
// ablative
'ablative' => [
'Vikipidiya' => 'o Wikipediji',
'Vikcyonaro' => 'Vikcyonarestar',
],
// instrumental
'instrumental' => [
'Vikipidiya' => 'z Wikipedijo',
'Vikcyonaro' => 'Vikcyonaresa',
],
];
$wgGrammarForms['sk'] = [
'genitív' => [
'Wikipédia' => 'Wikipédie',
'Wikislovník' => 'Wikislovníku',
'Wikicitáty' => 'Wikicitátov',
'Wikiknihy' => 'Wikikníh',
],
'datív' => [
'Wikipédia' => 'Wikipédii',
'Wikislovník' => 'Wikislovníku',
'Wikicitáty' => 'Wikicitátom',
'Wikiknihy' => 'Wikiknihám',
],
'akuzatív' => [
'Wikipédia' => 'Wikipédiu',
'Wikislovník' => 'Wikislovník',
'Wikicitáty' => 'Wikicitáty',
'Wikiknihy' => 'Wikiknihy',
],
'lokál' => [
'Wikipédia' => 'Wikipédii',
'Wikislovník' => 'Wikislovníku',
'Wikicitáty' => 'Wikicitátoch',
'Wikiknihy' => 'Wikiknihách',
],
'inštrumentál' => [
'Wikipédia' => 'Wikipédiou',
'Wikislovník' => 'Wikislovníkom',
'Wikicitáty' => 'Wikicitátmi',
'Wikiknihy' => 'Wikiknihami',
],
];
$wgGrammarForms['sl'] = [
// genitive
'rodilnik' => [
'Wikipedija' => 'Wikipedije',
'Wikiknjige' => 'Wikiknjig',
'Wikinovice' => 'Wikinovic',
'Wikinavedek' => 'Wikinavedka',
'Wikivir' => 'Wikivira',
'Wikislovar' => 'Wikislovarja',
],
// dative
'dajalnik' => [
'Wikipedija' => 'Wikipediji',
'Wikiknjige' => 'Wikiknjigam',
'Wikinovice' => 'Wikinovicam',
'Wikinavedek' => 'Wikinavedku',
'Wikivir' => 'Wikiviru',
'Wikislovar' => 'Wikislovarju',
],
// accusative
'tožilnik' => [
'Wikipedija' => 'Wikipedijo',
// no need to transform the others
],
// locative
'mestnik' => [
'Wikipedija' => 'o Wikipediji',
'Wikiknjige' => 'o Wikiknjigah',
'Wikinovice' => 'o Wikinovicah',
'Wikinavedek' => 'o Wikinavedku',
'Wikivir' => 'o Wikiviru',
'Wikislovar' => 'o Wikislovarju',
],
// instrumental
'orodnik' => [
'Wikipedija' => 'z Wikipedijo',
'Wikiknjige' => 'z Wikiknjigami',
'Wikinovice' => 'z Wikinovicami',
'Wikinavedek' => 'z Wikinavedkom',
'Wikivir' => 'z Wikivirom',
'Wikislovar' => 'z Wikislovarjem',
],
];
$wgGrammarForms['sr-ec'] =
$wgGrammarForms['sr-cyrl'] = [
// genitive
'генитив' => [
'Викиречник' => 'Викиречника',
'Викицитат' => 'Викицитата',
'Викизворник' => 'Викизворника',
'Викикњиге' => 'Викикњига',
'Википедија' => 'Википедије',
'Википодаци' => 'Википодатака',
'Викимедијина остава' => 'Викимедијине оставе',
'Викиверзитет' => 'Викиверзитета',
],
// dative
'датив' => [
'Викиречник' => 'Викиречнику',
'Викицитат' => 'Викицитату',
'Викизворник' => 'Викизворнику',
'Викикњиге' => 'Викикњигама',
'Википедија' => 'Википедији',
'Википодаци' => 'Википодацима',
'Викиновости' => 'Викиновистима',
'Викимедијина остава' => 'Викимедијиној остави',
'Викиверзитет' => 'Викиверзитету',
],
// accusative
'акузатив' => [
'Викиречник' => 'Викиречник',
'Викицитат' => 'Викицитат',
'Викизворник' => 'Викизворник',
'Википедија' => 'Википедију',
'Википодаци' => 'Википодатке',
],
// vocative
'вокатив' => [
'Викиречник' => 'Викиречниче',
'Викизворник' => 'Викизворниче',
'Википедија' => 'Википедијо',
'Викимедијина остава' => 'Викимедијина оставо',
'Викиверзитет' => 'Викиверзитету',
],
// instrumental
'инструментал' => [
'Викиречник' => 'Викиречником',
'Викицитат' => 'Викицитатом',
'Викизворник' => 'Викизворником',
'Викикњиге' => 'Викикњигама',
'Википедија' => 'Википедијом',
'Википодаци' => 'Википодацима',
'Викиновости' => 'Викиновостима',
'Викимедијина остава' => 'Викимедијином оставом',
'Викиверзитет' => 'Викиверзитетом',
],
// locative
'локатив' => [
'Викиречник' => 'Викиречнику',
'Викицитат' => 'Викицитату',
'Викизворник' => 'Викизворнику',
'Викикњиге' => 'Викикњигама',
'Википедија' => 'Википедији',
'Википодаци' => 'Википодацима',
'Викиновости' => 'Викиновостима',
'Викимедијина остава' => 'Викимедијиној остави',
'Викиверзитет' => 'Викиверзитету',
],
];
$wgGrammarForms['sr-el'] =
$wgGrammarForms['sr-latn'] = [
// genitive
'genitiv' => [
'Vikirečnik' => 'Vikirečnika',
'Vikicitat' => 'Vikicitata',
'Vikizvornik' => 'Vikizvornika',
'Vikiknjige' => 'Vikiknjiga',
'Vikipedija' => 'Vikipedije',
'Vikipodaci' => 'Vikipodataka',
'Vikimedijina ostava' => 'Vikimedijine ostave',
'Vikiverzitet' => 'Vikiverziteta',
],
// dative
'dativ' => [
'Vikirečnik' => 'Vikirečniku',
'Vikicitat' => 'Vikicitatu',
'Vikizvornik' => 'Vikizvorniku',
'Vikiknjige' => 'Vikiknjigama',
'Vikipedija' => 'Vikipediji',
'Vikipodaci' => 'Vikipodacima',
'Vikinovosti' => 'Vikinovostima',
'Vikimedijina ostava' => 'Vikimedijinoj ostavi',
'Vikiverzitet' => 'Vikiverzitetu',
],
// accusative
'akuzativ' => [
'Vikirečnik' => 'Vikirečnik',
'Vikicitat' => 'Vikicitat',
'Vikizvornik' => 'Vikizvornik',
'Vikipedija' => 'Vikipediju',
'Vikipodaci' => 'Vikipodatke',
],
// vocative
'vokativ' => [
'Vikirečnik' => 'Vikirečniče',
'Vikizvornik' => 'Vikizvorniče',
'Vikipedija' => 'Vikipedijo',
'Vikimedijina ostava' => 'Vikimedijina ostavo',
'Vikiverzitet' => 'Vikiverzitetu',
],
// instrumental
'instrumental' => [
'Vikirečnik' => 'Vikirečnikom',
'Vikicitat' => 'Vikicitatom',
'Vikizvornik' => 'Vikizvornikom',
'Vikiknjige' => 'Vikiknjigama',
'Vikipedija' => 'Vikipedijom',
'Vikipodaci' => 'Vikipodacima',
'Vikinovosti' => 'Vikinovostima',
'Vikimedijina ostava' => 'Vikimedijinom ostavom',
'Vikiverzitet' => 'Vikiverzitetom',
],
// locative
'lokativ' => [
'Vikirečnik' => 'Vikirečniku',
'Vikicitat' => 'Vikicitatu',
'Vikizvornik' => 'Vikizvorniku',
'Vikiknjige' => 'Vikiknjigama',
'Vikipedija' => 'Vikipediji',
'Vikipodaci' => 'Vikipodacima',
'Vikinovosti' => 'Vikinovostima',
'Vikimedijina ostava' => 'Vikimedijinoj ostavi',
'Vikiverzitet' => 'Vikiverzitetu',
],
];
$wgGrammarForms['uk'] = [
// genitive
'genitive' => [
'Вікіпедія' => 'Вікіпедії',
'Вікісловник' => 'Вікісловника',
'Вікісховище' => 'Вікісховища',
'Вікіпідручник' => 'Вікіпідручника',
'Вікіцитати' => 'Вікіцитат',
'Вікіджерела' => 'Вікіджерел',
'Вікіновини' => 'Вікіновин',
'Вікідані' => 'Вікіданих',
'Вікімандри' => 'Вікімандрів',
],
// dative
'dative' => [
'Вікіпедія' => 'Вікіпедії',
'Вікісловник' => 'Вікісловнику',
'Вікісховище' => 'Вікісховищу',
'Вікіпідручник' => 'Вікіпідручнику',
'Вікіцитати' => 'Вікіцитатам',
'Вікіджерела' => 'Вікіджерелам',
'Вікіновини' => 'Вікіновинам',
'Вікідані' => 'Вікіданим',
'Вікімандри' => 'Вікімандрам',
],
// accusative
'accusative' => [
'Вікіпедія' => 'Вікіпедію',
'Вікісловник' => 'Вікісловник',
'Вікісховище' => 'Вікісховище',
'Вікіпідручник' => 'Вікіпідручник',
'Вікіцитати' => 'Вікіцитати',
'Вікіджерела' => 'Вікіджерела',
'Вікіновини' => 'Вікіновини',
'Вікідані' => 'Вікідані',
'Вікімандри' => 'Вікімандри',
],
// instrumental
'instrumental' => [
'Вікіпедія' => 'Вікіпедією',
'Вікісловник' => 'Вікісловником',
'Вікісховище' => 'Вікісховищем',
'Вікіпідручник' => 'Вікіпідручником',
'Вікіцитати' => 'Вікіцитатами',
'Вікіджерела' => 'Вікіджерелами',
'Вікіновини' => 'Вікіновинами',
'Вікідані' => 'Вікіданими',
'Вікімандри' => 'Вікімандрами',
],
// locative
'locative' => [
'Вікіпедія' => 'у Вікіпедії',
'Вікісловник' => 'у Вікісловнику',
'Вікісховище' => 'у Вікісховищі',
'Вікіпідручник' => 'у Вікіпідручнику',
'Вікіцитати' => 'у Вікіцитатах',
'Вікіджерела' => 'у Вікіджерелах',
'Вікіновини' => 'у Вікіновинах',
'Вікідані' => 'у Вікіданих',
'Вікімандри' => 'у Вікімандрах',
],
// vocative
'vocative' => [
'Вікіпедія' => 'Вікіпедіє',
'Вікісловник' => 'Вікісловнику',
'Вікісховище' => 'Вікісховище',
'Вікіпідручник' => 'Вікіпідручнику',
'Вікіцитати' => 'Вікіцитати',
'Вікіджерела' => 'Вікіджерела',
'Вікіновини' => 'Вікіновини',
'Вікідані' => 'Вікідані',
'Вікімандри' => 'Вікімандри',
],
];
// Avoid weirdness if both extensions are loaded at the same time.
if ( !ExtensionRegistry::getInstance()->isLoaded( 'UserMerge' ) ) {
global $wgLogTypes, $wgLogNames, $wgLogHeaders, $wgLogActionsHandlers, $wgActionFilteredLogs;
$wgLogTypes[] = 'usermerge';
$wgLogNames['usermerge'] = 'wikimedia-usermerge-logpage';
$wgLogHeaders['usermerge'] = 'wikimedia-usermerge-logpagetext';
$wgLogActionsHandlers['usermerge/*'] = WMUserMergeLogFormatter::class;
$wgActionFilteredLogs['usermerge'] = [
'mergeuser' => [ 'mergeuser' ],
'deleteuser' => [ 'deleteuser' ],
];
}
}
/**
* Allows last minute changes to the output page, e.g. adding of CSS or JavaScript by extensions.
*
* @param OutputPage $out The Output page object
* @param Skin $skin Skin object that will be used to generate the page
*/
public function onBeforePageDisplay( $out, $skin ): void {
$skins = $out->getConfig()->get( 'WikimediaStylesSkins' );
if ( in_array( $skin->getSkinName(), $skins ) ) {
$out->addModuleStyles( [ 'ext.wikimediamessages.styles' ] );
}
}
/**
* @see https://www.mediawiki.org/wiki/Manual:Hooks/ResourceLoaderRegisterModules
*
* @param ResourceLoader $resourceLoader
*/
public function onResourceLoaderRegisterModules( ResourceLoader $resourceLoader ): void {
if ( $this->extensionRegistry->isLoaded( 'IPInfo' ) ) {
$resourceLoader->register( 'ext.wikimediaMessages.ipInfo.hooks', [
'localBasePath' => dirname( __DIR__ ) . '/modules/ext.wikimediaMessages.ipInfo.hooks',
'remoteExtPath' => 'WikimediaMessages/modules/ext.wikimediaMessages.ipInfo.hooks',
'scripts' => 'infobox.js',
'styles' => 'infobox.less',
'messages' => [
'ipinfo-global-contributions-url-label',
'ipinfo-global-contributions-url',
'ipinfo-xtools-url-label',
'ipinfo-xtools-url',
],
'dependencies' => [
'ext.ipInfo',
],
] );
}
}
/**
* Handle SpecialPageBeforeExecute hook
*
* @param SpecialPage $special
* @param string|null $subPage
*/
public function onSpecialPageBeforeExecute( $special, $subPage ) {
$this->addIPInfoLinks( $special, $subPage );
}
/**
* @param SpecialPage $special
* @param string|null $subPage
*/
private function addIPInfoLinks( $special, $subPage ): void {
if (
$special->getName() !== 'Contributions' &&
$special->getName() !== 'DeletedContributions'
) {
return;
}
// Return if target is not an IP address
if ( $subPage === null || !IPUtils::isValid( $subPage ) ) {
return;
}
$accessingUser = $special->getUser();
$isBetaFeaturesLoaded = $this->extensionRegistry->isLoaded( 'BetaFeatures' );
// Check the same permissions and preferences as
// MediaWiki\IPInfo\HookHandler\InfoboxHandler
if (
!$this->permissionManager->userHasRight( $accessingUser, 'ipinfo' ) ||
( $isBetaFeaturesLoaded &&
!$this->userOptionsLookup->getOption( $accessingUser, 'ipinfo-beta-feature-enable' ) )
) {
return;
}
$special->getOutput()->addModules( 'ext.wikimediaMessages.ipInfo.hooks' );
}
/**
* Whether or not the donate link should be moved from the sidebar to the user menu
*
* @param Skin $skin
* @return bool
*/
public function shouldMoveDonateLink( $skin ): bool {
$config = $skin->getConfig();
$user = $skin->getUser();
if (
$skin->getSkinName() === 'vector-2022' &&
$config->get( 'WikimediaMessagesAnonDonateLink' ) &&
$user->isAnon()
) {
return true;
}
return false;
}
/**
* Add a donate link to the user links menu for anonymous users on vector '22, if feature flag is turned on
*
* @param SkinTemplate $skin
* @param array &$links
*/
public function onSkinTemplateNavigation__Universal( $skin, &$links ): void {
$context = $skin->getContext();
if ( $this->shouldMoveDonateLink( $skin ) ) {
$links['user-page']['sitesupport'] = [
'text' => $context->msg( 'sitesupport' )->text(),
'href' => $context->msg( 'sitesupport-url' )->text(),
'title' => $context->msg( 'tooltip-n-sitesupport' )->text(),
];
}
}
/**
* Remove the donate link for anonymous users on vector '22, if the feature flag is turned on
*
* @param Skin $skin
* @param array &$sidebar
*/
public function onSidebarBeforeOutput( $skin, &$sidebar ): void {
// we want to be sure we're only removing this link if it's going to appear elsewhere
if ( $this->shouldMoveDonateLink( $skin ) ) {
// the donate link is not guaranteed to be in a particular section, so we must traverse them all
foreach ( $sidebar as $section => $links ) {
// every other array length is bounded by practicality, but skip looping over language for peformance
if ( $section === 'LANGUAGES' ) {
continue;
}
foreach ( $links as $index => $link ) {
if ( isset( $link['id'] ) && $link['id'] === 'n-sitesupport' ) {
unset( $sidebar[$section][$index] );
}
}
}
}
}
}

File Metadata

Mime Type
text/x-php
Expires
Sat, May 16, 13:23 (1 d, 9 h)
Storage Engine
local-disk
Storage Format
Raw Data
Storage Handle
bf/9b/968088bd7eafca86f9038d228835
Default Alt Text
Hooks.php (59 KB)

Event Timeline