あらゆる言語のために構築する

Natalie Tay
Mar 31, 2026 • 8 min read

こんにちは :waving_hand:

歴史好きの方には、ぜひ読んでいただきたいブログ記事です。Discourseにおける多言語サポートが13年間でどのように進化してきたか、舞台裏の話も交えながらご紹介します。

前回の記事では、すべてのコミュニティがどんな言語でも人々を歓迎できるべきだと考える理由についてお話しました。今回は、私たちが実際に何をしてきたか、そして本気で取り組むまでにどれほどの時間がかかったかについてです。

2012年

創設目標
(i18nなし)

2014年

翻訳プラットフォーム
20ロケール

2015年

Translatorプラグイン
作成

2020年

Crowdin
74言語

2023年

LLMがAPIを
置き換える

2024年

Redditの翻訳による
DAU 4倍

2025年

全ユーザーに提供
コスト:わずか数セント

第1幕:「国際化(i18n)に十分な愛を」(2012〜2016年)

2012年6月、3人が集まりDiscourseの創設目標を書き上げました。11個の箇条書きには、オープンソース、簡単なデプロイ、フォーラムUXの再考、モバイルファースト、リアルタイム更新、タッチサポート、データポータビリティが盛り込まれていました。i18nはリストになく、彼らが構築しようとしていたインターネットは英語で話されていました。

私たちは多言語を優先しませんでしたが、コミュニティは優先しました!

目標が公開されてから数ヶ月以内に、人々から質問が寄せられ始めました。ミッション目標トピックへの最も早い返信のひとつは、明らかにずっと待ちわびていたコミュニティメンバーからのものでした:

「国際化に十分な愛を注げば、この製品は世界中に広まるでしょう!」

彼はWordPressのローカリゼーションワークフローをゴールドスタンダードとして挙げました。Jeffの返答はいつも通り気さくなものでした:「文字列ファイルがありますので、すべてのテキストをそこに通すよう努力しています。あなたの言語用に編集するだけです!」

ナレーター:それほど単純ではありませんでした。

コミュニティは反論しました。バージョン間でどの文字列が変わったか、翻訳者はどうやって知るのか?品質管理はどうするのか?そうこうするうちに、ウェールズ語には6種類の複数形があることが判明し(後にアラビア語も同様だとわかりました)、本格的なi18nの複雑さが実感されるようになりました。

2014年までに、コミュニティが貢献したローカリゼーションはおよそ20種類存在し、私たちは翻訳プラットフォームを採用しました。Discourseの最初のエンジニアの一人であるNeilは、初日に19件の翻訳者リクエストが保留中であることに気づきました。あるコントリビューターは、オランダ語翻訳のためにgitコミットを1年間手動で比較し続けた後、ただ安堵していました:「新しいツールを使えて嬉しいです。」 また別の人は、英語(イギリス)の翻訳を提出することについて冗談を言っていました。立場が逆転しましたね…

2015年2月、コミュニティメンバーがFacebookのアプローチを参考にした投稿のインライン翻訳(UIだけでなくコンテンツの翻訳)を提案し、すべての投稿に「翻訳を表示」ボタンを求めました。6ヶ月後、Microsoft、Google、Yandexに対応したdiscourse-translatorプラグインが誕生し、コスト削減のためにロケールごとに各投稿を一度だけ翻訳するようになりました。

そして、ヤギ農家が現れました。:goat::goat::woman_farmer:t2:

2016年、ウクライナ語と英語のバイリンガルなヤギ農業フォーラムを運営するコミュニティメンバーが、折りたたみ式の言語セクションに関する詳細な提案を投稿しました。彼のコミュニティは、英語圏のヤギ農家がウクライナのヤギ農家のチーズ作りに強い関心を持っており、逆に専門的な繁殖については逆の関心があることを発見していました。Google翻訳が彼らの専門用語にとって 「大惨事」 だったため、手動でバイリンガルのQ&Aセッションを実施していました。彼は折りたたみ式セクション、言語スイッチャー、翻訳可能なカテゴリ名を求めていました。

meta.discourse.orgにおけるヤギ農家向けバイリンガルフォーラムに関するトピック

私たちのチームは率直に答えました。匿名ユーザー向けに言語ヘッダーを扱うことは、キャッシュを完全な悪夢にしてしまいます。「そもそもどうすればよいか、ブレインストーミングすることさえできませんでした。」

これが当時の状況でした。Discourseはとても上手くUIのローカリゼーションをやっていました。コミュニティはコンテンツの翻訳を求めていました。そして何年もの間、答えは「プラグインがあります」という機能するものの、あまり深くは踏み込めないものでした。

第2幕:配管工事(2017〜2020年)

2017年、私たちはmeta上で多言語コミュニティを構造化するための最初の公式ガイドを公開しました。推奨モデルには、言語ごとのカテゴリ、言語タグ、別インスタンスの運用が含まれており、アプローチがいかに手動のままであるかが明らかになりました。そしてCrowdinへの移行が始まりました。

2020年初頭、私たちのローカリゼーションインフラはガムテープと回避策でなんとか持ちこたえていました。誰がフォークしたか誰も覚えていないほど古いi18n.jsのフォーク版を使用していました。MessageFormat.jsはv0.1.5で、7年も時代遅れでした。社内ツールは、翻訳プラットフォームのバグへの回避策の上に回避策を重ねたものでした。

当初そのプラットフォームを選んだのは、オープンソースには無料だと思っていたからです。しかし…そうではありませんでした。

Crowdinが取引を提案し、私たちはそれを受け入れました。74言語を移行し、Jenkinsでカスタム自動化を構築し、ついに私たちの邪魔をしないインフラが手に入りました。meta上のコミュニティの反応はほとんど好意的でしたが、あるコントリビューターが品質管理について非常に現実的な懸念を示し、スペイン語の「翻訳自警団員」がかつて暴走し、 「他の翻訳者に相談せずに手当たり次第に文章を翻訳した」 出来事を語ってくれました。それはもっともな話です。

Crowdinを通じてサポートしている言語(完成度の高いもの)

2020年当時、非英語ロケールを使用している顧客の割合は非常に低かったです。それ以上の取り組みを正当化することは難しい状況でした。

第3幕:Redditから電話が来た(2024年後半)

数年間、多言語対応は停滞状態にありました。インフラは改善されましたが、その作業を正当化することはまだ難しい状況でした。Samは日本語と英語が混在するゲームトピックを見て、 「これは本当にもったいない機会だ」 と思いましたが、それは「いつかやろう」リストに入ったままでした。

2023年10月、Samはこんな予測をしました:「すべての翻訳APIは消えて、LLMに置き換えられるだろう。」 彼のビジョンは、「自分の言語を選択するだけですべてを自動翻訳してくれる魔法のバベルフィッシュモード」でした。この時点を振り返ると、Samはやはり(ほぼ :sweat_smile:)いつも正しいと改めて実感します。

2024年10月、GerhardはオーストリアからGoogle検索で「discourse hosting」を検索しました。Googleがドイツ語の結果に切り替えたとき、Discourseは完全に消えていました。Samの反応:「フランスには6,600万人もいる。オーストラリアの人口はその約3分の1です。日本や韓国のような国では、ローカライズされたサイトがなければ、存在しないも同然です。」

1ヶ月後、Redditの2024年Q3決算が発表され、機械翻訳が増分デイリーアクティブユーザー数を4倍に増加させており、Googleからのデイリートラフィックの最大40%を占めていることがわかりました。Falcoは、彼の妻が言語の壁のためにRedditを一度も使ったことがなかったが、すべてがポルトガル語で表示されるようになってからアプリをインストールしたと話してくれました。それは身に染みる話でした。

そしてコストの計算も驚くべきものでした。

Google Cloud Translation Gemini 2.5 Flash-Lite
価格 100万文字あたり20ドル 入力1Mトークンあたり約0.10ドル+出力0.40ドル
1,500件の投稿を4言語に翻訳 約180ドル 約1.26ドル
1投稿あたり 約3セント 約0.02セント

数年前にtranslatorプラグインを構築したエンジニアであるTGX(tgxworld)が、AIによる中国語翻訳をテストし、:pinched_fingers:と評価しました。

第4幕:POCから本番環境へ(2025〜2026年)

2025年1月、私たちはRedditの翻訳実装を研究し、?lang=jaパラメータを使った動作するプルーフオブコンセプトを構築しました。作業が「開始」されたのは2月10日で、2月14日にはmetaでライブになり、英語への自動翻訳が有効化され、1時間あたり1,000件の投稿のバックフィルが実行されていました。

次に、「3つの家」問題が発生しました。翻訳機能は4ヶ月の間に3つのコードベースを渡り歩きました:translatorプラグイン、Discourseコア、そしてdiscourse-aiです。6月4日、私は同時に勝利でもありコメディでもあることを発表しました:「すべての翻訳はdiscourse-aiに移りました。discourse-translatorは完全に不要になりました」 :sob::joy:

その過程でいくつかの楽しい議論もありました。言語に国旗を使うべきか?ある同僚が 「アラビア語はどの国の国旗?スペイン語は?」 と聞き、それで終わりになりました。私たちは言語コードを使うことにしました。カナダ人のチームメンバーは、カナダでは英語にアメリカの国旗を、フランス語にフランスの国旗を表示するのは「非常に、非常に異例だ」と指摘しました。

AI翻訳としてブランド化すべきか?一部の顧客がAI反対の明確なポリシーを持っており、摩擦が生じると私は共有しました(その後状況は変わりました)。Samは AIを前面に出すことを好み、別の同僚は外交的に 「すべての翻訳サービスは美しい」 と言い、その後誰かが「Chill Guy」ミームを投稿し、私たちはAIを前面に出すことにしました。

翻訳は本当に難しく、それを証明するコミュニティからの素晴らしい瞬間もいくつかあります。私たちが雇った翻訳代理店は、かつて「Summary」をロシア語で「Спойлер」(スポイラー)と訳し、from@example.comのようなメールプレースホルダーをキリル文字でот@gsp-пример.комに変えてしまいました。ポルトガル語の翻訳者たちは、「post」という単語をどう翻訳するかというmetaトピック全体を議論することに費やしました。ポルトガル語にはぴったりの言葉がないためです。「Publicação」(発行)は堅すぎ、「poste」(音訳)は議論を呼び、「mensagem」(メッセージ)はプライベートメッセージと混同されます。事態が深刻になったため、ポルトガル政府に任命された言語学者まで加わりました。そして同じ翻訳者たちが「ドロップダウンメニュー」を扱う必要があったとき、公式訳は「lista pendente」(保留リスト)でした。ある翻訳者が 「なんかとても変な感じがする」 と言い、もう一人が 「わかる…私なら絶対に翻訳せず『dropdown』をそのまま使う」 と返しました。

個人的に今のところ最もおかしかったのは、Germanのメタユーザーであるが、私に「composer(作曲家)」が「音楽を書く人」と翻訳されていることを指摘してくれた時です。:rofl:

多言語検索はまだロードマップ上にあり、metaの既存の埋め込みがすでに多言語対応であることから、多言語埋め込みが適切な答えだと考えています。

2025年10月、Falcoはこの旅全体の中で私のお気に入りかもしれないまとめを投稿しました:「今や私たちはRedditと同様に、Google検索で2倍のスペースを占有しています。これはすべての顧客に提供されており、コストはわずか数セントです。」

そして2025年12月、Googleが地理情報に基づいてローカライズされた検索結果を強制的に表示し始めました。ブラジルから英語で検索すると、Googleは最初のページにポルトガル語の結果を優先表示します。翻訳は「あれば便利」から検索での視認性に不可欠なものへと変わりました。

機能ドキュメントは2025年7月にmetaで公開され、手動および自動翻訳、カテゴリとトピックのローカリゼーション、言語スイッチャー、クローラーサポート、hreflangタグをすべてのプランでご利用いただけるようになりました。:tada:

そして私にとってのさらなる喜びは、中国語を話すユーザーがmeta上で翻訳についてではなく、この機能によって自分の言語でmataを自然に使えるようになったため、完全に中国語で提案を投稿し始めたことです。

Meta(私たちのフォーラム)へのユーザー報告で、元々中国語で書かれ英語に翻訳されたもの

私たちの多言語チームとコミュニティ

チームの3分の1は英語が主要言語ではない場所に住んでおり、上位10カ国の顧客の半分も英語を第一言語として使用していません。言語スイッチャー、翻訳プロンプト、hreflangタグを構築した際、推測は必要ありませんでした。自分たちと顧客のために構築していたからです。

そして、AIに関することが何も起きる前から何年もの間、翻訳を維持し続けてきたコミュニティがいます。多くの方々がいますが、私が直接交流した2名だけ挙げるとすれば:チェコ語翻訳を何年も維持し続けているTomas(しばらくCrowdinのリーダーボードのトップでもありました)と、私たちの多くが合計で報告した数よりも多くの翻訳バグを発見しているMoinです。そういったことは仕様書には書かれておらず、実際に体験してみて初めてわかることです。

そしてGerhard。:hugs: GerhardはDiscourseの翻訳インフラ全体をひとりで管理してきた粘り強いエンジニアの一人です。英語以外の言語でDiscourseをお使いの方は、彼のおかげである部分が大きいです。

Penarが最もうまく表現してくれました:「昨日まで、metaに参加するには英語を話さなければなりませんでした。今日、自動翻訳によってフランス語、ポルトガル語、スペイン語でご利用いただけます。素晴らしい!」


「国境のないDiscourse」次回:これが私たちの構築方法です。しかし、他の言語でDiscourseを使うとは実際にどのような感じなのでしょうか?

原文はこちら:


Good Loopでは、Discourseのセルフホスティングを安価で提供しています。開発元であるCDCK社の協力のもと、公式ブログ記事の翻訳・公開など、日本での普及にも努めています。

詳しくはこちら: Discourseの導入・運用支援・コンサルティング – Good Loop