From 99a5ab6dd1547c07efe2ee5c084855b45e89a977 Mon Sep 17 00:00:00 2001 From: Visman Date: Fri, 13 Apr 2018 14:35:07 +0700 Subject: [PATCH] 2018-04-13 --- app/Core/Validator.php | 6 + app/Models/Page.php | 5 +- app/Models/Pages/Profile.php | 278 ++++++++++++++++++++++++++++++ app/Models/User/Current.php | 16 +- app/Models/User/Model.php | 20 +++ app/lang/English/admin.po | 6 - app/lang/English/admin_options.po | 12 -- app/lang/English/common.po | 6 + app/lang/English/profile.po | 56 +++++- app/lang/English/profile_other.po | 12 ++ app/lang/Russian/admin.po | 6 - app/lang/Russian/admin_options.po | 12 -- app/lang/Russian/common.po | 6 + app/lang/Russian/profile.po | 66 +++++-- app/lang/Russian/profile_other.po | 12 ++ 15 files changed, 452 insertions(+), 67 deletions(-) diff --git a/app/Core/Validator.php b/app/Core/Validator.php index 01122364..d1213332 100644 --- a/app/Core/Validator.php +++ b/app/Core/Validator.php @@ -296,6 +296,12 @@ class Validator $rules = $this->rules[$field]; if (isset($this->raw[$field])) { $value = $this->c->Secury->replInvalidChars($this->raw[$field]); + // пустое поле в соответствии с правилом 'required' должно быть равно null + if ((\is_string($value) && 0 === \strlen(\preg_replace('%^\s+|\s+$%u', '', $value))) + || (\is_array($value) && empty($value)) + ) { + $value = null; + } } } diff --git a/app/Models/Page.php b/app/Models/Page.php index a9a704db..b3c87778 100644 --- a/app/Models/Page.php +++ b/app/Models/Page.php @@ -99,10 +99,7 @@ class Page extends Model $nav['register'] = [$r->link('Register'), 'Register']; $nav['login'] = [$r->link('Login'), 'Login']; } else { - $nav['profile'] = [$r->link('User', [ - 'id' => $this->user->id, - 'name' => $this->user->username, - ]), 'Profile']; + $nav['profile'] = [$this->user->link, 'Profile']; // New PMS if ($this->c->config->o_pms_enabled == '1' && ($this->user->isAdmin || $this->user->messages_new > 0)) { //???? $nav['pmsnew'] = ['pmsnew.php', 'PM']; //''; diff --git a/app/Models/Pages/Profile.php b/app/Models/Pages/Profile.php index 33685f6d..e973a4e0 100644 --- a/app/Models/Pages/Profile.php +++ b/app/Models/Pages/Profile.php @@ -12,6 +12,284 @@ class Profile extends Page { use CrumbTrait; + /** + * Подготавливает данные для шаблона настройки форума + * + * @param array $args + * @param string $method + * + * @return Page + */ + public function config(array $args, $method) + { + $this->curUser = $this->c->users->load((int) $args['id']); + + if (! $this->curUser instanceof User || ($this->curUser->isUnverified && ! $this->user->isAdmMod)) { + return $this->c->Message->message('Bad request'); + } + + $this->rules = $this->c->ProfileRules->setUser($this->curUser); + + if (! $this->rules->editConfig) { + return $this->c->Message->message('Bad request'); + } + + $this->c->Lang->load('profile'); + $this->c->Lang->load('profile_other'); + + if ('POST' === $method) { + $v = $this->c->Validator->reset() + ->addValidators([ + ])->addRules([ + 'token' => 'token:EditBoardConfig', + 'language' => 'required|string:trim|in:' . \implode(',', $this->c->Func->getLangs()), + 'style' => 'required|string:trim|in:' . \implode(',', $this->c->Func->getStyles()), + 'timezone' => 'required|string:trim|in:-12,-11,-10,-9.5,-9,-8.5,-8,-7,-6,-5,-4,-3.5,-3,-2,-1,0,1,2,3,3.5,4,4.5,5,5.5,5.75,6,6.5,7,8,8.75,9,9.5,10,10.5,11,11.5,12,12.75,13,14', + 'dst' => 'required|integer|in:0,1', + 'time_format' => 'required|integer|in:' . \implode(',', \array_keys($this->c->TIME_FORMATS)), + 'date_format' => 'required|integer|in:' . \implode(',', \array_keys($this->c->DATE_FORMATS)), + 'show_smilies' => 'required|integer|in:0,1', + 'show_sig' => 'required|integer|in:0,1', + 'show_avatars' => 'required|integer|in:0,1', + 'show_img' => 'required|integer|in:0,1', + 'show_img_sig' => 'required|integer|in:0,1', + 'disp_topics' => 'integer|min:10|max:50', + 'disp_posts' => 'integer|min:10|max:50', + ])->addAliases([ + 'language' => 'Language', + 'style' => 'Style', + 'timezone' => 'Time zone', + 'dst' => 'DST label', + 'time_format' => 'Time format', + 'date_format' => 'Date format', + 'show_smilies' => 'Smilies label', + 'show_sig' => 'Sigs label', + 'show_avatars' => 'Avatars label', + 'show_img' => 'Images label', + 'show_img_sig' => 'Images sigs label', + 'disp_topics' => 'Topics per page label', + 'disp_posts' => 'Posts per page label', + ])->addArguments([ + 'token' => ['id' => $this->curUser->id], + ])->addMessages([ + ]); + + if ($v->validation($_POST)) { + + } + + $this->fIswev = $v->getErrors(); + } + + $form = [ + 'action' => $this->c->Router->link('EditBoardConfig', ['id' => $this->curUser->id]), + 'hidden' => [ + 'token' => $this->c->Csrf->create('EditBoardConfig', ['id' => $this->curUser->id]), + ], + 'sets' => [], + 'btns' => [ + 'save' => [ + 'type' => 'submit', + 'value' => \ForkBB\__('Save changes'), + 'accesskey' => 's', + ], + ], + ]; + + $yn = [1 => \ForkBB\__('Yes'), 0 => \ForkBB\__('No')]; + $langs = $this->c->Func->getLangs(); + $langs = \array_combine($langs, $langs); + $styles = $this->c->Func->getStyles(); + $styles = \array_combine($styles, $styles); + $timeFormat = []; + foreach ($this->c->TIME_FORMATS as $key => $value) { + $timeFormat[$key] = \ForkBB\dt(\time(), false, null, $value, true, true) . ($key ? '' : ' (' . \ForkBB\__('Default') . ')'); + } + $dateFormat = []; + foreach ($this->c->DATE_FORMATS as $key => $value) { + $dateFormat[$key] = \ForkBB\dt(\time(), true, $value, null, false, true) . ($key ? '' : ' (' . \ForkBB\__('Default') . ')'); + } + + $form['sets'][] = [ + 'id' => 'essentials', + 'legend' => \ForkBB\__('Essentials'), + 'class' => 'data-edit', + 'fields' => [ + 'language' => [ + 'id' => 'language', + 'type' => 'select', + 'options' => $langs, + 'value' => $this->curUser->language, + 'caption' => \ForkBB\__('Language'), + ], + 'style' => [ + 'id' => 'style', + 'type' => 'select', + 'options' => $styles, + 'value' => $this->curUser->style, + 'caption' => \ForkBB\__('Style'), + ], + 'timezone' => [ + 'id' => 'timezone', + 'type' => 'select', + 'options' => [ + '-12' => \ForkBB\__('UTC-12:00'), + '-11' => \ForkBB\__('UTC-11:00'), + '-10' => \ForkBB\__('UTC-10:00'), + '-9.5' => \ForkBB\__('UTC-09:30'), + '-9' => \ForkBB\__('UTC-09:00'), + '-8.5' => \ForkBB\__('UTC-08:30'), + '-8' => \ForkBB\__('UTC-08:00'), + '-7' => \ForkBB\__('UTC-07:00'), + '-6' => \ForkBB\__('UTC-06:00'), + '-5' => \ForkBB\__('UTC-05:00'), + '-4' => \ForkBB\__('UTC-04:00'), + '-3.5' => \ForkBB\__('UTC-03:30'), + '-3' => \ForkBB\__('UTC-03:00'), + '-2' => \ForkBB\__('UTC-02:00'), + '-1' => \ForkBB\__('UTC-01:00'), + '0' => \ForkBB\__('UTC'), + '1' => \ForkBB\__('UTC+01:00'), + '2' => \ForkBB\__('UTC+02:00'), + '3' => \ForkBB\__('UTC+03:00'), + '3.5' => \ForkBB\__('UTC+03:30'), + '4' => \ForkBB\__('UTC+04:00'), + '4.5' => \ForkBB\__('UTC+04:30'), + '5' => \ForkBB\__('UTC+05:00'), + '5.5' => \ForkBB\__('UTC+05:30'), + '5.75' => \ForkBB\__('UTC+05:45'), + '6' => \ForkBB\__('UTC+06:00'), + '6.5' => \ForkBB\__('UTC+06:30'), + '7' => \ForkBB\__('UTC+07:00'), + '8' => \ForkBB\__('UTC+08:00'), + '8.75' => \ForkBB\__('UTC+08:45'), + '9' => \ForkBB\__('UTC+09:00'), + '9.5' => \ForkBB\__('UTC+09:30'), + '10' => \ForkBB\__('UTC+10:00'), + '10.5' => \ForkBB\__('UTC+10:30'), + '11' => \ForkBB\__('UTC+11:00'), + '11.5' => \ForkBB\__('UTC+11:30'), + '12' => \ForkBB\__('UTC+12:00'), + '12.75' => \ForkBB\__('UTC+12:45'), + '13' => \ForkBB\__('UTC+13:00'), + '14' => \ForkBB\__('UTC+14:00'), + ], + 'value' => $this->curUser->timezone, + 'caption' => \ForkBB\__('Time zone'), + ], + 'dst' => [ + 'id' => 'dst', + 'type' => 'radio', + 'value' => $this->curUser->dst, + 'values' => $yn, + 'caption' => \ForkBB\__('DST label'), + 'info' => \ForkBB\__('DST help'), + ], + 'time_format' => [ + 'id' => 'time_format', + 'type' => 'select', + 'options' => $timeFormat, + 'value' => $this->curUser->time_format, + 'caption' => \ForkBB\__('Time format'), + ], + 'date_format' => [ + 'id' => 'date_format', + 'type' => 'select', + 'options' => $dateFormat, + 'value' => $this->curUser->date_format, + 'caption' => \ForkBB\__('Date format'), + ], + + ], + ]; + $form['sets'][] = [ + 'id' => 'viewing-posts', + 'legend' => \ForkBB\__('Viewing posts'), + 'class' => 'data-edit', + 'fields' => [ + 'show_smilies' => [ + 'id' => 'show_smilies', + 'type' => 'radio', + 'value' => $this->curUser->show_smilies, + 'values' => $yn, + 'caption' => \ForkBB\__('Smilies label'), + 'info' => \ForkBB\__('Smilies info'), + ], + 'show_sig' => [ + 'id' => 'show_sig', + 'type' => 'radio', + 'value' => $this->curUser->show_sig, + 'values' => $yn, + 'caption' => \ForkBB\__('Sigs label'), + 'info' => \ForkBB\__('Sigs info'), + ], + 'show_avatars' => [ + 'id' => 'show_avatars', + 'type' => 'radio', + 'value' => $this->curUser->show_avatars, + 'values' => $yn, + 'caption' => \ForkBB\__('Avatars label'), + 'info' => \ForkBB\__('Avatars info'), + ], + 'show_img' => [ + 'id' => 'show_img', + 'type' => 'radio', + 'value' => $this->curUser->show_img, + 'values' => $yn, + 'caption' => \ForkBB\__('Images label'), + 'info' => \ForkBB\__('Images info'), + ], + 'show_img_sig' => [ + 'id' => 'show_img_sig', + 'type' => 'radio', + 'value' => $this->curUser->show_img_sig, + 'values' => $yn, + 'caption' => \ForkBB\__('Images sigs label'), + 'info' => \ForkBB\__('Images sigs info'), + ], + ], + ]; + $form['sets'][] = [ + 'id' => 'pagination', + 'legend' => \ForkBB\__('Pagination'), + 'class' => 'data-edit', + 'fields' => [ + 'disp_topics' => [ + 'id' => 'disp_topics', + 'type' => 'number', + 'min' => 10, + 'max' => 50, + 'value' => $this->curUser->disp_topics, + 'caption' => \ForkBB\__('Topics per page label'), + 'info' => \ForkBB\__('For default'), + ], + 'disp_posts' => [ + 'id' => 'disp_posts', + 'type' => 'number', + 'min' => 10, + 'max' => 50, + 'value' => $this->curUser->disp_posts, + 'caption' => \ForkBB\__('Posts per page label'), + 'info' => \ForkBB\__('For default'), + ], + ], + ]; + + $crumbs = []; + $crumbs[] = [$this->c->Router->link('EditBoardConfig', ['id' => $this->curUser->id]), \ForkBB\__('Board configuration')]; + + $this->robots = 'noindex'; + $this->crumbs = $this->extCrumbs(...$crumbs); + $this->fIndex = $this->rules->my ? 'profile' : 'userlist'; + $this->nameTpl = 'profile'; + $this->onlinePos = 'profile-' . $this->curUser->id; // ???? + $this->title = \ForkBB\__('%s\'s profile', $this->curUser->username); + $this->form = $form; + $this->actionBtns = $this->btns('config'); + + return $this; + } + /** * Подготавливает данные для шаблона редактирования профиля * diff --git a/app/Models/User/Current.php b/app/Models/User/Current.php index fe664f65..0119f481 100644 --- a/app/Models/User/Current.php +++ b/app/Models/User/Current.php @@ -33,8 +33,8 @@ class Current extends Action if ($user->isGuest) { $user->__isBot = $this->isBot(); - $user->__disp_topics = $this->c->config->o_disp_topics_default; - $user->__disp_posts = $this->c->config->o_disp_posts_default; +# $user->__disp_topics = $this->c->config->o_disp_topics_default; +# $user->__disp_posts = $this->c->config->o_disp_posts_default; $user->__timezone = $this->c->config->o_default_timezone; $user->__dst = $this->c->config->o_default_dst; # $user->language = $this->c->config->o_default_lang; @@ -51,12 +51,12 @@ class Current extends Action } */ } else { $user->__isBot = false; - if (! $user->disp_topics) { - $user->__disp_topics = $this->c->config->o_disp_topics_default; - } - if (! $user->disp_posts) { - $user->__disp_posts = $this->c->config->o_disp_posts_default; - } +# if (! $user->disp_topics) { +# $user->__disp_topics = $this->c->config->o_disp_topics_default; +# } +# if (! $user->disp_posts) { +# $user->__disp_posts = $this->c->config->o_disp_posts_default; +# } // Special case: We've timed out, but no other user has browsed the forums since we timed out if ($user->isLogged && $user->logged < time() - $this->c->config->o_timeout_visit) { $this->manager->updateLastVisit($user); //???? diff --git a/app/Models/User/Model.php b/app/Models/User/Model.php index 2122c280..982e7ab7 100644 --- a/app/Models/User/Model.php +++ b/app/Models/User/Model.php @@ -289,4 +289,24 @@ class Model extends DataModel { return '1' == $this->c->config->o_show_post_count || $this->isAdmMod; } + + /** + * Число тем на одну страницу + * + * @return int + */ + protected function getdisp_topics() + { + return (int) (empty($this->a['disp_topics']) ? $this->c->config->o_disp_topics_default : $this->a['disp_topics']); + } + + /** + * Число сообщений на одну страницу + * + * @return int + */ + protected function getdisp_posts() + { + return (int) (empty($this->a['disp_posts']) ? $this->c->config->o_disp_posts_default : $this->a['disp_posts']); + } } diff --git a/app/lang/English/admin.po b/app/lang/English/admin.po index 4cf16a59..15a0acfd 100644 --- a/app/lang/English/admin.po +++ b/app/lang/English/admin.po @@ -81,12 +81,6 @@ msgstr "Edit" msgid "Remove" msgstr "Remove" -msgid "Yes" -msgstr "Yes" - -msgid "No" -msgstr "No" - msgid "here" msgstr "here" diff --git a/app/lang/English/admin_options.po b/app/lang/English/admin_options.po index 35b68edc..20e5bc1f 100644 --- a/app/lang/English/admin_options.po +++ b/app/lang/English/admin_options.po @@ -57,12 +57,6 @@ msgstr "Default time zone" msgid "Timezone help" msgstr "The default time zone for guests and users attempting to register for the board." -msgid "DST label" -msgstr "Adjust for DST" - -msgid "DST help" -msgstr "Check if daylight savings is in effect (advances times by 1 hour)." - msgid "Language label" msgstr "Default language" @@ -147,15 +141,9 @@ msgstr "Topic review" msgid "Topic review help" msgstr "Maximum number of posts to display when posting (newest first). Set to 0 to disable." -msgid "Topics per page label" -msgstr "Topics per page" - msgid "Topics per page help" msgstr "The default number of topics to display per page in a forum. Users can personalize this setting." -msgid "Posts per page label" -msgstr "Posts per page" - msgid "Posts per page help" msgstr "The default number of posts to display per page in a topic. Users can personalize this setting." diff --git a/app/lang/English/common.po b/app/lang/English/common.po index 8701a0a6..098aebf1 100644 --- a/app/lang/English/common.po +++ b/app/lang/English/common.po @@ -498,3 +498,9 @@ msgstr "Save changes" msgid "Save" msgstr "Save" + +msgid "Yes" +msgstr "Yes" + +msgid "No" +msgstr "No" diff --git a/app/lang/English/profile.po b/app/lang/English/profile.po index 3ce89a1d..fb065c58 100644 --- a/app/lang/English/profile.po +++ b/app/lang/English/profile.po @@ -279,26 +279,41 @@ msgstr "Include a plain text version of new posts in subscription notification e msgid "Auto notify full" msgstr "Automatically subscribe to every topic you post in." -msgid "Show smilies" +msgid "Smilies label" +msgstr "Smilies" + +msgid "Smilies info" msgstr "Show smilies as graphic icons." -msgid "Show images" +msgid "Images label" +msgstr "Images in posts" + +msgid "Images info" msgstr "Show images in posts." -msgid "Show images sigs" +msgid "Images sigs label" +msgstr "Images in signatures" + +msgid "Images sigs info" msgstr "Show images in user signatures." -msgid "Show avatars" +msgid "Avatars label" +msgstr "Avatars" + +msgid "Avatars info" msgstr "Show user avatars in posts." -msgid "Show sigs" +msgid "Sigs label" +msgstr "Signatures" + +msgid "Sigs info" msgstr "Show user signatures." msgid "Style legend" msgstr "Select your preferred style" -msgid "Styles" -msgstr "Styles" +msgid "Style" +msgstr "Style" msgid "Admin note" msgstr "Admin note" @@ -470,3 +485,30 @@ msgstr "Your passphrase has been updated. You can now login with your new passph msgid "Pass updated redirect" msgstr "Passphrase updated. Redirecting …" + +msgid "Language" +msgstr "Language" + +msgid "Essentials" +msgstr "Essentials" + +msgid "Time zone" +msgstr "Time zone" + +msgid "Default" +msgstr "Default" + +msgid "For default" +msgstr "Clean this field for the default settings." + +msgid "Time format" +msgstr "Time format" + +msgid "Date format" +msgstr "Date format" + +msgid "Viewing posts" +msgstr "Viewing posts" + +msgid "Pagination" +msgstr "Pagination" diff --git a/app/lang/English/profile_other.po b/app/lang/English/profile_other.po index 8a5e1173..b3d958bd 100644 --- a/app/lang/English/profile_other.po +++ b/app/lang/English/profile_other.po @@ -140,3 +140,15 @@ msgstr "Hide email address but allow form e-mail" msgid "Hide both label" msgstr "Hide email address and disallow form email" + +msgid "DST label" +msgstr "Adjust for DST" + +msgid "DST help" +msgstr "Check if daylight savings is in effect (advances times by 1 hour)." + +msgid "Topics per page label" +msgstr "Topics per page" + +msgid "Posts per page label" +msgstr "Posts per page" diff --git a/app/lang/Russian/admin.po b/app/lang/Russian/admin.po index 4adb20f3..9277d47f 100644 --- a/app/lang/Russian/admin.po +++ b/app/lang/Russian/admin.po @@ -81,12 +81,6 @@ msgstr "Править" msgid "Remove" msgstr "Убрать" -msgid "Yes" -msgstr "Да" - -msgid "No" -msgstr "Нет" - msgid "here" msgstr "здесь" diff --git a/app/lang/Russian/admin_options.po b/app/lang/Russian/admin_options.po index f8dd3691..d4ebfd93 100644 --- a/app/lang/Russian/admin_options.po +++ b/app/lang/Russian/admin_options.po @@ -57,12 +57,6 @@ msgstr "Часовой пояс по умолчанию" msgid "Timezone help" msgstr "Часовой пояс для гостей и новых пользователей." -msgid "DST label" -msgstr "Поправка на летнее время" - -msgid "DST help" -msgstr "Отметьте, если в вашем регионе применяется поправка на летнее время (сдвигает время на 1 час)." - msgid "Language label" msgstr "Язык по умолчанию" @@ -147,15 +141,9 @@ msgstr "Просмотр темы" msgid "Topic review help" msgstr "Максимальное количество отображаемых сообщений при ответе (новые сверху). Установите в 0 чтобы выключить." -msgid "Topics per page label" -msgstr "Тем на страницу" - msgid "Topics per page help" msgstr "Значение по умолчанию сколько заголовков тем выводить на странице раздела. Пользователь может установить своё значение." -msgid "Posts per page label" -msgstr "Сообщений на страницу" - msgid "Posts per page help" msgstr "Значение по умолчанию сколько сообщений выводить на странице с темой. Пользователь может установить своё значение." diff --git a/app/lang/Russian/common.po b/app/lang/Russian/common.po index 84c5eb7c..01be8a1d 100644 --- a/app/lang/Russian/common.po +++ b/app/lang/Russian/common.po @@ -500,3 +500,9 @@ msgstr "Сохранить изменения" msgid "Save" msgstr "Сохранить" + +msgid "Yes" +msgstr "Да" + +msgid "No" +msgstr "Нет" diff --git a/app/lang/Russian/profile.po b/app/lang/Russian/profile.po index efb3af51..4336f8af 100644 --- a/app/lang/Russian/profile.po +++ b/app/lang/Russian/profile.po @@ -279,26 +279,41 @@ msgstr "Включать в письмо-уведомление текстову msgid "Auto notify full" msgstr "Автоматически подписываться на темы, в которых публикуете сообщения." -msgid "Show smilies" -msgstr "Показывать смайлики как графику" +msgid "Smilies label" +msgstr "Смайлы" -msgid "Show images" -msgstr "Показывать изображения в сообщениях" +msgid "Smilies info" +msgstr "Показывать смайлики как графику." -msgid "Show images sigs" -msgstr "Показывать изображения в подписях" +msgid "Images label" +msgstr "Изображения в сообщениях" -msgid "Show avatars" -msgstr "Показывать аватары пользователей" +msgid "Images info" +msgstr "Показывать изображения в сообщениях." -msgid "Show sigs" -msgstr "Показывать подписи пользователей" +msgid "Images sigs label" +msgstr "Изображения в подписях" + +msgid "Images sigs info" +msgstr "Показывать изображения в подписях." + +msgid "Avatars label" +msgstr "Аватары" + +msgid "Avatars info" +msgstr "Показывать аватары пользователей." + +msgid "Sigs label" +msgstr "Подписи" + +msgid "Sigs info" +msgstr "Показывать подписи пользователей." msgid "Style legend" msgstr "Настройка стиля оформления" -msgid "Styles" -msgstr "Стили" +msgid "Style" +msgstr "Стиль" msgid "Admin note" msgstr "Примечание администрации" @@ -470,3 +485,30 @@ msgstr "Ваша кодовая фраза изменена. Вы можете msgid "Pass updated redirect" msgstr "Кодовая фраза изменена. Переадресация …" + +msgid "Language" +msgstr "Язык" + +msgid "Essentials" +msgstr "Основное" + +msgid "Time zone" +msgstr "Часовой пояс" + +msgid "Default" +msgstr "По умолчанию" + +msgid "For default" +msgstr "Очистите поле для использования значения по умолчанию." + +msgid "Time format" +msgstr "Формат времени" + +msgid "Date format" +msgstr "Формат даты" + +msgid "Viewing posts" +msgstr "Просмотр сообщений" + +msgid "Pagination" +msgstr "Постраничный вывод" diff --git a/app/lang/Russian/profile_other.po b/app/lang/Russian/profile_other.po index ecceeb90..85feb957 100644 --- a/app/lang/Russian/profile_other.po +++ b/app/lang/Russian/profile_other.po @@ -140,3 +140,15 @@ msgstr "Спрятать email, но разрешить отправку пис msgid "Hide both label" msgstr "Спрятать email и запретить отправку писем" + +msgid "DST label" +msgstr "Поправка на летнее время" + +msgid "DST help" +msgstr "Отметьте, если в вашем регионе применяется поправка на летнее время (сдвигает время на 1 час)." + +msgid "Topics per page label" +msgstr "Тем на странице" + +msgid "Posts per page label" +msgstr "Сообщений на странице"