2013-10-24 3 views
1

Я превращаю старое приложение в новое, используя Symfony2.Symfony2: проверьте перевод, если нет, заставьте переводчик написать его

Небольшая часть текста была переведена в старом приложении, где я использовал личную библиотеку для перевода.

Цель: когда фильтр trans или {% trans %} вызывается в Twig, я хочу, чтобы Symfony2 проверял, существует ли перевод. Если это так, то он возвращает правильный перевод, используя локаль пользователя. Здесь ничего иностранного нет, так работает Symfony2.

Но я столкнулся с тем, что моя старая библиотека работает немного лучше: если перевод не существует, то он записывает его в файл для перевода, который должен быть замечен переводчикам. Я использовал небольшую заднюю панель, в которой мы могли видеть все недостающие переводы, поэтому переводчики могли работать со свободным разумом, и, как разработчик, я мог бы также развить и показать текст, который будет переведен свободно, как я знал, t нужно добавить текст в файл перевода. И люди, использующие backoffice и добавляющие текст в базу данных, могут также работать со свободным разумом, зная, что их тексты будут автоматически записаны в файлы, и переводчики смогут увидеть их в своем интерфейсе.

Я знаю, что консоль Symfony2 может сбросить все эти переводы для того, чтобы записать в некоторых файлах, но есть две проблемы для меня с этой системой:

  1. Во-первых, недостающие переводы написаны тем же как исходный текст с префиксом, который мы можем использовать или нет. Это тяжело, потому что это заставляет меня проверить, находится ли префикс внутри перевода, чтобы проверить, отсутствует ли он. А также, показанный текст на веб-сайте будет с этим префиксом, который я не хочу использовать. На самом деле, я хочу, чтобы исходный текст возвращался, если нет перевода, поэтому должна быть пустая строка внутри тегов xml или xliff. Лучше проверить, когда строка пуста.
  2. Во-вторых, большая часть текста находится в базе данных и динамически восстанавливается моими контроллерами, и я не хочу извлекать всю базу данных для проверки переводов. Мне нужно написать в моих файлах, когда данные должны быть переведены. Я буду ориентироваться на веб-сайте, чтобы «генерировать» все файлы переводов, это легко, так как любой робот может перемещаться внутри веб-сайта (например, генератор sitemaps может помочь мне получить все URL-адреса сайтов, чтобы загрузить их, а затем заставить symfony2 использовать фильтр или блок trans, а затем записать отсутствующие данные в файл перевода). Затем, когда все страницы загружаются, я могу ожидать, что весь текст будет отправлен и записан в файлы.
  3. А потом, конечно, мне нужно немного backoffice, которое позволит мне проверить все переводы. Но я думаю, что друзья symfony уже сделали для этого пакет (на самом деле, для Symfony2, есть набор для почти всего). Это не огромный момент, поскольку я могу сделать это сам (у старого приложения есть своя система, я могу перенести его в новое приложение).

Я действительно хочу найти решение для этого.

Конечно, я мог бы реализовать свою старую библиотеку в Symfony2 и создать свой собственный фильтр перевода twig (уже сделал это), но было бы немного лучше использовать собственную систему Symfony2 или даже установить еще один комплект для этого внутри каталог поставщиков, так как я не хочу обрабатывать разработку в зависимости от пакетов и т. д. (так как перевод сохраняется для каждого пакета).

У вас есть собственное решение для этого? (если его нет, я сдаюсь и использую свою собственную библиотеку, но она не будет такой же красивой, как система перевода Symfony2;))

Спасибо всем за чтение и помощь! ;)

EDIT (8 февраля 2014):

Я создал свою собственную библиотеку с очень простой системой, которая доступна на my Github page. Он просто добавляет перевод в файлы, когда перевод недоступен.

Однако я решил создать другую библиотеку, вдохновленную этим, но полагаясь на базу данных. Модуль находится в разработке, но его система проста:

Он загружает перевод с помощью родного переводчика, и если перевод недоступен (т. Е. Родной переводчик возвращает пустую строку), он загружает все переводы в базу данных , в зависимости от значения transl_domain. Затем служба (запущенная либо в контроллере, и в командной строке) будет записывать все переводы баз данных в файлы, чтобы родной переводчик мог быстрее их загружать и хранить их в кэше SF2.

ответ

2

И наконец, спасибо за помощь.

Я пробовал JMSTranslationBundle, и он разбивал все cachE symfony2.

Наконец, я решил создать свою собственную библиотеку, и я положил ее на Github и Packagist, вы можете найти ее на packagist.org, это называется corahnrin/translate.

Это совершенно новый, так что не обвиняйте меня, если он не завершен! :)

+0

Просто скажите, если люди приходят сюда, новая версия доступна на https: //github.com/Pierstoval/TranslationBundle, все еще доступный в packagist. Хорошо работает (надеюсь, что это так) хорошо документирован и протестирован во многих средах. Просто нужно проверить многие версии Symfony, чтобы убедиться, что зависимость будет добавлена ​​в composer.json :) –

1

Я думаю, вам может понравиться https://github.com/schmittjoh/JMSTranslationBundle для достижения вашей цели. У него даже есть небольшая задняя часть, которую вы хотите.

+0

Спасибо! Я в настоящее время тестирую это, я буду замечать этот вопрос, как ответ, если этот комплект решает мою проблему;) –

+0

Наконец, я не собираюсь использовать этот комплект. Проблема в том, что у меня много объектов (точнее, 51), с большим кешем, и после тестирования этого пакета произошла ошибка ОГРОМНОГО кеша: все сущности, кэшированные, были в предыдущих версиях приложения. Например, атрибут, ранее зарегистрированный как сериализованный массив, был изменен на целое. Проблема в том, что даже если я удалил кеш, перезапустил мой локальный сервер, восстановил объекты с помощью Doctrine, когда я использовал кеш: разминку или просто загрузив страницу, аннотации в кеше были те, у которых есть атрибут массива, и –

+0

а не целое. Итак, я удаляю этот пакет, и я собираюсь заменить фактический фильтр «trans», родной в symfony2, своим собственным фильтром «trans» ... –

Смежные вопросы