Пользовательский перевод
From LimeSurvey Manual
Введение
Начиная с LimeSurvey 5.4.0 вы можете использовать собственный перевод для всех строк на всех доступных языках, напрямую обращаясь к своей базе данных.
Эту систему можно использовать, если существующий перевод не соответствует требованиям вашего бизнеса.
Её следует применять только в особых случаях, поскольку при изменении текстов в ядре LimeSurvey вам снова потребуется изменять базу данных.
Кроме того, этот метод можно использовать для перевода строк, относящихся к теме опроса.
Как работают переводы в базе данных
Для переводов в базе данных LimeSurvey использует метод, основанный на CDbMessageSource из фреймворка Yii.
- найти строку в таблице SourceMessage lime_source_message->message и получить идентификатор: lime_source_message->id
- если строка существует, найти связанный перевод в таблице Message lime_message->translation для текущего языка lime_message->language с текущим идентификатором lime_message->id
LimeSurvey создаёт массив переводов из po-файла (информацию о том, как обновить этот файл, см. в разделе Перевод LimeSurvey), а затем объединяет его со всеми переводами из базы данных.
После этого переводы из базы данных всегда возвращаются в первую очередь, если они существуют.
Пример для кнопки «Отправить» на английском и французском языках
Вы хотите, чтобы на кнопке отправки во всех ваших опросах (с определённой темой) отображалось _Validate_, а не _Submit_. Если просто изменить тему и заменить gT('Submit') на gT('Validate'), то _Validate_ будет отображаться на всех языках.
Для всех опросов со всеми темами
- Создайте исходное сообщение
INSERT INTO lime_source_message (id, category, message) VALUES (NULL, '', 'Submit'); - Проверьте ID (если это первая запись, ID равен 1) и используйте его в следующей инструкции
- Создайте связанный перевод:
INSERT INTO lime_message (id, language, translation) VALUES ('1', 'en', 'Validate'), ('1', 'fr', 'Valider');
Не заменяйте строку пустой строкой, иначе перевод вернётся к исходной английской фразе. Необходимо указать как минимум один пробел.
Использование собственной темы (рекомендуемое решение)
Этот метод использует собственный шаблон и также обновляет строку по умолчанию для всех остальных языков.
- В Редакторе темы выберите раздел «Навигация»
- Найдите
Template:GT("Submit")(в navigator.twig) - Замените на
Template:GT("Validate") - Создайте исходное сообщение
INSERT INTO lime_source_message (id, category, message) VALUES (NULL, '', 'Validate'); - Проверьте ID (если это первая запись, ID равен 1) и используйте его в следующей инструкции
- Создайте связанный перевод:
INSERT INTO lime_message (id, language, translation) VALUES ('1', 'fr', 'Valider');
Обратите внимание
Поле category в lime_source_message должно быть пустой строкой (''), а не NULL. Если категория не совпадает точно, gT() не найдёт исходное сообщение, и ваш перевод не будет применён. Это особенно важно при добавлении переводов для строк, относящихся к конкретной теме.