jaimeperez / twig-configurable-i18n
Requires
- twig/extensions: ^1.5
Requires (Dev)
- phpunit/phpunit: ~4.8.36
- twig/twig: ^1.37 || ^2.7
README
这是一个技巧,使Twig的原生国际化扩展能够与PHP原生gettext扩展以外的其他翻译系统协同工作。这样,您可以使用其他实现,例如 gettext/gettext,甚至您自己的实现,前提是有一个函数可以执行单数字符串的翻译,另一个函数可以处理复数字符串的翻译。
安装
如果您使用composer,安装就像要求这个包一样简单。
composer require jaimeperez/twig-configurable-i18n
如果您不使用composer,您需要手动从您的脚本中包含此项目中所有(四个)源文件,并确保您已安装 twig/extension
包。
使用方法
使用此扩展非常简单,无需修改您的代码或现有模板,只需在希望国际化的地方对PHP脚本进行少量修改即可。
首先,为两个类创建别名,以便这个扩展中定义的类覆盖默认类
use JaimePerez\TwigConfigurableI18n\Twig\Environment as Twig_Environment; use JaimePerez\TwigConfigurableI18n\Twig\Extensions\Extension\I18n as Twig_Extensions_Extension_I18n;
第一行允许您重新定义twig环境类,以便您可以保留传递给构造函数的配置选项。第二行安装此扩展而不是原生扩展。现在,您的代码将使用此扩展,无需进一步修改,而PHP的原生gettext将继续使用。
现在,您已经准备好配置扩展以使用不同的翻译函数。您将通过传递选项到您刚刚导入的Twig环境类来完成此操作
$twig = new Twig_Environment($loader, array( 'translation_function' => 'translate', 'translation_function_plural' => 'translate_plural' ));
这只有两个支持选项。 translation_function
允许您指定一个能够翻译单数字符串的函数,等同于 gettext()
。另一方面,translate_function_plural
允许您指定一个用于处理复数字符串翻译的函数。这相当于 ngettext()
。
您已经设置好了。Twig将使用您刚刚指定的 translate()
和 translate_plural()
函数,而不是原生的 gettext()
和 ngettext()
函数。当然,您需要指定一些确实存在的函数,但这取决于您想使用哪种gettext实现。例如,如果您计划使用Oscar Otero的纯PHP实现 gettext/gettext,您可以这样做:
use \Gettext\Translator as Translator; ... $this->translator = new Translator(); $this->translator->register(); ... $twig = new Twig_Environment($loader, array( 'translation_function' => '__', 'translation_function_plural' => 'n__' ));