IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

VueJS Discussion :

i18n intégration vue-router / vue3 (vue cli)


Sujet :

VueJS

  1. #1
    Membre à l'essai
    Homme Profil pro
    Intégrateur Web
    Inscrit en
    Avril 2021
    Messages
    5
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France, Saône et Loire (Bourgogne)

    Informations professionnelles :
    Activité : Intégrateur Web

    Informations forums :
    Inscription : Avril 2021
    Messages : 5
    Par défaut i18n intégration vue-router / vue3 (vue cli)
    Bonjours,

    Je utiltize i18n. C'est un outil (middleware) pour realizer des site Web multilingue.
    J'ai installé i18n et ja peux changer entre different langues. La base du texte multilingue est JSON.

    Maintenant, j'ai des problemes avec l'integration du vue-router.
    Je veux realizer quelque chose comme ca:

    domain/fr/home
    domain/fr/about

    domain/en/home
    domain/en/about


    Selon un tutoriel, j'ai realizer vue-router comme ca:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
     
    import { createRouter, createWebHistory } from "vue-router";
     
    import Home from "./views/Home.vue";
    import About from "./views/About.vue";
    import Projects from "./views/Projects.vue";
    import Blog from "./views/Blog.vue";
    import Design from "./views/Design.vue";
    import Contact from "./views/Contact.vue";
     
    const router = createRouter({
      history: createWebHistory(),
      routes: [
        {
          path: "/:lang",
          component: {
            render(c) {
              return c("router-view");
            },
          },
          children: [
            { path: "/", redirect: "home" },
            { path: "home", name: "home", component: Home },
     
            { path: "projects", name: "Projects", component: Projects },
            { path: "blog", name: "Blog", component: Blog },
            { path: "design", name: "Design", component: Design },
            { path: "about", name: "About", component: About },
            { path: "contact", name: "Projects", component: Contact },
          ],
        },
      ],
    });
     
    export default router;
    En principe, le composant de path: "/: lang" n'existe pas. (Le composant es toujours obligatoire!!) C'est pourquoi j'utilise la fonction render().
    Cependant, cela n'est pas reconnu par le système. Où est l'erreur? Merci beaucoup.

    michael_cassio

  2. #2
    Membre Expert
    Avatar de gwyohm
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Octobre 2007
    Messages
    925
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Octobre 2007
    Messages : 925
    Par défaut
    hello,

    tu appelles quelle URL depuis ton browser ?
    tu as une erreur en console ?

  3. #3
    Membre à l'essai
    Homme Profil pro
    Intégrateur Web
    Inscrit en
    Avril 2021
    Messages
    5
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France, Saône et Loire (Bourgogne)

    Informations professionnelles :
    Activité : Intégrateur Web

    Informations forums :
    Inscription : Avril 2021
    Messages : 5
    Par défaut i18n integration vue router
    C'est mon erreur:

    [Vue warn]: Unhandled error during execution of render function
    at <Anonymous onVnodeUnmounted=fn<onVnodeUnmounted> ref=Ref< undefined > >
    at <RouterView>
    at <App>

    runtime-core.esm-bundler.js?5c40:38 [Vue warn]: Unhandled error during execution of scheduler flush. This is likely a Vue internals bug. Please open an issue at https://new-issue.vuejs.org/?repo=vuejs/vue-next
    at <Anonymous onVnodeUnmounted=fn<onVnodeUnmounted> ref=Ref< undefined > >
    at <RouterView>
    at <App>

    router.js?41cb:17 Uncaught (in promise) TypeError: c is not a function
    at Proxy.render (router.js?41cb:17)
    at renderComponentRoot (runtime-core.esm-bundler.js?5c40:710)
    at componentEffect (runtime-core.esm-bundler.js?5c40:4198)
    at reactiveEffect (reactivity.esm-bundler.js?a1e9:42)
    at effect (reactivity.esm-bundler.js?a1e9:17)
    at setupRenderEffect (runtime-core.esm-bundler.js?5c40:4181)
    at mountComponent (runtime-core.esm-bundler.js?5c40:4140)
    at processComponent (runtime-core.esm-bundler.js?5c40:4100)
    at patch (runtime-core.esm-bundler.js?5c40:3718)
    at componentEffect (runtime-core.esm-bundler.js?5c40:4286)
    Le point es que vue-router fait tout le management.
    En pricipe je seulement utilize le le composant <router-link> comme ca (avec integration i18n):

    Code html : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     <locale-switcher></locale-switcher>
     
     <li><router-link to="/home">{{ $t('nav.home') }}</router-link></li>
                    <li><router-link to="/projects">{{ $t('nav.projects') }}</router-link></li>
                    <li><router-link to="/blog">{{ $t('nav.blog') }}</router-link></li>
                    <li><router-link to="/design">{{ $t('nav.design') }}</router-link></li>
                    <li><router-link to="/about">{{ $t('nav.about') }}</router-link></li>
                    <li><router-link to="/contact">{{ $t('nav.contact') }}</router-link></li>

    Avec le fonction $t, je peux basculer entre les langues. Cela fonctionne, mais la connexion du router
    ne foncionne tout simplment pas.
    Images attachées Images attachées  

  4. #4
    Membre Expert
    Avatar de gwyohm
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Octobre 2007
    Messages
    925
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Octobre 2007
    Messages : 925
    Par défaut
    avec vue3, je sais pas si on te passe createElement dans render. tu peux essayer
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
    // peut être createElement ?
    import { h } from 'vue';
     
    // ... 
    component: {
      render() {
        return h('router-view');
      },
    }
    // ...

  5. #5
    Membre à l'essai
    Homme Profil pro
    Intégrateur Web
    Inscrit en
    Avril 2021
    Messages
    5
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France, Saône et Loire (Bourgogne)

    Informations professionnelles :
    Activité : Intégrateur Web

    Informations forums :
    Inscription : Avril 2021
    Messages : 5
    Par défaut i18n integration vue router
    Merci gwyohm,

    Je ne recois pas un erreur, mais pas non plus la fonctionalité souhaitée.
    'h' n'est pas un fonction de vue!
    i18n est responsable pour l'allocation de: {fr.json, en.json, es.json...} et les routes

    Mais je ne comprends pas l'interaction de vue-router et i18n.

  6. #6
    Membre Expert
    Avatar de gwyohm
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Octobre 2007
    Messages
    925
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Octobre 2007
    Messages : 925
    Par défaut
    Citation Envoyé par michael_cassio Voir le message
    'h' n'est pas un fonction de vue!
    Si, https://v3.vuejs.org/api/global-api.html#h

    ton erreur, c'etait qu'il ne trouvait pas "c" (cf ton message d'erreur), pcq comme tu peux le voir createElement n'est plus un argument de render dans vue3. createElement nommée h doit être importée depuis vue dans ton composant.

    Quelle version de vue utilises-tu ?

  7. #7
    Membre à l'essai
    Homme Profil pro
    Intégrateur Web
    Inscrit en
    Avril 2021
    Messages
    5
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France, Saône et Loire (Bourgogne)

    Informations professionnelles :
    Activité : Intégrateur Web

    Informations forums :
    Inscription : Avril 2021
    Messages : 5
    Par défaut
    C'est peut-etre vrai, mais cela ne résout pas le probleme.

    version(https://github.com/vuejs/vue-next)

  8. #8
    Membre Expert
    Avatar de gwyohm
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Octobre 2007
    Messages
    925
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Octobre 2007
    Messages : 925
    Par défaut
    ca ne résout pas le problème que tu cherches à résoudre, mais as-tu toujours une erreur dans ta console ?
    Je pense qu'avoir un path "/" dans ta config des children pour Home n'est pas correct
    si tu mets
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    { path: "", redirect: "home" }
    ca fait pareil ?

  9. #9
    Membre à l'essai
    Homme Profil pro
    Intégrateur Web
    Inscrit en
    Avril 2021
    Messages
    5
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France, Saône et Loire (Bourgogne)

    Informations professionnelles :
    Activité : Intégrateur Web

    Informations forums :
    Inscription : Avril 2021
    Messages : 5
    Par défaut
    Citation Envoyé par gwyohm Voir le message
    mais as-tu toujours une erreur dans ta console ?
    J n'ai pas une erreur, la syntaxe est correct!
    Cela ne dépend pas non plus des "routes" (aussi avec: { path: "", redirect: "home" }), toute la foncionnalité n'est pas correct.

    i18n doit conseiller l'information, qui peut être implémenté par vue-router,
    Il est possible que i18n n'ait pas encore été implémenté pour vue3!?

    Je publierai une question sur le forum officiel de vue. La derniere fois ils ont repondu en chinois.

Discussions similaires

  1. Problème avec 1ère vue
    Par cecile38 dans le forum Android
    Réponses: 3
    Dernier message: 03/08/2012, 11h27
  2. Problèmes avec les vues et les sequences postgresql
    Par choko83 dans le forum Requêtes
    Réponses: 4
    Dernier message: 28/09/2009, 21h17
  3. problème avec la vue user_tables
    Par moi26 dans le forum Administration
    Réponses: 9
    Dernier message: 21/07/2009, 16h48
  4. problème avec les vues sous sql
    Par new_angel dans le forum SQL
    Réponses: 3
    Dernier message: 08/06/2009, 08h10
  5. Problèmes avec des vues
    Par dady dans le forum MFC
    Réponses: 22
    Dernier message: 09/01/2004, 16h26

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo