Laravel-如何在app.php中设置语言环境

时间:2019-07-19 16:21:30

标签: php laravel vue.js

当用户选择本地语言时,我会尝试设置它,但是当我刷新页面时,它会一直回到我的默认语言...

'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( );
            }
        }

2 个答案:

答案 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
    });
  }