powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / PHP, Perl, Python [игнор отключен] [закрыт для гостей] / Многоязычность на сайте. Как реализовать и нужно ли париться?
51 сообщений из 51, показаны все 3 страниц
Многоязычность на сайте. Как реализовать и нужно ли париться?
    #38135374
Shitbox2
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Пишу движок для сайта на 3-х языках. Возможно еще парочка потом добавиться, не больше. Википедией сайт навряд ли станет. Смену языков планирую делать на лету, т.е. подгружаются сразу все переводы, но лишние просто скрываются ява-скриптом

Вопрос: нужно ли заморачиваться и выносить переводы в отдельную таблицу, потом ее джойнить и т.д.? Пока в таблицах делаю по столбцу на каждый язык (name_ru, name_en, name_fr). Конечно, на добавление нового языка уйдет день, но это будет... раз в два года.

Расскажите о своем опыте? Посоветуйте толковые статьи по теме многоязычности (в т.ч. задание валют, символов разрядов). Как бы вы реализовали?
...
Рейтинг: 0 / 0
Многоязычность на сайте. Как реализовать и нужно ли париться?
    #38135417
ShSerge
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Shitbox2,
Вообще-то, скажем так, нужно - значит нужно.
1. " лишние просто скрываются ява-скриптом" - совершенно плохой подход. Это всё "скрытие" надо на сервере делать.
2. Если надо в таблицах - делайте в таблицах. Вам джойн написать лень? Кстати, в больщинстве случаев джойн не понадобится.
Просто берите из реквеста язык и вставляйте его во "ВХЕРЕ" запроса.
3. Насчёт валют и разрядов и тп. - всё должно делаться Вашим движком, в зависимости от настроек пользователя (см. реквест).
...
Рейтинг: 0 / 0
Многоязычность на сайте. Как реализовать и нужно ли париться?
    #38135464
Фотография Hett
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Бред какой-то.
Если надо то делайте, если не надо, то и париться нечего. Если вы сами не знаете, кто-то другой тем более не сможет ответить.
С подгрузкой всего еще больший бред, если у вас будет 10 языков, то страничка будет вместо 100кб - 1Мб весить?
...
Рейтинг: 0 / 0
Многоязычность на сайте. Как реализовать и нужно ли париться?
    #38135546
Shitbox2
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Не будет 10 языков точно. Будет 3. Возможно, потом еще 1, 2... Это мне кажется, что если заводить отдельную табличку с переводами, то запары больше будет. Может это не так, не знаю. А что плохого в том, чтобы показывать загружать сразу все переводы? Ну будет лишний трафик, зато пользователь щелк и моментально все перевелось. Это что касается навигации, а большие тексты аяксом.

Как сделать без джойна? Можно подробнее?
...
Рейтинг: 0 / 0
Многоязычность на сайте. Как реализовать и нужно ли париться?
    #38135656
Фотография Hett
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
авторЭто мне кажется, что если заводить отдельную табличку с переводами, то запары больше будет.
Мне так кажется с вашим методом будет больше запар, а толку меньше. Это не гугл транслит, пользователь не будет туда сюда языки щелкать сидеть.
...
Рейтинг: 0 / 0
Многоязычность на сайте. Как реализовать и нужно ли париться?
    #38136925
Shitbox2
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ну может быть, поэтому и спрашиваю мнений. И как сделать-то без Джойна? Можно на пальцах структуру БД и запрос?
...
Рейтинг: 0 / 0
Многоязычность на сайте. Как реализовать и нужно ли париться?
    #38136954
Фотография SmeL_md
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Вот чтоб вообще не париться есть Gettext http://php.net/manual/ru/book.gettext.php :) не переживайте пишите свой движок, а осознание "правильной" структуры придет с практикой.
...
Рейтинг: 0 / 0
Многоязычность на сайте. Как реализовать и нужно ли париться?
    #38137172
Shitbox2
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
авторБиблиотека gettext предполагает хранение перевода в файлах с расширениями .mo
авторДля формирования и обновления этих файлов при изменении программы предполагается использование ряда утилит.
авторПервоначально, строки из исходного текста программы собираются с помощью программы xgettext в .pot-файл (каталог). Обновление этого файла и файлов переводов с использованием новых и изменившихся строк, появившихся в исходном коде, осуществляется программой msgmerge.
авторДля начала перевода программы на конкретный язык, переводчик создаёт .po-файл: копирует .pot-файл в нужное место и меняет в нём заголовок. Для этого можно использовать программу msginit. Готовый файл перевода конвертируется в .mo-файлы утилитой msgfmt.

Архив gettext-0.18.2.tar.gz
2012-12-25 08:58 Папка Папка gettext-0.18.2
2012-12-25 08:17 50966 9223372034707292159 gettext-0.18.2\ChangeLog
2012-12-25 08:58 Папка Папка gettext-0.18.2\build-aux
2012-12-25 08:29 6567 9223372034707292159 gettext-0.18.2\build-aux\install-reloc
2012-12-25 08:29 4749 9223372034707292159 gettext-0.18.2\build-aux\relocatable.sh.in
2012-12-04 09:28 1186 9223372034707292159 gettext-0.18.2\build-aux\ac-help.sed
2012-12-25 08:33 2796 9223372034707292159 gettext-0.18.2\build-aux\elisp-comp
2012-12-25 08:29 2821 9223372034707292159 gettext-0.18.2\build-aux\csharpexec.sh.in
2012-12-04 09:28 31272 9223372034707292159 gettext-0.18.2\build-aux\moopp
2012-12-25 08:29 2463 9223372034707292159 gettext-0.18.2\build-aux\javaexec.sh.in
2012-12-04 09:28 1452 9223372034707292159 gettext-0.18.2\build-aux\fixaclocal
2012-12-25 08:40 44935 9223372034707292159 gettext-0.18.2\build-aux\config.guess
2012-12-25 08:29 4134 9223372034707292159 gettext-0.18.2\build-aux\config.libpath
2012-12-25 08:29 3306 9223372034707292159 gettext-0.18.2\build-aux\reloc-ldflags
2012-12-25 08:29 5463 9223372034707292159 gettext-0.18.2\build-aux\csharpcomp.sh.in
2012-12-25 08:40 35758 9223372034707292159 gettext-0.18.2\build-aux\config.sub
2012-12-25 08:30 13997 9223372034707292159 gettext-0.18.2\build-aux\install-sh
2012-12-25 08:29 18717 9223372034707292159 gettext-0.18.2\build-aux\config.rpath
2012-12-25 08:33 6047 9223372034707292159 gettext-0.18.2\build-aux\mdate-sh
...

И еще 100500 строк, которые даже опубликовать нельзя, т.к. превышено 100 Кб
...
2012-12-04 09:28 11892 9223372034707292159 gettext-0.18.2\djgpp\config.sed
2012-12-04 09:28 12210 9223372034707292159 gettext-0.18.2\djgpp\config.bat
2012-12-04 09:28 17405 9223372034707292159 gettext-0.18.2\djgpp\fnchange.in
2012-12-04 09:28 6578 9223372034707292159 gettext-0.18.2\PACKAGING
2012-12-25 08:36 30323 9223372034707292159 gettext-0.18.2\Makefile.in
2012-12-25 08:36 23780 9223372034707292159 gettext-0.18.2\aclocal.m4
2012-12-15 06:32 7794 9223372034707292159 gettext-0.18.2\Makefile.am
#
# Всего: Размер Сжат Файлы
# 76330355 /0-('+.+('-(*. 4838

Они пользователей за идиотов держат? Пусть сами ковыряются в своей библиотеке! Можно как-нибудь без этого? Только ПХП и МайСКЮЛ?
...
Рейтинг: 0 / 0
Многоязычность на сайте. Как реализовать и нужно ли париться?
    #38137205
MikkiMouse
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Shitbox2,

Делается 1 обычная таблица (к примеру `users` (`id`, `name`, ... куча других параметров)), вторая таблица `users_i18n` (`id`, `language_id`, `name` и куча других параметров, для которых нужны переводы) и таблица `languages` (`id`, `language`).
Потом пишется метод getI18n($languageId) в классе, отвечающем за данную сущность.
...
Рейтинг: 0 / 0
Многоязычность на сайте. Как реализовать и нужно ли париться?
    #38137231
Shitbox2
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
getI18n это функция библиотеки GetText? Какая-то странная структура. Зачем-то создавать кучу табличек-дубликатов с переводами, зачем-то в них идентификатор языка делать... Не понимаю логики

Не проще ли и быстрее сделать одну общую табличку с переводами:

Strings
id ru en de fr ...

и везде ссылаться на id строк из нее:
Article
id iser_id title_id text_id

Код: sql
1.
select Strings.$lang from Article, Strings where Article.title_id = Strings.id?



Да, еще замечу, что в моем случае точно не будет проектов с кучей языков, падежами и проч. А в переводе будет нуждаться в основном интерфейс и несколько информационных статей.
...
Рейтинг: 0 / 0
Многоязычность на сайте. Как реализовать и нужно ли париться?
    #38137234
Shitbox2
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
И еще, все тексты планирую хранить исключительно в БД и отдавать в JSON, а JS сам уже будет страничку строить
...
Рейтинг: 0 / 0
Многоязычность на сайте. Как реализовать и нужно ли париться?
    #38137236
MikkiMouse
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Shitbox2,

Shitbox2Не проще ли и быстрее сделать одну общую табличку с переводами:

Strings
id ru en de fr ...


Проще и быстрее (поначалу), когда у тебя в таблице 3 поля. А вот уже когда 33, то не проще и не быстрее. И противоречит идее нормализации базы данных. Но, как ты изволил выразиться, "заморачиваться" тебе не стоит. Ибо кажется, что оно тебе на данном этапе твоих знаний и не нужно.

Shitbox2getI18n это функция библиотеки GetText?

Нет, причем тут GetText? Это самописный метод в классе, реализующем некое подобие DAO .
...
Рейтинг: 0 / 0
Многоязычность на сайте. Как реализовать и нужно ли париться?
    #38137353
Фотография Ренат
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Shitbox2getI18n это функция библиотеки GetText? Какая-то странная структура. Зачем-то создавать кучу табличек-дубликатов с переводами, зачем-то в них идентификатор языка делать... Не понимаю логики

Не проще ли и быстрее сделать одну общую табличку с переводами:

Strings
id ru en de fr ...

и везде ссылаться на id строк из нее:
Article
id iser_id title_id text_id

Код: sql
1.
select Strings.$lang from Article, Strings where Article.title_id = Strings.id?



Да, еще замечу, что в моем случае точно не будет проектов с кучей языков, падежами и проч. А в переводе будет нуждаться в основном интерфейс и несколько информационных статей.

Но пройдет годик и вы захотите еще 1 добавить, придеться лаьтерить табличку. А на продакшене уже базка 1гб весит, и альтер заблочит ее на пол часа, когда будет пытаться пропихнуть дополнитульную колонку. Ну не принято добавлять данные через алтеры, все делают это через класический инсерт

language_id language1ru2en

user_id language_id112132

page_id1

translate_idlanguage_idpage_idtitlecontent121hi hello world211прет првиет мир
...
Рейтинг: 0 / 0
Многоязычность на сайте. Как реализовать и нужно ли париться?
    #38138134
Фотография SmeL_md
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Shitbox2Не проще ли и быстрее сделать одну общую табличку с переводами:
Strings
id ru en de fr ... и везде ссылаться на id строк из нее:
жесть.
а чем вас отпугнул gettext. Может вы что то не до поняли.
для Вас как разработчика уже не важно сколько языков будет выпишите на одном языке.
Код: php
1.
2.
3.
4.
5.
<?php 
putenv('LANGUAGE='.$language);
putenv('LANG='.$language);
bindtextdomain($domain, "путь к корневой папке локалей");
print(_("Этот текст нужно перевести")) >

Все готово. Теперь находите редактор к примеру Poedit, указываете ваш проект он парсит его вытягивает оттуда Этот текст нужно перевести предлагает вам его перевести сохраняем и кидаем в папку к примеру locale/sw/LC_MESSAGES/ ну это конечно же если перевод был на Суахили.
...
Рейтинг: 0 / 0
Многоязычность на сайте. Как реализовать и нужно ли париться?
    #38139226
Shitbox2
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
авторА на продакшене уже базка 1гб весит, и альтер заблочит ее на пол часа, когда будет пытаться пропихнуть дополнитульную колонку. Ну не принято добавлять данные через алтеры, все делают это через класический инсертВот это аргументированно, очень полезная информация, приму к сведению!

А стоит ли вводить
language_idlanguage1ru2en
Может в качестве id языка использовать ISO-код ru, en (можно забить в enum). Коды известны, занимают два символа, языков больше 10 точно не будет, зато не нужно лишних джойнов.

авторprint(_("Этот текст нужно перевести"))
У меня такого никогда не будет, т.к. все тексты в базе. В ПХП только технические сообщения об ошибках
...
Рейтинг: 0 / 0
Многоязычность на сайте. Как реализовать и нужно ли париться?
    #38154581
Shitbox2
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
На счет хранения переводов в виде id, lang_id, text вместо id, text_ru, text_en, ...

Как в первом случае ссылаться на таблицу с переводами? Т.е., если у на с есть таблица
articles
id, text_id

Что писать в text_id? Ведь во втором случае айдишников в таблице переводов будет несколько?
...
Рейтинг: 0 / 0
Многоязычность на сайте. Как реализовать и нужно ли париться?
    #38154582
Shitbox2
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
*во первом случае айдишников в таблице переводов будет несколько
...
Рейтинг: 0 / 0
Многоязычность на сайте. Как реализовать и нужно ли париться?
    #38154726
Фотография Ренат
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
я бы сделал так:
к примеру у вас запись:
Код: php
1.
2.
3.
id,unique_id, lang_id, module,text
1,1,ru,,Привет
2,1,en,,Hi


а в шаблоне:
Код: php
1.
<?=t('Привет');?>


где делалось что то примерно следующее (вариант без кеша, тут только логика. А по идеи все надо вначале извлечь а потом уже применять, а то на 1 страницу 100 селектов будет)

Код: sql
1.
2.
select unique_id from *** where lang_id="ru" and text="Привет";
select text from *** where lang_id="en" and unique_id=<unique_id>
...
Рейтинг: 0 / 0
Многоязычность на сайте. Как реализовать и нужно ли париться?
    #38154855
Shitbox2
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ага, в некоторых движках вместо unicid md5 применяют. Что, ИМХО муторно
...
Рейтинг: 0 / 0
Многоязычность на сайте. Как реализовать и нужно ли париться?
    #38154895
Фотография Hett
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Чушь то, что вы сравниваете uniqueid с md5
...
Рейтинг: 0 / 0
Многоязычность на сайте. Как реализовать и нужно ли париться?
    #38155655
я бы сделал так:

1. заюзал бы
http://php.net/manual/en/function.serialize.php
http://www.php.net/manual/en/function.unserialize.php

2. в бд сделал бы табличку
Код: php
1.
CREATE TABLE "pages" ("name" VARCHAR(50) NOT NULL  UNIQUE , "content" TEXT NOT NULL  DEFAULT 'a:0:{}')



3. в PHP использовал бы массив (де\сериализовал бы его в таблицу БД)
Код: php
1.
2.
3.
4.
5.
6.
7.
8.
$index = array(
     'ru' => array(
          'hi' => 'Привет'
     ),
     'en' => array(
          'hi' => 'Hello'
     )
);



4. в шаблон выводил бы
Код: php
1.
<?= $index[$LANGUAGE]['hi']; ?>



ПыСы - если бы контента на одной странице было бы очень много и большое кол-во используемых языков, тогда бы заморочился на создание отдельных таблиц под разные языки...
Код: php
1.
2.
CREATE TABLE "pages_ru" ("name" VARCHAR(50) NOT NULL  UNIQUE , "content" TEXT NOT NULL  DEFAULT 'a:0:{}')
CREATE TABLE "pages_en" ("name" VARCHAR(50) NOT NULL  UNIQUE , "content" TEXT NOT NULL  DEFAULT 'a:0:{}')
...
Рейтинг: 0 / 0
Многоязычность на сайте. Как реализовать и нужно ли париться?
    #38155678
Фотография Ренат
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
как то так...,

статейка под 100кб, всего 10 языков поддерживает сайт, итого массив занимает 1мб.
1. Чтобы десериализовать 1мб строку уйдет время и ресурсы.
2. Чтобы показать юзеру страничку на русском языке, ваш скрипт будет вытаскивать все абсолютно переводы данной строки, и мало того будет тратить ресурсы (см пункт 1) на их отработку.
3. Неудобно работать с переводами как с сущностями. К примеру попросят вас в админке сделать страничку со списком тех статей у которых нет перевода одного из языков. В случае одна запись, один перевод можно реализовать всего 1 запросом, а в вашем слцчае придеться выдернуть !!все!! записи из таблички (1000 статей допустим), каждую десериализовать и потом уже смотреть. (в случае со 100кб, вы пропарсите 100мб текста, вам оно надо?
...
Рейтинг: 0 / 0
Многоязычность на сайте. Как реализовать и нужно ли париться?
    #38155688
Фотография Ренат
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
как то так...
ПыСы - если бы контента на одной странице было бы очень много и большое кол-во используемых языков, тогда бы заморочился на создание отдельных таблиц под разные языки...

То что в табличке будет сотни мегабайт данных не есть проблема. У большинства крупных сайтов существуют таблички в десятки гигабайт (все это без шардинга!!!), и все с паврильно настроеной репликации и ключей работает вполне нормально. Ну и зпросики не криво главное писать)
...
Рейтинг: 0 / 0
Многоязычность на сайте. Как реализовать и нужно ли париться?
    #38155711
авторвам оно надо?
golden hammer - в данном случае (впрочем, как и всегда) не существует по определению! ;) читаю...
авторНе будет 10 языков точно. Будет 3. Возможно, потом еще 1, 2...
авторДа, еще замечу, что в моем случае точно не будет проектов с кучей языков, падежами и проч. А в переводе будет нуждаться в основном интерфейс и несколько информационных статей .
проверено опытом - мой подход выдержит его желание на все 100%!!!

+ 13942833 читай (ПыСы) - этот подход, при необходимости, можно крутить и укладывать в разные строки, разные таблицы, и даже разные БД - это не принципиально - важно сохранить структуру выводимого на страницу (в шаблон) массива - вот и всё!!!
...
Рейтинг: 0 / 0
Многоязычность на сайте. Как реализовать и нужно ли париться?
    #38156180
Фотография Warstone
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Меня поражают люди, которые даже свои труселя в базе хранят... Что, простыми js файлами хранить - не? А при генерации просто или lang подставлять в линки или вообще на стороне клиента это делать (можно и сервера через X-Accel-Redirect)
...
Рейтинг: 0 / 0
Многоязычность на сайте. Как реализовать и нужно ли париться?
    #38156246
авторЧто, простыми js файлами хранить - не?
в чём профит?
...
Рейтинг: 0 / 0
Многоязычность на сайте. Как реализовать и нужно ли париться?
    #38156324
Фотография Ренат
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
WarstoneМеня поражают люди, которые даже свои труселя в базе хранят... Что, простыми js файлами хранить - не? А при генерации просто или lang подставлять в линки или вообще на стороне клиента это делать (можно и сервера через X-Accel-Redirect)
меня больше паражают люди которые так делают)
...
Рейтинг: 0 / 0
Многоязычность на сайте. Как реализовать и нужно ли париться?
    #38157118
Фотография Warstone
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
как то так...в чём профит?Кеш локи.
...
Рейтинг: 0 / 0
Многоязычность на сайте. Как реализовать и нужно ли париться?
    #38157492
авторКеш локи.
заинтриговал!
у меня есть страница с меню, которое я должен перевести на два языка ru\en
где я должен постучать для перевода, что бы
автор простыми js файлами хранить...
А при генерации просто ... lang подставлять в линки...

?
...
Рейтинг: 0 / 0
Многоязычность на сайте. Как реализовать и нужно ли париться?
    #38157823
Фотография Hett
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
WarstoneМеня поражают люди, которые даже свои труселя в базе хранят... Что, простыми js файлами хранить - не? А при генерации просто или lang подставлять в линки или вообще на стороне клиента это делать (можно и сервера через X-Accel-Redirect)

А зачем плодить тыщу файлов, можно просто их генерить в рантайме.
...
Рейтинг: 0 / 0
Многоязычность на сайте. Как реализовать и нужно ли париться?
    #38158249
Shitbox2
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Хоть в переводе нуждается практически только интерфейс, но он-то все-равно динамический. Может поменяться состав меню, выпадающих списков, каких-нибудь заголовков. Что, каждый раз js-файлы править?

Все хранится в базе потому что там хранится, вообще, все. Т.е. ни в HTML ни в JS никаких текстов, кроме технических нет. Шаблонизаторы по этой же причине никакие в принципе не могут быть использованы. PHP берет из БД, транзитом передает в JS, тот вставляет в HTML, всё.

Основное требование тут это удобство разработки. Чтобы из-за таблички с языками не приходилось везде вставлять муторные запросы в 4 строчки или захламлять базу левыми вещами. Ну и быстродействие на выдачу хотя бы. Кстати, зачем генерировать уникальную строку, если можно в translates хранить id, article_table, article_id. Последние даже можно слить в одно поле.

X-Accel-Redirect что за зверь и почему с ним должно быть проще?
...
Рейтинг: 0 / 0
Многоязычность на сайте. Как реализовать и нужно ли париться?
    #38158971
авторЧто, каждый раз js-файлы править?
а что в БД это само поправится? ;)
авторШаблонизаторы по этой же причине никакие в принципе не могут быть использованы.
!?
ИМХО муторно как-то организовано у тебя (AJAX - для перевода!) - то ли от непонимания, то ли от незнания... таблички какие-то and etc.
...
Рейтинг: 0 / 0
Многоязычность на сайте. Как реализовать и нужно ли париться?
    #38159004
Фотография Hett
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
автора что в БД это само поправится? ;)
Одно дело если локализацией занимается погроммист, он открыл проектик пошаманил там в файлах.
А если нужен веб-интерфейс, то вы тут же обретаете дополнительный гемморой.
...
Рейтинг: 0 / 0
Многоязычность на сайте. Как реализовать и нужно ли париться?
    #38159268
авторА если нужен веб-интерфейс, то вы тут же обретаете дополнительный гемморой.
как ни странно, но я ни за ни против - я воспринимаю и БД и ФС как некое хранилище информации - в данном случае - перевод интерфейса страниц портала - и там и там есть свои плюсы и свои минусы! ;)
+ на сколько удобно организовано получение\передача информации от хранилища к пользователю и обратно - навык программиста - и этот вопрос мне вовсе не интересен - мой выбор MVC - и на сегодня он обжалованию не подлежит! ;)
интересно другое
казалось бы логичное решение выстраивать шаблон страницы, используя переменные в качестве статичного контента, в которые можно засунуть описание-перевод в зависимости от запрашиваемого языка - не проходят! вопрос перетекает из плоскости в плоскость и упирается в надуманные проблемы!

Лично я (повторюсь!) использую БД Sqlite - где храню интерфейс страниц в виде сериализованных массивов - довольно быстро и очень удобно - на проектах категории НЕ GOOGLE!!!
...
Рейтинг: 0 / 0
Многоязычность на сайте. Как реализовать и нужно ли париться?
    #38159284
Inkelyad
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Shitbox2Все хранится в базе потому что там хранится, вообще, все. Т.е. ни в HTML ни в JS никаких текстов, кроме технических нет.
И получаем на свою голову проблемы с хранением версий/истории правок сайта. Базу в систему контроля версий уж очень неудобно уталкивать.

HettОдно дело если локализацией занимается погроммист, он открыл проектик пошаманил там в файлах. А если нужен веб-интерфейс, то вы тут же обретаете дополнительный гемморой.

Мне всегда казалось, что научить локализатора править тексты в файлах ресурсов обычным текстовым редактором гораздо проще, чем Web интерфейс для них делать. А нормальный переводчик, привыкший к текстовым редакторам дурной Web-интерфейс кучу раз проклянет.
...
Рейтинг: 0 / 0
Многоязычность на сайте. Как реализовать и нужно ли париться?
    #38159301
Фотография Ренат
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
InkelyadShitbox2Все хранится в базе потому что там хранится, вообще, все. Т.е. ни в HTML ни в JS никаких текстов, кроме технических нет.
И получаем на свою голову проблемы с хранением версий/истории правок сайта. Базу в систему контроля версий уж очень неудобно уталкивать.

HettОдно дело если локализацией занимается погроммист, он открыл проектик пошаманил там в файлах. А если нужен веб-интерфейс, то вы тут же обретаете дополнительный гемморой.

Мне всегда казалось, что научить локализатора править тексты в файлах ресурсов обычным текстовым редактором гораздо проще, чем Web интерфейс для них делать. А нормальный переводчик, привыкший к текстовым редакторам дурной Web-интерфейс кучу раз проклянет.
не разу не видел чтобы локализатор имел доступ к ftp или к репозиторию проекта, да и еще умел работать с онными.
...
Рейтинг: 0 / 0
Многоязычность на сайте. Как реализовать и нужно ли париться?
    #38159315
Inkelyad
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Ренатне разу не видел чтобы локализатор имел доступ к ftp или к репозиторию проекта, да и еще умел работать с онными.
А ему не надо уметь. У него есть доступ к текстовому документу ресурсов в google docs или чем-то похожем.

Потом мы его сами на место кладем/тестируем/исправляем ошибки/коммитим.
Говорим, что нас не устроило (прямо в goggle docs комментариями) и цикл повторяется.
...
Рейтинг: 0 / 0
Многоязычность на сайте. Как реализовать и нужно ли париться?
    #38159327
Фотография Hett
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
А если надо перевести на 40 языков и приложение растет и добавлять перевод необходимо постоянно, то с каждым переводчиком так мучиться каждый раз?
...
Рейтинг: 0 / 0
Многоязычность на сайте. Как реализовать и нужно ли париться?
    #38159329
Фотография Hett
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Мне так проще сделать одну страничку за 3 часа.
...
Рейтинг: 0 / 0
Многоязычность на сайте. Как реализовать и нужно ли париться?
    #38159332
Фотография Hett
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
А за день можно и обвертку написать, где переводчик будет кликать на текст и тут же править его и сохранять.
...
Рейтинг: 0 / 0
Многоязычность на сайте. Как реализовать и нужно ли париться?
    #38159416
Inkelyad
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
HettА за день можно и обвертку написать, где переводчик будет кликать на текст и тут же править его и сохранять.
Без версионности работать с любым текстовым материалом плохо. Очень. А в GoogleDocs она есть. Можно, конечно, и в свою обертку встроить, но стоит ли?
...
Рейтинг: 0 / 0
Многоязычность на сайте. Как реализовать и нужно ли париться?
    #38159538
авторПотом мы его сами на место кладем/тестируем/исправляем ошибки/коммитим.
и какая разница кладёте вы его в БД или файл ресурсов или ещё куда? ;)
всяко, он попадает сперва к вам а уж потом в проект!
авторИ получаем на свою голову проблемы с хранением версий/истории правок сайта.
делайте бэкап, что ли... ;)

ИМХО - не важно где и как хранить важно, как отдать! ;)
...
Рейтинг: 0 / 0
Многоязычность на сайте. Как реализовать и нужно ли париться?
    #38159652
Inkelyad
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
как то так...и какая разница кладёте вы его в БД или файл ресурсов или ещё куда? ;)
всяко, он попадает сперва к вам а уж потом в проект!

Если в проекте лежит текстовый исходник того, что потом в базе данных будет, то
все хорошо. Только непонятно, для чего база в этом случае нужна.
С тем же успехом можно вместо скрипта заливки в базу написать скрипт генерации статических
шаблонов c подставленным языком.

А если мы перевод сразу в базу данных заливаем, не включая текстовый исходник в проект - то
смотри ниже.
делайте бэкап, что ли... ;)


То-то программисты системы контроля версий придумали.

"Самай последний перевод этой странцы в этом файле лежит, другой - в другом. Как бы нам
теперь как бы нам все эти изменения в один файл слить? А вот тут мы вчера решили измениния отменить, у кого версия за н-ное число сохранилась"

Без системы контроля версий с текстовой информацией работать нельзя. Бардак выходит.
...
Рейтинг: 0 / 0
Многоязычность на сайте. Как реализовать и нужно ли париться?
    #38159742
авторТолько непонятно, для чего база в этом случае нужна.
м.б. как минимум, целостность информации + тот же бэкап?
авторБез системы контроля версий с текстовой информацией работать нельзя. Бардак выходит.
да ладно - делай инсерт в БД с временной меткой вместо апдейта - не мне тебя учить - т.ч. считай, разговор ни о чём!

Твоя позиция ясна - сохранять всё по файликам в фс и дёргать их!
Явных преимуществ твоего подхода против хранения информации в БД (для конкретного случая) я не увидел!

Да и не основная это проблема - место хранения!
...
Рейтинг: 0 / 0
Многоязычность на сайте. Как реализовать и нужно ли париться?
    #38159806
Inkelyad
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
как-то так...м.б. как минимум, целостность информации + тот же бэкап?

Про целостность в смысле "чтобы не хранились переводы для объектов, на которые ссылок нет" - можно согласится.
Про бэкап - не понял. Делать резервное копирование статических файлов гораздо проще, чем базы.

да ладно - делай инсерт в БД с временной меткой вместо апдейта - не мне тебя учить - т.ч. считай, разговор ни о чём!

История изменений переводов на этапе функционирования сайта вещь совершенно не нужная, она нужна большей частью тому, кто сайт делает. Поэтому где-то в движке сайта ей заниматься вредно. Вот если именно CMS пишется - тогда нужно об этом думать.

Твоя позиция ясна - сохранять всё по файликам в фс и дёргать их!

Совершенно верно, подгружается файл ресурсов и используется. Автор темы хочет генерацией страницы на JS заниматься,
те можно брать шаблонный движок на JS и хранить на сервере шаблоны для его работы. Вытянуть же браузером статический файл /templates/i18n/ru.json проще и для головы и для сервера.

Явных преимуществ твоего подхода против хранения информации в БД (для конкретного случая) я не увидел!

Преимущества будут в момент, когда нам потребуется слить изменения от двух разработчиков. Один поправил один раздел сайта, другой человек - другой раздел. Но при этом одну и ту же фразу перевели по разному. Теперь это нужно все слить в одно целое.
При использовании текстовых ресурсов у нас система контроля версий заметит, что одну и ту же строку в файле ресурса меняли оба. А с базой данных нужно будет самому отслеживать.
Да и не основная это проблема - место хранения!

Вопрос был про то, как делать. Я бы дела так:
Для динамического контента (те такой, который пользователи сайта сами без участия программистов добавляют) делаем по таблице на язык и жоиним. Если нравится из отдельных столбцов язык вытаскивать - делам подходящий VIEW.
Для всего остального - ресурсы в виде статических текстовых файлов для понравившегося варианта gettext.
...
Рейтинг: 0 / 0
Многоязычность на сайте. Как реализовать и нужно ли париться?
    #38160257
авторДля динамического контента...
угу... перевод на различные языки и есть тот самый "динамичный контент" (С)

+по прежнему интересно -
Код: php
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
<!DOCTYPE html>
<html>
    <head>	
        <title></title> 
    <body>	
      		   <p><span>немного текста нуждающегося в переводе</span></p>
                   <input type="button" value="ещё немного текста нуждающегося в переводе" />
                   <p>и ещё немного текста нуждающегося в переводе</p>
    </body>
</html>


опустим подгрузку json-а - бо это жесть!
интересуют твои действия, в соответствии с твоей парадигмой?
...
Рейтинг: 0 / 0
Многоязычность на сайте. Как реализовать и нужно ли париться?
    #38160310
Inkelyad
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
опустим подгрузку json-а - бо это жесть!

Если шаблонизатор у нас работает внутри браузера, а не на серверной стороне - то вполне неплохо. Другое дело, что сама идея шаблонного движка внутри браузера у меня некоторое сомнение вызывает.
интересуют твои действия, в соответствии с твоей парадигмой?
[/quot]
Загрузку ресурсов и шаблонов пропустим. А в самом шаблоне (условный шаблонизатор) странички будет
Код: php
1.
2.
3.
4.
5.
template('pagename') {
      		   <p><span>_('немного текста нуждающегося в переводе')</span></p>
                   <input type="button" value="_('ещё немного текста нуждающегося в переводе')" />
                   <p>_('и ещё немного текста нуждающегося в переводе')</p>
}



Шаблонизатор возмет шаблон, возмет ресурсы локализации и через gettext подставит во все _('...') перевод.
Если верстка для разных языков отличается, то тогда придется для разных языков руками разные шаблоны страницы делать.

Если хочется сделать оптимизацию загрузки, жертвуя дисковым пространством, то придется делать скрипт, который на этапе сборки сайта из шаблонов c _('') и ресурсов делает странички с уже подставленным языком. Но это уже если очень надо.
...
Рейтинг: 0 / 0
Многоязычность на сайте. Как реализовать и нужно ли париться?
    #38160506
автор А в самом шаблоне (условный шаблонизатор) странички будет
неужели ты так и непонял, что механика будет одна и таже и там и там?
Код: php
1.
2.
3.
4.
5.
template('pagename') {
      		   <p><span>_('немного текста нуждающегося в переводе')</span></p>
                   <input type="button" value="_('ещё немного текста нуждающегося в переводе')" />
                   <p>_('и ещё немного текста нуждающегося в переводе')</p>
}


Код: php
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
<!DOCTYPE html>
<html>
    <head>	
        <title></title> 
    <body>	
      		   <p><span><?= $pagename['p1']['span']; ?></span></p>
                   <input type="button" value="<?= $pagename['button']; ?>" />
                   <p><?= $pagename['p2']; ?></p>
    </body>
</html>


можно долго и упорно рассуждать о преимуществах и недостатках одного против другого...

у тебя задействован gettext - нужно смотреть\изучать проверять
тебе нужны какие то tempates textdomain bindtextdomain
изменить тип хранилища ты уже не в состоянии
ты вообще жёстко привязан к предоставленному тебе механизму!!!

у меня задействован самописный механизм подстановки значений - нужно парится придумывать
контроль версий тоже нужно придумать самому
зато я волен выбирать хранилище по своему усмотрению - сегодня Sqlite, завтра ФС, послезавтра Mongo
и я не привязан ни к чему (кроме PHP) - в принципе, шаблон я могу отдать в другой проект - любой разберётся как наполнить его контентом!
и т.д. и т.п.

Однако, суть - Механика - ОДНА И ТА ЖЕ!!! и там и там
динамичный контент, выводимый из хранилища, в нужных местах по ключу!!!
...
Рейтинг: 0 / 0
Многоязычность на сайте. Как реализовать и нужно ли париться?
    #38160516
Фотография Ренат
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
как то так...
Однако, суть - Механика - ОДНА И ТА ЖЕ!!! и там и там
динамичный контент, выводимый из хранилища, в нужных местах по ключу!!!
Пришли таки к выводу, закроем этот балаган?
Два разных метода, что кому что нравитьс ятот и юзает. У каждого метода есть свои плюсы и минусы, у каждого свои трудности.
Всеравно каждый останеться при своем мнении и продолжит юзать свой метод (я за всю жизнь еще ни разу почемуто не работал с сайтами с мультиязычностью).
...
Рейтинг: 0 / 0
Многоязычность на сайте. Как реализовать и нужно ли париться?
    #38160680
Inkelyad
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
РенатПришли таки к выводу, закроем этот балаган?

Можно закрыть. Просто я как раз занимаюсь поддержкой сайта в архитектуре, которую Shitbox2 хочет использовать, сделан.
Те
1) Статические по смыслу тексты хранятся в базе.
2) Хранятся в колонках с именами *_ru, *_en
3) Страница большей частью генерируется в браузере клинета
4) Шаблонизатор при этом не используется.

Удовольствие, прямо скажем, сильно ниже среднего.

Может, когда-нибудь кто-нибудь прочитает и так делать не будет.
...
Рейтинг: 0 / 0
Многоязычность на сайте. Как реализовать и нужно ли париться?
    #38160729
Фотография SmeL_md
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
поддержу Inkelyad,
1) статика не для базы если ее много, это если нацелены на производительность
2) руки по отрывал бы за поля с именами *_ru, *_en
...
Рейтинг: 0 / 0
51 сообщений из 51, показаны все 3 страниц
Форумы / PHP, Perl, Python [игнор отключен] [закрыт для гостей] / Многоязычность на сайте. Как реализовать и нужно ли париться?
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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