Compare commits

...

2 commits

Author SHA1 Message Date
65308f8bda
style: mix format
All checks were successful
Checks / check (pull_request) Successful in -6m26s
2024-12-12 18:52:36 +02:00
f7f0ebbb25
trans: errors.po 2024-12-12 18:52:07 +02:00
8 changed files with 114 additions and 103 deletions

View file

@ -83,7 +83,7 @@ defmodule ExmrWeb.CoreComponents do
</button> </button>
</div> </div>
<div id={"#{@id}-content"}> <div id={"#{@id}-content"}>
<%= render_slot(@inner_block) %> {render_slot(@inner_block)}
</div> </div>
</.focus_wrap> </.focus_wrap>
</div> </div>
@ -128,9 +128,9 @@ defmodule ExmrWeb.CoreComponents do
<p :if={@title} class="flex items-center gap-1.5 text-sm font-semibold leading-6"> <p :if={@title} class="flex items-center gap-1.5 text-sm font-semibold leading-6">
<.icon :if={@kind == :info} name="hero-information-circle-mini" class="h-4 w-4" /> <.icon :if={@kind == :info} name="hero-information-circle-mini" class="h-4 w-4" />
<.icon :if={@kind == :error} name="hero-exclamation-circle-mini" class="h-4 w-4" /> <.icon :if={@kind == :error} name="hero-exclamation-circle-mini" class="h-4 w-4" />
<%= @title %> {@title}
</p> </p>
<p class="mt-2 text-sm leading-5"><%= msg %></p> <p class="mt-2 text-sm leading-5">{msg}</p>
<button type="button" class="group absolute top-1 right-1 p-2" aria-label={gettext("close")}> <button type="button" class="group absolute top-1 right-1 p-2" aria-label={gettext("close")}>
<.icon name="hero-x-mark-solid" class="h-5 w-5 opacity-40 group-hover:opacity-70" /> <.icon name="hero-x-mark-solid" class="h-5 w-5 opacity-40 group-hover:opacity-70" />
</button> </button>
@ -161,7 +161,7 @@ defmodule ExmrWeb.CoreComponents do
phx-connected={hide("#client-error")} phx-connected={hide("#client-error")}
hidden hidden
> >
<%= gettext("Attempting to reconnect") %> {gettext("Attempting to reconnect")}
<.icon name="hero-arrow-path" class="ml-1 h-3 w-3 animate-spin" /> <.icon name="hero-arrow-path" class="ml-1 h-3 w-3 animate-spin" />
</.flash> </.flash>
@ -173,7 +173,7 @@ defmodule ExmrWeb.CoreComponents do
phx-connected={hide("#server-error")} phx-connected={hide("#server-error")}
hidden hidden
> >
<%= gettext("Hang in there while we get back on track") %> {gettext("Hang in there while we get back on track")}
<.icon name="hero-arrow-path" class="ml-1 h-3 w-3 animate-spin" /> <.icon name="hero-arrow-path" class="ml-1 h-3 w-3 animate-spin" />
</.flash> </.flash>
</div> </div>
@ -207,12 +207,12 @@ defmodule ExmrWeb.CoreComponents do
~H""" ~H"""
<.form :let={f} for={@for} as={@as} {@rest}> <.form :let={f} for={@for} as={@as} {@rest}>
<div class="mt-10 space-y-8 bg-white dark:bg-zinc-950"> <div class="mt-10 space-y-8 bg-white dark:bg-zinc-950">
<%= render_slot(@inner_block, f) %> {render_slot(@inner_block, f)}
<div <div
:for={action <- @actions} :for={action <- @actions}
class="mt-2 flex items-center justify-between gap-6 dark:text-zinc-100" class="mt-2 flex items-center justify-between gap-6 dark:text-zinc-100"
> >
<%= render_slot(action, f) %> {render_slot(action, f)}
</div> </div>
</div> </div>
</.form> </.form>
@ -244,7 +244,7 @@ defmodule ExmrWeb.CoreComponents do
]} ]}
{@rest} {@rest}
> >
<%= render_slot(@inner_block) %> {render_slot(@inner_block)}
</button> </button>
""" """
end end
@ -328,9 +328,9 @@ defmodule ExmrWeb.CoreComponents do
class="rounded border-zinc-300 text-zinc-900 focus:ring-0" class="rounded border-zinc-300 text-zinc-900 focus:ring-0"
{@rest} {@rest}
/> />
<%= @label %> {@label}
</label> </label>
<.error :for={msg <- @errors}><%= msg %></.error> <.error :for={msg <- @errors}>{msg}</.error>
</div> </div>
""" """
end end
@ -338,7 +338,7 @@ defmodule ExmrWeb.CoreComponents do
def input(%{type: "select"} = assigns) do def input(%{type: "select"} = assigns) do
~H""" ~H"""
<div> <div>
<.label for={@id}><%= @label %></.label> <.label for={@id}>{@label}</.label>
<select <select
id={@id} id={@id}
name={@name} name={@name}
@ -346,10 +346,10 @@ defmodule ExmrWeb.CoreComponents do
multiple={@multiple} multiple={@multiple}
{@rest} {@rest}
> >
<option :if={@prompt} value=""><%= @prompt %></option> <option :if={@prompt} value="">{@prompt}</option>
<%= Phoenix.HTML.Form.options_for_select(@options, @value) %> {Phoenix.HTML.Form.options_for_select(@options, @value)}
</select> </select>
<.error :for={msg <- @errors}><%= msg %></.error> <.error :for={msg <- @errors}>{msg}</.error>
</div> </div>
""" """
end end
@ -357,7 +357,7 @@ defmodule ExmrWeb.CoreComponents do
def input(%{type: "textarea"} = assigns) do def input(%{type: "textarea"} = assigns) do
~H""" ~H"""
<div> <div>
<.label for={@id}><%= @label %></.label> <.label for={@id}>{@label}</.label>
<textarea <textarea
id={@id} id={@id}
name={@name} name={@name}
@ -368,7 +368,7 @@ defmodule ExmrWeb.CoreComponents do
]} ]}
{@rest} {@rest}
><%= Phoenix.HTML.Form.normalize_value("textarea", @value) %></textarea> ><%= Phoenix.HTML.Form.normalize_value("textarea", @value) %></textarea>
<.error :for={msg <- @errors}><%= msg %></.error> <.error :for={msg <- @errors}>{msg}</.error>
</div> </div>
""" """
end end
@ -377,7 +377,7 @@ defmodule ExmrWeb.CoreComponents do
def input(assigns) do def input(assigns) do
~H""" ~H"""
<div> <div>
<.label for={@id}><%= @label %></.label> <.label for={@id}>{@label}</.label>
<input <input
type={@type} type={@type}
name={@name} name={@name}
@ -390,7 +390,7 @@ defmodule ExmrWeb.CoreComponents do
]} ]}
{@rest} {@rest}
/> />
<.error :for={msg <- @errors}><%= msg %></.error> <.error :for={msg <- @errors}>{msg}</.error>
</div> </div>
""" """
end end
@ -404,7 +404,7 @@ defmodule ExmrWeb.CoreComponents do
def label(assigns) do def label(assigns) do
~H""" ~H"""
<label for={@for} class="block text-sm font-semibold leading-6 text-zinc-800 dark:text-zinc-200"> <label for={@for} class="block text-sm font-semibold leading-6 text-zinc-800 dark:text-zinc-200">
<%= render_slot(@inner_block) %> {render_slot(@inner_block)}
</label> </label>
""" """
end end
@ -418,7 +418,7 @@ defmodule ExmrWeb.CoreComponents do
~H""" ~H"""
<p class="mt-3 flex gap-3 text-sm leading-6 text-rose-600"> <p class="mt-3 flex gap-3 text-sm leading-6 text-rose-600">
<.icon name="hero-exclamation-circle-mini" class="mt-0.5 h-5 w-5 flex-none" /> <.icon name="hero-exclamation-circle-mini" class="mt-0.5 h-5 w-5 flex-none" />
<%= render_slot(@inner_block) %> {render_slot(@inner_block)}
</p> </p>
""" """
end end
@ -437,13 +437,13 @@ defmodule ExmrWeb.CoreComponents do
<header class={[@actions != [] && "flex items-center justify-between gap-6", @class]}> <header class={[@actions != [] && "flex items-center justify-between gap-6", @class]}>
<div> <div>
<h1 class="text-lg font-semibold leading-8 text-zinc-800 dark:text-zinc-200"> <h1 class="text-lg font-semibold leading-8 text-zinc-800 dark:text-zinc-200">
<%= render_slot(@inner_block) %> {render_slot(@inner_block)}
</h1> </h1>
<p :if={@subtitle != []} class="mt-2 text-sm leading-6 text-zinc-600 dark:text-zinc-100"> <p :if={@subtitle != []} class="mt-2 text-sm leading-6 text-zinc-600 dark:text-zinc-100">
<%= render_slot(@subtitle) %> {render_slot(@subtitle)}
</p> </p>
</div> </div>
<div class="flex-none"><%= render_slot(@actions) %></div> <div class="flex-none">{render_slot(@actions)}</div>
</header> </header>
""" """
end end
@ -484,9 +484,9 @@ defmodule ExmrWeb.CoreComponents do
<table class="w-[40rem] mt-11 sm:w-full"> <table class="w-[40rem] mt-11 sm:w-full">
<thead class="text-sm text-left leading-6 text-zinc-500"> <thead class="text-sm text-left leading-6 text-zinc-500">
<tr> <tr>
<th :for={col <- @col} class="p-0 pb-4 pr-6 font-normal"><%= col[:label] %></th> <th :for={col <- @col} class="p-0 pb-4 pr-6 font-normal">{col[:label]}</th>
<th :if={@action != []} class="relative p-0 pb-4"> <th :if={@action != []} class="relative p-0 pb-4">
<span class="sr-only"><%= gettext("Actions") %></span> <span class="sr-only">{gettext("Actions")}</span>
</th> </th>
</tr> </tr>
</thead> </thead>
@ -504,7 +504,7 @@ defmodule ExmrWeb.CoreComponents do
<div class="block py-4 pr-6"> <div class="block py-4 pr-6">
<span class="absolute -inset-y-px right-0 -left-4 group-hover:bg-zinc-50 sm:rounded-l-xl" /> <span class="absolute -inset-y-px right-0 -left-4 group-hover:bg-zinc-50 sm:rounded-l-xl" />
<span class={["relative", i == 0 && "font-semibold text-zinc-900"]}> <span class={["relative", i == 0 && "font-semibold text-zinc-900"]}>
<%= render_slot(col, @row_item.(row)) %> {render_slot(col, @row_item.(row))}
</span> </span>
</div> </div>
</td> </td>
@ -515,7 +515,7 @@ defmodule ExmrWeb.CoreComponents do
:for={action <- @action} :for={action <- @action}
class="relative ml-4 font-semibold leading-6 text-zinc-900 hover:text-zinc-700" class="relative ml-4 font-semibold leading-6 text-zinc-900 hover:text-zinc-700"
> >
<%= render_slot(action, @row_item.(row)) %> {render_slot(action, @row_item.(row))}
</span> </span>
</div> </div>
</td> </td>
@ -545,8 +545,8 @@ defmodule ExmrWeb.CoreComponents do
<div class="mt-14"> <div class="mt-14">
<dl class="-my-4 divide-y divide-zinc-100"> <dl class="-my-4 divide-y divide-zinc-100">
<div :for={item <- @item} class="flex gap-4 py-4 text-sm leading-6 sm:gap-8"> <div :for={item <- @item} class="flex gap-4 py-4 text-sm leading-6 sm:gap-8">
<dt class="w-1/4 flex-none text-zinc-500"><%= item.title %></dt> <dt class="w-1/4 flex-none text-zinc-500">{item.title}</dt>
<dd class="text-zinc-700"><%= render_slot(item) %></dd> <dd class="text-zinc-700">{render_slot(item)}</dd>
</div> </div>
</dl> </dl>
</div> </div>
@ -571,7 +571,7 @@ defmodule ExmrWeb.CoreComponents do
class="text-sm font-semibold leading-6 text-zinc-900 hover:text-zinc-700" class="text-sm font-semibold leading-6 text-zinc-900 hover:text-zinc-700"
> >
<.icon name="hero-arrow-left-solid" class="h-3 w-3" /> <.icon name="hero-arrow-left-solid" class="h-3 w-3" />
<%= render_slot(@inner_block) %> {render_slot(@inner_block)}
</.link> </.link>
</div> </div>
""" """

View file

@ -5,7 +5,7 @@
<img src={~p"/images/logo.svg"} width="36" /> <img src={~p"/images/logo.svg"} width="36" />
</a> </a>
<p class="bg-brand/5 text-brand rounded-full px-2 font-medium leading-6"> <p class="bg-brand/5 text-brand rounded-full px-2 font-medium leading-6">
v<%= Application.spec(:exmr, :vsn) %> v{Application.spec(:exmr, :vsn)}
</p> </p>
</div> </div>
</div> </div>
@ -13,6 +13,6 @@
<main class="px-4 py-20 sm:px-6 lg:px-8"> <main class="px-4 py-20 sm:px-6 lg:px-8">
<div class="mx-auto max-w-2xl"> <div class="mx-auto max-w-2xl">
<.flash_group flash={@flash} /> <.flash_group flash={@flash} />
<%= @inner_content %> {@inner_content}
</div> </div>
</main> </main>

View file

@ -5,7 +5,7 @@
<meta name="viewport" content="width=device-width, initial-scale=1" /> <meta name="viewport" content="width=device-width, initial-scale=1" />
<meta name="csrf-token" content={get_csrf_token()} /> <meta name="csrf-token" content={get_csrf_token()} />
<.live_title suffix=" · Phoenix Framework"> <.live_title suffix=" · Phoenix Framework">
<%= assigns[:page_title] || "Exmr" %> {assigns[:page_title] || "Exmr"}
</.live_title> </.live_title>
<link phx-track-static rel="stylesheet" href={~p"/assets/app.css"} /> <link phx-track-static rel="stylesheet" href={~p"/assets/app.css"} />
<script> <script>
@ -23,14 +23,14 @@
<DarkMode.button /> <DarkMode.button />
<%= if @current_user do %> <%= if @current_user do %>
<li class="text-[0.8125rem] leading-6 text-zinc-900 dark:text-zinc-300"> <li class="text-[0.8125rem] leading-6 text-zinc-900 dark:text-zinc-300">
<%= @current_user.email %> {@current_user.email}
</li> </li>
<li> <li>
<.link <.link
href={~p"/users/settings"} href={~p"/users/settings"}
class="text-[0.8125rem] leading-6 text-zinc-900 font-semibold hover:text-zinc-700 dark:text-zinc-300 dark:hover:text-zinc-100" class="text-[0.8125rem] leading-6 text-zinc-900 font-semibold hover:text-zinc-700 dark:text-zinc-300 dark:hover:text-zinc-100"
> >
<%= gettext("Settings") %> {gettext("Settings")}
</.link> </.link>
</li> </li>
<li> <li>
@ -39,7 +39,7 @@
method="delete" method="delete"
class="text-[0.8125rem] leading-6 text-zinc-900 font-semibold hover:text-zinc-700 dark:text-zinc-300 dark:hover:text-zinc-100" class="text-[0.8125rem] leading-6 text-zinc-900 font-semibold hover:text-zinc-700 dark:text-zinc-300 dark:hover:text-zinc-100"
> >
<%= gettext("Log out") %> {gettext("Log out")}
</.link> </.link>
</li> </li>
<% else %> <% else %>
@ -61,6 +61,6 @@
</li> </li>
<% end %> <% end %>
</ul> </ul>
<%= @inner_content %> {@inner_content}
</body> </body>
</html> </html>

View file

@ -44,14 +44,14 @@
<h1 class="mt-10 flex items-center text-sm font-semibold leading-6 text-purple-400"> <h1 class="mt-10 flex items-center text-sm font-semibold leading-6 text-purple-400">
ExMR ExMR
<small class="bg-brand/5 text-[0.8125rem] ml-3 rounded-full px-2 font-medium leading-6 text-purple-400"> <small class="bg-brand/5 text-[0.8125rem] ml-3 rounded-full px-2 font-medium leading-6 text-purple-400">
v<%= Application.spec(:exmr, :vsn) %> v{Application.spec(:exmr, :vsn)}
</small> </small>
</h1> </h1>
<p class="text-[2rem] mt-4 font-semibold leading-10 tracking-tighter text-zinc-900 dark:text-zinc-200/90 text-balance"> <p class="text-[2rem] mt-4 font-semibold leading-10 tracking-tighter text-zinc-900 dark:text-zinc-200/90 text-balance">
<%= gettext("A simple, modern, and fast exam management system.") %> {gettext("A simple, modern, and fast exam management system.")}
</p> </p>
<p class="mt-4 text-base leading-7 text-zinc-600 dark:text-zinc-300"> <p class="mt-4 text-base leading-7 text-zinc-600 dark:text-zinc-300">
<%= gettext("Built using Phoenix LiveView, Ecto, and TailwindCSS by @vavakado") %> {gettext("Built using Phoenix LiveView, Ecto, and TailwindCSS by @vavakado")}
</p> </p>
<div class="flex"> <div class="flex">
<div class="w-full sm:w-auto"> <div class="w-full sm:w-auto">
@ -93,7 +93,7 @@
</div> </div>
<div class="text-center py-8 font-bold text-3xl text-red-600"> <div class="text-center py-8 font-bold text-3xl text-red-600">
<.link navigate={~p"/exams"} class="underline hover:text-red-400 transition-all ease-in-out"> <.link navigate={~p"/exams"} class="underline hover:text-red-400 transition-all ease-in-out">
<%= gettext("Exams") %> {gettext("Exams")}
</.link> </.link>
</div> </div>
</div> </div>

View file

@ -8,9 +8,9 @@ defmodule ExmrWeb.ExamLive.FormComponent do
~H""" ~H"""
<div> <div>
<.header> <.header>
<%= @title %> {@title}
<:subtitle> <:subtitle>
<%= gettext("Use this form to manage exam records in your database.") %> {gettext("Use this form to manage exam records in your database.")}
</:subtitle> </:subtitle>
</.header> </.header>
@ -25,7 +25,7 @@ defmodule ExmrWeb.ExamLive.FormComponent do
<.input field={@form[:description]} type="text" label={gettext("Description")} /> <.input field={@form[:description]} type="text" label={gettext("Description")} />
<.input field={@form[:date]} type="date" label={gettext("Date")} /> <.input field={@form[:date]} type="date" label={gettext("Date")} />
<:actions> <:actions>
<.button phx-disable-with={gettext("Saving...")}><%= gettext("Save Exam") %></.button> <.button phx-disable-with={gettext("Saving...")}>{gettext("Save Exam")}</.button>
</:actions> </:actions>
</.simple_form> </.simple_form>
</div> </div>

View file

@ -1,6 +1,6 @@
<.header> <.header>
exam №<%= @exam.id %> exam №{@exam.id}
<:subtitle>очередная контрольная работа по <strong><%= @exam.subject %></strong></:subtitle> <:subtitle>очередная контрольная работа по <strong>{@exam.subject}</strong></:subtitle>
<:actions> <:actions>
<.link patch={~p"/exams/#{@exam}/show/edit"} phx-click={JS.push_focus()}> <.link patch={~p"/exams/#{@exam}/show/edit"} phx-click={JS.push_focus()}>
<.button>изменить</.button> <.button>изменить</.button>
@ -9,8 +9,8 @@
</.header> </.header>
<.list> <.list>
<:item title="Description"><%= @exam.description %></:item> <:item title="Description">{@exam.description}</:item>
<:item title="Date"><%= @exam.date %></:item> <:item title="Date">{@exam.date}</:item>
</.list> </.list>
<.back navigate={~p"/exams"}>Back to exams</.back> <.back navigate={~p"/exams"}>Back to exams</.back>

View file

@ -6,8 +6,8 @@ defmodule ExmrWeb.UserSettingsLive do
def render(assigns) do def render(assigns) do
~H""" ~H"""
<.header class="text-center"> <.header class="text-center">
<%= gettext("Account Settings") %> {gettext("Account Settings")}
<:subtitle><%= gettext("Manage your account email address and password settings") %></:subtitle> <:subtitle>{gettext("Manage your account email address and password settings")}</:subtitle>
</.header> </.header>
<div class="space-y-12 divide-y"> <div class="space-y-12 divide-y">
@ -30,7 +30,7 @@ defmodule ExmrWeb.UserSettingsLive do
/> />
<:actions> <:actions>
<.button phx-disable-with={gettext("Changing...")}> <.button phx-disable-with={gettext("Changing...")}>
<%= gettext("Change Email") %> {gettext("Change Email")}
</.button> </.button>
</:actions> </:actions>
</.simple_form> </.simple_form>
@ -73,7 +73,7 @@ defmodule ExmrWeb.UserSettingsLive do
/> />
<:actions> <:actions>
<.button phx-disable-with={gettext("Changing...")}> <.button phx-disable-with={gettext("Changing...")}>
<%= gettext("Change Password") %> {gettext("Change Password")}
</.button> </.button>
</:actions> </:actions>
</.simple_form> </.simple_form>

View file

@ -1,111 +1,122 @@
## "msgid"s in this file come from POT (.pot) files. # # "msgid"s in this file come from POT (.pot) files.
### # ##
### Do not add, change, or remove "msgid"s manually here as # ## Do not add, change, or remove "msgid"s manually here as
### they're tied to the ones in the corresponding POT file # ## they're tied to the ones in the corresponding POT file
### (with the same domain). # ## (with the same domain).
### # ##
### Use "mix gettext.extract --merge" or "mix gettext.merge" # ## Use "mix gettext.extract --merge" or "mix gettext.merge"
### to merge POT files into PO files. # ## to merge POT files into PO files.
# Vladimir Rubin <vavakado@proton.me>, 2024.
#
msgid "" msgid ""
msgstr "" msgstr ""
"Language: ru\n" "Language: ru\n"
"Plural-Forms: nplurals=3; plural=(n%10==1 && n%100 != 11 ? 0 : n%10>=2 && n%10<=4 && (n%100<10||n%100>=20) ? 1 : 2);\n" "Plural-Forms: nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && "
"n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2);\n"
"MIME-Version: 1.0\n"
"Project-Id-Version: unnamed project\n"
"Last-Translator: Vladimir Rubin <vavakado@proton.me>\n"
"Language-Team: Russian\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"PO-Revision-Date: 2024-12-12 18:52+0200\n"
"X-Generator: Gtranslator 47.1\n"
msgid "can't be blank" msgid "can't be blank"
msgstr "" msgstr "не может быть пустым"
msgid "has already been taken" msgid "has already been taken"
msgstr "" msgstr "уже забрали"
msgid "is invalid" msgid "is invalid"
msgstr "" msgstr "недействителен"
msgid "must be accepted" msgid "must be accepted"
msgstr "" msgstr "должен быть принят"
msgid "has invalid format" msgid "has invalid format"
msgstr "" msgstr "имеет неправильный формат"
msgid "has an invalid entry" msgid "has an invalid entry"
msgstr "" msgstr "имеет недопустимую запись"
msgid "is reserved" msgid "is reserved"
msgstr "" msgstr "зарезервирован"
msgid "does not match confirmation" msgid "does not match confirmation"
msgstr "" msgstr "не соответствует подтверждению"
msgid "is still associated with this entry" msgid "is still associated with this entry"
msgstr "" msgstr "по-прежнему связана с этой записью"
msgid "are still associated with this entry" msgid "are still associated with this entry"
msgstr "" msgstr "по-прежнему связаны с этой записью"
msgid "should have %{count} item(s)" msgid "should have %{count} item(s)"
msgid_plural "should have %{count} item(s)" msgid_plural "should have %{count} item(s)"
msgstr[0] "" msgstr[0] "должен иметь %{count} элементов"
msgstr[1] "" msgstr[1] "должен иметь %{count} элемента"
msgstr[2] "" msgstr[2] "должен иметь %{count} элементов"
msgid "should be %{count} character(s)" msgid "should be %{count} character(s)"
msgid_plural "should be %{count} character(s)" msgid_plural "should be %{count} character(s)"
msgstr[0] "" msgstr[0] "должен быть %{count} символов"
msgstr[1] "" msgstr[1] "должен быть %{count} символа"
msgstr[2] "" msgstr[2] "должен быть %{count} символов"
msgid "should be %{count} byte(s)" msgid "should be %{count} byte(s)"
msgid_plural "should be %{count} byte(s)" msgid_plural "should be %{count} byte(s)"
msgstr[0] "" msgstr[0] "должно быть %{count} байт"
msgstr[1] "" msgstr[1] "должно быть %{count} байта"
msgstr[2] "" msgstr[2] "должно быть %{count} байтов"
msgid "should have at least %{count} item(s)" msgid "should have at least %{count} item(s)"
msgid_plural "should have at least %{count} item(s)" msgid_plural "should have at least %{count} item(s)"
msgstr[0] "" msgstr[0] "должно быть не менее %{count} элементов"
msgstr[1] "" msgstr[1] "должно быть не менее %{count} элемента"
msgstr[2] "" msgstr[2] "должно быть не менее %{count} элементов"
msgid "should be at least %{count} character(s)" msgid "should be at least %{count} character(s)"
msgid_plural "should be at least %{count} character(s)" msgid_plural "should be at least %{count} character(s)"
msgstr[0] "" msgstr[0] "должно быть не менее %{count} символов"
msgstr[1] "" msgstr[1] "должно быть не менее %{count} символа"
msgstr[2] "" msgstr[2] "должно быть не менее %{count} символов"
msgid "should be at least %{count} byte(s)" msgid "should be at least %{count} byte(s)"
msgid_plural "should be at least %{count} byte(s)" msgid_plural "should be at least %{count} byte(s)"
msgstr[0] "" msgstr[0] "должно быть хотя бы %{count} байт"
msgstr[1] "" msgstr[1] "должно быть хотя бы %{count} байта"
msgstr[2] "" msgstr[2] "должно быть хотя бы %{count} байтов"
msgid "should have at most %{count} item(s)" msgid "should have at most %{count} item(s)"
msgid_plural "should have at most %{count} item(s)" msgid_plural "should have at most %{count} item(s)"
msgstr[0] "" msgstr[0] "должно содержать не более %{count} элементов"
msgstr[1] "" msgstr[1] "должно содержать не более %{count} элементов"
msgstr[2] "" msgstr[2] "должно содержать не более %{count} элементов"
msgid "should be at most %{count} character(s)" msgid "should be at most %{count} character(s)"
msgid_plural "should be at most %{count} character(s)" msgid_plural "should be at most %{count} character(s)"
msgstr[0] "" msgstr[0] "должно быть не более %{count} символа(ов)"
msgstr[1] "" msgstr[1] "должно быть не более %{count} символа(ов)"
msgstr[2] "" msgstr[2] "должно быть не более %{count} символа(ов)"
msgid "should be at most %{count} byte(s)" msgid "should be at most %{count} byte(s)"
msgid_plural "should be at most %{count} byte(s)" msgid_plural "should be at most %{count} byte(s)"
msgstr[0] "" msgstr[0] "должно быть не более %{count} байт(ов)."
msgstr[1] "" msgstr[1] "должно быть не более %{count} байт(ов)."
msgstr[2] "" msgstr[2] "должно быть не более %{count} байт(ов)."
msgid "must be less than %{number}" msgid "must be less than %{number}"
msgstr "" msgstr "должно быть меньше, чем %{number}"
msgid "must be greater than %{number}" msgid "must be greater than %{number}"
msgstr "" msgstr "должно быть больше, чем %{number}"
msgid "must be less than or equal to %{number}" msgid "must be less than or equal to %{number}"
msgstr "" msgstr "должно быть меньше или равно %{number}"
msgid "must be greater than or equal to %{number}" msgid "must be greater than or equal to %{number}"
msgstr "" msgstr "должно быть больше или равно %{number}"
msgid "must be equal to %{number}" msgid "must be equal to %{number}"
msgstr "" msgstr "должно быть равно %{number}"