为不同语言生成不同的 docpad 集合

2024-02-18

我想调整我的多语言 DocPad 博客,以便以 *.ru.md 结尾的页面进入 /ru/ 目录,以 *.en.md 结尾的页面进入 /en/ 目录。

假设这是初始结构

src/
  pages/
    page1.ru.md
    page1.en.md
    page2.ru.md

这就是我想要的:

./
  en/
    page1.html
  ru/
    page1.html
    page2.html

./因为我要主持gh-pages.

帖子也是如此。我想将它们存储在

src/
  posts/
    post-about-docpad.ru.md
    post-about-docpad.en.md

And get

./
  en/
    posts/
      post-about-docpad.html
  ru/
    posts/
      post-about-docpad.html

我应该如何配置 docpad?


这是可以做到的,但需要对文件结构进行三处更改:

  1. 由于 DocPad 路径中的点用于分隔不同的渲染器,并且我不确定如何在渲染器内执行我建议的操作,因此它不会抛出Rendering the extension … didn't do anything.错误,我建议使用_en/_ru代替.en/.ru,这样您就可以根据文件名执行操作,而无需任何额外的麻烦。

  2. 最好使用 Docpad 的初始路径,即将您的pages and blog里面的文件夹documents folder.

  3. 可能有一种方法可以在不使用文件的情况下使用这些文件.html.md部分,但由于它是 DocPad 方式,因此您应该使用它。

也许有一些方法可以在不进行这些更改的情况下完成您想要的操作,但这不会那么简单:)

所以,代码放置在docpadConfig in docpad.coffee(这是一个GitHub 上的示例项目 https://github.com/kizu/docpad-test):

docpadConfig = {
    collections:
        # Declare `ru` and `en` collections
        ruDocuments: ->
            @getCollection("documents").findAllLive({
                basename: /_ru$/
            })
        enDocuments: ->
            @getCollection("documents").findAllLive({
                basename: /_en$/
            })

    events:
        renderBefore: () ->
            # Rewrite `pages/` to the root and `posts/` to the `blog/`.
            this.docpad.getCollection('documents').forEach (page) ->
                newOutPath = page.get('outPath')
                    .replace('/out/pages/', '/out/')
                    .replace('/out/posts/', '/out/blog/')
                newUrl = page.get('url')
                    .replace('pages/', '')
                    .replace('posts/', 'blog/')
                page.set('outPath', newOutPath)
                page.setUrl(newUrl)

            # Rewrite `_ru` to the `/ru/`
            this.docpad.getCollection('ruDocuments').forEach (page) ->
                newOutPath = page.get('outPath')
                    .replace('/out/', '/out/ru/')
                    .replace('_ru.', '.')
                newUrl = '/ru' + page.get('url')
                page.set('outPath', newOutPath)
                page.setUrl(newUrl)

            # Rewrite `_en` to the `/en/`
            this.docpad.getCollection('enDocuments').forEach (page) ->
                newOutPath = page.get('outPath')
                    .replace('/out/', '/out/en/')
                    .replace('_en.', '.')
                page.set('outPath', newOutPath)
                newUrl = '/en' + page.get('url').replace('_en.', '.')
                page.setUrl(newUrl)
}
module.exports = docpadConfig

首先,我们声明两个集合:一个用于所有 ru 文档,另一个用于所有 en 文档。

然后我们首先重写pages/到根目录,然后重写_en/_ru文件到/en/ and /ru/.

请注意,更改只是源文件的存储方式,结果输出将与您在问题中想要的相同。

所以,而不是

src/
  pages/
    page1.ru.md
    page1.en.md
    page2.ru.md
  posts/
    post-about-docpad.ru.md
    post-about-docpad.en.md

你应该这样写:

src/
  documents/
    pages/
      page1_ru.html.md
      page1_en.html.md
      page2_ru.html.md
    posts/
      post-about-docpad_ru.html.md
      post-about-docpad_en.html.md

但您会根据需要获得所需的输出。唯一的问题是我不明白有关的部分gh-pages:你打算将结果和源存储在同一个分支中吗?我建议使用master对于源和gh-pages为了结果。

但是,如果您只需要一个分支,那么,好吧,您可以通过替换轻松重写您想要的所有内容.replace('/out/', '/out/ru/') with .replace('/out/', '/ru/')等等——这会将渲染的文件提升到上一级out.

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

为不同语言生成不同的 docpad 集合 的相关文章

  • C++ 错误:基函数受保护

    我想知道为什么下面的代码不能编译 class base protected typedef void base function type const void function impl const error void base fun
  • 优化字符串连接的聚合[关闭]

    Closed 这个问题需要细节或清晰度 help closed questions 目前不接受答案 Update 对于那些有幽默感的人 您可以假设无论传递给它什么函数 聚合仍然会产生正常结果 包括在被优化的情况下 我编写这个程序是为了构建一
  • DataContract,默认 DataMember 值

    有没有办法在反序列化期间选择不在 xml 文件中的属性的默认值 If the mAgexml 文件中不存在属性 我想使用默认值 18 这可能吗 DataContract public class Person public Person D
  • 如何将触摸事件从 UIView 传递到其下方的 UIView?

    一个简单的问题 但我找不到解决方案 我有 2 个 UIView 一个在同一个父视图中 一个在另一个之上 都有GestureRecognizers在它们上 但只有最顶层正在接收事件 我怎样才能让最上面的视图将他获得的所有手势传递给它下面的其他
  • Golang MySQL 错误 - packet.go:33: 意外的 EOF

    我将整个代码库从 PHP 切换到 Go 在运行的几个进程中 我随机收到此错误 mysql 2016 10 11 09 17 16 packets go 33 unexpected EOF 这是我的 db 包 它处理与数据库的所有连接 pac
  • 有人可以向我解释一些 helm 的用例吗?

    我目前正在使用 kubernetes 并且遇到了 helm 假设我不喜欢用与我的应用程序无关的进程 感染 我的 kubernetes 集群 但如果它有益的话 我很乐意接受 所以我做了一些研究 但我仍然找不到任何使用我的 yaml 描述符和
  • ASP.Net URL 编码

    我正在 ASP net 中实现 URL 重写 但我的 URL 给我带来了很多问题 URL 是根据部门和类别的数据库生成的 我希望员工能够使用任何合适的特殊字符将项目添加到数据库中 而不会破坏网站 我在构建 URL 之前对数据进行编码 有几个
  • Sphinx .net 实现

    是否可以在 net MSSQL 应用程序中实现Sphinx 全文搜索 如果是这样 任何帮助如何实现相同的 一个小的描述将会有很大帮助 我们正在使用 SphinxConnector NET http www sphinxconnector n
  • Zend Framework:需要ACL的典型示例

    有人可以指导我 ACL 的典型实施示例吗 就像 管理员 可以访问 管理 模块 用户 可以访问 用户模块 访客可以访问 打开 页面 我可以把我的 ACL 贴给你 它由三个元素组成 acl ini ACL 控制器插件 My Controller
  • Big O:如何根据外部 for 循环确定 for 循环增量的运行时间?

    我有以下算法 运行时复杂度为 O N 2 但我想对其有更深入的了解 而不是仅仅记住常见的运行时 分解和分析它的正确方法是什么i 1考虑在内层 for 循环中吗 void printunorderedPairs int array for i
  • 通过kwargs更新模型django

    我如何传递一个包含字段的字典来更新 Django 模型 这不是创建一个对象 而是更新它 example obj Object objects create index id fields 只要PK相同 现有的行就会被覆盖 obj Objec
  • Centos 7,System.nanoTime 比 Windows 慢 400 倍

    我看过并读过关于为什么 System nanoTime 在某些操作系统上比其他操作系统慢的文章 但是我从未见过任何东西可以解释我现在看到的差异 我正在使用 JMH 运行这个基准测试 注意 它也使用 System nanoTime Bench
  • 智能时间计算[关闭]

    Closed 这个问题不符合堆栈溢出指南 help closed questions 目前不接受答案 我正在寻找一些标准和算法 可能是库 来在某些事件发生时呈现 我的意思是 fo ex 如果有人在 2 分钟前发布消息 我想显示 2 分钟前
  • 如何使用 Spring Security 显示隐藏元素

    我有一个按钮 我想在登录页面中显示 所以当用户登录时我想隐藏这个按钮 我认为
  • Android 导航 - 是否可以使用 popBackStack 方法从上部片段恢复包?

    当我从上部片段传递到下部片段时 我试图在片段之间传递数据 但我不想使用导航方法 它向流程历史记录添加了一个新的目的地 但我想返回到上一个片段 恢复其数据并刷新视图 是否可以使用 NavController 和 popBackStack 方法

随机推荐