ride / lib-i18n
Ride 框架的国际化库
1.1.0
2024-06-26 08:54 UTC
README
PHP Ride 框架的国际化库。
库中包含的内容
区域设置
一个 Locale 是区域设置的接口。这是一个简单的表示,包括名称、代码和额外属性。
这些区域设置包含在一个 LocaleManager 实例中。此管理器控制当前和默认区域设置。
LocaleIO 为 LocaleManager 提供区域设置。区域设置应按系统重要性顺序排序。第一个区域设置被视为默认区域设置。
协商者
Negotiator 用于检测当前区域设置。当当前区域设置未设置时,会调用它。
您可以使用 ChainedNegotiator 在链中实现多个检测机制。
翻译器
Translator 是将密钥翻译为本地化字符串的接口。该接口支持翻译密钥的单数和复数形式之间的差异。
翻译器由 TranslatorManager 管理。可以使用 Locale 实例请求 Translator 实例。
I18n
I18n 类将不同的部分粘合在一起,形成一个简单的外观。
代码示例
查看此代码示例,了解此库的可能性。
<?php use ride\library\i18n\locale\io\LocaleIO; use ride\library\i18n\locale\negotiator\DefaultNegotiator; use ride\library\i18n\locale\GenericLocaleManager; use ride\library\i18n\translator\io\AbstractTranslationIO; use ride\library\i18n\translator\GenericTranslatorManager; use ride\library\i18n\I18n; /** * Dummy implementation of a locale data source */ class FooLocaleIO implements LocaleIO { public function getLocales() { return array( new GenericLocale('en', 'English', array( 'full' => 'en_GB.utf8', 'translator.script.plural': '$n != 1', )), new GenericLocale('nl', 'Nederlands', array( 'full' => 'nl_BE.utf8', 'translator.script.plural': '$n != 1', )), ); } } /** * Dummy implementation of a translation data source */ class FooTranslationIO extends AbstractTranslationIO { protected function readTranslations($localeCode) { switch ($localeCode) { case 'en': return array( 'label.name' => 'Name', 'label.email' => 'E-mail address', 'label.hello' => 'Hello %name%!', 'label.item.0' => 'We got 1 item.', 'label.item.1' => 'We got %n% items.', ); default: return array(); } } } // first we need to initialize our I18n instance $localeIO = new FooLocaleIO(); $negotiator = new DefaultNegotiator(); $translationIO = new FooTranslationIO(); $localeManager = new GenericLocaleManager($localeIO, $negotiator); $translatorManager = new GenericTranslatorManager($translationIO); $i18n = new I18n($localeManager, $translatorManager); // play with the locales $en = $i18n->getLocale(); // default language is English since it's provided first by the locale IO $nl = $i18n->getLocale('nl'); $i18n->setCurrentLocale($nl); $i18n->setCurrentLocale('nl'); $nl = $i18n->getLocale(); $i18n->hasLocale('fr'); // false // fetch some lists of the available locales $locales = $i18n->getLocales(); $localeList = $i18n->getLocaleList(); // array('en' => 'English', 'nl' => 'Nederlands') $localeCodeList = $i18n->getLocaleCodeList(); // array('en' => 'en', 'nl' => 'nl') // play with translations $translator = $i18n->getTranslator($en); // translate some keys $value = $translator->translate('label.name'); // Name $value = $translator->translate('label.hello', array('name' => 'world'); // Hello world! $value = $translator->translate('label.unexistant'); // [label.unexistant] $value = $translator->translatePlural(1, 'label.item'); // We got 1 item. $value = $translator->translatePlural(3, 'label.item'); // We got 3 items. // translation management $translations = $translator->getTranslations(); // array('label.name' => 'Name', 'label.email' => 'E-mail address', ...) $translation = $translator->getTranslation('label.hello'); // Hello %name%! $translator->setTranslation('label.foo', 'bar');
实现
对于更多示例,您可以查看以下库的实现:
安装
您可以使用 Composer 来安装此库。
composer require ride/lib-i18n