Vue i18n - 使用 routerview 将语言环境添加到 URL

2023-12-31

我正在使用带有 Vue JS 和 TypeScript 的脚手架 Asp Net Core 2.1 网站。 我正在尝试整合kazupon i18n http://kazupon.github.io/带有路由器视图的插件。如果没有 URL 集成,它就可以正常工作。

我无法像这样获得正确的重定向http://localhost/en/product and http://localhost/fr/product

这是最初的boot.ts,使用VueI18n

import Vue from 'vue';
import VueRouter from 'vue-router';
import VueI18n from 'vue-i18n'

Vue.use(VueRouter);
Vue.use(VueI18n);

import { messages, defaultLocale } from './lang/i18n';

const i18n = new VueI18n({
    locale: defaultLocale,
    fallbackLocale: 'en',
    messages
})

const routes = [
        { path: '/', component: require('./components/home/home.vue.html') },
        { path: '/product', component: require('./components/product/product.vue.html') },
];

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

new Vue({
    el: '#app-root',
    router: router,
    i18n: i18n,
    render: h => h(require('./components/app/app.vue.html'))
});

到目前为止我已经尝试过添加前缀routes但它只是破坏了功能:

const routes = [{
    path: '/',
    redirect: `/${defaultLocale}`,
},
{
    path: '/:locale',
    children: [
        { path: '/', component: require('./components/home/home.vue.html') },
        { path: '/counter', component: require('./components/product/product.vue.html') },
    ]
}];

我也尝试过依靠router.beforeEach设置区域设置。

router.beforeEach((to, from, next) => {
    let language = to.params.locale;
    if (!language) {
        language = 'en';
    }

    i18n.locale = language;
    next();
});

这也不起作用。

我从中汲取了灵感github.com/ashour/vuejs-i18n-demo https://github.com/ashour/vuejs-i18n-demo and vue-i18n-sap-多语言-最佳实践 https://stackoverflow.com/questions/41953836/vue-i18n-sap-multilingual-best-practice,但似乎在 i18n 迁移期间,某些示例可能已过时或丢失,并且这些用例不再起作用。


你主要需要的是指定base https://router.vuejs.org/api/#basevue-router 构造函数中的选项。

但首先,您需要从 url 中提取区域设置:

let locale = window.location.pathname.replace(/^\/([^\/]+).*/i,'$1');

然后指定base在你的VueRouter构造函数:

const router = new VueRouter({
    ...
    base: (locale.trim().length && locale != "/") ? '/' + locale : undefined
    ...
});

最后但并非最不重要的一点是将区域设置传递到您的VueI18n构造函数:

const i18n = new VueI18n({
    locale: (locale.trim().length && locale != "/") ? locale : defaultLocale,
    fallbackLocale: 'en',
    messages
})

请参阅更新后的示例:

import Vue from 'vue';
import VueRouter from 'vue-router';
import VueI18n from 'vue-i18n'

Vue.use(VueRouter);
Vue.use(VueI18n);

import { messages, defaultLocale } from './lang/i18n';

var locale = window.location.pathname.replace(/^\/([^\/]+).*/i,'$1');


const i18n = new VueI18n({
    locale: (locale.trim().length && locale != "/") ? locale : defaultLocale ,
    fallbackLocale: 'en',
    messages
})

const routes = [
        { path: '/', component: require('./components/home/home.vue.html') },
        { path: '/product', component: require('./components/product/product.vue.html') },
];

const router = new VueRouter({
    base: (locale.trim().length && locale != "/") ? '/' + locale : undefined,
    mode: 'history',
    routes: routes
});

new Vue({
    el: '#app-root',
    router: router,
    i18n: i18n,
    render: h => h(require('./components/app/app.vue.html'))
});
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Vue i18n - 使用 routerview 将语言环境添加到 URL 的相关文章

随机推荐

  • 为什么 cmd.exe 在 64 位计算机上具有不同的错误级别行为?

    如果我制作一个名为 temp bat 的批处理脚本 例如 其中包含 exit b 1 当我以各种方式运行它时 我在 32 位 XP 系统和 64 位 XP 系统上得到不同的行为 在 32 位上 gt temp bat gt echo ERR
  • 如何在没有 Manifest.mbdx 的 iOS 5.0 beta 2 中解析 Manifest.mbdb 文件

    我有一个用 iOS 5 beta2 还有 iTunes 10 5 beta 制作的备份 但令我惊讶的是 它不包含 mbdx 文件 The mbdb文件看起来与以前的格式相同 如何匹配文件 ID 和文件名而不需要Manifest mbdx 备
  • PATH 中的其他脚本

    我尝试使用 Homebrew 在 OS X 10 7 5 上安装 Rails 并继续收到以下警告 我已经尝试了很多次更改 PATH 以排除 Python 目录 修改 bash profile 但我什至不确定这就是导致警告的原因 如果这是严重
  • 自定义验证器触发但它不会更新 ValidationSummary

    您好 我正在开发一个自定义表单字段验证器 似乎自定义验证器正在工作 不允许它继续到下一页 但它不会更新验证摘要 也不会显示我的星号和标签 已经变得可见 我在同一字段上还有其他验证器 例如RequiredFieldValidator 我的 V
  • 沉默樱桃

    我有一个cherrypy 服务器将xml 文件分发到网页 当我的服务器运行时 cherrypy 会为已请求的每个网页提供日志 并注明时间戳和网址 对于典型使用来说 这是一个相当不错的功能 但是当请求达到每秒超 过 10 个请求时 日志可能会
  • 推后选项卡消失 ionic 3

    我的标签在使用后消失this navCtrl push NamePage 看不懂 需要使用 ViewChild或者其他功能 我已经设定tabsHideOnSubPages on false in 应用程序模块 ts 例子 https git
  • jinja2 从模板加载模板文件

    有没有办法可以从另一个模板文件中加载 jinja2 模板 就像是 render template path to file html 我有一些想要重用的片段 因此拥有此功能对我来说很重要 include file 做这个 请参阅jinja2
  • Jupyter 密码未经过哈希处理

    当我尝试设置 jupyter 笔记本密码时 打开 jupyter notebook config json 文件时没有获得密码哈希 这是 json 文件的输出 NotebookApp password argon2 argon2id v 1
  • 在不同网站应用程序之间共享 ASP.NET .ascx 控件的最佳方式?

    假设 IIS 中有 2 个不同的 ASP NET 应用程序 此外 您还希望在这两个应用程序之间共享一些 ASCX 控件 创建 用户控件库 的最佳方法是什么 以便您可以在两个应用程序中使用相同的控件实现 而不必重复代码 控件有 ASCX 后面
  • ASP.NET Web API 记录入站请求内容

    我正在尝试注销 Web API 请求内容 即 json 字符串 我实现了一个 ITraceWriter 类 example http www asp net web api overview testing and debugging tr
  • 如何在单个 ssh 命令中使用 bash $(awk)?

    我正在尝试执行一个命令ssh包含首先执行的 子代码 或 子代码 我一直使用它 但我不知道其正式名称 但在目标服务器上 为了便于讨论 假设这是我要使用的命令 当然这可以通过hostname 但这只是一个简化的示例 其中包含我想要使用的所有格式
  • 如何评估gcc格式-溢出检查大小72

    我的示例代码 t c include
  • Firebase 推送通知不适用于 TestFlight/adHoc 版本

    我开发了一个带有推送通知的应用程序 我将其上传到 AppStore 一切正常 通知确实到达了 我现在已经更新了应用程序 以便在用户点击通知时打开网址 在调试模式下使用通过电缆连接的设备进行测试时 一切正常 问题是 如果我通过 TestFli
  • Android - 卸载时删除 SD 卡上的文件

    我的应用程序在安装时从服务器下载一些多媒体文件 我这样做是为了节省应用程序的大小空间 但是 这种方法的缺点是 当卸载应用程序时 它不会删除这些文件 我看过报道说这是可能的 但我似乎无法让它发挥作用 有没有办法在卸载时执行此操作 或者我应该忘
  • C# - 装箱/拆箱/类型转换整数问题。我不明白

    我很难理解这一点 考虑以下示例 protected void Page Load object sender EventArgs e No surprise that this works Int16 firstTest Convert T
  • 如何在反应本机中获取文件夹大小和长度

    如何获取文件夹大小和文件夹中文件的数量 我尝试使用react native fs readDir let pat2 RNFS DocumentDirectoryPath myFolder RNFS readDir pat2 then res
  • 洪水填充算法 - 忽略边缘

    到目前为止 我已经实现了洪水填充算法 我想调整它 这样它就可以去掉边缘 为了演示这一点 我上传了一张图片 图1是我要修改的图像 图 3 是我的算法应该做的事情 图2是我当前的结果 所以在这种情况下 targetColor 是白色 repla
  • 如何限制APK不从“Android设备”卸载[重复]

    这个问题在这里已经有答案了 我已经开发了 Android 应用程序 甚至安装到了设备中 但是如何防止应用程序 apk不被设备的其他人 用户卸载 问候 阿南德 你不能
  • Magento 自定义模块:如何创建管理菜单

    Finder Setting 从管理菜单设置转到自定义模块的系统 配置的 url 应该是什么 menu menu
  • Vue i18n - 使用 routerview 将语言环境添加到 URL

    我正在使用带有 Vue JS 和 TypeScript 的脚手架 Asp Net Core 2 1 网站 我正在尝试整合kazupon i18n http kazupon github io 带有路由器视图的插件 如果没有 URL 集成 它