allow filtering ammo types when creating new packs and fix some form errors not displaying on create

This commit is contained in:
shibao 2024-10-26 15:15:14 -04:00
parent 7e14f292a6
commit ab3d3721d6
33 changed files with 404 additions and 266 deletions

View File

@ -1,4 +1,5 @@
# v0.9.12
- Allow filtering ammo types when creating new packs
- Add SlimSelect to select elements with user content
- Fix registration page not offering all translations
- Update deps

View File

@ -959,25 +959,79 @@ defmodule Cannery.Ammo do
defp do_create_packs(
%{"type_id" => type_id, "container_id" => container_id} = attrs,
_multiplier,
multiplier,
user
)
when is_binary(type_id) and is_binary(container_id) do
changeset =
%Pack{}
|> Pack.create_changeset(
get_type!(type_id, user),
Containers.get_container!(container_id, user),
user,
attrs
)
|> Changeset.add_error(:multiplier, dgettext("errors", "Invalid multiplier"))
{:error, changeset}
%Pack{}
|> Pack.create_changeset(
get_type!(type_id, user),
Containers.get_container!(container_id, user),
user,
attrs
)
|> maybe_add_multiplier_error(multiplier)
|> Changeset.apply_action(:insert)
end
defp do_create_packs(invalid_attrs, _multiplier, user) do
{:error, %Pack{} |> Pack.create_changeset(nil, nil, user, invalid_attrs)}
defp do_create_packs(
%{"type_id" => type_id} = attrs,
multiplier,
user
)
when is_binary(type_id) do
%Pack{}
|> Pack.create_changeset(
get_type!(type_id, user),
nil,
user,
attrs
)
|> maybe_add_multiplier_error(multiplier)
|> Changeset.apply_action(:insert)
end
defp do_create_packs(
%{"container_id" => container_id} = attrs,
multiplier,
user
)
when is_binary(container_id) do
%Pack{}
|> Pack.create_changeset(
nil,
Containers.get_container!(container_id, user),
user,
attrs
)
|> maybe_add_multiplier_error(multiplier)
|> Changeset.apply_action(:insert)
end
defp do_create_packs(invalid_attrs, multiplier, user) do
%Pack{}
|> Pack.create_changeset(nil, nil, user, invalid_attrs)
|> maybe_add_multiplier_error(multiplier)
|> Changeset.apply_action(:insert)
end
defp maybe_add_multiplier_error(changeset, multiplier)
when multiplier >= 1 and
multiplier <= @pack_create_limit do
changeset
end
defp maybe_add_multiplier_error(changeset, multiplier) do
changeset
|> Changeset.add_error(
:multiplier,
dgettext(
"errors",
"Invalid number of copies, must be between 1 and %{max}. Was %{multiplier}",
max: @pack_create_limit,
multiplier: multiplier
)
)
end
@spec preload_pack(Pack.t()) :: Pack.t()

View File

@ -70,36 +70,45 @@ defmodule Cannery.Ammo.Pack do
) :: changeset()
def create_changeset(
pack,
%Type{id: type_id},
%Container{id: container_id, user_id: user_id},
type,
container,
%User{id: user_id},
attrs
)
when is_binary(type_id) and is_binary(container_id) and is_binary(user_id) do
when is_binary(user_id) do
type_id =
case type do
%Type{id: type_id} when is_binary(type_id) ->
type_id
_invalid_type ->
nil
end
container_id =
case container do
%Container{id: container_id, user_id: ^user_id} when is_binary(container_id) ->
container_id
_invalid_container ->
nil
end
pack
|> change(type_id: type_id)
|> change(user_id: user_id)
|> change(container_id: container_id)
|> cast(attrs, [:count, :price_paid, :notes, :staged, :purchased_on, :lot_number])
|> change(user_id: user_id)
|> cast(attrs, [:count, :lot_number, :notes, :price_paid, :purchased_on, :staged])
|> validate_required(:type_id, message: dgettext("errors", "Please select a valid type"))
|> validate_required(:container_id,
message: dgettext("errors", "Please select a valid container")
)
|> validate_number(:count, greater_than: 0)
|> validate_number(:price_paid, greater_than_or_equal_to: 0)
|> validate_length(:lot_number, max: 255)
|> validate_required([:count, :staged, :purchased_on, :type_id, :container_id, :user_id])
end
@doc """
Invalid changeset, used to prompt user to select type and container
"""
def create_changeset(pack, _invalid_type, _invalid_container, _invalid_user, attrs) do
pack
|> cast(attrs, [:type_id, :container_id])
|> validate_required([:type_id, :container_id])
|> validate_number(:count, greater_than: 0)
|> validate_number(:price_paid, greater_than_or_equal_to: 0)
|> validate_length(:lot_number, max: 255)
|> add_error(:invalid, dgettext("errors", "Please select a type and container"))
end
@doc false
@spec update_changeset(t() | new_pack(), attrs :: map(), User.t()) :: changeset()
def update_changeset(pack, attrs, user) do

View File

@ -9,7 +9,11 @@ defmodule CanneryWeb.PackLive.FormComponent do
alias Ecto.Changeset
alias Phoenix.LiveView.Socket
@pack_create_limit 10_000
@impl true
@spec mount(Socket.t()) :: {:ok, Socket.t()}
def mount(socket) do
{:ok, socket |> assign(:class, :all)}
end
@impl true
@spec update(
@ -24,7 +28,6 @@ defmodule CanneryWeb.PackLive.FormComponent do
def update(%{assigns: %{current_user: current_user}} = socket) do
socket =
socket
|> assign(:pack_create_limit, @pack_create_limit)
|> assign(:types, Ammo.list_types(current_user))
|> assign_new(:containers, fn -> Containers.list_containers(current_user) end)
@ -33,7 +36,20 @@ defmodule CanneryWeb.PackLive.FormComponent do
@impl true
def handle_event("validate", %{"pack" => pack_params}, socket) do
{:noreply, socket |> assign_changeset(pack_params, :validate)}
matched_class =
case pack_params["class"] do
"rifle" -> :rifle
"shotgun" -> :shotgun
"pistol" -> :pistol
_other -> :all
end
socket =
socket
|> assign_changeset(pack_params, :validate)
|> assign(:class, matched_class)
{:noreply, socket}
end
def handle_event(
@ -51,11 +67,18 @@ defmodule CanneryWeb.PackLive.FormComponent do
containers |> Enum.map(fn %{id: id, name: name} -> {name, id} end)
end
@spec type_options([Type.t()]) :: [{String.t(), Type.id()}]
defp type_options(types) do
@spec type_options([Type.t()], Type.class() | :all) ::
[{String.t(), Type.id()}]
defp type_options(types, :all) do
types |> Enum.map(fn %{id: id, name: name} -> {name, id} end)
end
defp type_options(types, selected_class) do
types
|> Enum.filter(fn %{class: class} -> class == selected_class end)
|> Enum.map(fn %{id: id, name: name} -> {name, id} end)
end
# Save Helpers
defp assign_changeset(
@ -126,53 +149,15 @@ defmodule CanneryWeb.PackLive.FormComponent do
end
defp save_pack(
%{assigns: %{changeset: changeset}} = socket,
%{assigns: %{changeset: changeset, current_user: current_user, return_to: return_to}} =
socket,
action,
%{"multiplier" => multiplier_str} = pack_params
)
when action in [:new, :clone] do
socket =
case multiplier_str |> Integer.parse() do
{multiplier, _remainder}
when multiplier >= 1 and multiplier <= @pack_create_limit ->
socket |> create_multiple(pack_params, multiplier)
{multiplier, _remainder} ->
error_msg =
dgettext(
"errors",
"Invalid number of copies, must be between 1 and %{max}. Was %{multiplier}",
max: @pack_create_limit,
multiplier: multiplier
)
save_multiplier_error(socket, changeset, error_msg)
:error ->
error_msg = dgettext("errors", "Could not parse number of copies")
save_multiplier_error(socket, changeset, error_msg)
end
{:noreply, socket}
end
@spec save_multiplier_error(Socket.t(), Changeset.t(), String.t()) :: Socket.t()
defp save_multiplier_error(socket, changeset, error_msg) do
{:error, changeset} =
changeset
|> Changeset.add_error(:multiplier, error_msg)
|> Changeset.apply_action(:insert)
socket |> assign(:changeset, changeset)
end
defp create_multiple(
%{assigns: %{current_user: current_user, return_to: return_to}} = socket,
pack_params,
multiplier
) do
case Ammo.create_packs(pack_params, multiplier, current_user) do
{:ok, {count, _packs}} ->
with {multiplier, _remainder} <- multiplier_str |> Integer.parse(),
{:ok, {count, _packs}} <- Ammo.create_packs(pack_params, multiplier, current_user) do
prompt =
dngettext(
"prompts",
@ -182,9 +167,21 @@ defmodule CanneryWeb.PackLive.FormComponent do
)
socket |> put_flash(:info, prompt) |> push_navigate(to: return_to)
else
{:error, %Changeset{} = changeset} ->
socket |> assign(changeset: changeset)
{:error, %Changeset{} = changeset} ->
socket |> assign(changeset: changeset)
end
:error ->
error_msg = dgettext("errors", "Could not parse number of copies")
{:error, changeset} =
changeset
|> Changeset.add_error(:multiplier, error_msg)
|> Changeset.apply_action(:insert)
socket |> assign(:changeset, changeset)
end
{:noreply, socket}
end
end

View File

@ -19,8 +19,23 @@
<%= changeset_errors(@changeset) %>
</div>
<%= label(f, :class, gettext("Class"), class: "title text-lg text-primary-600") %>
<%= select(
f,
:class,
[
{gettext("Any"), :all},
{gettext("Rifle"), :rifle},
{gettext("Shotgun"), :shotgun},
{gettext("Pistol"), :pistol}
],
class: "text-center col-span-2 input input-primary",
value: @class
) %>
<%= error_tag(f, :class, "col-span-3 text-center") %>
<%= label(f, :type_id, gettext("Type"), class: "title text-lg text-primary-600") %>
<%= select(f, :type_id, type_options(@types),
<%= select(f, :type_id, type_options(@types, @class),
class: "text-center col-span-2 input input-primary",
id: "pack-form-type-select",
phx_hook: "SlimSelect"
@ -80,7 +95,6 @@
<%= label(f, :multiplier, gettext("Copies"), class: "title text-lg text-primary-600") %>
<%= number_input(f, :multiplier,
max: @pack_create_limit,
class: "text-center input input-primary",
value: 1,
phx_update: "ignore"

View File

@ -118,7 +118,7 @@ msgstr ""
#: lib/cannery_web/components/add_shot_record_component.html.heex:57
#: lib/cannery_web/live/container_live/form_component.html.heex:59
#: lib/cannery_web/live/invite_live/form_component.html.heex:38
#: lib/cannery_web/live/pack_live/form_component.html.heex:96
#: lib/cannery_web/live/pack_live/form_component.html.heex:110
#: lib/cannery_web/live/range_live/form_component.html.heex:45
#: lib/cannery_web/live/tag_live/form_component.html.heex:41
#: lib/cannery_web/live/type_live/form_component.html.heex:386
@ -178,7 +178,7 @@ msgstr ""
msgid "add a container first"
msgstr ""
#: lib/cannery_web/live/pack_live/form_component.html.heex:89
#: lib/cannery_web/live/pack_live/form_component.html.heex:103
#, elixir-autogen, elixir-format
msgid "Create"
msgstr ""

View File

@ -131,7 +131,7 @@ msgstr "Passwort zurücksetzen"
#: lib/cannery_web/components/add_shot_record_component.html.heex:57
#: lib/cannery_web/live/container_live/form_component.html.heex:59
#: lib/cannery_web/live/invite_live/form_component.html.heex:38
#: lib/cannery_web/live/pack_live/form_component.html.heex:96
#: lib/cannery_web/live/pack_live/form_component.html.heex:110
#: lib/cannery_web/live/range_live/form_component.html.heex:45
#: lib/cannery_web/live/tag_live/form_component.html.heex:41
#: lib/cannery_web/live/type_live/form_component.html.heex:386
@ -191,7 +191,7 @@ msgstr "In die Zwischenablage kopieren"
msgid "add a container first"
msgstr "Zuerst einen Behälter hinzufügen"
#: lib/cannery_web/live/pack_live/form_component.html.heex:89
#: lib/cannery_web/live/pack_live/form_component.html.heex:103
#, elixir-autogen, elixir-format
msgid "Create"
msgstr "Erstellen"

View File

@ -86,7 +86,7 @@ msgstr "Gehäusematerial"
#: lib/cannery_web/components/move_pack_component.ex:64
#: lib/cannery_web/components/pack_table_component.ex:76
#: lib/cannery_web/live/pack_live/form_component.html.heex:69
#: lib/cannery_web/live/pack_live/form_component.html.heex:84
#, elixir-autogen, elixir-format
msgid "Container"
msgstr "Behälter"
@ -106,7 +106,7 @@ msgid "Corrosive"
msgstr "Korrosiv"
#: lib/cannery_web/components/pack_table_component.ex:104
#: lib/cannery_web/live/pack_live/form_component.html.heex:30
#: lib/cannery_web/live/pack_live/form_component.html.heex:45
#, elixir-autogen, elixir-format
msgid "Count"
msgstr "Anzahl"
@ -280,7 +280,7 @@ msgstr "Keine Tags"
#: lib/cannery_web/components/add_shot_record_component.html.heex:38
#: lib/cannery_web/components/shot_record_table_component.ex:46
#: lib/cannery_web/live/pack_live/form_component.html.heex:60
#: lib/cannery_web/live/pack_live/form_component.html.heex:75
#: lib/cannery_web/live/pack_live/show.ex:90
#: lib/cannery_web/live/range_live/form_component.html.heex:30
#, elixir-autogen, elixir-format
@ -305,7 +305,7 @@ msgid "Pressure"
msgstr "Druck"
#: lib/cannery_web/components/pack_table_component.ex:92
#: lib/cannery_web/live/pack_live/form_component.html.heex:37
#: lib/cannery_web/live/pack_live/form_component.html.heex:52
#, elixir-autogen, elixir-format
msgid "Price paid"
msgstr "Kaufpreis"
@ -393,7 +393,7 @@ msgstr "Leuchtspur"
#: lib/cannery_web/components/move_pack_component.ex:65
#: lib/cannery_web/components/pack_table_component.ex:108
#: lib/cannery_web/live/container_live/form_component.html.heex:40
#: lib/cannery_web/live/pack_live/form_component.html.heex:22
#: lib/cannery_web/live/pack_live/form_component.html.heex:37
#, elixir-autogen, elixir-format
msgid "Type"
msgstr "Art"
@ -653,7 +653,7 @@ msgstr "Passwort zurücksetzen"
msgid "Record Shots"
msgstr "Schüsse dokumentieren"
#: lib/cannery_web/live/pack_live/form_component.html.heex:81
#: lib/cannery_web/live/pack_live/form_component.html.heex:96
#, elixir-autogen, elixir-format
msgid "Copies"
msgstr "Kopien"
@ -979,7 +979,7 @@ msgid "Never used"
msgstr ""
#: lib/cannery_web/components/pack_table_component.ex:71
#: lib/cannery_web/live/pack_live/form_component.html.heex:52
#: lib/cannery_web/live/pack_live/form_component.html.heex:67
#, elixir-autogen, elixir-format
msgid "Purchased on"
msgstr ""
@ -1265,6 +1265,7 @@ msgid "None specified"
msgstr ""
#: lib/cannery_web/live/container_live/show.html.heex:100
#: lib/cannery_web/live/pack_live/form_component.html.heex:30
#: lib/cannery_web/live/pack_live/index.html.heex:61
#: lib/cannery_web/live/range_live/index.html.heex:94
#: lib/cannery_web/live/type_live/form_component.html.heex:28
@ -1290,6 +1291,7 @@ msgid "Projectile"
msgstr ""
#: lib/cannery_web/live/container_live/show.html.heex:98
#: lib/cannery_web/live/pack_live/form_component.html.heex:28
#: lib/cannery_web/live/pack_live/index.html.heex:59
#: lib/cannery_web/live/range_live/index.html.heex:92
#: lib/cannery_web/live/type_live/form_component.html.heex:26
@ -1344,6 +1346,7 @@ msgid "Shot type:"
msgstr ""
#: lib/cannery_web/live/container_live/show.html.heex:99
#: lib/cannery_web/live/pack_live/form_component.html.heex:29
#: lib/cannery_web/live/pack_live/index.html.heex:60
#: lib/cannery_web/live/range_live/index.html.heex:93
#: lib/cannery_web/live/type_live/form_component.html.heex:27
@ -1388,6 +1391,7 @@ msgstr ""
#: lib/cannery_web/components/type_table_component.ex:149
#: lib/cannery_web/live/container_live/show.html.heex:91
#: lib/cannery_web/live/pack_live/form_component.html.heex:22
#: lib/cannery_web/live/pack_live/index.html.heex:50
#: lib/cannery_web/live/range_live/index.html.heex:83
#: lib/cannery_web/live/type_live/form_component.html.heex:21
@ -1433,7 +1437,7 @@ msgid "No Types"
msgstr "Art"
#: lib/cannery_web/components/pack_table_component.ex:84
#: lib/cannery_web/live/pack_live/form_component.html.heex:44
#: lib/cannery_web/live/pack_live/form_component.html.heex:59
#, elixir-autogen, elixir-format
msgid "Lot number"
msgstr ""
@ -1442,3 +1446,8 @@ msgstr ""
#, elixir-autogen, elixir-format
msgid "Lot number:"
msgstr ""
#: lib/cannery_web/live/pack_live/form_component.html.heex:27
#, elixir-autogen, elixir-format
msgid "Any"
msgstr ""

View File

@ -158,23 +158,18 @@ msgstr ""
msgid "Tag could not be removed"
msgstr "Tag konnte nicht gelöscht werden"
#: lib/cannery_web/live/pack_live/form_component.ex:152
#: lib/cannery_web/live/pack_live/form_component.ex:175
#, elixir-autogen, elixir-format
msgid "Could not parse number of copies"
msgstr "Konnte die Anzahl der Kopien nicht verstehen"
#: lib/cannery_web/live/pack_live/form_component.ex:142
#: lib/cannery/ammo.ex:1028
#, elixir-autogen, elixir-format
msgid "Invalid number of copies, must be between 1 and %{max}. Was %{multiplier}"
msgstr ""
"Ungültige Nummer an Kopien. Muss zwischen 1 and %{max} liegen. War "
"%{multiplier}"
#: lib/cannery/ammo.ex:974
#, elixir-autogen, elixir-format
msgid "Invalid multiplier"
msgstr ""
#: lib/cannery_web/live/range_live/index.html.heex:71
#, elixir-autogen, elixir-format
msgid "Your browser does not support the canvas element."
@ -205,11 +200,6 @@ msgstr "Anzahl muss weniger als %{count} betragen"
msgid "can't be blank"
msgstr ""
#: lib/cannery/ammo/pack.ex:100
#, elixir-autogen, elixir-format, fuzzy
msgid "Please select a type and container"
msgstr ""
#: lib/cannery_web/controllers/error_html.ex:11
#: lib/cannery_web/controllers/error_json.ex:9
#, elixir-autogen, elixir-format, fuzzy
@ -225,3 +215,13 @@ msgstr ""
#, elixir-autogen, elixir-format
msgid "You must log in to access this page."
msgstr ""
#: lib/cannery/ammo/pack.ex:104
#, elixir-autogen, elixir-format, fuzzy
msgid "Please select a valid container"
msgstr ""
#: lib/cannery/ammo/pack.ex:102
#, elixir-autogen, elixir-format, fuzzy
msgid "Please select a valid type"
msgstr ""

View File

@ -131,7 +131,7 @@ msgstr "Bitte überprüfen Sie ihre Mailbox und bestätigen Sie das Nutzerkonto"
#: lib/cannery_web/components/add_shot_record_component.html.heex:59
#: lib/cannery_web/live/container_live/form_component.html.heex:61
#: lib/cannery_web/live/invite_live/form_component.html.heex:40
#: lib/cannery_web/live/pack_live/form_component.html.heex:97
#: lib/cannery_web/live/pack_live/form_component.html.heex:111
#: lib/cannery_web/live/range_live/form_component.html.heex:47
#: lib/cannery_web/live/tag_live/form_component.html.heex:43
#: lib/cannery_web/live/type_live/form_component.html.heex:387
@ -219,7 +219,7 @@ msgstr "%{name} erfolgreich entfernt"
msgid "You'll need to"
msgstr "Sie müssen"
#: lib/cannery_web/live/pack_live/form_component.html.heex:90
#: lib/cannery_web/live/pack_live/form_component.html.heex:104
#, elixir-autogen, elixir-format
msgid "Creating..."
msgstr "Erstellen..."
@ -245,12 +245,12 @@ msgstr "Munitionsgruppe erfolgreich gelöscht"
msgid "Ammo unstaged succesfully"
msgstr "Munition erfolgreich demarkiert"
#: lib/cannery_web/live/pack_live/form_component.ex:118
#: lib/cannery_web/live/pack_live/form_component.ex:141
#, elixir-autogen, elixir-format, fuzzy
msgid "Ammo updated successfully"
msgstr "Munitionsgruppe erfolgreich aktualisiert"
#: lib/cannery_web/live/pack_live/form_component.ex:177
#: lib/cannery_web/live/pack_live/form_component.ex:162
#, elixir-autogen, elixir-format, fuzzy
msgid "Ammo added successfully"
msgid_plural "Ammo added successfully"

View File

@ -82,7 +82,7 @@ msgstr ""
#: lib/cannery_web/components/move_pack_component.ex:64
#: lib/cannery_web/components/pack_table_component.ex:76
#: lib/cannery_web/live/pack_live/form_component.html.heex:69
#: lib/cannery_web/live/pack_live/form_component.html.heex:84
#, elixir-autogen, elixir-format
msgid "Container"
msgstr ""
@ -102,7 +102,7 @@ msgid "Corrosive"
msgstr ""
#: lib/cannery_web/components/pack_table_component.ex:104
#: lib/cannery_web/live/pack_live/form_component.html.heex:30
#: lib/cannery_web/live/pack_live/form_component.html.heex:45
#, elixir-autogen, elixir-format
msgid "Count"
msgstr ""
@ -276,7 +276,7 @@ msgstr ""
#: lib/cannery_web/components/add_shot_record_component.html.heex:38
#: lib/cannery_web/components/shot_record_table_component.ex:46
#: lib/cannery_web/live/pack_live/form_component.html.heex:60
#: lib/cannery_web/live/pack_live/form_component.html.heex:75
#: lib/cannery_web/live/pack_live/show.ex:90
#: lib/cannery_web/live/range_live/form_component.html.heex:30
#, elixir-autogen, elixir-format
@ -301,7 +301,7 @@ msgid "Pressure"
msgstr ""
#: lib/cannery_web/components/pack_table_component.ex:92
#: lib/cannery_web/live/pack_live/form_component.html.heex:37
#: lib/cannery_web/live/pack_live/form_component.html.heex:52
#, elixir-autogen, elixir-format
msgid "Price paid"
msgstr ""
@ -387,7 +387,7 @@ msgstr ""
#: lib/cannery_web/components/move_pack_component.ex:65
#: lib/cannery_web/components/pack_table_component.ex:108
#: lib/cannery_web/live/container_live/form_component.html.heex:40
#: lib/cannery_web/live/pack_live/form_component.html.heex:22
#: lib/cannery_web/live/pack_live/form_component.html.heex:37
#, elixir-autogen, elixir-format
msgid "Type"
msgstr ""
@ -647,7 +647,7 @@ msgstr ""
msgid "Record Shots"
msgstr ""
#: lib/cannery_web/live/pack_live/form_component.html.heex:81
#: lib/cannery_web/live/pack_live/form_component.html.heex:96
#, elixir-autogen, elixir-format
msgid "Copies"
msgstr ""
@ -973,7 +973,7 @@ msgid "Never used"
msgstr ""
#: lib/cannery_web/components/pack_table_component.ex:71
#: lib/cannery_web/live/pack_live/form_component.html.heex:52
#: lib/cannery_web/live/pack_live/form_component.html.heex:67
#, elixir-autogen, elixir-format
msgid "Purchased on"
msgstr ""
@ -1248,6 +1248,7 @@ msgid "None specified"
msgstr ""
#: lib/cannery_web/live/container_live/show.html.heex:100
#: lib/cannery_web/live/pack_live/form_component.html.heex:30
#: lib/cannery_web/live/pack_live/index.html.heex:61
#: lib/cannery_web/live/range_live/index.html.heex:94
#: lib/cannery_web/live/type_live/form_component.html.heex:28
@ -1273,6 +1274,7 @@ msgid "Projectile"
msgstr ""
#: lib/cannery_web/live/container_live/show.html.heex:98
#: lib/cannery_web/live/pack_live/form_component.html.heex:28
#: lib/cannery_web/live/pack_live/index.html.heex:59
#: lib/cannery_web/live/range_live/index.html.heex:92
#: lib/cannery_web/live/type_live/form_component.html.heex:26
@ -1327,6 +1329,7 @@ msgid "Shot type:"
msgstr ""
#: lib/cannery_web/live/container_live/show.html.heex:99
#: lib/cannery_web/live/pack_live/form_component.html.heex:29
#: lib/cannery_web/live/pack_live/index.html.heex:60
#: lib/cannery_web/live/range_live/index.html.heex:93
#: lib/cannery_web/live/type_live/form_component.html.heex:27
@ -1371,6 +1374,7 @@ msgstr ""
#: lib/cannery_web/components/type_table_component.ex:149
#: lib/cannery_web/live/container_live/show.html.heex:91
#: lib/cannery_web/live/pack_live/form_component.html.heex:22
#: lib/cannery_web/live/pack_live/index.html.heex:50
#: lib/cannery_web/live/range_live/index.html.heex:83
#: lib/cannery_web/live/type_live/form_component.html.heex:21
@ -1416,7 +1420,7 @@ msgid "No Types"
msgstr ""
#: lib/cannery_web/components/pack_table_component.ex:84
#: lib/cannery_web/live/pack_live/form_component.html.heex:44
#: lib/cannery_web/live/pack_live/form_component.html.heex:59
#, elixir-autogen, elixir-format
msgid "Lot number"
msgstr ""
@ -1425,3 +1429,8 @@ msgstr ""
#, elixir-autogen, elixir-format
msgid "Lot number:"
msgstr ""
#: lib/cannery_web/live/pack_live/form_component.html.heex:27
#, elixir-autogen, elixir-format
msgid "Any"
msgstr ""

View File

@ -118,7 +118,7 @@ msgstr ""
#: lib/cannery_web/components/add_shot_record_component.html.heex:57
#: lib/cannery_web/live/container_live/form_component.html.heex:59
#: lib/cannery_web/live/invite_live/form_component.html.heex:38
#: lib/cannery_web/live/pack_live/form_component.html.heex:96
#: lib/cannery_web/live/pack_live/form_component.html.heex:110
#: lib/cannery_web/live/range_live/form_component.html.heex:45
#: lib/cannery_web/live/tag_live/form_component.html.heex:41
#: lib/cannery_web/live/type_live/form_component.html.heex:386
@ -178,7 +178,7 @@ msgstr ""
msgid "add a container first"
msgstr ""
#: lib/cannery_web/live/pack_live/form_component.html.heex:89
#: lib/cannery_web/live/pack_live/form_component.html.heex:103
#, elixir-autogen, elixir-format, fuzzy
msgid "Create"
msgstr ""

View File

@ -82,7 +82,7 @@ msgstr ""
#: lib/cannery_web/components/move_pack_component.ex:64
#: lib/cannery_web/components/pack_table_component.ex:76
#: lib/cannery_web/live/pack_live/form_component.html.heex:69
#: lib/cannery_web/live/pack_live/form_component.html.heex:84
#, elixir-autogen, elixir-format
msgid "Container"
msgstr ""
@ -102,7 +102,7 @@ msgid "Corrosive"
msgstr ""
#: lib/cannery_web/components/pack_table_component.ex:104
#: lib/cannery_web/live/pack_live/form_component.html.heex:30
#: lib/cannery_web/live/pack_live/form_component.html.heex:45
#, elixir-autogen, elixir-format
msgid "Count"
msgstr ""
@ -276,7 +276,7 @@ msgstr ""
#: lib/cannery_web/components/add_shot_record_component.html.heex:38
#: lib/cannery_web/components/shot_record_table_component.ex:46
#: lib/cannery_web/live/pack_live/form_component.html.heex:60
#: lib/cannery_web/live/pack_live/form_component.html.heex:75
#: lib/cannery_web/live/pack_live/show.ex:90
#: lib/cannery_web/live/range_live/form_component.html.heex:30
#, elixir-autogen, elixir-format
@ -301,7 +301,7 @@ msgid "Pressure"
msgstr ""
#: lib/cannery_web/components/pack_table_component.ex:92
#: lib/cannery_web/live/pack_live/form_component.html.heex:37
#: lib/cannery_web/live/pack_live/form_component.html.heex:52
#, elixir-autogen, elixir-format
msgid "Price paid"
msgstr ""
@ -387,7 +387,7 @@ msgstr ""
#: lib/cannery_web/components/move_pack_component.ex:65
#: lib/cannery_web/components/pack_table_component.ex:108
#: lib/cannery_web/live/container_live/form_component.html.heex:40
#: lib/cannery_web/live/pack_live/form_component.html.heex:22
#: lib/cannery_web/live/pack_live/form_component.html.heex:37
#, elixir-autogen, elixir-format
msgid "Type"
msgstr ""
@ -647,7 +647,7 @@ msgstr ""
msgid "Record Shots"
msgstr ""
#: lib/cannery_web/live/pack_live/form_component.html.heex:81
#: lib/cannery_web/live/pack_live/form_component.html.heex:96
#, elixir-autogen, elixir-format
msgid "Copies"
msgstr ""
@ -973,7 +973,7 @@ msgid "Never used"
msgstr ""
#: lib/cannery_web/components/pack_table_component.ex:71
#: lib/cannery_web/live/pack_live/form_component.html.heex:52
#: lib/cannery_web/live/pack_live/form_component.html.heex:67
#, elixir-autogen, elixir-format
msgid "Purchased on"
msgstr ""
@ -1248,6 +1248,7 @@ msgid "None specified"
msgstr ""
#: lib/cannery_web/live/container_live/show.html.heex:100
#: lib/cannery_web/live/pack_live/form_component.html.heex:30
#: lib/cannery_web/live/pack_live/index.html.heex:61
#: lib/cannery_web/live/range_live/index.html.heex:94
#: lib/cannery_web/live/type_live/form_component.html.heex:28
@ -1273,6 +1274,7 @@ msgid "Projectile"
msgstr ""
#: lib/cannery_web/live/container_live/show.html.heex:98
#: lib/cannery_web/live/pack_live/form_component.html.heex:28
#: lib/cannery_web/live/pack_live/index.html.heex:59
#: lib/cannery_web/live/range_live/index.html.heex:92
#: lib/cannery_web/live/type_live/form_component.html.heex:26
@ -1327,6 +1329,7 @@ msgid "Shot type:"
msgstr ""
#: lib/cannery_web/live/container_live/show.html.heex:99
#: lib/cannery_web/live/pack_live/form_component.html.heex:29
#: lib/cannery_web/live/pack_live/index.html.heex:60
#: lib/cannery_web/live/range_live/index.html.heex:93
#: lib/cannery_web/live/type_live/form_component.html.heex:27
@ -1371,6 +1374,7 @@ msgstr ""
#: lib/cannery_web/components/type_table_component.ex:149
#: lib/cannery_web/live/container_live/show.html.heex:91
#: lib/cannery_web/live/pack_live/form_component.html.heex:22
#: lib/cannery_web/live/pack_live/index.html.heex:50
#: lib/cannery_web/live/range_live/index.html.heex:83
#: lib/cannery_web/live/type_live/form_component.html.heex:21
@ -1416,7 +1420,7 @@ msgid "No Types"
msgstr ""
#: lib/cannery_web/components/pack_table_component.ex:84
#: lib/cannery_web/live/pack_live/form_component.html.heex:44
#: lib/cannery_web/live/pack_live/form_component.html.heex:59
#, elixir-autogen, elixir-format
msgid "Lot number"
msgstr ""
@ -1425,3 +1429,8 @@ msgstr ""
#, elixir-autogen, elixir-format
msgid "Lot number:"
msgstr ""
#: lib/cannery_web/live/pack_live/form_component.html.heex:27
#, elixir-autogen, elixir-format
msgid "Any"
msgstr ""

View File

@ -143,21 +143,16 @@ msgstr ""
msgid "Tag could not be removed"
msgstr ""
#: lib/cannery_web/live/pack_live/form_component.ex:152
#: lib/cannery_web/live/pack_live/form_component.ex:175
#, elixir-autogen, elixir-format
msgid "Could not parse number of copies"
msgstr ""
#: lib/cannery_web/live/pack_live/form_component.ex:142
#: lib/cannery/ammo.ex:1028
#, elixir-autogen, elixir-format
msgid "Invalid number of copies, must be between 1 and %{max}. Was %{multiplier}"
msgstr ""
#: lib/cannery/ammo.ex:974
#, elixir-autogen, elixir-format
msgid "Invalid multiplier"
msgstr ""
#: lib/cannery_web/live/range_live/index.html.heex:71
#, elixir-autogen, elixir-format
msgid "Your browser does not support the canvas element."
@ -188,11 +183,6 @@ msgstr ""
msgid "can't be blank"
msgstr ""
#: lib/cannery/ammo/pack.ex:100
#, elixir-autogen, elixir-format, fuzzy
msgid "Please select a type and container"
msgstr ""
#: lib/cannery_web/controllers/error_html.ex:11
#: lib/cannery_web/controllers/error_json.ex:9
#, elixir-autogen, elixir-format, fuzzy
@ -208,3 +198,13 @@ msgstr ""
#, elixir-autogen, elixir-format
msgid "You must log in to access this page."
msgstr ""
#: lib/cannery/ammo/pack.ex:104
#, elixir-autogen, elixir-format, fuzzy
msgid "Please select a valid container"
msgstr ""
#: lib/cannery/ammo/pack.ex:102
#, elixir-autogen, elixir-format, fuzzy
msgid "Please select a valid type"
msgstr ""

View File

@ -112,7 +112,7 @@ msgstr ""
#: lib/cannery_web/components/add_shot_record_component.html.heex:59
#: lib/cannery_web/live/container_live/form_component.html.heex:61
#: lib/cannery_web/live/invite_live/form_component.html.heex:40
#: lib/cannery_web/live/pack_live/form_component.html.heex:97
#: lib/cannery_web/live/pack_live/form_component.html.heex:111
#: lib/cannery_web/live/range_live/form_component.html.heex:47
#: lib/cannery_web/live/tag_live/form_component.html.heex:43
#: lib/cannery_web/live/type_live/form_component.html.heex:387
@ -198,7 +198,7 @@ msgstr ""
msgid "You'll need to"
msgstr ""
#: lib/cannery_web/live/pack_live/form_component.html.heex:90
#: lib/cannery_web/live/pack_live/form_component.html.heex:104
#, elixir-autogen, elixir-format, fuzzy
msgid "Creating..."
msgstr ""
@ -224,12 +224,12 @@ msgstr ""
msgid "Ammo unstaged succesfully"
msgstr ""
#: lib/cannery_web/live/pack_live/form_component.ex:118
#: lib/cannery_web/live/pack_live/form_component.ex:141
#, elixir-autogen, elixir-format, fuzzy
msgid "Ammo updated successfully"
msgstr ""
#: lib/cannery_web/live/pack_live/form_component.ex:177
#: lib/cannery_web/live/pack_live/form_component.ex:162
#, elixir-autogen, elixir-format, fuzzy
msgid "Ammo added successfully"
msgid_plural "Ammo added successfully"

View File

@ -142,21 +142,16 @@ msgstr ""
msgid "Tag could not be removed"
msgstr ""
#: lib/cannery_web/live/pack_live/form_component.ex:152
#: lib/cannery_web/live/pack_live/form_component.ex:175
#, elixir-autogen, elixir-format
msgid "Could not parse number of copies"
msgstr ""
#: lib/cannery_web/live/pack_live/form_component.ex:142
#: lib/cannery/ammo.ex:1028
#, elixir-autogen, elixir-format
msgid "Invalid number of copies, must be between 1 and %{max}. Was %{multiplier}"
msgstr ""
#: lib/cannery/ammo.ex:974
#, elixir-autogen, elixir-format
msgid "Invalid multiplier"
msgstr ""
#: lib/cannery_web/live/range_live/index.html.heex:71
#, elixir-autogen, elixir-format
msgid "Your browser does not support the canvas element."
@ -187,11 +182,6 @@ msgstr ""
msgid "can't be blank"
msgstr ""
#: lib/cannery/ammo/pack.ex:100
#, elixir-autogen, elixir-format
msgid "Please select a type and container"
msgstr ""
#: lib/cannery_web/controllers/error_html.ex:11
#: lib/cannery_web/controllers/error_json.ex:9
#, elixir-autogen, elixir-format
@ -207,3 +197,13 @@ msgstr ""
#, elixir-autogen, elixir-format
msgid "You must log in to access this page."
msgstr ""
#: lib/cannery/ammo/pack.ex:104
#, elixir-autogen, elixir-format
msgid "Please select a valid container"
msgstr ""
#: lib/cannery/ammo/pack.ex:102
#, elixir-autogen, elixir-format
msgid "Please select a valid type"
msgstr ""

View File

@ -131,7 +131,7 @@ msgstr "Resetear contraseña"
#: lib/cannery_web/components/add_shot_record_component.html.heex:57
#: lib/cannery_web/live/container_live/form_component.html.heex:59
#: lib/cannery_web/live/invite_live/form_component.html.heex:38
#: lib/cannery_web/live/pack_live/form_component.html.heex:96
#: lib/cannery_web/live/pack_live/form_component.html.heex:110
#: lib/cannery_web/live/range_live/form_component.html.heex:45
#: lib/cannery_web/live/tag_live/form_component.html.heex:41
#: lib/cannery_web/live/type_live/form_component.html.heex:386
@ -191,7 +191,7 @@ msgstr "Copiar al portapapeles"
msgid "add a container first"
msgstr "añade primero un contenedor"
#: lib/cannery_web/live/pack_live/form_component.html.heex:89
#: lib/cannery_web/live/pack_live/form_component.html.heex:103
#, elixir-autogen, elixir-format
msgid "Create"
msgstr "Crear"

View File

@ -86,7 +86,7 @@ msgstr "Material del casquillo"
#: lib/cannery_web/components/move_pack_component.ex:64
#: lib/cannery_web/components/pack_table_component.ex:76
#: lib/cannery_web/live/pack_live/form_component.html.heex:69
#: lib/cannery_web/live/pack_live/form_component.html.heex:84
#, elixir-autogen, elixir-format
msgid "Container"
msgstr "Contenedor"
@ -106,7 +106,7 @@ msgid "Corrosive"
msgstr "Corrosiva"
#: lib/cannery_web/components/pack_table_component.ex:104
#: lib/cannery_web/live/pack_live/form_component.html.heex:30
#: lib/cannery_web/live/pack_live/form_component.html.heex:45
#, elixir-autogen, elixir-format
msgid "Count"
msgstr "Cantidad"
@ -280,7 +280,7 @@ msgstr "Sin etiquetas"
#: lib/cannery_web/components/add_shot_record_component.html.heex:38
#: lib/cannery_web/components/shot_record_table_component.ex:46
#: lib/cannery_web/live/pack_live/form_component.html.heex:60
#: lib/cannery_web/live/pack_live/form_component.html.heex:75
#: lib/cannery_web/live/pack_live/show.ex:90
#: lib/cannery_web/live/range_live/form_component.html.heex:30
#, elixir-autogen, elixir-format
@ -305,7 +305,7 @@ msgid "Pressure"
msgstr "Presión"
#: lib/cannery_web/components/pack_table_component.ex:92
#: lib/cannery_web/live/pack_live/form_component.html.heex:37
#: lib/cannery_web/live/pack_live/form_component.html.heex:52
#, elixir-autogen, elixir-format
msgid "Price paid"
msgstr "Precio pagado"
@ -394,7 +394,7 @@ msgstr "Trazadora"
#: lib/cannery_web/components/move_pack_component.ex:65
#: lib/cannery_web/components/pack_table_component.ex:108
#: lib/cannery_web/live/container_live/form_component.html.heex:40
#: lib/cannery_web/live/pack_live/form_component.html.heex:22
#: lib/cannery_web/live/pack_live/form_component.html.heex:37
#, elixir-autogen, elixir-format
msgid "Type"
msgstr "Tipo"
@ -654,7 +654,7 @@ msgstr "Reestablecer contraseña"
msgid "Record Shots"
msgstr "Tiros Récord"
#: lib/cannery_web/live/pack_live/form_component.html.heex:81
#: lib/cannery_web/live/pack_live/form_component.html.heex:96
#, elixir-autogen, elixir-format
msgid "Copies"
msgstr "Copias"
@ -981,7 +981,7 @@ msgid "Never used"
msgstr "Nunca usada"
#: lib/cannery_web/components/pack_table_component.ex:71
#: lib/cannery_web/live/pack_live/form_component.html.heex:52
#: lib/cannery_web/live/pack_live/form_component.html.heex:67
#, elixir-autogen, elixir-format
msgid "Purchased on"
msgstr "Comprada en"
@ -1267,6 +1267,7 @@ msgid "None specified"
msgstr ""
#: lib/cannery_web/live/container_live/show.html.heex:100
#: lib/cannery_web/live/pack_live/form_component.html.heex:30
#: lib/cannery_web/live/pack_live/index.html.heex:61
#: lib/cannery_web/live/range_live/index.html.heex:94
#: lib/cannery_web/live/type_live/form_component.html.heex:28
@ -1292,6 +1293,7 @@ msgid "Projectile"
msgstr ""
#: lib/cannery_web/live/container_live/show.html.heex:98
#: lib/cannery_web/live/pack_live/form_component.html.heex:28
#: lib/cannery_web/live/pack_live/index.html.heex:59
#: lib/cannery_web/live/range_live/index.html.heex:92
#: lib/cannery_web/live/type_live/form_component.html.heex:26
@ -1346,6 +1348,7 @@ msgid "Shot type:"
msgstr ""
#: lib/cannery_web/live/container_live/show.html.heex:99
#: lib/cannery_web/live/pack_live/form_component.html.heex:29
#: lib/cannery_web/live/pack_live/index.html.heex:60
#: lib/cannery_web/live/range_live/index.html.heex:93
#: lib/cannery_web/live/type_live/form_component.html.heex:27
@ -1390,6 +1393,7 @@ msgstr ""
#: lib/cannery_web/components/type_table_component.ex:149
#: lib/cannery_web/live/container_live/show.html.heex:91
#: lib/cannery_web/live/pack_live/form_component.html.heex:22
#: lib/cannery_web/live/pack_live/index.html.heex:50
#: lib/cannery_web/live/range_live/index.html.heex:83
#: lib/cannery_web/live/type_live/form_component.html.heex:21
@ -1435,7 +1439,7 @@ msgid "No Types"
msgstr "Tipo"
#: lib/cannery_web/components/pack_table_component.ex:84
#: lib/cannery_web/live/pack_live/form_component.html.heex:44
#: lib/cannery_web/live/pack_live/form_component.html.heex:59
#, elixir-autogen, elixir-format
msgid "Lot number"
msgstr ""
@ -1444,3 +1448,8 @@ msgstr ""
#, elixir-autogen, elixir-format
msgid "Lot number:"
msgstr ""
#: lib/cannery_web/live/pack_live/form_component.html.heex:27
#, elixir-autogen, elixir-format
msgid "Any"
msgstr ""

View File

@ -158,21 +158,16 @@ msgstr "Debe confirmar su cuenta e iniciar sesión para acceder a esta página."
msgid "Tag could not be removed"
msgstr "La etiqueta no pudo ser eliminada"
#: lib/cannery_web/live/pack_live/form_component.ex:152
#: lib/cannery_web/live/pack_live/form_component.ex:175
#, elixir-autogen, elixir-format
msgid "Could not parse number of copies"
msgstr "No se ha podido procesar el número de copias"
#: lib/cannery_web/live/pack_live/form_component.ex:142
#: lib/cannery/ammo.ex:1028
#, elixir-autogen, elixir-format
msgid "Invalid number of copies, must be between 1 and %{max}. Was %{multiplier}"
msgstr "Número inválido de copias, debe ser entre 1 y %{max}. Fue %{multiplier"
#: lib/cannery/ammo.ex:974
#, elixir-autogen, elixir-format
msgid "Invalid multiplier"
msgstr "Multiplicador inválido"
#: lib/cannery_web/live/range_live/index.html.heex:71
#, elixir-autogen, elixir-format
msgid "Your browser does not support the canvas element."
@ -203,11 +198,6 @@ msgstr "El recuento debe ser menos de %{count}"
msgid "can't be blank"
msgstr ""
#: lib/cannery/ammo/pack.ex:100
#, elixir-autogen, elixir-format, fuzzy
msgid "Please select a type and container"
msgstr "Por favor escoja un tipo de munición y un contenedor"
#: lib/cannery_web/controllers/error_html.ex:11
#: lib/cannery_web/controllers/error_json.ex:9
#, elixir-autogen, elixir-format, fuzzy
@ -223,3 +213,13 @@ msgstr ""
#, elixir-autogen, elixir-format
msgid "You must log in to access this page."
msgstr ""
#: lib/cannery/ammo/pack.ex:104
#, elixir-autogen, elixir-format, fuzzy
msgid "Please select a valid container"
msgstr "Por favor escoja un tipo de munición y un contenedor"
#: lib/cannery/ammo/pack.ex:102
#, elixir-autogen, elixir-format, fuzzy
msgid "Please select a valid type"
msgstr "Por favor escoja un usuario y tipo de munición valido"

View File

@ -131,7 +131,7 @@ msgstr "Por favor chequea el correo para verificar tu cuenta"
#: lib/cannery_web/components/add_shot_record_component.html.heex:59
#: lib/cannery_web/live/container_live/form_component.html.heex:61
#: lib/cannery_web/live/invite_live/form_component.html.heex:40
#: lib/cannery_web/live/pack_live/form_component.html.heex:97
#: lib/cannery_web/live/pack_live/form_component.html.heex:111
#: lib/cannery_web/live/range_live/form_component.html.heex:47
#: lib/cannery_web/live/tag_live/form_component.html.heex:43
#: lib/cannery_web/live/type_live/form_component.html.heex:387
@ -218,7 +218,7 @@ msgstr "%{name} eliminado exitosamente"
msgid "You'll need to"
msgstr "Necesitará hacerlo"
#: lib/cannery_web/live/pack_live/form_component.html.heex:90
#: lib/cannery_web/live/pack_live/form_component.html.heex:104
#, elixir-autogen, elixir-format
msgid "Creating..."
msgstr "Creando..."
@ -244,12 +244,12 @@ msgstr "Munición borrada exitosamente"
msgid "Ammo unstaged succesfully"
msgstr "Munición descargada exitosamente"
#: lib/cannery_web/live/pack_live/form_component.ex:118
#: lib/cannery_web/live/pack_live/form_component.ex:141
#, elixir-autogen, elixir-format
msgid "Ammo updated successfully"
msgstr "Munición actualizada exitosamente"
#: lib/cannery_web/live/pack_live/form_component.ex:177
#: lib/cannery_web/live/pack_live/form_component.ex:162
#, elixir-autogen, elixir-format
msgid "Ammo added successfully"
msgid_plural "Ammo added successfully"

View File

@ -131,7 +131,7 @@ msgstr "Réinitialisé le mot de passe"
#: lib/cannery_web/components/add_shot_record_component.html.heex:57
#: lib/cannery_web/live/container_live/form_component.html.heex:59
#: lib/cannery_web/live/invite_live/form_component.html.heex:38
#: lib/cannery_web/live/pack_live/form_component.html.heex:96
#: lib/cannery_web/live/pack_live/form_component.html.heex:110
#: lib/cannery_web/live/range_live/form_component.html.heex:45
#: lib/cannery_web/live/tag_live/form_component.html.heex:41
#: lib/cannery_web/live/type_live/form_component.html.heex:386
@ -191,7 +191,7 @@ msgstr "Copier dans le presse-papier"
msgid "add a container first"
msgstr "ajouter un conteneur en premier"
#: lib/cannery_web/live/pack_live/form_component.html.heex:89
#: lib/cannery_web/live/pack_live/form_component.html.heex:103
#, elixir-autogen, elixir-format
msgid "Create"
msgstr "Créer"

View File

@ -86,7 +86,7 @@ msgstr "Matériau de la caisse"
#: lib/cannery_web/components/move_pack_component.ex:64
#: lib/cannery_web/components/pack_table_component.ex:76
#: lib/cannery_web/live/pack_live/form_component.html.heex:69
#: lib/cannery_web/live/pack_live/form_component.html.heex:84
#, elixir-autogen, elixir-format
msgid "Container"
msgstr "Conteneur"
@ -106,7 +106,7 @@ msgid "Corrosive"
msgstr "Corrosive"
#: lib/cannery_web/components/pack_table_component.ex:104
#: lib/cannery_web/live/pack_live/form_component.html.heex:30
#: lib/cannery_web/live/pack_live/form_component.html.heex:45
#, elixir-autogen, elixir-format
msgid "Count"
msgstr "Quantité"
@ -280,7 +280,7 @@ msgstr "Aucun tag"
#: lib/cannery_web/components/add_shot_record_component.html.heex:38
#: lib/cannery_web/components/shot_record_table_component.ex:46
#: lib/cannery_web/live/pack_live/form_component.html.heex:60
#: lib/cannery_web/live/pack_live/form_component.html.heex:75
#: lib/cannery_web/live/pack_live/show.ex:90
#: lib/cannery_web/live/range_live/form_component.html.heex:30
#, elixir-autogen, elixir-format
@ -305,7 +305,7 @@ msgid "Pressure"
msgstr "Pression"
#: lib/cannery_web/components/pack_table_component.ex:92
#: lib/cannery_web/live/pack_live/form_component.html.heex:37
#: lib/cannery_web/live/pack_live/form_component.html.heex:52
#, elixir-autogen, elixir-format
msgid "Price paid"
msgstr "Prix payé"
@ -395,7 +395,7 @@ msgstr "Traceuse"
#: lib/cannery_web/components/move_pack_component.ex:65
#: lib/cannery_web/components/pack_table_component.ex:108
#: lib/cannery_web/live/container_live/form_component.html.heex:40
#: lib/cannery_web/live/pack_live/form_component.html.heex:22
#: lib/cannery_web/live/pack_live/form_component.html.heex:37
#, elixir-autogen, elixir-format
msgid "Type"
msgstr "Type"
@ -655,7 +655,7 @@ msgstr "Réinitialiser votre mot de passe"
msgid "Record Shots"
msgstr "Enregistrer des tirs"
#: lib/cannery_web/live/pack_live/form_component.html.heex:81
#: lib/cannery_web/live/pack_live/form_component.html.heex:96
#, elixir-autogen, elixir-format
msgid "Copies"
msgstr "Exemplaires"
@ -982,7 +982,7 @@ msgid "Never used"
msgstr ""
#: lib/cannery_web/components/pack_table_component.ex:71
#: lib/cannery_web/live/pack_live/form_component.html.heex:52
#: lib/cannery_web/live/pack_live/form_component.html.heex:67
#, elixir-autogen, elixir-format
msgid "Purchased on"
msgstr ""
@ -1268,6 +1268,7 @@ msgid "None specified"
msgstr ""
#: lib/cannery_web/live/container_live/show.html.heex:100
#: lib/cannery_web/live/pack_live/form_component.html.heex:30
#: lib/cannery_web/live/pack_live/index.html.heex:61
#: lib/cannery_web/live/range_live/index.html.heex:94
#: lib/cannery_web/live/type_live/form_component.html.heex:28
@ -1293,6 +1294,7 @@ msgid "Projectile"
msgstr ""
#: lib/cannery_web/live/container_live/show.html.heex:98
#: lib/cannery_web/live/pack_live/form_component.html.heex:28
#: lib/cannery_web/live/pack_live/index.html.heex:59
#: lib/cannery_web/live/range_live/index.html.heex:92
#: lib/cannery_web/live/type_live/form_component.html.heex:26
@ -1347,6 +1349,7 @@ msgid "Shot type:"
msgstr ""
#: lib/cannery_web/live/container_live/show.html.heex:99
#: lib/cannery_web/live/pack_live/form_component.html.heex:29
#: lib/cannery_web/live/pack_live/index.html.heex:60
#: lib/cannery_web/live/range_live/index.html.heex:93