Skip to content

HTTPS clone URL

Subversion checkout URL

You can clone with HTTPS or Subversion.

Download ZIP
an edit-in-place, i18n translator bundle for Symfony2
PHP JavaScript
branch: master
Failed to load latest commit information.
Controller handle multiple trans tags on a DOM element nodeValue and its attribu…
DependencyInjection added a enabled option
Dumper
Exception changed namespace to Knp
Features changed namespace to Knp
Listener Edited Listener/ResponseListener.php via GitHub
Resources added optional highlight of untranslated strings
Templating fixed break with twin node visitor
Tests using templating to wrap trans texts; see #7
Translation
.gitignore introduced .gitignore
KnpTranslatorBundle.php
LICENSE added license
README.md fix typo; close #18
composer.json Add composer.json
phpunit.xml.dist

README.md

TranslatorBundle

This bundle's purpose is to provide an interface for edition, addition and deletion of translations messages.

Currently supported formats:

  • YAML
  • XLIFF
  • CSV

Install & setup the bundle

  1. Fetch the source code

    Using Git to control your project from project root directory:

    git submodule add git://github.com/docteurklein/TranslatorBundle.git vendor/bundles/Knp/Bundle/TranslatorBundle
    

    By cloning repository:

    mkdir -p vendor/bundles/Knp/Bundle
    cd !$
    git clone git://github.com/docteurklein/TranslatorBundle.git
    

    By including into deps file:

    
    [TranslatorBundle]
        git=git://github.com/docteurklein/TranslatorBundle.git
        target=/bundles/Knp/Bundle/TranslatorBundle
    
    
  2. Add the bundle to your AppKernel class

    
    // app/AppKernerl.php
    public function registerBundles()
    {
        $bundles = array(
            // ...
            new Knp\Bundle\TranslatorBundle\KnpTranslatorBundle,
            // ...
        );
        // ...
    }
    
  3. Add the Knp namespace to your autoloader

    
    // app/autoload.php
    $loader->registerNamespaces(array(
        'Knp' => __DIR__.'/../vendor/bundles',
        // your other namespaces
    );
    
  4. Add routing

    // app/config/routing.yml
    
    knplabs_translator_admin:
        resource: @KnpTranslatorBundle/Resources/config/routing/edition.yml
            prefix:   /trans/admin
    
    knplabs_translator:
        resource: @KnpTranslatorBundle/Resources/config/routing/routing.yml
            prefix:   /trans
    

These route files provide the following routes:

[router] Current routes
Name                     Method  Pattern
knplabs_translator_list  GET    /trans/admin/list
knplabs_translator_get   GET    /trans/{id}/{domain}/{locale}
knplabs_translator_put   PUT    /trans/

Minimal configuration

This bundle requires the activation of the core translator:

``` yaml

// app/config/config.yml
framework:
    # ...
    translator:    { fallback: en }
    # ...

```

Additional configuration

This bundle relies on the Ext Core library. You can decide wheter or not it will be included automatically.

``` yaml

knplabs_translator:
    include_vendor_assets: false # defaults to true

```

Services

This bundle introduces those services:

translator.dumper.csv                    container Knp\Bundle\TranslatorBundle\Dumper\CsvDumper
translator.dumper.xliff                  container Knp\Bundle\TranslatorBundle\Dumper\XliffDumper
translator.dumper.yaml                   container Knp\Bundle\TranslatorBundle\Dumper\YamlDumper
translator.writer                        container Knp\Bundle\TranslatorBundle\Translation\Translator

controllers are services too:

knplabs_translator.controller.edition    request   Knp\Bundle\TranslatorBundle\Controller\EditionController
knplabs_translator.controller.translator request   Knp\Bundle\TranslatorBundle\Controller\TranslatorController

API

``` php

class Knp\Bundle\TranslatorBundle\Translation\Translator extends Symfony\Bundle\FrameworkBundle\Translation\Translator
{

    public function isTranslated($id, $domain, $locale);

    public function update($id, $value, $domain, $locale);

    public function getResources($locale, $domain);

    public function getFallbackLocale();

    public function getCatalog($locale);

    public function getLocales();

    public function all();


```

Updating a given translation key is really simple:

``` php

$this->get('translator.writer')->update('the key to translate', 'the translated string', 'messages', 'en');

```

Rest API

  • Update english translations files for domain tests with translated value for key foo.bar.baz

    curl -X PUT http://project-url/trans/  \
        -F 'id=foo.bar.baz' \
        -F 'domain=messages' \
        -F 'locale=en' \
        -F 'value=translate value' 
    
  • Get the translated value of key foo.bar.baz for english locale for tests domain

    curl http://project-url/trans/foo.bar.baz/tests/en
    
Something went wrong with that request. Please try again.