- if ( !$this->hasOption( 'langcode' ) ) {
- $shim = $this->doShim( $jsondir );
- file_put_contents( $phpfile, $shim );
- }
-
- $this->output( "All done.\n" );
- $this->output( "Also add \$wgMessagesDirs['YourExtension'] = __DIR__ . '/i18n';\n" );
- }
-
- protected function shimOnly( $phpfile, $jsondir ) {
- if ( file_exists( $phpfile ) ) {
- if ( !is_readable( $phpfile ) ) {
- $this->error( "Error reading $phpfile\n", 1 );
- }
-
- $phpfileContents = file_get_contents( $phpfile );
- $m = array();
- if ( !preg_match( '!"/([^"$]+)/\$csCode.json";!', $phpfileContents, $m ) ) {
- $this->error( "Cannot recognize $phpfile as a shim.\n", 1 );
- }
-
- if ( $jsondir === null ) {
- $jsondir = $m[1];
- }
-
- $this->output( "Updating existing shim $phpfile\n" );
- } elseif ( $jsondir === null ) {
- $this->error( "$phpfile does not exist.\n" .
- "Argument [jsondir] is required in order to create a new shim.\n", 1 );
- } else {
- $this->output( "Creating new shim $phpfile\n" );
- }
-
- $shim = $this->doShim( $jsondir );
- file_put_contents( $phpfile, $shim );
- $this->output( "All done.\n" );
- }
-
- protected function doShim( $jsondir ) {
- $shim = <<<'PHP'
-<?php
-/**
- * This is a backwards-compatibility shim, generated by:
- * https://git.wikimedia.org/blob/mediawiki%2Fcore.git/HEAD/maintenance%2FgenerateJsonI18n.php
- *
- * Beginning with MediaWiki 1.23, translation strings are stored in json files,
- * and the EXTENSION.i18n.php file only exists to provide compatibility with
- * older releases of MediaWiki. For more information about this migration, see:
- * https://www.mediawiki.org/wiki/Requests_for_comment/Localisation_format
- *
- * This shim maintains compatibility back to MediaWiki 1.17.
- */
-$messages = array();
-if ( !function_exists( '{{FUNC}}' ) ) {
- function {{FUNC}}( $cache, $code, &$cachedData ) {
- $codeSequence = array_merge( array( $code ), $cachedData['fallbackSequence'] );
- foreach ( $codeSequence as $csCode ) {
- $fileName = dirname( __FILE__ ) . "/{{OUT}}/$csCode.json";
- if ( is_readable( $fileName ) ) {
- $data = FormatJson::decode( file_get_contents( $fileName ), true );
- foreach ( array_keys( $data ) as $key ) {
- if ( $key === '' || $key[0] === '@' ) {
- unset( $data[$key] );
- }
- }
- $cachedData['messages'] = array_merge( $data, $cachedData['messages'] );
- }
-
- $cachedData['deps'][] = new FileDependency( $fileName );
- }
- return true;
- }
-
- $GLOBALS['wgHooks']['LocalisationCacheRecache'][] = '{{FUNC}}';
-}
-
-PHP;
-
- $jsondir = str_replace( '\\', '/', $jsondir );
- $shim = str_replace( '{{OUT}}', $jsondir, $shim );
- $shim = str_replace( '{{FUNC}}', 'wfJsonI18nShim' . wfRandomString( 16 ), $shim );
-
- return $shim;