Traducción de cadenas personalizadas en plantillas de eliminación de temas

8

Sé que este problema se ha tratado varias veces en este foro.

Javascript de localización de Magento2

Magento 2 - problema de traducción en plantillas JS

Magento2 traduce el texto de la plantilla Javascript (KO)

He instalado el paquete de idioma italiano en mi proyecto Magento 2.1.9 y la mayoría de las cadenas están traducidas correctamente.

Agregué un nuevo diccionario de traducción en mi tema.

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

Aquí modifiqué algunas traducciones y agregué las nuevas cadenas de mi tema para traducir. Para las cadenas incluidas en los archivos phtml, todo funciona bien.

Agregué algunas cadenas personalizadas en plantillas de eliminación de pago. Por ejemplo en

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

yo añadí

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

Luego, en mi tema it_IT.csv:

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

Por supuesto, vacié la memoria caché, pub / static / , var / view_preprocessed / , var / generation, etc. y ejecuté todos los comandos.

Las cuerdas todavía están en inglés.

¿Realmente tengo que crear un nuevo paquete de idiomas para traducir algunas cadenas en el pago? ¿Cual es la razón?

EDITAR Las traducciones en línea funcionan para todas las cadenas. Puede ser una forma de solucionarlo temporalmente, pero no la solución definitiva.

nuovecode
fuente
1
También agregaría que otras traducciones funcionan usando este método
springerin

Respuestas:

2

Necesita extender un paquete de idioma, crear un archivo de traducción en el tema no es suficiente.

Este módulo de extensión debe contener:

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__
);

Y por supuesto archivo con traducciones en el idioma deseado.

igloczek
fuente
0

Una solución alternativa (la que finalmente adoptamos) es incluir archivos de traducción en un módulo en lugar de en el tema.

Curiosamente, los módulos csv pueden traducir fácilmente las cadenas js.

Cree un nuevo módulo con:

<?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>\\": ""
    }
  }
}

etc / 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>

y aquí agregaremos todo nuestro archivo de idioma:

i18n / it_IT

i18n / en_US

..

Elegimos este sistema porque el proyecto en el que estamos trabajando tiene muchos idiomas y no queríamos incluir demasiados paquetes de idiomas.

Tenga en cuenta que solo funcionará para nuevas cadenas porque Magento da prioridad a las traducciones de paquetes de idiomas. Pero esta es otra historia.

nuovecode
fuente