From 68bdc4f7f4eb1109e27fad33676010276853d58f Mon Sep 17 00:00:00 2001 From: Adam Roses Wight Date: Tue, 1 Apr 2014 01:31:43 -0700 Subject: [PATCH] Adds an --extension option to generateJsonI18n Usage: php maintenance/generateJsonI18n.php --extension WikiLove Performs the default conversions in $IP/extensions/WikiLove/, replacing the WikiLove.i18n.php file with a backwards-compatibility shim and porting messages to the WikiLove/i18n/ directory. This patch has the side-effect of making the second cmdline argument in the ordinary usage optional. When omitted, we will make the default guess as to $jsondir, that it should live in the same directory as the .i18n.php file. Change-Id: I6246d2c4eb7327d6dcc503421b71ffdcaf01769c --- maintenance/generateJsonI18n.php | 41 +++++++++++++++++++++++++++++--- 1 file changed, 38 insertions(+), 3 deletions(-) diff --git a/maintenance/generateJsonI18n.php b/maintenance/generateJsonI18n.php index 7fe3bd9835..81d8381c18 100644 --- a/maintenance/generateJsonI18n.php +++ b/maintenance/generateJsonI18n.php @@ -36,17 +36,52 @@ class GenerateJsonI18n extends Maintenance { public function __construct() { parent::__construct(); $this->mDescription = "Build JSON messages files from a PHP messages file"; - $this->addArg( 'phpfile', 'PHP file defining a $messages array', true ); - $this->addArg( 'jsondir', 'Directory to write JSON files to. ' . - 'Required unless exists and --shim-only is specified', false ); + + $this->addArg( 'phpfile', 'PHP file defining a $messages array', false ); + $this->addArg( 'jsondir', 'Directory to write JSON files to', false ); $this->addOption( 'langcode', 'Language code; only needed for converting core i18n files', false, true ); + $this->addOption( 'extension', 'Perform default conversion on an extension', + false, true ); $this->addOption( 'shim-only', 'Only create or update the backward-compatibility shim' ); } public function execute() { + global $IP; + $phpfile = $this->getArg( 0 ); $jsondir = $this->getArg( 1 ); + $extension = $this->getOption( 'extension' ); + + if ( $extension ) { + if ( $phpfile ) { + $this->error( "The phpfile is already specified, conflicts with --extension.\n", 1 ); + } + $phpfile = "$IP/extensions/$extension/$extension.i18n.php"; + } + + if ( !$phpfile ) { + $this->error( "I'm here for an argument!\n" ); + $this->maybeHelp( true ); + // dies. + } + + $this->transformI18nFile( $phpfile, $jsondir ); + } + + public function transformI18nFile( $phpfile, $jsondir = null ) { + if ( !$jsondir ) { + // Assume the json directory should be in the same directory as the + // .i18n.php file. + $jsondir = dirname( $phpfile ) . "/i18n"; + } + if ( !is_dir( $jsondir ) ) { + $this->output( "Creating directory $jsondir.\n" ); + $success = mkdir( $jsondir ); + if ( !$success ) { + $this->error( "Could not create directory $jsondir\n", 1 ); + } + } if ( $this->hasOption( 'shim-only' ) ) { $this->shimOnly( $phpfile, $jsondir ); -- 2.20.1