/home/techb158/immovalet.com/platform/plugins/translation/src
Edit: /home/techb158/immovalet.com/platform/plugins/translation/src/Manager.php (8324B)
app = $app;
$this->files = $files;
$this->config = $app['config']['plugins.translation.general'];
}
/**
* @param string $group
* @param string $key
*/
public function missingKey($group, $key)
{
if (!in_array($group, $this->config['exclude_groups'])) {
Translation::firstOrCreate([
'locale' => $this->app['config']['app.locale'],
'group' => $group,
'key' => $key,
]);
}
}
/**
* @param bool $replace
* @return int
*/
public function importTranslations($replace = false)
{
try {
$this->publishLocales();
} catch (Exception $exception) {
info($exception->getMessage());
}
$counter = 0;
foreach ($this->files->directories($this->app['path.lang']) as $langPath) {
$locale = basename($langPath);
foreach ($this->files->allfiles($langPath) as $file) {
$info = pathinfo($file);
$group = $info['filename'];
if (in_array($group, $this->config['exclude_groups'])) {
continue;
}
$subLangPath = str_replace($langPath . DIRECTORY_SEPARATOR, '', $info['dirname']);
$subLangPath = str_replace(DIRECTORY_SEPARATOR, '/', $subLangPath);
$langDirectory = $group;
if ($subLangPath != $langPath) {
$langDirectory = $subLangPath . '/' . $group;
$group = substr($subLangPath, 0, -3) . '/' . $group;
}
$translations = Lang::getLoader()->load($locale, $langDirectory);
if ($translations && is_array($translations)) {
foreach (Arr::dot($translations) as $key => $value) {
$importedTranslation = $this->importTranslation($key, $value,
($locale != 'vendor' ? $locale : substr($subLangPath, -2)), $group, $replace);
$counter += $importedTranslation ? 1 : 0;
}
}
}
}
return $counter;
}
public function publishLocales()
{
$paths = ServiceProvider::pathsToPublish(null, 'cms-lang');
foreach ($paths as $from => $to) {
if ($this->files->isFile($from)) {
if (!$this->files->isDirectory(dirname($to))) {
$this->files->makeDirectory(dirname($to), 0755, true);
}
$this->files->copy($from, $to);
} elseif ($this->files->isDirectory($from)) {
$manager = new MountManager([
'from' => new Flysystem(new LocalAdapter($from)),
'to' => new Flysystem(new LocalAdapter($to)),
]);
foreach ($manager->listContents('from://', true) as $file) {
if ($file['type'] === 'file') {
$manager->put('to://' . $file['path'], $manager->read('from://' . $file['path']));
}
}
}
}
}
/**
* @param string $key
* @param string $value
* @param string $locale
* @param string $group
* @param bool $replace
* @return bool
*/
public function importTranslation($key, $value, $locale, $group, $replace = false)
{
// process only string values
if (is_array($value)) {
return false;
}
$value = (string)$value;
$translation = Translation::firstOrNew([
'locale' => $locale,
'group' => $group,
'key' => $key,
]);
// Check if the database is different then the files
$newStatus = $translation->value === $value ? Translation::STATUS_SAVED : Translation::STATUS_CHANGED;
if ($newStatus !== (int)$translation->status) {
$translation->status = $newStatus;
}
// Only replace when empty, or explicitly told so
if ($replace || !$translation->value) {
$translation->value = $value;
}
$translation->save();
return true;
}
/**
* @param null $group
* @throws \Symfony\Component\VarExporter\Exception\ExceptionInterface
*/
public function exportTranslations($group = null)
{
if (!empty($group)) {
if (!in_array($group, $this->config['exclude_groups'])) {
if ($group == '*') {
return $this->exportAllTranslations();
}
$tree = $this->makeTree(Translation::ofTranslatedGroup($group)->orderByGroupKeys(Arr::get($this->config,
'sort_keys', false))->get());
foreach ($tree as $locale => $groups) {
if (isset($groups[$group])) {
$translations = $groups[$group];
$file = $locale . '/' . $group;
$groups = explode('/', $group);
if (count($groups) > 1) {
$folderName = Arr::last($groups);
Arr::forget($groups, count($groups) - 1);
$dir = 'vendor/' . implode('/', $groups) . '/' . $locale;
if (!$this->files->isDirectory($this->app->langPath() . '/' . $dir)) {
$this->files->makeDirectory($this->app->langPath() . '/' . $dir, 755, true);
system('find ' . $this->app->langPath() . '/' . $dir . ' -type d -exec chmod 755 {} \;');
}
$file = $dir . '/' . $folderName;
}
$path = $this->app['path.lang'] . '/' . $file . '.php';
$output = "files->put($path, $output);
}
}
Translation::ofTranslatedGroup($group)->update(['status' => Translation::STATUS_SAVED]);
}
}
}
/**
* @return bool
* @throws \Symfony\Component\VarExporter\Exception\ExceptionInterface
*/
public function exportAllTranslations()
{
$groups = Translation::whereNotNull('value')->selectDistinctGroup()->get('group');
foreach ($groups as $group) {
$this->exportTranslations($group->group);
}
return true;
}
/**
* @param array $translations
* @return array
*/
protected function makeTree($translations)
{
$array = [];
foreach ($translations as $translation) {
Arr::set($array[$translation->locale][$translation->group], $translation->key, $translation->value);
}
return $array;
}
/**
* @throws Exception
*/
public function cleanTranslations()
{
Translation::whereNull('value')->delete();
}
public function truncateTranslations()
{
Translation::truncate();
}
/**
* @param null|string $key
* @return mixed
*/
public function getConfig($key = null)
{
if ($key == null) {
return $this->config;
}
return $this->config[$key];
}
}