1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119
<?php
/*
* This file is part of the ICanBoogie package.
*
* (c) Olivier Laviale <olivier.laviale@gmail.com>
*
* For the full copyright and license information, please view the LICENSE
* file that was distributed with this source code.
*/
namespace ICanBoogie\Binding\CLDR;
use ICanBoogie\CLDR\FileProvider;
use ICanBoogie\CLDR\Locale;
use ICanBoogie\CLDR\Provider;
use ICanBoogie\CLDR\ProviderCollection;
use ICanBoogie\CLDR\Repository;
use ICanBoogie\CLDR\RunTimeProvider;
use ICanBoogie\CLDR\WebProvider;
use ICanBoogie\Core;
use ICanBoogie\Storage\APCStorage;
class Hooks
{
/*
* Prototypes
*/
/**
* Returns a provider collection with the following providers: {@link WebProvider},
* {@link FileProvider}, and {@link RunTimeProvider}. The {@link FileProvider} is created with
* `REPOSITORY/cache/cldr` as cache directory.
*
* @return Provider
*/
static public function get_cldr_provider()
{
static $provider;
if (!$provider)
{
$provider = new ProviderCollection(array_filter([
new RunTimeProvider,
APCStorage::is_available() ? new APCStorage('icanboogie:cldr:') : null,
new FileProvider(\ICanBoogie\REPOSITORY . 'cache' . DIRECTORY_SEPARATOR . 'cldr'),
new WebProvider
]));
}
return $provider;
}
/**
* Returns a {@link Repository} instance created with `$app->cldr_provider`.
*
* @param Core|CoreBindings $app
*
* @return Repository
*/
static public function get_cldr(Core $app)
{
static $cldr;
if (!$cldr)
{
$cldr = new Repository($app->cldr_provider);
}
return $cldr;
}
static private $locale;
/**
* Returns the locale used by the application.
*
* @param Core|CoreBindings $app
*
* @return Locale
*/
static public function get_locale(Core $app)
{
$locale = self::$locale;
if (!($locale instanceof Locale))
{
$locale = self::$locale = $app->cldr->locales[$locale ?: 'en'];
}
return $locale;
}
/**
* Sets the locale used by the application.
*
* @param Core|CoreBindings $app
* @param Locale|string $locale
*/
static public function set_locale(Core $app, $locale)
{
self::$locale = $locale;
}
/**
* Returns the language of the application.
*
* @param Core|CoreBindings $app
*
* @return string
*/
static public function get_language(Core $app)
{
return $app->locale->language;
}
}