2015-10-15 2 views
-2

Здравствуйте, я хочу, чтобы файлы сканирования html в Poedit переводили текст там. У меня есть код в HTML файл, как это:Сканировать html-файлы в poedit

<a href="/test">_("translate me")</a> 

и я хочу Poedit сканировать слово перевести меня как он просканирует PHP файл без использования PHP кодирует только чистый HTML.

Просьба дать мне полезный ответ. Я действительно застрял, я не могу перевести свой шаблон.

Я пытался добавить .html, .htm в PoEdit предпочтения и на самом деле это не мои слова, я спросил Poedit сервисный центр по электронной почте, и они дают мне «сдвиг для себя» ответ.

ответ

0

Это сложная проблема. Основной ответ: «Poedit не будет анализировать строки внутри функций PHP, такие как _(), если они не находятся в пределах <?php ?> обертки». Вы поступили правильно, добавив * .html в список расширений, но он все равно не будет анализировать строки, которые не содержатся в тегах <?php ?>.

Моим решением является размещение в файле <?php ?> обертки, даже если они не будут обрабатываться сервером или отображать правильно, а затем использовать некоторый javascript для разметки тегов PHP при загрузке. Это позволяет Poedit анализировать строки в функциональных вызовах _(), в то же время быстро удаляя уродливые теги php, прежде чем пользователь сможет их увидеть.

Ниже приведен код js, который я собрал для решения этой проблемы сегодня (требуется jQuery). Имейте в виду, что он не полностью протестирован и почти наверняка нуждается в дополнительной работе. Он поддерживает только небольшое количество типов элементов в настоящее время и поддерживает только дескрипцию функций _() и __(). Вы должны дать элементы, которые вы хотите, чтобы лишить класс i18n для того, чтобы это работало (полный пример ниже):

function _get_elem_translatable_string(elem) { 
 
    // Get attr_name 
 
    attr_name = _get_attr_name(elem); 
 

 
    // Get current translatable value 
 
    if (attr_name == 'html') { 
 
     str = $(elem).html(); 
 
    }else{ 
 
     str = $(elem).attr(attr_name); 
 
    } 
 

 
    // Return 
 
    return str; 
 
} 
 
function _set_elem_string(elem, str) { 
 
    // Get attr_name 
 
    attr_name = _get_attr_name(elem); 
 
    
 
    // Update the element 
 
    if (attr_name == 'html') { 
 
     // Set html for 'normal' elements 
 
     $(elem).html(str); 
 
    }else if (attr_name == 'value') { 
 
     // Set value for 'value' elements (typically a submit input) 
 
     $(elem).val(str); 
 
    }else{ 
 
     // Set attr value for other elements 
 
     $(elem).attr(attr_name, str); 
 
    } 
 
} 
 
function _get_attr_name(elem) { 
 
    // Determine attr that will be affected based on tag type of elem 
 
    if ($(elem).is('input') && ($(elem).attr('type') == 'text' || $(elem).attr('type') == 'password')) { 
 
     attr_name = 'placeholder'; 
 
    }else if ($(elem).is('input') && $(elem).attr('type') == 'submit') { 
 
     attr_name = 'value'; 
 
    }else{ 
 
     attr_name = 'html'; 
 
    } 
 

 
    // Return 
 
    return attr_name; 
 
} 
 
function _contains_php_gettext(str) { 
 
    // bool: Is the string is a php tag containing a call to 'echo _()'? 
 
    regexp = _php_regexp(); 
 
    if (str.match(regexp)) 
 
     return true; 
 
} 
 
function _strip_php_gettext(str) { 
 
    // If the string is a php tag containing a call to 'echo _()', strip to PHP tag 
 
    regexp = _php_regexp(); 
 
    if (str.match(regexp)) { 
 
     // Detect if delimieter is apostrophe or quotation mark 
 
     delim = (str.match(/echo[ \t]*_\('/) ? "'" : (str.match(/echo[ \t]*_\("/) ? '"' : '')); 
 

 
     // Strip tag 
 
     str = str.replace(regexp, "$2"); 
 

 
     // Strip escape chars 
 
     if (delim == "'") 
 
      str = str.replace(/\\'/, "'"); 
 
     if (delim == '"') 
 
      str = str.replace(/\\"/, '"'); 
 
    } 
 

 
    // Return 
 
    return str; 
 
} 
 
function _php_regexp() { 
 
    return /^<(!--)*\?php[ \t]*echo[ \t]*_\(['"](.*)['"]\)[ \t;]*\?[-]*>/i; 
 
} 
 

 
// Start when document ready 
 
$(document).ready(function() { 
 
    // Convert non-parsed PHP tags (for instance if this page is running on a server that does not run PHP) 
 
    $('.i18n').each(function(i, elem) { 
 
     // Get translatable string from elem 
 
     str = _get_elem_translatable_string(elem); 
 

 
     // Strip PHP, ITIS 
 
     if (_contains_php_gettext(str)) { 
 
      // Set 
 
      _set_elem_string(elem, _strip_php_gettext(str), true, true); 
 
     } 
 
    }); 
 
});

Это позволит вам поместить следующее в ваш. HTML/.php файл:

<a href="/test" class="i18n"><?php echo _("translate me"); ?></a>

Но после того, как JS работает пользователь будет видеть только:

<a href="/test" class="i18n">translate me</a>

Смежные вопросы