104 lines
2.9 KiB
PHP
104 lines
2.9 KiB
PHP
<?php
|
|
|
|
/**
|
|
* Vvveb
|
|
*
|
|
* Copyright (C) 2022 Ziadin Givan
|
|
*
|
|
* This program is free software: you can redistribute it and/or modify
|
|
* it under the terms of the GNU Affero General Public License as
|
|
* published by the Free Software Foundation, either version 3 of the
|
|
* License, or (at your option) any later version.
|
|
*
|
|
* This program is distributed in the hope that it will be useful,
|
|
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
* GNU Affero General Public License for more details.
|
|
*
|
|
* You should have received a copy of the GNU Affero General Public License
|
|
* along with this program. If not, see <https://www.gnu.org/licenses/>.
|
|
*
|
|
*/
|
|
|
|
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]);
|
|
}
|
|
}
|