Мультиязычность и контекст
Немного не ясно по поводу мульти-язычности:
1. Допустим есть сайт с 3-6 контекстами
2. Необходим перевод элементов интерфейса и игровых предметов.
3. Предметы лежат в таблице бд, со следующими столбцами:
4. Как я понял, для каждого контекста нужно дублировать все задействованные ресурсы. Это так?
5. Означает ли это, что использовать разные
6. Например, мы получаем
6. У меня есть некоторые сомнения на счет корректной работы данного решения, из-за кеширования.
1. Допустим есть сайт с 3-6 контекстами
2. Необходим перевод элементов интерфейса и игровых предметов.
3. Предметы лежат в таблице бд, со следующими столбцами:
id,name,ru,en,de,...,pt-BR
4. Как я понял, для каждого контекста нужно дублировать все задействованные ресурсы. Это так?
5. Означает ли это, что использовать разные
[[*context_key]]
в PHP скриптах на одних и тех же ресурсах невозможно?6. Например, мы получаем
$item['en']
(с названием предмета на англ. языке) и передаем его в чанк.6. У меня есть некоторые сомнения на счет корректной работы данного решения, из-за кеширования.
Комментарии: 20
4. Как я понял, для каждого контекста нужно дублировать все задействованные ресурсы. Это так?Так.
Означает ли это, что использовать разные [[*context_key]] в PHP скриптах на одних и тех же ресурсах невозможно?Чтобы использовать один чанк для всех языков нужно в селекте указать соответствующее языку поле
Например, мы получаеми передаем его в чанк.$item['en']
$q = $modx->newQuery('Items');
//Указываем только одно поле, соответствующее языку
$q->select('id,name,'.$modx->getOption('cultureKey').' as item');
if ($q->prepare() && $q->stmt->execute()) {
$output = '';
while($row = $q->stmt->fetch(PDO::FETCH_ASSOC)) {
// Тут оборачиваешь в чанк. В чанке должен быть плейсхолдер [[+item]],
// в которое передается название предмета
$output .= $modx->getChunk('твой_чанк',$row)
}
}
И твой чанк будет работать во всех контекстах.Главное, в настройках контекста указать ключ cultureKey с соответствующим значением.
Однако, спасибо. Я долго ломал голову, и не мог заставить гугл объяснить мне как вернуть значение контекста. + Вы открыли для меня Америку с кашерными modx запросами.
1. Если я правильно понимаю:
2. Следующий вопрос касается моих сомнений по поводу кеширования.
Жизнеспособна ли смена контекста без изменения пути к странице?
Как я понимаю, правильная мультиязычность такова:
1. Если я правильно понимаю:
$modx->newQuery('Items');
— обращение к таблице `Items` в базе MODx. Верно?2. Следующий вопрос касается моих сомнений по поводу кеширования.
Жизнеспособна ли смена контекста без изменения пути к странице?
Как я понимаю, правильная мультиязычность такова:
RU - http://ru.mysite.trade/items.html
EN - http://en.mysite.trade/items.html
Жизнеспособен ли следующий вариант, если выбранный контекст будет храниться у пользователя в профиле?RU - http://mysite.trade/items.html
EN - http://mysite.trade/items.html
3. То есть в любом случае необходимо дублировать ресурсы, верно? Если я правильно понимаю:Это обращение к классу объекта, который хранится в БД. Items — это я для примера написал. Т.е. мало создать таблицу, нужно создать еще и объекты ModX.
— обращение к таблице `Items` в базе MODx. Верно?$modx->newQuery('Items');
Жизнеспособна ли смена контекста без изменения пути к странице?Это как, телепатически? Контекст меняется в зависимости от url.
//Контексты могут быть такие
http://ru.mysite.trade/
//или такие
http://mysite.trade/ru/
//Это как пожелаешь.
Жизнеспособен ли следующий вариант, если выбранный контекст будет храниться у пользователя в профиле?Для чего? Чтобы русскоговорящий пользователь захотел получить описание предметов на другом языке? Обычно на сайте можно выбирать языки в меню.
3. То есть в любом случае необходимо дублировать ресурсы, верно?Верно. Для каждого языка своя страничка.
Сменить контекст можно и не меняя урл, не обманывайте. Разные контексты могут быть и с одинаковым адресом.
Дорогой друг! Твой комментарий перевернул всю мою жизнь, а главное очень помог автору топика. Не будешь ли так великодушен и не поделишься своей мудростью с нами о том, как сделать мультиязычный сайт с одинаковыми урлами? А то вот даже docs.modx.pro сделан через папку docs.modx.pro/en/. Только просьба обойтись без велосипедов с квадратными колесами.
На ты не переходили. Переключать контекст и выбирать язык можно, например, по куке и не меняя урл.
Узнаю современный принцип либерализма — мне можно все, остальным ничего.
Т.е. обратится на ты в сообществе программистов-единомышленников — это великое оскорбление.
А заявить
По теме, т.е. Вы (ВЫ) советуете автору топика переключать контекст по куке? Ок. Подозреваю, что автор хочет, чтобы сайт индексировался в разных контекстах. Дальше помогать будете или пусть сам мучается?
П.С. Кстати, предложите Ваш (ВАШ) совет заодно, например, и HP и Samsung, а то они тоже все в адрес добавляют /ru/. Темные люди у них работают.
Т.е. обратится на ты в сообществе программистов-единомышленников — это великое оскорбление.
А заявить
Сменить контекст можно и не меняя урл, не обманывайте.не вникая в смысл разговора — это видимо признак воспитания.
По теме, т.е. Вы (ВЫ) советуете автору топика переключать контекст по куке? Ок. Подозреваю, что автор хочет, чтобы сайт индексировался в разных контекстах. Дальше помогать будете или пусть сам мучается?
П.С. Кстати, предложите Ваш (ВАШ) совет заодно, например, и HP и Samsung, а то они тоже все в адрес добавляют /ru/. Темные люди у них работают.
Автор не упоминал про seo, а спросил про переключение языка без изменения адреса. Мало ли, для чего ему это надо. А вы ему категорически заявляете:
Это как, телепатически? Контекст меняется в зависимости от url.т.е. контекст может переключаться либо телепатически, либо зменением урл? Окай. Ясно.
Да мне все ясно уже с первого комментария.
А вот тут автор удивляет своим редким для сайтостроителей желанием индексировать все языковые версии. Как непредсказуемо.
А вы ему категорически заявляете:А заявляю я потому, что понимаю как это будет работать в комплексе. Как сайт будет индексироваться? Как роботы будут менять контексты, телепатически?
Автор не упоминал про seo,… Мало ли, для чего ему это надо.Читать надо всё и очень внимательно. Тогда и понимание будет. Подозреваю, что автор и так знал, что контексты можно переключать хоть в зависимости от фазы луны, хоть от времени дня. Он просит решения, а не теории. Я ему решение предложил. А вот для чего нужно Ваше решение?
А вот тут автор удивляет своим редким для сайтостроителей желанием индексировать все языковые версии. Как непредсказуемо.
Я указал на конкретную неточность в вашем ответе автору, а вы развели непонятно что. Как вариант: заказчику нравится видеть одинаковый урл во всех языках.
Для чего? Чтобы русскоговорящий пользователь захотел получить описание предметов на другом языке? Обычно на сайте можно выбирать языки в меню.Пытаюсь избавиться от рутины ручного дублирования ресурсов. Но похоже, что при любом добавлении новых, придется дублировать их не один раз.
Дублировать нужно ровно столько, сколько иностранных языков. Ведь каждая страничка — это уникальный контент.
А дублировать не так уж сложно — копируешь ресурс и переносишь копию в нужный контекст.
А дублировать не так уж сложно — копируешь ресурс и переносишь копию в нужный контекст.
А дублировать не так уж сложно — копируешь ресурс и переносишь копию в нужный контекст.А если товаров 10000+ и настает день когда нужно добавить еще один, в итоге нужно копировать все товары а потом их еще и переводить что превратится в жуткую рутину.
ИМХО лучше делать вариант одной базы товаров под все языки а описание на разных, и в таком варианте контент менеджер будет ходить по всем товарам и добавлять переводы.
Вот тут есть решение сегодня буду реализовывать этот вариант.
Товарищ Shin, в соседней теме подсказал идеальное для меня решение.
Дмитрий, нашли для себя вариант?
1. Да я прикинул, там в принципе не так много страниц переводить, Сергей подсказал хорошее решение. Т.к. предметы уже в базе. У меня нет необходимости создавать 100500 ресурсов для каждого предмета, а если и придется, то думаю реально обойтись всего 1 сниппетом и чанком, что в итоге станет всего 1 ресурсом.
2. К тому же сайт индексирует поисковый бот, которому плевать на контекст, он будет видеть страницу mysite.trade/items.html в контексте по-умолчанию, что не есть хорошо для SEO.
Зато, если сделать все традиционно:
RU — ru.mysite.trade/items.html
EN — en.mysite.trade/items.html
То проблем с индексацией точно не будет.
2. К тому же сайт индексирует поисковый бот, которому плевать на контекст, он будет видеть страницу mysite.trade/items.html в контексте по-умолчанию, что не есть хорошо для SEO.
Зато, если сделать все традиционно:
RU — ru.mysite.trade/items.html
EN — en.mysite.trade/items.html
То проблем с индексацией точно не будет.
1) site.ru основной site.ru/en (если сначала ru или en то бот считает это 3 уровнем)
2) Имена категории строго по английский Новости/news
3) Тип урл site.ru/news/1/ (Оптимальный вариант)
Поставил сайт с такими параметрами (500 страниц) Google и Yandex индексировал все за 5 дней. (ИМХО)
2) Имена категории строго по английский Новости/news
3) Тип урл site.ru/news/1/ (Оптимальный вариант)
Поставил сайт с такими параметрами (500 страниц) Google и Yandex индексировал все за 5 дней. (ИМХО)
Вот и еще один совет в копилку знаний, спасибо!
Как быть с элементами интерфейса?
1. Использовать «Управление словарями» — нормально?
2. Если да, есть ли какой-либо способ пакетного добавления значений?
1. Использовать «Управление словарями» — нормально?
2. Если да, есть ли какой-либо способ пакетного добавления значений?
Если я правильно понимаю, то нужно ознакомиться со статьями по созданию приложений, там должна быть информация по мультиязычности в файлах.
Авторизуйтесь или зарегистрируйтесь, чтобы оставлять комментарии.