jdolieslager/fetranslator

ZF2 模块,用于翻译路由匹配和消息

v0.1.10 2013-11-21 12:34 UTC

This package is not auto-updated.

Last update: 2024-09-14 14:06:05 UTC


README

ZF2 模块,用于翻译路由匹配和消息

安装

  1. ./composer.phar require jdolieslager/fetranslator
  2. FeTranslator 添加到您的 application.config.php

默认设置

您可以通过将 data/fe_translator.local.php.dist 添加到 config/autoload 文件夹来覆盖默认语言

添加翻译

要添加翻译,您可以将以下部分添加到您的配置中。翻译器将在给定目录中搜索 .php 文件。(示例:nl_NL.phpen_US.php

<?php
return array(
    'fe_translator' => array(
        'translations' => array(
            // Config below will be used to translate messages for given namespace
            array(
                'base_dir'    => __DIR__ . '/../translations/module/',
                'namespace'   => 'application', // Application indicates the namespace
            ),
            // Config below will be used to translate route matches
            array(
                'base_dir'    => __DIR__ . '/../translations/route_match/',
                'namespace'   => FeTranslator\Translator\Translator::NAMESPACE_ROUTE_MATCH,
            )
        ),
    ),
);

常规翻译文件示例

<?php
return array(
    'head' => array(
        'title' => 'My application title',
    ),
    'level1' => array(
        'level2' => 'My value',
    ),
);

路由匹配翻译文件示例

<?php
return array(
    'home/application'  => array(
        'controller'    => array(
            'Application\Controller\Gebruiker' => 'Application\Controller\User',
        ),
        '__CONTROLLER__' => array(
            'gebruiker' => 'user',
        ),
        'action'        => array(
            'inloggen'  => 'login',
            'uitloggen' => 'logout',
        ),
    ),
);

在控制器和服务中使用翻译

您可以为快速访问翻译器服务添加一个 trait。要求是:php >= 5.4 并且该类应该有一个 getServiceLocator() 方法

<?php
class Controller extends AbstractActionController
{
    use \FeTranslator\ServiceManager\ServiceTrait;
    
    public function indexAction()
    {
        $translator = $this->getFeTranslateService();
        
        // Translate a message defined in nl_NL.php as array('level1' => array('level2' => 'value'));
        // The translations are loaded in the application namespace
        $translation = $translator->translate('level1.level2', 'application')
        
        //Get an translated URL
        // Routematch is: application/home with a controller User and with the action Login
        $translatedUrl = $translator->translateUrl(
            'application/home', 
            array('controller' => 'user', 'action' => 'login')
        );
    }
}

在模板中使用翻译

    <?php
        $url = $this->feTranslateUrl('application/home', array('controller' => 'User', 'action' => 'login'));
    ?>
    <html>
        <head>
            <title><?= $this->feTranslate('head.title', 'application'); ?></title>
        </head>
        <body>
            <a href="<?= $url; ?>"><?= $this->feTranslate('my_link'); ?></a>
        </body>
    </html>