Перевод пользовательских строк в шаблоны тем оформления

8

Я знаю, что эта проблема уже обсуждалась несколько раз на этом форуме.

Magento2 локализация Javascript

Magento 2 - проблема перевода в шаблонах JS

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

Я установил итальянский языковой пакет в свой проект Magento 2.1.9, и большинство строк переведены правильно.

Я добавил новый словарь перевода в моей теме.

vendor/<Vendor>/<Theme>/i18n/it_IT.csv

Здесь я изменил некоторые переводы и добавил новые строки моей темы для перевода. Для строк, включенных в phtml-файлы, все работает отлично.

Я добавил несколько пользовательских строк в нокаут-шаблоны оформления заказа. Например в

<My-theme>/Magento_Checkout/web/template/authentication.html 

я добавил

<span data-bind="i18n: 'Do you already have an account?'"></span>

Тогда в моей теме it_IT.csv:

"Do you already have an account?","Hai già un account?"

Конечно, я опустошил кеш, pub / static / , var / view_preprocessed / , var / generation и т. Д. И запустил все команды.

Строки все еще на английском языке.

Мне действительно нужно создать новый языковой пакет для перевода нескольких строк в кассе? В чем причина?

РЕДАКТИРОВАТЬ Онлайн переводы работают для всех строк. Это может быть способ исправить это временно, но не окончательное решение.

nuovecode
источник
1
я также добавил бы, что другие переводы работают с использованием этого метода
springerin

Ответы:

2

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

Этот модуль расширения должен содержать:

composer.json

{
  "name": "snowdog/project-language-translations",
  "description": "Some translations for some project",
  "type": "magento2-language",
  "require": {
    "magento/framework": "^100.0.0"
  },
  "autoload": {
    "files": [
      "registration.php"
    ]
  }
}

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>en_US</code>
    <vendor>snowdog</vendor>
    <package>en_us_custom</package>
</language>

registration.php

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

И конечно файл с переводами на желаемый язык.

igloczek
источник
0

Альтернативное решение (которое мы в итоге приняли) - включить файлы переводов в модуль, а не в тему.

Как ни странно, модули CSV могут легко переводить строки JS.

Создайте новый модуль с:

<?php
use \Magento\Framework\Component\ComponentRegistrar;
ComponentRegistrar::register(ComponentRegistrar::MODULE,
    '<Vendor>_<Module>',
    __DIR__
);

composer.json

{
  "name": "vendor/module",
  "description": "Project custom translations",
  "require": {
    "php": "7.0.2|7.0.4|~7.0.6"
  },
  "type": "magento2-module",
  "autoload": {
    "files": [ "registration.php" ],
    "psr-4": {
      "<Vendor>\\<Module>\\": ""
    }
  }
}

и т.д. / module.xml

<config xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="urn:magento:framework:Module/etc/module.xsd">
    <module name="<Vendor>_<Module>" setup_version="1.0.0" />
</config>

и здесь мы добавим все наши языковые файлы:

i18n / it_IT

i18n / en_US

..

Мы выбрали эту систему, потому что в проекте, над которым мы работаем, много языков, и мы не хотели включать слишком много языковых пакетов.

Обратите внимание, что он будет работать только для новых строк, потому что Magento отдает приоритет переводам языковых пакетов. Но это другая история.

nuovecode
источник