use strict context boundaries and remove all n+1 queries

This commit is contained in:
shibao 2023-03-18 21:06:00 -04:00
parent 0b7146ba32
commit a54cf8b87d
84 changed files with 4345 additions and 3090 deletions

View File

@ -3,6 +3,8 @@
- Code quality improvements - Code quality improvements
- Fix dead link of example bullet abbreviations - Fix dead link of example bullet abbreviations
- Fix inaccurate error message when updating shot records - Fix inaccurate error message when updating shot records
- Fix tables not sorting dates correctly
- Fix container table not displaying all fields
# v0.8.3 # v0.8.3
- Improve some styles - Improve some styles

View File

@ -385,8 +385,18 @@ defmodule Cannery.Accounts do
""" """
@spec allow_registration?() :: boolean() @spec allow_registration?() :: boolean()
def allow_registration? do def allow_registration? do
Application.get_env(:cannery, Cannery.Accounts)[:registration] == "public" or registration_mode() == :public or list_users_by_role(:admin) |> Enum.empty?()
list_users_by_role(:admin) |> Enum.empty?() end
@doc """
Returns an atom representing the current configured registration mode
"""
@spec registration_mode() :: :public | :invite_only
def registration_mode do
case Application.get_env(:cannery, Cannery.Accounts)[:registration] do
"public" -> :public
_other -> :invite_only
end
end end
@doc """ @doc """

View File

@ -100,13 +100,23 @@ defmodule Cannery.Accounts.Invites do
end end
end end
@spec get_use_count(Invite.t(), User.t()) :: non_neg_integer() @spec get_use_count(Invite.t(), User.t()) :: non_neg_integer() | nil
def get_use_count(%Invite{id: invite_id}, %User{role: :admin}) do def get_use_count(%Invite{id: invite_id} = invite, user) do
Repo.one( [invite] |> get_use_counts(user) |> Map.get(invite_id)
end
@spec get_use_counts([Invite.t()], User.t()) ::
%{optional(Invite.id()) => non_neg_integer()}
def get_use_counts(invites, %User{role: :admin}) do
invite_ids = invites |> Enum.map(fn %{id: invite_id} -> invite_id end)
Repo.all(
from u in User, from u in User,
where: u.invite_id == ^invite_id, where: u.invite_id in ^invite_ids,
select: count(u.id) group_by: u.invite_id,
select: {u.invite_id, count(u.id)}
) )
|> Map.new()
end end
@spec decrement_invite_changeset(Invite.t()) :: Invite.changeset() @spec decrement_invite_changeset(Invite.t()) :: Invite.changeset()

View File

@ -4,7 +4,8 @@ defmodule Cannery.ActivityLog do
""" """
import Ecto.Query, warn: false import Ecto.Query, warn: false
alias Cannery.{Accounts.User, ActivityLog.ShotGroup, Ammo.AmmoGroup, Repo} alias Cannery.Ammo.{AmmoGroup, AmmoType}
alias Cannery.{Accounts.User, ActivityLog.ShotGroup, Repo}
alias Ecto.Multi alias Ecto.Multi
@doc """ @doc """
@ -31,8 +32,10 @@ defmodule Cannery.ActivityLog do
Repo.all( Repo.all(
from sg in ShotGroup, from sg in ShotGroup,
left_join: ag in assoc(sg, :ammo_group), left_join: ag in AmmoGroup,
left_join: at in assoc(ag, :ammo_type), on: sg.ammo_group_id == ag.id,
left_join: at in AmmoType,
on: ag.ammo_type_id == at.id,
where: sg.user_id == ^user_id, where: sg.user_id == ^user_id,
where: where:
fragment( fragment(
@ -61,6 +64,18 @@ defmodule Cannery.ActivityLog do
) )
end end
@spec list_shot_groups_for_ammo_group(AmmoGroup.t(), User.t()) :: [ShotGroup.t()]
def list_shot_groups_for_ammo_group(
%AmmoGroup{id: ammo_group_id, user_id: user_id},
%User{id: user_id}
) do
Repo.all(
from sg in ShotGroup,
where: sg.ammo_group_id == ^ammo_group_id,
where: sg.user_id == ^user_id
)
end
@doc """ @doc """
Gets a single shot_group. Gets a single shot_group.
@ -107,9 +122,15 @@ defmodule Cannery.ActivityLog do
) )
|> Multi.run( |> Multi.run(
:ammo_group, :ammo_group,
fn repo, %{create_shot_group: %{ammo_group_id: ammo_group_id, user_id: user_id}} -> fn _repo, %{create_shot_group: %{ammo_group_id: ammo_group_id, user_id: user_id}} ->
{:ok, ammo_group =
repo.one(from ag in AmmoGroup, where: ag.id == ^ammo_group_id and ag.user_id == ^user_id)} Repo.one(
from ag in AmmoGroup,
where: ag.id == ^ammo_group_id,
where: ag.user_id == ^user_id
)
{:ok, ammo_group}
end end
) )
|> Multi.update( |> Multi.update(
@ -220,4 +241,112 @@ defmodule Cannery.ActivityLog do
{:error, _other_transaction, _value, _changes_so_far} -> {:error, nil} {:error, _other_transaction, _value, _changes_so_far} -> {:error, nil}
end end
end end
@doc """
Returns the number of shot rounds for an ammo group
"""
@spec get_used_count(AmmoGroup.t(), User.t()) :: non_neg_integer()
def get_used_count(%AmmoGroup{id: ammo_group_id} = ammo_group, user) do
[ammo_group]
|> get_used_counts(user)
|> Map.get(ammo_group_id, 0)
end
@doc """
Returns the number of shot rounds for multiple ammo groups
"""
@spec get_used_counts([AmmoGroup.t()], User.t()) ::
%{optional(AmmoGroup.id()) => non_neg_integer()}
def get_used_counts(ammo_groups, %User{id: user_id}) do
ammo_group_ids =
ammo_groups
|> Enum.map(fn %{id: ammo_group_id} -> ammo_group_id end)
Repo.all(
from sg in ShotGroup,
where: sg.ammo_group_id in ^ammo_group_ids,
where: sg.user_id == ^user_id,
group_by: sg.ammo_group_id,
select: {sg.ammo_group_id, sum(sg.count)}
)
|> Map.new()
end
@doc """
Returns the last entered shot group date for an ammo group
"""
@spec get_last_used_date(AmmoGroup.t(), User.t()) :: Date.t() | nil
def get_last_used_date(%AmmoGroup{id: ammo_group_id} = ammo_group, user) do
[ammo_group]
|> get_last_used_dates(user)
|> Map.get(ammo_group_id)
end
@doc """
Returns the last entered shot group date for an ammo group
"""
@spec get_last_used_dates([AmmoGroup.t()], User.t()) :: %{optional(AmmoGroup.id()) => Date.t()}
def get_last_used_dates(ammo_groups, %User{id: user_id}) do
ammo_group_ids =
ammo_groups
|> Enum.map(fn %AmmoGroup{id: ammo_group_id, user_id: ^user_id} -> ammo_group_id end)
Repo.all(
from sg in ShotGroup,
where: sg.ammo_group_id in ^ammo_group_ids,
where: sg.user_id == ^user_id,
group_by: sg.ammo_group_id,
select: {sg.ammo_group_id, max(sg.date)}
)
|> Map.new()
end
@doc """
Gets the total number of rounds shot for an ammo type
Raises `Ecto.NoResultsError` if the Ammo type does not exist.
## Examples
iex> get_used_count_for_ammo_type(123, %User{id: 123})
35
iex> get_used_count_for_ammo_type(456, %User{id: 123})
** (Ecto.NoResultsError)
"""
@spec get_used_count_for_ammo_type(AmmoType.t(), User.t()) :: non_neg_integer()
def get_used_count_for_ammo_type(%AmmoType{id: ammo_type_id} = ammo_type, user) do
[ammo_type]
|> get_used_count_for_ammo_types(user)
|> Map.get(ammo_type_id, 0)
end
@doc """
Gets the total number of rounds shot for multiple ammo types
## Examples
iex> get_used_count_for_ammo_types(123, %User{id: 123})
35
"""
@spec get_used_count_for_ammo_types([AmmoType.t()], User.t()) ::
%{optional(AmmoType.id()) => non_neg_integer()}
def get_used_count_for_ammo_types(ammo_types, %User{id: user_id}) do
ammo_type_ids =
ammo_types
|> Enum.map(fn %AmmoType{id: ammo_type_id, user_id: ^user_id} -> ammo_type_id end)
Repo.all(
from ag in AmmoGroup,
left_join: sg in ShotGroup,
on: ag.id == sg.ammo_group_id,
where: ag.ammo_type_id in ^ammo_type_ids,
where: not (sg.count |> is_nil()),
group_by: ag.ammo_type_id,
select: {ag.ammo_type_id, sum(sg.count)}
)
|> Map.new()
end
end end

View File

@ -6,7 +6,7 @@ defmodule Cannery.ActivityLog.ShotGroup do
use Ecto.Schema use Ecto.Schema
import CanneryWeb.Gettext import CanneryWeb.Gettext
import Ecto.Changeset import Ecto.Changeset
alias Cannery.{Accounts.User, ActivityLog.ShotGroup, Ammo.AmmoGroup, Repo} alias Cannery.{Accounts.User, Ammo, Ammo.AmmoGroup}
alias Ecto.{Changeset, UUID} alias Ecto.{Changeset, UUID}
@derive {Jason.Encoder, @derive {Jason.Encoder,
@ -24,25 +24,23 @@ defmodule Cannery.ActivityLog.ShotGroup do
field :date, :date field :date, :date
field :notes, :string field :notes, :string
belongs_to :user, User field :user_id, :binary_id
belongs_to :ammo_group, AmmoGroup field :ammo_group_id, :binary_id
timestamps() timestamps()
end end
@type t :: %ShotGroup{ @type t :: %__MODULE__{
id: id(), id: id(),
count: integer, count: integer,
notes: String.t() | nil, notes: String.t() | nil,
date: Date.t() | nil, date: Date.t() | nil,
ammo_group: AmmoGroup.t() | nil,
ammo_group_id: AmmoGroup.id(), ammo_group_id: AmmoGroup.id(),
user: User.t() | nil,
user_id: User.id(), user_id: User.id(),
inserted_at: NaiveDateTime.t(), inserted_at: NaiveDateTime.t(),
updated_at: NaiveDateTime.t() updated_at: NaiveDateTime.t()
} }
@type new_shot_group :: %ShotGroup{} @type new_shot_group :: %__MODULE__{}
@type id :: UUID.t() @type id :: UUID.t()
@type changeset :: Changeset.t(t() | new_shot_group()) @type changeset :: Changeset.t(t() | new_shot_group())
@ -58,44 +56,47 @@ defmodule Cannery.ActivityLog.ShotGroup do
%User{id: user_id}, %User{id: user_id},
%AmmoGroup{id: ammo_group_id, user_id: user_id} = ammo_group, %AmmoGroup{id: ammo_group_id, user_id: user_id} = ammo_group,
attrs attrs
) ) do
when not (user_id |> is_nil()) and not (ammo_group_id |> is_nil()) do
shot_group shot_group
|> change(user_id: user_id) |> change(user_id: user_id)
|> change(ammo_group_id: ammo_group_id) |> change(ammo_group_id: ammo_group_id)
|> cast(attrs, [:count, :notes, :date]) |> cast(attrs, [:count, :notes, :date])
|> validate_number(:count, greater_than: 0)
|> validate_create_shot_group_count(ammo_group) |> validate_create_shot_group_count(ammo_group)
|> validate_required([:count, :date, :ammo_group_id, :user_id]) |> validate_required([:date, :ammo_group_id, :user_id])
end end
def create_changeset(shot_group, _invalid_user, _invalid_ammo_group, attrs) do def create_changeset(shot_group, _invalid_user, _invalid_ammo_group, attrs) do
shot_group shot_group
|> cast(attrs, [:count, :notes, :date]) |> cast(attrs, [:count, :notes, :date])
|> validate_number(:count, greater_than: 0) |> validate_required([:ammo_group_id, :user_id])
|> validate_required([:count, :ammo_group_id, :user_id])
|> add_error(:invalid, dgettext("errors", "Please select a valid user and ammo pack")) |> add_error(:invalid, dgettext("errors", "Please select a valid user and ammo pack"))
end end
defp validate_create_shot_group_count(changeset, %AmmoGroup{count: ammo_group_count}) do defp validate_create_shot_group_count(changeset, %AmmoGroup{count: ammo_group_count}) do
if changeset |> Changeset.get_field(:count) > ammo_group_count do case changeset |> Changeset.get_field(:count) do
error = nil ->
dgettext("errors", "Count must be less than %{count} shots", count: ammo_group_count) changeset |> Changeset.add_error(:ammo_left, dgettext("errors", "can't be blank"))
changeset |> Changeset.add_error(:count, error) count when count > ammo_group_count ->
else changeset
|> Changeset.add_error(:ammo_left, dgettext("errors", "Ammo left must be at least 0"))
count when count <= 0 ->
error =
dgettext("errors", "Ammo left can be at most %{count} rounds",
count: ammo_group_count - 1
)
changeset |> Changeset.add_error(:ammo_left, error)
_valid_count ->
changeset changeset
end end
end end
@doc false @doc false
@spec update_changeset(t() | new_shot_group(), User.t(), attrs :: map()) :: changeset() @spec update_changeset(t() | new_shot_group(), User.t(), attrs :: map()) :: changeset()
def update_changeset( def update_changeset(%__MODULE__{} = shot_group, user, attrs) do
%ShotGroup{user_id: user_id} = shot_group,
%User{id: user_id} = user,
attrs
)
when not (user_id |> is_nil()) do
shot_group shot_group
|> cast(attrs, [:count, :notes, :date]) |> cast(attrs, [:count, :notes, :date])
|> validate_number(:count, greater_than: 0) |> validate_number(:count, greater_than: 0)
@ -105,12 +106,10 @@ defmodule Cannery.ActivityLog.ShotGroup do
defp validate_update_shot_group_count( defp validate_update_shot_group_count(
changeset, changeset,
%ShotGroup{count: count} = shot_group, %__MODULE__{ammo_group_id: ammo_group_id, count: count},
%User{id: user_id} user
) ) do
when not (user_id |> is_nil()) do %{count: ammo_group_count} = Ammo.get_ammo_group!(ammo_group_id, user)
%{ammo_group: %AmmoGroup{count: ammo_group_count, user_id: ^user_id}} =
shot_group |> Repo.preload(:ammo_group)
new_shot_group_count = changeset |> Changeset.get_field(:count) new_shot_group_count = changeset |> Changeset.get_field(:count)
shot_diff_to_add = new_shot_group_count - count shot_diff_to_add = new_shot_group_count - count

File diff suppressed because it is too large Load Diff

View File

@ -9,8 +9,8 @@ defmodule Cannery.Ammo.AmmoGroup do
use Ecto.Schema use Ecto.Schema
import CanneryWeb.Gettext import CanneryWeb.Gettext
import Ecto.Changeset import Ecto.Changeset
alias Cannery.Ammo.{AmmoGroup, AmmoType} alias Cannery.Ammo.AmmoType
alias Cannery.{Accounts.User, ActivityLog.ShotGroup, Containers, Containers.Container} alias Cannery.{Accounts.User, Containers, Containers.Container}
alias Ecto.{Changeset, UUID} alias Ecto.{Changeset, UUID}
@derive {Jason.Encoder, @derive {Jason.Encoder,
@ -33,15 +33,13 @@ defmodule Cannery.Ammo.AmmoGroup do
field :purchased_on, :date field :purchased_on, :date
belongs_to :ammo_type, AmmoType belongs_to :ammo_type, AmmoType
belongs_to :container, Container field :container_id, :binary_id
belongs_to :user, User field :user_id, :binary_id
has_many :shot_groups, ShotGroup
timestamps() timestamps()
end end
@type t :: %AmmoGroup{ @type t :: %__MODULE__{
id: id(), id: id(),
count: integer, count: integer,
notes: String.t() | nil, notes: String.t() | nil,
@ -50,14 +48,12 @@ defmodule Cannery.Ammo.AmmoGroup do
purchased_on: Date.t(), purchased_on: Date.t(),
ammo_type: AmmoType.t() | nil, ammo_type: AmmoType.t() | nil,
ammo_type_id: AmmoType.id(), ammo_type_id: AmmoType.id(),
container: Container.t() | nil,
container_id: Container.id(), container_id: Container.id(),
user: User.t() | nil,
user_id: User.id(), user_id: User.id(),
inserted_at: NaiveDateTime.t(), inserted_at: NaiveDateTime.t(),
updated_at: NaiveDateTime.t() updated_at: NaiveDateTime.t()
} }
@type new_ammo_group :: %AmmoGroup{} @type new_ammo_group :: %__MODULE__{}
@type id :: UUID.t() @type id :: UUID.t()
@type changeset :: Changeset.t(t() | new_ammo_group()) @type changeset :: Changeset.t(t() | new_ammo_group())
@ -76,8 +72,7 @@ defmodule Cannery.Ammo.AmmoGroup do
%User{id: user_id}, %User{id: user_id},
attrs attrs
) )
when not (ammo_type_id |> is_nil()) and not (container_id |> is_nil()) and when is_binary(ammo_type_id) and is_binary(container_id) and is_binary(user_id) do
not (user_id |> is_nil()) do
ammo_group ammo_group
|> change(ammo_type_id: ammo_type_id) |> change(ammo_type_id: ammo_type_id)
|> change(user_id: user_id) |> change(user_id: user_id)

View File

@ -8,7 +8,7 @@ defmodule Cannery.Ammo.AmmoType do
use Ecto.Schema use Ecto.Schema
import Ecto.Changeset import Ecto.Changeset
alias Cannery.Accounts.User alias Cannery.Accounts.User
alias Cannery.Ammo.{AmmoGroup, AmmoType} alias Cannery.Ammo.AmmoGroup
alias Ecto.{Changeset, UUID} alias Ecto.{Changeset, UUID}
@derive {Jason.Encoder, @derive {Jason.Encoder,
@ -64,14 +64,14 @@ defmodule Cannery.Ammo.AmmoType do
field :manufacturer, :string field :manufacturer, :string
field :upc, :string field :upc, :string
belongs_to :user, User field :user_id, :binary_id
has_many :ammo_groups, AmmoGroup has_many :ammo_groups, AmmoGroup
timestamps() timestamps()
end end
@type t :: %AmmoType{ @type t :: %__MODULE__{
id: id(), id: id(),
name: String.t(), name: String.t(),
desc: String.t() | nil, desc: String.t() | nil,
@ -95,12 +95,11 @@ defmodule Cannery.Ammo.AmmoType do
manufacturer: String.t() | nil, manufacturer: String.t() | nil,
upc: String.t() | nil, upc: String.t() | nil,
user_id: User.id(), user_id: User.id(),
user: User.t() | nil,
ammo_groups: [AmmoGroup.t()] | nil, ammo_groups: [AmmoGroup.t()] | nil,
inserted_at: NaiveDateTime.t(), inserted_at: NaiveDateTime.t(),
updated_at: NaiveDateTime.t() updated_at: NaiveDateTime.t()
} }
@type new_ammo_type :: %AmmoType{} @type new_ammo_type :: %__MODULE__{}
@type id :: UUID.t() @type id :: UUID.t()
@type changeset :: Changeset.t(t() | new_ammo_type()) @type changeset :: Changeset.t(t() | new_ammo_type())

View File

@ -5,10 +5,12 @@ defmodule Cannery.Containers do
import CanneryWeb.Gettext import CanneryWeb.Gettext
import Ecto.Query, warn: false import Ecto.Query, warn: false
alias Cannery.{Accounts.User, Ammo.AmmoGroup, Repo, Tags.Tag} alias Cannery.{Accounts.User, Ammo.AmmoGroup, Repo}
alias Cannery.Containers.{Container, ContainerTag} alias Cannery.Containers.{Container, ContainerTag, Tag}
alias Ecto.Changeset alias Ecto.Changeset
@container_preloads [:tags]
@doc """ @doc """
Returns the list of containers. Returns the list of containers.
@ -28,11 +30,9 @@ defmodule Cannery.Containers do
as: :c, as: :c,
left_join: t in assoc(c, :tags), left_join: t in assoc(c, :tags),
as: :t, as: :t,
left_join: ag in assoc(c, :ammo_groups),
as: :ag,
where: c.user_id == ^user_id, where: c.user_id == ^user_id,
order_by: c.name, order_by: c.name,
preload: [tags: t, ammo_groups: ag] preload: ^@container_preloads
) )
|> list_containers_search(search) |> list_containers_search(search)
|> Repo.all() |> Repo.all()
@ -106,12 +106,10 @@ defmodule Cannery.Containers do
def get_container!(id, %User{id: user_id}) do def get_container!(id, %User{id: user_id}) do
Repo.one!( Repo.one!(
from c in Container, from c in Container,
left_join: t in assoc(c, :tags),
left_join: ag in assoc(c, :ammo_groups),
where: c.user_id == ^user_id, where: c.user_id == ^user_id,
where: c.id == ^id, where: c.id == ^id,
order_by: c.name, order_by: c.name,
preload: [tags: t, ammo_groups: ag] preload: ^@container_preloads
) )
end end
@ -130,7 +128,19 @@ defmodule Cannery.Containers do
@spec create_container(attrs :: map(), User.t()) :: @spec create_container(attrs :: map(), User.t()) ::
{:ok, Container.t()} | {:error, Container.changeset()} {:ok, Container.t()} | {:error, Container.changeset()}
def create_container(attrs, %User{} = user) do def create_container(attrs, %User{} = user) do
%Container{} |> Container.create_changeset(user, attrs) |> Repo.insert() %Container{}
|> Container.create_changeset(user, attrs)
|> Repo.insert()
|> case do
{:ok, container} -> {:ok, container |> preload_container()}
{:error, changeset} -> {:error, changeset}
end
end
@spec preload_container(Container.t()) :: Container.t()
@spec preload_container([Container.t()]) :: [Container.t()]
def preload_container(container) do
container |> Repo.preload(@container_preloads)
end end
@doc """ @doc """
@ -148,7 +158,13 @@ defmodule Cannery.Containers do
@spec update_container(Container.t(), User.t(), attrs :: map()) :: @spec update_container(Container.t(), User.t(), attrs :: map()) ::
{:ok, Container.t()} | {:error, Container.changeset()} {:ok, Container.t()} | {:error, Container.changeset()}
def update_container(%Container{user_id: user_id} = container, %User{id: user_id}, attrs) do def update_container(%Container{user_id: user_id} = container, %User{id: user_id}, attrs) do
container |> Container.update_changeset(attrs) |> Repo.update() container
|> Container.update_changeset(attrs)
|> Repo.update()
|> case do
{:ok, container} -> {:ok, container |> preload_container()}
{:error, changeset} -> {:error, changeset}
end
end end
@doc """ @doc """
@ -173,7 +189,12 @@ defmodule Cannery.Containers do
) )
|> case do |> case do
0 -> 0 ->
container |> Repo.delete() container
|> Repo.delete()
|> case do
{:ok, container} -> {:ok, container |> preload_container()}
{:error, changeset} -> {:error, changeset}
end
_amount -> _amount ->
error = dgettext("errors", "Container must be empty before deleting") error = dgettext("errors", "Container must be empty before deleting")
@ -214,8 +235,11 @@ defmodule Cannery.Containers do
%Container{user_id: user_id} = container, %Container{user_id: user_id} = container,
%Tag{user_id: user_id} = tag, %Tag{user_id: user_id} = tag,
%User{id: user_id} %User{id: user_id}
), ) do
do: %ContainerTag{} |> ContainerTag.create_changeset(tag, container) |> Repo.insert!() %ContainerTag{}
|> ContainerTag.create_changeset(tag, container)
|> Repo.insert!()
end
@doc """ @doc """
Removes a tag from a container Removes a tag from a container
@ -226,45 +250,175 @@ defmodule Cannery.Containers do
%Container{} %Container{}
""" """
@spec remove_tag!(Container.t(), Tag.t(), User.t()) :: non_neg_integer() @spec remove_tag!(Container.t(), Tag.t(), User.t()) :: {non_neg_integer(), [ContainerTag.t()]}
def remove_tag!( def remove_tag!(
%Container{id: container_id, user_id: user_id}, %Container{id: container_id, user_id: user_id},
%Tag{id: tag_id, user_id: user_id}, %Tag{id: tag_id, user_id: user_id},
%User{id: user_id} %User{id: user_id}
) do ) do
{count, _} = {count, results} =
Repo.delete_all( Repo.delete_all(
from ct in ContainerTag, from ct in ContainerTag,
where: ct.container_id == ^container_id, where: ct.container_id == ^container_id,
where: ct.tag_id == ^tag_id where: ct.tag_id == ^tag_id,
select: ct
) )
if count == 0, do: raise("could not delete container tag"), else: count if count == 0, do: raise("could not delete container tag"), else: {count, results}
end
# Container Tags
@doc """
Returns the list of tags.
## Examples
iex> list_tags(%User{id: 123})
[%Tag{}, ...]
iex> list_tags("cool", %User{id: 123})
[%Tag{name: "my cool tag"}, ...]
"""
@spec list_tags(User.t()) :: [Tag.t()]
@spec list_tags(search :: nil | String.t(), User.t()) :: [Tag.t()]
def list_tags(search \\ nil, user)
def list_tags(search, %{id: user_id}) when search |> is_nil() or search == "",
do: Repo.all(from t in Tag, where: t.user_id == ^user_id, order_by: t.name)
def list_tags(search, %{id: user_id}) when search |> is_binary() do
trimmed_search = String.trim(search)
Repo.all(
from t in Tag,
where: t.user_id == ^user_id,
where:
fragment(
"? @@ websearch_to_tsquery('english', ?)",
t.search,
^trimmed_search
),
order_by: {
:desc,
fragment(
"ts_rank_cd(?, websearch_to_tsquery('english', ?), 4)",
t.search,
^trimmed_search
)
}
)
end end
@doc """ @doc """
Returns number of rounds in container. If data is already preloaded, then Gets a single tag.
there will be no db hit.
## Examples
iex> get_tag(123, %User{id: 123})
{:ok, %Tag{}}
iex> get_tag(456, %User{id: 123})
{:error, :not_found}
""" """
@spec get_container_ammo_group_count!(Container.t()) :: non_neg_integer() @spec get_tag(Tag.id(), User.t()) :: {:ok, Tag.t()} | {:error, :not_found}
def get_container_ammo_group_count!(%Container{} = container) do def get_tag(id, %User{id: user_id}) do
container Repo.one(from t in Tag, where: t.id == ^id and t.user_id == ^user_id)
|> Repo.preload(:ammo_groups) |> case do
|> Map.fetch!(:ammo_groups) nil -> {:error, :not_found}
|> Enum.reject(fn %{count: count} -> count == 0 end) tag -> {:ok, tag}
|> Enum.count() end
end end
@doc """ @doc """
Returns number of rounds in container. If data is already preloaded, then Gets a single tag.
there will be no db hit.
Raises `Ecto.NoResultsError` if the Tag does not exist.
## Examples
iex> get_tag!(123, %User{id: 123})
%Tag{}
iex> get_tag!(456, %User{id: 123})
** (Ecto.NoResultsError)
""" """
@spec get_container_rounds!(Container.t()) :: non_neg_integer() @spec get_tag!(Tag.id(), User.t()) :: Tag.t()
def get_container_rounds!(%Container{} = container) do def get_tag!(id, %User{id: user_id}) do
container Repo.one!(
|> Repo.preload(:ammo_groups) from t in Tag,
|> Map.fetch!(:ammo_groups) where: t.id == ^id,
|> Enum.map(fn %{count: count} -> count end) where: t.user_id == ^user_id
|> Enum.sum() )
end
@doc """
Creates a tag.
## Examples
iex> create_tag(%{field: value}, %User{id: 123})
{:ok, %Tag{}}
iex> create_tag(%{field: bad_value}, %User{id: 123})
{:error, %Changeset{}}
"""
@spec create_tag(attrs :: map(), User.t()) ::
{:ok, Tag.t()} | {:error, Tag.changeset()}
def create_tag(attrs, %User{} = user) do
%Tag{} |> Tag.create_changeset(user, attrs) |> Repo.insert()
end
@doc """
Updates a tag.
## Examples
iex> update_tag(tag, %{field: new_value}, %User{id: 123})
{:ok, %Tag{}}
iex> update_tag(tag, %{field: bad_value}, %User{id: 123})
{:error, %Changeset{}}
"""
@spec update_tag(Tag.t(), attrs :: map(), User.t()) ::
{:ok, Tag.t()} | {:error, Tag.changeset()}
def update_tag(%Tag{user_id: user_id} = tag, attrs, %User{id: user_id}) do
tag |> Tag.update_changeset(attrs) |> Repo.update()
end
@doc """
Deletes a tag.
## Examples
iex> delete_tag(tag, %User{id: 123})
{:ok, %Tag{}}
iex> delete_tag(tag, %User{id: 123})
{:error, %Changeset{}}
"""
@spec delete_tag(Tag.t(), User.t()) :: {:ok, Tag.t()} | {:error, Tag.changeset()}
def delete_tag(%Tag{user_id: user_id} = tag, %User{id: user_id}) do
tag |> Repo.delete()
end
@doc """
Deletes a tag.
## Examples
iex> delete_tag!(tag, %User{id: 123})
%Tag{}
"""
@spec delete_tag!(Tag.t(), User.t()) :: Tag.t()
def delete_tag!(%Tag{user_id: user_id} = tag, %User{id: user_id}) do
tag |> Repo.delete!()
end end
end end

View File

@ -6,8 +6,7 @@ defmodule Cannery.Containers.Container do
use Ecto.Schema use Ecto.Schema
import Ecto.Changeset import Ecto.Changeset
alias Ecto.{Changeset, UUID} alias Ecto.{Changeset, UUID}
alias Cannery.Containers.{Container, ContainerTag} alias Cannery.{Accounts.User, Containers.ContainerTag, Containers.Tag}
alias Cannery.{Accounts.User, Ammo.AmmoGroup, Tags.Tag}
@derive {Jason.Encoder, @derive {Jason.Encoder,
only: [ only: [
@ -26,28 +25,25 @@ defmodule Cannery.Containers.Container do
field :location, :string field :location, :string
field :type, :string field :type, :string
belongs_to :user, User field :user_id, :binary_id
has_many :ammo_groups, AmmoGroup
many_to_many :tags, Tag, join_through: ContainerTag many_to_many :tags, Tag, join_through: ContainerTag
timestamps() timestamps()
end end
@type t :: %Container{ @type t :: %__MODULE__{
id: id(), id: id(),
name: String.t(), name: String.t(),
desc: String.t(), desc: String.t(),
location: String.t(), location: String.t(),
type: String.t(), type: String.t(),
user: User.t(),
user_id: User.id(), user_id: User.id(),
ammo_groups: [AmmoGroup.t()] | nil,
tags: [Tag.t()] | nil, tags: [Tag.t()] | nil,
inserted_at: NaiveDateTime.t(), inserted_at: NaiveDateTime.t(),
updated_at: NaiveDateTime.t() updated_at: NaiveDateTime.t()
} }
@type new_container :: %Container{} @type new_container :: %__MODULE__{}
@type id :: UUID.t() @type id :: UUID.t()
@type changeset :: Changeset.t(t() | new_container()) @type changeset :: Changeset.t(t() | new_container())

View File

@ -1,12 +1,12 @@
defmodule Cannery.Containers.ContainerTag do defmodule Cannery.Containers.ContainerTag do
@moduledoc """ @moduledoc """
Thru-table struct for associating Cannery.Containers.Container and Thru-table struct for associating Cannery.Containers.Container and
Cannery.Tags.Tag. Cannery.Containers.Tag.
""" """
use Ecto.Schema use Ecto.Schema
import Ecto.Changeset import Ecto.Changeset
alias Cannery.{Containers.Container, Containers.ContainerTag, Tags.Tag} alias Cannery.Containers.{Container, Tag}
alias Ecto.{Changeset, UUID} alias Ecto.{Changeset, UUID}
@primary_key {:id, :binary_id, autogenerate: true} @primary_key {:id, :binary_id, autogenerate: true}
@ -18,7 +18,7 @@ defmodule Cannery.Containers.ContainerTag do
timestamps() timestamps()
end end
@type t :: %ContainerTag{ @type t :: %__MODULE__{
id: id(), id: id(),
container: Container.t(), container: Container.t(),
container_id: Container.id(), container_id: Container.id(),
@ -27,7 +27,7 @@ defmodule Cannery.Containers.ContainerTag do
inserted_at: NaiveDateTime.t(), inserted_at: NaiveDateTime.t(),
updated_at: NaiveDateTime.t() updated_at: NaiveDateTime.t()
} }
@type new_container_tag :: %ContainerTag{} @type new_container_tag :: %__MODULE__{}
@type id :: UUID.t() @type id :: UUID.t()
@type changeset :: Changeset.t(t() | new_container_tag()) @type changeset :: Changeset.t(t() | new_container_tag())

View File

@ -1,4 +1,4 @@
defmodule Cannery.Tags.Tag do defmodule Cannery.Containers.Tag do
@moduledoc """ @moduledoc """
Tags are added to containers to help organize, and can include custom-defined Tags are added to containers to help organize, and can include custom-defined
text and bg colors. text and bg colors.
@ -6,8 +6,8 @@ defmodule Cannery.Tags.Tag do
use Ecto.Schema use Ecto.Schema
import Ecto.Changeset import Ecto.Changeset
alias Cannery.Accounts.User
alias Ecto.{Changeset, UUID} alias Ecto.{Changeset, UUID}
alias Cannery.{Accounts.User, Tags.Tag}
@derive {Jason.Encoder, @derive {Jason.Encoder,
only: [ only: [
@ -23,22 +23,21 @@ defmodule Cannery.Tags.Tag do
field :bg_color, :string field :bg_color, :string
field :text_color, :string field :text_color, :string
belongs_to :user, User field :user_id, :binary_id
timestamps() timestamps()
end end
@type t :: %Tag{ @type t :: %__MODULE__{
id: id(), id: id(),
name: String.t(), name: String.t(),
bg_color: String.t(), bg_color: String.t(),
text_color: String.t(), text_color: String.t(),
user: User.t() | nil,
user_id: User.id(), user_id: User.id(),
inserted_at: NaiveDateTime.t(), inserted_at: NaiveDateTime.t(),
updated_at: NaiveDateTime.t() updated_at: NaiveDateTime.t()
} }
@type new_tag() :: %Tag{} @type new_tag() :: %__MODULE__{}
@type id() :: UUID.t() @type id() :: UUID.t()
@type changeset() :: Changeset.t(t() | new_tag()) @type changeset() :: Changeset.t(t() | new_tag())

View File

@ -1,149 +0,0 @@
defmodule Cannery.Tags do
@moduledoc """
The Tags context.
"""
import Ecto.Query, warn: false
import CanneryWeb.Gettext
alias Cannery.{Accounts.User, Repo, Tags.Tag}
@doc """
Returns the list of tags.
## Examples
iex> list_tags(%User{id: 123})
[%Tag{}, ...]
iex> list_tags("cool", %User{id: 123})
[%Tag{name: "my cool tag"}, ...]
"""
@spec list_tags(User.t()) :: [Tag.t()]
@spec list_tags(search :: nil | String.t(), User.t()) :: [Tag.t()]
def list_tags(search \\ nil, user)
def list_tags(search, %{id: user_id}) when search |> is_nil() or search == "",
do: Repo.all(from t in Tag, where: t.user_id == ^user_id, order_by: t.name)
def list_tags(search, %{id: user_id}) when search |> is_binary() do
trimmed_search = String.trim(search)
Repo.all(
from t in Tag,
where: t.user_id == ^user_id,
where:
fragment(
"search @@ websearch_to_tsquery('english', ?)",
^trimmed_search
),
order_by: {
:desc,
fragment(
"ts_rank_cd(search, websearch_to_tsquery('english', ?), 4)",
^trimmed_search
)
}
)
end
@doc """
Gets a single tag.
## Examples
iex> get_tag(123, %User{id: 123})
{:ok, %Tag{}}
iex> get_tag(456, %User{id: 123})
{:error, "tag not found"}
"""
@spec get_tag(Tag.id(), User.t()) :: {:ok, Tag.t()} | {:error, String.t()}
def get_tag(id, %User{id: user_id}) do
Repo.one(from t in Tag, where: t.id == ^id and t.user_id == ^user_id)
|> case do
nil -> {:error, dgettext("errors", "Tag not found")}
tag -> {:ok, tag}
end
end
@doc """
Gets a single tag.
Raises `Ecto.NoResultsError` if the Tag does not exist.
## Examples
iex> get_tag!(123, %User{id: 123})
%Tag{}
iex> get_tag!(456, %User{id: 123})
** (Ecto.NoResultsError)
"""
@spec get_tag!(Tag.id(), User.t()) :: Tag.t()
def get_tag!(id, %User{id: user_id}),
do: Repo.one!(from t in Tag, where: t.id == ^id and t.user_id == ^user_id)
@doc """
Creates a tag.
## Examples
iex> create_tag(%{field: value}, %User{id: 123})
{:ok, %Tag{}}
iex> create_tag(%{field: bad_value}, %User{id: 123})
{:error, %Changeset{}}
"""
@spec create_tag(attrs :: map(), User.t()) ::
{:ok, Tag.t()} | {:error, Tag.changeset()}
def create_tag(attrs, %User{} = user),
do: %Tag{} |> Tag.create_changeset(user, attrs) |> Repo.insert()
@doc """
Updates a tag.
## Examples
iex> update_tag(tag, %{field: new_value}, %User{id: 123})
{:ok, %Tag{}}
iex> update_tag(tag, %{field: bad_value}, %User{id: 123})
{:error, %Changeset{}}
"""
@spec update_tag(Tag.t(), attrs :: map(), User.t()) ::
{:ok, Tag.t()} | {:error, Tag.changeset()}
def update_tag(%Tag{user_id: user_id} = tag, attrs, %User{id: user_id}),
do: tag |> Tag.update_changeset(attrs) |> Repo.update()
@doc """
Deletes a tag.
## Examples
iex> delete_tag(tag, %User{id: 123})
{:ok, %Tag{}}
iex> delete_tag(tag, %User{id: 123})
{:error, %Changeset{}}
"""
@spec delete_tag(Tag.t(), User.t()) :: {:ok, Tag.t()} | {:error, Tag.changeset()}
def delete_tag(%Tag{user_id: user_id} = tag, %User{id: user_id}), do: tag |> Repo.delete()
@doc """
Deletes a tag.
## Examples
iex> delete_tag!(tag, %User{id: 123})
%Tag{}
"""
@spec delete_tag!(Tag.t(), User.t()) :: Tag.t()
def delete_tag!(%Tag{user_id: user_id} = tag, %User{id: user_id}), do: tag |> Repo.delete!()
end

View File

@ -5,6 +5,7 @@ defmodule CanneryWeb.Components.AddShotGroupComponent do
use CanneryWeb, :live_component use CanneryWeb, :live_component
alias Cannery.{Accounts.User, ActivityLog, ActivityLog.ShotGroup, Ammo.AmmoGroup} alias Cannery.{Accounts.User, ActivityLog, ActivityLog.ShotGroup, Ammo.AmmoGroup}
alias Ecto.Changeset
alias Phoenix.LiveView.{JS, Socket} alias Phoenix.LiveView.{JS, Socket}
@impl true @impl true
@ -18,7 +19,7 @@ defmodule CanneryWeb.Components.AddShotGroupComponent do
) :: {:ok, Socket.t()} ) :: {:ok, Socket.t()}
def update(%{ammo_group: ammo_group, current_user: current_user} = assigns, socket) do def update(%{ammo_group: ammo_group, current_user: current_user} = assigns, socket) do
changeset = changeset =
%ShotGroup{date: NaiveDateTime.utc_now(), count: 1} %ShotGroup{date: Date.utc_today()}
|> ShotGroup.create_changeset(current_user, ammo_group, %{}) |> ShotGroup.create_changeset(current_user, ammo_group, %{})
{:ok, socket |> assign(assigns) |> assign(:changeset, changeset)} {:ok, socket |> assign(assigns) |> assign(:changeset, changeset)}
@ -32,10 +33,13 @@ defmodule CanneryWeb.Components.AddShotGroupComponent do
) do ) do
params = shot_group_params |> process_params(ammo_group) params = shot_group_params |> process_params(ammo_group)
changeset = %ShotGroup{} |> ShotGroup.create_changeset(current_user, ammo_group, params)
changeset = changeset =
%ShotGroup{} case changeset |> Changeset.apply_action(:validate) do
|> ShotGroup.create_changeset(current_user, ammo_group, params) {:ok, _data} -> changeset
|> Map.put(:action, :validate) {:error, changeset} -> changeset
end
{:noreply, socket |> assign(:changeset, changeset)} {:noreply, socket |> assign(:changeset, changeset)}
end end
@ -56,7 +60,7 @@ defmodule CanneryWeb.Components.AddShotGroupComponent do
prompt = dgettext("prompts", "Shots recorded successfully") prompt = dgettext("prompts", "Shots recorded successfully")
socket |> put_flash(:info, prompt) |> push_navigate(to: return_to) socket |> put_flash(:info, prompt) |> push_navigate(to: return_to)
{:error, %Ecto.Changeset{} = changeset} -> {:error, %Changeset{} = changeset} ->
socket |> assign(changeset: changeset) socket |> assign(changeset: changeset)
end end
@ -65,14 +69,14 @@ defmodule CanneryWeb.Components.AddShotGroupComponent do
# calculate count from shots left # calculate count from shots left
defp process_params(params, %AmmoGroup{count: count}) do defp process_params(params, %AmmoGroup{count: count}) do
new_count = shot_group_count =
if params |> Map.get("ammo_left", "0") == "" do if params |> Map.get("ammo_left", "") == "" do
"0" nil
else else
params |> Map.get("ammo_left", "0") new_count = params |> Map.get("ammo_left") |> String.to_integer()
count - new_count
end end
|> String.to_integer()
params |> Map.put("count", count - new_count) params |> Map.put("count", shot_group_count)
end end
end end

View File

@ -3,7 +3,7 @@ defmodule CanneryWeb.Components.AmmoGroupTableComponent do
A component that displays a list of ammo groups A component that displays a list of ammo groups
""" """
use CanneryWeb, :live_component use CanneryWeb, :live_component
alias Cannery.{Accounts.User, Ammo, Ammo.AmmoGroup, Repo} alias Cannery.{Accounts.User, ActivityLog, Ammo, Ammo.AmmoGroup, Containers}
alias Ecto.UUID alias Ecto.UUID
alias Phoenix.LiveView.{Rendered, Socket} alias Phoenix.LiveView.{Rendered, Socket}
@ -54,8 +54,8 @@ defmodule CanneryWeb.Components.AmmoGroupTableComponent do
end end
columns = [ columns = [
%{label: gettext("Purchased on"), key: :purchased_on}, %{label: gettext("Purchased on"), key: :purchased_on, type: Date},
%{label: gettext("Last used on"), key: :used_up_on} | columns %{label: gettext("Last used on"), key: :used_up_on, type: Date} | columns
] ]
columns = columns =
@ -94,13 +94,15 @@ defmodule CanneryWeb.Components.AmmoGroupTableComponent do
ammo_type: ammo_type, ammo_type: ammo_type,
columns: columns, columns: columns,
container: container, container: container,
original_counts: Ammo.get_original_counts(ammo_groups, current_user),
cprs: Ammo.get_cprs(ammo_groups, current_user),
last_used_dates: ActivityLog.get_last_used_dates(ammo_groups, current_user),
actions: actions, actions: actions,
range: range range: range
} }
rows = rows =
ammo_groups ammo_groups
|> Repo.preload([:ammo_type, :container])
|> Enum.map(fn ammo_group -> |> Enum.map(fn ammo_group ->
ammo_group |> get_row_data_for_ammo_group(extra_data) ammo_group |> get_row_data_for_ammo_group(extra_data)
end) end)
@ -124,8 +126,6 @@ defmodule CanneryWeb.Components.AmmoGroupTableComponent do
@spec get_row_data_for_ammo_group(AmmoGroup.t(), additional_data :: map()) :: map() @spec get_row_data_for_ammo_group(AmmoGroup.t(), additional_data :: map()) :: map()
defp get_row_data_for_ammo_group(ammo_group, %{columns: columns} = additional_data) do defp get_row_data_for_ammo_group(ammo_group, %{columns: columns} = additional_data) do
ammo_group = ammo_group |> Repo.preload([:ammo_type, :container])
columns columns
|> Map.new(fn %{key: key} -> |> Map.new(fn %{key: key} ->
{key, get_value_for_key(key, ammo_group, additional_data)} {key, get_value_for_key(key, ammo_group, additional_data)}
@ -150,30 +150,23 @@ defmodule CanneryWeb.Components.AmmoGroupTableComponent do
defp get_value_for_key(:price_paid, %{price_paid: nil}, _additional_data), do: {"", nil} defp get_value_for_key(:price_paid, %{price_paid: nil}, _additional_data), do: {"", nil}
defp get_value_for_key(:price_paid, %{price_paid: price_paid}, _additional_data), defp get_value_for_key(:price_paid, %{price_paid: price_paid}, _additional_data),
do: gettext("$%{amount}", amount: price_paid |> :erlang.float_to_binary(decimals: 2)) do: gettext("$%{amount}", amount: display_currency(price_paid))
defp get_value_for_key(:purchased_on, %{purchased_on: purchased_on}, _additional_data) do
assigns = %{purchased_on: purchased_on}
defp get_value_for_key(:purchased_on, %{purchased_on: purchased_on} = assigns, _additional_data) do
{purchased_on, {purchased_on,
~H""" ~H"""
<.date date={@purchased_on} /> <.date id={"#{@id}-purchased-on"} date={@purchased_on} />
"""} """}
end end
defp get_value_for_key(:used_up_on, ammo_group, _additional_data) do defp get_value_for_key(:used_up_on, %{id: ammo_group_id}, %{last_used_dates: last_used_dates}) do
last_shot_group_date = last_used_date = last_used_dates |> Map.get(ammo_group_id)
case ammo_group |> Ammo.get_last_used_shot_group() do assigns = %{id: ammo_group_id, last_used_date: last_used_date}
%{date: last_shot_group_date} -> last_shot_group_date
_no_shot_groups -> nil
end
assigns = %{last_shot_group_date: last_shot_group_date} {last_used_date,
{last_shot_group_date,
~H""" ~H"""
<%= if @last_shot_group_date do %> <%= if @last_used_date do %>
<.date date={@last_shot_group_date} /> <.date id={"#{@id}-last-used-date"} date={@last_used_date} />
<% else %> <% else %>
<%= gettext("Never used") %> <%= gettext("Never used") %>
<% end %> <% end %>
@ -189,8 +182,11 @@ defmodule CanneryWeb.Components.AmmoGroupTableComponent do
"""} """}
end end
defp get_value_for_key(:remaining, ammo_group, _additional_data), defp get_value_for_key(:remaining, ammo_group, %{current_user: current_user}),
do: gettext("%{percentage}%", percentage: ammo_group |> Ammo.get_percentage_remaining()) do:
gettext("%{percentage}%",
percentage: ammo_group |> Ammo.get_percentage_remaining(current_user)
)
defp get_value_for_key(:actions, ammo_group, %{actions: actions}) do defp get_value_for_key(:actions, ammo_group, %{actions: actions}) do
assigns = %{actions: actions, ammo_group: ammo_group} assigns = %{actions: actions, ammo_group: ammo_group}
@ -204,31 +200,40 @@ defmodule CanneryWeb.Components.AmmoGroupTableComponent do
defp get_value_for_key( defp get_value_for_key(
:container, :container,
%{container: %{name: container_name}} = ammo_group, %{container_id: container_id} = ammo_group,
%{container: container} %{container: container, current_user: current_user}
) do ) do
assigns = %{container: container, ammo_group: ammo_group} assigns = %{
container:
%{name: container_name} = container_id |> Containers.get_container!(current_user),
container_block: container,
ammo_group: ammo_group
}
{container_name, {container_name,
~H""" ~H"""
<%= render_slot(@container, @ammo_group) %> <%= render_slot(@container_block, {@ammo_group, @container}) %>
"""} """}
end end
defp get_value_for_key(:original_count, ammo_group, _additional_data), defp get_value_for_key(:original_count, %{id: ammo_group_id}, %{
do: ammo_group |> Ammo.get_original_count() original_counts: original_counts
}) do
Map.fetch!(original_counts, ammo_group_id)
end
defp get_value_for_key(:cpr, %{price_paid: nil}, _additional_data), defp get_value_for_key(:cpr, %{price_paid: nil}, _additional_data),
do: gettext("No cost information") do: gettext("No cost information")
defp get_value_for_key(:cpr, ammo_group, _additional_data) do defp get_value_for_key(:cpr, %{id: ammo_group_id}, %{cprs: cprs}) do
gettext("$%{amount}", gettext("$%{amount}", amount: display_currency(Map.fetch!(cprs, ammo_group_id)))
amount: ammo_group |> Ammo.get_cpr() |> :erlang.float_to_binary(decimals: 2)
)
end end
defp get_value_for_key(:count, %{count: count}, _additional_data), defp get_value_for_key(:count, %{count: count}, _additional_data),
do: if(count == 0, do: gettext("Empty"), else: count) do: if(count == 0, do: gettext("Empty"), else: count)
defp get_value_for_key(key, ammo_group, _additional_data), do: ammo_group |> Map.get(key) defp get_value_for_key(key, ammo_group, _additional_data), do: ammo_group |> Map.get(key)
@spec display_currency(float()) :: String.t()
defp display_currency(float), do: :erlang.float_to_binary(float, decimals: 2)
end end

View File

@ -3,7 +3,7 @@ defmodule CanneryWeb.Components.AmmoTypeTableComponent do
A component that displays a list of ammo type A component that displays a list of ammo type
""" """
use CanneryWeb, :live_component use CanneryWeb, :live_component
alias Cannery.{Accounts.User, Ammo, Ammo.AmmoType} alias Cannery.{Accounts.User, ActivityLog, Ammo, Ammo.AmmoType}
alias Ecto.UUID alias Ecto.UUID
alias Phoenix.LiveView.{Rendered, Socket} alias Phoenix.LiveView.{Rendered, Socket}
@ -103,13 +103,13 @@ defmodule CanneryWeb.Components.AmmoTypeTableComponent do
[ [
%{ %{
label: gettext("Used packs"), label: gettext("Used packs"),
key: :used_ammo_count, key: :used_packs_count,
type: :used_ammo_count type: :used_packs_count
}, },
%{ %{
label: gettext("Total ever packs"), label: gettext("Total ever packs"),
key: :historical_ammo_count, key: :historical_packs_count,
type: :historical_ammo_count type: :historical_packs_count
} }
] ]
else else
@ -121,7 +121,35 @@ defmodule CanneryWeb.Components.AmmoTypeTableComponent do
%{label: nil, key: "actions", type: :actions, sortable: false} %{label: nil, key: "actions", type: :actions, sortable: false}
]) ])
extra_data = %{actions: actions, current_user: current_user} round_counts = ammo_types |> Ammo.get_round_count_for_ammo_types(current_user)
used_counts =
show_used && ammo_types |> ActivityLog.get_used_count_for_ammo_types(current_user)
historical_round_counts =
show_used && ammo_types |> Ammo.get_historical_count_for_ammo_types(current_user)
packs_count = ammo_types |> Ammo.get_ammo_groups_count_for_types(current_user)
historical_packs_count =
show_used && ammo_types |> Ammo.get_ammo_groups_count_for_types(current_user, true)
used_packs_count =
show_used && ammo_types |> Ammo.get_used_ammo_groups_count_for_types(current_user)
average_costs = ammo_types |> Ammo.get_average_cost_for_ammo_types(current_user)
extra_data = %{
actions: actions,
current_user: current_user,
used_counts: used_counts,
round_counts: round_counts,
historical_round_counts: historical_round_counts,
packs_count: packs_count,
used_packs_count: used_packs_count,
historical_packs_count: historical_packs_count,
average_costs: average_costs
}
rows = rows =
ammo_types ammo_types
@ -156,28 +184,44 @@ defmodule CanneryWeb.Components.AmmoTypeTableComponent do
defp get_ammo_type_value(:boolean, key, ammo_type, _other_data), defp get_ammo_type_value(:boolean, key, ammo_type, _other_data),
do: ammo_type |> Map.get(key) |> humanize() do: ammo_type |> Map.get(key) |> humanize()
defp get_ammo_type_value(:round_count, _key, ammo_type, %{current_user: current_user}), defp get_ammo_type_value(:round_count, _key, %{id: ammo_type_id}, %{round_counts: round_counts}),
do: ammo_type |> Ammo.get_round_count_for_ammo_type(current_user) do: Map.get(round_counts, ammo_type_id)
defp get_ammo_type_value(:historical_round_count, _key, ammo_type, %{current_user: current_user}), defp get_ammo_type_value(
do: ammo_type |> Ammo.get_historical_count_for_ammo_type(current_user) :historical_round_count,
_key,
%{id: ammo_type_id},
%{historical_round_counts: historical_round_counts}
),
do: Map.get(historical_round_counts, ammo_type_id)
defp get_ammo_type_value(:used_round_count, _key, ammo_type, %{current_user: current_user}), defp get_ammo_type_value(:used_round_count, _key, %{id: ammo_type_id}, %{
do: ammo_type |> Ammo.get_used_count_for_ammo_type(current_user) used_counts: used_counts
}),
do: Map.get(used_counts, ammo_type_id)
defp get_ammo_type_value(:historical_ammo_count, _key, ammo_type, %{current_user: current_user}), defp get_ammo_type_value(
do: ammo_type |> Ammo.get_ammo_groups_count_for_type(current_user, true) :historical_packs_count,
_key,
%{id: ammo_type_id},
%{historical_packs_count: historical_packs_count}
),
do: Map.get(historical_packs_count, ammo_type_id)
defp get_ammo_type_value(:used_ammo_count, _key, ammo_type, %{current_user: current_user}), defp get_ammo_type_value(:used_packs_count, _key, %{id: ammo_type_id}, %{
do: ammo_type |> Ammo.get_used_ammo_groups_count_for_type(current_user) used_packs_count: used_packs_count
}),
do: Map.get(used_packs_count, ammo_type_id)
defp get_ammo_type_value(:ammo_count, _key, ammo_type, %{current_user: current_user}), defp get_ammo_type_value(:ammo_count, _key, %{id: ammo_type_id}, %{packs_count: packs_count}),
do: ammo_type |> Ammo.get_ammo_groups_count_for_type(current_user) do: Map.get(packs_count, ammo_type_id)
defp get_ammo_type_value(:avg_price_paid, _key, ammo_type, %{current_user: current_user}) do defp get_ammo_type_value(:avg_price_paid, _key, %{id: ammo_type_id}, %{
case ammo_type |> Ammo.get_average_cost_for_ammo_type!(current_user) do average_costs: average_costs
}) do
case Map.get(average_costs, ammo_type_id) do
nil -> gettext("No cost information") nil -> gettext("No cost information")
count -> gettext("$%{amount}", amount: count |> :erlang.float_to_binary(decimals: 2)) count -> gettext("$%{amount}", amount: display_currency(count))
end end
end end
@ -202,4 +246,7 @@ defmodule CanneryWeb.Components.AmmoTypeTableComponent do
defp get_ammo_type_value(nil, _key, _ammo_type, _other_data), do: nil defp get_ammo_type_value(nil, _key, _ammo_type, _other_data), do: nil
defp get_ammo_type_value(_other, key, ammo_type, _other_data), do: ammo_type |> Map.get(key) defp get_ammo_type_value(_other, key, ammo_type, _other_data), do: ammo_type |> Map.get(key)
@spec display_currency(float()) :: String.t()
defp display_currency(float), do: :erlang.float_to_binary(float, decimals: 2)
end end

View File

@ -3,7 +3,7 @@ defmodule CanneryWeb.Components.ContainerTableComponent do
A component that displays a list of containers A component that displays a list of containers
""" """
use CanneryWeb, :live_component use CanneryWeb, :live_component
alias Cannery.{Accounts.User, Containers, Containers.Container, Repo} alias Cannery.{Accounts.User, Ammo, Containers.Container}
alias Ecto.UUID alias Ecto.UUID
alias Phoenix.LiveView.{Rendered, Socket} alias Phoenix.LiveView.{Rendered, Socket}
@ -45,11 +45,7 @@ defmodule CanneryWeb.Components.ContainerTableComponent do
%{label: gettext("Name"), key: :name, type: :string}, %{label: gettext("Name"), key: :name, type: :string},
%{label: gettext("Description"), key: :desc, type: :string}, %{label: gettext("Description"), key: :desc, type: :string},
%{label: gettext("Location"), key: :location, type: :string}, %{label: gettext("Location"), key: :location, type: :string},
%{label: gettext("Type"), key: :type, type: :string}, %{label: gettext("Type"), key: :type, type: :string}
%{label: gettext("Packs"), key: :packs, type: :integer},
%{label: gettext("Rounds"), key: :rounds, type: :string},
%{label: gettext("Tags"), key: :tags, type: :tags},
%{label: nil, key: :actions, sortable: false, type: :actions}
] ]
|> Enum.filter(fn %{key: key, type: type} -> |> Enum.filter(fn %{key: key, type: type} ->
# remove columns if all values match defaults # remove columns if all values match defaults
@ -64,11 +60,19 @@ defmodule CanneryWeb.Components.ContainerTableComponent do
type in [:tags, :actions] or not (container |> Map.get(key) == default_value) type in [:tags, :actions] or not (container |> Map.get(key) == default_value)
end) end)
end) end)
|> Enum.concat([
%{label: gettext("Packs"), key: :packs, type: :integer},
%{label: gettext("Rounds"), key: :rounds, type: :integer},
%{label: gettext("Tags"), key: :tags, type: :tags},
%{label: nil, key: :actions, sortable: false, type: :actions}
])
extra_data = %{ extra_data = %{
current_user: current_user, current_user: current_user,
tag_actions: tag_actions, tag_actions: tag_actions,
actions: actions actions: actions,
pack_count: Ammo.get_ammo_groups_count_for_containers(containers, current_user),
round_count: Ammo.get_round_count_for_containers(containers, current_user)
} }
rows = rows =
@ -100,8 +104,6 @@ defmodule CanneryWeb.Components.ContainerTableComponent do
@spec get_row_data_for_container(Container.t(), columns :: [map()], extra_data :: map) :: map() @spec get_row_data_for_container(Container.t(), columns :: [map()], extra_data :: map) :: map()
defp get_row_data_for_container(container, columns, extra_data) do defp get_row_data_for_container(container, columns, extra_data) do
container = container |> Repo.preload([:ammo_groups, :tags])
columns columns
|> Map.new(fn %{key: key} -> {key, get_value_for_key(key, container, extra_data)} end) |> Map.new(fn %{key: key} -> {key, get_value_for_key(key, container, extra_data)} end)
end end
@ -120,18 +122,24 @@ defmodule CanneryWeb.Components.ContainerTableComponent do
"""} """}
end end
defp get_value_for_key(:packs, container, _extra_data) do defp get_value_for_key(:packs, %{id: container_id}, %{pack_count: pack_count}) do
container |> Containers.get_container_ammo_group_count!() pack_count |> Map.get(container_id, 0)
end end
defp get_value_for_key(:rounds, container, _extra_data) do defp get_value_for_key(:rounds, %{id: container_id}, %{round_count: round_count}) do
container |> Containers.get_container_rounds!() round_count |> Map.get(container_id, 0)
end end
defp get_value_for_key(:tags, container, %{tag_actions: tag_actions}) do defp get_value_for_key(:tags, container, %{tag_actions: tag_actions}) do
assigns = %{tag_actions: tag_actions, container: container} assigns = %{tag_actions: tag_actions, container: container}
{container.tags |> Enum.map(fn %{name: name} -> name end), tag_names =
container.tags
|> Enum.map(fn %{name: name} -> name end)
|> Enum.sort()
|> Enum.join(" ")
{tag_names,
~H""" ~H"""
<div class="flex flex-wrap justify-center items-center"> <div class="flex flex-wrap justify-center items-center">
<.simple_tag_card :for={tag <- @container.tags} :if={@container.tags} tag={tag} /> <.simple_tag_card :for={tag <- @container.tags} :if={@container.tags} tag={tag} />

View File

@ -4,9 +4,9 @@ defmodule CanneryWeb.CoreComponents do
""" """
use Phoenix.Component use Phoenix.Component
import CanneryWeb.{Gettext, ViewHelpers} import CanneryWeb.{Gettext, ViewHelpers}
alias Cannery.{Accounts, Ammo, Ammo.AmmoGroup} alias Cannery.{Accounts, Accounts.Invite, Accounts.User}
alias Cannery.Accounts.{Invite, Invites, User} alias Cannery.{Ammo, Ammo.AmmoGroup}
alias Cannery.{Containers, Containers.Container, Tags.Tag} alias Cannery.{Containers, Containers.Container, Containers.Tag}
alias CanneryWeb.{Endpoint, HomeLive} alias CanneryWeb.{Endpoint, HomeLive}
alias CanneryWeb.Router.Helpers, as: Routes alias CanneryWeb.Router.Helpers, as: Routes
alias Phoenix.LiveView.{JS, Rendered} alias Phoenix.LiveView.{JS, Rendered}
@ -70,6 +70,7 @@ defmodule CanneryWeb.CoreComponents do
def toggle_button(assigns) def toggle_button(assigns)
attr :container, Container, required: true attr :container, Container, required: true
attr :current_user, User, required: true
slot(:tag_actions) slot(:tag_actions)
slot(:inner_block) slot(:inner_block)
@ -86,73 +87,30 @@ defmodule CanneryWeb.CoreComponents do
def simple_tag_card(assigns) def simple_tag_card(assigns)
attr :ammo_group, AmmoGroup, required: true attr :ammo_group, AmmoGroup, required: true
attr :current_user, User, required: true
attr :original_count, :integer, default: nil
attr :cpr, :integer, default: nil
attr :last_used_date, Date, default: nil
attr :show_container, :boolean, default: false attr :show_container, :boolean, default: false
slot(:inner_block) slot(:inner_block)
def ammo_group_card(assigns) def ammo_group_card(assigns)
@spec display_currency(float()) :: String.t()
defp display_currency(float), do: :erlang.float_to_binary(float, decimals: 2)
attr :user, User, required: true attr :user, User, required: true
slot(:inner_block, required: true) slot(:inner_block, required: true)
def user_card(assigns) def user_card(assigns)
attr :invite, Invite, required: true attr :invite, Invite, required: true
attr :use_count, :integer, default: nil
attr :current_user, User, required: true attr :current_user, User, required: true
slot(:inner_block) slot(:inner_block)
slot(:code_actions) slot(:code_actions)
def invite_card(%{invite: invite, current_user: current_user} = assigns) do def invite_card(assigns)
assigns = assigns |> assign(:use_count, Invites.get_use_count(invite, current_user))
~H"""
<div class="mx-4 my-2 px-8 py-4 flex flex-col justify-center items-center space-y-4
border border-gray-400 rounded-lg shadow-lg hover:shadow-md
transition-all duration-300 ease-in-out">
<h1 class="title text-xl">
<%= @invite.name %>
</h1>
<%= if @invite.disabled_at |> is_nil() do %>
<h2 class="title text-md">
<%= if @invite.uses_left do %>
<%= gettext(
"Uses Left: %{uses_left_count}",
uses_left_count: @invite.uses_left
) %>
<% else %>
<%= gettext("Uses Left: Unlimited") %>
<% end %>
</h2>
<% else %>
<h2 class="title text-md">
<%= gettext("Invite Disabled") %>
</h2>
<% end %>
<.qr_code
content={Routes.user_registration_url(Endpoint, :new, invite: @invite.token)}
filename={@invite.name}
/>
<h2 :if={@use_count != 0} class="title text-md">
<%= gettext("Uses: %{uses_count}", uses_count: @use_count) %>
</h2>
<div class="flex flex-row flex-wrap justify-center items-center">
<code
id={"code-#{@invite.id}"}
class="mx-2 my-1 text-xs px-4 py-2 rounded-lg text-center break-all text-gray-100 bg-primary-800"
phx-no-format
><%= Routes.user_registration_url(Endpoint, :new, invite: @invite.token) %></code>
<%= if @code_actions, do: render_slot(@code_actions) %>
</div>
<div :if={@inner_block} class="flex space-x-4 justify-center items-center">
<%= render_slot(@inner_block) %>
</div>
</div>
"""
end
attr :content, :string, required: true attr :content, :string, required: true
attr :filename, :string, default: "qrcode", doc: "filename without .png extension" attr :filename, :string, default: "qrcode", doc: "filename without .png extension"
@ -164,6 +122,7 @@ defmodule CanneryWeb.CoreComponents do
""" """
def qr_code(assigns) def qr_code(assigns)
attr :id, :string, required: true
attr :date, :any, required: true, doc: "A `Date` struct or nil" attr :date, :any, required: true, doc: "A `Date` struct or nil"
@doc """ @doc """
@ -172,6 +131,7 @@ defmodule CanneryWeb.CoreComponents do
""" """
def date(assigns) def date(assigns)
attr :id, :string, required: true
attr :datetime, :any, required: true, doc: "A `DateTime` struct or nil" attr :datetime, :any, required: true, doc: "A `DateTime` struct or nil"
@doc """ @doc """

View File

@ -17,12 +17,9 @@
<%= if @ammo_group.count == 0, do: gettext("Empty"), else: @ammo_group.count %> <%= if @ammo_group.count == 0, do: gettext("Empty"), else: @ammo_group.count %>
</span> </span>
<span <span :if={@original_count != @ammo_group.count} class="rounded-lg title text-lg">
:if={@ammo_group |> Ammo.get_original_count() != @ammo_group.count}
class="rounded-lg title text-lg"
>
<%= gettext("Original Count:") %> <%= gettext("Original Count:") %>
<%= @ammo_group |> Ammo.get_original_count() %> <%= @original_count %>
</span> </span>
<span :if={@ammo_group.notes} class="rounded-lg title text-lg"> <span :if={@ammo_group.notes} class="rounded-lg title text-lg">
@ -32,38 +29,35 @@
<span class="rounded-lg title text-lg"> <span class="rounded-lg title text-lg">
<%= gettext("Purchased on:") %> <%= gettext("Purchased on:") %>
<.date date={@ammo_group.purchased_on} /> <.date id={"#{@ammo_group.id}-purchased-on"} date={@ammo_group.purchased_on} />
</span> </span>
<span :if={@ammo_group |> Ammo.get_last_used_shot_group()} class="rounded-lg title text-lg"> <span :if={@last_used_date} class="rounded-lg title text-lg">
<%= gettext("Last used on:") %> <%= gettext("Last used on:") %>
<.date date={@ammo_group |> Ammo.get_last_used_shot_group() |> Map.get(:date)} /> <.date id={"#{@ammo_group.id}-last-used-on"} date={@last_used_date} />
</span> </span>
<%= if @ammo_group.price_paid do %> <span :if={@ammo_group.price_paid} class="rounded-lg title text-lg">
<span class="rounded-lg title text-lg">
<%= gettext("Price paid:") %> <%= gettext("Price paid:") %>
<%= gettext("$%{amount}", <%= gettext("$%{amount}", amount: display_currency(@ammo_group.price_paid)) %>
amount: @ammo_group.price_paid |> :erlang.float_to_binary(decimals: 2)
) %>
</span> </span>
<span class="rounded-lg title text-lg"> <span :if={@cpr} class="rounded-lg title text-lg">
<%= gettext("CPR:") %> <%= gettext("CPR:") %>
<%= gettext("$%{amount}", <%= gettext("$%{amount}", amount: display_currency(@cpr)) %>
amount: @ammo_group |> Ammo.get_cpr() |> :erlang.float_to_binary(decimals: 2)
) %>
</span> </span>
<% end %>
<span :if={@show_container and @ammo_group.container} class="rounded-lg title text-lg"> <span
:if={@show_container && Containers.get_container!(@ammo_group.container_id, @current_user)}
class="rounded-lg title text-lg"
>
<%= gettext("Container:") %> <%= gettext("Container:") %>
<.link <.link
navigate={Routes.container_show_path(Endpoint, :show, @ammo_group.container)} navigate={Routes.container_show_path(Endpoint, :show, @ammo_group.container_id)}
class="link" class="link"
> >
<%= @ammo_group.container.name %> <%= Containers.get_container!(@ammo_group.container_id, @current_user).name %>
</.link> </.link>
</span> </span>
</div> </div>

View File

@ -1,17 +1,17 @@
<div <div
id={"container-#{@container.id}"} id={"container-#{@container.id}"}
class="overflow-hidden max-w-full mx-4 mb-4 px-8 py-4 class="overflow-hidden max-w-full mx-4 mb-4 px-8 py-4
flex flex-col justify-center items-center space-y-4 flex flex-col justify-around items-center space-y-4
border border-gray-400 rounded-lg shadow-lg hover:shadow-md border border-gray-400 rounded-lg shadow-lg hover:shadow-md
transition-all duration-300 ease-in-out" transition-all duration-300 ease-in-out"
> >
<div class="max-w-full mb-4 flex flex-col justify-center items-center space-y-2">
<.link navigate={Routes.container_show_path(Endpoint, :show, @container)} class="link"> <.link navigate={Routes.container_show_path(Endpoint, :show, @container)} class="link">
<h1 class="px-4 py-2 rounded-lg title text-xl"> <h1 class="px-4 py-2 rounded-lg title text-xl">
<%= @container.name %> <%= @container.name %>
</h1> </h1>
</.link> </.link>
<div class="flex flex-col justify-center items-center space-y-2">
<span :if={@container.desc} class="rounded-lg title text-lg"> <span :if={@container.desc} class="rounded-lg title text-lg">
<%= gettext("Description:") %> <%= gettext("Description:") %>
<%= @container.desc %> <%= @container.desc %>
@ -27,20 +27,23 @@
<%= @container.location %> <%= @container.location %>
</span> </span>
<%= unless @container.ammo_groups |> Enum.empty?() do %> <%= if @container |> Ammo.get_ammo_groups_count_for_container!(@current_user) != 0 do %>
<span class="rounded-lg title text-lg"> <span class="rounded-lg title text-lg">
<%= gettext("Packs:") %> <%= gettext("Packs:") %>
<%= @container |> Containers.get_container_ammo_group_count!() %> <%= @container |> Ammo.get_ammo_groups_count_for_container!(@current_user) %>
</span> </span>
<span class="rounded-lg title text-lg"> <span class="rounded-lg title text-lg">
<%= gettext("Rounds:") %> <%= gettext("Rounds:") %>
<%= @container |> Containers.get_container_rounds!() %> <%= @container |> Ammo.get_round_count_for_container!(@current_user) %>
</span> </span>
<% end %> <% end %>
<div class="flex flex-wrap justify-center items-center"> <div
<.simple_tag_card :for={tag <- @container.tags} :if={@container.tags} tag={tag} /> :if={@tag_actions || @container.tags != []}
class="flex flex-wrap justify-center items-center"
>
<.simple_tag_card :for={tag <- @container.tags} tag={tag} />
<%= if @tag_actions, do: render_slot(@tag_actions) %> <%= if @tag_actions, do: render_slot(@tag_actions) %>
</div> </div>

View File

@ -1,12 +1,7 @@
<time <time :if={@date} id={@id} datetime={@date |> Date.to_iso8601(:extended)} x-data={~s<{
:if={@date}
datetime={@date |> Date.to_iso8601(:extended)}
x-data={~s<{
date: date:
Intl.DateTimeFormat([], {timeZone: 'Etc/UTC', dateStyle: 'short'}) Intl.DateTimeFormat([], {timeZone: 'Etc/UTC', dateStyle: 'short'})
.format(new Date("#{Date.to_iso8601(@date, :extended)}")) .format(new Date("#{Date.to_iso8601(@date, :extended)}"))
}>} }>} x-text="date">
x-text="date"
>
<%= @date |> Date.to_iso8601(:extended) %> <%= @date |> Date.to_iso8601(:extended) %>
</time> </time>

View File

@ -1,12 +1,7 @@
<time <time :if={@datetime} id={@id} datetime={cast_datetime(@datetime)} x-data={~s/{
:if={@datetime}
datetime={cast_datetime(@datetime)}
x-data={~s/{
datetime: datetime:
Intl.DateTimeFormat([], {dateStyle: 'short', timeStyle: 'long'}) Intl.DateTimeFormat([], {dateStyle: 'short', timeStyle: 'long'})
.format(new Date("#{cast_datetime(@datetime)}")) .format(new Date("#{cast_datetime(@datetime)}"))
}/} }/} x-text="datetime">
x-text="datetime"
>
<%= cast_datetime(@datetime) %> <%= cast_datetime(@datetime) %>
</time> </time>

View File

@ -0,0 +1,46 @@
<div class="mx-4 my-2 px-8 py-4 flex flex-col justify-center items-center space-y-4
border border-gray-400 rounded-lg shadow-lg hover:shadow-md
transition-all duration-300 ease-in-out">
<h1 class="title text-xl">
<%= @invite.name %>
</h1>
<%= if @invite.disabled_at |> is_nil() do %>
<h2 class="title text-md">
<%= if @invite.uses_left do %>
<%= gettext(
"Uses Left: %{uses_left_count}",
uses_left_count: @invite.uses_left
) %>
<% else %>
<%= gettext("Uses Left: Unlimited") %>
<% end %>
</h2>
<% else %>
<h2 class="title text-md">
<%= gettext("Invite Disabled") %>
</h2>
<% end %>
<.qr_code
content={Routes.user_registration_url(Endpoint, :new, invite: @invite.token)}
filename={@invite.name}
/>
<h2 :if={@use_count && @use_count != 0} class="title text-md">
<%= gettext("Uses: %{uses_count}", uses_count: @use_count) %>
</h2>
<div class="flex flex-row flex-wrap justify-center items-center">
<code
id={"code-#{@invite.id}"}
class="mx-2 my-1 text-xs px-4 py-2 rounded-lg text-center break-all text-gray-100 bg-primary-800"
phx-no-format
><%= Routes.user_registration_url(Endpoint, :new, invite: @invite.token) %></code>
<%= if @code_actions, do: render_slot(@code_actions) %>
</div>
<div :if={@inner_block} class="flex space-x-4 justify-center items-center">
<%= render_slot(@inner_block) %>
</div>
</div>

View File

@ -15,7 +15,7 @@
"User was confirmed at%{confirmed_datetime}", "User was confirmed at%{confirmed_datetime}",
confirmed_datetime: "" confirmed_datetime: ""
) %> ) %>
<.datetime datetime={@user.confirmed_at} /> <.datetime id={"#{@user.id}-confirmed-at"} datetime={@user.confirmed_at} />
<% else %> <% else %>
<%= gettext("Email unconfirmed") %> <%= gettext("Email unconfirmed") %>
<% end %> <% end %>
@ -26,7 +26,7 @@
"User registered on%{registered_datetime}", "User registered on%{registered_datetime}",
registered_datetime: "" registered_datetime: ""
) %> ) %>
<.datetime datetime={@user.inserted_at} /> <.datetime id={"#{@user.id}-inserted-at"} datetime={@user.inserted_at} />
</p> </p>
</h3> </h3>

View File

@ -6,6 +6,7 @@ defmodule CanneryWeb.Components.MoveAmmoGroupComponent do
use CanneryWeb, :live_component use CanneryWeb, :live_component
alias Cannery.{Accounts.User, Ammo, Ammo.AmmoGroup, Containers, Containers.Container} alias Cannery.{Accounts.User, Ammo, Ammo.AmmoGroup, Containers, Containers.Container}
alias CanneryWeb.Endpoint alias CanneryWeb.Endpoint
alias Ecto.Changeset
alias Phoenix.LiveView.Socket alias Phoenix.LiveView.Socket
@impl true @impl true
@ -51,10 +52,9 @@ defmodule CanneryWeb.Components.MoveAmmoGroupComponent do
|> case do |> case do
{:ok, _ammo_group} -> {:ok, _ammo_group} ->
prompt = dgettext("prompts", "Ammo moved to %{name} successfully", name: container_name) prompt = dgettext("prompts", "Ammo moved to %{name} successfully", name: container_name)
socket |> put_flash(:info, prompt) |> push_navigate(to: return_to) socket |> put_flash(:info, prompt) |> push_navigate(to: return_to)
{:error, %Ecto.Changeset{} = changeset} -> {:error, %Changeset{} = changeset} ->
socket |> assign(changeset: changeset) socket |> assign(changeset: changeset)
end end
@ -64,10 +64,10 @@ defmodule CanneryWeb.Components.MoveAmmoGroupComponent do
@impl true @impl true
def render(%{containers: containers} = assigns) do def render(%{containers: containers} = assigns) do
columns = [ columns = [
%{label: gettext("Container"), key: "name"}, %{label: gettext("Container"), key: :name},
%{label: gettext("Type"), key: "type"}, %{label: gettext("Type"), key: :type},
%{label: gettext("Location"), key: "location"}, %{label: gettext("Location"), key: :location},
%{label: nil, key: "actions", sortable: false} %{label: nil, key: :actions, sortable: false}
] ]
rows = containers |> get_rows_for_containers(assigns, columns) rows = containers |> get_rows_for_containers(assigns, columns)
@ -110,8 +110,8 @@ defmodule CanneryWeb.Components.MoveAmmoGroupComponent do
end) end)
end end
@spec get_row_value_by_key(String.t(), Container.t(), map()) :: any() @spec get_row_value_by_key(atom(), Container.t(), map()) :: any()
defp get_row_value_by_key("actions", container, assigns) do defp get_row_value_by_key(:actions, container, assigns) do
assigns = assigns |> Map.put(:container, container) assigns = assigns |> Map.put(:container, container)
~H""" ~H"""
@ -129,6 +129,5 @@ defmodule CanneryWeb.Components.MoveAmmoGroupComponent do
""" """
end end
defp get_row_value_by_key(key, container, _assigns), defp get_row_value_by_key(key, container, _assigns), do: container |> Map.get(key)
do: container |> Map.get(key |> String.to_existing_atom())
end end

View File

@ -3,7 +3,7 @@ defmodule CanneryWeb.Components.ShotGroupTableComponent do
A component that displays a list of shot groups A component that displays a list of shot groups
""" """
use CanneryWeb, :live_component use CanneryWeb, :live_component
alias Cannery.{Accounts.User, ActivityLog.ShotGroup, Repo} alias Cannery.{Accounts.User, ActivityLog.ShotGroup, Ammo}
alias Ecto.UUID alias Ecto.UUID
alias Phoenix.LiveView.{Rendered, Socket} alias Phoenix.LiveView.{Rendered, Socket}
@ -41,11 +41,16 @@ defmodule CanneryWeb.Components.ShotGroupTableComponent do
%{label: gettext("Ammo"), key: :name}, %{label: gettext("Ammo"), key: :name},
%{label: gettext("Rounds shot"), key: :count}, %{label: gettext("Rounds shot"), key: :count},
%{label: gettext("Notes"), key: :notes}, %{label: gettext("Notes"), key: :notes},
%{label: gettext("Date"), key: :date}, %{label: gettext("Date"), key: :date, type: Date},
%{label: nil, key: :actions, sortable: false} %{label: nil, key: :actions, sortable: false}
] ]
extra_data = %{current_user: current_user, actions: actions} ammo_groups =
shot_groups
|> Enum.map(fn %{ammo_group_id: ammo_group_id} -> ammo_group_id end)
|> Ammo.get_ammo_groups(current_user)
extra_data = %{current_user: current_user, actions: actions, ammo_groups: ammo_groups}
rows = rows =
shot_groups shot_groups
@ -79,34 +84,28 @@ defmodule CanneryWeb.Components.ShotGroupTableComponent do
@spec get_row_data_for_shot_group(ShotGroup.t(), columns :: [map()], extra_data :: map()) :: @spec get_row_data_for_shot_group(ShotGroup.t(), columns :: [map()], extra_data :: map()) ::
map() map()
defp get_row_data_for_shot_group(shot_group, columns, extra_data) do defp get_row_data_for_shot_group(shot_group, columns, extra_data) do
shot_group = shot_group |> Repo.preload(ammo_group: :ammo_type)
columns columns
|> Map.new(fn %{key: key} -> |> Map.new(fn %{key: key} ->
{key, get_row_value(key, shot_group, extra_data)} {key, get_row_value(key, shot_group, extra_data)}
end) end)
end end
defp get_row_value( defp get_row_value(:name, %{ammo_group_id: ammo_group_id}, %{ammo_groups: ammo_groups}) do
:name, assigns = %{ammo_group: ammo_group = Map.fetch!(ammo_groups, ammo_group_id)}
%{ammo_group: %{ammo_type: %{name: ammo_type_name} = ammo_group}},
_extra_data
) do
assigns = %{ammo_group: ammo_group, ammo_type_name: ammo_type_name}
name_block = ~H""" {ammo_group.ammo_type.name,
~H"""
<.link navigate={Routes.ammo_group_show_path(Endpoint, :show, @ammo_group)} class="link"> <.link navigate={Routes.ammo_group_show_path(Endpoint, :show, @ammo_group)} class="link">
<%= @ammo_type_name %> <%= @ammo_group.ammo_type.name %>
</.link> </.link>
""" """}
{ammo_type_name, name_block}
end end
defp get_row_value(:date, %{date: _date} = assigns, _extra_data) do defp get_row_value(:date, %{date: date} = assigns, _extra_data) do
{date,
~H""" ~H"""
<.date date={@date} /> <.date id={"#{@id}-date"} date={@date} />
""" """}
end end
defp get_row_value(:actions, shot_group, %{actions: actions}) do defp get_row_value(:actions, shot_group, %{actions: actions}) do

View File

@ -33,7 +33,8 @@ defmodule CanneryWeb.Components.TableComponent do
optional(:class) => String.t(), optional(:class) => String.t(),
optional(:row_class) => String.t(), optional(:row_class) => String.t(),
optional(:alternate_row_class) => String.t(), optional(:alternate_row_class) => String.t(),
optional(:sortable) => false optional(:sortable) => false,
optional(:type) => module()
}), }),
required(:rows) => required(:rows) =>
list(%{ list(%{
@ -60,7 +61,8 @@ defmodule CanneryWeb.Components.TableComponent do
:asc :asc
end end
rows = rows |> sort_by_custom_sort_value_or_value(initial_key, initial_sort_mode) type = columns |> Enum.find(%{}, fn %{key: key} -> key == initial_key end) |> Map.get(:type)
rows = rows |> sort_by_custom_sort_value_or_value(initial_key, initial_sort_mode, type)
socket = socket =
socket socket
@ -68,6 +70,7 @@ defmodule CanneryWeb.Components.TableComponent do
|> assign( |> assign(
columns: columns, columns: columns,
rows: rows, rows: rows,
key: initial_key,
last_sort_key: initial_key, last_sort_key: initial_key,
sort_mode: initial_sort_mode sort_mode: initial_sort_mode
) )
@ -81,7 +84,14 @@ defmodule CanneryWeb.Components.TableComponent do
def handle_event( def handle_event(
"sort_by", "sort_by",
%{"sort-key" => key}, %{"sort-key" => key},
%{assigns: %{rows: rows, last_sort_key: last_sort_key, sort_mode: sort_mode}} = socket %{
assigns: %{
columns: columns,
rows: rows,
last_sort_key: last_sort_key,
sort_mode: sort_mode
}
} = socket
) do ) do
key = key |> String.to_existing_atom() key = key |> String.to_existing_atom()
@ -92,11 +102,28 @@ defmodule CanneryWeb.Components.TableComponent do
{_new_sort_key, _last_sort_mode} -> :asc {_new_sort_key, _last_sort_mode} -> :asc
end end
rows = rows |> sort_by_custom_sort_value_or_value(key, sort_mode) type =
columns |> Enum.find(%{}, fn %{key: column_key} -> column_key == key end) |> Map.get(:type)
rows = rows |> sort_by_custom_sort_value_or_value(key, sort_mode, type)
{:noreply, socket |> assign(last_sort_key: key, sort_mode: sort_mode, rows: rows)} {:noreply, socket |> assign(last_sort_key: key, sort_mode: sort_mode, rows: rows)}
end end
defp sort_by_custom_sort_value_or_value(rows, key, sort_mode) do defp sort_by_custom_sort_value_or_value(rows, key, sort_mode, type)
when type in [Date, DateTime] do
rows
|> Enum.sort_by(
fn row ->
case row |> Map.get(key) do
{custom_sort_key, _value} -> custom_sort_key
value -> value
end
end,
{sort_mode, type}
)
end
defp sort_by_custom_sort_value_or_value(rows, key, sort_mode, _type) do
rows rows
|> Enum.sort_by( |> Enum.sort_by(
fn row -> fn row ->

View File

@ -3,41 +3,49 @@ defmodule CanneryWeb.ExportController do
alias Cannery.{ActivityLog, Ammo, Containers} alias Cannery.{ActivityLog, Ammo, Containers}
def export(%{assigns: %{current_user: current_user}} = conn, %{"mode" => "json"}) do def export(%{assigns: %{current_user: current_user}} = conn, %{"mode" => "json"}) do
ammo_types = ammo_types = Ammo.list_ammo_types(current_user)
Ammo.list_ammo_types(current_user) used_counts = ammo_types |> ActivityLog.get_used_count_for_ammo_types(current_user)
|> Enum.map(fn ammo_type -> round_counts = ammo_types |> Ammo.get_round_count_for_ammo_types(current_user)
average_cost = ammo_type |> Ammo.get_average_cost_for_ammo_type!(current_user) ammo_group_counts = ammo_types |> Ammo.get_ammo_groups_count_for_types(current_user)
round_count = ammo_type |> Ammo.get_round_count_for_ammo_type(current_user)
used_count = ammo_type |> Ammo.get_used_count_for_ammo_type(current_user)
ammo_group_count = ammo_type |> Ammo.get_ammo_groups_count_for_type(current_user, true)
total_ammo_group_counts =
ammo_types |> Ammo.get_ammo_groups_count_for_types(current_user, true)
average_costs = ammo_types |> Ammo.get_average_cost_for_ammo_types(current_user)
ammo_types =
ammo_types
|> Enum.map(fn %{id: ammo_type_id} = ammo_type ->
ammo_type ammo_type
|> Jason.encode!() |> Jason.encode!()
|> Jason.decode!() |> Jason.decode!()
|> Map.merge(%{ |> Map.merge(%{
"average_cost" => average_cost, "average_cost" => Map.get(average_costs, ammo_type_id),
"round_count" => round_count, "round_count" => Map.get(round_counts, ammo_type_id, 0),
"used_count" => used_count, "used_count" => Map.get(used_counts, ammo_type_id, 0),
"ammo_group_count" => ammo_group_count "ammo_group_count" => Map.get(ammo_group_counts, ammo_type_id, 0),
"total_ammo_group_count" => Map.get(total_ammo_group_counts, ammo_type_id, 0)
}) })
end) end)
ammo_groups = Ammo.list_ammo_groups(nil, true, current_user)
used_counts = ammo_groups |> ActivityLog.get_used_counts(current_user)
original_counts = ammo_groups |> Ammo.get_original_counts(current_user)
cprs = ammo_groups |> Ammo.get_cprs(current_user)
ammo_groups = ammo_groups =
Ammo.list_ammo_groups(nil, true, current_user) ammo_groups
|> Enum.map(fn ammo_group -> |> Enum.map(fn %{id: ammo_group_id} = ammo_group ->
cpr = ammo_group |> Ammo.get_cpr() percentage_remaining = ammo_group |> Ammo.get_percentage_remaining(current_user)
used_count = ammo_group |> Ammo.get_used_count()
original_count = ammo_group |> Ammo.get_original_count()
percentage_remaining = ammo_group |> Ammo.get_percentage_remaining()
ammo_group ammo_group
|> Jason.encode!() |> Jason.encode!()
|> Jason.decode!() |> Jason.decode!()
|> Map.merge(%{ |> Map.merge(%{
"used_count" => used_count, "used_count" => Map.get(used_counts, ammo_group_id),
"percentage_remaining" => percentage_remaining, "percentage_remaining" => percentage_remaining,
"original_count" => original_count, "original_count" => Map.get(original_counts, ammo_group_id),
"cpr" => cpr "cpr" => Map.get(cprs, ammo_group_id)
}) })
end) end)
@ -46,8 +54,8 @@ defmodule CanneryWeb.ExportController do
containers = containers =
Containers.list_containers(current_user) Containers.list_containers(current_user)
|> Enum.map(fn container -> |> Enum.map(fn container ->
ammo_group_count = container |> Containers.get_container_ammo_group_count!() ammo_group_count = container |> Ammo.get_ammo_groups_count_for_container!(current_user)
round_count = container |> Containers.get_container_rounds!() round_count = container |> Ammo.get_round_count_for_container!(current_user)
container container
|> Jason.encode!() |> Jason.encode!()

View File

@ -3,6 +3,7 @@ defmodule CanneryWeb.UserRegistrationController do
import CanneryWeb.Gettext import CanneryWeb.Gettext
alias Cannery.{Accounts, Accounts.Invites} alias Cannery.{Accounts, Accounts.Invites}
alias CanneryWeb.{Endpoint, HomeLive} alias CanneryWeb.{Endpoint, HomeLive}
alias Ecto.Changeset
def new(conn, %{"invite" => invite_token}) do def new(conn, %{"invite" => invite_token}) do
if Invites.valid_invite_token?(invite_token) do if Invites.valid_invite_token?(invite_token) do
@ -70,7 +71,7 @@ defmodule CanneryWeb.UserRegistrationController do
|> put_flash(:error, dgettext("errors", "Sorry, this invite was not found or expired")) |> put_flash(:error, dgettext("errors", "Sorry, this invite was not found or expired"))
|> redirect(to: Routes.live_path(Endpoint, HomeLive)) |> redirect(to: Routes.live_path(Endpoint, HomeLive))
{:error, %Ecto.Changeset{} = changeset} -> {:error, %Changeset{} = changeset} ->
conn |> render("new.html", changeset: changeset, invite_token: invite_token) conn |> render("new.html", changeset: changeset, invite_token: invite_token)
end end
end end

View File

@ -44,7 +44,7 @@ defmodule CanneryWeb.AmmoGroupLive.FormComponent do
@impl true @impl true
def handle_event("validate", %{"ammo_group" => ammo_group_params}, socket) do def handle_event("validate", %{"ammo_group" => ammo_group_params}, socket) do
{:noreply, socket |> assign_changeset(ammo_group_params)} {:noreply, socket |> assign_changeset(ammo_group_params, :validate)}
end end
def handle_event( def handle_event(
@ -56,6 +56,7 @@ defmodule CanneryWeb.AmmoGroupLive.FormComponent do
end end
# HTML Helpers # HTML Helpers
@spec container_options([Container.t()]) :: [{String.t(), Container.id()}] @spec container_options([Container.t()]) :: [{String.t(), Container.id()}]
defp container_options(containers) do defp container_options(containers) do
containers |> Enum.map(fn %{id: id, name: name} -> {name, id} end) containers |> Enum.map(fn %{id: id, name: name} -> {name, id} end)
@ -70,35 +71,28 @@ defmodule CanneryWeb.AmmoGroupLive.FormComponent do
defp assign_changeset( defp assign_changeset(
%{assigns: %{action: action, ammo_group: ammo_group, current_user: user}} = socket, %{assigns: %{action: action, ammo_group: ammo_group, current_user: user}} = socket,
ammo_group_params ammo_group_params,
changeset_action \\ nil
) do ) do
changeset_action = default_action =
cond do case action do
action in [:new, :clone] -> :insert create when create in [:new, :clone] -> :insert
action == :edit -> :update :edit -> :update
end end
changeset = changeset =
cond do case default_action do
action in [:new, :clone] -> :insert ->
ammo_type = ammo_type = maybe_get_ammo_type(ammo_group_params, user)
if ammo_group_params |> Map.has_key?("ammo_type_id"), container = maybe_get_container(ammo_group_params, user)
do: ammo_group_params |> Map.get("ammo_type_id") |> Ammo.get_ammo_type!(user),
else: nil
container =
if ammo_group_params |> Map.has_key?("container_id"),
do: ammo_group_params |> Map.get("container_id") |> Containers.get_container!(user),
else: nil
ammo_group |> AmmoGroup.create_changeset(ammo_type, container, user, ammo_group_params) ammo_group |> AmmoGroup.create_changeset(ammo_type, container, user, ammo_group_params)
action == :edit -> :update ->
ammo_group |> AmmoGroup.update_changeset(ammo_group_params, user) ammo_group |> AmmoGroup.update_changeset(ammo_group_params, user)
end end
changeset = changeset =
case changeset |> Changeset.apply_action(changeset_action) do case changeset |> Changeset.apply_action(changeset_action || default_action) do
{:ok, _data} -> changeset {:ok, _data} -> changeset
{:error, changeset} -> changeset {:error, changeset} -> changeset
end end
@ -106,6 +100,20 @@ defmodule CanneryWeb.AmmoGroupLive.FormComponent do
socket |> assign(:changeset, changeset) socket |> assign(:changeset, changeset)
end end
defp maybe_get_container(%{"container_id" => container_id}, user)
when is_binary(container_id) do
container_id |> Containers.get_container!(user)
end
defp maybe_get_container(_params_not_found, _user), do: nil
defp maybe_get_ammo_type(%{"ammo_type_id" => ammo_type_id}, user)
when is_binary(ammo_type_id) do
ammo_type_id |> Ammo.get_ammo_type!(user)
end
defp maybe_get_ammo_type(_params_not_found, _user), do: nil
defp save_ammo_group( defp save_ammo_group(
%{assigns: %{ammo_group: ammo_group, current_user: current_user, return_to: return_to}} = %{assigns: %{ammo_group: ammo_group, current_user: current_user, return_to: return_to}} =
socket, socket,
@ -146,16 +154,18 @@ defmodule CanneryWeb.AmmoGroupLive.FormComponent do
multiplier: multiplier multiplier: multiplier
) )
{:error, changeset} = save_multiplier_error(socket, changeset, error_msg)
changeset
|> Changeset.add_error(:multiplier, error_msg)
|> Changeset.apply_action(:insert)
socket |> assign(:changeset, changeset)
:error -> :error ->
error_msg = dgettext("errors", "Could not parse number of copies") 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} = {:error, changeset} =
changeset changeset
|> Changeset.add_error(:multiplier, error_msg) |> Changeset.add_error(:multiplier, error_msg)
@ -164,9 +174,6 @@ defmodule CanneryWeb.AmmoGroupLive.FormComponent do
socket |> assign(:changeset, changeset) socket |> assign(:changeset, changeset)
end end
{:noreply, socket}
end
defp create_multiple( defp create_multiple(
%{assigns: %{current_user: current_user, return_to: return_to}} = socket, %{assigns: %{current_user: current_user, return_to: return_to}} = socket,
ammo_group_params, ammo_group_params,

View File

@ -104,7 +104,7 @@
</.link> </.link>
</div> </div>
</:range> </:range>
<:container :let={%{container: %{name: container_name} = container} = ammo_group}> <:container :let={{ammo_group, %{name: container_name} = container}}>
<div class="min-w-20 py-2 px-4 h-full flex flew-wrap justify-center items-center"> <div class="min-w-20 py-2 px-4 h-full flex flew-wrap justify-center items-center">
<.link <.link
navigate={Routes.container_show_path(Endpoint, :show, container)} navigate={Routes.container_show_path(Endpoint, :show, container)}
@ -117,18 +117,18 @@
patch={Routes.ammo_group_index_path(Endpoint, :move, ammo_group)} patch={Routes.ammo_group_index_path(Endpoint, :move, ammo_group)}
class="mx-2 my-1 text-sm btn btn-primary" class="mx-2 my-1 text-sm btn btn-primary"
> >
<%= gettext("Move ammo") %> <%= dgettext("actions", "Move ammo") %>
</.link> </.link>
</div> </div>
</:container> </:container>
<:actions :let={ammo_group}> <:actions :let={%{count: ammo_group_count} = ammo_group}>
<div class="py-2 px-4 h-full space-x-4 flex justify-center items-center"> <div class="py-2 px-4 h-full space-x-4 flex justify-center items-center">
<.link <.link
navigate={Routes.ammo_group_show_path(Endpoint, :show, ammo_group)} navigate={Routes.ammo_group_show_path(Endpoint, :show, ammo_group)}
class="text-primary-600 link" class="text-primary-600 link"
aria-label={ aria-label={
gettext("View ammo group of %{ammo_group_count} bullets", dgettext("actions", "View ammo group of %{ammo_group_count} bullets",
ammo_group_count: ammo_group.count ammo_group_count: ammo_group_count
) )
} }
> >
@ -139,8 +139,8 @@
patch={Routes.ammo_group_index_path(Endpoint, :edit, ammo_group)} patch={Routes.ammo_group_index_path(Endpoint, :edit, ammo_group)}
class="text-primary-600 link" class="text-primary-600 link"
aria-label={ aria-label={
gettext("Edit ammo group of %{ammo_group_count} bullets", dgettext("actions", "Edit ammo group of %{ammo_group_count} bullets",
ammo_group_count: ammo_group.count ammo_group_count: ammo_group_count
) )
} }
> >
@ -151,8 +151,8 @@
patch={Routes.ammo_group_index_path(Endpoint, :clone, ammo_group)} patch={Routes.ammo_group_index_path(Endpoint, :clone, ammo_group)}
class="text-primary-600 link" class="text-primary-600 link"
aria-label={ aria-label={
gettext("Clone ammo group of %{ammo_group_count} bullets", dgettext("actions", "Clone ammo group of %{ammo_group_count} bullets",
ammo_group_count: ammo_group.count ammo_group_count: ammo_group_count
) )
} }
> >
@ -166,8 +166,8 @@
phx-value-id={ammo_group.id} phx-value-id={ammo_group.id}
data-confirm={dgettext("prompts", "Are you sure you want to delete this ammo?")} data-confirm={dgettext("prompts", "Are you sure you want to delete this ammo?")}
aria-label={ aria-label={
gettext("Delete ammo group of %{ammo_group_count} bullets", dgettext("actions", "Delete ammo group of %{ammo_group_count} bullets",
ammo_group_count: ammo_group.count ammo_group_count: ammo_group_count
) )
} }
> >
@ -179,8 +179,8 @@
<% end %> <% end %>
</div> </div>
<%= cond do %> <%= case @live_action do %>
<% @live_action in [:new, :edit, :clone] -> %> <% create when create in [:new, :edit, :clone] -> %>
<.modal return_to={Routes.ammo_group_index_path(Endpoint, :index)}> <.modal return_to={Routes.ammo_group_index_path(Endpoint, :index)}>
<.live_component <.live_component
module={CanneryWeb.AmmoGroupLive.FormComponent} module={CanneryWeb.AmmoGroupLive.FormComponent}
@ -192,7 +192,7 @@
current_user={@current_user} current_user={@current_user}
/> />
</.modal> </.modal>
<% @live_action == :add_shot_group -> %> <% :add_shot_group -> %>
<.modal return_to={Routes.ammo_group_index_path(Endpoint, :index)}> <.modal return_to={Routes.ammo_group_index_path(Endpoint, :index)}>
<.live_component <.live_component
module={CanneryWeb.Components.AddShotGroupComponent} module={CanneryWeb.Components.AddShotGroupComponent}
@ -204,7 +204,7 @@
current_user={@current_user} current_user={@current_user}
/> />
</.modal> </.modal>
<% @live_action == :move -> %> <% :move -> %>
<.modal return_to={Routes.ammo_group_index_path(Endpoint, :index)}> <.modal return_to={Routes.ammo_group_index_path(Endpoint, :index)}>
<.live_component <.live_component
module={CanneryWeb.Components.MoveAmmoGroupComponent} module={CanneryWeb.Components.MoveAmmoGroupComponent}
@ -216,6 +216,5 @@
current_user={@current_user} current_user={@current_user}
/> />
</.modal> </.modal>
<% true -> %> <% _ -> %>
<%= nil %>
<% end %> <% end %>

View File

@ -4,7 +4,9 @@ defmodule CanneryWeb.AmmoGroupLive.Show do
""" """
use CanneryWeb, :live_view use CanneryWeb, :live_view
alias Cannery.{ActivityLog, ActivityLog.ShotGroup, Ammo, Ammo.AmmoGroup, Repo} alias Cannery.{ActivityLog, ActivityLog.ShotGroup}
alias Cannery.{Ammo, Ammo.AmmoGroup}
alias Cannery.Containers
alias CanneryWeb.Endpoint alias CanneryWeb.Endpoint
alias Phoenix.LiveView.Socket alias Phoenix.LiveView.Socket
@ -81,30 +83,45 @@ defmodule CanneryWeb.AmmoGroupLive.Show do
end end
@spec display_ammo_group(Socket.t(), AmmoGroup.t() | AmmoGroup.id()) :: Socket.t() @spec display_ammo_group(Socket.t(), AmmoGroup.t() | AmmoGroup.id()) :: Socket.t()
defp display_ammo_group(socket, %AmmoGroup{} = ammo_group) do defp display_ammo_group(
ammo_group = ammo_group |> Repo.preload([:container, :ammo_type, :shot_groups], force: true) %{assigns: %{current_user: current_user}} = socket,
%AmmoGroup{container_id: container_id} = ammo_group
) do
columns = [ columns = [
%{label: gettext("Rounds shot"), key: :count}, %{label: gettext("Rounds shot"), key: :count},
%{label: gettext("Notes"), key: :notes}, %{label: gettext("Notes"), key: :notes},
%{label: gettext("Date"), key: :date}, %{label: gettext("Date"), key: :date, type: Date},
%{label: nil, key: :actions, sortable: false} %{label: nil, key: :actions, sortable: false}
] ]
shot_groups = ActivityLog.list_shot_groups_for_ammo_group(ammo_group, current_user)
rows = rows =
ammo_group.shot_groups shot_groups
|> Enum.map(fn shot_group -> |> Enum.map(fn shot_group ->
ammo_group |> get_table_row_for_shot_group(shot_group, columns) ammo_group |> get_table_row_for_shot_group(shot_group, columns)
end) end)
socket |> assign(ammo_group: ammo_group, columns: columns, rows: rows) socket
|> assign(
ammo_group: ammo_group,
original_count: Ammo.get_original_count(ammo_group, current_user),
percentage_remaining: Ammo.get_percentage_remaining(ammo_group, current_user),
container: container_id && Containers.get_container!(container_id, current_user),
shot_groups: shot_groups,
columns: columns,
rows: rows
)
end end
defp display_ammo_group(%{assigns: %{current_user: current_user}} = socket, id), defp display_ammo_group(%{assigns: %{current_user: current_user}} = socket, id),
do: display_ammo_group(socket, Ammo.get_ammo_group!(id, current_user)) do: display_ammo_group(socket, Ammo.get_ammo_group!(id, current_user))
@spec display_currency(float()) :: String.t()
defp display_currency(float), do: :erlang.float_to_binary(float, decimals: 2)
@spec get_table_row_for_shot_group(AmmoGroup.t(), ShotGroup.t(), [map()]) :: map() @spec get_table_row_for_shot_group(AmmoGroup.t(), ShotGroup.t(), [map()]) :: map()
defp get_table_row_for_shot_group(ammo_group, %{date: date} = shot_group, columns) do defp get_table_row_for_shot_group(ammo_group, %{id: id, date: date} = shot_group, columns) do
assigns = %{ammo_group: ammo_group, shot_group: shot_group} assigns = %{ammo_group: ammo_group, shot_group: shot_group}
columns columns
@ -112,11 +129,11 @@ defmodule CanneryWeb.AmmoGroupLive.Show do
value = value =
case key do case key do
:date -> :date ->
assigns = %{date: date} assigns = %{id: id, date: date}
{date, {date,
~H""" ~H"""
<.date date={@date} /> <.date id={"#{@id}-date"} date={@date} />
"""} """}
:actions -> :actions ->

View File

@ -11,12 +11,12 @@
<span class="rounded-lg title text-lg"> <span class="rounded-lg title text-lg">
<%= gettext("Original count:") %> <%= gettext("Original count:") %>
<%= Ammo.get_original_count(@ammo_group) %> <%= @original_count %>
</span> </span>
<span class="rounded-lg title text-lg"> <span class="rounded-lg title text-lg">
<%= gettext("Percentage left:") %> <%= gettext("Percentage left:") %>
<%= gettext("%{percentage}%", percentage: @ammo_group |> Ammo.get_percentage_remaining()) %> <%= gettext("%{percentage}%", percentage: @percentage_remaining) %>
</span> </span>
<%= if @ammo_group.notes do %> <%= if @ammo_group.notes do %>
@ -28,23 +28,19 @@
<span class="rounded-lg title text-lg"> <span class="rounded-lg title text-lg">
<%= gettext("Purchased on:") %> <%= gettext("Purchased on:") %>
<.date date={@ammo_group.purchased_on} /> <.date id={"#{@ammo_group.id}-purchased-on"} date={@ammo_group.purchased_on} />
</span> </span>
<%= if @ammo_group.price_paid do %> <%= if @ammo_group.price_paid do %>
<span class="rounded-lg title text-lg"> <span class="rounded-lg title text-lg">
<%= gettext("Original cost:") %> <%= gettext("Original cost:") %>
<%= gettext("$%{amount}", <%= gettext("$%{amount}", amount: display_currency(@ammo_group.price_paid)) %>
amount: @ammo_group.price_paid |> :erlang.float_to_binary(decimals: 2)
) %>
</span> </span>
<span class="rounded-lg title text-lg"> <span class="rounded-lg title text-lg">
<%= gettext("Current value:") %> <%= gettext("Current value:") %>
<%= gettext("$%{amount}", <%= gettext("$%{amount}",
amount: amount: display_currency(@ammo_group.price_paid * @percentage_remaining / 100)
(@ammo_group.price_paid * Ammo.get_percentage_remaining(@ammo_group) / 100)
|> :erlang.float_to_binary(decimals: 2)
) %> ) %>
</span> </span>
<% end %> <% end %>
@ -77,7 +73,7 @@
phx-click="delete" phx-click="delete"
data-confirm={dgettext("prompts", "Are you sure you want to delete this ammo?")} data-confirm={dgettext("prompts", "Are you sure you want to delete this ammo?")}
aria-label={ aria-label={
gettext("Delete ammo group of %{ammo_group_count} bullets", dgettext("actions", "Delete ammo group of %{ammo_group_count} bullets",
ammo_group_count: @ammo_group.count ammo_group_count: @ammo_group.count
) )
} }
@ -97,7 +93,7 @@
patch={Routes.ammo_group_show_path(Endpoint, :move, @ammo_group)} patch={Routes.ammo_group_show_path(Endpoint, :move, @ammo_group)}
class="btn btn-primary" class="btn btn-primary"
> >
<%= dgettext("actions", "Move containers") %> <%= dgettext("actions", "Move ammo") %>
</.link> </.link>
<.link <.link
@ -112,18 +108,18 @@
<hr class="mb-4 w-full" /> <hr class="mb-4 w-full" />
<div> <div>
<%= if @ammo_group.container do %> <%= if @container do %>
<h1 class="mb-4 px-4 py-2 text-center rounded-lg title text-xl"> <h1 class="mb-4 px-4 py-2 text-center rounded-lg title text-xl">
<%= gettext("Stored in") %> <%= gettext("Stored in") %>
</h1> </h1>
<.container_card container={@ammo_group.container} /> <.container_card container={@container} current_user={@current_user} />
<% else %> <% else %>
<%= gettext("This ammo is not in a container") %> <%= gettext("This ammo is not in a container") %>
<% end %> <% end %>
</div> </div>
<%= unless @ammo_group.shot_groups |> Enum.empty?() do %> <%= unless @shot_groups |> Enum.empty?() do %>
<hr class="mb-4 w-full" /> <hr class="mb-4 w-full" />
<h1 class="mb-4 px-4 py-2 text-center rounded-lg title text-xl"> <h1 class="mb-4 px-4 py-2 text-center rounded-lg title text-xl">

View File

@ -35,15 +35,18 @@ defmodule CanneryWeb.AmmoTypeLive.FormComponent do
ammo_type_params ammo_type_params
) do ) do
changeset_action = changeset_action =
cond do case action do
action in [:new, :clone] -> :insert create when create in [:new, :clone] -> :insert
action == :edit -> :update :edit -> :update
end end
changeset = changeset =
cond do case action do
action in [:new, :clone] -> ammo_type |> AmmoType.create_changeset(user, ammo_type_params) create when create in [:new, :clone] ->
action == :edit -> ammo_type |> AmmoType.update_changeset(ammo_type_params) ammo_type |> AmmoType.create_changeset(user, ammo_type_params)
:edit ->
ammo_type |> AmmoType.update_changeset(ammo_type_params)
end end
changeset = changeset =

View File

@ -69,9 +69,7 @@ defmodule CanneryWeb.AmmoTypeLive.Index do
@impl true @impl true
def handle_event("delete", %{"id" => id}, %{assigns: %{current_user: current_user}} = socket) do def handle_event("delete", %{"id" => id}, %{assigns: %{current_user: current_user}} = socket) do
%{name: name} = Ammo.get_ammo_type!(id, current_user) |> Ammo.delete_ammo_type!(current_user) %{name: name} = Ammo.get_ammo_type!(id, current_user) |> Ammo.delete_ammo_type!(current_user)
prompt = dgettext("prompts", "%{name} deleted succesfully", name: name) prompt = dgettext("prompts", "%{name} deleted succesfully", name: name)
{:noreply, socket |> put_flash(:info, prompt) |> list_ammo_types()} {:noreply, socket |> put_flash(:info, prompt) |> list_ammo_types()}
end end
@ -84,8 +82,8 @@ defmodule CanneryWeb.AmmoTypeLive.Index do
end end
def handle_event("search", %{"search" => %{"search_term" => search_term}}, socket) do def handle_event("search", %{"search" => %{"search_term" => search_term}}, socket) do
{:noreply, search_path = Routes.ammo_type_index_path(Endpoint, :search, search_term)
socket |> push_patch(to: Routes.ammo_type_index_path(Endpoint, :search, search_term))} {:noreply, socket |> push_patch(to: search_path)}
end end
defp list_ammo_types(%{assigns: %{search: search, current_user: current_user}} = socket) do defp list_ammo_types(%{assigns: %{search: search, current_user: current_user}} = socket) do

View File

@ -4,7 +4,7 @@ defmodule CanneryWeb.AmmoTypeLive.Show do
""" """
use CanneryWeb, :live_view use CanneryWeb, :live_view
alias Cannery.{Ammo, Ammo.AmmoType} alias Cannery.{ActivityLog, Ammo, Ammo.AmmoType}
alias CanneryWeb.Endpoint alias CanneryWeb.Endpoint
@fields_list [ @fields_list [
@ -91,12 +91,27 @@ defmodule CanneryWeb.AmmoTypeLive.Show do
ammo_type |> Map.get(field) != default_value ammo_type |> Map.get(field) != default_value
end) end)
ammo_groups = ammo_type |> Ammo.list_ammo_groups_for_type(current_user, show_used)
original_counts = ammo_groups |> Ammo.get_original_counts(current_user)
cprs = ammo_groups |> Ammo.get_cprs(current_user)
historical_packs_count = ammo_type |> Ammo.get_ammo_groups_count_for_type(current_user, true)
last_used_dates = ammo_groups |> ActivityLog.get_last_used_dates(current_user)
socket socket
|> assign( |> assign(
page_title: page_title(live_action, ammo_type), page_title: page_title(live_action, ammo_type),
ammo_type: ammo_type, ammo_type: ammo_type,
ammo_groups: ammo_type |> Ammo.list_ammo_groups_for_type(current_user, show_used), ammo_groups: ammo_groups,
avg_cost_per_round: ammo_type |> Ammo.get_average_cost_for_ammo_type!(current_user), original_counts: original_counts,
cprs: cprs,
last_used_dates: last_used_dates,
avg_cost_per_round: ammo_type |> Ammo.get_average_cost_for_ammo_type(current_user),
rounds: ammo_type |> Ammo.get_round_count_for_ammo_type(current_user),
used_rounds: ammo_type |> ActivityLog.get_used_count_for_ammo_type(current_user),
historical_round_count: ammo_type |> Ammo.get_historical_count_for_ammo_type(current_user),
packs_count: ammo_type |> Ammo.get_ammo_groups_count_for_type(current_user),
used_packs_count: ammo_type |> Ammo.get_used_ammo_groups_count_for_type(current_user),
historical_packs_count: historical_packs_count,
fields_list: @fields_list, fields_list: @fields_list,
fields_to_display: fields_to_display fields_to_display: fields_to_display
) )
@ -110,6 +125,9 @@ defmodule CanneryWeb.AmmoTypeLive.Show do
socket |> display_ammo_type(ammo_type) socket |> display_ammo_type(ammo_type)
end end
@spec display_currency(float()) :: String.t()
defp display_currency(float), do: :erlang.float_to_binary(float, decimals: 2)
defp page_title(action, %{name: ammo_type_name}) when action in [:show, :table], defp page_title(action, %{name: ammo_type_name}) when action in [:show, :table],
do: ammo_type_name do: ammo_type_name

View File

@ -71,7 +71,7 @@
</h3> </h3>
<span class="text-primary-600"> <span class="text-primary-600">
<%= @ammo_type |> Ammo.get_round_count_for_ammo_type(@current_user) %> <%= @rounds %>
</span> </span>
<h3 class="title text-lg"> <h3 class="title text-lg">
@ -79,7 +79,7 @@
</h3> </h3>
<span class="text-primary-600"> <span class="text-primary-600">
<%= @ammo_type |> Ammo.get_used_count_for_ammo_type(@current_user) %> <%= @used_rounds %>
</span> </span>
<h3 class="title text-lg"> <h3 class="title text-lg">
@ -87,7 +87,7 @@
</h3> </h3>
<span class="text-primary-600"> <span class="text-primary-600">
<%= @ammo_type |> Ammo.get_historical_count_for_ammo_type(@current_user) %> <%= @historical_round_count %>
</span> </span>
</div> </div>
@ -99,7 +99,7 @@
</h3> </h3>
<span class="text-primary-600"> <span class="text-primary-600">
<%= @ammo_type |> Ammo.get_ammo_groups_count_for_type(@current_user) %> <%= @packs_count %>
</span> </span>
<h3 class="title text-lg"> <h3 class="title text-lg">
@ -107,7 +107,7 @@
</h3> </h3>
<span class="text-primary-600"> <span class="text-primary-600">
<%= @ammo_type |> Ammo.get_used_ammo_groups_count_for_type(@current_user) %> <%= @used_packs_count %>
</span> </span>
<h3 class="title text-lg"> <h3 class="title text-lg">
@ -115,7 +115,7 @@
</h3> </h3>
<span class="text-primary-600"> <span class="text-primary-600">
<%= @ammo_type |> Ammo.get_ammo_groups_count_for_type(@current_user, true) %> <%= @historical_packs_count %>
</span> </span>
</div> </div>
@ -127,7 +127,7 @@
</h3> </h3>
<span class="text-primary-600"> <span class="text-primary-600">
<.datetime datetime={@ammo_type.inserted_at} /> <.datetime id={"#{@ammo_type.id}-inserted-at"} datetime={@ammo_type.inserted_at} />
</span> </span>
<%= if @avg_cost_per_round do %> <%= if @avg_cost_per_round do %>
@ -136,9 +136,7 @@
</h3> </h3>
<span class="text-primary-600"> <span class="text-primary-600">
<%= gettext("$%{amount}", <%= gettext("$%{amount}", amount: display_currency(@avg_cost_per_round)) %>
amount: @avg_cost_per_round |> :erlang.float_to_binary(decimals: 2)
) %>
</span> </span>
<% else %> <% else %>
<h3 class="mx-8 my-4 title text-lg text-primary-600 col-span-2"> <h3 class="mx-8 my-4 title text-lg text-primary-600 col-span-2">
@ -177,7 +175,7 @@
ammo_groups={@ammo_groups} ammo_groups={@ammo_groups}
current_user={@current_user} current_user={@current_user}
> >
<:container :let={%{container: %{name: container_name} = container}}> <:container :let={{_ammo_group, %{name: container_name} = container}}>
<.link <.link
navigate={Routes.container_show_path(Endpoint, :show, container)} navigate={Routes.container_show_path(Endpoint, :show, container)}
class="mx-2 my-1 link" class="mx-2 my-1 link"
@ -189,8 +187,12 @@
<% else %> <% else %>
<div class="flex flex-wrap justify-center items-stretch"> <div class="flex flex-wrap justify-center items-stretch">
<.ammo_group_card <.ammo_group_card
:for={ammo_group <- @ammo_groups} :for={%{id: ammo_group_id} = ammo_group <- @ammo_groups}
ammo_group={ammo_group} ammo_group={ammo_group}
original_count={Map.fetch!(@original_counts, ammo_group_id)}
cpr={Map.get(@cprs, ammo_group_id)}
last_used_date={Map.get(@last_used_dates, ammo_group_id)}
current_user={@current_user}
show_container={true} show_container={true}
/> />
</div> </div>

View File

@ -4,7 +4,8 @@ defmodule CanneryWeb.ContainerLive.EditTagsComponent do
""" """
use CanneryWeb, :live_component use CanneryWeb, :live_component
alias Cannery.{Accounts.User, Containers, Containers.Container, Tags, Tags.Tag} alias Cannery.{Accounts.User, Containers}
alias Cannery.Containers.{Container, Tag}
alias Phoenix.LiveView.Socket alias Phoenix.LiveView.Socket
@impl true @impl true
@ -22,7 +23,7 @@ defmodule CanneryWeb.ContainerLive.EditTagsComponent do
assigns, assigns,
socket socket
) do ) do
tags = Tags.list_tags(current_user) tags = Containers.list_tags(current_user)
{:ok, socket |> assign(assigns) |> assign(:tags, tags)} {:ok, socket |> assign(assigns) |> assign(:tags, tags)}
end end

View File

@ -35,17 +35,17 @@ defmodule CanneryWeb.ContainerLive.FormComponent do
container_params container_params
) do ) do
changeset_action = changeset_action =
cond do case action do
action in [:new, :clone] -> :insert create when create in [:new, :clone] -> :insert
action == :edit -> :update :edit -> :update
end end
changeset = changeset =
cond do case action do
action in [:new, :clone] -> create when create in [:new, :clone] ->
container |> Container.create_changeset(user, container_params) container |> Container.create_changeset(user, container_params)
action == :edit -> :edit ->
container |> Container.update_changeset(container_params) container |> Container.update_changeset(container_params)
end end

View File

@ -4,7 +4,7 @@ defmodule CanneryWeb.ContainerLive.Index do
""" """
use CanneryWeb, :live_view use CanneryWeb, :live_view
alias Cannery.{Containers, Containers.Container, Repo} alias Cannery.{Containers, Containers.Container}
alias Ecto.Changeset alias Ecto.Changeset
@impl true @impl true
@ -22,10 +22,7 @@ defmodule CanneryWeb.ContainerLive.Index do
end end
defp apply_action(%{assigns: %{current_user: current_user}} = socket, :edit, %{"id" => id}) do defp apply_action(%{assigns: %{current_user: current_user}} = socket, :edit, %{"id" => id}) do
%{name: container_name} = %{name: container_name} = container = Containers.get_container!(id, current_user)
container =
Containers.get_container!(id, current_user)
|> Repo.preload([:tags, :ammo_groups])
socket socket
|> assign(page_title: gettext("Edit %{name}", name: container_name), container: container) |> assign(page_title: gettext("Edit %{name}", name: container_name), container: container)
@ -61,9 +58,7 @@ defmodule CanneryWeb.ContainerLive.Index do
end end
defp apply_action(%{assigns: %{current_user: current_user}} = socket, :edit_tags, %{"id" => id}) do defp apply_action(%{assigns: %{current_user: current_user}} = socket, :edit_tags, %{"id" => id}) do
%{name: container_name} = %{name: container_name} = container = Containers.get_container!(id, current_user)
container =
Containers.get_container!(id, current_user) |> Repo.preload([:tags, :ammo_groups])
page_title = gettext("Edit %{name} tags", name: container_name) page_title = gettext("Edit %{name} tags", name: container_name)
socket |> assign(page_title: page_title, container: container) socket |> assign(page_title: page_title, container: container)
@ -119,10 +114,6 @@ defmodule CanneryWeb.ContainerLive.Index do
end end
defp display_containers(%{assigns: %{search: search, current_user: current_user}} = socket) do defp display_containers(%{assigns: %{search: search, current_user: current_user}} = socket) do
containers = socket |> assign(:containers, Containers.list_containers(search, current_user))
Containers.list_containers(search, current_user)
|> Repo.preload([:tags, :ammo_groups])
socket |> assign(:containers, containers)
end end
end end

View File

@ -108,7 +108,11 @@
</.live_component> </.live_component>
<% else %> <% else %>
<div class="w-full flex flex-row flex-wrap justify-center items-stretch"> <div class="w-full flex flex-row flex-wrap justify-center items-stretch">
<.container_card :for={container <- @containers} container={container}> <.container_card
:for={container <- @containers}
container={container}
current_user={@current_user}
>
<:tag_actions> <:tag_actions>
<div class="mx-4 my-2"> <div class="mx-4 my-2">
<.link <.link
@ -162,10 +166,9 @@
<% end %> <% end %>
</div> </div>
<.modal <%= case @live_action do %>
:if={@live_action in [:new, :edit, :clone]} <% modifying when modifying in [:new, :edit, :clone] -> %>
return_to={Routes.container_index_path(Endpoint, :index)} <.modal return_to={Routes.container_index_path(Endpoint, :index)}>
>
<.live_component <.live_component
module={CanneryWeb.ContainerLive.FormComponent} module={CanneryWeb.ContainerLive.FormComponent}
id={@container.id || :new} id={@container.id || :new}
@ -176,8 +179,8 @@
current_user={@current_user} current_user={@current_user}
/> />
</.modal> </.modal>
<% :edit_tags -> %>
<.modal :if={@live_action == :edit_tags} return_to={Routes.container_index_path(Endpoint, :index)}> <.modal return_to={Routes.container_index_path(Endpoint, :index)}>
<.live_component <.live_component
module={CanneryWeb.ContainerLive.EditTagsComponent} module={CanneryWeb.ContainerLive.EditTagsComponent}
id={@container.id} id={@container.id}
@ -188,3 +191,5 @@
current_user={@current_user} current_user={@current_user}
/> />
</.modal> </.modal>
<% _ -> %>
<% end %>

View File

@ -4,7 +4,7 @@ defmodule CanneryWeb.ContainerLive.Show do
""" """
use CanneryWeb, :live_view use CanneryWeb, :live_view
alias Cannery.{Accounts.User, Ammo, Containers, Containers.Container, Repo, Tags} alias Cannery.{Accounts.User, ActivityLog, Ammo, Containers, Containers.Container}
alias CanneryWeb.Endpoint alias CanneryWeb.Endpoint
alias Ecto.Changeset alias Ecto.Changeset
alias Phoenix.LiveView.Socket alias Phoenix.LiveView.Socket
@ -30,7 +30,7 @@ defmodule CanneryWeb.ContainerLive.Show do
%{assigns: %{container: container, current_user: current_user}} = socket %{assigns: %{container: container, current_user: current_user}} = socket
) do ) do
socket = socket =
case Tags.get_tag(tag_id, current_user) do case Containers.get_tag(tag_id, current_user) do
{:ok, tag} -> {:ok, tag} ->
_count = Containers.remove_tag!(container, tag, current_user) _count = Containers.remove_tag!(container, tag, current_user)
@ -42,8 +42,8 @@ defmodule CanneryWeb.ContainerLive.Show do
socket |> put_flash(:info, prompt) |> render_container() socket |> put_flash(:info, prompt) |> render_container()
{:error, error_string} -> {:error, :not_found} ->
socket |> put_flash(:error, error_string) socket |> put_flash(:error, dgettext("errors", "Tag not found"))
end end
{:noreply, socket} {:noreply, socket}
@ -96,12 +96,11 @@ defmodule CanneryWeb.ContainerLive.Show do
id, id,
current_user current_user
) do ) do
%{name: container_name} = %{name: container_name} = container = Containers.get_container!(id, current_user)
container =
Containers.get_container!(id, current_user)
|> Repo.preload([:tags], force: true)
ammo_groups = Ammo.list_ammo_groups_for_container(container, current_user, show_used) ammo_groups = Ammo.list_ammo_groups_for_container(container, current_user, show_used)
original_counts = ammo_groups |> Ammo.get_original_counts(current_user)
cprs = ammo_groups |> Ammo.get_cprs(current_user)
last_used_dates = ammo_groups |> ActivityLog.get_last_used_dates(current_user)
page_title = page_title =
case live_action do case live_action do
@ -110,7 +109,16 @@ defmodule CanneryWeb.ContainerLive.Show do
:edit_tags -> gettext("Edit %{name} tags", name: container_name) :edit_tags -> gettext("Edit %{name} tags", name: container_name)
end end
socket |> assign(container: container, ammo_groups: ammo_groups, page_title: page_title) socket
|> assign(
container: container,
round_count: Ammo.get_round_count_for_container!(container, current_user),
ammo_groups: ammo_groups,
original_counts: original_counts,
cprs: cprs,
last_used_dates: last_used_dates,
page_title: page_title
)
end end
@spec render_container(Socket.t()) :: Socket.t() @spec render_container(Socket.t()) :: Socket.t()

View File

@ -20,21 +20,18 @@
<%= unless @ammo_groups |> Enum.empty?() do %> <%= unless @ammo_groups |> Enum.empty?() do %>
<span class="rounded-lg title text-lg"> <span class="rounded-lg title text-lg">
<%= if @show_used do %>
<%= gettext("Total packs:") %>
<% else %>
<%= gettext("Packs:") %> <%= gettext("Packs:") %>
<% end %> <%= @ammo_groups |> Enum.reject(fn %{count: count} -> count in [0, nil] end) |> Enum.count() %>
</span>
<span :if={@show_used} class="rounded-lg title text-lg">
<%= gettext("Total packs:") %>
<%= Enum.count(@ammo_groups) %> <%= Enum.count(@ammo_groups) %>
</span> </span>
<span class="rounded-lg title text-lg"> <span class="rounded-lg title text-lg">
<%= if @show_used do %>
<%= gettext("Total rounds:") %>
<% else %>
<%= gettext("Rounds:") %> <%= gettext("Rounds:") %>
<% end %> <%= @round_count %>
<%= @container |> Containers.get_container_rounds!() %>
</span> </span>
<% end %> <% end %>
@ -130,17 +127,23 @@
</.live_component> </.live_component>
<% else %> <% else %>
<div class="flex flex-wrap justify-center items-stretch"> <div class="flex flex-wrap justify-center items-stretch">
<.ammo_group_card :for={ammo_group <- @ammo_groups} ammo_group={ammo_group} /> <.ammo_group_card
:for={%{id: ammo_group_id} = ammo_group <- @ammo_groups}
ammo_group={ammo_group}
original_count={Map.fetch!(@original_counts, ammo_group_id)}
cpr={Map.get(@cprs, ammo_group_id)}
last_used_date={Map.get(@last_used_dates, ammo_group_id)}
current_user={@current_user}
/>
</div> </div>
<% end %> <% end %>
<% end %> <% end %>
</div> </div>
</div> </div>
<.modal <%= case @live_action do %>
:if={@live_action == :edit} <% :edit -> %>
return_to={Routes.container_show_path(Endpoint, :show, @container)} <.modal return_to={Routes.container_show_path(Endpoint, :show, @container)}>
>
<.live_component <.live_component
module={CanneryWeb.ContainerLive.FormComponent} module={CanneryWeb.ContainerLive.FormComponent}
id={@container.id} id={@container.id}
@ -151,11 +154,8 @@
current_user={@current_user} current_user={@current_user}
/> />
</.modal> </.modal>
<% :edit_tags -> %>
<.modal <.modal return_to={Routes.container_show_path(Endpoint, :show, @container)}>
:if={@live_action == :edit_tags}
return_to={Routes.container_show_path(Endpoint, :show, @container)}
>
<.live_component <.live_component
module={CanneryWeb.ContainerLive.EditTagsComponent} module={CanneryWeb.ContainerLive.EditTagsComponent}
id={@container.id} id={@container.id}
@ -167,3 +167,5 @@
current_user={@current_user} current_user={@current_user}
/> />
</.modal> </.modal>
<% _ -> %>
<% end %>

View File

@ -12,7 +12,6 @@ defmodule CanneryWeb.HomeLive do
@impl true @impl true
def mount(_params, _session, socket) do def mount(_params, _session, socket) do
admins = Accounts.list_users_by_role(:admin) admins = Accounts.list_users_by_role(:admin)
socket = socket |> assign(page_title: gettext("Home"), admins: admins, version: @version) {:ok, socket |> assign(page_title: gettext("Home"), admins: admins, version: @version)}
{:ok, socket}
end end
end end

View File

@ -17,8 +17,7 @@
<hr class="hr" /> <hr class="hr" />
<ul class="flex flex-col space-y-4 text-center"> <ul class="flex flex-col space-y-4 text-center">
<li class="flex flex-col justify-center items-center <li class="flex flex-col justify-center items-center space-y-2">
space-y-2">
<b class="whitespace-nowrap"> <b class="whitespace-nowrap">
<%= gettext("Easy to Use:") %> <%= gettext("Easy to Use:") %>
</b> </b>
@ -37,8 +36,7 @@
<%= gettext("Your data stays with you, period") %> <%= gettext("Your data stays with you, period") %>
</p> </p>
</li> </li>
<li class="flex flex-col justify-center items-center <li class="flex flex-col justify-center items-center space-y-2">
space-y-2">
<b class="whitespace-nowrap"> <b class="whitespace-nowrap">
<%= gettext("Simple:") %> <%= gettext("Simple:") %>
</b> </b>
@ -81,9 +79,9 @@
<li class="flex flex-row justify-center space-x-2"> <li class="flex flex-row justify-center space-x-2">
<b><%= gettext("Registration:") %></b> <b><%= gettext("Registration:") %></b>
<p> <p>
<%= case Application.get_env(:cannery, Cannery.Accounts)[:registration] do <%= case Accounts.registration_mode() do
"public" -> gettext("Public Signups") :public -> gettext("Public Signups")
_ -> gettext("Invite Only") :invite_only -> gettext("Invite Only")
end %> end %>
</p> </p>
</li> </li>

View File

@ -29,8 +29,8 @@ defmodule CanneryWeb.InviteLive.Index do
end end
defp apply_action(%{assigns: %{current_user: current_user}} = socket, :edit, %{"id" => id}) do defp apply_action(%{assigns: %{current_user: current_user}} = socket, :edit, %{"id" => id}) do
socket invite = Invites.get_invite!(id, current_user)
|> assign(page_title: gettext("Edit Invite"), invite: Invites.get_invite!(id, current_user)) socket |> assign(page_title: gettext("Edit Invite"), invite: invite)
end end
defp apply_action(socket, :new, _params) do defp apply_action(socket, :new, _params) do
@ -123,8 +123,7 @@ defmodule CanneryWeb.InviteLive.Index do
end end
def handle_event("copy_to_clipboard", _params, socket) do def handle_event("copy_to_clipboard", _params, socket) do
prompt = dgettext("prompts", "Copied to clipboard") {:noreply, socket |> put_flash(:info, dgettext("prompts", "Copied to clipboard"))}
{:noreply, socket |> put_flash(:info, prompt)}
end end
def handle_event( def handle_event(
@ -133,9 +132,7 @@ defmodule CanneryWeb.InviteLive.Index do
%{assigns: %{current_user: current_user}} = socket %{assigns: %{current_user: current_user}} = socket
) do ) do
%{email: user_email} = Accounts.get_user!(id) |> Accounts.delete_user!(current_user) %{email: user_email} = Accounts.get_user!(id) |> Accounts.delete_user!(current_user)
prompt = dgettext("prompts", "%{user_email} deleted succesfully", user_email: user_email) prompt = dgettext("prompts", "%{user_email} deleted succesfully", user_email: user_email)
{:noreply, socket |> put_flash(:info, prompt) |> display_invites()} {:noreply, socket |> put_flash(:info, prompt) |> display_invites()}
end end
@ -148,7 +145,8 @@ defmodule CanneryWeb.InviteLive.Index do
|> Map.get(:admin, []) |> Map.get(:admin, [])
|> Enum.reject(fn %{id: user_id} -> user_id == current_user.id end) |> Enum.reject(fn %{id: user_id} -> user_id == current_user.id end)
use_counts = invites |> Invites.get_use_counts(current_user)
users = all_users |> Map.get(:user, []) users = all_users |> Map.get(:user, [])
socket |> assign(invites: invites, admins: admins, users: users) socket |> assign(invites: invites, use_counts: use_counts, admins: admins, users: users)
end end
end end

View File

@ -19,7 +19,12 @@
<% end %> <% end %>
<div class="flex flex-col justify-center items-stretch space-y-4"> <div class="flex flex-col justify-center items-stretch space-y-4">
<.invite_card :for={invite <- @invites} invite={invite} current_user={@current_user}> <.invite_card
:for={invite <- @invites}
invite={invite}
current_user={@current_user}
use_count={Map.get(@use_counts, invite.id)}
>
<:code_actions> <:code_actions>
<form phx-submit="copy_to_clipboard"> <form phx-submit="copy_to_clipboard">
<button <button

View File

@ -5,8 +5,12 @@ defmodule CanneryWeb.RangeLive.FormComponent do
use CanneryWeb, :live_component use CanneryWeb, :live_component
alias Cannery.{Accounts.User, ActivityLog, ActivityLog.ShotGroup, Ammo, Ammo.AmmoGroup} alias Cannery.{Accounts.User, ActivityLog, ActivityLog.ShotGroup, Ammo, Ammo.AmmoGroup}
alias Ecto.Changeset
alias Phoenix.LiveView.Socket alias Phoenix.LiveView.Socket
@impl true
def mount(socket), do: {:ok, socket |> assign(:ammo_group, nil)}
@impl true @impl true
@spec update( @spec update(
%{ %{
@ -19,28 +23,23 @@ defmodule CanneryWeb.RangeLive.FormComponent do
) :: {:ok, Socket.t()} ) :: {:ok, Socket.t()}
def update( def update(
%{ %{
shot_group: %ShotGroup{ammo_group_id: ammo_group_id} = shot_group, shot_group: %ShotGroup{ammo_group_id: ammo_group_id},
current_user: current_user current_user: current_user
} = assigns, } = assigns,
socket socket
) do )
changeset = shot_group |> ShotGroup.update_changeset(current_user, %{}) when is_binary(ammo_group_id) do
ammo_group = Ammo.get_ammo_group!(ammo_group_id, current_user) ammo_group = Ammo.get_ammo_group!(ammo_group_id, current_user)
{:ok, socket |> assign(assigns) |> assign(ammo_group: ammo_group, changeset: changeset)} {:ok, socket |> assign(assigns) |> assign(:ammo_group, ammo_group) |> assign_changeset(%{})}
end
def update(%{shot_group: %ShotGroup{}} = assigns, socket) do
{:ok, socket |> assign(assigns) |> assign_changeset(%{})}
end end
@impl true @impl true
def handle_event( def handle_event("validate", %{"shot_group" => shot_group_params}, socket) do
"validate", {:noreply, socket |> assign_changeset(shot_group_params, :validate)}
%{"shot_group" => shot_group_params},
%{assigns: %{current_user: current_user, shot_group: shot_group}} = socket
) do
changeset =
shot_group
|> ShotGroup.update_changeset(current_user, shot_group_params)
|> Map.put(:action, :validate)
{:noreply, assign(socket, :changeset, changeset)}
end end
def handle_event( def handle_event(
@ -61,4 +60,37 @@ defmodule CanneryWeb.RangeLive.FormComponent do
{:noreply, socket} {:noreply, socket}
end end
defp assign_changeset(
%{
assigns: %{
action: live_action,
current_user: user,
ammo_group: ammo_group,
shot_group: shot_group
}
} = socket,
shot_group_params,
action \\ nil
) do
default_action =
case live_action do
:add_shot_group -> :insert
editing when editing in [:edit, :edit_shot_group] -> :update
end
changeset =
case default_action do
:insert -> shot_group |> ShotGroup.create_changeset(user, ammo_group, shot_group_params)
:update -> shot_group |> ShotGroup.update_changeset(user, shot_group_params)
end
changeset =
case changeset |> Changeset.apply_action(action || default_action) do
{:ok, _data} -> changeset
{:error, changeset} -> changeset
end
socket |> assign(:changeset, changeset)
end
end end

View File

@ -4,7 +4,7 @@ defmodule CanneryWeb.RangeLive.Index do
""" """
use CanneryWeb, :live_view use CanneryWeb, :live_view
alias Cannery.{ActivityLog, ActivityLog.ShotGroup, Ammo, Repo} alias Cannery.{ActivityLog, ActivityLog.ShotGroup, Ammo}
alias CanneryWeb.Endpoint alias CanneryWeb.Endpoint
alias Phoenix.LiveView.Socket alias Phoenix.LiveView.Socket
@ -104,16 +104,19 @@ defmodule CanneryWeb.RangeLive.Index do
@spec display_shot_groups(Socket.t()) :: Socket.t() @spec display_shot_groups(Socket.t()) :: Socket.t()
defp display_shot_groups(%{assigns: %{search: search, current_user: current_user}} = socket) do defp display_shot_groups(%{assigns: %{search: search, current_user: current_user}} = socket) do
shot_groups = shot_groups = ActivityLog.list_shot_groups(search, current_user)
ActivityLog.list_shot_groups(search, current_user)
|> Repo.preload(ammo_group: :ammo_type)
ammo_groups = Ammo.list_staged_ammo_groups(current_user) ammo_groups = Ammo.list_staged_ammo_groups(current_user)
chart_data = shot_groups |> get_chart_data_for_shot_group() chart_data = shot_groups |> get_chart_data_for_shot_group()
original_counts = ammo_groups |> Ammo.get_original_counts(current_user)
cprs = ammo_groups |> Ammo.get_cprs(current_user)
last_used_dates = ammo_groups |> ActivityLog.get_last_used_dates(current_user)
socket socket
|> assign( |> assign(
ammo_groups: ammo_groups, ammo_groups: ammo_groups,
original_counts: original_counts,
cprs: cprs,
last_used_dates: last_used_dates,
chart_data: chart_data, chart_data: chart_data,
shot_groups: shot_groups shot_groups: shot_groups
) )
@ -122,7 +125,6 @@ defmodule CanneryWeb.RangeLive.Index do
@spec get_chart_data_for_shot_group([ShotGroup.t()]) :: [map()] @spec get_chart_data_for_shot_group([ShotGroup.t()]) :: [map()]
defp get_chart_data_for_shot_group(shot_groups) do defp get_chart_data_for_shot_group(shot_groups) do
shot_groups shot_groups
|> Repo.preload(ammo_group: :ammo_type)
|> Enum.group_by(fn %{date: date} -> date end, fn %{count: count} -> count end) |> Enum.group_by(fn %{date: date} -> date end, fn %{count: count} -> count end)
|> Enum.map(fn {date, rounds} -> |> Enum.map(fn {date, rounds} ->
sum = Enum.sum(rounds) sum = Enum.sum(rounds)

View File

@ -18,7 +18,14 @@
</.link> </.link>
<div class="w-full flex flex-row flex-wrap justify-center items-stretch"> <div class="w-full flex flex-row flex-wrap justify-center items-stretch">
<.ammo_group_card :for={ammo_group <- @ammo_groups} ammo_group={ammo_group}> <.ammo_group_card
:for={%{id: ammo_group_id} = ammo_group <- @ammo_groups}
ammo_group={ammo_group}
original_count={Map.fetch!(@original_counts, ammo_group_id)}
cpr={Map.get(@cprs, ammo_group_id)}
last_used_date={Map.get(@last_used_dates, ammo_group_id)}
current_user={@current_user}
>
<button <button
type="button" type="button"
class="btn btn-primary" class="btn btn-primary"
@ -134,7 +141,9 @@
<% end %> <% end %>
</div> </div>
<.modal :if={@live_action == :edit} return_to={Routes.range_index_path(Endpoint, :index)}> <%= case @live_action do %>
<% :edit -> %>
<.modal return_to={Routes.range_index_path(Endpoint, :index)}>
<.live_component <.live_component
module={CanneryWeb.RangeLive.FormComponent} module={CanneryWeb.RangeLive.FormComponent}
id={@shot_group.id} id={@shot_group.id}
@ -145,11 +154,8 @@
current_user={@current_user} current_user={@current_user}
/> />
</.modal> </.modal>
<% :add_shot_group -> %>
<.modal <.modal return_to={Routes.range_index_path(Endpoint, :index)}>
:if={@live_action == :add_shot_group}
return_to={Routes.range_index_path(Endpoint, :index)}
>
<.live_component <.live_component
module={CanneryWeb.Components.AddShotGroupComponent} module={CanneryWeb.Components.AddShotGroupComponent}
id={:new} id={:new}
@ -160,3 +166,5 @@
current_user={@current_user} current_user={@current_user}
/> />
</.modal> </.modal>
<% _ -> %>
<% end %>

View File

@ -1,11 +1,10 @@
defmodule CanneryWeb.TagLive.FormComponent do defmodule CanneryWeb.TagLive.FormComponent do
@moduledoc """ @moduledoc """
Livecomponent that can update or create an Cannery.Tags.Tag Livecomponent that can update or create an Cannery.Containers.Tag
""" """
use CanneryWeb, :live_component use CanneryWeb, :live_component
alias Cannery.Tags alias Cannery.{Accounts.User, Containers, Containers.Tag}
alias Cannery.{Accounts.User, Tags.Tag}
alias Ecto.Changeset alias Ecto.Changeset
alias Phoenix.LiveView.Socket alias Phoenix.LiveView.Socket
@ -56,7 +55,7 @@ defmodule CanneryWeb.TagLive.FormComponent do
tag_params tag_params
) do ) do
socket = socket =
case Tags.update_tag(tag, tag_params, current_user) do case Containers.update_tag(tag, tag_params, current_user) do
{:ok, %{name: tag_name}} -> {:ok, %{name: tag_name}} ->
prompt = dgettext("prompts", "%{name} updated successfully", name: tag_name) prompt = dgettext("prompts", "%{name} updated successfully", name: tag_name)
socket |> put_flash(:info, prompt) |> push_navigate(to: return_to) socket |> put_flash(:info, prompt) |> push_navigate(to: return_to)
@ -74,7 +73,7 @@ defmodule CanneryWeb.TagLive.FormComponent do
tag_params tag_params
) do ) do
socket = socket =
case Tags.create_tag(tag_params, current_user) do case Containers.create_tag(tag_params, current_user) do
{:ok, %{name: tag_name}} -> {:ok, %{name: tag_name}} ->
prompt = dgettext("prompts", "%{name} created successfully", name: tag_name) prompt = dgettext("prompts", "%{name} created successfully", name: tag_name)
socket |> put_flash(:info, prompt) |> push_navigate(to: return_to) socket |> put_flash(:info, prompt) |> push_navigate(to: return_to)

View File

@ -1,10 +1,10 @@
defmodule CanneryWeb.TagLive.Index do defmodule CanneryWeb.TagLive.Index do
@moduledoc """ @moduledoc """
Liveview to show a Cannery.Tags.Tag index Liveview to show a Cannery.Containers.Tag index
""" """
use CanneryWeb, :live_view use CanneryWeb, :live_view
alias Cannery.{Tags, Tags.Tag} alias Cannery.{Containers, Containers.Tag}
alias CanneryWeb.ViewHelpers alias CanneryWeb.ViewHelpers
@impl true @impl true
@ -25,7 +25,7 @@ defmodule CanneryWeb.TagLive.Index do
socket socket
|> assign( |> assign(
page_title: gettext("Edit Tag"), page_title: gettext("Edit Tag"),
tag: Tags.get_tag!(id, current_user) tag: Containers.get_tag!(id, current_user)
) )
end end
@ -59,7 +59,9 @@ defmodule CanneryWeb.TagLive.Index do
@impl true @impl true
def handle_event("delete", %{"id" => id}, %{assigns: %{current_user: current_user}} = socket) do def handle_event("delete", %{"id" => id}, %{assigns: %{current_user: current_user}} = socket) do
%{name: tag_name} = Tags.get_tag!(id, current_user) |> Tags.delete_tag!(current_user) %{name: tag_name} =
Containers.get_tag!(id, current_user) |> Containers.delete_tag!(current_user)
prompt = dgettext("prompts", "%{name} deleted succesfully", name: tag_name) prompt = dgettext("prompts", "%{name} deleted succesfully", name: tag_name)
{:noreply, socket |> put_flash(:info, prompt) |> display_tags()} {:noreply, socket |> put_flash(:info, prompt) |> display_tags()}
end end
@ -73,6 +75,6 @@ defmodule CanneryWeb.TagLive.Index do
end end
defp display_tags(%{assigns: %{search: search, current_user: current_user}} = socket) do defp display_tags(%{assigns: %{search: search, current_user: current_user}} = socket) do
socket |> assign(tags: Tags.list_tags(search, current_user)) socket |> assign(tags: Containers.list_tags(search, current_user))
end end
end end

View File

@ -66,11 +66,11 @@ msgstr ""
msgid "Invite someone new!" msgid "Invite someone new!"
msgstr "" msgstr ""
#: lib/cannery_web/components/topbar.ex:137 #: lib/cannery_web/components/core_components/topbar.html.heex:122
#: lib/cannery_web/templates/user_confirmation/new.html.heex:31 #: lib/cannery_web/templates/user_confirmation/new.html.heex:32
#: lib/cannery_web/templates/user_registration/new.html.heex:44 #: lib/cannery_web/templates/user_registration/new.html.heex:44
#: lib/cannery_web/templates/user_reset_password/edit.html.heex:45 #: lib/cannery_web/templates/user_reset_password/edit.html.heex:45
#: lib/cannery_web/templates/user_reset_password/new.html.heex:31 #: lib/cannery_web/templates/user_reset_password/new.html.heex:32
#: lib/cannery_web/templates/user_session/new.html.heex:3 #: lib/cannery_web/templates/user_session/new.html.heex:3
#: lib/cannery_web/templates/user_session/new.html.heex:28 #: lib/cannery_web/templates/user_session/new.html.heex:28
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
@ -97,19 +97,19 @@ msgstr ""
msgid "New Tag" msgid "New Tag"
msgstr "" msgstr ""
#: lib/cannery_web/components/topbar.ex:129 #: lib/cannery_web/components/core_components/topbar.html.heex:114
#: lib/cannery_web/templates/user_confirmation/new.html.heex:28 #: lib/cannery_web/templates/user_confirmation/new.html.heex:29
#: lib/cannery_web/templates/user_registration/new.html.heex:3 #: lib/cannery_web/templates/user_registration/new.html.heex:3
#: lib/cannery_web/templates/user_registration/new.html.heex:37 #: lib/cannery_web/templates/user_registration/new.html.heex:37
#: lib/cannery_web/templates/user_reset_password/edit.html.heex:42 #: lib/cannery_web/templates/user_reset_password/edit.html.heex:42
#: lib/cannery_web/templates/user_reset_password/new.html.heex:28 #: lib/cannery_web/templates/user_reset_password/new.html.heex:29
#: lib/cannery_web/templates/user_session/new.html.heex:39 #: lib/cannery_web/templates/user_session/new.html.heex:39
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
msgid "Register" msgid "Register"
msgstr "" msgstr ""
#: lib/cannery_web/templates/user_confirmation/new.html.heex:3 #: lib/cannery_web/templates/user_confirmation/new.html.heex:3
#: lib/cannery_web/templates/user_confirmation/new.html.heex:15 #: lib/cannery_web/templates/user_confirmation/new.html.heex:16
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
msgid "Resend confirmation instructions" msgid "Resend confirmation instructions"
msgstr "" msgstr ""
@ -131,17 +131,17 @@ msgstr ""
msgid "Save" msgid "Save"
msgstr "" msgstr ""
#: lib/cannery_web/templates/user_reset_password/new.html.heex:15 #: lib/cannery_web/templates/user_reset_password/new.html.heex:16
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
msgid "Send instructions to reset password" msgid "Send instructions to reset password"
msgstr "" msgstr ""
#: lib/cannery_web/live/container_live/show.html.heex:78 #: lib/cannery_web/live/container_live/show.html.heex:75
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
msgid "Why not add one?" msgid "Why not add one?"
msgstr "" msgstr ""
#: lib/cannery_web/live/container_live/edit_tags_component.html.heex:50 #: lib/cannery_web/live/container_live/edit_tags_component.html.heex:51
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
msgid "Add" msgid "Add"
msgstr "" msgstr ""
@ -156,9 +156,9 @@ msgstr ""
msgid "Why not get some ready to shoot?" msgid "Why not get some ready to shoot?"
msgstr "" msgstr ""
#: lib/cannery_web/live/ammo_group_live/index.html.heex:102 #: lib/cannery_web/live/ammo_group_live/index.html.heex:103
#: lib/cannery_web/live/ammo_group_live/show.html.heex:107 #: lib/cannery_web/live/ammo_group_live/show.html.heex:103
#: lib/cannery_web/live/range_live/index.html.heex:38 #: lib/cannery_web/live/range_live/index.html.heex:45
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
msgid "Record shots" msgid "Record shots"
msgstr "" msgstr ""
@ -168,17 +168,12 @@ msgstr ""
msgid "Add another container!" msgid "Add another container!"
msgstr "" msgstr ""
#: lib/cannery_web/live/ammo_group_live/show.html.heex:100
#, elixir-autogen, elixir-format
msgid "Move containers"
msgstr ""
#: lib/cannery_web/components/move_ammo_group_component.ex:126 #: lib/cannery_web/components/move_ammo_group_component.ex:126
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
msgid "Select" msgid "Select"
msgstr "" msgstr ""
#: lib/cannery_web/live/invite_live/index.html.heex:33 #: lib/cannery_web/live/invite_live/index.html.heex:38
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
msgid "Copy to clipboard" msgid "Copy to clipboard"
msgstr "" msgstr ""
@ -203,7 +198,7 @@ msgstr ""
msgid "Change language" msgid "Change language"
msgstr "" msgstr ""
#: lib/cannery_web/live/ammo_group_live/show.html.heex:59 #: lib/cannery_web/live/ammo_group_live/show.html.heex:55
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
msgid "View in Catalog" msgid "View in Catalog"
msgstr "" msgstr ""
@ -214,23 +209,25 @@ msgid "add an ammo type first"
msgstr "" msgstr ""
#: lib/cannery_web/components/move_ammo_group_component.ex:80 #: lib/cannery_web/components/move_ammo_group_component.ex:80
#: lib/cannery_web/live/ammo_group_live/index.html.heex:120
#: lib/cannery_web/live/ammo_group_live/show.html.heex:96
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
msgid "Move ammo" msgid "Move ammo"
msgstr "" msgstr ""
#: lib/cannery_web/live/invite_live/index.html.heex:85 #: lib/cannery_web/live/invite_live/index.html.heex:90
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
msgid "Set Unlimited" msgid "Set Unlimited"
msgstr "" msgstr ""
#: lib/cannery_web/live/ammo_group_live/show.html.heex:93 #: lib/cannery_web/live/ammo_group_live/show.html.heex:89
#: lib/cannery_web/live/range_live/index.html.heex:31 #: lib/cannery_web/live/range_live/index.html.heex:38
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
msgid "Stage for range" msgid "Stage for range"
msgstr "" msgstr ""
#: lib/cannery_web/live/ammo_group_live/show.html.heex:92 #: lib/cannery_web/live/ammo_group_live/show.html.heex:88
#: lib/cannery_web/live/range_live/index.html.heex:30 #: lib/cannery_web/live/range_live/index.html.heex:37
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
msgid "Unstage from range" msgid "Unstage from range"
msgstr "" msgstr ""
@ -240,106 +237,123 @@ msgstr ""
msgid "Export Data as JSON" msgid "Export Data as JSON"
msgstr "" msgstr ""
#: lib/cannery_web/live/ammo_type_live/index.html.heex:83 #: lib/cannery_web/live/ammo_type_live/index.html.heex:84
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
msgid "Clone %{ammo_type_name}" msgid "Clone %{ammo_type_name}"
msgstr "" msgstr ""
#: lib/cannery_web/live/container_live/index.html.heex:86 #: lib/cannery_web/live/container_live/index.html.heex:87
#: lib/cannery_web/live/container_live/index.html.heex:138 #: lib/cannery_web/live/container_live/index.html.heex:143
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
msgid "Clone %{container_name}" msgid "Clone %{container_name}"
msgstr "" msgstr ""
#: lib/cannery_web/live/invite_live/index.html.heex:30 #: lib/cannery_web/live/invite_live/index.html.heex:35
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
msgid "Copy invite link for %{invite_name}" msgid "Copy invite link for %{invite_name}"
msgstr "" msgstr ""
#: lib/cannery_web/live/ammo_type_live/index.html.heex:102 #: lib/cannery_web/live/ammo_type_live/index.html.heex:103
#: lib/cannery_web/live/ammo_type_live/show.html.heex:36 #: lib/cannery_web/live/ammo_type_live/show.html.heex:36
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
msgid "Delete %{ammo_type_name}" msgid "Delete %{ammo_type_name}"
msgstr "" msgstr ""
#: lib/cannery_web/live/container_live/index.html.heex:101 #: lib/cannery_web/live/container_live/index.html.heex:102
#: lib/cannery_web/live/container_live/index.html.heex:153 #: lib/cannery_web/live/container_live/index.html.heex:158
#: lib/cannery_web/live/container_live/show.html.heex:58 #: lib/cannery_web/live/container_live/show.html.heex:55
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
msgid "Delete %{container_name}" msgid "Delete %{container_name}"
msgstr "" msgstr ""
#: lib/cannery_web/live/tag_live/index.html.heex:64 #: lib/cannery_web/live/tag_live/index.html.heex:65
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
msgid "Delete %{tag_name}" msgid "Delete %{tag_name}"
msgstr "" msgstr ""
#: lib/cannery_web/live/invite_live/index.html.heex:58 #: lib/cannery_web/live/invite_live/index.html.heex:63
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
msgid "Delete invite for %{invite_name}" msgid "Delete invite for %{invite_name}"
msgstr "" msgstr ""
#: lib/cannery_web/live/ammo_group_live/show.ex:145 #: lib/cannery_web/live/ammo_group_live/show.ex:161
#: lib/cannery_web/live/range_live/index.html.heex:122 #: lib/cannery_web/live/range_live/index.html.heex:130
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
msgid "Delete shot record of %{shot_group_count} shots" msgid "Delete shot record of %{shot_group_count} shots"
msgstr "" msgstr ""
#: lib/cannery_web/live/ammo_type_live/index.html.heex:73 #: lib/cannery_web/live/ammo_type_live/index.html.heex:74
#: lib/cannery_web/live/ammo_type_live/show.html.heex:19 #: lib/cannery_web/live/ammo_type_live/show.html.heex:19
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
msgid "Edit %{ammo_type_name}" msgid "Edit %{ammo_type_name}"
msgstr "" msgstr ""
#: lib/cannery_web/live/container_live/index.html.heex:76 #: lib/cannery_web/live/container_live/index.html.heex:77
#: lib/cannery_web/live/container_live/index.html.heex:128 #: lib/cannery_web/live/container_live/index.html.heex:133
#: lib/cannery_web/live/container_live/show.html.heex:45 #: lib/cannery_web/live/container_live/show.html.heex:42
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
msgid "Edit %{container_name}" msgid "Edit %{container_name}"
msgstr "" msgstr ""
#: lib/cannery_web/live/tag_live/index.html.heex:51 #: lib/cannery_web/live/tag_live/index.html.heex:52
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
msgid "Edit %{tag_name}" msgid "Edit %{tag_name}"
msgstr "" msgstr ""
#: lib/cannery_web/live/ammo_group_live/show.html.heex:66 #: lib/cannery_web/live/ammo_group_live/index.html.heex:142
#: lib/cannery_web/live/ammo_group_live/show.html.heex:62
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
msgid "Edit ammo group of %{ammo_group_count} bullets" msgid "Edit ammo group of %{ammo_group_count} bullets"
msgstr "" msgstr ""
#: lib/cannery_web/live/invite_live/index.html.heex:41 #: lib/cannery_web/live/invite_live/index.html.heex:46
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
msgid "Edit invite for %{invite_name}" msgid "Edit invite for %{invite_name}"
msgstr "" msgstr ""
#: lib/cannery_web/live/ammo_group_live/show.ex:130 #: lib/cannery_web/live/ammo_group_live/show.ex:146
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
msgid "Edit shot group of %{shot_group_count} shots" msgid "Edit shot group of %{shot_group_count} shots"
msgstr "" msgstr ""
#: lib/cannery_web/live/range_live/index.html.heex:105 #: lib/cannery_web/live/range_live/index.html.heex:113
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
msgid "Edit shot record of %{shot_group_count} shots" msgid "Edit shot record of %{shot_group_count} shots"
msgstr "" msgstr ""
#: lib/cannery_web/live/ammo_group_live/index.html.heex:95 #: lib/cannery_web/live/ammo_group_live/index.html.heex:96
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
msgid "Stage" msgid "Stage"
msgstr "" msgstr ""
#: lib/cannery_web/live/container_live/index.html.heex:64 #: lib/cannery_web/live/container_live/index.html.heex:65
#: lib/cannery_web/live/container_live/index.html.heex:117 #: lib/cannery_web/live/container_live/index.html.heex:122
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
msgid "Tag %{container_name}" msgid "Tag %{container_name}"
msgstr "" msgstr ""
#: lib/cannery_web/live/ammo_group_live/index.html.heex:94 #: lib/cannery_web/live/ammo_group_live/index.html.heex:95
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
msgid "Unstage" msgid "Unstage"
msgstr "" msgstr ""
#: lib/cannery_web/live/ammo_type_live/index.html.heex:63 #: lib/cannery_web/live/ammo_type_live/index.html.heex:64
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
msgid "View %{ammo_type_name}" msgid "View %{ammo_type_name}"
msgstr "" msgstr ""
#: lib/cannery_web/live/ammo_group_live/index.html.heex:154
#, elixir-autogen, elixir-format
msgid "Clone ammo group of %{ammo_group_count} bullets"
msgstr ""
#: lib/cannery_web/live/ammo_group_live/index.html.heex:169
#: lib/cannery_web/live/ammo_group_live/show.html.heex:76
#, elixir-autogen, elixir-format
msgid "Delete ammo group of %{ammo_group_count} bullets"
msgstr ""
#: lib/cannery_web/live/ammo_group_live/index.html.heex:130
#, elixir-autogen, elixir-format
msgid "View ammo group of %{ammo_group_count} bullets"
msgstr ""

View File

@ -79,11 +79,11 @@ msgstr "Passwort vergessen?"
msgid "Invite someone new!" msgid "Invite someone new!"
msgstr "Laden Sie jemanden ein!" msgstr "Laden Sie jemanden ein!"
#: lib/cannery_web/components/topbar.ex:137 #: lib/cannery_web/components/core_components/topbar.html.heex:122
#: lib/cannery_web/templates/user_confirmation/new.html.heex:31 #: lib/cannery_web/templates/user_confirmation/new.html.heex:32
#: lib/cannery_web/templates/user_registration/new.html.heex:44 #: lib/cannery_web/templates/user_registration/new.html.heex:44
#: lib/cannery_web/templates/user_reset_password/edit.html.heex:45 #: lib/cannery_web/templates/user_reset_password/edit.html.heex:45
#: lib/cannery_web/templates/user_reset_password/new.html.heex:31 #: lib/cannery_web/templates/user_reset_password/new.html.heex:32
#: lib/cannery_web/templates/user_session/new.html.heex:3 #: lib/cannery_web/templates/user_session/new.html.heex:3
#: lib/cannery_web/templates/user_session/new.html.heex:28 #: lib/cannery_web/templates/user_session/new.html.heex:28
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
@ -110,19 +110,19 @@ msgstr "Neuer Behälter"
msgid "New Tag" msgid "New Tag"
msgstr "Neuer Tag" msgstr "Neuer Tag"
#: lib/cannery_web/components/topbar.ex:129 #: lib/cannery_web/components/core_components/topbar.html.heex:114
#: lib/cannery_web/templates/user_confirmation/new.html.heex:28 #: lib/cannery_web/templates/user_confirmation/new.html.heex:29
#: lib/cannery_web/templates/user_registration/new.html.heex:3 #: lib/cannery_web/templates/user_registration/new.html.heex:3
#: lib/cannery_web/templates/user_registration/new.html.heex:37 #: lib/cannery_web/templates/user_registration/new.html.heex:37
#: lib/cannery_web/templates/user_reset_password/edit.html.heex:42 #: lib/cannery_web/templates/user_reset_password/edit.html.heex:42
#: lib/cannery_web/templates/user_reset_password/new.html.heex:28 #: lib/cannery_web/templates/user_reset_password/new.html.heex:29
#: lib/cannery_web/templates/user_session/new.html.heex:39 #: lib/cannery_web/templates/user_session/new.html.heex:39
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
msgid "Register" msgid "Register"
msgstr "Registrieren" msgstr "Registrieren"
#: lib/cannery_web/templates/user_confirmation/new.html.heex:3 #: lib/cannery_web/templates/user_confirmation/new.html.heex:3
#: lib/cannery_web/templates/user_confirmation/new.html.heex:15 #: lib/cannery_web/templates/user_confirmation/new.html.heex:16
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
msgid "Resend confirmation instructions" msgid "Resend confirmation instructions"
msgstr "Bestätigungsmail erneut senden" msgstr "Bestätigungsmail erneut senden"
@ -144,17 +144,17 @@ msgstr "Passwort zurücksetzen"
msgid "Save" msgid "Save"
msgstr "Speichern" msgstr "Speichern"
#: lib/cannery_web/templates/user_reset_password/new.html.heex:15 #: lib/cannery_web/templates/user_reset_password/new.html.heex:16
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
msgid "Send instructions to reset password" msgid "Send instructions to reset password"
msgstr "Anleitung zum Passwort zurücksetzen zusenden" msgstr "Anleitung zum Passwort zurücksetzen zusenden"
#: lib/cannery_web/live/container_live/show.html.heex:78 #: lib/cannery_web/live/container_live/show.html.heex:75
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
msgid "Why not add one?" msgid "Why not add one?"
msgstr "Warum fügen Sie keine hinzu?" msgstr "Warum fügen Sie keine hinzu?"
#: lib/cannery_web/live/container_live/edit_tags_component.html.heex:50 #: lib/cannery_web/live/container_live/edit_tags_component.html.heex:51
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
msgid "Add" msgid "Add"
msgstr "Hinzufügen" msgstr "Hinzufügen"
@ -169,9 +169,9 @@ msgstr "Munition markieren"
msgid "Why not get some ready to shoot?" msgid "Why not get some ready to shoot?"
msgstr "Warum nicht einige für den Schießstand auswählen?" msgstr "Warum nicht einige für den Schießstand auswählen?"
#: lib/cannery_web/live/ammo_group_live/index.html.heex:102 #: lib/cannery_web/live/ammo_group_live/index.html.heex:103
#: lib/cannery_web/live/ammo_group_live/show.html.heex:107 #: lib/cannery_web/live/ammo_group_live/show.html.heex:103
#: lib/cannery_web/live/range_live/index.html.heex:38 #: lib/cannery_web/live/range_live/index.html.heex:45
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
msgid "Record shots" msgid "Record shots"
msgstr "Schüsse dokumentieren" msgstr "Schüsse dokumentieren"
@ -181,17 +181,12 @@ msgstr "Schüsse dokumentieren"
msgid "Add another container!" msgid "Add another container!"
msgstr "Einen weiteren Behälter hinzufügen!" msgstr "Einen weiteren Behälter hinzufügen!"
#: lib/cannery_web/live/ammo_group_live/show.html.heex:100
#, elixir-autogen, elixir-format
msgid "Move containers"
msgstr "Behälter verschieben"
#: lib/cannery_web/components/move_ammo_group_component.ex:126 #: lib/cannery_web/components/move_ammo_group_component.ex:126
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
msgid "Select" msgid "Select"
msgstr "Markieren" msgstr "Markieren"
#: lib/cannery_web/live/invite_live/index.html.heex:33 #: lib/cannery_web/live/invite_live/index.html.heex:38
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
msgid "Copy to clipboard" msgid "Copy to clipboard"
msgstr "In die Zwischenablage kopieren" msgstr "In die Zwischenablage kopieren"
@ -216,7 +211,7 @@ msgstr "Sprache wechseln"
msgid "Change language" msgid "Change language"
msgstr "Sprache wechseln" msgstr "Sprache wechseln"
#: lib/cannery_web/live/ammo_group_live/show.html.heex:59 #: lib/cannery_web/live/ammo_group_live/show.html.heex:55
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
msgid "View in Catalog" msgid "View in Catalog"
msgstr "" msgstr ""
@ -227,23 +222,25 @@ msgid "add an ammo type first"
msgstr "" msgstr ""
#: lib/cannery_web/components/move_ammo_group_component.ex:80 #: lib/cannery_web/components/move_ammo_group_component.ex:80
#: lib/cannery_web/live/ammo_group_live/index.html.heex:120
#: lib/cannery_web/live/ammo_group_live/show.html.heex:96
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
msgid "Move ammo" msgid "Move ammo"
msgstr "" msgstr ""
#: lib/cannery_web/live/invite_live/index.html.heex:85 #: lib/cannery_web/live/invite_live/index.html.heex:90
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
msgid "Set Unlimited" msgid "Set Unlimited"
msgstr "" msgstr ""
#: lib/cannery_web/live/ammo_group_live/show.html.heex:93 #: lib/cannery_web/live/ammo_group_live/show.html.heex:89
#: lib/cannery_web/live/range_live/index.html.heex:31 #: lib/cannery_web/live/range_live/index.html.heex:38
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
msgid "Stage for range" msgid "Stage for range"
msgstr "" msgstr ""
#: lib/cannery_web/live/ammo_group_live/show.html.heex:92 #: lib/cannery_web/live/ammo_group_live/show.html.heex:88
#: lib/cannery_web/live/range_live/index.html.heex:30 #: lib/cannery_web/live/range_live/index.html.heex:37
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
msgid "Unstage from range" msgid "Unstage from range"
msgstr "" msgstr ""
@ -253,106 +250,123 @@ msgstr ""
msgid "Export Data as JSON" msgid "Export Data as JSON"
msgstr "" msgstr ""
#: lib/cannery_web/live/ammo_type_live/index.html.heex:83 #: lib/cannery_web/live/ammo_type_live/index.html.heex:84
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
msgid "Clone %{ammo_type_name}" msgid "Clone %{ammo_type_name}"
msgstr "" msgstr ""
#: lib/cannery_web/live/container_live/index.html.heex:86 #: lib/cannery_web/live/container_live/index.html.heex:87
#: lib/cannery_web/live/container_live/index.html.heex:138 #: lib/cannery_web/live/container_live/index.html.heex:143
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
msgid "Clone %{container_name}" msgid "Clone %{container_name}"
msgstr "" msgstr ""
#: lib/cannery_web/live/invite_live/index.html.heex:30 #: lib/cannery_web/live/invite_live/index.html.heex:35
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
msgid "Copy invite link for %{invite_name}" msgid "Copy invite link for %{invite_name}"
msgstr "" msgstr ""
#: lib/cannery_web/live/ammo_type_live/index.html.heex:102 #: lib/cannery_web/live/ammo_type_live/index.html.heex:103
#: lib/cannery_web/live/ammo_type_live/show.html.heex:36 #: lib/cannery_web/live/ammo_type_live/show.html.heex:36
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
msgid "Delete %{ammo_type_name}" msgid "Delete %{ammo_type_name}"
msgstr "" msgstr ""
#: lib/cannery_web/live/container_live/index.html.heex:101 #: lib/cannery_web/live/container_live/index.html.heex:102
#: lib/cannery_web/live/container_live/index.html.heex:153 #: lib/cannery_web/live/container_live/index.html.heex:158
#: lib/cannery_web/live/container_live/show.html.heex:58 #: lib/cannery_web/live/container_live/show.html.heex:55
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
msgid "Delete %{container_name}" msgid "Delete %{container_name}"
msgstr "" msgstr ""
#: lib/cannery_web/live/tag_live/index.html.heex:64 #: lib/cannery_web/live/tag_live/index.html.heex:65
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
msgid "Delete %{tag_name}" msgid "Delete %{tag_name}"
msgstr "" msgstr ""
#: lib/cannery_web/live/invite_live/index.html.heex:58 #: lib/cannery_web/live/invite_live/index.html.heex:63
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
msgid "Delete invite for %{invite_name}" msgid "Delete invite for %{invite_name}"
msgstr "" msgstr ""
#: lib/cannery_web/live/ammo_group_live/show.ex:145 #: lib/cannery_web/live/ammo_group_live/show.ex:161
#: lib/cannery_web/live/range_live/index.html.heex:122 #: lib/cannery_web/live/range_live/index.html.heex:130
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
msgid "Delete shot record of %{shot_group_count} shots" msgid "Delete shot record of %{shot_group_count} shots"
msgstr "" msgstr ""
#: lib/cannery_web/live/ammo_type_live/index.html.heex:73 #: lib/cannery_web/live/ammo_type_live/index.html.heex:74
#: lib/cannery_web/live/ammo_type_live/show.html.heex:19 #: lib/cannery_web/live/ammo_type_live/show.html.heex:19
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
msgid "Edit %{ammo_type_name}" msgid "Edit %{ammo_type_name}"
msgstr "" msgstr ""
#: lib/cannery_web/live/container_live/index.html.heex:76 #: lib/cannery_web/live/container_live/index.html.heex:77
#: lib/cannery_web/live/container_live/index.html.heex:128 #: lib/cannery_web/live/container_live/index.html.heex:133
#: lib/cannery_web/live/container_live/show.html.heex:45 #: lib/cannery_web/live/container_live/show.html.heex:42
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
msgid "Edit %{container_name}" msgid "Edit %{container_name}"
msgstr "" msgstr ""
#: lib/cannery_web/live/tag_live/index.html.heex:51 #: lib/cannery_web/live/tag_live/index.html.heex:52
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
msgid "Edit %{tag_name}" msgid "Edit %{tag_name}"
msgstr "" msgstr ""
#: lib/cannery_web/live/ammo_group_live/show.html.heex:66 #: lib/cannery_web/live/ammo_group_live/index.html.heex:142
#: lib/cannery_web/live/ammo_group_live/show.html.heex:62
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
msgid "Edit ammo group of %{ammo_group_count} bullets" msgid "Edit ammo group of %{ammo_group_count} bullets"
msgstr "" msgstr ""
#: lib/cannery_web/live/invite_live/index.html.heex:41 #: lib/cannery_web/live/invite_live/index.html.heex:46
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
msgid "Edit invite for %{invite_name}" msgid "Edit invite for %{invite_name}"
msgstr "" msgstr ""
#: lib/cannery_web/live/ammo_group_live/show.ex:130 #: lib/cannery_web/live/ammo_group_live/show.ex:146
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
msgid "Edit shot group of %{shot_group_count} shots" msgid "Edit shot group of %{shot_group_count} shots"
msgstr "" msgstr ""
#: lib/cannery_web/live/range_live/index.html.heex:105 #: lib/cannery_web/live/range_live/index.html.heex:113
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
msgid "Edit shot record of %{shot_group_count} shots" msgid "Edit shot record of %{shot_group_count} shots"
msgstr "" msgstr ""
#: lib/cannery_web/live/ammo_group_live/index.html.heex:95 #: lib/cannery_web/live/ammo_group_live/index.html.heex:96
#, elixir-autogen, elixir-format, fuzzy #, elixir-autogen, elixir-format, fuzzy
msgid "Stage" msgid "Stage"
msgstr "Munition markieren" msgstr "Munition markieren"
#: lib/cannery_web/live/container_live/index.html.heex:64 #: lib/cannery_web/live/container_live/index.html.heex:65
#: lib/cannery_web/live/container_live/index.html.heex:117 #: lib/cannery_web/live/container_live/index.html.heex:122
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
msgid "Tag %{container_name}" msgid "Tag %{container_name}"
msgstr "" msgstr ""
#: lib/cannery_web/live/ammo_group_live/index.html.heex:94 #: lib/cannery_web/live/ammo_group_live/index.html.heex:95
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
msgid "Unstage" msgid "Unstage"
msgstr "" msgstr ""
#: lib/cannery_web/live/ammo_type_live/index.html.heex:63 #: lib/cannery_web/live/ammo_type_live/index.html.heex:64
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
msgid "View %{ammo_type_name}" msgid "View %{ammo_type_name}"
msgstr "" msgstr ""
#: lib/cannery_web/live/ammo_group_live/index.html.heex:154
#, elixir-autogen, elixir-format, fuzzy
msgid "Clone ammo group of %{ammo_group_count} bullets"
msgstr ""
#: lib/cannery_web/live/ammo_group_live/index.html.heex:169
#: lib/cannery_web/live/ammo_group_live/show.html.heex:76
#, elixir-autogen, elixir-format, fuzzy
msgid "Delete ammo group of %{ammo_group_count} bullets"
msgstr ""
#: lib/cannery_web/live/ammo_group_live/index.html.heex:130
#, elixir-autogen, elixir-format, fuzzy
msgid "View ammo group of %{ammo_group_count} bullets"
msgstr ""

View File

@ -14,23 +14,23 @@ msgstr ""
"Plural-Forms: nplurals=2; plural=n != 1;\n" "Plural-Forms: nplurals=2; plural=n != 1;\n"
"X-Generator: Weblate 4.12.1\n" "X-Generator: Weblate 4.12.1\n"
#: lib/cannery_web/live/home_live.html.heex:46 #: lib/cannery_web/live/home_live.html.heex:44
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
msgid "Access from any internet-capable device" msgid "Access from any internet-capable device"
msgstr "Zugriff von jedem Internet-fähigen Gerät" msgstr "Zugriff von jedem Internet-fähigen Gerät"
#: lib/cannery_web/live/invite_live/index.html.heex:94 #: lib/cannery_web/live/invite_live/index.html.heex:99
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
msgid "Admins" msgid "Admins"
msgstr "Admins" msgstr "Admins"
#: lib/cannery_web/live/home_live.html.heex:60 #: lib/cannery_web/live/home_live.html.heex:58
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
msgid "Admins:" msgid "Admins:"
msgstr "Admins:" msgstr "Admins:"
#: lib/cannery_web/components/core_components/topbar.html.heex:58
#: lib/cannery_web/components/shot_group_table_component.ex:41 #: lib/cannery_web/components/shot_group_table_component.ex:41
#: lib/cannery_web/components/topbar.ex:73
#: lib/cannery_web/live/ammo_group_live/index.ex:70 #: lib/cannery_web/live/ammo_group_live/index.ex:70
#: lib/cannery_web/live/ammo_group_live/index.ex:79 #: lib/cannery_web/live/ammo_group_live/index.ex:79
#: lib/cannery_web/live/ammo_group_live/index.html.heex:3 #: lib/cannery_web/live/ammo_group_live/index.html.heex:3
@ -97,9 +97,9 @@ msgstr "Gehäusematerial"
msgid "Container" msgid "Container"
msgstr "Behälter" msgstr "Behälter"
#: lib/cannery_web/components/topbar.ex:57 #: lib/cannery_web/components/core_components/topbar.html.heex:42
#: lib/cannery_web/live/container_live/index.ex:49 #: lib/cannery_web/live/container_live/index.ex:45
#: lib/cannery_web/live/container_live/index.ex:58 #: lib/cannery_web/live/container_live/index.ex:54
#: lib/cannery_web/live/container_live/index.html.heex:3 #: lib/cannery_web/live/container_live/index.html.heex:3
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
msgid "Containers" msgid "Containers"
@ -117,36 +117,36 @@ msgstr "Korrosiv"
msgid "Count" msgid "Count"
msgstr "Anzahl" msgstr "Anzahl"
#: lib/cannery_web/components/ammo_group_card.ex:39 #: lib/cannery_web/components/core_components/ammo_group_card.html.heex:16
#: lib/cannery_web/live/ammo_group_live/show.html.heex:8 #: lib/cannery_web/live/ammo_group_live/show.html.heex:8
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
msgid "Count:" msgid "Count:"
msgstr "Anzahl:" msgstr "Anzahl:"
#: lib/cannery_web/components/container_table_component.ex:47 #: lib/cannery_web/components/container_table_component.ex:46
#: lib/cannery_web/live/ammo_type_live/form_component.html.heex:25 #: lib/cannery_web/live/ammo_type_live/form_component.html.heex:25
#: lib/cannery_web/live/container_live/form_component.html.heex:28 #: lib/cannery_web/live/container_live/form_component.html.heex:28
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
msgid "Description" msgid "Description"
msgstr "Beschreibung" msgstr "Beschreibung"
#: lib/cannery_web/components/container_card.ex:39 #: lib/cannery_web/components/core_components/container_card.html.heex:16
#: lib/cannery_web/live/container_live/show.html.heex:7 #: lib/cannery_web/live/container_live/show.html.heex:7
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
msgid "Description:" msgid "Description:"
msgstr "Beschreibung:" msgstr "Beschreibung:"
#: lib/cannery_web/live/home_live.html.heex:23 #: lib/cannery_web/live/home_live.html.heex:22
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
msgid "Easy to Use:" msgid "Easy to Use:"
msgstr "Einfache Anwendung:" msgstr "Einfache Anwendung:"
#: lib/cannery_web/live/invite_live/index.ex:34 #: lib/cannery_web/live/invite_live/index.ex:33
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
msgid "Edit Invite" msgid "Edit Invite"
msgstr "Einladung bearbeiten" msgstr "Einladung bearbeiten"
#: lib/cannery_web/live/tag_live/index.ex:28 #: lib/cannery_web/live/tag_live/index.ex:27
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
msgid "Edit Tag" msgid "Edit Tag"
msgstr "Tag bearbeiten" msgstr "Tag bearbeiten"
@ -173,23 +173,23 @@ msgstr "Körner"
msgid "Incendiary" msgid "Incendiary"
msgstr "Brandmunition" msgstr "Brandmunition"
#: lib/cannery_web/live/home_live.html.heex:55 #: lib/cannery_web/live/home_live.html.heex:53
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
msgid "Instance Information" msgid "Instance Information"
msgstr "Instanzinformationen" msgstr "Instanzinformationen"
#: lib/cannery_web/components/invite_card.ex:42 #: lib/cannery_web/components/core_components/invite_card.html.heex:21
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
msgid "Invite Disabled" msgid "Invite Disabled"
msgstr "Einladung deaktiviert" msgstr "Einladung deaktiviert"
#: lib/cannery_web/live/home_live.html.heex:82 #: lib/cannery_web/live/home_live.html.heex:84
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
msgid "Invite Only" msgid "Invite Only"
msgstr "Nur mit Einladung" msgstr "Nur mit Einladung"
#: lib/cannery_web/components/topbar.ex:89 #: lib/cannery_web/components/core_components/topbar.html.heex:74
#: lib/cannery_web/live/invite_live/index.ex:42 #: lib/cannery_web/live/invite_live/index.ex:41
#: lib/cannery_web/live/invite_live/index.html.heex:3 #: lib/cannery_web/live/invite_live/index.html.heex:3
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
msgid "Invites" msgid "Invites"
@ -200,14 +200,14 @@ msgstr "Einladungen"
msgid "Keep me logged in for 60 days" msgid "Keep me logged in for 60 days"
msgstr "Für 60 Tage eingeloggt bleiben" msgstr "Für 60 Tage eingeloggt bleiben"
#: lib/cannery_web/components/container_table_component.ex:48 #: lib/cannery_web/components/container_table_component.ex:47
#: lib/cannery_web/components/move_ammo_group_component.ex:69 #: lib/cannery_web/components/move_ammo_group_component.ex:69
#: lib/cannery_web/live/container_live/form_component.html.heex:43 #: lib/cannery_web/live/container_live/form_component.html.heex:43
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
msgid "Location" msgid "Location"
msgstr "Standort" msgstr "Standort"
#: lib/cannery_web/components/container_card.ex:49 #: lib/cannery_web/components/core_components/container_card.html.heex:26
#: lib/cannery_web/live/container_live/show.html.heex:17 #: lib/cannery_web/live/container_live/show.html.heex:17
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
msgid "Location:" msgid "Location:"
@ -235,7 +235,7 @@ msgid "My cool ammo can"
msgstr "Meine coole Munitionskiste" msgstr "Meine coole Munitionskiste"
#: lib/cannery_web/components/ammo_type_table_component.ex:45 #: lib/cannery_web/components/ammo_type_table_component.ex:45
#: lib/cannery_web/components/container_table_component.ex:46 #: lib/cannery_web/components/container_table_component.ex:45
#: lib/cannery_web/live/ammo_type_live/form_component.html.heex:21 #: lib/cannery_web/live/ammo_type_live/form_component.html.heex:21
#: lib/cannery_web/live/container_live/form_component.html.heex:21 #: lib/cannery_web/live/container_live/form_component.html.heex:21
#: lib/cannery_web/live/invite_live/form_component.html.heex:21 #: lib/cannery_web/live/invite_live/form_component.html.heex:21
@ -250,35 +250,35 @@ msgstr "Name"
msgid "New Ammo type" msgid "New Ammo type"
msgstr "Neuer Munitionstyp" msgstr "Neuer Munitionstyp"
#: lib/cannery_web/live/container_live/index.ex:36 #: lib/cannery_web/live/container_live/index.ex:32
#: lib/cannery_web/live/container_live/index.ex:43 #: lib/cannery_web/live/container_live/index.ex:39
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
msgid "New Container" msgid "New Container"
msgstr "Neuer Behälter" msgstr "Neuer Behälter"
#: lib/cannery_web/live/invite_live/index.ex:38 #: lib/cannery_web/live/invite_live/index.ex:37
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
msgid "New Invite" msgid "New Invite"
msgstr "Neue Einladung" msgstr "Neue Einladung"
#: lib/cannery_web/live/tag_live/index.ex:36 #: lib/cannery_web/live/tag_live/index.ex:35
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
msgid "New Tag" msgid "New Tag"
msgstr "Neuer Tag" msgstr "Neuer Tag"
#: lib/cannery_web/live/ammo_group_live/index.html.heex:10 #: lib/cannery_web/live/ammo_group_live/index.html.heex:10
#: lib/cannery_web/live/ammo_group_live/index.html.heex:70 #: lib/cannery_web/live/ammo_group_live/index.html.heex:71
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
msgid "No Ammo" msgid "No Ammo"
msgstr "Keine Munition" msgstr "Keine Munition"
#: lib/cannery_web/live/ammo_type_live/show.html.heex:169 #: lib/cannery_web/live/ammo_type_live/show.html.heex:167
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
msgid "No ammo for this type" msgid "No ammo for this type"
msgstr "Keine Munition dieser Art" msgstr "Keine Munition dieser Art"
#: lib/cannery_web/live/container_live/index.html.heex:8 #: lib/cannery_web/live/container_live/index.html.heex:8
#: lib/cannery_web/live/container_live/index.html.heex:46 #: lib/cannery_web/live/container_live/index.html.heex:47
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
msgid "No containers" msgid "No containers"
msgstr "Kein Behälter" msgstr "Kein Behälter"
@ -290,7 +290,7 @@ msgstr "Keine Einladung"
#: lib/cannery_web/live/container_live/edit_tags_component.html.heex:29 #: lib/cannery_web/live/container_live/edit_tags_component.html.heex:29
#: lib/cannery_web/live/tag_live/index.html.heex:10 #: lib/cannery_web/live/tag_live/index.html.heex:10
#: lib/cannery_web/live/tag_live/index.html.heex:42 #: lib/cannery_web/live/tag_live/index.html.heex:43
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
msgid "No tags" msgid "No tags"
msgstr "Keine Tags" msgstr "Keine Tags"
@ -299,13 +299,13 @@ msgstr "Keine Tags"
#: lib/cannery_web/components/ammo_group_table_component.ex:81 #: lib/cannery_web/components/ammo_group_table_component.ex:81
#: lib/cannery_web/components/shot_group_table_component.ex:43 #: lib/cannery_web/components/shot_group_table_component.ex:43
#: lib/cannery_web/live/ammo_group_live/form_component.html.heex:50 #: lib/cannery_web/live/ammo_group_live/form_component.html.heex:50
#: lib/cannery_web/live/ammo_group_live/show.ex:90 #: lib/cannery_web/live/ammo_group_live/show.ex:92
#: lib/cannery_web/live/range_live/form_component.html.heex:30 #: lib/cannery_web/live/range_live/form_component.html.heex:30
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
msgid "Notes" msgid "Notes"
msgstr "Bemerkungen" msgstr "Bemerkungen"
#: lib/cannery_web/components/ammo_group_card.ex:52 #: lib/cannery_web/components/core_components/ammo_group_card.html.heex:26
#: lib/cannery_web/live/ammo_group_live/show.html.heex:24 #: lib/cannery_web/live/ammo_group_live/show.html.heex:24
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
msgid "Notes:" msgid "Notes:"
@ -328,7 +328,7 @@ msgstr "Druck"
msgid "Price paid" msgid "Price paid"
msgstr "Kaufpreis" msgstr "Kaufpreis"
#: lib/cannery_web/components/ammo_group_card.ex:68 #: lib/cannery_web/components/core_components/ammo_group_card.html.heex:41
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
msgid "Price paid:" msgid "Price paid:"
msgstr "Kaufpreis:" msgstr "Kaufpreis:"
@ -339,17 +339,17 @@ msgstr "Kaufpreis:"
msgid "Primer type" msgid "Primer type"
msgstr "Zündertyp" msgstr "Zündertyp"
#: lib/cannery_web/live/home_live.html.heex:81 #: lib/cannery_web/live/home_live.html.heex:83
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
msgid "Public Signups" msgid "Public Signups"
msgstr "Öffentliche Registrierung" msgstr "Öffentliche Registrierung"
#: lib/cannery_web/live/home_live.html.heex:33 #: lib/cannery_web/live/home_live.html.heex:32
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
msgid "Secure:" msgid "Secure:"
msgstr "Sicher:" msgstr "Sicher:"
#: lib/cannery_web/live/home_live.html.heex:36 #: lib/cannery_web/live/home_live.html.heex:35
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
msgid "Self-host your own instance, or use an instance from someone you trust." msgid "Self-host your own instance, or use an instance from someone you trust."
msgstr "" msgstr ""
@ -362,7 +362,7 @@ msgstr ""
msgid "Settings" msgid "Settings"
msgstr "Einstellungen" msgstr "Einstellungen"
#: lib/cannery_web/live/home_live.html.heex:43 #: lib/cannery_web/live/home_live.html.heex:41
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
msgid "Simple:" msgid "Simple:"
msgstr "Einfach:" msgstr "Einfach:"
@ -372,15 +372,15 @@ msgstr "Einfach:"
msgid "Steel" msgid "Steel"
msgstr "Stahl" msgstr "Stahl"
#: lib/cannery_web/live/ammo_group_live/show.html.heex:117 #: lib/cannery_web/live/ammo_group_live/show.html.heex:113
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
msgid "Stored in" msgid "Stored in"
msgstr "Gelagert in" msgstr "Gelagert in"
#: lib/cannery_web/components/container_table_component.ex:52 #: lib/cannery_web/components/container_table_component.ex:66
#: lib/cannery_web/components/topbar.ex:49 #: lib/cannery_web/components/core_components/topbar.html.heex:34
#: lib/cannery_web/live/tag_live/index.ex:44 #: lib/cannery_web/live/tag_live/index.ex:43
#: lib/cannery_web/live/tag_live/index.ex:54 #: lib/cannery_web/live/tag_live/index.ex:53
#: lib/cannery_web/live/tag_live/index.html.heex:3 #: lib/cannery_web/live/tag_live/index.html.heex:3
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
msgid "Tags" msgid "Tags"
@ -407,20 +407,20 @@ msgstr "Die selbst-gehostete Website zur Verwaltung von Schusswaffen"
msgid "Tracer" msgid "Tracer"
msgstr "Leuchtspur" msgstr "Leuchtspur"
#: lib/cannery_web/components/container_table_component.ex:49 #: lib/cannery_web/components/container_table_component.ex:48
#: lib/cannery_web/components/move_ammo_group_component.ex:68 #: lib/cannery_web/components/move_ammo_group_component.ex:68
#: lib/cannery_web/live/container_live/form_component.html.heex:36 #: lib/cannery_web/live/container_live/form_component.html.heex:36
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
msgid "Type" msgid "Type"
msgstr "Art" msgstr "Art"
#: lib/cannery_web/components/container_card.ex:44 #: lib/cannery_web/components/core_components/container_card.html.heex:21
#: lib/cannery_web/live/container_live/show.html.heex:12 #: lib/cannery_web/live/container_live/show.html.heex:12
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
msgid "Type:" msgid "Type:"
msgstr "Art:" msgstr "Art:"
#: lib/cannery_web/live/invite_live/index.html.heex:122 #: lib/cannery_web/live/invite_live/index.html.heex:127
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
msgid "Users" msgid "Users"
msgstr "Benutzer" msgstr "Benutzer"
@ -430,18 +430,18 @@ msgstr "Benutzer"
msgid "Uses left" msgid "Uses left"
msgstr "Verbleibende Nutzung" msgstr "Verbleibende Nutzung"
#: lib/cannery_web/live/home_live.html.heex:37 #: lib/cannery_web/live/home_live.html.heex:36
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
msgid "Your data stays with you, period" msgid "Your data stays with you, period"
msgstr "Ihre Daten bleiben bei Ihnen, Punkt" msgstr "Ihre Daten bleiben bei Ihnen, Punkt"
#: lib/cannery_web/live/container_live/show.html.heex:70 #: lib/cannery_web/live/container_live/show.html.heex:67
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
msgid "No tags for this container" msgid "No tags for this container"
msgstr "Keine Tags für diesen Behälter" msgstr "Keine Tags für diesen Behälter"
#: lib/cannery_web/components/ammo_group_table_component.ex:72 #: lib/cannery_web/components/ammo_group_table_component.ex:72
#: lib/cannery_web/components/topbar.ex:81 #: lib/cannery_web/components/core_components/topbar.html.heex:66
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
msgid "Range" msgid "Range"
msgstr "Schießplatz" msgstr "Schießplatz"
@ -453,7 +453,7 @@ msgstr "Range Day"
#: lib/cannery_web/components/add_shot_group_component.html.heex:46 #: lib/cannery_web/components/add_shot_group_component.html.heex:46
#: lib/cannery_web/components/shot_group_table_component.ex:44 #: lib/cannery_web/components/shot_group_table_component.ex:44
#: lib/cannery_web/live/ammo_group_live/show.ex:91 #: lib/cannery_web/live/ammo_group_live/show.ex:93
#: lib/cannery_web/live/range_live/form_component.html.heex:37 #: lib/cannery_web/live/range_live/form_component.html.heex:37
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
msgid "Date" msgid "Date"
@ -475,19 +475,19 @@ msgstr "Keine Munition selektiert"
msgid "Record shots" msgid "Record shots"
msgstr "Schüsse dokumentieren" msgstr "Schüsse dokumentieren"
#: lib/cannery_web/live/ammo_group_live/show.ex:41 #: lib/cannery_web/live/ammo_group_live/show.ex:42
#: lib/cannery_web/live/range_live/index.ex:41 #: lib/cannery_web/live/range_live/index.ex:40
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
msgid "Edit Shot Records" msgid "Edit Shot Records"
msgstr "Schießkladde editieren" msgstr "Schießkladde editieren"
#: lib/cannery_web/live/range_live/index.ex:49 #: lib/cannery_web/live/range_live/index.ex:48
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
msgid "New Shot Records" msgid "New Shot Records"
msgstr "Neue Schießkladde" msgstr "Neue Schießkladde"
#: lib/cannery_web/live/range_live/index.html.heex:48 #: lib/cannery_web/live/range_live/index.html.heex:55
#: lib/cannery_web/live/range_live/index.html.heex:89 #: lib/cannery_web/live/range_live/index.html.heex:97
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
msgid "No shots recorded" msgid "No shots recorded"
msgstr "Keine Schüsse dokumentiert" msgstr "Keine Schüsse dokumentiert"
@ -499,20 +499,19 @@ msgid "Rounds left"
msgstr "Patronen verbleibend" msgstr "Patronen verbleibend"
#: lib/cannery_web/components/shot_group_table_component.ex:42 #: lib/cannery_web/components/shot_group_table_component.ex:42
#: lib/cannery_web/live/ammo_group_live/show.ex:89 #: lib/cannery_web/live/ammo_group_live/show.ex:91
#: lib/cannery_web/live/range_live/index.html.heex:62 #: lib/cannery_web/live/range_live/index.html.heex:69
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
msgid "Rounds shot" msgid "Rounds shot"
msgstr "Patronen abgefeuert" msgstr "Patronen abgefeuert"
#: lib/cannery_web/live/range_live/index.ex:57 #: lib/cannery_web/live/range_live/index.ex:56
#: lib/cannery_web/live/range_live/index.ex:67 #: lib/cannery_web/live/range_live/index.ex:66
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
msgid "Shot Records" msgid "Shot Records"
msgstr "Schießkladde" msgstr "Schießkladde"
#: lib/cannery_web/live/ammo_group_live/index.ex:38 #: lib/cannery_web/live/ammo_group_live/index.ex:38
#: lib/cannery_web/live/ammo_group_live/index.html.heex:119
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
msgid "Move ammo" msgid "Move ammo"
msgstr "Munition verschieben" msgstr "Munition verschieben"
@ -522,18 +521,18 @@ msgstr "Munition verschieben"
msgid "No other containers" msgid "No other containers"
msgstr "Kein weiterer Behälter" msgstr "Kein weiterer Behälter"
#: lib/cannery_web/live/range_live/index.html.heex:53 #: lib/cannery_web/live/range_live/index.html.heex:60
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
msgid "Shot log" msgid "Shot log"
msgstr "Schießkladde" msgstr "Schießkladde"
#: lib/cannery_web/components/ammo_group_card.ex:69
#: lib/cannery_web/components/ammo_group_card.ex:76
#: lib/cannery_web/components/ammo_group_table_component.ex:153 #: lib/cannery_web/components/ammo_group_table_component.ex:153
#: lib/cannery_web/components/ammo_group_table_component.ex:225 #: lib/cannery_web/components/ammo_group_table_component.ex:229
#: lib/cannery_web/components/ammo_type_table_component.ex:180 #: lib/cannery_web/components/ammo_type_table_component.ex:224
#: lib/cannery_web/components/core_components/ammo_group_card.html.heex:42
#: lib/cannery_web/components/core_components/ammo_group_card.html.heex:47
#: lib/cannery_web/live/ammo_group_live/show.html.heex:37 #: lib/cannery_web/live/ammo_group_live/show.html.heex:37
#: lib/cannery_web/live/ammo_group_live/show.html.heex:44 #: lib/cannery_web/live/ammo_group_live/show.html.heex:42
#: lib/cannery_web/live/ammo_type_live/show.html.heex:139 #: lib/cannery_web/live/ammo_type_live/show.html.heex:139
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
msgid "$%{amount}" msgid "$%{amount}"
@ -603,28 +602,28 @@ msgstr "Patronenhülsenform"
msgid "Reconnecting..." msgid "Reconnecting..."
msgstr "Neu verbinden..." msgstr "Neu verbinden..."
#: lib/cannery_web/live/container_live/index.ex:32 #: lib/cannery_web/live/container_live/index.ex:28
#: lib/cannery_web/live/container_live/show.ex:110 #: lib/cannery_web/live/container_live/show.ex:108
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
msgid "Edit %{name}" msgid "Edit %{name}"
msgstr "%{name} bearbeiten" msgstr "%{name} bearbeiten"
#: lib/cannery_web/live/container_live/index.ex:69 #: lib/cannery_web/live/container_live/index.ex:63
#: lib/cannery_web/live/container_live/show.ex:111 #: lib/cannery_web/live/container_live/show.ex:109
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
msgid "Edit %{name} tags" msgid "Edit %{name} tags"
msgstr "Editiere %{name} Tags" msgstr "Editiere %{name} Tags"
#: lib/cannery_web/components/container_card.ex:60 #: lib/cannery_web/components/core_components/container_card.html.heex:37
#: lib/cannery_web/live/ammo_type_live/show.html.heex:70 #: lib/cannery_web/live/ammo_type_live/show.html.heex:70
#: lib/cannery_web/live/container_live/show.html.heex:35 #: lib/cannery_web/live/container_live/show.html.heex:33
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
msgid "Rounds:" msgid "Rounds:"
msgstr "Patronen:" msgstr "Patronen:"
#: lib/cannery_web/components/ammo_group_table_component.ex:222 #: lib/cannery_web/components/ammo_group_table_component.ex:226
#: lib/cannery_web/components/ammo_type_table_component.ex:179 #: lib/cannery_web/components/ammo_type_table_component.ex:223
#: lib/cannery_web/live/ammo_type_live/show.html.heex:145 #: lib/cannery_web/live/ammo_type_live/show.html.heex:143
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
msgid "No cost information" msgid "No cost information"
msgstr "Keine Preisinformationen" msgstr "Keine Preisinformationen"
@ -634,7 +633,7 @@ msgstr "Keine Preisinformationen"
msgid "% left" msgid "% left"
msgstr "% verbleibend" msgstr "% verbleibend"
#: lib/cannery_web/live/ammo_group_live/show.html.heex:43 #: lib/cannery_web/live/ammo_group_live/show.html.heex:41
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
msgid "Current value:" msgid "Current value:"
msgstr "Derzeitiger Wert:" msgstr "Derzeitiger Wert:"
@ -654,7 +653,7 @@ msgstr "Ursprüngliche Anzahl:"
msgid "Percentage left:" msgid "Percentage left:"
msgstr "Prozent verbleibend:" msgstr "Prozent verbleibend:"
#: lib/cannery_web/live/ammo_group_live/show.html.heex:130 #: lib/cannery_web/live/ammo_group_live/show.html.heex:126
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
msgid "Rounds used" msgid "Rounds used"
msgstr "Patronen verbraucht" msgstr "Patronen verbraucht"
@ -674,7 +673,7 @@ msgstr "Passwort vergessen?"
msgid "Log in" msgid "Log in"
msgstr "Einloggen" msgstr "Einloggen"
#: lib/cannery_web/controllers/user_registration_controller.ex:32 #: lib/cannery_web/controllers/user_registration_controller.ex:33
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
msgid "Register" msgid "Register"
msgstr "Registrieren" msgstr "Registrieren"
@ -684,8 +683,8 @@ msgstr "Registrieren"
msgid "Reset your password" msgid "Reset your password"
msgstr "Passwort zurücksetzen" msgstr "Passwort zurücksetzen"
#: lib/cannery_web/live/ammo_group_live/show.ex:40 #: lib/cannery_web/live/ammo_group_live/show.ex:41
#: lib/cannery_web/live/range_live/index.ex:33 #: lib/cannery_web/live/range_live/index.ex:32
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
msgid "Record Shots" msgid "Record Shots"
msgstr "Schüsse dokumentieren" msgstr "Schüsse dokumentieren"
@ -721,27 +720,27 @@ msgstr "Deutsch"
msgid "Language" msgid "Language"
msgstr "Sprache" msgstr "Sprache"
#: lib/cannery_web/live/home_live.html.heex:107 #: lib/cannery_web/live/home_live.html.heex:109
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
msgid "Get involved!" msgid "Get involved!"
msgstr "Mach mit!" msgstr "Mach mit!"
#: lib/cannery_web/live/home_live.html.heex:128 #: lib/cannery_web/live/home_live.html.heex:130
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
msgid "Help translate" msgid "Help translate"
msgstr "Hilf beim Übersetzen" msgstr "Hilf beim Übersetzen"
#: lib/cannery_web/live/home_live.html.heex:139 #: lib/cannery_web/live/home_live.html.heex:141
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
msgid "Report bugs or request features" msgid "Report bugs or request features"
msgstr "Sende Bugs oder Erweiterungsvorschläge" msgstr "Sende Bugs oder Erweiterungsvorschläge"
#: lib/cannery_web/live/home_live.html.heex:117 #: lib/cannery_web/live/home_live.html.heex:119
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
msgid "View the source code" msgid "View the source code"
msgstr "Quellcode ansehen" msgstr "Quellcode ansehen"
#: lib/cannery_web/components/topbar.ex:65 #: lib/cannery_web/components/core_components/topbar.html.heex:50
#: lib/cannery_web/live/ammo_type_live/index.ex:52 #: lib/cannery_web/live/ammo_type_live/index.ex:52
#: lib/cannery_web/live/ammo_type_live/index.ex:62 #: lib/cannery_web/live/ammo_type_live/index.ex:62
#: lib/cannery_web/live/ammo_type_live/index.html.heex:3 #: lib/cannery_web/live/ammo_type_live/index.html.heex:3
@ -749,39 +748,39 @@ msgstr "Quellcode ansehen"
msgid "Catalog" msgid "Catalog"
msgstr "" msgstr ""
#: lib/cannery_web/live/ammo_group_live/show.ex:44 #: lib/cannery_web/live/ammo_group_live/show.ex:45
#, elixir-autogen, elixir-format, fuzzy #, elixir-autogen, elixir-format, fuzzy
msgid "Edit Ammo" msgid "Edit Ammo"
msgstr "Munitionstyp bearbeiten" msgstr "Munitionstyp bearbeiten"
#: lib/cannery_web/live/ammo_group_live/show.ex:42 #: lib/cannery_web/live/ammo_group_live/show.ex:43
#, elixir-autogen, elixir-format, fuzzy #, elixir-autogen, elixir-format, fuzzy
msgid "Move Ammo" msgid "Move Ammo"
msgstr "Munition verschieben" msgstr "Munition verschieben"
#: lib/cannery_web/live/container_live/show.html.heex:115 #: lib/cannery_web/live/container_live/show.html.heex:112
#, elixir-autogen, elixir-format, fuzzy #, elixir-autogen, elixir-format, fuzzy
msgid "No ammo in this container" msgid "No ammo in this container"
msgstr "Keine Munitionsgruppe in diesem Behälter" msgstr "Keine Munitionsgruppe in diesem Behälter"
#: lib/cannery_web/live/ammo_group_live/show.ex:43 #: lib/cannery_web/live/ammo_group_live/show.ex:44
#, elixir-autogen, elixir-format, fuzzy #, elixir-autogen, elixir-format, fuzzy
msgid "Show Ammo" msgid "Show Ammo"
msgstr "Zeige Munitionsarten" msgstr "Zeige Munitionsarten"
#: lib/cannery_web/live/ammo_group_live/show.html.heex:122 #: lib/cannery_web/live/ammo_group_live/show.html.heex:118
#, elixir-autogen, elixir-format, fuzzy #, elixir-autogen, elixir-format, fuzzy
msgid "This ammo is not in a container" msgid "This ammo is not in a container"
msgstr "Diese Munitionsgruppe ist nicht in einem Behälter" msgstr "Diese Munitionsgruppe ist nicht in einem Behälter"
#: lib/cannery_web/components/container_card.ex:55 #: lib/cannery_web/components/core_components/container_card.html.heex:32
#: lib/cannery_web/live/ammo_type_live/show.html.heex:98 #: lib/cannery_web/live/ammo_type_live/show.html.heex:98
#: lib/cannery_web/live/container_live/show.html.heex:26 #: lib/cannery_web/live/container_live/show.html.heex:23
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
msgid "Packs:" msgid "Packs:"
msgstr "" msgstr ""
#: lib/cannery_web/components/topbar.ex:25 #: lib/cannery_web/components/core_components/topbar.html.heex:10
#: lib/cannery_web/live/home_live.html.heex:4 #: lib/cannery_web/live/home_live.html.heex:4
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
msgid "Cannery logo" msgid "Cannery logo"
@ -797,45 +796,45 @@ msgstr ""
msgid "Leave \"Uses left\" blank to make invite unlimited" msgid "Leave \"Uses left\" blank to make invite unlimited"
msgstr "" msgstr ""
#: lib/cannery_web/components/ammo_group_card.ex:83 #: lib/cannery_web/components/core_components/ammo_group_card.html.heex:54
#, elixir-autogen, elixir-format, fuzzy #, elixir-autogen, elixir-format, fuzzy
msgid "Container:" msgid "Container:"
msgstr "Behälter" msgstr "Behälter"
#: lib/cannery_web/live/ammo_group_live/index.html.heex:63 #: lib/cannery_web/live/ammo_group_live/index.html.heex:64
#: lib/cannery_web/live/ammo_type_live/index.html.heex:38 #: lib/cannery_web/live/ammo_type_live/index.html.heex:39
#: lib/cannery_web/live/ammo_type_live/show.html.heex:155 #: lib/cannery_web/live/ammo_type_live/show.html.heex:153
#: lib/cannery_web/live/container_live/show.html.heex:101 #: lib/cannery_web/live/container_live/show.html.heex:98
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
msgid "Show used" msgid "Show used"
msgstr "" msgstr ""
#: lib/cannery_web/components/ammo_group_table_component.ex:193 #: lib/cannery_web/components/ammo_group_table_component.ex:187
#: lib/cannery_web/live/ammo_group_live/show.html.heex:19 #: lib/cannery_web/live/ammo_group_live/show.html.heex:19
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
msgid "%{percentage}%" msgid "%{percentage}%"
msgstr "" msgstr ""
#: lib/cannery_web/live/range_live/index.ex:134 #: lib/cannery_web/live/range_live/index.ex:135
#, elixir-autogen, elixir-format, fuzzy #, elixir-autogen, elixir-format, fuzzy
msgid "Rounds shot: %{count}" msgid "Rounds shot: %{count}"
msgstr "Patronen abgefeuert" msgstr "Patronen abgefeuert"
#: lib/cannery_web/components/ammo_type_table_component.ex:100 #: lib/cannery_web/components/ammo_type_table_component.ex:100
#: lib/cannery_web/components/container_table_component.ex:50 #: lib/cannery_web/components/container_table_component.ex:64
#, elixir-autogen, elixir-format, fuzzy #, elixir-autogen, elixir-format, fuzzy
msgid "Packs" msgid "Packs"
msgstr "" msgstr ""
#: lib/cannery_web/components/ammo_type_table_component.ex:80 #: lib/cannery_web/components/ammo_type_table_component.ex:80
#: lib/cannery_web/components/container_table_component.ex:51 #: lib/cannery_web/components/container_table_component.ex:65
#, elixir-autogen, elixir-format, fuzzy #, elixir-autogen, elixir-format, fuzzy
msgid "Rounds" msgid "Rounds"
msgstr "Patronen:" msgstr "Patronen:"
#: lib/cannery_web/live/ammo_type_live/show.html.heex:161 #: lib/cannery_web/live/ammo_type_live/show.html.heex:159
#: lib/cannery_web/live/container_live/index.html.heex:38 #: lib/cannery_web/live/container_live/index.html.heex:39
#: lib/cannery_web/live/container_live/show.html.heex:107 #: lib/cannery_web/live/container_live/show.html.heex:104
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
msgid "View as table" msgid "View as table"
msgstr "" msgstr ""
@ -885,102 +884,102 @@ msgstr ""
msgid "Used up!" msgid "Used up!"
msgstr "" msgstr ""
#: lib/cannery_web/live/range_live/index.html.heex:64 #: lib/cannery_web/live/range_live/index.html.heex:71
#, elixir-autogen, elixir-format, fuzzy #, elixir-autogen, elixir-format, fuzzy
msgid "Rounds shot chart" msgid "Rounds shot chart"
msgstr "Patronen abgefeuert" msgstr "Patronen abgefeuert"
#: lib/cannery_web/live/ammo_type_live/show.ex:27 #: lib/cannery_web/live/ammo_type_live/show.ex:26
#, elixir-autogen, elixir-format, fuzzy #, elixir-autogen, elixir-format, fuzzy
msgid "Blank:" msgid "Blank:"
msgstr "Knallpatrone" msgstr "Knallpatrone"
#: lib/cannery_web/live/ammo_type_live/show.ex:13 #: lib/cannery_web/live/ammo_type_live/show.ex:12
#, elixir-autogen, elixir-format, fuzzy #, elixir-autogen, elixir-format, fuzzy
msgid "Bullet core:" msgid "Bullet core:"
msgstr "Projektilkern" msgstr "Projektilkern"
#: lib/cannery_web/live/ammo_type_live/show.ex:12 #: lib/cannery_web/live/ammo_type_live/show.ex:11
#, elixir-autogen, elixir-format, fuzzy #, elixir-autogen, elixir-format, fuzzy
msgid "Bullet type:" msgid "Bullet type:"
msgstr "Patronenart" msgstr "Patronenart"
#: lib/cannery_web/live/ammo_type_live/show.ex:15 #: lib/cannery_web/live/ammo_type_live/show.ex:14
#, elixir-autogen, elixir-format, fuzzy #, elixir-autogen, elixir-format, fuzzy
msgid "Caliber:" msgid "Caliber:"
msgstr "Kaliber" msgstr "Kaliber"
#: lib/cannery_web/live/ammo_type_live/show.ex:14 #: lib/cannery_web/live/ammo_type_live/show.ex:13
#, elixir-autogen, elixir-format, fuzzy #, elixir-autogen, elixir-format, fuzzy
msgid "Cartridge:" msgid "Cartridge:"
msgstr "Patrone" msgstr "Patrone"
#: lib/cannery_web/live/ammo_type_live/show.ex:16 #: lib/cannery_web/live/ammo_type_live/show.ex:15
#, elixir-autogen, elixir-format, fuzzy #, elixir-autogen, elixir-format, fuzzy
msgid "Case material:" msgid "Case material:"
msgstr "Gehäusematerial" msgstr "Gehäusematerial"
#: lib/cannery_web/live/ammo_type_live/show.ex:28 #: lib/cannery_web/live/ammo_type_live/show.ex:27
#, elixir-autogen, elixir-format, fuzzy #, elixir-autogen, elixir-format, fuzzy
msgid "Corrosive:" msgid "Corrosive:"
msgstr "Korrosiv" msgstr "Korrosiv"
#: lib/cannery_web/live/ammo_type_live/show.ex:24 #: lib/cannery_web/live/ammo_type_live/show.ex:23
#, elixir-autogen, elixir-format, fuzzy #, elixir-autogen, elixir-format, fuzzy
msgid "Firing type:" msgid "Firing type:"
msgstr "Patronenhülsenform" msgstr "Patronenhülsenform"
#: lib/cannery_web/live/ammo_type_live/show.ex:21 #: lib/cannery_web/live/ammo_type_live/show.ex:20
#, elixir-autogen, elixir-format, fuzzy #, elixir-autogen, elixir-format, fuzzy
msgid "Grains:" msgid "Grains:"
msgstr "Körner" msgstr "Körner"
#: lib/cannery_web/live/ammo_type_live/show.ex:26 #: lib/cannery_web/live/ammo_type_live/show.ex:25
#, elixir-autogen, elixir-format, fuzzy #, elixir-autogen, elixir-format, fuzzy
msgid "Incendiary:" msgid "Incendiary:"
msgstr "Brandmunition" msgstr "Brandmunition"
#: lib/cannery_web/live/ammo_type_live/show.ex:17 #: lib/cannery_web/live/ammo_type_live/show.ex:16
#, elixir-autogen, elixir-format, fuzzy #, elixir-autogen, elixir-format, fuzzy
msgid "Jacket type:" msgid "Jacket type:"
msgstr "Patronenhülse" msgstr "Patronenhülse"
#: lib/cannery_web/live/ammo_type_live/show.ex:29 #: lib/cannery_web/live/ammo_type_live/show.ex:28
#, elixir-autogen, elixir-format, fuzzy #, elixir-autogen, elixir-format, fuzzy
msgid "Manufacturer:" msgid "Manufacturer:"
msgstr "Hersteller" msgstr "Hersteller"
#: lib/cannery_web/live/ammo_type_live/show.ex:18 #: lib/cannery_web/live/ammo_type_live/show.ex:17
#, elixir-autogen, elixir-format, fuzzy #, elixir-autogen, elixir-format, fuzzy
msgid "Muzzle velocity:" msgid "Muzzle velocity:"
msgstr "Mündungsgeschwindigkeit" msgstr "Mündungsgeschwindigkeit"
#: lib/cannery_web/live/ammo_type_live/show.ex:20 #: lib/cannery_web/live/ammo_type_live/show.ex:19
#, elixir-autogen, elixir-format, fuzzy #, elixir-autogen, elixir-format, fuzzy
msgid "Powder grains per charge:" msgid "Powder grains per charge:"
msgstr "Pulverkörner pro Ladung" msgstr "Pulverkörner pro Ladung"
#: lib/cannery_web/live/ammo_type_live/show.ex:19 #: lib/cannery_web/live/ammo_type_live/show.ex:18
#, elixir-autogen, elixir-format, fuzzy #, elixir-autogen, elixir-format, fuzzy
msgid "Powder type:" msgid "Powder type:"
msgstr "Pulverart" msgstr "Pulverart"
#: lib/cannery_web/live/ammo_type_live/show.ex:22 #: lib/cannery_web/live/ammo_type_live/show.ex:21
#, elixir-autogen, elixir-format, fuzzy #, elixir-autogen, elixir-format, fuzzy
msgid "Pressure:" msgid "Pressure:"
msgstr "Druck" msgstr "Druck"
#: lib/cannery_web/live/ammo_type_live/show.ex:23 #: lib/cannery_web/live/ammo_type_live/show.ex:22
#, elixir-autogen, elixir-format, fuzzy #, elixir-autogen, elixir-format, fuzzy
msgid "Primer type:" msgid "Primer type:"
msgstr "Zündertyp" msgstr "Zündertyp"
#: lib/cannery_web/live/ammo_type_live/show.ex:25 #: lib/cannery_web/live/ammo_type_live/show.ex:24
#, elixir-autogen, elixir-format, fuzzy #, elixir-autogen, elixir-format, fuzzy
msgid "Tracer:" msgid "Tracer:"
msgstr "Leuchtspur" msgstr "Leuchtspur"
#: lib/cannery_web/live/ammo_type_live/show.ex:30 #: lib/cannery_web/live/ammo_type_live/show.ex:29
#, elixir-autogen, elixir-format, fuzzy #, elixir-autogen, elixir-format, fuzzy
msgid "UPC:" msgid "UPC:"
msgstr "UPC" msgstr "UPC"
@ -992,13 +991,13 @@ msgid "Average CPR"
msgstr "" msgstr ""
#: lib/cannery_web/live/ammo_type_live/index.ex:28 #: lib/cannery_web/live/ammo_type_live/index.ex:28
#: lib/cannery_web/live/ammo_type_live/show.ex:118 #: lib/cannery_web/live/ammo_type_live/show.ex:135
#, elixir-autogen, elixir-format, fuzzy #, elixir-autogen, elixir-format, fuzzy
msgid "Edit %{ammo_type_name}" msgid "Edit %{ammo_type_name}"
msgstr "%{name} bearbeiten" msgstr "%{name} bearbeiten"
#: lib/cannery_web/components/ammo_group_card.ex:40 #: lib/cannery_web/components/ammo_group_table_component.ex:233
#: lib/cannery_web/components/ammo_group_table_component.ex:231 #: lib/cannery_web/components/core_components/ammo_group_card.html.heex:17
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
msgid "Empty" msgid "Empty"
msgstr "" msgstr ""
@ -1008,7 +1007,7 @@ msgstr ""
msgid "CPR" msgid "CPR"
msgstr "" msgstr ""
#: lib/cannery_web/components/ammo_group_card.ex:75 #: lib/cannery_web/components/core_components/ammo_group_card.html.heex:46
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
msgid "CPR:" msgid "CPR:"
msgstr "" msgstr ""
@ -1018,7 +1017,7 @@ msgstr ""
msgid "Original Count" msgid "Original Count"
msgstr "Ursprüngliche Anzahl:" msgstr "Ursprüngliche Anzahl:"
#: lib/cannery_web/components/ammo_group_card.ex:47 #: lib/cannery_web/components/core_components/ammo_group_card.html.heex:21
#, elixir-autogen, elixir-format, fuzzy #, elixir-autogen, elixir-format, fuzzy
msgid "Original Count:" msgid "Original Count:"
msgstr "Ursprüngliche Anzahl:" msgstr "Ursprüngliche Anzahl:"
@ -1028,27 +1027,22 @@ msgstr "Ursprüngliche Anzahl:"
msgid "Home" msgid "Home"
msgstr "" msgstr ""
#: lib/cannery_web/live/container_live/show.html.heex:24 #: lib/cannery_web/live/container_live/show.html.heex:28
#, elixir-autogen, elixir-format, fuzzy #, elixir-autogen, elixir-format, fuzzy
msgid "Total packs:" msgid "Total packs:"
msgstr "" msgstr ""
#: lib/cannery_web/live/container_live/show.html.heex:33
#, elixir-autogen, elixir-format, fuzzy
msgid "Total rounds:"
msgstr "Summe abgegebener Schüsse:"
#: lib/cannery_web/components/ammo_group_table_component.ex:58 #: lib/cannery_web/components/ammo_group_table_component.ex:58
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
msgid "Last used on" msgid "Last used on"
msgstr "" msgstr ""
#: lib/cannery_web/components/ammo_group_card.ex:62 #: lib/cannery_web/components/core_components/ammo_group_card.html.heex:36
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
msgid "Last used on:" msgid "Last used on:"
msgstr "" msgstr ""
#: lib/cannery_web/components/ammo_group_table_component.ex:178 #: lib/cannery_web/components/ammo_group_table_component.ex:171
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
msgid "Never used" msgid "Never used"
msgstr "" msgstr ""
@ -1059,7 +1053,7 @@ msgstr ""
msgid "Purchased on" msgid "Purchased on"
msgstr "" msgstr ""
#: lib/cannery_web/components/ammo_group_card.ex:57 #: lib/cannery_web/components/core_components/ammo_group_card.html.heex:31
#: lib/cannery_web/live/ammo_group_live/show.html.heex:30 #: lib/cannery_web/live/ammo_group_live/show.html.heex:30
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
msgid "Purchased on:" msgid "Purchased on:"
@ -1071,32 +1065,32 @@ msgid "Edit ammo"
msgstr "Munitionstyp bearbeiten" msgstr "Munitionstyp bearbeiten"
#: lib/cannery_web/live/ammo_type_live/index.html.heex:8 #: lib/cannery_web/live/ammo_type_live/index.html.heex:8
#: lib/cannery_web/live/ammo_type_live/index.html.heex:45 #: lib/cannery_web/live/ammo_type_live/index.html.heex:46
#, elixir-autogen, elixir-format, fuzzy #, elixir-autogen, elixir-format, fuzzy
msgid "No Ammo types" msgid "No Ammo types"
msgstr "Keine Munitionsarten" msgstr "Keine Munitionsarten"
#: lib/cannery_web/live/ammo_type_live/index.html.heex:32 #: lib/cannery_web/live/ammo_type_live/index.html.heex:33
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
msgid "Search catalog" msgid "Search catalog"
msgstr "" msgstr ""
#: lib/cannery_web/live/ammo_group_live/index.html.heex:57 #: lib/cannery_web/live/ammo_group_live/index.html.heex:58
#, elixir-autogen, elixir-format, fuzzy #, elixir-autogen, elixir-format, fuzzy
msgid "Search ammo" msgid "Search ammo"
msgstr "" msgstr ""
#: lib/cannery_web/live/container_live/index.html.heex:32 #: lib/cannery_web/live/container_live/index.html.heex:33
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
msgid "Search containers" msgid "Search containers"
msgstr "" msgstr ""
#: lib/cannery_web/live/tag_live/index.html.heex:35 #: lib/cannery_web/live/tag_live/index.html.heex:36
#, elixir-autogen, elixir-format, fuzzy #, elixir-autogen, elixir-format, fuzzy
msgid "Search tags" msgid "Search tags"
msgstr "" msgstr ""
#: lib/cannery_web/live/range_live/index.html.heex:82 #: lib/cannery_web/live/range_live/index.html.heex:90
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
msgid "Search shot records" msgid "Search shot records"
msgstr "" msgstr ""
@ -1109,27 +1103,27 @@ msgstr ""
#: lib/cannery_web/templates/error/error.html.heex:8 #: lib/cannery_web/templates/error/error.html.heex:8
#: lib/cannery_web/templates/layout/root.html.heex:13 #: lib/cannery_web/templates/layout/root.html.heex:13
#: lib/cannery_web/templates/layout/root.html.heex:14 #: lib/cannery_web/templates/layout/root.html.heex:14
#: lib/cannery_web/views/layout_view.ex:15 #: lib/cannery_web/views/layout_view.ex:14
#, elixir-autogen, elixir-format, fuzzy #, elixir-autogen, elixir-format, fuzzy
msgid "Cannery" msgid "Cannery"
msgstr "" msgstr ""
#: lib/cannery_web/components/user_card.ex:33 #: lib/cannery_web/components/core_components/user_card.html.heex:20
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
msgid "Email unconfirmed" msgid "Email unconfirmed"
msgstr "" msgstr ""
#: lib/cannery_web/components/user_card.ex:38 #: lib/cannery_web/components/core_components/user_card.html.heex:25
#, elixir-autogen, elixir-format, fuzzy #, elixir-autogen, elixir-format, fuzzy
msgid "User registered on%{registered_datetime}" msgid "User registered on%{registered_datetime}"
msgstr "Benutzer registriert am" msgstr "Benutzer registriert am"
#: lib/cannery_web/components/user_card.ex:27 #: lib/cannery_web/components/core_components/user_card.html.heex:14
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
msgid "User was confirmed at%{confirmed_datetime}" msgid "User was confirmed at%{confirmed_datetime}"
msgstr "" msgstr ""
#: lib/cannery_web/components/invite_card.ex:37 #: lib/cannery_web/components/core_components/invite_card.html.heex:16
#, elixir-autogen, elixir-format, fuzzy #, elixir-autogen, elixir-format, fuzzy
msgid "Uses Left: Unlimited" msgid "Uses Left: Unlimited"
msgstr "Verbleibende Nutzung:" msgstr "Verbleibende Nutzung:"
@ -1143,24 +1137,24 @@ msgstr "Verbleibende Nutzung:"
## Run "mix gettext.extract" to bring this file up to ## Run "mix gettext.extract" to bring this file up to
## date. Leave "msgstr"s empty as changing them here has no ## date. Leave "msgstr"s empty as changing them here has no
## effect: edit them in PO (.po) files instead. ## effect: edit them in PO (.po) files instead.
#: lib/cannery_web/live/home_live.html.heex:26 #: lib/cannery_web/live/home_live.html.heex:25
#, elixir-autogen, elixir-format, fuzzy #, elixir-autogen, elixir-format, fuzzy
msgid "Cannery lets you easily keep an eye on your ammo levels before and after range day" msgid "Cannery lets you easily keep an eye on your ammo levels before and after range day"
msgstr "" msgstr ""
"Mit %{name} können Sie ihren Munitionsbestand vor und nach dem Schießen " "Mit %{name} können Sie ihren Munitionsbestand vor und nach dem Schießen "
"leicht im Auge behalten" "leicht im Auge behalten"
#: lib/cannery_web/views/layout_view.ex:11 #: lib/cannery_web/views/layout_view.ex:10
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
msgid "Cannery | %{title}" msgid "Cannery | %{title}"
msgstr "" msgstr ""
#: lib/cannery_web/live/home_live.html.heex:78 #: lib/cannery_web/live/home_live.html.heex:80
#, elixir-autogen, elixir-format, fuzzy #, elixir-autogen, elixir-format, fuzzy
msgid "Registration:" msgid "Registration:"
msgstr "Registrieren" msgstr "Registrieren"
#: lib/cannery_web/live/home_live.html.heex:88 #: lib/cannery_web/live/home_live.html.heex:90
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
msgid "Version:" msgid "Version:"
msgstr "" msgstr ""
@ -1170,29 +1164,29 @@ msgstr ""
msgid "Welcome to Cannery" msgid "Welcome to Cannery"
msgstr "Willkommen %{name}" msgstr "Willkommen %{name}"
#: lib/cannery_web/live/invite_live/index.html.heex:70 #: lib/cannery_web/live/invite_live/index.html.heex:75
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
msgid "Disable" msgid "Disable"
msgstr "" msgstr ""
#: lib/cannery_web/live/invite_live/index.html.heex:70 #: lib/cannery_web/live/invite_live/index.html.heex:75
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
msgid "Enable" msgid "Enable"
msgstr "" msgstr ""
#: lib/cannery_web/components/invite_card.ex:32 #: lib/cannery_web/components/core_components/invite_card.html.heex:11
#, elixir-autogen, elixir-format, fuzzy #, elixir-autogen, elixir-format, fuzzy
msgid "Uses Left: %{uses_left_count}" msgid "Uses Left: %{uses_left_count}"
msgstr "Verbleibende Nutzung:" msgstr "Verbleibende Nutzung:"
#: lib/cannery_web/components/invite_card.ex:52 #: lib/cannery_web/components/core_components/invite_card.html.heex:31
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
msgid "Uses: %{uses_count}" msgid "Uses: %{uses_count}"
msgstr "" msgstr ""
#: lib/cannery_web/templates/user_confirmation/new.html.heex:12 #: lib/cannery_web/templates/user_confirmation/new.html.heex:13
#: lib/cannery_web/templates/user_registration/new.html.heex:20 #: lib/cannery_web/templates/user_registration/new.html.heex:20
#: lib/cannery_web/templates/user_reset_password/new.html.heex:12 #: lib/cannery_web/templates/user_reset_password/new.html.heex:13
#: lib/cannery_web/templates/user_session/new.html.heex:17 #: lib/cannery_web/templates/user_session/new.html.heex:17
#: lib/cannery_web/templates/user_settings/edit.html.heex:27 #: lib/cannery_web/templates/user_settings/edit.html.heex:27
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
@ -1204,24 +1198,3 @@ msgstr ""
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
msgid "Password" msgid "Password"
msgstr "" msgstr ""
#: lib/cannery_web/live/ammo_group_live/index.html.heex:153
#, elixir-autogen, elixir-format
msgid "Clone ammo group of %{ammo_group_count} bullets"
msgstr ""
#: lib/cannery_web/live/ammo_group_live/index.html.heex:168
#: lib/cannery_web/live/ammo_group_live/show.html.heex:80
#, elixir-autogen, elixir-format
msgid "Delete ammo group of %{ammo_group_count} bullets"
msgstr ""
#: lib/cannery_web/live/ammo_group_live/index.html.heex:141
#, elixir-autogen, elixir-format
msgid "Edit ammo group of %{ammo_group_count} bullets"
msgstr ""
#: lib/cannery_web/live/ammo_group_live/index.html.heex:129
#, elixir-autogen, elixir-format
msgid "View ammo group of %{ammo_group_count} bullets"
msgstr ""

View File

@ -23,18 +23,18 @@ msgstr ""
## Run "mix gettext.extract" to bring this file up to ## Run "mix gettext.extract" to bring this file up to
## date. Leave "msgstr"s empty as changing them here has no ## date. Leave "msgstr"s empty as changing them here has no
## effect: edit them in PO (.po) files instead. ## effect: edit them in PO (.po) files instead.
#: lib/cannery/containers.ex:179 #: lib/cannery/containers.ex:200
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
msgid "Container must be empty before deleting" msgid "Container must be empty before deleting"
msgstr "Behälter muss vor dem Löschen leer sein" msgstr "Behälter muss vor dem Löschen leer sein"
#: lib/cannery_web/live/container_live/index.ex:92 #: lib/cannery_web/live/container_live/index.ex:86
#: lib/cannery_web/live/container_live/show.ex:72 #: lib/cannery_web/live/container_live/show.ex:71
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
msgid "Could not delete %{name}: %{error}" msgid "Could not delete %{name}: %{error}"
msgstr "Konnte %{name} nicht löschen: %{error}" msgstr "Konnte %{name} nicht löschen: %{error}"
#: lib/cannery_web/live/container_live/index.ex:80 #: lib/cannery_web/live/container_live/index.ex:74
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
msgid "Could not find that container" msgid "Could not find that container"
msgstr "Konnte Behälter nicht finden" msgstr "Konnte Behälter nicht finden"
@ -49,12 +49,12 @@ msgstr "Mailadressenänderungs-Link ist ungültig oder abgelaufen."
msgid "Error" msgid "Error"
msgstr "Fehler" msgstr "Fehler"
#: lib/cannery_web/templates/error/error.html.heex:28 #: lib/cannery_web/templates/error/error.html.heex:31
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
msgid "Go back home" msgid "Go back home"
msgstr "Zur Hauptseite zurückkehren" msgstr "Zur Hauptseite zurückkehren"
#: lib/cannery_web/views/error_view.ex:11 #: lib/cannery_web/views/error_view.ex:10
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
msgid "Internal Server Error" msgid "Internal Server Error"
msgstr "Interner Serverfehler" msgstr "Interner Serverfehler"
@ -64,7 +64,7 @@ msgstr "Interner Serverfehler"
msgid "Invalid email or password" msgid "Invalid email or password"
msgstr "Ungültige Mailadresse oder Passwort" msgstr "Ungültige Mailadresse oder Passwort"
#: lib/cannery_web/views/error_view.ex:9 #: lib/cannery_web/views/error_view.ex:8
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
msgid "Not found" msgid "Not found"
msgstr "Nicht gefunden" msgstr "Nicht gefunden"
@ -83,15 +83,15 @@ msgstr "Oops, etwas ist schiefgegangen. Bitte beachten Sie den Fehler unten."
msgid "Reset password link is invalid or it has expired." msgid "Reset password link is invalid or it has expired."
msgstr "Link zum Passwort zurücksetzen ist ungültig oder abgelaufen." msgstr "Link zum Passwort zurücksetzen ist ungültig oder abgelaufen."
#: lib/cannery_web/controllers/user_registration_controller.ex:22 #: lib/cannery_web/controllers/user_registration_controller.ex:23
#: lib/cannery_web/controllers/user_registration_controller.ex:51 #: lib/cannery_web/controllers/user_registration_controller.ex:52
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
msgid "Sorry, public registration is disabled" msgid "Sorry, public registration is disabled"
msgstr "Entschuldigung, aber öffentliche Registrierung ist deaktiviert" msgstr "Entschuldigung, aber öffentliche Registrierung ist deaktiviert"
#: lib/cannery_web/controllers/user_registration_controller.ex:12 #: lib/cannery_web/controllers/user_registration_controller.ex:13
#: lib/cannery_web/controllers/user_registration_controller.ex:41 #: lib/cannery_web/controllers/user_registration_controller.ex:42
#: lib/cannery_web/controllers/user_registration_controller.ex:70 #: lib/cannery_web/controllers/user_registration_controller.ex:71
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
msgid "Sorry, this invite was not found or expired" msgid "Sorry, this invite was not found or expired"
msgstr "" msgstr ""
@ -102,7 +102,7 @@ msgstr ""
msgid "Unable to delete user" msgid "Unable to delete user"
msgstr "Dieser Nutzer konnte nicht gelöscht werden" msgstr "Dieser Nutzer konnte nicht gelöscht werden"
#: lib/cannery_web/views/error_view.ex:10 #: lib/cannery_web/views/error_view.ex:9
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
msgid "Unauthorized" msgid "Unauthorized"
msgstr "Unbefugt" msgstr "Unbefugt"
@ -112,7 +112,7 @@ msgstr "Unbefugt"
msgid "User confirmation link is invalid or it has expired." msgid "User confirmation link is invalid or it has expired."
msgstr "Nutzerkonto Bestätigungslink ist ungültig oder abgelaufen." msgstr "Nutzerkonto Bestätigungslink ist ungültig oder abgelaufen."
#: lib/cannery_web/live/invite_live/index.ex:19 #: lib/cannery_web/live/invite_live/index.ex:18
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
msgid "You are not authorized to view this page" msgid "You are not authorized to view this page"
msgstr "Sie sind nicht berechtigt, diese Seite aufzurufen" msgstr "Sie sind nicht berechtigt, diese Seite aufzurufen"
@ -142,21 +142,16 @@ msgstr "ist nicht gültig"
msgid "must have the @ sign and no spaces" msgid "must have the @ sign and no spaces"
msgstr "Muss ein @ Zeichen und keine Leerzeichen haben" msgstr "Muss ein @ Zeichen und keine Leerzeichen haben"
#: lib/cannery/tags.ex:66 #: lib/cannery_web/live/container_live/show.ex:46
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
msgid "Tag not found" msgid "Tag not found"
msgstr "Tag nicht gefunden" msgstr "Tag nicht gefunden"
#: lib/cannery_web/live/container_live/edit_tags_component.ex:45 #: lib/cannery_web/live/container_live/edit_tags_component.ex:46
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
msgid "Tag could not be added" msgid "Tag could not be added"
msgstr "Tag konnte nicht hinzugefügt werden" msgstr "Tag konnte nicht hinzugefügt werden"
#: lib/cannery/activity_log/shot_group.ex:126
#, elixir-autogen, elixir-format
msgid "Count must be at least 1"
msgstr "Anzahl muss mindestens 1 sein"
#: lib/cannery_web/controllers/user_auth.ex:39 #: lib/cannery_web/controllers/user_auth.ex:39
#: lib/cannery_web/controllers/user_auth.ex:161 #: lib/cannery_web/controllers/user_auth.ex:161
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
@ -165,45 +160,59 @@ msgstr ""
"Sie müssen ihr Nutzerkonto bestätigen und einloggen, um diese Seite " "Sie müssen ihr Nutzerkonto bestätigen und einloggen, um diese Seite "
"anzuzeigen." "anzuzeigen."
#: lib/cannery_web/live/container_live/edit_tags_component.ex:72 #: lib/cannery_web/live/container_live/edit_tags_component.ex:73
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
msgid "Tag could not be removed" msgid "Tag could not be removed"
msgstr "Tag konnte nicht gelöscht werden" msgstr "Tag konnte nicht gelöscht werden"
#: lib/cannery_web/live/ammo_group_live/form_component.ex:157 #: lib/cannery_web/live/ammo_group_live/form_component.ex:160
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
msgid "Could not parse number of copies" msgid "Could not parse number of copies"
msgstr "Konnte die Anzahl der Kopien nicht verstehen" msgstr "Konnte die Anzahl der Kopien nicht verstehen"
#: lib/cannery_web/live/ammo_group_live/form_component.ex:142 #: lib/cannery_web/live/ammo_group_live/form_component.ex:150
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
msgid "Invalid number of copies, must be between 1 and %{max}. Was %{multiplier}" msgid "Invalid number of copies, must be between 1 and %{max}. Was %{multiplier}"
msgstr "" msgstr ""
"Ungültige Nummer an Kopien. Muss zwischen 1 and %{max} liegen. War " "Ungültige Nummer an Kopien. Muss zwischen 1 and %{max} liegen. War "
"%{multiplier}" "%{multiplier}"
#: lib/cannery/ammo.ex:686 #: lib/cannery/ammo.ex:1015
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
msgid "Invalid multiplier" msgid "Invalid multiplier"
msgstr "" msgstr ""
#: lib/cannery/ammo/ammo_group.ex:97 #: lib/cannery/ammo/ammo_group.ex:92
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
msgid "Please select an ammo type and container" msgid "Please select an ammo type and container"
msgstr "" msgstr ""
#: lib/cannery_web/live/range_live/index.html.heex:67 #: lib/cannery_web/live/range_live/index.html.heex:74
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
msgid "Your browser does not support the canvas element." msgid "Your browser does not support the canvas element."
msgstr "" msgstr ""
#: lib/cannery/activity_log/shot_group.ex:77 #: lib/cannery/activity_log/shot_group.ex:72
#, elixir-autogen, elixir-format, fuzzy #, elixir-autogen, elixir-format, fuzzy
msgid "Please select a valid user and ammo pack" msgid "Please select a valid user and ammo pack"
msgstr "" msgstr ""
#: lib/cannery/activity_log/shot_group.ex:83 #: lib/cannery/activity_log/shot_group.ex:86
#: lib/cannery/activity_log/shot_group.ex:121 #, elixir-autogen, elixir-format
msgid "Ammo left can be at most %{count} rounds"
msgstr ""
#: lib/cannery/activity_log/shot_group.ex:82
#, elixir-autogen, elixir-format
msgid "Ammo left must be at least 0"
msgstr ""
#: lib/cannery/activity_log/shot_group.ex:119
#, elixir-autogen, elixir-format, fuzzy #, elixir-autogen, elixir-format, fuzzy
msgid "Count must be less than %{count} shots" msgid "Count can be at most %{count} shots"
msgstr "Anzahl muss weniger als %{count} betragen" msgstr "Anzahl muss weniger als %{count} betragen"
#: lib/cannery/activity_log/shot_group.ex:78
#, elixir-autogen, elixir-format
msgid "can't be blank"
msgstr ""

View File

@ -23,31 +23,31 @@ msgstr ""
## Run "mix gettext.extract" to bring this file up to ## Run "mix gettext.extract" to bring this file up to
## date. Leave "msgstr"s empty as changing them here has no ## date. Leave "msgstr"s empty as changing them here has no
## effect: edit them in PO (.po) files instead. ## effect: edit them in PO (.po) files instead.
#: lib/cannery_web/live/ammo_type_live/form_component.ex:86 #: lib/cannery_web/live/ammo_type_live/form_component.ex:89
#: lib/cannery_web/live/container_live/form_component.ex:89 #: lib/cannery_web/live/container_live/form_component.ex:89
#: lib/cannery_web/live/invite_live/form_component.ex:80 #: lib/cannery_web/live/invite_live/form_component.ex:80
#: lib/cannery_web/live/tag_live/form_component.ex:79 #: lib/cannery_web/live/tag_live/form_component.ex:78
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
msgid "%{name} created successfully" msgid "%{name} created successfully"
msgstr "%{name} erfolgreich erstellt" msgstr "%{name} erfolgreich erstellt"
#: lib/cannery_web/live/ammo_type_live/index.ex:73 #: lib/cannery_web/live/ammo_type_live/index.ex:72
#: lib/cannery_web/live/ammo_type_live/show.ex:55 #: lib/cannery_web/live/ammo_type_live/show.ex:54
#: lib/cannery_web/live/tag_live/index.ex:64 #: lib/cannery_web/live/tag_live/index.ex:65
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
msgid "%{name} deleted succesfully" msgid "%{name} deleted succesfully"
msgstr "%{name} erfolgreich gelöscht" msgstr "%{name} erfolgreich gelöscht"
#: lib/cannery_web/live/container_live/index.ex:85 #: lib/cannery_web/live/container_live/index.ex:79
#: lib/cannery_web/live/container_live/show.ex:62 #: lib/cannery_web/live/container_live/show.ex:61
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
msgid "%{name} has been deleted" msgid "%{name} has been deleted"
msgstr "%{name} wurde gelöscht" msgstr "%{name} wurde gelöscht"
#: lib/cannery_web/live/ammo_type_live/form_component.ex:67 #: lib/cannery_web/live/ammo_type_live/form_component.ex:70
#: lib/cannery_web/live/container_live/form_component.ex:70 #: lib/cannery_web/live/container_live/form_component.ex:70
#: lib/cannery_web/live/invite_live/form_component.ex:62 #: lib/cannery_web/live/invite_live/form_component.ex:62
#: lib/cannery_web/live/tag_live/form_component.ex:61 #: lib/cannery_web/live/tag_live/form_component.ex:60
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
msgid "%{name} updated successfully" msgid "%{name} updated successfully"
msgstr "%{name} erfolgreich aktualisiert" msgstr "%{name} erfolgreich aktualisiert"
@ -57,24 +57,24 @@ msgstr "%{name} erfolgreich aktualisiert"
msgid "A link to confirm your email change has been sent to the new address." msgid "A link to confirm your email change has been sent to the new address."
msgstr "Eine Mail zum Bestätigen ihre Mailadresse wurde Ihnen zugesandt." msgstr "Eine Mail zum Bestätigen ihre Mailadresse wurde Ihnen zugesandt."
#: lib/cannery_web/live/invite_live/index.html.heex:105 #: lib/cannery_web/live/invite_live/index.html.heex:110
#: lib/cannery_web/live/invite_live/index.html.heex:133 #: lib/cannery_web/live/invite_live/index.html.heex:138
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
msgid "Are you sure you want to delete %{email}? This action is permanent!" msgid "Are you sure you want to delete %{email}? This action is permanent!"
msgstr "" msgstr ""
"Sind Sie sicher, dass sie %{email} löschen möchten? Dies kann nicht " "Sind Sie sicher, dass sie %{email} löschen möchten? Dies kann nicht "
"zurückgenommen werden!" "zurückgenommen werden!"
#: lib/cannery_web/live/container_live/index.html.heex:98 #: lib/cannery_web/live/container_live/index.html.heex:99
#: lib/cannery_web/live/container_live/index.html.heex:150 #: lib/cannery_web/live/container_live/index.html.heex:155
#: lib/cannery_web/live/container_live/show.html.heex:55 #: lib/cannery_web/live/container_live/show.html.heex:52
#: lib/cannery_web/live/tag_live/index.html.heex:62 #: lib/cannery_web/live/tag_live/index.html.heex:63
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
msgid "Are you sure you want to delete %{name}?" msgid "Are you sure you want to delete %{name}?"
msgstr "Sind Sie sicher, dass sie %{name} löschen möchten?" msgstr "Sind Sie sicher, dass sie %{name} löschen möchten?"
#: lib/cannery_web/live/ammo_group_live/index.html.heex:166 #: lib/cannery_web/live/ammo_group_live/index.html.heex:167
#: lib/cannery_web/live/ammo_group_live/show.html.heex:78 #: lib/cannery_web/live/ammo_group_live/show.html.heex:74
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
msgid "Are you sure you want to delete this ammo?" msgid "Are you sure you want to delete this ammo?"
msgstr "Sind Sie sicher, dass sie diese Munition löschen möchten?" msgstr "Sind Sie sicher, dass sie diese Munition löschen möchten?"
@ -84,7 +84,7 @@ msgstr "Sind Sie sicher, dass sie diese Munition löschen möchten?"
msgid "Are you sure you want to delete your account?" msgid "Are you sure you want to delete your account?"
msgstr "Sind Sie sicher, dass sie Ihren Account löschen möchten?" msgstr "Sind Sie sicher, dass sie Ihren Account löschen möchten?"
#: lib/cannery_web/components/topbar.ex:104 #: lib/cannery_web/components/core_components/topbar.html.heex:89
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
msgid "Are you sure you want to log out?" msgid "Are you sure you want to log out?"
msgstr "Wirklich ausloggen?" msgstr "Wirklich ausloggen?"
@ -123,7 +123,7 @@ msgstr "Passwort erfolgreich zurückgesetzt."
msgid "Password updated successfully." msgid "Password updated successfully."
msgstr "Passwort erfolgreich geändert." msgstr "Passwort erfolgreich geändert."
#: lib/cannery_web/controllers/user_registration_controller.ex:65 #: lib/cannery_web/controllers/user_registration_controller.ex:66
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
msgid "Please check your email to verify your account" msgid "Please check your email to verify your account"
msgstr "Bitte überprüfen Sie ihre Mailbox und bestätigen Sie das Nutzerkonto" msgstr "Bitte überprüfen Sie ihre Mailbox und bestätigen Sie das Nutzerkonto"
@ -151,44 +151,44 @@ msgstr ""
"Sind Sie sicher, dass sie %{tag_name} Tag von %{container_name} entfernen " "Sind Sie sicher, dass sie %{tag_name} Tag von %{container_name} entfernen "
"wollen?" "wollen?"
#: lib/cannery_web/live/container_live/edit_tags_component.ex:50 #: lib/cannery_web/live/container_live/edit_tags_component.ex:51
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
msgid "%{name} added successfully" msgid "%{name} added successfully"
msgstr "%{name} erfolgreich hinzugefügt" msgstr "%{name} erfolgreich hinzugefügt"
#: lib/cannery_web/live/container_live/show.ex:39 #: lib/cannery_web/live/container_live/show.ex:38
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
msgid "%{tag_name} has been removed from %{container_name}" msgid "%{tag_name} has been removed from %{container_name}"
msgstr "%{tag_name} wurde von %{container_name} entfernt" msgstr "%{tag_name} wurde von %{container_name} entfernt"
#: lib/cannery_web/live/container_live/edit_tags_component.html.heex:52 #: lib/cannery_web/live/container_live/edit_tags_component.html.heex:53
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
msgid "Adding..." msgid "Adding..."
msgstr "Füge hinzu..." msgstr "Füge hinzu..."
#: lib/cannery_web/components/add_shot_group_component.ex:56 #: lib/cannery_web/components/add_shot_group_component.ex:60
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
msgid "Shots recorded successfully" msgid "Shots recorded successfully"
msgstr "Schüsse erfolgreich dokumentiert" msgstr "Schüsse erfolgreich dokumentiert"
#: lib/cannery_web/live/range_live/index.html.heex:27 #: lib/cannery_web/live/range_live/index.html.heex:34
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
msgid "Are you sure you want to unstage this ammo?" msgid "Are you sure you want to unstage this ammo?"
msgstr "Sind sie sicher, dass Sie diese Munition demarkieren möchten?" msgstr "Sind sie sicher, dass Sie diese Munition demarkieren möchten?"
#: lib/cannery_web/live/ammo_group_live/show.ex:143 #: lib/cannery_web/live/ammo_group_live/show.ex:159
#: lib/cannery_web/live/range_live/index.html.heex:119 #: lib/cannery_web/live/range_live/index.html.heex:127
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
msgid "Are you sure you want to delete this shot record?" msgid "Are you sure you want to delete this shot record?"
msgstr "Sind sie sicher, dass sie die Schießkladde löschen möchten?" msgstr "Sind sie sicher, dass sie die Schießkladde löschen möchten?"
#: lib/cannery_web/live/ammo_group_live/show.ex:80 #: lib/cannery_web/live/ammo_group_live/show.ex:81
#: lib/cannery_web/live/range_live/index.ex:80 #: lib/cannery_web/live/range_live/index.ex:79
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
msgid "Shot records deleted succesfully" msgid "Shot records deleted succesfully"
msgstr "Schießkladde erfolgreich gelöscht" msgstr "Schießkladde erfolgreich gelöscht"
#: lib/cannery_web/live/range_live/form_component.ex:55 #: lib/cannery_web/live/range_live/form_component.ex:54
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
msgid "Shot records updated successfully" msgid "Shot records updated successfully"
msgstr "Schießkladde erfolgreich aktualisiert" msgstr "Schießkladde erfolgreich aktualisiert"
@ -198,17 +198,17 @@ msgstr "Schießkladde erfolgreich aktualisiert"
msgid "%{email} confirmed successfully." msgid "%{email} confirmed successfully."
msgstr "%{email} erfolgreich bestätigt." msgstr "%{email} erfolgreich bestätigt."
#: lib/cannery_web/components/move_ammo_group_component.ex:53 #: lib/cannery_web/components/move_ammo_group_component.ex:54
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
msgid "Ammo moved to %{name} successfully" msgid "Ammo moved to %{name} successfully"
msgstr "Munition erfolgreich zu %{name} verschoben" msgstr "Munition erfolgreich zu %{name} verschoben"
#: lib/cannery_web/live/invite_live/index.ex:127 #: lib/cannery_web/live/invite_live/index.ex:126
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
msgid "Copied to clipboard" msgid "Copied to clipboard"
msgstr "Der Zwischenablage hinzugefügt" msgstr "Der Zwischenablage hinzugefügt"
#: lib/cannery_web/live/container_live/edit_tags_component.ex:77 #: lib/cannery_web/live/container_live/edit_tags_component.ex:78
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
msgid "%{name} removed successfully" msgid "%{name} removed successfully"
msgstr "%{name} erfolgreich entfernt" msgstr "%{name} erfolgreich entfernt"
@ -235,70 +235,70 @@ msgid "Language updated successfully."
msgstr "Spracheinstellung gespeichert." msgstr "Spracheinstellung gespeichert."
#: lib/cannery_web/live/ammo_group_live/index.ex:89 #: lib/cannery_web/live/ammo_group_live/index.ex:89
#: lib/cannery_web/live/ammo_group_live/show.ex:54 #: lib/cannery_web/live/ammo_group_live/show.ex:55
#, elixir-autogen, elixir-format, fuzzy #, elixir-autogen, elixir-format, fuzzy
msgid "Ammo deleted succesfully" msgid "Ammo deleted succesfully"
msgstr "Munitionsgruppe erfolgreich gelöscht" msgstr "Munitionsgruppe erfolgreich gelöscht"
#: lib/cannery_web/live/range_live/index.ex:94 #: lib/cannery_web/live/range_live/index.ex:93
#, elixir-autogen, elixir-format, fuzzy #, elixir-autogen, elixir-format, fuzzy
msgid "Ammo unstaged succesfully" msgid "Ammo unstaged succesfully"
msgstr "Munition erfolgreich demarkiert" msgstr "Munition erfolgreich demarkiert"
#: lib/cannery_web/live/ammo_group_live/form_component.ex:118 #: lib/cannery_web/live/ammo_group_live/form_component.ex:126
#, elixir-autogen, elixir-format, fuzzy #, elixir-autogen, elixir-format, fuzzy
msgid "Ammo updated successfully" msgid "Ammo updated successfully"
msgstr "Munitionsgruppe erfolgreich aktualisiert" msgstr "Munitionsgruppe erfolgreich aktualisiert"
#: lib/cannery_web/live/ammo_group_live/form_component.ex:178 #: lib/cannery_web/live/ammo_group_live/form_component.ex:185
#, elixir-autogen, elixir-format, fuzzy #, elixir-autogen, elixir-format, fuzzy
msgid "Ammo added successfully" msgid "Ammo added successfully"
msgid_plural "Ammo added successfully" msgid_plural "Ammo added successfully"
msgstr[0] "Munitionsgruppe erfolgreich aktualisiert" msgstr[0] "Munitionsgruppe erfolgreich aktualisiert"
msgstr[1] "Munitionsgruppe erfolgreich aktualisiert" msgstr[1] "Munitionsgruppe erfolgreich aktualisiert"
#: lib/cannery_web/live/ammo_type_live/index.html.heex:95 #: lib/cannery_web/live/ammo_type_live/index.html.heex:96
#: lib/cannery_web/live/ammo_type_live/show.html.heex:29 #: lib/cannery_web/live/ammo_type_live/show.html.heex:29
#, elixir-autogen, elixir-format, fuzzy #, elixir-autogen, elixir-format, fuzzy
msgid "Are you sure you want to delete %{name}? This will delete all %{name} type ammo as well!" msgid "Are you sure you want to delete %{name}? This will delete all %{name} type ammo as well!"
msgstr "Sind Sie sicher, dass sie %{name} löschen möchten?" msgstr "Sind Sie sicher, dass sie %{name} löschen möchten?"
#: lib/cannery_web/live/home_live.html.heex:65 #: lib/cannery_web/live/home_live.html.heex:63
#, elixir-autogen, elixir-format, fuzzy #, elixir-autogen, elixir-format, fuzzy
msgid "Register to setup Cannery" msgid "Register to setup Cannery"
msgstr "Registrieren Sie sich, um %{name} zu bearbeiten" msgstr "Registrieren Sie sich, um %{name} zu bearbeiten"
#: lib/cannery_web/live/invite_live/index.ex:54 #: lib/cannery_web/live/invite_live/index.ex:53
#, elixir-autogen, elixir-format, fuzzy #, elixir-autogen, elixir-format, fuzzy
msgid "%{invite_name} deleted succesfully" msgid "%{invite_name} deleted succesfully"
msgstr "%{name} erfolgreich gelöscht" msgstr "%{name} erfolgreich gelöscht"
#: lib/cannery_web/live/invite_live/index.ex:115 #: lib/cannery_web/live/invite_live/index.ex:114
#, elixir-autogen, elixir-format, fuzzy #, elixir-autogen, elixir-format, fuzzy
msgid "%{invite_name} disabled succesfully" msgid "%{invite_name} disabled succesfully"
msgstr "%{name} erfolgreich deaktiviert" msgstr "%{name} erfolgreich deaktiviert"
#: lib/cannery_web/live/invite_live/index.ex:91 #: lib/cannery_web/live/invite_live/index.ex:90
#, elixir-autogen, elixir-format, fuzzy #, elixir-autogen, elixir-format, fuzzy
msgid "%{invite_name} enabled succesfully" msgid "%{invite_name} enabled succesfully"
msgstr "%{name} erfolgreich aktiviert" msgstr "%{name} erfolgreich aktiviert"
#: lib/cannery_web/live/invite_live/index.ex:69 #: lib/cannery_web/live/invite_live/index.ex:68
#, elixir-autogen, elixir-format, fuzzy #, elixir-autogen, elixir-format, fuzzy
msgid "%{invite_name} updated succesfully" msgid "%{invite_name} updated succesfully"
msgstr "%{name} erfolgreich aktualisiert" msgstr "%{name} erfolgreich aktualisiert"
#: lib/cannery_web/live/invite_live/index.ex:138 #: lib/cannery_web/live/invite_live/index.ex:135
#, elixir-autogen, elixir-format, fuzzy #, elixir-autogen, elixir-format, fuzzy
msgid "%{user_email} deleted succesfully" msgid "%{user_email} deleted succesfully"
msgstr "%{name} erfolgreich gelöscht" msgstr "%{name} erfolgreich gelöscht"
#: lib/cannery_web/live/invite_live/index.html.heex:53 #: lib/cannery_web/live/invite_live/index.html.heex:58
#, elixir-autogen, elixir-format, fuzzy #, elixir-autogen, elixir-format, fuzzy
msgid "Are you sure you want to delete the invite for %{invite_name}?" msgid "Are you sure you want to delete the invite for %{invite_name}?"
msgstr "Sind Sie sicher, dass sie die Einladung für %{name} löschen möchten?" msgstr "Sind Sie sicher, dass sie die Einladung für %{name} löschen möchten?"
#: lib/cannery_web/live/invite_live/index.html.heex:80 #: lib/cannery_web/live/invite_live/index.html.heex:85
#, elixir-autogen, elixir-format, fuzzy #, elixir-autogen, elixir-format, fuzzy
msgid "Are you sure you want to make %{invite_name} unlimited?" msgid "Are you sure you want to make %{invite_name} unlimited?"
msgstr "Sind Sie sicher, dass sie %{name} auf unbegrenzt setzen möchten?" msgstr "Sind Sie sicher, dass sie %{name} auf unbegrenzt setzen möchten?"

View File

@ -10,23 +10,23 @@
msgid "" msgid ""
msgstr "" msgstr ""
#: lib/cannery_web/live/home_live.html.heex:46 #: lib/cannery_web/live/home_live.html.heex:44
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
msgid "Access from any internet-capable device" msgid "Access from any internet-capable device"
msgstr "" msgstr ""
#: lib/cannery_web/live/invite_live/index.html.heex:94 #: lib/cannery_web/live/invite_live/index.html.heex:99
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
msgid "Admins" msgid "Admins"
msgstr "" msgstr ""
#: lib/cannery_web/live/home_live.html.heex:60 #: lib/cannery_web/live/home_live.html.heex:58
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
msgid "Admins:" msgid "Admins:"
msgstr "" msgstr ""
#: lib/cannery_web/components/core_components/topbar.html.heex:58
#: lib/cannery_web/components/shot_group_table_component.ex:41 #: lib/cannery_web/components/shot_group_table_component.ex:41
#: lib/cannery_web/components/topbar.ex:73
#: lib/cannery_web/live/ammo_group_live/index.ex:70 #: lib/cannery_web/live/ammo_group_live/index.ex:70
#: lib/cannery_web/live/ammo_group_live/index.ex:79 #: lib/cannery_web/live/ammo_group_live/index.ex:79
#: lib/cannery_web/live/ammo_group_live/index.html.heex:3 #: lib/cannery_web/live/ammo_group_live/index.html.heex:3
@ -93,9 +93,9 @@ msgstr ""
msgid "Container" msgid "Container"
msgstr "" msgstr ""
#: lib/cannery_web/components/topbar.ex:57 #: lib/cannery_web/components/core_components/topbar.html.heex:42
#: lib/cannery_web/live/container_live/index.ex:49 #: lib/cannery_web/live/container_live/index.ex:45
#: lib/cannery_web/live/container_live/index.ex:58 #: lib/cannery_web/live/container_live/index.ex:54
#: lib/cannery_web/live/container_live/index.html.heex:3 #: lib/cannery_web/live/container_live/index.html.heex:3
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
msgid "Containers" msgid "Containers"
@ -113,36 +113,36 @@ msgstr ""
msgid "Count" msgid "Count"
msgstr "" msgstr ""
#: lib/cannery_web/components/ammo_group_card.ex:39 #: lib/cannery_web/components/core_components/ammo_group_card.html.heex:16
#: lib/cannery_web/live/ammo_group_live/show.html.heex:8 #: lib/cannery_web/live/ammo_group_live/show.html.heex:8
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
msgid "Count:" msgid "Count:"
msgstr "" msgstr ""
#: lib/cannery_web/components/container_table_component.ex:47 #: lib/cannery_web/components/container_table_component.ex:46
#: lib/cannery_web/live/ammo_type_live/form_component.html.heex:25 #: lib/cannery_web/live/ammo_type_live/form_component.html.heex:25
#: lib/cannery_web/live/container_live/form_component.html.heex:28 #: lib/cannery_web/live/container_live/form_component.html.heex:28
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
msgid "Description" msgid "Description"
msgstr "" msgstr ""
#: lib/cannery_web/components/container_card.ex:39 #: lib/cannery_web/components/core_components/container_card.html.heex:16
#: lib/cannery_web/live/container_live/show.html.heex:7 #: lib/cannery_web/live/container_live/show.html.heex:7
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
msgid "Description:" msgid "Description:"
msgstr "" msgstr ""
#: lib/cannery_web/live/home_live.html.heex:23 #: lib/cannery_web/live/home_live.html.heex:22
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
msgid "Easy to Use:" msgid "Easy to Use:"
msgstr "" msgstr ""
#: lib/cannery_web/live/invite_live/index.ex:34 #: lib/cannery_web/live/invite_live/index.ex:33
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
msgid "Edit Invite" msgid "Edit Invite"
msgstr "" msgstr ""
#: lib/cannery_web/live/tag_live/index.ex:28 #: lib/cannery_web/live/tag_live/index.ex:27
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
msgid "Edit Tag" msgid "Edit Tag"
msgstr "" msgstr ""
@ -169,23 +169,23 @@ msgstr ""
msgid "Incendiary" msgid "Incendiary"
msgstr "" msgstr ""
#: lib/cannery_web/live/home_live.html.heex:55 #: lib/cannery_web/live/home_live.html.heex:53
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
msgid "Instance Information" msgid "Instance Information"
msgstr "" msgstr ""
#: lib/cannery_web/components/invite_card.ex:42 #: lib/cannery_web/components/core_components/invite_card.html.heex:21
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
msgid "Invite Disabled" msgid "Invite Disabled"
msgstr "" msgstr ""
#: lib/cannery_web/live/home_live.html.heex:82 #: lib/cannery_web/live/home_live.html.heex:84
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
msgid "Invite Only" msgid "Invite Only"
msgstr "" msgstr ""
#: lib/cannery_web/components/topbar.ex:89 #: lib/cannery_web/components/core_components/topbar.html.heex:74
#: lib/cannery_web/live/invite_live/index.ex:42 #: lib/cannery_web/live/invite_live/index.ex:41
#: lib/cannery_web/live/invite_live/index.html.heex:3 #: lib/cannery_web/live/invite_live/index.html.heex:3
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
msgid "Invites" msgid "Invites"
@ -196,14 +196,14 @@ msgstr ""
msgid "Keep me logged in for 60 days" msgid "Keep me logged in for 60 days"
msgstr "" msgstr ""
#: lib/cannery_web/components/container_table_component.ex:48 #: lib/cannery_web/components/container_table_component.ex:47
#: lib/cannery_web/components/move_ammo_group_component.ex:69 #: lib/cannery_web/components/move_ammo_group_component.ex:69
#: lib/cannery_web/live/container_live/form_component.html.heex:43 #: lib/cannery_web/live/container_live/form_component.html.heex:43
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
msgid "Location" msgid "Location"
msgstr "" msgstr ""
#: lib/cannery_web/components/container_card.ex:49 #: lib/cannery_web/components/core_components/container_card.html.heex:26
#: lib/cannery_web/live/container_live/show.html.heex:17 #: lib/cannery_web/live/container_live/show.html.heex:17
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
msgid "Location:" msgid "Location:"
@ -231,7 +231,7 @@ msgid "My cool ammo can"
msgstr "" msgstr ""
#: lib/cannery_web/components/ammo_type_table_component.ex:45 #: lib/cannery_web/components/ammo_type_table_component.ex:45
#: lib/cannery_web/components/container_table_component.ex:46 #: lib/cannery_web/components/container_table_component.ex:45
#: lib/cannery_web/live/ammo_type_live/form_component.html.heex:21 #: lib/cannery_web/live/ammo_type_live/form_component.html.heex:21
#: lib/cannery_web/live/container_live/form_component.html.heex:21 #: lib/cannery_web/live/container_live/form_component.html.heex:21
#: lib/cannery_web/live/invite_live/form_component.html.heex:21 #: lib/cannery_web/live/invite_live/form_component.html.heex:21
@ -246,35 +246,35 @@ msgstr ""
msgid "New Ammo type" msgid "New Ammo type"
msgstr "" msgstr ""
#: lib/cannery_web/live/container_live/index.ex:36 #: lib/cannery_web/live/container_live/index.ex:32
#: lib/cannery_web/live/container_live/index.ex:43 #: lib/cannery_web/live/container_live/index.ex:39
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
msgid "New Container" msgid "New Container"
msgstr "" msgstr ""
#: lib/cannery_web/live/invite_live/index.ex:38 #: lib/cannery_web/live/invite_live/index.ex:37
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
msgid "New Invite" msgid "New Invite"
msgstr "" msgstr ""
#: lib/cannery_web/live/tag_live/index.ex:36 #: lib/cannery_web/live/tag_live/index.ex:35
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
msgid "New Tag" msgid "New Tag"
msgstr "" msgstr ""
#: lib/cannery_web/live/ammo_group_live/index.html.heex:10 #: lib/cannery_web/live/ammo_group_live/index.html.heex:10
#: lib/cannery_web/live/ammo_group_live/index.html.heex:70 #: lib/cannery_web/live/ammo_group_live/index.html.heex:71
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
msgid "No Ammo" msgid "No Ammo"
msgstr "" msgstr ""
#: lib/cannery_web/live/ammo_type_live/show.html.heex:169 #: lib/cannery_web/live/ammo_type_live/show.html.heex:167
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
msgid "No ammo for this type" msgid "No ammo for this type"
msgstr "" msgstr ""
#: lib/cannery_web/live/container_live/index.html.heex:8 #: lib/cannery_web/live/container_live/index.html.heex:8
#: lib/cannery_web/live/container_live/index.html.heex:46 #: lib/cannery_web/live/container_live/index.html.heex:47
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
msgid "No containers" msgid "No containers"
msgstr "" msgstr ""
@ -286,7 +286,7 @@ msgstr ""
#: lib/cannery_web/live/container_live/edit_tags_component.html.heex:29 #: lib/cannery_web/live/container_live/edit_tags_component.html.heex:29
#: lib/cannery_web/live/tag_live/index.html.heex:10 #: lib/cannery_web/live/tag_live/index.html.heex:10
#: lib/cannery_web/live/tag_live/index.html.heex:42 #: lib/cannery_web/live/tag_live/index.html.heex:43
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
msgid "No tags" msgid "No tags"
msgstr "" msgstr ""
@ -295,13 +295,13 @@ msgstr ""
#: lib/cannery_web/components/ammo_group_table_component.ex:81 #: lib/cannery_web/components/ammo_group_table_component.ex:81
#: lib/cannery_web/components/shot_group_table_component.ex:43 #: lib/cannery_web/components/shot_group_table_component.ex:43
#: lib/cannery_web/live/ammo_group_live/form_component.html.heex:50 #: lib/cannery_web/live/ammo_group_live/form_component.html.heex:50
#: lib/cannery_web/live/ammo_group_live/show.ex:90 #: lib/cannery_web/live/ammo_group_live/show.ex:92
#: lib/cannery_web/live/range_live/form_component.html.heex:30 #: lib/cannery_web/live/range_live/form_component.html.heex:30
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
msgid "Notes" msgid "Notes"
msgstr "" msgstr ""
#: lib/cannery_web/components/ammo_group_card.ex:52 #: lib/cannery_web/components/core_components/ammo_group_card.html.heex:26
#: lib/cannery_web/live/ammo_group_live/show.html.heex:24 #: lib/cannery_web/live/ammo_group_live/show.html.heex:24
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
msgid "Notes:" msgid "Notes:"
@ -324,7 +324,7 @@ msgstr ""
msgid "Price paid" msgid "Price paid"
msgstr "" msgstr ""
#: lib/cannery_web/components/ammo_group_card.ex:68 #: lib/cannery_web/components/core_components/ammo_group_card.html.heex:41
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
msgid "Price paid:" msgid "Price paid:"
msgstr "" msgstr ""
@ -335,17 +335,17 @@ msgstr ""
msgid "Primer type" msgid "Primer type"
msgstr "" msgstr ""
#: lib/cannery_web/live/home_live.html.heex:81 #: lib/cannery_web/live/home_live.html.heex:83
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
msgid "Public Signups" msgid "Public Signups"
msgstr "" msgstr ""
#: lib/cannery_web/live/home_live.html.heex:33 #: lib/cannery_web/live/home_live.html.heex:32
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
msgid "Secure:" msgid "Secure:"
msgstr "" msgstr ""
#: lib/cannery_web/live/home_live.html.heex:36 #: lib/cannery_web/live/home_live.html.heex:35
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
msgid "Self-host your own instance, or use an instance from someone you trust." msgid "Self-host your own instance, or use an instance from someone you trust."
msgstr "" msgstr ""
@ -356,7 +356,7 @@ msgstr ""
msgid "Settings" msgid "Settings"
msgstr "" msgstr ""
#: lib/cannery_web/live/home_live.html.heex:43 #: lib/cannery_web/live/home_live.html.heex:41
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
msgid "Simple:" msgid "Simple:"
msgstr "" msgstr ""
@ -366,15 +366,15 @@ msgstr ""
msgid "Steel" msgid "Steel"
msgstr "" msgstr ""
#: lib/cannery_web/live/ammo_group_live/show.html.heex:117 #: lib/cannery_web/live/ammo_group_live/show.html.heex:113
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
msgid "Stored in" msgid "Stored in"
msgstr "" msgstr ""
#: lib/cannery_web/components/container_table_component.ex:52 #: lib/cannery_web/components/container_table_component.ex:66
#: lib/cannery_web/components/topbar.ex:49 #: lib/cannery_web/components/core_components/topbar.html.heex:34
#: lib/cannery_web/live/tag_live/index.ex:44 #: lib/cannery_web/live/tag_live/index.ex:43
#: lib/cannery_web/live/tag_live/index.ex:54 #: lib/cannery_web/live/tag_live/index.ex:53
#: lib/cannery_web/live/tag_live/index.html.heex:3 #: lib/cannery_web/live/tag_live/index.html.heex:3
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
msgid "Tags" msgid "Tags"
@ -401,20 +401,20 @@ msgstr ""
msgid "Tracer" msgid "Tracer"
msgstr "" msgstr ""
#: lib/cannery_web/components/container_table_component.ex:49 #: lib/cannery_web/components/container_table_component.ex:48
#: lib/cannery_web/components/move_ammo_group_component.ex:68 #: lib/cannery_web/components/move_ammo_group_component.ex:68
#: lib/cannery_web/live/container_live/form_component.html.heex:36 #: lib/cannery_web/live/container_live/form_component.html.heex:36
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
msgid "Type" msgid "Type"
msgstr "" msgstr ""
#: lib/cannery_web/components/container_card.ex:44 #: lib/cannery_web/components/core_components/container_card.html.heex:21
#: lib/cannery_web/live/container_live/show.html.heex:12 #: lib/cannery_web/live/container_live/show.html.heex:12
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
msgid "Type:" msgid "Type:"
msgstr "" msgstr ""
#: lib/cannery_web/live/invite_live/index.html.heex:122 #: lib/cannery_web/live/invite_live/index.html.heex:127
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
msgid "Users" msgid "Users"
msgstr "" msgstr ""
@ -424,18 +424,18 @@ msgstr ""
msgid "Uses left" msgid "Uses left"
msgstr "" msgstr ""
#: lib/cannery_web/live/home_live.html.heex:37 #: lib/cannery_web/live/home_live.html.heex:36
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
msgid "Your data stays with you, period" msgid "Your data stays with you, period"
msgstr "" msgstr ""
#: lib/cannery_web/live/container_live/show.html.heex:70 #: lib/cannery_web/live/container_live/show.html.heex:67
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
msgid "No tags for this container" msgid "No tags for this container"
msgstr "" msgstr ""
#: lib/cannery_web/components/ammo_group_table_component.ex:72 #: lib/cannery_web/components/ammo_group_table_component.ex:72
#: lib/cannery_web/components/topbar.ex:81 #: lib/cannery_web/components/core_components/topbar.html.heex:66
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
msgid "Range" msgid "Range"
msgstr "" msgstr ""
@ -447,7 +447,7 @@ msgstr ""
#: lib/cannery_web/components/add_shot_group_component.html.heex:46 #: lib/cannery_web/components/add_shot_group_component.html.heex:46
#: lib/cannery_web/components/shot_group_table_component.ex:44 #: lib/cannery_web/components/shot_group_table_component.ex:44
#: lib/cannery_web/live/ammo_group_live/show.ex:91 #: lib/cannery_web/live/ammo_group_live/show.ex:93
#: lib/cannery_web/live/range_live/form_component.html.heex:37 #: lib/cannery_web/live/range_live/form_component.html.heex:37
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
msgid "Date" msgid "Date"
@ -469,19 +469,19 @@ msgstr ""
msgid "Record shots" msgid "Record shots"
msgstr "" msgstr ""
#: lib/cannery_web/live/ammo_group_live/show.ex:41 #: lib/cannery_web/live/ammo_group_live/show.ex:42
#: lib/cannery_web/live/range_live/index.ex:41 #: lib/cannery_web/live/range_live/index.ex:40
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
msgid "Edit Shot Records" msgid "Edit Shot Records"
msgstr "" msgstr ""
#: lib/cannery_web/live/range_live/index.ex:49 #: lib/cannery_web/live/range_live/index.ex:48
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
msgid "New Shot Records" msgid "New Shot Records"
msgstr "" msgstr ""
#: lib/cannery_web/live/range_live/index.html.heex:48 #: lib/cannery_web/live/range_live/index.html.heex:55
#: lib/cannery_web/live/range_live/index.html.heex:89 #: lib/cannery_web/live/range_live/index.html.heex:97
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
msgid "No shots recorded" msgid "No shots recorded"
msgstr "" msgstr ""
@ -493,20 +493,19 @@ msgid "Rounds left"
msgstr "" msgstr ""
#: lib/cannery_web/components/shot_group_table_component.ex:42 #: lib/cannery_web/components/shot_group_table_component.ex:42
#: lib/cannery_web/live/ammo_group_live/show.ex:89 #: lib/cannery_web/live/ammo_group_live/show.ex:91
#: lib/cannery_web/live/range_live/index.html.heex:62 #: lib/cannery_web/live/range_live/index.html.heex:69
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
msgid "Rounds shot" msgid "Rounds shot"
msgstr "" msgstr ""
#: lib/cannery_web/live/range_live/index.ex:57 #: lib/cannery_web/live/range_live/index.ex:56
#: lib/cannery_web/live/range_live/index.ex:67 #: lib/cannery_web/live/range_live/index.ex:66
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
msgid "Shot Records" msgid "Shot Records"
msgstr "" msgstr ""
#: lib/cannery_web/live/ammo_group_live/index.ex:38 #: lib/cannery_web/live/ammo_group_live/index.ex:38
#: lib/cannery_web/live/ammo_group_live/index.html.heex:119
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
msgid "Move ammo" msgid "Move ammo"
msgstr "" msgstr ""
@ -516,18 +515,18 @@ msgstr ""
msgid "No other containers" msgid "No other containers"
msgstr "" msgstr ""
#: lib/cannery_web/live/range_live/index.html.heex:53 #: lib/cannery_web/live/range_live/index.html.heex:60
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
msgid "Shot log" msgid "Shot log"
msgstr "" msgstr ""
#: lib/cannery_web/components/ammo_group_card.ex:69
#: lib/cannery_web/components/ammo_group_card.ex:76
#: lib/cannery_web/components/ammo_group_table_component.ex:153 #: lib/cannery_web/components/ammo_group_table_component.ex:153
#: lib/cannery_web/components/ammo_group_table_component.ex:225 #: lib/cannery_web/components/ammo_group_table_component.ex:229
#: lib/cannery_web/components/ammo_type_table_component.ex:180 #: lib/cannery_web/components/ammo_type_table_component.ex:224
#: lib/cannery_web/components/core_components/ammo_group_card.html.heex:42
#: lib/cannery_web/components/core_components/ammo_group_card.html.heex:47
#: lib/cannery_web/live/ammo_group_live/show.html.heex:37 #: lib/cannery_web/live/ammo_group_live/show.html.heex:37
#: lib/cannery_web/live/ammo_group_live/show.html.heex:44 #: lib/cannery_web/live/ammo_group_live/show.html.heex:42
#: lib/cannery_web/live/ammo_type_live/show.html.heex:139 #: lib/cannery_web/live/ammo_type_live/show.html.heex:139
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
msgid "$%{amount}" msgid "$%{amount}"
@ -597,28 +596,28 @@ msgstr ""
msgid "Reconnecting..." msgid "Reconnecting..."
msgstr "" msgstr ""
#: lib/cannery_web/live/container_live/index.ex:32 #: lib/cannery_web/live/container_live/index.ex:28
#: lib/cannery_web/live/container_live/show.ex:110 #: lib/cannery_web/live/container_live/show.ex:108
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
msgid "Edit %{name}" msgid "Edit %{name}"
msgstr "" msgstr ""
#: lib/cannery_web/live/container_live/index.ex:69 #: lib/cannery_web/live/container_live/index.ex:63
#: lib/cannery_web/live/container_live/show.ex:111 #: lib/cannery_web/live/container_live/show.ex:109
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
msgid "Edit %{name} tags" msgid "Edit %{name} tags"
msgstr "" msgstr ""
#: lib/cannery_web/components/container_card.ex:60 #: lib/cannery_web/components/core_components/container_card.html.heex:37
#: lib/cannery_web/live/ammo_type_live/show.html.heex:70 #: lib/cannery_web/live/ammo_type_live/show.html.heex:70
#: lib/cannery_web/live/container_live/show.html.heex:35 #: lib/cannery_web/live/container_live/show.html.heex:33
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
msgid "Rounds:" msgid "Rounds:"
msgstr "" msgstr ""
#: lib/cannery_web/components/ammo_group_table_component.ex:222 #: lib/cannery_web/components/ammo_group_table_component.ex:226
#: lib/cannery_web/components/ammo_type_table_component.ex:179 #: lib/cannery_web/components/ammo_type_table_component.ex:223
#: lib/cannery_web/live/ammo_type_live/show.html.heex:145 #: lib/cannery_web/live/ammo_type_live/show.html.heex:143
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
msgid "No cost information" msgid "No cost information"
msgstr "" msgstr ""
@ -628,7 +627,7 @@ msgstr ""
msgid "% left" msgid "% left"
msgstr "" msgstr ""
#: lib/cannery_web/live/ammo_group_live/show.html.heex:43 #: lib/cannery_web/live/ammo_group_live/show.html.heex:41
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
msgid "Current value:" msgid "Current value:"
msgstr "" msgstr ""
@ -648,7 +647,7 @@ msgstr ""
msgid "Percentage left:" msgid "Percentage left:"
msgstr "" msgstr ""
#: lib/cannery_web/live/ammo_group_live/show.html.heex:130 #: lib/cannery_web/live/ammo_group_live/show.html.heex:126
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
msgid "Rounds used" msgid "Rounds used"
msgstr "" msgstr ""
@ -668,7 +667,7 @@ msgstr ""
msgid "Log in" msgid "Log in"
msgstr "" msgstr ""
#: lib/cannery_web/controllers/user_registration_controller.ex:32 #: lib/cannery_web/controllers/user_registration_controller.ex:33
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
msgid "Register" msgid "Register"
msgstr "" msgstr ""
@ -678,8 +677,8 @@ msgstr ""
msgid "Reset your password" msgid "Reset your password"
msgstr "" msgstr ""
#: lib/cannery_web/live/ammo_group_live/show.ex:40 #: lib/cannery_web/live/ammo_group_live/show.ex:41
#: lib/cannery_web/live/range_live/index.ex:33 #: lib/cannery_web/live/range_live/index.ex:32
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
msgid "Record Shots" msgid "Record Shots"
msgstr "" msgstr ""
@ -715,27 +714,27 @@ msgstr ""
msgid "Language" msgid "Language"
msgstr "" msgstr ""
#: lib/cannery_web/live/home_live.html.heex:107 #: lib/cannery_web/live/home_live.html.heex:109
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
msgid "Get involved!" msgid "Get involved!"
msgstr "" msgstr ""
#: lib/cannery_web/live/home_live.html.heex:128 #: lib/cannery_web/live/home_live.html.heex:130
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
msgid "Help translate" msgid "Help translate"
msgstr "" msgstr ""
#: lib/cannery_web/live/home_live.html.heex:139 #: lib/cannery_web/live/home_live.html.heex:141
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
msgid "Report bugs or request features" msgid "Report bugs or request features"
msgstr "" msgstr ""
#: lib/cannery_web/live/home_live.html.heex:117 #: lib/cannery_web/live/home_live.html.heex:119
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
msgid "View the source code" msgid "View the source code"
msgstr "" msgstr ""
#: lib/cannery_web/components/topbar.ex:65 #: lib/cannery_web/components/core_components/topbar.html.heex:50
#: lib/cannery_web/live/ammo_type_live/index.ex:52 #: lib/cannery_web/live/ammo_type_live/index.ex:52
#: lib/cannery_web/live/ammo_type_live/index.ex:62 #: lib/cannery_web/live/ammo_type_live/index.ex:62
#: lib/cannery_web/live/ammo_type_live/index.html.heex:3 #: lib/cannery_web/live/ammo_type_live/index.html.heex:3
@ -743,39 +742,39 @@ msgstr ""
msgid "Catalog" msgid "Catalog"
msgstr "" msgstr ""
#: lib/cannery_web/live/ammo_group_live/show.ex:44 #: lib/cannery_web/live/ammo_group_live/show.ex:45
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
msgid "Edit Ammo" msgid "Edit Ammo"
msgstr "" msgstr ""
#: lib/cannery_web/live/ammo_group_live/show.ex:42 #: lib/cannery_web/live/ammo_group_live/show.ex:43
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
msgid "Move Ammo" msgid "Move Ammo"
msgstr "" msgstr ""
#: lib/cannery_web/live/container_live/show.html.heex:115 #: lib/cannery_web/live/container_live/show.html.heex:112
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
msgid "No ammo in this container" msgid "No ammo in this container"
msgstr "" msgstr ""
#: lib/cannery_web/live/ammo_group_live/show.ex:43 #: lib/cannery_web/live/ammo_group_live/show.ex:44
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
msgid "Show Ammo" msgid "Show Ammo"
msgstr "" msgstr ""
#: lib/cannery_web/live/ammo_group_live/show.html.heex:122 #: lib/cannery_web/live/ammo_group_live/show.html.heex:118
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
msgid "This ammo is not in a container" msgid "This ammo is not in a container"
msgstr "" msgstr ""
#: lib/cannery_web/components/container_card.ex:55 #: lib/cannery_web/components/core_components/container_card.html.heex:32
#: lib/cannery_web/live/ammo_type_live/show.html.heex:98 #: lib/cannery_web/live/ammo_type_live/show.html.heex:98
#: lib/cannery_web/live/container_live/show.html.heex:26 #: lib/cannery_web/live/container_live/show.html.heex:23
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
msgid "Packs:" msgid "Packs:"
msgstr "" msgstr ""
#: lib/cannery_web/components/topbar.ex:25 #: lib/cannery_web/components/core_components/topbar.html.heex:10
#: lib/cannery_web/live/home_live.html.heex:4 #: lib/cannery_web/live/home_live.html.heex:4
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
msgid "Cannery logo" msgid "Cannery logo"
@ -791,45 +790,45 @@ msgstr ""
msgid "Leave \"Uses left\" blank to make invite unlimited" msgid "Leave \"Uses left\" blank to make invite unlimited"
msgstr "" msgstr ""
#: lib/cannery_web/components/ammo_group_card.ex:83 #: lib/cannery_web/components/core_components/ammo_group_card.html.heex:54
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
msgid "Container:" msgid "Container:"
msgstr "" msgstr ""
#: lib/cannery_web/live/ammo_group_live/index.html.heex:63 #: lib/cannery_web/live/ammo_group_live/index.html.heex:64
#: lib/cannery_web/live/ammo_type_live/index.html.heex:38 #: lib/cannery_web/live/ammo_type_live/index.html.heex:39
#: lib/cannery_web/live/ammo_type_live/show.html.heex:155 #: lib/cannery_web/live/ammo_type_live/show.html.heex:153
#: lib/cannery_web/live/container_live/show.html.heex:101 #: lib/cannery_web/live/container_live/show.html.heex:98
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
msgid "Show used" msgid "Show used"
msgstr "" msgstr ""
#: lib/cannery_web/components/ammo_group_table_component.ex:193 #: lib/cannery_web/components/ammo_group_table_component.ex:187
#: lib/cannery_web/live/ammo_group_live/show.html.heex:19 #: lib/cannery_web/live/ammo_group_live/show.html.heex:19
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
msgid "%{percentage}%" msgid "%{percentage}%"
msgstr "" msgstr ""
#: lib/cannery_web/live/range_live/index.ex:134 #: lib/cannery_web/live/range_live/index.ex:135
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
msgid "Rounds shot: %{count}" msgid "Rounds shot: %{count}"
msgstr "" msgstr ""
#: lib/cannery_web/components/ammo_type_table_component.ex:100 #: lib/cannery_web/components/ammo_type_table_component.ex:100
#: lib/cannery_web/components/container_table_component.ex:50 #: lib/cannery_web/components/container_table_component.ex:64
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
msgid "Packs" msgid "Packs"
msgstr "" msgstr ""
#: lib/cannery_web/components/ammo_type_table_component.ex:80 #: lib/cannery_web/components/ammo_type_table_component.ex:80
#: lib/cannery_web/components/container_table_component.ex:51 #: lib/cannery_web/components/container_table_component.ex:65
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
msgid "Rounds" msgid "Rounds"
msgstr "" msgstr ""
#: lib/cannery_web/live/ammo_type_live/show.html.heex:161 #: lib/cannery_web/live/ammo_type_live/show.html.heex:159
#: lib/cannery_web/live/container_live/index.html.heex:38 #: lib/cannery_web/live/container_live/index.html.heex:39
#: lib/cannery_web/live/container_live/show.html.heex:107 #: lib/cannery_web/live/container_live/show.html.heex:104
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
msgid "View as table" msgid "View as table"
msgstr "" msgstr ""
@ -879,102 +878,102 @@ msgstr ""
msgid "Used up!" msgid "Used up!"
msgstr "" msgstr ""
#: lib/cannery_web/live/range_live/index.html.heex:64 #: lib/cannery_web/live/range_live/index.html.heex:71
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
msgid "Rounds shot chart" msgid "Rounds shot chart"
msgstr "" msgstr ""
#: lib/cannery_web/live/ammo_type_live/show.ex:27 #: lib/cannery_web/live/ammo_type_live/show.ex:26
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
msgid "Blank:" msgid "Blank:"
msgstr "" msgstr ""
#: lib/cannery_web/live/ammo_type_live/show.ex:13 #: lib/cannery_web/live/ammo_type_live/show.ex:12
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
msgid "Bullet core:" msgid "Bullet core:"
msgstr "" msgstr ""
#: lib/cannery_web/live/ammo_type_live/show.ex:12 #: lib/cannery_web/live/ammo_type_live/show.ex:11
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
msgid "Bullet type:" msgid "Bullet type:"
msgstr "" msgstr ""
#: lib/cannery_web/live/ammo_type_live/show.ex:15 #: lib/cannery_web/live/ammo_type_live/show.ex:14
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
msgid "Caliber:" msgid "Caliber:"
msgstr "" msgstr ""
#: lib/cannery_web/live/ammo_type_live/show.ex:14 #: lib/cannery_web/live/ammo_type_live/show.ex:13
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
msgid "Cartridge:" msgid "Cartridge:"
msgstr "" msgstr ""
#: lib/cannery_web/live/ammo_type_live/show.ex:16 #: lib/cannery_web/live/ammo_type_live/show.ex:15
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
msgid "Case material:" msgid "Case material:"
msgstr "" msgstr ""
#: lib/cannery_web/live/ammo_type_live/show.ex:28 #: lib/cannery_web/live/ammo_type_live/show.ex:27
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
msgid "Corrosive:" msgid "Corrosive:"
msgstr "" msgstr ""
#: lib/cannery_web/live/ammo_type_live/show.ex:24 #: lib/cannery_web/live/ammo_type_live/show.ex:23
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
msgid "Firing type:" msgid "Firing type:"
msgstr "" msgstr ""
#: lib/cannery_web/live/ammo_type_live/show.ex:21 #: lib/cannery_web/live/ammo_type_live/show.ex:20
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
msgid "Grains:" msgid "Grains:"
msgstr "" msgstr ""
#: lib/cannery_web/live/ammo_type_live/show.ex:26 #: lib/cannery_web/live/ammo_type_live/show.ex:25
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
msgid "Incendiary:" msgid "Incendiary:"
msgstr "" msgstr ""
#: lib/cannery_web/live/ammo_type_live/show.ex:17 #: lib/cannery_web/live/ammo_type_live/show.ex:16
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
msgid "Jacket type:" msgid "Jacket type:"
msgstr "" msgstr ""
#: lib/cannery_web/live/ammo_type_live/show.ex:29 #: lib/cannery_web/live/ammo_type_live/show.ex:28
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
msgid "Manufacturer:" msgid "Manufacturer:"
msgstr "" msgstr ""
#: lib/cannery_web/live/ammo_type_live/show.ex:18 #: lib/cannery_web/live/ammo_type_live/show.ex:17
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
msgid "Muzzle velocity:" msgid "Muzzle velocity:"
msgstr "" msgstr ""
#: lib/cannery_web/live/ammo_type_live/show.ex:20 #: lib/cannery_web/live/ammo_type_live/show.ex:19
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
msgid "Powder grains per charge:" msgid "Powder grains per charge:"
msgstr "" msgstr ""
#: lib/cannery_web/live/ammo_type_live/show.ex:19 #: lib/cannery_web/live/ammo_type_live/show.ex:18
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
msgid "Powder type:" msgid "Powder type:"
msgstr "" msgstr ""
#: lib/cannery_web/live/ammo_type_live/show.ex:22 #: lib/cannery_web/live/ammo_type_live/show.ex:21
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
msgid "Pressure:" msgid "Pressure:"
msgstr "" msgstr ""
#: lib/cannery_web/live/ammo_type_live/show.ex:23 #: lib/cannery_web/live/ammo_type_live/show.ex:22
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
msgid "Primer type:" msgid "Primer type:"
msgstr "" msgstr ""
#: lib/cannery_web/live/ammo_type_live/show.ex:25 #: lib/cannery_web/live/ammo_type_live/show.ex:24
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
msgid "Tracer:" msgid "Tracer:"
msgstr "" msgstr ""
#: lib/cannery_web/live/ammo_type_live/show.ex:30 #: lib/cannery_web/live/ammo_type_live/show.ex:29
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
msgid "UPC:" msgid "UPC:"
msgstr "" msgstr ""
@ -986,13 +985,13 @@ msgid "Average CPR"
msgstr "" msgstr ""
#: lib/cannery_web/live/ammo_type_live/index.ex:28 #: lib/cannery_web/live/ammo_type_live/index.ex:28
#: lib/cannery_web/live/ammo_type_live/show.ex:118 #: lib/cannery_web/live/ammo_type_live/show.ex:135
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
msgid "Edit %{ammo_type_name}" msgid "Edit %{ammo_type_name}"
msgstr "" msgstr ""
#: lib/cannery_web/components/ammo_group_card.ex:40 #: lib/cannery_web/components/ammo_group_table_component.ex:233
#: lib/cannery_web/components/ammo_group_table_component.ex:231 #: lib/cannery_web/components/core_components/ammo_group_card.html.heex:17
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
msgid "Empty" msgid "Empty"
msgstr "" msgstr ""
@ -1002,7 +1001,7 @@ msgstr ""
msgid "CPR" msgid "CPR"
msgstr "" msgstr ""
#: lib/cannery_web/components/ammo_group_card.ex:75 #: lib/cannery_web/components/core_components/ammo_group_card.html.heex:46
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
msgid "CPR:" msgid "CPR:"
msgstr "" msgstr ""
@ -1012,7 +1011,7 @@ msgstr ""
msgid "Original Count" msgid "Original Count"
msgstr "" msgstr ""
#: lib/cannery_web/components/ammo_group_card.ex:47 #: lib/cannery_web/components/core_components/ammo_group_card.html.heex:21
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
msgid "Original Count:" msgid "Original Count:"
msgstr "" msgstr ""
@ -1022,27 +1021,22 @@ msgstr ""
msgid "Home" msgid "Home"
msgstr "" msgstr ""
#: lib/cannery_web/live/container_live/show.html.heex:24 #: lib/cannery_web/live/container_live/show.html.heex:28
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
msgid "Total packs:" msgid "Total packs:"
msgstr "" msgstr ""
#: lib/cannery_web/live/container_live/show.html.heex:33
#, elixir-autogen, elixir-format
msgid "Total rounds:"
msgstr ""
#: lib/cannery_web/components/ammo_group_table_component.ex:58 #: lib/cannery_web/components/ammo_group_table_component.ex:58
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
msgid "Last used on" msgid "Last used on"
msgstr "" msgstr ""
#: lib/cannery_web/components/ammo_group_card.ex:62 #: lib/cannery_web/components/core_components/ammo_group_card.html.heex:36
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
msgid "Last used on:" msgid "Last used on:"
msgstr "" msgstr ""
#: lib/cannery_web/components/ammo_group_table_component.ex:178 #: lib/cannery_web/components/ammo_group_table_component.ex:171
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
msgid "Never used" msgid "Never used"
msgstr "" msgstr ""
@ -1053,7 +1047,7 @@ msgstr ""
msgid "Purchased on" msgid "Purchased on"
msgstr "" msgstr ""
#: lib/cannery_web/components/ammo_group_card.ex:57 #: lib/cannery_web/components/core_components/ammo_group_card.html.heex:31
#: lib/cannery_web/live/ammo_group_live/show.html.heex:30 #: lib/cannery_web/live/ammo_group_live/show.html.heex:30
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
msgid "Purchased on:" msgid "Purchased on:"
@ -1065,32 +1059,32 @@ msgid "Edit ammo"
msgstr "" msgstr ""
#: lib/cannery_web/live/ammo_type_live/index.html.heex:8 #: lib/cannery_web/live/ammo_type_live/index.html.heex:8
#: lib/cannery_web/live/ammo_type_live/index.html.heex:45 #: lib/cannery_web/live/ammo_type_live/index.html.heex:46
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
msgid "No Ammo types" msgid "No Ammo types"
msgstr "" msgstr ""
#: lib/cannery_web/live/ammo_type_live/index.html.heex:32 #: lib/cannery_web/live/ammo_type_live/index.html.heex:33
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
msgid "Search catalog" msgid "Search catalog"
msgstr "" msgstr ""
#: lib/cannery_web/live/ammo_group_live/index.html.heex:57 #: lib/cannery_web/live/ammo_group_live/index.html.heex:58
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
msgid "Search ammo" msgid "Search ammo"
msgstr "" msgstr ""
#: lib/cannery_web/live/container_live/index.html.heex:32 #: lib/cannery_web/live/container_live/index.html.heex:33
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
msgid "Search containers" msgid "Search containers"
msgstr "" msgstr ""
#: lib/cannery_web/live/tag_live/index.html.heex:35 #: lib/cannery_web/live/tag_live/index.html.heex:36
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
msgid "Search tags" msgid "Search tags"
msgstr "" msgstr ""
#: lib/cannery_web/live/range_live/index.html.heex:82 #: lib/cannery_web/live/range_live/index.html.heex:90
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
msgid "Search shot records" msgid "Search shot records"
msgstr "" msgstr ""
@ -1103,47 +1097,47 @@ msgstr ""
#: lib/cannery_web/templates/error/error.html.heex:8 #: lib/cannery_web/templates/error/error.html.heex:8
#: lib/cannery_web/templates/layout/root.html.heex:13 #: lib/cannery_web/templates/layout/root.html.heex:13
#: lib/cannery_web/templates/layout/root.html.heex:14 #: lib/cannery_web/templates/layout/root.html.heex:14
#: lib/cannery_web/views/layout_view.ex:15 #: lib/cannery_web/views/layout_view.ex:14
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
msgid "Cannery" msgid "Cannery"
msgstr "" msgstr ""
#: lib/cannery_web/components/user_card.ex:33 #: lib/cannery_web/components/core_components/user_card.html.heex:20
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
msgid "Email unconfirmed" msgid "Email unconfirmed"
msgstr "" msgstr ""
#: lib/cannery_web/components/user_card.ex:38 #: lib/cannery_web/components/core_components/user_card.html.heex:25
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
msgid "User registered on%{registered_datetime}" msgid "User registered on%{registered_datetime}"
msgstr "" msgstr ""
#: lib/cannery_web/components/user_card.ex:27 #: lib/cannery_web/components/core_components/user_card.html.heex:14
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
msgid "User was confirmed at%{confirmed_datetime}" msgid "User was confirmed at%{confirmed_datetime}"
msgstr "" msgstr ""
#: lib/cannery_web/components/invite_card.ex:37 #: lib/cannery_web/components/core_components/invite_card.html.heex:16
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
msgid "Uses Left: Unlimited" msgid "Uses Left: Unlimited"
msgstr "" msgstr ""
#: lib/cannery_web/live/home_live.html.heex:26 #: lib/cannery_web/live/home_live.html.heex:25
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
msgid "Cannery lets you easily keep an eye on your ammo levels before and after range day" msgid "Cannery lets you easily keep an eye on your ammo levels before and after range day"
msgstr "" msgstr ""
#: lib/cannery_web/views/layout_view.ex:11 #: lib/cannery_web/views/layout_view.ex:10
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
msgid "Cannery | %{title}" msgid "Cannery | %{title}"
msgstr "" msgstr ""
#: lib/cannery_web/live/home_live.html.heex:78 #: lib/cannery_web/live/home_live.html.heex:80
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
msgid "Registration:" msgid "Registration:"
msgstr "" msgstr ""
#: lib/cannery_web/live/home_live.html.heex:88 #: lib/cannery_web/live/home_live.html.heex:90
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
msgid "Version:" msgid "Version:"
msgstr "" msgstr ""
@ -1153,29 +1147,29 @@ msgstr ""
msgid "Welcome to Cannery" msgid "Welcome to Cannery"
msgstr "" msgstr ""
#: lib/cannery_web/live/invite_live/index.html.heex:70 #: lib/cannery_web/live/invite_live/index.html.heex:75
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
msgid "Disable" msgid "Disable"
msgstr "" msgstr ""
#: lib/cannery_web/live/invite_live/index.html.heex:70 #: lib/cannery_web/live/invite_live/index.html.heex:75
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
msgid "Enable" msgid "Enable"
msgstr "" msgstr ""
#: lib/cannery_web/components/invite_card.ex:32 #: lib/cannery_web/components/core_components/invite_card.html.heex:11
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
msgid "Uses Left: %{uses_left_count}" msgid "Uses Left: %{uses_left_count}"
msgstr "" msgstr ""
#: lib/cannery_web/components/invite_card.ex:52 #: lib/cannery_web/components/core_components/invite_card.html.heex:31
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
msgid "Uses: %{uses_count}" msgid "Uses: %{uses_count}"
msgstr "" msgstr ""
#: lib/cannery_web/templates/user_confirmation/new.html.heex:12 #: lib/cannery_web/templates/user_confirmation/new.html.heex:13
#: lib/cannery_web/templates/user_registration/new.html.heex:20 #: lib/cannery_web/templates/user_registration/new.html.heex:20
#: lib/cannery_web/templates/user_reset_password/new.html.heex:12 #: lib/cannery_web/templates/user_reset_password/new.html.heex:13
#: lib/cannery_web/templates/user_session/new.html.heex:17 #: lib/cannery_web/templates/user_session/new.html.heex:17
#: lib/cannery_web/templates/user_settings/edit.html.heex:27 #: lib/cannery_web/templates/user_settings/edit.html.heex:27
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
@ -1187,24 +1181,3 @@ msgstr ""
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
msgid "Password" msgid "Password"
msgstr "" msgstr ""
#: lib/cannery_web/live/ammo_group_live/index.html.heex:153
#, elixir-autogen, elixir-format
msgid "Clone ammo group of %{ammo_group_count} bullets"
msgstr ""
#: lib/cannery_web/live/ammo_group_live/index.html.heex:168
#: lib/cannery_web/live/ammo_group_live/show.html.heex:80
#, elixir-autogen, elixir-format
msgid "Delete ammo group of %{ammo_group_count} bullets"
msgstr ""
#: lib/cannery_web/live/ammo_group_live/index.html.heex:141
#, elixir-autogen, elixir-format
msgid "Edit ammo group of %{ammo_group_count} bullets"
msgstr ""
#: lib/cannery_web/live/ammo_group_live/index.html.heex:129
#, elixir-autogen, elixir-format
msgid "View ammo group of %{ammo_group_count} bullets"
msgstr ""

View File

@ -66,11 +66,11 @@ msgstr ""
msgid "Invite someone new!" msgid "Invite someone new!"
msgstr "" msgstr ""
#: lib/cannery_web/components/topbar.ex:137 #: lib/cannery_web/components/core_components/topbar.html.heex:122
#: lib/cannery_web/templates/user_confirmation/new.html.heex:31 #: lib/cannery_web/templates/user_confirmation/new.html.heex:32
#: lib/cannery_web/templates/user_registration/new.html.heex:44 #: lib/cannery_web/templates/user_registration/new.html.heex:44
#: lib/cannery_web/templates/user_reset_password/edit.html.heex:45 #: lib/cannery_web/templates/user_reset_password/edit.html.heex:45
#: lib/cannery_web/templates/user_reset_password/new.html.heex:31 #: lib/cannery_web/templates/user_reset_password/new.html.heex:32
#: lib/cannery_web/templates/user_session/new.html.heex:3 #: lib/cannery_web/templates/user_session/new.html.heex:3
#: lib/cannery_web/templates/user_session/new.html.heex:28 #: lib/cannery_web/templates/user_session/new.html.heex:28
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
@ -97,19 +97,19 @@ msgstr ""
msgid "New Tag" msgid "New Tag"
msgstr "" msgstr ""
#: lib/cannery_web/components/topbar.ex:129 #: lib/cannery_web/components/core_components/topbar.html.heex:114
#: lib/cannery_web/templates/user_confirmation/new.html.heex:28 #: lib/cannery_web/templates/user_confirmation/new.html.heex:29
#: lib/cannery_web/templates/user_registration/new.html.heex:3 #: lib/cannery_web/templates/user_registration/new.html.heex:3
#: lib/cannery_web/templates/user_registration/new.html.heex:37 #: lib/cannery_web/templates/user_registration/new.html.heex:37
#: lib/cannery_web/templates/user_reset_password/edit.html.heex:42 #: lib/cannery_web/templates/user_reset_password/edit.html.heex:42
#: lib/cannery_web/templates/user_reset_password/new.html.heex:28 #: lib/cannery_web/templates/user_reset_password/new.html.heex:29
#: lib/cannery_web/templates/user_session/new.html.heex:39 #: lib/cannery_web/templates/user_session/new.html.heex:39
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
msgid "Register" msgid "Register"
msgstr "" msgstr ""
#: lib/cannery_web/templates/user_confirmation/new.html.heex:3 #: lib/cannery_web/templates/user_confirmation/new.html.heex:3
#: lib/cannery_web/templates/user_confirmation/new.html.heex:15 #: lib/cannery_web/templates/user_confirmation/new.html.heex:16
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
msgid "Resend confirmation instructions" msgid "Resend confirmation instructions"
msgstr "" msgstr ""
@ -131,17 +131,17 @@ msgstr ""
msgid "Save" msgid "Save"
msgstr "" msgstr ""
#: lib/cannery_web/templates/user_reset_password/new.html.heex:15 #: lib/cannery_web/templates/user_reset_password/new.html.heex:16
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
msgid "Send instructions to reset password" msgid "Send instructions to reset password"
msgstr "" msgstr ""
#: lib/cannery_web/live/container_live/show.html.heex:78 #: lib/cannery_web/live/container_live/show.html.heex:75
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
msgid "Why not add one?" msgid "Why not add one?"
msgstr "" msgstr ""
#: lib/cannery_web/live/container_live/edit_tags_component.html.heex:50 #: lib/cannery_web/live/container_live/edit_tags_component.html.heex:51
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
msgid "Add" msgid "Add"
msgstr "" msgstr ""
@ -156,9 +156,9 @@ msgstr ""
msgid "Why not get some ready to shoot?" msgid "Why not get some ready to shoot?"
msgstr "" msgstr ""
#: lib/cannery_web/live/ammo_group_live/index.html.heex:102 #: lib/cannery_web/live/ammo_group_live/index.html.heex:103
#: lib/cannery_web/live/ammo_group_live/show.html.heex:107 #: lib/cannery_web/live/ammo_group_live/show.html.heex:103
#: lib/cannery_web/live/range_live/index.html.heex:38 #: lib/cannery_web/live/range_live/index.html.heex:45
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
msgid "Record shots" msgid "Record shots"
msgstr "" msgstr ""
@ -168,17 +168,12 @@ msgstr ""
msgid "Add another container!" msgid "Add another container!"
msgstr "" msgstr ""
#: lib/cannery_web/live/ammo_group_live/show.html.heex:100
#, elixir-autogen, elixir-format
msgid "Move containers"
msgstr ""
#: lib/cannery_web/components/move_ammo_group_component.ex:126 #: lib/cannery_web/components/move_ammo_group_component.ex:126
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
msgid "Select" msgid "Select"
msgstr "" msgstr ""
#: lib/cannery_web/live/invite_live/index.html.heex:33 #: lib/cannery_web/live/invite_live/index.html.heex:38
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
msgid "Copy to clipboard" msgid "Copy to clipboard"
msgstr "" msgstr ""
@ -203,7 +198,7 @@ msgstr ""
msgid "Change language" msgid "Change language"
msgstr "" msgstr ""
#: lib/cannery_web/live/ammo_group_live/show.html.heex:59 #: lib/cannery_web/live/ammo_group_live/show.html.heex:55
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
msgid "View in Catalog" msgid "View in Catalog"
msgstr "" msgstr ""
@ -214,23 +209,25 @@ msgid "add an ammo type first"
msgstr "" msgstr ""
#: lib/cannery_web/components/move_ammo_group_component.ex:80 #: lib/cannery_web/components/move_ammo_group_component.ex:80
#: lib/cannery_web/live/ammo_group_live/index.html.heex:120
#: lib/cannery_web/live/ammo_group_live/show.html.heex:96
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
msgid "Move ammo" msgid "Move ammo"
msgstr "" msgstr ""
#: lib/cannery_web/live/invite_live/index.html.heex:85 #: lib/cannery_web/live/invite_live/index.html.heex:90
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
msgid "Set Unlimited" msgid "Set Unlimited"
msgstr "" msgstr ""
#: lib/cannery_web/live/ammo_group_live/show.html.heex:93 #: lib/cannery_web/live/ammo_group_live/show.html.heex:89
#: lib/cannery_web/live/range_live/index.html.heex:31 #: lib/cannery_web/live/range_live/index.html.heex:38
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
msgid "Stage for range" msgid "Stage for range"
msgstr "" msgstr ""
#: lib/cannery_web/live/ammo_group_live/show.html.heex:92 #: lib/cannery_web/live/ammo_group_live/show.html.heex:88
#: lib/cannery_web/live/range_live/index.html.heex:30 #: lib/cannery_web/live/range_live/index.html.heex:37
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
msgid "Unstage from range" msgid "Unstage from range"
msgstr "" msgstr ""
@ -240,106 +237,123 @@ msgstr ""
msgid "Export Data as JSON" msgid "Export Data as JSON"
msgstr "" msgstr ""
#: lib/cannery_web/live/ammo_type_live/index.html.heex:83 #: lib/cannery_web/live/ammo_type_live/index.html.heex:84
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
msgid "Clone %{ammo_type_name}" msgid "Clone %{ammo_type_name}"
msgstr "" msgstr ""
#: lib/cannery_web/live/container_live/index.html.heex:86 #: lib/cannery_web/live/container_live/index.html.heex:87
#: lib/cannery_web/live/container_live/index.html.heex:138 #: lib/cannery_web/live/container_live/index.html.heex:143
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
msgid "Clone %{container_name}" msgid "Clone %{container_name}"
msgstr "" msgstr ""
#: lib/cannery_web/live/invite_live/index.html.heex:30 #: lib/cannery_web/live/invite_live/index.html.heex:35
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
msgid "Copy invite link for %{invite_name}" msgid "Copy invite link for %{invite_name}"
msgstr "" msgstr ""
#: lib/cannery_web/live/ammo_type_live/index.html.heex:102 #: lib/cannery_web/live/ammo_type_live/index.html.heex:103
#: lib/cannery_web/live/ammo_type_live/show.html.heex:36 #: lib/cannery_web/live/ammo_type_live/show.html.heex:36
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
msgid "Delete %{ammo_type_name}" msgid "Delete %{ammo_type_name}"
msgstr "" msgstr ""
#: lib/cannery_web/live/container_live/index.html.heex:101 #: lib/cannery_web/live/container_live/index.html.heex:102
#: lib/cannery_web/live/container_live/index.html.heex:153 #: lib/cannery_web/live/container_live/index.html.heex:158
#: lib/cannery_web/live/container_live/show.html.heex:58 #: lib/cannery_web/live/container_live/show.html.heex:55
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
msgid "Delete %{container_name}" msgid "Delete %{container_name}"
msgstr "" msgstr ""
#: lib/cannery_web/live/tag_live/index.html.heex:64 #: lib/cannery_web/live/tag_live/index.html.heex:65
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
msgid "Delete %{tag_name}" msgid "Delete %{tag_name}"
msgstr "" msgstr ""
#: lib/cannery_web/live/invite_live/index.html.heex:58 #: lib/cannery_web/live/invite_live/index.html.heex:63
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
msgid "Delete invite for %{invite_name}" msgid "Delete invite for %{invite_name}"
msgstr "" msgstr ""
#: lib/cannery_web/live/ammo_group_live/show.ex:145 #: lib/cannery_web/live/ammo_group_live/show.ex:161
#: lib/cannery_web/live/range_live/index.html.heex:122 #: lib/cannery_web/live/range_live/index.html.heex:130
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
msgid "Delete shot record of %{shot_group_count} shots" msgid "Delete shot record of %{shot_group_count} shots"
msgstr "" msgstr ""
#: lib/cannery_web/live/ammo_type_live/index.html.heex:73 #: lib/cannery_web/live/ammo_type_live/index.html.heex:74
#: lib/cannery_web/live/ammo_type_live/show.html.heex:19 #: lib/cannery_web/live/ammo_type_live/show.html.heex:19
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
msgid "Edit %{ammo_type_name}" msgid "Edit %{ammo_type_name}"
msgstr "" msgstr ""
#: lib/cannery_web/live/container_live/index.html.heex:76 #: lib/cannery_web/live/container_live/index.html.heex:77
#: lib/cannery_web/live/container_live/index.html.heex:128 #: lib/cannery_web/live/container_live/index.html.heex:133
#: lib/cannery_web/live/container_live/show.html.heex:45 #: lib/cannery_web/live/container_live/show.html.heex:42
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
msgid "Edit %{container_name}" msgid "Edit %{container_name}"
msgstr "" msgstr ""
#: lib/cannery_web/live/tag_live/index.html.heex:51 #: lib/cannery_web/live/tag_live/index.html.heex:52
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
msgid "Edit %{tag_name}" msgid "Edit %{tag_name}"
msgstr "" msgstr ""
#: lib/cannery_web/live/ammo_group_live/show.html.heex:66 #: lib/cannery_web/live/ammo_group_live/index.html.heex:142
#: lib/cannery_web/live/ammo_group_live/show.html.heex:62
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
msgid "Edit ammo group of %{ammo_group_count} bullets" msgid "Edit ammo group of %{ammo_group_count} bullets"
msgstr "" msgstr ""
#: lib/cannery_web/live/invite_live/index.html.heex:41 #: lib/cannery_web/live/invite_live/index.html.heex:46
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
msgid "Edit invite for %{invite_name}" msgid "Edit invite for %{invite_name}"
msgstr "" msgstr ""
#: lib/cannery_web/live/ammo_group_live/show.ex:130 #: lib/cannery_web/live/ammo_group_live/show.ex:146
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
msgid "Edit shot group of %{shot_group_count} shots" msgid "Edit shot group of %{shot_group_count} shots"
msgstr "" msgstr ""
#: lib/cannery_web/live/range_live/index.html.heex:105 #: lib/cannery_web/live/range_live/index.html.heex:113
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
msgid "Edit shot record of %{shot_group_count} shots" msgid "Edit shot record of %{shot_group_count} shots"
msgstr "" msgstr ""
#: lib/cannery_web/live/ammo_group_live/index.html.heex:95 #: lib/cannery_web/live/ammo_group_live/index.html.heex:96
#, elixir-autogen, elixir-format, fuzzy #, elixir-autogen, elixir-format, fuzzy
msgid "Stage" msgid "Stage"
msgstr "" msgstr ""
#: lib/cannery_web/live/container_live/index.html.heex:64 #: lib/cannery_web/live/container_live/index.html.heex:65
#: lib/cannery_web/live/container_live/index.html.heex:117 #: lib/cannery_web/live/container_live/index.html.heex:122
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
msgid "Tag %{container_name}" msgid "Tag %{container_name}"
msgstr "" msgstr ""
#: lib/cannery_web/live/ammo_group_live/index.html.heex:94 #: lib/cannery_web/live/ammo_group_live/index.html.heex:95
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
msgid "Unstage" msgid "Unstage"
msgstr "" msgstr ""
#: lib/cannery_web/live/ammo_type_live/index.html.heex:63 #: lib/cannery_web/live/ammo_type_live/index.html.heex:64
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
msgid "View %{ammo_type_name}" msgid "View %{ammo_type_name}"
msgstr "" msgstr ""
#: lib/cannery_web/live/ammo_group_live/index.html.heex:154
#, elixir-autogen, elixir-format, fuzzy
msgid "Clone ammo group of %{ammo_group_count} bullets"
msgstr ""
#: lib/cannery_web/live/ammo_group_live/index.html.heex:169
#: lib/cannery_web/live/ammo_group_live/show.html.heex:76
#, elixir-autogen, elixir-format, fuzzy
msgid "Delete ammo group of %{ammo_group_count} bullets"
msgstr ""
#: lib/cannery_web/live/ammo_group_live/index.html.heex:130
#, elixir-autogen, elixir-format, fuzzy
msgid "View ammo group of %{ammo_group_count} bullets"
msgstr ""

View File

@ -10,23 +10,23 @@ msgid ""
msgstr "" msgstr ""
"Language: en\n" "Language: en\n"
#: lib/cannery_web/live/home_live.html.heex:46 #: lib/cannery_web/live/home_live.html.heex:44
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
msgid "Access from any internet-capable device" msgid "Access from any internet-capable device"
msgstr "" msgstr ""
#: lib/cannery_web/live/invite_live/index.html.heex:94 #: lib/cannery_web/live/invite_live/index.html.heex:99
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
msgid "Admins" msgid "Admins"
msgstr "" msgstr ""
#: lib/cannery_web/live/home_live.html.heex:60 #: lib/cannery_web/live/home_live.html.heex:58
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
msgid "Admins:" msgid "Admins:"
msgstr "" msgstr ""
#: lib/cannery_web/components/core_components/topbar.html.heex:58
#: lib/cannery_web/components/shot_group_table_component.ex:41 #: lib/cannery_web/components/shot_group_table_component.ex:41
#: lib/cannery_web/components/topbar.ex:73
#: lib/cannery_web/live/ammo_group_live/index.ex:70 #: lib/cannery_web/live/ammo_group_live/index.ex:70
#: lib/cannery_web/live/ammo_group_live/index.ex:79 #: lib/cannery_web/live/ammo_group_live/index.ex:79
#: lib/cannery_web/live/ammo_group_live/index.html.heex:3 #: lib/cannery_web/live/ammo_group_live/index.html.heex:3
@ -93,9 +93,9 @@ msgstr ""
msgid "Container" msgid "Container"
msgstr "" msgstr ""
#: lib/cannery_web/components/topbar.ex:57 #: lib/cannery_web/components/core_components/topbar.html.heex:42
#: lib/cannery_web/live/container_live/index.ex:49 #: lib/cannery_web/live/container_live/index.ex:45
#: lib/cannery_web/live/container_live/index.ex:58 #: lib/cannery_web/live/container_live/index.ex:54
#: lib/cannery_web/live/container_live/index.html.heex:3 #: lib/cannery_web/live/container_live/index.html.heex:3
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
msgid "Containers" msgid "Containers"
@ -113,36 +113,36 @@ msgstr ""
msgid "Count" msgid "Count"
msgstr "" msgstr ""
#: lib/cannery_web/components/ammo_group_card.ex:39 #: lib/cannery_web/components/core_components/ammo_group_card.html.heex:16
#: lib/cannery_web/live/ammo_group_live/show.html.heex:8 #: lib/cannery_web/live/ammo_group_live/show.html.heex:8
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
msgid "Count:" msgid "Count:"
msgstr "" msgstr ""
#: lib/cannery_web/components/container_table_component.ex:47 #: lib/cannery_web/components/container_table_component.ex:46
#: lib/cannery_web/live/ammo_type_live/form_component.html.heex:25 #: lib/cannery_web/live/ammo_type_live/form_component.html.heex:25
#: lib/cannery_web/live/container_live/form_component.html.heex:28 #: lib/cannery_web/live/container_live/form_component.html.heex:28
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
msgid "Description" msgid "Description"
msgstr "" msgstr ""
#: lib/cannery_web/components/container_card.ex:39 #: lib/cannery_web/components/core_components/container_card.html.heex:16
#: lib/cannery_web/live/container_live/show.html.heex:7 #: lib/cannery_web/live/container_live/show.html.heex:7
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
msgid "Description:" msgid "Description:"
msgstr "" msgstr ""
#: lib/cannery_web/live/home_live.html.heex:23 #: lib/cannery_web/live/home_live.html.heex:22
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
msgid "Easy to Use:" msgid "Easy to Use:"
msgstr "" msgstr ""
#: lib/cannery_web/live/invite_live/index.ex:34 #: lib/cannery_web/live/invite_live/index.ex:33
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
msgid "Edit Invite" msgid "Edit Invite"
msgstr "" msgstr ""
#: lib/cannery_web/live/tag_live/index.ex:28 #: lib/cannery_web/live/tag_live/index.ex:27
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
msgid "Edit Tag" msgid "Edit Tag"
msgstr "" msgstr ""
@ -169,23 +169,23 @@ msgstr ""
msgid "Incendiary" msgid "Incendiary"
msgstr "" msgstr ""
#: lib/cannery_web/live/home_live.html.heex:55 #: lib/cannery_web/live/home_live.html.heex:53
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
msgid "Instance Information" msgid "Instance Information"
msgstr "" msgstr ""
#: lib/cannery_web/components/invite_card.ex:42 #: lib/cannery_web/components/core_components/invite_card.html.heex:21
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
msgid "Invite Disabled" msgid "Invite Disabled"
msgstr "" msgstr ""
#: lib/cannery_web/live/home_live.html.heex:82 #: lib/cannery_web/live/home_live.html.heex:84
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
msgid "Invite Only" msgid "Invite Only"
msgstr "" msgstr ""
#: lib/cannery_web/components/topbar.ex:89 #: lib/cannery_web/components/core_components/topbar.html.heex:74
#: lib/cannery_web/live/invite_live/index.ex:42 #: lib/cannery_web/live/invite_live/index.ex:41
#: lib/cannery_web/live/invite_live/index.html.heex:3 #: lib/cannery_web/live/invite_live/index.html.heex:3
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
msgid "Invites" msgid "Invites"
@ -196,14 +196,14 @@ msgstr ""
msgid "Keep me logged in for 60 days" msgid "Keep me logged in for 60 days"
msgstr "" msgstr ""
#: lib/cannery_web/components/container_table_component.ex:48 #: lib/cannery_web/components/container_table_component.ex:47
#: lib/cannery_web/components/move_ammo_group_component.ex:69 #: lib/cannery_web/components/move_ammo_group_component.ex:69
#: lib/cannery_web/live/container_live/form_component.html.heex:43 #: lib/cannery_web/live/container_live/form_component.html.heex:43
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
msgid "Location" msgid "Location"
msgstr "" msgstr ""
#: lib/cannery_web/components/container_card.ex:49 #: lib/cannery_web/components/core_components/container_card.html.heex:26
#: lib/cannery_web/live/container_live/show.html.heex:17 #: lib/cannery_web/live/container_live/show.html.heex:17
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
msgid "Location:" msgid "Location:"
@ -231,7 +231,7 @@ msgid "My cool ammo can"
msgstr "" msgstr ""
#: lib/cannery_web/components/ammo_type_table_component.ex:45 #: lib/cannery_web/components/ammo_type_table_component.ex:45
#: lib/cannery_web/components/container_table_component.ex:46 #: lib/cannery_web/components/container_table_component.ex:45
#: lib/cannery_web/live/ammo_type_live/form_component.html.heex:21 #: lib/cannery_web/live/ammo_type_live/form_component.html.heex:21
#: lib/cannery_web/live/container_live/form_component.html.heex:21 #: lib/cannery_web/live/container_live/form_component.html.heex:21
#: lib/cannery_web/live/invite_live/form_component.html.heex:21 #: lib/cannery_web/live/invite_live/form_component.html.heex:21
@ -246,35 +246,35 @@ msgstr ""
msgid "New Ammo type" msgid "New Ammo type"
msgstr "" msgstr ""
#: lib/cannery_web/live/container_live/index.ex:36 #: lib/cannery_web/live/container_live/index.ex:32
#: lib/cannery_web/live/container_live/index.ex:43 #: lib/cannery_web/live/container_live/index.ex:39
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
msgid "New Container" msgid "New Container"
msgstr "" msgstr ""
#: lib/cannery_web/live/invite_live/index.ex:38 #: lib/cannery_web/live/invite_live/index.ex:37
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
msgid "New Invite" msgid "New Invite"
msgstr "" msgstr ""
#: lib/cannery_web/live/tag_live/index.ex:36 #: lib/cannery_web/live/tag_live/index.ex:35
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
msgid "New Tag" msgid "New Tag"
msgstr "" msgstr ""
#: lib/cannery_web/live/ammo_group_live/index.html.heex:10 #: lib/cannery_web/live/ammo_group_live/index.html.heex:10
#: lib/cannery_web/live/ammo_group_live/index.html.heex:70 #: lib/cannery_web/live/ammo_group_live/index.html.heex:71
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
msgid "No Ammo" msgid "No Ammo"
msgstr "" msgstr ""
#: lib/cannery_web/live/ammo_type_live/show.html.heex:169 #: lib/cannery_web/live/ammo_type_live/show.html.heex:167
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
msgid "No ammo for this type" msgid "No ammo for this type"
msgstr "" msgstr ""
#: lib/cannery_web/live/container_live/index.html.heex:8 #: lib/cannery_web/live/container_live/index.html.heex:8
#: lib/cannery_web/live/container_live/index.html.heex:46 #: lib/cannery_web/live/container_live/index.html.heex:47
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
msgid "No containers" msgid "No containers"
msgstr "" msgstr ""
@ -286,7 +286,7 @@ msgstr ""
#: lib/cannery_web/live/container_live/edit_tags_component.html.heex:29 #: lib/cannery_web/live/container_live/edit_tags_component.html.heex:29
#: lib/cannery_web/live/tag_live/index.html.heex:10 #: lib/cannery_web/live/tag_live/index.html.heex:10
#: lib/cannery_web/live/tag_live/index.html.heex:42 #: lib/cannery_web/live/tag_live/index.html.heex:43
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
msgid "No tags" msgid "No tags"
msgstr "" msgstr ""
@ -295,13 +295,13 @@ msgstr ""
#: lib/cannery_web/components/ammo_group_table_component.ex:81 #: lib/cannery_web/components/ammo_group_table_component.ex:81
#: lib/cannery_web/components/shot_group_table_component.ex:43 #: lib/cannery_web/components/shot_group_table_component.ex:43
#: lib/cannery_web/live/ammo_group_live/form_component.html.heex:50 #: lib/cannery_web/live/ammo_group_live/form_component.html.heex:50
#: lib/cannery_web/live/ammo_group_live/show.ex:90 #: lib/cannery_web/live/ammo_group_live/show.ex:92
#: lib/cannery_web/live/range_live/form_component.html.heex:30 #: lib/cannery_web/live/range_live/form_component.html.heex:30
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
msgid "Notes" msgid "Notes"
msgstr "" msgstr ""
#: lib/cannery_web/components/ammo_group_card.ex:52 #: lib/cannery_web/components/core_components/ammo_group_card.html.heex:26
#: lib/cannery_web/live/ammo_group_live/show.html.heex:24 #: lib/cannery_web/live/ammo_group_live/show.html.heex:24
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
msgid "Notes:" msgid "Notes:"
@ -324,7 +324,7 @@ msgstr ""
msgid "Price paid" msgid "Price paid"
msgstr "" msgstr ""
#: lib/cannery_web/components/ammo_group_card.ex:68 #: lib/cannery_web/components/core_components/ammo_group_card.html.heex:41
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
msgid "Price paid:" msgid "Price paid:"
msgstr "" msgstr ""
@ -335,17 +335,17 @@ msgstr ""
msgid "Primer type" msgid "Primer type"
msgstr "" msgstr ""
#: lib/cannery_web/live/home_live.html.heex:81 #: lib/cannery_web/live/home_live.html.heex:83
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
msgid "Public Signups" msgid "Public Signups"
msgstr "" msgstr ""
#: lib/cannery_web/live/home_live.html.heex:33 #: lib/cannery_web/live/home_live.html.heex:32
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
msgid "Secure:" msgid "Secure:"
msgstr "" msgstr ""
#: lib/cannery_web/live/home_live.html.heex:36 #: lib/cannery_web/live/home_live.html.heex:35
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
msgid "Self-host your own instance, or use an instance from someone you trust." msgid "Self-host your own instance, or use an instance from someone you trust."
msgstr "" msgstr ""
@ -356,7 +356,7 @@ msgstr ""
msgid "Settings" msgid "Settings"
msgstr "" msgstr ""
#: lib/cannery_web/live/home_live.html.heex:43 #: lib/cannery_web/live/home_live.html.heex:41
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
msgid "Simple:" msgid "Simple:"
msgstr "" msgstr ""
@ -366,15 +366,15 @@ msgstr ""
msgid "Steel" msgid "Steel"
msgstr "" msgstr ""
#: lib/cannery_web/live/ammo_group_live/show.html.heex:117 #: lib/cannery_web/live/ammo_group_live/show.html.heex:113
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
msgid "Stored in" msgid "Stored in"
msgstr "" msgstr ""
#: lib/cannery_web/components/container_table_component.ex:52 #: lib/cannery_web/components/container_table_component.ex:66
#: lib/cannery_web/components/topbar.ex:49 #: lib/cannery_web/components/core_components/topbar.html.heex:34
#: lib/cannery_web/live/tag_live/index.ex:44 #: lib/cannery_web/live/tag_live/index.ex:43
#: lib/cannery_web/live/tag_live/index.ex:54 #: lib/cannery_web/live/tag_live/index.ex:53
#: lib/cannery_web/live/tag_live/index.html.heex:3 #: lib/cannery_web/live/tag_live/index.html.heex:3
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
msgid "Tags" msgid "Tags"
@ -401,20 +401,20 @@ msgstr ""
msgid "Tracer" msgid "Tracer"
msgstr "" msgstr ""
#: lib/cannery_web/components/container_table_component.ex:49 #: lib/cannery_web/components/container_table_component.ex:48
#: lib/cannery_web/components/move_ammo_group_component.ex:68 #: lib/cannery_web/components/move_ammo_group_component.ex:68
#: lib/cannery_web/live/container_live/form_component.html.heex:36 #: lib/cannery_web/live/container_live/form_component.html.heex:36
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
msgid "Type" msgid "Type"
msgstr "" msgstr ""
#: lib/cannery_web/components/container_card.ex:44 #: lib/cannery_web/components/core_components/container_card.html.heex:21
#: lib/cannery_web/live/container_live/show.html.heex:12 #: lib/cannery_web/live/container_live/show.html.heex:12
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
msgid "Type:" msgid "Type:"
msgstr "" msgstr ""
#: lib/cannery_web/live/invite_live/index.html.heex:122 #: lib/cannery_web/live/invite_live/index.html.heex:127
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
msgid "Users" msgid "Users"
msgstr "" msgstr ""
@ -424,18 +424,18 @@ msgstr ""
msgid "Uses left" msgid "Uses left"
msgstr "" msgstr ""
#: lib/cannery_web/live/home_live.html.heex:37 #: lib/cannery_web/live/home_live.html.heex:36
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
msgid "Your data stays with you, period" msgid "Your data stays with you, period"
msgstr "" msgstr ""
#: lib/cannery_web/live/container_live/show.html.heex:70 #: lib/cannery_web/live/container_live/show.html.heex:67
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
msgid "No tags for this container" msgid "No tags for this container"
msgstr "" msgstr ""
#: lib/cannery_web/components/ammo_group_table_component.ex:72 #: lib/cannery_web/components/ammo_group_table_component.ex:72
#: lib/cannery_web/components/topbar.ex:81 #: lib/cannery_web/components/core_components/topbar.html.heex:66
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
msgid "Range" msgid "Range"
msgstr "" msgstr ""
@ -447,7 +447,7 @@ msgstr ""
#: lib/cannery_web/components/add_shot_group_component.html.heex:46 #: lib/cannery_web/components/add_shot_group_component.html.heex:46
#: lib/cannery_web/components/shot_group_table_component.ex:44 #: lib/cannery_web/components/shot_group_table_component.ex:44
#: lib/cannery_web/live/ammo_group_live/show.ex:91 #: lib/cannery_web/live/ammo_group_live/show.ex:93
#: lib/cannery_web/live/range_live/form_component.html.heex:37 #: lib/cannery_web/live/range_live/form_component.html.heex:37
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
msgid "Date" msgid "Date"
@ -469,19 +469,19 @@ msgstr ""
msgid "Record shots" msgid "Record shots"
msgstr "" msgstr ""
#: lib/cannery_web/live/ammo_group_live/show.ex:41 #: lib/cannery_web/live/ammo_group_live/show.ex:42
#: lib/cannery_web/live/range_live/index.ex:41 #: lib/cannery_web/live/range_live/index.ex:40
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
msgid "Edit Shot Records" msgid "Edit Shot Records"
msgstr "" msgstr ""
#: lib/cannery_web/live/range_live/index.ex:49 #: lib/cannery_web/live/range_live/index.ex:48
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
msgid "New Shot Records" msgid "New Shot Records"
msgstr "" msgstr ""
#: lib/cannery_web/live/range_live/index.html.heex:48 #: lib/cannery_web/live/range_live/index.html.heex:55
#: lib/cannery_web/live/range_live/index.html.heex:89 #: lib/cannery_web/live/range_live/index.html.heex:97
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
msgid "No shots recorded" msgid "No shots recorded"
msgstr "" msgstr ""
@ -493,20 +493,19 @@ msgid "Rounds left"
msgstr "" msgstr ""
#: lib/cannery_web/components/shot_group_table_component.ex:42 #: lib/cannery_web/components/shot_group_table_component.ex:42
#: lib/cannery_web/live/ammo_group_live/show.ex:89 #: lib/cannery_web/live/ammo_group_live/show.ex:91
#: lib/cannery_web/live/range_live/index.html.heex:62 #: lib/cannery_web/live/range_live/index.html.heex:69
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
msgid "Rounds shot" msgid "Rounds shot"
msgstr "" msgstr ""
#: lib/cannery_web/live/range_live/index.ex:57 #: lib/cannery_web/live/range_live/index.ex:56
#: lib/cannery_web/live/range_live/index.ex:67 #: lib/cannery_web/live/range_live/index.ex:66
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
msgid "Shot Records" msgid "Shot Records"
msgstr "" msgstr ""
#: lib/cannery_web/live/ammo_group_live/index.ex:38 #: lib/cannery_web/live/ammo_group_live/index.ex:38
#: lib/cannery_web/live/ammo_group_live/index.html.heex:119
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
msgid "Move ammo" msgid "Move ammo"
msgstr "" msgstr ""
@ -516,18 +515,18 @@ msgstr ""
msgid "No other containers" msgid "No other containers"
msgstr "" msgstr ""
#: lib/cannery_web/live/range_live/index.html.heex:53 #: lib/cannery_web/live/range_live/index.html.heex:60
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
msgid "Shot log" msgid "Shot log"
msgstr "" msgstr ""
#: lib/cannery_web/components/ammo_group_card.ex:69
#: lib/cannery_web/components/ammo_group_card.ex:76
#: lib/cannery_web/components/ammo_group_table_component.ex:153 #: lib/cannery_web/components/ammo_group_table_component.ex:153
#: lib/cannery_web/components/ammo_group_table_component.ex:225 #: lib/cannery_web/components/ammo_group_table_component.ex:229
#: lib/cannery_web/components/ammo_type_table_component.ex:180 #: lib/cannery_web/components/ammo_type_table_component.ex:224
#: lib/cannery_web/components/core_components/ammo_group_card.html.heex:42
#: lib/cannery_web/components/core_components/ammo_group_card.html.heex:47
#: lib/cannery_web/live/ammo_group_live/show.html.heex:37 #: lib/cannery_web/live/ammo_group_live/show.html.heex:37
#: lib/cannery_web/live/ammo_group_live/show.html.heex:44 #: lib/cannery_web/live/ammo_group_live/show.html.heex:42
#: lib/cannery_web/live/ammo_type_live/show.html.heex:139 #: lib/cannery_web/live/ammo_type_live/show.html.heex:139
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
msgid "$%{amount}" msgid "$%{amount}"
@ -597,28 +596,28 @@ msgstr ""
msgid "Reconnecting..." msgid "Reconnecting..."
msgstr "" msgstr ""
#: lib/cannery_web/live/container_live/index.ex:32 #: lib/cannery_web/live/container_live/index.ex:28
#: lib/cannery_web/live/container_live/show.ex:110 #: lib/cannery_web/live/container_live/show.ex:108
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
msgid "Edit %{name}" msgid "Edit %{name}"
msgstr "" msgstr ""
#: lib/cannery_web/live/container_live/index.ex:69 #: lib/cannery_web/live/container_live/index.ex:63
#: lib/cannery_web/live/container_live/show.ex:111 #: lib/cannery_web/live/container_live/show.ex:109
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
msgid "Edit %{name} tags" msgid "Edit %{name} tags"
msgstr "" msgstr ""
#: lib/cannery_web/components/container_card.ex:60 #: lib/cannery_web/components/core_components/container_card.html.heex:37
#: lib/cannery_web/live/ammo_type_live/show.html.heex:70 #: lib/cannery_web/live/ammo_type_live/show.html.heex:70
#: lib/cannery_web/live/container_live/show.html.heex:35 #: lib/cannery_web/live/container_live/show.html.heex:33
#, elixir-autogen, elixir-format, fuzzy #, elixir-autogen, elixir-format, fuzzy
msgid "Rounds:" msgid "Rounds:"
msgstr "" msgstr ""
#: lib/cannery_web/components/ammo_group_table_component.ex:222 #: lib/cannery_web/components/ammo_group_table_component.ex:226
#: lib/cannery_web/components/ammo_type_table_component.ex:179 #: lib/cannery_web/components/ammo_type_table_component.ex:223
#: lib/cannery_web/live/ammo_type_live/show.html.heex:145 #: lib/cannery_web/live/ammo_type_live/show.html.heex:143
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
msgid "No cost information" msgid "No cost information"
msgstr "" msgstr ""
@ -628,7 +627,7 @@ msgstr ""
msgid "% left" msgid "% left"
msgstr "" msgstr ""
#: lib/cannery_web/live/ammo_group_live/show.html.heex:43 #: lib/cannery_web/live/ammo_group_live/show.html.heex:41
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
msgid "Current value:" msgid "Current value:"
msgstr "" msgstr ""
@ -648,7 +647,7 @@ msgstr ""
msgid "Percentage left:" msgid "Percentage left:"
msgstr "" msgstr ""
#: lib/cannery_web/live/ammo_group_live/show.html.heex:130 #: lib/cannery_web/live/ammo_group_live/show.html.heex:126
#, elixir-autogen, elixir-format, fuzzy #, elixir-autogen, elixir-format, fuzzy
msgid "Rounds used" msgid "Rounds used"
msgstr "" msgstr ""
@ -668,7 +667,7 @@ msgstr ""
msgid "Log in" msgid "Log in"
msgstr "" msgstr ""
#: lib/cannery_web/controllers/user_registration_controller.ex:32 #: lib/cannery_web/controllers/user_registration_controller.ex:33
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
msgid "Register" msgid "Register"
msgstr "" msgstr ""
@ -678,8 +677,8 @@ msgstr ""
msgid "Reset your password" msgid "Reset your password"
msgstr "" msgstr ""
#: lib/cannery_web/live/ammo_group_live/show.ex:40 #: lib/cannery_web/live/ammo_group_live/show.ex:41
#: lib/cannery_web/live/range_live/index.ex:33 #: lib/cannery_web/live/range_live/index.ex:32
#, elixir-autogen, elixir-format, fuzzy #, elixir-autogen, elixir-format, fuzzy
msgid "Record Shots" msgid "Record Shots"
msgstr "" msgstr ""
@ -715,27 +714,27 @@ msgstr ""
msgid "Language" msgid "Language"
msgstr "" msgstr ""
#: lib/cannery_web/live/home_live.html.heex:107 #: lib/cannery_web/live/home_live.html.heex:109
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
msgid "Get involved!" msgid "Get involved!"
msgstr "" msgstr ""
#: lib/cannery_web/live/home_live.html.heex:128 #: lib/cannery_web/live/home_live.html.heex:130
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
msgid "Help translate" msgid "Help translate"
msgstr "" msgstr ""
#: lib/cannery_web/live/home_live.html.heex:139 #: lib/cannery_web/live/home_live.html.heex:141
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
msgid "Report bugs or request features" msgid "Report bugs or request features"
msgstr "" msgstr ""
#: lib/cannery_web/live/home_live.html.heex:117 #: lib/cannery_web/live/home_live.html.heex:119
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
msgid "View the source code" msgid "View the source code"
msgstr "" msgstr ""
#: lib/cannery_web/components/topbar.ex:65 #: lib/cannery_web/components/core_components/topbar.html.heex:50
#: lib/cannery_web/live/ammo_type_live/index.ex:52 #: lib/cannery_web/live/ammo_type_live/index.ex:52
#: lib/cannery_web/live/ammo_type_live/index.ex:62 #: lib/cannery_web/live/ammo_type_live/index.ex:62
#: lib/cannery_web/live/ammo_type_live/index.html.heex:3 #: lib/cannery_web/live/ammo_type_live/index.html.heex:3
@ -743,39 +742,39 @@ msgstr ""
msgid "Catalog" msgid "Catalog"
msgstr "" msgstr ""
#: lib/cannery_web/live/ammo_group_live/show.ex:44 #: lib/cannery_web/live/ammo_group_live/show.ex:45
#, elixir-autogen, elixir-format, fuzzy #, elixir-autogen, elixir-format, fuzzy
msgid "Edit Ammo" msgid "Edit Ammo"
msgstr "" msgstr ""
#: lib/cannery_web/live/ammo_group_live/show.ex:42 #: lib/cannery_web/live/ammo_group_live/show.ex:43
#, elixir-autogen, elixir-format, fuzzy #, elixir-autogen, elixir-format, fuzzy
msgid "Move Ammo" msgid "Move Ammo"
msgstr "" msgstr ""
#: lib/cannery_web/live/container_live/show.html.heex:115 #: lib/cannery_web/live/container_live/show.html.heex:112
#, elixir-autogen, elixir-format, fuzzy #, elixir-autogen, elixir-format, fuzzy
msgid "No ammo in this container" msgid "No ammo in this container"
msgstr "" msgstr ""
#: lib/cannery_web/live/ammo_group_live/show.ex:43 #: lib/cannery_web/live/ammo_group_live/show.ex:44
#, elixir-autogen, elixir-format, fuzzy #, elixir-autogen, elixir-format, fuzzy
msgid "Show Ammo" msgid "Show Ammo"
msgstr "" msgstr ""
#: lib/cannery_web/live/ammo_group_live/show.html.heex:122 #: lib/cannery_web/live/ammo_group_live/show.html.heex:118
#, elixir-autogen, elixir-format, fuzzy #, elixir-autogen, elixir-format, fuzzy
msgid "This ammo is not in a container" msgid "This ammo is not in a container"
msgstr "" msgstr ""
#: lib/cannery_web/components/container_card.ex:55 #: lib/cannery_web/components/core_components/container_card.html.heex:32
#: lib/cannery_web/live/ammo_type_live/show.html.heex:98 #: lib/cannery_web/live/ammo_type_live/show.html.heex:98
#: lib/cannery_web/live/container_live/show.html.heex:26 #: lib/cannery_web/live/container_live/show.html.heex:23
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
msgid "Packs:" msgid "Packs:"
msgstr "" msgstr ""
#: lib/cannery_web/components/topbar.ex:25 #: lib/cannery_web/components/core_components/topbar.html.heex:10
#: lib/cannery_web/live/home_live.html.heex:4 #: lib/cannery_web/live/home_live.html.heex:4
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
msgid "Cannery logo" msgid "Cannery logo"
@ -791,45 +790,45 @@ msgstr ""
msgid "Leave \"Uses left\" blank to make invite unlimited" msgid "Leave \"Uses left\" blank to make invite unlimited"
msgstr "" msgstr ""
#: lib/cannery_web/components/ammo_group_card.ex:83 #: lib/cannery_web/components/core_components/ammo_group_card.html.heex:54
#, elixir-autogen, elixir-format, fuzzy #, elixir-autogen, elixir-format, fuzzy
msgid "Container:" msgid "Container:"
msgstr "" msgstr ""
#: lib/cannery_web/live/ammo_group_live/index.html.heex:63 #: lib/cannery_web/live/ammo_group_live/index.html.heex:64
#: lib/cannery_web/live/ammo_type_live/index.html.heex:38 #: lib/cannery_web/live/ammo_type_live/index.html.heex:39
#: lib/cannery_web/live/ammo_type_live/show.html.heex:155 #: lib/cannery_web/live/ammo_type_live/show.html.heex:153
#: lib/cannery_web/live/container_live/show.html.heex:101 #: lib/cannery_web/live/container_live/show.html.heex:98
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
msgid "Show used" msgid "Show used"
msgstr "" msgstr ""
#: lib/cannery_web/components/ammo_group_table_component.ex:193 #: lib/cannery_web/components/ammo_group_table_component.ex:187
#: lib/cannery_web/live/ammo_group_live/show.html.heex:19 #: lib/cannery_web/live/ammo_group_live/show.html.heex:19
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
msgid "%{percentage}%" msgid "%{percentage}%"
msgstr "" msgstr ""
#: lib/cannery_web/live/range_live/index.ex:134 #: lib/cannery_web/live/range_live/index.ex:135
#, elixir-autogen, elixir-format, fuzzy #, elixir-autogen, elixir-format, fuzzy
msgid "Rounds shot: %{count}" msgid "Rounds shot: %{count}"
msgstr "" msgstr ""
#: lib/cannery_web/components/ammo_type_table_component.ex:100 #: lib/cannery_web/components/ammo_type_table_component.ex:100
#: lib/cannery_web/components/container_table_component.ex:50 #: lib/cannery_web/components/container_table_component.ex:64
#, elixir-autogen, elixir-format, fuzzy #, elixir-autogen, elixir-format, fuzzy
msgid "Packs" msgid "Packs"
msgstr "" msgstr ""
#: lib/cannery_web/components/ammo_type_table_component.ex:80 #: lib/cannery_web/components/ammo_type_table_component.ex:80
#: lib/cannery_web/components/container_table_component.ex:51 #: lib/cannery_web/components/container_table_component.ex:65
#, elixir-autogen, elixir-format, fuzzy #, elixir-autogen, elixir-format, fuzzy
msgid "Rounds" msgid "Rounds"
msgstr "" msgstr ""
#: lib/cannery_web/live/ammo_type_live/show.html.heex:161 #: lib/cannery_web/live/ammo_type_live/show.html.heex:159
#: lib/cannery_web/live/container_live/index.html.heex:38 #: lib/cannery_web/live/container_live/index.html.heex:39
#: lib/cannery_web/live/container_live/show.html.heex:107 #: lib/cannery_web/live/container_live/show.html.heex:104
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
msgid "View as table" msgid "View as table"
msgstr "" msgstr ""
@ -879,102 +878,102 @@ msgstr ""
msgid "Used up!" msgid "Used up!"
msgstr "" msgstr ""
#: lib/cannery_web/live/range_live/index.html.heex:64 #: lib/cannery_web/live/range_live/index.html.heex:71
#, elixir-autogen, elixir-format, fuzzy #, elixir-autogen, elixir-format, fuzzy
msgid "Rounds shot chart" msgid "Rounds shot chart"
msgstr "" msgstr ""
#: lib/cannery_web/live/ammo_type_live/show.ex:27 #: lib/cannery_web/live/ammo_type_live/show.ex:26
#, elixir-autogen, elixir-format, fuzzy #, elixir-autogen, elixir-format, fuzzy
msgid "Blank:" msgid "Blank:"
msgstr "" msgstr ""
#: lib/cannery_web/live/ammo_type_live/show.ex:13 #: lib/cannery_web/live/ammo_type_live/show.ex:12
#, elixir-autogen, elixir-format, fuzzy #, elixir-autogen, elixir-format, fuzzy
msgid "Bullet core:" msgid "Bullet core:"
msgstr "" msgstr ""
#: lib/cannery_web/live/ammo_type_live/show.ex:12 #: lib/cannery_web/live/ammo_type_live/show.ex:11
#, elixir-autogen, elixir-format, fuzzy #, elixir-autogen, elixir-format, fuzzy
msgid "Bullet type:" msgid "Bullet type:"
msgstr "" msgstr ""
#: lib/cannery_web/live/ammo_type_live/show.ex:15 #: lib/cannery_web/live/ammo_type_live/show.ex:14
#, elixir-autogen, elixir-format, fuzzy #, elixir-autogen, elixir-format, fuzzy
msgid "Caliber:" msgid "Caliber:"
msgstr "" msgstr ""
#: lib/cannery_web/live/ammo_type_live/show.ex:14 #: lib/cannery_web/live/ammo_type_live/show.ex:13
#, elixir-autogen, elixir-format, fuzzy #, elixir-autogen, elixir-format, fuzzy
msgid "Cartridge:" msgid "Cartridge:"
msgstr "" msgstr ""
#: lib/cannery_web/live/ammo_type_live/show.ex:16 #: lib/cannery_web/live/ammo_type_live/show.ex:15
#, elixir-autogen, elixir-format, fuzzy #, elixir-autogen, elixir-format, fuzzy
msgid "Case material:" msgid "Case material:"
msgstr "" msgstr ""
#: lib/cannery_web/live/ammo_type_live/show.ex:28 #: lib/cannery_web/live/ammo_type_live/show.ex:27
#, elixir-autogen, elixir-format, fuzzy #, elixir-autogen, elixir-format, fuzzy
msgid "Corrosive:" msgid "Corrosive:"
msgstr "" msgstr ""
#: lib/cannery_web/live/ammo_type_live/show.ex:24 #: lib/cannery_web/live/ammo_type_live/show.ex:23
#, elixir-autogen, elixir-format, fuzzy #, elixir-autogen, elixir-format, fuzzy
msgid "Firing type:" msgid "Firing type:"
msgstr "" msgstr ""
#: lib/cannery_web/live/ammo_type_live/show.ex:21 #: lib/cannery_web/live/ammo_type_live/show.ex:20
#, elixir-autogen, elixir-format, fuzzy #, elixir-autogen, elixir-format, fuzzy
msgid "Grains:" msgid "Grains:"
msgstr "" msgstr ""
#: lib/cannery_web/live/ammo_type_live/show.ex:26 #: lib/cannery_web/live/ammo_type_live/show.ex:25
#, elixir-autogen, elixir-format, fuzzy #, elixir-autogen, elixir-format, fuzzy
msgid "Incendiary:" msgid "Incendiary:"
msgstr "" msgstr ""
#: lib/cannery_web/live/ammo_type_live/show.ex:17 #: lib/cannery_web/live/ammo_type_live/show.ex:16
#, elixir-autogen, elixir-format, fuzzy #, elixir-autogen, elixir-format, fuzzy
msgid "Jacket type:" msgid "Jacket type:"
msgstr "" msgstr ""
#: lib/cannery_web/live/ammo_type_live/show.ex:29 #: lib/cannery_web/live/ammo_type_live/show.ex:28
#, elixir-autogen, elixir-format, fuzzy #, elixir-autogen, elixir-format, fuzzy
msgid "Manufacturer:" msgid "Manufacturer:"
msgstr "" msgstr ""
#: lib/cannery_web/live/ammo_type_live/show.ex:18 #: lib/cannery_web/live/ammo_type_live/show.ex:17
#, elixir-autogen, elixir-format, fuzzy #, elixir-autogen, elixir-format, fuzzy
msgid "Muzzle velocity:" msgid "Muzzle velocity:"
msgstr "" msgstr ""
#: lib/cannery_web/live/ammo_type_live/show.ex:20 #: lib/cannery_web/live/ammo_type_live/show.ex:19
#, elixir-autogen, elixir-format, fuzzy #, elixir-autogen, elixir-format, fuzzy
msgid "Powder grains per charge:" msgid "Powder grains per charge:"
msgstr "" msgstr ""
#: lib/cannery_web/live/ammo_type_live/show.ex:19 #: lib/cannery_web/live/ammo_type_live/show.ex:18
#, elixir-autogen, elixir-format, fuzzy #, elixir-autogen, elixir-format, fuzzy
msgid "Powder type:" msgid "Powder type:"
msgstr "" msgstr ""
#: lib/cannery_web/live/ammo_type_live/show.ex:22 #: lib/cannery_web/live/ammo_type_live/show.ex:21
#, elixir-autogen, elixir-format, fuzzy #, elixir-autogen, elixir-format, fuzzy
msgid "Pressure:" msgid "Pressure:"
msgstr "" msgstr ""
#: lib/cannery_web/live/ammo_type_live/show.ex:23 #: lib/cannery_web/live/ammo_type_live/show.ex:22
#, elixir-autogen, elixir-format, fuzzy #, elixir-autogen, elixir-format, fuzzy
msgid "Primer type:" msgid "Primer type:"
msgstr "" msgstr ""
#: lib/cannery_web/live/ammo_type_live/show.ex:25 #: lib/cannery_web/live/ammo_type_live/show.ex:24
#, elixir-autogen, elixir-format, fuzzy #, elixir-autogen, elixir-format, fuzzy
msgid "Tracer:" msgid "Tracer:"
msgstr "" msgstr ""
#: lib/cannery_web/live/ammo_type_live/show.ex:30 #: lib/cannery_web/live/ammo_type_live/show.ex:29
#, elixir-autogen, elixir-format, fuzzy #, elixir-autogen, elixir-format, fuzzy
msgid "UPC:" msgid "UPC:"
msgstr "" msgstr ""
@ -986,13 +985,13 @@ msgid "Average CPR"
msgstr "" msgstr ""
#: lib/cannery_web/live/ammo_type_live/index.ex:28 #: lib/cannery_web/live/ammo_type_live/index.ex:28
#: lib/cannery_web/live/ammo_type_live/show.ex:118 #: lib/cannery_web/live/ammo_type_live/show.ex:135
#, elixir-autogen, elixir-format, fuzzy #, elixir-autogen, elixir-format, fuzzy
msgid "Edit %{ammo_type_name}" msgid "Edit %{ammo_type_name}"
msgstr "" msgstr ""
#: lib/cannery_web/components/ammo_group_card.ex:40 #: lib/cannery_web/components/ammo_group_table_component.ex:233
#: lib/cannery_web/components/ammo_group_table_component.ex:231 #: lib/cannery_web/components/core_components/ammo_group_card.html.heex:17
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
msgid "Empty" msgid "Empty"
msgstr "" msgstr ""
@ -1002,7 +1001,7 @@ msgstr ""
msgid "CPR" msgid "CPR"
msgstr "" msgstr ""
#: lib/cannery_web/components/ammo_group_card.ex:75 #: lib/cannery_web/components/core_components/ammo_group_card.html.heex:46
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
msgid "CPR:" msgid "CPR:"
msgstr "" msgstr ""
@ -1012,7 +1011,7 @@ msgstr ""
msgid "Original Count" msgid "Original Count"
msgstr "" msgstr ""
#: lib/cannery_web/components/ammo_group_card.ex:47 #: lib/cannery_web/components/core_components/ammo_group_card.html.heex:21
#, elixir-autogen, elixir-format, fuzzy #, elixir-autogen, elixir-format, fuzzy
msgid "Original Count:" msgid "Original Count:"
msgstr "" msgstr ""
@ -1022,27 +1021,22 @@ msgstr ""
msgid "Home" msgid "Home"
msgstr "" msgstr ""
#: lib/cannery_web/live/container_live/show.html.heex:24 #: lib/cannery_web/live/container_live/show.html.heex:28
#, elixir-autogen, elixir-format, fuzzy #, elixir-autogen, elixir-format, fuzzy
msgid "Total packs:" msgid "Total packs:"
msgstr "" msgstr ""
#: lib/cannery_web/live/container_live/show.html.heex:33
#, elixir-autogen, elixir-format, fuzzy
msgid "Total rounds:"
msgstr ""
#: lib/cannery_web/components/ammo_group_table_component.ex:58 #: lib/cannery_web/components/ammo_group_table_component.ex:58
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
msgid "Last used on" msgid "Last used on"
msgstr "" msgstr ""
#: lib/cannery_web/components/ammo_group_card.ex:62 #: lib/cannery_web/components/core_components/ammo_group_card.html.heex:36
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
msgid "Last used on:" msgid "Last used on:"
msgstr "" msgstr ""
#: lib/cannery_web/components/ammo_group_table_component.ex:178 #: lib/cannery_web/components/ammo_group_table_component.ex:171
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
msgid "Never used" msgid "Never used"
msgstr "" msgstr ""
@ -1053,7 +1047,7 @@ msgstr ""
msgid "Purchased on" msgid "Purchased on"
msgstr "" msgstr ""
#: lib/cannery_web/components/ammo_group_card.ex:57 #: lib/cannery_web/components/core_components/ammo_group_card.html.heex:31
#: lib/cannery_web/live/ammo_group_live/show.html.heex:30 #: lib/cannery_web/live/ammo_group_live/show.html.heex:30
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
msgid "Purchased on:" msgid "Purchased on:"
@ -1065,32 +1059,32 @@ msgid "Edit ammo"
msgstr "" msgstr ""
#: lib/cannery_web/live/ammo_type_live/index.html.heex:8 #: lib/cannery_web/live/ammo_type_live/index.html.heex:8
#: lib/cannery_web/live/ammo_type_live/index.html.heex:45 #: lib/cannery_web/live/ammo_type_live/index.html.heex:46
#, elixir-autogen, elixir-format, fuzzy #, elixir-autogen, elixir-format, fuzzy
msgid "No Ammo types" msgid "No Ammo types"
msgstr "" msgstr ""
#: lib/cannery_web/live/ammo_type_live/index.html.heex:32 #: lib/cannery_web/live/ammo_type_live/index.html.heex:33
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
msgid "Search catalog" msgid "Search catalog"
msgstr "" msgstr ""
#: lib/cannery_web/live/ammo_group_live/index.html.heex:57 #: lib/cannery_web/live/ammo_group_live/index.html.heex:58
#, elixir-autogen, elixir-format, fuzzy #, elixir-autogen, elixir-format, fuzzy
msgid "Search ammo" msgid "Search ammo"
msgstr "" msgstr ""
#: lib/cannery_web/live/container_live/index.html.heex:32 #: lib/cannery_web/live/container_live/index.html.heex:33
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
msgid "Search containers" msgid "Search containers"
msgstr "" msgstr ""
#: lib/cannery_web/live/tag_live/index.html.heex:35 #: lib/cannery_web/live/tag_live/index.html.heex:36
#, elixir-autogen, elixir-format, fuzzy #, elixir-autogen, elixir-format, fuzzy
msgid "Search tags" msgid "Search tags"
msgstr "" msgstr ""
#: lib/cannery_web/live/range_live/index.html.heex:82 #: lib/cannery_web/live/range_live/index.html.heex:90
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
msgid "Search shot records" msgid "Search shot records"
msgstr "" msgstr ""
@ -1103,47 +1097,47 @@ msgstr ""
#: lib/cannery_web/templates/error/error.html.heex:8 #: lib/cannery_web/templates/error/error.html.heex:8
#: lib/cannery_web/templates/layout/root.html.heex:13 #: lib/cannery_web/templates/layout/root.html.heex:13
#: lib/cannery_web/templates/layout/root.html.heex:14 #: lib/cannery_web/templates/layout/root.html.heex:14
#: lib/cannery_web/views/layout_view.ex:15 #: lib/cannery_web/views/layout_view.ex:14
#, elixir-autogen, elixir-format, fuzzy #, elixir-autogen, elixir-format, fuzzy
msgid "Cannery" msgid "Cannery"
msgstr "" msgstr ""
#: lib/cannery_web/components/user_card.ex:33 #: lib/cannery_web/components/core_components/user_card.html.heex:20
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
msgid "Email unconfirmed" msgid "Email unconfirmed"
msgstr "" msgstr ""
#: lib/cannery_web/components/user_card.ex:38 #: lib/cannery_web/components/core_components/user_card.html.heex:25
#, elixir-autogen, elixir-format, fuzzy #, elixir-autogen, elixir-format, fuzzy
msgid "User registered on%{registered_datetime}" msgid "User registered on%{registered_datetime}"
msgstr "" msgstr ""
#: lib/cannery_web/components/user_card.ex:27 #: lib/cannery_web/components/core_components/user_card.html.heex:14
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
msgid "User was confirmed at%{confirmed_datetime}" msgid "User was confirmed at%{confirmed_datetime}"
msgstr "" msgstr ""
#: lib/cannery_web/components/invite_card.ex:37 #: lib/cannery_web/components/core_components/invite_card.html.heex:16
#, elixir-autogen, elixir-format, fuzzy #, elixir-autogen, elixir-format, fuzzy
msgid "Uses Left: Unlimited" msgid "Uses Left: Unlimited"
msgstr "" msgstr ""
#: lib/cannery_web/live/home_live.html.heex:26 #: lib/cannery_web/live/home_live.html.heex:25
#, elixir-autogen, elixir-format, fuzzy #, elixir-autogen, elixir-format, fuzzy
msgid "Cannery lets you easily keep an eye on your ammo levels before and after range day" msgid "Cannery lets you easily keep an eye on your ammo levels before and after range day"
msgstr "" msgstr ""
#: lib/cannery_web/views/layout_view.ex:11 #: lib/cannery_web/views/layout_view.ex:10
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
msgid "Cannery | %{title}" msgid "Cannery | %{title}"
msgstr "" msgstr ""
#: lib/cannery_web/live/home_live.html.heex:78 #: lib/cannery_web/live/home_live.html.heex:80
#, elixir-autogen, elixir-format, fuzzy #, elixir-autogen, elixir-format, fuzzy
msgid "Registration:" msgid "Registration:"
msgstr "" msgstr ""
#: lib/cannery_web/live/home_live.html.heex:88 #: lib/cannery_web/live/home_live.html.heex:90
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
msgid "Version:" msgid "Version:"
msgstr "" msgstr ""
@ -1153,29 +1147,29 @@ msgstr ""
msgid "Welcome to Cannery" msgid "Welcome to Cannery"
msgstr "" msgstr ""
#: lib/cannery_web/live/invite_live/index.html.heex:70 #: lib/cannery_web/live/invite_live/index.html.heex:75
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
msgid "Disable" msgid "Disable"
msgstr "" msgstr ""
#: lib/cannery_web/live/invite_live/index.html.heex:70 #: lib/cannery_web/live/invite_live/index.html.heex:75
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
msgid "Enable" msgid "Enable"
msgstr "" msgstr ""
#: lib/cannery_web/components/invite_card.ex:32 #: lib/cannery_web/components/core_components/invite_card.html.heex:11
#, elixir-autogen, elixir-format, fuzzy #, elixir-autogen, elixir-format, fuzzy
msgid "Uses Left: %{uses_left_count}" msgid "Uses Left: %{uses_left_count}"
msgstr "" msgstr ""
#: lib/cannery_web/components/invite_card.ex:52 #: lib/cannery_web/components/core_components/invite_card.html.heex:31
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
msgid "Uses: %{uses_count}" msgid "Uses: %{uses_count}"
msgstr "" msgstr ""
#: lib/cannery_web/templates/user_confirmation/new.html.heex:12 #: lib/cannery_web/templates/user_confirmation/new.html.heex:13
#: lib/cannery_web/templates/user_registration/new.html.heex:20 #: lib/cannery_web/templates/user_registration/new.html.heex:20
#: lib/cannery_web/templates/user_reset_password/new.html.heex:12 #: lib/cannery_web/templates/user_reset_password/new.html.heex:13
#: lib/cannery_web/templates/user_session/new.html.heex:17 #: lib/cannery_web/templates/user_session/new.html.heex:17
#: lib/cannery_web/templates/user_settings/edit.html.heex:27 #: lib/cannery_web/templates/user_settings/edit.html.heex:27
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
@ -1187,24 +1181,3 @@ msgstr ""
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
msgid "Password" msgid "Password"
msgstr "" msgstr ""
#: lib/cannery_web/live/ammo_group_live/index.html.heex:153
#, elixir-autogen, elixir-format
msgid "Clone ammo group of %{ammo_group_count} bullets"
msgstr ""
#: lib/cannery_web/live/ammo_group_live/index.html.heex:168
#: lib/cannery_web/live/ammo_group_live/show.html.heex:80
#, elixir-autogen, elixir-format
msgid "Delete ammo group of %{ammo_group_count} bullets"
msgstr ""
#: lib/cannery_web/live/ammo_group_live/index.html.heex:141
#, elixir-autogen, elixir-format
msgid "Edit ammo group of %{ammo_group_count} bullets"
msgstr ""
#: lib/cannery_web/live/ammo_group_live/index.html.heex:129
#, elixir-autogen, elixir-format
msgid "View ammo group of %{ammo_group_count} bullets"
msgstr ""

View File

@ -10,18 +10,18 @@ msgid ""
msgstr "" msgstr ""
"Language: en\n" "Language: en\n"
#: lib/cannery/containers.ex:179 #: lib/cannery/containers.ex:200
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
msgid "Container must be empty before deleting" msgid "Container must be empty before deleting"
msgstr "" msgstr ""
#: lib/cannery_web/live/container_live/index.ex:92 #: lib/cannery_web/live/container_live/index.ex:86
#: lib/cannery_web/live/container_live/show.ex:72 #: lib/cannery_web/live/container_live/show.ex:71
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
msgid "Could not delete %{name}: %{error}" msgid "Could not delete %{name}: %{error}"
msgstr "" msgstr ""
#: lib/cannery_web/live/container_live/index.ex:80 #: lib/cannery_web/live/container_live/index.ex:74
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
msgid "Could not find that container" msgid "Could not find that container"
msgstr "" msgstr ""
@ -36,12 +36,12 @@ msgstr ""
msgid "Error" msgid "Error"
msgstr "" msgstr ""
#: lib/cannery_web/templates/error/error.html.heex:28 #: lib/cannery_web/templates/error/error.html.heex:31
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
msgid "Go back home" msgid "Go back home"
msgstr "" msgstr ""
#: lib/cannery_web/views/error_view.ex:11 #: lib/cannery_web/views/error_view.ex:10
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
msgid "Internal Server Error" msgid "Internal Server Error"
msgstr "" msgstr ""
@ -51,7 +51,7 @@ msgstr ""
msgid "Invalid email or password" msgid "Invalid email or password"
msgstr "" msgstr ""
#: lib/cannery_web/views/error_view.ex:9 #: lib/cannery_web/views/error_view.ex:8
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
msgid "Not found" msgid "Not found"
msgstr "" msgstr ""
@ -70,15 +70,15 @@ msgstr ""
msgid "Reset password link is invalid or it has expired." msgid "Reset password link is invalid or it has expired."
msgstr "" msgstr ""
#: lib/cannery_web/controllers/user_registration_controller.ex:22 #: lib/cannery_web/controllers/user_registration_controller.ex:23
#: lib/cannery_web/controllers/user_registration_controller.ex:51 #: lib/cannery_web/controllers/user_registration_controller.ex:52
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
msgid "Sorry, public registration is disabled" msgid "Sorry, public registration is disabled"
msgstr "" msgstr ""
#: lib/cannery_web/controllers/user_registration_controller.ex:12 #: lib/cannery_web/controllers/user_registration_controller.ex:13
#: lib/cannery_web/controllers/user_registration_controller.ex:41 #: lib/cannery_web/controllers/user_registration_controller.ex:42
#: lib/cannery_web/controllers/user_registration_controller.ex:70 #: lib/cannery_web/controllers/user_registration_controller.ex:71
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
msgid "Sorry, this invite was not found or expired" msgid "Sorry, this invite was not found or expired"
msgstr "" msgstr ""
@ -88,7 +88,7 @@ msgstr ""
msgid "Unable to delete user" msgid "Unable to delete user"
msgstr "" msgstr ""
#: lib/cannery_web/views/error_view.ex:10 #: lib/cannery_web/views/error_view.ex:9
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
msgid "Unauthorized" msgid "Unauthorized"
msgstr "" msgstr ""
@ -98,7 +98,7 @@ msgstr ""
msgid "User confirmation link is invalid or it has expired." msgid "User confirmation link is invalid or it has expired."
msgstr "" msgstr ""
#: lib/cannery_web/live/invite_live/index.ex:19 #: lib/cannery_web/live/invite_live/index.ex:18
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
msgid "You are not authorized to view this page" msgid "You are not authorized to view this page"
msgstr "" msgstr ""
@ -129,64 +129,73 @@ msgstr ""
msgid "must have the @ sign and no spaces" msgid "must have the @ sign and no spaces"
msgstr "" msgstr ""
#: lib/cannery/tags.ex:66 #: lib/cannery_web/live/container_live/show.ex:46
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
msgid "Tag not found" msgid "Tag not found"
msgstr "" msgstr ""
#: lib/cannery_web/live/container_live/edit_tags_component.ex:45 #: lib/cannery_web/live/container_live/edit_tags_component.ex:46
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
msgid "Tag could not be added" msgid "Tag could not be added"
msgstr "" msgstr ""
#: lib/cannery/activity_log/shot_group.ex:126
#, elixir-autogen, elixir-format
msgid "Count must be at least 1"
msgstr ""
#: lib/cannery_web/controllers/user_auth.ex:39 #: lib/cannery_web/controllers/user_auth.ex:39
#: lib/cannery_web/controllers/user_auth.ex:161 #: lib/cannery_web/controllers/user_auth.ex:161
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
msgid "You must confirm your account and log in to access this page." msgid "You must confirm your account and log in to access this page."
msgstr "" msgstr ""
#: lib/cannery_web/live/container_live/edit_tags_component.ex:72 #: lib/cannery_web/live/container_live/edit_tags_component.ex:73
#, elixir-autogen, elixir-format, fuzzy #, elixir-autogen, elixir-format, fuzzy
msgid "Tag could not be removed" msgid "Tag could not be removed"
msgstr "" msgstr ""
#: lib/cannery_web/live/ammo_group_live/form_component.ex:157 #: lib/cannery_web/live/ammo_group_live/form_component.ex:160
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
msgid "Could not parse number of copies" msgid "Could not parse number of copies"
msgstr "" msgstr ""
#: lib/cannery_web/live/ammo_group_live/form_component.ex:142 #: lib/cannery_web/live/ammo_group_live/form_component.ex:150
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
msgid "Invalid number of copies, must be between 1 and %{max}. Was %{multiplier}" msgid "Invalid number of copies, must be between 1 and %{max}. Was %{multiplier}"
msgstr "" msgstr ""
#: lib/cannery/ammo.ex:686 #: lib/cannery/ammo.ex:1015
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
msgid "Invalid multiplier" msgid "Invalid multiplier"
msgstr "" msgstr ""
#: lib/cannery/ammo/ammo_group.ex:97 #: lib/cannery/ammo/ammo_group.ex:92
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
msgid "Please select an ammo type and container" msgid "Please select an ammo type and container"
msgstr "" msgstr ""
#: lib/cannery_web/live/range_live/index.html.heex:67 #: lib/cannery_web/live/range_live/index.html.heex:74
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
msgid "Your browser does not support the canvas element." msgid "Your browser does not support the canvas element."
msgstr "" msgstr ""
#: lib/cannery/activity_log/shot_group.ex:77 #: lib/cannery/activity_log/shot_group.ex:72
#, elixir-autogen, elixir-format, fuzzy #, elixir-autogen, elixir-format, fuzzy
msgid "Please select a valid user and ammo pack" msgid "Please select a valid user and ammo pack"
msgstr "" msgstr ""
#: lib/cannery/activity_log/shot_group.ex:83 #: lib/cannery/activity_log/shot_group.ex:86
#: lib/cannery/activity_log/shot_group.ex:121 #, elixir-autogen, elixir-format
#, elixir-autogen, elixir-format, fuzzy msgid "Ammo left can be at most %{count} rounds"
msgid "Count must be less than %{count} shots" msgstr ""
#: lib/cannery/activity_log/shot_group.ex:82
#, elixir-autogen, elixir-format
msgid "Ammo left must be at least 0"
msgstr ""
#: lib/cannery/activity_log/shot_group.ex:119
#, elixir-autogen, elixir-format, fuzzy
msgid "Count can be at most %{count} shots"
msgstr ""
#: lib/cannery/activity_log/shot_group.ex:78
#, elixir-autogen, elixir-format
msgid "can't be blank"
msgstr "" msgstr ""

View File

@ -10,31 +10,31 @@ msgid ""
msgstr "" msgstr ""
"Language: en\n" "Language: en\n"
#: lib/cannery_web/live/ammo_type_live/form_component.ex:86 #: lib/cannery_web/live/ammo_type_live/form_component.ex:89
#: lib/cannery_web/live/container_live/form_component.ex:89 #: lib/cannery_web/live/container_live/form_component.ex:89
#: lib/cannery_web/live/invite_live/form_component.ex:80 #: lib/cannery_web/live/invite_live/form_component.ex:80
#: lib/cannery_web/live/tag_live/form_component.ex:79 #: lib/cannery_web/live/tag_live/form_component.ex:78
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
msgid "%{name} created successfully" msgid "%{name} created successfully"
msgstr "" msgstr ""
#: lib/cannery_web/live/ammo_type_live/index.ex:73 #: lib/cannery_web/live/ammo_type_live/index.ex:72
#: lib/cannery_web/live/ammo_type_live/show.ex:55 #: lib/cannery_web/live/ammo_type_live/show.ex:54
#: lib/cannery_web/live/tag_live/index.ex:64 #: lib/cannery_web/live/tag_live/index.ex:65
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
msgid "%{name} deleted succesfully" msgid "%{name} deleted succesfully"
msgstr "" msgstr ""
#: lib/cannery_web/live/container_live/index.ex:85 #: lib/cannery_web/live/container_live/index.ex:79
#: lib/cannery_web/live/container_live/show.ex:62 #: lib/cannery_web/live/container_live/show.ex:61
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
msgid "%{name} has been deleted" msgid "%{name} has been deleted"
msgstr "" msgstr ""
#: lib/cannery_web/live/ammo_type_live/form_component.ex:67 #: lib/cannery_web/live/ammo_type_live/form_component.ex:70
#: lib/cannery_web/live/container_live/form_component.ex:70 #: lib/cannery_web/live/container_live/form_component.ex:70
#: lib/cannery_web/live/invite_live/form_component.ex:62 #: lib/cannery_web/live/invite_live/form_component.ex:62
#: lib/cannery_web/live/tag_live/form_component.ex:61 #: lib/cannery_web/live/tag_live/form_component.ex:60
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
msgid "%{name} updated successfully" msgid "%{name} updated successfully"
msgstr "" msgstr ""
@ -44,22 +44,22 @@ msgstr ""
msgid "A link to confirm your email change has been sent to the new address." msgid "A link to confirm your email change has been sent to the new address."
msgstr "" msgstr ""
#: lib/cannery_web/live/invite_live/index.html.heex:105 #: lib/cannery_web/live/invite_live/index.html.heex:110
#: lib/cannery_web/live/invite_live/index.html.heex:133 #: lib/cannery_web/live/invite_live/index.html.heex:138
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
msgid "Are you sure you want to delete %{email}? This action is permanent!" msgid "Are you sure you want to delete %{email}? This action is permanent!"
msgstr "" msgstr ""
#: lib/cannery_web/live/container_live/index.html.heex:98 #: lib/cannery_web/live/container_live/index.html.heex:99
#: lib/cannery_web/live/container_live/index.html.heex:150 #: lib/cannery_web/live/container_live/index.html.heex:155
#: lib/cannery_web/live/container_live/show.html.heex:55 #: lib/cannery_web/live/container_live/show.html.heex:52
#: lib/cannery_web/live/tag_live/index.html.heex:62 #: lib/cannery_web/live/tag_live/index.html.heex:63
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
msgid "Are you sure you want to delete %{name}?" msgid "Are you sure you want to delete %{name}?"
msgstr "" msgstr ""
#: lib/cannery_web/live/ammo_group_live/index.html.heex:166 #: lib/cannery_web/live/ammo_group_live/index.html.heex:167
#: lib/cannery_web/live/ammo_group_live/show.html.heex:78 #: lib/cannery_web/live/ammo_group_live/show.html.heex:74
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
msgid "Are you sure you want to delete this ammo?" msgid "Are you sure you want to delete this ammo?"
msgstr "" msgstr ""
@ -69,7 +69,7 @@ msgstr ""
msgid "Are you sure you want to delete your account?" msgid "Are you sure you want to delete your account?"
msgstr "" msgstr ""
#: lib/cannery_web/components/topbar.ex:104 #: lib/cannery_web/components/core_components/topbar.html.heex:89
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
msgid "Are you sure you want to log out?" msgid "Are you sure you want to log out?"
msgstr "" msgstr ""
@ -104,7 +104,7 @@ msgstr ""
msgid "Password updated successfully." msgid "Password updated successfully."
msgstr "" msgstr ""
#: lib/cannery_web/controllers/user_registration_controller.ex:65 #: lib/cannery_web/controllers/user_registration_controller.ex:66
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
msgid "Please check your email to verify your account" msgid "Please check your email to verify your account"
msgstr "" msgstr ""
@ -130,44 +130,44 @@ msgstr ""
msgid "Are you sure you want to remove the %{tag_name} tag from %{container_name}?" msgid "Are you sure you want to remove the %{tag_name} tag from %{container_name}?"
msgstr "" msgstr ""
#: lib/cannery_web/live/container_live/edit_tags_component.ex:50 #: lib/cannery_web/live/container_live/edit_tags_component.ex:51
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
msgid "%{name} added successfully" msgid "%{name} added successfully"
msgstr "" msgstr ""
#: lib/cannery_web/live/container_live/show.ex:39 #: lib/cannery_web/live/container_live/show.ex:38
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
msgid "%{tag_name} has been removed from %{container_name}" msgid "%{tag_name} has been removed from %{container_name}"
msgstr "" msgstr ""
#: lib/cannery_web/live/container_live/edit_tags_component.html.heex:52 #: lib/cannery_web/live/container_live/edit_tags_component.html.heex:53
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
msgid "Adding..." msgid "Adding..."
msgstr "" msgstr ""
#: lib/cannery_web/components/add_shot_group_component.ex:56 #: lib/cannery_web/components/add_shot_group_component.ex:60
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
msgid "Shots recorded successfully" msgid "Shots recorded successfully"
msgstr "" msgstr ""
#: lib/cannery_web/live/range_live/index.html.heex:27 #: lib/cannery_web/live/range_live/index.html.heex:34
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
msgid "Are you sure you want to unstage this ammo?" msgid "Are you sure you want to unstage this ammo?"
msgstr "" msgstr ""
#: lib/cannery_web/live/ammo_group_live/show.ex:143 #: lib/cannery_web/live/ammo_group_live/show.ex:159
#: lib/cannery_web/live/range_live/index.html.heex:119 #: lib/cannery_web/live/range_live/index.html.heex:127
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
msgid "Are you sure you want to delete this shot record?" msgid "Are you sure you want to delete this shot record?"
msgstr "" msgstr ""
#: lib/cannery_web/live/ammo_group_live/show.ex:80 #: lib/cannery_web/live/ammo_group_live/show.ex:81
#: lib/cannery_web/live/range_live/index.ex:80 #: lib/cannery_web/live/range_live/index.ex:79
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
msgid "Shot records deleted succesfully" msgid "Shot records deleted succesfully"
msgstr "" msgstr ""
#: lib/cannery_web/live/range_live/form_component.ex:55 #: lib/cannery_web/live/range_live/form_component.ex:54
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
msgid "Shot records updated successfully" msgid "Shot records updated successfully"
msgstr "" msgstr ""
@ -177,17 +177,17 @@ msgstr ""
msgid "%{email} confirmed successfully." msgid "%{email} confirmed successfully."
msgstr "" msgstr ""
#: lib/cannery_web/components/move_ammo_group_component.ex:53 #: lib/cannery_web/components/move_ammo_group_component.ex:54
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
msgid "Ammo moved to %{name} successfully" msgid "Ammo moved to %{name} successfully"
msgstr "" msgstr ""
#: lib/cannery_web/live/invite_live/index.ex:127 #: lib/cannery_web/live/invite_live/index.ex:126
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
msgid "Copied to clipboard" msgid "Copied to clipboard"
msgstr "" msgstr ""
#: lib/cannery_web/live/container_live/edit_tags_component.ex:77 #: lib/cannery_web/live/container_live/edit_tags_component.ex:78
#, elixir-autogen, elixir-format, fuzzy #, elixir-autogen, elixir-format, fuzzy
msgid "%{name} removed successfully" msgid "%{name} removed successfully"
msgstr "" msgstr ""
@ -214,70 +214,70 @@ msgid "Language updated successfully."
msgstr "" msgstr ""
#: lib/cannery_web/live/ammo_group_live/index.ex:89 #: lib/cannery_web/live/ammo_group_live/index.ex:89
#: lib/cannery_web/live/ammo_group_live/show.ex:54 #: lib/cannery_web/live/ammo_group_live/show.ex:55
#, elixir-autogen, elixir-format, fuzzy #, elixir-autogen, elixir-format, fuzzy
msgid "Ammo deleted succesfully" msgid "Ammo deleted succesfully"
msgstr "" msgstr ""
#: lib/cannery_web/live/range_live/index.ex:94 #: lib/cannery_web/live/range_live/index.ex:93
#, elixir-autogen, elixir-format, fuzzy #, elixir-autogen, elixir-format, fuzzy
msgid "Ammo unstaged succesfully" msgid "Ammo unstaged succesfully"
msgstr "" msgstr ""
#: lib/cannery_web/live/ammo_group_live/form_component.ex:118 #: lib/cannery_web/live/ammo_group_live/form_component.ex:126
#, elixir-autogen, elixir-format, fuzzy #, elixir-autogen, elixir-format, fuzzy
msgid "Ammo updated successfully" msgid "Ammo updated successfully"
msgstr "" msgstr ""
#: lib/cannery_web/live/ammo_group_live/form_component.ex:178 #: lib/cannery_web/live/ammo_group_live/form_component.ex:185
#, elixir-autogen, elixir-format, fuzzy #, elixir-autogen, elixir-format, fuzzy
msgid "Ammo added successfully" msgid "Ammo added successfully"
msgid_plural "Ammo added successfully" msgid_plural "Ammo added successfully"
msgstr[0] "" msgstr[0] ""
msgstr[1] "" msgstr[1] ""
#: lib/cannery_web/live/ammo_type_live/index.html.heex:95 #: lib/cannery_web/live/ammo_type_live/index.html.heex:96
#: lib/cannery_web/live/ammo_type_live/show.html.heex:29 #: lib/cannery_web/live/ammo_type_live/show.html.heex:29
#, elixir-autogen, elixir-format, fuzzy #, elixir-autogen, elixir-format, fuzzy
msgid "Are you sure you want to delete %{name}? This will delete all %{name} type ammo as well!" msgid "Are you sure you want to delete %{name}? This will delete all %{name} type ammo as well!"
msgstr "" msgstr ""
#: lib/cannery_web/live/home_live.html.heex:65 #: lib/cannery_web/live/home_live.html.heex:63
#, elixir-autogen, elixir-format, fuzzy #, elixir-autogen, elixir-format, fuzzy
msgid "Register to setup Cannery" msgid "Register to setup Cannery"
msgstr "" msgstr ""
#: lib/cannery_web/live/invite_live/index.ex:54 #: lib/cannery_web/live/invite_live/index.ex:53
#, elixir-autogen, elixir-format, fuzzy #, elixir-autogen, elixir-format, fuzzy
msgid "%{invite_name} deleted succesfully" msgid "%{invite_name} deleted succesfully"
msgstr "" msgstr ""
#: lib/cannery_web/live/invite_live/index.ex:115 #: lib/cannery_web/live/invite_live/index.ex:114
#, elixir-autogen, elixir-format, fuzzy #, elixir-autogen, elixir-format, fuzzy
msgid "%{invite_name} disabled succesfully" msgid "%{invite_name} disabled succesfully"
msgstr "" msgstr ""
#: lib/cannery_web/live/invite_live/index.ex:91 #: lib/cannery_web/live/invite_live/index.ex:90
#, elixir-autogen, elixir-format, fuzzy #, elixir-autogen, elixir-format, fuzzy
msgid "%{invite_name} enabled succesfully" msgid "%{invite_name} enabled succesfully"
msgstr "" msgstr ""
#: lib/cannery_web/live/invite_live/index.ex:69 #: lib/cannery_web/live/invite_live/index.ex:68
#, elixir-autogen, elixir-format, fuzzy #, elixir-autogen, elixir-format, fuzzy
msgid "%{invite_name} updated succesfully" msgid "%{invite_name} updated succesfully"
msgstr "" msgstr ""
#: lib/cannery_web/live/invite_live/index.ex:138 #: lib/cannery_web/live/invite_live/index.ex:135
#, elixir-autogen, elixir-format, fuzzy #, elixir-autogen, elixir-format, fuzzy
msgid "%{user_email} deleted succesfully" msgid "%{user_email} deleted succesfully"
msgstr "" msgstr ""
#: lib/cannery_web/live/invite_live/index.html.heex:53 #: lib/cannery_web/live/invite_live/index.html.heex:58
#, elixir-autogen, elixir-format, fuzzy #, elixir-autogen, elixir-format, fuzzy
msgid "Are you sure you want to delete the invite for %{invite_name}?" msgid "Are you sure you want to delete the invite for %{invite_name}?"
msgstr "" msgstr ""
#: lib/cannery_web/live/invite_live/index.html.heex:80 #: lib/cannery_web/live/invite_live/index.html.heex:85
#, elixir-autogen, elixir-format, fuzzy #, elixir-autogen, elixir-format, fuzzy
msgid "Are you sure you want to make %{invite_name} unlimited?" msgid "Are you sure you want to make %{invite_name} unlimited?"
msgstr "" msgstr ""

View File

@ -10,18 +10,18 @@
msgid "" msgid ""
msgstr "" msgstr ""
#: lib/cannery/containers.ex:179 #: lib/cannery/containers.ex:200
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
msgid "Container must be empty before deleting" msgid "Container must be empty before deleting"
msgstr "" msgstr ""
#: lib/cannery_web/live/container_live/index.ex:92 #: lib/cannery_web/live/container_live/index.ex:86
#: lib/cannery_web/live/container_live/show.ex:72 #: lib/cannery_web/live/container_live/show.ex:71
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
msgid "Could not delete %{name}: %{error}" msgid "Could not delete %{name}: %{error}"
msgstr "" msgstr ""
#: lib/cannery_web/live/container_live/index.ex:80 #: lib/cannery_web/live/container_live/index.ex:74
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
msgid "Could not find that container" msgid "Could not find that container"
msgstr "" msgstr ""
@ -36,12 +36,12 @@ msgstr ""
msgid "Error" msgid "Error"
msgstr "" msgstr ""
#: lib/cannery_web/templates/error/error.html.heex:28 #: lib/cannery_web/templates/error/error.html.heex:31
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
msgid "Go back home" msgid "Go back home"
msgstr "" msgstr ""
#: lib/cannery_web/views/error_view.ex:11 #: lib/cannery_web/views/error_view.ex:10
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
msgid "Internal Server Error" msgid "Internal Server Error"
msgstr "" msgstr ""
@ -51,7 +51,7 @@ msgstr ""
msgid "Invalid email or password" msgid "Invalid email or password"
msgstr "" msgstr ""
#: lib/cannery_web/views/error_view.ex:9 #: lib/cannery_web/views/error_view.ex:8
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
msgid "Not found" msgid "Not found"
msgstr "" msgstr ""
@ -70,15 +70,15 @@ msgstr ""
msgid "Reset password link is invalid or it has expired." msgid "Reset password link is invalid or it has expired."
msgstr "" msgstr ""
#: lib/cannery_web/controllers/user_registration_controller.ex:22 #: lib/cannery_web/controllers/user_registration_controller.ex:23
#: lib/cannery_web/controllers/user_registration_controller.ex:51 #: lib/cannery_web/controllers/user_registration_controller.ex:52
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
msgid "Sorry, public registration is disabled" msgid "Sorry, public registration is disabled"
msgstr "" msgstr ""
#: lib/cannery_web/controllers/user_registration_controller.ex:12 #: lib/cannery_web/controllers/user_registration_controller.ex:13
#: lib/cannery_web/controllers/user_registration_controller.ex:41 #: lib/cannery_web/controllers/user_registration_controller.ex:42
#: lib/cannery_web/controllers/user_registration_controller.ex:70 #: lib/cannery_web/controllers/user_registration_controller.ex:71
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
msgid "Sorry, this invite was not found or expired" msgid "Sorry, this invite was not found or expired"
msgstr "" msgstr ""
@ -88,7 +88,7 @@ msgstr ""
msgid "Unable to delete user" msgid "Unable to delete user"
msgstr "" msgstr ""
#: lib/cannery_web/views/error_view.ex:10 #: lib/cannery_web/views/error_view.ex:9
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
msgid "Unauthorized" msgid "Unauthorized"
msgstr "" msgstr ""
@ -98,7 +98,7 @@ msgstr ""
msgid "User confirmation link is invalid or it has expired." msgid "User confirmation link is invalid or it has expired."
msgstr "" msgstr ""
#: lib/cannery_web/live/invite_live/index.ex:19 #: lib/cannery_web/live/invite_live/index.ex:18
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
msgid "You are not authorized to view this page" msgid "You are not authorized to view this page"
msgstr "" msgstr ""
@ -128,64 +128,73 @@ msgstr ""
msgid "must have the @ sign and no spaces" msgid "must have the @ sign and no spaces"
msgstr "" msgstr ""
#: lib/cannery/tags.ex:66 #: lib/cannery_web/live/container_live/show.ex:46
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
msgid "Tag not found" msgid "Tag not found"
msgstr "" msgstr ""
#: lib/cannery_web/live/container_live/edit_tags_component.ex:45 #: lib/cannery_web/live/container_live/edit_tags_component.ex:46
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
msgid "Tag could not be added" msgid "Tag could not be added"
msgstr "" msgstr ""
#: lib/cannery/activity_log/shot_group.ex:126
#, elixir-autogen, elixir-format
msgid "Count must be at least 1"
msgstr ""
#: lib/cannery_web/controllers/user_auth.ex:39 #: lib/cannery_web/controllers/user_auth.ex:39
#: lib/cannery_web/controllers/user_auth.ex:161 #: lib/cannery_web/controllers/user_auth.ex:161
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
msgid "You must confirm your account and log in to access this page." msgid "You must confirm your account and log in to access this page."
msgstr "" msgstr ""
#: lib/cannery_web/live/container_live/edit_tags_component.ex:72 #: lib/cannery_web/live/container_live/edit_tags_component.ex:73
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
msgid "Tag could not be removed" msgid "Tag could not be removed"
msgstr "" msgstr ""
#: lib/cannery_web/live/ammo_group_live/form_component.ex:157 #: lib/cannery_web/live/ammo_group_live/form_component.ex:160
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
msgid "Could not parse number of copies" msgid "Could not parse number of copies"
msgstr "" msgstr ""
#: lib/cannery_web/live/ammo_group_live/form_component.ex:142 #: lib/cannery_web/live/ammo_group_live/form_component.ex:150
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
msgid "Invalid number of copies, must be between 1 and %{max}. Was %{multiplier}" msgid "Invalid number of copies, must be between 1 and %{max}. Was %{multiplier}"
msgstr "" msgstr ""
#: lib/cannery/ammo.ex:686 #: lib/cannery/ammo.ex:1015
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
msgid "Invalid multiplier" msgid "Invalid multiplier"
msgstr "" msgstr ""
#: lib/cannery/ammo/ammo_group.ex:97 #: lib/cannery/ammo/ammo_group.ex:92
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
msgid "Please select an ammo type and container" msgid "Please select an ammo type and container"
msgstr "" msgstr ""
#: lib/cannery_web/live/range_live/index.html.heex:67 #: lib/cannery_web/live/range_live/index.html.heex:74
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
msgid "Your browser does not support the canvas element." msgid "Your browser does not support the canvas element."
msgstr "" msgstr ""
#: lib/cannery/activity_log/shot_group.ex:77 #: lib/cannery/activity_log/shot_group.ex:72
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
msgid "Please select a valid user and ammo pack" msgid "Please select a valid user and ammo pack"
msgstr "" msgstr ""
#: lib/cannery/activity_log/shot_group.ex:83 #: lib/cannery/activity_log/shot_group.ex:86
#: lib/cannery/activity_log/shot_group.ex:121
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
msgid "Count must be less than %{count} shots" msgid "Ammo left can be at most %{count} rounds"
msgstr ""
#: lib/cannery/activity_log/shot_group.ex:82
#, elixir-autogen, elixir-format
msgid "Ammo left must be at least 0"
msgstr ""
#: lib/cannery/activity_log/shot_group.ex:119
#, elixir-autogen, elixir-format
msgid "Count can be at most %{count} shots"
msgstr ""
#: lib/cannery/activity_log/shot_group.ex:78
#, elixir-autogen, elixir-format
msgid "can't be blank"
msgstr "" msgstr ""

View File

@ -79,11 +79,11 @@ msgstr "¿Has olvidado tu contraseña?"
msgid "Invite someone new!" msgid "Invite someone new!"
msgstr "¡Invita a alguien nuevo!" msgstr "¡Invita a alguien nuevo!"
#: lib/cannery_web/components/topbar.ex:137 #: lib/cannery_web/components/core_components/topbar.html.heex:122
#: lib/cannery_web/templates/user_confirmation/new.html.heex:31 #: lib/cannery_web/templates/user_confirmation/new.html.heex:32
#: lib/cannery_web/templates/user_registration/new.html.heex:44 #: lib/cannery_web/templates/user_registration/new.html.heex:44
#: lib/cannery_web/templates/user_reset_password/edit.html.heex:45 #: lib/cannery_web/templates/user_reset_password/edit.html.heex:45
#: lib/cannery_web/templates/user_reset_password/new.html.heex:31 #: lib/cannery_web/templates/user_reset_password/new.html.heex:32
#: lib/cannery_web/templates/user_session/new.html.heex:3 #: lib/cannery_web/templates/user_session/new.html.heex:3
#: lib/cannery_web/templates/user_session/new.html.heex:28 #: lib/cannery_web/templates/user_session/new.html.heex:28
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
@ -110,19 +110,19 @@ msgstr "Nuevo Contenedor"
msgid "New Tag" msgid "New Tag"
msgstr "Nueva Etiqueta" msgstr "Nueva Etiqueta"
#: lib/cannery_web/components/topbar.ex:129 #: lib/cannery_web/components/core_components/topbar.html.heex:114
#: lib/cannery_web/templates/user_confirmation/new.html.heex:28 #: lib/cannery_web/templates/user_confirmation/new.html.heex:29
#: lib/cannery_web/templates/user_registration/new.html.heex:3 #: lib/cannery_web/templates/user_registration/new.html.heex:3
#: lib/cannery_web/templates/user_registration/new.html.heex:37 #: lib/cannery_web/templates/user_registration/new.html.heex:37
#: lib/cannery_web/templates/user_reset_password/edit.html.heex:42 #: lib/cannery_web/templates/user_reset_password/edit.html.heex:42
#: lib/cannery_web/templates/user_reset_password/new.html.heex:28 #: lib/cannery_web/templates/user_reset_password/new.html.heex:29
#: lib/cannery_web/templates/user_session/new.html.heex:39 #: lib/cannery_web/templates/user_session/new.html.heex:39
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
msgid "Register" msgid "Register"
msgstr "Registrarse" msgstr "Registrarse"
#: lib/cannery_web/templates/user_confirmation/new.html.heex:3 #: lib/cannery_web/templates/user_confirmation/new.html.heex:3
#: lib/cannery_web/templates/user_confirmation/new.html.heex:15 #: lib/cannery_web/templates/user_confirmation/new.html.heex:16
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
msgid "Resend confirmation instructions" msgid "Resend confirmation instructions"
msgstr "Reenviar instrucciones de confirmación" msgstr "Reenviar instrucciones de confirmación"
@ -144,17 +144,17 @@ msgstr "Resetear contraseña"
msgid "Save" msgid "Save"
msgstr "Guardar" msgstr "Guardar"
#: lib/cannery_web/templates/user_reset_password/new.html.heex:15 #: lib/cannery_web/templates/user_reset_password/new.html.heex:16
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
msgid "Send instructions to reset password" msgid "Send instructions to reset password"
msgstr "Enviar instrucciones para reestablecer contraseña" msgstr "Enviar instrucciones para reestablecer contraseña"
#: lib/cannery_web/live/container_live/show.html.heex:78 #: lib/cannery_web/live/container_live/show.html.heex:75
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
msgid "Why not add one?" msgid "Why not add one?"
msgstr "¿Por qué no añadir una?" msgstr "¿Por qué no añadir una?"
#: lib/cannery_web/live/container_live/edit_tags_component.html.heex:50 #: lib/cannery_web/live/container_live/edit_tags_component.html.heex:51
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
msgid "Add" msgid "Add"
msgstr "Añadir" msgstr "Añadir"
@ -169,9 +169,9 @@ msgstr "Preparar munición"
msgid "Why not get some ready to shoot?" msgid "Why not get some ready to shoot?"
msgstr "¿Por qué no preparar parte para disparar?" msgstr "¿Por qué no preparar parte para disparar?"
#: lib/cannery_web/live/ammo_group_live/index.html.heex:102 #: lib/cannery_web/live/ammo_group_live/index.html.heex:103
#: lib/cannery_web/live/ammo_group_live/show.html.heex:107 #: lib/cannery_web/live/ammo_group_live/show.html.heex:103
#: lib/cannery_web/live/range_live/index.html.heex:38 #: lib/cannery_web/live/range_live/index.html.heex:45
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
msgid "Record shots" msgid "Record shots"
msgstr "Tiros récord" msgstr "Tiros récord"
@ -181,17 +181,12 @@ msgstr "Tiros récord"
msgid "Add another container!" msgid "Add another container!"
msgstr "¡Añade otro contenedor!" msgstr "¡Añade otro contenedor!"
#: lib/cannery_web/live/ammo_group_live/show.html.heex:100
#, elixir-autogen, elixir-format
msgid "Move containers"
msgstr "Mover contenedores"
#: lib/cannery_web/components/move_ammo_group_component.ex:126 #: lib/cannery_web/components/move_ammo_group_component.ex:126
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
msgid "Select" msgid "Select"
msgstr "Seleccionar" msgstr "Seleccionar"
#: lib/cannery_web/live/invite_live/index.html.heex:33 #: lib/cannery_web/live/invite_live/index.html.heex:38
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
msgid "Copy to clipboard" msgid "Copy to clipboard"
msgstr "Copiar al portapapeles" msgstr "Copiar al portapapeles"
@ -216,7 +211,7 @@ msgstr "Cambiar Lenguaje"
msgid "Change language" msgid "Change language"
msgstr "Cambiar lenguaje" msgstr "Cambiar lenguaje"
#: lib/cannery_web/live/ammo_group_live/show.html.heex:59 #: lib/cannery_web/live/ammo_group_live/show.html.heex:55
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
msgid "View in Catalog" msgid "View in Catalog"
msgstr "Ver en Catalogo" msgstr "Ver en Catalogo"
@ -227,23 +222,25 @@ msgid "add an ammo type first"
msgstr "añade primero un tipo de munición" msgstr "añade primero un tipo de munición"
#: lib/cannery_web/components/move_ammo_group_component.ex:80 #: lib/cannery_web/components/move_ammo_group_component.ex:80
#: lib/cannery_web/live/ammo_group_live/index.html.heex:120
#: lib/cannery_web/live/ammo_group_live/show.html.heex:96
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
msgid "Move ammo" msgid "Move ammo"
msgstr "Mover munición" msgstr "Mover munición"
#: lib/cannery_web/live/invite_live/index.html.heex:85 #: lib/cannery_web/live/invite_live/index.html.heex:90
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
msgid "Set Unlimited" msgid "Set Unlimited"
msgstr "Activar ilimitados" msgstr "Activar ilimitados"
#: lib/cannery_web/live/ammo_group_live/show.html.heex:93 #: lib/cannery_web/live/ammo_group_live/show.html.heex:89
#: lib/cannery_web/live/range_live/index.html.heex:31 #: lib/cannery_web/live/range_live/index.html.heex:38
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
msgid "Stage for range" msgid "Stage for range"
msgstr "Preparar para el campo de tiro" msgstr "Preparar para el campo de tiro"
#: lib/cannery_web/live/ammo_group_live/show.html.heex:92 #: lib/cannery_web/live/ammo_group_live/show.html.heex:88
#: lib/cannery_web/live/range_live/index.html.heex:30 #: lib/cannery_web/live/range_live/index.html.heex:37
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
msgid "Unstage from range" msgid "Unstage from range"
msgstr "Desmontar del campo de tiro" msgstr "Desmontar del campo de tiro"
@ -253,106 +250,123 @@ msgstr "Desmontar del campo de tiro"
msgid "Export Data as JSON" msgid "Export Data as JSON"
msgstr "Exportar datos como JSON" msgstr "Exportar datos como JSON"
#: lib/cannery_web/live/ammo_type_live/index.html.heex:83 #: lib/cannery_web/live/ammo_type_live/index.html.heex:84
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
msgid "Clone %{ammo_type_name}" msgid "Clone %{ammo_type_name}"
msgstr "" msgstr ""
#: lib/cannery_web/live/container_live/index.html.heex:86 #: lib/cannery_web/live/container_live/index.html.heex:87
#: lib/cannery_web/live/container_live/index.html.heex:138 #: lib/cannery_web/live/container_live/index.html.heex:143
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
msgid "Clone %{container_name}" msgid "Clone %{container_name}"
msgstr "" msgstr ""
#: lib/cannery_web/live/invite_live/index.html.heex:30 #: lib/cannery_web/live/invite_live/index.html.heex:35
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
msgid "Copy invite link for %{invite_name}" msgid "Copy invite link for %{invite_name}"
msgstr "" msgstr ""
#: lib/cannery_web/live/ammo_type_live/index.html.heex:102 #: lib/cannery_web/live/ammo_type_live/index.html.heex:103
#: lib/cannery_web/live/ammo_type_live/show.html.heex:36 #: lib/cannery_web/live/ammo_type_live/show.html.heex:36
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
msgid "Delete %{ammo_type_name}" msgid "Delete %{ammo_type_name}"
msgstr "" msgstr ""
#: lib/cannery_web/live/container_live/index.html.heex:101 #: lib/cannery_web/live/container_live/index.html.heex:102
#: lib/cannery_web/live/container_live/index.html.heex:153 #: lib/cannery_web/live/container_live/index.html.heex:158
#: lib/cannery_web/live/container_live/show.html.heex:58 #: lib/cannery_web/live/container_live/show.html.heex:55
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
msgid "Delete %{container_name}" msgid "Delete %{container_name}"
msgstr "" msgstr ""
#: lib/cannery_web/live/tag_live/index.html.heex:64 #: lib/cannery_web/live/tag_live/index.html.heex:65
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
msgid "Delete %{tag_name}" msgid "Delete %{tag_name}"
msgstr "" msgstr ""
#: lib/cannery_web/live/invite_live/index.html.heex:58 #: lib/cannery_web/live/invite_live/index.html.heex:63
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
msgid "Delete invite for %{invite_name}" msgid "Delete invite for %{invite_name}"
msgstr "" msgstr ""
#: lib/cannery_web/live/ammo_group_live/show.ex:145 #: lib/cannery_web/live/ammo_group_live/show.ex:161
#: lib/cannery_web/live/range_live/index.html.heex:122 #: lib/cannery_web/live/range_live/index.html.heex:130
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
msgid "Delete shot record of %{shot_group_count} shots" msgid "Delete shot record of %{shot_group_count} shots"
msgstr "" msgstr ""
#: lib/cannery_web/live/ammo_type_live/index.html.heex:73 #: lib/cannery_web/live/ammo_type_live/index.html.heex:74
#: lib/cannery_web/live/ammo_type_live/show.html.heex:19 #: lib/cannery_web/live/ammo_type_live/show.html.heex:19
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
msgid "Edit %{ammo_type_name}" msgid "Edit %{ammo_type_name}"
msgstr "" msgstr ""
#: lib/cannery_web/live/container_live/index.html.heex:76 #: lib/cannery_web/live/container_live/index.html.heex:77
#: lib/cannery_web/live/container_live/index.html.heex:128 #: lib/cannery_web/live/container_live/index.html.heex:133
#: lib/cannery_web/live/container_live/show.html.heex:45 #: lib/cannery_web/live/container_live/show.html.heex:42
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
msgid "Edit %{container_name}" msgid "Edit %{container_name}"
msgstr "" msgstr ""
#: lib/cannery_web/live/tag_live/index.html.heex:51 #: lib/cannery_web/live/tag_live/index.html.heex:52
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
msgid "Edit %{tag_name}" msgid "Edit %{tag_name}"
msgstr "" msgstr ""
#: lib/cannery_web/live/ammo_group_live/show.html.heex:66 #: lib/cannery_web/live/ammo_group_live/index.html.heex:142
#: lib/cannery_web/live/ammo_group_live/show.html.heex:62
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
msgid "Edit ammo group of %{ammo_group_count} bullets" msgid "Edit ammo group of %{ammo_group_count} bullets"
msgstr "" msgstr ""
#: lib/cannery_web/live/invite_live/index.html.heex:41 #: lib/cannery_web/live/invite_live/index.html.heex:46
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
msgid "Edit invite for %{invite_name}" msgid "Edit invite for %{invite_name}"
msgstr "" msgstr ""
#: lib/cannery_web/live/ammo_group_live/show.ex:130 #: lib/cannery_web/live/ammo_group_live/show.ex:146
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
msgid "Edit shot group of %{shot_group_count} shots" msgid "Edit shot group of %{shot_group_count} shots"
msgstr "" msgstr ""
#: lib/cannery_web/live/range_live/index.html.heex:105 #: lib/cannery_web/live/range_live/index.html.heex:113
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
msgid "Edit shot record of %{shot_group_count} shots" msgid "Edit shot record of %{shot_group_count} shots"
msgstr "" msgstr ""
#: lib/cannery_web/live/ammo_group_live/index.html.heex:95 #: lib/cannery_web/live/ammo_group_live/index.html.heex:96
#, elixir-autogen, elixir-format, fuzzy #, elixir-autogen, elixir-format, fuzzy
msgid "Stage" msgid "Stage"
msgstr "Preparar munición" msgstr "Preparar munición"
#: lib/cannery_web/live/container_live/index.html.heex:64 #: lib/cannery_web/live/container_live/index.html.heex:65
#: lib/cannery_web/live/container_live/index.html.heex:117 #: lib/cannery_web/live/container_live/index.html.heex:122
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
msgid "Tag %{container_name}" msgid "Tag %{container_name}"
msgstr "" msgstr ""
#: lib/cannery_web/live/ammo_group_live/index.html.heex:94 #: lib/cannery_web/live/ammo_group_live/index.html.heex:95
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
msgid "Unstage" msgid "Unstage"
msgstr "" msgstr ""
#: lib/cannery_web/live/ammo_type_live/index.html.heex:63 #: lib/cannery_web/live/ammo_type_live/index.html.heex:64
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
msgid "View %{ammo_type_name}" msgid "View %{ammo_type_name}"
msgstr "" msgstr ""
#: lib/cannery_web/live/ammo_group_live/index.html.heex:154
#, elixir-autogen, elixir-format, fuzzy
msgid "Clone ammo group of %{ammo_group_count} bullets"
msgstr ""
#: lib/cannery_web/live/ammo_group_live/index.html.heex:169
#: lib/cannery_web/live/ammo_group_live/show.html.heex:76
#, elixir-autogen, elixir-format, fuzzy
msgid "Delete ammo group of %{ammo_group_count} bullets"
msgstr ""
#: lib/cannery_web/live/ammo_group_live/index.html.heex:130
#, elixir-autogen, elixir-format, fuzzy
msgid "View ammo group of %{ammo_group_count} bullets"
msgstr ""

View File

@ -14,23 +14,23 @@ msgstr ""
"Plural-Forms: nplurals=2; plural=n != 1;\n" "Plural-Forms: nplurals=2; plural=n != 1;\n"
"X-Generator: Weblate 4.14.2\n" "X-Generator: Weblate 4.14.2\n"
#: lib/cannery_web/live/home_live.html.heex:46 #: lib/cannery_web/live/home_live.html.heex:44
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
msgid "Access from any internet-capable device" msgid "Access from any internet-capable device"
msgstr "Acceso desde cualquier dispositivo con conexión a internet" msgstr "Acceso desde cualquier dispositivo con conexión a internet"
#: lib/cannery_web/live/invite_live/index.html.heex:94 #: lib/cannery_web/live/invite_live/index.html.heex:99
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
msgid "Admins" msgid "Admins"
msgstr "Administradores" msgstr "Administradores"
#: lib/cannery_web/live/home_live.html.heex:60 #: lib/cannery_web/live/home_live.html.heex:58
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
msgid "Admins:" msgid "Admins:"
msgstr "Aministradores:" msgstr "Aministradores:"
#: lib/cannery_web/components/core_components/topbar.html.heex:58
#: lib/cannery_web/components/shot_group_table_component.ex:41 #: lib/cannery_web/components/shot_group_table_component.ex:41
#: lib/cannery_web/components/topbar.ex:73
#: lib/cannery_web/live/ammo_group_live/index.ex:70 #: lib/cannery_web/live/ammo_group_live/index.ex:70
#: lib/cannery_web/live/ammo_group_live/index.ex:79 #: lib/cannery_web/live/ammo_group_live/index.ex:79
#: lib/cannery_web/live/ammo_group_live/index.html.heex:3 #: lib/cannery_web/live/ammo_group_live/index.html.heex:3
@ -97,9 +97,9 @@ msgstr "Material del casquillo"
msgid "Container" msgid "Container"
msgstr "Contenedor" msgstr "Contenedor"
#: lib/cannery_web/components/topbar.ex:57 #: lib/cannery_web/components/core_components/topbar.html.heex:42
#: lib/cannery_web/live/container_live/index.ex:49 #: lib/cannery_web/live/container_live/index.ex:45
#: lib/cannery_web/live/container_live/index.ex:58 #: lib/cannery_web/live/container_live/index.ex:54
#: lib/cannery_web/live/container_live/index.html.heex:3 #: lib/cannery_web/live/container_live/index.html.heex:3
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
msgid "Containers" msgid "Containers"
@ -117,36 +117,36 @@ msgstr "Corrosiva"
msgid "Count" msgid "Count"
msgstr "Cantidad" msgstr "Cantidad"
#: lib/cannery_web/components/ammo_group_card.ex:39 #: lib/cannery_web/components/core_components/ammo_group_card.html.heex:16
#: lib/cannery_web/live/ammo_group_live/show.html.heex:8 #: lib/cannery_web/live/ammo_group_live/show.html.heex:8
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
msgid "Count:" msgid "Count:"
msgstr "Cantidad:" msgstr "Cantidad:"
#: lib/cannery_web/components/container_table_component.ex:47 #: lib/cannery_web/components/container_table_component.ex:46
#: lib/cannery_web/live/ammo_type_live/form_component.html.heex:25 #: lib/cannery_web/live/ammo_type_live/form_component.html.heex:25
#: lib/cannery_web/live/container_live/form_component.html.heex:28 #: lib/cannery_web/live/container_live/form_component.html.heex:28
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
msgid "Description" msgid "Description"
msgstr "Descripción" msgstr "Descripción"
#: lib/cannery_web/components/container_card.ex:39 #: lib/cannery_web/components/core_components/container_card.html.heex:16
#: lib/cannery_web/live/container_live/show.html.heex:7 #: lib/cannery_web/live/container_live/show.html.heex:7
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
msgid "Description:" msgid "Description:"
msgstr "Descripción:" msgstr "Descripción:"
#: lib/cannery_web/live/home_live.html.heex:23 #: lib/cannery_web/live/home_live.html.heex:22
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
msgid "Easy to Use:" msgid "Easy to Use:"
msgstr "Facil de Usar:" msgstr "Facil de Usar:"
#: lib/cannery_web/live/invite_live/index.ex:34 #: lib/cannery_web/live/invite_live/index.ex:33
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
msgid "Edit Invite" msgid "Edit Invite"
msgstr "Editar Invitación" msgstr "Editar Invitación"
#: lib/cannery_web/live/tag_live/index.ex:28 #: lib/cannery_web/live/tag_live/index.ex:27
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
msgid "Edit Tag" msgid "Edit Tag"
msgstr "Editar Etiqueta" msgstr "Editar Etiqueta"
@ -173,23 +173,23 @@ msgstr "Grano"
msgid "Incendiary" msgid "Incendiary"
msgstr "Incendiaria" msgstr "Incendiaria"
#: lib/cannery_web/live/home_live.html.heex:55 #: lib/cannery_web/live/home_live.html.heex:53
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
msgid "Instance Information" msgid "Instance Information"
msgstr "Información de Instancia" msgstr "Información de Instancia"
#: lib/cannery_web/components/invite_card.ex:42 #: lib/cannery_web/components/core_components/invite_card.html.heex:21
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
msgid "Invite Disabled" msgid "Invite Disabled"
msgstr "Invitación Desactivada" msgstr "Invitación Desactivada"
#: lib/cannery_web/live/home_live.html.heex:82 #: lib/cannery_web/live/home_live.html.heex:84
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
msgid "Invite Only" msgid "Invite Only"
msgstr "Solo Invitación" msgstr "Solo Invitación"
#: lib/cannery_web/components/topbar.ex:89 #: lib/cannery_web/components/core_components/topbar.html.heex:74
#: lib/cannery_web/live/invite_live/index.ex:42 #: lib/cannery_web/live/invite_live/index.ex:41
#: lib/cannery_web/live/invite_live/index.html.heex:3 #: lib/cannery_web/live/invite_live/index.html.heex:3
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
msgid "Invites" msgid "Invites"
@ -200,14 +200,14 @@ msgstr "Invitaciones"
msgid "Keep me logged in for 60 days" msgid "Keep me logged in for 60 days"
msgstr "Mantener registrado durante 60 días" msgstr "Mantener registrado durante 60 días"
#: lib/cannery_web/components/container_table_component.ex:48 #: lib/cannery_web/components/container_table_component.ex:47
#: lib/cannery_web/components/move_ammo_group_component.ex:69 #: lib/cannery_web/components/move_ammo_group_component.ex:69
#: lib/cannery_web/live/container_live/form_component.html.heex:43 #: lib/cannery_web/live/container_live/form_component.html.heex:43
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
msgid "Location" msgid "Location"
msgstr "Localización" msgstr "Localización"
#: lib/cannery_web/components/container_card.ex:49 #: lib/cannery_web/components/core_components/container_card.html.heex:26
#: lib/cannery_web/live/container_live/show.html.heex:17 #: lib/cannery_web/live/container_live/show.html.heex:17
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
msgid "Location:" msgid "Location:"
@ -235,7 +235,7 @@ msgid "My cool ammo can"
msgstr "Mi lata de munición guapa" msgstr "Mi lata de munición guapa"
#: lib/cannery_web/components/ammo_type_table_component.ex:45 #: lib/cannery_web/components/ammo_type_table_component.ex:45
#: lib/cannery_web/components/container_table_component.ex:46 #: lib/cannery_web/components/container_table_component.ex:45
#: lib/cannery_web/live/ammo_type_live/form_component.html.heex:21 #: lib/cannery_web/live/ammo_type_live/form_component.html.heex:21
#: lib/cannery_web/live/container_live/form_component.html.heex:21 #: lib/cannery_web/live/container_live/form_component.html.heex:21
#: lib/cannery_web/live/invite_live/form_component.html.heex:21 #: lib/cannery_web/live/invite_live/form_component.html.heex:21
@ -250,35 +250,35 @@ msgstr "Nombre"
msgid "New Ammo type" msgid "New Ammo type"
msgstr "Nuevo tipo de Munición" msgstr "Nuevo tipo de Munición"
#: lib/cannery_web/live/container_live/index.ex:36 #: lib/cannery_web/live/container_live/index.ex:32
#: lib/cannery_web/live/container_live/index.ex:43 #: lib/cannery_web/live/container_live/index.ex:39
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
msgid "New Container" msgid "New Container"
msgstr "Nuevo Contenedor" msgstr "Nuevo Contenedor"
#: lib/cannery_web/live/invite_live/index.ex:38 #: lib/cannery_web/live/invite_live/index.ex:37
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
msgid "New Invite" msgid "New Invite"
msgstr "Nueva Invitación" msgstr "Nueva Invitación"
#: lib/cannery_web/live/tag_live/index.ex:36 #: lib/cannery_web/live/tag_live/index.ex:35
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
msgid "New Tag" msgid "New Tag"
msgstr "Nueva Etiqueta" msgstr "Nueva Etiqueta"
#: lib/cannery_web/live/ammo_group_live/index.html.heex:10 #: lib/cannery_web/live/ammo_group_live/index.html.heex:10
#: lib/cannery_web/live/ammo_group_live/index.html.heex:70 #: lib/cannery_web/live/ammo_group_live/index.html.heex:71
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
msgid "No Ammo" msgid "No Ammo"
msgstr "Sin Munición" msgstr "Sin Munición"
#: lib/cannery_web/live/ammo_type_live/show.html.heex:169 #: lib/cannery_web/live/ammo_type_live/show.html.heex:167
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
msgid "No ammo for this type" msgid "No ammo for this type"
msgstr "Sin munición para este tipo" msgstr "Sin munición para este tipo"
#: lib/cannery_web/live/container_live/index.html.heex:8 #: lib/cannery_web/live/container_live/index.html.heex:8
#: lib/cannery_web/live/container_live/index.html.heex:46 #: lib/cannery_web/live/container_live/index.html.heex:47
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
msgid "No containers" msgid "No containers"
msgstr "Sin contenedores" msgstr "Sin contenedores"
@ -290,7 +290,7 @@ msgstr "Sin invitaciones"
#: lib/cannery_web/live/container_live/edit_tags_component.html.heex:29 #: lib/cannery_web/live/container_live/edit_tags_component.html.heex:29
#: lib/cannery_web/live/tag_live/index.html.heex:10 #: lib/cannery_web/live/tag_live/index.html.heex:10
#: lib/cannery_web/live/tag_live/index.html.heex:42 #: lib/cannery_web/live/tag_live/index.html.heex:43
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
msgid "No tags" msgid "No tags"
msgstr "Sin etiquetas" msgstr "Sin etiquetas"
@ -299,13 +299,13 @@ msgstr "Sin etiquetas"
#: lib/cannery_web/components/ammo_group_table_component.ex:81 #: lib/cannery_web/components/ammo_group_table_component.ex:81
#: lib/cannery_web/components/shot_group_table_component.ex:43 #: lib/cannery_web/components/shot_group_table_component.ex:43
#: lib/cannery_web/live/ammo_group_live/form_component.html.heex:50 #: lib/cannery_web/live/ammo_group_live/form_component.html.heex:50
#: lib/cannery_web/live/ammo_group_live/show.ex:90 #: lib/cannery_web/live/ammo_group_live/show.ex:92
#: lib/cannery_web/live/range_live/form_component.html.heex:30 #: lib/cannery_web/live/range_live/form_component.html.heex:30
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
msgid "Notes" msgid "Notes"
msgstr "Notas" msgstr "Notas"
#: lib/cannery_web/components/ammo_group_card.ex:52 #: lib/cannery_web/components/core_components/ammo_group_card.html.heex:26
#: lib/cannery_web/live/ammo_group_live/show.html.heex:24 #: lib/cannery_web/live/ammo_group_live/show.html.heex:24
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
msgid "Notes:" msgid "Notes:"
@ -328,7 +328,7 @@ msgstr "Presión"
msgid "Price paid" msgid "Price paid"
msgstr "Precio pagado" msgstr "Precio pagado"
#: lib/cannery_web/components/ammo_group_card.ex:68 #: lib/cannery_web/components/core_components/ammo_group_card.html.heex:41
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
msgid "Price paid:" msgid "Price paid:"
msgstr "Precio pagado:" msgstr "Precio pagado:"
@ -339,17 +339,17 @@ msgstr "Precio pagado:"
msgid "Primer type" msgid "Primer type"
msgstr "Tipo de espoleta" msgstr "Tipo de espoleta"
#: lib/cannery_web/live/home_live.html.heex:81 #: lib/cannery_web/live/home_live.html.heex:83
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
msgid "Public Signups" msgid "Public Signups"
msgstr "Registro Público" msgstr "Registro Público"
#: lib/cannery_web/live/home_live.html.heex:33 #: lib/cannery_web/live/home_live.html.heex:32
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
msgid "Secure:" msgid "Secure:"
msgstr "Seguro:" msgstr "Seguro:"
#: lib/cannery_web/live/home_live.html.heex:36 #: lib/cannery_web/live/home_live.html.heex:35
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
msgid "Self-host your own instance, or use an instance from someone you trust." msgid "Self-host your own instance, or use an instance from someone you trust."
msgstr "" msgstr ""
@ -362,7 +362,7 @@ msgstr ""
msgid "Settings" msgid "Settings"
msgstr "Ajustes" msgstr "Ajustes"
#: lib/cannery_web/live/home_live.html.heex:43 #: lib/cannery_web/live/home_live.html.heex:41
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
msgid "Simple:" msgid "Simple:"
msgstr "Simple:" msgstr "Simple:"
@ -372,15 +372,15 @@ msgstr "Simple:"
msgid "Steel" msgid "Steel"
msgstr "Acero" msgstr "Acero"
#: lib/cannery_web/live/ammo_group_live/show.html.heex:117 #: lib/cannery_web/live/ammo_group_live/show.html.heex:113
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
msgid "Stored in" msgid "Stored in"
msgstr "Guardado en" msgstr "Guardado en"
#: lib/cannery_web/components/container_table_component.ex:52 #: lib/cannery_web/components/container_table_component.ex:66
#: lib/cannery_web/components/topbar.ex:49 #: lib/cannery_web/components/core_components/topbar.html.heex:34
#: lib/cannery_web/live/tag_live/index.ex:44 #: lib/cannery_web/live/tag_live/index.ex:43
#: lib/cannery_web/live/tag_live/index.ex:54 #: lib/cannery_web/live/tag_live/index.ex:53
#: lib/cannery_web/live/tag_live/index.html.heex:3 #: lib/cannery_web/live/tag_live/index.html.heex:3
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
msgid "Tags" msgid "Tags"
@ -408,20 +408,20 @@ msgstr "La página de seguimiento de armas autogestionada"
msgid "Tracer" msgid "Tracer"
msgstr "Trazadora" msgstr "Trazadora"
#: lib/cannery_web/components/container_table_component.ex:49 #: lib/cannery_web/components/container_table_component.ex:48
#: lib/cannery_web/components/move_ammo_group_component.ex:68 #: lib/cannery_web/components/move_ammo_group_component.ex:68
#: lib/cannery_web/live/container_live/form_component.html.heex:36 #: lib/cannery_web/live/container_live/form_component.html.heex:36
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
msgid "Type" msgid "Type"
msgstr "Tipo" msgstr "Tipo"
#: lib/cannery_web/components/container_card.ex:44 #: lib/cannery_web/components/core_components/container_card.html.heex:21
#: lib/cannery_web/live/container_live/show.html.heex:12 #: lib/cannery_web/live/container_live/show.html.heex:12
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
msgid "Type:" msgid "Type:"
msgstr "Tipo:" msgstr "Tipo:"
#: lib/cannery_web/live/invite_live/index.html.heex:122 #: lib/cannery_web/live/invite_live/index.html.heex:127
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
msgid "Users" msgid "Users"
msgstr "Usuarios" msgstr "Usuarios"
@ -431,18 +431,18 @@ msgstr "Usuarios"
msgid "Uses left" msgid "Uses left"
msgstr "Usos restantes" msgstr "Usos restantes"
#: lib/cannery_web/live/home_live.html.heex:37 #: lib/cannery_web/live/home_live.html.heex:36
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
msgid "Your data stays with you, period" msgid "Your data stays with you, period"
msgstr "Tus datos se quedan contigo, sin excepciones" msgstr "Tus datos se quedan contigo, sin excepciones"
#: lib/cannery_web/live/container_live/show.html.heex:70 #: lib/cannery_web/live/container_live/show.html.heex:67
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
msgid "No tags for this container" msgid "No tags for this container"
msgstr "Contenedor sin etiquetas" msgstr "Contenedor sin etiquetas"
#: lib/cannery_web/components/ammo_group_table_component.ex:72 #: lib/cannery_web/components/ammo_group_table_component.ex:72
#: lib/cannery_web/components/topbar.ex:81 #: lib/cannery_web/components/core_components/topbar.html.heex:66
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
msgid "Range" msgid "Range"
msgstr "Campo de tiro" msgstr "Campo de tiro"
@ -454,7 +454,7 @@ msgstr "Día de disparar"
#: lib/cannery_web/components/add_shot_group_component.html.heex:46 #: lib/cannery_web/components/add_shot_group_component.html.heex:46
#: lib/cannery_web/components/shot_group_table_component.ex:44 #: lib/cannery_web/components/shot_group_table_component.ex:44
#: lib/cannery_web/live/ammo_group_live/show.ex:91 #: lib/cannery_web/live/ammo_group_live/show.ex:93
#: lib/cannery_web/live/range_live/form_component.html.heex:37 #: lib/cannery_web/live/range_live/form_component.html.heex:37
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
msgid "Date" msgid "Date"
@ -476,19 +476,19 @@ msgstr "No hay munición preparada"
msgid "Record shots" msgid "Record shots"
msgstr "Tiros récord" msgstr "Tiros récord"
#: lib/cannery_web/live/ammo_group_live/show.ex:41 #: lib/cannery_web/live/ammo_group_live/show.ex:42
#: lib/cannery_web/live/range_live/index.ex:41 #: lib/cannery_web/live/range_live/index.ex:40
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
msgid "Edit Shot Records" msgid "Edit Shot Records"
msgstr "Editar Tiros Récord" msgstr "Editar Tiros Récord"
#: lib/cannery_web/live/range_live/index.ex:49 #: lib/cannery_web/live/range_live/index.ex:48
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
msgid "New Shot Records" msgid "New Shot Records"
msgstr "Nuevos Tiros Récord" msgstr "Nuevos Tiros Récord"
#: lib/cannery_web/live/range_live/index.html.heex:48 #: lib/cannery_web/live/range_live/index.html.heex:55
#: lib/cannery_web/live/range_live/index.html.heex:89 #: lib/cannery_web/live/range_live/index.html.heex:97
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
msgid "No shots recorded" msgid "No shots recorded"
msgstr "No se han grabado tiros" msgstr "No se han grabado tiros"
@ -500,20 +500,19 @@ msgid "Rounds left"
msgstr "Balas restantes" msgstr "Balas restantes"
#: lib/cannery_web/components/shot_group_table_component.ex:42 #: lib/cannery_web/components/shot_group_table_component.ex:42
#: lib/cannery_web/live/ammo_group_live/show.ex:89 #: lib/cannery_web/live/ammo_group_live/show.ex:91
#: lib/cannery_web/live/range_live/index.html.heex:62 #: lib/cannery_web/live/range_live/index.html.heex:69
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
msgid "Rounds shot" msgid "Rounds shot"
msgstr "Balas disparadas" msgstr "Balas disparadas"
#: lib/cannery_web/live/range_live/index.ex:57 #: lib/cannery_web/live/range_live/index.ex:56
#: lib/cannery_web/live/range_live/index.ex:67 #: lib/cannery_web/live/range_live/index.ex:66
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
msgid "Shot Records" msgid "Shot Records"
msgstr "Récords de Tiro" msgstr "Récords de Tiro"
#: lib/cannery_web/live/ammo_group_live/index.ex:38 #: lib/cannery_web/live/ammo_group_live/index.ex:38
#: lib/cannery_web/live/ammo_group_live/index.html.heex:119
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
msgid "Move ammo" msgid "Move ammo"
msgstr "Mover munición" msgstr "Mover munición"
@ -523,18 +522,18 @@ msgstr "Mover munición"
msgid "No other containers" msgid "No other containers"
msgstr "No hay otros contenedores" msgstr "No hay otros contenedores"
#: lib/cannery_web/live/range_live/index.html.heex:53 #: lib/cannery_web/live/range_live/index.html.heex:60
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
msgid "Shot log" msgid "Shot log"
msgstr "Registro de tiros" msgstr "Registro de tiros"
#: lib/cannery_web/components/ammo_group_card.ex:69
#: lib/cannery_web/components/ammo_group_card.ex:76
#: lib/cannery_web/components/ammo_group_table_component.ex:153 #: lib/cannery_web/components/ammo_group_table_component.ex:153
#: lib/cannery_web/components/ammo_group_table_component.ex:225 #: lib/cannery_web/components/ammo_group_table_component.ex:229
#: lib/cannery_web/components/ammo_type_table_component.ex:180 #: lib/cannery_web/components/ammo_type_table_component.ex:224
#: lib/cannery_web/components/core_components/ammo_group_card.html.heex:42
#: lib/cannery_web/components/core_components/ammo_group_card.html.heex:47
#: lib/cannery_web/live/ammo_group_live/show.html.heex:37 #: lib/cannery_web/live/ammo_group_live/show.html.heex:37
#: lib/cannery_web/live/ammo_group_live/show.html.heex:44 #: lib/cannery_web/live/ammo_group_live/show.html.heex:42
#: lib/cannery_web/live/ammo_type_live/show.html.heex:139 #: lib/cannery_web/live/ammo_type_live/show.html.heex:139
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
msgid "$%{amount}" msgid "$%{amount}"
@ -604,28 +603,28 @@ msgstr "Tipo de fuego"
msgid "Reconnecting..." msgid "Reconnecting..."
msgstr "Reconectando..." msgstr "Reconectando..."
#: lib/cannery_web/live/container_live/index.ex:32 #: lib/cannery_web/live/container_live/index.ex:28
#: lib/cannery_web/live/container_live/show.ex:110 #: lib/cannery_web/live/container_live/show.ex:108
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
msgid "Edit %{name}" msgid "Edit %{name}"
msgstr "Editar %{name}" msgstr "Editar %{name}"
#: lib/cannery_web/live/container_live/index.ex:69 #: lib/cannery_web/live/container_live/index.ex:63
#: lib/cannery_web/live/container_live/show.ex:111 #: lib/cannery_web/live/container_live/show.ex:109
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
msgid "Edit %{name} tags" msgid "Edit %{name} tags"
msgstr "Editar etiquetas de %{name}" msgstr "Editar etiquetas de %{name}"
#: lib/cannery_web/components/container_card.ex:60 #: lib/cannery_web/components/core_components/container_card.html.heex:37
#: lib/cannery_web/live/ammo_type_live/show.html.heex:70 #: lib/cannery_web/live/ammo_type_live/show.html.heex:70
#: lib/cannery_web/live/container_live/show.html.heex:35 #: lib/cannery_web/live/container_live/show.html.heex:33
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
msgid "Rounds:" msgid "Rounds:"
msgstr "Balas:" msgstr "Balas:"
#: lib/cannery_web/components/ammo_group_table_component.ex:222 #: lib/cannery_web/components/ammo_group_table_component.ex:226
#: lib/cannery_web/components/ammo_type_table_component.ex:179 #: lib/cannery_web/components/ammo_type_table_component.ex:223
#: lib/cannery_web/live/ammo_type_live/show.html.heex:145 #: lib/cannery_web/live/ammo_type_live/show.html.heex:143
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
msgid "No cost information" msgid "No cost information"
msgstr "No hay información de coste" msgstr "No hay información de coste"
@ -635,7 +634,7 @@ msgstr "No hay información de coste"
msgid "% left" msgid "% left"
msgstr "% restantes" msgstr "% restantes"
#: lib/cannery_web/live/ammo_group_live/show.html.heex:43 #: lib/cannery_web/live/ammo_group_live/show.html.heex:41
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
msgid "Current value:" msgid "Current value:"
msgstr "Valor actual:" msgstr "Valor actual:"
@ -655,7 +654,7 @@ msgstr "Cantidad original:"
msgid "Percentage left:" msgid "Percentage left:"
msgstr "Pocentaje restante:" msgstr "Pocentaje restante:"
#: lib/cannery_web/live/ammo_group_live/show.html.heex:130 #: lib/cannery_web/live/ammo_group_live/show.html.heex:126
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
msgid "Rounds used" msgid "Rounds used"
msgstr "Balas usadas" msgstr "Balas usadas"
@ -675,7 +674,7 @@ msgstr "¿Olvidó su contraseña?"
msgid "Log in" msgid "Log in"
msgstr "Entrar" msgstr "Entrar"
#: lib/cannery_web/controllers/user_registration_controller.ex:32 #: lib/cannery_web/controllers/user_registration_controller.ex:33
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
msgid "Register" msgid "Register"
msgstr "Registrarse" msgstr "Registrarse"
@ -685,8 +684,8 @@ msgstr "Registrarse"
msgid "Reset your password" msgid "Reset your password"
msgstr "Reestablecer contraseña" msgstr "Reestablecer contraseña"
#: lib/cannery_web/live/ammo_group_live/show.ex:40 #: lib/cannery_web/live/ammo_group_live/show.ex:41
#: lib/cannery_web/live/range_live/index.ex:33 #: lib/cannery_web/live/range_live/index.ex:32
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
msgid "Record Shots" msgid "Record Shots"
msgstr "Tiros Récord" msgstr "Tiros Récord"
@ -722,27 +721,27 @@ msgstr "Alemán"
msgid "Language" msgid "Language"
msgstr "Idioma" msgstr "Idioma"
#: lib/cannery_web/live/home_live.html.heex:107 #: lib/cannery_web/live/home_live.html.heex:109
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
msgid "Get involved!" msgid "Get involved!"
msgstr "¡Implícate!" msgstr "¡Implícate!"
#: lib/cannery_web/live/home_live.html.heex:128 #: lib/cannery_web/live/home_live.html.heex:130
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
msgid "Help translate" msgid "Help translate"
msgstr "Ayuda a traducir" msgstr "Ayuda a traducir"
#: lib/cannery_web/live/home_live.html.heex:139 #: lib/cannery_web/live/home_live.html.heex:141
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
msgid "Report bugs or request features" msgid "Report bugs or request features"
msgstr "Informar de errores o solicitar funciones" msgstr "Informar de errores o solicitar funciones"
#: lib/cannery_web/live/home_live.html.heex:117 #: lib/cannery_web/live/home_live.html.heex:119
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
msgid "View the source code" msgid "View the source code"
msgstr "Ver código fuente" msgstr "Ver código fuente"
#: lib/cannery_web/components/topbar.ex:65 #: lib/cannery_web/components/core_components/topbar.html.heex:50
#: lib/cannery_web/live/ammo_type_live/index.ex:52 #: lib/cannery_web/live/ammo_type_live/index.ex:52
#: lib/cannery_web/live/ammo_type_live/index.ex:62 #: lib/cannery_web/live/ammo_type_live/index.ex:62
#: lib/cannery_web/live/ammo_type_live/index.html.heex:3 #: lib/cannery_web/live/ammo_type_live/index.html.heex:3
@ -750,39 +749,39 @@ msgstr "Ver código fuente"
msgid "Catalog" msgid "Catalog"
msgstr "Catálogo" msgstr "Catálogo"
#: lib/cannery_web/live/ammo_group_live/show.ex:44 #: lib/cannery_web/live/ammo_group_live/show.ex:45
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
msgid "Edit Ammo" msgid "Edit Ammo"
msgstr "Editar Munición" msgstr "Editar Munición"
#: lib/cannery_web/live/ammo_group_live/show.ex:42 #: lib/cannery_web/live/ammo_group_live/show.ex:43
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
msgid "Move Ammo" msgid "Move Ammo"
msgstr "Mover Munición" msgstr "Mover Munición"
#: lib/cannery_web/live/container_live/show.html.heex:115 #: lib/cannery_web/live/container_live/show.html.heex:112
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
msgid "No ammo in this container" msgid "No ammo in this container"
msgstr "No hay munición en este contenedor" msgstr "No hay munición en este contenedor"
#: lib/cannery_web/live/ammo_group_live/show.ex:43 #: lib/cannery_web/live/ammo_group_live/show.ex:44
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
msgid "Show Ammo" msgid "Show Ammo"
msgstr "Mostrar Munición" msgstr "Mostrar Munición"
#: lib/cannery_web/live/ammo_group_live/show.html.heex:122 #: lib/cannery_web/live/ammo_group_live/show.html.heex:118
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
msgid "This ammo is not in a container" msgid "This ammo is not in a container"
msgstr "Esta munición no está en un contenedor" msgstr "Esta munición no está en un contenedor"
#: lib/cannery_web/components/container_card.ex:55 #: lib/cannery_web/components/core_components/container_card.html.heex:32
#: lib/cannery_web/live/ammo_type_live/show.html.heex:98 #: lib/cannery_web/live/ammo_type_live/show.html.heex:98
#: lib/cannery_web/live/container_live/show.html.heex:26 #: lib/cannery_web/live/container_live/show.html.heex:23
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
msgid "Packs:" msgid "Packs:"
msgstr "Paquetes:" msgstr "Paquetes:"
#: lib/cannery_web/components/topbar.ex:25 #: lib/cannery_web/components/core_components/topbar.html.heex:10
#: lib/cannery_web/live/home_live.html.heex:4 #: lib/cannery_web/live/home_live.html.heex:4
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
msgid "Cannery logo" msgid "Cannery logo"
@ -799,45 +798,45 @@ msgid "Leave \"Uses left\" blank to make invite unlimited"
msgstr "" msgstr ""
"Deje \"Usos restantes\" en blanco para hacer las invitaciónes ilimitadas" "Deje \"Usos restantes\" en blanco para hacer las invitaciónes ilimitadas"
#: lib/cannery_web/components/ammo_group_card.ex:83 #: lib/cannery_web/components/core_components/ammo_group_card.html.heex:54
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
msgid "Container:" msgid "Container:"
msgstr "Contenedor:" msgstr "Contenedor:"
#: lib/cannery_web/live/ammo_group_live/index.html.heex:63 #: lib/cannery_web/live/ammo_group_live/index.html.heex:64
#: lib/cannery_web/live/ammo_type_live/index.html.heex:38 #: lib/cannery_web/live/ammo_type_live/index.html.heex:39
#: lib/cannery_web/live/ammo_type_live/show.html.heex:155 #: lib/cannery_web/live/ammo_type_live/show.html.heex:153
#: lib/cannery_web/live/container_live/show.html.heex:101 #: lib/cannery_web/live/container_live/show.html.heex:98
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
msgid "Show used" msgid "Show used"
msgstr "Mostrar usadas" msgstr "Mostrar usadas"
#: lib/cannery_web/components/ammo_group_table_component.ex:193 #: lib/cannery_web/components/ammo_group_table_component.ex:187
#: lib/cannery_web/live/ammo_group_live/show.html.heex:19 #: lib/cannery_web/live/ammo_group_live/show.html.heex:19
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
msgid "%{percentage}%" msgid "%{percentage}%"
msgstr "%{percentage}%" msgstr "%{percentage}%"
#: lib/cannery_web/live/range_live/index.ex:134 #: lib/cannery_web/live/range_live/index.ex:135
#, elixir-autogen, elixir-format, fuzzy #, elixir-autogen, elixir-format, fuzzy
msgid "Rounds shot: %{count}" msgid "Rounds shot: %{count}"
msgstr "Balas disparadas: %{count}" msgstr "Balas disparadas: %{count}"
#: lib/cannery_web/components/ammo_type_table_component.ex:100 #: lib/cannery_web/components/ammo_type_table_component.ex:100
#: lib/cannery_web/components/container_table_component.ex:50 #: lib/cannery_web/components/container_table_component.ex:64
#, elixir-autogen, elixir-format, fuzzy #, elixir-autogen, elixir-format, fuzzy
msgid "Packs" msgid "Packs"
msgstr "Paquetes" msgstr "Paquetes"
#: lib/cannery_web/components/ammo_type_table_component.ex:80 #: lib/cannery_web/components/ammo_type_table_component.ex:80
#: lib/cannery_web/components/container_table_component.ex:51 #: lib/cannery_web/components/container_table_component.ex:65
#, elixir-autogen, elixir-format, fuzzy #, elixir-autogen, elixir-format, fuzzy
msgid "Rounds" msgid "Rounds"
msgstr "Balas" msgstr "Balas"
#: lib/cannery_web/live/ammo_type_live/show.html.heex:161 #: lib/cannery_web/live/ammo_type_live/show.html.heex:159
#: lib/cannery_web/live/container_live/index.html.heex:38 #: lib/cannery_web/live/container_live/index.html.heex:39
#: lib/cannery_web/live/container_live/show.html.heex:107 #: lib/cannery_web/live/container_live/show.html.heex:104
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
msgid "View as table" msgid "View as table"
msgstr "Ver como tabla" msgstr "Ver como tabla"
@ -887,102 +886,102 @@ msgstr "Balas usadas:"
msgid "Used up!" msgid "Used up!"
msgstr "¡Acabada!" msgstr "¡Acabada!"
#: lib/cannery_web/live/range_live/index.html.heex:64 #: lib/cannery_web/live/range_live/index.html.heex:71
#, elixir-autogen, elixir-format, fuzzy #, elixir-autogen, elixir-format, fuzzy
msgid "Rounds shot chart" msgid "Rounds shot chart"
msgstr "Tabla de disparos" msgstr "Tabla de disparos"
#: lib/cannery_web/live/ammo_type_live/show.ex:27 #: lib/cannery_web/live/ammo_type_live/show.ex:26
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
msgid "Blank:" msgid "Blank:"
msgstr "En blanco:" msgstr "En blanco:"
#: lib/cannery_web/live/ammo_type_live/show.ex:13 #: lib/cannery_web/live/ammo_type_live/show.ex:12
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
msgid "Bullet core:" msgid "Bullet core:"
msgstr "Núcleo de bala:" msgstr "Núcleo de bala:"
#: lib/cannery_web/live/ammo_type_live/show.ex:12 #: lib/cannery_web/live/ammo_type_live/show.ex:11
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
msgid "Bullet type:" msgid "Bullet type:"
msgstr "Tipo de bala:" msgstr "Tipo de bala:"
#: lib/cannery_web/live/ammo_type_live/show.ex:15 #: lib/cannery_web/live/ammo_type_live/show.ex:14
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
msgid "Caliber:" msgid "Caliber:"
msgstr "Calibre:" msgstr "Calibre:"
#: lib/cannery_web/live/ammo_type_live/show.ex:14 #: lib/cannery_web/live/ammo_type_live/show.ex:13
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
msgid "Cartridge:" msgid "Cartridge:"
msgstr "Cartucho:" msgstr "Cartucho:"
#: lib/cannery_web/live/ammo_type_live/show.ex:16 #: lib/cannery_web/live/ammo_type_live/show.ex:15
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
msgid "Case material:" msgid "Case material:"
msgstr "Material de la camisa:" msgstr "Material de la camisa:"
#: lib/cannery_web/live/ammo_type_live/show.ex:28 #: lib/cannery_web/live/ammo_type_live/show.ex:27
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
msgid "Corrosive:" msgid "Corrosive:"
msgstr "Corrosiva:" msgstr "Corrosiva:"
#: lib/cannery_web/live/ammo_type_live/show.ex:24 #: lib/cannery_web/live/ammo_type_live/show.ex:23
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
msgid "Firing type:" msgid "Firing type:"
msgstr "Tipo de fuego:" msgstr "Tipo de fuego:"
#: lib/cannery_web/live/ammo_type_live/show.ex:21 #: lib/cannery_web/live/ammo_type_live/show.ex:20
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
msgid "Grains:" msgid "Grains:"
msgstr "Granos:" msgstr "Granos:"
#: lib/cannery_web/live/ammo_type_live/show.ex:26 #: lib/cannery_web/live/ammo_type_live/show.ex:25
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
msgid "Incendiary:" msgid "Incendiary:"
msgstr "Incendiarias:" msgstr "Incendiarias:"
#: lib/cannery_web/live/ammo_type_live/show.ex:17 #: lib/cannery_web/live/ammo_type_live/show.ex:16
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
msgid "Jacket type:" msgid "Jacket type:"
msgstr "Tipo de camisa:" msgstr "Tipo de camisa:"
#: lib/cannery_web/live/ammo_type_live/show.ex:29 #: lib/cannery_web/live/ammo_type_live/show.ex:28
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
msgid "Manufacturer:" msgid "Manufacturer:"
msgstr "Fabricante:" msgstr "Fabricante:"
#: lib/cannery_web/live/ammo_type_live/show.ex:18 #: lib/cannery_web/live/ammo_type_live/show.ex:17
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
msgid "Muzzle velocity:" msgid "Muzzle velocity:"
msgstr "Velocidad de boca:" msgstr "Velocidad de boca:"
#: lib/cannery_web/live/ammo_type_live/show.ex:20 #: lib/cannery_web/live/ammo_type_live/show.ex:19
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
msgid "Powder grains per charge:" msgid "Powder grains per charge:"
msgstr "Granos de polvora por carga:" msgstr "Granos de polvora por carga:"
#: lib/cannery_web/live/ammo_type_live/show.ex:19 #: lib/cannery_web/live/ammo_type_live/show.ex:18
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
msgid "Powder type:" msgid "Powder type:"
msgstr "Tipo de polvora:" msgstr "Tipo de polvora:"
#: lib/cannery_web/live/ammo_type_live/show.ex:22 #: lib/cannery_web/live/ammo_type_live/show.ex:21
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
msgid "Pressure:" msgid "Pressure:"
msgstr "Presión:" msgstr "Presión:"
#: lib/cannery_web/live/ammo_type_live/show.ex:23 #: lib/cannery_web/live/ammo_type_live/show.ex:22
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
msgid "Primer type:" msgid "Primer type:"
msgstr "Tipo de espoleta:" msgstr "Tipo de espoleta:"
#: lib/cannery_web/live/ammo_type_live/show.ex:25 #: lib/cannery_web/live/ammo_type_live/show.ex:24
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
msgid "Tracer:" msgid "Tracer:"
msgstr "Trazadora:" msgstr "Trazadora:"
#: lib/cannery_web/live/ammo_type_live/show.ex:30 #: lib/cannery_web/live/ammo_type_live/show.ex:29
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
msgid "UPC:" msgid "UPC:"
msgstr "" msgstr ""
@ -994,13 +993,13 @@ msgid "Average CPR"
msgstr "" msgstr ""
#: lib/cannery_web/live/ammo_type_live/index.ex:28 #: lib/cannery_web/live/ammo_type_live/index.ex:28
#: lib/cannery_web/live/ammo_type_live/show.ex:118 #: lib/cannery_web/live/ammo_type_live/show.ex:135
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
msgid "Edit %{ammo_type_name}" msgid "Edit %{ammo_type_name}"
msgstr "Editar %{ammo_type_name}" msgstr "Editar %{ammo_type_name}"
#: lib/cannery_web/components/ammo_group_card.ex:40 #: lib/cannery_web/components/ammo_group_table_component.ex:233
#: lib/cannery_web/components/ammo_group_table_component.ex:231 #: lib/cannery_web/components/core_components/ammo_group_card.html.heex:17
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
msgid "Empty" msgid "Empty"
msgstr "Vacio" msgstr "Vacio"
@ -1010,7 +1009,7 @@ msgstr "Vacio"
msgid "CPR" msgid "CPR"
msgstr "" msgstr ""
#: lib/cannery_web/components/ammo_group_card.ex:75 #: lib/cannery_web/components/core_components/ammo_group_card.html.heex:46
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
msgid "CPR:" msgid "CPR:"
msgstr "" msgstr ""
@ -1020,7 +1019,7 @@ msgstr ""
msgid "Original Count" msgid "Original Count"
msgstr "Cantidad Original" msgstr "Cantidad Original"
#: lib/cannery_web/components/ammo_group_card.ex:47 #: lib/cannery_web/components/core_components/ammo_group_card.html.heex:21
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
msgid "Original Count:" msgid "Original Count:"
msgstr "Cantidad Original:" msgstr "Cantidad Original:"
@ -1030,27 +1029,22 @@ msgstr "Cantidad Original:"
msgid "Home" msgid "Home"
msgstr "Menu principal" msgstr "Menu principal"
#: lib/cannery_web/live/container_live/show.html.heex:24 #: lib/cannery_web/live/container_live/show.html.heex:28
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
msgid "Total packs:" msgid "Total packs:"
msgstr "Paquetes totales:" msgstr "Paquetes totales:"
#: lib/cannery_web/live/container_live/show.html.heex:33
#, elixir-autogen, elixir-format
msgid "Total rounds:"
msgstr "Balas totales:"
#: lib/cannery_web/components/ammo_group_table_component.ex:58 #: lib/cannery_web/components/ammo_group_table_component.ex:58
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
msgid "Last used on" msgid "Last used on"
msgstr "Usada por última vez en" msgstr "Usada por última vez en"
#: lib/cannery_web/components/ammo_group_card.ex:62 #: lib/cannery_web/components/core_components/ammo_group_card.html.heex:36
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
msgid "Last used on:" msgid "Last used on:"
msgstr "Usada por última vez en:" msgstr "Usada por última vez en:"
#: lib/cannery_web/components/ammo_group_table_component.ex:178 #: lib/cannery_web/components/ammo_group_table_component.ex:171
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
msgid "Never used" msgid "Never used"
msgstr "Nunca usada" msgstr "Nunca usada"
@ -1061,7 +1055,7 @@ msgstr "Nunca usada"
msgid "Purchased on" msgid "Purchased on"
msgstr "Comprada en" msgstr "Comprada en"
#: lib/cannery_web/components/ammo_group_card.ex:57 #: lib/cannery_web/components/core_components/ammo_group_card.html.heex:31
#: lib/cannery_web/live/ammo_group_live/show.html.heex:30 #: lib/cannery_web/live/ammo_group_live/show.html.heex:30
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
msgid "Purchased on:" msgid "Purchased on:"
@ -1073,32 +1067,32 @@ msgid "Edit ammo"
msgstr "Editar munición" msgstr "Editar munición"
#: lib/cannery_web/live/ammo_type_live/index.html.heex:8 #: lib/cannery_web/live/ammo_type_live/index.html.heex:8
#: lib/cannery_web/live/ammo_type_live/index.html.heex:45 #: lib/cannery_web/live/ammo_type_live/index.html.heex:46
#, elixir-autogen, elixir-format, fuzzy #, elixir-autogen, elixir-format, fuzzy
msgid "No Ammo types" msgid "No Ammo types"
msgstr "Sin tipo de Munición" msgstr "Sin tipo de Munición"
#: lib/cannery_web/live/ammo_type_live/index.html.heex:32 #: lib/cannery_web/live/ammo_type_live/index.html.heex:33
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
msgid "Search catalog" msgid "Search catalog"
msgstr "" msgstr ""
#: lib/cannery_web/live/ammo_group_live/index.html.heex:57 #: lib/cannery_web/live/ammo_group_live/index.html.heex:58
#, elixir-autogen, elixir-format, fuzzy #, elixir-autogen, elixir-format, fuzzy
msgid "Search ammo" msgid "Search ammo"
msgstr "" msgstr ""
#: lib/cannery_web/live/container_live/index.html.heex:32 #: lib/cannery_web/live/container_live/index.html.heex:33
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
msgid "Search containers" msgid "Search containers"
msgstr "" msgstr ""
#: lib/cannery_web/live/tag_live/index.html.heex:35 #: lib/cannery_web/live/tag_live/index.html.heex:36
#, elixir-autogen, elixir-format, fuzzy #, elixir-autogen, elixir-format, fuzzy
msgid "Search tags" msgid "Search tags"
msgstr "" msgstr ""
#: lib/cannery_web/live/range_live/index.html.heex:82 #: lib/cannery_web/live/range_live/index.html.heex:90
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
msgid "Search shot records" msgid "Search shot records"
msgstr "" msgstr ""
@ -1111,27 +1105,27 @@ msgstr ""
#: lib/cannery_web/templates/error/error.html.heex:8 #: lib/cannery_web/templates/error/error.html.heex:8
#: lib/cannery_web/templates/layout/root.html.heex:13 #: lib/cannery_web/templates/layout/root.html.heex:13
#: lib/cannery_web/templates/layout/root.html.heex:14 #: lib/cannery_web/templates/layout/root.html.heex:14
#: lib/cannery_web/views/layout_view.ex:15 #: lib/cannery_web/views/layout_view.ex:14
#, elixir-autogen, elixir-format, fuzzy #, elixir-autogen, elixir-format, fuzzy
msgid "Cannery" msgid "Cannery"
msgstr "Logo de cannery" msgstr "Logo de cannery"
#: lib/cannery_web/components/user_card.ex:33 #: lib/cannery_web/components/core_components/user_card.html.heex:20
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
msgid "Email unconfirmed" msgid "Email unconfirmed"
msgstr "" msgstr ""
#: lib/cannery_web/components/user_card.ex:38 #: lib/cannery_web/components/core_components/user_card.html.heex:25
#, elixir-autogen, elixir-format, fuzzy #, elixir-autogen, elixir-format, fuzzy
msgid "User registered on%{registered_datetime}" msgid "User registered on%{registered_datetime}"
msgstr "Usuario registrado en" msgstr "Usuario registrado en"
#: lib/cannery_web/components/user_card.ex:27 #: lib/cannery_web/components/core_components/user_card.html.heex:14
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
msgid "User was confirmed at%{confirmed_datetime}" msgid "User was confirmed at%{confirmed_datetime}"
msgstr "" msgstr ""
#: lib/cannery_web/components/invite_card.ex:37 #: lib/cannery_web/components/core_components/invite_card.html.heex:16
#, elixir-autogen, elixir-format, fuzzy #, elixir-autogen, elixir-format, fuzzy
msgid "Uses Left: Unlimited" msgid "Uses Left: Unlimited"
msgstr "Usos Restantes:" msgstr "Usos Restantes:"
@ -1145,24 +1139,24 @@ msgstr "Usos Restantes:"
## Run "mix gettext.extract" to bring this file up to ## Run "mix gettext.extract" to bring this file up to
## date. Leave "msgstr"s empty as changing them here has no ## date. Leave "msgstr"s empty as changing them here has no
## effect: edit them in PO (.po) files instead. ## effect: edit them in PO (.po) files instead.
#: lib/cannery_web/live/home_live.html.heex:26 #: lib/cannery_web/live/home_live.html.heex:25
#, elixir-autogen, elixir-format, fuzzy #, elixir-autogen, elixir-format, fuzzy
msgid "Cannery lets you easily keep an eye on your ammo levels before and after range day" msgid "Cannery lets you easily keep an eye on your ammo levels before and after range day"
msgstr "" msgstr ""
"%{name} te permite mantener un ojo en tus niveles de munición antes y " "%{name} te permite mantener un ojo en tus niveles de munición antes y "
"después de un día en el campo de tiro" "después de un día en el campo de tiro"
#: lib/cannery_web/views/layout_view.ex:11 #: lib/cannery_web/views/layout_view.ex:10
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
msgid "Cannery | %{title}" msgid "Cannery | %{title}"
msgstr "" msgstr ""
#: lib/cannery_web/live/home_live.html.heex:78 #: lib/cannery_web/live/home_live.html.heex:80
#, elixir-autogen, elixir-format, fuzzy #, elixir-autogen, elixir-format, fuzzy
msgid "Registration:" msgid "Registration:"
msgstr "Registrarse" msgstr "Registrarse"
#: lib/cannery_web/live/home_live.html.heex:88 #: lib/cannery_web/live/home_live.html.heex:90
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
msgid "Version:" msgid "Version:"
msgstr "" msgstr ""
@ -1172,29 +1166,29 @@ msgstr ""
msgid "Welcome to Cannery" msgid "Welcome to Cannery"
msgstr "Bienvenide a %{name}" msgstr "Bienvenide a %{name}"
#: lib/cannery_web/live/invite_live/index.html.heex:70 #: lib/cannery_web/live/invite_live/index.html.heex:75
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
msgid "Disable" msgid "Disable"
msgstr "" msgstr ""
#: lib/cannery_web/live/invite_live/index.html.heex:70 #: lib/cannery_web/live/invite_live/index.html.heex:75
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
msgid "Enable" msgid "Enable"
msgstr "" msgstr ""
#: lib/cannery_web/components/invite_card.ex:32 #: lib/cannery_web/components/core_components/invite_card.html.heex:11
#, elixir-autogen, elixir-format, fuzzy #, elixir-autogen, elixir-format, fuzzy
msgid "Uses Left: %{uses_left_count}" msgid "Uses Left: %{uses_left_count}"
msgstr "Usos Restantes:" msgstr "Usos Restantes:"
#: lib/cannery_web/components/invite_card.ex:52 #: lib/cannery_web/components/core_components/invite_card.html.heex:31
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
msgid "Uses: %{uses_count}" msgid "Uses: %{uses_count}"
msgstr "" msgstr ""
#: lib/cannery_web/templates/user_confirmation/new.html.heex:12 #: lib/cannery_web/templates/user_confirmation/new.html.heex:13
#: lib/cannery_web/templates/user_registration/new.html.heex:20 #: lib/cannery_web/templates/user_registration/new.html.heex:20
#: lib/cannery_web/templates/user_reset_password/new.html.heex:12 #: lib/cannery_web/templates/user_reset_password/new.html.heex:13
#: lib/cannery_web/templates/user_session/new.html.heex:17 #: lib/cannery_web/templates/user_session/new.html.heex:17
#: lib/cannery_web/templates/user_settings/edit.html.heex:27 #: lib/cannery_web/templates/user_settings/edit.html.heex:27
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
@ -1206,24 +1200,3 @@ msgstr ""
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
msgid "Password" msgid "Password"
msgstr "" msgstr ""
#: lib/cannery_web/live/ammo_group_live/index.html.heex:153
#, elixir-autogen, elixir-format
msgid "Clone ammo group of %{ammo_group_count} bullets"
msgstr ""
#: lib/cannery_web/live/ammo_group_live/index.html.heex:168
#: lib/cannery_web/live/ammo_group_live/show.html.heex:80
#, elixir-autogen, elixir-format
msgid "Delete ammo group of %{ammo_group_count} bullets"
msgstr ""
#: lib/cannery_web/live/ammo_group_live/index.html.heex:141
#, elixir-autogen, elixir-format
msgid "Edit ammo group of %{ammo_group_count} bullets"
msgstr ""
#: lib/cannery_web/live/ammo_group_live/index.html.heex:129
#, elixir-autogen, elixir-format
msgid "View ammo group of %{ammo_group_count} bullets"
msgstr ""

View File

@ -23,18 +23,18 @@ msgstr ""
## Run "mix gettext.extract" to bring this file up to ## Run "mix gettext.extract" to bring this file up to
## date. Leave "msgstr"s empty as changing them here has no ## date. Leave "msgstr"s empty as changing them here has no
## effect: edit them in PO (.po) files instead. ## effect: edit them in PO (.po) files instead.
#: lib/cannery/containers.ex:179 #: lib/cannery/containers.ex:200
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
msgid "Container must be empty before deleting" msgid "Container must be empty before deleting"
msgstr "El contenedor debe estar vacío antes de ser borrado" msgstr "El contenedor debe estar vacío antes de ser borrado"
#: lib/cannery_web/live/container_live/index.ex:92 #: lib/cannery_web/live/container_live/index.ex:86
#: lib/cannery_web/live/container_live/show.ex:72 #: lib/cannery_web/live/container_live/show.ex:71
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
msgid "Could not delete %{name}: %{error}" msgid "Could not delete %{name}: %{error}"
msgstr "No se pudo eliminar %{name}: %{error}" msgstr "No se pudo eliminar %{name}: %{error}"
#: lib/cannery_web/live/container_live/index.ex:80 #: lib/cannery_web/live/container_live/index.ex:74
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
msgid "Could not find that container" msgid "Could not find that container"
msgstr "No se pudo encontrar el contenedor" msgstr "No se pudo encontrar el contenedor"
@ -49,12 +49,12 @@ msgstr "El enlace de cambio de correo es inválido o ha expirado."
msgid "Error" msgid "Error"
msgstr "Error" msgstr "Error"
#: lib/cannery_web/templates/error/error.html.heex:28 #: lib/cannery_web/templates/error/error.html.heex:31
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
msgid "Go back home" msgid "Go back home"
msgstr "Volver hacia atrás" msgstr "Volver hacia atrás"
#: lib/cannery_web/views/error_view.ex:11 #: lib/cannery_web/views/error_view.ex:10
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
msgid "Internal Server Error" msgid "Internal Server Error"
msgstr "Error interno del servidor" msgstr "Error interno del servidor"
@ -64,7 +64,7 @@ msgstr "Error interno del servidor"
msgid "Invalid email or password" msgid "Invalid email or password"
msgstr "Correo o contraseña incorrecta" msgstr "Correo o contraseña incorrecta"
#: lib/cannery_web/views/error_view.ex:9 #: lib/cannery_web/views/error_view.ex:8
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
msgid "Not found" msgid "Not found"
msgstr "No se encontró" msgstr "No se encontró"
@ -86,15 +86,15 @@ msgid "Reset password link is invalid or it has expired."
msgstr "" msgstr ""
"El enlace de reestablecimiento de la contraseña es inválido o ha caducado." "El enlace de reestablecimiento de la contraseña es inválido o ha caducado."
#: lib/cannery_web/controllers/user_registration_controller.ex:22 #: lib/cannery_web/controllers/user_registration_controller.ex:23
#: lib/cannery_web/controllers/user_registration_controller.ex:51 #: lib/cannery_web/controllers/user_registration_controller.ex:52
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
msgid "Sorry, public registration is disabled" msgid "Sorry, public registration is disabled"
msgstr "Lo sentimos, el registro público no está habilitado" msgstr "Lo sentimos, el registro público no está habilitado"
#: lib/cannery_web/controllers/user_registration_controller.ex:12 #: lib/cannery_web/controllers/user_registration_controller.ex:13
#: lib/cannery_web/controllers/user_registration_controller.ex:41 #: lib/cannery_web/controllers/user_registration_controller.ex:42
#: lib/cannery_web/controllers/user_registration_controller.ex:70 #: lib/cannery_web/controllers/user_registration_controller.ex:71
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
msgid "Sorry, this invite was not found or expired" msgid "Sorry, this invite was not found or expired"
msgstr "Lo sentimos, esta invitación no es válida o ha caducado" msgstr "Lo sentimos, esta invitación no es válida o ha caducado"
@ -104,7 +104,7 @@ msgstr "Lo sentimos, esta invitación no es válida o ha caducado"
msgid "Unable to delete user" msgid "Unable to delete user"
msgstr "No se ha podido eliminar el usuario" msgstr "No se ha podido eliminar el usuario"
#: lib/cannery_web/views/error_view.ex:10 #: lib/cannery_web/views/error_view.ex:9
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
msgid "Unauthorized" msgid "Unauthorized"
msgstr "No autorizado" msgstr "No autorizado"
@ -114,7 +114,7 @@ msgstr "No autorizado"
msgid "User confirmation link is invalid or it has expired." msgid "User confirmation link is invalid or it has expired."
msgstr "El enlace de confirmación de usuario no es válido o ha caducado." msgstr "El enlace de confirmación de usuario no es válido o ha caducado."
#: lib/cannery_web/live/invite_live/index.ex:19 #: lib/cannery_web/live/invite_live/index.ex:18
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
msgid "You are not authorized to view this page" msgid "You are not authorized to view this page"
msgstr "No está autorizado a ver esta página" msgstr "No está autorizado a ver esta página"
@ -144,64 +144,73 @@ msgstr "no es válido"
msgid "must have the @ sign and no spaces" msgid "must have the @ sign and no spaces"
msgstr "debe tener el signo @ y no contener espacios" msgstr "debe tener el signo @ y no contener espacios"
#: lib/cannery/tags.ex:66 #: lib/cannery_web/live/container_live/show.ex:46
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
msgid "Tag not found" msgid "Tag not found"
msgstr "Etiqueta no encontrada" msgstr "Etiqueta no encontrada"
#: lib/cannery_web/live/container_live/edit_tags_component.ex:45 #: lib/cannery_web/live/container_live/edit_tags_component.ex:46
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
msgid "Tag could not be added" msgid "Tag could not be added"
msgstr "No se ha podido añadir la etiqueta" msgstr "No se ha podido añadir la etiqueta"
#: lib/cannery/activity_log/shot_group.ex:126
#, elixir-autogen, elixir-format
msgid "Count must be at least 1"
msgstr "El recuento debe dar al menos 1"
#: lib/cannery_web/controllers/user_auth.ex:39 #: lib/cannery_web/controllers/user_auth.ex:39
#: lib/cannery_web/controllers/user_auth.ex:161 #: lib/cannery_web/controllers/user_auth.ex:161
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
msgid "You must confirm your account and log in to access this page." msgid "You must confirm your account and log in to access this page."
msgstr "Debe confirmar su cuenta e iniciar sesión para acceder a esta página." msgstr "Debe confirmar su cuenta e iniciar sesión para acceder a esta página."
#: lib/cannery_web/live/container_live/edit_tags_component.ex:72 #: lib/cannery_web/live/container_live/edit_tags_component.ex:73
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
msgid "Tag could not be removed" msgid "Tag could not be removed"
msgstr "La etiqueta no pudo ser eliminada" msgstr "La etiqueta no pudo ser eliminada"
#: lib/cannery_web/live/ammo_group_live/form_component.ex:157 #: lib/cannery_web/live/ammo_group_live/form_component.ex:160
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
msgid "Could not parse number of copies" msgid "Could not parse number of copies"
msgstr "No se ha podido procesar el número de copias" msgstr "No se ha podido procesar el número de copias"
#: lib/cannery_web/live/ammo_group_live/form_component.ex:142 #: lib/cannery_web/live/ammo_group_live/form_component.ex:150
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
msgid "Invalid number of copies, must be between 1 and %{max}. Was %{multiplier}" 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" msgstr "Número inválido de copias, debe ser entre 1 y %{max}. Fue %{multiplier"
#: lib/cannery/ammo.ex:686 #: lib/cannery/ammo.ex:1015
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
msgid "Invalid multiplier" msgid "Invalid multiplier"
msgstr "Multiplicador inválido" msgstr "Multiplicador inválido"
#: lib/cannery/ammo/ammo_group.ex:97 #: lib/cannery/ammo/ammo_group.ex:92
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
msgid "Please select an ammo type and container" msgid "Please select an ammo type and container"
msgstr "Por favor escoja un tipo de munición y un contenedor" msgstr "Por favor escoja un tipo de munición y un contenedor"
#: lib/cannery_web/live/range_live/index.html.heex:67 #: lib/cannery_web/live/range_live/index.html.heex:74
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
msgid "Your browser does not support the canvas element." msgid "Your browser does not support the canvas element."
msgstr "Su navegador no es compatible con el elemento lienzo." msgstr "Su navegador no es compatible con el elemento lienzo."
#: lib/cannery/activity_log/shot_group.ex:77 #: lib/cannery/activity_log/shot_group.ex:72
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
msgid "Please select a valid user and ammo pack" msgid "Please select a valid user and ammo pack"
msgstr "Por favor escoja un usuario y tipo de munición valido" msgstr "Por favor escoja un usuario y tipo de munición valido"
#: lib/cannery/activity_log/shot_group.ex:83 #: lib/cannery/activity_log/shot_group.ex:86
#: lib/cannery/activity_log/shot_group.ex:121 #, elixir-autogen, elixir-format
msgid "Ammo left can be at most %{count} rounds"
msgstr ""
#: lib/cannery/activity_log/shot_group.ex:82
#, elixir-autogen, elixir-format
msgid "Ammo left must be at least 0"
msgstr ""
#: lib/cannery/activity_log/shot_group.ex:119
#, elixir-autogen, elixir-format, fuzzy #, elixir-autogen, elixir-format, fuzzy
msgid "Count must be less than %{count} shots" msgid "Count can be at most %{count} shots"
msgstr "El recuento debe ser menos de %{count}" msgstr "El recuento debe ser menos de %{count}"
#: lib/cannery/activity_log/shot_group.ex:78
#, elixir-autogen, elixir-format
msgid "can't be blank"
msgstr ""

View File

@ -23,31 +23,31 @@ msgstr ""
## Run "mix gettext.extract" to bring this file up to ## Run "mix gettext.extract" to bring this file up to
## date. Leave "msgstr"s empty as changing them here has no ## date. Leave "msgstr"s empty as changing them here has no
## effect: edit them in PO (.po) files instead. ## effect: edit them in PO (.po) files instead.
#: lib/cannery_web/live/ammo_type_live/form_component.ex:86 #: lib/cannery_web/live/ammo_type_live/form_component.ex:89
#: lib/cannery_web/live/container_live/form_component.ex:89 #: lib/cannery_web/live/container_live/form_component.ex:89
#: lib/cannery_web/live/invite_live/form_component.ex:80 #: lib/cannery_web/live/invite_live/form_component.ex:80
#: lib/cannery_web/live/tag_live/form_component.ex:79 #: lib/cannery_web/live/tag_live/form_component.ex:78
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
msgid "%{name} created successfully" msgid "%{name} created successfully"
msgstr "%{name} creado exitosamente" msgstr "%{name} creado exitosamente"
#: lib/cannery_web/live/ammo_type_live/index.ex:73 #: lib/cannery_web/live/ammo_type_live/index.ex:72
#: lib/cannery_web/live/ammo_type_live/show.ex:55 #: lib/cannery_web/live/ammo_type_live/show.ex:54
#: lib/cannery_web/live/tag_live/index.ex:64 #: lib/cannery_web/live/tag_live/index.ex:65
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
msgid "%{name} deleted succesfully" msgid "%{name} deleted succesfully"
msgstr "%{name} borrado exitosamente" msgstr "%{name} borrado exitosamente"
#: lib/cannery_web/live/container_live/index.ex:85 #: lib/cannery_web/live/container_live/index.ex:79
#: lib/cannery_web/live/container_live/show.ex:62 #: lib/cannery_web/live/container_live/show.ex:61
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
msgid "%{name} has been deleted" msgid "%{name} has been deleted"
msgstr "%{name} ha sido borrado" msgstr "%{name} ha sido borrado"
#: lib/cannery_web/live/ammo_type_live/form_component.ex:67 #: lib/cannery_web/live/ammo_type_live/form_component.ex:70
#: lib/cannery_web/live/container_live/form_component.ex:70 #: lib/cannery_web/live/container_live/form_component.ex:70
#: lib/cannery_web/live/invite_live/form_component.ex:62 #: lib/cannery_web/live/invite_live/form_component.ex:62
#: lib/cannery_web/live/tag_live/form_component.ex:61 #: lib/cannery_web/live/tag_live/form_component.ex:60
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
msgid "%{name} updated successfully" msgid "%{name} updated successfully"
msgstr "%{name} actualizado exitosamente" msgstr "%{name} actualizado exitosamente"
@ -59,22 +59,22 @@ msgstr ""
"Un enlace para confirmar el correo electrónico ha sido enviado a la nueva " "Un enlace para confirmar el correo electrónico ha sido enviado a la nueva "
"dirección." "dirección."
#: lib/cannery_web/live/invite_live/index.html.heex:105 #: lib/cannery_web/live/invite_live/index.html.heex:110
#: lib/cannery_web/live/invite_live/index.html.heex:133 #: lib/cannery_web/live/invite_live/index.html.heex:138
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
msgid "Are you sure you want to delete %{email}? This action is permanent!" msgid "Are you sure you want to delete %{email}? This action is permanent!"
msgstr "Está seguro que desea eliminar %{email}? Esta acción es permanente!" msgstr "Está seguro que desea eliminar %{email}? Esta acción es permanente!"
#: lib/cannery_web/live/container_live/index.html.heex:98 #: lib/cannery_web/live/container_live/index.html.heex:99
#: lib/cannery_web/live/container_live/index.html.heex:150 #: lib/cannery_web/live/container_live/index.html.heex:155
#: lib/cannery_web/live/container_live/show.html.heex:55 #: lib/cannery_web/live/container_live/show.html.heex:52
#: lib/cannery_web/live/tag_live/index.html.heex:62 #: lib/cannery_web/live/tag_live/index.html.heex:63
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
msgid "Are you sure you want to delete %{name}?" msgid "Are you sure you want to delete %{name}?"
msgstr "Está seguro que desea eliminar %{name}?" msgstr "Está seguro que desea eliminar %{name}?"
#: lib/cannery_web/live/ammo_group_live/index.html.heex:166 #: lib/cannery_web/live/ammo_group_live/index.html.heex:167
#: lib/cannery_web/live/ammo_group_live/show.html.heex:78 #: lib/cannery_web/live/ammo_group_live/show.html.heex:74
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
msgid "Are you sure you want to delete this ammo?" msgid "Are you sure you want to delete this ammo?"
msgstr "Está seguro que desea eliminar esta munición?" msgstr "Está seguro que desea eliminar esta munición?"
@ -84,7 +84,7 @@ msgstr "Está seguro que desea eliminar esta munición?"
msgid "Are you sure you want to delete your account?" msgid "Are you sure you want to delete your account?"
msgstr "Está seguro que desea eliminar su cuenta?" msgstr "Está seguro que desea eliminar su cuenta?"
#: lib/cannery_web/components/topbar.ex:104 #: lib/cannery_web/components/core_components/topbar.html.heex:89
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
msgid "Are you sure you want to log out?" msgid "Are you sure you want to log out?"
msgstr "Está seguro que desea cerrar sesión?" msgstr "Está seguro que desea cerrar sesión?"
@ -123,7 +123,7 @@ msgstr "Contraseña reiniciada exitosamente."
msgid "Password updated successfully." msgid "Password updated successfully."
msgstr "Contraseña cambiada exitosamente." msgstr "Contraseña cambiada exitosamente."
#: lib/cannery_web/controllers/user_registration_controller.ex:65 #: lib/cannery_web/controllers/user_registration_controller.ex:66
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
msgid "Please check your email to verify your account" msgid "Please check your email to verify your account"
msgstr "Por favor chequea el correo para verificar tu cuenta" msgstr "Por favor chequea el correo para verificar tu cuenta"
@ -150,44 +150,44 @@ msgid "Are you sure you want to remove the %{tag_name} tag from %{container_name
msgstr "" msgstr ""
"Está seguro que desea remover la etiqueta %{tag_name} de %{container_name}?" "Está seguro que desea remover la etiqueta %{tag_name} de %{container_name}?"
#: lib/cannery_web/live/container_live/edit_tags_component.ex:50 #: lib/cannery_web/live/container_live/edit_tags_component.ex:51
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
msgid "%{name} added successfully" msgid "%{name} added successfully"
msgstr "%{name} añadido exitosamente" msgstr "%{name} añadido exitosamente"
#: lib/cannery_web/live/container_live/show.ex:39 #: lib/cannery_web/live/container_live/show.ex:38
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
msgid "%{tag_name} has been removed from %{container_name}" msgid "%{tag_name} has been removed from %{container_name}"
msgstr "se ha removido %{tag_name} de %{container_name}" msgstr "se ha removido %{tag_name} de %{container_name}"
#: lib/cannery_web/live/container_live/edit_tags_component.html.heex:52 #: lib/cannery_web/live/container_live/edit_tags_component.html.heex:53
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
msgid "Adding..." msgid "Adding..."
msgstr "Añadiendo..." msgstr "Añadiendo..."
#: lib/cannery_web/components/add_shot_group_component.ex:56 #: lib/cannery_web/components/add_shot_group_component.ex:60
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
msgid "Shots recorded successfully" msgid "Shots recorded successfully"
msgstr "Tiros registrados exitosamente" msgstr "Tiros registrados exitosamente"
#: lib/cannery_web/live/range_live/index.html.heex:27 #: lib/cannery_web/live/range_live/index.html.heex:34
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
msgid "Are you sure you want to unstage this ammo?" msgid "Are you sure you want to unstage this ammo?"
msgstr "Está seguro que desea desmontar esta munición?" msgstr "Está seguro que desea desmontar esta munición?"
#: lib/cannery_web/live/ammo_group_live/show.ex:143 #: lib/cannery_web/live/ammo_group_live/show.ex:159
#: lib/cannery_web/live/range_live/index.html.heex:119 #: lib/cannery_web/live/range_live/index.html.heex:127
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
msgid "Are you sure you want to delete this shot record?" msgid "Are you sure you want to delete this shot record?"
msgstr "¿Está segure que quiere borrar este récord de disparos?" msgstr "¿Está segure que quiere borrar este récord de disparos?"
#: lib/cannery_web/live/ammo_group_live/show.ex:80 #: lib/cannery_web/live/ammo_group_live/show.ex:81
#: lib/cannery_web/live/range_live/index.ex:80 #: lib/cannery_web/live/range_live/index.ex:79
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
msgid "Shot records deleted succesfully" msgid "Shot records deleted succesfully"
msgstr "Récord de disparos borrado exitosamente" msgstr "Récord de disparos borrado exitosamente"
#: lib/cannery_web/live/range_live/form_component.ex:55 #: lib/cannery_web/live/range_live/form_component.ex:54
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
msgid "Shot records updated successfully" msgid "Shot records updated successfully"
msgstr "Récord de disparos actualizado exitosamente" msgstr "Récord de disparos actualizado exitosamente"
@ -197,17 +197,17 @@ msgstr "Récord de disparos actualizado exitosamente"
msgid "%{email} confirmed successfully." msgid "%{email} confirmed successfully."
msgstr "%{email} confirmado exitosamente." msgstr "%{email} confirmado exitosamente."
#: lib/cannery_web/components/move_ammo_group_component.ex:53 #: lib/cannery_web/components/move_ammo_group_component.ex:54
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
msgid "Ammo moved to %{name} successfully" msgid "Ammo moved to %{name} successfully"
msgstr "Munición movida a %{name} exitosamente" msgstr "Munición movida a %{name} exitosamente"
#: lib/cannery_web/live/invite_live/index.ex:127 #: lib/cannery_web/live/invite_live/index.ex:126
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
msgid "Copied to clipboard" msgid "Copied to clipboard"
msgstr "Copiado al portapapeles" msgstr "Copiado al portapapeles"
#: lib/cannery_web/live/container_live/edit_tags_component.ex:77 #: lib/cannery_web/live/container_live/edit_tags_component.ex:78
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
msgid "%{name} removed successfully" msgid "%{name} removed successfully"
msgstr "%{name} eliminado exitosamente" msgstr "%{name} eliminado exitosamente"
@ -234,29 +234,29 @@ msgid "Language updated successfully."
msgstr "Idioma cambiado exitosamente." msgstr "Idioma cambiado exitosamente."
#: lib/cannery_web/live/ammo_group_live/index.ex:89 #: lib/cannery_web/live/ammo_group_live/index.ex:89
#: lib/cannery_web/live/ammo_group_live/show.ex:54 #: lib/cannery_web/live/ammo_group_live/show.ex:55
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
msgid "Ammo deleted succesfully" msgid "Ammo deleted succesfully"
msgstr "Munición borrada exitosamente" msgstr "Munición borrada exitosamente"
#: lib/cannery_web/live/range_live/index.ex:94 #: lib/cannery_web/live/range_live/index.ex:93
#, elixir-autogen, elixir-format, fuzzy #, elixir-autogen, elixir-format, fuzzy
msgid "Ammo unstaged succesfully" msgid "Ammo unstaged succesfully"
msgstr "Munición descargada exitosamente" msgstr "Munición descargada exitosamente"
#: lib/cannery_web/live/ammo_group_live/form_component.ex:118 #: lib/cannery_web/live/ammo_group_live/form_component.ex:126
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
msgid "Ammo updated successfully" msgid "Ammo updated successfully"
msgstr "Munición actualizada exitosamente" msgstr "Munición actualizada exitosamente"
#: lib/cannery_web/live/ammo_group_live/form_component.ex:178 #: lib/cannery_web/live/ammo_group_live/form_component.ex:185
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
msgid "Ammo added successfully" msgid "Ammo added successfully"
msgid_plural "Ammo added successfully" msgid_plural "Ammo added successfully"
msgstr[0] "Munición añadida exitosamente" msgstr[0] "Munición añadida exitosamente"
msgstr[1] "Municiones añadidas exitosamente" msgstr[1] "Municiones añadidas exitosamente"
#: lib/cannery_web/live/ammo_type_live/index.html.heex:95 #: lib/cannery_web/live/ammo_type_live/index.html.heex:96
#: lib/cannery_web/live/ammo_type_live/show.html.heex:29 #: lib/cannery_web/live/ammo_type_live/show.html.heex:29
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
msgid "Are you sure you want to delete %{name}? This will delete all %{name} type ammo as well!" msgid "Are you sure you want to delete %{name}? This will delete all %{name} type ammo as well!"
@ -264,42 +264,42 @@ msgstr ""
"¿Está seguro de que quiere borrar %{name}? ¡Esto también borrará todos los " "¿Está seguro de que quiere borrar %{name}? ¡Esto también borrará todos los "
"tipos de munición %{name}!" "tipos de munición %{name}!"
#: lib/cannery_web/live/home_live.html.heex:65 #: lib/cannery_web/live/home_live.html.heex:63
#, elixir-autogen, elixir-format, fuzzy #, elixir-autogen, elixir-format, fuzzy
msgid "Register to setup Cannery" msgid "Register to setup Cannery"
msgstr "Regístrese para configurar %{name}" msgstr "Regístrese para configurar %{name}"
#: lib/cannery_web/live/invite_live/index.ex:54 #: lib/cannery_web/live/invite_live/index.ex:53
#, elixir-autogen, elixir-format, fuzzy #, elixir-autogen, elixir-format, fuzzy
msgid "%{invite_name} deleted succesfully" msgid "%{invite_name} deleted succesfully"
msgstr "%{name} borrado exitosamente" msgstr "%{name} borrado exitosamente"
#: lib/cannery_web/live/invite_live/index.ex:115 #: lib/cannery_web/live/invite_live/index.ex:114
#, elixir-autogen, elixir-format, fuzzy #, elixir-autogen, elixir-format, fuzzy
msgid "%{invite_name} disabled succesfully" msgid "%{invite_name} disabled succesfully"
msgstr "%{name} desactivado exitosamente" msgstr "%{name} desactivado exitosamente"
#: lib/cannery_web/live/invite_live/index.ex:91 #: lib/cannery_web/live/invite_live/index.ex:90
#, elixir-autogen, elixir-format, fuzzy #, elixir-autogen, elixir-format, fuzzy
msgid "%{invite_name} enabled succesfully" msgid "%{invite_name} enabled succesfully"
msgstr "%{name} activado exitosamente" msgstr "%{name} activado exitosamente"
#: lib/cannery_web/live/invite_live/index.ex:69 #: lib/cannery_web/live/invite_live/index.ex:68
#, elixir-autogen, elixir-format, fuzzy #, elixir-autogen, elixir-format, fuzzy
msgid "%{invite_name} updated succesfully" msgid "%{invite_name} updated succesfully"
msgstr "%{name} actualizado exitosamente" msgstr "%{name} actualizado exitosamente"
#: lib/cannery_web/live/invite_live/index.ex:138 #: lib/cannery_web/live/invite_live/index.ex:135
#, elixir-autogen, elixir-format, fuzzy #, elixir-autogen, elixir-format, fuzzy
msgid "%{user_email} deleted succesfully" msgid "%{user_email} deleted succesfully"
msgstr "%{name} borrado exitosamente" msgstr "%{name} borrado exitosamente"
#: lib/cannery_web/live/invite_live/index.html.heex:53 #: lib/cannery_web/live/invite_live/index.html.heex:58
#, elixir-autogen, elixir-format, fuzzy #, elixir-autogen, elixir-format, fuzzy
msgid "Are you sure you want to delete the invite for %{invite_name}?" msgid "Are you sure you want to delete the invite for %{invite_name}?"
msgstr "Está seguro que quiere eliminar la invitación para %{name}?" msgstr "Está seguro que quiere eliminar la invitación para %{name}?"
#: lib/cannery_web/live/invite_live/index.html.heex:80 #: lib/cannery_web/live/invite_live/index.html.heex:85
#, elixir-autogen, elixir-format, fuzzy #, elixir-autogen, elixir-format, fuzzy
msgid "Are you sure you want to make %{invite_name} unlimited?" msgid "Are you sure you want to make %{invite_name} unlimited?"
msgstr "Está seguro que desea hacer %{name} ilimitado?" msgstr "Está seguro que desea hacer %{name} ilimitado?"

View File

@ -79,11 +79,11 @@ msgstr "Mot de passe oublié?"
msgid "Invite someone new!" msgid "Invite someone new!"
msgstr "Invitez une nouvelle personne!" msgstr "Invitez une nouvelle personne!"
#: lib/cannery_web/components/topbar.ex:137 #: lib/cannery_web/components/core_components/topbar.html.heex:122
#: lib/cannery_web/templates/user_confirmation/new.html.heex:31 #: lib/cannery_web/templates/user_confirmation/new.html.heex:32
#: lib/cannery_web/templates/user_registration/new.html.heex:44 #: lib/cannery_web/templates/user_registration/new.html.heex:44
#: lib/cannery_web/templates/user_reset_password/edit.html.heex:45 #: lib/cannery_web/templates/user_reset_password/edit.html.heex:45
#: lib/cannery_web/templates/user_reset_password/new.html.heex:31 #: lib/cannery_web/templates/user_reset_password/new.html.heex:32
#: lib/cannery_web/templates/user_session/new.html.heex:3 #: lib/cannery_web/templates/user_session/new.html.heex:3
#: lib/cannery_web/templates/user_session/new.html.heex:28 #: lib/cannery_web/templates/user_session/new.html.heex:28
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
@ -110,19 +110,19 @@ msgstr "Nouveau conteneur"
msgid "New Tag" msgid "New Tag"
msgstr "Nouveau tag" msgstr "Nouveau tag"
#: lib/cannery_web/components/topbar.ex:129 #: lib/cannery_web/components/core_components/topbar.html.heex:114
#: lib/cannery_web/templates/user_confirmation/new.html.heex:28 #: lib/cannery_web/templates/user_confirmation/new.html.heex:29
#: lib/cannery_web/templates/user_registration/new.html.heex:3 #: lib/cannery_web/templates/user_registration/new.html.heex:3
#: lib/cannery_web/templates/user_registration/new.html.heex:37 #: lib/cannery_web/templates/user_registration/new.html.heex:37
#: lib/cannery_web/templates/user_reset_password/edit.html.heex:42 #: lib/cannery_web/templates/user_reset_password/edit.html.heex:42
#: lib/cannery_web/templates/user_reset_password/new.html.heex:28 #: lib/cannery_web/templates/user_reset_password/new.html.heex:29
#: lib/cannery_web/templates/user_session/new.html.heex:39 #: lib/cannery_web/templates/user_session/new.html.heex:39
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
msgid "Register" msgid "Register"
msgstr "Senregistrer" msgstr "Senregistrer"
#: lib/cannery_web/templates/user_confirmation/new.html.heex:3 #: lib/cannery_web/templates/user_confirmation/new.html.heex:3
#: lib/cannery_web/templates/user_confirmation/new.html.heex:15 #: lib/cannery_web/templates/user_confirmation/new.html.heex:16
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
msgid "Resend confirmation instructions" msgid "Resend confirmation instructions"
msgstr "Renvoyer les instructions de confirmation" msgstr "Renvoyer les instructions de confirmation"
@ -144,17 +144,17 @@ msgstr "Réinitialisé le mot de passe"
msgid "Save" msgid "Save"
msgstr "Sauvegarder" msgstr "Sauvegarder"
#: lib/cannery_web/templates/user_reset_password/new.html.heex:15 #: lib/cannery_web/templates/user_reset_password/new.html.heex:16
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
msgid "Send instructions to reset password" msgid "Send instructions to reset password"
msgstr "Envoyer les instructions pour réinitialiser le mot de passe" msgstr "Envoyer les instructions pour réinitialiser le mot de passe"
#: lib/cannery_web/live/container_live/show.html.heex:78 #: lib/cannery_web/live/container_live/show.html.heex:75
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
msgid "Why not add one?" msgid "Why not add one?"
msgstr "Pourquoi pas en ajouter un?" msgstr "Pourquoi pas en ajouter un?"
#: lib/cannery_web/live/container_live/edit_tags_component.html.heex:50 #: lib/cannery_web/live/container_live/edit_tags_component.html.heex:51
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
msgid "Add" msgid "Add"
msgstr "Ajouter" msgstr "Ajouter"
@ -169,9 +169,9 @@ msgstr "Munition préparée"
msgid "Why not get some ready to shoot?" msgid "Why not get some ready to shoot?"
msgstr "Pourquoi pas en préparer pour tirer?" msgstr "Pourquoi pas en préparer pour tirer?"
#: lib/cannery_web/live/ammo_group_live/index.html.heex:102 #: lib/cannery_web/live/ammo_group_live/index.html.heex:103
#: lib/cannery_web/live/ammo_group_live/show.html.heex:107 #: lib/cannery_web/live/ammo_group_live/show.html.heex:103
#: lib/cannery_web/live/range_live/index.html.heex:38 #: lib/cannery_web/live/range_live/index.html.heex:45
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
msgid "Record shots" msgid "Record shots"
msgstr "Enregistrer des tirs" msgstr "Enregistrer des tirs"
@ -181,17 +181,12 @@ msgstr "Enregistrer des tirs"
msgid "Add another container!" msgid "Add another container!"
msgstr "Ajoutez un autre conteneur!" msgstr "Ajoutez un autre conteneur!"
#: lib/cannery_web/live/ammo_group_live/show.html.heex:100
#, elixir-autogen, elixir-format
msgid "Move containers"
msgstr "Déplacer les conteneurs"
#: lib/cannery_web/components/move_ammo_group_component.ex:126 #: lib/cannery_web/components/move_ammo_group_component.ex:126
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
msgid "Select" msgid "Select"
msgstr "Sélectionner" msgstr "Sélectionner"
#: lib/cannery_web/live/invite_live/index.html.heex:33 #: lib/cannery_web/live/invite_live/index.html.heex:38
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
msgid "Copy to clipboard" msgid "Copy to clipboard"
msgstr "Copier dans le presse-papier" msgstr "Copier dans le presse-papier"
@ -216,7 +211,7 @@ msgstr "Changer la langue"
msgid "Change language" msgid "Change language"
msgstr "Changer la langue" msgstr "Changer la langue"
#: lib/cannery_web/live/ammo_group_live/show.html.heex:59 #: lib/cannery_web/live/ammo_group_live/show.html.heex:55
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
msgid "View in Catalog" msgid "View in Catalog"
msgstr "Voir en catalogue" msgstr "Voir en catalogue"
@ -227,23 +222,25 @@ msgid "add an ammo type first"
msgstr "Ajoutez d'abord un type de munitions" msgstr "Ajoutez d'abord un type de munitions"
#: lib/cannery_web/components/move_ammo_group_component.ex:80 #: lib/cannery_web/components/move_ammo_group_component.ex:80
#: lib/cannery_web/live/ammo_group_live/index.html.heex:120
#: lib/cannery_web/live/ammo_group_live/show.html.heex:96
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
msgid "Move ammo" msgid "Move ammo"
msgstr "" msgstr ""
#: lib/cannery_web/live/invite_live/index.html.heex:85 #: lib/cannery_web/live/invite_live/index.html.heex:90
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
msgid "Set Unlimited" msgid "Set Unlimited"
msgstr "" msgstr ""
#: lib/cannery_web/live/ammo_group_live/show.html.heex:93 #: lib/cannery_web/live/ammo_group_live/show.html.heex:89
#: lib/cannery_web/live/range_live/index.html.heex:31 #: lib/cannery_web/live/range_live/index.html.heex:38
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
msgid "Stage for range" msgid "Stage for range"
msgstr "" msgstr ""
#: lib/cannery_web/live/ammo_group_live/show.html.heex:92 #: lib/cannery_web/live/ammo_group_live/show.html.heex:88
#: lib/cannery_web/live/range_live/index.html.heex:30 #: lib/cannery_web/live/range_live/index.html.heex:37
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
msgid "Unstage from range" msgid "Unstage from range"
msgstr "" msgstr ""
@ -253,106 +250,123 @@ msgstr ""
msgid "Export Data as JSON" msgid "Export Data as JSON"
msgstr "" msgstr ""
#: lib/cannery_web/live/ammo_type_live/index.html.heex:83 #: lib/cannery_web/live/ammo_type_live/index.html.heex:84
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
msgid "Clone %{ammo_type_name}" msgid "Clone %{ammo_type_name}"
msgstr "" msgstr ""
#: lib/cannery_web/live/container_live/index.html.heex:86 #: lib/cannery_web/live/container_live/index.html.heex:87
#: lib/cannery_web/live/container_live/index.html.heex:138 #: lib/cannery_web/live/container_live/index.html.heex:143
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
msgid "Clone %{container_name}" msgid "Clone %{container_name}"
msgstr "" msgstr ""
#: lib/cannery_web/live/invite_live/index.html.heex:30 #: lib/cannery_web/live/invite_live/index.html.heex:35
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
msgid "Copy invite link for %{invite_name}" msgid "Copy invite link for %{invite_name}"
msgstr "" msgstr ""
#: lib/cannery_web/live/ammo_type_live/index.html.heex:102 #: lib/cannery_web/live/ammo_type_live/index.html.heex:103
#: lib/cannery_web/live/ammo_type_live/show.html.heex:36 #: lib/cannery_web/live/ammo_type_live/show.html.heex:36
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
msgid "Delete %{ammo_type_name}" msgid "Delete %{ammo_type_name}"
msgstr "" msgstr ""
#: lib/cannery_web/live/container_live/index.html.heex:101 #: lib/cannery_web/live/container_live/index.html.heex:102
#: lib/cannery_web/live/container_live/index.html.heex:153 #: lib/cannery_web/live/container_live/index.html.heex:158
#: lib/cannery_web/live/container_live/show.html.heex:58 #: lib/cannery_web/live/container_live/show.html.heex:55
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
msgid "Delete %{container_name}" msgid "Delete %{container_name}"
msgstr "" msgstr ""
#: lib/cannery_web/live/tag_live/index.html.heex:64 #: lib/cannery_web/live/tag_live/index.html.heex:65
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
msgid "Delete %{tag_name}" msgid "Delete %{tag_name}"
msgstr "" msgstr ""
#: lib/cannery_web/live/invite_live/index.html.heex:58 #: lib/cannery_web/live/invite_live/index.html.heex:63
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
msgid "Delete invite for %{invite_name}" msgid "Delete invite for %{invite_name}"
msgstr "" msgstr ""
#: lib/cannery_web/live/ammo_group_live/show.ex:145 #: lib/cannery_web/live/ammo_group_live/show.ex:161
#: lib/cannery_web/live/range_live/index.html.heex:122 #: lib/cannery_web/live/range_live/index.html.heex:130
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
msgid "Delete shot record of %{shot_group_count} shots" msgid "Delete shot record of %{shot_group_count} shots"
msgstr "" msgstr ""
#: lib/cannery_web/live/ammo_type_live/index.html.heex:73 #: lib/cannery_web/live/ammo_type_live/index.html.heex:74
#: lib/cannery_web/live/ammo_type_live/show.html.heex:19 #: lib/cannery_web/live/ammo_type_live/show.html.heex:19
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
msgid "Edit %{ammo_type_name}" msgid "Edit %{ammo_type_name}"
msgstr "" msgstr ""
#: lib/cannery_web/live/container_live/index.html.heex:76 #: lib/cannery_web/live/container_live/index.html.heex:77
#: lib/cannery_web/live/container_live/index.html.heex:128 #: lib/cannery_web/live/container_live/index.html.heex:133
#: lib/cannery_web/live/container_live/show.html.heex:45 #: lib/cannery_web/live/container_live/show.html.heex:42
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
msgid "Edit %{container_name}" msgid "Edit %{container_name}"
msgstr "" msgstr ""
#: lib/cannery_web/live/tag_live/index.html.heex:51 #: lib/cannery_web/live/tag_live/index.html.heex:52
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
msgid "Edit %{tag_name}" msgid "Edit %{tag_name}"
msgstr "" msgstr ""
#: lib/cannery_web/live/ammo_group_live/show.html.heex:66 #: lib/cannery_web/live/ammo_group_live/index.html.heex:142
#: lib/cannery_web/live/ammo_group_live/show.html.heex:62
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
msgid "Edit ammo group of %{ammo_group_count} bullets" msgid "Edit ammo group of %{ammo_group_count} bullets"
msgstr "" msgstr ""
#: lib/cannery_web/live/invite_live/index.html.heex:41 #: lib/cannery_web/live/invite_live/index.html.heex:46
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
msgid "Edit invite for %{invite_name}" msgid "Edit invite for %{invite_name}"
msgstr "" msgstr ""
#: lib/cannery_web/live/ammo_group_live/show.ex:130 #: lib/cannery_web/live/ammo_group_live/show.ex:146
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
msgid "Edit shot group of %{shot_group_count} shots" msgid "Edit shot group of %{shot_group_count} shots"
msgstr "" msgstr ""
#: lib/cannery_web/live/range_live/index.html.heex:105 #: lib/cannery_web/live/range_live/index.html.heex:113
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
msgid "Edit shot record of %{shot_group_count} shots" msgid "Edit shot record of %{shot_group_count} shots"
msgstr "" msgstr ""
#: lib/cannery_web/live/ammo_group_live/index.html.heex:95 #: lib/cannery_web/live/ammo_group_live/index.html.heex:96
#, elixir-autogen, elixir-format, fuzzy #, elixir-autogen, elixir-format, fuzzy
msgid "Stage" msgid "Stage"
msgstr "Munition préparée" msgstr "Munition préparée"
#: lib/cannery_web/live/container_live/index.html.heex:64 #: lib/cannery_web/live/container_live/index.html.heex:65
#: lib/cannery_web/live/container_live/index.html.heex:117 #: lib/cannery_web/live/container_live/index.html.heex:122
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
msgid "Tag %{container_name}" msgid "Tag %{container_name}"
msgstr "" msgstr ""
#: lib/cannery_web/live/ammo_group_live/index.html.heex:94 #: lib/cannery_web/live/ammo_group_live/index.html.heex:95
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
msgid "Unstage" msgid "Unstage"
msgstr "" msgstr ""
#: lib/cannery_web/live/ammo_type_live/index.html.heex:63 #: lib/cannery_web/live/ammo_type_live/index.html.heex:64
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
msgid "View %{ammo_type_name}" msgid "View %{ammo_type_name}"
msgstr "" msgstr ""
#: lib/cannery_web/live/ammo_group_live/index.html.heex:154
#, elixir-autogen, elixir-format, fuzzy
msgid "Clone ammo group of %{ammo_group_count} bullets"
msgstr ""
#: lib/cannery_web/live/ammo_group_live/index.html.heex:169
#: lib/cannery_web/live/ammo_group_live/show.html.heex:76
#, elixir-autogen, elixir-format, fuzzy
msgid "Delete ammo group of %{ammo_group_count} bullets"
msgstr ""
#: lib/cannery_web/live/ammo_group_live/index.html.heex:130
#, elixir-autogen, elixir-format, fuzzy
msgid "View ammo group of %{ammo_group_count} bullets"
msgstr ""

View File

@ -14,23 +14,23 @@ msgstr ""
"Plural-Forms: nplurals=2; plural=n > 1;\n" "Plural-Forms: nplurals=2; plural=n > 1;\n"
"X-Generator: Weblate 4.12.2\n" "X-Generator: Weblate 4.12.2\n"
#: lib/cannery_web/live/home_live.html.heex:46 #: lib/cannery_web/live/home_live.html.heex:44
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
msgid "Access from any internet-capable device" msgid "Access from any internet-capable device"
msgstr "Accédez depuis nimporte quel appareil connecté à internet" msgstr "Accédez depuis nimporte quel appareil connecté à internet"
#: lib/cannery_web/live/invite_live/index.html.heex:94 #: lib/cannery_web/live/invite_live/index.html.heex:99
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
msgid "Admins" msgid "Admins"
msgstr "Administrateur·ices" msgstr "Administrateur·ices"
#: lib/cannery_web/live/home_live.html.heex:60 #: lib/cannery_web/live/home_live.html.heex:58
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
msgid "Admins:" msgid "Admins:"
msgstr "Administrateur·ices:" msgstr "Administrateur·ices:"
#: lib/cannery_web/components/core_components/topbar.html.heex:58
#: lib/cannery_web/components/shot_group_table_component.ex:41 #: lib/cannery_web/components/shot_group_table_component.ex:41
#: lib/cannery_web/components/topbar.ex:73
#: lib/cannery_web/live/ammo_group_live/index.ex:70 #: lib/cannery_web/live/ammo_group_live/index.ex:70
#: lib/cannery_web/live/ammo_group_live/index.ex:79 #: lib/cannery_web/live/ammo_group_live/index.ex:79
#: lib/cannery_web/live/ammo_group_live/index.html.heex:3 #: lib/cannery_web/live/ammo_group_live/index.html.heex:3
@ -97,9 +97,9 @@ msgstr "Matériau de la caisse"
msgid "Container" msgid "Container"
msgstr "Conteneur" msgstr "Conteneur"
#: lib/cannery_web/components/topbar.ex:57 #: lib/cannery_web/components/core_components/topbar.html.heex:42
#: lib/cannery_web/live/container_live/index.ex:49 #: lib/cannery_web/live/container_live/index.ex:45
#: lib/cannery_web/live/container_live/index.ex:58 #: lib/cannery_web/live/container_live/index.ex:54
#: lib/cannery_web/live/container_live/index.html.heex:3 #: lib/cannery_web/live/container_live/index.html.heex:3
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
msgid "Containers" msgid "Containers"
@ -117,36 +117,36 @@ msgstr "Corrosive"
msgid "Count" msgid "Count"
msgstr "Quantité" msgstr "Quantité"
#: lib/cannery_web/components/ammo_group_card.ex:39 #: lib/cannery_web/components/core_components/ammo_group_card.html.heex:16
#: lib/cannery_web/live/ammo_group_live/show.html.heex:8 #: lib/cannery_web/live/ammo_group_live/show.html.heex:8
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
msgid "Count:" msgid "Count:"
msgstr "Quantité:" msgstr "Quantité:"
#: lib/cannery_web/components/container_table_component.ex:47 #: lib/cannery_web/components/container_table_component.ex:46
#: lib/cannery_web/live/ammo_type_live/form_component.html.heex:25 #: lib/cannery_web/live/ammo_type_live/form_component.html.heex:25
#: lib/cannery_web/live/container_live/form_component.html.heex:28 #: lib/cannery_web/live/container_live/form_component.html.heex:28
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
msgid "Description" msgid "Description"
msgstr "Description" msgstr "Description"
#: lib/cannery_web/components/container_card.ex:39 #: lib/cannery_web/components/core_components/container_card.html.heex:16
#: lib/cannery_web/live/container_live/show.html.heex:7 #: lib/cannery_web/live/container_live/show.html.heex:7
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
msgid "Description:" msgid "Description:"
msgstr "Description:" msgstr "Description:"
#: lib/cannery_web/live/home_live.html.heex:23 #: lib/cannery_web/live/home_live.html.heex:22
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
msgid "Easy to Use:" msgid "Easy to Use:"
msgstr "Simple à utiliser:" msgstr "Simple à utiliser:"
#: lib/cannery_web/live/invite_live/index.ex:34 #: lib/cannery_web/live/invite_live/index.ex:33
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
msgid "Edit Invite" msgid "Edit Invite"
msgstr "Modifier linvitation" msgstr "Modifier linvitation"
#: lib/cannery_web/live/tag_live/index.ex:28 #: lib/cannery_web/live/tag_live/index.ex:27
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
msgid "Edit Tag" msgid "Edit Tag"
msgstr "Modifier le tag" msgstr "Modifier le tag"
@ -173,23 +173,23 @@ msgstr "Graines"
msgid "Incendiary" msgid "Incendiary"
msgstr "Incendiaire" msgstr "Incendiaire"
#: lib/cannery_web/live/home_live.html.heex:55 #: lib/cannery_web/live/home_live.html.heex:53
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
msgid "Instance Information" msgid "Instance Information"
msgstr "Information de linstance" msgstr "Information de linstance"
#: lib/cannery_web/components/invite_card.ex:42 #: lib/cannery_web/components/core_components/invite_card.html.heex:21
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
msgid "Invite Disabled" msgid "Invite Disabled"
msgstr "Invitation désactivée" msgstr "Invitation désactivée"
#: lib/cannery_web/live/home_live.html.heex:82 #: lib/cannery_web/live/home_live.html.heex:84
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
msgid "Invite Only" msgid "Invite Only"
msgstr "Uniquement sur invitation" msgstr "Uniquement sur invitation"
#: lib/cannery_web/components/topbar.ex:89 #: lib/cannery_web/components/core_components/topbar.html.heex:74
#: lib/cannery_web/live/invite_live/index.ex:42 #: lib/cannery_web/live/invite_live/index.ex:41
#: lib/cannery_web/live/invite_live/index.html.heex:3 #: lib/cannery_web/live/invite_live/index.html.heex:3
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
msgid "Invites" msgid "Invites"
@ -200,14 +200,14 @@ msgstr "Invitations"
msgid "Keep me logged in for 60 days" msgid "Keep me logged in for 60 days"
msgstr "Me garder authentifié durant 60 jours" msgstr "Me garder authentifié durant 60 jours"
#: lib/cannery_web/components/container_table_component.ex:48 #: lib/cannery_web/components/container_table_component.ex:47
#: lib/cannery_web/components/move_ammo_group_component.ex:69 #: lib/cannery_web/components/move_ammo_group_component.ex:69
#: lib/cannery_web/live/container_live/form_component.html.heex:43 #: lib/cannery_web/live/container_live/form_component.html.heex:43
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
msgid "Location" msgid "Location"
msgstr "Localisation" msgstr "Localisation"
#: lib/cannery_web/components/container_card.ex:49 #: lib/cannery_web/components/core_components/container_card.html.heex:26
#: lib/cannery_web/live/container_live/show.html.heex:17 #: lib/cannery_web/live/container_live/show.html.heex:17
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
msgid "Location:" msgid "Location:"
@ -235,7 +235,7 @@ msgid "My cool ammo can"
msgstr "Ma superbe boite de munition" msgstr "Ma superbe boite de munition"
#: lib/cannery_web/components/ammo_type_table_component.ex:45 #: lib/cannery_web/components/ammo_type_table_component.ex:45
#: lib/cannery_web/components/container_table_component.ex:46 #: lib/cannery_web/components/container_table_component.ex:45
#: lib/cannery_web/live/ammo_type_live/form_component.html.heex:21 #: lib/cannery_web/live/ammo_type_live/form_component.html.heex:21
#: lib/cannery_web/live/container_live/form_component.html.heex:21 #: lib/cannery_web/live/container_live/form_component.html.heex:21
#: lib/cannery_web/live/invite_live/form_component.html.heex:21 #: lib/cannery_web/live/invite_live/form_component.html.heex:21
@ -250,35 +250,35 @@ msgstr "Nom"
msgid "New Ammo type" msgid "New Ammo type"
msgstr "Nouveau type de munition" msgstr "Nouveau type de munition"
#: lib/cannery_web/live/container_live/index.ex:36 #: lib/cannery_web/live/container_live/index.ex:32
#: lib/cannery_web/live/container_live/index.ex:43 #: lib/cannery_web/live/container_live/index.ex:39
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
msgid "New Container" msgid "New Container"
msgstr "Nouveau conteneur" msgstr "Nouveau conteneur"
#: lib/cannery_web/live/invite_live/index.ex:38 #: lib/cannery_web/live/invite_live/index.ex:37
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
msgid "New Invite" msgid "New Invite"
msgstr "Nouvelle invitation" msgstr "Nouvelle invitation"
#: lib/cannery_web/live/tag_live/index.ex:36 #: lib/cannery_web/live/tag_live/index.ex:35
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
msgid "New Tag" msgid "New Tag"
msgstr "Nouveau tag" msgstr "Nouveau tag"
#: lib/cannery_web/live/ammo_group_live/index.html.heex:10 #: lib/cannery_web/live/ammo_group_live/index.html.heex:10
#: lib/cannery_web/live/ammo_group_live/index.html.heex:70 #: lib/cannery_web/live/ammo_group_live/index.html.heex:71
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
msgid "No Ammo" msgid "No Ammo"
msgstr "Aucune munition" msgstr "Aucune munition"
#: lib/cannery_web/live/ammo_type_live/show.html.heex:169 #: lib/cannery_web/live/ammo_type_live/show.html.heex:167
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
msgid "No ammo for this type" msgid "No ammo for this type"
msgstr "Aucune munition pour ce type" msgstr "Aucune munition pour ce type"
#: lib/cannery_web/live/container_live/index.html.heex:8 #: lib/cannery_web/live/container_live/index.html.heex:8
#: lib/cannery_web/live/container_live/index.html.heex:46 #: lib/cannery_web/live/container_live/index.html.heex:47
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
msgid "No containers" msgid "No containers"
msgstr "Aucun conteneur" msgstr "Aucun conteneur"
@ -290,7 +290,7 @@ msgstr "Aucune invitation"
#: lib/cannery_web/live/container_live/edit_tags_component.html.heex:29 #: lib/cannery_web/live/container_live/edit_tags_component.html.heex:29
#: lib/cannery_web/live/tag_live/index.html.heex:10 #: lib/cannery_web/live/tag_live/index.html.heex:10
#: lib/cannery_web/live/tag_live/index.html.heex:42 #: lib/cannery_web/live/tag_live/index.html.heex:43
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
msgid "No tags" msgid "No tags"
msgstr "Aucun tag" msgstr "Aucun tag"
@ -299,13 +299,13 @@ msgstr "Aucun tag"
#: lib/cannery_web/components/ammo_group_table_component.ex:81 #: lib/cannery_web/components/ammo_group_table_component.ex:81
#: lib/cannery_web/components/shot_group_table_component.ex:43 #: lib/cannery_web/components/shot_group_table_component.ex:43
#: lib/cannery_web/live/ammo_group_live/form_component.html.heex:50 #: lib/cannery_web/live/ammo_group_live/form_component.html.heex:50
#: lib/cannery_web/live/ammo_group_live/show.ex:90 #: lib/cannery_web/live/ammo_group_live/show.ex:92
#: lib/cannery_web/live/range_live/form_component.html.heex:30 #: lib/cannery_web/live/range_live/form_component.html.heex:30
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
msgid "Notes" msgid "Notes"
msgstr "Notes" msgstr "Notes"
#: lib/cannery_web/components/ammo_group_card.ex:52 #: lib/cannery_web/components/core_components/ammo_group_card.html.heex:26
#: lib/cannery_web/live/ammo_group_live/show.html.heex:24 #: lib/cannery_web/live/ammo_group_live/show.html.heex:24
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
msgid "Notes:" msgid "Notes:"
@ -328,7 +328,7 @@ msgstr "Pression"
msgid "Price paid" msgid "Price paid"
msgstr "Prix payé" msgstr "Prix payé"
#: lib/cannery_web/components/ammo_group_card.ex:68 #: lib/cannery_web/components/core_components/ammo_group_card.html.heex:41
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
msgid "Price paid:" msgid "Price paid:"
msgstr "Prix payé:" msgstr "Prix payé:"
@ -339,17 +339,17 @@ msgstr "Prix payé:"
msgid "Primer type" msgid "Primer type"
msgstr "Type damorce" msgstr "Type damorce"
#: lib/cannery_web/live/home_live.html.heex:81 #: lib/cannery_web/live/home_live.html.heex:83
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
msgid "Public Signups" msgid "Public Signups"
msgstr "Enregistrements publics" msgstr "Enregistrements publics"
#: lib/cannery_web/live/home_live.html.heex:33 #: lib/cannery_web/live/home_live.html.heex:32
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
msgid "Secure:" msgid "Secure:"
msgstr "Sécurisé:" msgstr "Sécurisé:"
#: lib/cannery_web/live/home_live.html.heex:36 #: lib/cannery_web/live/home_live.html.heex:35
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
msgid "Self-host your own instance, or use an instance from someone you trust." msgid "Self-host your own instance, or use an instance from someone you trust."
msgstr "" msgstr ""
@ -362,7 +362,7 @@ msgstr ""
msgid "Settings" msgid "Settings"
msgstr "Paramètres" msgstr "Paramètres"
#: lib/cannery_web/live/home_live.html.heex:43 #: lib/cannery_web/live/home_live.html.heex:41
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
msgid "Simple:" msgid "Simple:"
msgstr "Simple:" msgstr "Simple:"
@ -372,15 +372,15 @@ msgstr "Simple:"
msgid "Steel" msgid "Steel"
msgstr "Acier" msgstr "Acier"
#: lib/cannery_web/live/ammo_group_live/show.html.heex:117 #: lib/cannery_web/live/ammo_group_live/show.html.heex:113
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
msgid "Stored in" msgid "Stored in"
msgstr "Est stocké dans" msgstr "Est stocké dans"
#: lib/cannery_web/components/container_table_component.ex:52 #: lib/cannery_web/components/container_table_component.ex:66
#: lib/cannery_web/components/topbar.ex:49 #: lib/cannery_web/components/core_components/topbar.html.heex:34
#: lib/cannery_web/live/tag_live/index.ex:44 #: lib/cannery_web/live/tag_live/index.ex:43
#: lib/cannery_web/live/tag_live/index.ex:54 #: lib/cannery_web/live/tag_live/index.ex:53
#: lib/cannery_web/live/tag_live/index.html.heex:3 #: lib/cannery_web/live/tag_live/index.html.heex:3
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
msgid "Tags" msgid "Tags"
@ -409,20 +409,20 @@ msgstr "Le site web de suivi darme à feux auto-hébergé"
msgid "Tracer" msgid "Tracer"
msgstr "Traceuse" msgstr "Traceuse"
#: lib/cannery_web/components/container_table_component.ex:49 #: lib/cannery_web/components/container_table_component.ex:48
#: lib/cannery_web/components/move_ammo_group_component.ex:68 #: lib/cannery_web/components/move_ammo_group_component.ex:68
#: lib/cannery_web/live/container_live/form_component.html.heex:36 #: lib/cannery_web/live/container_live/form_component.html.heex:36
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
msgid "Type" msgid "Type"
msgstr "Type" msgstr "Type"
#: lib/cannery_web/components/container_card.ex:44 #: lib/cannery_web/components/core_components/container_card.html.heex:21
#: lib/cannery_web/live/container_live/show.html.heex:12 #: lib/cannery_web/live/container_live/show.html.heex:12
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
msgid "Type:" msgid "Type:"
msgstr "Type:" msgstr "Type:"
#: lib/cannery_web/live/invite_live/index.html.heex:122 #: lib/cannery_web/live/invite_live/index.html.heex:127
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
msgid "Users" msgid "Users"
msgstr "Utilisateurs" msgstr "Utilisateurs"
@ -432,18 +432,18 @@ msgstr "Utilisateurs"
msgid "Uses left" msgid "Uses left"
msgstr "Utilisations restantes" msgstr "Utilisations restantes"
#: lib/cannery_web/live/home_live.html.heex:37 #: lib/cannery_web/live/home_live.html.heex:36
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
msgid "Your data stays with you, period" msgid "Your data stays with you, period"
msgstr "Vos données restent avec vous, point final" msgstr "Vos données restent avec vous, point final"
#: lib/cannery_web/live/container_live/show.html.heex:70 #: lib/cannery_web/live/container_live/show.html.heex:67
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
msgid "No tags for this container" msgid "No tags for this container"
msgstr "Aucun tag pour ce conteneur" msgstr "Aucun tag pour ce conteneur"
#: lib/cannery_web/components/ammo_group_table_component.ex:72 #: lib/cannery_web/components/ammo_group_table_component.ex:72
#: lib/cannery_web/components/topbar.ex:81 #: lib/cannery_web/components/core_components/topbar.html.heex:66
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
msgid "Range" msgid "Range"
msgstr "Portée" msgstr "Portée"
@ -455,7 +455,7 @@ msgstr "Journée de stand"
#: lib/cannery_web/components/add_shot_group_component.html.heex:46 #: lib/cannery_web/components/add_shot_group_component.html.heex:46
#: lib/cannery_web/components/shot_group_table_component.ex:44 #: lib/cannery_web/components/shot_group_table_component.ex:44
#: lib/cannery_web/live/ammo_group_live/show.ex:91 #: lib/cannery_web/live/ammo_group_live/show.ex:93
#: lib/cannery_web/live/range_live/form_component.html.heex:37 #: lib/cannery_web/live/range_live/form_component.html.heex:37
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
msgid "Date" msgid "Date"
@ -477,19 +477,19 @@ msgstr "Aucune munition sélectionnée"
msgid "Record shots" msgid "Record shots"
msgstr "Tirs enregistrés" msgstr "Tirs enregistrés"
#: lib/cannery_web/live/ammo_group_live/show.ex:41 #: lib/cannery_web/live/ammo_group_live/show.ex:42
#: lib/cannery_web/live/range_live/index.ex:41 #: lib/cannery_web/live/range_live/index.ex:40
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
msgid "Edit Shot Records" msgid "Edit Shot Records"
msgstr "Modifier les enregistrements de tir" msgstr "Modifier les enregistrements de tir"
#: lib/cannery_web/live/range_live/index.ex:49 #: lib/cannery_web/live/range_live/index.ex:48
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
msgid "New Shot Records" msgid "New Shot Records"
msgstr "Nouveaux enregistrements de tir" msgstr "Nouveaux enregistrements de tir"
#: lib/cannery_web/live/range_live/index.html.heex:48 #: lib/cannery_web/live/range_live/index.html.heex:55
#: lib/cannery_web/live/range_live/index.html.heex:89 #: lib/cannery_web/live/range_live/index.html.heex:97
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
msgid "No shots recorded" msgid "No shots recorded"
msgstr "Aucun tir enregistré" msgstr "Aucun tir enregistré"
@ -501,20 +501,19 @@ msgid "Rounds left"
msgstr "Cartouches restantes" msgstr "Cartouches restantes"
#: lib/cannery_web/components/shot_group_table_component.ex:42 #: lib/cannery_web/components/shot_group_table_component.ex:42
#: lib/cannery_web/live/ammo_group_live/show.ex:89 #: lib/cannery_web/live/ammo_group_live/show.ex:91
#: lib/cannery_web/live/range_live/index.html.heex:62 #: lib/cannery_web/live/range_live/index.html.heex:69
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
msgid "Rounds shot" msgid "Rounds shot"
msgstr "Cartouches tirées" msgstr "Cartouches tirées"
#: lib/cannery_web/live/range_live/index.ex:57 #: lib/cannery_web/live/range_live/index.ex:56
#: lib/cannery_web/live/range_live/index.ex:67 #: lib/cannery_web/live/range_live/index.ex:66
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
msgid "Shot Records" msgid "Shot Records"
msgstr "Enregistrements de tir" msgstr "Enregistrements de tir"
#: lib/cannery_web/live/ammo_group_live/index.ex:38 #: lib/cannery_web/live/ammo_group_live/index.ex:38
#: lib/cannery_web/live/ammo_group_live/index.html.heex:119
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
msgid "Move ammo" msgid "Move ammo"
msgstr "Déplacer munition" msgstr "Déplacer munition"
@ -524,18 +523,18 @@ msgstr "Déplacer munition"
msgid "No other containers" msgid "No other containers"
msgstr "Aucun autre conteneur" msgstr "Aucun autre conteneur"
#: lib/cannery_web/live/range_live/index.html.heex:53 #: lib/cannery_web/live/range_live/index.html.heex:60
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
msgid "Shot log" msgid "Shot log"
msgstr "Évènements de tir" msgstr "Évènements de tir"
#: lib/cannery_web/components/ammo_group_card.ex:69
#: lib/cannery_web/components/ammo_group_card.ex:76
#: lib/cannery_web/components/ammo_group_table_component.ex:153 #: lib/cannery_web/components/ammo_group_table_component.ex:153
#: lib/cannery_web/components/ammo_group_table_component.ex:225 #: lib/cannery_web/components/ammo_group_table_component.ex:229
#: lib/cannery_web/components/ammo_type_table_component.ex:180 #: lib/cannery_web/components/ammo_type_table_component.ex:224
#: lib/cannery_web/components/core_components/ammo_group_card.html.heex:42
#: lib/cannery_web/components/core_components/ammo_group_card.html.heex:47
#: lib/cannery_web/live/ammo_group_live/show.html.heex:37 #: lib/cannery_web/live/ammo_group_live/show.html.heex:37
#: lib/cannery_web/live/ammo_group_live/show.html.heex:44 #: lib/cannery_web/live/ammo_group_live/show.html.heex:42
#: lib/cannery_web/live/ammo_type_live/show.html.heex:139 #: lib/cannery_web/live/ammo_type_live/show.html.heex:139
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
msgid "$%{amount}" msgid "$%{amount}"
@ -605,28 +604,28 @@ msgstr "Type dallumage"
msgid "Reconnecting..." msgid "Reconnecting..."
msgstr "Reconnexion en cours…" msgstr "Reconnexion en cours…"
#: lib/cannery_web/live/container_live/index.ex:32 #: lib/cannery_web/live/container_live/index.ex:28
#: lib/cannery_web/live/container_live/show.ex:110 #: lib/cannery_web/live/container_live/show.ex:108
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
msgid "Edit %{name}" msgid "Edit %{name}"
msgstr "Éditer %{name}" msgstr "Éditer %{name}"
#: lib/cannery_web/live/container_live/index.ex:69 #: lib/cannery_web/live/container_live/index.ex:63
#: lib/cannery_web/live/container_live/show.ex:111 #: lib/cannery_web/live/container_live/show.ex:109
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
msgid "Edit %{name} tags" msgid "Edit %{name} tags"
msgstr "Éditer les tags de %{name}" msgstr "Éditer les tags de %{name}"
#: lib/cannery_web/components/container_card.ex:60 #: lib/cannery_web/components/core_components/container_card.html.heex:37
#: lib/cannery_web/live/ammo_type_live/show.html.heex:70 #: lib/cannery_web/live/ammo_type_live/show.html.heex:70
#: lib/cannery_web/live/container_live/show.html.heex:35 #: lib/cannery_web/live/container_live/show.html.heex:33
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
msgid "Rounds:" msgid "Rounds:"
msgstr "Cartouches:" msgstr "Cartouches:"
#: lib/cannery_web/components/ammo_group_table_component.ex:222 #: lib/cannery_web/components/ammo_group_table_component.ex:226
#: lib/cannery_web/components/ammo_type_table_component.ex:179 #: lib/cannery_web/components/ammo_type_table_component.ex:223
#: lib/cannery_web/live/ammo_type_live/show.html.heex:145 #: lib/cannery_web/live/ammo_type_live/show.html.heex:143
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
msgid "No cost information" msgid "No cost information"
msgstr "Aucune information de prix" msgstr "Aucune information de prix"
@ -636,7 +635,7 @@ msgstr "Aucune information de prix"
msgid "% left" msgid "% left"
msgstr "%restante" msgstr "%restante"
#: lib/cannery_web/live/ammo_group_live/show.html.heex:43 #: lib/cannery_web/live/ammo_group_live/show.html.heex:41
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
msgid "Current value:" msgid "Current value:"
msgstr "Valeur actuelle:" msgstr "Valeur actuelle:"
@ -656,7 +655,7 @@ msgstr "Nombre original:"
msgid "Percentage left:" msgid "Percentage left:"
msgstr "Pourcentage restant:" msgstr "Pourcentage restant:"
#: lib/cannery_web/live/ammo_group_live/show.html.heex:130 #: lib/cannery_web/live/ammo_group_live/show.html.heex:126
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
msgid "Rounds used" msgid "Rounds used"
msgstr "Cartouches utilisées" msgstr "Cartouches utilisées"
@ -676,7 +675,7 @@ msgstr "Mot de passe oublié?"
msgid "Log in" msgid "Log in"
msgstr "Se connecter" msgstr "Se connecter"
#: lib/cannery_web/controllers/user_registration_controller.ex:32 #: lib/cannery_web/controllers/user_registration_controller.ex:33
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
msgid "Register" msgid "Register"
msgstr "Senregistrer" msgstr "Senregistrer"
@ -686,8 +685,8 @@ msgstr "Senregistrer"
msgid "Reset your password" msgid "Reset your password"
msgstr "Réinitialiser votre mot de passe" msgstr "Réinitialiser votre mot de passe"
#: lib/cannery_web/live/ammo_group_live/show.ex:40 #: lib/cannery_web/live/ammo_group_live/show.ex:41
#: lib/cannery_web/live/range_live/index.ex:33 #: lib/cannery_web/live/range_live/index.ex:32
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
msgid "Record Shots" msgid "Record Shots"
msgstr "Enregistrer des tirs" msgstr "Enregistrer des tirs"
@ -723,27 +722,27 @@ msgstr "Allemand"
msgid "Language" msgid "Language"
msgstr "Langue" msgstr "Langue"
#: lib/cannery_web/live/home_live.html.heex:107 #: lib/cannery_web/live/home_live.html.heex:109
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
msgid "Get involved!" msgid "Get involved!"
msgstr "Impliquez-vous!" msgstr "Impliquez-vous!"
#: lib/cannery_web/live/home_live.html.heex:128 #: lib/cannery_web/live/home_live.html.heex:130
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
msgid "Help translate" msgid "Help translate"
msgstr "Aider à la traduction" msgstr "Aider à la traduction"
#: lib/cannery_web/live/home_live.html.heex:139 #: lib/cannery_web/live/home_live.html.heex:141
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
msgid "Report bugs or request features" msgid "Report bugs or request features"
msgstr "Remonter des bugs ou une demande de fonctionnalité" msgstr "Remonter des bugs ou une demande de fonctionnalité"
#: lib/cannery_web/live/home_live.html.heex:117 #: lib/cannery_web/live/home_live.html.heex:119
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
msgid "View the source code" msgid "View the source code"
msgstr "Voir le code source" msgstr "Voir le code source"
#: lib/cannery_web/components/topbar.ex:65 #: lib/cannery_web/components/core_components/topbar.html.heex:50
#: lib/cannery_web/live/ammo_type_live/index.ex:52 #: lib/cannery_web/live/ammo_type_live/index.ex:52
#: lib/cannery_web/live/ammo_type_live/index.ex:62 #: lib/cannery_web/live/ammo_type_live/index.ex:62
#: lib/cannery_web/live/ammo_type_live/index.html.heex:3 #: lib/cannery_web/live/ammo_type_live/index.html.heex:3
@ -751,39 +750,39 @@ msgstr "Voir le code source"
msgid "Catalog" msgid "Catalog"
msgstr "Catalogue" msgstr "Catalogue"
#: lib/cannery_web/live/ammo_group_live/show.ex:44 #: lib/cannery_web/live/ammo_group_live/show.ex:45
#, elixir-autogen, elixir-format, fuzzy #, elixir-autogen, elixir-format, fuzzy
msgid "Edit Ammo" msgid "Edit Ammo"
msgstr "Éditer le type de munition" msgstr "Éditer le type de munition"
#: lib/cannery_web/live/ammo_group_live/show.ex:42 #: lib/cannery_web/live/ammo_group_live/show.ex:43
#, elixir-autogen, elixir-format, fuzzy #, elixir-autogen, elixir-format, fuzzy
msgid "Move Ammo" msgid "Move Ammo"
msgstr "Déplacer munition" msgstr "Déplacer munition"
#: lib/cannery_web/live/container_live/show.html.heex:115 #: lib/cannery_web/live/container_live/show.html.heex:112
#, elixir-autogen, elixir-format, fuzzy #, elixir-autogen, elixir-format, fuzzy
msgid "No ammo in this container" msgid "No ammo in this container"
msgstr "Aucun groupe de munition pour ce conteneur" msgstr "Aucun groupe de munition pour ce conteneur"
#: lib/cannery_web/live/ammo_group_live/show.ex:43 #: lib/cannery_web/live/ammo_group_live/show.ex:44
#, elixir-autogen, elixir-format, fuzzy #, elixir-autogen, elixir-format, fuzzy
msgid "Show Ammo" msgid "Show Ammo"
msgstr "Montrer le type de munition" msgstr "Montrer le type de munition"
#: lib/cannery_web/live/ammo_group_live/show.html.heex:122 #: lib/cannery_web/live/ammo_group_live/show.html.heex:118
#, elixir-autogen, elixir-format, fuzzy #, elixir-autogen, elixir-format, fuzzy
msgid "This ammo is not in a container" msgid "This ammo is not in a container"
msgstr "Ce groupe de munition nest pas dans un conteneur" msgstr "Ce groupe de munition nest pas dans un conteneur"
#: lib/cannery_web/components/container_card.ex:55 #: lib/cannery_web/components/core_components/container_card.html.heex:32
#: lib/cannery_web/live/ammo_type_live/show.html.heex:98 #: lib/cannery_web/live/ammo_type_live/show.html.heex:98
#: lib/cannery_web/live/container_live/show.html.heex:26 #: lib/cannery_web/live/container_live/show.html.heex:23
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
msgid "Packs:" msgid "Packs:"
msgstr "Packages:" msgstr "Packages:"
#: lib/cannery_web/components/topbar.ex:25 #: lib/cannery_web/components/core_components/topbar.html.heex:10
#: lib/cannery_web/live/home_live.html.heex:4 #: lib/cannery_web/live/home_live.html.heex:4
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
msgid "Cannery logo" msgid "Cannery logo"
@ -800,45 +799,45 @@ msgid "Leave \"Uses left\" blank to make invite unlimited"
msgstr "" msgstr ""
"Laissez \"Utilisations restantes\" vide pour rendre l'invitation illimitée" "Laissez \"Utilisations restantes\" vide pour rendre l'invitation illimitée"
#: lib/cannery_web/components/ammo_group_card.ex:83 #: lib/cannery_web/components/core_components/ammo_group_card.html.heex:54
#, elixir-autogen, elixir-format, fuzzy #, elixir-autogen, elixir-format, fuzzy
msgid "Container:" msgid "Container:"
msgstr "Conteneur" msgstr "Conteneur"
#: lib/cannery_web/live/ammo_group_live/index.html.heex:63 #: lib/cannery_web/live/ammo_group_live/index.html.heex:64
#: lib/cannery_web/live/ammo_type_live/index.html.heex:38 #: lib/cannery_web/live/ammo_type_live/index.html.heex:39
#: lib/cannery_web/live/ammo_type_live/show.html.heex:155 #: lib/cannery_web/live/ammo_type_live/show.html.heex:153
#: lib/cannery_web/live/container_live/show.html.heex:101 #: lib/cannery_web/live/container_live/show.html.heex:98
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
msgid "Show used" msgid "Show used"
msgstr "" msgstr ""
#: lib/cannery_web/components/ammo_group_table_component.ex:193 #: lib/cannery_web/components/ammo_group_table_component.ex:187
#: lib/cannery_web/live/ammo_group_live/show.html.heex:19 #: lib/cannery_web/live/ammo_group_live/show.html.heex:19
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
msgid "%{percentage}%" msgid "%{percentage}%"
msgstr "" msgstr ""
#: lib/cannery_web/live/range_live/index.ex:134 #: lib/cannery_web/live/range_live/index.ex:135
#, elixir-autogen, elixir-format, fuzzy #, elixir-autogen, elixir-format, fuzzy
msgid "Rounds shot: %{count}" msgid "Rounds shot: %{count}"
msgstr "Cartouches tirées" msgstr "Cartouches tirées"
#: lib/cannery_web/components/ammo_type_table_component.ex:100 #: lib/cannery_web/components/ammo_type_table_component.ex:100
#: lib/cannery_web/components/container_table_component.ex:50 #: lib/cannery_web/components/container_table_component.ex:64
#, elixir-autogen, elixir-format, fuzzy #, elixir-autogen, elixir-format, fuzzy
msgid "Packs" msgid "Packs"
msgstr "Packages:" msgstr "Packages:"
#: lib/cannery_web/components/ammo_type_table_component.ex:80 #: lib/cannery_web/components/ammo_type_table_component.ex:80
#: lib/cannery_web/components/container_table_component.ex:51 #: lib/cannery_web/components/container_table_component.ex:65
#, elixir-autogen, elixir-format, fuzzy #, elixir-autogen, elixir-format, fuzzy
msgid "Rounds" msgid "Rounds"
msgstr "Cartouches:" msgstr "Cartouches:"
#: lib/cannery_web/live/ammo_type_live/show.html.heex:161 #: lib/cannery_web/live/ammo_type_live/show.html.heex:159
#: lib/cannery_web/live/container_live/index.html.heex:38 #: lib/cannery_web/live/container_live/index.html.heex:39
#: lib/cannery_web/live/container_live/show.html.heex:107 #: lib/cannery_web/live/container_live/show.html.heex:104
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
msgid "View as table" msgid "View as table"
msgstr "" msgstr ""
@ -888,102 +887,102 @@ msgstr ""
msgid "Used up!" msgid "Used up!"
msgstr "" msgstr ""
#: lib/cannery_web/live/range_live/index.html.heex:64 #: lib/cannery_web/live/range_live/index.html.heex:71
#, elixir-autogen, elixir-format, fuzzy #, elixir-autogen, elixir-format, fuzzy
msgid "Rounds shot chart" msgid "Rounds shot chart"
msgstr "Cartouches tirées" msgstr "Cartouches tirées"
#: lib/cannery_web/live/ammo_type_live/show.ex:27 #: lib/cannery_web/live/ammo_type_live/show.ex:26
#, elixir-autogen, elixir-format, fuzzy #, elixir-autogen, elixir-format, fuzzy
msgid "Blank:" msgid "Blank:"
msgstr "Vide" msgstr "Vide"
#: lib/cannery_web/live/ammo_type_live/show.ex:13 #: lib/cannery_web/live/ammo_type_live/show.ex:12
#, elixir-autogen, elixir-format, fuzzy #, elixir-autogen, elixir-format, fuzzy
msgid "Bullet core:" msgid "Bullet core:"
msgstr "Noyau de balle" msgstr "Noyau de balle"
#: lib/cannery_web/live/ammo_type_live/show.ex:12 #: lib/cannery_web/live/ammo_type_live/show.ex:11
#, elixir-autogen, elixir-format, fuzzy #, elixir-autogen, elixir-format, fuzzy
msgid "Bullet type:" msgid "Bullet type:"
msgstr "Type de balle" msgstr "Type de balle"
#: lib/cannery_web/live/ammo_type_live/show.ex:15 #: lib/cannery_web/live/ammo_type_live/show.ex:14
#, elixir-autogen, elixir-format, fuzzy #, elixir-autogen, elixir-format, fuzzy
msgid "Caliber:" msgid "Caliber:"
msgstr "Calibre" msgstr "Calibre"
#: lib/cannery_web/live/ammo_type_live/show.ex:14 #: lib/cannery_web/live/ammo_type_live/show.ex:13
#, elixir-autogen, elixir-format, fuzzy #, elixir-autogen, elixir-format, fuzzy
msgid "Cartridge:" msgid "Cartridge:"
msgstr "Cartouche" msgstr "Cartouche"
#: lib/cannery_web/live/ammo_type_live/show.ex:16 #: lib/cannery_web/live/ammo_type_live/show.ex:15
#, elixir-autogen, elixir-format, fuzzy #, elixir-autogen, elixir-format, fuzzy
msgid "Case material:" msgid "Case material:"
msgstr "Matériau de la caisse" msgstr "Matériau de la caisse"
#: lib/cannery_web/live/ammo_type_live/show.ex:28 #: lib/cannery_web/live/ammo_type_live/show.ex:27
#, elixir-autogen, elixir-format, fuzzy #, elixir-autogen, elixir-format, fuzzy
msgid "Corrosive:" msgid "Corrosive:"
msgstr "Corrosive" msgstr "Corrosive"
#: lib/cannery_web/live/ammo_type_live/show.ex:24 #: lib/cannery_web/live/ammo_type_live/show.ex:23
#, elixir-autogen, elixir-format, fuzzy #, elixir-autogen, elixir-format, fuzzy
msgid "Firing type:" msgid "Firing type:"
msgstr "Type dallumage" msgstr "Type dallumage"
#: lib/cannery_web/live/ammo_type_live/show.ex:21 #: lib/cannery_web/live/ammo_type_live/show.ex:20
#, elixir-autogen, elixir-format, fuzzy #, elixir-autogen, elixir-format, fuzzy
msgid "Grains:" msgid "Grains:"
msgstr "Graines" msgstr "Graines"
#: lib/cannery_web/live/ammo_type_live/show.ex:26 #: lib/cannery_web/live/ammo_type_live/show.ex:25
#, elixir-autogen, elixir-format, fuzzy #, elixir-autogen, elixir-format, fuzzy
msgid "Incendiary:" msgid "Incendiary:"
msgstr "Incendiaire" msgstr "Incendiaire"
#: lib/cannery_web/live/ammo_type_live/show.ex:17 #: lib/cannery_web/live/ammo_type_live/show.ex:16
#, elixir-autogen, elixir-format, fuzzy #, elixir-autogen, elixir-format, fuzzy
msgid "Jacket type:" msgid "Jacket type:"
msgstr "Type de douille" msgstr "Type de douille"
#: lib/cannery_web/live/ammo_type_live/show.ex:29 #: lib/cannery_web/live/ammo_type_live/show.ex:28
#, elixir-autogen, elixir-format, fuzzy #, elixir-autogen, elixir-format, fuzzy
msgid "Manufacturer:" msgid "Manufacturer:"
msgstr "Fabricant" msgstr "Fabricant"
#: lib/cannery_web/live/ammo_type_live/show.ex:18 #: lib/cannery_web/live/ammo_type_live/show.ex:17
#, elixir-autogen, elixir-format, fuzzy #, elixir-autogen, elixir-format, fuzzy
msgid "Muzzle velocity:" msgid "Muzzle velocity:"
msgstr "Vélocité du canon" msgstr "Vélocité du canon"
#: lib/cannery_web/live/ammo_type_live/show.ex:20 #: lib/cannery_web/live/ammo_type_live/show.ex:19
#, elixir-autogen, elixir-format, fuzzy #, elixir-autogen, elixir-format, fuzzy
msgid "Powder grains per charge:" msgid "Powder grains per charge:"
msgstr "Graines de poudre par charge" msgstr "Graines de poudre par charge"
#: lib/cannery_web/live/ammo_type_live/show.ex:19 #: lib/cannery_web/live/ammo_type_live/show.ex:18
#, elixir-autogen, elixir-format, fuzzy #, elixir-autogen, elixir-format, fuzzy
msgid "Powder type:" msgid "Powder type:"
msgstr "Type de poudre" msgstr "Type de poudre"
#: lib/cannery_web/live/ammo_type_live/show.ex:22 #: lib/cannery_web/live/ammo_type_live/show.ex:21
#, elixir-autogen, elixir-format, fuzzy #, elixir-autogen, elixir-format, fuzzy
msgid "Pressure:" msgid "Pressure:"
msgstr "Pression" msgstr "Pression"
#: lib/cannery_web/live/ammo_type_live/show.ex:23 #: lib/cannery_web/live/ammo_type_live/show.ex:22
#, elixir-autogen, elixir-format, fuzzy #, elixir-autogen, elixir-format, fuzzy
msgid "Primer type:" msgid "Primer type:"
msgstr "Type damorce" msgstr "Type damorce"
#: lib/cannery_web/live/ammo_type_live/show.ex:25 #: lib/cannery_web/live/ammo_type_live/show.ex:24
#, elixir-autogen, elixir-format, fuzzy #, elixir-autogen, elixir-format, fuzzy
msgid "Tracer:" msgid "Tracer:"
msgstr "Traceuse" msgstr "Traceuse"
#: lib/cannery_web/live/ammo_type_live/show.ex:30 #: lib/cannery_web/live/ammo_type_live/show.ex:29
#, elixir-autogen, elixir-format, fuzzy #, elixir-autogen, elixir-format, fuzzy
msgid "UPC:" msgid "UPC:"
msgstr "UPC" msgstr "UPC"
@ -995,13 +994,13 @@ msgid "Average CPR"
msgstr "" msgstr ""
#: lib/cannery_web/live/ammo_type_live/index.ex:28 #: lib/cannery_web/live/ammo_type_live/index.ex:28
#: lib/cannery_web/live/ammo_type_live/show.ex:118 #: lib/cannery_web/live/ammo_type_live/show.ex:135
#, elixir-autogen, elixir-format, fuzzy #, elixir-autogen, elixir-format, fuzzy
msgid "Edit %{ammo_type_name}" msgid "Edit %{ammo_type_name}"
msgstr "Éditer %{name}" msgstr "Éditer %{name}"
#: lib/cannery_web/components/ammo_group_card.ex:40 #: lib/cannery_web/components/ammo_group_table_component.ex:233
#: lib/cannery_web/components/ammo_group_table_component.ex:231 #: lib/cannery_web/components/core_components/ammo_group_card.html.heex:17
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
msgid "Empty" msgid "Empty"
msgstr "" msgstr ""
@ -1011,7 +1010,7 @@ msgstr ""
msgid "CPR" msgid "CPR"
msgstr "" msgstr ""
#: lib/cannery_web/components/ammo_group_card.ex:75 #: lib/cannery_web/components/core_components/ammo_group_card.html.heex:46
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
msgid "CPR:" msgid "CPR:"
msgstr "" msgstr ""
@ -1021,7 +1020,7 @@ msgstr ""
msgid "Original Count" msgid "Original Count"
msgstr "Nombre original:" msgstr "Nombre original:"
#: lib/cannery_web/components/ammo_group_card.ex:47 #: lib/cannery_web/components/core_components/ammo_group_card.html.heex:21
#, elixir-autogen, elixir-format, fuzzy #, elixir-autogen, elixir-format, fuzzy
msgid "Original Count:" msgid "Original Count:"
msgstr "Nombre original:" msgstr "Nombre original:"
@ -1031,27 +1030,22 @@ msgstr "Nombre original:"
msgid "Home" msgid "Home"
msgstr "" msgstr ""
#: lib/cannery_web/live/container_live/show.html.heex:24 #: lib/cannery_web/live/container_live/show.html.heex:28
#, elixir-autogen, elixir-format, fuzzy #, elixir-autogen, elixir-format, fuzzy
msgid "Total packs:" msgid "Total packs:"
msgstr "" msgstr ""
#: lib/cannery_web/live/container_live/show.html.heex:33
#, elixir-autogen, elixir-format, fuzzy
msgid "Total rounds:"
msgstr "Nombre totale de cartouches tirées:"
#: lib/cannery_web/components/ammo_group_table_component.ex:58 #: lib/cannery_web/components/ammo_group_table_component.ex:58
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
msgid "Last used on" msgid "Last used on"
msgstr "" msgstr ""
#: lib/cannery_web/components/ammo_group_card.ex:62 #: lib/cannery_web/components/core_components/ammo_group_card.html.heex:36
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
msgid "Last used on:" msgid "Last used on:"
msgstr "" msgstr ""
#: lib/cannery_web/components/ammo_group_table_component.ex:178 #: lib/cannery_web/components/ammo_group_table_component.ex:171
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
msgid "Never used" msgid "Never used"
msgstr "" msgstr ""
@ -1062,7 +1056,7 @@ msgstr ""
msgid "Purchased on" msgid "Purchased on"
msgstr "" msgstr ""
#: lib/cannery_web/components/ammo_group_card.ex:57 #: lib/cannery_web/components/core_components/ammo_group_card.html.heex:31
#: lib/cannery_web/live/ammo_group_live/show.html.heex:30 #: lib/cannery_web/live/ammo_group_live/show.html.heex:30
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
msgid "Purchased on:" msgid "Purchased on:"
@ -1074,32 +1068,32 @@ msgid "Edit ammo"
msgstr "Éditer le type de munition" msgstr "Éditer le type de munition"
#: lib/cannery_web/live/ammo_type_live/index.html.heex:8 #: lib/cannery_web/live/ammo_type_live/index.html.heex:8
#: lib/cannery_web/live/ammo_type_live/index.html.heex:45 #: lib/cannery_web/live/ammo_type_live/index.html.heex:46
#, elixir-autogen, elixir-format, fuzzy #, elixir-autogen, elixir-format, fuzzy
msgid "No Ammo types" msgid "No Ammo types"
msgstr "Aucun type de munition" msgstr "Aucun type de munition"
#: lib/cannery_web/live/ammo_type_live/index.html.heex:32 #: lib/cannery_web/live/ammo_type_live/index.html.heex:33
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
msgid "Search catalog" msgid "Search catalog"
msgstr "" msgstr ""
#: lib/cannery_web/live/ammo_group_live/index.html.heex:57 #: lib/cannery_web/live/ammo_group_live/index.html.heex:58
#, elixir-autogen, elixir-format, fuzzy #, elixir-autogen, elixir-format, fuzzy
msgid "Search ammo" msgid "Search ammo"
msgstr "" msgstr ""
#: lib/cannery_web/live/container_live/index.html.heex:32 #: lib/cannery_web/live/container_live/index.html.heex:33
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
msgid "Search containers" msgid "Search containers"
msgstr "" msgstr ""
#: lib/cannery_web/live/tag_live/index.html.heex:35 #: lib/cannery_web/live/tag_live/index.html.heex:36
#, elixir-autogen, elixir-format, fuzzy #, elixir-autogen, elixir-format, fuzzy
msgid "Search tags" msgid "Search tags"
msgstr "" msgstr ""
#: lib/cannery_web/live/range_live/index.html.heex:82 #: lib/cannery_web/live/range_live/index.html.heex:90
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
msgid "Search shot records" msgid "Search shot records"
msgstr "" msgstr ""
@ -1112,27 +1106,27 @@ msgstr ""
#: lib/cannery_web/templates/error/error.html.heex:8 #: lib/cannery_web/templates/error/error.html.heex:8
#: lib/cannery_web/templates/layout/root.html.heex:13 #: lib/cannery_web/templates/layout/root.html.heex:13
#: lib/cannery_web/templates/layout/root.html.heex:14 #: lib/cannery_web/templates/layout/root.html.heex:14
#: lib/cannery_web/views/layout_view.ex:15 #: lib/cannery_web/views/layout_view.ex:14
#, elixir-autogen, elixir-format, fuzzy #, elixir-autogen, elixir-format, fuzzy
msgid "Cannery" msgid "Cannery"
msgstr "Logo de Cannery" msgstr "Logo de Cannery"
#: lib/cannery_web/components/user_card.ex:33 #: lib/cannery_web/components/core_components/user_card.html.heex:20
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
msgid "Email unconfirmed" msgid "Email unconfirmed"
msgstr "" msgstr ""
#: lib/cannery_web/components/user_card.ex:38 #: lib/cannery_web/components/core_components/user_card.html.heex:25
#, elixir-autogen, elixir-format, fuzzy #, elixir-autogen, elixir-format, fuzzy
msgid "User registered on%{registered_datetime}" msgid "User registered on%{registered_datetime}"
msgstr "Utilisateur·ice enregistré·e le" msgstr "Utilisateur·ice enregistré·e le"
#: lib/cannery_web/components/user_card.ex:27 #: lib/cannery_web/components/core_components/user_card.html.heex:14
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
msgid "User was confirmed at%{confirmed_datetime}" msgid "User was confirmed at%{confirmed_datetime}"
msgstr "" msgstr ""
#: lib/cannery_web/components/invite_card.ex:37 #: lib/cannery_web/components/core_components/invite_card.html.heex:16
#, elixir-autogen, elixir-format, fuzzy #, elixir-autogen, elixir-format, fuzzy
msgid "Uses Left: Unlimited" msgid "Uses Left: Unlimited"
msgstr "Utilisations restantes:" msgstr "Utilisations restantes:"
@ -1146,24 +1140,24 @@ msgstr "Utilisations restantes:"
# # Run "mix gettext.extract" to bring this file up to # # Run "mix gettext.extract" to bring this file up to
# # date. Leave "msgstr"s empty as changing them here has no # # date. Leave "msgstr"s empty as changing them here has no
# # effect: edit them in PO (.po) files instead. # # effect: edit them in PO (.po) files instead.
#: lib/cannery_web/live/home_live.html.heex:26 #: lib/cannery_web/live/home_live.html.heex:25
#, elixir-autogen, elixir-format, fuzzy #, elixir-autogen, elixir-format, fuzzy
msgid "Cannery lets you easily keep an eye on your ammo levels before and after range day" msgid "Cannery lets you easily keep an eye on your ammo levels before and after range day"
msgstr "" msgstr ""
"%{name} vous permet de facilement garder un œil sur votre niveau de munition " "%{name} vous permet de facilement garder un œil sur votre niveau de munition "
"avant et après une journée de stand" "avant et après une journée de stand"
#: lib/cannery_web/views/layout_view.ex:11 #: lib/cannery_web/views/layout_view.ex:10
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
msgid "Cannery | %{title}" msgid "Cannery | %{title}"
msgstr "" msgstr ""
#: lib/cannery_web/live/home_live.html.heex:78 #: lib/cannery_web/live/home_live.html.heex:80
#, elixir-autogen, elixir-format, fuzzy #, elixir-autogen, elixir-format, fuzzy
msgid "Registration:" msgid "Registration:"
msgstr "Senregistrer" msgstr "Senregistrer"
#: lib/cannery_web/live/home_live.html.heex:88 #: lib/cannery_web/live/home_live.html.heex:90
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
msgid "Version:" msgid "Version:"
msgstr "" msgstr ""
@ -1173,29 +1167,29 @@ msgstr ""
msgid "Welcome to Cannery" msgid "Welcome to Cannery"
msgstr "Bienvenue à %{name}" msgstr "Bienvenue à %{name}"
#: lib/cannery_web/live/invite_live/index.html.heex:70 #: lib/cannery_web/live/invite_live/index.html.heex:75
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
msgid "Disable" msgid "Disable"
msgstr "" msgstr ""
#: lib/cannery_web/live/invite_live/index.html.heex:70 #: lib/cannery_web/live/invite_live/index.html.heex:75
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
msgid "Enable" msgid "Enable"
msgstr "" msgstr ""
#: lib/cannery_web/components/invite_card.ex:32 #: lib/cannery_web/components/core_components/invite_card.html.heex:11
#, elixir-autogen, elixir-format, fuzzy #, elixir-autogen, elixir-format, fuzzy
msgid "Uses Left: %{uses_left_count}" msgid "Uses Left: %{uses_left_count}"
msgstr "Utilisations restantes:" msgstr "Utilisations restantes:"
#: lib/cannery_web/components/invite_card.ex:52 #: lib/cannery_web/components/core_components/invite_card.html.heex:31
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
msgid "Uses: %{uses_count}" msgid "Uses: %{uses_count}"
msgstr "" msgstr ""
#: lib/cannery_web/templates/user_confirmation/new.html.heex:12 #: lib/cannery_web/templates/user_confirmation/new.html.heex:13
#: lib/cannery_web/templates/user_registration/new.html.heex:20 #: lib/cannery_web/templates/user_registration/new.html.heex:20
#: lib/cannery_web/templates/user_reset_password/new.html.heex:12 #: lib/cannery_web/templates/user_reset_password/new.html.heex:13
#: lib/cannery_web/templates/user_session/new.html.heex:17 #: lib/cannery_web/templates/user_session/new.html.heex:17
#: lib/cannery_web/templates/user_settings/edit.html.heex:27 #: lib/cannery_web/templates/user_settings/edit.html.heex:27
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
@ -1207,24 +1201,3 @@ msgstr ""
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
msgid "Password" msgid "Password"
msgstr "" msgstr ""
#: lib/cannery_web/live/ammo_group_live/index.html.heex:153
#, elixir-autogen, elixir-format
msgid "Clone ammo group of %{ammo_group_count} bullets"
msgstr ""
#: lib/cannery_web/live/ammo_group_live/index.html.heex:168
#: lib/cannery_web/live/ammo_group_live/show.html.heex:80
#, elixir-autogen, elixir-format
msgid "Delete ammo group of %{ammo_group_count} bullets"
msgstr ""
#: lib/cannery_web/live/ammo_group_live/index.html.heex:141
#, elixir-autogen, elixir-format
msgid "Edit ammo group of %{ammo_group_count} bullets"
msgstr ""
#: lib/cannery_web/live/ammo_group_live/index.html.heex:129
#, elixir-autogen, elixir-format
msgid "View ammo group of %{ammo_group_count} bullets"
msgstr ""

View File

@ -23,18 +23,18 @@ msgstr ""
# # Run "mix gettext.extract" to bring this file up to # # Run "mix gettext.extract" to bring this file up to
# # date. Leave "msgstr"s empty as changing them here has no # # date. Leave "msgstr"s empty as changing them here has no
# # effect: edit them in PO (.po) files instead. # # effect: edit them in PO (.po) files instead.
#: lib/cannery/containers.ex:179 #: lib/cannery/containers.ex:200
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
msgid "Container must be empty before deleting" msgid "Container must be empty before deleting"
msgstr "Le conteneur doit être vide pour être supprimé" msgstr "Le conteneur doit être vide pour être supprimé"
#: lib/cannery_web/live/container_live/index.ex:92 #: lib/cannery_web/live/container_live/index.ex:86
#: lib/cannery_web/live/container_live/show.ex:72 #: lib/cannery_web/live/container_live/show.ex:71
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
msgid "Could not delete %{name}: %{error}" msgid "Could not delete %{name}: %{error}"
msgstr "Impossible de supprimer %{name} : %{error}" msgstr "Impossible de supprimer %{name} : %{error}"
#: lib/cannery_web/live/container_live/index.ex:80 #: lib/cannery_web/live/container_live/index.ex:74
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
msgid "Could not find that container" msgid "Could not find that container"
msgstr "Impossible de trouver ce conteneur" msgstr "Impossible de trouver ce conteneur"
@ -49,12 +49,12 @@ msgstr "Le lien de changement de mél est invalide ou a expiré."
msgid "Error" msgid "Error"
msgstr "Erreur" msgstr "Erreur"
#: lib/cannery_web/templates/error/error.html.heex:28 #: lib/cannery_web/templates/error/error.html.heex:31
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
msgid "Go back home" msgid "Go back home"
msgstr "Retour au menu principal" msgstr "Retour au menu principal"
#: lib/cannery_web/views/error_view.ex:11 #: lib/cannery_web/views/error_view.ex:10
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
msgid "Internal Server Error" msgid "Internal Server Error"
msgstr "Erreur interne du serveur" msgstr "Erreur interne du serveur"
@ -64,7 +64,7 @@ msgstr "Erreur interne du serveur"
msgid "Invalid email or password" msgid "Invalid email or password"
msgstr "Mél ou mot de passe invalide" msgstr "Mél ou mot de passe invalide"
#: lib/cannery_web/views/error_view.ex:9 #: lib/cannery_web/views/error_view.ex:8
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
msgid "Not found" msgid "Not found"
msgstr "Pas trouvé" msgstr "Pas trouvé"
@ -85,15 +85,15 @@ msgstr ""
msgid "Reset password link is invalid or it has expired." msgid "Reset password link is invalid or it has expired."
msgstr "Le lien de réinitialisation de mot de passe est invalide ou expiré." msgstr "Le lien de réinitialisation de mot de passe est invalide ou expiré."
#: lib/cannery_web/controllers/user_registration_controller.ex:22 #: lib/cannery_web/controllers/user_registration_controller.ex:23
#: lib/cannery_web/controllers/user_registration_controller.ex:51 #: lib/cannery_web/controllers/user_registration_controller.ex:52
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
msgid "Sorry, public registration is disabled" msgid "Sorry, public registration is disabled"
msgstr "Désolé, lenregistrement public est désactivé" msgstr "Désolé, lenregistrement public est désactivé"
#: lib/cannery_web/controllers/user_registration_controller.ex:12 #: lib/cannery_web/controllers/user_registration_controller.ex:13
#: lib/cannery_web/controllers/user_registration_controller.ex:41 #: lib/cannery_web/controllers/user_registration_controller.ex:42
#: lib/cannery_web/controllers/user_registration_controller.ex:70 #: lib/cannery_web/controllers/user_registration_controller.ex:71
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
msgid "Sorry, this invite was not found or expired" msgid "Sorry, this invite was not found or expired"
msgstr "Désolé, cette invitation nest pas trouvée ou est expirée" msgstr "Désolé, cette invitation nest pas trouvée ou est expirée"
@ -103,7 +103,7 @@ msgstr "Désolé, cette invitation nest pas trouvée ou est expirée"
msgid "Unable to delete user" msgid "Unable to delete user"
msgstr "Impossible de supprimer lutilisateur·ice" msgstr "Impossible de supprimer lutilisateur·ice"
#: lib/cannery_web/views/error_view.ex:10 #: lib/cannery_web/views/error_view.ex:9
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
msgid "Unauthorized" msgid "Unauthorized"
msgstr "Non autorisé·e" msgstr "Non autorisé·e"
@ -113,7 +113,7 @@ msgstr "Non autorisé·e"
msgid "User confirmation link is invalid or it has expired." msgid "User confirmation link is invalid or it has expired."
msgstr "Le lien de confirmation dutilisateur·ice est invalide ou a expiré." msgstr "Le lien de confirmation dutilisateur·ice est invalide ou a expiré."
#: lib/cannery_web/live/invite_live/index.ex:19 #: lib/cannery_web/live/invite_live/index.ex:18
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
msgid "You are not authorized to view this page" msgid "You are not authorized to view this page"
msgstr "Vous nêtes pas autorisé·e à voir cette page" msgstr "Vous nêtes pas autorisé·e à voir cette page"
@ -143,21 +143,16 @@ msgstr "nest pas valide"
msgid "must have the @ sign and no spaces" msgid "must have the @ sign and no spaces"
msgstr "doit contenir le symbole @ et aucune espace" msgstr "doit contenir le symbole @ et aucune espace"
#: lib/cannery/tags.ex:66 #: lib/cannery_web/live/container_live/show.ex:46
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
msgid "Tag not found" msgid "Tag not found"
msgstr "Tag pas trouvé" msgstr "Tag pas trouvé"
#: lib/cannery_web/live/container_live/edit_tags_component.ex:45 #: lib/cannery_web/live/container_live/edit_tags_component.ex:46
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
msgid "Tag could not be added" msgid "Tag could not be added"
msgstr "Le tag na pas pu être ajouté" msgstr "Le tag na pas pu être ajouté"
#: lib/cannery/activity_log/shot_group.ex:126
#, elixir-autogen, elixir-format
msgid "Count must be at least 1"
msgstr "Le nombre doit être au moins égal à 1"
#: lib/cannery_web/controllers/user_auth.ex:39 #: lib/cannery_web/controllers/user_auth.ex:39
#: lib/cannery_web/controllers/user_auth.ex:161 #: lib/cannery_web/controllers/user_auth.ex:161
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
@ -166,43 +161,57 @@ msgstr ""
"Vous devez dabord confirmer votre compte et vous connecter pour accéder à " "Vous devez dabord confirmer votre compte et vous connecter pour accéder à "
"cette page." "cette page."
#: lib/cannery_web/live/container_live/edit_tags_component.ex:72 #: lib/cannery_web/live/container_live/edit_tags_component.ex:73
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
msgid "Tag could not be removed" msgid "Tag could not be removed"
msgstr "Le tag na pas pu être retiré" msgstr "Le tag na pas pu être retiré"
#: lib/cannery_web/live/ammo_group_live/form_component.ex:157 #: lib/cannery_web/live/ammo_group_live/form_component.ex:160
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
msgid "Could not parse number of copies" msgid "Could not parse number of copies"
msgstr "Impossible d'analyser le nombre de copies" msgstr "Impossible d'analyser le nombre de copies"
#: lib/cannery_web/live/ammo_group_live/form_component.ex:142 #: lib/cannery_web/live/ammo_group_live/form_component.ex:150
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
msgid "Invalid number of copies, must be between 1 and %{max}. Was %{multiplier}" msgid "Invalid number of copies, must be between 1 and %{max}. Was %{multiplier}"
msgstr "Nombre de copies invalide, doit être 1 et %{max}. Été %{multiplier}" msgstr "Nombre de copies invalide, doit être 1 et %{max}. Été %{multiplier}"
#: lib/cannery/ammo.ex:686 #: lib/cannery/ammo.ex:1015
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
msgid "Invalid multiplier" msgid "Invalid multiplier"
msgstr "Multiplicateur invalide" msgstr "Multiplicateur invalide"
#: lib/cannery/ammo/ammo_group.ex:97 #: lib/cannery/ammo/ammo_group.ex:92
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
msgid "Please select an ammo type and container" msgid "Please select an ammo type and container"
msgstr "Veuillez choisir un type de munitions et un conteneur" msgstr "Veuillez choisir un type de munitions et un conteneur"
#: lib/cannery_web/live/range_live/index.html.heex:67 #: lib/cannery_web/live/range_live/index.html.heex:74
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
msgid "Your browser does not support the canvas element." msgid "Your browser does not support the canvas element."
msgstr "" msgstr ""
#: lib/cannery/activity_log/shot_group.ex:77 #: lib/cannery/activity_log/shot_group.ex:72
#, elixir-autogen, elixir-format, fuzzy #, elixir-autogen, elixir-format, fuzzy
msgid "Please select a valid user and ammo pack" msgid "Please select a valid user and ammo pack"
msgstr "Veuillez choisir un utilisateur valide et un groupe de munitions" msgstr "Veuillez choisir un utilisateur valide et un groupe de munitions"
#: lib/cannery/activity_log/shot_group.ex:83 #: lib/cannery/activity_log/shot_group.ex:86
#: lib/cannery/activity_log/shot_group.ex:121 #, elixir-autogen, elixir-format
msgid "Ammo left can be at most %{count} rounds"
msgstr ""
#: lib/cannery/activity_log/shot_group.ex:82
#, elixir-autogen, elixir-format
msgid "Ammo left must be at least 0"
msgstr ""
#: lib/cannery/activity_log/shot_group.ex:119
#, elixir-autogen, elixir-format, fuzzy #, elixir-autogen, elixir-format, fuzzy
msgid "Count must be less than %{count} shots" msgid "Count can be at most %{count} shots"
msgstr "La quantité doit être inférieur à %{count}" msgstr "La quantité doit être inférieur à %{count}"
#: lib/cannery/activity_log/shot_group.ex:78
#, elixir-autogen, elixir-format
msgid "can't be blank"
msgstr ""

View File

@ -23,31 +23,31 @@ msgstr ""
## Run "mix gettext.extract" to bring this file up to ## Run "mix gettext.extract" to bring this file up to
## date. Leave "msgstr"s empty as changing them here has no ## date. Leave "msgstr"s empty as changing them here has no
## effect: edit them in PO (.po) files instead. ## effect: edit them in PO (.po) files instead.
#: lib/cannery_web/live/ammo_type_live/form_component.ex:86 #: lib/cannery_web/live/ammo_type_live/form_component.ex:89
#: lib/cannery_web/live/container_live/form_component.ex:89 #: lib/cannery_web/live/container_live/form_component.ex:89
#: lib/cannery_web/live/invite_live/form_component.ex:80 #: lib/cannery_web/live/invite_live/form_component.ex:80
#: lib/cannery_web/live/tag_live/form_component.ex:79 #: lib/cannery_web/live/tag_live/form_component.ex:78
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
msgid "%{name} created successfully" msgid "%{name} created successfully"
msgstr "%{name} créé· avec succès" msgstr "%{name} créé· avec succès"
#: lib/cannery_web/live/ammo_type_live/index.ex:73 #: lib/cannery_web/live/ammo_type_live/index.ex:72
#: lib/cannery_web/live/ammo_type_live/show.ex:55 #: lib/cannery_web/live/ammo_type_live/show.ex:54
#: lib/cannery_web/live/tag_live/index.ex:64 #: lib/cannery_web/live/tag_live/index.ex:65
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
msgid "%{name} deleted succesfully" msgid "%{name} deleted succesfully"
msgstr "%{name} supprimé· avec succès" msgstr "%{name} supprimé· avec succès"
#: lib/cannery_web/live/container_live/index.ex:85 #: lib/cannery_web/live/container_live/index.ex:79
#: lib/cannery_web/live/container_live/show.ex:62 #: lib/cannery_web/live/container_live/show.ex:61
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
msgid "%{name} has been deleted" msgid "%{name} has been deleted"
msgstr "%{name} a été supprimé·e" msgstr "%{name} a été supprimé·e"
#: lib/cannery_web/live/ammo_type_live/form_component.ex:67 #: lib/cannery_web/live/ammo_type_live/form_component.ex:70
#: lib/cannery_web/live/container_live/form_component.ex:70 #: lib/cannery_web/live/container_live/form_component.ex:70
#: lib/cannery_web/live/invite_live/form_component.ex:62 #: lib/cannery_web/live/invite_live/form_component.ex:62
#: lib/cannery_web/live/tag_live/form_component.ex:61 #: lib/cannery_web/live/tag_live/form_component.ex:60
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
msgid "%{name} updated successfully" msgid "%{name} updated successfully"
msgstr "%{name} mis à jour avec succès" msgstr "%{name} mis à jour avec succès"
@ -59,23 +59,23 @@ msgstr ""
"Un lien pour confirmer votre changement de mél a été envoyé à la nouvelle " "Un lien pour confirmer votre changement de mél a été envoyé à la nouvelle "
"adresse." "adresse."
#: lib/cannery_web/live/invite_live/index.html.heex:105 #: lib/cannery_web/live/invite_live/index.html.heex:110
#: lib/cannery_web/live/invite_live/index.html.heex:133 #: lib/cannery_web/live/invite_live/index.html.heex:138
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
msgid "Are you sure you want to delete %{email}? This action is permanent!" msgid "Are you sure you want to delete %{email}? This action is permanent!"
msgstr "" msgstr ""
"Êtes-vous certain·e de supprimer %{email}? Cette action est définitive!" "Êtes-vous certain·e de supprimer %{email}? Cette action est définitive!"
#: lib/cannery_web/live/container_live/index.html.heex:98 #: lib/cannery_web/live/container_live/index.html.heex:99
#: lib/cannery_web/live/container_live/index.html.heex:150 #: lib/cannery_web/live/container_live/index.html.heex:155
#: lib/cannery_web/live/container_live/show.html.heex:55 #: lib/cannery_web/live/container_live/show.html.heex:52
#: lib/cannery_web/live/tag_live/index.html.heex:62 #: lib/cannery_web/live/tag_live/index.html.heex:63
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
msgid "Are you sure you want to delete %{name}?" msgid "Are you sure you want to delete %{name}?"
msgstr "Êtes-vous certain·e de supprimer %{name}?" msgstr "Êtes-vous certain·e de supprimer %{name}?"
#: lib/cannery_web/live/ammo_group_live/index.html.heex:166 #: lib/cannery_web/live/ammo_group_live/index.html.heex:167
#: lib/cannery_web/live/ammo_group_live/show.html.heex:78 #: lib/cannery_web/live/ammo_group_live/show.html.heex:74
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
msgid "Are you sure you want to delete this ammo?" msgid "Are you sure you want to delete this ammo?"
msgstr "Êtes-vous certain·e de supprimer cette munition?" msgstr "Êtes-vous certain·e de supprimer cette munition?"
@ -85,7 +85,7 @@ msgstr "Êtes-vous certain·e de supprimer cette munition?"
msgid "Are you sure you want to delete your account?" msgid "Are you sure you want to delete your account?"
msgstr "Êtes-vous certain·e de supprimer votre compte?" msgstr "Êtes-vous certain·e de supprimer votre compte?"
#: lib/cannery_web/components/topbar.ex:104 #: lib/cannery_web/components/core_components/topbar.html.heex:89
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
msgid "Are you sure you want to log out?" msgid "Are you sure you want to log out?"
msgstr "Êtes-vous certain·e de vouloir vous déconnecter?" msgstr "Êtes-vous certain·e de vouloir vous déconnecter?"
@ -124,7 +124,7 @@ msgstr "Mot de passe réinitialiser avec succès."
msgid "Password updated successfully." msgid "Password updated successfully."
msgstr "Mot de passe mis à jour avec succès." msgstr "Mot de passe mis à jour avec succès."
#: lib/cannery_web/controllers/user_registration_controller.ex:65 #: lib/cannery_web/controllers/user_registration_controller.ex:66
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
msgid "Please check your email to verify your account" msgid "Please check your email to verify your account"
msgstr "Veuillez vérifier votre mél pour confirmer votre compte" msgstr "Veuillez vérifier votre mél pour confirmer votre compte"
@ -152,44 +152,44 @@ msgstr ""
"Êtes-vous certain·e de vouloir retirer le tag %{tag_name} de " "Êtes-vous certain·e de vouloir retirer le tag %{tag_name} de "
"%{container_name}?" "%{container_name}?"
#: lib/cannery_web/live/container_live/edit_tags_component.ex:50 #: lib/cannery_web/live/container_live/edit_tags_component.ex:51
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
msgid "%{name} added successfully" msgid "%{name} added successfully"
msgstr "%{name} a été ajouté avec succès" msgstr "%{name} a été ajouté avec succès"
#: lib/cannery_web/live/container_live/show.ex:39 #: lib/cannery_web/live/container_live/show.ex:38
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
msgid "%{tag_name} has been removed from %{container_name}" msgid "%{tag_name} has been removed from %{container_name}"
msgstr "%{tag_name} a été retiré de %{container_name}" msgstr "%{tag_name} a été retiré de %{container_name}"
#: lib/cannery_web/live/container_live/edit_tags_component.html.heex:52 #: lib/cannery_web/live/container_live/edit_tags_component.html.heex:53
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
msgid "Adding..." msgid "Adding..."
msgstr "Ajout en cours…" msgstr "Ajout en cours…"
#: lib/cannery_web/components/add_shot_group_component.ex:56 #: lib/cannery_web/components/add_shot_group_component.ex:60
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
msgid "Shots recorded successfully" msgid "Shots recorded successfully"
msgstr "Tirs enregistré avec succès" msgstr "Tirs enregistré avec succès"
#: lib/cannery_web/live/range_live/index.html.heex:27 #: lib/cannery_web/live/range_live/index.html.heex:34
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
msgid "Are you sure you want to unstage this ammo?" msgid "Are you sure you want to unstage this ammo?"
msgstr "Êtes-vous certain·e de vouloir désélectionner cette munition?" msgstr "Êtes-vous certain·e de vouloir désélectionner cette munition?"
#: lib/cannery_web/live/ammo_group_live/show.ex:143 #: lib/cannery_web/live/ammo_group_live/show.ex:159
#: lib/cannery_web/live/range_live/index.html.heex:119 #: lib/cannery_web/live/range_live/index.html.heex:127
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
msgid "Are you sure you want to delete this shot record?" msgid "Are you sure you want to delete this shot record?"
msgstr "Êtes-vous certain·e de vouloir supprimer cet enregistrement de tir?" msgstr "Êtes-vous certain·e de vouloir supprimer cet enregistrement de tir?"
#: lib/cannery_web/live/ammo_group_live/show.ex:80 #: lib/cannery_web/live/ammo_group_live/show.ex:81
#: lib/cannery_web/live/range_live/index.ex:80 #: lib/cannery_web/live/range_live/index.ex:79
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
msgid "Shot records deleted succesfully" msgid "Shot records deleted succesfully"
msgstr "Enregistrements de tir supprimés avec succès" msgstr "Enregistrements de tir supprimés avec succès"
#: lib/cannery_web/live/range_live/form_component.ex:55 #: lib/cannery_web/live/range_live/form_component.ex:54
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
msgid "Shot records updated successfully" msgid "Shot records updated successfully"
msgstr "Enregistrements de tir mis à jour avec succès" msgstr "Enregistrements de tir mis à jour avec succès"
@ -199,17 +199,17 @@ msgstr "Enregistrements de tir mis à jour avec succès"
msgid "%{email} confirmed successfully." msgid "%{email} confirmed successfully."
msgstr "%{email} confirmé avec succès." msgstr "%{email} confirmé avec succès."
#: lib/cannery_web/components/move_ammo_group_component.ex:53 #: lib/cannery_web/components/move_ammo_group_component.ex:54
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
msgid "Ammo moved to %{name} successfully" msgid "Ammo moved to %{name} successfully"
msgstr "Munition déplacée à %{name} avec succès" msgstr "Munition déplacée à %{name} avec succès"
#: lib/cannery_web/live/invite_live/index.ex:127 #: lib/cannery_web/live/invite_live/index.ex:126
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
msgid "Copied to clipboard" msgid "Copied to clipboard"
msgstr "Copié dans le presse-papier" msgstr "Copié dans le presse-papier"
#: lib/cannery_web/live/container_live/edit_tags_component.ex:77 #: lib/cannery_web/live/container_live/edit_tags_component.ex:78
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
msgid "%{name} removed successfully" msgid "%{name} removed successfully"
msgstr "%{name} retiré avec succès" msgstr "%{name} retiré avec succès"
@ -236,70 +236,70 @@ msgid "Language updated successfully."
msgstr "Langue mise à jour avec succès." msgstr "Langue mise à jour avec succès."
#: lib/cannery_web/live/ammo_group_live/index.ex:89 #: lib/cannery_web/live/ammo_group_live/index.ex:89
#: lib/cannery_web/live/ammo_group_live/show.ex:54 #: lib/cannery_web/live/ammo_group_live/show.ex:55
#, elixir-autogen, elixir-format, fuzzy #, elixir-autogen, elixir-format, fuzzy
msgid "Ammo deleted succesfully" msgid "Ammo deleted succesfully"
msgstr "Groupe de munition supprimé avec succès" msgstr "Groupe de munition supprimé avec succès"
#: lib/cannery_web/live/range_live/index.ex:94 #: lib/cannery_web/live/range_live/index.ex:93
#, elixir-autogen, elixir-format, fuzzy #, elixir-autogen, elixir-format, fuzzy
msgid "Ammo unstaged succesfully" msgid "Ammo unstaged succesfully"
msgstr "Groupe de munition désélectionner avec succès" msgstr "Groupe de munition désélectionner avec succès"
#: lib/cannery_web/live/ammo_group_live/form_component.ex:118 #: lib/cannery_web/live/ammo_group_live/form_component.ex:126
#, elixir-autogen, elixir-format, fuzzy #, elixir-autogen, elixir-format, fuzzy
msgid "Ammo updated successfully" msgid "Ammo updated successfully"
msgstr "Groupe de munition mis à jour avec succès" msgstr "Groupe de munition mis à jour avec succès"
#: lib/cannery_web/live/ammo_group_live/form_component.ex:178 #: lib/cannery_web/live/ammo_group_live/form_component.ex:185
#, elixir-autogen, elixir-format, fuzzy #, elixir-autogen, elixir-format, fuzzy
msgid "Ammo added successfully" msgid "Ammo added successfully"
msgid_plural "Ammo added successfully" msgid_plural "Ammo added successfully"
msgstr[0] "Groupe de munition mis à jour avec succès" msgstr[0] "Groupe de munition mis à jour avec succès"
msgstr[1] "Groupe de munition mis à jour avec succès" msgstr[1] "Groupe de munition mis à jour avec succès"
#: lib/cannery_web/live/ammo_type_live/index.html.heex:95 #: lib/cannery_web/live/ammo_type_live/index.html.heex:96
#: lib/cannery_web/live/ammo_type_live/show.html.heex:29 #: lib/cannery_web/live/ammo_type_live/show.html.heex:29
#, elixir-autogen, elixir-format, fuzzy #, elixir-autogen, elixir-format, fuzzy
msgid "Are you sure you want to delete %{name}? This will delete all %{name} type ammo as well!" msgid "Are you sure you want to delete %{name}? This will delete all %{name} type ammo as well!"
msgstr "Êtes-vous certain·e de supprimer %{name}?" msgstr "Êtes-vous certain·e de supprimer %{name}?"
#: lib/cannery_web/live/home_live.html.heex:65 #: lib/cannery_web/live/home_live.html.heex:63
#, elixir-autogen, elixir-format, fuzzy #, elixir-autogen, elixir-format, fuzzy
msgid "Register to setup Cannery" msgid "Register to setup Cannery"
msgstr "Senregistrer pour mettre en place %{name}" msgstr "Senregistrer pour mettre en place %{name}"
#: lib/cannery_web/live/invite_live/index.ex:54 #: lib/cannery_web/live/invite_live/index.ex:53
#, elixir-autogen, elixir-format, fuzzy #, elixir-autogen, elixir-format, fuzzy
msgid "%{invite_name} deleted succesfully" msgid "%{invite_name} deleted succesfully"
msgstr "%{name} supprimé· avec succès" msgstr "%{name} supprimé· avec succès"
#: lib/cannery_web/live/invite_live/index.ex:115 #: lib/cannery_web/live/invite_live/index.ex:114
#, elixir-autogen, elixir-format, fuzzy #, elixir-autogen, elixir-format, fuzzy
msgid "%{invite_name} disabled succesfully" msgid "%{invite_name} disabled succesfully"
msgstr "%{name} supprimé·e avec succès" msgstr "%{name} supprimé·e avec succès"
#: lib/cannery_web/live/invite_live/index.ex:91 #: lib/cannery_web/live/invite_live/index.ex:90
#, elixir-autogen, elixir-format, fuzzy #, elixir-autogen, elixir-format, fuzzy
msgid "%{invite_name} enabled succesfully" msgid "%{invite_name} enabled succesfully"
msgstr "%{name} activé·e avec succès" msgstr "%{name} activé·e avec succès"
#: lib/cannery_web/live/invite_live/index.ex:69 #: lib/cannery_web/live/invite_live/index.ex:68
#, elixir-autogen, elixir-format, fuzzy #, elixir-autogen, elixir-format, fuzzy
msgid "%{invite_name} updated succesfully" msgid "%{invite_name} updated succesfully"
msgstr "%{name} mis à jour avec succès" msgstr "%{name} mis à jour avec succès"
#: lib/cannery_web/live/invite_live/index.ex:138 #: lib/cannery_web/live/invite_live/index.ex:135
#, elixir-autogen, elixir-format, fuzzy #, elixir-autogen, elixir-format, fuzzy
msgid "%{user_email} deleted succesfully" msgid "%{user_email} deleted succesfully"
msgstr "%{name} supprimé· avec succès" msgstr "%{name} supprimé· avec succès"
#: lib/cannery_web/live/invite_live/index.html.heex:53 #: lib/cannery_web/live/invite_live/index.html.heex:58
#, elixir-autogen, elixir-format, fuzzy #, elixir-autogen, elixir-format, fuzzy
msgid "Are you sure you want to delete the invite for %{invite_name}?" msgid "Are you sure you want to delete the invite for %{invite_name}?"
msgstr "Êtes-vous certain·e de supprimer linvitation pour %{name}?" msgstr "Êtes-vous certain·e de supprimer linvitation pour %{name}?"
#: lib/cannery_web/live/invite_live/index.html.heex:80 #: lib/cannery_web/live/invite_live/index.html.heex:85
#, elixir-autogen, elixir-format, fuzzy #, elixir-autogen, elixir-format, fuzzy
msgid "Are you sure you want to make %{invite_name} unlimited?" msgid "Are you sure you want to make %{invite_name} unlimited?"
msgstr "Êtes-vous certain·e de vouloir rendre %{name} illimité?" msgstr "Êtes-vous certain·e de vouloir rendre %{name} illimité?"

View File

@ -77,11 +77,11 @@ msgstr ""
msgid "Invite someone new!" msgid "Invite someone new!"
msgstr "" msgstr ""
#: lib/cannery_web/components/topbar.ex:137 #: lib/cannery_web/components/core_components/topbar.html.heex:122
#: lib/cannery_web/templates/user_confirmation/new.html.heex:31 #: lib/cannery_web/templates/user_confirmation/new.html.heex:32
#: lib/cannery_web/templates/user_registration/new.html.heex:44 #: lib/cannery_web/templates/user_registration/new.html.heex:44
#: lib/cannery_web/templates/user_reset_password/edit.html.heex:45 #: lib/cannery_web/templates/user_reset_password/edit.html.heex:45
#: lib/cannery_web/templates/user_reset_password/new.html.heex:31 #: lib/cannery_web/templates/user_reset_password/new.html.heex:32
#: lib/cannery_web/templates/user_session/new.html.heex:3 #: lib/cannery_web/templates/user_session/new.html.heex:3
#: lib/cannery_web/templates/user_session/new.html.heex:28 #: lib/cannery_web/templates/user_session/new.html.heex:28
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
@ -108,19 +108,19 @@ msgstr ""
msgid "New Tag" msgid "New Tag"
msgstr "" msgstr ""
#: lib/cannery_web/components/topbar.ex:129 #: lib/cannery_web/components/core_components/topbar.html.heex:114
#: lib/cannery_web/templates/user_confirmation/new.html.heex:28 #: lib/cannery_web/templates/user_confirmation/new.html.heex:29
#: lib/cannery_web/templates/user_registration/new.html.heex:3 #: lib/cannery_web/templates/user_registration/new.html.heex:3
#: lib/cannery_web/templates/user_registration/new.html.heex:37 #: lib/cannery_web/templates/user_registration/new.html.heex:37
#: lib/cannery_web/templates/user_reset_password/edit.html.heex:42 #: lib/cannery_web/templates/user_reset_password/edit.html.heex:42
#: lib/cannery_web/templates/user_reset_password/new.html.heex:28 #: lib/cannery_web/templates/user_reset_password/new.html.heex:29
#: lib/cannery_web/templates/user_session/new.html.heex:39 #: lib/cannery_web/templates/user_session/new.html.heex:39
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
msgid "Register" msgid "Register"
msgstr "" msgstr ""
#: lib/cannery_web/templates/user_confirmation/new.html.heex:3 #: lib/cannery_web/templates/user_confirmation/new.html.heex:3
#: lib/cannery_web/templates/user_confirmation/new.html.heex:15 #: lib/cannery_web/templates/user_confirmation/new.html.heex:16
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
msgid "Resend confirmation instructions" msgid "Resend confirmation instructions"
msgstr "" msgstr ""
@ -142,17 +142,17 @@ msgstr ""
msgid "Save" msgid "Save"
msgstr "" msgstr ""
#: lib/cannery_web/templates/user_reset_password/new.html.heex:15 #: lib/cannery_web/templates/user_reset_password/new.html.heex:16
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
msgid "Send instructions to reset password" msgid "Send instructions to reset password"
msgstr "" msgstr ""
#: lib/cannery_web/live/container_live/show.html.heex:78 #: lib/cannery_web/live/container_live/show.html.heex:75
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
msgid "Why not add one?" msgid "Why not add one?"
msgstr "" msgstr ""
#: lib/cannery_web/live/container_live/edit_tags_component.html.heex:50 #: lib/cannery_web/live/container_live/edit_tags_component.html.heex:51
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
msgid "Add" msgid "Add"
msgstr "" msgstr ""
@ -167,9 +167,9 @@ msgstr ""
msgid "Why not get some ready to shoot?" msgid "Why not get some ready to shoot?"
msgstr "" msgstr ""
#: lib/cannery_web/live/ammo_group_live/index.html.heex:102 #: lib/cannery_web/live/ammo_group_live/index.html.heex:103
#: lib/cannery_web/live/ammo_group_live/show.html.heex:107 #: lib/cannery_web/live/ammo_group_live/show.html.heex:103
#: lib/cannery_web/live/range_live/index.html.heex:38 #: lib/cannery_web/live/range_live/index.html.heex:45
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
msgid "Record shots" msgid "Record shots"
msgstr "" msgstr ""
@ -179,17 +179,12 @@ msgstr ""
msgid "Add another container!" msgid "Add another container!"
msgstr "" msgstr ""
#: lib/cannery_web/live/ammo_group_live/show.html.heex:100
#, elixir-autogen, elixir-format
msgid "Move containers"
msgstr ""
#: lib/cannery_web/components/move_ammo_group_component.ex:126 #: lib/cannery_web/components/move_ammo_group_component.ex:126
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
msgid "Select" msgid "Select"
msgstr "" msgstr ""
#: lib/cannery_web/live/invite_live/index.html.heex:33 #: lib/cannery_web/live/invite_live/index.html.heex:38
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
msgid "Copy to clipboard" msgid "Copy to clipboard"
msgstr "" msgstr ""
@ -214,7 +209,7 @@ msgstr ""
msgid "Change language" msgid "Change language"
msgstr "" msgstr ""
#: lib/cannery_web/live/ammo_group_live/show.html.heex:59 #: lib/cannery_web/live/ammo_group_live/show.html.heex:55
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
msgid "View in Catalog" msgid "View in Catalog"
msgstr "" msgstr ""
@ -225,23 +220,25 @@ msgid "add an ammo type first"
msgstr "" msgstr ""
#: lib/cannery_web/components/move_ammo_group_component.ex:80 #: lib/cannery_web/components/move_ammo_group_component.ex:80
#: lib/cannery_web/live/ammo_group_live/index.html.heex:120
#: lib/cannery_web/live/ammo_group_live/show.html.heex:96
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
msgid "Move ammo" msgid "Move ammo"
msgstr "" msgstr ""
#: lib/cannery_web/live/invite_live/index.html.heex:85 #: lib/cannery_web/live/invite_live/index.html.heex:90
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
msgid "Set Unlimited" msgid "Set Unlimited"
msgstr "" msgstr ""
#: lib/cannery_web/live/ammo_group_live/show.html.heex:93 #: lib/cannery_web/live/ammo_group_live/show.html.heex:89
#: lib/cannery_web/live/range_live/index.html.heex:31 #: lib/cannery_web/live/range_live/index.html.heex:38
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
msgid "Stage for range" msgid "Stage for range"
msgstr "" msgstr ""
#: lib/cannery_web/live/ammo_group_live/show.html.heex:92 #: lib/cannery_web/live/ammo_group_live/show.html.heex:88
#: lib/cannery_web/live/range_live/index.html.heex:30 #: lib/cannery_web/live/range_live/index.html.heex:37
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
msgid "Unstage from range" msgid "Unstage from range"
msgstr "" msgstr ""
@ -251,106 +248,123 @@ msgstr ""
msgid "Export Data as JSON" msgid "Export Data as JSON"
msgstr "" msgstr ""
#: lib/cannery_web/live/ammo_type_live/index.html.heex:83 #: lib/cannery_web/live/ammo_type_live/index.html.heex:84
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
msgid "Clone %{ammo_type_name}" msgid "Clone %{ammo_type_name}"
msgstr "" msgstr ""
#: lib/cannery_web/live/container_live/index.html.heex:86 #: lib/cannery_web/live/container_live/index.html.heex:87
#: lib/cannery_web/live/container_live/index.html.heex:138 #: lib/cannery_web/live/container_live/index.html.heex:143
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
msgid "Clone %{container_name}" msgid "Clone %{container_name}"
msgstr "" msgstr ""
#: lib/cannery_web/live/invite_live/index.html.heex:30 #: lib/cannery_web/live/invite_live/index.html.heex:35
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
msgid "Copy invite link for %{invite_name}" msgid "Copy invite link for %{invite_name}"
msgstr "" msgstr ""
#: lib/cannery_web/live/ammo_type_live/index.html.heex:102 #: lib/cannery_web/live/ammo_type_live/index.html.heex:103
#: lib/cannery_web/live/ammo_type_live/show.html.heex:36 #: lib/cannery_web/live/ammo_type_live/show.html.heex:36
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
msgid "Delete %{ammo_type_name}" msgid "Delete %{ammo_type_name}"
msgstr "" msgstr ""
#: lib/cannery_web/live/container_live/index.html.heex:101 #: lib/cannery_web/live/container_live/index.html.heex:102
#: lib/cannery_web/live/container_live/index.html.heex:153 #: lib/cannery_web/live/container_live/index.html.heex:158
#: lib/cannery_web/live/container_live/show.html.heex:58 #: lib/cannery_web/live/container_live/show.html.heex:55
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
msgid "Delete %{container_name}" msgid "Delete %{container_name}"
msgstr "" msgstr ""
#: lib/cannery_web/live/tag_live/index.html.heex:64 #: lib/cannery_web/live/tag_live/index.html.heex:65
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
msgid "Delete %{tag_name}" msgid "Delete %{tag_name}"
msgstr "" msgstr ""
#: lib/cannery_web/live/invite_live/index.html.heex:58 #: lib/cannery_web/live/invite_live/index.html.heex:63
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
msgid "Delete invite for %{invite_name}" msgid "Delete invite for %{invite_name}"
msgstr "" msgstr ""
#: lib/cannery_web/live/ammo_group_live/show.ex:145 #: lib/cannery_web/live/ammo_group_live/show.ex:161
#: lib/cannery_web/live/range_live/index.html.heex:122 #: lib/cannery_web/live/range_live/index.html.heex:130
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
msgid "Delete shot record of %{shot_group_count} shots" msgid "Delete shot record of %{shot_group_count} shots"
msgstr "" msgstr ""
#: lib/cannery_web/live/ammo_type_live/index.html.heex:73 #: lib/cannery_web/live/ammo_type_live/index.html.heex:74
#: lib/cannery_web/live/ammo_type_live/show.html.heex:19 #: lib/cannery_web/live/ammo_type_live/show.html.heex:19
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
msgid "Edit %{ammo_type_name}" msgid "Edit %{ammo_type_name}"
msgstr "" msgstr ""
#: lib/cannery_web/live/container_live/index.html.heex:76 #: lib/cannery_web/live/container_live/index.html.heex:77
#: lib/cannery_web/live/container_live/index.html.heex:128 #: lib/cannery_web/live/container_live/index.html.heex:133
#: lib/cannery_web/live/container_live/show.html.heex:45 #: lib/cannery_web/live/container_live/show.html.heex:42
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
msgid "Edit %{container_name}" msgid "Edit %{container_name}"
msgstr "" msgstr ""
#: lib/cannery_web/live/tag_live/index.html.heex:51 #: lib/cannery_web/live/tag_live/index.html.heex:52
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
msgid "Edit %{tag_name}" msgid "Edit %{tag_name}"
msgstr "" msgstr ""
#: lib/cannery_web/live/ammo_group_live/show.html.heex:66 #: lib/cannery_web/live/ammo_group_live/index.html.heex:142
#: lib/cannery_web/live/ammo_group_live/show.html.heex:62
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
msgid "Edit ammo group of %{ammo_group_count} bullets" msgid "Edit ammo group of %{ammo_group_count} bullets"
msgstr "" msgstr ""
#: lib/cannery_web/live/invite_live/index.html.heex:41 #: lib/cannery_web/live/invite_live/index.html.heex:46
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
msgid "Edit invite for %{invite_name}" msgid "Edit invite for %{invite_name}"
msgstr "" msgstr ""
#: lib/cannery_web/live/ammo_group_live/show.ex:130 #: lib/cannery_web/live/ammo_group_live/show.ex:146
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
msgid "Edit shot group of %{shot_group_count} shots" msgid "Edit shot group of %{shot_group_count} shots"
msgstr "" msgstr ""
#: lib/cannery_web/live/range_live/index.html.heex:105 #: lib/cannery_web/live/range_live/index.html.heex:113
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
msgid "Edit shot record of %{shot_group_count} shots" msgid "Edit shot record of %{shot_group_count} shots"
msgstr "" msgstr ""
#: lib/cannery_web/live/ammo_group_live/index.html.heex:95 #: lib/cannery_web/live/ammo_group_live/index.html.heex:96
#, elixir-autogen, elixir-format, fuzzy #, elixir-autogen, elixir-format, fuzzy
msgid "Stage" msgid "Stage"
msgstr "" msgstr ""
#: lib/cannery_web/live/container_live/index.html.heex:64 #: lib/cannery_web/live/container_live/index.html.heex:65
#: lib/cannery_web/live/container_live/index.html.heex:117 #: lib/cannery_web/live/container_live/index.html.heex:122
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
msgid "Tag %{container_name}" msgid "Tag %{container_name}"
msgstr "" msgstr ""
#: lib/cannery_web/live/ammo_group_live/index.html.heex:94 #: lib/cannery_web/live/ammo_group_live/index.html.heex:95
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
msgid "Unstage" msgid "Unstage"
msgstr "" msgstr ""
#: lib/cannery_web/live/ammo_type_live/index.html.heex:63 #: lib/cannery_web/live/ammo_type_live/index.html.heex:64
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
msgid "View %{ammo_type_name}" msgid "View %{ammo_type_name}"
msgstr "" msgstr ""
#: lib/cannery_web/live/ammo_group_live/index.html.heex:154
#, elixir-autogen, elixir-format, fuzzy
msgid "Clone ammo group of %{ammo_group_count} bullets"
msgstr ""
#: lib/cannery_web/live/ammo_group_live/index.html.heex:169
#: lib/cannery_web/live/ammo_group_live/show.html.heex:76
#, elixir-autogen, elixir-format, fuzzy
msgid "Delete ammo group of %{ammo_group_count} bullets"
msgstr ""
#: lib/cannery_web/live/ammo_group_live/index.html.heex:130
#, elixir-autogen, elixir-format, fuzzy
msgid "View ammo group of %{ammo_group_count} bullets"
msgstr ""

View File

@ -12,23 +12,23 @@ msgstr ""
"Content-Transfer-Encoding: 8bit\n" "Content-Transfer-Encoding: 8bit\n"
"X-Generator: Translate Toolkit 3.7.3\n" "X-Generator: Translate Toolkit 3.7.3\n"
#: lib/cannery_web/live/home_live.html.heex:46 #: lib/cannery_web/live/home_live.html.heex:44
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
msgid "Access from any internet-capable device" msgid "Access from any internet-capable device"
msgstr "" msgstr ""
#: lib/cannery_web/live/invite_live/index.html.heex:94 #: lib/cannery_web/live/invite_live/index.html.heex:99
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
msgid "Admins" msgid "Admins"
msgstr "" msgstr ""
#: lib/cannery_web/live/home_live.html.heex:60 #: lib/cannery_web/live/home_live.html.heex:58
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
msgid "Admins:" msgid "Admins:"
msgstr "" msgstr ""
#: lib/cannery_web/components/core_components/topbar.html.heex:58
#: lib/cannery_web/components/shot_group_table_component.ex:41 #: lib/cannery_web/components/shot_group_table_component.ex:41
#: lib/cannery_web/components/topbar.ex:73
#: lib/cannery_web/live/ammo_group_live/index.ex:70 #: lib/cannery_web/live/ammo_group_live/index.ex:70
#: lib/cannery_web/live/ammo_group_live/index.ex:79 #: lib/cannery_web/live/ammo_group_live/index.ex:79
#: lib/cannery_web/live/ammo_group_live/index.html.heex:3 #: lib/cannery_web/live/ammo_group_live/index.html.heex:3
@ -95,9 +95,9 @@ msgstr ""
msgid "Container" msgid "Container"
msgstr "" msgstr ""
#: lib/cannery_web/components/topbar.ex:57 #: lib/cannery_web/components/core_components/topbar.html.heex:42
#: lib/cannery_web/live/container_live/index.ex:49 #: lib/cannery_web/live/container_live/index.ex:45
#: lib/cannery_web/live/container_live/index.ex:58 #: lib/cannery_web/live/container_live/index.ex:54
#: lib/cannery_web/live/container_live/index.html.heex:3 #: lib/cannery_web/live/container_live/index.html.heex:3
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
msgid "Containers" msgid "Containers"
@ -115,36 +115,36 @@ msgstr ""
msgid "Count" msgid "Count"
msgstr "" msgstr ""
#: lib/cannery_web/components/ammo_group_card.ex:39 #: lib/cannery_web/components/core_components/ammo_group_card.html.heex:16
#: lib/cannery_web/live/ammo_group_live/show.html.heex:8 #: lib/cannery_web/live/ammo_group_live/show.html.heex:8
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
msgid "Count:" msgid "Count:"
msgstr "" msgstr ""
#: lib/cannery_web/components/container_table_component.ex:47 #: lib/cannery_web/components/container_table_component.ex:46
#: lib/cannery_web/live/ammo_type_live/form_component.html.heex:25 #: lib/cannery_web/live/ammo_type_live/form_component.html.heex:25
#: lib/cannery_web/live/container_live/form_component.html.heex:28 #: lib/cannery_web/live/container_live/form_component.html.heex:28
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
msgid "Description" msgid "Description"
msgstr "" msgstr ""
#: lib/cannery_web/components/container_card.ex:39 #: lib/cannery_web/components/core_components/container_card.html.heex:16
#: lib/cannery_web/live/container_live/show.html.heex:7 #: lib/cannery_web/live/container_live/show.html.heex:7
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
msgid "Description:" msgid "Description:"
msgstr "" msgstr ""
#: lib/cannery_web/live/home_live.html.heex:23 #: lib/cannery_web/live/home_live.html.heex:22
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
msgid "Easy to Use:" msgid "Easy to Use:"
msgstr "" msgstr ""
#: lib/cannery_web/live/invite_live/index.ex:34 #: lib/cannery_web/live/invite_live/index.ex:33
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
msgid "Edit Invite" msgid "Edit Invite"
msgstr "" msgstr ""
#: lib/cannery_web/live/tag_live/index.ex:28 #: lib/cannery_web/live/tag_live/index.ex:27
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
msgid "Edit Tag" msgid "Edit Tag"
msgstr "" msgstr ""
@ -171,23 +171,23 @@ msgstr ""
msgid "Incendiary" msgid "Incendiary"
msgstr "" msgstr ""
#: lib/cannery_web/live/home_live.html.heex:55 #: lib/cannery_web/live/home_live.html.heex:53
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
msgid "Instance Information" msgid "Instance Information"
msgstr "" msgstr ""
#: lib/cannery_web/components/invite_card.ex:42 #: lib/cannery_web/components/core_components/invite_card.html.heex:21
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
msgid "Invite Disabled" msgid "Invite Disabled"
msgstr "" msgstr ""
#: lib/cannery_web/live/home_live.html.heex:82 #: lib/cannery_web/live/home_live.html.heex:84
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
msgid "Invite Only" msgid "Invite Only"
msgstr "" msgstr ""
#: lib/cannery_web/components/topbar.ex:89 #: lib/cannery_web/components/core_components/topbar.html.heex:74
#: lib/cannery_web/live/invite_live/index.ex:42 #: lib/cannery_web/live/invite_live/index.ex:41
#: lib/cannery_web/live/invite_live/index.html.heex:3 #: lib/cannery_web/live/invite_live/index.html.heex:3
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
msgid "Invites" msgid "Invites"
@ -198,14 +198,14 @@ msgstr ""
msgid "Keep me logged in for 60 days" msgid "Keep me logged in for 60 days"
msgstr "" msgstr ""
#: lib/cannery_web/components/container_table_component.ex:48 #: lib/cannery_web/components/container_table_component.ex:47
#: lib/cannery_web/components/move_ammo_group_component.ex:69 #: lib/cannery_web/components/move_ammo_group_component.ex:69
#: lib/cannery_web/live/container_live/form_component.html.heex:43 #: lib/cannery_web/live/container_live/form_component.html.heex:43
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
msgid "Location" msgid "Location"
msgstr "" msgstr ""
#: lib/cannery_web/components/container_card.ex:49 #: lib/cannery_web/components/core_components/container_card.html.heex:26
#: lib/cannery_web/live/container_live/show.html.heex:17 #: lib/cannery_web/live/container_live/show.html.heex:17
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
msgid "Location:" msgid "Location:"
@ -233,7 +233,7 @@ msgid "My cool ammo can"
msgstr "" msgstr ""
#: lib/cannery_web/components/ammo_type_table_component.ex:45 #: lib/cannery_web/components/ammo_type_table_component.ex:45
#: lib/cannery_web/components/container_table_component.ex:46 #: lib/cannery_web/components/container_table_component.ex:45
#: lib/cannery_web/live/ammo_type_live/form_component.html.heex:21 #: lib/cannery_web/live/ammo_type_live/form_component.html.heex:21
#: lib/cannery_web/live/container_live/form_component.html.heex:21 #: lib/cannery_web/live/container_live/form_component.html.heex:21
#: lib/cannery_web/live/invite_live/form_component.html.heex:21 #: lib/cannery_web/live/invite_live/form_component.html.heex:21
@ -248,35 +248,35 @@ msgstr ""
msgid "New Ammo type" msgid "New Ammo type"
msgstr "" msgstr ""
#: lib/cannery_web/live/container_live/index.ex:36 #: lib/cannery_web/live/container_live/index.ex:32
#: lib/cannery_web/live/container_live/index.ex:43 #: lib/cannery_web/live/container_live/index.ex:39
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
msgid "New Container" msgid "New Container"
msgstr "" msgstr ""
#: lib/cannery_web/live/invite_live/index.ex:38 #: lib/cannery_web/live/invite_live/index.ex:37
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
msgid "New Invite" msgid "New Invite"
msgstr "" msgstr ""
#: lib/cannery_web/live/tag_live/index.ex:36 #: lib/cannery_web/live/tag_live/index.ex:35
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
msgid "New Tag" msgid "New Tag"
msgstr "" msgstr ""
#: lib/cannery_web/live/ammo_group_live/index.html.heex:10 #: lib/cannery_web/live/ammo_group_live/index.html.heex:10
#: lib/cannery_web/live/ammo_group_live/index.html.heex:70 #: lib/cannery_web/live/ammo_group_live/index.html.heex:71
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
msgid "No Ammo" msgid "No Ammo"
msgstr "" msgstr ""
#: lib/cannery_web/live/ammo_type_live/show.html.heex:169 #: lib/cannery_web/live/ammo_type_live/show.html.heex:167
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
msgid "No ammo for this type" msgid "No ammo for this type"
msgstr "" msgstr ""
#: lib/cannery_web/live/container_live/index.html.heex:8 #: lib/cannery_web/live/container_live/index.html.heex:8
#: lib/cannery_web/live/container_live/index.html.heex:46 #: lib/cannery_web/live/container_live/index.html.heex:47
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
msgid "No containers" msgid "No containers"
msgstr "" msgstr ""
@ -288,7 +288,7 @@ msgstr ""
#: lib/cannery_web/live/container_live/edit_tags_component.html.heex:29 #: lib/cannery_web/live/container_live/edit_tags_component.html.heex:29
#: lib/cannery_web/live/tag_live/index.html.heex:10 #: lib/cannery_web/live/tag_live/index.html.heex:10
#: lib/cannery_web/live/tag_live/index.html.heex:42 #: lib/cannery_web/live/tag_live/index.html.heex:43
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
msgid "No tags" msgid "No tags"
msgstr "" msgstr ""
@ -297,13 +297,13 @@ msgstr ""
#: lib/cannery_web/components/ammo_group_table_component.ex:81 #: lib/cannery_web/components/ammo_group_table_component.ex:81
#: lib/cannery_web/components/shot_group_table_component.ex:43 #: lib/cannery_web/components/shot_group_table_component.ex:43
#: lib/cannery_web/live/ammo_group_live/form_component.html.heex:50 #: lib/cannery_web/live/ammo_group_live/form_component.html.heex:50
#: lib/cannery_web/live/ammo_group_live/show.ex:90 #: lib/cannery_web/live/ammo_group_live/show.ex:92
#: lib/cannery_web/live/range_live/form_component.html.heex:30 #: lib/cannery_web/live/range_live/form_component.html.heex:30
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
msgid "Notes" msgid "Notes"
msgstr "" msgstr ""
#: lib/cannery_web/components/ammo_group_card.ex:52 #: lib/cannery_web/components/core_components/ammo_group_card.html.heex:26
#: lib/cannery_web/live/ammo_group_live/show.html.heex:24 #: lib/cannery_web/live/ammo_group_live/show.html.heex:24
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
msgid "Notes:" msgid "Notes:"
@ -326,7 +326,7 @@ msgstr ""
msgid "Price paid" msgid "Price paid"
msgstr "" msgstr ""
#: lib/cannery_web/components/ammo_group_card.ex:68 #: lib/cannery_web/components/core_components/ammo_group_card.html.heex:41
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
msgid "Price paid:" msgid "Price paid:"
msgstr "" msgstr ""
@ -337,17 +337,17 @@ msgstr ""
msgid "Primer type" msgid "Primer type"
msgstr "" msgstr ""
#: lib/cannery_web/live/home_live.html.heex:81 #: lib/cannery_web/live/home_live.html.heex:83
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
msgid "Public Signups" msgid "Public Signups"
msgstr "" msgstr ""
#: lib/cannery_web/live/home_live.html.heex:33 #: lib/cannery_web/live/home_live.html.heex:32
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
msgid "Secure:" msgid "Secure:"
msgstr "" msgstr ""
#: lib/cannery_web/live/home_live.html.heex:36 #: lib/cannery_web/live/home_live.html.heex:35
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
msgid "Self-host your own instance, or use an instance from someone you trust." msgid "Self-host your own instance, or use an instance from someone you trust."
msgstr "" msgstr ""
@ -358,7 +358,7 @@ msgstr ""
msgid "Settings" msgid "Settings"
msgstr "" msgstr ""
#: lib/cannery_web/live/home_live.html.heex:43 #: lib/cannery_web/live/home_live.html.heex:41
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
msgid "Simple:" msgid "Simple:"
msgstr "" msgstr ""
@ -368,15 +368,15 @@ msgstr ""
msgid "Steel" msgid "Steel"
msgstr "" msgstr ""
#: lib/cannery_web/live/ammo_group_live/show.html.heex:117 #: lib/cannery_web/live/ammo_group_live/show.html.heex:113
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
msgid "Stored in" msgid "Stored in"
msgstr "" msgstr ""
#: lib/cannery_web/components/container_table_component.ex:52 #: lib/cannery_web/components/container_table_component.ex:66
#: lib/cannery_web/components/topbar.ex:49 #: lib/cannery_web/components/core_components/topbar.html.heex:34
#: lib/cannery_web/live/tag_live/index.ex:44 #: lib/cannery_web/live/tag_live/index.ex:43
#: lib/cannery_web/live/tag_live/index.ex:54 #: lib/cannery_web/live/tag_live/index.ex:53
#: lib/cannery_web/live/tag_live/index.html.heex:3 #: lib/cannery_web/live/tag_live/index.html.heex:3
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
msgid "Tags" msgid "Tags"
@ -403,20 +403,20 @@ msgstr ""
msgid "Tracer" msgid "Tracer"
msgstr "" msgstr ""
#: lib/cannery_web/components/container_table_component.ex:49 #: lib/cannery_web/components/container_table_component.ex:48
#: lib/cannery_web/components/move_ammo_group_component.ex:68 #: lib/cannery_web/components/move_ammo_group_component.ex:68
#: lib/cannery_web/live/container_live/form_component.html.heex:36 #: lib/cannery_web/live/container_live/form_component.html.heex:36
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
msgid "Type" msgid "Type"
msgstr "" msgstr ""
#: lib/cannery_web/components/container_card.ex:44 #: lib/cannery_web/components/core_components/container_card.html.heex:21
#: lib/cannery_web/live/container_live/show.html.heex:12 #: lib/cannery_web/live/container_live/show.html.heex:12
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
msgid "Type:" msgid "Type:"
msgstr "" msgstr ""
#: lib/cannery_web/live/invite_live/index.html.heex:122 #: lib/cannery_web/live/invite_live/index.html.heex:127
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
msgid "Users" msgid "Users"
msgstr "" msgstr ""
@ -426,18 +426,18 @@ msgstr ""
msgid "Uses left" msgid "Uses left"
msgstr "" msgstr ""
#: lib/cannery_web/live/home_live.html.heex:37 #: lib/cannery_web/live/home_live.html.heex:36
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
msgid "Your data stays with you, period" msgid "Your data stays with you, period"
msgstr "" msgstr ""
#: lib/cannery_web/live/container_live/show.html.heex:70 #: lib/cannery_web/live/container_live/show.html.heex:67
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
msgid "No tags for this container" msgid "No tags for this container"
msgstr "" msgstr ""
#: lib/cannery_web/components/ammo_group_table_component.ex:72 #: lib/cannery_web/components/ammo_group_table_component.ex:72
#: lib/cannery_web/components/topbar.ex:81 #: lib/cannery_web/components/core_components/topbar.html.heex:66
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
msgid "Range" msgid "Range"
msgstr "" msgstr ""
@ -449,7 +449,7 @@ msgstr ""
#: lib/cannery_web/components/add_shot_group_component.html.heex:46 #: lib/cannery_web/components/add_shot_group_component.html.heex:46
#: lib/cannery_web/components/shot_group_table_component.ex:44 #: lib/cannery_web/components/shot_group_table_component.ex:44
#: lib/cannery_web/live/ammo_group_live/show.ex:91 #: lib/cannery_web/live/ammo_group_live/show.ex:93
#: lib/cannery_web/live/range_live/form_component.html.heex:37 #: lib/cannery_web/live/range_live/form_component.html.heex:37
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
msgid "Date" msgid "Date"
@ -471,19 +471,19 @@ msgstr ""
msgid "Record shots" msgid "Record shots"
msgstr "" msgstr ""
#: lib/cannery_web/live/ammo_group_live/show.ex:41 #: lib/cannery_web/live/ammo_group_live/show.ex:42
#: lib/cannery_web/live/range_live/index.ex:41 #: lib/cannery_web/live/range_live/index.ex:40
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
msgid "Edit Shot Records" msgid "Edit Shot Records"
msgstr "" msgstr ""
#: lib/cannery_web/live/range_live/index.ex:49 #: lib/cannery_web/live/range_live/index.ex:48
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
msgid "New Shot Records" msgid "New Shot Records"
msgstr "" msgstr ""
#: lib/cannery_web/live/range_live/index.html.heex:48 #: lib/cannery_web/live/range_live/index.html.heex:55
#: lib/cannery_web/live/range_live/index.html.heex:89 #: lib/cannery_web/live/range_live/index.html.heex:97
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
msgid "No shots recorded" msgid "No shots recorded"
msgstr "" msgstr ""
@ -495,20 +495,19 @@ msgid "Rounds left"
msgstr "" msgstr ""
#: lib/cannery_web/components/shot_group_table_component.ex:42 #: lib/cannery_web/components/shot_group_table_component.ex:42
#: lib/cannery_web/live/ammo_group_live/show.ex:89 #: lib/cannery_web/live/ammo_group_live/show.ex:91
#: lib/cannery_web/live/range_live/index.html.heex:62 #: lib/cannery_web/live/range_live/index.html.heex:69
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
msgid "Rounds shot" msgid "Rounds shot"
msgstr "" msgstr ""
#: lib/cannery_web/live/range_live/index.ex:57 #: lib/cannery_web/live/range_live/index.ex:56
#: lib/cannery_web/live/range_live/index.ex:67 #: lib/cannery_web/live/range_live/index.ex:66
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
msgid "Shot Records" msgid "Shot Records"
msgstr "" msgstr ""
#: lib/cannery_web/live/ammo_group_live/index.ex:38 #: lib/cannery_web/live/ammo_group_live/index.ex:38
#: lib/cannery_web/live/ammo_group_live/index.html.heex:119
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
msgid "Move ammo" msgid "Move ammo"
msgstr "" msgstr ""
@ -518,18 +517,18 @@ msgstr ""
msgid "No other containers" msgid "No other containers"
msgstr "" msgstr ""
#: lib/cannery_web/live/range_live/index.html.heex:53 #: lib/cannery_web/live/range_live/index.html.heex:60
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
msgid "Shot log" msgid "Shot log"
msgstr "" msgstr ""
#: lib/cannery_web/components/ammo_group_card.ex:69
#: lib/cannery_web/components/ammo_group_card.ex:76
#: lib/cannery_web/components/ammo_group_table_component.ex:153 #: lib/cannery_web/components/ammo_group_table_component.ex:153
#: lib/cannery_web/components/ammo_group_table_component.ex:225 #: lib/cannery_web/components/ammo_group_table_component.ex:229
#: lib/cannery_web/components/ammo_type_table_component.ex:180 #: lib/cannery_web/components/ammo_type_table_component.ex:224
#: lib/cannery_web/components/core_components/ammo_group_card.html.heex:42
#: lib/cannery_web/components/core_components/ammo_group_card.html.heex:47
#: lib/cannery_web/live/ammo_group_live/show.html.heex:37 #: lib/cannery_web/live/ammo_group_live/show.html.heex:37
#: lib/cannery_web/live/ammo_group_live/show.html.heex:44 #: lib/cannery_web/live/ammo_group_live/show.html.heex:42
#: lib/cannery_web/live/ammo_type_live/show.html.heex:139 #: lib/cannery_web/live/ammo_type_live/show.html.heex:139
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
msgid "$%{amount}" msgid "$%{amount}"
@ -599,28 +598,28 @@ msgstr ""
msgid "Reconnecting..." msgid "Reconnecting..."
msgstr "" msgstr ""
#: lib/cannery_web/live/container_live/index.ex:32 #: lib/cannery_web/live/container_live/index.ex:28
#: lib/cannery_web/live/container_live/show.ex:110 #: lib/cannery_web/live/container_live/show.ex:108
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
msgid "Edit %{name}" msgid "Edit %{name}"
msgstr "" msgstr ""
#: lib/cannery_web/live/container_live/index.ex:69 #: lib/cannery_web/live/container_live/index.ex:63
#: lib/cannery_web/live/container_live/show.ex:111 #: lib/cannery_web/live/container_live/show.ex:109
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
msgid "Edit %{name} tags" msgid "Edit %{name} tags"
msgstr "" msgstr ""
#: lib/cannery_web/components/container_card.ex:60 #: lib/cannery_web/components/core_components/container_card.html.heex:37
#: lib/cannery_web/live/ammo_type_live/show.html.heex:70 #: lib/cannery_web/live/ammo_type_live/show.html.heex:70
#: lib/cannery_web/live/container_live/show.html.heex:35 #: lib/cannery_web/live/container_live/show.html.heex:33
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
msgid "Rounds:" msgid "Rounds:"
msgstr "" msgstr ""
#: lib/cannery_web/components/ammo_group_table_component.ex:222 #: lib/cannery_web/components/ammo_group_table_component.ex:226
#: lib/cannery_web/components/ammo_type_table_component.ex:179 #: lib/cannery_web/components/ammo_type_table_component.ex:223
#: lib/cannery_web/live/ammo_type_live/show.html.heex:145 #: lib/cannery_web/live/ammo_type_live/show.html.heex:143
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
msgid "No cost information" msgid "No cost information"
msgstr "" msgstr ""
@ -630,7 +629,7 @@ msgstr ""
msgid "% left" msgid "% left"
msgstr "" msgstr ""
#: lib/cannery_web/live/ammo_group_live/show.html.heex:43 #: lib/cannery_web/live/ammo_group_live/show.html.heex:41
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
msgid "Current value:" msgid "Current value:"
msgstr "" msgstr ""
@ -650,7 +649,7 @@ msgstr ""
msgid "Percentage left:" msgid "Percentage left:"
msgstr "" msgstr ""
#: lib/cannery_web/live/ammo_group_live/show.html.heex:130 #: lib/cannery_web/live/ammo_group_live/show.html.heex:126
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
msgid "Rounds used" msgid "Rounds used"
msgstr "" msgstr ""
@ -670,7 +669,7 @@ msgstr ""
msgid "Log in" msgid "Log in"
msgstr "" msgstr ""
#: lib/cannery_web/controllers/user_registration_controller.ex:32 #: lib/cannery_web/controllers/user_registration_controller.ex:33
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
msgid "Register" msgid "Register"
msgstr "" msgstr ""
@ -680,8 +679,8 @@ msgstr ""
msgid "Reset your password" msgid "Reset your password"
msgstr "" msgstr ""
#: lib/cannery_web/live/ammo_group_live/show.ex:40 #: lib/cannery_web/live/ammo_group_live/show.ex:41
#: lib/cannery_web/live/range_live/index.ex:33 #: lib/cannery_web/live/range_live/index.ex:32
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
msgid "Record Shots" msgid "Record Shots"
msgstr "" msgstr ""
@ -717,27 +716,27 @@ msgstr ""
msgid "Language" msgid "Language"
msgstr "" msgstr ""
#: lib/cannery_web/live/home_live.html.heex:107 #: lib/cannery_web/live/home_live.html.heex:109
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
msgid "Get involved!" msgid "Get involved!"
msgstr "" msgstr ""
#: lib/cannery_web/live/home_live.html.heex:128 #: lib/cannery_web/live/home_live.html.heex:130
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
msgid "Help translate" msgid "Help translate"
msgstr "" msgstr ""
#: lib/cannery_web/live/home_live.html.heex:139 #: lib/cannery_web/live/home_live.html.heex:141
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
msgid "Report bugs or request features" msgid "Report bugs or request features"
msgstr "" msgstr ""
#: lib/cannery_web/live/home_live.html.heex:117 #: lib/cannery_web/live/home_live.html.heex:119
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
msgid "View the source code" msgid "View the source code"
msgstr "" msgstr ""
#: lib/cannery_web/components/topbar.ex:65 #: lib/cannery_web/components/core_components/topbar.html.heex:50
#: lib/cannery_web/live/ammo_type_live/index.ex:52 #: lib/cannery_web/live/ammo_type_live/index.ex:52
#: lib/cannery_web/live/ammo_type_live/index.ex:62 #: lib/cannery_web/live/ammo_type_live/index.ex:62
#: lib/cannery_web/live/ammo_type_live/index.html.heex:3 #: lib/cannery_web/live/ammo_type_live/index.html.heex:3
@ -745,39 +744,39 @@ msgstr ""
msgid "Catalog" msgid "Catalog"
msgstr "" msgstr ""
#: lib/cannery_web/live/ammo_group_live/show.ex:44 #: lib/cannery_web/live/ammo_group_live/show.ex:45
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
msgid "Edit Ammo" msgid "Edit Ammo"
msgstr "" msgstr ""
#: lib/cannery_web/live/ammo_group_live/show.ex:42 #: lib/cannery_web/live/ammo_group_live/show.ex:43
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
msgid "Move Ammo" msgid "Move Ammo"
msgstr "" msgstr ""
#: lib/cannery_web/live/container_live/show.html.heex:115 #: lib/cannery_web/live/container_live/show.html.heex:112
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
msgid "No ammo in this container" msgid "No ammo in this container"
msgstr "" msgstr ""
#: lib/cannery_web/live/ammo_group_live/show.ex:43 #: lib/cannery_web/live/ammo_group_live/show.ex:44
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
msgid "Show Ammo" msgid "Show Ammo"
msgstr "" msgstr ""
#: lib/cannery_web/live/ammo_group_live/show.html.heex:122 #: lib/cannery_web/live/ammo_group_live/show.html.heex:118
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
msgid "This ammo is not in a container" msgid "This ammo is not in a container"
msgstr "" msgstr ""
#: lib/cannery_web/components/container_card.ex:55 #: lib/cannery_web/components/core_components/container_card.html.heex:32
#: lib/cannery_web/live/ammo_type_live/show.html.heex:98 #: lib/cannery_web/live/ammo_type_live/show.html.heex:98
#: lib/cannery_web/live/container_live/show.html.heex:26 #: lib/cannery_web/live/container_live/show.html.heex:23
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
msgid "Packs:" msgid "Packs:"
msgstr "" msgstr ""
#: lib/cannery_web/components/topbar.ex:25 #: lib/cannery_web/components/core_components/topbar.html.heex:10
#: lib/cannery_web/live/home_live.html.heex:4 #: lib/cannery_web/live/home_live.html.heex:4
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
msgid "Cannery logo" msgid "Cannery logo"
@ -793,45 +792,45 @@ msgstr ""
msgid "Leave \"Uses left\" blank to make invite unlimited" msgid "Leave \"Uses left\" blank to make invite unlimited"
msgstr "" msgstr ""
#: lib/cannery_web/components/ammo_group_card.ex:83 #: lib/cannery_web/components/core_components/ammo_group_card.html.heex:54
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
msgid "Container:" msgid "Container:"
msgstr "" msgstr ""
#: lib/cannery_web/live/ammo_group_live/index.html.heex:63 #: lib/cannery_web/live/ammo_group_live/index.html.heex:64
#: lib/cannery_web/live/ammo_type_live/index.html.heex:38 #: lib/cannery_web/live/ammo_type_live/index.html.heex:39
#: lib/cannery_web/live/ammo_type_live/show.html.heex:155 #: lib/cannery_web/live/ammo_type_live/show.html.heex:153
#: lib/cannery_web/live/container_live/show.html.heex:101 #: lib/cannery_web/live/container_live/show.html.heex:98
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
msgid "Show used" msgid "Show used"
msgstr "" msgstr ""
#: lib/cannery_web/components/ammo_group_table_component.ex:193 #: lib/cannery_web/components/ammo_group_table_component.ex:187
#: lib/cannery_web/live/ammo_group_live/show.html.heex:19 #: lib/cannery_web/live/ammo_group_live/show.html.heex:19
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
msgid "%{percentage}%" msgid "%{percentage}%"
msgstr "" msgstr ""
#: lib/cannery_web/live/range_live/index.ex:134 #: lib/cannery_web/live/range_live/index.ex:135
#, elixir-autogen, elixir-format, fuzzy #, elixir-autogen, elixir-format, fuzzy
msgid "Rounds shot: %{count}" msgid "Rounds shot: %{count}"
msgstr "" msgstr ""
#: lib/cannery_web/components/ammo_type_table_component.ex:100 #: lib/cannery_web/components/ammo_type_table_component.ex:100
#: lib/cannery_web/components/container_table_component.ex:50 #: lib/cannery_web/components/container_table_component.ex:64
#, elixir-autogen, elixir-format, fuzzy #, elixir-autogen, elixir-format, fuzzy
msgid "Packs" msgid "Packs"
msgstr "" msgstr ""
#: lib/cannery_web/components/ammo_type_table_component.ex:80 #: lib/cannery_web/components/ammo_type_table_component.ex:80
#: lib/cannery_web/components/container_table_component.ex:51 #: lib/cannery_web/components/container_table_component.ex:65
#, elixir-autogen, elixir-format, fuzzy #, elixir-autogen, elixir-format, fuzzy
msgid "Rounds" msgid "Rounds"
msgstr "" msgstr ""
#: lib/cannery_web/live/ammo_type_live/show.html.heex:161 #: lib/cannery_web/live/ammo_type_live/show.html.heex:159
#: lib/cannery_web/live/container_live/index.html.heex:38 #: lib/cannery_web/live/container_live/index.html.heex:39
#: lib/cannery_web/live/container_live/show.html.heex:107 #: lib/cannery_web/live/container_live/show.html.heex:104
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
msgid "View as table" msgid "View as table"
msgstr "" msgstr ""
@ -881,102 +880,102 @@ msgstr ""
msgid "Used up!" msgid "Used up!"
msgstr "" msgstr ""
#: lib/cannery_web/live/range_live/index.html.heex:64 #: lib/cannery_web/live/range_live/index.html.heex:71
#, elixir-autogen, elixir-format, fuzzy #, elixir-autogen, elixir-format, fuzzy
msgid "Rounds shot chart" msgid "Rounds shot chart"
msgstr "" msgstr ""
#: lib/cannery_web/live/ammo_type_live/show.ex:27 #: lib/cannery_web/live/ammo_type_live/show.ex:26
#, elixir-autogen, elixir-format, fuzzy #, elixir-autogen, elixir-format, fuzzy
msgid "Blank:" msgid "Blank:"
msgstr "" msgstr ""
#: lib/cannery_web/live/ammo_type_live/show.ex:13 #: lib/cannery_web/live/ammo_type_live/show.ex:12
#, elixir-autogen, elixir-format, fuzzy #, elixir-autogen, elixir-format, fuzzy
msgid "Bullet core:" msgid "Bullet core:"
msgstr "" msgstr ""
#: lib/cannery_web/live/ammo_type_live/show.ex:12 #: lib/cannery_web/live/ammo_type_live/show.ex:11
#, elixir-autogen, elixir-format, fuzzy #, elixir-autogen, elixir-format, fuzzy
msgid "Bullet type:" msgid "Bullet type:"
msgstr "" msgstr ""
#: lib/cannery_web/live/ammo_type_live/show.ex:15 #: lib/cannery_web/live/ammo_type_live/show.ex:14
#, elixir-autogen, elixir-format, fuzzy #, elixir-autogen, elixir-format, fuzzy
msgid "Caliber:" msgid "Caliber:"
msgstr "" msgstr ""
#: lib/cannery_web/live/ammo_type_live/show.ex:14 #: lib/cannery_web/live/ammo_type_live/show.ex:13
#, elixir-autogen, elixir-format, fuzzy #, elixir-autogen, elixir-format, fuzzy
msgid "Cartridge:" msgid "Cartridge:"
msgstr "" msgstr ""
#: lib/cannery_web/live/ammo_type_live/show.ex:16 #: lib/cannery_web/live/ammo_type_live/show.ex:15
#, elixir-autogen, elixir-format, fuzzy #, elixir-autogen, elixir-format, fuzzy
msgid "Case material:" msgid "Case material:"
msgstr "" msgstr ""
#: lib/cannery_web/live/ammo_type_live/show.ex:28 #: lib/cannery_web/live/ammo_type_live/show.ex:27
#, elixir-autogen, elixir-format, fuzzy #, elixir-autogen, elixir-format, fuzzy
msgid "Corrosive:" msgid "Corrosive:"
msgstr "" msgstr ""
#: lib/cannery_web/live/ammo_type_live/show.ex:24 #: lib/cannery_web/live/ammo_type_live/show.ex:23
#, elixir-autogen, elixir-format, fuzzy #, elixir-autogen, elixir-format, fuzzy
msgid "Firing type:" msgid "Firing type:"
msgstr "" msgstr ""
#: lib/cannery_web/live/ammo_type_live/show.ex:21 #: lib/cannery_web/live/ammo_type_live/show.ex:20
#, elixir-autogen, elixir-format, fuzzy #, elixir-autogen, elixir-format, fuzzy
msgid "Grains:" msgid "Grains:"
msgstr "" msgstr ""
#: lib/cannery_web/live/ammo_type_live/show.ex:26 #: lib/cannery_web/live/ammo_type_live/show.ex:25
#, elixir-autogen, elixir-format, fuzzy #, elixir-autogen, elixir-format, fuzzy
msgid "Incendiary:" msgid "Incendiary:"
msgstr "" msgstr ""
#: lib/cannery_web/live/ammo_type_live/show.ex:17 #: lib/cannery_web/live/ammo_type_live/show.ex:16
#, elixir-autogen, elixir-format, fuzzy #, elixir-autogen, elixir-format, fuzzy
msgid "Jacket type:" msgid "Jacket type:"
msgstr "" msgstr ""
#: lib/cannery_web/live/ammo_type_live/show.ex:29 #: lib/cannery_web/live/ammo_type_live/show.ex:28
#, elixir-autogen, elixir-format, fuzzy #, elixir-autogen, elixir-format, fuzzy
msgid "Manufacturer:" msgid "Manufacturer:"
msgstr "" msgstr ""
#: lib/cannery_web/live/ammo_type_live/show.ex:18 #: lib/cannery_web/live/ammo_type_live/show.ex:17
#, elixir-autogen, elixir-format, fuzzy #, elixir-autogen, elixir-format, fuzzy
msgid "Muzzle velocity:" msgid "Muzzle velocity:"
msgstr "" msgstr ""
#: lib/cannery_web/live/ammo_type_live/show.ex:20 #: lib/cannery_web/live/ammo_type_live/show.ex:19
#, elixir-autogen, elixir-format, fuzzy #, elixir-autogen, elixir-format, fuzzy
msgid "Powder grains per charge:" msgid "Powder grains per charge:"
msgstr "" msgstr ""
#: lib/cannery_web/live/ammo_type_live/show.ex:19 #: lib/cannery_web/live/ammo_type_live/show.ex:18
#, elixir-autogen, elixir-format, fuzzy #, elixir-autogen, elixir-format, fuzzy
msgid "Powder type:" msgid "Powder type:"
msgstr "" msgstr ""
#: lib/cannery_web/live/ammo_type_live/show.ex:22 #: lib/cannery_web/live/ammo_type_live/show.ex:21
#, elixir-autogen, elixir-format, fuzzy #, elixir-autogen, elixir-format, fuzzy
msgid "Pressure:" msgid "Pressure:"
msgstr "" msgstr ""
#: lib/cannery_web/live/ammo_type_live/show.ex:23 #: lib/cannery_web/live/ammo_type_live/show.ex:22
#, elixir-autogen, elixir-format, fuzzy #, elixir-autogen, elixir-format, fuzzy
msgid "Primer type:" msgid "Primer type:"
msgstr "" msgstr ""
#: lib/cannery_web/live/ammo_type_live/show.ex:25 #: lib/cannery_web/live/ammo_type_live/show.ex:24
#, elixir-autogen, elixir-format, fuzzy #, elixir-autogen, elixir-format, fuzzy
msgid "Tracer:" msgid "Tracer:"
msgstr "" msgstr ""
#: lib/cannery_web/live/ammo_type_live/show.ex:30 #: lib/cannery_web/live/ammo_type_live/show.ex:29
#, elixir-autogen, elixir-format, fuzzy #, elixir-autogen, elixir-format, fuzzy
msgid "UPC:" msgid "UPC:"
msgstr "" msgstr ""
@ -988,13 +987,13 @@ msgid "Average CPR"
msgstr "" msgstr ""
#: lib/cannery_web/live/ammo_type_live/index.ex:28 #: lib/cannery_web/live/ammo_type_live/index.ex:28
#: lib/cannery_web/live/ammo_type_live/show.ex:118 #: lib/cannery_web/live/ammo_type_live/show.ex:135
#, elixir-autogen, elixir-format, fuzzy #, elixir-autogen, elixir-format, fuzzy
msgid "Edit %{ammo_type_name}" msgid "Edit %{ammo_type_name}"
msgstr "" msgstr ""
#: lib/cannery_web/components/ammo_group_card.ex:40 #: lib/cannery_web/components/ammo_group_table_component.ex:233
#: lib/cannery_web/components/ammo_group_table_component.ex:231 #: lib/cannery_web/components/core_components/ammo_group_card.html.heex:17
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
msgid "Empty" msgid "Empty"
msgstr "" msgstr ""
@ -1004,7 +1003,7 @@ msgstr ""
msgid "CPR" msgid "CPR"
msgstr "" msgstr ""
#: lib/cannery_web/components/ammo_group_card.ex:75 #: lib/cannery_web/components/core_components/ammo_group_card.html.heex:46
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
msgid "CPR:" msgid "CPR:"
msgstr "" msgstr ""
@ -1014,7 +1013,7 @@ msgstr ""
msgid "Original Count" msgid "Original Count"
msgstr "" msgstr ""
#: lib/cannery_web/components/ammo_group_card.ex:47 #: lib/cannery_web/components/core_components/ammo_group_card.html.heex:21
#, elixir-autogen, elixir-format, fuzzy #, elixir-autogen, elixir-format, fuzzy
msgid "Original Count:" msgid "Original Count:"
msgstr "" msgstr ""
@ -1024,27 +1023,22 @@ msgstr ""
msgid "Home" msgid "Home"
msgstr "" msgstr ""
#: lib/cannery_web/live/container_live/show.html.heex:24 #: lib/cannery_web/live/container_live/show.html.heex:28
#, elixir-autogen, elixir-format, fuzzy #, elixir-autogen, elixir-format, fuzzy
msgid "Total packs:" msgid "Total packs:"
msgstr "" msgstr ""
#: lib/cannery_web/live/container_live/show.html.heex:33
#, elixir-autogen, elixir-format, fuzzy
msgid "Total rounds:"
msgstr ""
#: lib/cannery_web/components/ammo_group_table_component.ex:58 #: lib/cannery_web/components/ammo_group_table_component.ex:58
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
msgid "Last used on" msgid "Last used on"
msgstr "" msgstr ""
#: lib/cannery_web/components/ammo_group_card.ex:62 #: lib/cannery_web/components/core_components/ammo_group_card.html.heex:36
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
msgid "Last used on:" msgid "Last used on:"
msgstr "" msgstr ""
#: lib/cannery_web/components/ammo_group_table_component.ex:178 #: lib/cannery_web/components/ammo_group_table_component.ex:171
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
msgid "Never used" msgid "Never used"
msgstr "" msgstr ""
@ -1055,7 +1049,7 @@ msgstr ""
msgid "Purchased on" msgid "Purchased on"
msgstr "" msgstr ""
#: lib/cannery_web/components/ammo_group_card.ex:57 #: lib/cannery_web/components/core_components/ammo_group_card.html.heex:31
#: lib/cannery_web/live/ammo_group_live/show.html.heex:30 #: lib/cannery_web/live/ammo_group_live/show.html.heex:30
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
msgid "Purchased on:" msgid "Purchased on:"
@ -1067,32 +1061,32 @@ msgid "Edit ammo"
msgstr "" msgstr ""
#: lib/cannery_web/live/ammo_type_live/index.html.heex:8 #: lib/cannery_web/live/ammo_type_live/index.html.heex:8
#: lib/cannery_web/live/ammo_type_live/index.html.heex:45 #: lib/cannery_web/live/ammo_type_live/index.html.heex:46
#, elixir-autogen, elixir-format, fuzzy #, elixir-autogen, elixir-format, fuzzy
msgid "No Ammo types" msgid "No Ammo types"
msgstr "" msgstr ""
#: lib/cannery_web/live/ammo_type_live/index.html.heex:32 #: lib/cannery_web/live/ammo_type_live/index.html.heex:33
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
msgid "Search catalog" msgid "Search catalog"
msgstr "" msgstr ""
#: lib/cannery_web/live/ammo_group_live/index.html.heex:57 #: lib/cannery_web/live/ammo_group_live/index.html.heex:58
#, elixir-autogen, elixir-format, fuzzy #, elixir-autogen, elixir-format, fuzzy
msgid "Search ammo" msgid "Search ammo"
msgstr "" msgstr ""
#: lib/cannery_web/live/container_live/index.html.heex:32 #: lib/cannery_web/live/container_live/index.html.heex:33
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
msgid "Search containers" msgid "Search containers"
msgstr "" msgstr ""
#: lib/cannery_web/live/tag_live/index.html.heex:35 #: lib/cannery_web/live/tag_live/index.html.heex:36
#, elixir-autogen, elixir-format, fuzzy #, elixir-autogen, elixir-format, fuzzy
msgid "Search tags" msgid "Search tags"
msgstr "" msgstr ""
#: lib/cannery_web/live/range_live/index.html.heex:82 #: lib/cannery_web/live/range_live/index.html.heex:90
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
msgid "Search shot records" msgid "Search shot records"
msgstr "" msgstr ""
@ -1105,27 +1099,27 @@ msgstr ""
#: lib/cannery_web/templates/error/error.html.heex:8 #: lib/cannery_web/templates/error/error.html.heex:8
#: lib/cannery_web/templates/layout/root.html.heex:13 #: lib/cannery_web/templates/layout/root.html.heex:13
#: lib/cannery_web/templates/layout/root.html.heex:14 #: lib/cannery_web/templates/layout/root.html.heex:14
#: lib/cannery_web/views/layout_view.ex:15 #: lib/cannery_web/views/layout_view.ex:14
#, elixir-autogen, elixir-format, fuzzy #, elixir-autogen, elixir-format, fuzzy
msgid "Cannery" msgid "Cannery"
msgstr "" msgstr ""
#: lib/cannery_web/components/user_card.ex:33 #: lib/cannery_web/components/core_components/user_card.html.heex:20
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
msgid "Email unconfirmed" msgid "Email unconfirmed"
msgstr "" msgstr ""
#: lib/cannery_web/components/user_card.ex:38 #: lib/cannery_web/components/core_components/user_card.html.heex:25
#, elixir-autogen, elixir-format, fuzzy #, elixir-autogen, elixir-format, fuzzy
msgid "User registered on%{registered_datetime}" msgid "User registered on%{registered_datetime}"
msgstr "" msgstr ""
#: lib/cannery_web/components/user_card.ex:27 #: lib/cannery_web/components/core_components/user_card.html.heex:14
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
msgid "User was confirmed at%{confirmed_datetime}" msgid "User was confirmed at%{confirmed_datetime}"
msgstr "" msgstr ""
#: lib/cannery_web/components/invite_card.ex:37 #: lib/cannery_web/components/core_components/invite_card.html.heex:16
#, elixir-autogen, elixir-format, fuzzy #, elixir-autogen, elixir-format, fuzzy
msgid "Uses Left: Unlimited" msgid "Uses Left: Unlimited"
msgstr "" msgstr ""
@ -1139,22 +1133,22 @@ msgstr ""
## Run "mix gettext.extract" to bring this file up to ## Run "mix gettext.extract" to bring this file up to
## date. Leave "msgstr"s empty as changing them here has no ## date. Leave "msgstr"s empty as changing them here has no
## effect: edit them in PO (.po) files instead. ## effect: edit them in PO (.po) files instead.
#: lib/cannery_web/live/home_live.html.heex:26 #: lib/cannery_web/live/home_live.html.heex:25
#, elixir-autogen, elixir-format, fuzzy #, elixir-autogen, elixir-format, fuzzy
msgid "Cannery lets you easily keep an eye on your ammo levels before and after range day" msgid "Cannery lets you easily keep an eye on your ammo levels before and after range day"
msgstr "" msgstr ""
#: lib/cannery_web/views/layout_view.ex:11 #: lib/cannery_web/views/layout_view.ex:10
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
msgid "Cannery | %{title}" msgid "Cannery | %{title}"
msgstr "" msgstr ""
#: lib/cannery_web/live/home_live.html.heex:78 #: lib/cannery_web/live/home_live.html.heex:80
#, elixir-autogen, elixir-format, fuzzy #, elixir-autogen, elixir-format, fuzzy
msgid "Registration:" msgid "Registration:"
msgstr "" msgstr ""
#: lib/cannery_web/live/home_live.html.heex:88 #: lib/cannery_web/live/home_live.html.heex:90
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
msgid "Version:" msgid "Version:"
msgstr "" msgstr ""
@ -1164,29 +1158,29 @@ msgstr ""
msgid "Welcome to Cannery" msgid "Welcome to Cannery"
msgstr "" msgstr ""
#: lib/cannery_web/live/invite_live/index.html.heex:70 #: lib/cannery_web/live/invite_live/index.html.heex:75
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
msgid "Disable" msgid "Disable"
msgstr "" msgstr ""
#: lib/cannery_web/live/invite_live/index.html.heex:70 #: lib/cannery_web/live/invite_live/index.html.heex:75
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
msgid "Enable" msgid "Enable"
msgstr "" msgstr ""
#: lib/cannery_web/components/invite_card.ex:32 #: lib/cannery_web/components/core_components/invite_card.html.heex:11
#, elixir-autogen, elixir-format, fuzzy #, elixir-autogen, elixir-format, fuzzy
msgid "Uses Left: %{uses_left_count}" msgid "Uses Left: %{uses_left_count}"
msgstr "" msgstr ""
#: lib/cannery_web/components/invite_card.ex:52 #: lib/cannery_web/components/core_components/invite_card.html.heex:31
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
msgid "Uses: %{uses_count}" msgid "Uses: %{uses_count}"
msgstr "" msgstr ""
#: lib/cannery_web/templates/user_confirmation/new.html.heex:12 #: lib/cannery_web/templates/user_confirmation/new.html.heex:13
#: lib/cannery_web/templates/user_registration/new.html.heex:20 #: lib/cannery_web/templates/user_registration/new.html.heex:20
#: lib/cannery_web/templates/user_reset_password/new.html.heex:12 #: lib/cannery_web/templates/user_reset_password/new.html.heex:13
#: lib/cannery_web/templates/user_session/new.html.heex:17 #: lib/cannery_web/templates/user_session/new.html.heex:17
#: lib/cannery_web/templates/user_settings/edit.html.heex:27 #: lib/cannery_web/templates/user_settings/edit.html.heex:27
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
@ -1198,24 +1192,3 @@ msgstr ""
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
msgid "Password" msgid "Password"
msgstr "" msgstr ""
#: lib/cannery_web/live/ammo_group_live/index.html.heex:153
#, elixir-autogen, elixir-format
msgid "Clone ammo group of %{ammo_group_count} bullets"
msgstr ""
#: lib/cannery_web/live/ammo_group_live/index.html.heex:168
#: lib/cannery_web/live/ammo_group_live/show.html.heex:80
#, elixir-autogen, elixir-format
msgid "Delete ammo group of %{ammo_group_count} bullets"
msgstr ""
#: lib/cannery_web/live/ammo_group_live/index.html.heex:141
#, elixir-autogen, elixir-format
msgid "Edit ammo group of %{ammo_group_count} bullets"
msgstr ""
#: lib/cannery_web/live/ammo_group_live/index.html.heex:129
#, elixir-autogen, elixir-format
msgid "View ammo group of %{ammo_group_count} bullets"
msgstr ""

View File

@ -24,18 +24,18 @@ msgstr ""
## Run "mix gettext.extract" to bring this file up to ## Run "mix gettext.extract" to bring this file up to
## date. Leave "msgstr"s empty as changing them here has no ## date. Leave "msgstr"s empty as changing them here has no
## effect: edit them in PO (.po) files instead. ## effect: edit them in PO (.po) files instead.
#: lib/cannery/containers.ex:179 #: lib/cannery/containers.ex:200
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
msgid "Container must be empty before deleting" msgid "Container must be empty before deleting"
msgstr "Caithfidh an coimeádán a bheidh follamh roimh scriosadh" msgstr "Caithfidh an coimeádán a bheidh follamh roimh scriosadh"
#: lib/cannery_web/live/container_live/index.ex:92 #: lib/cannery_web/live/container_live/index.ex:86
#: lib/cannery_web/live/container_live/show.ex:72 #: lib/cannery_web/live/container_live/show.ex:71
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
msgid "Could not delete %{name}: %{error}" msgid "Could not delete %{name}: %{error}"
msgstr "Ní feidir %{name} a scriosadh: %{error}" msgstr "Ní feidir %{name} a scriosadh: %{error}"
#: lib/cannery_web/live/container_live/index.ex:80 #: lib/cannery_web/live/container_live/index.ex:74
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
msgid "Could not find that container" msgid "Could not find that container"
msgstr "Ní feidir an coimeádán sin a fáil" msgstr "Ní feidir an coimeádán sin a fáil"
@ -50,12 +50,12 @@ msgstr "Tá an nasc chun an seoladh email a athrú neamhbhailí nó as dáta."
msgid "Error" msgid "Error"
msgstr "Fadhb" msgstr "Fadhb"
#: lib/cannery_web/templates/error/error.html.heex:28 #: lib/cannery_web/templates/error/error.html.heex:31
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
msgid "Go back home" msgid "Go back home"
msgstr "Dul abhaile" msgstr "Dul abhaile"
#: lib/cannery_web/views/error_view.ex:11 #: lib/cannery_web/views/error_view.ex:10
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
msgid "Internal Server Error" msgid "Internal Server Error"
msgstr "Fadhb freastalaí inmhéanach" msgstr "Fadhb freastalaí inmhéanach"
@ -65,7 +65,7 @@ msgstr "Fadhb freastalaí inmhéanach"
msgid "Invalid email or password" msgid "Invalid email or password"
msgstr "Seoladh email nó pasfhocal neamhbhailí" msgstr "Seoladh email nó pasfhocal neamhbhailí"
#: lib/cannery_web/views/error_view.ex:9 #: lib/cannery_web/views/error_view.ex:8
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
msgid "Not found" msgid "Not found"
msgstr "Ní feidir é a fáil" msgstr "Ní feidir é a fáil"
@ -86,15 +86,15 @@ msgstr ""
msgid "Reset password link is invalid or it has expired." msgid "Reset password link is invalid or it has expired."
msgstr "Tá nasc an pasfhocail a athrú neamhbailí nó as dáta." msgstr "Tá nasc an pasfhocail a athrú neamhbailí nó as dáta."
#: lib/cannery_web/controllers/user_registration_controller.ex:22 #: lib/cannery_web/controllers/user_registration_controller.ex:23
#: lib/cannery_web/controllers/user_registration_controller.ex:51 #: lib/cannery_web/controllers/user_registration_controller.ex:52
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
msgid "Sorry, public registration is disabled" msgid "Sorry, public registration is disabled"
msgstr "Tá brón orainn, tá clarú póiblí bactha" msgstr "Tá brón orainn, tá clarú póiblí bactha"
#: lib/cannery_web/controllers/user_registration_controller.ex:12 #: lib/cannery_web/controllers/user_registration_controller.ex:13
#: lib/cannery_web/controllers/user_registration_controller.ex:41 #: lib/cannery_web/controllers/user_registration_controller.ex:42
#: lib/cannery_web/controllers/user_registration_controller.ex:70 #: lib/cannery_web/controllers/user_registration_controller.ex:71
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
msgid "Sorry, this invite was not found or expired" msgid "Sorry, this invite was not found or expired"
msgstr "Tá brón orainn, ní feidir an cuireadh seo a fáil nó tá sé as dáta" msgstr "Tá brón orainn, ní feidir an cuireadh seo a fáil nó tá sé as dáta"
@ -104,7 +104,7 @@ msgstr "Tá brón orainn, ní feidir an cuireadh seo a fáil nó tá sé as dát
msgid "Unable to delete user" msgid "Unable to delete user"
msgstr "Ní feidir an úsáideoir a scriosadh" msgstr "Ní feidir an úsáideoir a scriosadh"
#: lib/cannery_web/views/error_view.ex:10 #: lib/cannery_web/views/error_view.ex:9
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
msgid "Unauthorized" msgid "Unauthorized"
msgstr "Níl cead agaibh" msgstr "Níl cead agaibh"
@ -114,7 +114,7 @@ msgstr "Níl cead agaibh"
msgid "User confirmation link is invalid or it has expired." msgid "User confirmation link is invalid or it has expired."
msgstr "Tá nasc an úsáideoir a deimhnigh neamhbailí nó as dáta." msgstr "Tá nasc an úsáideoir a deimhnigh neamhbailí nó as dáta."
#: lib/cannery_web/live/invite_live/index.ex:19 #: lib/cannery_web/live/invite_live/index.ex:18
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
msgid "You are not authorized to view this page" msgid "You are not authorized to view this page"
msgstr "Níl cead agaibh féachaint ar an leathanach seo" msgstr "Níl cead agaibh féachaint ar an leathanach seo"
@ -144,64 +144,73 @@ msgstr ""
msgid "must have the @ sign and no spaces" msgid "must have the @ sign and no spaces"
msgstr "" msgstr ""
#: lib/cannery/tags.ex:66 #: lib/cannery_web/live/container_live/show.ex:46
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
msgid "Tag not found" msgid "Tag not found"
msgstr "" msgstr ""
#: lib/cannery_web/live/container_live/edit_tags_component.ex:45 #: lib/cannery_web/live/container_live/edit_tags_component.ex:46
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
msgid "Tag could not be added" msgid "Tag could not be added"
msgstr "" msgstr ""
#: lib/cannery/activity_log/shot_group.ex:126
#, elixir-autogen, elixir-format
msgid "Count must be at least 1"
msgstr ""
#: lib/cannery_web/controllers/user_auth.ex:39 #: lib/cannery_web/controllers/user_auth.ex:39
#: lib/cannery_web/controllers/user_auth.ex:161 #: lib/cannery_web/controllers/user_auth.ex:161
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
msgid "You must confirm your account and log in to access this page." msgid "You must confirm your account and log in to access this page."
msgstr "" msgstr ""
#: lib/cannery_web/live/container_live/edit_tags_component.ex:72 #: lib/cannery_web/live/container_live/edit_tags_component.ex:73
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
msgid "Tag could not be removed" msgid "Tag could not be removed"
msgstr "" msgstr ""
#: lib/cannery_web/live/ammo_group_live/form_component.ex:157 #: lib/cannery_web/live/ammo_group_live/form_component.ex:160
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
msgid "Could not parse number of copies" msgid "Could not parse number of copies"
msgstr "" msgstr ""
#: lib/cannery_web/live/ammo_group_live/form_component.ex:142 #: lib/cannery_web/live/ammo_group_live/form_component.ex:150
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
msgid "Invalid number of copies, must be between 1 and %{max}. Was %{multiplier}" msgid "Invalid number of copies, must be between 1 and %{max}. Was %{multiplier}"
msgstr "" msgstr ""
#: lib/cannery/ammo.ex:686 #: lib/cannery/ammo.ex:1015
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
msgid "Invalid multiplier" msgid "Invalid multiplier"
msgstr "" msgstr ""
#: lib/cannery/ammo/ammo_group.ex:97 #: lib/cannery/ammo/ammo_group.ex:92
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
msgid "Please select an ammo type and container" msgid "Please select an ammo type and container"
msgstr "" msgstr ""
#: lib/cannery_web/live/range_live/index.html.heex:67 #: lib/cannery_web/live/range_live/index.html.heex:74
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
msgid "Your browser does not support the canvas element." msgid "Your browser does not support the canvas element."
msgstr "" msgstr ""
#: lib/cannery/activity_log/shot_group.ex:77 #: lib/cannery/activity_log/shot_group.ex:72
#, elixir-autogen, elixir-format, fuzzy #, elixir-autogen, elixir-format, fuzzy
msgid "Please select a valid user and ammo pack" msgid "Please select a valid user and ammo pack"
msgstr "" msgstr ""
#: lib/cannery/activity_log/shot_group.ex:83 #: lib/cannery/activity_log/shot_group.ex:86
#: lib/cannery/activity_log/shot_group.ex:121 #, elixir-autogen, elixir-format
#, elixir-autogen, elixir-format, fuzzy msgid "Ammo left can be at most %{count} rounds"
msgid "Count must be less than %{count} shots" msgstr ""
#: lib/cannery/activity_log/shot_group.ex:82
#, elixir-autogen, elixir-format
msgid "Ammo left must be at least 0"
msgstr ""
#: lib/cannery/activity_log/shot_group.ex:119
#, elixir-autogen, elixir-format, fuzzy
msgid "Count can be at most %{count} shots"
msgstr ""
#: lib/cannery/activity_log/shot_group.ex:78
#, elixir-autogen, elixir-format
msgid "can't be blank"
msgstr "" msgstr ""

View File

@ -21,31 +21,31 @@ msgstr ""
## Run "mix gettext.extract" to bring this file up to ## Run "mix gettext.extract" to bring this file up to
## date. Leave "msgstr"s empty as changing them here has no ## date. Leave "msgstr"s empty as changing them here has no
## effect: edit them in PO (.po) files instead. ## effect: edit them in PO (.po) files instead.
#: lib/cannery_web/live/ammo_type_live/form_component.ex:86 #: lib/cannery_web/live/ammo_type_live/form_component.ex:89
#: lib/cannery_web/live/container_live/form_component.ex:89 #: lib/cannery_web/live/container_live/form_component.ex:89
#: lib/cannery_web/live/invite_live/form_component.ex:80 #: lib/cannery_web/live/invite_live/form_component.ex:80
#: lib/cannery_web/live/tag_live/form_component.ex:79 #: lib/cannery_web/live/tag_live/form_component.ex:78
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
msgid "%{name} created successfully" msgid "%{name} created successfully"
msgstr "" msgstr ""
#: lib/cannery_web/live/ammo_type_live/index.ex:73 #: lib/cannery_web/live/ammo_type_live/index.ex:72
#: lib/cannery_web/live/ammo_type_live/show.ex:55 #: lib/cannery_web/live/ammo_type_live/show.ex:54
#: lib/cannery_web/live/tag_live/index.ex:64 #: lib/cannery_web/live/tag_live/index.ex:65
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
msgid "%{name} deleted succesfully" msgid "%{name} deleted succesfully"
msgstr "" msgstr ""
#: lib/cannery_web/live/container_live/index.ex:85 #: lib/cannery_web/live/container_live/index.ex:79
#: lib/cannery_web/live/container_live/show.ex:62 #: lib/cannery_web/live/container_live/show.ex:61
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
msgid "%{name} has been deleted" msgid "%{name} has been deleted"
msgstr "" msgstr ""
#: lib/cannery_web/live/ammo_type_live/form_component.ex:67 #: lib/cannery_web/live/ammo_type_live/form_component.ex:70
#: lib/cannery_web/live/container_live/form_component.ex:70 #: lib/cannery_web/live/container_live/form_component.ex:70
#: lib/cannery_web/live/invite_live/form_component.ex:62 #: lib/cannery_web/live/invite_live/form_component.ex:62
#: lib/cannery_web/live/tag_live/form_component.ex:61 #: lib/cannery_web/live/tag_live/form_component.ex:60
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
msgid "%{name} updated successfully" msgid "%{name} updated successfully"
msgstr "" msgstr ""
@ -55,22 +55,22 @@ msgstr ""
msgid "A link to confirm your email change has been sent to the new address." msgid "A link to confirm your email change has been sent to the new address."
msgstr "" msgstr ""
#: lib/cannery_web/live/invite_live/index.html.heex:105 #: lib/cannery_web/live/invite_live/index.html.heex:110
#: lib/cannery_web/live/invite_live/index.html.heex:133 #: lib/cannery_web/live/invite_live/index.html.heex:138
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
msgid "Are you sure you want to delete %{email}? This action is permanent!" msgid "Are you sure you want to delete %{email}? This action is permanent!"
msgstr "" msgstr ""
#: lib/cannery_web/live/container_live/index.html.heex:98 #: lib/cannery_web/live/container_live/index.html.heex:99
#: lib/cannery_web/live/container_live/index.html.heex:150 #: lib/cannery_web/live/container_live/index.html.heex:155
#: lib/cannery_web/live/container_live/show.html.heex:55 #: lib/cannery_web/live/container_live/show.html.heex:52
#: lib/cannery_web/live/tag_live/index.html.heex:62 #: lib/cannery_web/live/tag_live/index.html.heex:63
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
msgid "Are you sure you want to delete %{name}?" msgid "Are you sure you want to delete %{name}?"
msgstr "" msgstr ""
#: lib/cannery_web/live/ammo_group_live/index.html.heex:166 #: lib/cannery_web/live/ammo_group_live/index.html.heex:167
#: lib/cannery_web/live/ammo_group_live/show.html.heex:78 #: lib/cannery_web/live/ammo_group_live/show.html.heex:74
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
msgid "Are you sure you want to delete this ammo?" msgid "Are you sure you want to delete this ammo?"
msgstr "" msgstr ""
@ -80,7 +80,7 @@ msgstr ""
msgid "Are you sure you want to delete your account?" msgid "Are you sure you want to delete your account?"
msgstr "" msgstr ""
#: lib/cannery_web/components/topbar.ex:104 #: lib/cannery_web/components/core_components/topbar.html.heex:89
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
msgid "Are you sure you want to log out?" msgid "Are you sure you want to log out?"
msgstr "" msgstr ""
@ -115,7 +115,7 @@ msgstr ""
msgid "Password updated successfully." msgid "Password updated successfully."
msgstr "" msgstr ""
#: lib/cannery_web/controllers/user_registration_controller.ex:65 #: lib/cannery_web/controllers/user_registration_controller.ex:66
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
msgid "Please check your email to verify your account" msgid "Please check your email to verify your account"
msgstr "" msgstr ""
@ -141,44 +141,44 @@ msgstr ""
msgid "Are you sure you want to remove the %{tag_name} tag from %{container_name}?" msgid "Are you sure you want to remove the %{tag_name} tag from %{container_name}?"
msgstr "" msgstr ""
#: lib/cannery_web/live/container_live/edit_tags_component.ex:50 #: lib/cannery_web/live/container_live/edit_tags_component.ex:51
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
msgid "%{name} added successfully" msgid "%{name} added successfully"
msgstr "" msgstr ""
#: lib/cannery_web/live/container_live/show.ex:39 #: lib/cannery_web/live/container_live/show.ex:38
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
msgid "%{tag_name} has been removed from %{container_name}" msgid "%{tag_name} has been removed from %{container_name}"
msgstr "" msgstr ""
#: lib/cannery_web/live/container_live/edit_tags_component.html.heex:52 #: lib/cannery_web/live/container_live/edit_tags_component.html.heex:53
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
msgid "Adding..." msgid "Adding..."
msgstr "" msgstr ""
#: lib/cannery_web/components/add_shot_group_component.ex:56 #: lib/cannery_web/components/add_shot_group_component.ex:60
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
msgid "Shots recorded successfully" msgid "Shots recorded successfully"
msgstr "" msgstr ""
#: lib/cannery_web/live/range_live/index.html.heex:27 #: lib/cannery_web/live/range_live/index.html.heex:34
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
msgid "Are you sure you want to unstage this ammo?" msgid "Are you sure you want to unstage this ammo?"
msgstr "" msgstr ""
#: lib/cannery_web/live/ammo_group_live/show.ex:143 #: lib/cannery_web/live/ammo_group_live/show.ex:159
#: lib/cannery_web/live/range_live/index.html.heex:119 #: lib/cannery_web/live/range_live/index.html.heex:127
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
msgid "Are you sure you want to delete this shot record?" msgid "Are you sure you want to delete this shot record?"
msgstr "" msgstr ""
#: lib/cannery_web/live/ammo_group_live/show.ex:80 #: lib/cannery_web/live/ammo_group_live/show.ex:81
#: lib/cannery_web/live/range_live/index.ex:80 #: lib/cannery_web/live/range_live/index.ex:79
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
msgid "Shot records deleted succesfully" msgid "Shot records deleted succesfully"
msgstr "" msgstr ""
#: lib/cannery_web/live/range_live/form_component.ex:55 #: lib/cannery_web/live/range_live/form_component.ex:54
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
msgid "Shot records updated successfully" msgid "Shot records updated successfully"
msgstr "" msgstr ""
@ -188,17 +188,17 @@ msgstr ""
msgid "%{email} confirmed successfully." msgid "%{email} confirmed successfully."
msgstr "" msgstr ""
#: lib/cannery_web/components/move_ammo_group_component.ex:53 #: lib/cannery_web/components/move_ammo_group_component.ex:54
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
msgid "Ammo moved to %{name} successfully" msgid "Ammo moved to %{name} successfully"
msgstr "" msgstr ""
#: lib/cannery_web/live/invite_live/index.ex:127 #: lib/cannery_web/live/invite_live/index.ex:126
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
msgid "Copied to clipboard" msgid "Copied to clipboard"
msgstr "" msgstr ""
#: lib/cannery_web/live/container_live/edit_tags_component.ex:77 #: lib/cannery_web/live/container_live/edit_tags_component.ex:78
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
msgid "%{name} removed successfully" msgid "%{name} removed successfully"
msgstr "" msgstr ""
@ -225,22 +225,22 @@ msgid "Language updated successfully."
msgstr "" msgstr ""
#: lib/cannery_web/live/ammo_group_live/index.ex:89 #: lib/cannery_web/live/ammo_group_live/index.ex:89
#: lib/cannery_web/live/ammo_group_live/show.ex:54 #: lib/cannery_web/live/ammo_group_live/show.ex:55
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
msgid "Ammo deleted succesfully" msgid "Ammo deleted succesfully"
msgstr "" msgstr ""
#: lib/cannery_web/live/range_live/index.ex:94 #: lib/cannery_web/live/range_live/index.ex:93
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
msgid "Ammo unstaged succesfully" msgid "Ammo unstaged succesfully"
msgstr "" msgstr ""
#: lib/cannery_web/live/ammo_group_live/form_component.ex:118 #: lib/cannery_web/live/ammo_group_live/form_component.ex:126
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
msgid "Ammo updated successfully" msgid "Ammo updated successfully"
msgstr "" msgstr ""
#: lib/cannery_web/live/ammo_group_live/form_component.ex:178 #: lib/cannery_web/live/ammo_group_live/form_component.ex:185
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
msgid "Ammo added successfully" msgid "Ammo added successfully"
msgid_plural "Ammo added successfully" msgid_plural "Ammo added successfully"
@ -250,48 +250,48 @@ msgstr[2] ""
msgstr[3] "" msgstr[3] ""
msgstr[4] "" msgstr[4] ""
#: lib/cannery_web/live/ammo_type_live/index.html.heex:95 #: lib/cannery_web/live/ammo_type_live/index.html.heex:96
#: lib/cannery_web/live/ammo_type_live/show.html.heex:29 #: lib/cannery_web/live/ammo_type_live/show.html.heex:29
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
msgid "Are you sure you want to delete %{name}? This will delete all %{name} type ammo as well!" msgid "Are you sure you want to delete %{name}? This will delete all %{name} type ammo as well!"
msgstr "" msgstr ""
#: lib/cannery_web/live/home_live.html.heex:65 #: lib/cannery_web/live/home_live.html.heex:63
#, elixir-autogen, elixir-format, fuzzy #, elixir-autogen, elixir-format, fuzzy
msgid "Register to setup Cannery" msgid "Register to setup Cannery"
msgstr "" msgstr ""
#: lib/cannery_web/live/invite_live/index.ex:54 #: lib/cannery_web/live/invite_live/index.ex:53
#, elixir-autogen, elixir-format, fuzzy #, elixir-autogen, elixir-format, fuzzy
msgid "%{invite_name} deleted succesfully" msgid "%{invite_name} deleted succesfully"
msgstr "" msgstr ""
#: lib/cannery_web/live/invite_live/index.ex:115 #: lib/cannery_web/live/invite_live/index.ex:114
#, elixir-autogen, elixir-format, fuzzy #, elixir-autogen, elixir-format, fuzzy
msgid "%{invite_name} disabled succesfully" msgid "%{invite_name} disabled succesfully"
msgstr "" msgstr ""
#: lib/cannery_web/live/invite_live/index.ex:91 #: lib/cannery_web/live/invite_live/index.ex:90
#, elixir-autogen, elixir-format, fuzzy #, elixir-autogen, elixir-format, fuzzy
msgid "%{invite_name} enabled succesfully" msgid "%{invite_name} enabled succesfully"
msgstr "" msgstr ""
#: lib/cannery_web/live/invite_live/index.ex:69 #: lib/cannery_web/live/invite_live/index.ex:68
#, elixir-autogen, elixir-format, fuzzy #, elixir-autogen, elixir-format, fuzzy
msgid "%{invite_name} updated succesfully" msgid "%{invite_name} updated succesfully"
msgstr "" msgstr ""
#: lib/cannery_web/live/invite_live/index.ex:138 #: lib/cannery_web/live/invite_live/index.ex:135
#, elixir-autogen, elixir-format, fuzzy #, elixir-autogen, elixir-format, fuzzy
msgid "%{user_email} deleted succesfully" msgid "%{user_email} deleted succesfully"
msgstr "" msgstr ""
#: lib/cannery_web/live/invite_live/index.html.heex:53 #: lib/cannery_web/live/invite_live/index.html.heex:58
#, elixir-autogen, elixir-format, fuzzy #, elixir-autogen, elixir-format, fuzzy
msgid "Are you sure you want to delete the invite for %{invite_name}?" msgid "Are you sure you want to delete the invite for %{invite_name}?"
msgstr "" msgstr ""
#: lib/cannery_web/live/invite_live/index.html.heex:80 #: lib/cannery_web/live/invite_live/index.html.heex:85
#, elixir-autogen, elixir-format, fuzzy #, elixir-autogen, elixir-format, fuzzy
msgid "Are you sure you want to make %{invite_name} unlimited?" msgid "Are you sure you want to make %{invite_name} unlimited?"
msgstr "" msgstr ""

View File

@ -10,31 +10,31 @@
msgid "" msgid ""
msgstr "" msgstr ""
#: lib/cannery_web/live/ammo_type_live/form_component.ex:86 #: lib/cannery_web/live/ammo_type_live/form_component.ex:89
#: lib/cannery_web/live/container_live/form_component.ex:89 #: lib/cannery_web/live/container_live/form_component.ex:89
#: lib/cannery_web/live/invite_live/form_component.ex:80 #: lib/cannery_web/live/invite_live/form_component.ex:80
#: lib/cannery_web/live/tag_live/form_component.ex:79 #: lib/cannery_web/live/tag_live/form_component.ex:78
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
msgid "%{name} created successfully" msgid "%{name} created successfully"
msgstr "" msgstr ""
#: lib/cannery_web/live/ammo_type_live/index.ex:73 #: lib/cannery_web/live/ammo_type_live/index.ex:72
#: lib/cannery_web/live/ammo_type_live/show.ex:55 #: lib/cannery_web/live/ammo_type_live/show.ex:54
#: lib/cannery_web/live/tag_live/index.ex:64 #: lib/cannery_web/live/tag_live/index.ex:65
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
msgid "%{name} deleted succesfully" msgid "%{name} deleted succesfully"
msgstr "" msgstr ""
#: lib/cannery_web/live/container_live/index.ex:85 #: lib/cannery_web/live/container_live/index.ex:79
#: lib/cannery_web/live/container_live/show.ex:62 #: lib/cannery_web/live/container_live/show.ex:61
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
msgid "%{name} has been deleted" msgid "%{name} has been deleted"
msgstr "" msgstr ""
#: lib/cannery_web/live/ammo_type_live/form_component.ex:67 #: lib/cannery_web/live/ammo_type_live/form_component.ex:70
#: lib/cannery_web/live/container_live/form_component.ex:70 #: lib/cannery_web/live/container_live/form_component.ex:70
#: lib/cannery_web/live/invite_live/form_component.ex:62 #: lib/cannery_web/live/invite_live/form_component.ex:62
#: lib/cannery_web/live/tag_live/form_component.ex:61 #: lib/cannery_web/live/tag_live/form_component.ex:60
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
msgid "%{name} updated successfully" msgid "%{name} updated successfully"
msgstr "" msgstr ""
@ -44,22 +44,22 @@ msgstr ""
msgid "A link to confirm your email change has been sent to the new address." msgid "A link to confirm your email change has been sent to the new address."
msgstr "" msgstr ""
#: lib/cannery_web/live/invite_live/index.html.heex:105 #: lib/cannery_web/live/invite_live/index.html.heex:110
#: lib/cannery_web/live/invite_live/index.html.heex:133 #: lib/cannery_web/live/invite_live/index.html.heex:138
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
msgid "Are you sure you want to delete %{email}? This action is permanent!" msgid "Are you sure you want to delete %{email}? This action is permanent!"
msgstr "" msgstr ""
#: lib/cannery_web/live/container_live/index.html.heex:98 #: lib/cannery_web/live/container_live/index.html.heex:99
#: lib/cannery_web/live/container_live/index.html.heex:150 #: lib/cannery_web/live/container_live/index.html.heex:155
#: lib/cannery_web/live/container_live/show.html.heex:55 #: lib/cannery_web/live/container_live/show.html.heex:52
#: lib/cannery_web/live/tag_live/index.html.heex:62 #: lib/cannery_web/live/tag_live/index.html.heex:63
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
msgid "Are you sure you want to delete %{name}?" msgid "Are you sure you want to delete %{name}?"
msgstr "" msgstr ""
#: lib/cannery_web/live/ammo_group_live/index.html.heex:166 #: lib/cannery_web/live/ammo_group_live/index.html.heex:167
#: lib/cannery_web/live/ammo_group_live/show.html.heex:78 #: lib/cannery_web/live/ammo_group_live/show.html.heex:74
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
msgid "Are you sure you want to delete this ammo?" msgid "Are you sure you want to delete this ammo?"
msgstr "" msgstr ""
@ -69,7 +69,7 @@ msgstr ""
msgid "Are you sure you want to delete your account?" msgid "Are you sure you want to delete your account?"
msgstr "" msgstr ""
#: lib/cannery_web/components/topbar.ex:104 #: lib/cannery_web/components/core_components/topbar.html.heex:89
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
msgid "Are you sure you want to log out?" msgid "Are you sure you want to log out?"
msgstr "" msgstr ""
@ -104,7 +104,7 @@ msgstr ""
msgid "Password updated successfully." msgid "Password updated successfully."
msgstr "" msgstr ""
#: lib/cannery_web/controllers/user_registration_controller.ex:65 #: lib/cannery_web/controllers/user_registration_controller.ex:66
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
msgid "Please check your email to verify your account" msgid "Please check your email to verify your account"
msgstr "" msgstr ""
@ -130,44 +130,44 @@ msgstr ""
msgid "Are you sure you want to remove the %{tag_name} tag from %{container_name}?" msgid "Are you sure you want to remove the %{tag_name} tag from %{container_name}?"
msgstr "" msgstr ""
#: lib/cannery_web/live/container_live/edit_tags_component.ex:50 #: lib/cannery_web/live/container_live/edit_tags_component.ex:51
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
msgid "%{name} added successfully" msgid "%{name} added successfully"
msgstr "" msgstr ""
#: lib/cannery_web/live/container_live/show.ex:39 #: lib/cannery_web/live/container_live/show.ex:38
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
msgid "%{tag_name} has been removed from %{container_name}" msgid "%{tag_name} has been removed from %{container_name}"
msgstr "" msgstr ""
#: lib/cannery_web/live/container_live/edit_tags_component.html.heex:52 #: lib/cannery_web/live/container_live/edit_tags_component.html.heex:53
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
msgid "Adding..." msgid "Adding..."
msgstr "" msgstr ""
#: lib/cannery_web/components/add_shot_group_component.ex:56 #: lib/cannery_web/components/add_shot_group_component.ex:60
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
msgid "Shots recorded successfully" msgid "Shots recorded successfully"
msgstr "" msgstr ""
#: lib/cannery_web/live/range_live/index.html.heex:27 #: lib/cannery_web/live/range_live/index.html.heex:34
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
msgid "Are you sure you want to unstage this ammo?" msgid "Are you sure you want to unstage this ammo?"
msgstr "" msgstr ""
#: lib/cannery_web/live/ammo_group_live/show.ex:143 #: lib/cannery_web/live/ammo_group_live/show.ex:159
#: lib/cannery_web/live/range_live/index.html.heex:119 #: lib/cannery_web/live/range_live/index.html.heex:127
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
msgid "Are you sure you want to delete this shot record?" msgid "Are you sure you want to delete this shot record?"
msgstr "" msgstr ""
#: lib/cannery_web/live/ammo_group_live/show.ex:80 #: lib/cannery_web/live/ammo_group_live/show.ex:81
#: lib/cannery_web/live/range_live/index.ex:80 #: lib/cannery_web/live/range_live/index.ex:79
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
msgid "Shot records deleted succesfully" msgid "Shot records deleted succesfully"
msgstr "" msgstr ""
#: lib/cannery_web/live/range_live/form_component.ex:55 #: lib/cannery_web/live/range_live/form_component.ex:54
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
msgid "Shot records updated successfully" msgid "Shot records updated successfully"
msgstr "" msgstr ""
@ -177,17 +177,17 @@ msgstr ""
msgid "%{email} confirmed successfully." msgid "%{email} confirmed successfully."
msgstr "" msgstr ""
#: lib/cannery_web/components/move_ammo_group_component.ex:53 #: lib/cannery_web/components/move_ammo_group_component.ex:54
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
msgid "Ammo moved to %{name} successfully" msgid "Ammo moved to %{name} successfully"
msgstr "" msgstr ""
#: lib/cannery_web/live/invite_live/index.ex:127 #: lib/cannery_web/live/invite_live/index.ex:126
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
msgid "Copied to clipboard" msgid "Copied to clipboard"
msgstr "" msgstr ""
#: lib/cannery_web/live/container_live/edit_tags_component.ex:77 #: lib/cannery_web/live/container_live/edit_tags_component.ex:78
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
msgid "%{name} removed successfully" msgid "%{name} removed successfully"
msgstr "" msgstr ""
@ -214,70 +214,70 @@ msgid "Language updated successfully."
msgstr "" msgstr ""
#: lib/cannery_web/live/ammo_group_live/index.ex:89 #: lib/cannery_web/live/ammo_group_live/index.ex:89
#: lib/cannery_web/live/ammo_group_live/show.ex:54 #: lib/cannery_web/live/ammo_group_live/show.ex:55
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
msgid "Ammo deleted succesfully" msgid "Ammo deleted succesfully"
msgstr "" msgstr ""
#: lib/cannery_web/live/range_live/index.ex:94 #: lib/cannery_web/live/range_live/index.ex:93
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
msgid "Ammo unstaged succesfully" msgid "Ammo unstaged succesfully"
msgstr "" msgstr ""
#: lib/cannery_web/live/ammo_group_live/form_component.ex:118 #: lib/cannery_web/live/ammo_group_live/form_component.ex:126
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
msgid "Ammo updated successfully" msgid "Ammo updated successfully"
msgstr "" msgstr ""
#: lib/cannery_web/live/ammo_group_live/form_component.ex:178 #: lib/cannery_web/live/ammo_group_live/form_component.ex:185
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
msgid "Ammo added successfully" msgid "Ammo added successfully"
msgid_plural "Ammo added successfully" msgid_plural "Ammo added successfully"
msgstr[0] "" msgstr[0] ""
msgstr[1] "" msgstr[1] ""
#: lib/cannery_web/live/ammo_type_live/index.html.heex:95 #: lib/cannery_web/live/ammo_type_live/index.html.heex:96
#: lib/cannery_web/live/ammo_type_live/show.html.heex:29 #: lib/cannery_web/live/ammo_type_live/show.html.heex:29
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
msgid "Are you sure you want to delete %{name}? This will delete all %{name} type ammo as well!" msgid "Are you sure you want to delete %{name}? This will delete all %{name} type ammo as well!"
msgstr "" msgstr ""
#: lib/cannery_web/live/home_live.html.heex:65 #: lib/cannery_web/live/home_live.html.heex:63
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
msgid "Register to setup Cannery" msgid "Register to setup Cannery"
msgstr "" msgstr ""
#: lib/cannery_web/live/invite_live/index.ex:54 #: lib/cannery_web/live/invite_live/index.ex:53
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
msgid "%{invite_name} deleted succesfully" msgid "%{invite_name} deleted succesfully"
msgstr "" msgstr ""
#: lib/cannery_web/live/invite_live/index.ex:115 #: lib/cannery_web/live/invite_live/index.ex:114
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
msgid "%{invite_name} disabled succesfully" msgid "%{invite_name} disabled succesfully"
msgstr "" msgstr ""
#: lib/cannery_web/live/invite_live/index.ex:91 #: lib/cannery_web/live/invite_live/index.ex:90
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
msgid "%{invite_name} enabled succesfully" msgid "%{invite_name} enabled succesfully"
msgstr "" msgstr ""
#: lib/cannery_web/live/invite_live/index.ex:69 #: lib/cannery_web/live/invite_live/index.ex:68
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
msgid "%{invite_name} updated succesfully" msgid "%{invite_name} updated succesfully"
msgstr "" msgstr ""
#: lib/cannery_web/live/invite_live/index.ex:138 #: lib/cannery_web/live/invite_live/index.ex:135
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
msgid "%{user_email} deleted succesfully" msgid "%{user_email} deleted succesfully"
msgstr "" msgstr ""
#: lib/cannery_web/live/invite_live/index.html.heex:53 #: lib/cannery_web/live/invite_live/index.html.heex:58
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
msgid "Are you sure you want to delete the invite for %{invite_name}?" msgid "Are you sure you want to delete the invite for %{invite_name}?"
msgstr "" msgstr ""
#: lib/cannery_web/live/invite_live/index.html.heex:80 #: lib/cannery_web/live/invite_live/index.html.heex:85
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
msgid "Are you sure you want to make %{invite_name} unlimited?" msgid "Are you sure you want to make %{invite_name} unlimited?"
msgstr "" msgstr ""

View File

@ -53,7 +53,7 @@ defmodule Cannery.InvitesTest do
test "get_use_count/2 returns the correct invite usage", test "get_use_count/2 returns the correct invite usage",
%{invite: %{token: token} = invite, current_user: current_user} do %{invite: %{token: token} = invite, current_user: current_user} do
assert 0 == Invites.get_use_count(invite, current_user) assert Invites.get_use_count(invite, current_user) |> is_nil()
assert {:ok, _user} = assert {:ok, _user} =
Accounts.register_user( Accounts.register_user(
@ -72,6 +72,40 @@ defmodule Cannery.InvitesTest do
assert 2 == Invites.get_use_count(invite, current_user) assert 2 == Invites.get_use_count(invite, current_user)
end end
test "get_use_counts/2 returns the correct invite usage",
%{invite: %{id: invite_id, token: token} = invite, current_user: current_user} do
{:ok, %{id: another_invite_id, token: another_token} = another_invite} =
Invites.create_invite(current_user, @valid_attrs)
assert [invite, another_invite] |> Invites.get_use_counts(current_user) == %{}
assert {:ok, _user} =
Accounts.register_user(
%{"email" => unique_user_email(), "password" => valid_user_password()},
token
)
assert {:ok, _user} =
Accounts.register_user(
%{"email" => unique_user_email(), "password" => valid_user_password()},
another_token
)
use_counts = [invite, another_invite] |> Invites.get_use_counts(current_user)
assert %{^invite_id => 1} = use_counts
assert %{^another_invite_id => 1} = use_counts
assert {:ok, _user} =
Accounts.register_user(
%{"email" => unique_user_email(), "password" => valid_user_password()},
token
)
use_counts = [invite, another_invite] |> Invites.get_use_counts(current_user)
assert %{^invite_id => 2} = use_counts
assert %{^another_invite_id => 1} = use_counts
end
test "use_invite/1 successfully uses an unlimited invite", test "use_invite/1 successfully uses an unlimited invite",
%{invite: %{token: token} = invite, current_user: current_user} do %{invite: %{token: token} = invite, current_user: current_user} do
{:ok, invite} = Invites.update_invite(invite, %{uses_left: nil}, current_user) {:ok, invite} = Invites.update_invite(invite, %{uses_left: nil}, current_user)

View File

@ -217,5 +217,158 @@ defmodule Cannery.ActivityLogTest do
ActivityLog.get_shot_group!(shot_group.id, current_user) ActivityLog.get_shot_group!(shot_group.id, current_user)
end end
end end
test "get_used_count/2 returns accurate used count", %{
ammo_group: ammo_group,
ammo_type: ammo_type,
container: container,
current_user: current_user
} do
{1, [another_ammo_group]} = ammo_group_fixture(ammo_type, container, current_user)
assert 0 = another_ammo_group |> ActivityLog.get_used_count(current_user)
assert 5 = ammo_group |> ActivityLog.get_used_count(current_user)
shot_group_fixture(%{"count" => 15}, current_user, ammo_group)
assert 20 = ammo_group |> ActivityLog.get_used_count(current_user)
shot_group_fixture(%{"count" => 10}, current_user, ammo_group)
assert 30 = ammo_group |> ActivityLog.get_used_count(current_user)
{1, [another_ammo_group]} = ammo_group_fixture(ammo_type, container, current_user)
assert 0 = another_ammo_group |> ActivityLog.get_used_count(current_user)
end
test "get_used_counts/2 returns accurate used counts", %{
ammo_group: %{id: ammo_group_id} = ammo_group,
ammo_type: ammo_type,
container: container,
current_user: current_user
} do
{1, [%{id: another_ammo_group_id} = another_ammo_group]} =
ammo_group_fixture(ammo_type, container, current_user)
assert %{ammo_group_id => 5} ==
[ammo_group, another_ammo_group] |> ActivityLog.get_used_counts(current_user)
shot_group_fixture(%{"count" => 5}, current_user, another_ammo_group)
used_counts = [ammo_group, another_ammo_group] |> ActivityLog.get_used_counts(current_user)
assert %{^ammo_group_id => 5} = used_counts
assert %{^another_ammo_group_id => 5} = used_counts
shot_group_fixture(%{"count" => 15}, current_user, ammo_group)
used_counts = [ammo_group, another_ammo_group] |> ActivityLog.get_used_counts(current_user)
assert %{^ammo_group_id => 20} = used_counts
assert %{^another_ammo_group_id => 5} = used_counts
shot_group_fixture(%{"count" => 10}, current_user, ammo_group)
used_counts = [ammo_group, another_ammo_group] |> ActivityLog.get_used_counts(current_user)
assert %{^ammo_group_id => 30} = used_counts
assert %{^another_ammo_group_id => 5} = used_counts
end
test "get_last_used_date/2 returns accurate used count", %{
ammo_group: ammo_group,
ammo_type: ammo_type,
container: container,
shot_group: %{date: date},
current_user: current_user
} do
{1, [another_ammo_group]} = ammo_group_fixture(ammo_type, container, current_user)
assert another_ammo_group |> ActivityLog.get_last_used_date(current_user) |> is_nil()
assert ^date = ammo_group |> ActivityLog.get_last_used_date(current_user)
%{date: date} = shot_group_fixture(%{"date" => ~D[2022-11-10]}, current_user, ammo_group)
assert ^date = ammo_group |> ActivityLog.get_last_used_date(current_user)
%{date: date} = shot_group_fixture(%{"date" => ~D[2022-11-11]}, current_user, ammo_group)
assert ^date = ammo_group |> ActivityLog.get_last_used_date(current_user)
end
test "get_last_used_dates/2 returns accurate used counts", %{
ammo_group: %{id: ammo_group_id} = ammo_group,
ammo_type: ammo_type,
container: container,
shot_group: %{date: date},
current_user: current_user
} do
{1, [%{id: another_ammo_group_id} = another_ammo_group]} =
ammo_group_fixture(ammo_type, container, current_user)
# unset date
assert %{ammo_group_id => date} ==
[ammo_group, another_ammo_group] |> ActivityLog.get_last_used_dates(current_user)
shot_group_fixture(%{"date" => ~D[2022-11-09]}, current_user, another_ammo_group)
# setting initial date
last_used_shot_groups =
[ammo_group, another_ammo_group] |> ActivityLog.get_last_used_dates(current_user)
assert %{^ammo_group_id => ^date} = last_used_shot_groups
assert %{^another_ammo_group_id => ~D[2022-11-09]} = last_used_shot_groups
# setting another date
shot_group_fixture(%{"date" => ~D[2022-11-10]}, current_user, ammo_group)
last_used_shot_groups =
[ammo_group, another_ammo_group] |> ActivityLog.get_last_used_dates(current_user)
assert %{^ammo_group_id => ~D[2022-11-10]} = last_used_shot_groups
assert %{^another_ammo_group_id => ~D[2022-11-09]} = last_used_shot_groups
# setting yet another date
shot_group_fixture(%{"date" => ~D[2022-11-11]}, current_user, ammo_group)
last_used_shot_groups =
[ammo_group, another_ammo_group] |> ActivityLog.get_last_used_dates(current_user)
assert %{^ammo_group_id => ~D[2022-11-11]} = last_used_shot_groups
assert %{^another_ammo_group_id => ~D[2022-11-09]} = last_used_shot_groups
end
test "get_used_count_for_ammo_type/2 gets accurate used round count for ammo type",
%{ammo_type: ammo_type, ammo_group: ammo_group, current_user: current_user} do
another_ammo_type = ammo_type_fixture(current_user)
assert 0 = another_ammo_type |> ActivityLog.get_used_count_for_ammo_type(current_user)
assert 5 = ammo_type |> ActivityLog.get_used_count_for_ammo_type(current_user)
shot_group_fixture(%{"count" => 5}, current_user, ammo_group)
assert 10 = ammo_type |> ActivityLog.get_used_count_for_ammo_type(current_user)
shot_group_fixture(%{"count" => 1}, current_user, ammo_group)
assert 11 = ammo_type |> ActivityLog.get_used_count_for_ammo_type(current_user)
end
test "get_used_count_for_ammo_types/2 gets accurate used round count for ammo types", %{
ammo_type: %{id: ammo_type_id} = ammo_type,
container: container,
current_user: current_user
} do
# testing unused ammo type
%{id: another_ammo_type_id} = another_ammo_type = ammo_type_fixture(current_user)
{1, [ammo_group]} = ammo_group_fixture(another_ammo_type, container, current_user)
assert %{ammo_type_id => 5} ==
[ammo_type, another_ammo_type]
|> ActivityLog.get_used_count_for_ammo_types(current_user)
# use generated ammo group
shot_group_fixture(%{"count" => 5}, current_user, ammo_group)
used_counts =
[ammo_type, another_ammo_type] |> ActivityLog.get_used_count_for_ammo_types(current_user)
assert %{^ammo_type_id => 5} = used_counts
assert %{^another_ammo_type_id => 5} = used_counts
# use generated ammo group again
shot_group_fixture(%{"count" => 1}, current_user, ammo_group)
used_counts =
[ammo_type, another_ammo_type] |> ActivityLog.get_used_count_for_ammo_types(current_user)
assert %{^ammo_type_id => 5} = used_counts
assert %{^another_ammo_type_id => 6} = used_counts
end
end end
end end

View File

@ -151,7 +151,7 @@ defmodule Cannery.AmmoTest do
] ]
end end
test "get_average_cost_for_ammo_type!/2 gets average cost for ammo type", test "get_average_cost_for_ammo_type/2 gets average cost for ammo type",
%{ammo_type: ammo_type, current_user: current_user, container: container} do %{ammo_type: ammo_type, current_user: current_user, container: container} do
{1, [_ammo_group]} = {1, [_ammo_group]} =
ammo_group_fixture( ammo_group_fixture(
@ -161,7 +161,7 @@ defmodule Cannery.AmmoTest do
current_user current_user
) )
assert 25.0 = Ammo.get_average_cost_for_ammo_type!(ammo_type, current_user) assert 25.0 = Ammo.get_average_cost_for_ammo_type(ammo_type, current_user)
{1, [_ammo_group]} = {1, [_ammo_group]} =
ammo_group_fixture( ammo_group_fixture(
@ -171,7 +171,7 @@ defmodule Cannery.AmmoTest do
current_user current_user
) )
assert 25.0 = Ammo.get_average_cost_for_ammo_type!(ammo_type, current_user) assert 25.0 = Ammo.get_average_cost_for_ammo_type(ammo_type, current_user)
{1, [_ammo_group]} = {1, [_ammo_group]} =
ammo_group_fixture( ammo_group_fixture(
@ -181,7 +181,7 @@ defmodule Cannery.AmmoTest do
current_user current_user
) )
assert 40.0 = Ammo.get_average_cost_for_ammo_type!(ammo_type, current_user) assert 40.0 = Ammo.get_average_cost_for_ammo_type(ammo_type, current_user)
{1, [_ammo_group]} = {1, [_ammo_group]} =
ammo_group_fixture( ammo_group_fixture(
@ -191,11 +191,96 @@ defmodule Cannery.AmmoTest do
current_user current_user
) )
assert 37.5 = Ammo.get_average_cost_for_ammo_type!(ammo_type, current_user) assert 37.5 = Ammo.get_average_cost_for_ammo_type(ammo_type, current_user)
end
test "get_average_cost_for_ammo_types/2 gets average costs for ammo types", %{
ammo_type: %{id: ammo_type_id} = ammo_type,
current_user: current_user,
container: container
} do
assert %{} == [ammo_type] |> Ammo.get_average_cost_for_ammo_types(current_user)
%{id: another_ammo_type_id} = another_ammo_type = ammo_type_fixture(current_user)
assert %{} ==
[ammo_type, another_ammo_type]
|> Ammo.get_average_cost_for_ammo_types(current_user)
{1, [_ammo_group]} =
ammo_group_fixture(
%{"price_paid" => 25.00, "count" => 1},
another_ammo_type,
container,
current_user
)
assert %{another_ammo_type_id => 25.0} ==
[ammo_type, another_ammo_type]
|> Ammo.get_average_cost_for_ammo_types(current_user)
{1, [_ammo_group]} =
ammo_group_fixture(
%{"price_paid" => 25.00, "count" => 1},
ammo_type,
container,
current_user
)
average_costs =
[ammo_type, another_ammo_type] |> Ammo.get_average_cost_for_ammo_types(current_user)
assert %{^ammo_type_id => 25.0} = average_costs
assert %{^another_ammo_type_id => 25.0} = average_costs
{1, [_ammo_group]} =
ammo_group_fixture(
%{"price_paid" => 25.00, "count" => 1},
ammo_type,
container,
current_user
)
average_costs =
[ammo_type, another_ammo_type] |> Ammo.get_average_cost_for_ammo_types(current_user)
assert %{^ammo_type_id => 25.0} = average_costs
assert %{^another_ammo_type_id => 25.0} = average_costs
{1, [_ammo_group]} =
ammo_group_fixture(
%{"price_paid" => 70.00, "count" => 1},
ammo_type,
container,
current_user
)
average_costs =
[ammo_type, another_ammo_type] |> Ammo.get_average_cost_for_ammo_types(current_user)
assert %{^ammo_type_id => 40.0} = average_costs
assert %{^another_ammo_type_id => 25.0} = average_costs
{1, [_ammo_group]} =
ammo_group_fixture(
%{"price_paid" => 30.00, "count" => 1},
ammo_type,
container,
current_user
)
average_costs =
[ammo_type, another_ammo_type] |> Ammo.get_average_cost_for_ammo_types(current_user)
assert %{^ammo_type_id => 37.5} = average_costs
assert %{^another_ammo_type_id => 25.0} = average_costs
end end
test "get_round_count_for_ammo_type/2 gets accurate round count for ammo type", test "get_round_count_for_ammo_type/2 gets accurate round count for ammo type",
%{ammo_type: ammo_type, current_user: current_user, container: container} do %{ammo_type: ammo_type, current_user: current_user, container: container} do
another_ammo_type = ammo_type_fixture(current_user)
assert 0 = Ammo.get_round_count_for_ammo_type(another_ammo_type, current_user)
{1, [first_ammo_group]} = {1, [first_ammo_group]} =
ammo_group_fixture(%{"count" => 1}, ammo_type, container, current_user) ammo_group_fixture(%{"count" => 1}, ammo_type, container, current_user)
@ -212,26 +297,57 @@ defmodule Cannery.AmmoTest do
assert 24 = Ammo.get_round_count_for_ammo_type(ammo_type, current_user) assert 24 = Ammo.get_round_count_for_ammo_type(ammo_type, current_user)
end end
test "get_used_count_for_ammo_type/2 gets accurate used round count for ammo type", test "get_round_count_for_ammo_types/2 gets accurate round counts for ammo types", %{
%{ammo_type: ammo_type, current_user: current_user, container: container} do ammo_type: %{id: ammo_type_id} = ammo_type,
current_user: current_user,
container: container
} do
{1, [first_ammo_group]} = {1, [first_ammo_group]} =
ammo_group_fixture(%{"count" => 1}, ammo_type, container, current_user) ammo_group_fixture(%{"count" => 1}, ammo_type, container, current_user)
assert 0 = Ammo.get_used_count_for_ammo_type(ammo_type, current_user) assert %{ammo_type_id => 1} ==
[ammo_type] |> Ammo.get_round_count_for_ammo_types(current_user)
%{id: another_ammo_type_id} = another_ammo_type = ammo_type_fixture(current_user)
{1, [_another_ammo_group]} =
ammo_group_fixture(%{"count" => 1}, another_ammo_type, container, current_user)
round_counts =
[ammo_type, another_ammo_type] |> Ammo.get_round_count_for_ammo_types(current_user)
assert %{^ammo_type_id => 1} = round_counts
assert %{^another_ammo_type_id => 1} = round_counts
{1, [ammo_group]} = ammo_group_fixture(%{"count" => 50}, ammo_type, container, current_user) {1, [ammo_group]} = ammo_group_fixture(%{"count" => 50}, ammo_type, container, current_user)
assert 0 = Ammo.get_used_count_for_ammo_type(ammo_type, current_user) round_counts =
[ammo_type, another_ammo_type] |> Ammo.get_round_count_for_ammo_types(current_user)
assert %{^ammo_type_id => 51} = round_counts
assert %{^another_ammo_type_id => 1} = round_counts
shot_group_fixture(%{"count" => 26}, current_user, ammo_group) shot_group_fixture(%{"count" => 26}, current_user, ammo_group)
assert 26 = Ammo.get_used_count_for_ammo_type(ammo_type, current_user)
round_counts =
[ammo_type, another_ammo_type] |> Ammo.get_round_count_for_ammo_types(current_user)
assert %{^ammo_type_id => 25} = round_counts
assert %{^another_ammo_type_id => 1} = round_counts
shot_group_fixture(%{"count" => 1}, current_user, first_ammo_group) shot_group_fixture(%{"count" => 1}, current_user, first_ammo_group)
assert 27 = Ammo.get_used_count_for_ammo_type(ammo_type, current_user)
round_counts =
[ammo_type, another_ammo_type] |> Ammo.get_round_count_for_ammo_types(current_user)
assert %{^ammo_type_id => 24} = round_counts
assert %{^another_ammo_type_id => 1} = round_counts
end end
test "get_historical_count_for_ammo_type/2 gets accurate total round count for ammo type", test "get_historical_count_for_ammo_type/2 gets accurate total round count for ammo type",
%{ammo_type: ammo_type, current_user: current_user, container: container} do %{ammo_type: ammo_type, current_user: current_user, container: container} do
assert 0 = Ammo.get_historical_count_for_ammo_type(ammo_type, current_user)
{1, [first_ammo_group]} = {1, [first_ammo_group]} =
ammo_group_fixture(%{"count" => 1}, ammo_type, container, current_user) ammo_group_fixture(%{"count" => 1}, ammo_type, container, current_user)
@ -248,8 +364,60 @@ defmodule Cannery.AmmoTest do
assert 51 = Ammo.get_historical_count_for_ammo_type(ammo_type, current_user) assert 51 = Ammo.get_historical_count_for_ammo_type(ammo_type, current_user)
end end
test "get_historical_count_for_ammo_types/2 gets accurate total round counts for ammo types",
%{
ammo_type: %{id: ammo_type_id} = ammo_type,
current_user: current_user,
container: container
} do
assert %{} == [ammo_type] |> Ammo.get_historical_count_for_ammo_types(current_user)
{1, [first_ammo_group]} =
ammo_group_fixture(%{"count" => 1}, ammo_type, container, current_user)
assert %{ammo_type_id => 1} ==
[ammo_type] |> Ammo.get_historical_count_for_ammo_types(current_user)
%{id: another_ammo_type_id} = another_ammo_type = ammo_type_fixture(current_user)
{1, [_ammo_group]} =
ammo_group_fixture(%{"count" => 1}, another_ammo_type, container, current_user)
historical_counts =
[ammo_type, another_ammo_type] |> Ammo.get_historical_count_for_ammo_types(current_user)
assert %{^ammo_type_id => 1} = historical_counts
assert %{^another_ammo_type_id => 1} = historical_counts
{1, [ammo_group]} = ammo_group_fixture(%{"count" => 50}, ammo_type, container, current_user)
historical_counts =
[ammo_type, another_ammo_type] |> Ammo.get_historical_count_for_ammo_types(current_user)
assert %{^ammo_type_id => 51} = historical_counts
assert %{^another_ammo_type_id => 1} = historical_counts
shot_group_fixture(%{"count" => 26}, current_user, ammo_group)
historical_counts =
[ammo_type, another_ammo_type] |> Ammo.get_historical_count_for_ammo_types(current_user)
assert %{^ammo_type_id => 51} = historical_counts
assert %{^another_ammo_type_id => 1} = historical_counts
shot_group_fixture(%{"count" => 1}, current_user, first_ammo_group)
historical_counts =
[ammo_type, another_ammo_type] |> Ammo.get_historical_count_for_ammo_types(current_user)
assert %{^ammo_type_id => 51} = historical_counts
assert %{^another_ammo_type_id => 1} = historical_counts
end
test "get_used_ammo_groups_count_for_type/2 gets accurate total ammo count for ammo type", test "get_used_ammo_groups_count_for_type/2 gets accurate total ammo count for ammo type",
%{ammo_type: ammo_type, current_user: current_user, container: container} do %{ammo_type: ammo_type, current_user: current_user, container: container} do
assert 0 = Ammo.get_used_ammo_groups_count_for_type(ammo_type, current_user)
{1, [first_ammo_group]} = {1, [first_ammo_group]} =
ammo_group_fixture(%{"count" => 1}, ammo_type, container, current_user) ammo_group_fixture(%{"count" => 1}, ammo_type, container, current_user)
@ -265,6 +433,182 @@ defmodule Cannery.AmmoTest do
shot_group_fixture(%{"count" => 1}, current_user, first_ammo_group) shot_group_fixture(%{"count" => 1}, current_user, first_ammo_group)
assert 2 = Ammo.get_used_ammo_groups_count_for_type(ammo_type, current_user) assert 2 = Ammo.get_used_ammo_groups_count_for_type(ammo_type, current_user)
end end
test "get_used_ammo_groups_count_for_types/2 gets accurate total ammo counts for ammo types",
%{
ammo_type: %{id: ammo_type_id} = ammo_type,
current_user: current_user,
container: container
} do
# testing empty ammo type
assert %{} == [ammo_type] |> Ammo.get_used_ammo_groups_count_for_types(current_user)
# testing two empty ammo types
%{id: another_ammo_type_id} = another_ammo_type = ammo_type_fixture(current_user)
assert %{} ==
[ammo_type, another_ammo_type]
|> Ammo.get_used_ammo_groups_count_for_types(current_user)
# testing ammo type with ammo group
{1, [first_ammo_group]} =
ammo_group_fixture(%{"count" => 1}, ammo_type, container, current_user)
assert %{} ==
[ammo_type, another_ammo_type]
|> Ammo.get_used_ammo_groups_count_for_types(current_user)
# testing ammo type with used ammo group
{1, [another_ammo_group]} =
ammo_group_fixture(%{"count" => 50}, another_ammo_type, container, current_user)
shot_group_fixture(%{"count" => 50}, current_user, another_ammo_group)
assert %{another_ammo_type_id => 1} ==
[ammo_type, another_ammo_type]
|> Ammo.get_used_ammo_groups_count_for_types(current_user)
# testing two ammo types with zero and one used ammo groups
{1, [ammo_group]} = ammo_group_fixture(%{"count" => 50}, ammo_type, container, current_user)
shot_group_fixture(%{"count" => 50}, current_user, ammo_group)
used_counts =
[ammo_type, another_ammo_type] |> Ammo.get_used_ammo_groups_count_for_types(current_user)
assert %{^ammo_type_id => 1} = used_counts
assert %{^another_ammo_type_id => 1} = used_counts
# testing two ammo type with one and two used ammo groups
shot_group_fixture(%{"count" => 1}, current_user, first_ammo_group)
used_counts =
[ammo_type, another_ammo_type] |> Ammo.get_used_ammo_groups_count_for_types(current_user)
assert %{^ammo_type_id => 2} = used_counts
assert %{^another_ammo_type_id => 1} = used_counts
end
test "get_ammo_groups_count_for_container!/2 gets accurate ammo count for container",
%{ammo_type: ammo_type, current_user: current_user, container: container} do
{1, [first_ammo_group]} =
ammo_group_fixture(%{"count" => 5}, ammo_type, container, current_user)
assert 1 = Ammo.get_ammo_groups_count_for_container!(container, current_user)
{25, _ammo_groups} =
ammo_group_fixture(%{"count" => 5}, 25, ammo_type, container, current_user)
assert 26 = Ammo.get_ammo_groups_count_for_container!(container, current_user)
shot_group_fixture(%{"count" => 1}, current_user, first_ammo_group)
assert 26 = Ammo.get_ammo_groups_count_for_container!(container, current_user)
shot_group_fixture(%{"count" => 4}, current_user, first_ammo_group)
assert 25 = Ammo.get_ammo_groups_count_for_container!(container, current_user)
end
test "get_ammo_groups_count_for_containers/2 gets accurate ammo count for containers", %{
ammo_type: ammo_type,
current_user: current_user,
container: %{id: container_id} = container
} do
%{id: another_container_id} = another_container = container_fixture(current_user)
{1, [first_ammo_group]} =
ammo_group_fixture(%{"count" => 5}, ammo_type, container, current_user)
{1, [_first_ammo_group]} =
ammo_group_fixture(%{"count" => 5}, ammo_type, another_container, current_user)
ammo_groups_count =
[container, another_container]
|> Ammo.get_ammo_groups_count_for_containers(current_user)
assert %{^container_id => 1} = ammo_groups_count
assert %{^another_container_id => 1} = ammo_groups_count
{25, _ammo_groups} =
ammo_group_fixture(%{"count" => 5}, 25, ammo_type, container, current_user)
ammo_groups_count =
[container, another_container]
|> Ammo.get_ammo_groups_count_for_containers(current_user)
assert %{^container_id => 26} = ammo_groups_count
assert %{^another_container_id => 1} = ammo_groups_count
shot_group_fixture(%{"count" => 1}, current_user, first_ammo_group)
ammo_groups_count =
[container, another_container]
|> Ammo.get_ammo_groups_count_for_containers(current_user)
assert %{^container_id => 26} = ammo_groups_count
assert %{^another_container_id => 1} = ammo_groups_count
shot_group_fixture(%{"count" => 4}, current_user, first_ammo_group)
ammo_groups_count =
[container, another_container]
|> Ammo.get_ammo_groups_count_for_containers(current_user)
assert %{^container_id => 25} = ammo_groups_count
assert %{^another_container_id => 1} = ammo_groups_count
end
test "get_round_count_for_container!/2 gets accurate total round count for container",
%{ammo_type: ammo_type, current_user: current_user, container: container} do
{1, [first_ammo_group]} =
ammo_group_fixture(%{"count" => 5}, ammo_type, container, current_user)
assert 5 = Ammo.get_round_count_for_container!(container, current_user)
{25, _ammo_groups} =
ammo_group_fixture(%{"count" => 5}, 25, ammo_type, container, current_user)
assert 130 = Ammo.get_round_count_for_container!(container, current_user)
shot_group_fixture(%{"count" => 5}, current_user, first_ammo_group)
assert 125 = Ammo.get_round_count_for_container!(container, current_user)
end
test "get_round_count_for_containers/2 gets accurate total round count for containers",
%{
ammo_type: ammo_type,
current_user: current_user,
container: %{id: container_id} = container
} do
%{id: another_container_id} = another_container = container_fixture(current_user)
{1, [first_ammo_group]} =
ammo_group_fixture(%{"count" => 5}, ammo_type, container, current_user)
{1, [_first_ammo_group]} =
ammo_group_fixture(%{"count" => 5}, ammo_type, another_container, current_user)
round_counts =
[container, another_container] |> Ammo.get_round_count_for_containers(current_user)
assert %{^container_id => 5} = round_counts
assert %{^another_container_id => 5} = round_counts
{25, _ammo_groups} =
ammo_group_fixture(%{"count" => 5}, 25, ammo_type, container, current_user)
round_counts =
[container, another_container] |> Ammo.get_round_count_for_containers(current_user)
assert %{^container_id => 130} = round_counts
assert %{^another_container_id => 5} = round_counts
shot_group_fixture(%{"count" => 5}, current_user, first_ammo_group)
round_counts =
[container, another_container] |> Ammo.get_round_count_for_containers(current_user)
assert %{^container_id => 125} = round_counts
assert %{^another_container_id => 5} = round_counts
end
end end
describe "ammo_groups" do describe "ammo_groups" do
@ -316,18 +660,16 @@ defmodule Cannery.AmmoTest do
container: container, container: container,
current_user: current_user current_user: current_user
} do } do
{1, [another_ammo_group]} = {1, [%{id: another_ammo_group_id} = another_ammo_group]} =
ammo_group_fixture(%{"count" => 30}, ammo_type, container, current_user) ammo_group_fixture(%{"count" => 30}, ammo_type, container, current_user)
shot_group_fixture(%{"count" => 30}, current_user, another_ammo_group) shot_group_fixture(%{"count" => 30}, current_user, another_ammo_group)
another_ammo_group = another_ammo_group |> Repo.reload!() another_ammo_group = Ammo.get_ammo_group!(another_ammo_group_id, current_user)
assert Ammo.list_ammo_groups(nil, false, current_user) == assert Ammo.list_ammo_groups(nil, false, current_user) == [ammo_group]
[ammo_group] |> preload_ammo_group()
assert Ammo.list_ammo_groups(nil, true, current_user) assert Ammo.list_ammo_groups(nil, true, current_user)
|> Enum.sort_by(fn %{count: count} -> count end) == |> Enum.sort_by(fn %{count: count} -> count end) == [another_ammo_group, ammo_group]
[another_ammo_group, ammo_group] |> preload_ammo_group()
end end
test "list_ammo_groups/3 returns relevant ammo groups when searched", test "list_ammo_groups/3 returns relevant ammo groups when searched",
@ -356,30 +698,22 @@ defmodule Cannery.AmmoTest do
assert Ammo.list_ammo_groups(nil, false, current_user) assert Ammo.list_ammo_groups(nil, false, current_user)
|> Enum.sort_by(fn %{count: count} -> count end) == |> Enum.sort_by(fn %{count: count} -> count end) ==
[fantastic_ammo_group, amazing_ammo_group, another_ammo_group, ammo_group] [fantastic_ammo_group, amazing_ammo_group, another_ammo_group, ammo_group]
|> preload_ammo_group()
# search works for ammo group attributes # search works for ammo group attributes
assert Ammo.list_ammo_groups("cool", true, current_user) == assert Ammo.list_ammo_groups("cool", true, current_user) == [another_ammo_group]
[another_ammo_group] |> preload_ammo_group()
# search works for ammo type attributes # search works for ammo type attributes
assert Ammo.list_ammo_groups("amazing", true, current_user) == assert Ammo.list_ammo_groups("amazing", true, current_user) == [amazing_ammo_group]
[amazing_ammo_group] |> preload_ammo_group()
# search works for container attributes # search works for container attributes
assert Ammo.list_ammo_groups("fantastic", true, current_user) == assert Ammo.list_ammo_groups("fantastic", true, current_user) == [fantastic_ammo_group]
[fantastic_ammo_group] |> preload_ammo_group()
# search works for container tag attributes # search works for container tag attributes
assert Ammo.list_ammo_groups("stupendous", true, current_user) == assert Ammo.list_ammo_groups("stupendous", true, current_user) == [fantastic_ammo_group]
[fantastic_ammo_group] |> preload_ammo_group()
assert Ammo.list_ammo_groups("random", true, current_user) == [] assert Ammo.list_ammo_groups("random", true, current_user) == []
end end
defp preload_ammo_group(ammo_group),
do: ammo_group |> Repo.preload([:ammo_type, :shot_groups, container: :tags])
test "list_ammo_groups_for_type/2 returns all ammo_groups for a type", test "list_ammo_groups_for_type/2 returns all ammo_groups for a type",
%{ %{
ammo_type: ammo_type, ammo_type: ammo_type,
@ -390,8 +724,7 @@ defmodule Cannery.AmmoTest do
another_ammo_type = ammo_type_fixture(current_user) another_ammo_type = ammo_type_fixture(current_user)
{1, [_another]} = ammo_group_fixture(another_ammo_type, container, current_user) {1, [_another]} = ammo_group_fixture(another_ammo_type, container, current_user)
assert Ammo.list_ammo_groups_for_type(ammo_type, current_user) == assert Ammo.list_ammo_groups_for_type(ammo_type, current_user) == [ammo_group]
[ammo_group] |> Repo.preload(:shot_groups)
end end
test "list_ammo_groups_for_container/2 returns all ammo_groups for a container", test "list_ammo_groups_for_container/2 returns all ammo_groups for a container",
@ -404,20 +737,52 @@ defmodule Cannery.AmmoTest do
another_container = container_fixture(current_user) another_container = container_fixture(current_user)
{1, [_another]} = ammo_group_fixture(ammo_type, another_container, current_user) {1, [_another]} = ammo_group_fixture(ammo_type, another_container, current_user)
assert Ammo.list_ammo_groups_for_container(container, current_user) == assert Ammo.list_ammo_groups_for_container(container, current_user) == [ammo_group]
[ammo_group] |> Repo.preload(:shot_groups)
end end
test "get_ammo_groups_count_for_type/2 returns count of ammo_groups for a type", test "get_ammo_groups_count_for_type/2 returns count of ammo_groups for a type", %{
%{
ammo_type: ammo_type, ammo_type: ammo_type,
container: container, container: container,
current_user: current_user current_user: current_user
} do } do
another_ammo_type = ammo_type_fixture(current_user)
{1, [_another]} = ammo_group_fixture(another_ammo_type, container, current_user)
assert 1 = Ammo.get_ammo_groups_count_for_type(ammo_type, current_user) assert 1 = Ammo.get_ammo_groups_count_for_type(ammo_type, current_user)
another_ammo_type = ammo_type_fixture(current_user)
assert 0 = Ammo.get_ammo_groups_count_for_type(another_ammo_type, current_user)
{5, _ammo_groups} = ammo_group_fixture(%{}, 5, ammo_type, container, current_user)
assert 6 = Ammo.get_ammo_groups_count_for_type(ammo_type, current_user)
end
test "get_ammo_groups_count_for_types/2 returns counts of ammo_groups for types", %{
ammo_type: %{id: ammo_type_id} = ammo_type,
container: container,
current_user: current_user
} do
assert %{ammo_type_id => 1} ==
[ammo_type] |> Ammo.get_ammo_groups_count_for_types(current_user)
%{id: another_ammo_type_id} = another_ammo_type = ammo_type_fixture(current_user)
assert %{ammo_type_id => 1} ==
[ammo_type, another_ammo_type]
|> Ammo.get_ammo_groups_count_for_types(current_user)
{1, [_ammo_group]} = ammo_group_fixture(another_ammo_type, container, current_user)
ammo_groups_count =
[ammo_type, another_ammo_type] |> Ammo.get_ammo_groups_count_for_types(current_user)
assert %{^ammo_type_id => 1} = ammo_groups_count
assert %{^another_ammo_type_id => 1} = ammo_groups_count
{5, _ammo_groups} = ammo_group_fixture(%{}, 5, ammo_type, container, current_user)
ammo_groups_count =
[ammo_type, another_ammo_type] |> Ammo.get_ammo_groups_count_for_types(current_user)
assert %{^ammo_type_id => 6} = ammo_groups_count
assert %{^another_ammo_type_id => 1} = ammo_groups_count
end end
test "list_staged_ammo_groups/2 returns all ammo_groups that are staged", test "list_staged_ammo_groups/2 returns all ammo_groups that are staged",
@ -429,14 +794,26 @@ defmodule Cannery.AmmoTest do
{1, [another_ammo_group]} = {1, [another_ammo_group]} =
ammo_group_fixture(%{"staged" => true}, ammo_type, container, current_user) ammo_group_fixture(%{"staged" => true}, ammo_type, container, current_user)
assert Ammo.list_staged_ammo_groups(current_user) == assert Ammo.list_staged_ammo_groups(current_user) == [another_ammo_group]
[another_ammo_group] |> Repo.preload(:shot_groups)
end end
test "get_ammo_group!/1 returns the ammo_group with given id", test "get_ammo_group!/1 returns the ammo_group with given id",
%{ammo_group: ammo_group, current_user: current_user} do %{ammo_group: %{id: ammo_group_id} = ammo_group, current_user: current_user} do
assert Ammo.get_ammo_group!(ammo_group.id, current_user) == assert Ammo.get_ammo_group!(ammo_group_id, current_user) == ammo_group
ammo_group |> Repo.preload(:shot_groups) end
test "get_ammo_groups/2 returns the ammo_groups with given id", %{
ammo_group: %{id: ammo_group_id} = ammo_group,
ammo_type: ammo_type,
container: container,
current_user: current_user
} do
{1, [%{id: another_ammo_group_id} = another_ammo_group]} =
ammo_group_fixture(ammo_type, container, current_user)
ammo_groups = Ammo.get_ammo_groups([ammo_group_id, another_ammo_group_id], current_user)
assert %{^ammo_group_id => ^ammo_group} = ammo_groups
assert %{^another_ammo_group_id => ^another_ammo_group} = ammo_groups
end end
test "create_ammo_groups/3 with valid data creates a ammo_group", test "create_ammo_groups/3 with valid data creates a ammo_group",
@ -499,124 +876,174 @@ defmodule Cannery.AmmoTest do
assert {:error, %Changeset{}} = assert {:error, %Changeset{}} =
Ammo.update_ammo_group(ammo_group, @invalid_attrs, current_user) Ammo.update_ammo_group(ammo_group, @invalid_attrs, current_user)
assert ammo_group |> Repo.preload(:shot_groups) == assert ammo_group == Ammo.get_ammo_group!(ammo_group.id, current_user)
Ammo.get_ammo_group!(ammo_group.id, current_user)
end end
test "delete_ammo_group/1 deletes the ammo_group", test "delete_ammo_group/1 deletes the ammo_group",
%{ammo_group: ammo_group, current_user: current_user} do %{ammo_group: ammo_group, current_user: current_user} do
assert {:ok, %AmmoGroup{}} = Ammo.delete_ammo_group(ammo_group, current_user) assert {:ok, %AmmoGroup{}} = Ammo.delete_ammo_group(ammo_group, current_user)
assert_raise KeyError, fn -> Ammo.get_ammo_group!(ammo_group.id, current_user) end
assert_raise Ecto.NoResultsError, fn ->
Ammo.get_ammo_group!(ammo_group.id, current_user)
end
end
test "get_used_count/1 returns accurate used count",
%{ammo_group: ammo_group, current_user: current_user} do
assert 0 = Ammo.get_used_count(ammo_group)
shot_group_fixture(%{"count" => 15}, current_user, ammo_group)
assert 15 = ammo_group |> Repo.preload(:shot_groups, force: true) |> Ammo.get_used_count()
shot_group_fixture(%{"count" => 10}, current_user, ammo_group)
assert 25 = ammo_group |> Repo.preload(:shot_groups, force: true) |> Ammo.get_used_count()
end
test "get_last_used_shot_group/1 returns accurate used count",
%{ammo_group: ammo_group, current_user: current_user} do
assert ammo_group
|> Repo.preload(:shot_groups, force: true)
|> Ammo.get_last_used_shot_group()
|> is_nil()
shot_group = shot_group_fixture(%{"date" => ~D[2022-11-10]}, current_user, ammo_group)
assert ^shot_group =
ammo_group
|> Repo.preload(:shot_groups, force: true)
|> Ammo.get_last_used_shot_group()
shot_group = shot_group_fixture(%{"date" => ~D[2022-11-11]}, current_user, ammo_group)
assert ^shot_group =
ammo_group
|> Repo.preload(:shot_groups, force: true)
|> Ammo.get_last_used_shot_group()
end end
test "get_percentage_remaining/1 gets accurate total round count", test "get_percentage_remaining/1 gets accurate total round count",
%{ammo_group: ammo_group, current_user: current_user} do %{ammo_group: %{id: ammo_group_id} = ammo_group, current_user: current_user} do
assert 100 = Ammo.get_percentage_remaining(ammo_group) assert 100 = ammo_group |> Ammo.get_percentage_remaining(current_user)
shot_group_fixture(%{"count" => 14}, current_user, ammo_group) shot_group_fixture(%{"count" => 14}, current_user, ammo_group)
ammo_group = Ammo.get_ammo_group!(ammo_group_id, current_user)
assert 72 = assert 72 = ammo_group |> Ammo.get_percentage_remaining(current_user)
ammo_group
|> Repo.reload!()
|> Repo.preload(:shot_groups, force: true)
|> Ammo.get_percentage_remaining()
shot_group_fixture(%{"count" => 11}, current_user, ammo_group) shot_group_fixture(%{"count" => 11}, current_user, ammo_group)
ammo_group = Ammo.get_ammo_group!(ammo_group_id, current_user)
assert 50 = assert 50 = ammo_group |> Ammo.get_percentage_remaining(current_user)
ammo_group
|> Repo.reload!()
|> Repo.preload(:shot_groups, force: true)
|> Ammo.get_percentage_remaining()
shot_group_fixture(%{"count" => 25}, current_user, ammo_group) shot_group_fixture(%{"count" => 25}, current_user, ammo_group)
ammo_group = Ammo.get_ammo_group!(ammo_group_id, current_user)
assert 0 = assert 0 = ammo_group |> Ammo.get_percentage_remaining(current_user)
ammo_group
|> Repo.reload!()
|> Repo.preload(:shot_groups, force: true)
|> Ammo.get_percentage_remaining()
end end
test "get_cpr/1 gets accurate cpr", test "get_cpr/2 gets accurate cpr",
%{ammo_group: ammo_group, current_user: current_user} do %{ammo_type: ammo_type, container: container, current_user: current_user} do
assert %AmmoGroup{price_paid: nil} |> Ammo.get_cpr() |> is_nil() {1, [ammo_group]} = ammo_group_fixture(%{"count" => 1}, ammo_type, container, current_user)
assert %AmmoGroup{count: 1, price_paid: nil} |> Ammo.get_cpr() |> is_nil() assert ammo_group |> Ammo.get_cpr(current_user) |> is_nil()
assert 1.0 = %AmmoGroup{count: 1, price_paid: 1.0} |> Ammo.get_cpr()
assert 1.5 = %AmmoGroup{count: 2, price_paid: 3.0} |> Ammo.get_cpr() {1, [ammo_group]} =
assert 0.722 = %AmmoGroup{count: 50, price_paid: 36.1} |> Ammo.get_cpr() ammo_group_fixture(
%{"count" => 1, "price_paid" => 1.0},
ammo_type,
container,
current_user
)
assert 1.0 = ammo_group |> Ammo.get_cpr(current_user)
{1, [ammo_group]} =
ammo_group_fixture(
%{"count" => 2, "price_paid" => 3.0},
ammo_type,
container,
current_user
)
assert 1.5 = ammo_group |> Ammo.get_cpr(current_user)
{1, [ammo_group]} =
ammo_group_fixture(
%{"count" => 50, "price_paid" => 36.1},
ammo_type,
container,
current_user
)
assert 0.722 = ammo_group |> Ammo.get_cpr(current_user)
# with shot group, maintains total # with shot group, maintains total
shot_group_fixture(%{"count" => 14}, current_user, ammo_group) shot_group_fixture(%{"count" => 14}, current_user, ammo_group)
ammo_group = Ammo.get_ammo_group!(ammo_group.id, current_user)
assert 0.722 = assert 0.722 = ammo_group |> Ammo.get_cpr(current_user)
ammo_group
|> Repo.reload!()
|> Repo.preload(:shot_groups, force: true)
|> Ammo.get_cpr()
end end
test "get_original_count/1 gets accurate original count", test "get_cprs/2 gets accurate cprs",
%{ammo_group: ammo_group, current_user: current_user} do %{ammo_type: ammo_type, container: container, current_user: current_user} do
assert 50 = Ammo.get_original_count(ammo_group) {1, [ammo_group]} = ammo_group_fixture(%{"count" => 1}, ammo_type, container, current_user)
assert %{} == [ammo_group] |> Ammo.get_cprs(current_user)
{1, [%{id: ammo_group_id} = ammo_group]} =
ammo_group_fixture(
%{"count" => 1, "price_paid" => 1.0},
ammo_type,
container,
current_user
)
assert %{ammo_group_id => 1.0} == [ammo_group] |> Ammo.get_cprs(current_user)
{1, [%{id: another_ammo_group_id} = another_ammo_group]} =
ammo_group_fixture(
%{"count" => 2, "price_paid" => 3.0},
ammo_type,
container,
current_user
)
cprs = [ammo_group, another_ammo_group] |> Ammo.get_cprs(current_user)
assert %{^ammo_group_id => 1.0} = cprs
assert %{^another_ammo_group_id => 1.5} = cprs
{1, [%{id: yet_another_ammo_group_id} = yet_another_ammo_group]} =
ammo_group_fixture(
%{"count" => 50, "price_paid" => 36.1},
ammo_type,
container,
current_user
)
cprs =
[ammo_group, another_ammo_group, yet_another_ammo_group] |> Ammo.get_cprs(current_user)
assert %{^ammo_group_id => 1.0} = cprs
assert %{^another_ammo_group_id => 1.5} = cprs
assert %{^yet_another_ammo_group_id => 0.722} = cprs
# with shot group, maintains total
shot_group_fixture(%{"count" => 14}, current_user, yet_another_ammo_group)
yet_another_ammo_group = Ammo.get_ammo_group!(yet_another_ammo_group.id, current_user)
cprs =
[ammo_group, another_ammo_group, yet_another_ammo_group] |> Ammo.get_cprs(current_user)
assert %{^ammo_group_id => 1.0} = cprs
assert %{^another_ammo_group_id => 1.5} = cprs
assert %{^yet_another_ammo_group_id => 0.722} = cprs
end
test "get_original_count/2 gets accurate original count",
%{ammo_group: %{id: ammo_group_id} = ammo_group, current_user: current_user} do
assert 50 = ammo_group |> Ammo.get_original_count(current_user)
shot_group_fixture(%{"count" => 14}, current_user, ammo_group) shot_group_fixture(%{"count" => 14}, current_user, ammo_group)
ammo_group = Ammo.get_ammo_group!(ammo_group_id, current_user)
assert 50 = assert 50 = ammo_group |> Ammo.get_original_count(current_user)
ammo_group
|> Repo.reload!()
|> Repo.preload(:shot_groups, force: true)
|> Ammo.get_original_count()
shot_group_fixture(%{"count" => 11}, current_user, ammo_group) shot_group_fixture(%{"count" => 11}, current_user, ammo_group)
ammo_group = Ammo.get_ammo_group!(ammo_group_id, current_user)
assert 50 = assert 50 = ammo_group |> Ammo.get_original_count(current_user)
ammo_group
|> Repo.reload!()
|> Repo.preload(:shot_groups, force: true)
|> Ammo.get_original_count()
shot_group_fixture(%{"count" => 25}, current_user, ammo_group) shot_group_fixture(%{"count" => 25}, current_user, ammo_group)
ammo_group = Ammo.get_ammo_group!(ammo_group_id, current_user)
assert 50 = ammo_group |> Ammo.get_original_count(current_user)
end
assert 50 = test "get_original_counts/2 gets accurate original counts", %{
ammo_group ammo_group: %{id: ammo_group_id} = ammo_group,
|> Repo.reload!() ammo_type: ammo_type,
|> Repo.preload(:shot_groups, force: true) container: container,
|> Ammo.get_original_count() current_user: current_user
} do
{1, [%{id: another_ammo_group_id} = another_ammo_group]} =
ammo_group_fixture(%{"count" => 25}, ammo_type, container, current_user)
original_counts = [ammo_group, another_ammo_group] |> Ammo.get_original_counts(current_user)
assert %{^ammo_group_id => 50} = original_counts
assert %{^another_ammo_group_id => 25} = original_counts
shot_group_fixture(%{"count" => 14}, current_user, ammo_group)
ammo_group = Ammo.get_ammo_group!(ammo_group_id, current_user)
original_counts = [ammo_group, another_ammo_group] |> Ammo.get_original_counts(current_user)
assert %{^ammo_group_id => 50} = original_counts
assert %{^another_ammo_group_id => 25} = original_counts
shot_group_fixture(%{"count" => 11}, current_user, ammo_group)
ammo_group = Ammo.get_ammo_group!(ammo_group_id, current_user)
original_counts = [ammo_group, another_ammo_group] |> Ammo.get_original_counts(current_user)
assert %{^ammo_group_id => 50} = original_counts
assert %{^another_ammo_group_id => 25} = original_counts
shot_group_fixture(%{"count" => 25}, current_user, ammo_group)
ammo_group = Ammo.get_ammo_group!(ammo_group_id, current_user)
original_counts = [ammo_group, another_ammo_group] |> Ammo.get_original_counts(current_user)
assert %{^ammo_group_id => 50} = original_counts
assert %{^another_ammo_group_id => 25} = original_counts
end end
end end
end end

View File

@ -4,8 +4,7 @@ defmodule Cannery.ContainersTest do
""" """
use Cannery.DataCase use Cannery.DataCase
alias Cannery.Containers alias Cannery.{Containers, Containers.Container, Containers.Tag}
alias Cannery.{Containers.Container}
alias Ecto.Changeset alias Ecto.Changeset
@moduletag :containers_test @moduletag :containers_test
@ -28,6 +27,21 @@ defmodule Cannery.ContainersTest do
"name" => nil, "name" => nil,
"type" => nil "type" => nil
} }
@valid_tag_attrs %{
"bg_color" => "some bg-color",
"name" => "some name",
"text_color" => "some text-color"
}
@update_tag_attrs %{
"bg_color" => "some updated bg-color",
"name" => "some updated name",
"text_color" => "some updated text-color"
}
@invalid_tag_attrs %{
"bg_color" => nil,
"name" => nil,
"text_color" => nil
}
describe "containers" do describe "containers" do
setup do setup do
@ -38,28 +52,27 @@ defmodule Cannery.ContainersTest do
test "list_containers/1 returns all containers", test "list_containers/1 returns all containers",
%{current_user: current_user, container: container} do %{current_user: current_user, container: container} do
assert Containers.list_containers(current_user) == assert Containers.list_containers(current_user) == [container]
[container] |> preload_containers()
end end
test "list_containers/2 returns relevant containers for a user", test "list_containers/2 returns relevant containers for a user",
%{current_user: current_user} do %{current_user: current_user} do
container_a = container_a = container_fixture(%{"name" => "my cool container"}, current_user)
container_fixture(%{"name" => "my cool container"}, current_user) |> preload_containers() container_b = container_fixture(%{"desc" => "a fascinating description"}, current_user)
container_b =
container_fixture(%{"desc" => "a fascinating description"}, current_user)
|> preload_containers()
%{id: container_c_id} =
container_c = container_fixture(%{"location" => "a secret place"}, current_user) container_c = container_fixture(%{"location" => "a secret place"}, current_user)
tag = tag_fixture(%{"name" => "stupendous tag"}, current_user) tag = tag_fixture(%{"name" => "stupendous tag"}, current_user)
Containers.add_tag!(container_c, tag, current_user) Containers.add_tag!(container_c, tag, current_user)
container_c = container_c |> preload_containers() container_c = container_c_id |> Containers.get_container!(current_user)
%{id: container_d_id} =
container_d = container_fixture(%{"type" => "musty old box"}, current_user) container_d = container_fixture(%{"type" => "musty old box"}, current_user)
tag = tag_fixture(%{"name" => "amazing tag"}, current_user) tag = tag_fixture(%{"name" => "amazing tag"}, current_user)
Containers.add_tag!(container_d, tag, current_user) Containers.add_tag!(container_d, tag, current_user)
container_d = container_d |> preload_containers() container_d = container_d_id |> Containers.get_container!(current_user)
_shouldnt_return = _shouldnt_return =
container_fixture(%{"name" => "another person's container"}, user_fixture()) container_fixture(%{"name" => "another person's container"}, user_fixture())
@ -77,13 +90,9 @@ defmodule Cannery.ContainersTest do
assert Containers.list_containers("asajslkdflskdf", current_user) == [] assert Containers.list_containers("asajslkdflskdf", current_user) == []
end end
defp preload_containers(containers),
do: containers |> Repo.preload([:ammo_groups, :tags])
test "get_container!/1 returns the container with given id", test "get_container!/1 returns the container with given id",
%{current_user: current_user, container: container} do %{current_user: current_user, container: container} do
assert Containers.get_container!(container.id, current_user) == assert Containers.get_container!(container.id, current_user) == container
container |> Repo.preload([:ammo_groups, :tags])
end end
test "create_container/1 with valid data creates a container", %{current_user: current_user} do test "create_container/1 with valid data creates a container", %{current_user: current_user} do
@ -118,8 +127,7 @@ defmodule Cannery.ContainersTest do
assert {:error, %Changeset{}} = assert {:error, %Changeset{}} =
Containers.update_container(container, current_user, @invalid_attrs) Containers.update_container(container, current_user, @invalid_attrs)
assert container |> Repo.preload([:ammo_groups, :tags]) == assert container == Containers.get_container!(container.id, current_user)
Containers.get_container!(container.id, current_user)
end end
test "delete_container/1 deletes the container", test "delete_container/1 deletes the container",
@ -131,4 +139,67 @@ defmodule Cannery.ContainersTest do
end end
end end
end end
describe "tags" do
setup do
current_user = user_fixture()
[tag: tag_fixture(current_user), current_user: current_user]
end
test "list_tags/1 returns all tags", %{tag: tag, current_user: current_user} do
assert Containers.list_tags(current_user) == [tag]
end
test "list_tags/2 returns relevant tags for a user", %{current_user: current_user} do
tag_a = tag_fixture(%{"name" => "bullets"}, current_user)
tag_b = tag_fixture(%{"name" => "hollows"}, current_user)
_shouldnt_return =
%{
"name" => "bullet",
"desc" => "pews brass shell"
}
|> tag_fixture(user_fixture())
# name
assert Containers.list_tags("bullet", current_user) == [tag_a]
assert Containers.list_tags("bullets", current_user) == [tag_a]
assert Containers.list_tags("hollow", current_user) == [tag_b]
assert Containers.list_tags("hollows", current_user) == [tag_b]
end
test "get_tag!/1 returns the tag with given id", %{tag: tag, current_user: current_user} do
assert Containers.get_tag!(tag.id, current_user) == tag
end
test "create_tag/1 with valid data creates a tag", %{current_user: current_user} do
assert {:ok, %Tag{} = tag} = Containers.create_tag(@valid_tag_attrs, current_user)
assert tag.bg_color == "some bg-color"
assert tag.name == "some name"
assert tag.text_color == "some text-color"
end
test "create_tag/1 with invalid data returns error changeset",
%{current_user: current_user} do
assert {:error, %Changeset{}} = Containers.create_tag(@invalid_tag_attrs, current_user)
end
test "update_tag/2 with valid data updates the tag", %{tag: tag, current_user: current_user} do
assert {:ok, %Tag{} = tag} = Containers.update_tag(tag, @update_tag_attrs, current_user)
assert tag.bg_color == "some updated bg-color"
assert tag.name == "some updated name"
assert tag.text_color == "some updated text-color"
end
test "update_tag/2 with invalid data returns error changeset",
%{tag: tag, current_user: current_user} do
assert {:error, %Changeset{}} = Containers.update_tag(tag, @invalid_tag_attrs, current_user)
assert tag == Containers.get_tag!(tag.id, current_user)
end
test "delete_tag/1 deletes the tag", %{tag: tag, current_user: current_user} do
assert {:ok, %Tag{}} = Containers.delete_tag(tag, current_user)
assert_raise Ecto.NoResultsError, fn -> Containers.get_tag!(tag.id, current_user) end
end
end
end end

View File

@ -1,90 +0,0 @@
defmodule Cannery.TagsTest do
@moduledoc """
Tests the Tags context
"""
use Cannery.DataCase
alias Cannery.{Tags, Tags.Tag}
alias Ecto.Changeset
@moduletag :tags_test
@valid_attrs %{
"bg_color" => "some bg-color",
"name" => "some name",
"text_color" => "some text-color"
}
@update_attrs %{
"bg_color" => "some updated bg-color",
"name" => "some updated name",
"text_color" => "some updated text-color"
}
@invalid_attrs %{
"bg_color" => nil,
"name" => nil,
"text_color" => nil
}
describe "tags" do
setup do
current_user = user_fixture()
[tag: tag_fixture(current_user), current_user: current_user]
end
test "list_tags/1 returns all tags", %{tag: tag, current_user: current_user} do
assert Tags.list_tags(current_user) == [tag]
end
test "list_tags/2 returns relevant tags for a user", %{current_user: current_user} do
tag_a = tag_fixture(%{"name" => "bullets"}, current_user)
tag_b = tag_fixture(%{"name" => "hollows"}, current_user)
_shouldnt_return =
%{
"name" => "bullet",
"desc" => "pews brass shell"
}
|> tag_fixture(user_fixture())
# name
assert Tags.list_tags("bullet", current_user) == [tag_a]
assert Tags.list_tags("bullets", current_user) == [tag_a]
assert Tags.list_tags("hollow", current_user) == [tag_b]
assert Tags.list_tags("hollows", current_user) == [tag_b]
end
test "get_tag!/1 returns the tag with given id", %{tag: tag, current_user: current_user} do
assert Tags.get_tag!(tag.id, current_user) == tag
end
test "create_tag/1 with valid data creates a tag", %{current_user: current_user} do
assert {:ok, %Tag{} = tag} = Tags.create_tag(@valid_attrs, current_user)
assert tag.bg_color == "some bg-color"
assert tag.name == "some name"
assert tag.text_color == "some text-color"
end
test "create_tag/1 with invalid data returns error changeset",
%{current_user: current_user} do
assert {:error, %Changeset{}} = Tags.create_tag(@invalid_attrs, current_user)
end
test "update_tag/2 with valid data updates the tag", %{tag: tag, current_user: current_user} do
assert {:ok, %Tag{} = tag} = Tags.update_tag(tag, @update_attrs, current_user)
assert tag.bg_color == "some updated bg-color"
assert tag.name == "some updated name"
assert tag.text_color == "some updated text-color"
end
test "update_tag/2 with invalid data returns error changeset",
%{tag: tag, current_user: current_user} do
assert {:error, %Changeset{}} = Tags.update_tag(tag, @invalid_attrs, current_user)
assert tag == Tags.get_tag!(tag.id, current_user)
end
test "delete_tag/1 deletes the tag", %{tag: tag, current_user: current_user} do
assert {:ok, %Tag{}} = Tags.delete_tag(tag, current_user)
assert_raise Ecto.NoResultsError, fn -> Tags.get_tag!(tag.id, current_user) end
end
end
end

View File

@ -4,7 +4,7 @@ defmodule CanneryWeb.ExportControllerTest do
""" """
use CanneryWeb.ConnCase use CanneryWeb.ConnCase
alias Cannery.{Ammo, Containers, Repo} alias Cannery.{ActivityLog, Ammo, Containers, Repo}
@moduletag :export_controller_test @moduletag :export_controller_test
@ -50,10 +50,10 @@ defmodule CanneryWeb.ExportControllerTest do
"notes" => ammo_group.notes, "notes" => ammo_group.notes,
"price_paid" => ammo_group.price_paid, "price_paid" => ammo_group.price_paid,
"staged" => ammo_group.staged, "staged" => ammo_group.staged,
"used_count" => ammo_group |> Ammo.get_used_count(), "used_count" => ammo_group |> ActivityLog.get_used_count(current_user),
"original_count" => ammo_group |> Ammo.get_original_count(), "original_count" => ammo_group |> Ammo.get_original_count(current_user),
"cpr" => ammo_group |> Ammo.get_cpr(), "cpr" => ammo_group |> Ammo.get_cpr(current_user),
"percentage_remaining" => ammo_group |> Ammo.get_percentage_remaining() "percentage_remaining" => ammo_group |> Ammo.get_percentage_remaining(current_user)
} }
ideal_ammo_type = %{ ideal_ammo_type = %{
@ -79,10 +79,12 @@ defmodule CanneryWeb.ExportControllerTest do
"primer_type" => ammo_type.primer_type, "primer_type" => ammo_type.primer_type,
"tracer" => ammo_type.tracer, "tracer" => ammo_type.tracer,
"upc" => ammo_type.upc, "upc" => ammo_type.upc,
"average_cost" => ammo_type |> Ammo.get_average_cost_for_ammo_type!(current_user), "average_cost" => ammo_type |> Ammo.get_average_cost_for_ammo_type(current_user),
"round_count" => ammo_type |> Ammo.get_round_count_for_ammo_type(current_user), "round_count" => ammo_type |> Ammo.get_round_count_for_ammo_type(current_user),
"used_count" => ammo_type |> Ammo.get_used_count_for_ammo_type(current_user), "used_count" => ammo_type |> ActivityLog.get_used_count_for_ammo_type(current_user),
"ammo_group_count" => ammo_type |> Ammo.get_ammo_groups_count_for_type(current_user, true) "ammo_group_count" => ammo_type |> Ammo.get_ammo_groups_count_for_type(current_user),
"total_ammo_group_count" =>
ammo_type |> Ammo.get_ammo_groups_count_for_type(current_user, true)
} }
ideal_container = %{ ideal_container = %{
@ -99,8 +101,9 @@ defmodule CanneryWeb.ExportControllerTest do
} }
], ],
"type" => container.type, "type" => container.type,
"ammo_group_count" => container |> Containers.get_container_ammo_group_count!(), "ammo_group_count" =>
"round_count" => container |> Containers.get_container_rounds!() container |> Ammo.get_ammo_groups_count_for_container!(current_user),
"round_count" => container |> Ammo.get_round_count_for_container!(current_user)
} }
ideal_shot_group = %{ ideal_shot_group = %{

View File

@ -214,7 +214,7 @@ defmodule CanneryWeb.AmmoGroupLiveTest do
|> render_click() |> render_click()
assert html =~ dgettext("actions", "Add Ammo") assert html =~ dgettext("actions", "Add Ammo")
assert html =~ gettext("$%{amount}", amount: 120.5 |> :erlang.float_to_binary(decimals: 2)) assert html =~ gettext("$%{amount}", amount: display_currency(120.5))
assert_patch(index_live, Routes.ammo_group_index_path(conn, :clone, ammo_group)) assert_patch(index_live, Routes.ammo_group_index_path(conn, :clone, ammo_group))
@ -230,7 +230,7 @@ defmodule CanneryWeb.AmmoGroupLiveTest do
assert html =~ dgettext("prompts", "Ammo added successfully") assert html =~ dgettext("prompts", "Ammo added successfully")
assert html =~ "42" assert html =~ "42"
assert html =~ gettext("$%{amount}", amount: 120.5 |> :erlang.float_to_binary(decimals: 2)) assert html =~ gettext("$%{amount}", amount: display_currency(120.5))
end end
test "clones ammo_group in listing with updates", %{conn: conn, ammo_group: ammo_group} do test "clones ammo_group in listing with updates", %{conn: conn, ammo_group: ammo_group} do
@ -242,7 +242,7 @@ defmodule CanneryWeb.AmmoGroupLiveTest do
|> render_click() |> render_click()
assert html =~ dgettext("actions", "Add Ammo") assert html =~ dgettext("actions", "Add Ammo")
assert html =~ gettext("$%{amount}", amount: 120.5 |> :erlang.float_to_binary(decimals: 2)) assert html =~ gettext("$%{amount}", amount: display_currency(120.5))
assert_patch(index_live, Routes.ammo_group_index_path(conn, :clone, ammo_group)) assert_patch(index_live, Routes.ammo_group_index_path(conn, :clone, ammo_group))
@ -258,7 +258,7 @@ defmodule CanneryWeb.AmmoGroupLiveTest do
assert html =~ dgettext("prompts", "Ammo added successfully") assert html =~ dgettext("prompts", "Ammo added successfully")
assert html =~ "43" assert html =~ "43"
assert html =~ gettext("$%{amount}", amount: 120.5 |> :erlang.float_to_binary(decimals: 2)) assert html =~ gettext("$%{amount}", amount: display_currency(120.5))
end end
test "deletes ammo_group in listing", %{conn: conn, ammo_group: ammo_group} do test "deletes ammo_group in listing", %{conn: conn, ammo_group: ammo_group} do
@ -291,21 +291,28 @@ defmodule CanneryWeb.AmmoGroupLiveTest do
assert html =~ dgettext("prompts", "Shots recorded successfully") assert html =~ dgettext("prompts", "Shots recorded successfully")
end end
@spec display_currency(float()) :: String.t()
defp display_currency(float), do: :erlang.float_to_binary(float, decimals: 2)
end end
describe "Index of empty ammo group" do describe "Index of empty ammo group" do
setup [:register_and_log_in_user, :create_ammo_group, :create_empty_ammo_group] setup [:register_and_log_in_user, :create_ammo_group, :create_empty_ammo_group]
test "hides empty ammo groups by default", %{conn: conn, empty_ammo_group: ammo_group} do test "hides empty ammo groups by default", %{
conn: conn,
empty_ammo_group: ammo_group,
current_user: current_user
} do
{:ok, show_live, html} = live(conn, Routes.ammo_group_index_path(conn, :index)) {:ok, show_live, html} = live(conn, Routes.ammo_group_index_path(conn, :index))
assert html =~ dgettext("actions", "Show used") assert html =~ dgettext("actions", "Show used")
refute html =~ gettext("$%{amount}", amount: 50.00 |> :erlang.float_to_binary(decimals: 2)) refute html =~ gettext("$%{amount}", amount: display_currency(50.00))
refute html =~ refute html =~
"\n" <> "\n" <>
gettext("%{percentage}%", gettext("%{percentage}%",
percentage: ammo_group |> Ammo.get_percentage_remaining() percentage: ammo_group |> Ammo.get_percentage_remaining(current_user)
) <> ) <>
"\n" "\n"
@ -314,12 +321,12 @@ defmodule CanneryWeb.AmmoGroupLiveTest do
|> element(~s/input[type="checkbox"][aria-labelledby="toggle_show_used-label"}]/) |> element(~s/input[type="checkbox"][aria-labelledby="toggle_show_used-label"}]/)
|> render_click() |> render_click()
assert html =~ gettext("$%{amount}", amount: 50.00 |> :erlang.float_to_binary(decimals: 2)) assert html =~ gettext("$%{amount}", amount: display_currency(50.00))
assert html =~ assert html =~
"\n" <> "\n" <>
gettext("%{percentage}%", gettext("%{percentage}%",
percentage: ammo_group |> Ammo.get_percentage_remaining() percentage: ammo_group |> Ammo.get_percentage_remaining(current_user)
) <> ) <>
"\n" "\n"
end end

View File

@ -12,10 +12,9 @@ defmodule Cannery.Fixtures do
Ammo.AmmoType, Ammo.AmmoType,
Containers, Containers,
Containers.Container, Containers.Container,
Containers.Tag,
Email, Email,
Repo, Repo
Tags,
Tags.Tag
} }
def unique_user_email, do: "user#{System.unique_integer()}@example.com" def unique_user_email, do: "user#{System.unique_integer()}@example.com"
@ -154,7 +153,7 @@ defmodule Cannery.Fixtures do
"name" => "some name", "name" => "some name",
"text_color" => "some text-color" "text_color" => "some text-color"
}) })
|> Tags.create_tag(user) |> Containers.create_tag(user)
|> unwrap_ok_tuple() |> unwrap_ok_tuple()
end end