Мультиязычность и контекст

Немного не ясно по поводу мульти-язычности:
1. Допустим есть сайт с 3-6 контекстами
2. Необходим перевод элементов интерфейса и игровых предметов.
3. Предметы лежат в таблице бд, со следующими столбцами:
id,name,ru,en,de,...,pt-BR

4. Как я понял, для каждого контекста нужно дублировать все задействованные ресурсы. Это так?
5. Означает ли это, что использовать разные
[[*context_key]]
в PHP скриптах на одних и тех же ресурсах невозможно?
6. Например, мы получаем
$item['en']
(с названием предмета на англ. языке) и передаем его в чанк.
6. У меня есть некоторые сомнения на счет корректной работы данного решения, из-за кеширования.
Дмитрий
02 мая 2015, 20:43
modx.pro
2 070
0

Комментарии: 20

Сергей Шлоков
03 мая 2015, 08:13
+1
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 с соответствующим значением.
    Дмитрий
    03 мая 2015, 14:25
    0
    Однако, спасибо. Я долго ломал голову, и не мог заставить гугл объяснить мне как вернуть значение контекста. + Вы открыли для меня Америку с кашерными modx запросами.

    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. То есть в любом случае необходимо дублировать ресурсы, верно?
      Сергей Шлоков
      03 мая 2015, 22:18
      0
      Если я правильно понимаю:
      $modx->newQuery('Items');
      — обращение к таблице `Items` в базе MODx. Верно?
      Это обращение к классу объекта, который хранится в БД. Items — это я для примера написал. Т.е. мало создать таблицу, нужно создать еще и объекты ModX.
      Жизнеспособна ли смена контекста без изменения пути к странице?
      Это как, телепатически? Контекст меняется в зависимости от url.
      //Контексты могут быть такие
      http://ru.mysite.trade/
      //или такие
      http://mysite.trade/ru/
      //Это как пожелаешь.

      Жизнеспособен ли следующий вариант, если выбранный контекст будет храниться у пользователя в профиле?
      Для чего? Чтобы русскоговорящий пользователь захотел получить описание предметов на другом языке? Обычно на сайте можно выбирать языки в меню.
      3. То есть в любом случае необходимо дублировать ресурсы, верно?
      Верно. Для каждого языка своя страничка.
        Дмитрий Иванов
        03 мая 2015, 23:14
        0
        Сменить контекст можно и не меняя урл, не обманывайте. Разные контексты могут быть и с одинаковым адресом.
          Сергей Шлоков
          04 мая 2015, 08:04
          +1
          Дорогой друг! Твой комментарий перевернул всю мою жизнь, а главное очень помог автору топика. Не будешь ли так великодушен и не поделишься своей мудростью с нами о том, как сделать мультиязычный сайт с одинаковыми урлами? А то вот даже docs.modx.pro сделан через папку docs.modx.pro/en/. Только просьба обойтись без велосипедов с квадратными колесами.
            Дмитрий Иванов
            04 мая 2015, 12:14
            0
            На ты не переходили. Переключать контекст и выбирать язык можно, например, по куке и не меняя урл.
              Сергей Шлоков
              04 мая 2015, 12:55
              0
              Узнаю современный принцип либерализма — мне можно все, остальным ничего.
              Т.е. обратится на ты в сообществе программистов-единомышленников — это великое оскорбление.
              А заявить
              Сменить контекст можно и не меняя урл, не обманывайте.
              не вникая в смысл разговора — это видимо признак воспитания.
              По теме, т.е. Вы (ВЫ) советуете автору топика переключать контекст по куке? Ок. Подозреваю, что автор хочет, чтобы сайт индексировался в разных контекстах. Дальше помогать будете или пусть сам мучается?
              П.С. Кстати, предложите Ваш (ВАШ) совет заодно, например, и HP и Samsung, а то они тоже все в адрес добавляют /ru/. Темные люди у них работают.
                Дмитрий Иванов
                04 мая 2015, 13:06
                0
                Автор не упоминал про seo, а спросил про переключение языка без изменения адреса. Мало ли, для чего ему это надо. А вы ему категорически заявляете:
                Это как, телепатически? Контекст меняется в зависимости от url.
                т.е. контекст может переключаться либо телепатически, либо зменением урл? Окай. Ясно.
                  Сергей Шлоков
                  04 мая 2015, 14:05
                  +1
                  Да мне все ясно уже с первого комментария.
                  А вы ему категорически заявляете:
                  А заявляю я потому, что понимаю как это будет работать в комплексе. Как сайт будет индексироваться? Как роботы будут менять контексты, телепатически?
                  Автор не упоминал про seo,… Мало ли, для чего ему это надо.
                  Читать надо всё и очень внимательно. Тогда и понимание будет. Подозреваю, что автор и так знал, что контексты можно переключать хоть в зависимости от фазы луны, хоть от времени дня. Он просит решения, а не теории. Я ему решение предложил. А вот для чего нужно Ваше решение?
                  А вот тут автор удивляет своим редким для сайтостроителей желанием индексировать все языковые версии. Как непредсказуемо.
                    Дмитрий Иванов
                    04 мая 2015, 14:16
                    -1
                    Я указал на конкретную неточность в вашем ответе автору, а вы развели непонятно что. Как вариант: заказчику нравится видеть одинаковый урл во всех языках.
          Дмитрий
          04 мая 2015, 02:50
          0
          Для чего? Чтобы русскоговорящий пользователь захотел получить описание предметов на другом языке? Обычно на сайте можно выбирать языки в меню.
          Пытаюсь избавиться от рутины ручного дублирования ресурсов. Но похоже, что при любом добавлении новых, придется дублировать их не один раз.
            Сергей Шлоков
            04 мая 2015, 08:16
            +1
            Дублировать нужно ровно столько, сколько иностранных языков. Ведь каждая страничка — это уникальный контент.
            А дублировать не так уж сложно — копируешь ресурс и переносишь копию в нужный контекст.
              Alex Zhuravlev
              04 мая 2015, 10:33
              0
              А дублировать не так уж сложно — копируешь ресурс и переносишь копию в нужный контекст.
              А если товаров 10000+ и настает день когда нужно добавить еще один, в итоге нужно копировать все товары а потом их еще и переводить что превратится в жуткую рутину.
              ИМХО лучше делать вариант одной базы товаров под все языки а описание на разных, и в таком варианте контент менеджер будет ходить по всем товарам и добавлять переводы.
              Вот тут есть решение сегодня буду реализовывать этот вариант.
                Дмитрий
                05 мая 2015, 04:48
                0
                Товарищ Shin, в соседней теме подсказал идеальное для меня решение.
                Alex Zhuravlev
                04 мая 2015, 10:35
                0
                Дмитрий, нашли для себя вариант?
                  Дмитрий
                  04 мая 2015, 12:52
                  0
                  1. Да я прикинул, там в принципе не так много страниц переводить, Сергей подсказал хорошее решение. Т.к. предметы уже в базе. У меня нет необходимости создавать 100500 ресурсов для каждого предмета, а если и придется, то думаю реально обойтись всего 1 сниппетом и чанком, что в итоге станет всего 1 ресурсом.

                  2. К тому же сайт индексирует поисковый бот, которому плевать на контекст, он будет видеть страницу mysite.trade/items.html в контексте по-умолчанию, что не есть хорошо для SEO.
                  Зато, если сделать все традиционно:
                  RU — ru.mysite.trade/items.html
                  EN — en.mysite.trade/items.html
                  То проблем с индексацией точно не будет.
                    TITAN-UZ
                    04 мая 2015, 20:32
                    +1
                    1) site.ru основной site.ru/en (если сначала ru или en то бот считает это 3 уровнем)
                    2) Имена категории строго по английский Новости/news
                    3) Тип урл site.ru/news/1/ (Оптимальный вариант)

                    Поставил сайт с такими параметрами (500 страниц) Google и Yandex индексировал все за 5 дней. (ИМХО)
                      Дмитрий
                      04 мая 2015, 20:49
                      0
                      Вот и еще один совет в копилку знаний, спасибо!
          Дмитрий
          04 мая 2015, 18:41
          0
          Как быть с элементами интерфейса?
          1. Использовать «Управление словарями» — нормально?
          2. Если да, есть ли какой-либо способ пакетного добавления значений?
            Дмитрий
            07 мая 2015, 19:27
            0
            Если я правильно понимаю, то нужно ознакомиться со статьями по созданию приложений, там должна быть информация по мультиязычности в файлах.
            Авторизуйтесь или зарегистрируйтесь, чтобы оставлять комментарии.
            20