vue.jsvuejs2nuxt.jsvue-i18nnuxt-i18n

How to get access to template in asyncData?


I want to get access to this.$el in asyncData. I use a database to store translations. I want to get a list of translations that are used on the current page. Then I will send a request to the server to receive them. After that, I will merge it.

i18.mergeLocaleMessage( locale, message )

How to do it ?


Solution

  • You can access i18n with something like this, no need to access the template for this use case

    asyncData ({ app }) {
      console.log(app.i18n.t('Hello'))
    }
    

    Looking at the lifecycle of Nuxt, asyncData will happen before any template is generated at all, so it is impossible with asyncData.
    And even if it was possible with some hacky trick, it would be a bit strange to have to look inside of your template to then have some logic for i18n fetching.

    Why not getting a computed nested object and loop on this through your template, after you have fetched all of your required translations ?

    Also, you're using asyncData + an API call each time ? So, for every page: you will stop the user, let him wait for the API call and then proceed ?

    Latest point, if you are on your page and you hit F5, then asyncData hook will not be triggered. Just to let you know about this caveat.

    Alternative solutions: