dkesberg/slim-twig-translation-extension

Slim 框架中 Illuminate\Translation\Translator 的 Twig 函数

v0.1.0 2014-07-17 14:35 UTC

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') }}