/**
  * Loads the message translation for the specified language and category or returns null if file doesn't exist.
  *
  * @param string $messageFile path to message file
  * @param string $category the message category
  * @return array|null array of messages or null if file not found
  */
 protected function loadMessagesFromFile($messageFile, $category)
 {
     if (is_file($messageFile)) {
         if ($this->useMoFile) {
             $gettextFile = new GettextMoFile(['useBigEndian' => $this->useBigEndian]);
         } else {
             $gettextFile = new GettextPoFile();
         }
         $messages = $gettextFile->load($messageFile, $category);
         if (!is_array($messages)) {
             $messages = [];
         }
         return $messages;
     } else {
         return null;
     }
 }
 /**
  * Writes messages into POT file
  *
  * @param array $messages
  * @param string $dirName name of the directory to write to
  * @param string $catalog message catalog
  * @since 2.0.6
  */
 protected function saveMessagesToPOT($messages, $dirName, $catalog)
 {
     $file = str_replace("\\", '/', "{$dirName}/{$catalog}.pot");
     FileHelper::createDirectory(dirname($file));
     $this->stdout("Saving messages to {$file}...\n");
     $poFile = new GettextPoFile();
     $merged = [];
     $hasSomethingToWrite = false;
     foreach ($messages as $category => $msgs) {
         $msgs = array_values(array_unique($msgs));
         sort($msgs);
         foreach ($msgs as $message) {
             $merged[$category . chr(4) . $message] = '';
         }
         ksort($merged);
         $this->stdout("Category \"{$category}\" merged.\n");
         $hasSomethingToWrite = true;
     }
     if ($hasSomethingToWrite) {
         $poFile->save($file, $merged);
         $this->stdout("Translation saved.\n", Console::FG_GREEN);
     } else {
         $this->stdout("Nothing to save.\n", Console::FG_GREEN);
     }
 }