jaimeperez/twig-configurable-i18n

该软件包已被废弃,不再维护。作者建议使用 simplesamlphp/twig-configurable-i18n 软件包。

这是Twig的i18n扩展的扩展,允许您自定义用于翻译的函数。

v2.1 2019-06-07 11:03 UTC

This package is auto-updated.

Last update: 2022-02-01 13:00:56 UTC


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__'
));