国際化

多言語サポート

Doxygen は多言語サポートを内蔵しています。これは、doxygen によって生成されるテキスト断片が、英語(デフォルト)以外の言語で作成できることを意味します。出力言語は、設定ファイル(デフォルト名および Doxyfile として知られています)の OUTPUT_LANGUAGE 設定オプションを通じて選択されます。コメントブロック内で言語を切り替えるには、\~ コマンドを使用できます。

現在(バージョン 1.13.0)、42 の言語がサポートされています(アルファベット順):アフリカーンス語、アラビア語、アルメニア語、ブラジルポルトガル語、ブルガリア語、カタロニア語、中国語、中国語(繁体字)、クロアチア語、チェコ語、デンマーク語、オランダ語、英語、エスペラント語、フィンランド語、フランス語、ドイツ語、ギリシャ語、ヒンディー語、ハンガリー語、インドネシア語、イタリア語、日本語 (+En)、韓国語 (+En)、ラトビア語、リトアニア語、マケドニア語、ノルウェー語、ペルシア語、ポーランド語、ポルトガル語、ルーマニア語、ロシア語、セルビア語、セルビア語(キリル文字)、スロバキア語、スロベニア語、スペイン語、スウェーデン語、トルコ語、ウクライナ語、ベトナム語。

サポートされている言語に関する情報の表を以下に示します。言語ごとにアルファベット順にソートされています。ステータス列はソースから生成されたもので、翻訳者が最後に更新されたバージョンをおおよそ示しています。

言語 メンテナ 連絡先住所 (@ と . を置き換えてください) ステータス
アフリカーンス語 Johan Prinsloo johan アット zippysnoek ドット com 1.6.0
アラビア語 Moaz Reyad
Muhammad Bashir Al-Noimi
[辞任]
mbnoimi アット gmail ドット com
1.4.6
アルメニア語 Armen Tangamyan armen ドット tangamyan アット anu ドット edu ドット au 1.8.0
ブラジルポルトガル語 Fabio "FJTC" Jun Takada Chino jun-chino アット uol ドット com ドット br 最新
ブルガリア語 Kiril Kirilov kpkirilov アット abv ドット bg 1.9.4
カタロニア語 Maximiliano Pin
Albert Mora
max ドット pin アット bitroit ドット com
[連絡不能]
1.8.0
中国語 Lian Yang
Li Daobing
Wei Liu
lian ドット yang ドット cn アット gmail ドット com
lidaobing アット gmail ドット com
liuwei アット asiainfo ドット com
最新
中国語(繁体字) Daniel YC Lin
Gary Lee
dlin ドット tw アット gmail ドット com
garywlee アット gmail ドット com
1.8.15
クロアチア語 Boris Bralo boris ドット bralo アット gmail ドット com 1.8.2
チェコ語 Petr Přikryl prikryl アット atlas ドット cz 1.9.6
デンマーク語 Poul-Erik Hansen
Erik Søe Sørensen
pouhan アット gnotometrics ドット dk
eriksoe+doxygen アット daimi ドット au ドット dk
1.8.0
オランダ語 Dimitri van Heesch doxygen アット gmail ドット com 最新
英語 Dimitri van Heesch doxygen アット gmail ドット com 最新
エスペラント語 Ander Martínez ander ドット basaundi アット gmail ドット com 1.8.4
フィンランド語 Antti Laine antti ドット a ドット laine アット tut ドット fi 1.6.0
フランス語 David Martinet
Xavier Outhier
Benoît BROSSE
contact アット e-concept-applications ドット fr
xouthier アット yahoo ドット fr
Benoit ドット BROSSE アット ingenico ドット com
1.9.5
ドイツ語 Peter Grotrian
Jens Seidel
Peter ドット Grotrian アット pdv-FS ドット de
jensseidel アット users ドット sf ドット net
1.8.15
ギリシャ語 Paul Gessos gessos ドット paul アット yahoo ドット gr 最新
ヒンディー語 Harsh Rathod hrathore50 アット ymail ドット com 1.9.4
ハンガリー語 Ákos Kiss
Földvári György
akiss アット users ドット sourceforge ドット net
[連絡不能]
1.8.15
インドネシア語 Hendy Irawan ceefour アット gauldong ドット net 1.8.0
イタリア語 Alessandro Falappa
Ahmed Aldo Faisal
alex ドット falappa アット gmail ドット com
aaf23 アット cam ドット ac ドット uk
1.8.15
日本語 Suzumizaki-Kimikata
Hiroki Iseri
Ryunosuke Satoh
Kenji Nagamatsu
Iwasa Kazmi
szmml アット h12u.com
goyoki アット gmail ドット com
sun594 アット hotmail ドット com
[連絡不能]
[連絡不能]
1.8.15
日本語En 日本語を参照   英語ベース
韓国語 Kim Taedong
SooYoung Jung
Richard Kim
fly1004 アット gmail ドット com
jung5000 アット gmail ドット com
[連絡不能]
1.8.15
韓国語En 韓国語を参照   英語ベース
ラトビア語 Lauris lauris アット nix.lv 1.8.4
リトアニア語 Tomas Simonaitis
Mindaugas Radzius
Aidas Berukstis
-- メンテナを検索中 --
[連絡不能]
[連絡不能]
[連絡不能]
[誰か見つけるのを手伝ってください。]
1.4.6
マケドニア語 Slave Jovanovski slavejovanovski アット yahoo ドット com 1.6.0
ノルウェー語 Lars Erik Jordet lejordet アット gmail ドット com 1.4.6
ペルシア語 Ali Nadalizadeh nadalizadeh アット gmail ドット com 1.7.5
ポーランド語 Piotr Kaminski
Grzegorz Kowal
Krzysztof Kral
Marek Ledworowski
[連絡不能]
[連絡不能]
krzysztof ドット kral アット gmail ドット com
mledworo アット gmail ドット com
最新
ポルトガル語 Rui Godinho Lopes
Fabio "FJTC" Jun Takada Chino
[辞任]
jun-chino アット uol ドット com ドット br
最新
ルーマニア語 Ionut Dumitrascu
Alexandru Iosup
reddumy アット yahoo ドット com
aiosup アット yahoo ドット com
1.8.15
ロシア語 Brilliantov Kirill Vladimirovich
Alexandr Chelpanov
brilliantov アット byterg ドット ru
cav アット cryptopro ドット ru
最新
セルビア語 Dejan Milosavljevic [連絡不能] 1.6.0
セルビア語(キリル文字) Nedeljko Stefanovic stenedjo アット yahoo ドット com 1.6.0
スロバキア語 Kali+Laco Švec
Petr Přikryl
[スロバキア語アドバイザー]
prikryl アット atlas ドット cz
1.8.15
スロベニア語 Matjaž Ostroveršnik matjaz ドット ostroversnik アット ostri ドット org 1.4.6
スペイン語 Bartomeu
Francisco Oltra Thennet
David Vaquero
bartomeu アット loteria3cornella ドット com
[連絡不能]
david アット grupoikusnet ドット com
1.9.6
スウェーデン語 Björn Palmqvist bjorn.palmqvist アット aidium.se 1.9.6
トルコ語 Emin Ilker Cetinbas niw3 アット yahoo ドット com 1.7.5
ウクライナ語 Olexij Tkatchenko
Petro Yermolenko
[辞任]
python アット i ドット ua
1.8.4
ベトナム語 Dang Minh Tuan tuanvietkey アット gmail ドット com 1.6.0

リスト上のほとんどの人が他のことにも忙しいと述べているので、物事を迅速に進めるのを手伝いたい場合は、(彼らまたは私に)知らせてください。

まだリストにない言語のサポートを追加したい場合は、次のセクションをお読みください。

doxygen への新しい言語の追加

この簡単な HOWTO では、doxygen に新しい言語のサポートを追加する方法について説明します。

次の手順に従ってください

  1. サポートを追加したい言語(たとえば YourLanguage)を教えてください。他の誰もその言語のサポートに取り組んでいない場合、あなたがその言語のメンテナに割り当てられます。
  2. OUTPUT_LANGUAGE 部分の適切な場所に、doxygen/src/config.xml ファイルに次の行を追加します。
          <value name='YourLanguage'/>
    
  3. doxygen/src/translator_en.h のコピーを作成し、doxygen/src/translator_<your_2_letter_country_code>.h という名前を付けます。このドキュメントの残りの部分では xx を使用します(大文字バージョンには XX を使用します)。
  4. doxygen/src/language.cpp を編集します。次のコードを追加します。

    #include<translator_xx.h>
    

    次に、setTranslator() に次を追加します。

    case OUTPUT_LANGUAGE_t::YourLanguage: theTranslator = new TranslatorYourLanguage; break;
    
  5. doxygen/src/translator_xx.h を編集します。
    • UTF-8 対応エディターを使用して、UTF-8 モード(BOM なしモード)でファイルを開きます。
    • TRANSLATOR_EN_HTRANSLATOR_XX_H に 2 回リネームします(つまり、ファイルの先頭にある #ifndef および #define プリプロセッサコマンド内)。
    • TranslatorEnglishTranslatorYourLanguage にリネームします。
    • メンバー idLanguage() で、"english" を言語の名前に変更します(小文字のみを使用)。言語によっては、メンバー関数 latexLanguageSupportCommand() やその他の関数も変更したい場合があります(作業を開始すると認識できます)。
    • tr で始まるメンバー関数によって返されるすべての文字列を編集します。句読点と大文字小文字を一致させるようにしてください!特殊文字(アクセント付き)を入力するには、次のいずれかの方法を使用できます。
      • キーボードがサポートしている場合は、直接入力します。テキストは UTF-8 エンコーディングを使用して保存されることが期待されることを思い出してください。Doxygen は文字を適切な {\LaTeX} に変換し、HTML および man 出力を UTF-8 のままにします。
      • &auml; のような HTML コードを、umlaut 付きの a (つまり、ä)に使用します。コードについては、HTML 仕様を参照してください。
  6. doxygen/doc/maintainers.txt を編集し、次のようにメンテナのリストに自分を追加します。
    TranslatorYourLanguage
    <あなたの名前>: <あなたのドットメール アット あなたのドメイン>
  7. 適切なビルドコマンド(例:make docs)を実行してドキュメントをビルドします。
  8. これで、設定ファイルで OUTPUT_LANGUAGE = your_language_name を使用して、あなたの言語で出力を生成できます。
  9. 推奨される方法は、GitHub で doxygen リポジトリをクローンし、プルリクエストを作成することです。または、translator_xx.h を私に送信して、doxygen に追加できるようにしてください。maintainers.txt リストに含めるために、あなたの名前とメールアドレスも送信してください。

言語のメンテナンス

doxygen の新しいバージョンでは、新しい翻訳された文が使用される場合があります。そのような状況では、Translator クラスは新しいメソッドの実装を必要とします – そのインターフェースが変更されます。もちろん、英語の文は他の言語に翻訳する必要があります。少なくとも、新しいメソッドは言語関連の翻訳者クラスによって実装される必要があります。そうしないと、doxygen はコンパイルすらできません。すべての言語メンテナが新しい文を翻訳し、結果を送信するまで待つのは現実的ではありません。次のテキストでは、この問題を解決するための翻訳アダプターの使用法について説明します。

翻訳アダプターの役割。 新しいリリースで Translator クラスのインターフェースが変更されるたびに、新しいクラス TranslatorAdapter_x_y_ztranslator_adapter.h ファイルに追加されます(ここで、x、y、z は doxygen の現在の公式バージョンに対応する数値です)。以前に Translator クラスから派生したすべての翻訳者は、このアダプタークラスから派生するようになりました。

TranslatorAdapter_x_y_z クラスは、新しく必要なメソッドを実装します。新しいメソッドが、類似しているが廃止されたメソッドを置き換える場合(たとえば、引数の数が変更されたり、古いメソッドの機能が変更または強化されたりした場合)、TranslatorAdapter_x_y_z クラスは、廃止されたメソッドを使用して、ターゲット言語の古い結果にできるだけ近い結果を取得できます。それが不可能な場合、結果(デフォルトの翻訳)は、常に最新である(定義により)英語翻訳者を使用して取得されます。

例: パラメーター(最初の文字の大文字と小文字および単数/複数形を決定するため)を持つ新しい trFile() メソッドが、引数なしの古いメソッド trFiles() を置き換えるために導入されたとき、次のコードが翻訳アダプタークラスの 1 つに表示されました。

    /*! This is the default implementation of the obsolete method
     * used in the documentation of a group before the list of
     * links to documented files.  This is possibly localized.
     */
    virtual QCString trFiles()
    { return "Files"; }

    /*! This is the localized implementation of newer equivalent
     * using the obsolete method trFiles().
     */
    virtual QCString trFile(bool first_capital, bool singular)
    {
      if (first_capital && !singular)
        return trFiles();  // possibly localized, obsolete method
      else
        return english.trFile(first_capital, singular);
    }

trFiles() は、廃止されたため削除されたため、TranslatorEnglish クラスには存在しません。ただし、これまで使用されており、その呼び出しは次のように置き換えられました。

    trFile(true, false)

doxygen ソースファイル内。おそらく、多くの言語翻訳者が廃止されたメソッドを実装したため、そのような場合に同じ言語依存の結果を使用するのは完全に理にかなっています。TranslatorEnglish は古いメソッドを実装していません。抽象 Translator クラスから派生しています。一方、異なる言語の古い翻訳者は、新しい trFile() メソッドを実装していません。そのため、別の基本クラス – TranslatorAdapter_x_y_z から派生しています。TranslatorAdapter_x_y_z クラスは、新しく必要な trFile() メソッドを実装する必要があります。ただし、trFiles() メソッドが実装されていない場合、翻訳アダプターはコンパイルされません。これが、翻訳アダプタークラスに古いメソッドを実装する理由です(TranslatorEnglish から削除されたのと同じコードを使用)。

最も簡単な方法は、引数を英語翻訳者に渡し、その結果を返すことです。代わりに、アダプターは古い trFiles() を 1 つの特別なケースで使用します – 新しい trFile(true, false) が呼び出された場合。これは、新しいメソッドが導入された時点で最も使用されていたケースです – 上記を参照してください。これは複雑すぎるように見えるかもしれませんが、この手法により、コアソースの開発者は Translator インターフェースを変更できますが、ユーザーは変更に気付かない場合があります。もちろん、新しい trFile() が異なる引数で使用される場合、英語の結果が返され、英語以外のユーザーに気付かれます。ここで、言語翻訳のメンテナは、少なくともその特定のメソッドを実装する必要があります。

言語翻訳者の基本クラスは何を意味しますか? 言語翻訳者クラスがアダプタークラスを継承する場合、メンテナンスが必要です。そのような場合、言語翻訳者は最新ではないと見なされます。一方、言語翻訳者が抽象クラス Translator から直接派生している場合、言語翻訳者は最新です。

翻訳アダプタークラスはチェーン化されており、古い翻訳アダプタークラスは、1 つ新しい翻訳アダプターを基本クラスとして使用します。新しいアダプターは、古いアダプターよりも適応作業が少なくなります。最も古いアダプタークラスは、(間接的に)すべてのアダプタークラスから派生しています。アダプタークラスの名前は、そのサフィックスが、アダプターを必要としなかった doxygen の以前の公式バージョンから派生するように選択されています。これにより、言語翻訳者クラスが最後に更新された時期をおおよそ言うことができます – 以下の詳細を参照してください。

最新の翻訳アダプターは、抽象 TranslatorAdapterBase クラスから派生しており、抽象 Translator クラスから直接派生しています。アダプタークラス内のデフォルト翻訳の簡単な実装のためにプライベート英語翻訳者メンバーを追加するだけで、言語翻訳が最新ではないことをユーザーに通知するための 1 つのメソッドの実装も強制します(そのため、生成されたファイルの一部の文が英語で表示される場合があります)。

最も古いアダプタークラスが言語翻訳者のいずれにも使用されなくなると、doxygen プロジェクトから削除できます。メンテナは、翻訳アダプタークラスの数を最小限に抑えた状態に到達するように努める必要があります。

サポートされている言語の言語翻訳者クラスのメンテナンスを簡素化するためにtranslator.py Python スクリプトが開発されました(doxygen/doc ディレクトリにあります)。各言語のソースファイルから、廃止されたメソッドと新しいメソッドに関する重要な情報を抽出します。情報は、翻訳者レポート ASCII ファイル(translator_report.txt)に保存されます。

このファイルは translator_report.txt として見つけることができます。

言語翻訳者の基本クラスを見ると、スクリプトは翻訳者のステータスも推測します – 上の言語の表の最後の列を参照してください。translator.py は、doxygen ドキュメントが生成されるときに自動的に呼び出されます。スクリプトが役立つと感じたらいつでも手動でスクリプトを実行することもできます。もちろん、スクリプトの結果を使用することを強制されるわけではありません。アダプタークラスとその基本クラスを見ることで、同じ情報を見つけることができます。

言語翻訳者を更新するにはどうすればよいですか? まず、あなたが言語メンテナであるか、変更について彼/彼女に知らせる必要があります。次のテキストは、主な対象読者として言語メンテナ向けに書かれています。

言語を更新するときに取るべきアプローチがいくつかあります。非常に忙しくない場合は、常に最も根本的なアプローチを選択する必要があります。更新に予想よりも時間がかかる場合は、適切な翻訳アダプターを使用して変更を後で完了し、翻訳者を引き続き機能させることができます。

言語翻訳者を更新する最も根本的な方法は、翻訳者クラスを抽象クラス Translator から直接派生させ、実装する必要があるメソッドの翻訳を提供することです – コンパイラーは、それらのいくつかを実装するのを忘れた場合に通知します。疑問がある場合は、実装されたメソッドの目的を認識するために TranslatorEnglish クラスを見てください。以前に使用したアダプタークラスを見ることは役立つ場合がありますが、アダプタークラスは廃止されたメソッドも実装するため、誤解を招く可能性もあります(以前の trFiles() の例を参照)。

言い換えれば、最新の言語翻訳者は TranslatorAdapter_x_y_z クラスをまったく必要とせず、Translator クラスに必要なメソッド(つまり、Translator の純粋仮想メソッド – それらは =0; で終わります)以外に何も実装する必要はありません。

すべてが正常にコンパイルされたら、translator.py を実行し、doxygen/doc ディレクトリにある翻訳者レポート(ASCII ファイル)を見てください。スクリプトが特別なものを検出しない場合にのみ、翻訳者は最新としてマークされます。翻訳者が Translator 基本クラスを使用している場合でも、ソースコードに関連するいくつかの注意がある場合があります。その場合、翻訳者はほぼ最新としてマークされます。つまり、まったく使用されていない廃止されたメソッドが、あなたの言語のセクションにリストされている場合があります。単純に、それらのコードを削除し(translator.py を再度実行します)。また、翻訳者クラスの基本クラスを新しいアダプタークラスまたは Translator クラスに直接変更するのを忘れた場合にも通知されます。

すべての更新を完了する時間がない場合でも、上記で説明した最も根本的なアプローチから始める必要があります。まだ実装されていないすべてのメソッドを実装する翻訳アダプタークラスに基本クラスをいつでも変更できます。

翻訳者を段階的に更新したい場合は、TranslatorEnglishtranslator_en.h ファイル)を見てください。内部には、new since 1.2.4 のようなコメントがあり、常に述べられたバージョンで実装されたメソッドの数を区切っています。翻訳アダプタークラスと同じバージョン番号を使用するコメントの下に配置されているメソッドのグループを実装します。(たとえば、クラスがコメント new since 1.2.4 の下のメソッドを実装していない場合、翻訳者クラスは TranslatorAdapter_1_2_4 を使用する必要があります。それらを実装すると、クラスは新しい翻訳アダプターを使用する必要があります。

translator.py スクリプトを時々実行し、翻訳者レポートを短くするために(より高速に生成される)、xx 識別子(translator_xx.h から)を指定します – 翻訳者に関連する情報のみが含まれます。基本クラスを新しいアダプターに変更する必要がある状態に達すると、翻訳者レポートにメモが表示されます。

警告:doxygen がコンパイル可能かどうかを確認するために、doxygen をコンパイルすることを忘れないでください。translator.py は、コンパイラーに関してすべてが正しいかどうかをチェックしません。そのため、必要な基本クラスについて嘘をつくことがあります。

最も古い言語翻訳者は、複雑すぎるアダプターの実装につながる可能性があります。そのため、doxygen 開発者は、そのような翻訳者を TranslatorEnglish クラスから派生させることを決定する場合があります。これは、定義により常に最新です。

そうすると、すべての不足しているメソッドが英語翻訳に置き換えられます。これは、実装されていないメソッドは常に英語の結果を返すことを意味します。そのような翻訳者は、obsolete という単語を使用してマークされます。あなたはそれを本当に廃止されたと読むべきです。最後の更新についての推測はできません。

多くの場合、廃止されたメソッドからより良い結果を構築することが可能です。そのため、可能な場合は翻訳アダプタークラスを使用する必要があります。一方、本当に廃止された翻訳者のアダプターの実装は、メンテナンスと実行時のオーバーヘッドが大きすぎます。

次のセクションに進むか、インデックスに戻ります。