ここがヘンだよ MDN：見出し ID を翻訳しているのはなぁぜなぁぜ？

# はじめに

この記事は [2023 年の MDN 翻訳 Advent Calendar](https://qiita.com/advent-calendar/2023/mdn-translation-community-japan) 向けに作成したものです。

こんにちは。debiru です。[ハンロンの剃刀](https://ja.wikipedia.org/wiki/%E3%83%8F%E3%83%B3%E3%83%AD%E3%83%B3%E3%81%AE%E5%89%83%E5%88%80)って知ってますか？

今日は、MDN ドキュメントを整備する上で不合理的に思える事柄について語っていきます。

# HTML ファイル時代の MDN

2020 年 12 月 14 日より、MDN は GitHub ベースの新しい Yari プラットフォームで運用しています。当初、各ページを表すドキュメントファイルは `index.html` ファイルとして管理されていました。

これらは、英語版リポジトリ `content` では 2021 年 5 月頃に、ローカライズ版リポジトリ `translated-content` では 2022 年 8 月頃に、全てのファイルを Markdown 形式に変更するプロジェクトにより `index.md` への変換が行われました。

`index.html` ファイル時代は、次のようにドキュメントが書かれていました。

- https://github.com/mdn/translated-content/blob/2effac637482d3d49d88e0765d2ebb2922f801d6/files/ja/web/html/element/heading_elements/index.md?plain=1#L53

```html
<h2 id="Attributes" name="Attributes">属性</h2>

<p>見出し要素には<a href="/ja/docs/Web/HTML/Global_attributes">グローバル属性</a>のみがあります。</p>

<h2 id="Usage_notes" name="Usage_notes">使用上の注意</h2>
```

HTML で書かれていますが、そのお陰(?)で、`id` 属性値を自由に設定することができています。もともとはこのように、見出し文言をローカライズ化しても、見出し ID は英語のままでした。

# Markdown 時代の MDN

それが現在では次のように記述されています。

```md
## 属性

見出し要素には[グローバル属性](/ja/docs/Web/HTML/Global_attributes)のみがあります。

## 使用上の注意
```

Markdown 構文を使うのは結構ですが、これでは次のような HTML が出力されてしまいます。

```
<h2 id="属性">属性</h2>

<p>見出し要素には<a href="/ja/docs/Web/HTML/Global_attributes">グローバル属性</a>のみがあります。</p>

<h2 id="使用上の注意">使用上の注意</h2>
```

見出し ID がローカライズされてしまっています。これは我々の望む結果なのでしょうか。

# かつて MDN は URL までローカライズしていた

- https://www.mitsue.co.jp/knowledge/blog/frontend/202102/26_0905.html

> 1つはURLに関するものです。これまでのKumaでは、英語版の記事を日本語化する際に、URLの一部さえも翻訳できる状況にありました。例えば「Publishing your website」というタイトルの記事の英語版と日本語版のURLを比較すると、
>
> - https://developer.mozilla.org/en-US/docs/Learn/Getting_started_with_the_web/Publishing_your_website
> - https://developer.mozilla.org/ja/docs/Learn/Getting_started_with_the_web/ウェブサイトを公開する
>
> このようにURLの末尾が日本語化されていることがわかると思います。しかしこれはリソースの管理という側面からは一貫性を保つことが難しくなります。具体的にはある英語版に対して日本語版が複数存在する、また英語版が削除されてしまったにもかかわらず、日本語版が存在する（言い換えると孤立した日本語版がある）ことが可能性としてあるわけです。（Mozilla Hacksの記事では英語版とフランス語版の比較を行っています。）こうしたことを解消すべく、URLの正規化を行うとのことです。

URL のローカライズにより不都合が生じていることは MDN も重々理解しているはずです。ではなぜ見出し ID をローカライズしてしまっているのでしょうか。歴史に何も学んでいないのでしょうか。

# 見出し ID に関するローカライズガイドラインの記述

- https://github.com/mdn/translated-content/blob/0caa9937af24d77b83ea51de17d14673fd729f8e/docs/README.md#translating-heading-ids

> ## Translating heading IDs
>
> Our article headings are nearly always given IDs, so that we can automatically generate in-article navigation, identify code blocks to create live samples, and other reasons too. When translating headings, you don't need to translate the ID too; the rest of the slug is not translated, so this keeps it all consistent.
>
> For example:
>
> `<h2 id="tutorials">Tutorials</h2>`
>
> in the fr locale would be
> 
> `<h2 id="tutorials">Tutoriels</h2>`
>
> We generally advise that you write all IDs in lower-case. The platform automatically converts them at render time anyway, but keeping them lower-case means that there is less chance of a manually-created anchor link not working because of the conversion.

拙訳：

- 我々の記事の見出しにはほぼ常に見出しが与えられています。記事内のナビゲーションを自動的に生成したり、ライブサンプルを作成するためのコードブロックを特定したり、その他の理由もあります。見出しを翻訳するとき、ID も翻訳する必要はありません。スラッグの残りの部分（つまり URL）は翻訳されないので、これですべての一貫性が保たれます。
- 通常、ID はすべて小文字で書くことをお勧めします。プラットフォームはレンダリング時に自動的に変換しますが、小文字にしておけば、手動で作成したアンカーリンクが変換のために機能しなくなる可能性が低くなります。

このように記述されていました。しかしこれは HTML ファイル時代向けのガイドラインでした。Markdown に統一された現在ではこのガイドラインは改定され、上記の記述は削除されてしまっています。

- https://github.com/mdn/translated-content/blob/main/docs/README.md

このガイドラインにかつて書かれていた「見出しを翻訳するとき、ID も翻訳する必要はありません」という言明は現在有効なのでしょうか？

その謎を解明すべく、我々はアマゾンの奥地へと向かった。

## MDN Community への質問

https://github.com/orgs/mdn/discussions/387

しかし、明快な回答が得られていません。ガイドラインでは「見出しを翻訳するとき、ID も翻訳する必要はありません」と書かれていて、その方針は今も変わらない的なコメントがされています。

しかし、ではなぜ現状のローカライズ版ドキュメント（日本語版に限らない）では Markdown 記法が使われていて、見出し ID までローカライズされてしまっているのか。見出し ID までローカライズしてしまう方針は正しいのか、という質問に対して回答が得られていません。

# 日本語コミュニティへの質問

https://github.com/mozilla-japan/translation/discussions/698#discussioncomment-5957502

上記 Discussion で、見出し ID が翻訳することに決まった経緯について https://github.com/mozilla-japan/translation/issues/586 を教えてもらいました。ただこれは経緯というより決定事項だけ書かれていて、なぜそのように決まったのかについてが分かりませんでした。

ということで、改めて、日本語コミュニティで Discussion を立ててみました。

https://github.com/mozilla-japan/translation/discussions/735

# 直近の MDN 日本語版翻訳月例ミートアップ

https://mozilla.doorkeeper.jp/events/166059

「【オンライン開催】2023年12月23日(土)【第64回】みんなで MDN を翻訳しよう！翻訳コミュニティ定例ミートアップ！」は明日開催です。

年内最後の月例ミートアップで、見出し ID に関して議論したいと思っております。

# さいごに

見出し ID を翻訳していることによって、色々不都合が生じている気がしています。英語版とローカライズ版の本文セクションのマッピングができなくなってしまっていることは大きな問題の一つです。

せっかくメタデータ `l10n.sourceCommit` を使って英語版の追従をしようと頑張っているのに、本文セクションのマッピングを不可能にしてしまうというのは理解できません。私はこの問題について早急に解決策を探りたいと考えています。しかしながら、MDN Community の方もなかなか他の方からコメントが貰えず寂しいです。

というわけで、[2023 年の MDN 翻訳 Advent Calendar](https://qiita.com/advent-calendar/2023/mdn-translation-community-japan) の記事を間に合わせるために書いた今回のお話は以上です。

おわり。