Skip to content
This repository

HTTPS clone URL

Subversion checkout URL

You can clone with HTTPS or Subversion.

Download ZIP

Provides a set of convenient helpers and active model additions for working with multiple languages

branch: master

Fetching latest commit…

Octocat-spinner-32-eaf2f5

Cannot retrieve the latest commit at this time

Octocat-spinner-32 lib
Octocat-spinner-32 test
Octocat-spinner-32 .gitignore
Octocat-spinner-32 .travis.yml
Octocat-spinner-32 Gemfile
Octocat-spinner-32 README.md
Octocat-spinner-32 Rakefile
Octocat-spinner-32 i18n_toolbox.gemspec
README.md

i18n_toolbox Build Status

I18n_toolbox is a collection of helpers and active_model additions that solve basic problems that kept showing up when working with multiple language sites:

  • Showing different images for different locales
  • Different validates_length_of values for different locales
  • Truncating text to different lengths depending on locale
  • Applying "possessive case" correctly with correct use of apostrophes for different languages (ie "Jack's Recipes", "Miles' Recipes", "Recettes de Julien")

Usage

image_tag

Serve up a different image depending on locale.

I18n.locale = :en
image_tag('logo.png', localize: true) # => /images/en/logo.png
I18n.locale = :ja
image_tag('logo.png', localize: true) # => /images/ja/logo.png

truncate

Truncate text that appears longer on screen (such as 2 byte Japanese) to avoid breaking layouts dependent on length of text.

config/locales/ja.yml

ja:
  i18n_toolbox:
    character_ratio: 0.5

Output:

I18n.locale = :en
truncate("2 byte characters are wider", length: 20, localize: true) # => "2 byte characters..." (20 chars)
I18n.locale = :ja
truncate("2 byte characters are wider", length: 20, localize: true) # => "2 byte ..." (10 chars)

validates_length_of

Have different validation lengths for different locales.

config/locales/ja.yml

ja:
  i18n_toolbox:
    character_ratio: 0.5

Model:

class Post < ActiveRecord::Base
  validates_length_of :title, maximum: 40, localize: true
  # ...
end

I18n.locale = :en
Post.new(title: 'English sentences use more chars').valid? # => true, length is under 40
I18n.locale = :ja
Post.new(title: 'Japanese sentences use fewer chars').valid? # => false, length is over 20

possessive

Often used for user page titles, such as "Michael's Activity Feed" etc.

config/locales/en.yml

en:
  i18n_toolbox:
    possessive: "%{owner}'s %{thing}"
    possessive_s: "%{owner}' %{thing}"

config/locales/fr.yml

fr:
  i18n_toolbox:
    possessive: "%{thing} de %{owner}"

Output:

I18n.locale = :en
possessive('Jack', 'Recipes') # => "Jack's Recipes"
possessive('Miles', 'Recipes') # => "Miles' Recipes"

I18n.locale = :fr
possessive('Julien', 'Recettes') # => "Recettes de Julien"
possessive('Jacques', 'Recettes') # => "Recettes de Jacques"

License

MIT License. Copyright 2012 Cookpad Pte http://cookpad.it

Something went wrong with that request. Please try again.