require "i18n" module FriendlyId # @guide begin # # ## Translating Slugs Using Simple I18n # # The {FriendlyId::SimpleI18n SimpleI18n} module adds very basic i18n support to # FriendlyId. # # In order to use this module, your model must have a slug column for each locale. # By default FriendlyId looks for columns named, for example, "slug_en", # "slug_es", "slug_pt_br", etc. The first part of the name can be configured by # passing the `:slug_column` option if you choose. Note that the column for the # default locale must also include the locale in its name. # # This module is most suitable to applications that need to support few locales. # If you need to support two or more locales, you may wish to use the # friendly_id_globalize gem instead. # # ### Example migration # # def self.up # create_table :posts do |t| # t.string :title # t.string :slug_en # t.string :slug_es # t.string :slug_pt_br # t.text :body # end # add_index :posts, :slug_en # add_index :posts, :slug_es # add_index :posts, :slug_pt_br # end # # ### Finds # # Finds will take into consideration the current locale: # # I18n.locale = :es # Post.friendly.find("la-guerra-de-las-galaxias") # I18n.locale = :en # Post.friendly.find("star-wars") # I18n.locale = :"pt-BR" # Post.friendly.find("guerra-das-estrelas") # # To find a slug by an explicit locale, perform the find inside a block # passed to I18n's `with_locale` method: # # I18n.with_locale(:es) do # Post.friendly.find("la-guerra-de-las-galaxias") # end # # ### Creating Records # # When new records are created, the slug is generated for the current locale only. # # ### Translating Slugs # # To translate an existing record's friendly_id, use # {FriendlyId::SimpleI18n::Model#set_friendly_id}. This will ensure that the slug # you add is properly escaped, transliterated and sequenced: # # post = Post.create :name => "Star Wars" # post.set_friendly_id("La guerra de las galaxias", :es) # # If you don't pass in a locale argument, FriendlyId::SimpleI18n will just use the # current locale: # # I18n.with_locale(:es) do # post.set_friendly_id("La guerra de las galaxias") # end # # @guide end module SimpleI18n # FriendlyId::Config.use will invoke this method when present, to allow # loading dependent modules prior to overriding them when necessary. def self.setup(model_class) model_class.friendly_id_config.use :slugged end def self.included(model_class) model_class.class_eval do friendly_id_config.class.send :include, Configuration include Model end end module Model def set_friendly_id(text, locale = nil) I18n.with_locale(locale || I18n.locale) do set_slug(normalize_friendly_id(text)) end end def slug=(value) super write_attribute friendly_id_config.slug_column, value end end module Configuration def slug_column "#{super}_#{locale_suffix}" end private def locale_suffix I18n.locale.to_s.underscore end end end end