簡體   English   中英

Laravel-如何在app.php中設置語言環境

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM