Сканирование HTML-файлов в Poedit

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

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

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

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

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

-2

Решение

Это сложная проблема. Основной ответ: «Poedit не будет анализировать строки внутри функций PHP, таких как _() если они не в пределах <?php ?> wrappers «. Вы правильно сделали, добавив * .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);
}
});
});
0

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]