# Локализация пользовательского интерфейса

Пользовательский интерфейс 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() ]);
    }

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