I have created localization logic from Laravel to Vue.js
Route:
Route::get('/lang-{lang}.js', [App\Http\Controllers\LanguageController::class, 'showw']);
I call the file in app.php:
<html>
<head>
<script src="/lang-.js"></script>
</head>
</html>
LanguageController.php:
public function __construct()
{
$this->middleware('auth');
}
public function showw($locale)
{
if (is_array(config('app.locale'))) {
$locale = in_array($locale, config('app.locale')) ? $locale : config('app.fallback_locale');
} else {
$locale = $locale == config('app.locale') ? $locale : config('app.fallback_locale');
}
$files = glob(resource_path('lang/' . $locale . '/*.php'));
$strings = [];
foreach ($files as $file) {
$name = basename($file, '.php');
$strings[$name] = require $file;
}
$contents = 'window.i18n = ' . json_encode($strings, config('app.debug', false) ? JSON_PRETTY_PRINT : 0) . ';';
$response = \Response::make($contents, 200);
$response->header('Content-Type', 'application/javascript');
return $response;
}
So I have loaded file and this is how I'm using it in Vue.js
import _ from 'lodash'
Vue.prototype.__ = str => _.get(window.i18n, str)
It works perfectly, but I face problem after login, the lang file sourse on display, and I should redirect manually, it is strange, but after register it doesn't show up source file.
LoginContoller:
use AuthenticatesUsers;
/**
* Where to redirect users after login.
*
* @var string
*/
protected $redirectTo = RouteServiceProvider::HOME;
/**
* Create a new controller instance.
*
* @return void
*/
public function __construct()
{
$this->middleware('guest')->except('logout');
}
This is the screen after login:
source https://stackoverflow.com/questions/68144370/js-file-is-always-displayed-on-the-screen-after-login
Comments
Post a Comment