PrestaShop class 覆盖中新翻译的正确域是什么?

What is the correct domain for a new translation in a PrestaShop class override?

你能帮我在 $this->trans() 函数中使用“domain”参数吗?

在我自己的模块中,我有一个 CartRule class 的覆盖。我的覆盖工作正常 - Presta 和代码功能将其从我的模块复制到覆盖文件夹。

我里面有一个新的翻译字符串,我不知道给“domain”赋什么值。

我的代码:

$this->trans('Promotion codes cannot be combined', array(), 'Shop.Notifications.Error'); \ ID, parameters, domain

我试过的域名:

  1. "Shop.Notifications.Error"(与其他字符串相同):然后在 BO > 主题翻译 > 我的主题(或 classic 主题)> 法语(存储语言)

  2. "Modules.[Mymodule].Admin"(对于 Mymodule,我使用了大写的简称):然后查看 BO > 模块翻译 > 我的模块 > 法语(商店语言)。这种方法遵循 PrestaShop rules.

每次都找不到我的字符串。

你有什么想法吗?

N.B。 SO 上的其他答案使用 $this->l ,这在这种情况下不可用。 我也试过 $this->module->trans() 但“模块”在这种情况下不可用。

首先,在您的模块中,我们必须指定哪些字符串是可翻译的。

Prestashop(版本 1.7.5 及更早版本)的翻译:

TPL:

    {l s='My text to translate' mod='modulename'}

PHP:

    $this->module->l('My text to translate');

为 Prestashop(版本 1.7.6 和更新版本)翻译:

TPL:

    {l s='My text to translate' d='Modules.Modulename.Somefile'}

树枝:

    {{ 'My text to translate'|trans({}, 'Modules.Modulename.Admin') }}

PHP:

    // For back-office translations we use "Admin"
    $this->trans('My text to translate', array(), 'Modules.Modulename.Admin');

    // For front-office translations we use "Shop"
    $this->trans('My text to translate', array(), 'Modules.Modulename.Shop');

Ash 你可以看到我们需要声明它是来自 Module 的可翻译字符串,使用 Modulename(大写),然后定义可翻译字符串的位置 Admin, shop

重要提示 使用 prestashop 新的翻译系统需要在你的模块中声明。所以在你的主 php 文件中,mymodule.php 添加以下代码:

    public function isUsingNewTranslationSystem()
    {
        return true;
    }

PrestaShop 开发人员文档(翻译)

有关 Classic 模块翻译系统(1.7.5 和 <)的信息可以是 found here

有关新模块翻译系统(1.7.6 和 >)的信息可以是 found here

正在翻译您的模块:

定义所有可翻译字符串后,我们将模块安装到 Prestashop web-shop。

当我们的模块安装完成后,我们必须去:

  1. 后台
  2. 国际 -> 翻译
  3. 修改翻译
  4. 翻译类型 -> 安装的模块翻译
  5. Select 你的模块 -> modulename
  6. Select您的语言 -> 您要翻译的语言

此进度将在您的模块中生成一个翻译文件 (.php)。

翻译文件位置:modulename/translations/isocode.php

值得一提的是,如果您有一个已翻译的 PHP 模块文件(示例 en.php),您可以翻译相同的文件,en.php,多次归档并将其保存在不同的 isocode 下,例如 nl.php.