Doxygenは多言語をネイティブにサポートしています。これは、Doxygenによって生成されるテキスト断片が、英語(デフォルト)以外の言語で生成できることを意味します。出力言語は、設定ファイル(デフォルト名でDoxyfileとして知られています)の構成オプションOUTPUT_LANGUAGEで選択します。コメントブロック内で言語を切り替えるには、\~コマンドを使用できます。
現在(バージョン1.15.0)では、42言語がサポートされています(アルファベット順):アフリカーンス語、アラビア語、アルメニア語、ブラジルポルトガル語、ブルガリア語、カタロニア語、中国語、中国語繁体字、クロアチア語、チェコ語、デンマーク語、オランダ語、英語、エスペラント語、フィンランド語、フランス語、ドイツ語、ギリシャ語、ヒンディー語、ハンガリー語、インドネシア語、イタリア語、日本語(+En)、韓国語(+En)、ラトビア語、リトアニア語、マケドニア語、ノルウェー語、ペルシャ語、ポーランド語、ポルトガル語、ルーマニア語、ロシア語、セルビア語、セルビア語キリル文字、スロバキア語、スロベニア語、スペイン語、スウェーデン語、トルコ語、ウクライナ語、ベトナム語。
サポートされている言語に関する情報テーブルは以下の通りです。言語のアルファベット順に並べられています。Status列はソースから生成され、翻訳者が更新されたおおよその最終バージョンを示しています。
| 言語 | メンテナー | 連絡先(「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 |
| 日本語 | 鈴美崎 伊勢利 浩生 佐藤 龍之介 永松 健司 岩佐 和己 | 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 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 |
| SerbianCyrillic | 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 dot palmqvist at aidium dot 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 |
リストに載っているほとんどの人は、他のことでも忙しいと述べています。したがって、作業を早めるのを手伝いたい場合は、彼ら(または私)に知らせてください。
まだリストに載っていない言語のサポートを追加したい場合は、次のセクションを読んでください。
この短いHOWTOは、doxygenに新しい言語のサポートを追加する方法を説明しています。
次の手順に従うだけです。
<value name='YourLanguage'/>
doxygen/src/language.cppを編集します。次のコードを追加します。
#include<translator_xx.h>
次に、setTranslator()に以下を追加します。
case OUTPUT_LANGUAGE_t::YourLanguage: theTranslator = new TranslatorYourLanguage; break;
doxygen/src/translator_xx.hを編集します。TRANSLATOR_EN_HをTRANSLATOR_XX_Hに2回(つまり、ファイルの先頭にある#ifndefと#defineプリプロセッサコマンドで)名前を変更します。TranslatorEnglishをTranslatorYourLanguageに名前を変更します。idLanguage()で、「english」をあなたの言語名に変更します(小文字のみを使用してください)。言語によっては、メンバー関数latexLanguageSupportCommand()なども変更したい場合があるでしょう(作業を始めると認識できます)。trで始まるメンバー関数によって返されるすべての文字列を編集します。句読点と大文字小文字を一致させるようにしてください!特殊文字(アクセント付き)を入力するには、次の方法があります。a(つまりä)にはäのようなHTMLコードを使用します。コードについてはHTML仕様を参照してください。doxygen/doc/maintainers.txtを編集し、次のように自分をメンテナーのリストに追加します。OUTPUT_LANGUAGE = your_language_nameを使用して、あなたの言語で出力を生成できます。translator_xx.hを私に送信していただければ、doxygenに追加できます。また、maintainers.txtリストに含めるあなたの名前とメールアドレスも送信してください。Doxygenの新しいバージョンでは、新しい翻訳文が使用される場合があります。そのような状況では、Translatorクラスは新しいメソッドの実装を必要とします。そのインターフェースが変更されるためです。もちろん、英語の文は他の言語に翻訳される必要があります。少なくとも、新しいメソッドは言語関連の翻訳者クラスによって実装される必要があります。そうしないと、doxygenはコンパイルすらされません。すべての言語メンテナーが新しい文を翻訳して結果を送信するのを待つのは、あまり実用的ではありません。以下のテキストは、この問題を解決するための翻訳者アダプターの使用法について説明しています。
翻訳者アダプターの役割。新しいリリースでTranslatorクラスのインターフェースが変更されるたびに、新しいクラスTranslatorAdapter_x_y_zがtranslator_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クラスに変更し忘れた場合にも通知されます。
すべての更新を完了する時間がない場合でも、上記で説明した最も根本的なアプローチから始めるべきです。まだ実装されていないすべてのメソッドを実装する翻訳者アダプタークラスに基底クラスをいつでも変更できます。
翻訳者を段階的に更新したい場合は、TranslatorEnglish(translator_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という単語でマークされます。これは本当に廃止済みと読むべきです。最終更新について推測することはできません。
多くの場合、廃止されたメソッドからより良い結果を構築することが可能です。そのため、可能であれば翻訳者アダプタークラスを使用すべきです。一方、本当に廃止された翻訳者のためのアダプターの実装は、メンテナンスと実行時のオーバーヘッドが大きすぎます。