本地化 html 文档(事后看来)

2024-04-30

我正在用 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(使用前将#替换为@)

本地化 html 文档(事后看来) 的相关文章

  • 如何在 PHP 中运行 shell 脚本?

    我正在尝试使用 PHP 触发 shell 脚本的运行 本质上 当用户在我们用 PHP 编写的网站上完成一个操作时 我们希望触发一个 shell 脚本 该脚本本身调用一个 Java 文件 提前致谢 See shell exec http ph
  • 用PHP动态生成二维码[关闭]

    Closed 此问题正在寻求书籍 工具 软件库等的推荐 不满足堆栈溢出指南 help closed questions 目前不接受答案 我正在尝试在我的网站上生成二维码 他们所要做的就是在其中包含一个 URL 我网站上的变量将提供该 URL
  • 同一路由组的多个前缀

    我正在为一所学校编写一个相当简单的网站 该网站有新闻 文章 视频剪辑 等 它的工作方式是在主页中我们向访问者展示一些课程 例如 gt math gt geography gt chemistry 用户在其中选择 1 网站内容会根据用户的选择
  • 让用户渲染自己的 SVG 文件的安全隐患

    我计划让网站用户上传他们自己的 SVG 文档并使用inkscape or svg2pdf 用户要么未经身份验证 要么经历一个简单的注册过程 所以我预计会有一些黑客尝试 我可以采取哪些过滤措施来最大程度地减少安全威胁 Inkscape 似乎并
  • 无法显示由 Fine-uploader 上传到 Amazon s3 的图像

    我现在尝试设置fineuploader s3以显示在aws服务器上成功上传的文件的图像 如示例页面上所做的那样 http fineuploader com s3 demo http fineuploader com s3 demo 我 仍然
  • iOS Safari 通过单击按钮触发扫描信用卡

    您好 我目前正在创建一个测试应用程序 当用户单击文本字段名称或卡号时 扫描信用卡功能对我有用 我的问题是 我希望当用户单击 button1 时发生同样的情况 这应该打开相机来扫描卡并填充现有的文本字段 即名称 卡号和到期日期 额外的好处是
  • 如何在 WordPress/WooCommerce 3+ 中向评论表单添加自定义字段

    我正在尝试在产品评论中添加 电话 字段 WooCommerce 3 针对未注册用户 来宾 电话号码只能由管理员在管理面板中看到 电话字段需要填写 Required 我尝试了这段代码 但这不起作用 function true phone nu
  • 将 div 设置为 post 方法结果页面的目标容器

    我有一个 div 标签 也分为两个 div 这是代码 div div div div
  • 如何淡化循环背景图像?

    这里的菜鸟 我试图让我的静态背景变成一个轮播 我当前的html看起来像这样 div class pageContent div 和我的CSS body background url http placehold it 1600x1200 n
  • 无法在 PHPUnit 中使用数据提供程序运行单个测试

    使用命令行运行测试时遇到问题 如果我像这样运行 phpunit phpunit no configuration filter testAdd DataTest DataProviderTest php 效果很好 但是我们使用正则表达式来准
  • 如何通过 HTML 按钮播放声音

    我目前通过网站播放音乐的方法是通过 HTML 音频标签 不过我希望能够通过 HTML 按钮来播放它 该按钮应该能够在播放和停止之间切换音乐 我在 JSFiddle 创建了一个示例 但不知道如何实现它 有人可以告诉我如何使用我的 JSFidd
  • phpstorm xdebug 与 symfony2 项目

    我正在尝试使用 xdebug 和 phpstorm 调试 symfony2 应用程序 我的本地开发环境是Ubuntu 14 04 with apache2 Xdebug版本是2 2 7 我在另一个 php 不是 symfony2 项目上使用
  • 如何在 WordPress HTML 中包含“onclick”对象

    我正在尝试将 onclick 对象添加到触发事件的单站点 即而不是多站点 WordPress 中的页面 代码是 a href Send a voice message a 当尝试保存代码时 WordPress 会删除 onclick 对象
  • PHP:如何检查总数。 URL 中的参数?

    我正在使用 REQUEST 检索参数 有没有办法找到总数 URL 中的参数 而不是检索每个参数然后进行计数 这将为您提供总数 分隔的 URL 查询参数 count explode SERVER QUERY STRING 如果您只想要唯一的参
  • 如何清除WebGL中的矩形区域?

    WebGL 有一个clear清除整个表面的方法 清除表面的特定矩形的最佳方法是什么 例如 我想将一个从 50 50 开始的 100x100 像素框设置为全零 ARGB 0 0 0 0 我现在能想到的就是用一个写入零的片段着色器绘制一个四边形
  • 如何滚动到div内的元素?

    我有一个滚动的div我想在点击它时发生一个事件 它会强制执行此操作div滚动以查看内部元素 我写的JavasCript是这样的 document getElementById chr scrollIntoView true 但这会在滚动时滚
  • 通过复选框选择多行时出错错误未定义索引:复选框

    我想从中选择多行checkbox并想通过单击按钮立即更新它们 我尝试了多种方法 但不起作用 你能帮忙吗 它显示错误为Undefined index checkbox td td
  • 如何使 jQuery 向上动画

    我有一些 jquery 运行得相当好 但是当我将鼠标悬停在有问题的元素上时 底部向下扩展 这并不意外 但不是所需的效果 我希望元素的底部保持静止 而元素的顶部向上扩展 如果您想查看我目前拥有的内容 您可以导航至http demo ivann
  • 如何在 PHP >= 5.3 严格模式下向对象添加属性而不产生错误

    这必须很简单 但我似乎找不到答案 我有一个通用的 stdClass 对象 foo没有属性 我想添加一个新属性 bar尚未定义 如果我这样做 foo new StdClass foo gt bar 1234 严格模式下的 PHP 会抱怨 将属
  • MySQL 正在将我的时间戳值转换为 0000-00-00

    我是 PHP 新手 目前仍在学习中 我认为我的注册表有问题 username password email全部成功插入MySQL registered and last seen不要 我以为我正在使用getTimestamp 错了 但它呼应

随机推荐

  • 奇怪的 0x0D 被添加到我的二进制文件中

    我有这个奇怪的问题 我将 16 个字符写入一个二进制文件 然后写入 3 个整数 但是当我使用某些二进制文件查看器打开文件时 我看到添加了一个额外的字节 等于0x0D 这是我的代码 for i 0 i lt 16 i if i lt strl
  • Hive ParseException - 无法识别“结束”“字符串”附近的输入

    尝试从现有 DynamoDB 表创建 Hive 表时出现以下错误 NoViableAltException 88 at org apache hadoop hive ql parse HiveParser IdentifiersParser
  • 从 PNG 图像中提取元数据

    我正在尝试从 PNG 图像格式中提取元数据 我正在使用这个库 http code google com p metadata extractor http code google com p metadata extractor 尽管它声称
  • 当函数名称作为字符串传递时调用嵌套函数

    我试图通过将函数名称作为字符串传递然后调用它来访问嵌套函数 例如 参见this https stackoverflow com questions 359788 javascript function name as a string po
  • NavigationUI 无法与底部导航视图实现一起正常工作

    所以我有一个场景 其中我有 5 个带有底部导航的片段 1 主页 2 收件箱 3 搜索 4 通知 5 个人资料 因此 我有另一个名为 BarcodeDetail 的片段 我从 Home Fragment 导航到该片段 首页 gt 条码详情 现
  • bat 文件修改 web.config 设置

    我在 Visual Studio 2013 中创建了一个 Web 应用程序 我的 Web Config 文件中有此 appSetting
  • 系统 verilog 中没有类型的输入

    我在一个系统 verilog 代码的输入和输出的示例中遇到过module没有说明它们的类型 例如logic wire module mat to stream input 2 0 2 0 2 0 a b input newdata inpu
  • 从 GIF 提取帧到 PNG 时丢失数据?

    当我尝试使用 fraxel 的答案时 http stackoverflow com questions 10269099 pil convert gif frames to jpg 在图像上http 24 media tumblr com
  • pip 相当于 `npm install package --save-dev` 的东西是什么?

    在nodejs中 我可以做npm install package save dev将安装的包保存到包中 如何在 Python 包管理器中实现同样的效果pip 我想将包名称及其版本保存到 例如 requirements pip就在使用类似的东
  • 等待文件关闭的良好而干净的方法[重复]

    这个问题在这里已经有答案了 可能的重复 等待文件在 NET 中解锁 https stackoverflow com questions 50744 wait until file is unlocked in net 我有一个打开的文件 例
  • 无法使用 vcpkg 清单引用 poco[sqlite3]

    我正在使用 vcpkg 的清单功能来引用我的项目所具有的依赖项 我想使用 Poco 的 SQLite3 包装器 但我不知道如何在 vcpkg json 文件中引用它 当我使用poco sqlite3 vcpkg 给我一个错误 指出我的清单文
  • HTML5 气泡消息

    输入字段有一个新的 HTML5 属性required提交表单且字段为空时会弹出气泡消息 有什么办法可以弹出带有不同文本的相同气泡吗 我想将它用于不同的验证 不仅仅是它是否为空 以下是 Chrome 中此气泡 弹出窗口 的屏幕截图 HTML5
  • 如何在记事本++中重复该行?

    如何在记事本 中重复该行 例如我有以下输入 a 01 a 02 a 03 a 04 我希望它成为 a 01 a 01 a 02 a 02 a 03 a 03 a 04 a 04 所以每一行都应该显示twice 打开搜索对话框并写入 Find
  • 即使未指定 @Load,Objectify 也会在 Ref 后面加载对象

    我有一个引用用户对象的帐户对象 Cache Entity public final class Account Id Long id Index private Ref
  • 在 Google Chrome/Chromium 和 Safari 中拖放文件上传?

    Firefox 3 6 中可以实现拖放文件上传 给出类似的东西 Firefox 3 6 中的本机拖放文件上传 https stackoverflow com questions 2121018 native drag drop file u
  • 如何在代码中设置iPhone标签栏图标?

    我对几个不同的视图使用相同的 ViewController 当为特定视图实例化 ViewController 时 是否有一种简单的方法可以通过代码指定选项卡栏图标 yourViewController tabBarItem UITabBar
  • 如何使用Java泛型来避免强制转换?

    对于查询 提出于link https stackoverflow com questions 26192111 how to compare objects with different types 建议使用 Java 泛型以避免难以评估项
  • Angular 2 根据角色/声明显示/隐藏组件/零件

    我试图了解有关角度应用程序安全方面的最佳实践 可以说我有一个包含模型详细信息屏幕的视图 根据给定用户的角色 权限 例如 从 jwt 声明中获得 我希望能够做的是 根据用户是否具有特定角色的事实启用 禁用某些输入字段 因此 实际上有些角色可以
  • 如何在 Swift 中使用 UILocalNotification

    我正在尝试弄清楚如何快速设置 UILocalNotification 但我运气不佳 我正在尝试这个 var notification UILocalNotification notification timeZone NSTimeZone
  • 本地化 html 文档(事后看来)

    我正在用 PHP 构建一个 Web 应用程序 我已经决定 在整个过程中 以不同的语言提供该应用程序 我的问题是这样的 我不想费力地浏览模板文件中的所有 HTMl 代码来查找需要用动态生成的 lang 变量替换的 单词 有没有一个工具可以突出