0

我在我的语言文件中本地化了降价字符串,我正在寻找一种更简洁的方法来在 HAML 中执行以下操作:

#text_for_something
  :markdown
    #{ t(:text_in_markown) }

或者,等效地:

#text_for_something!= Maruku.new( t(:text_in_markown) ).to_html
4

2 回答 2

1

我最终为我的 Rails 教程示例应用程序的 i18n 做了类似的事情。不确定这是否重要,但我使用RDiscount来呈现 Markdown。

总之,我将每个 i18n 化的 markdown 文件归档在config/locales下的controller/action目录下,并确定需要在控制器中呈现哪个页面。例如,对于一个简单的 About 页面,这里是markdown 文件所在的位置::en

config/locales/static_pages/about/about.en.md

About Us
========

Some more markdown text...

要呈现的文件的路径在控制器中确定并分配给@page,然后文件本身在相关的 HAML 部分中呈现出来:

应用程序/控制器/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

应用程序/视图/static_pages/_static_page.html.haml

- provide(:title, title) if title
:markdown
  #{render file: page}
于 2013-03-08T07:59:44.807 回答
1

我知道这不是您想要的,但您可以将以下助手添加到helpers/application_helper.rb

def render_md(key)
    Maruku.new( t(key) ).to_html
end

然后像这样在你的 HAML 中使用它:

#text_for_something!= render_md :text_in_markown

希望能帮助到你。

于 2013-04-07T14:01:21.870 回答