Готовая локализация без БД (4.7)

jason32's picture

Итак, сделал я локализацию без базы. Сделано немного - запросы к базе ещё остались, но их стало порядка 10-20 против 200-400 ранее. Пока изменена лишь одна функция + сделан конвертер из базы. У меня всё прекрасно сработало.
Итак - файл common.inc

Было:

<?php
function t($string$args 0) {
  global 
$locale;
  if (
function_exists('locale') && $locale != 'en') {
    
$string locale($string);
  }
  if (!
$args) {
    return 
$string;
  }
  else {
    return 
strtr($string$args);
  }
}
?>

Стало:
<?php
function t($string$args 0) {
  global 
$locale;
  global 
$lang;
  if (isset(
$lang[$string])) $string=stripslashes($lang[$string]);
  elseif (isset(
$lang[addslashes($string)])) $string=stripslashes($lang[addslashes($string)]);
  else
  if (
function_exists('locale') && $locale != 'en') {
    
$string locale($string);
  }
  if (!
$args) {
    return 
$string;
  }
  else {
    return 
strtr($string$args);
  }
}
?>

+ converter.php
<?php
// converter.php
require_once './includes/bootstrap.inc';
drupal_bootstrap(DRUPAL_BOOTSTRAP_FULL);
//////////названия таблиц////////////////////////////
  
$table_meta='locales_meta';
  
$table_sources='locales_source';
  
$table_target='locales_target';
////////////////////////////////////
  
$lang=array();
  
$lang_en=array();
  
$sql="Select  * from $table_meta where `isdefault`=1";
  
$res=mysql_query($sql) or die(mysql_error());
  if (
$row=mysql_fetch_array($res))
  {
  
$is_default=$row['locale'];
  }
  else die(
'Нет значения по умолчанию');
  
$sql="Select `lid`,`source` from $table_sources ";
  
$res=mysql_query($sql) or die(mysql_error());
  while (
$row=mysql_fetch_array($res))
  {
  
$lang_en[$row['lid']]=$row['source'];
  }
  
$sql="Select `lid`,`translation`,`locale` from $table_target where `locale`=\"$is_default\"";
  
$res=mysql_query($sql) or die('  '.mysql_error());
  while (
$row=mysql_fetch_array($res))
  {
    
$id=addslashes($lang_en[$row['lid']]);
    if (!empty(
$row['translation']))
    {
  
$locale_id=addslashes($row['translation']);
    
$lang[$id]=$locale_id;
    }
    else 
$lang[$id]=$id;
  }
  
$locale_file="<?
    "
;
  foreach (
$lang as $sources=> $target)
  {
  
$locale_file.='$lang[''.$sources.'']=''.$target."';
  
";
  }
  $locale_file.='';
  if (!is_dir('locale')) mkdir('locale',0755);
  $fp=fopen('locale/russian.php','w');
  fwrite($fp,$locale_file);
  fclose($fp);
?>

Необходимые условия:
нужно закинуть файл conveter.php в корень. Если папка locale с файлом russian.php не появилась - значит необходимо вручную её создать.
В index.php первым оператором прописать include('locale/russian.php');
и всё должно заработать.
После этого запускаем converter.php и тестим
После инсталяции очередного перевода модуля нужно будет только запустить Конвертер и всё.