Posted in

Какие есть методы перевода скриптов на PHP

Перевод PHP-скриптов (сайтов, CMS, фреймворков) требует правильного подхода к локализации. Рассмотрим основные методы перевода PHP-кода с поддержкой мультиязычности.


1. Использование Gettext (рекомендуемый способ)

Стандарт Gettext — самый мощный и гибкий вариант для локализации PHP.

Как работает?

  • Текст в коде оборачивается в функции (_()gettext()).

  • Переводы хранятся в .po/.mo файлах.

Пример кода:

echo _("Hello, world!"); // Будет искать перевод в .mo файле

Настройка:

  1. Установите php-gettext (если не включено по умолчанию).

  2. Создайте файлы переводов:

    • messages.pot (шаблон) → xgettext -d messages -o messages.pot *.php

    • ru_RU.po (перевод) → редактируем в Poedit.

    • ru_RU.mo → компилируем через msgfmt.

  3. Подключите в PHP:

$locale = 'ru_RU';
putenv("LC_ALL=$locale");
setlocale(LC_ALL, $locale);
bindtextdomain("messages", "./locale");
textdomain("messages");

Плюсы:
✔ Поддержка множества языков.
✔ Высокая производительность (бинарный .mo).
✔ Стандарт для WordPress, Drupal, Laravel.


2. Массивы переводов (простейший метод)

Подходит для небольших проектов.

Пример:

$translations = [
    'en' => ['hello' => 'Hello!'],
    'ru' => ['hello' => 'Привет!'],
];

$lang = 'ru';
echo $translations[$lang]['hello']; // "Привет!"

Плюсы:
✔ Простота реализации.
✔ Не требует сторонних библиотек.

Минусы:
✖ Не масштабируется для больших проектов.
✖ Нет поддержки плюральных форм (например, «1 сообщение» vs «5 сообщений»).


3. JSON-файлы для переводов

Удобно для SPA и API-ориентированных проектов.

Структура:

// lang/ru.json
{
  "welcome": "Добро пожаловать!",
  "items": {
    "apple": "Яблоко"
  }
}

Использование в PHP:

$lang = json_decode(file_get_contents('lang/ru.json'), true);
echo $lang['welcome']; // "Добро пожаловать!"

Плюсы:
✔ Удобно для фронтенда (JavaScript может использовать те же файлы).
✔ Читаемый формат.

Минусы:
✖ Медленнее Gettext (парсинг JSON).


4. База данных для переводов

Подходит для динамического контента (например, CMS).

Структура БД:

id key lang value
1 «welcome» «ru» «Добро пожаловать!»

Пример кода:

function translate($key, $lang = 'ru') {
    $query = "SELECT value FROM translations WHERE `key` = '$key' AND lang = '$lang'";
    // ... выполнить запрос и вернуть перевод
}
echo translate("welcome"); // "Добро пожаловать!"

Плюсы:
✔ Можно редактировать переводы через админку.
✔ Поддержка динамических строк.

Минусы:
✖ Медленнее, чем статические файлы.
✖ Сложнее в обслуживании.


5. Локализация в фреймворках

Популярные PHP-фреймворки предлагают встроенные решения:

Laravel

Использует файлы в resources/lang/:

echo __('messages.welcome'); // Ищет в resources/lang/ru/messages.php

Symfony

Работает с XLIFF или YAML:

# translations/messages.ru.yaml
welcome: "Добро пожаловать!"

Yii2

Поддержка .po и .php-файлов:

echo Yii::t('app', 'Hello'); // Ищет в messages/ru/app.php

6. Плагины и библиотеки

  • Loco Translate – для интеграции с WordPress/Drupal.

  • PHP-Intl – расширение для форматирования дат/чисел.

  • Symfony/Translation – можно использовать отдельно от фреймворка.


Вывод: какой метод выбрать?

Метод Когда использовать?
Gettext Крупные проекты, CMS, высокие нагрузки.
JSON/Массивы Небольшие сайты, SPA-фронтенд.
База данных Динамический контент (блоги, магазины).
Фреймворки Laravel/Symfony/Yii-разработка.

Совет: Для максимальной гибкости комбинируйте методы (например, статичные строки через Gettext, а пользовательский контент — в БД).

Если нужна помощь с конкретным случаем — спрашивайте в комментариях! 🚀

Добавить комментарий