Где лучше хранить переводы в мультиязычном сайте?
У нас есть мультиязычный сайт, написанный на laravel+reactjs. Сейчас переводы у нас хранятся в json файлах в формате: ключ:значение и подставляются по ключу. Далее данные из этого файла мы будем отображать в админ панель, чтобы копирайтер мог редактировать переводы. Подскажите, правильно ли хранить наши переводы в json файле или может лучше для этого использовать базу данных или какое-то еще решение?
Дополнительно:
А переводы на фронте или на бэке? Если на бэке, проще хранить сразу массивы ключ значение
Ответы:
Для лары есть пакеты с переводами уже готовые, если их функционал подходит, не вижу смысла строить свой велосипед.
Если же нужно очень кастомное решение с администрированием на уровне админки, то бд будет более качественным решением, так как работа с поиском и сортировкой это больше про РБД, нежели про файлы.
Лучше хранить переводы на различные языки на стороне пользователя(в json-объектах, на js), а вместе с ними функции для определения и смены языка. В то время, как хранение переводов на серверной части, а вместе с этим перевод этих самых страниц на другие языки, и тем более используя базу данных может нести за собой излишнее количество потребляемых системных ресурсов(особенно, если речь идёт о сайтах с миллионами пользователей), которое можно было избежать, перенеся фуекцию перевода на клиентскую часть(и тем самым, кстати, в теории экономить на сервере).
В ларе есть специальный хелпер для локализации __()
https://laravel.com/docs/10.x/localization
Такой-же, кстати, в вордпрессе. Внутрянка немного различается, но применение практически одинаковое.
В большом оперсорсном софте делают вот так. Но вы можете делать и свои велосипеды с json'ами-массивами, особенно если уверены, что объемы локализации небольшие, и вам не понадобится для них привлекать сторонних исполнителей, писать тесты, и прочие энтерпрайзные штуки. Ну просто для готовых решений уже тонны сопутствующего софта написаны, а для велосипедов придется их тоже велосипедить. Ну или не придется, если приложение мелкое или с коротким жизненным циклом.
Опишите проблему, и специалист поможет с настройкой, исправлением ошибки или доработкой сайта. Подберём понятный план работ без лишней переписки.
Пока нет других ответов. Будьте первым, кто поможет автору.
Ответить на вопрос
При разработке мультиязычного сайта важным аспектом является хранение переводов текстовых элементов. Существует несколько подходов к этой проблеме, каждый из которых имеет свои преимущества и недостатки. Давайте рассмотрим некоторые из них.
1. Хранение переводов в базе данных:
Один из распространенных способов хранения переводов - это использование базы данных. Вы можете создать таблицу, в которой каждая строка будет содержать перевод для определенного текстового элемента на определенном языке. Например, таблица `translations` может содержать столбцы `id`, `key`, `lang`, `value`.
```php
CREATE TABLE translations (
id INT PRIMARY KEY,
key VARCHAR(255),
lang VARCHAR(2),
value TEXT
);
```
Для получения перевода на определенном языке вы можете использовать следующий SQL запрос:
```php
SELECT value FROM translations WHERE key = 'welcome_message' AND lang = 'en';
```
Преимущества этого подхода включают в себя удобство управления переводами через административный интерфейс и возможность динамического обновления переводов. Однако использование базы данных может замедлить производительность сайта из-за необходимости выполнения дополнительных запросов.
2. Хранение переводов в файлах:
Другой популярный способ хранения переводов - это использование файлов. Вы можете создать отдельные файлы для каждого языка, в которых будут содержаться переводы в формате ключ-значение. Например, файл `en.php` может содержать следующее:
```php
return [
'welcome_message' => 'Welcome to our website!',
'about_us' => 'About Us',
// другие переводы
];
```
Для получения перевода на определенном языке вы можете использовать следующий код:
```php
$translations = include 'en.php';
echo $translations['welcome_message'];
```
Преимущества этого подхода включают в себя быстродействие и простоту редактирования переводов. Однако управление большим количеством файлов может быть неудобным.
3. Использование сторонних сервисов:
Третий способ - это использование сторонних сервисов для хранения переводов, таких как Google Translate API или Yandex.Translate API. Вы можете отправлять запросы к этим сервисам для получения перевода на определенный язык. Например, с помощью Google Translate API:
```php
$apiKey = 'your_api_key';
$text = 'Hello, world!';
$source = 'en';
$target = 'fr';
$url = 'https://translation.googleapis.com/language/translate/v2?key=' . $apiKey;
$data = [
'q' => $text,
'source' => $source,
'target' => $target,
];
$options = [
'http' => [
'header' => "Content-type: application/x-www-form-urlencoded\r