MDN のローカライズにおける課題へのアプローチを考える

# はじめに

こんにちは。debiru です。普段は Web エンジニアとして Web アプリケーションの開発とかをしています。フロントエンド、バックエンド両方ともやっています。専門は HTML です。

そんな私ですが MDN ドキュメントのメンテナンスも2013年頃からやっています。

MDN は最近、2021年頃から GitHub 管理になりました。更に、ページは HTML ファイルで管理されていたのですが、2022年8月頃に Markdown ファイルでの管理に全面移行しました。

これまでの MDN の経緯については過去の記事も参照ください。

https://qiita.com/debiru/items/4c339032bf0f6eb2644b

https://qiita.com/debiru/items/65da1a5deabc3fa74884

Markdown への全面移行がされて、だいぶ管理が楽になったのですが、ローカライズ作業をするにあたってまだ他にいくつかの課題が残っています。その課題を解決すべく私は支援ツールを開発しています。

# MDN のローカライズにおける課題

## 見出し ID のローカライズ問題

前掲した記事「見出し ID を翻訳しているのはなぁぜなぁぜ？」にも書いていますが、こんな問題があります。

英語版：

```
## Specifications
```

展開される HTML：

```
<h2 id="specifications">Specifications</h2>
```


日本語版：

```
## 仕様書
```

展開される HTML：

```
<h2 id="仕様書">仕様書</h2>
```

日本語記事の見出し ID が日本語になってしまっています！

https://www.kanzaki.com/docs/Style/URI.html

を思い出してください。

https://developer.mozilla.org/en-US/docs/Web/HTML/Element/Heading_Elements#specifications こんな URL があったとき、`en-US` の部分を `ja` にするだけで目的の箇所にページ内リンクして欲しいですよね。しかし、現状の設計だとそれが不可能になってしまっているのです。ID が翻訳されてしまっているがために。

## 見出し語のローカライズ問題

ローカライズ版では、見出しはベタ書きで訳語を記述しています。前述の通り `Specifications` に対応する見出しとして `仕様書` と書いています。しかし、これが `仕様` になっていたりするページもあるのです。

そう、辞書ファイルを用意して翻訳するというアプローチを採っていないがために、訳語に表記揺れが生じてしまっているのです。

ローカライゼーションをサポートしているフレームワークの多くは、辞書ファイルを用意してローカライゼーション関数 `__('Specifications')` のように書くと自動で翻訳されるようなアプローチを採っています。

しかし MDN のローカライズ作業においてはそのような仕組みが用意されていません。

## ローカライズ版の品質担保の仕組み化ができていない

簡単に言えば、レビューや CI が緩いということです。

翻訳作業者によって、ローカライズ版の記事の品質はかなり揺れがあります。過去には、日本語版の記事が少ない時代に急いで記事を増やした経緯があるために、誤記やタイポ、誤変換が目立つ記事がありますがそれは仕方ないと思います。

それとは別に、2024年最近の翻訳作業事情を見ても、翻訳ガイドラインがそれほど体系化されておらず、例えば原文中に現れたサンプルコードの中身を翻訳するか否かについては「作業者の気分で翻訳してもしなくてもよい」というルールになっています。私は原文で示されたソースコードは、その文脈を破壊する可能性があり、またローカライズにおける保守コストが増大するため翻訳すべきではないと思うのですが、翻訳してしまっているケースもあるようです。

そのようなルールの中でレビューが行われるので、翻訳すべきではない箇所が翻訳されてしまっているようなケースがあっても見逃されてマージされてしまうことが多々あるように思います。

良く言えば翻訳作業の敷居が低いという見方もできますが、しかしながらローカライズ版ドキュメントの品質を担保するという観点では改善の余地があると感じています。

# 課題を解決するための施策

私が個人的に、翻訳作業とは別に問題提起を行ったり、現状分析を行うために支援ツールをいくつか開発しているという感じなのですが、それについて紹介します。

## MDN コアコミッターへの提案

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

まず、前述した「見出し語のローカライズ問題」について、ローカライゼーション関数の導入を提起しています。

## MDN翻訳ステータス一覧表

https://mdn.lavoscore.org/

これは MDN の翻訳作業を行うコントリビューター向けに、現在翻訳されている記事、翻訳されていない記事がどれだけあるのかを探すためのツールです。

## MDN - BCD一覧表

https://mdn-bcd.lavoscore.org/

これについての説明は過去の記事に任せましょう。

https://qiita.com/debiru/items/9623594d169edd15a0d6

## MDN - Headings 一覧表

https://mdn-headings.lavoscore.org/

今回作成した関連ツールです。

英語版と日本語版の記事を見比べて、見出しの構造（見出しの個数、見出しレベル）が完全に一致する記事について、その見出しの対応を抽出したというものです。

例えば `Specifications` については、`仕様書` と `仕様` のように表記揺れがあることが確認できます。 https://mdn-headings.lavoscore.org/?regex=specifications

表記揺れがある見出し語一覧は次のクエリ https://mdn-headings.lavoscore.org/?not_regex=%5E%5C%5B1%5C%5D で確認できます。

## MDN - Headings 不一致リスト一覧表

https://mdn-headings.lavoscore.org/mismatch/

こちらも今回作成した関連ツールです。

英語版と日本語版の記事を見比べて、見出しの構造（見出しの個数、見出しレベル）が一致しなかった記事を抽出しています。

これらの記事（日本語版）は修正対象であるということです。

見出し構造が一致していない理由としては、翻訳時に見出しレベルを誤って記述した、という他に、ローカライズ版を書いてから原文が更新されたというケースがあります。というか後者が圧倒的に多いでしょう。

ローカライズにおいては、原文がアップデートされたがそれに追従できていないというケースが非常に多いのです。これを解決する仕組みの一つとして、ページを表す Markdown ファイルの先頭に Front matter と呼ばれる YAML の断片を記述してメタデータを表現する手法があるのですが、そこに `sourceCommit` というキーがあり、ローカライズをした際に参照した原文のコミットハッシュ値を記録するというアプローチが採用されています。しかし、これを使って追従の必要が生じている記事のリストアップを行うといった機能は提供されていないため、全く活用できていない状態が続いています。

https://mozilla-japan.github.io/mdn-translation-guide/translation/6_edit-ja-file.html#front-matter

# さいごに

ローカライズは日本語チームだけで MDN の仕組みについて意思決定できる状況にありません。英語版とローカライズ版、という関係性であるため、日本語以外の各国のローカライズ版についても足並みを揃えて検討していく必要があるためです。私が提案したローカライゼーション関数についても日本語版のみの話ではないので全言語のローカライズ版メンテナおよび英語版のメンテナとのコミュニケーションが必要になります。

品質担保の話については日本語チームだけで話し合えるかもしれませんが、現状のメンバーのモチベーションを鑑みると難しいところがあります。あまりこういう改善に積極的なメンバーが少ないようなのです。最近（2024年現在）アクティブな翻訳メンバーは5名ほどですが、こういう話をしているのは私くらいなものです。

もしかしたら私のモチベーションが続かず断念するかもしれません（問題提起しても誰も反応してくれないんだもん）。MDN を良くしていきたいという気持ちをお持ちの方がいたら、ぜひ翻訳活動へのご協力をお願いします。翻訳作業以外にも、こういう提案や意見交換をするだけでも構いません。

参加してみようかなと思われた方は https://mozilla-japan.github.io/mdn-translation-guide/meetup/community-slack.html より Mozilla 日本語コミュニティの Slack へご参加ください。

MDN 日本語翻訳コミュニティの近況報告でした。