Fork me on GitHub

Translation: Usage

This page shows an example of how translation can be used.

Single Translation Key

In this example we are displaying a single translation for key hathoora_hello_world.

In the controller, the code looks like this:

                
                    $helloTranslation = $this->getService('translation')->t(
                        'hathoora_hello_world', array('name' => 'World')
                    );
                
            

In this example we are passing token 'name' and the output is:

                
                    Hello, World                
            

Route Based Translation Keys

Above example will make one call to get one translation, if you need to fetch multiple translations you can associate translations to a route and fetch them. This example is using hathoora_route_example_title and hathoora_route_example_body. The controller code looks like this:

                
                    $routeTranslations = $this->getService('translation')->getRouteTranslations('hathoora_translation_route',
                        array(
                            'hathoora_route_example_title' => array(
                                'date' => date('m/d/y H:i:s')
                            ),
                            'hathoora_route_example_body' => array(
                                'link' => 'http://hathoora.org'
                            )
                        )
                    );
                
            

In this example we are getting all translations associated with route hathoora_translation_route. We are also passing tokens date and link to keys hathoora_route_example_title and hathoora_route_example_body respectively.

The output is shown below.

                
                    hathoora_route_example_title : Today is: 05/24/19 09:38:38
                    hathoora_route_example_body: hathoora_route_example_body                
            

Now click here to toggle language to see the difference.

Filters

Using translation inside template and using filters. In this example we are using key hathoora_hello_world_filter.

                
                    echo $this->getService('translation')->t(
                                        'hathoora_hello_world_filter', array('name' => ' Hathoora PHP Framework '));
                
            

The translation key has the following translation for en_US

                
                    Name is trimmed: "{{name|trim}}"<br/>
                    <br/>
                    Custom filter: "{{name|customFilter(3)|trim}}"
                
            

In this example we are using builtin trim filter and a custom filter called and customFilter which takes one parameter.

And we added a custom filter class that contains a static customFilter like so in config.

                
                    # File admin/config/config_prod.yml

                    hathoora:
                        translation:
                            ....

                        # filter used in translation helper
                        detokenizerFilters:
                            - \admin\helper\translationFilter
                
            

The output of result is shown below.

                
                    Name is trimmed: "Hathoora PHP Framework"

Custom filter: "hathoora php framework ---- hathoora php framework ---- hathoora php framework ----"
Page Took:         7.65 msec
Page Memory:   645.67k
admin / translationController / example (200)
Request UUID: 5ce7bb9eeb01f0.53091120
Get
Post
Cookies
Files
Session
Server
Response
No data.
No data.
No data.
No data.
No data.
REDIRECT_HATHOORA_ENV
prod
REDIRECT_STATUS
200
HATHOORA_ENV
prod
HTTP_HOST
hathoora.org
HTTP_X_FORWARDED_FOR
54.163.20.123
HTTP_X_REAL_IP
54.163.20.123
HTTP_CONNECTION
close
HTTP_USER_AGENT
CCBot/2.0 (https://commoncrawl.org/faq/)
HTTP_ACCEPT
text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
HTTP_ACCEPT_LANGUAGE
en-US,en;q=0.5
HTTP_IF_MODIFIED_SINCE
Sat, 16 Feb 2019 08:22:12 GMT
HTTP_ACCEPT_ENCODING
gzip
PATH
/sbin:/usr/sbin:/bin:/usr/bin
SERVER_SIGNATURE
Apache/2.2.15 (CentOS) Server at hathoora.org Port 80
SERVER_SOFTWARE
Apache/2.2.15 (CentOS)
SERVER_NAME
hathoora.org
SERVER_ADDR
192.168.1.11
SERVER_PORT
80
REMOTE_ADDR
207.126.164.119
DOCUMENT_ROOT
/var/websites/hathoora.org/docroot
SERVER_ADMIN
webmaster@hathoora.org
SCRIPT_FILENAME
/var/websites/hathoora.org/docroot/index.php
REMOTE_PORT
48670
REDIRECT_URL
/admin/translation/example
GATEWAY_INTERFACE
CGI/1.1
SERVER_PROTOCOL
HTTP/1.0
REQUEST_METHOD
GET
QUERY_STRING
REQUEST_URI
/admin/translation/example
SCRIPT_NAME
/index.php
PHP_SELF
/index.php
REQUEST_TIME_FLOAT
1558690718.962
REQUEST_TIME
1558690718
Status: 200
Headers:
Content-Type
text/html; charset=UTF-8
Configutation
Key Value
app.admin
Array
(
    [pattern] => /admin(|/)
    [directory] => hathoora
    [namespace] => hathoora\admin
)
app.docs
Array
(
    [pattern] => /docs(|/)
    [directory] => hathoora
    [dispatcher] => Array
        (
            [class] => customDispatcher
            [method] => dispatch
        )

)
app.site
Array
(
    [default] => 1
)
hathoora.logger
Array
(
    [profiling] => Array
        (
            [enabled] => 1
        )

    [logging] => Array
        (
            [enabled] => 1
            [level] => DEBUG
        )

    [webprofiler] => Array
        (
            [enabled] => 1
            [system] => 
            [show_redirects] => 
        )

)
hathoora.template
Array
(
    [engine] => Array
        (
            [name] => Stuob
        )

)
hathoora.database
Array
(
    [default] => mysql://dbuser:dbpassword@dbhost:3306/dbname
)
hathoora.translation
Array
(
    [enabled] => 1
    [cache_service] => @cache@
    [cache_time] => 86400
    [dsn] => default
    [show_empty] => 1
    [languages] => Array
        (
            [0] => en_US
            [1] => fr_FR
        )

    [default_language] => en_US
    [debug] => Array
        (
            [method] => GET
            [parameter] => tkDebug
        )

)
hathoora.detokenizerFilters
Array
(
    [0] => hathoora\admin\helper\translationFilter
)
hathoora.cache
Array
(
    [pools] => Array
        (
            [common] => Array
                (
                    [driver] => memcache
                    [servers] => Array
                        (
                            [0] => Array
                                (
                                    [host] => localhost
                                    [port] => 11211
                                )

                        )

                )

        )

)
services.cache_base
Array
(
    [class] => \hathoora\cache\cache
    [calls] => Array
        (
            [setContainer] => Array
                (
                    [0] => @container@
                )

        )

    [type] => static
)
services.cache
Array
(
    [factory_service] => @cache_base@
    [factory_method] => pool
    [factory_method_args] => Array
        (
            [0] => common
        )

)
services.container
Array
(
    [class] => \hathoora\container
    [method] => getContainer
)
services.translation
Array
(
    [class] => \hathoora\translation\translator
    [type] => static
    [calls] => Array
        (
            [setTKConfig] => Array
                (
                    [0] => %hathoora.translation%
                )

            [setCacheService] => Array
                (
                    [0] => %hathoora.translation.cache_service%
                )

        )

)
Logging (18)
hathoora.logger.logging.enabled: 1
# Time (msec) Level Memory (KB) Message
1 2.808 DEBUG 321.60 Configuration loaded:
Array
(
    [0] => app_prod.yml
    [1] => config_prod.yml
    [2] => config_prod.yml
)
2 2.834 DEBUG 321.38 Configuration loaded:
Array
(
    [0] => app_prod.yml
    [1] => config_prod.yml
    [2] => config_prod.yml
)
3 2.888 DEBUG 323.27 Service "translation" has been added because of hathoora.translation.enabled.
4 2.971 DEBUG 336.04 Listener "kernel.terminate[webprofiler]" has been added because of hathoora.logger.webprofiler.enabled
5 3.041 DEBUG 339.43 Event kernel.ready has been registered.
6 3.195 DEBUG 373.52 Event kernel.route has been registered.
7 3.246 DEBUG 382.70 Event kernel.controller has been registered.
8 3.265 DEBUG 383.63 Calling controller (\hathoora\admin\controller\translationController::example) with following params
Array
(
)
9 4.053 INFO 498.68 CACHE (pool = common) get: translation:key:hathoora_hello_world:en_US, status: 1
10 4.472 INFO 506.35 CACHE (pool = common) get: translation:route:hathoora_translation_route:en_US, status: 1
11 5.148 INFO 592.19 Template (components/leftPanel.tpl.php) loaded
12 5.468 INFO 593.65 CACHE (pool = common) get: translation:key:hathoora_hello_world_filter:en_US, status: 1
13 5.975 INFO 606.59 Template (/var/websites/hathoora.org/app/hathoora/docs//resources/templates/components/htmlMeta.tpl.php) loaded
14 6.118 INFO 607.77 Template (/var/websites/hathoora.org/app/hathoora/docs//resources/templates/components/flashMessages.tpl.php) loaded
15 7.292 INFO 562.44 Template (translation/example.tpl.php) fetched.
16 7.352 DEBUG 561.86 Event kernel.response has been registered.
17 7.394 DEBUG 563.05 Event kernel.terminate has been registered.
18 7.511 DEBUG 566.39 Event kernel.terminate->webprofiler has been notified.
Profiling
cache
template
# Time (msec) Pool Method Key Status Took (msec)
1 3.699 common get translation:key:hathoora_hello_world:en_US 1 0.175
2 4.278 common get translation:route:hathoora_translation_route:en_US 1 0.119
3 5.283 common get translation:key:hathoora_hello_world_filter:en_US 1 0.110
# Time (msec) Name Cached Took (msec)
1 4.665 translation/example.tpl.php 0 2.575