Translator

Events

The translator of laminas-i18n dispatches two events during the processing of translations:

  • Laminas\I18n\Translator\Event\MissingTranslationEvent
  • Laminas\I18n\Translator\Event\NoMessagesLoadedEvent

The typical usage for these events is to log missing translations and track when the loading of messages fails.

Installation Requirements

The event support of laminas-i18n depends on a PSR-14 compatible event dispatcher. Choose any PSR-14 compatible event dispatcher.

Basic Usage

use Laminas\I18n\Translator\Event\MissingTranslationEvent;
use Laminas\I18n\Translator\Translator;

// Set locale
Locale::setDefault('de_DE');

// Create translator with a PSR-14 dispatcher
// $dispatcher = ...;
$translator = new Translator($collector, 'de_DE', null, 'default', $dispatcher);

// In your dispatcher configuration, you can now listen to the events
// Example with a hypothetical dispatcher:
$dispatcher->addListener(MissingTranslationEvent::class, static function (MissingTranslationEvent $event) {
    var_dump($event->getMessage());
    // 'car'
    var_dump($event->getLocale());
    // 'de_DE'
    var_dump($event->getTextDomain());
    // 'default'
});

// Trigger related events
echo $translator->translate('car');

Using Event Dispatcher

Enable Event Dispatcher

To enable the event dispatcher, call the enableEventManager() method.

$translator->enableEventManager();

The event dispatcher can also be enabled per configuration.

Disable Event Dispatcher

To disable the event dispatcher, call the disableEventManager() method.

$translator->disableEventManager();

Check Availability of Event Dispatcher

To check the availability of the event dispatcher, call the isEventManagerEnabled() method.

$translator->enableEventManager();

$result = $translator->isEventManagerEnabled(); // true

Default Value

The default value of this option is false.

Get Event Dispatcher

$eventDispatcher = $translator->getEventDispatcher(); // returns Psr\EventDispatcher\EventDispatcherInterface or null

Events

MissingTranslationEvent

Fired when the translation for a message is missing.

Available methods:

  • getMessage(): returns the message string.
  • getLocale(): returns the locale string.
  • getTextDomain(): returns the text domain string.
  • setTranslation(string $translation): allow providing a translation dynamically.
  • getTranslation(): returns the translation if set.

NoMessagesLoadedEvent

Fired when no messages were loaded for a locale/text-domain combination.

Available methods:

  • getLocale(): returns the locale string.
  • getTextDomain(): returns the text domain string.
  • setMessages(TextDomain $messages): allow providing messages dynamically.
  • getMessages(): returns the messages if set.

Example

The following example shows how to log missing translations.

use Laminas\I18n\Translator\Event\MissingTranslationEvent;
use Laminas\I18n\Translator\Event\NoMessagesLoadedEvent;

// ... dispatcher configuration ...
$dispatcher->addListener(MissingTranslationEvent::class, static function (MissingTranslationEvent $event) use ($logger) {
    $logger->error('Missing translation', [
        'message'     => $event->getMessage(),
        'locale'      => $event->getLocale(),
        'text_domain' => $event->getTextDomain(),
    ]);
});

$dispatcher->addListener(NoMessagesLoadedEvent::class, static function (NoMessagesLoadedEvent $event) use ($logger) {
    $logger->error('No messages loaded', [
        'locale'      => $event->getLocale(),
        'text_domain' => $event->getTextDomain(),
    ]);
});

// Trigger event for no messages loaded and missing translation
echo $translator->translate('car'); // 'car'