dkesberg / slim-twig-translation-extension
Slim 框架中 Illuminate\Translation\Translator 的 Twig 函数
v0.1.0
2014-07-17 14:35 UTC
Requires
- php: >=5.3.0
- illuminate/translation: >=4.0
- slim/slim: >=2.3.0
- slim/views: >=0.1.2
- twig/twig: >=1.16.0
This package is not auto-updated.
Last update: 2024-09-24 01:15:48 UTC
README
此存储库提供了一个用于 twig 视图解析器的扩展类。该类为 twig 模板添加了一个翻译辅助函数。翻译函数尝试调用 Slim 容器中 Illuminate\Translation\Translator 对象的 trans() 函数。
如何安装
使用 Composer
在项目根目录创建一个 composer.json 文件
{ "require": { "dkesberg/slim-twig-translation-extension": "v0.1.0" } }
然后运行以下 composer 命令
$ php composer.phar install
如何使用
Slim
按照 SlimViews 存储库 中描述的设置您的 twig 视图。将扩展添加到解析器扩展中。
$view->parserExtensions = array( new \Dkesberg\Slim\Twig\Extension\TranslationExtension(), );
Twig 模板
在您的 twig 模板中,您将编写
{{ translate('mails.salutation.male') }}
您还可以使用简写
{{ _('mails.salutation.male') }}
将 Illuminate/Translation/Translator 添加到 slim
简单注入
use Illuminate\Translation\Translator; use Illuminate\Filesystem\Filesystem; use Illuminate\Translation\FileLoader; $translator = new Translator(new FileLoader(new Filesystem(), __DIR__ . '/lang'), 'en'); $translator->setFallback('en'); $app->translator = $translator;
单例资源
use Illuminate\Translation\Translator; use Illuminate\Filesystem\Filesystem; use Illuminate\Translation\FileLoader; $app->container->singleton('translator', function() { return new Translator(new FileLoader(new Filesystem(), __DIR__ . '/lang'), 'en'); }); $app->translator->setFallback('en');
使用 slim 钩子和单例
use Illuminate\Translation\Translator; use Illuminate\Filesystem\Filesystem; use Illuminate\Translation\FileLoader; // detect language and set translator $app->hook('slim.before', function() use ($app) { $env = $app->environment(); // Extract locale $locale = Locale::acceptFromHttp($env['HTTP_ACCEPT_LANGUAGE']); $app->locale = substr($locale,0,2); // Set translator instance $app->container->singleton('translator', function($app) { return new Translator(new FileLoader(new Filesystem(), __DIR__ . '/lang'), $app->locale); }); $app->translator->setFallback('en'); });
语言文件
我正在包装 Illuminate\Translation\Translator。翻译器的语言文件使用与 Laravel 框架相同的结构。更多信息请参阅: https://laravel.net.cn/docs/4.2/localization
在 lang 目录中,应该为每种语言都有一个子目录。
/lang
/en
mails.php
validation.php
/de
mails.php
validation.php
语言文件简单地返回一个键控字符串数组。
<?php return array( 'salutation' => array( 'male' => 'Dear Mr.', 'female' => 'Dear Mrs.', 'unknown' => 'Dear Sir or Madam' ) )
传递给 translate 函数的字符串的第一部分是语言文件名称,第二部分是要检索的键。第二部分使用点表示法表示多维数组。
{{ _('mails.salutation.male') }}