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

Тема в разделе "PrestaShop", создана пользователем Byteman, 28 фев 2017.

Информация :
Приветствую гость, обрати внимание! Темы которые закреплены в разделах, в скором времени будут откреплены. Правила раздела PrestaShop

(Не актуальные темы) Каталоги:Модули PrestaShop 1.7Модули PrestaShop 1.5 - 1.6Шаблоны PrestaShop 1.7Шаблоны PrestaShop 1.5 - 1.6
(Не актуальные темы) Поиск / Запросы:Модули PrestaShop 1.7Модули PrestaShop 1.5 - 1.6Шаблоны PrestaShop 1.7Шаблоны PrestaShop 1.5 - 1.6
Полезная информация:Поддержка и помощь c PrestaShopУбираем ПрестаТраст, стучалки и прочую рекламуСовместные покупки модулей и шаблоновПеревод Prestashop и модулей
Модераторы: trace
  1. Byteman

    Byteman

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

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

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

    rechnung_en.png

    Подскажите отчего чехарда такая и как конкретно решить эту проблему?
     
  2. fortuner

    fortuner Нарушитель

    Регистр.:
    26 июн 2012
    Сообщения:
    558
    Симпатии:
    896
    Подозреваю, что имена товаров на том языке, на котором делался заказ.
    Шрифт можно изменить так:
    В файле classes/pdf/PDFGenerator.php напротив языка ru поставить freeserif
    Вот так:
    PHP:
    'ru' => 'freeserif',
     
    Последнее редактирование: 28 фев 2017
    trace и Byteman нравится это.
  3. fortuner

    fortuner Нарушитель

    Регистр.:
    26 июн 2012
    Сообщения:
    558
    Симпатии:
    896
    Или, если не поможет, прописать для немецкого языка
    PHP:
    'de' => 'freeserif'// de - это код языка, как в урлах.
    Если нужно, чтобы имя товара выводилось на языке админки, а не заказчика, то тоже можно попробовать исправить. Пишите
     
    Последнее редактирование: 28 фев 2017
    trace и Byteman нравится это.
  4. Byteman

    Byteman

    Регистр.:
    18 мар 2008
    Сообщения:
    445
    Симпатии:
    218
    Точно так и есть. Я проверил. Но это же, в общем-то, полный отстой. То есть, допустим, работает сотрудник в бэкофисе на немецком и обрабатывает заказ, сделанный кем-то в России на русском. В результате генерируется счёт отчасти на немецом и отчасти на русском языках (отдельный вопрос ещё - почему вместо русских букв в немецком бэкоффисе генерируются вопросительные знаки, причём в английском бэкофисе русские буквы отображаются как положено). Это уже первая чушь. Далее, сотруднику нужно обрабатывать заказ из Англии на английском и далее из Германии на немецком. Это что же - сотрудник должен каждый раз переключать язык своего профиля??? Это же не работа, а полный отстой! Пожалуйста, подскажите как быть. Это же просто катастрофа!
     
  5. fortuner

    fortuner Нарушитель

    Регистр.:
    26 июн 2012
    Сообщения:
    558
    Симпатии:
    896
    Да ладно, никакой катастрофы, сейчас исправим :)
    На мой взгляд логика такая: заказал немец - получил чек на немецком. Англичанин - на английском.
    Сейчас попробую исправить и добавлю в это сообщение, что делать.
    Да, вопросительные знаки можно исправить, как я отписал выше. А имя товара ща попробую
     
    Byteman нравится это.
  6. Byteman

    Byteman

    Регистр.:
    18 мар 2008
    Сообщения:
    445
    Симпатии:
    218
    А где именно это можно прописать?
    Как вариант, было бы интересно иметь такую возможность - выводить наименование товара на языке админки. Хотя, в идеале, думаю, правильно было бы, чтобы в счёте для клиента и наименования товаров и всё остальное генерировалось на языке клиента, а в счёте для отчётности перед налоговой инспекцией Германии всё генерировалось на немецком. То есть, наверное, в идеале должна быть кнопка выбора языка генерации счёта. Тут мне нужно, пожалуй, ещё подумать и посоветоваться с руководством магазина.
     
  7. Byteman

    Byteman

    Регистр.:
    18 мар 2008
    Сообщения:
    445
    Симпатии:
    218
    Логично. Только а как же быть не только с наименованием товаров, но и с остальными текстами в счёте? Допустим, сотрудник работает в бэкоффисе на немецком и оформляет заказ сделанный россиянином на русском. В результате (учитывая программные поправки, которые Вы сейчас попытаетесь внести) он получит счёт с наименованиями товаров на русском, но остальным текстом на немецком. Тоже лажа. То есть, получается, что нужен весь текст на языке клиента, а не только наименования товаров. В общем, я уже в лёгкой панике :(
     
  8. fortuner

    fortuner Нарушитель

    Регистр.:
    26 июн 2012
    Сообщения:
    558
    Симпатии:
    896
    В файле 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'
        
    );
    Только учтите, что встроенных шрифтов в этом генераторе ПДФок мало, так что те, которых в этом массиве нет, лучше не пытаться использовать
     
    trace и Byteman нравится это.
  9. Byteman

    Byteman

    Регистр.:
    18 мар 2008
    Сообщения:
    445
    Симпатии:
    218
    Супер! Thx! Это я так понимаю, пока что решает вопрос в части замещения русских букв вопросительными знаками? Однако, в магазине только 3 языка: русский, немецкий, английский и русские буквы замещаются на вопросительные знаки только при работе сотрудника в немецком профиле - есть ли смысл в других языках, кроме немецкого, делать привязку фонтов? Или я не понимаю смысл данного скрипта?
     
  10. fortuner

    fortuner Нарушитель

    Регистр.:
    26 июн 2012
    Сообщения:
    558
    Симпатии:
    896
    Вот, готово:
    В файле корневой_каталог_сайта/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}
    Проверьте, отпишитесь.
    вот готовый файл
     

    Вложения:

    trace и Byteman нравится это.