使用Nuxt.js和Vue-i18n重定向到同一页面但切换了语言url

时间:2018-07-12 14:42:20

标签: regex vue.js nuxt.js vue-i18n

当用户单击特定按钮以更改应用程序的语言时,我试图通过一种方法来重定向用户。
这些按钮是项目所有页面所属的标准布局的一部分,因此url可以根据用户所在的.vue页面而有所不同,但是按钮始终相同,这意味着重定向必须是动态的。

例如url:

localhost/about


应该通过方法(按特定按钮)重定向到:

localhost/bg/about


在项目中,页面位于文件夹_locale中,并且也从该文件夹外部的.vue文件导入,如Nuxt文档中所建议的那样,用于使用Vue-i18n https://nuxtjs.org/examples/i18n/进行本地化
nuxt.config.jsi18n.js中间件,i18n.js插件和index.js存储文件的实现方法相同。


由于它是一个Nuxt.js应用程序,而不仅仅是一个Vue.js应用程序,因此只需通过更改locale(语言)的页面来提交商店的更改实际上也不会更改语言,即使更改了语言(例如,使用this.$i18n.locale = 'bg'),它也仅更改了特定页面,并且在下一次导航时,它再次使用了fallback locale,所以我正在尝试通过重定向解决该问题,该重定向会根据URL使用正确的.json语言文件。我只是想找到一种使重定向更加动态的方法,而不是只回到每种语言的home页。


如果需要github仓库:https://github.com/alexgil1994/logistics-gls


所需步骤:

npm install
npm run dev


可以用更好的方法吗?在这种情况下有没有正则表达式的例子?有没有比Regex更简单的方法?
欢迎所有建议。

1 个答案:

答案 0 :(得分:2)

我提出这个问题已经很长时间了,但我忘记了我已经找到了一种自定义解决方法,因此自从有时间为另一个项目再次实施它以来,我想到了最终解决这个问题。

由于我再次搜索可能的国际化解决方案,所以我发现(至少)有两种可能的解决方案:

1)。使用Nuxtvue-i18n的自定义解决方案是使用用户在选择一种语言选择时触发的方法:

changeLanguage(locale) {
          // -- Getting the path before starting
          var beforePath = this.$nuxt.$router.history.current.path

          // -- Removing the previous locale from the url
          var result = ''
          result = beforePath.replace( "/bg", "" )
          result = result.replace( "/gr", "" )

          // -- Redirecting to the same page but in the desired language
          if ( locale == 'gr' || locale == 'bg' ) {
            this.$nuxt.$router.replace({ path: '/' + locale + result })
          } else {
            if ( result == '/' ) {
              this.$nuxt.$router.replace({ path: '/' + locale })
            } else {
              this.$nuxt.$router.replace({ path: '/' + locale + result })
            }
          }
      }

您可以看到我传入了locale参数,这是选择的语言代码,我们使用$nuxt.$router来获取当前路径。

2)。第二种解决方案是改用nuxtnuxt-i18n。这样,可以使用official documentation中所述的方法switchLocalePath。尽管我还没有真正尝试过(我记得我在8个月前尝试过,但是遇到了一些问题,但是我可能以错误的方式实现了它)。会再给它一次。



希望这会对其他人有所帮助