Импорт перевода из .po файлов или редактирование перевода при использовании HTML-тэгов.

Как известно, Drupal позволят импортировать перевод с помощью загрузки специальных .po файлов.

При импорте перевода с тэгами мы получаем такую ошибку:

"One translation string was skipped because it contains disallowed HTML." (Одна строка с переводом была пропущена, потому что она содержит неразрешённый HTML).

При редактировании перевода (admin/build/translate/search - забиваем нужную нам фразу и редактируем перевод через кнопку "изменить")  Drupal также ругается.

Первую часть (импорт перевода) лечим по статье, найденной мною тут:

http://drupalist.org.ru/docs/bugs/2.html

Подробно описывать не буду, только добавлю патч:

--- includes/locale.inc	2010-03-04 03:15:00.000000000 +0300
+++ includes/locale.inc	2010-04-25 12:15:03.000000000 +0400
@@ -652,6 +652,12 @@
LOCALE_IMPORT_KEEP => t('Existing strings are kept, only new strings are added')
),
);
+  $form['import']['security'] = array('#type' => 'checkbox',
+    '#title' => t('Allow HTML tags in translation. Do it, I know that I do!'),
+    '#default_value' => variable_get('translation_security', false),
+    '#description' => t('Skip check for HTML tags into translation strings. Warning! Some HTML tags may cause incorrect theme display. Use it with care!'),
+  );
+
$form['import']['submit'] = array('#type' => 'submit', '#value' => t('Import'));
$form['#attributes']['enctype'] = 'multipart/form-data';

@@ -664,6 +670,8 @@
function locale_translate_import_form_submit($form, &$form_state) {
// Ensure we have the file uploaded
if ($file = file_save_upload('file')) {
+    // Saving the parameter
+    variable_set('translation_security', $form_state['values']['security']);

// Add language, if not yet supported
$languages = language_list('language', TRUE);
@@ -1363,7 +1371,8 @@
// Skip this string unless it passes a check for dangerous code.
// Text groups other than default still can contain HTML tags
// (i.e. translatable blocks).
-     if ($textgroup == "default" && !locale_string_is_safe($translation)) {
+
+     if ($textgroup == "default" && variable_get('translation_security', false) == false && !locale_string_is_safe($translation)) {
$report['skips']++;
$lid = 0;
}

 

Вторую часть (редактирование перевода) искать не стала, подправила сама:

Идем в ваш_сайт\www\includes\locale.inc

правим функцию function locale_translate_edit_form_validate($form, &$form_state) {

function locale_translate_edit_form_validate($form, &$form_state) {
  /*+ ^patch^*/  return;
  // Locale string check is needed for default textgroup only.
  $safe_check_needed = $form_state['values']['textgroup'] == 'default';
  foreach ($form_state['values']['translations'] as $key => $value) {
     if ($safe_check_needed && !locale_string_is_safe($value)) {
      form_set_error('translations', t('The submitted string contains disallowed HTML: %string', array('%string' => $value)));
      watchdog('locale', 'Attempted submission of a translation string with disallowed HTML: %string', array('%string' => $value), WATCHDOG_WARNING);
    }
  }
}

Как видим, я просто тупо убрала проверку. Вообще, по-хорошему, так делать нехорошо)))
Все. Спасибо челу, чью ссылку я тут дала)

Рекомендовать в Социальных сетях:
 

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *