Аватар пользователя B.X

Ut externus alieno non...

Ut externus alieno non sit hominis vice. — Так что, чужеземец, для человека иного племени, не является человеком.

Рейтинг@Mail.ru Rambler's Top100 Каталог webplus.info Яндекс.Метрика

Сейчас на сайте 0 пользователей.

«Они считали чувство вины ошибкой, а угрызения совести — слабостью. Они всегда были практичны и никогда — сентиментальны. Но дружба их не имела границ.»

Готовая локализация без БД (4.7) | [Харзах]-[РУ]

Аватар пользователя jason32

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

Аватар пользователя Гость

Спасибо, работает! Пока… :)

Аватар пользователя Гость

а можно подробнее про файл russian.php в папке locale? его нужно самому создавать или достаточно создать папку locale в корне движка, а russian.php будет создан конвертером?

если нет, то что должно быть в файле russian.php?

Аватар пользователя Гость

если не сложно - отпишись по soliton2tv@bk.ru или в асю 178897282

Аватар пользователя B.X

"Если папка locale с файлом russian.php не появилась - значит необходимо вручную её создать."

файл скрипт создаёт сам, но если не создаст, то это можно сделать самому... да и проверьте сами, это просто, он не должен быть пустым...

Аватар пользователя Гость

Отличный хак =) Спасибо! Я пробовал на пятерке, немного подкорректировал код. все работает на ура. визуально все сталорабоать быстрее =)
Вот только сразу родилося вопрос: а как быть если сайт мультиязычный?

Аватар пользователя B.X

вопросы автору хака можно задать на Друпал.ру: http://drupal.ru/user/jason32
здесь он редко бывает...