2 языка на сайте

batmanfast

Новичок
Здравствуйте уважаемые форумчане. Обращаюсь к вам за помощью в силу того что решил создать сайт и столкнулся с проблемой. Не понимаю как сделать. Мои мысли: сделать 2 папки одна en другая ru и при выборе иконки на сайте пользователю будут подгружаться определенные файлы из соответствующих файлов сайта. Или как лучше сделать посоветуйте
 

AlexNemanov

Новичок
Есть такой варинат.

Все строковые ресурсы отдаются через переводчика (класс создается), и при выборе локали пользователем, переводчик отдает ресурсы одного из языков. Тут: ссылка описано, как это реализуется в Симфони, можно подсмотреть идею.
 

batmanfast

Новичок
прочитал статью. Много непонятного ((( есть ли где инфа попроще человечеким языком для нубов
 

Тугай

Новичок
Старый способ без фреймвороков, каждой фразе создается задается идентификатор и взависиомсти от языка к нему привязывается значение.
Например /lang/ru/general.php :
define('BOX_TITLE_STATISTICS','Статистика:');
define('BOX_ENTRY_CUSTOMERS','Клиенты');
define('BOX_ENTRY_PRODUCTS','Товары');
define('BOX_ENTRY_REVIEWS','Отзывы');
define('TEXT_VALIDATING','Не проверено');
...
Ну и соответственно /lang/en/general.php :
define('BOX_TITLE_STATISTICS','Statisitics:');
...

Привязку можно сделать разными способами. Если держать это все не в define, а в базе, то двух папок не будет.
С definе по языку инклюдим нужную папку и используем BOX_ENTRY_REVIEWS на месте где должны быть Отзывы.
Если база то вызываем что-то вроде translate('BOX_ENTRY_REVIEWS', 'ru');

В фреймворках таже идея, но вместо define или функции используются заумные механизмы.
Например создается interface Translator c методом translate и два класа с релизующих этот интерфес TranslatorRu, TranslatorEn.
Потом используя паттрен Strategy или более общий случай Depenci Injection и прееводчик внедряется в нужный View. Ну и view при выводе пользуется переводчиком.
 

WMix

герр M:)ller
Партнер клуба
batmanfast
хочешь сделать не правильно делай как Тугай сказал...
 

nds88

Новичок
Для нубов, вроде если не ошибаюсь google translate прикрутить можно...
 

WMix

герр M:)ller
Партнер клуба
nds88
я есть хотеть делать? моя твоя понимать?
 

nds88

Новичок
nds88
мазохистов ищешь?
Чувствую что в эту фразу заложен какой то глубокий смысл, но суть не уловил.
Смотря что считать мазохизмом. Если мучиться не спать 3 дня и 3 ночи и всё таки найти ответ на свой вопрос, считаю оно того стоит
 

Тугай

Новичок
batmanfast
хочешь сделать не правильно делай как Тугай сказал...
А в чем собственно не правильно и как правильно?
Вариантов вроде не особо много. Нужно иметь переводы для фраз, где-то их хранить и к ним обращаться.
Обращаться можно двумя способами или через идентификатор или ключом может быть прям текст на основном языке.
Массивы - это второй способ, когда ключ сам текст.
gettext - это больше для консоли линукса, mysql всегда под рукой.

В windows вся локализция на числовых идентификаторах в ресурсах, которые при разработке задаются константами.
Я что-то в потерях :)
 

WMix

герр M:)ller
Партнер клуба
Тугай
ну точно не через константы, очень логичный способ но самый неправильный... хотяб потому что невозможно на страничке показать сразу 2 языка
nds88
я просто пошутил... но энглиш нужно читать в оригинале, иначе не будешь спать по 3 ночи всю жизнь
 

Тугай

Новичок
WMix
Сегодня, когда есть AJAX всегда можно выкрутится и вывести, что угодно. :)

Если нам нужно добавить к сайту другой язык (локализацию), то превода требуют две категории
1. "инетрефейс": наши кнопки, заголовки, меню, бредкрумб, и т.д
2. "конетент" - контент нашего сайта.

В админке например, удобней интерфейс на твоем родном языке, а контент уже делаешь тот что нужно.
Ну и в фронтэнде, сайт может быть на одном языке и выводить контент на другом.
Т.е. язык контента и интерфеqса не обязаны совпадать.

Отсюда и реализация, напримере vamshop, что я приводил это
1. Интерфейсная чаcть наших "view" это констстанты (define в ооп php можно применять const, можно массивы в стиле gettext или класс Translator- который по сути стратегия того как устроен первод(массивы, csv, mysql, gettext, ...).
2. А локализация контента который находится в бд, сделана так
products(product_id, [общие поля не требующие перевода])
products_description(product_id, lang_id, [общие поля требующие перевода]);
Если зафиксировать язык, то можно считать что products и products_description связаны 1:1.
 

WMix

герр M:)ller
Партнер клуба
нужно перевести сайт на венгерский.
если отдать венгру этот файл
PHP:
define('BOX_TITLE_STATISTICS','Статистика:');
то после обработки он наделает ошибок, придется доделывать, и это уже неправильно (дорого)
дешевле показать в 2 столбика в админке а далее генерить файл.. AJAX согласен решение..

но вот вторая проблема, мы незнаем всех констант, как генерить то?
 
Сверху