【问题标题】:Multilingual admin with Globalize2使用 Globalize2 的多语言管理员
【发布时间】:2009-11-23 13:23:55
【问题描述】:

我有一个多语言管理员(英语和葡萄牙语),需要同时保存两种语言的数据,例如同一表单中的描述 EN 字段和描述 PT 字段。

Globalize2 有一些魔力,我不知道如何保存它。我将在这里发布我的控制器操作,这显然需要一些重构。谢谢各位!

def create
  @brand = Brand.create()
  @brand.title = params[:title]
  @brand.upload_logo(params[:logo]) unless params[:logo].blank?
  @brand.order = params[:order]
  @brand.priority = params[:priority]

  plataforms = Plataform.find(:all, :conditions => ["id IN (?)", params[:plataforms]])
  @brand.plataforms = plataforms

  params[:pt].each do |k, v|
    I18n.locale = :pt
    eval "@brand.#{k} = v"
  end

  params[:en].each do |k, v|
    I18n.locale = :en
    eval "@brand.#{k} = v"  
  end

  respond_to do |format|
    if @brand.save
    # if 1 == 1
      flash[:notice] = 'Brand was successfully created.'
      format.html { redirect_to(@brand) }
      format.xml  { render :xml => @brand, :status => :created, :location => @brand }
    else
      format.html { render :action => "new" }
      format.xml  { render :xml => @brand.errors, :status => :unprocessable_entity }
    end
  end
end

对不起..我忘了说..我的疑问是保存翻译。这段代码:

params[:pt].each do |k, v|
  I18n.locale = :pt
  eval "@brand.#{k} = v"
end

params[:en].each do |k, v|
  I18n.locale = :en
  eval "@brand.#{k} = v"  
end

【问题讨论】:

  • 我从来没有使用过 globalize 模型翻译,所以我帮不了你太多,但是对用户提交的数据使用 eval 是一个巨大的安全风险。
  • 我知道......我只是用来从名为“k”的视图中获取一些字段并输入一个值......为了减少编码......但我真的不知道如何以漂亮的方式解决这个问题..

标签: ruby-on-rails ruby internationalization


【解决方案1】:

使用i18n 进行全球化非常简单。

例如:

flash[:notice] = t 'Brand was successfully created'

然后在 config/locales 中创建一个 en.yml :

en:
 Brand was successfully created: "Brand was successfully created"

葡萄牙语版本也遵循相同的约定:

pt: (not sure about the country code)
Brand was successfully created: "bla bla bla I don't speak portugese"

【讨论】:

    猜你喜欢
    • 2012-09-09
    • 1970-01-01
    • 1970-01-01
    • 2011-01-07
    • 2022-08-18
    • 2013-10-06
    • 2019-02-28
    • 2012-01-09
    • 1970-01-01
    相关资源
    最近更新 更多