/** * 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; }