TL;博士
我想了解是否有可能(并且,如果支持得如何)在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片段(不确定是否真的被允许),这在所有页面(例如头文件,菜单等等)上都是有用的;在上面的示例中,整个< ul>可以是这样的分段)
现在,我的理解是,这在理论上是可能的XHTML,但我想知道这是否也可以在HTML中完成,如果浏览器(和爬虫)应该如何.
解决方法
在理论上,这是可能的. HTML 4.x(和以前的几个版本)是SGML应用程序,因此您可以使用新实体扩展DTD.
实际上,每个主流浏览器都实现了一个HTML特定的标签,而不是一个真正的SGML解析器,所以你不能这样做.这就是为什么HTML 4有一个list of SGML features to avoid,为什么HTML 5不是一个SGML应用程序.