Помогите решить задачу с реализацией мультиязычности сайта

Тема в разделе "Как сделать...", создана пользователем karen12, 27 сен 2014.

  1. karen12

    karen12 Постоялец

    Регистр.:
    26 фев 2012
    Сообщения:
    83
    Симпатии:
    1
    Есть сайт на двух языках,
    для перевода сайта пользуюсь этим скриптом
    PHP:
    <?
    if (isset( 
    $_REQUEST["lang"])) {
      
    $_SESSION["lang"] = $_REQUEST["lang"];
    }elseif(!isset( 
    $_SESSION["lang"])||( $_SESSION["lang"]=='')){
      
    $_SESSION["lang"] = 'ru';
    }
    //тут можно делать проверки всякие на существование файла и вообще регулярные проверки значения этого ланга )
    include ('./lang/'.$_SESSION["lang"].'.php');

    ?>
    соотвественно ссылки для перехода между языками
    <a href="./main.php?lang=rus" title="Русский">Русский</a>
    <a href="./main.php?lang=eng" title="ENG">Английский</a>
    файлы хранящие языковые фразы в папке lang
    rus.php
    eng.php
    фразы вывожу <?=$start['title']?> .
    Все переводится хорошо, но есть фразы которые находятся в базе, не могу перевести эти фразы например <? echo $_SESSION['content']; ?> (находится в базе mysql) . ?
     
  2. Sunday

    Sunday

    Регистр.:
    13 дек 2009
    Сообщения:
    732
    Симпатии:
    323
    Потому что это не перевод, а вывод заранее подготовленных фраз из файла. Если вам нужен контент на разных языках, то его нужно заранее вносить в базу данных на разных языках и уже потом делать выборку из базы, проверяя, какой язык включен на сайте.
    Или установить на сайт какой-нибудь Google Translate, но качество перевода, естественно, будет не на высоте.
     
  3. Otto

    Otto

    Регистр.:
    12 май 2008
    Сообщения:
    481
    Симпатии:
    158
    Так создай в БД 2 таблицы или 2 поля (хз как у тебя архитектура локализации), и в запрос подставляй какое поле исходя из яз. надо выводить:

    SELECT content FROM news WHERE lang = '$_GET['lang']' (ну потом ещё на инекцию проверь переменыне)
     
  4. Vhhhhh

    Vhhhhh Писатель

    Регистр.:
    24 фев 2014
    Сообщения:
    6
    Симпатии:
    1
    Для языков лучше использовать что то типо этого(используется например в wordpress) https://ru.wikipedia.org/wiki/Gettext
     
    unpunk нравится это.
  5. MikeIceman

    MikeIceman Писатель

    Регистр.:
    20 мар 2013
    Сообщения:
    2
    Симпатии:
    3
    В том виде, в котором оно у автора, имеет смысл объединить подключаемый файл и результат выборки
    То есть если имеем
    Подключаемый файл eng.php
    PHP:
    <?php
        $start 
    = array(
            
    "title"      => "Main page",
            
    "b_login"    => "Login",
            
    "b_register" => "Sign Up"
        
    );
    ?>
    Таблица `lang_eng`
    Код:
    +-----------+------------+
    |   code    |    text    |
    +-----------+------------+
    |  phrase1  |    PHP     |
    |  phrase2  |  Language  |
    +-----------+------------+
    То код будет следующим:
    PHP:
    <?php
    if (isset( $_REQUEST["lang"])) {
      
    $_SESSION["lang"] = $_REQUEST["lang"];
    }elseif(!isset( 
    $_SESSION["lang"])||( $_SESSION["lang"]=='')){
      
    $_SESSION["lang"] = 'ru';
    }
    //тут можно делать проверки всякие на существование файла и вообще регулярные проверки значения этого ланга )
    include ('./lang/'.$_SESSION["lang"].'.php');
    $db_result mysql_fetch_assoc(mysql_query('SELECT * FROM `lang_'.$_SESSION["lang"].'`'));
    $locale array_merge($start$db_result);
    ?>
    И, соответственно, вывод фраз локализации:
    PHP:
    <?=$locale['title']?>
    <?=$locale
    ['phrase1']?>
    В этом случае в таблице новостей может быть например два поля `content_eng` и `content_rus` в каждом из которых своя новость для каждой языковой версии и т.д.

    А вообще, это дикий изврат. Так делать (как у автора) локализацию нельзя.
     
    latteo нравится это.
  6. TeroTM

    TeroTM Писатель

    Регистр.:
    31 июл 2014
    Сообщения:
    0
    Симпатии:
    0
    Воспади.
    Если-бы сейчас работала моя система я бы слил свой скрипт мультиязычности. Всё это у меня прикреплялось к поддоменам: ru.sealink.tk / en.sealink.tk ..... Ну в общем куча языков.
    Потом я проверял $_SERVER['REMOTE_HOST'] и выводил то что нужно. Так-же моя система хороша тем что у меня идёт автоматом определение языка пользователя.
    Если вам так нужна мультиязычность то уж тогда пишите в ПМ.
    Я вам настрокаю её быстро.