Magento2 tłumaczy tekst szablonu Javascript (KO)

24

Próbuję dodać tłumaczenie <!-- ko i18n: 'Store credit available' --><!-- /ko -->obecnego tekstu vendor/magento/module-customer-balance/view/frontend/web/template/payment/customer-balance.html, ale jeśli spróbuję go zmienić i18n/en_US.csv, nadal nie działa.

Wyczyściłem pamięć podręczną i użyłem wdrażania zawartości statycznej.

Czy istnieje inny sposób dodawania tłumaczeń dla szablonów KO?

Atish Goswami
źródło

Odpowiedzi:

39

W końcu udało mi się rozwiązać problem.

Wydaje się, że odczytywane jest tłumaczenie szablonu JS, z js-translation.jsonktórego generowane jest podczas setup:static-content:deploywykonywania. Aby wypełnić dane w tym pliku, należy utworzyć nowy pakiet językowy dla projektu.

Zamiast dodawać CSV na poziomie motywu, tak jak app/design/<area>/<vendor>/<theme-name>/i18n/xx_XX.csvmusimy dodać go w pakiecie językowym.

Aby najpierw utworzyć nowy pakiet językowyproject document root , musimy utworzyć następujące katalogi:

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

Ważne : UŻYWAJ WYŁĄCZNIE TYLNYCH NAZW KATALOGOWYCH Nazwy folderów zamaskowanych nie będą działać

Następnie zmień katalog na nowo utworzone foldery:

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

Teraz możesz utworzyć composer.json(opcjonalny) plik o następującej treści:

{                                                     
    "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"                        
        ]                                             
    }                                                 
}                                                     

Następnie utwórz language.xmlplik z następującą zawartością:

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

Później niż registration.phpzawiera następującą treść:

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

Teraz możemy utworzyć nasz CSV tłumaczenia. Jeśli masz go już w folderze motywu, app/design/<area>/<vendor>/<theme-name>/i18n/xx_XX.csvmożesz go po prostu przenieśćapp/i18n/<project-name>/<xx_xx>/xx_XX.csv

Teraz project document rootmusimy uruchomić następujące polecenia:

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

Musimy usunąć ten, js-translation.jsonktóry został już utworzony przed uruchomieniemsetup:static-content:deploy

Teraz uruchamiamy wdrażanie zawartości statycznej:

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

Gdy to zrobisz, wyczyścimy pamięć podręczną:

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

Możemy sprawdzić, czy pliki tłumaczeń dla szablonu JS zostały wygenerowane, znajdując cały js-translation.jsonfolder pub / static.

find pub/static -name js-translation.json

Spowoduje to wyświetlenie listy wszystkich plików tłumaczeń wygenerowanych dla szablonów JS.

Odniesienie:

  1. Magento DevDocs
  2. Powiązany problem z Github
Atish Goswami
źródło
W moim projekcie js-translation.jsonpliki są tworzone poprawnie ze statycznego wdrażania zawartości, nawet jeśli pliki .csv są wstawione app/design/frontend/vendor/theme-name/i18n/xx_XX.csv. Jedyne, co należy zrobić, to usunąć wszystko js-translation.jsonprzed uruchomieniem wdrażania zawartości statycznej.
LucScu,
W której wersji Magento korzystasz?
Atish Goswami
Vender / Theme, więc z tego, czym powinien być <project-name> zgodnie z powyższym kodem?
Kaushal Suthar
1
Czy to naprawdę jedyny sposób, aby to zrobić? To znaczy, nawet dokumentacja ( devdocs.magento.com/guides/v2.1/frontend-dev-guide/translations/… ) stwierdza, że ​​powinniśmy być w stanie umieścić pliki tłumaczeń design/<vender>/<theme>/i18n/xx_XX.csv.
Giel Berkers,
1
Magento 2 ma wiele związanych z tym błędów, dla nas najlepszym sposobem było ręczne utworzenie skryptu, który utworzy js-translation.jsonplik i skonfigurowanie serwera WWW, który będzie dostarczał odpowiednie typy żądań
cjohansson,
1

Jak opisałem w numerze Github ( https://github.com/magento/magento2/issues/7525#issuecomment-316690100 ) istnieje inne (łatwiejsze) rozwiązanie tego problemu.

Musisz tylko wdrożyć każdy język osobno.

Zamiast używać:

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

posługiwać się

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

Jest to prawdopodobnie spowodowane faktem, że static-content:deploypliki są kompilowane tylko raz, a następnie kopiowane do innych języków.

FaHu
źródło