多言語対応:ソースコード修正に関するメモ

提供:MoodleDocs
2007年12月26日 (水) 11:30時点におけるTatsuya Shirai (トーク | 投稿記録)による版
移動先:案内検索

 いくつかの代表的なコードを挙げていきましょう.

ブラウザの種別を判別する 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);
}

このように使うようです.

姓と名の並び順の判別

  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');

と指定するべきである(とのことです).


多言語対応トップに戻る