国際化/事例
をテンプレートにして作成
[
トップ
] [
新規
|
一覧
|
検索
|
最終更新
|
ヘルプ
|
ログイン
]
開始行:
#contents
PukiWiki を使った国際化サイトの作り方のヒントを事例を踏ま...
by [[toydev]]
*前提 [#p6729ab4]
誰でも書き込みができるいわゆる Wiki としてではなく、単純...
書き込みをする人は管理者一人だけであり、全体のコントロー...
*概要 [#t394187b]
-最小限の設定変更だけで UI とコンテンツの表示言語を制御し...
-''各言語のコンテンツは独立します。''例えばページ一覧には...
-''表示言語の決定ルールは任意です。''事例では URL のサブ...
-以上を最小構成とし、発展のヒントは補足として紹介します。...
*具体的な設定変更内容 [#kb4f41f2]
必要な設定変更は2つだけです。
-言語決定ルールに従って LANG 定数を動的に設定する。
-LANG 定数によって読み込むデータを動的に設定する。
それぞれについて説明します。
**言語決定ルールに従って LANG 定数を動的に設定する。 [#g9...
LANG 定数の定義は pukiWiki.ini.php にあり、デフォルトの定...
/////////////////////////////////////////////////
// Language / Encoding settings
// LANG - Internal content encoding ('en', 'ja', or ...)
define('LANG', 'ja');
以上の設定を元に読み込まれる ja.lng.php と en.lng.php が...
対応言語を増やしたい場合は xx.lng.php の設定を追加します。
(追加しますと簡単に書きましたが、標準では ja と en しか...
何らかのルールに従って LANG の値を動的に設定するだけで UI...
例えばサブメイン(jp.xxx.yyy の先頭の jp の部分)によって...
/////////////////////////////////////////////////
// Language / Encoding settings
// LANG - Internal content encoding ('en', 'ja', or ...)
define('LANG', current(explode('.', $_SERVER['HTTP_HOST'...
これはあくまで一例です。多言語サイトの URL 構成にはいくつ...
「多地域、多言語のサイト」で Google 検索してヒットする「S...
参考サイトの説明によると URL 構成は4つに大別されます。
以下にそれぞれごとの対応可否をまとめます。
|URL 構造|例|対応可否/補足説明|h
|国別|example.ie|容易に対応可能。国別のドメインをそれぞれ...
|gTLD を使用したサブドメイン|de.example.com|容易に対応可...
|gTLD を使用したサブディレクトリ|example.com/de/|容易に対...
|URL パラメータ|site.com?loc=de|実現困難。ページ内リンク...
**LANG 定数によって読み込むデータを動的に設定する。 [#be7...
pukiwiki.ini.php に wiki, diff, backup, cache, attach, co...
それらの定数設定に LANG を組み込みます。以下、設定事例で...
// You may hide these directories (from web browsers)
// by setting DATA_HOME at index.php.
define('DATA_DIR', DATA_HOME . LANG . '/wiki/' ); // Lat...
define('DIFF_DIR', DATA_HOME . LANG . '/diff/' ); // Lat...
define('BACKUP_DIR', DATA_HOME . LANG . '/backup/' ); //...
define('CACHE_DIR', DATA_HOME . LANG . '/cache/' ); // S...
define('UPLOAD_DIR', DATA_HOME . LANG . '/attach/' ); //...
define('COUNTER_DIR', DATA_HOME . LANG . '/counter/' ); ...
ポイントは、読み込みの起点を ''DATA_HOME . LANG'' にして...
これだけでも大丈夫ですが index.php にある DATA_HOME の設...
define('DATA_HOME', 'data/');
以上の設定変更を行った場合のディレクトリ構成は以下の通り...
-PukiWiki 本体
--data(コンテンツの起点)
---ja(日本語コンテンツの起点)
---en(英語コンテンツの起点)
ja と en にはそれぞれ wiki, diff, backup, cache, attach, ...
対応言語を増やしたい場合は、ディレクトリを追加します。
*補足 [#b4e5dbdb]
以上の設定で国際化サイトの最小構成ができあがりですが、こ...
PukiWiki 本体の改造は最小限にすることを念頭に置いて考えて...
**ドメインによる言語判定をローカル環境で動作させる [#z08d...
開発中にローカル環境で国別やサブドメインによる言語判定実...
localhost や 127.0.0.1 のアクセスでは正常動作しないので h...
ja.local.xxx.yyy 127.0.0.1
en.local.xxx.yyy 127.0.0.1
これでローカルのサーバに ja.local.xxx.yyy や en.local.xxx...
壊せる環境で色々いじりましょう。
**interwiki によるサイト間リンク [#h486abe7]
interwiki を使うと言語別サイトのページ間リンクを wiki で...
例えば InterWikiName ページに各言語別サイトへの interwiki...
※リンク文字列をこの Wiki に書き込めないので意図的に http...
-[http///ja.xxx.yyy/index.php?$1 ja] utf8
-[http///en.xxx.yyy/index.php?$1 en] utf8
すると wiki 内で別言語サイトリンクが以下のように書けるよ...
[[日本語のページへのリンク>ja:PageName]]
[[英語のページへのリンク>en:PageName]]
対応言語を増やす場合は、設定を追加して対応します。
**URL の統一 [#je350902]
PukiWiki はページ名がそのまま URL になります。言語によっ...
言語に関わらず URL を統一するにはページ名とは別にタイトル...
title.inc.php で検索すればページ内でプラグインを呼び出し...
好きなのを使ってください。
**言語制御系のカスタムプラグインの製作 [#o79b0fe1]
より柔軟に言語制御を行うためにプラグインを自作する方法が...
例えば以下のようなことがしたいといった場合はプラグインを...
-言語切り替えリンク
--画面上部のヘッダーに別言語の同一ページへのリンクを張り...
-自動 alternate 出力プラグイン
--言語別のページがある場合は、その存在を関連付けるために ...
作ったプラグインをスキンに埋め込むことで全ページに一括反...
要件によって欲しい機能というのは変わってくると思うので、...
-対応言語を列挙する方法
-現在の言語を判定する方法
-指定言語のページ存在判定をする方法
***対応言語を列挙する方法 [#u83b96b0]
サイトの対応言語を判断する方法は2つ考え方があります。
-DATA_HOME 配下のディレクトリ名を対応言語として自動判断す...
-pukiwiki.ini.php 等で手動定義する方法
最初の方法を実現するには例えば以下のような関数を用意しま...
function get_support_languages() {
$result = array();
$excludes = array(".", "..");
$dp = @opendir(DATA_HOME) or die_message(DATA_HOME . ' ...
while ($directory = readdir($dp)) {
if (is_dir(DATA_HOME . $directory) && ! in_array($dire...
$result[] = $directory;
}
}
closedir($dp);
return $result;
}
置き場所は lib/i18n.php 等にして lib/pukiwiki.php に requ...
自動判定は楽ですが、言語に恣意的な順序性を設けることが得...
例えば日本語→英語といった順序で画面の表示を統一したい場合...
$support_languages = array("ja", "en");
対応言語の判定方式が変わかもしれないことを見越して、2番...
function get_support_languages() {
global $support_languages;
return $support_languages;
}
以上の関数を使って対応言語を取得し、プラグイン内で foreac...
function plugin_xxx_inline() {
// ...
$support_languages = get_support_languages();
foreach ($support_languages as $lang) {
// 言語ごとの何らかの処理
}
// ...
}
***現在の言語を判定する方法 [#n278b70c]
現在表示されているページの言語は LANG 定数で判断できます。
現在表示中の言語に対して特別な処理を行いたい場合は、対応...
例えば現在表示中の言語を強調表示したり、処理対象から除外...
実装を以下に例示します。
function plugin_xxx_inline() {
// ...
$support_languages = get_support_languages();
foreach ($support_languages as $lang) {
if ($lang === LANG) {
// 現在表示中の言語に対する処理
} else {
// それ以外の言語に対する処理
}
}
// ...
}
***指定言語のページ存在判定をする方法 [#nedfff50]
ページの存在判定をするには、ディレクトリ構成およびファイ...
今回は wiki ファイルの配置場所である DATA_DIR の設定が以...
define('DATA_DIR', DATA_HOME . LANG . '/wiki/' );
言語毎のページの存在判定は、言語毎のディレクトリにファイ...
PukiWiki 標準の is_page / get_filename を真似して国際化対...
function is_page_i18n($page, $lang) {
return file_exists(get_filename_i18n($page, $lang));
}
function get_filename_i18n($page, $lang) {
return DATA_HOME . $lang . '/wiki/' . encode($page) . '...
}
以上の関数を使えば指定言語のページの存在判定が簡単にでき...
- これは大作ですね。多言語コンテンツについてここまで考え...
- [[PukiWiki/国際化]]にあるようなページの命名規則でやって...
#comment
終了行:
#contents
PukiWiki を使った国際化サイトの作り方のヒントを事例を踏ま...
by [[toydev]]
*前提 [#p6729ab4]
誰でも書き込みができるいわゆる Wiki としてではなく、単純...
書き込みをする人は管理者一人だけであり、全体のコントロー...
*概要 [#t394187b]
-最小限の設定変更だけで UI とコンテンツの表示言語を制御し...
-''各言語のコンテンツは独立します。''例えばページ一覧には...
-''表示言語の決定ルールは任意です。''事例では URL のサブ...
-以上を最小構成とし、発展のヒントは補足として紹介します。...
*具体的な設定変更内容 [#kb4f41f2]
必要な設定変更は2つだけです。
-言語決定ルールに従って LANG 定数を動的に設定する。
-LANG 定数によって読み込むデータを動的に設定する。
それぞれについて説明します。
**言語決定ルールに従って LANG 定数を動的に設定する。 [#g9...
LANG 定数の定義は pukiWiki.ini.php にあり、デフォルトの定...
/////////////////////////////////////////////////
// Language / Encoding settings
// LANG - Internal content encoding ('en', 'ja', or ...)
define('LANG', 'ja');
以上の設定を元に読み込まれる ja.lng.php と en.lng.php が...
対応言語を増やしたい場合は xx.lng.php の設定を追加します。
(追加しますと簡単に書きましたが、標準では ja と en しか...
何らかのルールに従って LANG の値を動的に設定するだけで UI...
例えばサブメイン(jp.xxx.yyy の先頭の jp の部分)によって...
/////////////////////////////////////////////////
// Language / Encoding settings
// LANG - Internal content encoding ('en', 'ja', or ...)
define('LANG', current(explode('.', $_SERVER['HTTP_HOST'...
これはあくまで一例です。多言語サイトの URL 構成にはいくつ...
「多地域、多言語のサイト」で Google 検索してヒットする「S...
参考サイトの説明によると URL 構成は4つに大別されます。
以下にそれぞれごとの対応可否をまとめます。
|URL 構造|例|対応可否/補足説明|h
|国別|example.ie|容易に対応可能。国別のドメインをそれぞれ...
|gTLD を使用したサブドメイン|de.example.com|容易に対応可...
|gTLD を使用したサブディレクトリ|example.com/de/|容易に対...
|URL パラメータ|site.com?loc=de|実現困難。ページ内リンク...
**LANG 定数によって読み込むデータを動的に設定する。 [#be7...
pukiwiki.ini.php に wiki, diff, backup, cache, attach, co...
それらの定数設定に LANG を組み込みます。以下、設定事例で...
// You may hide these directories (from web browsers)
// by setting DATA_HOME at index.php.
define('DATA_DIR', DATA_HOME . LANG . '/wiki/' ); // Lat...
define('DIFF_DIR', DATA_HOME . LANG . '/diff/' ); // Lat...
define('BACKUP_DIR', DATA_HOME . LANG . '/backup/' ); //...
define('CACHE_DIR', DATA_HOME . LANG . '/cache/' ); // S...
define('UPLOAD_DIR', DATA_HOME . LANG . '/attach/' ); //...
define('COUNTER_DIR', DATA_HOME . LANG . '/counter/' ); ...
ポイントは、読み込みの起点を ''DATA_HOME . LANG'' にして...
これだけでも大丈夫ですが index.php にある DATA_HOME の設...
define('DATA_HOME', 'data/');
以上の設定変更を行った場合のディレクトリ構成は以下の通り...
-PukiWiki 本体
--data(コンテンツの起点)
---ja(日本語コンテンツの起点)
---en(英語コンテンツの起点)
ja と en にはそれぞれ wiki, diff, backup, cache, attach, ...
対応言語を増やしたい場合は、ディレクトリを追加します。
*補足 [#b4e5dbdb]
以上の設定で国際化サイトの最小構成ができあがりですが、こ...
PukiWiki 本体の改造は最小限にすることを念頭に置いて考えて...
**ドメインによる言語判定をローカル環境で動作させる [#z08d...
開発中にローカル環境で国別やサブドメインによる言語判定実...
localhost や 127.0.0.1 のアクセスでは正常動作しないので h...
ja.local.xxx.yyy 127.0.0.1
en.local.xxx.yyy 127.0.0.1
これでローカルのサーバに ja.local.xxx.yyy や en.local.xxx...
壊せる環境で色々いじりましょう。
**interwiki によるサイト間リンク [#h486abe7]
interwiki を使うと言語別サイトのページ間リンクを wiki で...
例えば InterWikiName ページに各言語別サイトへの interwiki...
※リンク文字列をこの Wiki に書き込めないので意図的に http...
-[http///ja.xxx.yyy/index.php?$1 ja] utf8
-[http///en.xxx.yyy/index.php?$1 en] utf8
すると wiki 内で別言語サイトリンクが以下のように書けるよ...
[[日本語のページへのリンク>ja:PageName]]
[[英語のページへのリンク>en:PageName]]
対応言語を増やす場合は、設定を追加して対応します。
**URL の統一 [#je350902]
PukiWiki はページ名がそのまま URL になります。言語によっ...
言語に関わらず URL を統一するにはページ名とは別にタイトル...
title.inc.php で検索すればページ内でプラグインを呼び出し...
好きなのを使ってください。
**言語制御系のカスタムプラグインの製作 [#o79b0fe1]
より柔軟に言語制御を行うためにプラグインを自作する方法が...
例えば以下のようなことがしたいといった場合はプラグインを...
-言語切り替えリンク
--画面上部のヘッダーに別言語の同一ページへのリンクを張り...
-自動 alternate 出力プラグイン
--言語別のページがある場合は、その存在を関連付けるために ...
作ったプラグインをスキンに埋め込むことで全ページに一括反...
要件によって欲しい機能というのは変わってくると思うので、...
-対応言語を列挙する方法
-現在の言語を判定する方法
-指定言語のページ存在判定をする方法
***対応言語を列挙する方法 [#u83b96b0]
サイトの対応言語を判断する方法は2つ考え方があります。
-DATA_HOME 配下のディレクトリ名を対応言語として自動判断す...
-pukiwiki.ini.php 等で手動定義する方法
最初の方法を実現するには例えば以下のような関数を用意しま...
function get_support_languages() {
$result = array();
$excludes = array(".", "..");
$dp = @opendir(DATA_HOME) or die_message(DATA_HOME . ' ...
while ($directory = readdir($dp)) {
if (is_dir(DATA_HOME . $directory) && ! in_array($dire...
$result[] = $directory;
}
}
closedir($dp);
return $result;
}
置き場所は lib/i18n.php 等にして lib/pukiwiki.php に requ...
自動判定は楽ですが、言語に恣意的な順序性を設けることが得...
例えば日本語→英語といった順序で画面の表示を統一したい場合...
$support_languages = array("ja", "en");
対応言語の判定方式が変わかもしれないことを見越して、2番...
function get_support_languages() {
global $support_languages;
return $support_languages;
}
以上の関数を使って対応言語を取得し、プラグイン内で foreac...
function plugin_xxx_inline() {
// ...
$support_languages = get_support_languages();
foreach ($support_languages as $lang) {
// 言語ごとの何らかの処理
}
// ...
}
***現在の言語を判定する方法 [#n278b70c]
現在表示されているページの言語は LANG 定数で判断できます。
現在表示中の言語に対して特別な処理を行いたい場合は、対応...
例えば現在表示中の言語を強調表示したり、処理対象から除外...
実装を以下に例示します。
function plugin_xxx_inline() {
// ...
$support_languages = get_support_languages();
foreach ($support_languages as $lang) {
if ($lang === LANG) {
// 現在表示中の言語に対する処理
} else {
// それ以外の言語に対する処理
}
}
// ...
}
***指定言語のページ存在判定をする方法 [#nedfff50]
ページの存在判定をするには、ディレクトリ構成およびファイ...
今回は wiki ファイルの配置場所である DATA_DIR の設定が以...
define('DATA_DIR', DATA_HOME . LANG . '/wiki/' );
言語毎のページの存在判定は、言語毎のディレクトリにファイ...
PukiWiki 標準の is_page / get_filename を真似して国際化対...
function is_page_i18n($page, $lang) {
return file_exists(get_filename_i18n($page, $lang));
}
function get_filename_i18n($page, $lang) {
return DATA_HOME . $lang . '/wiki/' . encode($page) . '...
}
以上の関数を使えば指定言語のページの存在判定が簡単にでき...
- これは大作ですね。多言語コンテンツについてここまで考え...
- [[PukiWiki/国際化]]にあるようなページの命名規則でやって...
#comment
ページ名: