Skip to content

Localizing language with a gender

Lukas Svoboda edited this page Mar 1, 2014 · 2 revisions

I18n does not support inflection according to a gender (or tense etc.)

You can use i18n-inflector-rails and redefine methods for generating default messages.

Gemfile:

gem 'i18n-inflector-rails'

app/controllers/resources_controller.rb:

class ResourcesController < Basepack::BaseController
  include Basepack::Import::Controller

  # setting i18n-inflector
  # see:
  #   http://rubydoc.info/gems/i18n-inflector-rails/I18n/Inflector/Rails/ClassMethods
  #   http://rubydoc.info/gems/i18n-inflector/file/docs/USAGE
  inflection_method :gender

  def gender
    #...some default implementation.
    #You can:
    # * redefine this metod in subclasses to return a proper gender.
    # * delegate to to the resource model (resource_class) and define the gender there
    # * define the model's gender in localization and read it from there
  end 

  def message_edit_done(name = resource_config.label)
    t("basepack.flash.successful", :name => name, :action => t("admin.actions.edit.done", gender: gender))
  end 

  def message_new_done(name = resource_config.label)
    t("basepack.flash.successful", :name => name, :action => t("admin.actions.new.done", gender: gender))
  end

  def message_destroy_done(name = resource_config.label)
    t("basepack.flash.successful", :name => name, :action => t("admin.actions.delete.done", gender: gender))
  end

  def message_bulk_edit_done(name = resource_config.label)
    t("basepack.flash.successful", :name => name, :action => t("basepack.actions.bulk_edit.done", gender: gender))
  end

  def message_bulk_edit_fail(model_label_plural = resource_config.label_plural)
    t("basepack.flash.error_on_items", :model_label_plural => model_label_plural, :action => t("basepack.actions.bulk_edit.done"))
  end

end

Also the localization file is needed to extend. Example of Czech localization:

cs:
  web_name: "Ukázkový projekt"

  i18n:
    inflections:
      gender:
        f:      "female"
        m:      "male"
        n:      "neuter"
        man:    :@m 
        woman:  :@f 
        default: :@n 

  basepack:
    flash:
      successful: "%{name} úspěšně %{action}"
      error: "%{name} @{f:nebyla|m:nebyl|n:nebylo} %{action}"
      noaction: "Neprovodeny žádné akce"
      model_not_found: "Model '%{model}' se nepodařilo nalézt"
      object_not_found: "%{model} s ID '%{id}' se @{f:nepodařila|m:nepodařil|n:nepodařilo} nalézt"
      error_on_items: "Objekt %{model_label_plural} nelze %{action}"

  admin:
    actions:
      new:
        done: "@{f:vytvořena|m:vytvořen|n:vytvořeno}"
      edit:
        done: "@{f:upravena|m:upraven|n:upraveno}"
      delete:
        done: "@{f:odstraněna|m:odstraněn|n:odstraněno}"