Stevebauman\Translation\Translation::firstOrCreateTranslation PHP Method

firstOrCreateTranslation() protected method

Creates a translation.
protected firstOrCreateTranslation ( Model $locale, string $text, Model $parentTranslation = null ) : Model
$locale Illuminate\Database\Eloquent\Model
$text string
$parentTranslation Illuminate\Database\Eloquent\Model
return Illuminate\Database\Eloquent\Model
    protected function firstOrCreateTranslation(Model $locale, $text, $parentTranslation = null)
    {
        // We'll check to see if there's a cached translation
        // first before we try and hit the database.
        $cachedTranslation = $this->getCacheTranslation($locale, $text);
        if ($cachedTranslation instanceof Model) {
            return $cachedTranslation;
        }
        // Check if auto translation is enabled. If so we'll run
        // the text through google translate and
        // save it, then cache it.
        if ($parentTranslation && $this->autoTranslateEnabled()) {
            $this->client->setSource($parentTranslation->locale->code);
            $this->client->setTarget($locale->code);
            try {
                $text = $this->client->translate($text);
            } catch (ErrorException $e) {
                // Request to translate failed, set the text
                // to the parent translation.
                $text = $parentTranslation->translation;
            } catch (UnexpectedValueException $e) {
                // Looks like something other than text was passed in,
                // we'll set the text to the parent translation
                // for this exception as well.
                $text = $parentTranslation->translation;
            }
        }
        if ($parentTranslation) {
            // If a parent translation is given we're looking for it's child translation.
            $translation = $this->translationModel->firstOrNew([$locale->getForeignKey() => $locale->getKey(), $this->translationModel->getForeignKey() => $parentTranslation->getKey()]);
        } else {
            // Otherwise we're creating the parent translation.
            $translation = $this->translationModel->firstOrNew([$locale->getForeignKey() => $locale->getKey(), 'translation' => $text]);
        }
        if (empty($translation->getAttribute('translation'))) {
            // We need to make sure we don't overwrite the translation
            // if it exists already in case it was modified.
            $translation->setAttribute('translation', $text);
        }
        if ($translation->isDirty()) {
            $translation->save();
        }
        // Cache the translation so it's retrieved faster next time
        $this->setCacheTranslation($translation);
        return $translation;
    }