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

Интернационализация и локализация адаптируют приложения и их содержимое к конкретному региону или стране пользователей. В Symfony это запрашиваемая функция, которая должна быть установлена до её использования (composer require symfony/translation).

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

Best Practice

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

Жизни ваших переводчиков будут куда проще, если все переводы приложения будут находиться в одной центральной локации.

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

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

Best Practice

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

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

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

Tip

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

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

Best Practice

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

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

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

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

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

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
<!-- 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>

Далее: Security

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