Skip to content

Instantly share code, notes, and snippets.

@exophunk
Created January 10, 2018 10:20
Show Gist options
  • Select an option

  • Save exophunk/c3ced7c9c267f9b030eeb4c3f29a6c13 to your computer and use it in GitHub Desktop.

Select an option

Save exophunk/c3ced7c9c267f9b030eeb4c3f29a6c13 to your computer and use it in GitHub Desktop.

Revisions

  1. exophunk created this gist Jan 10, 2018.
    42 changes: 42 additions & 0 deletions i18n.js
    Original file line number Diff line number Diff line change
    @@ -0,0 +1,42 @@
    import Vue from 'vue';
    import VueI18n from 'vue-i18n';
    //import messagesDe from 'lang/de';
    // import messagesFr from 'lang/fr';
    // import messagesIt from 'lang/it';

    Vue.use(VueI18n);

    const loadedLanguages = [];

    const i18n = new VueI18n({
    locale: null,
    fallbackLocale: 'de',
    // messages: {
    // //de: messagesDe,
    // // fr: messagesFr,
    // // it: messagesIt,
    // },
    });

    export default i18n;

    export function setI18nLanguage(lang) {
    i18n.locale = lang;
    document.querySelector('html').setAttribute('lang', lang);
    return lang;
    }


    export function loadLanguageAsync(lang) {
    if (i18n.locale !== lang) {
    if (!loadedLanguages.includes(lang)) {
    return import(/* webpackChunkName: "lang-[request]" */ `lang/${lang}`).then(msgs => {
    i18n.setLocaleMessage(lang, msgs.default);
    loadedLanguages.push(lang);
    return setI18nLanguage(lang);
    })
    }
    return Promise.resolve(setI18nLanguage(lang));
    }
    return Promise.resolve(lang);
    }
    47 changes: 47 additions & 0 deletions router.js
    Original file line number Diff line number Diff line change
    @@ -0,0 +1,47 @@
    import Vue from 'vue';
    import VueRouter from 'vue-router';
    import {loadLanguageAsync} from 'i18n';

    import PageLanding from 'components/pages/PageLanding.vue';

    Vue.use(VueRouter);

    const routes = [

    { path: '/', redirect: { name: 'index', params: { langSlug: 'mut' } }},

    {
    name: 'index',
    path: '/:langSlug',
    component: PageLanding,
    },

    ];

    const router = new VueRouter({
    routes: routes,
    mode: 'history',
    });



    router.beforeEach((to, from, next) => {
    const lang = mapSlugToLang(to.params.langSlug);
    loadLanguageAsync(lang).then(() => next());
    })


    function mapSlugToLang(slug) {
    switch(slug) {
    case 'mut':
    return 'de';
    case 'courage':
    return 'fr';
    case 'coraggio':
    return 'it';
    }
    }



    export default router;
    8 changes: 8 additions & 0 deletions webpack.mix.config.js
    Original file line number Diff line number Diff line change
    @@ -0,0 +1,8 @@
    webpack: {

    ...

    output: {
    chunkFilename: 'build/js/[name].bundle.js',
    }
    },
    7 changes: 7 additions & 0 deletions webpack.mix.js
    Original file line number Diff line number Diff line change
    @@ -0,0 +1,7 @@
    ...

    mix

    .setPublicPath('public')

    ....