Magento“忘记密码”电子邮件以错误的语言发送

时间:2013-07-01 09:00:07

标签: magento email magento-1.7 multilingual forgot-password

我有一个有多种语言的Magento网站。我已经设置了语言包,一切似乎都在网站上正确翻译。此外,交易电子邮件使用正确的语言除以“忘记密码电子邮件发送,该电子邮件始终以德语发送。这是我做的:

  • 安装语言包并确保所有模板和文件夹结构都正确无误。示例: /app/locale/nl_NL/template/email/
  • 系统»交易电子邮件下:我应用了模板,选择了区域设置并保存。
  • 然后我去了系统»配置»销售电子邮件,我从“当前配置范围”下拉菜单切换到每种语言,然后我选择了我创建的模板每种语言的交易电子邮件(每个商店视图)。

在网上寻找解决方案后,似乎其他人也遇到了这个问题,有人提到Magento正在从 / app / locale / 中找到的第一个语言环境文件夹中选择“忘记密码”模板。就我而言,我有:de_DEen_USfr_FRnl_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

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

8 个答案:

答案 0 :(得分: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);
}

答案 1 :(得分:3)

我遇到了同样的问题,看起来user2282917的解决方案有点修改:

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

答案 2 :(得分: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;
    }
}

答案 3 :(得分:1)

在下面的文件中 法/客户/型号/ Customer.php

在sendPasswordResetConfirmationEmail函数()中更改

$ storeId = $ this-> getStoreId();

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

由于

答案 4 :(得分:1)

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

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

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

问题在于Magento假设与网站ID相关联的第一个商店ID是默认商店...我们发现在对商店记录设置排序顺序时并非如此。

简单地说,确保您的网站关联的默认商店的排序顺序为0。

答案 5 :(得分:0)

希望this link对您有用

在链接中他们使用了新密码而不是新密码使用忘记密码模板在步骤4中谢谢..

答案 6 :(得分:0)

密码重置电子邮件在Mage_Customer_Model_Customer::_sendEmailTemplate()中发送。这里加载了emailtemplate。如果它已在“Systemn> Transactional Emails”中加载到admin并配置为使用,则将使用您的模板。

此外,默认模板是从Mage_Core_Model_Email_Template::sendTransactional中的文件加载的。这是使用$this->loadDefault($templateId, $localeCode);完成的。模板是使用

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

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

  1. 指定的区域设置
  2. 默认商店的区域设置
  3. en_US locale
  4. 选择第一个匹配的区域设置。由于Mage::app()不知道使用emailtemplate传递的商店,因此加载了默认的defaultstore,在您的情况下是德语。它与区域设置文件夹的顺序无关。

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

答案 7 :(得分:0)

您使用其他语言接收电子邮件模板的原因取决于您首次创建帐户的语言。首次创建帐户时,请尝试使用您自己的语言检查此项。

在Customers>下进行检查帐户信息,以了解您的帐户是如何创建的。

/ Kalif