Перевести на конкретном языке в Laravel

У меня есть многоязычный веб-сайт в Laravel 4.2, и я хочу отправить уведомление администраторам на указанный язык с помощью lang файлов.

Как я могу назвать Lang::get('group.key') указание нужного языка?

Благодарим за помощь!

Изменить: существующий код: (элементы lang - это опция1, option2,.., option6)

class EmailController extends BaseController {
    public static function contact(){
        $rules = [
            'name' => 'required',
            'email' => 'required|email',
            'subject' => 'required|digits_between:1,6',
            'message' => 'required'
        ];
        $validator = Validator::make(Input::all(), $rules);
        if (!$validator->fails()){
            $data = ['subject' => Input::get('subject'), 
                'email' => Input::get('email'),
                'content' => Input::get('message')];
            Mail::send('emails.contact', $data, function($message){
                $message->from(Input::get('email'), Input::get('name'));
                $message->to('[email protected]', 'Admin');
                $message->subject(Lang::get('contact.option'.Input::get('subject')));
            });
        }
        return Redirect::to('/');
    }
}

Ответ 1

Есть 3 способа достичь этого:

  • Вы можете изменить язык по умолчанию во время выполнения, выполнив следующие действия:

App::setLocale('fr'); NB: Это не подходит для текущих потребностей, так как оно будет действовать только при загрузке следующей страницы.

  1. Вы можете установить язык по умолчанию здесь app/config/app.php

'fallback_locale' => 'fr'

  1. Я углубился в Illuminate\Translation\Translator:

    get($key, array $replace = array(), $locale = null)

    Это означает, что вы можете сделать это с помощью Transporter Facade:

    Lang::get($key, array $replace = array(), $locale = null);

    Пример:

    Lang::get('group.key',[],'fr');

Примечание. Структура папки должна выглядеть следующим образом:

/app
    /lang
        /en
            messages.php
        /fr
            messages.php

Ответ 2

Просто установите необходимый язык перед вызовом Lang::get():

App::setLocale('es');

Ответ 3

Я бы порекомендовал что-то вроде этого:

    $savedLocale = App::getLocale();
    App::setLocale($this->getUserMailingLanguage());
    Mail::to($this->e_mail)->send($mailable);
    App::setLocale($savedLocale);

Ответ 4

<?php

return [
 'welcome' => 'welcome :name',
];

trans('welcome', [ 'name' => 'xyz' ], 'fr');

Ответ 5

Чтобы получить перевод на конкретный язык - в отличие от текущих локалей без установки и отмены локали, просто выполните

__('description_1', [], 'en')

Ответ 6

Это даст вам желаемый результат:

trans('welcome',array(),null,'fr');

Это работает со времен Laravel. 5.2.