Как включить многоязычный каталог в Drupal 6.32 + Ubercart 6.x-2.13
Описание проблемы
Независимо от того, что я пытаюсь сделать, я не могу заставить свой Блок Каталога Ubercart менять языки, когда я использую Language Switcher. Вы можете проверить это поведение для себя на:
holistichorsecare.com/zh/products/aromadog-arf-ritis-pain-relief-1oz
Независимо от языкового контекста (английский или китайский, "en" или "zh-hant"), блок корзины покупок в левом поле страницы при любых обстоятельствах отображает этот текст:
Корзина
В вашей корзине нет товаров.
Всего товаров: HK$ 0.00
Идите и попробуйте. Загрузите страницу и нажмите на английском или китайском, как они появляются в заголовке страницы. Блок корзины покупок не меняет языки - и я бы этого хотел.
Файлы локализации установлены - думаю...
Я установил следующие пакеты строк локализации с помощью интерфейса администрирования, и они оказались загружены правильно.
- Ubercart-6.x-2.13.zh-hant.po
- uc_ajax_cart-6.x-1.0.zh-hant.po
Проверка кода модуля
Глядя в:
holistichorsecare.com/www/content/sites/all/modules/ubercart/uc_cart/translations/zh-hant
Я вижу следующую запись вокруг строки 1926 года:
msgstr "В вашей корзине нет товаров." msgstr "ä½ (妳)ç è³¼ç©è" 裡æ²æä "" ä½åå. "
(искаженный текст - это многобайтовые символы в моей оболочке)
Глядя в
holistichorsecare.com/www/content/sites/all/modules/ubercart/uc_cart/cart.module
Я вижу следующий звонок по линии 706:
$output = '<p class="uc-cart-empty">'. t('There are no products in your shopping cart.') .'</p>';
Таким образом, кажется, что есть вызов функции t() для перевода строки, но ни одна из них не поступит ни от какой системы, которая обслуживает альтернативы.
Может кто-нибудь сказать мне, где мне нужно перейти в интерфейс администратора, чтобы включить локализацию / перевод для блока корзины покупок (ajax cart) в Ubercart?
Я думаю, я просто пропустил флажок где-то, чтобы включить перевод, или должен сказать Drupal/Ubercart, что строки в блоке корзины покупок должны быть переведены, но я не знаю, куда идти или как это сделать этот.
PS: Когда я вызвал i18n_get_lang() в коде устранения неполадок, я получил правильный ответ (т.е. "en" или "zh-hant"), поэтому система знает, в каком языковом контексте она находится.
Спасибо.
ОБНОВЛЕНИЕ - УСПЕХ!
Мне удалось заставить это работать, импортировав строки zh-hant во встроенный интерфейс.
Вот как я это сделал:
1) Я зашел на страницу " Создание сайта" и подтвердил, что для параметра " Корзина" в разделе " Корзина" выбрано значение " Все языки".
2) Я перешел на страницу "Конфигурация сайта" Языки "Настроить" Согласование языков и установил для параметра " Согласование языка" значение " Префикс пути" с резервным языком.
3) Я зашел в Создание сайта "Перевести интерфейс и выбрал вкладку" Импорт "
4) На вкладке "Импорт" я нажал кнопку " Выбрать файл", а затем выбрал ubercart-6.x-2.13.zh-hant.po, который содержит несколько китайских определений. Я получил этот файл определений от localize.drupal.org/translate/languages/zh-hant
5) Я выбрал " Встроенный интерфейс", и существующие строки сохраняются, добавляются только новые.
6) Затем я нажал на ИМПОРТ
верификация
После завершения импорта я нажал на вкладку " Обзор ", чтобы проверить результаты:
Китайский, традиционный 4242/9881 (42,93%) 0/19 (0%) 0/16 (0%) 0/49 (0%) 0/37 (0%) 0/15 (0%) 1518/1518 (100%) 2/3 (66,67%)
По-видимому, этот импорт загрузил 4242 определения в раздел " Встроенный интерфейс " системы Drupal. Эти строки нигде не находятся в зоне администрирования магазина, что для меня немного загадка, но эй - это сработало.
Заключение
После того, как я выполнил вышеуказанные шаги, блок корзины покупок начал правильно отображаться на китайском или английском языке в зависимости от того, какой язык был выбран с помощью переключателя языков.
Последний комментарий и вопрос
Если подумать, может быть, это не так уж и интуитивно понятно. В конце концов, BLOCK является частью общего интерфейса системы Drupal, а не частью процесса проверки.
Может я ошибаюсь по этому поводу... может кто-нибудь подтвердить или исправить?
г.
1 ответ
Процедура, которую вы сделали, является правильной, код, который вызывает t()
создаст создать строку (обычно под Built-in Interface
группа) и должен быть переведен вручную путем поиска строки или путем импорта .po
файл, который содержит необходимые строки в этой группе.
Что делает поведение немного более странным, если вы не знакомы с ним, так это то, что t()
создает только интерфейсные строки во время вызова, вы должны сначала просматривать контент на желаемом языке (даже если он будет разбит / не переведен). Это позволяет t()
создавать строковые записи в базе данных, что позволяет впоследствии их переводить.
Я бы порекомендовал вам использовать такой модуль, как l18n_update, чтобы автоматически обновлять переводы интерфейса и импортировать строки для любых новых изменений, сделанных ранее.