diff options
author | Luke Shumaker <lukeshu@sbcglobal.net> | 2016-05-01 15:12:12 -0400 |
---|---|---|
committer | Luke Shumaker <lukeshu@sbcglobal.net> | 2016-05-01 15:12:12 -0400 |
commit | c9aa36da061816dee256a979c2ff8d2ee41824d9 (patch) | |
tree | 29f7002b80ee984b488bd047dbbd80b36bf892e9 /extensions/LocalisationUpdate/reader/PHPReader.php | |
parent | b4274e0e33eafb5e9ead9d949ebf031a9fb8363b (diff) | |
parent | d1ba966140d7a60cd5ae4e8667ceb27c1a138592 (diff) |
Merge branch 'archwiki'
# Conflicts:
# skins/ArchLinux.php
# skins/ArchLinux/archlogo.gif
Diffstat (limited to 'extensions/LocalisationUpdate/reader/PHPReader.php')
-rw-r--r-- | extensions/LocalisationUpdate/reader/PHPReader.php | 54 |
1 files changed, 54 insertions, 0 deletions
diff --git a/extensions/LocalisationUpdate/reader/PHPReader.php b/extensions/LocalisationUpdate/reader/PHPReader.php new file mode 100644 index 00000000..986d7b52 --- /dev/null +++ b/extensions/LocalisationUpdate/reader/PHPReader.php @@ -0,0 +1,54 @@ +<?php +/** + * @file + * @author Niklas Laxström + * @license GPL-2.0+ + */ + +/** + * Reads MediaWiki PHP i18n files. + */ +class LU_PHPReader implements LU_Reader { + /// @var string Language tag + protected $code; + + public function __construct( $code = null ) { + $this->code = $code; + } + + public function parse( $contents ) { + if ( strpos( $contents, '$messages' ) === false ) { + // This happens for some core languages that only have a fallback. + return array(); + } + + $php = $this->cleanupFile( $contents ); + $reader = new QuickArrayReader( "<?php $php" ); + $messages = $reader->getVar( 'messages' ); + + if ( $this->code ) { + return array( $this->code => $messages ); + } + + // Assuming that the array is keyed by language codes + return $messages; + } + + /** + * Removes all unneeded content from a file and returns it. + * + * @param string $contents String + * @return string PHP code without PHP tags + */ + protected function cleanupFile( $contents ) { + // We hate the windows vs linux linebreaks. + $contents = preg_replace( '/\r\n?/', "\n", $contents ); + + // We only want message arrays. + $results = array(); + preg_match_all( '/\$messages(?:.*\s)*?\);/', $contents, $results ); + + // But we want them all in one string. + return implode( "\n\n", $results[0] ); + } +} |