За последние 24 часа нас посетили 18623 программиста и 1604 робота. Сейчас ищут 954 программиста ...

Мультиязычный сайт

Тема в разделе "Прочие вопросы по PHP", создана пользователем macbeth9, 10 июл 2012.

  1. macbeth9

    macbeth9 Активный пользователь

    С нами с:
    27 июн 2012
    Сообщения:
    13
    Симпатии:
    0
    Привет всем!

    Делаю мультиязычный сайт.

    Заходим на сайт с России навпример и нам в сессию $_SESSION['lang'] присваивается значение ru

    И дальше скрипт видит switch

    Код (Text):
    1. switch($_SESSION['lang']) :
    2.    default: include(''.dirname(__FILE__).'/lang/en.php'); break;
    3.    case 'en': include(''.dirname(__FILE__).'/lang/en.php'); break;
    4.    case 'ru': include(''.dirname(__FILE__).'/lang/ru.php'); break;
    5.    case 'es': include(''.dirname(__FILE__).'/lang/es.php'); break;
    6. endswitch;
    И подключает файл. Файл например ru.php такого вида:

    Код (Text):
    1. $lang=array(
    2. "about_site" => "О нас",
    3. "blog" => "Блог",
    4. "faq" => "FAQ")
    И на сайте в определенном месте подключаем массив $lang['blog'], но а вот если не этого массива (blog), как можно сделать что скрипт искал его например в файле en.php, где он будет точно?
     
  2. YSandro

    YSandro Старожил

    С нами с:
    7 апр 2011
    Сообщения:
    2.523
    Симпатии:
    2
    Сделать функцию, которая будет решать что делать, искать файл или просто выводить его. Вызов в хтмл
    Код (PHP):
    1. <?=a('about_site')?>
    А как у вас выводятся строки?
     
  3. macbeth9

    macbeth9 Активный пользователь

    С нами с:
    27 июн 2012
    Сообщения:
    13
    Симпатии:
    0
    Всмысле как? Вот так <?=lang('about_site')?>, например подключаем файл ru.php, и там есть массив 'about_site', и вот выводим его <?=lang('site')?>, а если в ru.php его нету и вместо пустого места выводить, искать его в файле en.php, а подскажите как пример создать функцию
     
  4. Your

    Your Старожил

    С нами с:
    2 июл 2011
    Сообщения:
    4.074
    Симпатии:
    7
    Тут уже об этом говорилось, ну введите в поиск не ленитесь!
     
  5. macbeth9

    macbeth9 Активный пользователь

    С нами с:
    27 июн 2012
    Сообщения:
    13
    Симпатии:
    0
    in_array использовать?
     
  6. YSandro

    YSandro Старожил

    С нами с:
    7 апр 2011
    Сообщения:
    2.523
    Симпатии:
    2
    Ну к примеру
    Код (PHP):
    1. <?php
    2. $lang=array();//где-то там вверху
    3.  
    4. function a($word){
    5.   global $lang;
    6.   if(isset($lang) && count($lang)>0){//если массив был загружен и не пустой
    7.     return $lang[$word];
    8.   }else{
    9.     include(''.dirname(__FILE__).'/lang/'.$_SESSION['lang'].'.php');
    10.     return $lang[$word];
    11.   }
    12. } 
    В хтмл в любом месте вызывать
    Код (PHP):
    1. <?=a('about_site')?>
    Ну это примерно, надо ещё подумать, потестить.
     
  7. macbeth9

    macbeth9 Активный пользователь

    С нами с:
    27 июн 2012
    Сообщения:
    13
    Симпатии:
    0
    Спасибо! Я нашел решение, все теперь работает, просто использовал array_key_exists
     
  8. YSandro

    YSandro Старожил

    С нами с:
    7 апр 2011
    Сообщения:
    2.523
    Симпатии:
    2
    Отлично. Я тебя не правильно понял, подумал, что файл языка не всегда может быть подключен. Но выход похожий.
    Можно узнавать, есть ли ключ, и так
    Код (PHP):
    1. <?php
    2. if(isset($lang[word])){//если есть запись
    3. //
    4. }