在 Laravel 5 中更改语言
Posted
技术标签:
【中文标题】在 Laravel 5 中更改语言【英文标题】:Change language in Laravel 5 【发布时间】:2017-07-12 17:42:41 【问题描述】:我刚开始使用 Laravel 5.4,在 login.blade.php 我有
我不喜欢将纯文本放在 html 代码中,有没有办法让单独的 lang 文件中的所有文本动态地使用它们?
谢谢
【问题讨论】:
laravel.com/docs/5.4/localization 【参考方案1】:resources/lang
文件夹包含本地化文件。文件名对应于将要使用的视图。要从此文件中获取值,您可以简单地使用以下代码:
`Lang::geConfig; 使用会话;
class Locale
/**
* Handle an incoming request.
*
* @param \Illuminate\Http\Request $request
* @param \Closure $next
* @return mixed
*/
public function handle($request, Closure $next)
//$raw_locale = Session::get('locale');
$raw_locale = $request->session()->get('locale');
if (in_array($raw_locale, Config::get('app.locales')))
$locale = $raw_locale;
else $locale = Config::get('app.locale');
App::setLocale($locale);
return $next($request);
在app/Http/Kernel.php
$middlewareGroups=[ ... ]
中添加以下行:
\App\Http\Middleware\Locale::class,
在routes/web.php
中添加:
Route::get('setlocale/locale', function ($locale)
if (in_array($locale, \Config::get('app.locales')))
session(['locale' => $locale]);
return redirect()->back();
);
【讨论】:
最直接的解决方案! 感谢您的解决方案,它在 Lar 5.7 上运行良好 惊人的解决方案! 我收到一个错误in_array() expects parameter 2 to be array, null given
在这个文件中 "C:\wamp64\www\larav_start_youtube_2\app\Http\Middleware\Locale.php" 在这一行 $raw_locale = Session::get('locale'); if (in_array($raw_locale, Config::get('app.locales'))) $locale = $raw_locale;
我在任何地方都没有找到这个 routes/web.php 文件。我在哪里可以找到它?【参考方案2】:
试试这个!
@lang('messages.login')
现在在语言文件下添加登录密钥及其值,如下所示
return['login'=>'Login']; // write inside messages file
并设置您的 APP Config 本地变量,例如 'en','nl','us'
App::setLocale(language name); like 'en','nl','us'
【讨论】:
【参考方案3】:Laravel 有一个 localization 模块。
基本上,您创建一个文件,例如:resources/lang/en/login.php
并放入
return [
'header' => 'Login'
];
在您的模板中,您使用@lang('login.header')
而不是Login
。
您可以在 /resources/lang/en
目录中拥有尽可能多的文件,并使用 @lang
Blade 指令将文件名(不带扩展名)和所需值用点分隔。
【讨论】:
以上是关于在 Laravel 5 中更改语言的主要内容,如果未能解决你的问题,请参考以下文章