Помогите. Проблема с языками при генерации счетов в PDF-формате.

Byteman

Мой дом здесь!
Регистрация
18 Мар 2008
Сообщения
484
Реакции
242
Проблема: товары в магазине на 3 языках, бэкоффис сотрудника работает на немецком и оформляет счёт за сделанный клиентом заказ.
Однако преста в генерируемом PDF-файле вносит не немецкое, а русское описание товара, хотя немецкое описание, как положено,
внесено в немецкие графы описания товара. При этом вместо русских букв ещё и вопросительные знаки.
rechnung.jpg

Если же сотрудник переключает бэкоффис на русский язык, то всё работает как положено:
rechnung_ru.png

Опять же, если сотрудник переключает бэкоффис на английский язык, то счёт создаётся на английском,
а описания товаров перенимаются на русском (на этот раз без замещения русских букв вопросительными знаками) :

rechnung_en.png

Подскажите отчего чехарда такая и как конкретно решить эту проблему?
 
Подозреваю, что имена товаров на том языке, на котором делался заказ.
Шрифт можно изменить так:
В файле classes/pdf/PDFGenerator.php напротив языка ru поставить freeserif
Вот так:
PHP:
'ru' => 'freeserif',
 
Последнее редактирование:
Или, если не поможет, прописать для немецкого языка
PHP:
'de' => 'freeserif', // de - это код языка, как в урлах.
Если нужно, чтобы имя товара выводилось на языке админки, а не заказчика, то тоже можно попробовать исправить. Пишите
 
Последнее редактирование:
Подозреваю, что имена товаров на том языке, на котором делался заказ.
Точно так и есть. Я проверил. Но это же, в общем-то, полный отстой. То есть, допустим, работает сотрудник в бэкофисе на немецком и обрабатывает заказ, сделанный кем-то в России на русском. В результате генерируется счёт отчасти на немецом и отчасти на русском языках (отдельный вопрос ещё - почему вместо русских букв в немецком бэкоффисе генерируются вопросительные знаки, причём в английском бэкофисе русские буквы отображаются как положено). Это уже первая чушь. Далее, сотруднику нужно обрабатывать заказ из Англии на английском и далее из Германии на немецком. Это что же - сотрудник должен каждый раз переключать язык своего профиля??? Это же не работа, а полный отстой! Пожалуйста, подскажите как быть. Это же просто катастрофа!
 
Точно так и есть. Я проверил. Но это же, в общем-то, полный отстой. То есть, допустим, работает сотрудник в бэкофисе на немецком и обрабатывает заказ, сделанный кем-то в России на русском. В результате генерируется счёт отчасти на немецом и отчасти на русском языках (отдельный вопрос ещё - почему вместо русских букв в немецком бэкоффисе генерируются вопросительные знаки, причём в английском бэкофисе русские буквы отображаются как положено). Это уже первая чушь. Далее, сотруднику нужно обрабатывать заказ из Англии на английском и далее из Германии на немецком. Это что же - сотрудник должен каждый раз переключать язык своего профиля??? Это же не работа, а полный отстой! Пожалуйста, подскажите как быть. Не может же быть такого, чтобы преста была настолько отстойной в работе в многоязычных версиях??? Это же просто катстрофа!
Да ладно, никакой катастрофы, сейчас исправим :)
На мой взгляд логика такая: заказал немец - получил чек на немецком. Англичанин - на английском.
Сейчас попробую исправить и добавлю в это сообщение, что делать.
Да, вопросительные знаки можно исправить, как я отписал выше. А имя товара ща попробую
 
'de' => 'freeserif', // de - это код языка, как в урлах.
А где именно это можно прописать?
Если нужно, чтобы имя товара выводилось на языке админки, а не заказчика, то тоже можно попробовать исправить. Пишите.
Как вариант, было бы интересно иметь такую возможность - выводить наименование товара на языке админки. Хотя, в идеале, думаю, правильно было бы, чтобы в счёте для клиента и наименования товаров и всё остальное генерировалось на языке клиента, а в счёте для отчётности перед налоговой инспекцией Германии всё генерировалось на немецком. То есть, наверное, в идеале должна быть кнопка выбора языка генерации счёта. Тут мне нужно, пожалуй, ещё подумать и посоветоваться с руководством магазина.
 
На мой взгляд логика такая: заказал немец - получил чек на немецком. Англичанин - на английском.
Логично. Только а как же быть не только с наименованием товаров, но и с остальными текстами в счёте? Допустим, сотрудник работает в бэкоффисе на немецком и оформляет заказ сделанный россиянином на русском. В результате (учитывая программные поправки, которые Вы сейчас попытаетесь внести) он получит счёт с наименованиями товаров на русском, но остальным текстом на немецком. Тоже лажа. То есть, получается, что нужен весь текст на языке клиента, а не только наименования товаров. В общем, я уже в лёгкой панике :(
 
А где именно это можно прописать?
В файле classes/pdf/PDFGenerator.php, на следующей строке после любого языка. Там на строке 43 начинаются шрифты для чеков, там пишите. Должно получиться вот так:
PHP:
    public $font_by_lang = array(
        'ja' => 'cid0jp',
        'bg' => 'freeserif',
        'ru' => 'freeserif',
        'uk' => 'freeserif',
        'de' => 'freeserif', // de - это код языка, как в урлах.
        'mk' => 'freeserif',
        'el' => 'freeserif',
        'en' => 'dejavusans',
        'vn' => 'dejavusans',
        'pl' => 'dejavusans',
        'ar' => 'dejavusans',
        'fa' => 'dejavusans',
        'ur' => 'dejavusans',
        'az' => 'dejavusans',
        'ca' => 'dejavusans',
        'gl' => 'dejavusans',
        'hr' => 'dejavusans',
        'sr' => 'dejavusans',
        'si' => 'dejavusans',
        'cs' => 'dejavusans',
        'sk' => 'dejavusans',
        'ka' => 'dejavusans',
        'he' => 'dejavusans',
        'lo' => 'dejavusans',
        'lt' => 'dejavusans',
        'lv' => 'dejavusans',
        'tr' => 'dejavusans',
        'ko' => 'cid0kr',
        'zh' => 'cid0cs',
        'tw' => 'cid0cs',
        'th' => 'freeserif'
    );
Только учтите, что встроенных шрифтов в этом генераторе ПДФок мало, так что те, которых в этом массиве нет, лучше не пытаться использовать
 
В файле classes/pdf/PDFGenerator.php, на следующей строке после любого языка. Там на строке 43 начинаются шрифты для чеков, там пишите.
Супер! Thx! Это я так понимаю, пока что решает вопрос в части замещения русских букв вопросительными знаками? Однако, в магазине только 3 языка: русский, немецкий, английский и русские буквы замещаются на вопросительные знаки только при работе сотрудника в немецком профиле - есть ли смысл в других языках, кроме немецкого, делать привязку фонтов? Или я не понимаю смысл данного скрипта?
 
Вот, готово:
В файле корневой_каталог_сайта/pdf/invoice.product-tab.tpl
На строке 44 перед {foreach $order_details as $order_detail} добавляем:
Код:
{$context = Context::getContext()}
Теперь сразу после {foreach $order_details as $order_detail} добавляем:
Код:
{$product_name = Product::getProductName($order_detail.product_id, $order_detail.product_attribute_id, $context->language->id)}
Теперь на строке 66 и строке 71 заменяем {$order_detail.product_name} на
Код:
{$product_name}
Проверьте, отпишитесь.
вот готовый файл
 

Вложения

  • invoice.product-tab.rar
    1,9 KB · Просмотры: 8
Назад
Сверху