【问题标题】:Change gettext locale in PHP for part of the code在 PHP 中更改部分代码的 gettext 语言环境
【发布时间】:2015-12-02 18:40:35
【问题描述】:

我在我的 L5 项目中使用laravel-gettext,但我需要在代码中间更改语言环境,仅更改一部分,然后将其更改回来。
我正在向客户和所有者发送电子邮件通知,此电子邮件使用视图来生成内容,但客户和所有者可以各自使用不同的语言。
我试过这样的事情:

$current_locale = \App::getLocale();
$owner_locale = 'cs';
\App::setLocale($owner_locale);
event(new OrderCreated()); // Sends the email
\App::setLocale($current_locale);

不幸的是,这不起作用,似乎一旦我更改了代码开头的语言,我就无法再次更改部分代码。 有没有其他方法可以告诉代码仅对特定视图使用特定的 gettext 语言?谢谢

【问题讨论】:

    标签: php laravel internationalization laravel-5 gettext


    【解决方案1】:

    您可以将所有者区域设置传递给查看和使用,而不是更改区域设置:

    Lang::get('file.key', [], $locale);
    

    【讨论】:

    • 感谢您的回答,但正如我所说,我没有使用内置的 Laravel 本地化系统,而是 i18n,所以我想这不起作用。无论如何我找到了一个解决方案,我会把它作为答案发布。
    【解决方案2】:

    所以这确实有效,但我使用了错误的setLocale()。
    事实证明,LaravelGettext::setLocale() 与 App::setLocale() 同步,但反之则不然。
    这是有效的代码:

    $current_locale = \LaravelGettext::getLocale();
    
    foreach ($admins as $admin) {
        $admin_locale = $admin->language->locale;
        \LaravelGettext::setLocale($admin_locale);
        $this->sendTo($admin->email, $subject, $view, $data);
    }
    
    \LaravelGettext::setLocale($current_locale);
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2013-06-14
      • 1970-01-01
      • 1970-01-01
      • 2012-05-15
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多