4

我有一个多语言的 Magento 网站。我已经设置了语言包,网站上的所有内容似乎都可以正确翻译。交易电子邮件也以正确的语言发送,但“忘记密码电子邮件始终以德语发送。这是我所做的:

  • 安装语言包并确保所有模板和文件夹结构正确。例子:/app/locale/nl_NL/template/email/
  • System » Transactional Emails下:我应用了模板,选择了区域设置并保存。
  • 然后我转到System » Configuration » Sales Emails ,从“ Current Configuration Scope ”下拉菜单切换到每种语言,并选择我在 Transactional Emails 中为每种语言(每个商店视图)创建的模板。

在网上四处寻找解决方案后,似乎其他人也遇到了这个问题,有人提到 Magento 正在从/app/locale/中找到的第一个语言环境文件夹中选择“忘记密码”模板。就我而言,我有:de_DE, en_US, fr_FR, nl_NL. 所以它从德国de_DE包中挑选模板。

注意:此外,在“配置”下的后端,左侧有一个名为“LOCALE PACKS”的选项卡,它下面只有“Locale de_DE”,即使我有其他语言包没有出现在这里。不确定这是否相关。

网站:http ://site1.cp1.glimworm.com/magento/

Magento 社区版本:1.7.0.2

语言环境包:

  • Mage_Locale_en_US
  • Locale_Mage_community_de_DE
  • Locale_Mage_community_fr_FR
  • Mage_Locale_nl_NL

知道如何从要发送的相应语言中获取正确的电子邮件模板,而不是始终使用德语吗?任何帮助将不胜感激!我也可以提供更多信息。

4

8 回答 8

5

我在 magento v1.5 中有同样的问题。经过长时间的研究,我发现了这个解决方案并且它对我有用。

Mage/Customer/Model/Customer.php

in this file i have make some changes as following.
find this line of code
if (!$storeId) 
{
    $storeId = $this->_getWebsiteStoreId($this->getSendemailStoreId());
}

and replace with

$storeId = ($storeId == '0')?$this->getSendemailStoreId():$storeId;
if ($this->getWebsiteId() != '0' && $storeId == '0') 
{
    $storeIds = Mage::app()->getWebsite($this->getWebsiteId())->getStoreIds();
    reset($storeIds);
    $storeId = current($storeIds);
}
于 2013-07-01T13:57:52.197 回答
3

我遇到了同样的问题,看起来 user2282917 的解决方案只需稍作修改即可:

您应该编辑Customer.php中的sendPasswordResetConfirmationEmail函数,而不是 sendNewAccountEmail。尝试替换那里的代码,它将起作用。

于 2013-11-07T14:48:17.410 回答
1

在我们的案例中......我们发现当管理员创建客户帐户时,“电子邮件发送自”选项未保存,仅用于第一个帐户创建电子邮件。任何后续发送的电子邮件都是从分配给客户的网站的默认商店视图发送的。

真正的问题是,当没有设置客户商店 ID 时如何识别。

当商店 id 为 0(管理员或未设置)时,方法sendPasswordResetConfirmationEmail (Magento 1.9.1),默认为_getWebsiteStoreId,它将返回与该网站关联的第一个商店 id。

问题是 Magento 假定与网站 id 关联的第一个商店 id 是默认商店……我们发现,当针对商店记录设置排序顺序时,情况并非如此。

简单地说,确保与网站相关联的默认商店也以 0 的排序顺序指定。

于 2015-04-02T11:28:17.820 回答
1

覆盖 AccountController.php 上的 forgotPasswordPostAction 控制器。您需要设置正确的商店 ID,以便使用区域设置。

/**
 * Forgot customer password action
 */
public function forgotPasswordPostAction()
{
    $email = (string) $this->getRequest()->getPost('email');
    if ($email) {
        if (!Zend_Validate::is($email, 'EmailAddress')) {
            $this->_getSession()->setForgottenEmail($email);
            $this->_getSession()->addError($this->__('Invalid email address.'));
            $this->_redirect('*/*/forgotpassword');
            return;
        }

        /** @var $customer Mage_Customer_Model_Customer */
        $customer = $this->_getModel('customer/customer')
            ->setWebsiteId(Mage::app()->getStore()->getWebsiteId())
            ->loadByEmail($email);

        if ($customer->getId()) {
            try {
                $newResetPasswordLinkToken =  $this->_getHelper('customer')->generateResetPasswordLinkToken();
                $customer->changeResetPasswordLinkToken($newResetPasswordLinkToken);

                // Add store ID so that correct locale will be set
                $customer->setStoreId(Mage::app()->getStore()->getId());

                $customer->sendPasswordResetConfirmationEmail();
            } catch (Exception $exception) {
                $this->_getSession()->addError($exception->getMessage());
                $this->_redirect('*/*/forgotpassword');
                return;
            }
        }
        $this->_getSession()
            ->addSuccess( $this->_getHelper('customer')
            ->__('If there is an account associated with %s you will receive an email with a link to reset your password.',
                $this->_getHelper('customer')->escapeHtml($email)));
        $this->_redirect('*/*/');
        return;
    } else {
        $this->_getSession()->addError($this->__('Please enter your email.'));
        $this->_redirect('*/*/forgotpassword');
        return;
    }
}
于 2014-10-01T09:20:19.230 回答
1

在下面的文件 Mage/Customer/Model/Customer.php

在 sendPasswordResetConfirmationEmail 函数()中更改

$storeId = $this->getStoreId();

$storeId = 法师::app()->getStore()->getStoreId();

谢谢

于 2014-10-20T10:44:16.497 回答
0

密码重置电子邮件以Mage_Customer_Model_Customer::_sendEmailTemplate(). 此处已加载电子邮件模板。如果它在“Systemn > Transactional Emails”的管理员中加载并配置为使用,则将使用您的模板。

否则默认模板是从Mage_Core_Model_Email_Template::sendTransactional. 这是通过使用$this->loadDefault($templateId, $localeCode);加载的模板完成的

$templateText = Mage::app()->getTranslator()->getTemplateFile(
            $data['file'], 'email', $locale
        );

此处按以下顺序检查语言环境文件夹:

  1. 指定的语言环境
  2. 默认商店的语言环境
  3. en_US 语言环境

选择第一个匹配的语言环境。由于Mage::app()不知道与电子邮件模板一起传递的存储,因此加载了默认的默认存储,在您的情况下是德语。它与语言环境文件夹的顺序无关。

因此,在您的情况下,我建议检查您的电子邮件模板是否在“系统 > 配置 > 客户配置 > 密码选项”的管理员配置中被选中,或者使用Mage::getStoreConfig(Mage_Customer_Model_Customer::XML_PATH_REMIND_EMAIL_TEMPLATE, $storeId)它是否为您的商店设置。

于 2014-02-19T12:49:27.723 回答
0

您收到不同于预期语言的电子邮件模板的原因取决于您首次创建帐户时使用的语言。首次创建帐户时,请尝试检查是否使用您自己的语言。

在“客户”>“帐户信息”下检查此项,以查看您的帐户是如何创建的。

/卡利夫

于 2014-10-20T12:38:41.963 回答
0

希望这个链接对你有用

在链接中,他们使用了新密码,但没有使用新密码,而是在步骤 4 中使用忘记密码模板

谢谢..

于 2013-07-01T13:12:08.260 回答