在 HTML 文档中使用自定义实体
tl;dr
我想了解是否可以(以及,如果支持得如何)在 HTML 文档中使用自定义实体来实现本地化目的。
我设想做这样的事情:
<!DOCTYPE html "/locales/en-us.ent">
<html>
<head>
<title>&contactus.title;</title>
</head>
<body>
<p>&contactus.youcanreach;<br>123, Example Road<br>12345 Example City</p>
<ul id="menu">
<li>&menu.home;</li>
<li>&menu.products;</li>
<li>&menu.contactus;</li>
</ul>
</body>
</html>
所有实体都将存储在一个文件中(每种语言一个,上例中的 en-us.ent),该文件包含在文档的顶部,例如
<!ENTITY menu.home "Home">
<!ENTITY menu.products "Products">
<!ENTITY menu.contactus "Contact us">
...
最终这甚至可能是扩展为 HTML 片段(不确定这是否真的允许),可能对所有页面(例如标题、菜单等)有用;在上面的示例中,整个
可以是这样的片段)现在,我的理解理论上这在 XHTML 中是可能的,但我想知道这是否也可以在 HTML 中完成,以及万一浏览器(和爬虫)能够处理得如何。
tl;dr
I'd like to understand if it is possible (and, in case, how well supported) to use custom entities in HTML documents for localization purposes.
What I envision is doing something like this:
<!DOCTYPE html "/locales/en-us.ent">
<html>
<head>
<title>&contactus.title;</title>
</head>
<body>
<p>&contactus.youcanreach;<br>123, Example Road<br>12345 Example City</p>
<ul id="menu">
<li>&menu.home;</li>
<li>&menu.products;</li>
<li>&menu.contactus;</li>
</ul>
</body>
</html>
and all entities would be stored in a file (one for each language, en-us.ent in the example above) that gets included at the top of the document, e.g.
<!ENTITY menu.home "Home">
<!ENTITY menu.products "Products">
<!ENTITY menu.contactus "Contact us">
...
Eventually this could even be exapnded to HTML fragments (not sure if this is really allowed) that may be useful on all pages (such as headers, menus, etc.; in the example above, the whole <ul>
could be such a fragment)
Now, my understanding is that this is theoretically possible in XHTML, but I was wondering if this can be done also in HTML and, in case, how well browsers (and crawlers) would cope.
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(1)
理论上是有可能的。 HTML 4.x(以及几个以前的版本)是 SGML 应用程序,因此您可以使用新实体扩展 DTD。
实际上,每个主流浏览器都实现了 HTML 特定标签汤吸收器,而不是真正的 SGML 解析器,因此您不能这样做。这就是为什么 HTML 4 有一个要避免的 SGML 功能列表 以及为什么 HTML 5 不是 SGML 应用程序。
In theory, it is possible. HTML 4.x (and several previous versions) are SGML applications so you can extend the DTD with new entities.
In practise, every mainstream browser implements an HTML specific tag soup slurper instead of a real SGML parser so you can't do this. This is why HTML 4 has a list of SGML features to avoid and why HTML 5 isn't an SGML application.