您好我想在Poedit中扫描html文件来翻译那里的文本。 我在html文件中有这样的代码:
<a href="/test">_("translate me")</a>
我希望Poedit扫描单词翻译我就像扫描PHP文件而不使用PHP代码一样 纯HTML。
请给我有用的答案。我真的卡住了,我无法翻译我的模板。
我尝试在Poedit首选项中添加.html
,.htm
,实际上它不会读取我的文字,
我在电子邮件中询问了Poedit服务中心,他们给了我一个自己的转变&#34;答案。
答案 0 :(得分:0)
这是一个复杂的问题。基本答案是&#34; Poedit不会解析PHP函数内部的字符串,例如memory/usage
,除非它们在_()
包装器内#34;。您通过在扩展名列表中添加* .html来做正确的事情,但它仍然无法解析<?php ?>
标记中未包含的字符串。
我的解决方案是将<?php ?>
包装器放在文件中,即使它们不会被服务器解析或正确呈现,然后使用一些javascript来加载PHP标签。这允许Poedit在<?php ?>
函数调用中解析字符串,同时在用户看到它们之前快速剥离丑陋的php标记。
下面是我今天解决这个问题的js代码(需要jQuery)。请注意,它没有经过全面测试,几乎肯定需要额外的工作。它目前仅支持少量元素类型,并且仅支持剥离_()
和_()
函数。你必须提供你想要它的元素来剥离一个i18n类才能使它工作(完整的例子如下):
__()
&#13;
这将允许您将以下内容放入.html / .php文件中:
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);
}
});
});
&#13;
但是在js运行之后,用户只会看到:
<a href="/test" class="i18n"><?php echo _("translate me"); ?></a>
&#13;