Пользовательский интерфейс Plesk поддерживает множество языков. Хотя их поддержка не требуется для сертификации расширения, мы рекомендуем вам локализовать его хотя бы на самые популярные языки (на какие именно ? решайте, исходя из соображений здравого смысла и вашей целевой аудитории), чтобы увеличить количество потенциальных пользователей вашего расширения. Кроме того, если ваше расширение интегрировано не только в Панель администратора, но и в Панель клиента, вам стоит рассмотреть необходимость его локализации на большее количество языков.

Чтобы локализовать пользовательский интерфейс расширения, используйте помощник pm_Locale.

Все ключи локали должны храниться в файле локали (plib/resources/locales/<locale-code>.php, например, plib/resources/locales/en-US.php):

<?php
$messages = [
    'pageTitle' => 'My localized extensions',
    'controllerMessage' => 'Message from controller',
    'viewMessage' => 'Message shown in view',
];

После сохранения ключей локали их можно использовать в контроллере для передачи его в представление:

public function indexAction()
{
    $this->view->pageTitle = $this->lmsg('pageTitle');
    $this->view->message = $this->lmsg('controllerMessage');
}

или напрямую в представлении (index.phtml):

<h3><?php echo $this->message; ?></h3>
<h5><?php echo $this->lmsg('viewMessage'); ?></h5>

Если ваше расширение локализовано только на английский язык, и файл локали для языка пользователя не будет найден, то все остальные локали переключатся на английский язык. Вот как это работает в пользовательском интерфейсе.

Но как только вы локализуете свое расширение, например, на немецкий язык (создадите файл plib/resources/locales/de-DE.php и переведете значения строк локализации, как в этом примере):

<?php
$messages = [
    'pageTitle' => 'Meine lokalisierte Erweiterungen',
    'controllerMessage' => 'Nachricht vom Controller',
    'viewMessage' => 'Nachricht in Ansicht gezeigt',
];

и переключите пользовательский интерфейс Plesk на немецкий язык, вы увидите, что новая локализация была применена.

Локализация списков и форм

В разделах Создание списка и Создание формы мы рассказывали, как создавать списки и формы как отдельные объекты, унаследованные от pm_View_List_Simple и pm_Form_Simple соответственно. Такой подход дает дополнительную гибкость, в частности, возможность отделять и переиспользовать код. Еще одно преимущество этого подхода заключается в том, что метод lmsg доступен как для списка, так и для формы, что позволяет вам не заботиться о получении текущего представления.

Локализация из любого места кода

Иногда нам требуется использовать ключи локали из определенного места кода бизнес-логики (расположенного в папке plib/library). Примером такого случая может быть исключение с локализованным сообщением, которое выдается классом бизнес-логики. В этом случае можно использовать статический метод lmsg класса pm_Locale.

Использование замещающих символов в ключах локали

Во время локализации расширения часто возникает ситуация, когда вам нужно вставить в сообщение некоторое значение, зависящее от контекста (например, имя домена). В таких случаях можно использовать замещающие символы.

В файле локализации мы добавляем ключ локали с замещающим символом:

<?php
$messages = [
    'pageTitle' => 'Settings for %%domain%%',
];

Мы заполняем этот замещающий символ во время использования ключа локали, когда у нас будет вся необходимая информация:

<?php
public function indexAction()
{
    $domain = new pm_Domain($this->_getParam('id'));
    $this->view->pageTitle = $this->lmsg('pageTitle', ['domain' => $domain->getName() ]);
}

Затем мы проверяем, как заполнился замещающий символ.