Commit 4ac784cd by Alexander Makarov

Restructured i18n doc, finished i18n formatter section

parent cec59b1a
...@@ -45,8 +45,10 @@ If there's no translation for `ru-RU` Yii will try `ru` as well before failing. ...@@ -45,8 +45,10 @@ If there's no translation for `ru-RU` Yii will try `ru` as well before failing.
> **Note**: you can further customize details specifying language > **Note**: you can further customize details specifying language
> [as documented in ICU project](http://userguide.icu-project.org/locale#TOC-The-Locale-Concept). > [as documented in ICU project](http://userguide.icu-project.org/locale#TOC-The-Locale-Concept).
Basic message translation Message translation
------------------------- -------------------
### Basics
Yii basic message translation in its basic variant works without additional PHP extension. What it does is finding a Yii basic message translation in its basic variant works without additional PHP extension. What it does is finding a
translation of the message from source language into target language. Message itself is specified as the second translation of the message from source language into target language. Message itself is specified as the second
...@@ -97,7 +99,7 @@ language is used. ...@@ -97,7 +99,7 @@ language is used.
Instead of configuring `fileMap` you can rely on convention which is `messages/BasePath/LanguageID/CategoryName.php`. Instead of configuring `fileMap` you can rely on convention which is `messages/BasePath/LanguageID/CategoryName.php`.
### Named placeholders #### Named placeholders
You can add parameters to a translation message that will be substituted with the corresponding value after translation. You can add parameters to a translation message that will be substituted with the corresponding value after translation.
The format for this is to use curly brackets around the parameter name as you can see in the following example: The format for this is to use curly brackets around the parameter name as you can see in the following example:
...@@ -111,7 +113,7 @@ echo \Yii::t('app', 'Hello, {username}!', [ ...@@ -111,7 +113,7 @@ echo \Yii::t('app', 'Hello, {username}!', [
Note that the parameter assignment is without the brackets. Note that the parameter assignment is without the brackets.
### Positional placeholders #### Positional placeholders
```php ```php
$sum = 42; $sum = 42;
...@@ -121,8 +123,8 @@ echo \Yii::t('app', 'Balance: {0}', $sum); ...@@ -121,8 +123,8 @@ echo \Yii::t('app', 'Balance: {0}', $sum);
> **Tip**: Try keep message strings meaningful and avoid using too many positional parameters. Remember that > **Tip**: Try keep message strings meaningful and avoid using too many positional parameters. Remember that
> translator has source string only so it should be obvious about what will replace each placeholder. > translator has source string only so it should be obvious about what will replace each placeholder.
Advanced placeholder formatting ### Advanced placeholder formatting
-------------------------------
In order to use advanced features you need to install and enable [intl](http://www.php.net/manual/en/intro.intl.php) PHP In order to use advanced features you need to install and enable [intl](http://www.php.net/manual/en/intro.intl.php) PHP
extension. After installing and enabling it you will be able to use extended syntax for placeholders. Either short form extension. After installing and enabling it you will be able to use extended syntax for placeholders. Either short form
...@@ -132,7 +134,7 @@ that allows you to specify formatting style. ...@@ -132,7 +134,7 @@ that allows you to specify formatting style.
Full reference is [available at ICU website](http://icu-project.org/apiref/icu4c/classMessageFormat.html) but since it's Full reference is [available at ICU website](http://icu-project.org/apiref/icu4c/classMessageFormat.html) but since it's
a bit cryptic we have our own reference below. a bit cryptic we have our own reference below.
### Numbers #### Numbers
```php ```php
$sum = 42; $sum = 42;
...@@ -155,7 +157,7 @@ echo \Yii::t('app', 'Balance: {0, number, ,000,000000}', $sum); ...@@ -155,7 +157,7 @@ echo \Yii::t('app', 'Balance: {0, number, ,000,000000}', $sum);
[Formatting reference](http://icu-project.org/apiref/icu4c/classicu_1_1DecimalFormat.html). [Formatting reference](http://icu-project.org/apiref/icu4c/classicu_1_1DecimalFormat.html).
### Dates #### Dates
```php ```php
echo \Yii::t('app', 'Today is {0, date}', time()); echo \Yii::t('app', 'Today is {0, date}', time());
...@@ -175,7 +177,7 @@ echo \Yii::t('app', 'Today is {0, date, YYYY-MM-dd}', time()); ...@@ -175,7 +177,7 @@ echo \Yii::t('app', 'Today is {0, date, YYYY-MM-dd}', time());
[Formatting reference](http://icu-project.org/apiref/icu4c/classicu_1_1SimpleDateFormat.html). [Formatting reference](http://icu-project.org/apiref/icu4c/classicu_1_1SimpleDateFormat.html).
### Time #### Time
```php ```php
echo \Yii::t('app', 'It is {0, time}', time()); echo \Yii::t('app', 'It is {0, time}', time());
...@@ -196,13 +198,13 @@ echo \Yii::t('app', 'It is {0, date, HH:mm}', time()); ...@@ -196,13 +198,13 @@ echo \Yii::t('app', 'It is {0, date, HH:mm}', time());
[Formatting reference](http://icu-project.org/apiref/icu4c/classicu_1_1SimpleDateFormat.html). [Formatting reference](http://icu-project.org/apiref/icu4c/classicu_1_1SimpleDateFormat.html).
### Spellout #### Spellout
```php ```php
echo \Yii::t('app', '{n,number} is spelled as {n, spellout}', ['n' => 42]); echo \Yii::t('app', '{n,number} is spelled as {n, spellout}', ['n' => 42]);
``` ```
### Ordinal #### Ordinal
```php ```php
echo \Yii::t('app', 'You are {n, ordinal} visitor here!', ['n' => 42]); echo \Yii::t('app', 'You are {n, ordinal} visitor here!', ['n' => 42]);
...@@ -210,7 +212,7 @@ echo \Yii::t('app', 'You are {n, ordinal} visitor here!', ['n' => 42]); ...@@ -210,7 +212,7 @@ echo \Yii::t('app', 'You are {n, ordinal} visitor here!', ['n' => 42]);
Will produce "You are 42nd visitor here!". Will produce "You are 42nd visitor here!".
### Duration #### Duration
```php ```php
...@@ -219,7 +221,7 @@ echo \Yii::t('app', 'You are here for {n, duration} already!', ['n' => 47]); ...@@ -219,7 +221,7 @@ echo \Yii::t('app', 'You are here for {n, duration} already!', ['n' => 47]);
Will produce "You are here for 47 sec. already!". Will produce "You are here for 47 sec. already!".
### Plurals #### Plurals
Different languages have different ways to inflect plurals. Some rules are very complex so it's very handy that this Different languages have different ways to inflect plurals. Some rules are very complex so it's very handy that this
functionality is provided without the need to specify inflection rule. Instead it only requires your input of inflected functionality is provided without the need to specify inflection rule. Instead it only requires your input of inflected
...@@ -251,7 +253,7 @@ Total {count, number} {count, plural, one{item} other{items}}. ...@@ -251,7 +253,7 @@ Total {count, number} {count, plural, one{item} other{items}}.
To learn which inflection forms you should specify for your language you can referrer to To learn which inflection forms you should specify for your language you can referrer to
[rules reference at unicode.org](http://unicode.org/repos/cldr-tmp/trunk/diff/supplemental/language_plural_rules.html). [rules reference at unicode.org](http://unicode.org/repos/cldr-tmp/trunk/diff/supplemental/language_plural_rules.html).
### Selections #### Selections
You can select phrases based on keywords. The pattern in this case specifies how to map keywords to phrases and You can select phrases based on keywords. The pattern in this case specifies how to map keywords to phrases and
provides a default phrase. provides a default phrase.
...@@ -268,26 +270,7 @@ Will produce "Snoopy is dog and it loves Yii!". ...@@ -268,26 +270,7 @@ Will produce "Snoopy is dog and it loves Yii!".
In the expression `female` and `male` are possible values. `other` handler values that do not match. Strings inside In the expression `female` and `male` are possible values. `other` handler values that do not match. Strings inside
brackets are sub-expressions so could be just a string or a string with more placeholders. brackets are sub-expressions so could be just a string or a string with more placeholders.
Views ### Specifying default translation
-----
You can use i18n in your views to provide support for different languages. For example, if you have view `views/site/index.php` and
you want to create special case for russian language, you create `ru-RU` folder under the view path of current controller/widget and
put there file for russian language as follows `views/site/ru-RU/index.php`.
> **Note**: If language is specified as `en-US` and there are no corresponding views, Yii will try views under `en`
> before using original ones.
Formatters
----------
In order to use formatters you need to install and enable [intl](http://www.php.net/manual/en/intro.intl.php) PHP
extension.
Examples
--------
###Specifying default translation
You can specify default translation that will be used as a fallback for categories that don't match any other translation. You can specify default translation that will be used as a fallback for categories that don't match any other translation.
This translation should be marked with `*`. In order to do it add the following to the config file (for the `yii2-basic` application it will be `web.php`): This translation should be marked with `*`. In order to do it add the following to the config file (for the `yii2-basic` application it will be `web.php`):
...@@ -313,7 +296,7 @@ echo Yii::t('not_specified_category', 'message from unspecified category'); ...@@ -313,7 +296,7 @@ echo Yii::t('not_specified_category', 'message from unspecified category');
Message will be loaded from `@app/messages/<LanguageCode>/not_specified_category.php`. Message will be loaded from `@app/messages/<LanguageCode>/not_specified_category.php`.
###Translating module messages ### Translating module messages
If you want to translate messages for a module and avoid using a single translation file for all messages, you can make it like the following: If you want to translate messages for a module and avoid using a single translation file for all messages, you can make it like the following:
...@@ -359,7 +342,7 @@ class Module extends \yii\base\Module ...@@ -359,7 +342,7 @@ class Module extends \yii\base\Module
In the example above we are using wildcard for matching and then filtering each category per needed file. Instead of using `fileMap` you can simply In the example above we are using wildcard for matching and then filtering each category per needed file. Instead of using `fileMap` you can simply
use convention of category mapping to the same named file and use `Module::t('validation', 'your custom validation message')` or `Module::t('form', 'some form label')` directly. use convention of category mapping to the same named file and use `Module::t('validation', 'your custom validation message')` or `Module::t('form', 'some form label')` directly.
###Translating widgets messages ### Translating widgets messages
Same rules can be applied for widgets too, for example: Same rules can be applied for widgets too, for example:
...@@ -410,4 +393,36 @@ Instead of using `fileMap` you can simply use convention of category mapping to ...@@ -410,4 +393,36 @@ Instead of using `fileMap` you can simply use convention of category mapping to
> **Note**: For widgets you also can use i18n views, same rules as for controllers are applied to them too. > **Note**: For widgets you also can use i18n views, same rules as for controllers are applied to them too.
TBD: provided classes overview. Views
-----
You can use i18n in your views to provide support for different languages. For example, if you have view `views/site/index.php` and
you want to create special case for russian language, you create `ru-RU` folder under the view path of current controller/widget and
put there file for russian language as follows `views/site/ru-RU/index.php`.
> **Note**: If language is specified as `en-US` and there are no corresponding views, Yii will try views under `en`
> before using original ones.
i18n formatter
--------------
i18n formatter component is the localized version of formatter that supports formatting of date, time and numbers based
on current locale. In order to use it you need to configure formatter application component as follows:
```php
return [
// ...
'components' => [
'formatter' => [
'class' => 'yii\i18n\Formatter',
],
],
];
```
After cofiguring the component can be accessed as `Yii::$app->formatter`.
Note that in order to use i18n formatter you need to install and enable
[intl](http://www.php.net/manual/en/intro.intl.php) PHP extension.
In order to learn about formatter methods refer to its API documentation: [[yii\i18n\Formatter]].
\ No newline at end of file
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment