[英]Laravel - how to set the locale language in app.php
當用戶選擇本地語言時,我會嘗試設置它,但是當我刷新頁面時,它會一直回到我的默認語言...
'locale' => 'en',
'locales' => ['fr', 'en', 'es'],
'fallback_locale' => 'fr',
因此,當用戶選擇另一種語言時,這就是我要做的事情(似乎我嘗試了一切:))。
知道我還能嘗試什么嗎?
public function setLang($lang){
App::setLocale($lang);
app()->setLocale($lang);
Session::put('locale', $lang);
setlocale(LC_ALL, $lang);
session(['locale' => $lang]);
return $lang;
}
如果我在app.php中將“ locale”設置為“ fr”,則默認情況下將為“ fr”。
[編輯]這是javascript(vueJS)部分,我通過axios調用調用setLang:
<div class="locale-changer" aria-labelledby="dropdown07">
<select class="dropdown-menu-lang " aria-labelledby="dropdown07" v-model="$i18n.locale" @change="langChanged($i18n.locale)" >
<option class="dropdown-item-lang" :selected="$i18n.locale == lang" v-for="(lang, i) in langs" :key="`Lang${i}`" :value="lang">{{ lang }}</option>
<!-- <option class="dropdown-item-lang" selected="true" :key="`Lang${i}`" value="fr">fr</option> -->
</select>
</div>
mounted(){
this.$i18n.Locale = localStorage.Lang;
console.log(" this.$i18n.Locale - " + this.$i18n.Locale); //it is OK here, the correct language which has been chosen by the user last time is displayed
},
methods: {
langChanged(lang){
localStorage.Lang=lang;
axios.get('/setlang/'+lang).then( );
}
}
您必須在實際調用setLang函數的位置顯示代碼庫。
另外,您還需要使用某種持久性(也許可以從URL或Session中獲取它)
我發現了該怎么做!
初始化應用程序后,無法設置$ i18n.locale。 因此,在初始化所有內容之前,我在app.js中進行了設置。
我覺得它不是干凈的,但至少可以用。 如果有人遇到相同的問題,這里是app.js:
import Vue from 'vue';
import Vuetify from 'vuetify';
import VueInternationalization from 'vue-i18n';
import Locale from './vue-i18n-locales.generated.js';
Vue.use(Vuetify);
Vue.use(VueInternationalization);
require('./bootstrap');
window.Vue = require('vue');
var App = Vue.component('app', require('./App.vue').default, {
name: 'app'
});
var Home = Vue.component('home', require('./components/home/HomeComponent.vue').default);
//and all other components
let lang=localStorage.Lang;
if(lang==null){ //I really don't like this part though... if tehre is nothing in the local storage, I need to get the language in the DB
axios.get('/getlang/').then(
response => {
lang = response.data;
init();
}
);
}
else{
init();
}
function init(){
let i18n = new VueInternationalization({
locale: lang,
messages: Locale
});
const app = new Vue({
el: '#app',
i18n,
components:{app:App, home:Home} //and all other omponents
});
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.