Интернационализация

Интернационализация

Интернационализация и локализация адаптируют приложения и их содержимое к конкретному региону или стране пользователей. В Symfony это запрашиваемая функция, которая должна быть включена перед использованием. Чтобы сделать это, уберите комментарии из опции конфигурации translator и установите локаль вашего приложения:

1
2
3
4
5
6
7
8
9
# app/config/config.yml
framework:
    # ...
    translator: { fallbacks: ['%locale%'] }

# app/config/parameters.yml
parameters:
    # ...
    locale:     en

Формат исходного файла перевода

Компонент Переводчик Symfony поддерживает множество разных форматов перевода: PHP, Qt, .po, .mo, JSON, CSV, INI, и др.

Best Practice

Используйте формат XLIFF для ваших файлов перевода.

Из всех доступных форматов перевода, только XLIFF и gettext имеют широкую поддержку в инструментах, используемых профессиональными переводчиками. И так как он базирован на XML, вы можете валидировать содержимое файла XLIFF при его написании.

Symfony поддерживает примечания в файлах XLIFF, что делает их более удобными в использовании для переводчиков. В конце-концов, хорошие переводчики заботятся о контексте, а эти примечания XLIFF позволяют вам определять этот контекст.

Tip

Лицензированный Apache JMSTranslationBundle предлагает вам веб-интерфейс для просмотра и редактирования этих файлов перевода. Он также имеет продвинутые функции извлечения, которые могут прочитать ваш проект и автоматически обновить XLIFF-файлы.

Локация исходного файла перевода

Best Practice

Храните файлы перевода в каталоге app/Resources/translations/.

Традиционно, разработчики Symfony срздавали эти файлы в каталоге Resources/translations/ каждого пакета. Но так как каталог app/Resources/ считается глобальной локацией для источников приложения, хранение переводов в app/Resources/translations/ централизует их и предоставляет им приоритет перед любыми другими файлами переводов. Это позволяет вам переопределять переводы, определённые в сторонних пакетах.

Ключи перевода

Best Practice

Всегда используйте ключи для переводов вместо строк содержания.

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

Ключи должны всегда описывать их цель и не описывать локацию. Например, если форма имеет поле с ярлыком "Username", то хорошим ключом будет label.username, а не edit_form.label.username.

Пример файла перевода

Применив все предыдущие лучшие практики, пример файла перевода для английского в приложении будет выглядеть так:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
<!-- app/Resources/translations/messages.en.xlf -->
<?xml version="1.0"?>
<xliff version="1.2" xmlns="urn:oasis:names:tc:xliff:document:1.2">
    <file source-language="en" target-language="en" datatype="plaintext" original="file.ext">
        <body>
            <trans-unit id="title_post_list">
                <source>title.post_list</source>
                <target>Post List</target>
            </trans-unit>
        </body>
    </file>
</xliff>

Эта документация является переводом официальной документации Symfony и предоставляется по свободной лицензии CC BY-SA 3.0.