Pie*_*rre 4 javascript vue.js vue-router vue-i18n
我正在尝试创建一个路由来为所有路由添加语言环境前缀,我使用以下代码使其工作:
routes: [{
path: '/:lang',
component: {
template: '<router-view />'
},
children: [
{
path: '',
name: 'home',
component: Home
},
{
path: 'about',
name: 'about',
component: About
},
{
path: 'contact',
name: 'contact',
component: Contact
}
]
}]
Run Code Online (Sandbox Code Playgroud)
对于默认语言环境,en
我不想设置此前缀,因此params.lang
在这种情况下将是完整路径而不是语言环境代码,因此请求没有语言环境代码的任何路径将呈现Home
匹配的组件。
那么我该怎么做呢?beforeEnter
在这种情况下,导航守卫喜欢帮助吗?
Actually you can do it without navigation guards. The main goal here is to let the router understand when you have a url without :lang
parameter. To distinguish between the language prefixes and the actual paths you could use a regex pattern for the :lang
param like: (de|fr|en|zu)
(whatever list of codes is suitable for you). And make the :lang
to be an optional ?
.
So something like this should work: path: '/:lang(de|fr|en|zu)?'
At least it works for me :) ...
So now if you request /about
or /de/about
both would match About
.. however the first one will have params.lang
=== undefined. So I guess whenever you set your locale you can do: const locale = this.$route.params.lang || 'en'
here is the documentation for Advanced Matching Patterns
routes: [{
path: '/:lang(de|fr|en|zu)?',
component: {
template: '<router-view />'
},
children: [
{
path: '',
name: 'home',
component: Home
},
{
path: 'about',
name: 'about',
component: About
},
{
path: 'contact',
name: 'contact',
component: Contact
}
]
}]
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
983 次 |
最近记录: |