|
|
|
| Добрый день,
подскажите, пожалуйста, правильно ли я делаю или есть более элегантное решение?
есть сайт на 2-х языках, на каждом языке есть совершенно одинаковые таблицы.
Чтобы каждый раз не дублировать их, я создала одну таблицу и языковые файлы к ней, затем, в соответствии, с текущим языком, вызываю нужный перевод.
Проверку языка делаю так:
<?
$url=$_SERVER['REQUEST_URI'];
$lang_dir = substr($url, 0, 4);
if ($lang_dir=="/en/") include 'lang/en.php';
else include 'lang/ru.php';
?>
<table>
...
</table>
|
Вызов таблицы на странице сайта:
<? include '/files/table-1.php'; ?>
|
Заранее спасибо за помощь! | |
|
|
|
|
|
|
|
для: anuk
(14.04.2014 в 13:34)
| | работает? | |
|
|
|
|
|
|
|
для: Valick
(14.04.2014 в 13:42)
| | Да, работает, просто мне кажется что это слишком просто и непрофессионально :) | |
|
|
|
|
|
|
|
для: anuk
(14.04.2014 в 13:50)
| | Если работает, значит все правильно :)
Вариантов реализации мультиязычности много, ваш один из них.
Просто в большинстве случаев используются префиксы к имени файла или таблицы, хотя это не так уж и важно. Вместо условия if на мой взгляд лучше подойдет switch, можно указать много языков и есть значение по умолчанию. Хотя и ифами все это делается без проблем. | |
|
|
|
|
|
|
|
для: Valick
(14.04.2014 в 14:01)
| | Спасибо! | |
|
|
|
|
|
|
|
для: anuk
(14.04.2014 в 13:50)
| | Я делаю по-другому. Перевод держу в базе, зато админ может его с помощью вэб-интерфейса редактировать,
а не отрывать меня по мелочам - "а поменяй-ка мне вот в этом слове эту буковку на эту"... Сам заходит и сам
меняет, что ему хочется. | |
|
|
|
|
|
|
|
для: anuk
(14.04.2014 в 13:34)
| | в БД, например таблица news
title_ru | title_en | content_ru | content_en
?lang=ru
$lang=$_GET['lang'];
SELECT `title_'.$lang.'`, `content_'.$lang.'` FROM `news` | |
|
|
|
|
|
|
|
для: moonfox
(15.04.2014 в 00:09)
| | moonfox, это самый худший из всех вариантов | |
|
|
|
|
|
|
|
для: Valick
(15.04.2014 в 00:32)
| | а детали можно?
как раз хотел спросить что не подходящего в таком способе | |
|
|
|
|
|
|
|
для: moonfox
(15.04.2014 в 00:09)
| | встречал такое наиболее часто. мне больше нравится использовать для каждого языка свою таблицу. получается куда более гибко, т.к не обязательно, что для разных языков будут одни и те же страницы, статьи и т.п плюс сам по себе язык добавляется удобнее и быстрее | |
|
|
|
|
|
|
|
для: psychomc
(15.04.2014 в 00:40)
| | кажется вопрос был вообще не о языках контента, а о сопроводительных элементах...
ошибся
чото правда не понял
Чтобы каждый раз не дублировать их, я создала одну таблицу и языковые файлы к ней, затем, в соответствии, с текущим языком, вызываю нужный перевод.
1 таблица под содержание, скажем новости, на русском и английском?
и что теперь два php файла такие же одинаковые, только один берет текст из поля на русском второй на английском? | |
|
|
|
|
|
|
|
для: moonfox
(15.04.2014 в 00:55)
| | А если будет не два, а три языка и более языка будете расширять таблицу?
Добавление нового языка не должно вызывать затруднений, а уж тем более так называемого роста таблицы "в ширину". Как правило рост таблицы в ширину для добавления вариантов чего-либо, это дурной знак. | |
|
|
|
|
|
|
|
для: Valick
(15.04.2014 в 01:12)
| | давайте по порядку
Чтобы каждый раз не дублировать их, я создала одну таблицу и языковые файлы к ней, затем, в соответствии, с текущим языком, вызываю нужный перевод.
|
причем тут 1 таблица?
2 файла это ясно - константы страниц,
но как 1 таблица на содержание ru|en кроме как не 2 колонки или же автор имеет ввиду запись вперемешку русский/английский в одной таблице?
то есть
не
а
на счет роста таблицы в ширину для добавления.... ну это относительно
а не избыточно ли, скажем имея 10 языков - делать 10 одинаковых таблиц?
или, что, тогда вариант примерно такой ?
одна таблица с общими параметрами типа
id | data | author
вторая
id | parent_id | title | content
|
подскажите структуру на n-языков | |
|
|
|
|
|
|
|
для: moonfox
(15.04.2014 в 01:24)
| | 1)
moonfox , девушка говорила про html таблицу
2)
вариант
title
1. о нас
2. about
более грамотный, только надо добавить пару колонок
id | mem | title | lang
1 | abo | о нас | ru
2 | abo | about | en
где abo - это метка в тексте которую меняем на значение title
при этом не сложно написать запрос который будет выбирать нужный язык (по полю lang), а для пущей важности можно доставать из базы только нужные данные (по полю mem) которые используются на странице, а не все подряд.
это простейший вариант данного направления, тут конечно напрашивается нормализация, и одна таблица спокойно превратиться в три, но это уже детали. | |
|
|
|
|
|
|
|
для: Valick
(15.04.2014 в 01:26)
| | спасибо
id | mem | title | lang
1 | abo | о нас | ru
2 | abo | about | en
таки lang можно опустить) хотя может и не везде.... использую смарти - походу выгоднее отправлять всего 1 массив в него чем переменные по каждой выборке из abo
а как быть именно не с константами страниц, а именно текстовым содержанием
например таблица НОВОСТИ и языков куча...?
примерно в таком же ключе действовать как и этот пример? | |
|
|
|
|
|
|
|
для: moonfox
(15.04.2014 в 01:41)
| | >таки lang можно опустить
нельзя :)
>походу выгоднее отправлять всего 1 массив
он там и будет один
>примерно в таком же ключе действовать как и этот пример?
да, но там уже точно будет несколько таблиц | |
|
|
|
|
|
|
|
для: Valick
(15.04.2014 в 01:57)
| |
а если abo уникален ?)
типа
mem | title
t1 | о нас
t2 | about
хотя id тоже уникален....
ок спасибо за пищу для ума! | |
|
|
|