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

Прислано: WARpholomey

вс, 06/04/2008 - 18:45

Другие статьи по теме:

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

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

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

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

Комментарии


Настройки просмотра комментариев

Выберите нужный метод показа комментариев и нажмите "Применить"
Опубликовано neochief в вс, 06/04/2008 - 19:44.

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


Опубликовано WARpholomey в вс, 06/04/2008 - 20:08.

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

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

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

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


Опубликовано SaBoNim в вс, 06/04/2008 - 20:57.

Знаю только, что модуль который может извлекать шаблон для перевода любого модуля - potx


Опубликовано andypost@drupal.org в вс, 06/04/2008 - 21:25.

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


Опубликовано WARpholomey в вс, 06/04/2008 - 21:32.

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

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

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


Опубликовано Wet в ср, 09/04/2008 - 17:41.

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


Новое на сайте

Ссылки партнёров