-
我参考了这个 issue 进行配置,添加了一个 我尝试使用 xcatliu/hexo-generator-index-i18n: I18n index generator plugin for Hexo 进行渲染,可以渲染成功,但是如果首页只允许出现一种语言的话,需要卸载 hexojs/hexo-generator-index: Index generator plugin for Hexo. ,导致 另外如果设置了 hexo.extend.helper.register('i18n_path', function(language) {
const { path, lang } = this.page;
const base = path.startsWith(lang) ? path.slice(lang.length + 1) : path;
return this.url_for(`${this.languages.indexOf(language) === 0 ? '' : '/' + language}/${base}`);
}); 详细的结构和配置可以看这里,我用官方的文档库做了一个复现:https://github.com/fish-404/theme-next-docs/tree/i18n-demo
错误信息``` Template render error: (/workspaces/theme-next-docs/node_modules/hexo-theme-next/layout/index.njk) Template render error: (/workspaces/theme-next-docs/node_modules/hexo-theme-next/layout/index.njk) [Line 29, Column 25] Template render error: (/workspaces/theme-next-docs/node_modules/hexo-theme-next/layout/index.njk) [Line 14, Column 43] Template render error: (/workspaces/theme-next-docs/node_modules/hexo-theme-next/layout/index.njk) Template render error: (/workspaces/theme-next-docs/node_modules/hexo-theme-next/layout/_partials/head/head-unique.njk) [Line 21, Column 12] Template render error: (/workspaces/theme-next-docs/node_modules/hexo-theme-next/layout/index.njk) [Line 3, Column 3] Template render error: (/workspaces/theme-next-docs/node_modules/hexo-theme-next/layout/index.njk) Template render error: (/workspaces/theme-next-docs/node_modules/hexo-theme-next/layout/_third-party/math/index.njk) Template render error: (/workspaces/theme-next-docs/node_modules/hexo-theme-next/layout/index.njk) Template render error: (/workspaces/theme-next-docs/node_modules/hexo-theme-next/layout/_third-party/quicklink.njk) Template render error: (/workspaces/theme-next-docs/node_modules/hexo-theme-next/layout/index.njk) Template render error: (/workspaces/theme-next-docs/node_modules/hexo-theme-next/layout/_partials/header/index.njk) [Line 6, Column 15] Template render error: (/workspaces/theme-next-docs/node_modules/hexo-theme-next/layout/index.njk) [Line 5, Column 3] Template render error: (/workspaces/theme-next-docs/node_modules/hexo-theme-next/layout/index.njk) Template render error: (/workspaces/theme-next-docs/node_modules/hexo-theme-next/layout/_partials/header/sub-menu.njk) Template render error: (/workspaces/theme-next-docs/node_modules/hexo-theme-next/layout/index.njk) Template render error: (/workspaces/theme-next-docs/node_modules/hexo-theme-next/layout/_partials/header/sub-menu.njk) Template render error: (/workspaces/theme-next-docs/node_modules/hexo-theme-next/layout/index.njk) [Line 9, Column 36] Error: Unable to call `page["posts"]["toArray"]`, which is undefined or falsey at Object._prettifyError (/workspaces/theme-next-docs/node_modules/nunjucks/src/lib.js:32:11) at /workspaces/theme-next-docs/node_modules/nunjucks/src/environment.js:464:19 at Template.root [as rootRenderFunc] (eval at _compile (/workspaces/theme-next-docs/node_modules/nunjucks/src/environment.js:527:18), :45:3) at Template.render (/workspaces/theme-next-docs/node_modules/nunjucks/src/environment.js:454:10) at /workspaces/theme-next-docs/node_modules/hexo/dist/plugins/renderer/nunjucks.js:62:39 at _View._compiled (/workspaces/theme-next-docs/node_modules/hexo/dist/theme/view.js:120:67) at _View.render (/workspaces/theme-next-docs/node_modules/hexo/dist/theme/view.js:37:21) at /workspaces/theme-next-docs/node_modules/hexo/dist/hexo/index.js:60:29 at tryCatcher (/workspaces/theme-next-docs/node_modules/bluebird/js/release/util.js:16:23) at /workspaces/theme-next-docs/node_modules/bluebird/js/release/method.js:15:34 at RouteStream._read (/workspaces/theme-next-docs/node_modules/hexo/dist/hexo/router.js:43:9) at Readable.read (node:internal/streams/readable:739:12) at resume_ (node:internal/streams/readable:1257:12) at process.processTicksAndRejections (node:internal/process/task_queues:90:21) ``` |
Beta Was this translation helpful? Give feedback.
Replies: 4 comments
-
我整合了 hexo-generator-index 和 hexo-generator-index-i18n,但如何覆盖 |
Beta Was this translation helpful? Give feedback.
-
https://hexo-next-demo.netlify.app/ |
Beta Was this translation helpful? Give feedback.
-
Hexo 对于多语言的支持不是很完善,目前需要安装第三方插件;又因为不同用户对于多语言的需求差异比较大,考虑到维护成本,NexT 只做了比较基础的适配。如果关于多语言支持的最佳实践有比较好的建议,欢迎分享!如果在 NexT 上需要做进一步修改和适配的话也欢迎讨论~ |
Beta Was this translation helpful? Give feedback.
-
Hexo 这边,对于多语言的每个语言的首页,我提交了一个 PR,不知道会不会被通过,整合了 xcatliu/hexo-generator-index-i18n: I18n index generator plugin for Hexo 这里面的功能,实现和 hexojs/hexo-generator-index: Index generator plugin for Hexo兼容,添加下面两个功能:
NexT 这边我感觉就是下面这段改成不需要区分默认语言和其他语言就可以了,但不了解对其他东西是否有影响,实际上如果是设置多语言的博客,感觉设置
hexo.extend.helper.register('i18n_path', function(language) {
const { path, lang } = this.page;
const base = path.startsWith(lang) ? path.slice(lang.length + 1) : path;
return this.url_for(`${this.languages.indexOf(language) === 0 ? '' : '/' + language}/${base}`);
}); 写了一下参考实现和效果:Hexo NexT 多语言支持 | Junyu |
Beta Was this translation helpful? Give feedback.
Hexo 这边,对于多语言的每个语言的首页,我提交了一个 PR,不知道会不会被通过,整合了 xcatliu/hexo-generator-index-i18n: I18n index generator plugin for Hexo 这里面的功能,实现和 hexojs/hexo-generator-index: Index generator plugin for Hexo兼容,添加下面两个功能:
NexT 这边我感觉就是下面这段改成不需要区分默认语言和其他语言就可以了,但不了解对其他东西是否有影响,实际上如果是设置多语言的博客,感觉设置
permalink: :lang/:title/
是比较合理的,这样就是默认语言的文章也有这个:lang
的前缀,只要保持 post 的结构是下面这样的,就可以实现用下面的按钮进行直接切换(如果文章存在)