[[PageOutline]]
= Trac-ja について = #abouttracja
'''このファイルは Trac のオリジナル配布物には含まれません。'''

Trac-ja は Trac の日本語ローカライズバージョンです。

----
== Trac の I18N 対応状況 == #traci18n
Trac はオリジナル配布物のままでも、日本語を使用することができます。

Trac の内部では ([http://trac.edgewall.org/milestone/0.10 0.10] 以降) Python の'Unicode' 形式で文字列を処理し、 Web の表示は `UTF-8`で行われるため、 (対応するフォントがあれば) どのような言語であっても取り扱うことができます。 (See: TracUnicode)


=== [wiki:TracEnvironment Environment] === #environment
[http://trac.edgewall.org/wiki/DatabaseBackend バックエンドのデータベース] には `UTF-8` でデータ (Wiki ページ, チケット) が保存されます。

添付ファイルはデータベースに格納されません。 Environment の `attachments` ディレクトリ配下に、 URL エンコードされたファイル名で保存されます。ブラウザが URL エンコードに `UTF-8` を使用していない場合、ファイル名が文字化けすることがあります。また、ファイル名に日本語を使用すると 1 文字あたり 9 バイトに展開されるので、日本語 20 文字程度でファイルシステムが許容するファイル名の長さの上限に達してしまうので注意してください。

[wiki:TracIni trac.ini ファイル] 他、Environment に配置するファイル ([wiki:TracInterfaceCustomization カスタムテンプレート] や、 [wiki:WikiMacros Wiki マクロ] など) は、 `UTF-8` で作成してください。 `BOM (Byte Order Mark)` が付いていると動かないことがあります。 Windows のメモ帳 (`NOTEPAD.EXE`) で編集しないようにしてください)


=== [wiki:TracBrowser リポジトリブラウザ] === #browser
今のところ Trac が正式に対応している [http://trac.edgewall.org/wiki/VersioningSystemBackend バックエンドのバージョン管理システム] は、 Subversion だけです。 [http://trac.edgewall.org/browser/sandbox Trac Project の開発ブランチ] や [http://trac-hacks.org Trac Hacks] などには、他のバージョン管理システムを使うためのプラグインがありますが、動作状況等未確認です。

バージョン管理下のファイルは、 MIME Viewer という機能で HTML 変換し、リポジトリブラウザに表示されます:
 1. [wiki:TracIni trac.ini ファイル] で `render_unsafe_content` が `false` (デフォルト値) に設定されていれば、安全なファイルだけが Web ページとして表示され、それ以外のファイルはダウンロードへのリンクが表示されます。 `true` に設定されていれば、表示可能な全てのファイルが Web ページとして表示されます。
 2. `svn:mime-type` 属性もしくはファイルのサフィックスが、画像のように表示可能なバイナリファイル形式の場合は、 `<img>` 要素として表示されます。
 3. 表示できないバイナリファイル (`application/octet-stream` 等) の場合は、ダウンロードへのリンクが表示されます。
 4. バイナリファイルと判別されない場合、テキストを HTML に整形します。
   1. ファイルに設定された `svn:mime-type` 属性が `text/html; charset=utf-8` のように `charset=` を含む場合は、その文字コードでファイルを読み込みます。
   2. ファイルに `BOM (Byte Order Mark)` が付いていれば、適切な `UTF` でファイルを読み込みます。
   3. ファイル個別に判定できない場合は、 [wiki:TracIni trac.ini ファイル] の `[trac]` セクション `default_charset` オプションに指定された文字コードでファイルを読み込みます。このコンフィグの初期値は、 `cp932` (日本語版 Windows で通常使われている文字コード。オリジナル配布物では `iso-8859-15` である箇所にパッチしています) なので、 `UTF-8` や `EUC-JP` などの文字コードを使用する場合は、同コンフィグを変更してください。

Python 2.3 配布には、日本語だけで使用されている文字コード(`cp932`, `shift_jis`, `euc-jp` など) の codec が含まれていません。これらの文字コードを使用したい場合は、別途 [http://www.python.jp/Zope/download/JapaneseCodecs JapaneseCodecs] をインストールする必要があります。 Python 2.4 配布では、 !JapaneseCodecs が同梱されています。

Vista 文字を含む Shift_JIS のファイルは `cp932` では変換に失敗することがあります。この場合 `default_charset` 等には `shift_jis_2004` を使用すると改善する可能性が高いです。OS や Python のバージョン、ビルド時のオプションに依存する箇所なので、 100% ということはありません。

=== 添付ファイル === #attachment
添付ファイル表示もバージョン管理下のファイルと同じく、 MIME Viewer が行います。

ただし添付ファイルでは、 (`svn:mime-type` 属性のような) ファイル毎の文字コード指定はできないので、 `BOM` による `UTF` の判別ができなければ、 `default_charset` に指定した文字コードに固定されます。


=== [wiki:TracAdmin コンソール] === #console
[wiki:TracAdmin trac-admin コマンド] の入出力では、使用するコンソールの文字コードが自動判別されます。 ([http://trac.edgewall.org/milestone/0.10 0.10] 以降)


=== [wiki:TracNotification メール通知] === #notification
Trac が送信するメールは `UTF-8` が `Base64` か `quoted-printable` で 7bit-safe な形式にエンコードされています。MUA がこれらのエンコードに対応していない場合、文字化けする可能性があります。 (See: TracNotification)


----
== Trac の L10N 対応状況 == #tracl10n
オリジナル配布ではユーザ入力以外の表示メッセージは全て英語です。これを日本語化した手順を記述します。


=== コンテンツ === #contents
入力内容はオリジナル配布物でも日本語を使用できます。 [#traci18n 前項] の通りです。日本語化作業で変更した点はありません。

チケット属性について付記します。


==== チケット属性名 ==== #fieldnames
チケット属性の名前は、ほとんどの画面で何もしなくても日本語の属性名が表示されるようになっています。例外は TracReports の検索結果画面です。レポートの検索結果画面でのチケット属性の列名は、検索に使用した SQL の列名がそのまま表示されます。ですので SQL の SELECT 句で `AS` を挿入すれば、列名を日本語化することが出来ます。 0.11 以降、デフォルトのレポートのカラム名は日本語に変更しました。アップグレードした Environment で日本語のレポートを使用したい場合は、 TracReports を参考に変更してください。


==== チケット属性の値 ==== #fieldvalues
チケット属性の値は、データベースにそのまま保存されます。データベースには `UTF-8` であれば保存できるので、リストボックス形式の属性は [wiki:TracAdmin trac-admin コマンド] で日本語に変更可能です。たとえば分類のデフォルトは `defect`, `task`, `enhancement` ですが `不具合`, `タスク`, `機能追加` のように日本語に変更することができます。とは言え、プロジェクト毎に必要となる用語は異なるでしょうから、 Trac-ja では翻訳対象としていません。

0.11 から TracWorkflow が導入され、チケットのステータス (`Status`) も日本語化できるようになりましたが、同じ理由で Trac-ja では翻訳対象としていません。また `new` と `closed` のステータスは依然ハードコードされており、日本語化すると動作に不具合が起きます。ワークフローを変更するときは、チケットの初期ステータスは `new` に、終了ステータスは `closed` にするようにしてください。

アップグレードした Environment でワークフローを変更する場合、 `trac.ini` ファイルを変更しても、すでに存在するチケットのステータスは書き変わらないことにも注意してください。


=== テンプレート === #templates
0.11 からテンプレートエンジンが !ClearSilver から [http://genshi.edgewall.org/ Genshi] に変更され、一部のテキストについては `gettext` での多地域化を前提に実装されるようになりました。しかし、カタログ抽出や表示言語セレクタとなるコンポーネントである [http://babel.edgewall.org/ Babel] の組み込みは、次のメジャーリリースである 0.12 に持ち越されており、ローカライズ対応は開発途中の状態です。

このような背景もあり、以下の要領で翻訳を行いました:
 1. Babel は開発中であるため、依存関係を構築しない。
 2. Babel を使用しないと Pyhton コード以外の箇所からカタログ抽出できないため、 `gettext` も使用しない。単純なディクショナリを使用する。
 3. `gettext-marker` が付いていないメッセージのうち、単純ものは `gettext-marker` を付与して dictionary で日本語化する。
 4. HTML タグがネストしていたり、同じ単語でも使用している意味が違っていたり、分割メッセージを組み立てて表示している複雑なメッセージは翻訳を直接パッチする。

`trac/util/translation.py` のディクショナリを変更すれば、表示メッセージを変更することができます。


=== Wiki ページ === #wiki
Wiki ページとして同梱されているオンラインマニュアルは、 `trac/wiki/default-pages` ディレクトリにあるファイルを翻訳すれば地域化することが出来ます。

0.11 から Wiki ページ単体でもオリジナル配布物に使用できるように、翻訳方法を変更しました。 Trac-ja から Wiki ページだけを使いたい場合、 `trac-0.xx.x-ja-x.zip` を展開し [wiki:TracAdmin trac-admin コマンド] で、 `wiki import` してください。

また、 [http://trac.edgewall.org/milestone/0.12 0.12] では [http://trac.edgewall.org/wiki/TracDev/Proposals/NewHelp 新しいヘルプシステム] が予定されています。


----
== Trac のバグ == #bugs
Trac-0.11 のオリジナル配布に存在するバグについて記載しておきます。


=== Trac-ja で修正しているバグ === #fixedbugs
日本語環境で Trac を使用するために必要な、最小限のパッチを行っています。

 * `LC_TIME` にマルチバイト文字が含まれるロケールを使用すると、タイムラインやマイルストーンでの日付入力がエラーになる。 (See: [http://trac.edgewall.org/ticket/2182 #2182])[[BR]]
   地域化ライブラリ [http://babel.edgewall.org/ Babel] での解決が [http://trac.edgewall.org/milestone/0.12 0.12] で予定されていますが、現時点では開発バージョンも含めて対応されていません。[[BR]]
   日付が入力できないと実用上の問題が大きいので、デフォルトの日付書式を `%x %X` から `%Y/%m/%d %H:%M:%S` に変更しています。
 * ~~Option のドキュメントに非 ASCII 文字が含まれていると `UnicodeDecodeError` が発生する。
   Trac-0.11.1.ja2 までのリリースでは Option のドキュメント文字列そのものを unicode 化して対応していましたが、 pydoc などの出力で異常が発生するなどの副作用があったため、本体へのパッチに切り替えました。~~
   Trac-0.11.3 で変更が本家に取り込まれました。
   この対応によって `IniAdminPlugin`, `xmlrpcplugin` などにも影響が出ます。 (See: [http://trac-hacks.org/ticket/4179 trachacks:#4179])
 * リポジトリブラウザからの Zip 形式ダウンロードを行うと、アーカイブに含まれるファイルのタイムスタンプが UTC 時間になる。

=== 修正していないバグ === #availablebugs
これらのバグは、今後のオリジナル配布物のリリースや、 Trac-ja のリリースで解消されるかもしれませんが、現状では修正されていません。

 * InterTrac で `diff:` リンクを使用すると、リモートサイトでエラーになる。
 * カスタムクエリで表示項目に説明 (`description`) や、複数行テキスト (`textarea`) のカスタムフィールドを含めても、 CSV や TSV の出力には含まれない。
 * ~~例外クラスをログの出力に含めると、 unicode 変換のエラーが発生する。~~
   [[BR]]→ Trac-0.11.3 で対応されました。例外クラスを unicode 文字列に変換する専用ユーティリティ `trac.util.text.exception_to_unicode` が追加されていますので、プラグイン等で例外をログ出力する場合は、これを使用するようにして下さい。


----
== セキュリティ上の注意点 == #security
Trac を使用する上でのセキュリティ上の注意点です。


=== [wiki:WikiMacros Wiki マクロ] の導入 === #macros
[wiki:WikiMacros Wiki マクロ] では、受け取った引数を表示に含める場合、サニタイズを行わないと脆弱性の原因になります。

サニタイズの実施は各マクロで行う必要があります。 Trac および Trac-ja の配布に含まれるマクロではサニタイズが行われていますが、マクロを自作する場合や、 [http://trac-hacks.org/ Trac Hacks] 等からマクロを導入する際には、各自で確認してから使用するようにしてください。


=== コメント Spam 対策 === #spam
Trac を標的にしたコメント Spam が発生しています。

Public に公開する Trac では [wiki:TracPermissions パーミッション] を適切に設定したり、 [http://trac.edgewall.org/wiki/SpamFilter Trac Project の Wiki ページ] を参考に [http://trac.edgewall.org/browser/sandbox/spam-filter SpamFilter] を導入するなど、対策を怠らないようにしてください。


----
See also: TracInstall, TracUpgrade
