Как включить многоязычный каталог в 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, чтобы автоматически обновлять переводы интерфейса и импортировать строки для любых новых изменений, сделанных ранее.

Другие вопросы по тегам