使用 Laravel、Nuxt 翻译包
关于使用 Laravel 翻译包…… 之前制作的翻译包相当简陋,总之不怎么样…… 所以我想重新做一个,但实际上,现在时间已经拖得这么晚了,我不禁觉得有必要非得自己做吗…… 所以我决定直接使用现成的包…… https://github.com/joedixon/laravel-translation https://gi
关于使用 Laravel 翻译包…… 之前制作的翻译包相当简陋,总之不怎么样…… 所以我想重新做一个,但实际上,现在时间已经拖得这么晚了,我不禁觉得有必要非得自己做吗…… 所以我决定直接使用现成的包…… https://github.com/joedixon/laravel-translation https://gi
关于使用 Laravel 翻译包……
之前制作的翻译包相当简陋,总之不怎么样……
所以我想重新做一个,但实际上,现在时间已经拖得这么晚了,我不禁觉得有必要非得自己做吗……
所以我决定直接使用现成的包……
https://github.com/joedixon/laravel-translation
https://github.com/barryvdh/laravel-translation-manager
原本想从两者中选一个,但最后还是选了后者……前者虽然比较简洁,
但我选择后者,是因为 Laravel 翻译包中途停止维护的情况比想象中多……
不过我觉得后者其实也跟停止维护差不多了……
因为只会在 dev 环境中使用翻译包,
composer require --dev barryvdh/laravel-translation-manager
composer require --dev martinlindhe/laravel-vue-i18n-generator所以我安装了……
另外,我想在 nuxt.js 中使用 vue i18n,正好……
https://www.larablocks.com/package/martinlindhe/laravel-vue-i18n-generator
找到了这个……
使用它,可以先在 Laravel 中创建翻译文件……然后将翻译文件转换成 js 文件……
之后只要把这个 js 文件放到前端即可……
但是……这样一来 Nuxt-i18n 就出现了问题……
https://nuxt-community.github.io/nuxt-i18n/
我开始使用它了……
这个东西的问题比想象中多……不,应该说是问题吗……总之……虽然没有什么大问题……
在 $rotue.push 中使用 path 进行跳转时,无法传递 params……
但 Nuxt-i18n 的 localePath 支持的是 path。
这样一来,我就得用 Name 来跳转……但没法这么做……
那该怎么传递数据呢……
https://router.vuejs.org/guide/essentials/navigation.html
这里可以看到,path 中无法传递 params……
所以我就用了个权宜之计……因为这个问题并不是 route 有意提供的功能……严格来说,这似乎不是正确的做法……不过,反正总得传一次数据,也只能这样了,不是吗……
看来,把数据放进 store 里再 push,才是正确的做法……(嗯嗯嗯……)
i18n: {
detectBrowserLanguage: {
useCookie: true,
cookieKey: 'i18n_redirected',
// alwaysRedirect: true,
// fallbackLocale: 'en'
},
seo: true,
locales: [
{
code: 'en',
iso: 'en-US',
name: 'English',
css: 'flag-icon-us',
file: "en.js"
},
{
code: 'ko',
iso: 'ko',
name: '한국어',
css: 'flag-icon-kr',
file: "ko.js"
},
{
code: 'ja',
iso: 'ja',
name: '日本',
css: 'flag-icon-jp',
file: "ja.js"
}
],
defaultLocale: 'en',
vueI18n: {
fallbackLocale: 'en',
},
lazy: true,
langDir: 'lang/',
},大致上……我就是这样配置 nuxt i18n 的……
虽然语言种类不多,但我觉得按文件分开会比较好,所以就这么做了……
实际上,它确实会根据浏览器语言进行设置……它会同时加载 en 和 ko,之后如果选择其他语言,就会加载新的语言。
首先……由于需要先在 Laravel 中使用翻译包进行编写……
https://github.com/caouecs/Laravel-lang
我从这里下载了 en、ko、ja 并放了进去……
现在得一点一点开始处理了……
在 Laravel 翻译页面完成处理后,通过导出文件将其生成 js 文件……
php artisan vue-i18n:generate --multi-locales输入命令,将它转换成 en.js、ko.js、ja.js 后……再把这些文件放回前端即可……我正在给之前辛苦完成的前端页面添加翻译……
Auth 验证链接是在后端生成并通过邮件发送的……
domain/auth/JDJ5JDEwJGtLQmxmSkprTy95VWRkd1gzQU55V08vS2RLU29kLnlEOWI3NzU1YjYwLzZaRDh6dmtOVVF1
但是,点击这个链接后会默认以 en 访问……不过,如果在一个全新的 Chrome 无痕窗口中打开,它会自动切换成与浏览器相匹配的 ko,然后再进行跳转……
但如果访问时已经有 ko 的 Cookie 值,它就会直接将其识别为 en 地址……于是就会出现以 en 显示的问题……
所以我也试着讨论过这个问题,不过,嗯……只是访问 auth 页面时,第一次访问会自动设置为浏览器语言,但第二次访问才是问题所在……因为这里如果设置 alwaysRedirect: true,又会产生问题……
只是……我得到的答复是,最好在 auth 页面中读取 cookie 值,然后根据 cookie 值进行重定向……所以我打算干脆自己另外实现一个根据 cookie 值进行重定向的功能……
翻译工作大致进展顺利……
- 应用前端翻译……
- 为 vee-validate 应用翻译……
- 使用 axios 调用 api 时,在 header 中发送语言设置值……
- 在 Laravel 中创建根据 header 值设置语言的中间件……
- 根据后端语言设置输出翻译……
- 将 route push 修改为通过 store 携带数据发送……
- 访问 auth 认证链接时,根据 cookie 中的语言值执行重定向……
这样做到这一步的话……翻译工作应该就差不多结束了……
等这个结束后……还得开发用 Laravel 上传、管理并显示图片的功能……
明天就要去新加坡旅行了……这……得……什么时候才能做完啊……