我最终为my Rails Tutorial sample app 的 i18n 做了类似的事情。不确定这是否重要,但我使用RDiscount 来渲染 Markdown。
综上,我将每个i18n化的markdown文件归档在config/locales下的controller/action目录下,并确定需要在controller中渲染哪个页面.例如,对于一个简单的 About 页面,这里是 :en markdown 文件所在的位置:
config/locales/static_pages/about/about.en.md
About Us
========
Some more markdown text...
要渲染的文件的路径在控制器中确定并分配给@page,然后文件本身在相关的HAML部分中渲染出来:
app/controllers/static_pages_controller.rb
class StaticPagesController < ApplicationController
before_filter :localized_page
def about
# ...
end
# ...
protected
def localized_page
locale = params[:locale]
@page = "#{Rails.root}/config/locales/#{controller_name}/"\
"#{action_name}/#{action_name}.#{locale}.md"
end
end
app/views/static_pages/about.html.haml
= render 'static_page', title: t('.about_us'), page: @page
app/views/static_pages/_static_page.html.haml
- provide(:title, title) if title
:markdown
#{render file: page}