开发者

Translation of models in Ruby on Rails 3.0

Using Ruby on Rails 3.0, I would like to have pages where posts have side-by-side translations. For example, a page would look like this

+---------------+---------------+-----------------+
| Hello         | Hola          | Bonjour         |
+---------------+---------------+-----------------+ ... (there could be many more languages)
| Hello, world. | Hola, mundo.  | Bonjour, monde. |
+---------------+---------------+-----------------+

What's an easy way to go about this? I don't believe this can be solved with I18N since that usually means setting one locale and translating an entire page to that langu开发者_StackOverflow社区age. I want multiple columns of languages (these languages and how many there are is also unknown). I know I could create lots of tables for translations like Posts, PostTitleTranslations, and PostBodyTranslations, but that doesn't seem like the best way to do it. Has anyone ever solved anything like this before?


As I understood you want to translate table's rows. You can do it with using simplest, and yet best practice I've found and used in 3 projects. Add PostTranslation model, with your fields, like title, text, etc. and also with the special columns: post_id (in your example) and locale.

It could be done using puret (which is supports rails3 from it's beginning) or with using plugin developed by me has_translations (right now I've tested it only on rails 2.3, but next which I will release in very sort time (version 0.4) will support rails3).

It's very easy to use. You can read README files straight forward by clicking the links.

If you will have any question, just write me a message on a github.


For the sake of completeness

You need files for each locale:

config
|
+- locales
   |
   +- es.yml
      en.yml
      fr.yml

Example using es.yml

es:
  :hello "Hola"
  :world "mundo"

Like Andreas said before, using t('something'), :locale => :xx you can pick and choose what you want.

<p>
  <%= t('hello', :locale => :es) %>
  <br />
  <%= "#{t('hello', :locale => :es)}, #{t('world', :locale => :es)}.
</p>


I have created a Ruby on Rails plugin named acts_as_translatable that allows you to easily translate your models and database tables.

  • View the project at GitHub
  • View a blog post about the plugin at my website

Hope you can use it!

Best regards, Lasse Bunk


You can override the locale in which to display a translation using the :locale option to I18n.t:

I18n.locale = :de             # set default locale to German
I18n.t('key')                 # display German translation for 'key'
I18n.t('key', :locale => :en) # display English translation for 'key' even though
                              # the default locale is still set to :de

Knowing this, it should be easy to set up a table like the one in your example.

0

上一篇:

下一篇:

精彩评论

暂无评论...
验证码 换一张
取 消

最新问答

问答排行榜