国際化

多言語対応

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

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

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

言語メンテナー連絡先(「at」と「dot」を置き換えてください)ステータス
アフリカーンス語Johan Prinsloojohan at zippysnoek dot com1.6.0
アラビア語Moaz Reyad
Muhammad Bashir Al-Noimi
[辞任]
mbnoimi at gmail dot com
1.4.6
アルメニア語Armen Tangamyanarmen dot tangamyan at anu dot edu dot au1.8.0
ブラジルポルトガル語Fabio "FJTC" Jun Takada Chinojun-chino at uol dot com dot br最新
ブルガリア語Kiril Kirilovkpkirilov at abv dot bg1.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 Braloboris dot bralo at gmail dot com1.8.2
チェコ語Petr Přikrylprikryl at atlas dot cz1.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 Heeschdoxygen at gmail dot com最新
英語Dimitri van Heeschdoxygen at gmail dot com最新
エスペラント語Ander Martínezander dot basaundi at gmail dot com1.8.4
フィンランド語Antti Laineantti dot a dot laine at tut dot fi1.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 Gessosgessos dot paul at yahoo dot gr最新
ヒンディー語Harsh Rathodhrathore50 at ymail dot com1.9.4
ハンガリー語Ákos Kiss
Földvári György
akiss at users dot sourceforge dot net
[到達不能]
1.8.15
インドネシア語Hendy Irawanceefour at gauldong dot net1.8.0
イタリア語Alessandro Falappa
Ahmed Aldo Faisal
alex dot falappa at gmail dot com
aaf23 at cam dot ac dot uk
1.8.15
日本語鈴美崎
伊勢利 浩生
佐藤 龍之介
永松 健司
岩佐 和己
szmml at h12u dot com
goyoki at gmail dot com
sun594 at hotmail dot com
[到達不能]
[到達不能]
1.8.15
JapaneseEn日本語を参照 英語ベース
韓国語金泰東
鄭秀英
Richard Kim
fly1004 at gmail dot com
jung5000 at gmail dot com
[到達不能]
1.8.15
KoreanEn韓国語を参照 英語ベース
ラトビア語Lauris
Fedosov Artyom Dmitrievich
lauris at nix dot lv
artjomsfedosovs2 at gmail dot com
最新
リトアニア語Tomas Simonaitis
Mindaugas Radzius
Aidas Berukstis
– メンテナーを募集中 –
[到達不能]
[到達不能]
[到達不能]
[どなたか見つけるお手伝いをしてください。]
1.4.6
マケドニア語Slave Jovanovskislavejovanovski at yahoo dot com1.6.0
ノルウェー語Lars Erik Jordetlejordet at gmail dot com1.4.6
ペルシャ語Ali Nadalizadehnadalizadeh at gmail dot com1.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
SerbianCyrillicNedeljko Stefanovicstenedjo at yahoo dot com1.6.0
スロバキア語Kali+Laco Švec
Petr Přikryl
[スロバキア語のアドバイザー]
prikryl at atlas dot cz
1.8.15
スロベニア語Matjaž Ostroveršnikmatjaz dot ostroversnik at ostri dot org1.4.6
スペイン語Bartomeu
Francisco Oltra Thennet
David Vaquero
bartomeu at loteria3cornella dot com
[到達不能]
david at grupoikusnet dot com
1.9.6
スウェーデン語Björn Palmqvistbjorn dot palmqvist at aidium dot se1.9.6
トルコ語Emin Ilker Cetinbasniw3 at yahoo dot com1.7.5
ウクライナ語Olexij Tkatchenko
Petro Yermolenko
[辞任]
python at i dot ua
1.8.4
ベトナム語Dang Minh Tuantuanvietkey at gmail dot com1.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_<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のままにします。
      • ウムラウト付きのa(つまりä)には&auml;のようなHTMLコードを使用します。コードについては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クラスは廃止されたメソッドを使用して、ターゲット言語で古い結果にできるだけ近い結果を取得できます。それが不可能な場合、結果(デフォルトの翻訳)は、常に最新である(定義上)英語の翻訳者を使用して取得されます。

例えば、引数なしの古いメソッドtrFiles()を置き換えるために、パラメータ(最初の文字の大文字/小文字と単数/複数形を決定するため)を持つ新しいtrFile()メソッドが導入されたとき、翻訳者アダプタークラスの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から直接派生している場合、言語翻訳者は最新です。

翻訳者アダプタークラスはチェーン状になっており、古い翻訳者アダプタークラスは、1つ新しい翻訳者アダプターを基底クラスとして使用します。新しいアダプターは、古いアダプターよりも「適合」する作業が少なくなります。最も古いアダプタークラスは、すべてのアダプタークラスから(間接的に)派生しています。アダプタークラスの名前は、そのサフィックスがアダプターを必要としなかった以前の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という単語でマークされます。これは本当に廃止済みと読むべきです。最終更新について推測することはできません。

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

次のセクションに進むか、目次に戻ってください。