В этой статье поговорим про настройку мультиязычности для магазина на VirtueMart.
Как известно, Ален Делон говорит по-французски. Добавим этот язык к уже установленным русскому и английскому.
Раздел Языковые константы может быть полезен владельцам зарубежных шаблонов при трудностях с локализацией.
Но начать, конечно, нужно с настройки мультиязычности самой Joomla.
Добавление нового языка
Первый этап - установка файлов локализации нового языка. В Расширения > Менеджер языков нажимаем кнопку Установить язык.
Находим нужный язык и устанавливаем его.
После этого необходимго добавить новый язык в список языков контента в Расширения > Менеджер языков > Языки контента.
Во вкладке Название сайта можно задать имя сайта для этого языка. Может быть полезно, если в Система > Общие настройки > Сайт активна опция Включать название сайта в заголовок страницы.
Новый язык добавлен.
Меню
Для каждого языка нужно создать свое меню в Меню > Менеджер меню. Внутри каждого меню будут находиться пункты только конкретного языка. Настроить язык для пункта меню можно с помощью опции Язык.
Результат настройки меню.
В выпадающем списке будут показаны иконки языка для каждого меню.
Модуль переключения языков
Для смены языка на сайте можно использовать стандартный модуль Переключение языков.
Для правильной работы модуля в Менеджере плагинов необходимо активировать плагин Система - Фильтр языка.
Можно оставить все настройки по умолчанию.
При желании можно поэкспериментировать с настройками плагина и модуля, каждый пункт имеет подробное пояснение.
В результате на сайте появятся кнопки для выбора языка.
Чтобы при смене языка автоматически менялась валюта сайта можно установить плагин Language / Currency Plugin.
В настройках плагина для каждого языка нужно указать используемую валюту.
Для правильной работы после установки в файле /plugins/system/vmcurrencies/vmcurrencies.php нужно заменить
1 |
public function onAfterInitialise() |
на
1 |
public function onAfterRoute() |
Контент и модули
Для каждого языка нужно создать свои материалы, категории и модули. Сделать это очень просто, достаточно выбрать в настройках категории/материала/модуля нужный язык.
Настройка связей
После того, как для каждого языка настроен свой контент, остается последний шаг - настройка связей между языками, чтобы система могла понять какой контент отобразить на странице при смене языка.
Логика очень проста. В настройках каждого пункта меню/категории/материала нужно указать соответствующий контент на других языках.
Внутри каждого пункта меню заходим во вкладку Связи и указываем аналогичные пункты для других языков.
То же самое делам в настройках категорий и материалов.
Все настроенные связи можно посмотреть в списке пунктов меню/категорий/материалов.
Языковые константы
Языковые константы используются в joomla для вывода текстовой информации на сайте, которая не задается непосредственно самим пользователем. Например, имена вкладок, текст различных уведомлений, информация о том, что корзина пуста и т.д.
Благодаря константам можно легко изменить различные текстовые элементы сайта и настроить их мультиязычность.
Все языковые константы находятся в языковых файлах либо в корневой папке language, либо внутри папок с модулями и компонентами. Для каждого языка внутри папки language создается своя папки с именем языка. Таким образом и настраивается мультиязычность.
Файл с языковыми константами русского языка для virtuemart, например, находится по адресу /language/ru-RU/ru-RU.com_virtuemart.ini. Кроме этого, есть несколько других языковых файлов, но это не так важно. Главное понять, как изменить существующую константу и добавить новую.
Например, мы хотим изменить надпись Сортировать по на Сортировка в блоке сортировки товаров в категории.
Открываем файл /language/ru-RU/ru-RU.com_virtuemart.ini и находим константу с нужным текстом
1 |
COM_VIRTUEMART_ORDERBY="Сортировать по" |
Меняем текст или добавляем в конце файла ту же константу, но с новым текстом
1 |
COM_VIRTUEMART_ORDERBY="Сортировка" |
Текст на сайте изменился.
Это хороший способ, но нужно точно знать, в каком файле искать константу, и после обновления языковых файлов все правки придется вносить заново.
Решение есть. В Joomla уже встроен менеджер переопределения языковых констант по адресу Расширения > Менеджер языков > Переопределение констант.
Для решения той же задачи можно просто создать новую константу. С помощью поиска находим нужную константу.
И изменяем ее.
Константа с новым значением запишется в файл /language/overrides/ru-RU.override.ini. Все константы из файлов в папке /language/overrides/ обладают наивысшим приоритетом и не изменяются при обновлениях языковых файлов и joomla, поэтому лучше всего все новые и отредактированные языковые константы размещать в этой папке.
Если поиск текста для изменения не работает, то перелогиньтесь и очистите устаревший кеш в Система > Очистить устаревший кеш.
Для создания новой языковой константы для другого языка выбираем в фильтре нужный язык
И создаем, например, ту же константу сортировки вручную.
Не весь текст выводится с помощью языковых констант. Иногда он просто размещен в коде шаблона. Если найти не удается, то можно использовать, например, поиск Total Commander.
Мультиязычность VirtueMart
Наконец, мы подошли к настройке мультиязычности в самом VirtueMart. Первым делом в Virtuemart > Настройки > Магазин выбираем нужные языки.
После этого в базе данных будут созданы отдельные таблицы для каждого языка, в которых будет храниться информация о
- товарах
- продавцах
- категориях
- производителях и их категориях
- методах оплаты и доставки
Именно поэтому если на сайт установлен зарубежный шаблон и сразу не был добавлен русский язык в настройках virtuemart, в дальнейшем при смене языка по умолчанию в Расширения > Менеджер языков на русский пропадают все созданные товары. Просто потому, что в базе создаются новые таблицы для русского языка и они пусты.
Языки добавлены, теперь нужно продублировать весь список, указанный выше (товары, категории и т.д.) для каждого языка. Сделать это просто. При редактировании товара/категории/производителя и т.д. в верхнем левом углу нужно выбрать новый язык и изменить все данные.
Сначала нужно создать категории и производителей для каждого языка. Только после этого создаются товары.
При удалении товара из админ панели удаляются все его копии на других языках.
Чтобы добавить мультиязычность для настраиваемых полей, просто используем языковые переменные в названии поля. Например, для поля размер указываем COM_VIRTUEMART_FIELD_SIZE.
В Расширения > Менеджер языков > Переопределения констант создаем для каждого языка свою константу COM_VIRTUEMART_FIELD_SIZE с переводом и все работает.
Статья получилась объемная, но, по сути все достаточно просто. Постарался затронуть все вопросы, которые могут возникнуть при правке текста и настройке мультиязычности на сайте. Если что-то упустил, то по мере поступления вопросов в комментариях буду дополнять текст.
Kseniya
Добрый день, подскажите пожалуйста, мультиязычный сайт, товар сохранен на разных языках,
Вопрос: для каждого языка (одного и того же товара) алиас должен быть один и тот же или для каждого языка свой алиас?
Такой же вопрос и относительно категорий ))
admin
Здравствуйте!
Не принципиально. Может быть одинаковый, может быть разный.
Стас
Здравствуйте, подскажите пожалуйста, не могу понять, как реализовать, по возможности штатными методами, чтобы не лезть в код или если лезть чтобы сохранилась возможность обновляться…
Нужно сделать так чтобы была возможность выбирать страну и язык сайта и от этого зависело то какой ассортимент будет показываться.
Сейчас в джумла можно только добавлять языки: Русский, Английский и т.д, но допустим мне нужно что бы Продукт1 был доступен только если посетитель из ЕС на русском, французском и т.д, а Продукт 2 был доступен только если посетитель из СНГ на Русском и Украинском.
Как Вы посоветуете это реализовать?
Структура должна получиться примерно следующая - https://drive.google.com/file/d/0B7LUdA-v2vEHTkpCRnpCZVg1NUU/view?usp=drivesdk
Стас
перенес вопрос на форум - https://virtuemart.su/forums/topic/organizaciya-slozhnoj-mnogoyazychnosti/
KSENIYA
Здравствуйте, подскажите пожалуйста
при переключении языка, находясь в карточке товара, переключает на категорию (когда переключаю язык - выбрасывает из карточки товара в категорию)
Возможно кто то сталкивался, может есть какое-то решение ))
admin
Решений не встречал, если найдете, пожалуйста, поделитесь.
Иван
Модуль Module Language switch for Virtuemart от Studio42. Стоит 10 евро. Ставится вместо стандартного модуля переключения языков. Подхватывает его стили. Настроил в 3 клика. Если находишься в карточке товара и переходишь на другой язык не выкидывает в категорию с товарами, а показывает этот товар, но на выбранном языке. //shop.st42.fr/en/products/multi-language-for-virtuemart.htm
admin
Спасибо, что поделились.
Дмитрий
Я так понял, что для каждого товара должна быть страница на своем языке. Если три языка, то и страниц в три раза больше, а как тогда цены менять? Это же для каждого товара три раза надо будет цену менять.
admin
Да, при создании товара для каждого языка нужно указывать свою цену.
niki333
Доброго времени суток.
Сайт на 2-х языках, после того как связываю (ru/en), категории VirtueMart в пунктах меню. Выскакивает ошибка "Предупреждение Назначить для VirtueMart пункт меню" в русской версии и "Warning Assign the component VirtueMart to a menu item" и в английской, соответственно.
В Менеджере меню, создано 3 меню, Русское, Английское и Общее (опубликованное, все языки, не привязанное к модулям, тип VirtueMart). Почитав на форумах, пишут что этого достаточно, но ошибка все равно не пропадает. Кэш тоже чистил.
Может кто сталкивался?
Спасибо!
admin
Здравствуйте!
В общем меню есть ссылка на главную? Она с типом Virtuemart Главная?
niki333
У меня не полная руссификация, но на общем меню Главной стоит COM_VIRTUEMART_VIRTUEMART_VIEW_DEFAULT_TITLE, но на англ. и русс. меню Главная не макет виртуала. Там есть пункт Продукция, вот там и стоит макет виртуала. Еще я заметил, когда на русс. и англ. связи нет, то ошибки этой нет ни в одной версии, как только я делаю связь пункта меню вирт. сразу в этом меню выскакивает ошибка эта.
niki333
Разобрался! Надо, помимо описанного выше, создать в русском меню, один пункт с типом виртуалмарт и язык указать анг. не создавая связи. И тоже самое сделать в английском меню. Эти пункты будут опубликованы, но так как они стоят не в своих языковых меню и между ними нет связи они нигде не отображаются.
admin
Спасибо, что поделились решением.
Andres
При следующем редактировании товара в разделе описание подставляется текст из языка по умолчанию.
Создаю товар, заполняю для всех языков, сохраняю. Проверяю сайт, все отлично. теперь если нужно что то поменять в товаре, захожу в него. И если выбирать язык для редактирования то все поля с флажками меняются на содержимое на том языке который выбрал. Кроме поля описание. Там отображается содержимое для языка по умолчанию и если нажать сохранить то он перезаписывает контент на нужном языке. Получается при каждом редактировании нужно по новой вставлять текст на нужном языке кроме языка по умолчанию. Сталкивался ли кто с такой проблемой.
admin
Уточните версию virtuemart?
Andres
сначала была 3.4.2
обновил до 3.4.3 проблема осталась
admin
Не удалось повторить ошибку. Нужно смотреть на сайте. Пришлите доступ к админке на admin@virtuemart.su
Andres
Извиняюсь не увидел ваш ответ. Ваше предложение еще актуально?
admin
Да, все в силе.
Lightning
Добрый день! Почему то не перевились некоторые пункты на странице товара. Скриншот по ссылки https://ibb.co/k80qjs9 . Если не сложно подскажите, в чем может быть проблема.
Спасибо!
admin
Здравствуйте!
Скорее всего, эти надписи жестко прописаны в самом шаблоне.
Посмотрите в файле /templates/имя_шаблона/html/com_virtuemart/productdetails/default.php
Lightning
Спасибо большое! Вы оказались правы , разработчик шаблона вписал константы не свойственные virtuemart`у
admin
Хорошо.
Владимир
Подскажите пожалуйста. Есть ли возможность пересохранить товары на разных языках пакетно? А то сохраняли товары только на русском а теперь выяснилось, что нужно на остальных языках. А товаров на сайте очень много.
Заранее спасибо.
admin
Можно скопировать все данные из таблицы #__virtuemart_products_ru_ru в таблицу с товарами на другом языке.
Владимир
Можете подсказать способ? Я не очень хорошо знаком с базой данных.
Владимир
Сделал такой запрос:
update rt1fh_virtuemart_products_en_gb t2, t1.rt1fh_virtuemart_products_ru_ru t1
set t2.virtuemart_product_id=t1.virtuemart_product_id,t2.product_s_desc=t1.product_s_desc,t2.product_desc=t1.product_desc,t2.product_name=t1.product_name,t2.metadesc=t1.metadesc,t2.metakey=t1.metakey,t2.customtitle=t1.customtitle,t2.slug=t1.slug,t2.product_slogan=t1.product_slogan
where t1.rt1fh_virtuemart_products_ru_ru=t2.rt1fh_virtuemart_products_en_gb;
select * from rt1fh_virtuemart_products_en_gb;
Пройдет такой?
admin
Если все работает, то подойдет.
Можно просто импортировать таблицу с товарами на русском и потом экспортировать ее в таблицу с товарами на другом языке.
Серега
Здравствуйте. Когда находишься в товаре "Юбка Venca" например в рус языке, нажимаешь для примера на англ язык, попадаешь в категорию товаров на англ языке, но не на сам товар. Как это можно исправить?
admin
Здравствуйте!
Есть такая проблема, решения, к сожалению, предложить не могу.
Если найдете, пожалуйста, поделитесь.
Серега
Странно. Joomla считается одним из самых популярных движков, и такие промахи в простых, казалось бы деталях...
Мария
Добрый день!
У меня вопрос по мультиязычности Vitruemart 3.
У меня сайт (ru/ua), основной язык ранее был Русский.
После внесения переводов, всё переводит, кроме названий категорий в левом меню.
Пример - http://door.net.ua/ua/katalog/vorota.
То есть, например, при переходе с русского на украинский язык ... "Двери" в левом меню остаються "Двери", а должны быть "Двері" и т.д.
Прошу подсказать, как можно решить эту проблемку.
admin
Здравствуйте!
Нужно вывести 2 модуля категорий, указав в настройках каждого соответствующий язык.
Мария
Изначально делала, как Вы пишете.
[url=https://radikal.ru][img]https://d.radikal.ru/d08/1912/97/c356eaa05ac5.jpg[/img][/url]
Но результата не было.
Мария
Ссылка на скрин - https://drive.google.com/open?id=1uQO-apajpbAXBR0UhCt_d92og1CGWck6
admin
Для самих категорий в админке virtuemart созданы разные названия?
Мария
Нет. Как перевод категории на русском языке.
Скрин админки - https://drive.google.com/open?id=1vUje6qgNRWdcZPuef3hgAeKwVuZZwOcz.
Лучше сделать как отдельные категории? То есть, "Двери" и "Двері" как две разные категории.
Тогда и не переводить товары стандартным путем?
Мария
Добрый день!
Решила поэксперементировать...
1) Создала верхнии категории "РУС" и "УКР". Внесла категории "Двери", "Ворота" в "РУС", а "Двері", "Ворота" в "УКР".
2) Привязала товары с категории "Двери" также на "Двері" и т.п.
3) В "Модули" для левого меню на русском указала верхнюю категорию "РУС", для левого меню на украинском - соответственно "УКР".
Теперь в левом меню названия категорий меняются при смене языка.
Но возникла другая проблема, когда нахожусь на странице товара и меняю язык, то идет переход не на соответствующий товар, а на категорию.
Почему так?
Как можно настроить, чтобы при смене языка оставались на странице товара и сменялся текст на соответствующий язык?
admin
Попробуйте решение из этого коммента.
Мария
Наконец-то попробывала решение с этого поста.
Но все равно при смене языка перекидывает на категорию, а не оставляетна том же товаре, но на другом языке.
В чём может быть проблема?
Очень нужна Ваша помощь!
Может кто-то пользовался этим модулем и расскажет, что и как?
Мария
Я поняла - модуль Shop Language Switcher (с ссылки //shop.st42.fr/en/products/multi-language-for-virtuemart.htm) не хочет корректно работать, если не использовать одни и те же списки категорий Virtuemart для всех языков.
Но тогда возращаюсь к проблеме изначальной - по поводу того, что при переходе на другой язык категории не переводяться в Левом меню. Я уже прописала 2 модуля левых меню на рус и укр, но прописала доступ к одному и тому же списку категорий.
Ведь если я прописую доступ к разным спискам категорий на разных языках, то не работает переход товара с одного языка на тот же товар на другом языке.
Подскажите, пожалуйста, что можно сделать в таком вот случае?
admin
Думаю, что обязательно нужно использовать один и тот же список категорий, без этого никак.
Мария
Спасибо за ответ.
Но тогда, как Вы думаете, почему могут не переводиться названия категорий?
admin
Не могу точно сказать, нужно разбираться непосредственно на сайте.
Я на сайте не могу посмотреть, просто физически нет времени.
Попробуйте обратиться на фриланс.
Мария
Хорошо. Спасибо за совет.
Мария
Обратилась на фриланс к программистам. Нам помогли написать код.
Спасибо за подсказку
admin
Хорошо.
Илья
Подскажите. есть два вопроса.
1 - созданы доп поля. назначена языковая константа для всех полей. В админке видно, что подставляется нужный текст. А вот на сайте почему-то текст только английски (английский язык магазина по умолчанию), а вот во втором языке и третьем нет их перевода. только английский.
2 - Если переключать язык на карточке товара, то перебрасывает в каталог. можно ли этого избежать?
admin
1. Как именно создается языковая константа? Пришлите скрины.
2. Такого стандартное поведение. Для изменения можно использовать этот плагин.
Илья
1 - уже нашел причину. Ошибка плагина custom fields for all - он грузится быстрее чем языковые плагины. Поэтому и перебивает. Нужно ему загрузку поставить последним как-то.
2 - купил его. поставил. но он добавляет в урл дубль. en/shop/shop вместо en/shop - сталкивались с этим?
admin
2. попробуйте обратиться в поддержку разработчика плагина.
Александр
Подскажите пожалуйста можно ли для мультиязычного сайта назвать модуль "языковой переменной"?
Чтоб не делать для каждого языка отдельно. Если да, то как правильно написать.
Александр
Подскажите плиз в чём может быть проблема.
Созданы категории на англ. и рус. языках. Товар изначально был только на русском. Делаю копию товара, слева ставлю значёк англ. все вкладки на англ. яз.
Но на сайте описание товара выводится на русском. ((