在HAML中使用I18n降价字符串

时间:2013-03-08 02:21:14

标签: ruby-on-rails ruby-on-rails-3 internationalization haml markdown

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

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

或等同地:

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

2 个答案:

答案 0 :(得分:1)

我最终为my Rails Tutorial sample app的i18n做了类似的事情。不确定是否重要,但我使用RDiscount渲染Markdown。

总之,我将每个i18n-ized markdown文件归档到 config / locales 下的控制器/操作目录下,并确定需要在控制器中呈现哪个页面。例如,在简单的“关于”页面的情况下,这里是:en降价文件所在的位置:

<强>配置/区域设置/ static_pages /约/ 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

应用/视图/ 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}

答案 1 :(得分: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

希望它有所帮助。