本地化html文档(后视)

时间:2014-08-29 11:05:02

标签: php html localization

我正在用PHP构建一个Web应用程序,我已经决定(在整个过程中)提供不同语言的语言。

我的问题是:

我不想嘲笑模板文件中的所有HTMl代码来查找"单词"我需要用动态生成的lang变量替换。

是否有工具可以突出显示"字"在HTML中使用,使我的任务更容易。

这样当我向下滚动HTML文档时,我可以很容易地看到语言"单词"是

通常,当我创建应用时,我会将 注释添加为代码,如下所示

 <label><!--lang-->Full Name</lable>
 <input type="submit" value="<!--lang-->Save Changes" name="submit">

所以,当我完成后,我可以通过并轻松识别我需要添加动态变量的位....不幸的是,我几乎通过应用程序(丢失的HTML模板文件),我还没有完成如此。

我使用模板引擎(tinybutstrong)所以我的HTML非常干净(即没有PHP)

1 个答案:

答案 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表达式来获取翻译所需的所有内容

Proof of concept