#symfony1 #internationalization #translation
#symfony1 #интернационализация #перевод
Вопрос:
Я разрабатываю веб-сайт для подготовки студентов к конкурсу по программированию. Сейчас веб-сайт в основном на французском, но он будет переведен на испанский (еще одна страна хочет использовать наш обучающий веб-сайт).
Интернационализация интерфейса проста, но 1500 упражнений не все будут переведены в ближайшее время.
Что мне нужно, так это способ локализации содержимого (и интерфейса) на языке, выбранном пользователями, но если этот конкретный перевод недоступен на этом языке, тогда следует использовать перевод по умолчанию (французский). Мы бы даже хотели обобщить это: представьте, что некоторые упражнения по французскому переведены на английский, вы испанец и не говорите по-французски. Сначала вам нужна испанская версия, затем английская, а затем французская.
Есть ли хороший способ использовать интернационализацию в этом случае?
Я могу попробовать один язык, и если нет никакого результата, попробуйте другой, но это было бы не очень эффективно….
Ответ №1:
Для содержимого шаблона, если вы используете поведение Symfony i18n, будет автоматически доступен запасной язык по умолчанию. Что бы вы ни поместили внутрь __('string')
помощника, будет использоваться язык по умолчанию (объявленный в settings.yml), если переведенная строка не найдена. Для содержимого базы данных на нескольких языках вам нужно либо использовать поведение таблицы Symfony i18n, либо создать это самостоятельно. Я не знаю, как работает обработка базы данных Symfony i18n в случае языка по умолчанию, если содержимое на определенном языке не найдено. Запросы могут стать сложными. Мое общее мнение таково, что вам будет лучше создать функциональность, связанную с базой данных, самостоятельно, но это только по мне.
Что касается упорядочения языков (сначала переводы, затем английский, затем по умолчанию), я понимаю, что готовое поведение Symfony i18n не поддерживает это. Возможно, вам удастся взломать какой-то тип решения, убедившись, что в вашем испанском файле XML / XLIFF вы помещаете английские переводы внутри <target>
тегов, где доступны английские (но не испанские) переводы. Это даст вам ES -> EN -> FR. Однако я бы также рекомендовал вам стремиться к чистому «управлению» вашими переводами, чтобы это не стало слишком сложным / запутанным.
Надеюсь, это поможет.
Комментарии:
1. Спасибо за ваш ответ. Для интерфейса (быстрого перевода) должно быть достаточно резервного копирования. Для содержимого, я думаю, я помещу сообщение «недоступно на этом языке» или перенаправлю пользователя на другую версию страницы. site.com/fr/post/20/en где «fr» означает интерфейс, а «en» — содержимое. Таким образом, кэш становится проще использовать.