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模板添加翻译?

Answers:


39

所以我终于能够找出问题所在。

似乎从中读取JS模板翻译js-translation.json,并在setup:static-content:deploy执行过程中生成该模板。为了在此文件中填充数据,必须为项目创建一个新的语言包

因此,app/design/<area>/<vendor>/<theme-name>/i18n/xx_XX.csv与其像在主题级别添加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-translation.json在pub / static文件夹内查找所有内容来验证JS模板的翻译文件是否已生成。

find pub/static -name js-translation.json

这将提供为JS模板生成的所有翻译文件的列表。

参考:

  1. Magento开发文档
  2. 相关的Github问题

在我的项目js-translation.json中,即使将.csv文件插入,也可以从静态内容部署中正确创建文件app/design/frontend/vendor/theme-name/i18n/xx_XX.csv。唯一需要注意的是js-translation.json在运行静态内容部署之前先全部删除。
LucScu

您使用的是哪个版本的magento?
Atish Goswami

供应商/主题,因此根据您上面的代码,应为<project-name>?
Kaushal Suthar '16

1
这真的是唯一的方法吗?我的意思是,即使文档(devdocs.magento.com/guides/v2.1/frontend-dev-guide/translations/…)指出我们也应该能够将翻译文件放入design/<vender>/<theme>/i18n/xx_XX.csv
吉尔·伯克斯

1
Magento 2有很多与此相关的错误,对我们来说,最好的方法是手动创建一个脚本,该脚本创建js-translation.json文件并进行Web服务器配置以将其发送给正确的请求
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仅将文件编译一次,然后将其复制到其他语言。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.