. * */ namespace Vvveb\Controller\Editor; use function Vvveb\__; use Vvveb\Controller\Base; class Translate extends Base { function get() { $text = $this->request->post['text']; $languages = \Vvveb\availableLanguages(); $translations = []; foreach ($languages as $lang) { $code = $lang['code']; \Vvveb\setLanguage($code); $translations[$code] = __($text); } //restore language \Vvveb\setLanguage(\Vvveb\getLanguage()); $this->response->setType('json'); $this->response->output($translations); } function save() { $translations = $this->request->post ?? []; $success = true; $message = __('Translations saved!'); if ($translations) { require_once DIR_SYSTEM . 'functions' . DS . 'php-mo.php'; unset($translations['csrf']); $defaultLang = key($translations); //'en_US'; $domain = 'vvveb'; $text = $translations[$defaultLang]; foreach ($translations as $langCode => $translation) { if ($langCode == $defaultLang || $langCode == 'en_US' || $success == false) { continue; } $folder = DIR_ROOT . 'locale' . DS . $langCode . DS . 'LC_MESSAGES' . DS; $userpoFile = $folder . 'user.po'; $poFile = $folder . $domain . '.po'; $moFile = $folder . $domain . '.mo'; foreach ([$poFile, $moFile] as $file) { if (! is_writable($file)) { $message = sprintf(__('File %s not writable!'), $file); $success = false; continue 2; } } $userTranslations = []; if (file_exists($userpoFile)) { $userTranslations = phpmo_parse_po_file($userpoFile); } $userTranslations[$text] = ['msgid' => $text, 'msgstr' => [$translation]]; if (phpmo_write_po_file($userTranslations, $userpoFile)) { $userTranslations += phpmo_parse_po_file($poFile); if (phpmo_write_mo_file($userTranslations, $moFile)) { } else { $message .= __('Error compiling!'); $success = false; } } else { $message = sprintf(__('Error saving %s file!'), $poFile); $success = false; } } } $this->response->setType('json'); $this->response->output(['success' => $success, 'message' => $message]); } }