Select to Translate – помощник в переводе сайта

На днях пришла в голову идея простого, но полезного модуля, реализации которого я еще для Друпала не встречал (кстати, если нечто подобное уже имеется – прошу указать). Select to Translate – несложный модуль, позволяющий перевести выделенный мышью текст. Фактически, модуль просто передает выбранный текст стандартному механизму поиска строк для перевода, включенному в базовый набор Друпал. Соответственно для его функционирования должны быть включены такие модули как Locale и Content translation.
В двух словах, модуль действует следующим образом: после выделения текста, фрагмент отправляется с помощью метода jQuery $.ajax() обработчику, который генерирует всплывающий блок со ссылкой на поиск фразы для перевода.

Перейдем к коду.

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

; $Id$ name = Select to Translate description = Allows you to translate text by mouse selection. dependencies[] = locale dependencies[] = translation package = Multilanguage core = 6.x

Далее, собственно, основное тело модуля:

<?php //реализация hook_menu() function select_to_translate_menu() { $items = array(); $items['transelect'] = array( 'access arguments' => array('access select_to_translate content'), //указываем, чтобы можно было позволять/запрещать модуль ролям 'title' => t('Select to Translate'), 'page callback' => '_select_to_translate', 'type' => MENU_CALLBACK, ); return $items; }   function select_to_translate_perm() { return array('access select_to_translate content'); }   function select_to_translate_theme() { return array( 'select_to_translate_javascript' => array( 'arguments' => array(), ), ); }   function select_to_translate_init() { //добавляем css с правилами для нашего блока drupal_add_css(drupal_get_path('module', 'select_to_translate'). '/select_to_translate.css'); theme('select_to_translate_javascript'); }   function theme_select_to_translate_javascript() { global $language; $thelang = $language->language; //добавляем переменную с активным языком для использования в js-файле модуля $js_variables = array('thelang' => $thelang); drupal_add_js(array('select_to_translate' => $js_variables), 'setting'); //добавляем файл скриптов drupal_add_js(drupal_get_path('module', 'select_to_translate'). '/select_to_translate.js'); }   //функция-обработчик function _select_to_translate($text){ //генерируем ссылку на искомую строку для перевода $res = l(t('Translate'), 'admin/build/translate/search?string='. $text, array('attributes' => array('title' => t('Translate selected text')))); return drupal_json(array('link' => $res)); exit; }

Javascript:

// $Id$ //переменные для сохранения координат мыши после выделения текста var mouseX = 0; var mouseY = 0; Drupal.behaviors.select_to_translate = function (context) { if(!window.Drupal){ Drupal = {}; }   Drupal.Selector = {}; //кросс-броузерный код получения выделенного текста Drupal.Selector.getSelected = function(){ var t = ""; if(window.getSelection){ t = window.getSelection(); }else if(document.getSelection){ t = document.getSelection(); }else if(document.selection){ t = document.selection.createRange().text; } return t; } //обработчик события отпускания левой кнопки мыши Drupal.Selector.mouseup = function(e){ if (e.which == 1) //проверка, что была нажата ЛКМ { var st = Drupal.Selector.getSelected(); //сохраняем координаты указателя мыши mouseX = e.pageX; mouseY = e.pageY; if (st != ""){ //отправляем запрос на получение ссылки $.ajax({ type: 'POST', url: Drupal.settings.basePath + Drupal.settings.select_to_translate.thelang + '/transelect/' +st, success: showTransBlock, dataType: 'json', data: 'js=1' }); } } }   $(document).ready(function(){ //назначаем обработчики событий $(document).bind("mouseup", Drupal.Selector.mouseup); //убираем блок со ссылкой при клике по свободному месту документа $(document).bind("click", function() { $('#translate-it').remove(); }); }); }   //Показываем блок со ссылкой var showTransBlock = function (data) { uri = data.link.replace('%3F','?').replace('%3D','='); $('body').append('<div id="translate-it">' + uri + '</div>'); var transblock = $('#translate-it'); //убираем блок, когда мышка покидает его суверенные границы transblock.bind("mouseleave", function() { transblock.remove(); }); transblock.css({left:mouseX+15, top:mouseY-30}); }

Файл стилей:

#translate-it { background-color:#8C9ED8; border:1px solid #fff; -moz-border-radius:5px 5px 5px 5px; -webkit-border-radius:5px 5px 5px 5px; border-radius:5px 5px 5px 5px; padding:3px; color:#fff; font-size:.8em; text-align:center; position:absolute; z-index:999; left:-9999px; }   #translate-it a { color:#fff !important; }

Вот и все, спасибо за внимание.
Все необходимые файлы прикреплены.

Прикрепленный файл Размер select_to_translate.zip 2.12 кб

Источник: http://www.drupal.ru/node/50552

Украинская локализация ядра и модулей

Решено стандартизировать переводы на украинский ядра и модулей Drupal 5.х.

Для создания как можно более полной Базы Перевода (БП), и соответственно новых стандартизированных переводов просьба отослать на указанный ниже адрес переводы, осуществленные на данный момент:

файл перевода в формате *.po должен не содержать посторонних текстов в полях перевода, кроме украинского текста. Несоблюдение этого требования приведет к посторонним данным в БП; грамматические, орфографические, стилистические и другие ошибки в переводах допустимы, хоть и не желательны; название .po файла формируется следующим образом:
uk-[Drupal version]-[Your translation version]_[Translator/Author].po
либо
[module name & version]-uk-[Drupal version]-[Your translation version]_[Translator/Author].po; .po файлы архивируются в формате *.zip. Название архива — идентично с названием файла + дата отсылки в формате [дд-мм-гггг] адрес для отсылки переводов (транситерован): друпал(а)друпал. орг. уа

На базе присланных Вами переводов будет создаваться БП — основа будущих стабильных версий переводов.
На базе различий между переводами будут создаваться карточки обсуждений глоссария на сайте drupal.org.ua. Целью данных карточек является стандартизация общими усилиями терминологии в переводах.

Все проекты переводов планируется размещать на сайте drupal.org.ua.
Стабильные версии переводов планируется размещать в CVS репозитории drupal.org.

Предложения и обсуждения, связанные с самим сайтом drupal.org.ua размещайте здесь:
http://www.drupal.ru/node/8824

Просьба ко всем, кто занимается украинским переводом, заинтересован в существовании украинских версий модулей, перевода ядра, даже украинской сборки — принимать участвие в проекте.

Переводы отдельных модулей ядра:

tracker-5.1_0.2 comment-5.1 contact-5.1

Переводы отдельных дополнительных модулей:

Украинский перевод модуля potx-5.x-1.x
Сайт проекта модуля Украинский перевод модуля-редактора BUEditor 5.x
Сайт проекта модуля

Источник: http://www.drupal.ru/node/6325

© 2009 Обзор CMS