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