Особенности перевода фраз в Magento 2

В данной статье собраны особенности работы перевода для Magento 2, которые не отражены в официальной документации и на выяснение которых пришлось потратить достаточно много времени.

Перевод фраз может располагаться в:

  1. Файлах конкретного модуля
  2. Файлах темы
  3. Файлах языкового пакета
  4. Базе данных

Если перевод одной и той же фразы встречается во всех упомянутых местах, то на сайте будет использоваться фраза из последнего источника.

Например, есть фраза "Hello", которая подлежит переводу.

  1. В модуле она переведена, как "Привет"
  2. В теме она переведена, как "Здравствуйте"
  3. В языковом пакете — "Добрый день"
  4. В базе данных нет перевода

На сайте будет выводится "Добрый день", то есть перевод из последнего имеющегося источника.

Важно: Не изменяйте фразы в установленном стороннем языковом пакете. После его обновления вы потеряете все свои изменения.


Как перевести свой сайт?

Перевести свой сайт именно так, как вам того требуется можно двумя способами:

1. Использовать функцию Inline Translate

Для использования Inline Translate вам сначала потребуется временно отключить кэши переводов, блоков и другие кэши, влияющие на вывод данных: Система (System) -> Управление кэшем (Cache management).

Чтобы включить функцию пройдите в Магазины (Stores) -> Конфигурации (Configuration) -> Расширенные (Advanced) -> Разработчик (Developer), выберите построчный перевод и включите его для необходимых частей сайта и сохраните настройки.

Теперь всё, что можно перевести при помощи данной функции будет обведено красным. При наведении курсора появится иконка, при нажатии на которую можно будет ввести необходимый перевод.

Важно: Добавлять перевод на пользовательской части следует, находясь в необходимом представлении магазина.

2. Создать свой пакет с требуемым наследованием

Например, вы хотите создать свой языковой пакет на русском языке — MyLangPack, который унаследует фразы из нашего M2 Russian language pack. Для этого:

  1. 2.1. Создайте путь для нового пакета

    /app/i18n/mylangpack/ru_RU

    2.2. Создайте csv-файл своего перевода:

    /app/i18n/mylangpack/ru_RU/ru_RU.csv

    2.3 Скопируйте в этот файл фразы, которые вы хотите исправить, из ru_RU.csv пакета M2 Russian language pack, исправьте их и сохраните файл

    2.4 В папке ru_RU создайте три файла: composer.json, language.xml, registration.php и пропишите их:

    composer.json

     {
       "name": "mylangpack/language-ru_ru",
       "description": "My Custom language",
       "version": "100.0.1",
       "license": [
         "OSL-3.0",
         "AFL-3.0"
     ],
       "require": {
         "magento/framework": "100.0.*"
       },
       "type": "magento2-language",
       "autoload": {
         "files": [
           "registration.php"
         ]
       }
     }
     

    Где секция "description" — описание пакета.


    language.xml

     <?xml version="1.0"?>
     <language xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="urn:magento:framework:App/Language/package.xsd">
         <code>ru_RU</code>
         <vendor>mylangpack</vendor>
         <package>ru_ru</package>
         <sort_order>100</sort_order>
         <use vendor="etws" package="ru_ru"/>
     </language>
     

    Cекция "use vendor" в данном примере "etws", т.к. перевод наследуется от M2 Russian language pack

    Важно: Если вы хотите создать пакет, не использующий наследование какого-либо пакета, удалите строку "use vendor". В таком случае, на приоритет языкового пакета будет влиять параметр "sort_order". Бóльшие значения приоритетнее меньших.


    registration.php

     <?php
     \Magento\Framework\Component\ComponentRegistrar::register(
         \Magento\Framework\Component\ComponentRegistrar::LANGUAGE,
         'mylangpack_ru_ru',
         __DIR__
     );
     

    2.5 Выполняем команду из корневой папки сайта:

    /bin/magento setup:static-content:deploy ru_RU

Часто задаваемые вопросы

Что будет, если установлено несколько языковых пакетов русского языка от разных разработчиков?

У языковых пакетов есть порядок сортировки, указываемый в файле language.xml. Чем больше число, тем приоритетнее пакет. То есть будет такой порядок:

  1. В файлах конкретного модуля
  2. В файлах темы
  3. В файлах языковых пакетов
    • 3.1. Пакет с приоритетом 0
    • 3.2. Пакет с приоритетом 1
    • ...
    • 3.99. Пакет с приоритетом 100
  4. В базе данных

Дата последнего обновления: среда, 25 января 2017 г.