HTML (r6971)で追加されたtranslate属性

translateなるグローバル属性がHTMLに追加された。

技術文書Google TranslateLivedoor翻訳に通すと、コードブロックの中身とかが翻訳されることがある。(でも何年か前よりだいぶまともになってる気がする…)。これをなんとかするのがtranslate属性。

translate=yesもしくはtranslate=noを指定する。

<pre translate=no><code>
(function () {
    var b = document.body;
    if (!!b.oncontextmenu) b.oncontextmenu = null;
    if (!!b.onselectstart) b.onselectstart = null;
}());
</code></pre>

こうするとそれを理解してくれるUAは「(関数 () ...」なんて翻訳しないという仕組み。

もともとのバグは2011年4月に立てられたものだったんだけど、それよりずっと昔に提案されてたなあとログを漁ったらあった。2008年8月に、当時MicrosoftのIE Teamにいた(そして現Google)のChris Wilsonがほとんど同じ物を提案している。

さて、野暮ったいのが、HTMLの属性っていうこと。ユースケースとして多いのがコードとかなんだろうけれど、CSSのように特定の要素をセレクタとしてそこに適用させたほうが、つど<pre translate=no>とするよりもずっと楽。というかそうじゃないとやってらんない。

というかこれはCSSだろうと思った人、翻訳プロキシがCSSを解すかってことを考えてほしい。もにゃりともするけれど、HTML文書内にないと厳しい。

属性のもとになったのはITSのtranslate属性なんだけど、ITSの場合はtranslateRuleなる要素でそのルールを指定することもできる仕組みになっている。ただ、それだけのためにHTMLに要素を増やしてもね…。metaでどうこうするのもしんどいし、うーん。