对 sprintf 的 PHP 文章的评论也为这个问题提供了一个巧妙的解决方案。
http://www.php.net/manual/en/function.sprintf.php#93552
/**
* Converts any sprintf to a Google Translate suitable string.
*/
function _toTranslateSafeString($original)
{
$pattern = '/(?:%%|%(?:[0-9]+\$)?[+-]?(?:[ 0]|\'.)?-?[0-9]*(?:\.[0-9]+)?[bcdeufFosxX])/';
$escapeString = '<span class="notranslate">$0</span>';
return preg_replace($pattern, $escapeString, $original);
}
/**
* Converts any Google Translate suitable string to a sprintf string.
*/
function _fromTranslateSafeString($translated)
{
$escapePattern = '/<span class="notranslate">([^<]*)<\/span>/';
return preg_replace($escapePattern, '$1', $translated);
}