本地化
通过Commerce翻译,您可以通过生成以下内容为多个地区和市场自定义商店并使其本地化:
- 翻译词典,这是自定义或翻译 某些 单词和短语(如自定义模块或主题的词典)的简便方法。
- 允许您在Commerce应用程序中翻译 任何或所有 单词和短语的 语言包。
请参阅翻译概述。
生成翻译词典
您可以生成[翻译字典]以自定义现有字符串、在自定义模块中翻译单词和短语、本地化主题或创建语言包。
要开始翻译,请使用命令生成一个词典CSV文件,其中包含所有现有短语和单词的收集列表。
要生成词典并开始翻译,请执行以下操作:
-
使用翻译收集命令从启用的组件中提取可翻译的单词和短语。 内容提取到CSV文件中。
-
翻译现有单词和短语。 您可以根据需要添加其他自定义术语。
您可以选择使用翻译的词典:
-
您可以将翻译字典打包到一个语言包中,并将该包提供给Commerce商店管理员。
-
在管理员中,商店管理员配置翻译。
命令选项:
bin/magento i18n:collect-phrases [-o|--output="<csv file path and name>"] [-m|--magento] <path to directory to translate>
下表说明了参数和值:
<path to directory to translate>
工具开始搜索您输入的路径,并搜索它包含的所有文件和子目录。
如果您使用
-m --magento
,则不要使用此参数。-m --magento
以下示例:
“未找到项目”、“未找到项目”、module、Magento_Wishlist
-o --output="<path>"
如果忽略此参数,输出将定向到stdout。
-m|--magento
选项。翻译准则
翻译单词和短语时,请遵循以下准则:
- 仅更改第二列的内容。 将短语从英语(
US
)翻译成所需的语言。 - 为区域设置创建字典时,使用默认的Commerce字符串。
- 翻译时,请注意占位符:
%1
,%2
Commerce使用占位符插入上下文值;它们 不 用于翻译。 例如:
Product '%1' has been added to shopping cart.
使用一个值填充:
Product 'Multimeter-2000' has been added to shopping cart.
生成的短语必须至少包含每个占位符中的一个。 例如,假设原始短语中存在从%1
到%3
的占位符。 翻译可以按任意顺序包含这些占位符,但必须至少有一个匹配项%1
、%2
和%3
。 转换不能包含原始值中不存在的占位符值(例如,%4
、%5
等)。
翻译短语的示例:
"Buy %1 for %2 (%3 incl. tax) each","Compre %1 por %2 (%3 incl. imposto) cada"
创建语言包
与翻译词典不同,您可以在Commerce应用程序中使用语言包翻译任何或所有单词和短语。 您可以使用翻译词典翻译特定组件(如模块或主题)。 了解有关语言包的更多信息。
此部分讨论如何创建将CSV文件写入模块和主题的语言包。 要创建语言包,您必须执行以下部分中讨论的任务:
- 收集并翻译单词和短语。 (需要
--magento
参数。) - 运行语言包命令。
- 创建目录和文件。
- (可选。) 为一种语言配置多个包。
运行语言包命令
命令用法:
bin/magento i18n:pack [-m|--mode={merge|replace}] [-d|--allow-duplicates] <source> <locale>
下表说明了language package命令的参数和值:
<source>
使用
bin/magento i18n:collect-phrases
创建CSV文件,然后创建语言包,如创建目录和文件中所述。-m --mode
值:合并或替换(默认)。
-d --allow-duplicates
创建目录和文件
语言包位于Commerce文件系统中app/i18n/<VendorName>
下的目录,其中包含以下内容:
- 所需的许可证文件
composer.json
- [注册]语言包的
registration.php
language.xml
元信息文件
de_de
]。要创建这些文件,请执行以下操作:
-
在
app/i18n
下创建目录。例如,Commerce语言包位于
app/i18n/magento
中 -
添加所需的许可证文件。
-
添加指定语言包依赖项的[
composer.json
]。 -
向[
registration.php
]注册语言包 -
按照下一节中所述添加
language.xml
元信息文件。
语言包语言.xml
在language.xml
配置文件中声明语言包时,必须指定此包的语言继承顺序。
语言继承允许您基于名为 父项 的现有翻译创建名为 子项 的翻译。 子翻译将覆盖父翻译。 但是,如果子翻译无法上传或显示或者缺少短语或单词,Commerce将使用父区域设置。 语言包继承示例。
要声明包,请指定以下信息:
<?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_GB</code>
<vendor>magento</vendor>
<package>en_gb</package>
<sort_order>100</sort_order>
<use vendor="oxford-university" package="en_us"/>
</language>
其中:
code
— 语言包区域设置(必需)vendor
— 模块的供应商名称(必需)package
— 语言包名称(必需)sort_order
— 当有多个语言包可用于存储区时,上载包的优先级use
— 要从中继承词典的父语言包区域设置
如有必要,您可以指定多个父包。 父包以首先列出的第一个使用为基础应用。
语言继承示例
假设语言包继承自其他两个包,并且这些包还具有父包和“祖父”包。
如果语言包从两个包继承,则其language.xml
可能如下所示:
<language xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="urn:magento:framework:App/Language/package.xsd">
<code>en_GB</code>
<vendor>magento</vendor>
<package>language_pack</package>
<sort_order>100</sort_order>
<use vendor="parent-package-one" package="language_package_one"/>
<use vendor= "parent-package-two" package="language_package_two"/>
</language>
在上例中:
language_package_one
继承自en_au_package
,en_au_package
继承自en_ie_package
language_package_two
继承自en_ca_package
,en_ca_package
继承自en_us_package
如果Commerce应用程序在en_GB
包中找不到单词或短语,则会按以下顺序查看其他包:
parent-package-one/language_package_one
<vendorname>/en_au_package
<vendorname>/en_ie_package
parent-package-two/language_package_two
<vendorname>/en_ca_package
<vendorname>/en_us_package
指定语言包之间的所有继承可能会导致创建循环继承链。 使用Magento\Test\Integrity\App\Language\CircularDependencyTest测试来查找和修复此类链。
为一种语言配置多个包
为了帮助您使商店更灵活,您可以在商店中上传多个相同语言的语言包。 因此,您可以对商店的不同部分使用不同的自定义包,因为系统从可用于某种语言的所有包中编译单个包。
要为现有语言启用其他包,请为新包命名除现有语言代码名称之外的任何名称(以避免混淆)。 在语言包的language.xml
元信息文件中指定包的配置,如下一节所述。
使用翻译命令的示例
以下部分提供了使用本主题中讨论的命令创建翻译词典和翻译包的端到端示例:
示例:为模块或主题创建翻译字典
要将德语翻译添加到要分发给其他商家的模块或主题,请执行以下操作:
-
从模块中收集短语:
code language-bash bin/magento i18n:collect-phrases -o "/var/www/html/magento2/app/code/ExampleCorp/SampleModule/i18n/xx_YY.csv" /var/www/html/magento2/app/code/ExampleCorp/SampleModule
note info INFO CSV文件名必须_与_区域设置完全匹配,包括字符的大小写。 -
使用这些指南翻译单词和短语。
-
如有必要,请将
xx_YY.csv
复制到/var/www/html/magento2/app/code/ExampleCorp/SampleModule/i18n
或模块的主题目录(具体取决于翻译词典是用于模块还是主题)。
示例:创建语言包
与上述示例类似,生成CSV文件,但不要指定模块或主题目录,而是指定整个Commerce应用程序根目录。 生成的CSV包含命令可在代码中找到的所有短语。
-
从模块中收集短语:
code language-bash bin/magento i18n:collect-phrases -o "/var/www/html/magento2/xx_YY.csv" -m
note info INFO CSV文件名必须_与_区域设置完全匹配,包括字符的大小写。 -
使用这些指南翻译单词和短语。
-
创建语言包。
code language-bash bin/magento i18n:pack /var/www/html/magento2/xx_YY.csv -d xx_YY
-
为语言包创建目录。
例如,
/var/www/html/magento2/app/i18n/ExampleCorp/xx_yy
-
在该目录中,添加以下所有内容:
- 许可(如果需要)
composer.json
(示例关注)registration.php
(示例关注)language.xml
(示例关注)
示例
composer.json
:code language-json { "name": "examplecorp/language-xx_yy", "description": "Sample language", "version": "100.0.2", "license": [ "OSL-3.0", "AFL-3.0" ], "require": { "magento/framework": "100.0.*" }, "type": "magento2-language", "autoload": { "files": [ "registration.php" ] } }
示例
registration.php
:code language-php <?php /** * Copyright [first year code created] Adobe * All Rights Reserved. */ use Magento\Framework\Component\ComponentRegistrar; ComponentRegistrar::register( ComponentRegistrar::LANGUAGE, 'magento_xx_yy', __DIR__ );
示例
language.xml
:code language-xml <?xml version="1.0"?> <!-- Copyright [first year code created] Adobe All Rights Reserved. --> <language xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="urn:magento:framework:App/Language/package.xsd"> <code>xx_YY</code> <vendor>examplecorp</vendor> <package>xx_yy</package> </language>