http://www.mediawiki.org/wiki/Special:Code/MediaWiki/72845
Revision: 72845
Author: nikerabbit
Date: 2010-09-12 09:40:47 +0000 (Sun, 12 Sep 2010)
Log Message:
-----------
Fixed Gettext messages parsing and implemented header output for it
Modified Paths:
--------------
trunk/extensions/Translate/ffs/Gettext.php
Modified: trunk/extensions/Translate/ffs/Gettext.php
===================================================================
--- trunk/extensions/Translate/ffs/Gettext.php 2010-09-12 09:32:21 UTC (rev
72844)
+++ trunk/extensions/Translate/ffs/Gettext.php 2010-09-12 09:40:47 UTC (rev
72845)
@@ -361,9 +361,7 @@
* @ingroup FFS
*/
class GettextFFS extends SimpleFFS {
- //
- // READ
- //
+
public function readFromVariable( $data ) {
$authors = array();
@@ -374,9 +372,12 @@
# Then messages and everything else
$parsedData = $this->parseGettext( $data );
- $parsedData['MESSAGES'] = $this->group->getMangler()->mangle(
$parsedData['MESSAGES'] );
$parsedData['AUTHORS'] = $authors;
+ foreach ( $parsedData['MESSAGES'] as $key => $value ) {
+ if ( $value === '' ) unset(
$parsedData['MESSAGES'][$key] );
+ }
+
return $parsedData;
}
@@ -390,6 +391,8 @@
* @todo Refactor method into smaller parts.
*/
public static function parseGettextData( $data, $useCtxtAsKey = false )
{
+ $potmode = false;
+
// Normalise newlines, to make processing easier lates
$data = str_replace( "\r\n", "\n", $data );
@@ -400,7 +403,6 @@
/* First one isn't an actual message. We'll handle it specially
below */
$headerSection = array_shift( $sections );
-
/* Since this is the header section, we are only interested in
the tags
* and msgid is empty. Somewhere we should extract the header
comments
* too */
@@ -408,6 +410,10 @@
if ( $match !== null ) {
$headerBlock = self::formatForWiki( $match, 'trim' );
$headers = self::parseHeaderTags( $headerBlock );
+
+ // Check for pot-mode by checking if the header is fuzzy
+ $flags = self::parseFlags( $headerSection );
+ if ( in_array( 'fuzzy', $flags, true ) ) $potmode =
true;
} else {
throw new MWException( "Gettext file header was not
found:\n\n$data" );
}
@@ -501,18 +507,15 @@
}
// Parse flags
- $matches = array();
- if ( preg_match( '/^#,(.*)$/mu', $section, $matches ) )
{
- $flags = array_map( 'trim', explode( ',',
$matches[1] ) );
- foreach ( $flags as $key => $flag ) {
- if ( $flag === 'fuzzy' ) {
- $item['str'] = TRANSLATE_FUZZY
. $item['str'];
- unset( $flags[$key] );
- }
+ $flags = self::parseFlags( $section );
+ foreach ( $flags as $key => $flag ) {
+ if ( $flag === 'fuzzy' ) {
+ $item['str'] = TRANSLATE_FUZZY .
$item['str'];
+ unset( $flags[$key] );
}
- $item['flags'] = $flags;
}
-
+ $item['flags'] = $flags;
+
// Rest of the comments
$matches = array();
if ( preg_match_all( '/^#(.?) (.*)$/m', $section,
$matches, PREG_SET_ORDER ) ) {
@@ -529,7 +532,7 @@
$key = self::generateKeyFromItem( $item );
}
- $messages[$key] = $item['str'];
+ $messages[$key] = $potmode ? $item['id'] : $item['str'];
$template[$key] = $item;
}
@@ -541,6 +544,15 @@
);
}
+ public static function parseFlags( $section ) {
+ $matches = array();
+ if ( preg_match( '/^#,(.*)$/mu', $section, $matches ) ) {
+ return array_map( 'trim', explode( ',', $matches[1] ) );
+ } else {
+ return array();
+ }
+ }
+
public static function expectKeyword( $name, $section ) {
/* Catches the multiline textblock that comes after keywords
msgid,
* msgstr, msgid_plural, msgctxt.
@@ -613,12 +625,9 @@
// WRITE
//
protected function writeReal( MessageCollection $collection ) {
- throw new MWException( 'Not implemented' );
- $output = $this->doHeader( $collection );
- $output .= $this->doAuthors( $collection );
+ $output = $this->doHeader( $collection );
$mangler = $this->group->getMangler();
-
$messages = array();
foreach ( $collection as $key => $m ) {
$key = $mangler->unmangle( $key );
@@ -639,13 +648,24 @@
protected function doHeader( MessageCollection $collection ) {
global $wgSitename;
-
$code = $collection->code;
$name = TranslateUtils::getLanguageName( $code );
$native = TranslateUtils::getLanguageName( $code, true );
- $output = "# Messages for $name ($native)\n";
- $output .= "# Exported from $wgSitename\n";
+ $authors = $this->doAuthors( $collection );
+ if ( isset( $this->extra['header'] ) ) {
+ $extra = "# --\n" . $this->extra['header'];
+ } else {
+ $extra = '';
+ }
+ $output = <<<PHP
+# Translation of {$this->group->getLabel()} to $name ($native)
+# Expored from $wgSitename
+#
+$authors$extra
+
+PHP;
+
return $output;
}
_______________________________________________
MediaWiki-CVS mailing list
[email protected]
https://lists.wikimedia.org/mailman/listinfo/mediawiki-cvs