我想调整我的多语言 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
然后得到
./
en/
posts/
post-about-docpad.html
ru/
posts/
post-about-docpad.html
我应该如何配置docpad?
最佳答案
这是可以做到的,但需要对文件结构进行三处更改:
由于 DocPad 路径中的点用于分隔不同的渲染器,并且我不确定如何在渲染器中执行我建议的操作,因此它不会抛出
渲染扩展...没有不做任何事情。
错误,我建议使用_en
/_ru
而不是.en
/.ru
,这样您就可以根据文件名执行操作,而无需任何额外的麻烦。最好使用 Docpad 的初始路径,即将您的
pages
和blog
文件夹放入documents
文件夹中。可能有一种方法可以在没有
.html.md
部分的情况下使用文件,但由于它是 DocPad 方式,因此您应该使用它。
也许有一些方法可以在不进行这些更改的情况下完成您想要的操作,但这不会那么简单:)
因此,将代码放置在 docpad.coffee
中的 docpadConfig
中(这里是 example project at GitHub ):
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/
和 /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/来轻松重写您想要的所有内容')
与 .replace('/out/', '/ru/')
等 — 这会将渲染的文件提升到 out
之上一级>.
关于docpad - 为不同语言生成不同的 docpad 集合,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23700995/