Laravel 9在控制器中从i18Next中获取当前区域设置

yqkkidmi  于 2023-08-08  发布在  其他
关注(0)|答案(1)|浏览(122)

我试图在controller中获取当前的用户区域设置找到了许多可以回答这个问题的参考,但对于reactvue,在我的情况下不起作用
我试过了

Lang::locale();

Config::get('app.locale');

app()->getLocale()

字符串
什么都不起作用,但当我更改语言时,我在console中看到

i18next: languageChanged de


触发原因:

// Re-init translation service
     i18next.on('languageChanged', function() {
        selector.forEach(function(item) {
              item.innerHTML = i18next.t(item.getAttribute("data-i18n"));
        });
   });


如何在控制器中获取此值?

pgx2nnw8

pgx2nnw81#

您可以通过另一种方式来完成此操作,而无需使用i18Next
在数据库表中创建一个新的column,并将其命名为user_locale
在语言下拉项目href标签中,根据您的需要在每个项目上添加路线:

href="{{ route('users.setUserLocale') }}/en"

字符串
定义新路由

Route::get('users/{user_locale?}','UsersController@setUserLocale')->name('users.setUserLocale');


添加控制器

use DB;
use Auth;

    public function setUserLocale($user_locale = NULL) {
            $thisUser = Auth::user();
            $dbQry = DB::table('users')->where('id', $thisUser->id)->update(
                [
                    'user_locale' => $user_locale,
                ]
            );
            return back();
        }


这样,每次用户更改语言时,user_locale列中的值都将更新为当前语言代码
要获取locale,您只需执行以下操作

thisUser = Auth::user();
$locale = $thisUser->user_locale;

相关问题