Форум успешных вебмастеров - GoFuckBiz.com

  Форум успешных вебмастеров - GoFuckBiz.com > Бизнес-решения > Скрипты, программы и технические решения
Дата
USD/RUB58.7570
BTC/USD0.0000
Скрипты, программы и технические решения Обсуждаем скрипты, программы и новые технологии.

Закрытая тема
Опции темы Опции просмотра
Старый 03.05.2015, 13:22   #1
Sultan
на позитиве!
 
Аватар для Sultan
 
Регистрация: 23.01.2011
Сообщений: 1,704
Бабло: $301835
Question Перевод текста в php файлах

куча скриптов, весь ру текст в коде скриптов вперемешку с html
надо сделать мультиязычность

как быстро, этот текст заменить на переменные и экспортировать в отдельный файл для последующего перевода текста в переменных
Sultan вне форума  
Старый 03.05.2015, 13:45   #2
rasdotsu
Системный администратор
 
Аватар для rasdotsu
 
Регистрация: 02.03.2015
Адрес: Земля
Сообщений: 24
Бабло: $4665
Отправить сообщение для rasdotsu с помощью ICQ Отправить сообщение для rasdotsu с помощью Skype™
По умолчанию

Это не быстро, все надо переписать. Срок зависит от количества файлов и их размера. Но все сделать можно.
rasdotsu вне форума  
Старый 04.05.2015, 11:19   #3
Malamut
Юниор
 
Регистрация: 22.04.2015
Сообщений: 3
Бабло: $2050
По умолчанию

Можно попробовать пройтись парсером, который каким-нить preg_replace'ом повыхватывает русский текст и динамически нагенерит переменных. Думаю, гуру РНР смогут тебе помочь.
Malamut вне форума  
Старый 04.05.2015, 23:43   #4
Sultan
на позитиве!
 
Аватар для Sultan
 
Регистрация: 23.01.2011
Сообщений: 1,704
Бабло: $301835
ТС -->
автор темы ТС По умолчанию

вот, может кому пригодится
код скорее всего придется адаптировать, да и руками пройтись, но время сэкономит
PHP код:
 <?php
 set_time_limit
(0);
  
$dirname "."
  
scan_dir($dirname);  // Вызов рекурсивной функции
  ////////////////////////////////////////////////////////// 
  // Рекурсивная функция - спускаемся вниз по каталогу 
  ////////////////////////////////////////////////////////// 
  
function scan_dir($dirname
  { 
    
// Открываем текущую директорию 
    
$dir opendir($dirname); 
    
// Читаем в цикле директорию 
    
while (($file readdir($dir)) !== false
    { 
      
// Если файл обрабатываем его содержимое 
      
if($file != "." && $file != ".."
      { 
        
// Если имеем дело с файлом - производим в нём замену 
        
if(is_file($dirname."/".$file) && preg_match('/^php(\d+)?|pl|rb|py|cgi|inc$/i'pathinfo($dirname."/".$filePATHINFO_EXTENSION))) 
        { 
          
// Читаем содержимое файла 
          
$content file_get_contents($dirname."/".$file); 
          
// Осуществляем замену 
          
$i=0;
          
preg_match_all("#.*?['|\"|>]([а-яА-ЯёЁ\s]+)['|\"|<].*?#i",$content,$m);
          foreach(
$m[1] as $tr_str){
          
$tr_key=preg_replace('/[^а-яА-ЯёЁ ]/'''$tr_str);
          
$tr_key=preg_replace('/ +/'' 'trim($tr_key));
          if(
$tr_key){
          
$trans=gtranslate($tr_key,'ru','en');
          
$tr_key=$trans["sentences"][0]["trans"];
          
file_put_contents("lang.en.txt""\$lang['".str_replace(".","",str_replace("/","_",$dirname))."-".str_replace(".","_",$file)."']['".strtolower(preg_replace('/ +/''_'trim(preg_replace('/[^a-z ]/i'''$tr_key))))."']='".trim($tr_key)."';\r\n"FILE_APPEND LOCK_EX);
          
file_put_contents("lang.ru.txt""\$lang['".str_replace(".","",str_replace("/","_",$dirname))."-".str_replace(".","_",$file)."']['".strtolower(preg_replace('/ +/''_'trim(preg_replace('/[^a-z ]/i'''$tr_key))))."']='".trim($tr_str)."';\r\n"FILE_APPEND LOCK_EX);
          
$content=str_replace($m[0][$i],"/*\r\nlocalize - ".$m[0][$i]."\r\n*/\r\n".str_replace($tr_str,"'.\$lang['".str_replace(".","",str_replace("/","_",$dirname))."-".str_replace(".","_",$file)."']['".strtolower(preg_replace('/ +/''_'trim(preg_replace('/[^a-z ]/i'''$tr_key))))."'].'",$m[0][$i])."\r\n",$content);
          }
          
$i++;
          }
          
// Перезаписываем файл 
          
file_put_contents($dirname."/".$file,$content); 
        } 
        
// Если перед нами директория, вызываем рекурсивно 
        // функцию scan_dir 
        
if(is_dir($dirname."/".$file)) 
        { 
        
//exit; 
          
scan_dir($dirname."/".$file); 
        } 
      } 
    } 
    
// Закрываем директорию 
    
closedir($dir); 
  }
  
function 
gtranslate($str$lang_from$lang_to) {
$str mb_convert_encoding($str'UTF-8','windows-1251');
  
$query_data = array(
    
'client' => 'x',
    
'q' => $str,
    
'sl' => $lang_from,
    
'tl' => $lang_to
  
);
  
$filename 'http://translate.google.ru/translate_a/t';
  
$options = array(
    
'http' => array(
      
'user_agent' => 'Mozilla/5.0 (Windows NT 6.0; rv:26.0) Gecko/20100101 Firefox/26.0',
      
'method' => 'POST',
      
'header' => 'Content-type: application/x-www-form-urlencoded',
      
'content' => http_build_query($query_data)
    )
  );
  
$context stream_context_create($options);
  
$response file_get_contents($filenamefalse$context);
  return 
json_decode($responsetrue);
}
?>
Sultan вне форума