ФорумПрограммированиеPHP для идиотов → Многоязычный сайт

Многоязычный сайт

  • Grohot

    Сообщения: 52 Репутация: N Группа: Кто попало

    Spritz 5 февраля 2008 г. 7:00

    Возникла необходимость разработать сайт на 3-х языках (русский, английский и китайский). Хочу спросить совета как лучше такое реализовать. Хочу узнать сам принцип создания многоязычных сайтов.
  • sap

    Сообщения: 2701 Репутация: N Группа: Кто попало

    Spritz 5 февраля 2008 г. 7:12, спустя 11 минут 48 секунд

    Я лично делаю ленг-файлы, в которых все необходимые тексты записаны в константы. А дальше подключаю необходимый файл, в зависимости от условий.

    Например:
    // lang-en.php
    define ('WELCOME_TEXT', 'Welcome to my site!');
    define ('MAIN_TEXT', 'Text in main page');


    // lang-ru.php
    define ('WELCOME_TEXT', 'Добро пожаловать!');
    define ('MAIN_TEXT', 'Текст на главной странице');


    //lang.php
    if (isset ($_GET['lang']))
      $_SESSION['lang'] = $_GET['lang'];
    elseif (isset ($_COOKIE['lang']))
      $_SESSION['lang'] = $_COOKIE['lang'];
    else
      $_SESSION['lang'] = "en";
    require_once ("./lang/lang-".$_SESSION['lang'].".php");


    А дальше, везде, где нужен текст, подставляются соответсвующие константы.
  • TRIAL

    Сообщения: 988 Репутация: N Группа: Джедаи

    Spritz 5 февраля 2008 г. 7:26, спустя 14 минут 30 секунд

    Делал англ версию сайта компании, сделал сабдомен eng.mysite.ru туда залил копию сайта и всё перевел.
    from TRIAL with LOVE
  • Grohot

    Сообщения: 52 Репутация: N Группа: Кто попало

    Spritz 5 февраля 2008 г. 7:40, спустя 14 минут 19 секунд

    А если сайт динамичный на mysql. Как лучше в базе сделать разделение. Чтобы было так например. По умолчанию русский язык. Если перевод русского текста есть (например англ или китайский) то выводим его, если нет выводим русский текст
  • sap

    Сообщения: 2701 Репутация: N Группа: Кто попало

    Spritz 5 февраля 2008 г. 8:05, спустя 24 минуты 23 секунды

    Если перевод русского текста есть (например англ или китайский) то выводим его, если нет выводим русский текст

    Это чтобы половина сайта была на русском, а половина на китайском?)))

    Думаю, что не стоит тексты хранить в бд.
  • md5

    Сообщения: 11949 Репутация: N Группа: в ухо

    Spritz 5 февраля 2008 г. 8:16, спустя 11 минут 35 секунд

    Думаю, что не стоит тексты хранить в бд.

    а где их хранить? в кладовке?

    лучше всего, на мой взгляд — делать копии сайта
    все умрут, а я изумруд
  • sap

    Сообщения: 2701 Репутация: N Группа: Кто попало

    Spritz 5 февраля 2008 г. 11:35, спустя 3 часа 18 минут 21 секунду

    а где их хранить? в кладовке?

    В файле)
  • md5

    Сообщения: 11949 Репутация: N Группа: в ухо

    Spritz 5 февраля 2008 г. 11:38, спустя 3 минуты 43 секунды

    редактируемые тексты клиентов хранить в файле?
    все умрут, а я изумруд
  • sap

    Сообщения: 2701 Репутация: N Группа: Кто попало

    Spritz 5 февраля 2008 г. 13:48, спустя 2 часа 9 минут 42 секунды

    Нет, основные тексты сайта, которые практически неизменны.
  • Patrick

    Сообщения: 506 Репутация: N Группа: Кто попало

    Spritz 5 февраля 2008 г. 14:13, спустя 24 минуты 23 секунды


    Нет, основные тексты сайта, которые практически неизменны.

    Например!
  • TRIAL

    Сообщения: 988 Репутация: N Группа: Джедаи

    Spritz 6 февраля 2008 г. 1:20, спустя 11 часов 7 минут 8 секунд

    А смысл то их в файах хранить когда с тем же успехом их можно хранить в базе, только при случае удобнее будет редактировать.
    Но копия проще.
    from TRIAL with LOVE
  • Assessor

    Сообщения: 3 Репутация: N Группа: Кто попало

    Spritz 6 февраля 2008 г. 5:06, спустя 3 часа 46 минут 38 секунд

    Если тексты храняться в базе можно попробывать сделать транслятор… Для начало создаем базу откуда будем брать локализацию, примерно так:
    CREATE TABLE `lang` (
     `id` int(11) NOT NULL auto_increment,
     `type` varchar(12) NOT NULL default '',
     `content_id` int(11) NOT NULL default '0',
     `subject` varchar(255) NOT NULL default '',
     `body` longtext NOT NULL,
     `language` varchar(3) NOT NULL default '',
     PRIMARY KEY  (`id`),
     KEY `id` (`id`)
    ) ENGINE=MyISAM;
    где type  - тип страницы (новости, статьи, фак, форум и так далее), content_id - связь с таблицой что локализуем, subject & body соотвтетсвенно заголовок и тело, language - язык…

    Дальше в зависимости от параметра $_GET['lang'] или $_COOKIE['lang'], если не равно пусто, то бишь задействован альтернативный язык, считываем из таблицы lang данные с условием, что language = $_GET['lang'], иначе считываем данные из основной таблицы…
  • Timur

    Сообщения: 1068 Репутация: N Группа: Джедаи

    Spritz 6 февраля 2008 г. 5:57, спустя 50 минут 15 секунд

    Дальше в зависимости от параметра $_GET['lang'] или $_COOKIE['lang'], если не равно пусто, то бишь задействован альтернативный язык, считываем из таблицы lang данные с условием, что language = $_GET['lang'], иначе считываем данные из основной таблицы…

    почему бы не хранить всё в одной таблице, а при отсутсвии $_GET['lang'] или $_COOKIE['lang'] просто выставлять значение по-умолчанию?
  • sap

    Сообщения: 2701 Репутация: N Группа: Кто попало

    Spritz 6 февраля 2008 г. 5:57, спустя 55 секунд



    Нет, основные тексты сайта, которые практически неизменны.

    Например!

    Например, взять для примера хотя бы этот форум.
    Показать новые сообщения с Вашего последнего визита.
    Показать новые ответы на Ваши сообщения.
    Начало Помощь Поиск Профиль Личные сообщения Календарь Пользователи Выйти

    Вот эти тексты какой смысл хранить в базе? Проще их сделать константами и подключать в зависимости от условия ленг-файл.
    Не?
  • Timur

    Сообщения: 1068 Репутация: N Группа: Джедаи

    Spritz 6 февраля 2008 г. 6:13, спустя 15 минут 28 секунд

    Можно сделать несколько шаблонов страниц (если сайт простой и их немного) - для каждого языка свои, со своим текстом.

Пожалуйста, авторизуйтесь, чтобы написать комментарий!