Я начинаю использовать poedit для перевода текста PHP. Теперь меня смущает, что делать с длинными многострочными текстами, например с страницей с Условиями. Я обсуждаю это с коллегой.
Я вижу два варианта:
За абзацем или строкой одно поле poedit
Это держит текст внутри echo _('lorem ipsum');
маленький.
Недостаток: если вы измените текст и хотите добавить строки, вам придется добавить строки в коде, что нежелательно. Вероятно, вы бы этого не сделали, а затем использовали один идентификатор для добавления двух абзацев, что противоречит этому методу.
Весь текст в одном поле поедит
Недостаток: это приведет к очень длинному идентификатору. Я не собираюсь приводить пример — вы знаете, как долго они могут быть. Текст идентификатора может занимать больше экрана.
Идентификатор для описания того, что должно отображаться
Идентификатор может быть заменен короткой строкой, описывающей, что это такое, например:
<?php _('Terms and conditions: complete text'); ?>
Недостаток: если добавлен новый язык, и этот текст не переведен, появится идентификатор.
Преимущество: если абзацы добавляются или удаляются, вы можете сделать это без необходимости изменения исходного кода.
Преимущество: иногда одно английское слово переводится в различные значения в зависимости от контекста, например, «жирный»:
Примечание: вы должны прочитать это как поле формы, где вы можете выбрать желаемый шрифт: (1) нормальный, (2) жирный или (3) курсив, а не один текст «Вес шрифта: жирный».
В этих двух случаях идентификатор, такой как «жирный шрифт» и «жирный шрифт», обеспечил бы контекст.
Вопросы
Как вы обрабатываете длинные тексты в poedit? Что такое лучшая практика?
Gettext не подходит для длинных текстов свободной формы совсем. Правильный ответ — третий, который вы не упомянули: просто не. Используйте, например, локализованные текстовые файлы вместо.
Чтобы прокомментировать некоторые из ваших идей:
За абзацем или строкой одно поле poedit
Разрезать текст на отдельные строки — очень плохая идея. Это потеряло бы важный контекст.
Идентификатор для описания того, что должно отображаться
…
Преимущество: если абзацы добавляются или удаляются, вы можете сделать это без необходимости изменения исходного кода.
Очень плохая идея (как правило, не только для длинного текста). Если исходный (английский) текст изменяется, вам не о чем будет предупреждать о необходимости обновления перевода. Неизбежно, переводы будут выйти из синхронизации, необнаружимо. Это не «преимущество» вообще.
Есть причина, по которой gettext использует исходный текст в качестве ключа: работает.
Преимущество: иногда одно английское слово переводится в различные значения в зависимости от контекста, например, «жирный»:
Я не понимаю, каким образом различные значения одних и тех же слов / коротких текстов вообще связаны с этим вопросом. Это естественно обрабатывается gettext с контекстами сообщений (msgctxt
) как обсуждается в руководстве.
Других решений пока нет …