[], 'translated' => null, ]; $messages = []; $item = $defaults; $flags = []; while ($line = fgets($stream)) { $line = trim($line); if ('' === $line) { // Whitespace indicated current item is done if (!\in_array('fuzzy', $flags)) { $this->addMessage($messages, $item); } $item = $defaults; $flags = []; } elseif ('#,' === substr($line, 0, 2)) { $flags = array_map('trim', explode(',', substr($line, 2))); } elseif ('msgid "' === substr($line, 0, 7)) { // We start a new msg so save previous // TODO: this fails when comments or contexts are added $this->addMessage($messages, $item); $item = $defaults; $item['ids']['singular'] = substr($line, 7, -1); } elseif ('msgstr "' === substr($line, 0, 8)) { $item['translated'] = substr($line, 8, -1); } elseif ('"' === $line[0]) { $continues = isset($item['translated']) ? 'translated' : 'ids'; if (\is_array($item[$continues])) { end($item[$continues]); $item[$continues][key($item[$continues])] .= substr($line, 1, -1); } else { $item[$continues] .= substr($line, 1, -1); } } elseif ('msgid_plural "' === substr($line, 0, 14)) { $item['ids']['plural'] = substr($line, 14, -1); } elseif ('msgstr[' === substr($line, 0, 7)) { $size = strpos($line, ']'); $item['translated'][(int) substr($line, 7, 1)] = substr($line, $size + 3, -1); } } // save last item if (!\in_array('fuzzy', $flags)) { $this->addMessage($messages, $item); } fclose($stream); return $messages; } /** * Save a translation item to the messages. * * A .po file could contain by error missing plural indexes. We need to * fix these before saving them. */ private function addMessage(array &$messages, array $item) { if (!empty($item['ids']['singular'])) { $id = stripcslashes($item['ids']['singular']); if (isset($item['ids']['plural'])) { $id .= '|'.stripcslashes($item['ids']['plural']); } $translated = (array) $item['translated']; // PO are by definition indexed so sort by index. ksort($translated); // Make sure every index is filled. end($translated); $count = key($translated); // Fill missing spots with '-'. $empties = array_fill(0, $count + 1, '-'); $translated += $empties; ksort($translated); $messages[$id] = stripcslashes(implode('|', $translated)); } } } __halt_compiler();----SIGNATURE:----MeS7kPsgbMjpURbuv9C/cZlnZufChB6tinTHJTYjabyV+hzSubFXqIy6xKiRlK+pF8UXsOB2pTzasbMUMj8N4q+2daCfe/9CPnj6sz7OGlKF723ntZtvVKB1mP929Q6mzsXJKXZMB5jQmKIFfW8YYbYPfm4y+85ZwwxgX0xzrTQFzFur6Ip5AmAia+NFwjSf/R8t90DET6FXr5vd4GOPNVAs4zhFaniCsjubfVu+wWXjUuUt4HaQztyX1OR1SVxNWLe4raeS8l7AmNHwJPc4dH0U5AvzrH8/oepBMr/pGUUn1B6+n/jL7oG1HeblKrt0En1KXDsQnIOwAMKpBOKzTr2EYD4fGAJq9viXLAZCrzOlRGf3O3+/8yFA8OD90NHbvDOJhcFheziULAhzceYgS3T7Ni6z0QHaNXzL/OUur/ICwo10r4vPLYPPy9Ur4ptnZOpuqNIQvJHObqlItD6fCfAkm1NUi+9NsckGg4psMP1RLcpe19rFZVggym1/u7vSOg1xemEusXGwM9MxNEFQzdbVxDxeztZBWLGBTPXsJfdRg5/tDn/l0i+meUxlZugXudfyJQyAANN8tLkQsfrhmccMD/37ErdAWfmo6kyEr0Ad6IxJKsQD3ASUMjqMrx/qT6wmfv0dbeVW6VjniswVSlFic4HizadsubRQ5+EmphQ=----ATTACHMENT:----Njg4OTgwMjM5NjEyOTExMiA3NjA2OTU3NTQ3MTM0NDMzIDkwNjEwODU2MzYwODQ5MTQ=