Редактор конфига

This commit is contained in:
n1rwana 2023-07-28 19:34:32 +03:00
parent a2384cc231
commit 19676e50bb
23 changed files with 703 additions and 3 deletions

View file

@ -550,4 +550,84 @@ final class AdminPresenter extends OpenVKPresenter
$this->redirect("/admin/users/id" . $user->getId());
}
function renderTuning(): void
{
$mode = in_array($this->queryParam("act"), ["cfg"]) ? $this->queryParam("act") : "cfg";
if ($_SERVER["REQUEST_METHOD"] === "POST") {
$this->assertNoCSRF();
if ($mode === "cfg") {
$yaml = $this->postParam("yaml");
if (!$yaml)
$this->notFound();
$temp_file_path = __DIR__ . "../../../openvk." . time() . ".yml";
$temp_file = fopen($temp_file_path, "x");
if ($temp_file) {
if (fwrite($temp_file, $this->postParam("yaml"))) {
$temp_file_content = file_get_contents($temp_file_path);
if ($temp_file_content) {
if (chandler_parse_yaml($temp_file_path)) {
if (rename(__DIR__ . "../../../openvk.yml", __DIR__ . "../../../openvk.yml.tmp")) {
$cfg_file = fopen(__DIR__ . "../../../openvk.yml", "x");
if ($cfg_file) {
if (file_put_contents(__DIR__ . "../../../openvk.yml", $temp_file_content)) {
unlink(__DIR__ . "../../../openvk.yml.tmp");
unlink($temp_file_path);
$this->returnJson(["success" => true]);
} else {
$this->returnJson(["success" => false, "error" => tr("admin_tuning_cfg_write_fail")]);
}
} else {
$this->returnJson(["success" => false, "error" => tr("admin_tuning_cfg_create_fail")]);
}
} else {
$this->returnJson(["success" => false, "error" => tr("admin_tuning_cfg_create_fail")]);
}
} else {
$this->returnJson(["success" => false, "error" => tr("admin_tuning_cfg_tmp_read_fail_yaml")]);
}
} else {
$this->returnJson(["success" => false, "error" => tr("admin_tuning_cfg_tmp_read_fail")]);
}
} else {
$this->returnJson(["success" => false, "error" => tr("admin_tuning_cfg_file_write_err")]);
}
} else {
$this->returnJson(["success" => false, "error" => tr("admin_tuning_cfg_file_create_err")]);
}
}
} else {
$this->template->mode = $mode;
if ($mode === "cfg") {
$file_path = __DIR__ . "../../../openvk.yml";
if (file_exists($file_path)) {
$this->template->cfg = chandler_parse_yaml($file_path);
} else if (file_exists(__DIR__ . "../../../openvk-example.yml")) {
$this->flash("warn", tr("admin_tuning_cfg_not_found"), tr("admin_tuning_cfg_not_found_description"));
$this->template->cfg = chandler_parse_yaml(__DIR__ . "../../../openvk-example.yml");
} else {
$repo_file = file_get_contents("https://raw.githubusercontent.com/openvk/openvk/master/openvk-example.yml");
if ($repo_file) {
$file = fopen($file_path, "x");
if ($file) {
if (fwrite($file, $repo_file)) {
fclose($file);
$this->template->cfg = chandler_parse_yaml($file_path);
} else {
fclose($file);
$this->flash("err", tr("admin_tuning_cfg_file_write_err"), tr("admin_tuning_cfg_error_description"));
}
} else {
$this->flash("err", tr("admin_tuning_cfg_file_create_err"), tr("admin_tuning_cfg_error_description"));
}
} else {
$this->flash("err", tr("admin_tuning_cfg_file_not_found_in_repo"), tr("admin_tuning_cfg_error_description"));
}
}
}
}
}
}

View file

@ -0,0 +1,43 @@
{extends "@layout.xml"}
{block title}
{_admin_settings_tuning}
{/block}
{block heading}
{include title}
{/block}
{block content}
<div style="margin: 8px -8px;" class="aui-tabs horizontal-tabs">
<nav class="aui-navgroup aui-navgroup-horizontal">
<div class="aui-navgroup-inner">
<div class="aui-navgroup-primary">
<ul class="aui-nav">
<li n:attr="class=> $mode === 'cfg' ? 'aui-nav-selected' : ''"><a href="?act=cfg">Конфиг</a></li>
</ul>
</div>
</div>
</nav>
</div>
<div class="tabs-pane active-pane" id="info">
<div n:if="$mode === 'cfg'">
<style>
h1,h2,h5 {
margin: 5px;
}
#save-button {
position: fixed;
top: 100px;
right: 50px;
}
</style>
<form class="aui">
{include 'displayYamlData.xml', cfg => $cfg}
</form>
<button id="save-button" class="aui-button aui-button-primary" onClick='convertFormToYAML("/admin/settings/tuning?act=cfg", {$csrfToken});'>Сохранить все</button>
</div>
</div>
{script "js/yaml.js"}
{/block}

View file

@ -0,0 +1,26 @@
{block displayYamlData}
{foreach $cfg as $key => $value}
{var $level = 'h' . ($baseLevel + 1)}
{var $intLevel = $baseLevel + 1}
{var $indent = $intLevel * 10}
<div style="margin-left: {$indent}px;">
{if is_array($value)}
<input type="hidden" name="{$key}" level="{$baseLevel ?? 0}" noValue="1"/>
<{$level}>{preg_match('/\d$/', $key) ? ($key + 1 . '. ') : (tr('admin_settings_tuning_' . $key) ?? $key)}</{$level}>
{include 'displayYamlData.xml', cfg => $value, baseLevel => ($baseLevel + 1), prevLevel => $baseLevel}
{else}
<div class="field-group" style="padding: 0;">
<input disabled class="text long-field" type="text" value="{preg_match('/\d$/', $key) ? ($key + 1 . '. ') : (tr('admin_settings_tuning_' . $key) ?? $key)}" name="{$key}"/>
{if $value === true || $value === false}
<select class="select" name="{$key}" level="{$baseLevel}">
<option value="true" {if $value === true}selected{/if}>{_yes}</option>
<option value="false" {if $value === false}selected{/if}>{_no}</option>
</select>
{else}
<input class="text long-field" type="text" name="{$key}" value="{$value}" level="{$baseLevel}"/>
{/if}
</div>
{/if}
</div>
{/foreach}
{/block}

View file

@ -339,6 +339,8 @@ routes:
handler: "Admin->chandlerGroup"
- url: "/admin/chandler/users/{slug}"
handler: "Admin->chandlerUser"
- url: "/admin/settings/tuning"
handler: "Admin->tuning"
- url: "/internal/wall{num}"
handler: "Wall->wallEmbedded"
- url: "/robots.txt"

102
Web/static/js/yaml.js Normal file
View file

@ -0,0 +1,102 @@
function convertFormToYAML(handler, csrfToken) {
const form = $(".aui");
let formData = [];
form.find('input, select').each(function () {
let key = $(this).attr("name");
let value = $(this).val();
let level = $(this).attr("level") ?? 0;
if ($(this).is('select')) {
value = (value === 'true');
}
if ($(this).attr("disabled")) {
return;
}
if ($(this).attr("noValue")) {
formData.push({indentation: level, key: key, value: value, noValue: true});
} else {
formData.push({indentation: level, key: key, value: value});
}
});
const yaml = restoreYAMLFromJS(formData);
$.ajax({
type: "POST",
url: handler,
data: {
yaml: yaml,
hash: csrfToken
},
success: (data) => {
if (data.success) {
window.location.reload();
} else {
alert(tr("error") + ': ' + data.error);
}
}
})
}
function restoreYAMLFromJS(formData) {
let yamlData = '';
let stack = [];
let currentIndent = 0;
let addDashForNextKey = false;
let nextSpacesOverride = null;
formData.forEach((_key, i) => {
let {indentation, key} = _key;
let value = _key.value;
const level = parseInt(indentation);
console.log(_key);
let spaces = ' '.repeat(nextSpacesOverride ?? (level * 4));
nextSpacesOverride = null;
while (level < currentIndent) {
stack.pop();
currentIndent -= 1;
}
if (_key?.noValue) {
yamlData += `${spaces}${key}:\n`;
} else {
if (/\d$/.test(key) && value.length === 0) {
addDashForNextKey = true;
} else {
if (addDashForNextKey) {
let _s = `${spaces}- ${key}: \"${value}\"\n`;
nextSpacesOverride = _s.split(key)[0].length;
yamlData += _s;
addDashForNextKey = false;
} else if (/\d: ".*"/.test(`${key}: \"${value}\"`)) {
yamlData += `${spaces}- ${value}\n`;
addDashForNextKey = false;
} else {
if (value.length === 0) {
yamlData += `${spaces}${key}: \"\"\n`;
} else if (typeof value === 'boolean') {
yamlData += `${spaces}${key}: ${value}\n`;
} else if (value === 'null' || value == " ") {
yamlData += `${spaces}${key}: null\n`;
} else if (value.startsWith('"') && value.endsWith('"')) {
yamlData += `${spaces}${key}: ${value}\n`;
} else {
yamlData += `${spaces}${key}: \"${value}\"\n`;
currentIndent = level + 1;
stack.push(yamlData);
stack.push(level + 1);
stack.push(key);
}
}
}
}
});
return yamlData;
}

View file

@ -560,3 +560,16 @@
"closed_group_post" = "Гэта паведамленне з прыватнай групы";
"deleted_target_comment" = "Гэты каментарый належыць да выдаленага поста";
"admin_settings_tuning_openvk" = "OpenVK";
"admin_settings_tuning_api" = "API";
"admin_settings_tuning_ton" = "TON";
"admin_settings_tuning_url" = "URL";
"admin_settings_tuning_piwik" = "Piwik";
"admin_settings_tuning_matomo" = "Matomo";
"admin_settings_tuning_smsc" = "SMSC";
"admin_settings_tuning_telegram" = "Telegram";
"admin_settings_tuning_eventDB" = "eventDB";
"admin_settings_tuning_kafka" = "Kafka";
"admin_settings_tuning_dsn" = "DSN";
"admin_settings_tuning_testnet" = "Testnet";
"admin_settings_tuning_regex" = "Regex";

View file

@ -520,3 +520,16 @@
"closed_group_post" = "Heta paviedamliennie z pryvatnaj hrupy";
"deleted_target_comment" = "Heta paviedamliennie z pryvatnaj hrupy";
"admin_settings_tuning_openvk" = "OpenVK";
"admin_settings_tuning_api" = "API";
"admin_settings_tuning_ton" = "TON";
"admin_settings_tuning_url" = "URL";
"admin_settings_tuning_piwik" = "Piwik";
"admin_settings_tuning_matomo" = "Matomo";
"admin_settings_tuning_smsc" = "SMSC";
"admin_settings_tuning_telegram" = "Telegram";
"admin_settings_tuning_eventDB" = "eventDB";
"admin_settings_tuning_kafka" = "Kafka";
"admin_settings_tuning_dsn" = "DSN";
"admin_settings_tuning_testnet" = "Testnet";
"admin_settings_tuning_regex" = "Regex";

View file

@ -505,3 +505,16 @@
"to_top" = "Nach oben";
"checkbox_in_registration" = "Ich stimme der <a href=\"/privacy\">Datenschutzpolitik</a> und der <a href=\"/terms\">Seitenpolitik</a> zu.";
"access_recovery_info" = "Haben Sie Ihr Passwort vergessen? Kein Problem, geben Sie Ihre Daten ein und wir senden Ihnen eine E-Mail mit Anweisungen, wie Sie Ihr Konto wiederherstellen können.";
"admin_settings_tuning_openvk" = "OpenVK";
"admin_settings_tuning_api" = "API";
"admin_settings_tuning_ton" = "TON";
"admin_settings_tuning_url" = "URL";
"admin_settings_tuning_piwik" = "Piwik";
"admin_settings_tuning_matomo" = "Matomo";
"admin_settings_tuning_smsc" = "SMSC";
"admin_settings_tuning_telegram" = "Telegram";
"admin_settings_tuning_eventDB" = "eventDB";
"admin_settings_tuning_kafka" = "Kafka";
"admin_settings_tuning_dsn" = "DSN";
"admin_settings_tuning_testnet" = "Testnet";
"admin_settings_tuning_regex" = "Regex";

View file

@ -1537,3 +1537,121 @@
"mobile_like" = "Like";
"mobile_user_info_hide" = "Hide";
"mobile_user_info_show_details" = "Show details";
"save_all" = "Save all";
"admin_tuning_cfg_not_found" = "The file openvk.yml was not found";
"admin_tuning_cfg_not_found_description" = "openvk-example.yml is used. The configuration will be applied after saving.";
"admin_tuning_cfg_error_description" = "Create an openvk.yml file or <a href='https://raw.githubusercontent.com/openvk/openvk/master/openvk-example.yml'>download it from the repository</a>";
"admin_tuning_cfg_file_write_err" = "Configuration file could not be written, editing is blocked";
"admin_tuning_cfg_file_create_err" = "Configuration file could not be created, editing is blocked";
"admin_tuning_cfg_file_not_found_in_repo" = "Configuration file not found in repository, editing blocked";
"admin_tuning_cfg_write_fail" = "Error writing a configuration file";
"admin_tuning_cfg_create_fail" = "Error when creating a configuration file";
"admin_tuning_cfg_tmp_read_fail_yaml" = "Error when reading temporary file: possibly incorrect YAML was passed";
"admin_tuning_cfg_tmp_read_fail" = "Failed to read the temporary file";
"admin_settings_tuning_openvk" = "OpenVK";
"admin_settings_tuning_debug" = "Debug mode";
"admin_settings_tuning_appearance" = "Appearance";
"admin_settings_tuning_name" = "Name";
"admin_settings_tuning_motd" = "Instance description";
"admin_settings_tuning_preferences" = "Settings";
"admin_settings_tuning_femaleGenderPriority" = "Female gender priority";
"admin_settings_tuning_nginxCacheTime" = "nginx Cache time";
"admin_settings_tuning_uploads" = "Uploads";
"admin_settings_tuning_disableLargeUploads" = "Disable large uploads";
"admin_settings_tuning_mode" = "Mode";
"admin_settings_tuning_api" = "API";
"admin_settings_tuning_maxFilesPerDomain" = "Max files per domain";
"admin_settings_tuning_maxFileSize" = "Max file size";
"admin_settings_tuning_shortcodes" = "Shortcodes";
"admin_settings_tuning_minLength" = "Min length";
"admin_settings_tuning_forbiddenNames" = "Forbidden names";
"admin_settings_tuning_array_element" = "Array Item";
"admin_settings_tuning_photos" = "Photos";
"admin_settings_tuning_upgradeStructure" = "Upgrade structure";
"admin_settings_tuning_photoSaving" = "Photo saving";
"admin_settings_tuning_videos" = "Videos";
"admin_settings_tuning_disableUploading" = "Disable uploading";
"admin_settings_tuning_apps" = "Apps";
"admin_settings_tuning_withdrawTax" = "Withdraw tax";
"admin_settings_tuning_security" = "Security";
"admin_settings_tuning_requireEmail" = "Require Email";
"admin_settings_tuning_requirePhone" = "Require phone";
"admin_settings_tuning_forcePhoneVerification" = "Force phone verification";
"admin_settings_tuning_forceEmailVerification" = "Force Email verification";
"admin_settings_tuning_forceStrongPassword" = "Force strong password";
"admin_settings_tuning_disablePasswordRestoring" = "Disable password restoring";
"admin_settings_tuning_enableSu" = "Allow user substitution";
"admin_settings_tuning_rateLimits" = "Rate limits";
"admin_settings_tuning_actions" = "Actions";
"admin_settings_tuning_time" = "Time";
"admin_settings_tuning_maxViolations" = "Max violations";
"admin_settings_tuning_maxViolationsAge" = "Max violations age";
"admin_settings_tuning_autoban" = "Auto ban";
"admin_settings_tuning_registration" = "Registration";
"admin_settings_tuning_enable" = "Enable";
"admin_settings_tuning_disablingReason" = "Disabling reason";
"admin_settings_tuning_support" = "Support";
"admin_settings_tuning_supportName" = "Default responder name";
"admin_settings_tuning_adminAccount" = "Admin account";
"admin_settings_tuning_messages" = "Messages";
"admin_settings_tuning_wall" = "Wall";
"admin_settings_tuning_anonymousPosting" = "Anonymous posting";
"admin_settings_tuning_account" = "Account";
"admin_settings_tuning_postSizes" = "Post sizes";
"admin_settings_tuning_maxSize" = "Max size";
"admin_settings_tuning_processingLimit" = "Предел обработки";
"admin_settings_tuning_emojiProcessingLimit" = "Emoji processing limit";
"admin_settings_tuning_commerce" = "Commerce enabled";
"admin_settings_tuning_susLinks" = "Suspicious links";
"admin_settings_tuning_warnings" = "Warnings";
"admin_settings_tuning_showReason" = "Show the reason";
"admin_settings_tuning_maintenanceMode" = "Maintenance";
"admin_settings_tuning_all" = "All";
"admin_settings_tuning_messenger" = "Messenger";
"admin_settings_tuning_user" = "User";
"admin_settings_tuning_group" = "Groups";
"admin_settings_tuning_comment" = "Comments";
"admin_settings_tuning_gifts" = "Gifts";
"admin_settings_tuning_notes" = "Notes";
"admin_settings_tuning_notification" = "Notifications";
"admin_settings_tuning_topics" = "Topics";
"admin_settings_tuning_ton" = "TON";
"admin_settings_tuning_enabled" = "Enabled";
"admin_settings_tuning_menu" = "Menu";
"admin_settings_tuning_links" = "Links";
"admin_settings_tuning_about" = "About";
"admin_settings_tuning_url" = "URL";
"admin_settings_tuning_adPoster" = "Ad poster";
"admin_settings_tuning_src" = "Source";
"admin_settings_tuning_caption" = "Caption";
"admin_settings_tuning_link" = "Link";
"admin_settings_tuning_defaultMobileTheme" = "Default mobile theme";
"admin_settings_tuning_telemetry" = "Telemetry";
"admin_settings_tuning_piwik" = "Piwik";
"admin_settings_tuning_matomo" = "Matomo";
"admin_settings_tuning_container" = "Container";
"admin_settings_tuning_site" = "Site";
"admin_settings_tuning_credentials" = "Credentials";
"admin_settings_tuning_smsc" = "SMSC";
"admin_settings_tuning_client" = "Client";
"admin_settings_tuning_layer" = "Layer";
"admin_settings_tuning_secret" = "Secret key";
"admin_settings_tuning_token" = "Token";
"admin_settings_tuning_helpdeskChat" = "Helpdesk chat";
"admin_settings_tuning_telegram" = "Telegram";
"admin_settings_tuning_eventDB" = "eventDB";
"admin_settings_tuning_kafka" = "Kafka";
"admin_settings_tuning_database" = "Database";
"admin_settings_tuning_dsn" = "DSN";
"admin_settings_tuning_password" = "Password";
"admin_settings_tuning_notificationsBroker" = "Notifications broker";
"admin_settings_tuning_domain" = "Domain";
"admin_settings_tuning_server" = "Server";
"admin_settings_tuning_address" = "Address";
"admin_settings_tuning_testnet" = "Testnet";
"admin_settings_tuning_regex" = "Regex";
"admin_settings_tuning_hint" = "Hint";
"admin_settings_tuning_addr" = "Address";
"admin_settings_tuning_port" = "Port";
"admin_settings_tuning_topic" = "Topic";

View file

@ -673,4 +673,18 @@
"edit_action" = "Ŝanĝi";
"warning" = "Averto";
"question_confirm" = "Ĉi tiu ago ne povas esti malfarita. Ĉu vi vere volas fari ĝin?";
"question_confirm" = "Ĉi tiu ago ne povas esti malfarita. Ĉu vi vere volas fari ĝin?";
"admin_settings_tuning_openvk" = "OpenVK";
"admin_settings_tuning_api" = "API";
"admin_settings_tuning_ton" = "TON";
"admin_settings_tuning_url" = "URL";
"admin_settings_tuning_piwik" = "Piwik";
"admin_settings_tuning_matomo" = "Matomo";
"admin_settings_tuning_smsc" = "SMSC";
"admin_settings_tuning_telegram" = "Telegram";
"admin_settings_tuning_eventDB" = "eventDB";
"admin_settings_tuning_kafka" = "Kafka";
"admin_settings_tuning_dsn" = "DSN";
"admin_settings_tuning_testnet" = "Testnet";
"admin_settings_tuning_regex" = "Regex";

View file

@ -1214,3 +1214,16 @@
"undergoing_section_maintenance" = "Ցավոք սրտի, <b>$1</b> բաժինը ժամանակավորապես անհասանելի է։ Մենք արդեն աշխատում ենք խնդիրները շտկելու ուղղությամբ։ Խնդրում ենք այցելել մի քիչ ուշ։";
"topics" = "Թեմաներ";
"admin_settings_tuning_openvk" = "OpenVK";
"admin_settings_tuning_api" = "API";
"admin_settings_tuning_ton" = "TON";
"admin_settings_tuning_url" = "URL";
"admin_settings_tuning_piwik" = "Piwik";
"admin_settings_tuning_matomo" = "Matomo";
"admin_settings_tuning_smsc" = "SMSC";
"admin_settings_tuning_telegram" = "Telegram";
"admin_settings_tuning_eventDB" = "eventDB";
"admin_settings_tuning_kafka" = "Kafka";
"admin_settings_tuning_dsn" = "DSN";
"admin_settings_tuning_testnet" = "Testnet";
"admin_settings_tuning_regex" = "Regex";

View file

@ -878,3 +878,16 @@
/* User alerts */
"user_alert_scam" = "Akun ini telah banyak dilaporkan melakukan penipuan. Berhati-hatilah, terutama jika ia meminta uang.";
"admin_settings_tuning_openvk" = "OpenVK";
"admin_settings_tuning_api" = "API";
"admin_settings_tuning_ton" = "TON";
"admin_settings_tuning_url" = "URL";
"admin_settings_tuning_piwik" = "Piwik";
"admin_settings_tuning_matomo" = "Matomo";
"admin_settings_tuning_smsc" = "SMSC";
"admin_settings_tuning_telegram" = "Telegram";
"admin_settings_tuning_eventDB" = "eventDB";
"admin_settings_tuning_kafka" = "Kafka";
"admin_settings_tuning_dsn" = "DSN";
"admin_settings_tuning_testnet" = "Testnet";
"admin_settings_tuning_regex" = "Regex";

View file

@ -1124,3 +1124,16 @@
"nt_you_were_mentioned_g" = "Сізді осы топ атап өтті:";
"backdrop_warn" = "Суреттер жоғарыдағы орналасудағыдай реттеледі. Олардың биіктігі автоматты түрде ұлғайып, экран биіктігінің 100% алады, ортасында бұлыңғырлық болады. Негізгі OpenVK интерфейсінің фонын ауыстыру немесе дыбысты қосу мүмкін емес.";
"gifts_left_zero" = "Нөл сыйлық қалды";
"admin_settings_tuning_openvk" = "OpenVK";
"admin_settings_tuning_api" = "API";
"admin_settings_tuning_ton" = "TON";
"admin_settings_tuning_url" = "URL";
"admin_settings_tuning_piwik" = "Piwik";
"admin_settings_tuning_matomo" = "Matomo";
"admin_settings_tuning_smsc" = "SMSC";
"admin_settings_tuning_telegram" = "Telegram";
"admin_settings_tuning_eventDB" = "eventDB";
"admin_settings_tuning_kafka" = "Kafka";
"admin_settings_tuning_dsn" = "DSN";
"admin_settings_tuning_testnet" = "Testnet";
"admin_settings_tuning_regex" = "Regex";

View file

@ -849,3 +849,16 @@
/* User alerts */
"user_alert_scam" = "Wiele osób skarżyło się na to konto w związku z oszustwem. Zachowaj ostrożność, zwłaszcza jeśli zostaniesz poproszony o pieniądze.";
"admin_settings_tuning_openvk" = "OpenVK";
"admin_settings_tuning_api" = "API";
"admin_settings_tuning_ton" = "TON";
"admin_settings_tuning_url" = "URL";
"admin_settings_tuning_piwik" = "Piwik";
"admin_settings_tuning_matomo" = "Matomo";
"admin_settings_tuning_smsc" = "SMSC";
"admin_settings_tuning_telegram" = "Telegram";
"admin_settings_tuning_eventDB" = "eventDB";
"admin_settings_tuning_kafka" = "Kafka";
"admin_settings_tuning_dsn" = "DSN";
"admin_settings_tuning_testnet" = "Testnet";
"admin_settings_tuning_regex" = "Regex";

View file

@ -1 +1,14 @@
/* Used for viewing message keys */
"admin_settings_tuning_openvk" = "OpenVK";
"admin_settings_tuning_api" = "API";
"admin_settings_tuning_ton" = "TON";
"admin_settings_tuning_url" = "URL";
"admin_settings_tuning_piwik" = "Piwik";
"admin_settings_tuning_matomo" = "Matomo";
"admin_settings_tuning_smsc" = "SMSC";
"admin_settings_tuning_telegram" = "Telegram";
"admin_settings_tuning_eventDB" = "eventDB";
"admin_settings_tuning_kafka" = "Kafka";
"admin_settings_tuning_dsn" = "DSN";
"admin_settings_tuning_testnet" = "Testnet";
"admin_settings_tuning_regex" = "Regex";

View file

@ -1430,3 +1430,121 @@
"mobile_like" = "Нравится";
"mobile_user_info_hide" = "Скрыть";
"mobile_user_info_show_details" = "Показать подробнее";
"save_all" = "Сохранить все";
"admin_tuning_cfg_not_found" = "Файл openvk.yml не найден";
"admin_tuning_cfg_not_found" = "Используется openvk-example.yml. Конфигурация будет применена после сохранения.";
"admin_tuning_cfg_error_description" = "Создайте файл openvk.yml или <a href='https://raw.githubusercontent.com/openvk/openvk/master/openvk-example.yml'>скачайте его из репозитория</a>";
"admin_tuning_cfg_file_write_err" = "Не удалось записать файл конфигурации, редактирование заблокировано";
"admin_tuning_cfg_file_create_err" = "Не удалось создать файл конфигурации, редактирование заблокировано";
"admin_tuning_cfg_file_not_found_in_repo" = "Файл с конфигурацией не найден в репозитории, редактирование заблокировано";
"admin_tuning_cfg_write_fail" = "Ошибка при записи файла конфигурации";
"admin_tuning_cfg_create_fail" = "Ошибка при создании файла конфигурации";
"admin_tuning_cfg_tmp_read_fail_yaml" = "Ошибка при чтении временного файла: возможно, передан некорректный YAML";
"admin_tuning_cfg_tmp_read_fail" = "Не удалось прочитать временный файл";
"admin_settings_tuning_openvk" = "OpenVK";
"admin_settings_tuning_debug" = "Режим отладки";
"admin_settings_tuning_appearance" = "Внешний вид";
"admin_settings_tuning_name" = "Название";
"admin_settings_tuning_motd" = "Описание инстанса";
"admin_settings_tuning_preferences" = "Настройки";
"admin_settings_tuning_femaleGenderPriority" = "Приоритет женского пола";
"admin_settings_tuning_nginxCacheTime" = "Время кэширования nginx";
"admin_settings_tuning_uploads" = "Загрузки";
"admin_settings_tuning_disableLargeUploads" = "Отключить большие загрузки";
"admin_settings_tuning_mode" = "Режим";
"admin_settings_tuning_api" = "API";
"admin_settings_tuning_maxFilesPerDomain" = "Максимальное количество файлов на домен";
"admin_settings_tuning_maxFileSize" = "Максимальный размер файла";
"admin_settings_tuning_shortcodes" = "Короткие адреса";
"admin_settings_tuning_minLength" = "Минимальная длина";
"admin_settings_tuning_forbiddenNames" = "Запрещенные значения";
"admin_settings_tuning_array_element" = "Элемент списка";
"admin_settings_tuning_photos" = "Фотографии";
"admin_settings_tuning_upgradeStructure" = "Улучшение структуры";
"admin_settings_tuning_photoSaving" = "Сохранение фото";
"admin_settings_tuning_videos" = "Видео";
"admin_settings_tuning_disableUploading" = "Отключить загрузку";
"admin_settings_tuning_apps" = "Приложения";
"admin_settings_tuning_withdrawTax" = "Комиссия на вывод";
"admin_settings_tuning_security" = "Безопасность";
"admin_settings_tuning_requireEmail" = "Требуется электронная почта";
"admin_settings_tuning_requirePhone" = "Требуется номер телефона";
"admin_settings_tuning_forcePhoneVerification" = "Принудительная верификация телефона";
"admin_settings_tuning_forceEmailVerification" = "Принудительная проверка электронной почты";
"admin_settings_tuning_forceStrongPassword" = "Принудительное использование надежного пароля";
"admin_settings_tuning_disablePasswordRestoring" = "Отключить восстановление пароля";
"admin_settings_tuning_enableSu" = "Включить замену пользователя";
"admin_settings_tuning_rateLimits" = "Рейт-лимиты";
"admin_settings_tuning_actions" = "Действия";
"admin_settings_tuning_time" = "Время";
"admin_settings_tuning_maxViolations" = "Максимальное количество нарушений";
"admin_settings_tuning_maxViolationsAge" = "Максимальный возраст нарушений";
"admin_settings_tuning_autoban" = "Автоматический бан";
"admin_settings_tuning_registration" = "Регистрация";
"admin_settings_tuning_enable" = "Включить";
"admin_settings_tuning_disablingReason" = "Причина отключения";
"admin_settings_tuning_support" = "Поддержка";
"admin_settings_tuning_supportName" = "Имя отвечающего по умолчанию";
"admin_settings_tuning_adminAccount" = "Аккаунт администратора";
"admin_settings_tuning_messages" = "Сообщения";
"admin_settings_tuning_wall" = "Стена";
"admin_settings_tuning_anonymousPosting" = "Анонимные публикации";
"admin_settings_tuning_account" = "Аккаунт";
"admin_settings_tuning_postSizes" = "Размеры постов";
"admin_settings_tuning_maxSize" = "Максимальные размеры";
"admin_settings_tuning_processingLimit" = "Предел обработки";
"admin_settings_tuning_emojiProcessingLimit" = "Предел обработки Emoji";
"admin_settings_tuning_commerce" = "Коммерция включена";
"admin_settings_tuning_susLinks" = "Подозрительные ссылки";
"admin_settings_tuning_warnings" = "Предупреждения";
"admin_settings_tuning_showReason" = "Показывать причину";
"admin_settings_tuning_maintenanceMode" = "Технические работы";
"admin_settings_tuning_all" = "Все";
"admin_settings_tuning_messenger" = "Мессенджер";
"admin_settings_tuning_user" = "Пользователь";
"admin_settings_tuning_group" = "Сообщества";
"admin_settings_tuning_comment" = "Комментарии";
"admin_settings_tuning_gifts" = "Подарки";
"admin_settings_tuning_notes" = "Заметки";
"admin_settings_tuning_notification" = "Уведомления";
"admin_settings_tuning_topics" = "Обсуждения";
"admin_settings_tuning_ton" = "TON";
"admin_settings_tuning_enabled" = "Включено";
"admin_settings_tuning_menu" = "Меню";
"admin_settings_tuning_links" = "Ссылки";
"admin_settings_tuning_about" = "О сайте";
"admin_settings_tuning_url" = "URL";
"admin_settings_tuning_adPoster" = "Рекламный баннер";
"admin_settings_tuning_src" = "Источник";
"admin_settings_tuning_caption" = "Подпись";
"admin_settings_tuning_link" = "Ссылка";
"admin_settings_tuning_defaultMobileTheme" = "Тема для мобильных устройств по умолчанию";
"admin_settings_tuning_telemetry" = "Телеметрия";
"admin_settings_tuning_piwik" = "Piwik";
"admin_settings_tuning_matomo" = "Matomo";
"admin_settings_tuning_container" = "Контейнер";
"admin_settings_tuning_site" = "Сайт";
"admin_settings_tuning_credentials" = "Данные";
"admin_settings_tuning_smsc" = "SMSC";
"admin_settings_tuning_client" = "Клиент";
"admin_settings_tuning_layer" = "Слой";
"admin_settings_tuning_secret" = "Секретный ключ";
"admin_settings_tuning_token" = "Токен";
"admin_settings_tuning_helpdeskChat" = "Чат Helpdesk";
"admin_settings_tuning_telegram" = "Telegram";
"admin_settings_tuning_eventDB" = "eventDB";
"admin_settings_tuning_kafka" = "Kafka";
"admin_settings_tuning_database" = "База данных";
"admin_settings_tuning_dsn" = "DSN";
"admin_settings_tuning_password" = "Пароль";
"admin_settings_tuning_notificationsBroker" = "Брокер уведомлений";
"admin_settings_tuning_domain" = "Домен";
"admin_settings_tuning_server" = "Сервер";
"admin_settings_tuning_address" = "Адрес";
"admin_settings_tuning_testnet" = "Testnet";
"admin_settings_tuning_regex" = "Regex";
"admin_settings_tuning_hint" = "Подсказка";
"admin_settings_tuning_addr" = "Адрес";
"admin_settings_tuning_port" = "Порт";
"admin_settings_tuning_topic" = "Тема";

View file

@ -773,4 +773,18 @@
"reset" = "Сбросъ";
"closed_group_post" = "Это высказыванiе изъ закрытого общѣства";
"deleted_target_comment" = "Этотъ отзыв принадлѣжит к удалѣнному высказыванiю";
"deleted_target_comment" = "Этотъ отзыв принадлѣжит к удалѣнному высказыванiю";
"admin_settings_tuning_openvk" = "OpenVK";
"admin_settings_tuning_api" = "API";
"admin_settings_tuning_ton" = "TON";
"admin_settings_tuning_url" = "URL";
"admin_settings_tuning_piwik" = "Piwik";
"admin_settings_tuning_matomo" = "Matomo";
"admin_settings_tuning_smsc" = "SMSC";
"admin_settings_tuning_telegram" = "Telegram";
"admin_settings_tuning_eventDB" = "eventDB";
"admin_settings_tuning_kafka" = "Kafka";
"admin_settings_tuning_dsn" = "DSN";
"admin_settings_tuning_testnet" = "Testnet";
"admin_settings_tuning_regex" = "Regex";

View file

@ -978,4 +978,18 @@
"reset" = "Сброс";
"closed_group_post" = "Эта запись из закрытого собрания";
"deleted_target_comment" = "Этот отзыв надлежит к удалённой записи";
"deleted_target_comment" = "Этот отзыв надлежит к удалённой записи";
"admin_settings_tuning_openvk" = "OpenVK";
"admin_settings_tuning_api" = "API";
"admin_settings_tuning_ton" = "TON";
"admin_settings_tuning_url" = "URL";
"admin_settings_tuning_piwik" = "Piwik";
"admin_settings_tuning_matomo" = "Matomo";
"admin_settings_tuning_smsc" = "SMSC";
"admin_settings_tuning_telegram" = "Telegram";
"admin_settings_tuning_eventDB" = "eventDB";
"admin_settings_tuning_kafka" = "Kafka";
"admin_settings_tuning_dsn" = "DSN";
"admin_settings_tuning_testnet" = "Testnet";
"admin_settings_tuning_regex" = "Regex";

View file

@ -470,3 +470,16 @@
"paginator_back" = "Враћати се";
"paginator_page" = "Страница бр. $1";
"paginator_next" = "Следећа страница";
"admin_settings_tuning_openvk" = "OpenVK";
"admin_settings_tuning_api" = "API";
"admin_settings_tuning_ton" = "TON";
"admin_settings_tuning_url" = "URL";
"admin_settings_tuning_piwik" = "Piwik";
"admin_settings_tuning_matomo" = "Matomo";
"admin_settings_tuning_smsc" = "SMSC";
"admin_settings_tuning_telegram" = "Telegram";
"admin_settings_tuning_eventDB" = "eventDB";
"admin_settings_tuning_kafka" = "Kafka";
"admin_settings_tuning_dsn" = "DSN";
"admin_settings_tuning_testnet" = "Testnet";
"admin_settings_tuning_regex" = "Regex";

View file

@ -471,3 +471,16 @@
"paginator_back" = "Vraćati se";
"paginator_page" = "Stranica br. $1";
"paginator_next" = "Sledeća stranica";
"admin_settings_tuning_openvk" = "OpenVK";
"admin_settings_tuning_api" = "API";
"admin_settings_tuning_ton" = "TON";
"admin_settings_tuning_url" = "URL";
"admin_settings_tuning_piwik" = "Piwik";
"admin_settings_tuning_matomo" = "Matomo";
"admin_settings_tuning_smsc" = "SMSC";
"admin_settings_tuning_telegram" = "Telegram";
"admin_settings_tuning_eventDB" = "eventDB";
"admin_settings_tuning_kafka" = "Kafka";
"admin_settings_tuning_dsn" = "DSN";
"admin_settings_tuning_testnet" = "Testnet";
"admin_settings_tuning_regex" = "Regex";

View file

@ -550,3 +550,16 @@
"paginator_next" = "İleri";
/* Translated by @WindowZ414 - @WindowZ414 tarafından çevirildi */
"admin_settings_tuning_openvk" = "OpenVK";
"admin_settings_tuning_api" = "API";
"admin_settings_tuning_ton" = "TON";
"admin_settings_tuning_url" = "URL";
"admin_settings_tuning_piwik" = "Piwik";
"admin_settings_tuning_matomo" = "Matomo";
"admin_settings_tuning_smsc" = "SMSC";
"admin_settings_tuning_telegram" = "Telegram";
"admin_settings_tuning_eventDB" = "eventDB";
"admin_settings_tuning_kafka" = "Kafka";
"admin_settings_tuning_dsn" = "DSN";
"admin_settings_tuning_testnet" = "Testnet";
"admin_settings_tuning_regex" = "Regex";

View file

@ -809,3 +809,16 @@
/* User alerts */
"user_alert_scam" = "мошенничество тросгес герӟаськемын та to вылэ ӝожтӥсько. Пожалуйста, сак луыны, уката ик дорын тонэ уксё куре ке.";
"admin_settings_tuning_openvk" = "OpenVK";
"admin_settings_tuning_api" = "API";
"admin_settings_tuning_ton" = "TON";
"admin_settings_tuning_url" = "URL";
"admin_settings_tuning_piwik" = "Piwik";
"admin_settings_tuning_matomo" = "Matomo";
"admin_settings_tuning_smsc" = "SMSC";
"admin_settings_tuning_telegram" = "Telegram";
"admin_settings_tuning_eventDB" = "eventDB";
"admin_settings_tuning_kafka" = "Kafka";
"admin_settings_tuning_dsn" = "DSN";
"admin_settings_tuning_testnet" = "Testnet";
"admin_settings_tuning_regex" = "Regex";

View file

@ -1438,3 +1438,16 @@
"mobile_like" = "Подобається";
"mobile_user_info_hide" = "Приховувати";
"mobile_user_info_show_details" = "Показати докладніше";
"admin_settings_tuning_openvk" = "OpenVK";
"admin_settings_tuning_api" = "API";
"admin_settings_tuning_ton" = "TON";
"admin_settings_tuning_url" = "URL";
"admin_settings_tuning_piwik" = "Piwik";
"admin_settings_tuning_matomo" = "Matomo";
"admin_settings_tuning_smsc" = "SMSC";
"admin_settings_tuning_telegram" = "Telegram";
"admin_settings_tuning_eventDB" = "eventDB";
"admin_settings_tuning_kafka" = "Kafka";
"admin_settings_tuning_dsn" = "DSN";
"admin_settings_tuning_testnet" = "Testnet";
"admin_settings_tuning_regex" = "Regex";