Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/260.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/mercurial/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 本地化html文档(事后发现)_Php_Html_Localization - Fatal编程技术网

Php 本地化html文档(事后发现)

Php 本地化html文档(事后发现),php,html,localization,Php,Html,Localization,我正在用PHP构建一个web应用程序,我已经决定(在整个过程中)使用不同的语言 我的问题是: 我不想费力地浏览模板文件中的所有HTMl代码来寻找需要用动态生成的lang变量替换的“单词” 是否有一个工具可以突出显示HTML中使用的“单词”,以使我的任务更简单 因此,当我向下滚动HTML文档时,我可以很容易地看到语言“单词”在哪里 通常在创建应用程序时,我会在编写代码时添加注释,如下所示 <label><!--lang-->Full Name</lable>

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

我的问题是:

我不想费力地浏览模板文件中的所有HTMl代码来寻找需要用动态生成的lang变量替换的“单词”

是否有一个工具可以突出显示HTML中使用的“单词”,以使我的任务更简单

因此,当我向下滚动HTML文档时,我可以很容易地看到语言“单词”在哪里

通常在创建应用程序时,我会在编写代码时添加注释,如下所示

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

您可以相对轻松地做到这一点,甚至可以使用
DOMDocument
解析标记,
DOMXPath
查询所有注释节点,然后访问每个节点的父节点,提取
nodeValue
并将这些值列为“要翻译的字符串”:

请注意,这无法处理标记属性中使用的注释。使用这个简单的脚本,您将能够提取那些需要在“常规”标记中翻译的字符串。之后,您可以编写一个脚本,在标记属性中查找
。。。如果没有一种方法也可以使用XPath来实现这一点,我会看一看。不过现在,这应该可以帮助您开始

如果标记中没有注释,而不是
,则可以使用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
    属性时才匹配
  • |
    :或
    //a |//输入[@type=“button”]
    匹配链接或按钮
  • //选项[@value]
    :同上:匹配具有值属性的选项
  • (//input |//option)
    :对两个表达式进行分组,
    [@value]
    将应用于此选择中的所有匹配项
  • //comment()
    :在dom中的任意位置选择注释
  • /…
    :选择当前节点的父节点,因此
    //comment()/…
    匹配包含所选注释节点的父节点
继续使用XPath表达式以获取需要翻译的所有内容


我不确定有没有办法做到这一点!你可以使用查找和replace@littleswany:为了胜利!!可以获取注释节点,但不确定属性值中的注释是否为有效标记,though@EliasVanOotegem,值属性中的注释是临时的。我只把这些用作标记。当我进行实际翻译时,它们会被删除。@littleswany我通常会使用文本编辑器(如editplus)进行查找和替换等。但在这种情况下,我的html中没有注释……因此我正在寻找一些可以突出显示html中“文本”字符串的工具(可以这么说)@fredmarks:在这种情况下:
$domDocument->getElementsByTagName('*')
+foreach覆盖所有
DomeElement
实例+
$node->textContent
将为您提供所需内容。如果其中一些节点是输入标记,只需使用
$node->tagName
并切换到
$node->getAttributeNode('value')->value
即可获得这些标记的内容,就像我在回答中显示的那样
$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;
    }
}