powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / PHP, Perl, Python [игнор отключен] [закрыт для гостей] / (PHP+MySQL) Многоязычный интерфейс. Кто как делает?
5 сообщений из 5, страница 1 из 1
(PHP+MySQL) Многоязычный интерфейс. Кто как делает?
    #33144468
Bagin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Здравствуйте!
Появилась необходимость сделать сайт на нескольких языках. Скрипты понятно, можно поместить в разные каталоги, например "rus", "eng" и т.д.
В БД должны храниться описания товаров, заказы на эти товары, письма от клиентов и т.д. Предполагаю, что можно в таблицах сделать дополнительные поля на разных языках. Какие могут возникунуть проблемы, например, с кодировками? Какие есть еще варианты?
Заранее спасибо.
...
Рейтинг: 0 / 0
(PHP+MySQL) Многоязычный интерфейс. Кто как делает?
    #33144565
Фотография Berkut
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Как вариант, можно создать доп. таблицу (Language), в которой будут храниться возможные языковые версии:

lang_id lang_name1 русский2 английский3 ...

Затем, если у вас есть к примеру публикации на различных языках, то структура таблиц, может быть примено следующего вида:
Код: plaintext
1.
2.
3.
 article  (art_id, art_name, art_content, lang_id)

где
 
art_id - уникальный номер статьи в таблице

art_name - название статьи

art_content - ее содержание

lang_id - языковая версия статьи (внешний ключ таблицы Language)

В итоге, когда требуется вывести список статей на английском языке, то следует выполнить следующий запрос:
Код: plaintext
1.
select * from article where lang_id='2'

Что касается вывода "системных сообщений"/"подсказок"/"подписей к формам" и т.д., то можно написать класс Language, который в зависимости от используемого языка, будет читать соответствующую спецификацию (определения "подсказок" и т.п.) всех сообщений и выводить их на сайте.

Пример спецификации диалога "загрузки картинок" для русскоязычного сайта может быть таким:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
// '/lib/ru/lang.inc'

$lang_data = array(
 'upload_images' => array(
   'insert_image' => 'Вставить изображение',
   'upload_image' => 'Загрузить изображение',
   ...),
 ...
 );

Тогда диалог загрузки будет выглядеть так:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
<?
...
$lang = new Language('ru', '/lib/ru/lang.inc');

...
?>

<form action="upload_image.php" method="POST">
...
<input type="button" value="<?echo $lang->message('insert_image');?>"><br>
...
<input type="button" value="<?echo $lang->message('upload_image');?>">
</form>

Надеюсь, что идея понятна :). Правда повторюсь, что все это только "как вариант".
...
Рейтинг: 0 / 0
(PHP+MySQL) Многоязычный интерфейс. Кто как делает?
    #33144571
Фотография Berkut
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
BaginКакие могут возникунуть проблемы, например, с кодировками?Насчет кодировок ничего сказать не могу, т.к. это уже особенности той СУБД, с которой Вы работаете.
...
Рейтинг: 0 / 0
(PHP+MySQL) Многоязычный интерфейс. Кто как делает?
    #33144678
Bagin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Примерно понятно. Думал проще будет, но не учел системные сообщения.
Вот только:
Код: plaintext
1.
2.
3.
 article  (art_id, art_name, art_content, lang_id)

где
 
art_id - уникальный номер статьи в таблице

art_name - название статьи

art_content - ее содержание

lang_id - языковая версия статьи (внешний ключ таблицы Language)

думаю что уникальным должен быть не art_id, т.к. одна и та же статья, может быть на разных языках, а должна быть уникальной связка art_id + lang_id, ну и еще одно поле - просто идентификатор записи id.
Спасибо за помощь!
...
Рейтинг: 0 / 0
(PHP+MySQL) Многоязычный интерфейс. Кто как делает?
    #33144726
Фотография Berkut
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Baginдумаю что уникальным должен быть не art_id, т.к. одна и та же статья, может быть на разных языках, а должна быть уникальной связка art_id + lang_id, ну и еще одно поле - просто идентификатор записи id.
;))
Эт для Вас статья будет одна и та же , а для СУБД - это совершенно разные записи! :) Поэтому art_id вполне подходит на роль первичного ключа, который однозначно идентифицирует статью в таблице. А lang_id - это "свойство" статьи.

Хотя... "хозяин - барин", имхо дело ваше.
...
Рейтинг: 0 / 0
5 сообщений из 5, страница 1 из 1
Форумы / PHP, Perl, Python [игнор отключен] [закрыт для гостей] / (PHP+MySQL) Многоязычный интерфейс. Кто как делает?
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]