Перевести на конкретном языке в 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: Это не подходит для текущих потребностей, так как оно будет действовать только при загрузке следующей страницы.
- Вы можете установить язык по умолчанию здесь app/config/app.php
'fallback_locale' => 'fr'
-
Я углубился в 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.