За последние 24 часа нас посетили 20906 программистов и 1129 роботов. Сейчас ищут 389 программистов ...

Не могу собрать код для локализации сайта.

Тема в разделе "PHP для новичков", создана пользователем Dmitriy8787, 10 фев 2015.

  1. Dmitriy8787

    Dmitriy8787 Новичок

    С нами с:
    7 фев 2015
    Сообщения:
    6
    Симпатии:
    0
    Здравствуйте! Нашел код для локализации сайта: "XML + PHP локализация сайта: интерфейс", но чего-то не хват. Что здесь нужно добавить ? Исходники на сайте так и не нашел.
     
  2. artoodetoo

    artoodetoo Суперстар
    Команда форума Модератор

    С нами с:
    11 июн 2010
    Сообщения:
    11.068
    Симпатии:
    1.231
    Адрес:
    там-сям
    Надо просто пытаться. Попробуй рассказать чего тебе не хватает.
     
  3. Dmitriy8787

    Dmitriy8787 Новичок

    С нами с:
    7 фев 2015
    Сообщения:
    6
    Симпатии:
    0
    Мне не понятно как должен выглядеть файл ajaxCore.php.
    В какой файл вставить
    Код (PHP):
    1.  <div id="langReset">
    2.         <ul><a href="index.php">
    3.             // $localizatorTypes создает в init.php - это xml-объект
    4.             <? echo $localizatorTypes;
    5.             if($localizatorTypes){
    6.                 foreach($localizatorTypes->lang as $lang){
    7.                     $tmp='';
    8.                     if($lang->id==$localType){$tmp='active';}
    9.                     echo '<li lang="'.$lang->id.'" '.$tmp.'><img src="'.$localizator->route.$lang->id.'/ico.png" title="'.$lang->name.'" weight="10px" height="10px"/></li>';
    10.                 }
    11.             } ?></a>
    12.         </ul>
    13.     </div>
    какие дополнительные файлы jQuery подключить чтобы заработал:
    Код (PHP):
    1.  
    2. $(function(){
    3.         $('#langReset > ul > li').click(function(){
    4.             if(typeof $(this).attr('active')==='undefined'){
    5.                 var id=$(this).attr('lang');
    6.                 if(id && typeof id==='string'){
    7.                     $.ajax({
    8.                         type: "POST",
    9.                         url:"ajaxCore.php",
    10.                         data:({get:'change','i':id}),
    11.                         dataType:"html",
    12.                         async:true,
    13.                         success:function(e){
    14.                             if(e=='OK'){
    15.                                 window.location.reload();
    16.                             }
    17.                         }
    18.                     });
    19.                      
    20.                 }
    21.             }
    22.         });
    23.     });
    24.  
    Куда подключить файл info.xml
     
  4. artoodetoo

    artoodetoo Суперстар
    Команда форума Модератор

    С нами с:
    11 июн 2010
    Сообщения:
    11.068
    Симпатии:
    1.231
    Адрес:
    там-сям
    обычно родная документация такие вопросы освещает. какой-нибудь step-by-step или quick start поищи.

    удачи!
     
  5. Dmitriy8787

    Dmitriy8787 Новичок

    С нами с:
    7 фев 2015
    Сообщения:
    6
    Симпатии:
    0
    Там такого нет.

    Добавлено спустя 48 секунд:
    Я даже пытался на этом сайте найти исходники, их тоже нет.

    Добавлено спустя 58 секунд:
    http: // www . devbattles . com /sand/post-204-XML++PHP+%D0%BB%D0%BE%D0%BA%D0%B0%D0%BB%D0%B8%D0%B7%D0%B0%D1%86%D0%B8%D1%8F+%D1%81%D0%B0%D0%B9%D1%82%D0%B0+%D0%B8%D0%BD%D1%82%D0%B5%D1%80%D1%84%D0%B5%D0%B9%D1%81

    [ кому надо, уберет пробелы. — ваш модераторъ ]
     
  6. artoodetoo

    artoodetoo Суперстар
    Команда форума Модератор

    С нами с:
    11 июн 2010
    Сообщения:
    11.068
    Симпатии:
    1.231
    Адрес:
    там-сям
    В статье есть файл ajaxCore.php. Может твоя цель была оставить здесь ссылку на ту страничку?
     
  7. Dmitriy8787

    Dmitriy8787 Новичок

    С нами с:
    7 фев 2015
    Сообщения:
    6
    Симпатии:
    0
    Моя цель - локализация сайта.

    Добавлено спустя 1 минуту 58 секунд:
    Если Вы знаете, как сделать локализацию сайта то расскажите. Если б Вы вникли в проблему никто ссылку не оставил.
     
  8. artoodetoo

    artoodetoo Суперстар
    Команда форума Модератор

    С нами с:
    11 июн 2010
    Сообщения:
    11.068
    Симпатии:
    1.231
    Адрес:
    там-сям
    Статья вроде годная и полный набор исходников в ней есть. Просто читайте внимательно. Было бы логично личные непонятки выразить в каментах к самой статье.

    Лично я не согласен с автором статьи в плане выбора средств: XML для хранения переводов, jquery для переключения языка, но это дело вкуса.

    Могу показать свой рецепт. Танцуем от вывода (шаблон):
    Код (PHP):
    1. <p class="exclamation"><?= t('Show must go on!') ?></p>
    Функция t() должна поискать перевод фразы на "текущем языке пользователя". А если он не найден, то тупо вывести оригинальную фразу.
    Логично, что верстальщик шаблона может вставлять такие фразы на языке по умолчанию не парясь о наличии переводов на текущий момент. Это не должно вызвать ошибку.

    Надо решить две подзадачи:
    1. выбор "текущего языка"
    2. подгрузка переводов

    1. Выбор языка
    Пусть язык хранится в куке. Сессия тоже сгодится, я без фанатизма подхожу, просто большинство известных мне сайтов использует куку для этого.
    Я буду использовать процедурный стиль для краткости.

    Код (PHP):
    1. function t($str)
    2. {
    3.   static $lang;
    4.   if (!isset($lang)) {
    5.     $lang = isset($_COOKIE['lang']) ? $_COOKIE['lang'] : 'en'; // let the English be default lang
    6.   }
    7.   // ... use current lang to translate ...
    8. } 
    Переменная $lang статическая. Это значит, что она сохранит значение к следующему вызову функции. Но при следующем обращении к скрипту она конечно снова окажется пустой — тогда она получит значение из куки.

    Откуда в куке возникнет это значение? Надо завести обработчик ссылки переключения языка. Пусть так выглядит ссылка переключения:
    <a href="/index.php?lang=ru">RU</a>
    вот обработчик
    Код (PHP):
    1. if (isset($_GET['lang'])) {
    2.   setcookie('lang', $_GET['lang'], 0, '/');
    3.   // сделали дело, возвращаемся на исходную страницу
    4.   $ref = isset($_SERVER['HTTP_REFERER']) ? $_SERVER['HTTP_REFERER'] : '/';
    5.   header('Location: '.$ref);
    6.   exit();
    7. }
    2. Подгрузка переводов
    Дописываем нашу функцию:
    Код (PHP):
    1. function t($str)
    2. {
    3.   static $phrases;
    4.   // get language + dictionary and do it only once.
    5.   if (!isset($phrases)) {
    6.     // just paranoia: avoid odd characters
    7.     $lang = (isset($_COOKIE['lang']) && preg_match('/^[a-z][a-z]$/', $_COOKIE['lang']))
    8.       ? $_COOKIE['lang']
    9.       : 'en';
    10.     $filename = __DIR__."/i18n/{$lang}.php";
    11.     $phrases = file_exists($filename) ? include($filename) : array();
    12.   }
    13.   // get translation or original phrase
    14.   return isset($phrases[$str]) ? $phrases[$str] : $str;
    15. }
    Готово!

    Я выбрал для переводов формат массива PHP. Это не требует никакой дополнительной обработки, достаточно просто заинклудить файл. Вот так может выглядеть файл с русскими фразами:
    /i18n/ru.php
    Код (PHP):
    1. <?php
    2. return  array(
    3. 'Show must go on!'  =>  'Шоу должно продолжаться!',
    4. 'My site'  =>  'Мой сайт',
    5. 'Select language'  =>  'Выберите язык',
    6. );
    убери пробелы чтобы скачать: https:// www . dropbox . com /s/seae6jx5xh8uanu/l10n.zip?dl=0

    добавочка от 2015-03-18: Пример с предпочтениями браузера, выбором языка в куку и подгрузкой переводов: https:// www . dropbox . com /s/fydsnaojpr4rdb1/l10n-2.zip?dl=0
    пробелы убрать
     
  9. Dmitriy8787

    Dmitriy8787 Новичок

    С нами с:
    7 фев 2015
    Сообщения:
    6
    Симпатии:
    0
    Спасибо.