mirror of https://github.com/rails/rails
Update some i18n references in guides (#32182)
* Remove reference to Globalize::Backend::Static as this class no longer exists. * Remove reference to google group * Remove confusing reference to Globalize3 * Add section on translating stored content
This commit is contained in:
parent
5d5a70c954
commit
fc55c34bea
|
@ -42,6 +42,8 @@ Internationalization is a complex problem. Natural languages differ in so many w
|
|||
|
||||
As part of this solution, **every static string in the Rails framework** - e.g. Active Record validation messages, time and date formats - **has been internationalized**. _Localization_ of a Rails application means defining translated values for these strings in desired languages.
|
||||
|
||||
To localize store and update _content_ in your application (e.g. translate blog posts), see the [Translating model content](#translating-model-content) section.
|
||||
|
||||
### The Overall Architecture of the Library
|
||||
|
||||
Thus, the Ruby I18n gem is split into two parts:
|
||||
|
@ -105,7 +107,7 @@ This means, that in the `:en` locale, the key _hello_ will map to the _Hello wor
|
|||
|
||||
The I18n library will use **English** as a **default locale**, i.e. if a different locale is not set, `:en` will be used for looking up translations.
|
||||
|
||||
NOTE: The i18n library takes a **pragmatic approach** to locale keys (after [some discussion](https://groups.google.com/forum/#!topic/rails-i18n/FN7eLH2-lHA)), including only the _locale_ ("language") part, like `:en`, `:pl`, not the _region_ part, like `:en-US` or `:en-GB`, which are traditionally used for separating "languages" and "regional setting" or "dialects". Many international applications use only the "language" element of a locale such as `:cs`, `:th` or `:es` (for Czech, Thai and Spanish). However, there are also regional differences within different language groups that may be important. For instance, in the `:en-US` locale you would have $ as a currency symbol, while in `:en-GB`, you would have £. Nothing stops you from separating regional and other settings in this way: you just have to provide full "English - United Kingdom" locale in a `:en-GB` dictionary. Few gems such as [Globalize3](https://github.com/globalize/globalize) may help you implement it.
|
||||
NOTE: The i18n library takes a **pragmatic approach** to locale keys (after [some discussion](https://groups.google.com/forum/#!topic/rails-i18n/FN7eLH2-lHA)), including only the _locale_ ("language") part, like `:en`, `:pl`, not the _region_ part, like `:en-US` or `:en-GB`, which are traditionally used for separating "languages" and "regional setting" or "dialects". Many international applications use only the "language" element of a locale such as `:cs`, `:th` or `:es` (for Czech, Thai and Spanish). However, there are also regional differences within different language groups that may be important. For instance, in the `:en-US` locale you would have $ as a currency symbol, while in `:en-GB`, you would have £. Nothing stops you from separating regional and other settings in this way: you just have to provide full "English - United Kingdom" locale in a `:en-GB` dictionary.
|
||||
|
||||
The **translations load path** (`I18n.load_path`) is an array of paths to files that will be loaded automatically. Configuring this path allows for customization of translations directory structure and file naming scheme.
|
||||
|
||||
|
@ -1099,13 +1101,11 @@ Customize your I18n Setup
|
|||
|
||||
For several reasons the Simple backend shipped with Active Support only does the "simplest thing that could possibly work" _for Ruby on Rails_[^3] ... which means that it is only guaranteed to work for English and, as a side effect, languages that are very similar to English. Also, the simple backend is only capable of reading translations but cannot dynamically store them to any format.
|
||||
|
||||
That does not mean you're stuck with these limitations, though. The Ruby I18n gem makes it very easy to exchange the Simple backend implementation with something else that fits better for your needs. E.g. you could exchange it with Globalize's Static backend:
|
||||
That does not mean you're stuck with these limitations, though. The Ruby I18n gem makes it very easy to exchange the Simple backend implementation with something else that fits better for your needs, by passing a backend instance to the `I18n.backend=` setter.
|
||||
|
||||
```ruby
|
||||
I18n.backend = Globalize::Backend::Static.new
|
||||
```
|
||||
For example, you can replace the Simple backend with the the Chain backend to chain multiple backends together. This is useful when you want to use standard translations with a Simple backend but store custom application translations in a database or other backends.
|
||||
|
||||
You can also use the Chain backend to chain multiple backends together. This is useful when you want to use standard translations with a Simple backend but store custom application translations in a database or other backends. For example, you could use the Active Record backend and fall back to the (default) Simple backend:
|
||||
With the Chain backend, you could use the Active Record backend and fall back to the (default) Simple backend:
|
||||
|
||||
```ruby
|
||||
I18n.backend = I18n::Backend::Chain.new(I18n::Backend::ActiveRecord.new, I18n.backend)
|
||||
|
@ -1166,13 +1166,22 @@ To do so, the helper forces `I18n#translate` to raise exceptions no matter what
|
|||
I18n.t :foo, raise: true # always re-raises exceptions from the backend
|
||||
```
|
||||
|
||||
Translating Model Content
|
||||
-------------------------
|
||||
|
||||
The I18n API described in this guide is primarily intended for translating interface strings. If you are looking to translate model content (e.g. blog posts), you will need a different solution to help with this.
|
||||
|
||||
Several gems can help with this:
|
||||
|
||||
* [Globalize](https://github.com/globalize/globalize): Store translations on separate translation tables, one for each translated model
|
||||
* [Mobility](https://github.com/shioyama/mobility): Provides support for storing translations in many formats, including translation tables, json columns (Postgres), etc.
|
||||
* [Traco](https://github.com/barsoom/traco): Translatable columns for Rails 3 and 4, stored in the model table itself
|
||||
|
||||
Conclusion
|
||||
----------
|
||||
|
||||
At this point you should have a good overview about how I18n support in Ruby on Rails works and are ready to start translating your project.
|
||||
|
||||
If you want to discuss certain portions or have questions, please sign up to the [rails-i18n mailing list](https://groups.google.com/forum/#!forum/rails-i18n).
|
||||
|
||||
|
||||
Contributing to Rails I18n
|
||||
--------------------------
|
||||
|
|
Loading…
Reference in New Issue