http://www.mediawiki.org/wiki/Special:Code/MediaWiki/66571

Revision: 66571
Author:   nikerabbit
Date:     2010-05-17 17:54:20 +0000 (Mon, 17 May 2010)

Log Message:
-----------
Incremental translation memory updater

Modified Paths:
--------------
    trunk/extensions/Translate/MessageGroups.php
    trunk/extensions/Translate/Translate.php
    trunk/extensions/Translate/_autoload.php
    trunk/extensions/Translate/scripts/tm-export.php

Added Paths:
-----------
    trunk/extensions/Translate/utils/TranslationMemoryUpdater.php

Modified: trunk/extensions/Translate/MessageGroups.php
===================================================================
--- trunk/extensions/Translate/MessageGroups.php        2010-05-17 17:14:41 UTC 
(rev 66570)
+++ trunk/extensions/Translate/MessageGroups.php        2010-05-17 17:54:20 UTC 
(rev 66571)
@@ -633,12 +633,10 @@
                global $wgContLang;
                $params = array();
                if ( $code && $wgContLang->getCode() !== $code ) {
-                       $key = "$key/$code";
+                       return TranslateUtils::getMessageContent( $key, $code );
                } else {
-                       $params[] = 'content';
+                       return TranslateUtils::getMessageContent( $key, false );
                }
-               $message = wfMsgExt( $key, $params );
-               return wfEmptyMsg( $key, $message ) ? null : $message;
        }
 }
 

Modified: trunk/extensions/Translate/Translate.php
===================================================================
--- trunk/extensions/Translate/Translate.php    2010-05-17 17:14:41 UTC (rev 
66570)
+++ trunk/extensions/Translate/Translate.php    2010-05-17 17:54:20 UTC (rev 
66571)
@@ -71,6 +71,8 @@
 $wgHooks['SpecialRecentChangesPanel'][] = 
'TranslateRcFilter::translationFilterForm';
 $wgHooks['SkinTemplateToolboxEnd'][] = 
'TranslateToolbox::toolboxAllTranslations';
 
+# Translation memory updates
+$wgHooks['ArticleSaveComplete'][] = 'TranslationMemoryUpdater::update';
 
 
 $wgEnablePageTranslation = false;
@@ -346,6 +348,16 @@
        function STDERR() { }
 }
 
+/**
+ * Enable tmserver translation memory from translatetoolkit.
+ * Example configuration: 
+ * $wgTranslateTM = array(
+ *   'server' => 'http://127.0.0.1',
+ *   'port' => 54321,
+ *   'timeout' => 4,
+ *   'database' => '/path/to/database.sqlite',
+ * );
+ */
 $wgTranslateTM = false;
 
 /**

Modified: trunk/extensions/Translate/_autoload.php
===================================================================
--- trunk/extensions/Translate/_autoload.php    2010-05-17 17:14:41 UTC (rev 
66570)
+++ trunk/extensions/Translate/_autoload.php    2010-05-17 17:54:20 UTC (rev 
66571)
@@ -87,6 +87,8 @@
 $wgAutoloadClasses['TranslationHelpers'] = $dir . 
'utils/TranslationHelpers.php';
 $wgAutoloadClasses['TranslationStats'] = $dir . 'utils/TranslationStats.php';
 
+$wgAutoloadClasses['TranslationMemoryUpdater'] = $dir . 
'utils/TranslationMemoryUpdater.php';
+
 # predefined groups
 $wgAutoloadClasses['AllMediawikiExtensionsGroup'] = $dir . 
'groups/MediaWikiExtensions.php';
 $wgAutoloadClasses['PremadeMediawikiExtensionGroups'] = $dir . 
'groups/MediaWikiExtensions.php';

Modified: trunk/extensions/Translate/scripts/tm-export.php
===================================================================
--- trunk/extensions/Translate/scripts/tm-export.php    2010-05-17 17:14:41 UTC 
(rev 66570)
+++ trunk/extensions/Translate/scripts/tm-export.php    2010-05-17 17:54:20 UTC 
(rev 66571)
@@ -21,20 +21,16 @@
        public function __construct() {
                parent::__construct();
                $this->mDescription = 'Script to export messages for 
translatetoolkit translation memory';
-               $this->addArg( 'target', 'preinitialised sqlite db', 'required' 
);
        }
 
        public function execute() {
                global $wgContLang;
 
-               global $wgSQLiteDataDir;
-               $target = $this->getArg( 0 );
-               $target_dirname = dirname( $target );
-               $target_basename = basename( $target );
-               swap( $wgSQLiteDataDir, $target_dirname );
-               $dbw = new DatabaseSqlite( 'server', 'user', 'password', 
$target_basename );
-               swap( $wgSQLiteDataDir, $target_dirname );
-
+               $dbw = TranslationMemoryUpdater::getDatabaseHandle();
+               if ( $dbw === null ) {
+                       $this->error( "Database file not configured" );
+                       $this->exit();
+               }
                $dbw->setFlag( DBO_TRX ); // HUGE speed improvement
 
                $groups = MessageGroups::singleton()->getGroups();

Added: trunk/extensions/Translate/utils/TranslationMemoryUpdater.php
===================================================================
--- trunk/extensions/Translate/utils/TranslationMemoryUpdater.php               
                (rev 0)
+++ trunk/extensions/Translate/utils/TranslationMemoryUpdater.php       
2010-05-17 17:54:20 UTC (rev 66571)
@@ -0,0 +1,96 @@
+<?php
+
+/**
+*
+*/
+class TranslationMemoryUpdater {
+
+       public static function update( $article, $user, $text, $summary, 
$minor, $_, $_, $flags, $revision ) {
+               global $wgContLang;
+
+               $dbw = self::getDatabaseHandle();
+               // Not in use or misconfigured
+               if ( $dbw === null ) return true;
+
+               $title = $article->getTitle();
+               // Something we are not interested in at all
+               if ( !TranslateEditAddons::isMessageNamespace( $title ) ) 
return true;
+
+               list( $key, $code, $group ) = 
TranslateEditAddons::getKeyCodeGroup( $title );
+               // Unknown message, we cannot handle. We need definition.
+               if ( !$group || !$code ) return true;
+
+               // Skip definitions to not slow down mass imports etc.
+               // These will be added when first translation is made
+               if ( $code === 'en' ) return true;
+
+               // Skip fuzzy messages
+               if ( TranslateEditAddons::hasFuzzyString( $text ) ) return true;
+
+               $ns_text = $wgContLang->getNsText( $group->getNamespace() );
+               $definition = $group->getMessage( $key, 'en' );
+               if ( !is_string( $definition ) || !strlen( $definition ) ) {
+                       wfDebugLog( 'tmserver', "Unable to get definition for 
$ns_text:$key" );
+                       return true;
+               }
+               
+               $tmDefinition = array(
+                       'text' => $definition,
+                       'context' => "$ns_text:$key",
+                       'length' => strlen( $definition ),
+                       'lang' => 'en'
+               );
+
+               // Check that the definition exists, add it if not
+               $source_id = $dbw->selectField( '`sources`', 'sid', 
$tmDefinition, __METHOD__ );
+               if ( $source_id === false ) {
+                       $dbw->insert( '`sources`', $tmDefinition, __METHOD__ );
+                       $source_id = $dbw->insertId();
+                       wfDebugLog( 'tmserver', "Inserted new tm-definition for 
$ns_text:$key:\n$definition\n----------" );
+               }
+
+               $delete = array(
+                       'sid' => $source_id,
+                       'lang' => $code,
+               );
+
+               $insert = $delete + array(
+                       'text' => $text,
+                       'time' => wfTimestamp(),
+               );
+
+               // Purge old translations for this message
+               $dbw->delete( '`targets`', $delete, __METHOD__ );
+               // We only do SQlite which doesn't need to know unique indexes
+               $dbw->replace( '`targets`', null, $insert, __METHOD__ );
+               wfDebugLog( 'tmserver', "Inserted new tm-translation for 
$ns_text:$key" );
+
+               return true;
+       }
+
+
+       public static function getDatabaseHandle() {
+               global $wgTranslateTM;
+               if ( !isset( $wgTranslateTM['database'] ) ) return null;
+
+               $database = $wgTranslateTM['database'];
+
+               if ( !is_string( $database ) ) {
+                       wfDebugLog( 'tmserver', 'Database configuration is not 
a string' );
+                       return null;
+               }
+
+               if ( !file_exists( $database ) ) {
+                       wfDebugLog( 'tmserver', 'Database file does not exist' 
);
+                       return null;
+               }
+
+               if ( !is_writable( $database ) ) {
+                       wfDebugLog( 'tmserver', 'Database file is not writable' 
);
+                       return null;
+               }
+
+               return new DatabaseSqliteStandalone( $database );
+       }
+
+}
\ No newline at end of file


Property changes on: 
trunk/extensions/Translate/utils/TranslationMemoryUpdater.php
___________________________________________________________________
Added: svn:eol-style
   + native



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

Reply via email to