[РЕШЕНО] Drupal 7: текущая языковая локаль поля

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

Аватар пользователя Sun-fire Sun-fire 1 ноября 2011 в 16:49

Суть проблемы.

На сайте включена поддержка локализации (модуль Locale). По умолчанию установлен Украинский язык (uk). В настройках типа контента установлено: Multilingual support: Disabled. В ремарках для этой настройки указано: If disabled, new posts are saved with the default language. Следовательно, поля должны сохранятся с текущей локалью пользователя - uk.

При сохранении контента некоторые поля сохраняются так, как нужно - с локалью uk, а некоторые с признаком локали und.

В чем может быть проблема с такой "неправильной" установкой языковой локали поля?

Комментарии

Аватар пользователя Sun-fire Sun-fire 1 ноября 2011 в 17:41

UPD: В field_config для таких проблемных полей свойство translatable установлено в значение 0, соответственно, значе6ния полей устанавливаются в und, то есть вне языковой локали. Текущая локаль ноды при это остается uk - соответствует текущей локали пользователя. Изменение свойства в 1 решает проблему для конкретного поля.

Каким образом можно явно установить свойство translatable для отдельного поля, не прибегая к редактированию БД напрямую?

Аватар пользователя Sun-fire Sun-fire 1 ноября 2011 в 19:35

UPD: Все оказалось не так просто, но хотя бы ясно, как решать эту проблему. В одной из последних версий ядра Drupal изменилась концепция дефолтовой языковой локали.

Более подробно описано здесь: Inconsistencies in field language handling

Аватар пользователя restyler restyler 2 ноября 2011 в 2:37

для сайтов с 1 языком я бы сказал, что у полей не должно стоять флага "translatable", тогда к полям можно будет достучаться через LANGUAGE_NONE.
вот тут еще можно почитать об альтернативных способах работы с полями, которые позволят не париться по поводу локалей: http://sidashin.ru/blog/safe-drupal7-fields-code

Аватар пользователя Sun-fire Sun-fire 2 ноября 2011 в 17:53

Судя по анализу базы данных сайта, и вышеуказаной статьи, раньше при сохранении параметров поля опция translatable по дефолту устанавливалась в 1, и соответственно, поля сохранялись с текущей языковой локалью пользователя, который создает контент. Теперь по умолчанию для новых полей translatable устанавливается в 0, и поля сохраняются с признаком языковой локали und, то есть вне языковой локали.

Таким образом на сайте образовалась каша таблицах полей. Старые записи имеют в моем случае кодировку uk, новые und.

Сейчас как раз работаю над разбором всей этой образовавшейся "каши". Программу действий наметил примерно следующую:

1. Изменение в field_config свойства translatable для "старых" полей, чтобы контент создавался уже с новыми значениями языковой локали.
2. Внеснение изменений в кастомные модули (например импорт и т. п.), если такого нет, значит нет.
3. Изменение в уже существующих значениях полей старой локали на новую (таблицы field_data_ и field_revision_)

UPD:

4. Внесение изменений в node

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

restyler - спасибо за информацию, очень полезно и познавательно.

Аватар пользователя restyler restyler 2 ноября 2011 в 21:10

"Sun-fire" wrote:
restyler - спасибо за информацию, очень полезно и познавательно.

всегда пожалуйста Smile
я вам в личку написал, видели?

Аватар пользователя restyler restyler 3 ноября 2011 в 3:16

"Sun-fire" wrote:
Только что просмотрел личку, к сожалению, пусто.

по идее на емейл (на который зарегистрирован ваш аккаунт здесь) должно было прийти.. мое мыло russiancss [at] gmail.com - напишите что-нибудь, я продублирую свое сообщение вам на почту (аськи у меня нет года два уже).