/**
  * Given an array, return a list of plain keys and values
  *
  * @param array  $translations Translations
  * @param string $language     Language
  * @param array  $data         Data
  * @param array  $structure    Structure
  * @param string $prefix       Prefix value
  */
 private static function createPlainRepresentationByArray(array &$translations, $language, array $data, array $structure, $prefix)
 {
     foreach ($data as $key => $value) {
         $currentStructure = $structure;
         if (is_array($value)) {
             $emptyArray = [];
             self::appendValueIntoStructure($currentStructure, $key, $emptyArray);
             self::createPlainRepresentationByArray($translations, $language, $value, $currentStructure, $prefix . '.' . $key);
         } else {
             $builtKey = trim($prefix . '.' . $key, '.');
             $translation = Translation::create($builtKey, $value, $language);
             self::appendValueIntoStructure($currentStructure, $key, $value);
             $translation->setStructure($currentStructure);
             $translations[] = $translation;
         }
     }
 }
 /**
  * Get random Translation
  *
  * @param array $domains   Domains
  * @param array $languages Languages
  *
  * @return Translation Random translation
  *
  * @throws Exception You cannot search missing translations by master language
  */
 public function getRandomMissingTranslation(array $domains = [], array $languages = [])
 {
     if (in_array($this->masterLanguage, $languages)) {
         throw new Exception('You cannot search by master language missing translations');
     }
     $candidates = [];
     $masterKeys = $this->getKeys($domains, [$this->masterLanguage]);
     $languages = $languages ?: $this->getAvailableLanguages();
     foreach ($languages as $language) {
         $languageKeys = $this->getKeys($domains, [$language]);
         $missingKeys = array_diff($masterKeys, $languageKeys);
         foreach ($missingKeys as $missingKey) {
             $candidates[] = ['language' => $language, 'key' => $missingKey];
         }
     }
     if (empty($candidates)) {
         return false;
     }
     $candidateKey = array_rand($candidates);
     $candidate = $candidates[$candidateKey];
     $masterCandidate = $this->getTranslation($this->masterLanguage, $candidate['key']);
     $candidateTranslation = Translation::create($candidate['key'], null, $candidate['language']);
     $candidateTranslation->setStructure($masterCandidate->getStructure())->setMasterTranslation($masterCandidate);
     return $candidateTranslation;
 }