多言語対応:ソースコード修正に関するメモ
いくつかの代表的なコードを挙げていきましょう.
ブラウザの種別を判別する check_browser_version()
いまアクセスして来ているクライアントPCのブラウザの種別を判別します.ib/moodlelib.php中で宣言されています.
/** * Checks to see if is a browser matches the specified * brand and is equal or better version. * * @uses $_SERVER * @param string $brand The browser identifier being tested * @param int $version The version of the browser * @return bool true if the given version is below that of the detected browser */ function check_browser_version($brand='MSIE', $version=5.5)
$brandは以下の文字列が許されているようです.
case 'Camino': /// Mozilla Firefox browsers case 'Firefox': /// Mozilla Firefox browsers case 'Gecko': /// Gecko based browsers case 'MSIE': /// Internet Explorer case 'Opera': /// Opera case 'Safari': /// Safari
具体的には,
if (check_browser_version('MSIE')) { $filename = urlencode($filename); }
このように使うようです.
サーバOSの判別
姓と名の並び順の判別
Moodle1.8から”姓”と”名”の並びを設定できるようになりました. さらに(いつの間にか)言語パックの設定に従う設定も加わったようです. 姓と名の並びの判別はプロフィール編集画面や評定のファイルへの出力など色々な場面で必要になります. あまり自信ないが,判定するには,
if ($CFG->fullnamedisplay == 'firstname lastname') {
で良いようです.詳しい方,ヘルプ! もしかして関数が用意されていたりしませんか?
mbstring系の関数に関する注意事項
シフトJISコードを表すのにSJIS-WINを用いる
mb_convert_encoding()関数などで文字コード種別としてシフトJISを指定する際には'CP932'ではなく,'SJIS-WIN'を用いる方が良いらしい.PHP: Multibyte String Functions - Manual[1]に,
Additional note: For the CP932 codemap, use SJIS-WIN instead
と記述されているそうです.
文字コードの種別の指定に'auto'を用いるべきではない
例えば,文字列 $str1 をシフトJISコードに変換するとします.この場合,
$str1 = mb_convert_encoding($str1, 'SJIS-WIN');
あるいは,
$str1 = mb_convert_encoding($str1, 'SJIS-WIN', 'auto');
と記述することで,$str1の元の文字コードが何であるかを意識しないでシフトJISに変換できる.しかし,落とし穴がある.$str1に格納されている文字列データの長さが短い(例えば1文字)の場合に文字コード種別の判別に誤る場合があるらしい.もし,$str1がUTF-8であることが分かっているならば正確に,
$str1 = mb_convert_encoding($str1, 'SJIS-WIN', 'UTF-8');
と記述するべきである(だそうです).
この注意は文字コードの変換だけではなく,例えば文字列の長さを調べるmb_strlen()関数においても,
$length = mb_strlen($str1);
とするのではなく,もし$str1がUTF-8であることが明白であるならば,
$length = mb_strlen($str1, 'UTF-8');
と指定するべきである(とのことです).