PrestaShop电子邮件本地化

PrestaShop电子邮件本地化,prestashop,Prestashop,我正在为PrestaShop 1.5开发一个模块 我发送的电子邮件是这样的(文档确实丢失了,我研究了其他默认组件,这就是我目前得到的) 注意我试过用 Mail::l('Hello', $this->context->language->id),//string $subject 及 作为电子邮件的主题 我一直在说“没有为……找到主题”。客户收到的是我在源代码中输入的硬编码字符串 因此,如何消除此错误: 另外,电子邮件显然是以随机语言(有时是英语,有时是意大利语)发送的。在模块

我正在为PrestaShop 1.5开发一个模块

我发送的电子邮件是这样的(文档确实丢失了,我研究了其他默认组件,这就是我目前得到的)

注意我试过用

Mail::l('Hello', $this->context->language->id),//string $subject

作为电子邮件的主题

我一直在说“没有为……找到主题”。客户收到的是我在源代码中输入的硬编码字符串

因此,如何消除此错误:
另外,电子邮件显然是以随机语言(有时是英语,有时是意大利语)发送的。

在模块中,必须在subject参数中使用Mail::l()。 下面是模块的Mail::Send()示例:

Mail::Send($this->context->language->id,
    'test',
    Mail::l('test subject', $this->context->language->id),
    array(),
    $to_email);

以下是电子邮件翻译的工作原理:

AdminTranslationController将在“/modules/[module folder]/mails/”中签入模板,并在“/mails/[lang]/lang.php”中签入主题。提交翻译时将创建主题


如果这不起作用,可能是文件夹的权限有问题。 打开此文件:

/prestashop/mails/it/lang.php

检查是否有这样一行:

$_LANGMAIL['Email subject'] = 'translation in italian';

如果没有,请检查此文件和父文件夹的web服务器权限。

我现在在使用Prestashop版本1.5.5.0时遇到了相同的问题

在某些情况下,getSubjectMail()方法无法识别电子邮件模板,因此无法将其与主题匹配。关键是,虽然此方法查找要翻译的主题,但它将php文件解析为纯文本。因此,所有变量都未解析

在我的例子中,我从模块的控制器调用Mail:Send,它看起来像:

Mail::Send(
    $id_lang,
    $template, // <- don't use variable here, rather type email template there directly.
    Mail::l('Message from footer contact form'),
    $template_vars,
    $contact->email,
    $contact->name,
    ($is_email ? $from : Configuration::get('PS_SHOP_EMAIL')),
    '',
    null, // file attachment
    null, // mode smtp
    $this->module->_mailpath
);
Mail::Send(
$id_lang,
$template,//电子邮件模板(不仅仅是它们)在Presta中非常混乱。因为我安装了一个自定义主题,所以现在它们位于6个不同的位置(!!)

这不会是一个麻烦,但它似乎和我一样困惑。它从一个位置获取模板进行编辑,然后依次保存到另一个位置,并在实际创建邮件时从第三个位置(对于模块)获取模板

因此,我可以编辑一次模板,但保存后,它似乎被还原,因为它实际上被保存到另一个位置

所以我所做的是:我从默认的主题文件夹(“邮件”和“模块/邮件提醒/邮件”)和我的自定义主题中删除了模块的模板(“邮件提醒”)

如果你这样做了,在删除它们之前只需保留一份副本,因为你可能会丢失一些你已经在那里做过的翻译


确定一个且仅一个您想要保存它们的位置(对我来说,它是原始的“邮件”resp“模块”文件夹),然后仅从此位置编辑它们。对于此处提到的位置,您可以从“翻译”下拉列表中选择“核心”选项管理页面。

但我需要在组件安装时自动完成此操作,并且如果用户修改某些标签,则不会删除此操作。如果您使用
Mail::l('Email subject',$this->context->language->id),则会自动完成此操作
在Mail::Send的主题参数中。我在扩展模块,你在谈论控制器,有些不对劲。我在谈论管理翻译的AdminTranslationController,以解释其工作原理。对于你的模块,请阅读第一段。关键是不要使用变量!!Prest的设计糟糕透顶灰烬,模糊的限制。
$_LANGMAIL['Email subject'] = 'translation in italian';
Mail::Send(
    $id_lang,
    $template, // <- don't use variable here, rather type email template there directly.
    Mail::l('Message from footer contact form'),
    $template_vars,
    $contact->email,
    $contact->name,
    ($is_email ? $from : Configuration::get('PS_SHOP_EMAIL')),
    '',
    null, // file attachment
    null, // mode smtp
    $this->module->_mailpath
);