PHPackages                             vinorcola/helper-bundle - PHPackages - PHPackages  [Skip to content](#main-content)[PHPackages](/)[Directory](/)[Categories](/categories)[Trending](/trending)[Leaderboard](/leaderboard)[Changelog](/changelog)[Analyze](/analyze)[Collections](/collections)[Log in](/login)[Sign up](/register)

1. [Directory](/)
2. /
3. [Utility &amp; Helpers](/categories/utility)
4. /
5. vinorcola/helper-bundle

ActiveSymfony-bundle[Utility &amp; Helpers](/categories/utility)

vinorcola/helper-bundle
=======================

Bundle providing several helper tools.

v1.4.1(3y ago)0831MITPHPPHP ^8.0

Since Mar 7Pushed 3y ago1 watchersCompare

[ Source](https://github.com/Vinorcola/HelperBundle)[ Packagist](https://packagist.org/packages/vinorcola/helper-bundle)[ RSS](/packages/vinorcola-helper-bundle/feed)WikiDiscussions master Synced 2d ago

READMEChangelog (10)Dependencies (3)Versions (25)Used By (1)

VinorcolaHelperBundle
=====================

[](#vinorcolahelperbundle)

Provide some useful base classes and services.

Translation system
------------------

[](#translation-system)

The bundle provide a `TranslationModel` service which help building international apps by standardizing the way translation keys are built.

When you translate an application, you mostly end-up sorting messages in 2 categories: messages linked to an attribute of an object (an entity) and messages linked to the page context.

### Messages linked to page context

[](#messages-linked-to-page-context)

This translation system introduce a system of relative `keys` based on the route name. For example, if your action is triggered by a route called `myController.myAction`, then if you translate the message key `message` (using `TranslationModel::tr`), it will look for the key `myController.myAction.message` in Symfony translation system. This helps simplifying templates:

```
{% extends 'base.html.twig' %}

{% block title %}{{ pageTitle() }}{% endblock %}

{% block body %}
    {{ 'message'|tr }}

    {{ form_start(form) }}
        {{ form_widget(form) }}

            {{ 'submit'|tr }}
            {{ 'cancel'|tr }}

    {{ form_end(form) }}
{% endblock %}
```

In this example,

- `{{ 'message'|tr }}` is equivalent to `{{ 'myRouteName.message'|trans }}`
- `{{ 'submit'|tr }}` is equivalent to `{{ 'myRouteName.submit'|trans }}`
- `{{ 'cancel'|tr }}` is equivalent to `{{ 'myRouteName.cancel'|trans }}`
- `{{ pageTitle() }}` is equivalent to `{{ 'title'|tr }}` or `{{ 'myRouteName.title'|trans }}`

Furthermore, the system will auto-wrap translation parameters with percent (`%`):

```
{# With Symfony translation #}
{{ 'myRouteName.message'|trans({ '%title%': someTitle, '%date%': someDate }) }}

{# With VinorcolaHelper translation #}
{{ 'message'|tr({ title: someTitle, date: someDate }) }}
```

You can still keep the percent if you like (or for compatibility purposes):

```
{# Those lines are all equivalent: #}
{{ 'message'|tr({ title: someTitle, date: someDate }) }}
{{ 'message'|tr({ title: someTitle, '%date%': someDate }) }}
{{ 'message'|tr({ '%title%': someTitle, '%date%': someDate }) }}
```

If you require a specific message to be translated (instead of a relative message prepended with the route name), you can simply prefix your message key with a `=` sign:

```
{# With Symfony translation #}
{{ 'some.specific.message'|trans({ '%title%': someTitle, '%date%': someDate }) }}

{# With VinorcolaHelper translation #}
{{ '=some.specific.message'|tr({ title: someTitle, date: someDate }) }}
```

If you require a plural translation, you can suffix your message key with a `+` sign:

```
{# With Symfony translation #}
{{ 'myRouteName.message'|transchoice(5, { '%title%': someTitle, '%date%': someDate }) }}

{# With VinorcolaHelper translation #}
{{ 'message+'|tr({ count: 5, title: someTitle, date: someDate }) }}
```

### Messages linked to object attributes

[](#messages-linked-to-object-attributes)

The `TranslationModel::tra()` method help building translation keys base on object attributes. Your must provide an attribute name and an object name and it will translate the message `attribute.myObject.myAttribute` with Symfony translation system.

For example in templates:

```

            {{ 'title'|tra('user') }}
            {{ 'emailAddress'|tra('user') }}
            {{ 'city'|tra('user') }}

        {% for user in users %}

                {{ user.title }}
                {{ user.emailAddress }}
                {{ user.city }}

        {% endfor %}

```

- `{{ 'title'|tra('user') }}` is equivalent to `{{ 'attribute.user.title'|trans }}`
- `{{ 'emailAddress'|tra('user') }}` is equivalent to `{{ 'attribute.user.emailAddress'|trans }}`
- `{{ 'city'|tra('user') }}` is equivalent to `{{ 'attribute.user.city'|trans }}`

You can then use this pattern in Symfony forms:

```
