Удалить строки которых нет в системе

Главные вкладки

Аватар пользователя WARpholomey WARpholomey 6 апреля 2008 в 22:45

Здравствуйте!
Продолжаю пытаться привыкнуть к Drupal после таких гибридов танка и мусорного контейнера как SLAED и Nuke.

На этот раз вопрос встал весьма резко, опять наверное к тому-же спору о том гдк лучше хранить переводы - в базе или в файлах. Поясню ситуацию - вот есть установленный Drupal, модуль Autolocale и уже добавленный в базу 100% перевод системы на русский язык. Если я ставлю модули, количество строк понятное дело увеличивается - я их понемногу перевожу и так далее...

Но! Если я удаляю модуль, его строки остаются в базе. Можете сказать что я придираюсь... Всё ведь работает. Но не очень мне нравится видеть что перевод у меня 87% из 100%. Вобще, по непонятной причине перевод, это единственное что в Drupal сделано плохо!

Соответственно вопрос - есть ли возможность удалять из базы данных строки, которые не содержатся ни в одном модуле? (Мультиязычности нет - строк которые содержали-бы контент сайта тоже). Иначе говоря, сейчас мне что-бы почистить переводы нужно сделать дамп всей базы кроме переводов, удалить старую базу, заново проинсталлировать Drupal, потом поверх восстановить базу и сделать импорт переводов - модулем Autolocale, тех модулей у которых есть po файл... Наверняка ведь глупо, а что делать - не привык я ещё к вашей зверушке)

Комментарии

Аватар пользователя neochief neochief 6 апреля 2008 в 23:44

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

Аватар пользователя WARpholomey WARpholomey 7 апреля 2008 в 0:08

А по какому принципу они вобще в базе создаются?
После того как строка пройдёт через функцию t(), и если её ещё нет в базе?
Какие есть полезные модули для работы с языками в Drupal 5?

Я вроде видел какой-то модуль, который из любого другого модуля извлекает шаблон языков (.pot)...
Единственное не уверен, это для Drupal5 или Drupal6. С PHP у меня хорошо, мне лишь нужно от чего-то оттолкнуться. Сколько ресурсов уйдёт на подобную процедуру - мне неважно, хоть 100% процессорного времени - у меня свой сервер)

Если так - на примере самого простого, модуль PNGFIX. Есть pngfix.ru.po в каталоге po модуля. В этом файле строк больше чем в модуле - то есть при импорте появится мусор. Есть абстрактный модуль который может создать .pot файл модуля. Значит за чем сложность, это написать алгоритм, который будет парсить .po и .pot файлы (уже есть в API? Я не в курсе...) и добавлять из первого во второй те строки которые есть в .pot файле. На выходе выдавая .po файл которые идентичен .pot файлу но содержит и перевод. После этого удаляем старый .po и .pot, повторяем те-же действия со всеми модулями системы, полностью вычищаем таблицы со строками, и запускаем автоимпорт перевода. Ведь теоретически после этого у нас будет 100% перевод и только те строки что есть в системе?

Разумеется реальной отдачи такой алгоритм иметь не будет - зачем несколько раз делать столь сложную процедуру? Зато позволит в кой-то веки создать не только полные, но ещё и правильные переводы многих модулей и самой системы.

Аватар пользователя andypost@drupal.org andypost@drupal.org 7 апреля 2008 в 1:25

Можно порекомендовать посмотреть на таблицу {locales_source} особенно на поле location, но насколько оно верно - я не проверял
Можно очень простым запросом выкинуть лишние строки по неиспользуемым модулям, но есть вероятность, что они пересекаются с другими и нужно будет опять добавлять слова

Аватар пользователя WARpholomey WARpholomey 7 апреля 2008 в 1:32

Только что посмотрел potx - очень неплохая вещь. Помимо извлечения шаблона для любого модуля, он может параллельно записать в шаблон те переводы которы уже есть в базе данных, для конкретного языка. Насколько я понял при этом неиспользуемые строки он не пишет в файл.

В принципе вопрос решён - ещё посмотрю код этого модуля, но в данный момент наверное лучший вариант - это максимально перевести все модули через интерфейс сайта, потом с помощью potx извлечь файлы переводов (уже с языком, но без "мусора"), а потом благополучно грохнуть языковую часть базы данных, вернее - содержимое. Потом автоимпорт языка, и готово.

Большое спасибо всем кто ответил!

Аватар пользователя Wet Wet 9 апреля 2008 в 21:41

Таже проблема. Впринцие избежать ее можно, если перед установкой дополнительного модуля бэкапить базу данных. Всегда можно будет ее откатить обратно.

Аватар пользователя Холод Холод 23 октября 2011 в 16:30

И наплодить кучу бэкапов, в которых раньше или позже запутаешься как в паутине...

У меня возникла проблема с переводом модуля ckeditor. После перевода кнопки в редакторе перестали разбиваться на строки и не вписываются в экран.
Возвращение на английский язык не рашает проблему. Конфликт в базе?
С чем это может быть связано?