言語・i18n
s9yは自国語 (ネイティブランゲージ) の利用において完全に互換性があり、自国語、UTF文字セット、タイムゾーン、実体参照をサポートしています。
同梱された言語 (english, german, danish, czech, french, spanish, 日本語! その他色々) は別として、あなたは簡単に文字列を自国語に翻訳することができます。
もちろん、少なくともあなたが該当言語を読めなければいけませんが :-)
言語ファイルはs9yのlangサブディレクトリの中に保存されています。 各言語ファイルはそのファイル名に印があります: deはドイツ語のためのもの、enは英語のためのファイル、などなど:
- lang/serendipity_lang_en.inc.php: このファイルはSerendipityで使用される各文字列とメッセージ用の定数一覧を保持しています。 また、各国のタイムゾーン、ロケール、日付書式やコードページと文字セット (ISO-88591-1, windows-1252 など) のようないくつかの代表的な変数も定義しています。
もし新規に言語を追加したい場合は、上記ファイルをコピーしてからあなたの言語をプレフィクスとしてファイル名を調整します。
s9yのオランダ語バージョンが欲しいとすると、あなたに必要なファイルはlang/serendipity_lang_nl.inc.phpとなります。
また、あなたの言語ファイルのUTF-8バージョンも必要となり、そのファイルはUTF-8ディレクトリに保存します。
私たちは、新しい言語用に言語ファイルのUTF-8バージョンを作るだけにしようと提案しているところです。
全ての定数をUTF-8で定義し、そのファイルはUTF-8エンコードで保存するのです。
そして、あなたはlangとlang/UTF-8ディレクトリの両方に同じファイルを入れるだけです。
あなたにとってこのUTF-8の儀式が複雑すぎるのなら、翻訳した言語ファイルを単にSerendipityのフォーラムで発表してみてください。
誰かが助けに入ってUTF-8の変換物を作ってくれるでしょう!
では、Serendipityで認識できる新規の言語を作ってみます。
それにはSerendipityのメインディレクトリ内にあるserendipity_config.inc.phpを編集しなければなりません。
何かエディタを使ってこのファイルを開き、$serendipity['languages'] という配列の定義を探してください。
こんな感じになっているはずです:
$serendipity['languages'] = array('en' => 'English',
'de' => 'German',
'da' => 'Danish',
'es' => 'Spanish',
'fr' => 'French',
'fi' => 'Finnish',
'cs' => 'Czech (Win-1250)',
'cz' => 'Czech (ISO-8859-2)',
'nl' => 'Dutch',
'is' => 'Icelandic',
'tr' => 'Turkish',
'se' => 'Swedish',
'pt' => 'Portuguese Brazilian',
'pt_PT' => 'Portuguese European',
'bg' => 'Bulgarian',
'hu' => 'Hungarian',
'no' => 'Norwegian',
'pl' => 'Polish',
'ro' => 'Romanian',
'it' => 'Italian',
'ru' => 'Russian',
'fa' => 'Persian',
'tw' => 'Traditional Chinese (Big5)',
'tn' => 'Traditional Chinese (UTF-8)',
'zh' => 'Simplified Chinese (GB2312)',
'cn' => 'Simplified Chinese (UTF-8)',
'ja' => 'Japanese',
'ko' => 'Korean',
'sa' => 'Arabic',
'ta' => 'Tamil');
さあ、プレフィクスを用いたあなたの新しい言語と言語の名前を配列に追加してみましょう。
これでSerendipityのインターフェイスで新しい言語が選択可能になりました。
あなたの翻訳した言語ファイルを寄稿することも検討してください。
そうすれば全てのユーザーがあなたの取り組みからのメリットを得られます!
日付の書式
Serendipityのバックエンド及びフロントエンドにおける日付の書式は、あたなが選んだ言語に特有のものです。
各言語ファイルは以下のようにPHP定数を定義します:
@define('DATE_FORMAT_ENTRY', '%A, %B %e. %Y');
@define('DATE_FORMAT_SHORT', '%Y-%m-%d %H:%M');
これはそれぞれの言語の「ネイティブ」に見えるデフォルトの日付書式を定義します。 全ての言語は、母国の読者にとって日付がどう見えるようにするべきかそれ自身の優先事項があるので、これは一般的に好ましい書式です。
これらの定数はテンレートファイルであるentries.tplの中で評価されるので、実際のところあなたは、テンプレートを元にした日付の書式で、言語をベースとした日付の書式を上書きできます。 テンプレート中の日付書式はこのようになっています:
{$entry.timestamp|@formatTime:$CONST.DATE_FORMAT_ENTRY}
通常、その定数の内容でエントリの変数のタイムスタンプをフォーマットすることを意味します。 代わりにISO8601形式のタイムスタンプを使用したいと思うなら、以下が利用可能です:
{$entry.timestamp|@formatTime:'%Y-%m-%d %H:%i'}
全ての言語においていつも "2008-10-28 15:00" のような書式にしたいのなら、パラメータは PHPマニュアルの strftime に掲載されています。
さらに、(bulletproofのような) いくつかのテンプレートでは、あなたの好みの (言語ごとに独立した) 日付書式を選べるようにテンプレートの設定項目が提供されています。 これでファイルの編集無しで日付の書式を変更できます。