phpro / mage2-module-translations
通过 Magento 后端管理翻译
Requires
- php: ^8.2
- magento/framework: ^102.0|^103.0
- magento/module-backend: ^101.0|^102.0
- magento/module-ui: ^101.0|^102.0
Requires (Dev)
- friendsofphp/php-cs-fixer: ~3.59.0
- magento/magento-coding-standard: ^33
- php-parallel-lint/php-parallel-lint: ^1.3
- phpro/grumphp-shim: ^2.6
- phpunit/phpunit: ^9.5
- squizlabs/php_codesniffer: ~3.7
README
Magento 2 翻译模块
Phpro_Translations
模块可以帮助您通过 Magento 后端管理翻译。
特性
- 简单的 CRUD 操作管理翻译
- 通过网格概览进行单行和多行编辑
- 通过 CLI 使用 CSV 文件导入和导出
- 通过默认的 Magento 导入/导出功能导入和导出
- 通过数据补丁脚本准备新的翻译
- (重新)生成前端翻译(JSON 翻译文件)通过 CLI 和后端
安装
composer require phpro/mage2-module-translations
最终用户文档
使用(技术)
地区
所有地区都必须以 ISO 格式定义。地区 = ISO-639(语言)+ "_" + ISO-3166(国家)。
地区示例:en_US, nl_BE, nl_NL, fr_BE, de_DE, ...
导入和导出
导入 Magento 翻译 CSV
CSV 结构必须是(键,值)
"Transkey 1","Transvalue 2"
"Transkey 2","Transvalue 2"
...
使用 phpro:translations:import
命令导入特定地区的 CSV 文件。重复记录将被跳过,不会应用更新。
bin/magento phpro:translations:import /path/to/cs_CZ/cs_CZ.csv cs_CZ --clear-cache
输出
Importing CSV file /path/to/cs_CZ/cs_CZ.csv for locale cs_CZ
#created: 193
#skipped: 4
#failed: 0
Caches cleared: full_page, block_html, translate
Done!
导出到 CSV
使用 phpro:translations:export
命令将数据库翻译导出到一个或多个地区的 CSV 文件。使用空格分隔多个地区。导出的 CSV 文件将写入 Magento 的 var/translations
文件夹。
bin/magento phpro:translations:export nl_BE cs_CZ
输出
Exporting translations to CSV file
Csv file: /path/to/var/translations/20190531_085402_export_nl_BE_cs_CZ.csv
Total written rows: 390
Done!
CSV 结构
"New Account","Nieuwe account",nl_BE
"My Wish List","Mijn verlanglijst",nl_BE
"New Account","Nový účet",cs_CZ
"My Wish List","Mé oblíbené",cs_CZ
...
导入 CSV(包括地区)
您可以使用导出的 CSV 文件(夹)在其他环境中导入。例如,您可以在预览环境中准备新的翻译,稍后在生产环境中导入它们。
CSV 结构必须是(键,值,地区)
"Transkey 1","Transvalue 2",nl_BE
"Transkey 2","Transvalue 2",nl_BE
"Transkey 1","Transvalue 2",fr_BE
"Transkey 2","Transvalue 2",fr_BE
...
使用 phpro:translations:import-full
命令导入 CSV 文件。重复记录将被跳过,不会应用更新。
bin/magento phpro:translations:import-full /path/to/full_import_nl_BE_cs_CZ.csv --clear-cache
输出
Importing CSV file /path/to/full_import_nl_BE_cs_CZ.csv
#created: 10
#skipped: 380
#failed: 0
Caches cleared: full_page, block_html, translate
Done!
通过后端导入
转到“系统”→(数据传输)→“导入”以创建或更新基于 CSV 文件的翻译。请参阅我们的最终用户文档。
重新生成前端翻译
生成/重新生成前端翻译将生成包含所有前端/JS 翻译的 JSON 文件。这些文件存储在 pub/media/phpro_translations
目录中,它们位于相关的主题/地区子目录中。
通过后端
- 在管理员中转到“翻译 -> 生成前端翻译”。选择“所有商店视图”或选择特定的视图。点击“生成翻译文件”按钮。
- 通过“系统 -> 缓存管理”清除整个页面和块 HTML 缓存。
- 请参阅最终用户文档
通过 CLI
- 使用
phpro:translations:generate-frontend-translations
命令重新生成新的 JSON 文件 - 请确保您手动清除 full_page 和 block_html 缓存,以应用和启用最新的翻译 JSON 文件。
为单个商店视图重新生成
指定 storeId
参数以针对特定商店视图(地区)重新生成。使用 bin/magento store:list
命令显示商店 ID。
bin/magento phpro:translations:generate-frontend-translations 5
为所有商店视图重新生成
留空 storeId
参数以针对所有商店视图重新生成。
bin/magento phpro:translations:generate-frontend-translations
在构建过程中
我们建议在 setup:upgrade --keep-generated
步骤之后,使用 phpro:translations:generate-frontend-translations
重新生成所有前端翻译,然后在禁用维护之前。
浏览器缓存优化
翻译的JSON文件存储在具有特定版本字符串的目录pub/media/phpro_translations
中。您可以通过配置Cache-Control头来选择让浏览器最优地缓存这些文件。以下是一个Nginx示例。
location /media/phpro_translations/ {
add_header X-Frame-Options "SAMEORIGIN";
add_header Cache-Control "public";
expires +1y;
}
从代码库收集翻译
使用phpro:translations:prepare-keys
命令从代码库收集翻译短语并准备它们。这将为每个可用的区域创建翻译。
在开发期间添加翻译
要准备、创建或删除翻译,您可以将\Phpro\Translations\Api\TranslationDataManagementInterface
作为依赖项注入到您的模块的数据补丁脚本中。
准备
为Magento实例的所有启用区域添加翻译键。如果没有设置默认翻译,则翻译键将用作默认翻译。
use Magento\Framework\Setup\Patch\DataPatchInterface;
use Magento\Framework\Setup\Patch\NonTransactionableInterface;
use Phpro\Translations\Model\TranslationDataManagement;
class HelloWorldTranslations implements DataPatchInterface, NonTransactionableInterface
{
private TranslationDataManagement $translationDataManagement;
public function __construct(
TranslationDataManagement $translationDataManagement
) {
$this->translationDataManagement = $translationDataManagement;
}
public function apply()
{
$this->translationDataManagement->prepare('Hello world!');
$this->translationDataManagement->prepare('Welcome %1', 'Hello %1');
// other translation keys here...
}
}
创建
为指定区域添加翻译。
use Magento\Framework\Setup\Patch\DataPatchInterface;
use Magento\Framework\Setup\Patch\NonTransactionableInterface;
use Phpro\Translations\Model\TranslationDataManagement;
class HelloWorldTranslations implements DataPatchInterface, NonTransactionableInterface
{
private TranslationDataManagement $translationDataManagement;
public function __construct(
TranslationDataManagement $translationDataManagement
) {
$this->translationDataManagement = $translationDataManagement;
}
public function apply()
{
$this->translationDataManagement->create('Hello world!', 'Hallo wereld!!!', ['nl_NL', 'nl_BE']);
$this->translationDataManagement->create('Hello world!', 'Hello world!!!', ['en_US']);
// other translation keys here...
}
}
删除
删除指定翻译键和区域(s)的翻译。如果没有指定区域,则将使用所有启用的区域进行删除。
use Magento\Framework\Setup\Patch\DataPatchInterface;
use Magento\Framework\Setup\Patch\NonTransactionableInterface;
use Phpro\Translations\Model\TranslationDataManagement;
class DeleteHelloWorldTranslations implements DataPatchInterface, NonTransactionableInterface
{
private TranslationDataManagement $translationDataManagement;
public function __construct(
TranslationDataManagement $translationDataManagement
) {
$this->translationDataManagement = $translationDataManagement;
}
public function apply()
{
$this->translationDataManagement->delete('Hello world!');
$this->translationDataManagement->delete('Welcome %1', ['nl_BE', 'nl_NL']);
// other translation keys here...
}
}
PWA
可以使用复选框"前端"来标记需要导出到PWA安装的翻译。通过REST API调用,可以从PWA翻译文件中检索并存储翻译。
可以在构建脚本中使用的API调用
curl -G -k -H "Authorization: Bearer <token>" --data-urlencode "searchCriteria[filter_groups][0][filters][0][field]=frontend" --data-urlencode "searchCriteria[filter_groups][0][filters][0][value]=1" --data-urlencode "searchCriteria[filter_groups][1][filters][0][field]=locale" --data-urlencode "searchCriteria[filter_groups][1][filters][0][value]=<locale>" <Magento base url>rest/V1/phpro-translations/translation/search
Hyvä
安装Hyvä兼容性模块。最低版本为1.2.3。
composer require hyva-themes/magento2-phpro-translations