Mattflaschen has uploaded a new change for review.

  https://gerrit.wikimedia.org/r/271431

Change subject: Add maintenance script for generating a list of human-readable 
names for projects.
......................................................................

Add maintenance script for generating a list of human-readable
names for projects.

It generates both en.json and and qqq.json files to a specified
directory.  This is intended to feed into WikimediaMessages.

See If07983030e18141d2047da2de02b5b3a5f7057a5

Change-Id: I0baa4916d2fabf19242b68ebce487f50a24041f6
Co-Author: Moriel Schottlender <mor...@gmail.com>
Co-Author: Matthew Flaschen <mflasc...@wikimedia.org>
---
A createHumanReadableProjectNameFiles.php
1 file changed, 221 insertions(+), 0 deletions(-)


  git pull 
ssh://gerrit.wikimedia.org:29418/mediawiki/extensions/WikimediaMaintenance 
refs/changes/31/271431/1

diff --git a/createHumanReadableProjectNameFiles.php 
b/createHumanReadableProjectNameFiles.php
new file mode 100644
index 0000000..721d326
--- /dev/null
+++ b/createHumanReadableProjectNameFiles.php
@@ -0,0 +1,221 @@
+<?php
+/**
+ * @defgroup Wikimedia Wikimedia
+ */
+
+/**
+ * Generates i18n files for names of each Wikimedia project, in the specified 
directory
+ */
+
+require_once __DIR__ . '/WikimediaMaintenance.php';
+
+class CreateHumanReadableProjectNameFiles extends Maintenance {
+       public function __construct() {
+               parent::__construct();
+               $this->mDescription = 'Builds i18n files for translating names 
of Wikimedia projects';
+
+               $this->addOption( 'directory', 'Output directory where files 
should be created', true, true );
+       }
+
+               /**
+        * Gets actual language code (not necessarily the same as subdomain, 
even if there is
+        * a language subdomain)
+        *
+        * @param string $projURL URL of root of domain (e.g. 
https://en.wikipedia.org)
+        * @return Language code, or null on failure
+        */
+       private function getLanguageCode( $projURL ) {
+               $url = 
"$projURL/w/api.php?action=query&meta=siteinfo&format=json";
+               $responseText = Http::get( $url );
+               $response = FormatJson::decode( $responseText, true );
+               if ( isset( $response['query']['general']['lang'] ) ) {
+                       return $response['query']['general']['lang'];
+               } else {
+                       return null;
+               }
+       }
+
+       private function createQQQ( $projName, $projURL ) {
+               $languageCode = $this->getLanguageCode( $projURL );
+
+               return 
"{{ProjectNameDocumentation|url=$projURL|name=$projName|language=$languageCode}}";
+       }
+
+       public function execute() {
+               $outEn = array();
+               $outQqq = array();
+               $counter = 0;
+               $info = $this->getSitematrixFromAPI();
+               $languages = LanguageNames::getNames( 'en' );
+
+               // Wikis that have messages in WikimediaMessages
+               $messageMatrix = array(
+                       // code => project name
+                       "wiki" => wfMessage( "wikibase-otherprojects-wikipedia" 
)->text(),
+                       "wiktionary" => "Wiktionary", // No message for this!?
+                       "wikibooks" => wfMessage( 
"wikibase-otherprojects-wikibooks" )->text(),
+                       "wikiquote" => wfMessage( 
"wikibase-otherprojects-wikiquote" )->text(),
+                       "wikinews" => wfMessage( 
"wikibase-otherprojects-wikinews" )->text(),
+                       "wikisource" => wfMessage( 
"wikibase-sitelinks-wikisource" )->text(),
+                       "wikiversity" => "Wikiversity", // No message for this, 
either!
+                       "wikivoyage" => wfMessage( 
"wikibase-otherprojects-wikivoyage" )->text(),
+               );
+
+               $failedLangWikis = array(
+                       "azbwiki" => "South Azerbaijani Wikipedia",
+                       "be_x_oldwiki" => "Belarusian (Taraškievica) Wikipedia",
+                       "bhwiki" => "Bihari Wikipedia",
+                       "bhwiktionary" => "Bihari Wiktionary",
+                       "bxrwiki" => "Buryat Wikipedia",
+                       "lbewiki" => "Laki Wikipedia",
+                       "mowiki" => "Moldovan Wikipedia",
+                       "mowiktionary" => "Moldovan Wiktionary",
+                       "roa_tarawiki" => "Tarandíne Wikipedia",
+                       "zh_min_nanwiki" => "Min Nan Wikipedia",
+                       "zh_min_nanwiktionary" => "Min Nan Wiktionary",
+                       "zh_min_nanwikibooks" => "Min Nan Wikibooks",
+                       "zh_min_nanwikiquote" => "Min Nan Wikiquote",
+                       "zh_min_nanwikisource" => "Min Nan Wikisource",
+               );
+
+
+               // SPECIAL WIKIS
+               $exceptions = array(
+                       // code => full message
+                       "arbcom-de" => "German Wikipedia Arbitration Committee",
+                       "arbcom-en" => "English Wikipedia Arbitration 
Committee",
+                       "arbcom-fi" => "Finnish Wikipedia Arbitration 
Committee",
+                       "arbcom-nl" => "Dutch Wikipedia Arbitration Committee",
+                       "betawikiversity" => "Wikiversity Beta",
+                       "commons" => wfMessage( 
"wikibase-otherprojects-commons" )->text(),
+                       "mediawiki" => wfMessage( 
"wikibase-otherprojects-mediawiki" )->text(),
+                       "meta" => wfMessage( "wikibase-otherprojects-meta" 
)->text(),
+                       "nostalgia" => "Nostalgia Wikipedia",
+                       "testwikidata" => "Wikidata Test Wiki",
+                       "wikidata" => wfMessage( 
"wikibase-otherprojects-wikidata" )->text(),
+                       "sources" => wfMessage( 
"wikibase-otherprojects-wikisource" )->text(),
+                       "species" => wfMessage( 
"wikibase-sitelinks-sitename-species" )->text(),
+                       "strategy" => "Strategic Planning",
+                       "ten" => "Wikipedia 10",
+                       "test" => "Test Wikipedia",
+                       "test2" => "Test2 Wikipedia",
+                       "zero" => "Wikipedia Zero",
+                       "board" => "Wikimedia Board Wiki",
+                       "labs" => "Wikitech",
+                       "labtest" => "Wikitech Test Wiki",
+                       "wg-en" => "English Wikipedia Working Group",
+                       "wikimania2005" => "Wikimania 2005 Wiki",
+                       "wikimania2006" => "Wikimania 2006 Wiki",
+                       "wikimania2007" => "Wikimania 2007 Wiki",
+                       "wikimania2008" => "Wikimania 2008 Wiki",
+                       "wikimania2009" => "Wikimania 2009 Wiki",
+                       "wikimania2010" => "Wikimania 2010 Wiki",
+                       "wikimania2011" => "Wikimania 2011 Wiki",
+                       "wikimania2012" => "Wikimania 2012 Wiki",
+                       "wikimania2013" => "Wikimania 2013 Wiki",
+                       "wikimania2014" => "Wikimania 2014 Wiki",
+                       "wikimania2015" => "Wikimania 2015 Wiki",
+                       "wikimania2016" => "Wikimania 2016 Wiki",
+                       "wikimania2017" => "Wikimania 2017 Wiki",
+                       "bdwikimedia" => "Wikimedia Bangladesh",
+                       "brwikimedia" => "Wikimedia Brazil",
+                       "cnwikimedia" => "Wikimedia China",
+                       "dkwikimedia" => "Wikimedia Denmark",
+                       "etwikimedia" => "Wikimedia Estonia",
+                       "fiwikimedia" => "Wikimedia Finland",
+                       "ilwikimedia" => "Wikimedia Israel",
+                       "mkwikimedia" => "Wikimedia Macedonia",
+                       "mxwikimedia" => "Wikimedia Mexico",
+                       "nlwikimedia" => "Wikimedia Netherlands",
+                       "nowikimedia" => "Wikimedia Norway",
+                       "nzwikimedia" => "Wikimedia New Zealand",
+                       "plwikimedia" => "Wikimedia Poland",
+                       "rswikimedia" => "Wikimedia Serbia",
+                       "ruwikimedia" => "Wikimedia Russia",
+                       "sewikimedia" => "Wikimedia Sweden",
+                       "trwikimedia" => "Wikimedia Turkey",
+                       "uawikimedia" => "Wikimedia Ukraine",
+                       "ukwikimedia" => "Wikimedia UK",
+               );
+
+               // Go over the wikis and fill in the information
+               for ( $i = 0; $i < count( $info ); $i++ ) {
+                       $langCode = $info[ $i ]['code'];
+                       // Go by each site
+                       $sites = $info[ $i ]['site'];
+                       for ( $j = 0; $j < count( $sites ); $j++ ) {
+                               // Skip projects marked as "closed"
+                               // if ( !isset( $sites[ $j ]['closed'] ) ) {
+                                       // Wiki info
+                                       $dbname = $sites[ $j ]['dbname'];
+                                       $url = $sites[ $j ]['url'];
+
+                                       if ( array_key_exists( $dbname, 
$failedLangWikis ) ) {
+                                               $name = $failedLangWikis[ 
$dbname ];
+                                       } else {
+                                               $sitecode = $sites[ $j 
]['code'];
+                                               $sitename = !empty( 
$messageMatrix[ $sitecode ] ) ? $messageMatrix[ $sitecode ] : $sites[ $j 
]['sitename'];
+                                               // Language conversion
+                                               $lang = $languages[ $langCode ];
+
+                                               $name = $lang . " " . $sitename;
+                                       }
+
+                                       // Output the line
+                                       $outEn[ "project-localized-name-" . 
$dbname ] =  $name;
+                                       $outQqq[ "project-localized-name-" . 
$dbname ] =  $this->createQQQ( $name, $url );
+                                       $table[$dbname] = array( 'name' => 
$name, 'url' => $url );
+
+                                       $counter++;
+                               // }
+                       }
+               }
+
+               // Go over the "special" wikis (exceptions)
+               $specials = $info[ "specials" ];
+               for ( $i = 0; $i < count( $specials ); $i++ ) {
+                       // Skip projects marked as "closed"
+                       // if ( !isset( $specials[ $j ]['closed'] ) ) {
+                               $dbname = $specials[ $i ]['dbname'];
+                               $url = $specials[ $i ]['url'];
+                               $sitecode = $specials[ $i ]['code'];
+                               // Go over exceptions
+                               if ( array_key_exists( $sitecode, $exceptions ) 
) {
+                                       $sitename = $exceptions[ $sitecode ];
+                               } else {
+                                       // Output the line
+                                       $sitename = $specials[ $i ]['sitename'];
+                               }
+
+                               // Output the line
+                               $outEn[ "project-localized-name-" . $dbname ] = 
 $sitename;
+                               $outQqq[ "project-localized-name-" . $dbname ] 
=  $this->createQQQ( $sitename, $url );
+                               $table[$dbname] = array( 'name' => $sitename, 
'url' => $url );
+
+                               $counter++;
+                       // }
+               }
+
+               // Output
+               $this->output( "Processed $counter sites" );
+
+               $directory = $this->getOption( 'directory' );
+
+               $enJson = $directory . '/en.json';
+               file_put_contents( $enJson, FormatJson::encode( $outEn, true, 
FormatJson::ALL_OK ) );
+
+               $qqqJson = $directory . '/qqq.json';
+               file_put_contents( $qqqJson, FormatJson::encode( $outQqq, true, 
FormatJson::ALL_OK ) );
+       }
+
+       private function getSitematrixFromAPI() {
+               $url = 
"https://en.wikipedia.org/w/api.php?action=sitematrix&format=json&formatversion=2";;
+
+               $response = FormatJson::decode( Http::get( $url ), true );
+
+               return $response['sitematrix'];
+       }
+}
+
+$maintClass = "CreateHumanReadableProjectNameFiles";
+require_once( RUN_MAINTENANCE_IF_MAIN );

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

Gerrit-MessageType: newchange
Gerrit-Change-Id: I0baa4916d2fabf19242b68ebce487f50a24041f6
Gerrit-PatchSet: 1
Gerrit-Project: mediawiki/extensions/WikimediaMaintenance
Gerrit-Branch: master
Gerrit-Owner: Mattflaschen <mflasc...@wikimedia.org>
Gerrit-Reviewer: Mooeypoo <mor...@gmail.com>

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

Reply via email to