}
+ /**
+ * 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
*
$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]);
}