Module: FriendlyId::SimpleI18n
- Defined in:
- lib/friendly_id/simple_i18n.rb
Overview
Translating Slugs Using Simple I18n
The 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", 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.text :body
end
add_index :posts, :slug_en
add_index :posts, :slug_es
end
Finds
Finds will take into consideration the current locale:
I18n.locale = :es
Post.find("la-guerra-de-las-galaxias")
I18n.locale = :en
Post.find("star-wars")
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.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 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
Defined Under Namespace
Modules: Configuration, Model
Class Method Summary (collapse)
- + (Object) included(model_class)
-
+ (Object) setup(model_class)
FriendlyId::Config.use will invoke this method when present, to allow loading dependent modules prior to overriding them when necessary.
Class Method Details
+ (Object) included(model_class)
79 80 81 82 83 84 |
# File 'lib/friendly_id/simple_i18n.rb', line 79 def self.included(model_class) model_class.class_eval do friendly_id_config.class.send :include, Configuration include Model end end |
+ (Object) setup(model_class)
FriendlyId::Config.use will invoke this method when present, to allow loading dependent modules prior to overriding them when necessary.
75 76 77 |
# File 'lib/friendly_id/simple_i18n.rb', line 75 def self.setup(model_class) model_class.friendly_id_config.use :slugged end |