/** * poファイルからmoファイルを作成する * @param string $po_filename 読み込むpoファイルのパス * @param string $mo_filename 出力するmoファイルのパス * @return string output path */ public static function generate_mo($po_filename, $mo_filename = null) { if (!is_file($po_filename)) { throw new InvalidArgumentException($po_filename . ": No such file"); } $file = new File($po_filename); $output_path = empty($mo_filename) ? $file->directory() . $file->oname() . ".mo" : $mo_filename; $po_list = self::po_read($po_filename); $count = sizeof($po_list); $ids = implode("", array_keys($po_list)) . ""; $keyoffset = 28 + 16 * $count; $valueoffset = $keyoffset + strlen($ids); $value_src = ""; $output_src = pack('Lllllll', 0x950412de, 0, $count, 28, 28 + $count * 8, 0, 0); $output_values = array(); foreach ($po_list as $id => $values) { $len = strlen($id); $output_src .= pack("l", $len); $output_src .= pack("l", $keyoffset); $keyoffset += $len + 1; $value = implode("", $values); $len = strlen($value); $value_src .= pack("l", $len); $value_src .= pack("l", $valueoffset); $valueoffset += $len + 1; $output_values[] = $value; } $output_src .= $value_src; $output_src .= $ids; $output_src .= implode("", $output_values) . ""; File::write($output_path, $output_src); return $output_path; }