[ Поиск ] - [ Пользователи ] - [ Календарь ]
Полная Версия: Мультиязычность на сайте
yurij__
Появилась необходимость прикрутить мультиязычность на сайт, написанный на собственном движке. Реализация перевода небольших текстовых фрагментов не составила труда, а вот для статей (которые хранятся в бд) я не могу выбрать решение. Потенциальных подходов вижу два:
  • хранить статьи на разных языках в одной и той же таблице с разными id (при этом будет колонка lng, указывающая язык)
  • хранить статьи на разных языках в разных таблицах (например articles_ru, articles_en) с одинаковыми id

Может кто-то уже решил для себя подобную проблему. Хотелось бы услышать все за и против.



Спустя 13 минут, 35 секунд (28.07.2011 - 11:09) gidrosoldat написал(а):
yurij__, подумай - может ли появиться гипотетическая ситуация когда придется выводить статьи (или брать другие данные данные) на разных языках в одной странице? Если такая возможность есть, то проще сделать одну таблицу с языковым флагом.
Если же везде будешь выводить страницы только одного языка, я бы делал для каждого языка таблицу с определенным префиксом (ru_articles, en_articles, de_articles). Такая структура будет более стройная и упорядоченная! К тому же если в перспективе будет больше языков, будет проще ориентироваться.
Мне кажется, лучше разделить.

Спустя 11 минут, 12 секунд (28.07.2011 - 11:20) yurij__ написал(а):
Да, я тоже больше склоняюсь к разделению.
Думаю правильно было бы создать одну главную таблицу (например acrticles), где будут храниться общие данные о статье (дата создания, псевдоним, автор и т.п.) и, непосредственно, языковые таблицы (articles_ru, articles_en), где будут храниться языко-зависимые фрагменты (title, body и т.д.).
Такой способ хранения позволит избежать избыточность данных, и позволит более логично их структурировать. Хотя непонятно - может такие поля как дата создания а автор - это все-таки атрибут конкретной локализации, а не статьи в целом (это размышление по поводу главной таблицы).

К преимуществам одной общей таблицы можно отнести легкость к изменениям структуры бд. Надо добавить колонку - сделал это в одном месте и нет проблем.

Спустя 1 час, 47 минут, 3 секунды (28.07.2011 - 13:07) yurij__ написал(а):
может у кого-то еще есть мысли по теме?

Спустя 28 минут (28.07.2011 - 13:35) sebastjan написал(а):
Мысль мне понравилась, две таблицы с идентичные названиями, только префиксы разные, меняем прфикс и меняеться язык.
беру в арсенал.

Спустя 6 месяцев, 23 дня, 6 часов, 41 минута, 20 секунд (21.02.2012 - 20:16) andrewbuenos написал(а):
Здравствуйте!
Я хочу, чтобы мой сайт можно было просматривать на двух языках..
Скажите, что я сделал неправильно в коде:
файл languages.php:
<?PHP
$l = array('eng', 'ru');
$_SESSION['lang'] = (isset($_SESSION['lang']) && in_array($_SESSION['lang'], $l)) ? $_SESSION['lang'] : $l[1];
include_once('languages/'.$_SESSION['lang'].'.php');
?>

файл ru.php:
<?PHP
$lang['main'] = 'Главная страница';
?>

файл eng.php:
<?PHP
$lang['main'] = 'Main page';
?>

файл index.php:
<?PHP
include ("languages.php");
?>

<html>
<head>
<title><?=
$lang['main']?></title>
</head>
<body>
<h2><?=
$lang['main']?></h2><br><br>
<a
href="#" onclick="document.cookie = 'lang=eng; expires=Tue, 22 Feb 2012 12:00:00'; location.reload(); return false;">eng</a><br>
<a
href="#" onclick="document.cookie = 'lang=ru; expires=Tue, 22 Feb 2012 12:00:00'; location.reload(); return false;">ru</a><br>
</body>
</html>

Спустя 5 минут, 35 секунд (21.02.2012 - 20:22) nugle написал(а):
andrewbuenos
тебе вначале сессию стартовать надо

Спустя 38 минут, 12 секунд (21.02.2012 - 21:00) vagrand написал(а):
Цитата
и, непосредственно, языковые таблицы (articles_ru, articles_en), где будут храниться языко-зависимые фрагменты (title, body и т.д.).


А зачем создавать отдельную таблицу под каждый из поддерживаемых языков? А если их будет 50? А если надо будет динамически менять количество поддерживаемых языков из админки?
Как по мне самый нормальный вариант это создать 2-е таблицы:
1. articles - в которой помимо уникального ID статьи будут содержатся так же данные о статье, которые не подлежат переводу, например дата создания, ID автора, ЧПУ код наконец.
2. articles_lang - в ней будем хранить: article_id, lang_code + набор языкозависимых полей. Сделать в этой таблице уникальный ключ по полям article_id + lang_code и наслаждаться жизнью.
Быстрый ответ:

 Графические смайлики |  Показывать подпись
Здесь расположена полная версия этой страницы.
Invision Power Board © 2001-2024 Invision Power Services, Inc.