EvanNotFound / hexo-theme-redefine

Simplicity in Speed, Purity in Design: Redefine Your Hexo Journey.
https://redefine.ohevan.com
GNU General Public License v3.0
1.28k stars 97 forks source link

[功能建议]:增加多语言切换按钮 #334

Closed MamboJiang closed 4 months ago

MamboJiang commented 4 months ago

功能描述

建议加个选项,增加在菜单栏或者右下角功能区或者页尾增加切换语言的按钮 如这两个博客 https://loli.fj.cn/zh-CN/2023/09/09/Hexo配置多语言/ https://tstrs.me/1448.html 都实现了切换语言后保持在当前页面的英文版的功能 能否考虑一下?感谢!

图片描述

No response

其他

No response

bianyukun1213 commented 4 months ago

Hexo 框架下的多语言方案比较灵活,我觉得这个功能自己实现来匹配自己的多语言方案比较好,交由主题官方实现的话,可能比较难适配不同的多语言方案。

我了解的知识是,Hexo 框架能够渲染多个语言版本的文章,但是对于主题生成的部分,比如导航栏等,只能使用一种语言,因此大家才开发出了不同的多语言方案。hexo-generator-i18n 看起来能够为主题部分生成多个语言版本,但如果一篇文章本来就只打算提供中文版,这个插件仍然会为此文章生成英文版链接,而有些人不想要这样的效果,所以并没有使用这个插件。也鉴于此,我的博客实现多语言就没有使用此插件。此外,对于这个插件生成的博客,可以使用 url_for_langget_langsswitch_lang 等获取一个页面不同语言版本的链接,但是如果没有使用这个插件,就没有这样的函数,得用其他方式获取链接。而且,由于 Hexo 框架没有统一且完善的多语言方案,大家各改各的,导致文章的语言并不一定在 URL 中体现,比如一篇文章的英文版 Pathname 是 /en/posts/hello-world.html,它的中文版可能是 /zh-CN/posts/hello-world.html,也可能直接就没有体现语言的那部分,即 /posts/hello-world.html,对于语言切换功能的实现来说,又多了一件麻烦事。对于中文,有些博主用 zh 来表示,但 Redefine 同时支持简体中文和繁体中文,其中简体中文用 zh-CN(见)表示,这也与那些博主的多语言方案不匹配,可能导致无法生成中文版页面,更不用提切换了。这些都是主题内置多语言切换功能需要考虑的,比如你发的第一个链接中,NexT 主题的语言切换实现就不能完全匹配博主的需求,博主不得不引入自定义的脚本来修正 URL。

所以按目前的情况来看,我认为这部分的功能还是自己实现效果更好。

EvanNotFound commented 4 months ago

同意 @bianyukun1213,麻烦自行修改主题文件,暂不考虑国际化计划。

bianyukun1213 commented 4 months ago

你可以看一下 Evan 的 Hexo 博客,About 页面提供了两个语言版本,默认是英文版,URL 干净利落,不包含语言信息,而中文版的 URL 则有 zh-hans 字符串,也不是 Redefine 支持的 zh-CN。在 Hexo 框架加强这部分功能之前,不太好做出通用方案。

bianyukun1213 commented 4 months ago

自己实现这部分功能的话,可以使用 Filter 给主题右下角的功能区添加语言切换按钮,这样是生成的时候就修改的,也可以使用 Injector 或 Redefine 内置的注入功能注入脚本来在浏览器端动态修改。这两种方式相对来说不侵入主题,不必自己再 fork 一个 Redefine,更新也更方便。使用 Filter 还有一个好处是,如果你采用 hexo-generator-i18n 插件,就可以使用 url_for_langget_langsswitch_lang 等函数方便地获取一篇文章在其他语言中的 URL;使用 Injector 或者不采用 hexo-generator-i18n,多语言信息就得自己想办法获取,比如我的方案没有采用 hexo-generator-i18n,就通过 Generator 和 Filter 把文章的多语言信息嵌入到生成的页面,在浏览器端通过注入的脚本读取,提供切换功能。

MamboJiang commented 4 months ago

@bianyukun1213 @EvanNotFound 收到,感谢您的回复!