国際化

多言語サポート

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

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

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

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

リストに載っているほとんどの人は、他のことでも忙しいと述べています。もし作業を加速させたい場合は、彼ら(または私)に知らせてください。

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

Doxygenに新しい言語を追加する

この短いHOWTOは、doxygenに新しい言語のサポートを追加する方法を説明します

以下の手順に従ってください

  1. サポートを追加したい言語(例: YourLanguage)を教えてください。もし誰もその言語のサポートに取り組んでいない場合、あなたがその言語のメンテナーとして割り当てられます。
  2. doxygen/src/config.xml ファイルの OUTPUT_LANGUAGE の適切な場所に、次の行を追加してください。
          <value name='YourLanguage'/>
    
  3. doxygen/src/translator_en.h のコピーを作成し、doxygen/src/translator_<あなたの2文字の国コード>.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のままにします。
      • ウムラウト付きの a(例: ä)には、&auml; のようなHTMLコードを使用してください。コードについてはHTML仕様を参照してください。
  6. doxygen/doc/maintainers.txt を編集し、次のようにメンテナーのリストに自分を追加してください。
    TranslatorYourLanguage
    <あなたの名前>: <your dot email at your dot domain>
  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 から削除されたのと同じコードを使用)。

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

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

翻訳アダプタークラスは連鎖されており、古い翻訳アダプタークラスは一段新しい翻訳アダプターを基底クラスとして使用します。新しいアダプターは、古いアダプターよりも適応作業が少なくなっています。最も古いアダプタークラスは、すべてのアダプタークラスから(間接的に)派生しています。アダプタークラスの名前は、その接尾辞がアダプターを必要としなかったdoxygenの以前の公式バージョンから派生するように選択されています。このようにして、言語翻訳クラスが最後にいつ更新されたかを概算で知ることができます(詳細は以下を参照)。

最新の翻訳アダプターは、抽象クラス Translator から直接派生する抽象クラス TranslatorAdapterBase から派生しています。アダプタークラス内でデフォルト翻訳を簡単に実装できるように、プライベートな英語翻訳者メンバーを追加するのみです。また、言語翻訳が最新ではないことをユーザーに通知する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がコンパイル可能かどうかを確認するために、コンパイルすることを忘れないでください。translator.py はコンパイラに関してすべてが正しいかどうかをチェックしません。そのため、必要な基底クラスについて誤った情報を示す場合があります。

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

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

多くの場合、廃止されたメソッドからより良い結果を構築することが可能です。そのため、可能であれば翻訳アダプタークラスを使用すべきです。一方、本当に廃止された翻訳クラスのアダプターを実装すると、過剰なメンテナンスとランタイムオーバーヘッドが発生します。

次のセクションへ移動するか、インデックスに戻る。