Menerjemahkan string khusus ke template knockout tema

8

Saya tahu bahwa masalah ini telah beberapa kali ditangani di forum ini

Javascript pelokalan Magento2

Magento 2 - menerjemahkan masalah dalam template JS

Magento2 menerjemahkan teks templat Javascript (KO)

Saya telah menginstal paket bahasa Italia di proyek Magento 2.1.9 saya dan sebagian besar string diterjemahkan dengan benar.

Saya menambahkan kamus terjemahan baru di tema saya.

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

Di sini saya telah memodifikasi beberapa terjemahan dan menambahkan string baru tema saya untuk diterjemahkan. Untuk string yang termasuk dalam file phtml semuanya berfungsi dengan baik.

Saya menambahkan beberapa string khusus dalam template knokout checkout. Misalnya dalam

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

saya tambahkan

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

Kemudian dalam tema saya it_IT.csv:

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

Tentu saja saya mengosongkan cache, pub / static / , var / view_preprocessed ,, var / generation, dll. Dan saya menjalankan semua perintah.

Senarnya masih dalam bahasa Inggris.

Saya benar-benar harus membuat paket bahasa baru untuk menerjemahkan beberapa string di checkout? Apa alasannya?

EDIT Terjemahan online berfungsi untuk semua string. Ini bisa menjadi cara untuk memperbaikinya sementara tetapi bukan solusi definitif.

nuovecode
sumber
1
saya juga akan menambahkan bahwa terjemahan lain berfungsi menggunakan metode ini
springerin

Jawaban:

2

Anda perlu memperpanjang paket bahasa, membuat file terjemahan dalam tema tidak cukup.

Modul ekstensi ini harus mengandung:

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

Dan tentu saja file dengan terjemahan dalam bahasa yang diinginkan.

igloczek
sumber
0

Solusi alternatif (yang akhirnya kami adopsi) adalah memasukkan file terjemahan ke dalam modul alih-alih dalam tema.

Anehnya modul csv dapat dengan mudah menerjemahkan string js.

Buat modul baru dengan:

<?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>

dan di sini kita akan menambahkan semua file bahasa kita:

i18n / it_IT

i18n / en_US

..

Kami memilih sistem ini karena proyek yang sedang kami kerjakan memiliki banyak bahasa dan kami tidak ingin memasukkan terlalu banyak paket bahasa.

Perhatikan bahwa ini hanya akan berfungsi untuk string baru karena Magento mengutamakan terjemahan paket bahasa. Tapi ini cerita lain.

nuovecode
sumber