我正在用 PHP 构建一个 Web 应用程序,我已经决定(在整个过程中)以不同的语言提供该应用程序。
我的问题是这样的:
我不想费力地浏览模板文件中的所有 HTMl 代码来查找需要用动态生成的 lang 变量替换的“单词”。
有没有一个工具可以突出显示 HTML 中使用的“单词”,以使我的任务更轻松。
这样当我向下滚动 HTML 文档时,我可以轻松地看到语言“单词”的位置。
通常,当我创建应用程序时,我会添加我编码时的评论,如下所示
<label><!--lang-->Full Name</lable>
<input type="submit" value="<!--lang-->Save Changes" name="submit">
这样当我完成后,我可以运行并轻松识别需要添加动态变量的位......不幸的是我几乎完成了应用程序(丢失了 HTML 模板文件),但我还没有这样做。
我使用模板引擎(tinybutstrong),所以我的 HTML 非常干净(即其中没有 PHP)
您甚至可以相对轻松地使用DOMDocument
解析标记,DOMXPath
查询所有评论节点,然后访问每个节点的父节点,提取nodeValue
并将这些值列出为“要翻译的字符串”:
$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);
请注意,这无法处理标记属性中使用的注释。使用这个简单的脚本,您将能够提取需要翻译的字符串“常规的”标记。之后,您可以编写一个脚本来查找<!--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 表达式解释:
-
//
:告诉 xpath 在 DOM 中的任何位置搜索与其余条件匹配的节点
-
input
: 文字标签名称://input
在 DOM 树中的任何位置查找输入标签
-
[@value]
:所提到的标签仅在具有以下内容时才匹配@value
属性
-
|
: OR. //a|//input[@type="button"]
匹配链接OR buttons
-
//option[@value]
:同上:匹配具有value属性的选项
-
(//input|//option)
:对两个表达式进行分组,[@value]
适用于该选择中的所有比赛
-
//comment()
: 选择 dom 中任意位置的注释
-
/..
:选择当前节点的父节点,因此//comment()/..
与包含所选注释节点的父节点匹配。
继续使用 XPath 表达式来获取需要翻译的所有内容
概念证明 https://eval.in/185410
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)