Jeff Atwood
Mar 5, 2013 • 2 min read
Discourseは、あらゆる人間の言語をサポートするディスカッションプラットフォームとして、常にそのような目的で設計されてきました。英語のみのサポートで一ヶ月前にローンチしましたが、デフォルトのRuby on Rails i18n gemを使用しているため、Discourseはお好みの言語に(比較的)簡単に翻訳することができます。

先週より、/adminの設定でdefault_localeの設定を変更することで、Discourseインストールのデフォルト言語を指定できるようになりました。

Discourseのコードベースの/config/localesフォルダを参照すると、現在サポートされている各言語のYAMLファイルが、クライアント用とサーバー用の2種類で用意されているのがわかります。すべての言語は、標準的なISO 639-1の2文字コードで識別されます。
- client.cs.yml
- server.cs.yml
- client.fr.yml
- server.fr.yml
各ファイルの中には、左側にトークン、右側に翻訳が記載されています。
fr:
js:
share:
topic: 'partager un lien vers cette discussion'
post: 'partager un lien vers ce message'
edit: 'éditer le titre et la catégorie de cette discussion'
not_implemented: "Cette fonctionnalité n'a pas encore été implémentée, désolé."
no_value: "Non"
yes_value: "Oui"
cs:
js:
share:
topic: 'sdílet odkaz na toto téma'
post: 'sdílet odkaz na tento příspěvek'
edit: 'upravit název a kategorii příspěvku'
not_implemented: "Tato fičura ještě není implementovaná"
no_value: "Ne"
yes_value: "Ano"
文字列を表示する際にi18n関数を呼び出すことには細心の注意を払ってきましたが、常に成功していたわけではありません。
kubabreckaやZogStriPをはじめとする多くのコントリビューターの協力を得て、ローンチ以来Discourseのコードベースを整理し、すべての文字列出力が適切なi18n関数を通るようにしてきました。難しいことではありません。ハードコードされた文字列を見つけた箇所で、代わりにトークンを参照する関数に変更するだけです。
<div class='alert alert-error'>
- Something went wrong processing your log in, please try again.
+ <% t 'login.omniauth_error_unknown' %>
</div>
もちろん、国際化とローカライズは複雑なテーマであり、日付や時刻のフォーマット、数値のフォーマット、複数形の違い、右から左へ書く言語、その他数十にのぼる細かな点にはまだ手をつけていません。しかし、少なくともすべての文字列をi18nに通すようにしたことは、正しい方向への大きな一歩です。
Discourseのローカライズにご協力ください!
コントリビュートする時間がある方は、/config/localesに適切な言語コードと構造を持つYMLファイルを作成し、マスターファイルであるserver.en.ymlとclient.en.ymlから翻訳を進めてください。それが主な作業ですが、クライアントサイドの翻訳と日付フォーマットを整えるためには、もう少し作業が必要です。
どんな言語であっても、より多くの人がDiscourseを使えるようになれば、より多くの会話が生まれ、世界中からのコントリビュートに対してDiscourseはより魅力的なものになります!

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