Magento2 перевод текста шаблона Javascript (KO)

24

Я пытаюсь добавить перевод для текста, <!-- ko i18n: 'Store credit available' --><!-- /ko -->присутствующего в vendor/magento/module-customer-balance/view/frontend/web/template/payment/customer-balance.html, но если я пытаюсь изменить текст в моем i18n/en_US.csv, все равно он не работает.

Я очистил кэш и использовал развертывание статического контента.

Есть ли другой способ добавить перевод для шаблонов KO?

Атиш Госвами
источник

Ответы:

39

Так что я наконец-то смог разобраться в проблеме.

Кажется, что чтение шаблона JS считывается из js-translation.jsonкоторого генерируется во время setup:static-content:deployвыполнения. Чтобы заполнить данные в этом файле, необходимо создать новый языковой пакет для проекта.

Таким образом, вместо добавления CSV на уровне темы, как app/design/<area>/<vendor>/<theme-name>/i18n/xx_XX.csvмы должны добавить его в языковой пакет.

Для создания нового языка Пакета первого из project document rootнас необходимо создать следующие директории:

mkdir -p app/i18n/<project-name>/<xx_xx>

Важное замечание: ИСПОЛЬЗУЙТЕ ТОЛЬКО ИМЕНА ИМЕНИ СТРАНИЦЫ в нижнем регистре. Имена папок, записанных на камеру

Затем измените каталог на вновь созданные папки:

cd app/i18n/<project-name>/<xx_xx>

Теперь вы можете создать composer.json(необязательно) файл со следующим содержимым:

{                                                     
    "name": "<project-name>/<xx_xx>",                             
    "description": "<sample description>", //Ex:English (United States) language
    "version": "<version-number>", //100.0.1                             
    "license": [                                      
        "OSL-3.0",                                    
        "AFL-3.0"                                     
    ],                                                
    "require": {                                      
        "magento/framework": "100.0.*"                
    },                                                
    "type": "magento2-language",                      
    "autoload": {                                     
        "files": [                                    
            "registration.php"                        
        ]                                             
    }                                                 
}                                                     

Затем создайте нам language.xmlфайл со следующим содержимым:

<language xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="urn:magento:framework:App/Language/package.xsd">
    <code>xx_XX</code> <!-- example: <code>en_US</code> -->
    <vendor><project-name></vendor>
    <package><xx_xx></package> <!-- example: <package>en_us</package> -->
</language>

После registration.phpчего требуется следующий контент:

\Magento\Framework\Component\ComponentRegistrar::register(
    \Magento\Framework\Component\ComponentRegistrar::LANGUAGE,
    '<project-name>_<xx_xx>',
    __DIR__
);

Теперь мы можем создать наш перевод CSV. Если у вас уже есть один в папке темы что-то вроде этого, app/design/<area>/<vendor>/<theme-name>/i18n/xx_XX.csvвы можете просто переместить его вapp/i18n/<project-name>/<xx_xx>/xx_XX.csv

Теперь project document rootнам нужно выполнить следующие команды:

find pub/static -name js-translation.json -exec rm -rf {} \;

Нам нужно удалить js-translation.jsonуже созданный файл перед запускомsetup:static-content:deploy

Теперь мы запускаем развертывание статического контента:

php bin/magento setup:static-content:deploy <xx_XX>

Как только это будет сделано, мы очищаем кеш:

php bin/magento cache:clean
php bin/magento cache:flush

Мы можем проверить, были ли сгенерированы файлы перевода для шаблона JS, найдя все js-translation.jsonвнутри папки pub / static.

find pub/static -name js-translation.json

Это предоставит список всех файлов перевода, созданных для шаблонов JS.

Ссылка:

  1. Magento DevDocs
  2. Связанный выпуск Github
Атиш Госвами
источник
В моем проекте js-translation.jsonфайлы создаются из статического контента правильно, даже если файлы CSV вставлены в app/design/frontend/vendor/theme-name/i18n/xx_XX.csv. Единственная забота - удалить все js-translation.jsonперед запуском статического контента.
LucScu
На какой версии magento вы работаете?
Атиш Госвами
Vender / Theme, так что из этого следует, что должно быть <имя-проекта> в соответствии с вашим кодом выше ??
Каушал Сутар
1
Это действительно единственный способ сделать это? Я имею в виду, что даже в документации ( devdocs.magento.com/guides/v2.1/frontend-dev-guide/translations/… ) говорится, что мы должны иметь возможность помещать файлы перевода design/<vender>/<theme>/i18n/xx_XX.csv.
Гиль Беркерс
1
В Magento 2 есть много ошибок, связанных с этим, для нас лучшим способом было бы вручную создать скрипт, который создает js-translation.jsonфайл, и настроить веб-сервер, который доставляет его по нужным типам запросов
cjohansson
1

Как я описал в проблеме Github ( https://github.com/magento/magento2/issues/7525#issuecomment-316690100 ), существует другое (более простое) решение этой проблемы.

Вам просто нужно развернуть каждый язык отдельно.

Поэтому вместо использования:

php bin/magento setup:static-content:deploy en_US de_DE it_IT fr_FR es_ES

использование

php bin/magento setup:static-content:deploy en_US
php bin/magento setup:static-content:deploy de_DE
php bin/magento setup:static-content:deploy it_IT
php bin/magento setup:static-content:deploy fr_FR
php bin/magento setup:static-content:deploy es_ES

Вероятно, это связано с тем, что static-content:deployфайлы компилируются только один раз, а затем копируются на другие языки.

FaHu
источник