How do you structure i18n yaml files in Rails?
internationalization, ruby-on-rails, ruby-on-rails-3, structure, yaml
Solution
I've found that the best overall strategy is to somewhat reproduce the file structure so that given any translation, I can immediately find where it was called from. This gives me some kind of context for making the translation.
The majority of application translations are found in views, so my biggest top level namespace is usually `views`.
I create sub namespaces for the controller name and the action name or partial being used ex :
- `views.users.index.title`
- `views.articles._sidebar.header`
Both of these examples should make it obvious what part of my app we're translating and which file to look in to find it.
You mention navigation and buttons, if they are to be generic, then they belong in the `views.application` namespace just as do their view counterparts :
- `views.application._main_nav.links.about_us` - a link in our app's main navigation partial
- `views.application.buttons.save`
- `views.application.buttons.create` - I have a bunch of these buttons ready to be used when needed
Flash messages are generated from the controller, so their top level namespace is... `controllers`! :)
We apply the same logic as we do to views :
- `controllers.users.create.flash.success|alert|notice`
Again if you wanted to provide generic flash messages like "Operation successful", you would write something like this :
- `controllers.application.create.flash.notice`
Finally, keys can be anything that is valid YAML, but please stick to using periods `.` as separators and underscores `_` between words as a matter of convention.
The only thing left to sort out now, is getting rails' translations into its own namespace to clean up our top level :)
Problem
I started populating an en yaml file in Rails and I can already tell it will get messy and out of hand before too long. Is there a convention to keeping this file organized? So far I have this structure: ``` language: resource: pages: # index, show, new, edit page html elements: # h1, title activerecord: attributes: model: property: ``` Now I have the following things that I want to fit into this structure but I'm unsure how to: - Navigation - Button text (save changes, create account, etc) - Error messages from controller flash - How to add multi-word keys. Do I use a space or an underscore? For exmaple, `t(".update button")`) or `t(".update_button")` Is there a convention to locale file structure?