Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Adding a composer.json and a README to I18n
- Loading branch information
Showing
6 changed files
with
341 additions
and
215 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,86 @@ | ||
# CakePHP Internationalization Library | ||
|
||
The I18n library provides a `I18n` service locator that can be used for setting | ||
the current locale, building translation bundles and translating messagges. | ||
|
||
Additionally, it provides the `Time` and `Number` classes which can be used to | ||
ouput dates, currecies and any numbers in the right format for the speciafied locale. | ||
|
||
## Usage | ||
|
||
The `I18n` class uses internally the [Aura.Intl](https://github.com/auraphp/Aura.Intl) library. | ||
Getting familiar with it, will help you understand how to build and manipulate translation bundles | ||
should you wish to create them manually instead of using the conventions this library uses. | ||
|
||
### Setting the Current Locale | ||
|
||
```php | ||
use Cake\I18n\I18n; | ||
|
||
I18n::locale('de_DE'); | ||
``` | ||
|
||
### Translating a message | ||
|
||
```php | ||
echo __( | ||
'Hi {0,string}, your balance on the {1,date} is {2,number,currency}', | ||
['Charles', '2014-01-13 11:12:00', 1354.37] | ||
); | ||
|
||
// Returns | ||
Hi Charles, your balance on the Jan 13, 2014, 11:12 AM is $ 1,354.37 | ||
``` | ||
|
||
### Creating your Own Translators | ||
|
||
```php | ||
use Cake\I18n\I18n; | ||
use Aura\Intl\Package; | ||
|
||
I18n::translator('animals', 'fr_FR', function () { | ||
$package = new Package( | ||
'default', // The formatting strategy (ICU) | ||
'default', // The fallback domain | ||
); | ||
$package->setMessages([ | ||
'Dog' => 'Chien', | ||
'Cat' => 'Chat', | ||
'Bird' => 'Oiseau' | ||
... | ||
]); | ||
|
||
return $package; | ||
}); | ||
|
||
I18n::locale('fr_FR'); | ||
__d('animals', 'Dog'); // Returns "Chien" | ||
``` | ||
|
||
### Formatting Time | ||
|
||
```php | ||
$time = Time::now(); | ||
echo $time; // shows '4/20/14, 10:10 PM' for the en-US locale | ||
``` | ||
|
||
### Formattng Numbers | ||
|
||
```php | ||
echo Number::format(100100100); | ||
``` | ||
|
||
```php | ||
echo Number::currency(123456.7890, 'EUR'); | ||
// outputs €100,100,100.00 | ||
``` | ||
|
||
## Documentation | ||
|
||
Please make sure you check the [official I18n documentation](http://book.cakephp.org/3.0/en/core-libraries/internationalization-and-localization.html) | ||
|
||
The [documentation for the Time class](http://book.cakephp.org/3.0/en/core-libraries/time.html) contains instruction on how configure and output | ||
time strings for selected locales. | ||
|
||
The [documentation for the Number class](http://book.cakephp.org/3.0/en/core-libraries/number.html) shows how to use the `Number` class for | ||
displaying numbers in specific locales. |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,24 @@ | ||
{ | ||
"name": "cakephp/i18n", | ||
"description": "CakePHP Internationalization library with support for messages translation and dates and numbers localization", | ||
"license": "MIT", | ||
"authors": [ | ||
{ | ||
"name": "CakePHP Community", | ||
"homepage": "http://cakephp.org" | ||
} | ||
], | ||
"autoload": { | ||
"psr-4": { | ||
"Cake\\I18n\\": "." | ||
}, | ||
"files": ["functions.php"] | ||
}, | ||
"require": { | ||
"cakephp/core": "dev-master", | ||
"ext-intl": "*", | ||
"nesbot/Carbon": "~1.13", | ||
"aura/intl": "1.1.*" | ||
}, | ||
"minimum-stability": "dev" | ||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,226 @@ | ||
<?php | ||
/** | ||
* CakePHP(tm) : Rapid Development Framework (http://cakephp.org) | ||
* Copyright (c) Cake Software Foundation, Inc. (http://cakefoundation.org) | ||
* | ||
* Licensed under The MIT License | ||
* For full copyright and license information, please see the LICENSE.txt | ||
* Redistributions of files must retain the above copyright notice. | ||
* | ||
* @copyright Copyright (c) Cake Software Foundation, Inc. (http://cakefoundation.org) | ||
* @link http://cakephp.org CakePHP(tm) Project | ||
* @since 3.0.0 | ||
* @license http://www.opensource.org/licenses/mit-license.php MIT License | ||
*/ | ||
use Cake\I18n\I18n; | ||
|
||
if (!function_exists('__')) { | ||
/** | ||
* Returns a translated string if one is found; Otherwise, the submitted message. | ||
* | ||
* @param string $singular Text to translate | ||
* @param mixed $args Array with arguments or multiple arguments in function | ||
* @return mixed translated string | ||
* @link http://book.cakephp.org/3.0/en/core-libraries/global-constants-and-functions.html#__ | ||
*/ | ||
function __($singular, $args = null) | ||
{ | ||
if (!$singular) { | ||
return; | ||
} | ||
|
||
$arguments = func_num_args() === 2 ? (array)$args : array_slice(func_get_args(), 1); | ||
return I18n::translator()->translate($singular, $arguments); | ||
} | ||
|
||
} | ||
|
||
if (!function_exists('__n')) { | ||
/** | ||
* Returns correct plural form of message identified by $singular and $plural for count $count. | ||
* Some languages have more than one form for plural messages dependent on the count. | ||
* | ||
* @param string $singular Singular text to translate | ||
* @param string $plural Plural text | ||
* @param int $count Count | ||
* @param mixed $args Array with arguments or multiple arguments in function | ||
* @return mixed plural form of translated string | ||
* @link http://book.cakephp.org/3.0/en/core-libraries/global-constants-and-functions.html#__n | ||
*/ | ||
function __n($singular, $plural, $count, $args = null) | ||
{ | ||
if (!$singular) { | ||
return; | ||
} | ||
|
||
$arguments = func_num_args() === 4 ? (array)$args : array_slice(func_get_args(), 3); | ||
return I18n::translator()->translate( | ||
$plural, | ||
['_count' => $count, '_singular' => $singular] + $arguments | ||
); | ||
} | ||
|
||
} | ||
|
||
if (!function_exists('__d')) { | ||
/** | ||
* Allows you to override the current domain for a single message lookup. | ||
* | ||
* @param string $domain Domain | ||
* @param string $msg String to translate | ||
* @param mixed $args Array with arguments or multiple arguments in function | ||
* @return string translated string | ||
* @link http://book.cakephp.org/3.0/en/core-libraries/global-constants-and-functions.html#__d | ||
*/ | ||
function __d($domain, $msg, $args = null) | ||
{ | ||
if (!$msg) { | ||
return; | ||
} | ||
$arguments = func_num_args() === 3 ? (array)$args : array_slice(func_get_args(), 2); | ||
return I18n::translator($domain)->translate($msg, $arguments); | ||
} | ||
|
||
} | ||
|
||
if (!function_exists('__dn')) { | ||
/** | ||
* Allows you to override the current domain for a single plural message lookup. | ||
* Returns correct plural form of message identified by $singular and $plural for count $count | ||
* from domain $domain. | ||
* | ||
* @param string $domain Domain | ||
* @param string $singular Singular string to translate | ||
* @param string $plural Plural | ||
* @param int $count Count | ||
* @param mixed $args Array with arguments or multiple arguments in function | ||
* @return string plural form of translated string | ||
* @link http://book.cakephp.org/3.0/en/core-libraries/global-constants-and-functions.html#__dn | ||
*/ | ||
function __dn($domain, $singular, $plural, $count, $args = null) | ||
{ | ||
if (!$singular) { | ||
return; | ||
} | ||
|
||
$arguments = func_num_args() === 5 ? (array)$args : array_slice(func_get_args(), 4); | ||
return I18n::translator($domain)->translate( | ||
$plural, | ||
['_count' => $count, '_singular' => $singular] + $arguments | ||
); | ||
} | ||
|
||
} | ||
|
||
if (!function_exists('__x')) { | ||
/** | ||
* Returns a translated string if one is found; Otherwise, the submitted message. | ||
* The context is a unique identifier for the translations string that makes it unique | ||
* for in the same domain. | ||
* | ||
* @param string $context Context of the text | ||
* @param string $singular Text to translate | ||
* @param mixed $args Array with arguments or multiple arguments in function | ||
* @return mixed translated string | ||
* @link http://book.cakephp.org/3.0/en/core-libraries/global-constants-and-functions.html#__ | ||
*/ | ||
function __x($context, $singular, $args = null) | ||
{ | ||
if (!$singular) { | ||
return; | ||
} | ||
|
||
$arguments = func_num_args() === 3 ? (array)$args : array_slice(func_get_args(), 2); | ||
return I18n::translator()->translate($singular, ['_context' => $context] + $arguments); | ||
} | ||
|
||
} | ||
|
||
if (!function_exists('__xn')) { | ||
/** | ||
* Returns correct plural form of message identified by $singular and $plural for count $count. | ||
* Some languages have more than one form for plural messages dependent on the count. | ||
* The context is a unique identifier for the translations string that makes it unique | ||
* for in the same domain. | ||
* | ||
* @param string $context Context of the text | ||
* @param string $singular Singular text to translate | ||
* @param string $plural Plural text | ||
* @param int $count Count | ||
* @param mixed $args Array with arguments or multiple arguments in function | ||
* @return mixed plural form of translated string | ||
* @link http://book.cakephp.org/3.0/en/core-libraries/global-constants-and-functions.html#__xn | ||
*/ | ||
function __xn($context, $singular, $plural, $count, $args = null) | ||
{ | ||
if (!$singular) { | ||
return; | ||
} | ||
|
||
$arguments = func_num_args() === 5 ? (array)$args : array_slice(func_get_args(), 2); | ||
return I18n::translator()->translate( | ||
$singular, | ||
['_count' => $count, '_singular' => $singular, '_context' => $context] + $arguments | ||
); | ||
} | ||
|
||
} | ||
|
||
if (!function_exists('__dx')) { | ||
/** | ||
* Allows you to override the current domain for a single message lookup. | ||
* The context is a unique identifier for the translations string that makes it unique | ||
* for in the same domain. | ||
* | ||
* @param string $domain Domain | ||
* @param string $context Context of the text | ||
* @param string $msg String to translate | ||
* @param mixed $args Array with arguments or multiple arguments in function | ||
* @return string translated string | ||
* @link http://book.cakephp.org/3.0/en/core-libraries/global-constants-and-functions.html#__dx | ||
*/ | ||
function __dx($domain, $context, $msg, $args = null) | ||
{ | ||
if (!$msg) { | ||
return; | ||
} | ||
|
||
$arguments = func_num_args() === 4 ? (array)$args : array_slice(func_get_args(), 2); | ||
return I18n::translator($domain)->translate( | ||
$msg, | ||
['_context' => $context] + $arguments | ||
); | ||
} | ||
|
||
} | ||
|
||
if (!function_exists('__dxn')) { | ||
/** | ||
* Returns correct plural form of message identified by $singular and $plural for count $count. | ||
* Allows you to override the current domain for a single message lookup. | ||
* The context is a unique identifier for the translations string that makes it unique | ||
* for in the same domain. | ||
* | ||
* @param string $domain Domain | ||
* @param string $context Context of the text | ||
* @param string $singular Singular text to translate | ||
* @param string $plural Plural text | ||
* @param int $count Count | ||
* @param mixed $args Array with arguments or multiple arguments in function | ||
* @return mixed plural form of translated string | ||
* @link http://book.cakephp.org/3.0/en/core-libraries/global-constants-and-functions.html#__dxn | ||
*/ | ||
function __dxn($domain, $context, $singular, $plural, $count, $args = null) | ||
{ | ||
if (!$singular) { | ||
return; | ||
} | ||
|
||
$arguments = func_num_args() === 6 ? (array)$args : array_slice(func_get_args(), 2); | ||
return I18n::translator($domain)->translate( | ||
$singular, | ||
['_count' => $count, '_singular' => $singular, '_context' => $context] + $arguments | ||
); | ||
} | ||
|
||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Oops, something went wrong.