本地化 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 文档(事后看来) 的相关文章

  • 使用 highcharts 时,为什么 Bootstrap 选项卡显示宽度不正确的选项卡窗格 div?

    因此 我正在使用 Twitter 的 Bootstrap 创建一个包含选项卡式内容的页面 但我的起始活动 div 的内容始终与其他选项卡的内容不同 例如 我在不同的选项卡中使用 highcharts js 放入图表 但活动选项卡始终显示正确
  • 在哪里可以学习网络编程从入门到精通? [关闭]

    Closed 这个问题正在寻求书籍 工具 软件库等的推荐 不满足堆栈溢出指南 help closed questions 目前不接受答案 我尝试做教程 但它是无组织且无结构的 我在哪里可以学习 PHP 从初学者到大师 我正在寻找类似的网站w
  • 在 React 中切换 css 类

    如何使用布尔值切换 React 中元素上 css 类的存在 在 Angular 2 中我可以这样做 class red isRed 如何在 React 中做熟悉的事情 在 React 中 元素使用如下语法获取它们的类 div div 但请注
  • jQuery:离线后 POST 出错(iOS 和 Chrome)

    我构建了一个具有离线功能的 HTML5 Web 应用程序 使用 AppCache 程序流程为 Online 在网络上时 应用程序预加载一些基本信息 工作 Offline 用户拿着装有应用程序的平板电脑offline 然后在应用程序上执行他们
  • 如何消除 HTML 内容周围的边距?

    以下 HTML 显示正常 div style width 100px height 100px background red div Hello div div
  • 如何将表中不存在但原始SQL中存在的实体字段设置为别名?

    假设我们有一个这样的查询 SELECT CUSTOM EXPRESSION as virtualfield FROM users 用户的实体本身具有 虚拟字段 但映射注释没有 因为表没有该字段 假设它作为原始 SQL 执行 我们如何使用上面
  • html 选择列表 - 通过传入变量获取文本值?

    我有一个显示列表语言的选择列表
  • Laravel Vue 组件只能传递数字?

    在我的 UserMenu vue 中我写道 export default props nameVal data return 并在blade php中
  • 是否可以用 PHP 编写电子邮件解析器? [关闭]

    就目前情况而言 这个问题不太适合我们的问答形式 我们希望答案得到事实 参考资料或专业知识的支持 但这个问题可能会引发辩论 争论 民意调查或扩展讨论 如果您觉得这个问题可以改进并可能重新开放 访问帮助中心 help reopen questi
  • 在 PHP 字符串中格式化 MySQL 代码

    是否有任何程序 IDE 可以在 PHP 字符串中格式化 MySQL 代码 例如 我使用 PHPStorm IDE 但它无法做到这一点 它对 PHP 和 MYSQL 执行此操作 但不适用于 php 字符串内的 MYSQL 我已准备好使用新的
  • 使用 css 简单地将对象居中,无需修改

    我想使用 CSS 将对象居中 而不需要任何技巧 这可能吗 如何实现 我已经尝试过了 但是我的 p 标签消失了 centered position fixed top 50 left 50 有多种方法可以使元素居中 但这取决于您的元素是什么以
  • 通过互联网IP地址从一台计算机访问xampp到另一台计算机

    我试图从另一台计算机访问我的 xampp 它显示为禁止错误 然后我在 google 上搜索答案 因为他们告诉在 apache 文件夹中的 httpd conf 文件中更改一些设置 如下所示 Order Deny Allow Deny fro
  • 带倒计时的php循环

    假设我从 400 开始计数器 我将如何执行一个向后运行直到 0 的 foreach 循环 伪代码 i 400 foreach SOMETHING do stuff i for i 400 i gt 0 i do stuff 其他方法 i 4
  • 从 Laravel 4 输入生成新数组

    我使用 Input all 从动态生成的表单中获取一些输入 我使用 jQuery 来允许用户添加字段 字段名称为 first names last names 和 emails input 变量现在看起来像这样 array size 4 t
  • 网站的主体和元素固定在 980px 宽度上,不会缩小

    我试图在 Rails 应用程序顶部启动前端 仅 HTML CSS 页面 但在使用 320px 视口时遇到问题 有些元素不会按比例缩小 我不明白为什么 我已经完成了检查元素 为各种元素提供了max width 100 and or width
  • PHP 表单 - 带验证蜜罐

    我有以下内容 效果很好 但对垃圾邮件机器人开放 我想放入蜜罐 而不是验证码 下面的代码适用于验证姓名 电子邮件 消息 但我无法让它与蜜罐一起工作 任何人都可以查看 蜜罐 代码并告诉我如何修复它吗 我希望表单给出 success2 不允许垃圾
  • 在本地 SDK 服务器上工作时,实时 Google App Engine 上出现 404

    我已经在GAE标准环境上部署了几个PHP应用程序 一切正常 现在我正在部署一个新应用程序 该应用程序位于由gcloudSDK按预期工作 终端命令 dev appserver py log level warning app yaml 问题是
  • HTML 锚点,禁用样式

    我有一些 html 锚链接代码 与文档的其余部分不同 我希望它看起来不是链接 有没有一种简单的方法可以禁用由于将文本包装在锚标记中而引起的样式更改 而不必强行使其相同 即 如果我更改正文字体样式 我不必也更改其他一些 link东西 将颜色设
  • 如何从日期中查找该月的最后一天?

    如何在 PHP 中获取该月的最后一天 Given a date 2009 11 23 我要2009 11 30 并给出 a date 2009 12 23 我要2009年12月31日 t返回给定日期所在月份的天数 请参阅的文档date ht
  • CSS溢出文本显示在几行中,没有断字

    我有一些长文本显示在 div 中 该 div 具有固定的宽度和高度 我希望文本显示在几行上 作为 div 高度 并且句子单词不会中断 一行中的单词前缀和下一行中的继续 此外 我想在末尾添加省略号最后一句话 CSS white space n

随机推荐

  • 奇怪的 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 变量替换的 单词 有没有一个工具可以突出