当用户选择本地语言时,我会尝试设置它,但是当我刷新页面时,它会一直回到我的默认语言...
'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( );
}
}
答案 0 :(得分:0)
必须在实际调用setLang函数的地方显示代码库。
此外,您还需要使用某种持久性(也许从URL或会话中获取它)
答案 1 :(得分:0)
我发现了该怎么做!
初始化应用程序后,无法设置$ 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
});
}