Enable language conversion
authorPhilip Tzou <philip@users.mediawiki.org>
Fri, 23 Jan 2009 07:56:04 +0000 (07:56 +0000)
committerPhilip Tzou <philip@users.mediawiki.org>
Fri, 23 Jan 2009 07:56:04 +0000 (07:56 +0000)
in "alt" and "title" attributes.

languages/LanguageConverter.php

index aad2963..504fc95 100644 (file)
@@ -198,6 +198,24 @@ class LanguageConverter {
 
        }
        
+       /**
+        * caption convert, base on preg_replace_callback
+        *
+        * to convert text in "title" or "alt", like '<img alt="text" ... '
+        * or '<span title="text" ... '
+        *
+        * @param string $title the "title" or "alt" text
+        * @param string $text the text to be converted
+        * @param string $toVariant the target language code
+        * @return string like ' alt="yyyy"' or ' title="yyyy"'
+        */
+       protected function captionConvert( $title, $text, $toVariant ) {
+               // we convert captions except URL
+               if( !strpos( $text, '://' ) )
+                       $text = $this->translate($text, $toVariant);
+               return " $title=\"$text\"";
+       }
+
        /**
         * dictionary-based conversion
         *
@@ -248,8 +266,14 @@ class LanguageConverter {
 
                $ret = $this->translate($m[0], $toVariant);
                $mstart = $m[1]+strlen($m[0]);
+               
+               // enable convertsion of '<img alt="xxxx" ... ' or '<span title="xxxx" ... '
+               $captionpattern  = '/\s(title|alt)\s*=\s*"([\s\S]*?)"/e';
+               $replacement = "\$this->captionConvert('\\1', '\\2', \$toVariant)";
                foreach($matches as $m) {
-                       $ret .= substr($text, $mstart, $m[1]-$mstart);
+                       $mark = substr($text, $mstart, $m[1]-$mstart);
+                       $mark = preg_replace($captionpattern, $replacement, $mark);
+                       $ret .= $mark;
                        $ret .= $this->translate($m[0], $toVariant);
                        $mstart = $m[1] + strlen($m[0]);
                }