我正在用PHP构建一个Web应用程序,我已经决定(在整个过程中)提供不同语言的语言。
我的问题是:
我不想嘲笑模板文件中的所有HTMl代码来查找"单词"我需要用动态生成的lang变量替换。
是否有工具可以突出显示"字"在HTML中使用,使我的任务更容易。
这样当我向下滚动HTML文档时,我可以很容易地看到语言"单词"是
通常,当我创建应用时,我会将 注释添加为代码,如下所示
<label><!--lang-->Full Name</lable>
<input type="submit" value="<!--lang-->Save Changes" name="submit">
所以,当我完成后,我可以通过并轻松识别我需要添加动态变量的位....不幸的是,我几乎通过应用程序(丢失的HTML模板文件),我还没有完成如此。
我使用模板引擎(tinybutstrong)所以我的HTML非常干净(即没有PHP)
答案 0 :(得分:0)
您可以相对轻松地执行此操作,使用DOMDocument
解析标记,DOMXPath
查询所有注释节点,然后访问每个节点的父节点,提取{ {1}}并将这些值列为&#34;要翻译的字符串&#34; :
nodeValue
请注意,这不能处理标记属性中使用的注释。使用这个简单的脚本,您将能够在&#34;常规&#34; 标记中提取需要翻译的字符串。之后,您可以编写一个在标记属性中查找$dom = new DOMDocument;
$dom->load($file);//or loadHTML in case you're working with HTML strings
$xpath = new DOMXPath($dom);//get XPath
$comments = $xpath->query('//comment()');//get all comment nodes
//this array will contain all to-translate texts
$toTranslate = array();
foreach ($comments as $comment)
{
if (trim($comment->nodeValue) == 'lang')
{//trim, avoid spaces, use stristr !== false if you need case-insensitive matching
$parent = $comment->parentNode;//get parent node
$toTranslate[] = $parent->textContent;//get parent node's text content
}
}
var_dump($toTranslate);
的脚本...我将查看是否有使用XPath的方法。但是现在,这应该可以帮助您入门。
如果您的标记中没有注释<!--lang-->
,那么您可以直接使用xpath表达式直接选择这些注释节点的父项:
<!--lang-->
xpath表达式解释了:
$commentsAndInput = $xpath->query('(//input|//option)[@value]|//comment()/..');
foreach ($commentsAndInput as $node)
{
if ($node->tagName !== 'input' && $node->tagName !== 'option')
{//get the textContent of the node
$toTranslate[] = $node->textContent;
}
else
{//get value attribute's value:
$toTranslate[] = $node->getAttributeNode('value')->value;
}
}
:告诉xpath搜索与DOM中任何位置的其他条件匹配的节点//
:文字标记名称:input
在DOM树中的任意位置查找输入标记//input
:只有具有[@value]
属性@value
:或。 |
匹配链接或按钮//a|//input[@type="button"]
:与上述相同:匹配值属性的选项//option[@value]
:对两个表达式进行分组,(//input|//option)
适用于此选择中的所有匹配[@value]
:在dom中的任意位置选择评论//comment()
:选择当前节点的父节点,因此/..
与父节点匹配,包含所选的注释节点。继续使用XPath表达式来获取翻译所需的所有内容