Example #1
0
 /**
  * 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;
 }