Итак, сделал я локализацию без базы. Сделано немного - запросы к базе ещё остались, но их стало порядка 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 и тестим
После инсталяции очередного перевода модуля нужно будет только запустить Конвертер и всё.