Merge branch 'dev' into weblate

This commit is contained in:
shibao 2022-11-06 19:10:21 -05:00
commit 322456ad2f
69 changed files with 1479 additions and 911 deletions

View File

@ -32,9 +32,13 @@ steps:
- mix test - mix test
- name: build and publish stable - name: build and publish stable
image: plugins/docker image: thegeeklab/drone-docker-buildx
privileged: true
settings: settings:
repo: shibaobun/cannery repo: shibaobun/cannery
purge: true
compress: true
platforms: linux/amd64,linux/arm64,linux/arm/v7
username: username:
from_secret: docker_username from_secret: docker_username
password: password:
@ -45,9 +49,13 @@ steps:
- stable - stable
- name: build and publish tagged version - name: build and publish tagged version
image: plugins/docker image: thegeeklab/drone-docker-buildx
privileged: true
settings: settings:
repo: shibaobun/cannery repo: shibaobun/cannery
purge: true
compress: true
platforms: linux/amd64,linux/arm64,linux/arm/v7
username: username:
from_secret: docker_username from_secret: docker_username
password: password:

View File

@ -1,3 +1,17 @@
# v0.5.5
- Forgot to add the logo as the favicon whoops
# v0.5.4
- Rename "Ammo" tab to "Catalog", and "Manage" tab is now "Ammo"
- Ammo groups are now just referred to as Ammo or "Packs"
- URL paths now reflect new names
- Add pack and round count to container information
- Add cute logo >:3 Thank you [kalli](https://twitter.com/t0kkuro)!
- Add note about deleting an ammo type deleting all ammo of that type as well
- Prompt to create first ammo type before trying to create first ammo
- Add note about creating unlimited invites
- Update screenshot lol
# v0.5.3 # v0.5.3
- Update French translation: Thank you [duponin](https://udongein.xyz/users/duponin)! - Update French translation: Thank you [duponin](https://udongein.xyz/users/duponin)!
- Update German translation: Thank you [Kaia](https://shitposter.club/users/kaia)! - Update German translation: Thank you [Kaia](https://shitposter.club/users/kaia)!

View File

@ -143,3 +143,4 @@ Thank you so much for your contributions!
- shibao (https://misskey.bubbletea.dev/@shibao) - shibao (https://misskey.bubbletea.dev/@shibao)
- kaia (https://shitposter.club/users/kaia) - kaia (https://shitposter.club/users/kaia)
- duponin (https://udongein.xyz/users/duponin) - duponin (https://udongein.xyz/users/duponin)
- kalli (https://twitter.com/t0kkuro)

View File

@ -1,6 +1,6 @@
# Cannery # Cannery
![screenshot](https://gitea.bubbletea.dev/shibao/cannery/raw/branch/stable/home.png) ![old screenshot](https://gitea.bubbletea.dev/shibao/cannery/raw/branch/stable/home.png)
The self-hosted firearm tracker website. The self-hosted firearm tracker website.

Binary file not shown.

After

Width:  |  Height:  |  Size: 84 KiB

File diff suppressed because one or more lines are too long

After

Width:  |  Height:  |  Size: 516 KiB

BIN
home.png

Binary file not shown.

Before

Width:  |  Height:  |  Size: 78 KiB

After

Width:  |  Height:  |  Size: 113 KiB

View File

@ -4,8 +4,7 @@ defmodule Cannery.ActivityLog do
""" """
import Ecto.Query, warn: false import Ecto.Query, warn: false
import CanneryWeb.Gettext alias Cannery.{Accounts.User, ActivityLog.ShotGroup, Ammo.AmmoGroup, Repo}
alias Cannery.{Accounts.User, ActivityLog.ShotGroup, Ammo, Ammo.AmmoGroup, Repo}
alias Ecto.{Changeset, Multi} alias Ecto.{Changeset, Multi}
@doc """ @doc """
@ -60,25 +59,24 @@ defmodule Cannery.ActivityLog do
""" """
@spec create_shot_group(attrs :: map(), User.t(), AmmoGroup.t()) :: @spec create_shot_group(attrs :: map(), User.t(), AmmoGroup.t()) ::
{:ok, ShotGroup.t()} | {:error, Changeset.t(ShotGroup.t()) | nil} {:ok, ShotGroup.t()} | {:error, Changeset.t(ShotGroup.t()) | nil}
def create_shot_group( def create_shot_group(attrs, user, ammo_group) do
attrs,
%User{id: user_id},
%AmmoGroup{id: ammo_group_id, count: ammo_group_count, user_id: user_id} = ammo_group
) do
attrs = attrs |> Map.merge(%{"user_id" => user_id, "ammo_group_id" => ammo_group_id})
changeset = %ShotGroup{} |> ShotGroup.create_changeset(attrs)
shot_group_count = changeset |> Changeset.get_field(:count)
if shot_group_count > ammo_group_count do
error = dgettext("errors", "Count must be less than %{count}", count: ammo_group_count)
changeset = changeset |> Changeset.add_error(:count, error)
{:error, changeset}
else
Multi.new() Multi.new()
|> Multi.insert(:create_shot_group, changeset) |> Multi.insert(
:create_shot_group,
%ShotGroup{} |> ShotGroup.create_changeset(user, ammo_group, attrs)
)
|> Multi.run(
:ammo_group,
fn repo, %{create_shot_group: %{ammo_group_id: ammo_group_id, user_id: user_id}} ->
{:ok,
repo.one(from ag in AmmoGroup, where: ag.id == ^ammo_group_id and ag.user_id == ^user_id)}
end
)
|> Multi.update( |> Multi.update(
:update_ammo_group, :update_ammo_group,
fn %{create_shot_group: %{count: shot_group_count}, ammo_group: %{count: ammo_group_count}} ->
ammo_group |> AmmoGroup.range_changeset(%{"count" => ammo_group_count - shot_group_count}) ammo_group |> AmmoGroup.range_changeset(%{"count" => ammo_group_count - shot_group_count})
end
) )
|> Repo.transaction() |> Repo.transaction()
|> case do |> case do
@ -87,7 +85,6 @@ 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
end
@doc """ @doc """
Updates a shot_group. Updates a shot_group.
@ -104,35 +101,32 @@ defmodule Cannery.ActivityLog do
@spec update_shot_group(ShotGroup.t(), attrs :: map(), User.t()) :: @spec update_shot_group(ShotGroup.t(), attrs :: map(), User.t()) ::
{:ok, ShotGroup.t()} | {:error, Changeset.t(ShotGroup.t()) | nil} {:ok, ShotGroup.t()} | {:error, Changeset.t(ShotGroup.t()) | nil}
def update_shot_group( def update_shot_group(
%ShotGroup{count: count, user_id: user_id, ammo_group_id: ammo_group_id} = shot_group, %ShotGroup{count: count, user_id: user_id} = shot_group,
attrs, attrs,
%User{id: user_id} = user %User{id: user_id} = user
) do ) do
%{count: ammo_group_count, user_id: ^user_id} =
ammo_group = ammo_group_id |> Ammo.get_ammo_group!(user)
changeset = shot_group |> ShotGroup.update_changeset(attrs)
new_shot_group_count = changeset |> Changeset.get_field(:count)
shot_diff_to_add = new_shot_group_count - count
cond do
shot_diff_to_add > ammo_group_count ->
error = dgettext("errors", "Count must be less than %{count}", count: ammo_group_count)
changeset = changeset |> Changeset.add_error(:count, error)
{:error, changeset}
new_shot_group_count <= 0 ->
error = dgettext("errors", "Count must be at least 1")
changeset = changeset |> Changeset.add_error(:count, error)
{:error, changeset}
true ->
Multi.new() Multi.new()
|> Multi.update(:update_shot_group, changeset) |> Multi.update(
:update_shot_group,
shot_group |> ShotGroup.update_changeset(user, attrs)
)
|> Multi.run(
:ammo_group,
fn repo, %{update_shot_group: %{ammo_group_id: ammo_group_id, user_id: user_id}} ->
{:ok,
repo.one(from ag in AmmoGroup, where: ag.id == ^ammo_group_id and ag.user_id == ^user_id)}
end
)
|> Multi.update( |> Multi.update(
:update_ammo_group, :update_ammo_group,
ammo_group fn %{
|> AmmoGroup.range_changeset(%{"count" => ammo_group_count - shot_diff_to_add}) update_shot_group: %{count: new_count},
ammo_group: %{count: ammo_group_count} = ammo_group
} ->
shot_diff_to_add = new_count - count
new_ammo_group_count = ammo_group_count - shot_diff_to_add
ammo_group |> AmmoGroup.range_changeset(%{"count" => new_ammo_group_count})
end
) )
|> Repo.transaction() |> Repo.transaction()
|> case do |> case do
@ -141,7 +135,6 @@ 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
end
@doc """ @doc """
Deletes a shot_group. Deletes a shot_group.
@ -158,18 +151,27 @@ defmodule Cannery.ActivityLog do
@spec delete_shot_group(ShotGroup.t(), User.t()) :: @spec delete_shot_group(ShotGroup.t(), User.t()) ::
{:ok, ShotGroup.t()} | {:error, Changeset.t(ShotGroup.t())} {:ok, ShotGroup.t()} | {:error, Changeset.t(ShotGroup.t())}
def delete_shot_group( def delete_shot_group(
%ShotGroup{count: count, user_id: user_id, ammo_group_id: ammo_group_id} = shot_group, %ShotGroup{user_id: user_id} = shot_group,
%User{id: user_id} = user %User{id: user_id}
) do ) do
%{count: ammo_group_count, user_id: ^user_id} =
ammo_group = ammo_group_id |> Ammo.get_ammo_group!(user)
Multi.new() Multi.new()
|> Multi.delete(:delete_shot_group, shot_group) |> Multi.delete(:delete_shot_group, shot_group)
|> Multi.run(
:ammo_group,
fn repo, %{delete_shot_group: %{ammo_group_id: ammo_group_id, user_id: user_id}} ->
{:ok,
repo.one(from ag in AmmoGroup, where: ag.id == ^ammo_group_id and ag.user_id == ^user_id)}
end
)
|> Multi.update( |> Multi.update(
:update_ammo_group, :update_ammo_group,
ammo_group fn %{
|> AmmoGroup.range_changeset(%{"count" => ammo_group_count + count}) delete_shot_group: %{count: count},
ammo_group: %{count: ammo_group_count} = ammo_group
} ->
new_ammo_group_count = ammo_group_count + count
ammo_group |> AmmoGroup.range_changeset(%{"count" => new_ammo_group_count})
end
) )
|> Repo.transaction() |> Repo.transaction()
|> case do |> case do
@ -178,21 +180,4 @@ 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 an `%Ecto.Changeset{}` for tracking shot_group changes.
## Examples
iex> change_shot_group(shot_group)
%Ecto.Changeset{data: %ShotGroup{}}
"""
@spec change_shot_group(ShotGroup.t() | ShotGroup.new_shot_group()) ::
Changeset.t(ShotGroup.t() | ShotGroup.new_shot_group())
@spec change_shot_group(ShotGroup.t() | ShotGroup.new_shot_group(), attrs :: map()) ::
Changeset.t(ShotGroup.t() | ShotGroup.new_shot_group())
def change_shot_group(%ShotGroup{} = shot_group, attrs \\ %{}) do
shot_group |> ShotGroup.update_changeset(attrs)
end
end end

View File

@ -4,8 +4,9 @@ defmodule Cannery.ActivityLog.ShotGroup do
""" """
use Ecto.Schema use Ecto.Schema
import CanneryWeb.Gettext
import Ecto.Changeset import Ecto.Changeset
alias Cannery.{Accounts.User, ActivityLog.ShotGroup, Ammo.AmmoGroup} alias Cannery.{Accounts.User, ActivityLog.ShotGroup, Ammo.AmmoGroup, Repo}
alias Ecto.{Changeset, UUID} alias Ecto.{Changeset, UUID}
@primary_key {:id, :binary_id, autogenerate: true} @primary_key {:id, :binary_id, autogenerate: true}
@ -37,21 +38,84 @@ defmodule Cannery.ActivityLog.ShotGroup do
@type id :: UUID.t() @type id :: UUID.t()
@doc false @doc false
@spec create_changeset(new_shot_group(), attrs :: map()) :: Changeset.t(new_shot_group()) @spec create_changeset(
def create_changeset(shot_group, attrs) do new_shot_group(),
User.t() | any(),
AmmoGroup.t() | any(),
attrs :: map()
) ::
Changeset.t(new_shot_group())
def create_changeset(
shot_group,
%User{id: user_id},
%AmmoGroup{id: ammo_group_id, user_id: user_id} = ammo_group,
attrs
)
when not (user_id |> is_nil()) and not (ammo_group_id |> is_nil()) do
shot_group shot_group
|> cast(attrs, [:count, :notes, :date, :ammo_group_id, :user_id]) |> change(user_id: user_id)
|> change(ammo_group_id: ammo_group_id)
|> cast(attrs, [:count, :notes, :date])
|> validate_number(:count, greater_than: 0) |> validate_number(:count, greater_than: 0)
|> validate_create_shot_group_count(ammo_group)
|> validate_required([:count, :ammo_group_id, :user_id]) |> validate_required([:count, :ammo_group_id, :user_id])
end end
def create_changeset(shot_group, _invalid_user, _invalid_ammo_group, attrs) do
shot_group
|> cast(attrs, [:count, :notes, :date])
|> validate_number(:count, greater_than: 0)
|> validate_required([:count, :ammo_group_id, :user_id])
|> add_error(:invalid, dgettext("errors", "Please select a valid user and ammo group"))
end
defp validate_create_shot_group_count(changeset, %AmmoGroup{count: ammo_group_count}) do
if changeset |> Changeset.get_field(:count) > ammo_group_count do
error = dgettext("errors", "Count must be less than %{count}", count: ammo_group_count)
changeset |> Changeset.add_error(:count, error)
else
changeset
end
end
@doc false @doc false
@spec update_changeset(t() | new_shot_group(), attrs :: map()) :: @spec update_changeset(t() | new_shot_group(), User.t(), attrs :: map()) ::
Changeset.t(t() | new_shot_group()) Changeset.t(t() | new_shot_group())
def update_changeset(shot_group, attrs) do def update_changeset(
%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)
|> validate_required([:count]) |> validate_required([:count])
|> validate_update_shot_group_count(shot_group, user)
end
defp validate_update_shot_group_count(
changeset,
%ShotGroup{count: count} = shot_group,
%User{id: user_id}
)
when not (user_id |> is_nil()) do
%{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)
shot_diff_to_add = new_shot_group_count - count
cond do
shot_diff_to_add > ammo_group_count ->
error = dgettext("errors", "Count must be less than %{count}", count: ammo_group_count)
changeset |> Changeset.add_error(:count, error)
new_shot_group_count <= 0 ->
changeset |> Changeset.add_error(:count, dgettext("errors", "Count must be at least 1"))
true ->
changeset
end
end end
end end

View File

@ -3,6 +3,7 @@ defmodule Cannery.Ammo do
The Ammo context. The Ammo context.
""" """
import CanneryWeb.Gettext
import Ecto.Query, warn: false import Ecto.Query, warn: false
alias Cannery.{Accounts.User, Containers, Repo} alias Cannery.{Accounts.User, Containers, Repo}
alias Cannery.ActivityLog.ShotGroup alias Cannery.ActivityLog.ShotGroup
@ -24,6 +25,25 @@ defmodule Cannery.Ammo do
def list_ammo_types(%User{id: user_id}), def list_ammo_types(%User{id: user_id}),
do: Repo.all(from at in AmmoType, where: at.user_id == ^user_id, order_by: at.name) do: Repo.all(from at in AmmoType, where: at.user_id == ^user_id, order_by: at.name)
@doc """
Returns a count of ammo_types.
## Examples
iex> get_ammo_types_count!(%User{id: 123})
3
"""
@spec get_ammo_types_count!(User.t()) :: integer()
def get_ammo_types_count!(%User{id: user_id}) do
Repo.one(
from at in AmmoType,
where: at.user_id == ^user_id,
select: count(at.id),
distinct: true
)
end
@doc """ @doc """
Gets a single ammo_type. Gets a single ammo_type.
@ -140,11 +160,8 @@ defmodule Cannery.Ammo do
""" """
@spec create_ammo_type(attrs :: map(), User.t()) :: @spec create_ammo_type(attrs :: map(), User.t()) ::
{:ok, AmmoType.t()} | {:error, Changeset.t(AmmoType.new_ammo_type())} {:ok, AmmoType.t()} | {:error, Changeset.t(AmmoType.new_ammo_type())}
def create_ammo_type(attrs \\ %{}, %User{id: user_id}) do def create_ammo_type(attrs \\ %{}, %User{} = user),
%AmmoType{} do: %AmmoType{} |> AmmoType.create_changeset(user, attrs) |> Repo.insert()
|> AmmoType.create_changeset(attrs |> Map.put("user_id", user_id))
|> Repo.insert()
end
@doc """ @doc """
Updates a ammo_type. Updates a ammo_type.
@ -193,22 +210,6 @@ defmodule Cannery.Ammo do
def delete_ammo_type!(%AmmoType{user_id: user_id} = ammo_type, %User{id: user_id}), def delete_ammo_type!(%AmmoType{user_id: user_id} = ammo_type, %User{id: user_id}),
do: ammo_type |> Repo.delete!() do: ammo_type |> Repo.delete!()
@doc """
Returns an `%Changeset{}` for tracking ammo_type changes.
## Examples
iex> change_ammo_type(ammo_type)
%Changeset{data: %AmmoType{}}
"""
@spec change_ammo_type(AmmoType.t() | AmmoType.new_ammo_type()) ::
Changeset.t(AmmoType.t() | AmmoType.new_ammo_type())
@spec change_ammo_type(AmmoType.t() | AmmoType.new_ammo_type(), attrs :: map()) ::
Changeset.t(AmmoType.t() | AmmoType.new_ammo_type())
def change_ammo_type(%AmmoType{} = ammo_type, attrs \\ %{}),
do: AmmoType.update_changeset(ammo_type, attrs)
@doc """ @doc """
Returns the list of ammo_groups for a user and type. Returns the list of ammo_groups for a user and type.
@ -350,18 +351,21 @@ defmodule Cannery.Ammo do
def create_ammo_groups( def create_ammo_groups(
%{"ammo_type_id" => ammo_type_id, "container_id" => container_id} = attrs, %{"ammo_type_id" => ammo_type_id, "container_id" => container_id} = attrs,
multiplier, multiplier,
%User{id: user_id} = user %User{} = user
) )
when multiplier >= 1 and multiplier <= @ammo_group_create_limit do when multiplier >= 1 and multiplier <= @ammo_group_create_limit and
# validate ammo type and container ids belong to user not (ammo_type_id |> is_nil()) and not (container_id |> is_nil()) do
_valid_ammo_type = get_ammo_type!(ammo_type_id, user)
_valid_container = Containers.get_container!(container_id, user)
now = NaiveDateTime.utc_now() |> NaiveDateTime.truncate(:second) now = NaiveDateTime.utc_now() |> NaiveDateTime.truncate(:second)
changesets = changesets =
Enum.map(1..multiplier, fn _count -> Enum.map(1..multiplier, fn _count ->
%AmmoGroup{} |> AmmoGroup.create_changeset(attrs |> Map.put("user_id", user_id)) %AmmoGroup{}
|> AmmoGroup.create_changeset(
get_ammo_type!(ammo_type_id, user),
Containers.get_container!(container_id, user),
user,
attrs
)
end) end)
if changesets |> Enum.all?(fn %{valid?: valid} -> valid end) do if changesets |> Enum.all?(fn %{valid?: valid} -> valid end) do
@ -386,8 +390,27 @@ defmodule Cannery.Ammo do
end end
end end
def create_ammo_groups(invalid_attrs, _multiplier, _user) do def create_ammo_groups(
{:error, %AmmoGroup{} |> AmmoGroup.create_changeset(invalid_attrs)} %{"ammo_type_id" => ammo_type_id, "container_id" => container_id} = attrs,
_multiplier,
user
)
when not (ammo_type_id |> is_nil()) and not (container_id |> is_nil()) do
changeset =
%AmmoGroup{}
|> AmmoGroup.create_changeset(
get_ammo_type!(ammo_type_id, user),
Containers.get_container!(container_id, user),
user,
attrs
)
|> Changeset.add_error(:multiplier, dgettext("errors", "Invalid multiplier"))
{:error, changeset}
end
def create_ammo_groups(invalid_attrs, _multiplier, user) do
{:error, %AmmoGroup{} |> AmmoGroup.create_changeset(nil, nil, user, invalid_attrs)}
end end
@doc """ @doc """
@ -436,18 +459,4 @@ defmodule Cannery.Ammo do
@spec delete_ammo_group!(AmmoGroup.t(), User.t()) :: AmmoGroup.t() @spec delete_ammo_group!(AmmoGroup.t(), User.t()) :: AmmoGroup.t()
def delete_ammo_group!(%AmmoGroup{user_id: user_id} = ammo_group, %User{id: user_id}), def delete_ammo_group!(%AmmoGroup{user_id: user_id} = ammo_group, %User{id: user_id}),
do: ammo_group |> Repo.delete!() do: ammo_group |> Repo.delete!()
@doc """
Returns an `%Changeset{}` for tracking ammo_group changes.
## Examples
iex> change_ammo_group(ammo_group)
%Changeset{data: %AmmoGroup{}}
"""
@spec change_ammo_group(AmmoGroup.t()) :: Changeset.t(AmmoGroup.t())
@spec change_ammo_group(AmmoGroup.t(), attrs :: map()) :: Changeset.t(AmmoGroup.t())
def change_ammo_group(%AmmoGroup{} = ammo_group, attrs \\ %{}),
do: AmmoGroup.update_changeset(ammo_group, attrs)
end end

View File

@ -7,6 +7,7 @@ defmodule Cannery.Ammo.AmmoGroup do
""" """
use Ecto.Schema use Ecto.Schema
import CanneryWeb.Gettext
import Ecto.Changeset import Ecto.Changeset
alias Cannery.Ammo.{AmmoGroup, AmmoType} alias Cannery.Ammo.{AmmoGroup, AmmoType}
alias Cannery.{Accounts.User, ActivityLog.ShotGroup, Containers.Container} alias Cannery.{Accounts.User, ActivityLog.ShotGroup, Containers.Container}
@ -48,22 +49,49 @@ defmodule Cannery.Ammo.AmmoGroup do
@type id :: UUID.t() @type id :: UUID.t()
@doc false @doc false
@spec create_changeset(new_ammo_group(), attrs :: map()) :: Changeset.t(new_ammo_group()) @spec create_changeset(
def create_changeset(ammo_group, attrs) do new_ammo_group(),
AmmoType.t() | nil,
Container.t() | nil,
User.t(),
attrs :: map()
) :: Changeset.t(new_ammo_group())
def create_changeset(
ammo_group,
%AmmoType{id: ammo_type_id},
%Container{id: container_id, user_id: user_id},
%User{id: user_id},
attrs
)
when not (ammo_type_id |> is_nil()) and not (container_id |> is_nil()) and
not (user_id |> is_nil()) do
ammo_group ammo_group
|> cast(attrs, [:count, :price_paid, :notes, :staged, :ammo_type_id, :container_id, :user_id]) |> change(ammo_type_id: ammo_type_id)
|> change(user_id: user_id)
|> change(container_id: container_id)
|> cast(attrs, [:count, :price_paid, :notes, :staged])
|> validate_number(:count, greater_than: 0) |> validate_number(:count, greater_than: 0)
|> validate_required([:count, :staged, :ammo_type_id, :container_id, :user_id]) |> validate_required([:count, :staged, :ammo_type_id, :container_id, :user_id])
end end
@doc """
Invalid changeset, used to prompt user to select ammo type and container
"""
def create_changeset(ammo_group, _invalid_ammo_type, _invalid_container, _invalid_user, attrs) do
ammo_group
|> cast(attrs, [:ammo_type_id, :container_id])
|> validate_required([:ammo_type_id, :container_id])
|> add_error(:invalid, dgettext("errors", "Please select an ammo type and container"))
end
@doc false @doc false
@spec update_changeset(t() | new_ammo_group(), attrs :: map()) :: @spec update_changeset(t() | new_ammo_group(), attrs :: map()) ::
Changeset.t(t() | new_ammo_group()) Changeset.t(t() | new_ammo_group())
def update_changeset(ammo_group, attrs) do def update_changeset(ammo_group, attrs) do
ammo_group ammo_group
|> cast(attrs, [:count, :price_paid, :notes, :staged, :ammo_type_id, :container_id]) |> cast(attrs, [:count, :price_paid, :notes, :staged])
|> validate_number(:count, greater_than_or_equal_to: 0) |> validate_number(:count, greater_than_or_equal_to: 0)
|> validate_required([:count, :staged, :ammo_type_id, :container_id, :user_id]) |> validate_required([:count, :staged])
end end
@doc """ @doc """
@ -75,6 +103,6 @@ defmodule Cannery.Ammo.AmmoGroup do
def range_changeset(ammo_group, attrs) do def range_changeset(ammo_group, attrs) do
ammo_group ammo_group
|> cast(attrs, [:count, :staged]) |> cast(attrs, [:count, :staged])
|> validate_required([:count, :staged, :ammo_type_id, :container_id, :user_id]) |> validate_required([:count, :staged])
end end
end end

View File

@ -105,10 +105,12 @@ defmodule Cannery.Ammo.AmmoType do
] ]
@doc false @doc false
@spec create_changeset(new_ammo_type(), attrs :: map()) :: Changeset.t(new_ammo_type()) @spec create_changeset(new_ammo_type(), User.t(), attrs :: map()) ::
def create_changeset(ammo_type, attrs) do Changeset.t(new_ammo_type())
def create_changeset(ammo_type, %User{id: user_id}, attrs) do
ammo_type ammo_type
|> cast(attrs, [:user_id | changeset_fields()]) |> change(user_id: user_id)
|> cast(attrs, changeset_fields())
|> validate_required([:name, :user_id]) |> validate_required([:name, :user_id])
end end
@ -118,6 +120,6 @@ defmodule Cannery.Ammo.AmmoType do
def update_changeset(ammo_type, attrs) do def update_changeset(ammo_type, attrs) do
ammo_type ammo_type
|> cast(attrs, changeset_fields()) |> cast(attrs, changeset_fields())
|> validate_required([:name, :user_id]) |> validate_required(:name)
end end
end end

View File

@ -30,6 +30,25 @@ defmodule Cannery.Containers do
) )
end end
@doc """
Returns a count of containers.
## Examples
iex> get_containers_count!(%User{id: 123})
3
"""
@spec get_containers_count!(User.t()) :: integer()
def get_containers_count!(%User{id: user_id}) do
Repo.one(
from c in Container,
where: c.user_id == ^user_id,
select: count(c.id),
distinct: true
)
end
@doc """ @doc """
Gets a single container. Gets a single container.
@ -71,9 +90,8 @@ defmodule Cannery.Containers do
""" """
@spec create_container(attrs :: map(), User.t()) :: @spec create_container(attrs :: map(), User.t()) ::
{:ok, Container.t()} | {:error, Changeset.t(Container.new_container())} {:ok, Container.t()} | {:error, Changeset.t(Container.new_container())}
def create_container(attrs, %User{id: user_id}) do def create_container(attrs, %User{} = user) do
attrs = attrs |> Map.put("user_id", user_id) %Container{} |> Container.create_changeset(user, attrs) |> Repo.insert()
%Container{} |> Container.create_changeset(attrs) |> Repo.insert()
end end
@doc """ @doc """
@ -122,7 +140,7 @@ defmodule Cannery.Containers do
error = dgettext("errors", "Container must be empty before deleting") error = dgettext("errors", "Container must be empty before deleting")
container container
|> change_container() |> Container.update_changeset(%{})
|> Changeset.add_error(:ammo_groups, error) |> Changeset.add_error(:ammo_groups, error)
|> Changeset.apply_action(:delete) |> Changeset.apply_action(:delete)
end end
@ -143,25 +161,6 @@ defmodule Cannery.Containers do
container container
end end
@doc """
Returns an `%Changeset{}` for tracking container changes.
## Examples
iex> change_container(container)
%Changeset{data: %Container{}}
iex> change_container(%Changeset{})
%Changeset{data: %Container{}}
"""
@spec change_container(Container.t() | Container.new_container()) ::
Changeset.t(Container.t() | Container.new_container())
@spec change_container(Container.t() | Container.new_container(), attrs :: map()) ::
Changeset.t(Container.t() | Container.new_container())
def change_container(container, attrs \\ %{}),
do: container |> Container.update_changeset(attrs)
@doc """ @doc """
Adds a tag to a container Adds a tag to a container
@ -173,14 +172,11 @@ defmodule Cannery.Containers do
""" """
@spec add_tag!(Container.t(), Tag.t(), User.t()) :: ContainerTag.t() @spec add_tag!(Container.t(), Tag.t(), User.t()) :: ContainerTag.t()
def add_tag!( def add_tag!(
%Container{id: container_id, user_id: user_id}, %Container{user_id: user_id} = container,
%Tag{id: tag_id, user_id: user_id}, %Tag{user_id: user_id} = tag,
%User{id: user_id} %User{id: user_id}
) do ),
%ContainerTag{} do: %ContainerTag{} |> ContainerTag.create_changeset(tag, container) |> Repo.insert!()
|> ContainerTag.changeset(%{"container_id" => container_id, "tag_id" => tag_id})
|> Repo.insert!()
end
@doc """ @doc """
Removes a tag from a container Removes a tag from a container
@ -207,6 +203,18 @@ defmodule Cannery.Containers do
if count == 0, do: raise("could not delete container tag"), else: count if count == 0, do: raise("could not delete container tag"), else: count
end end
@doc """
Returns number of rounds in container. If data is already preloaded, then
there will be no db hit.
"""
@spec get_container_ammo_group_count!(Container.t()) :: non_neg_integer()
def get_container_ammo_group_count!(%Container{} = container) do
container
|> Repo.preload(:ammo_groups)
|> Map.fetch!(:ammo_groups)
|> Enum.count()
end
@doc """ @doc """
Returns number of rounds in container. If data is already preloaded, then Returns number of rounds in container. If data is already preloaded, then
there will be no db hit. there will be no db hit.

View File

@ -42,10 +42,12 @@ defmodule Cannery.Containers.Container do
@type id :: UUID.t() @type id :: UUID.t()
@doc false @doc false
@spec create_changeset(new_container(), attrs :: map()) :: Changeset.t(new_container()) @spec create_changeset(new_container(), User.t(), attrs :: map()) ::
def create_changeset(container, attrs) do Changeset.t(new_container())
def create_changeset(container, %User{id: user_id}, attrs) do
container container
|> cast(attrs, [:name, :desc, :type, :location, :user_id]) |> change(user_id: user_id)
|> cast(attrs, [:name, :desc, :type, :location])
|> validate_required([:name, :type, :user_id]) |> validate_required([:name, :type, :user_id])
end end
@ -55,6 +57,6 @@ defmodule Cannery.Containers.Container do
def update_changeset(container, attrs) do def update_changeset(container, attrs) do
container container
|> cast(attrs, [:name, :desc, :type, :location]) |> cast(attrs, [:name, :desc, :type, :location])
|> validate_required([:name, :type, :user_id]) |> validate_required([:name, :type])
end end
end end

View File

@ -31,10 +31,16 @@ defmodule Cannery.Containers.ContainerTag do
@type id :: UUID.t() @type id :: UUID.t()
@doc false @doc false
@spec changeset(new_container_tag(), attrs :: map()) :: Changeset.t(new_container_tag()) @spec create_changeset(new_container_tag(), Tag.t(), Container.t()) ::
def changeset(container_tag, attrs) do Changeset.t(new_container_tag())
def create_changeset(
container_tag,
%Tag{id: tag_id, user_id: user_id},
%Container{id: container_id, user_id: user_id}
) do
container_tag container_tag
|> cast(attrs, [:tag_id, :container_id]) |> change(tag_id: tag_id)
|> change(container_id: container_id)
|> validate_required([:tag_id, :container_id]) |> validate_required([:tag_id, :container_id])
end end
end end

View File

@ -100,15 +100,13 @@ defmodule Cannery.Invites do
""" """
@spec create_invite(User.t(), attrs :: map()) :: @spec create_invite(User.t(), attrs :: map()) ::
{:ok, Invite.t()} | {:error, Changeset.t(Invite.new_invite())} {:ok, Invite.t()} | {:error, Changeset.t(Invite.new_invite())}
def create_invite(%User{id: user_id, role: :admin}, attrs) do def create_invite(%User{role: :admin} = user, attrs) do
token = token =
:crypto.strong_rand_bytes(@invite_token_length) :crypto.strong_rand_bytes(@invite_token_length)
|> Base.url_encode64() |> Base.url_encode64()
|> binary_part(0, @invite_token_length) |> binary_part(0, @invite_token_length)
attrs = attrs |> Map.merge(%{"user_id" => user_id, "token" => token}) %Invite{} |> Invite.create_changeset(user, token, attrs) |> Repo.insert()
%Invite{} |> Invite.create_changeset(attrs) |> Repo.insert()
end end
@doc """ @doc """
@ -155,19 +153,4 @@ defmodule Cannery.Invites do
""" """
@spec delete_invite!(Invite.t(), User.t()) :: Invite.t() @spec delete_invite!(Invite.t(), User.t()) :: Invite.t()
def delete_invite!(invite, %User{role: :admin}), do: invite |> Repo.delete!() def delete_invite!(invite, %User{role: :admin}), do: invite |> Repo.delete!()
@doc """
Returns an `%Changeset{}` for tracking invite changes.
## Examples
iex> change_invite(invite)
%Changeset{data: %Invite{}}
"""
@spec change_invite(Invite.t() | Invite.new_invite()) ::
Changeset.t(Invite.t() | Invite.new_invite())
@spec change_invite(Invite.t() | Invite.new_invite(), attrs :: map()) ::
Changeset.t(Invite.t() | Invite.new_invite())
def change_invite(invite, attrs \\ %{}), do: invite |> Invite.update_changeset(attrs)
end end

View File

@ -38,10 +38,12 @@ defmodule Cannery.Invites.Invite do
@type id :: UUID.t() @type id :: UUID.t()
@doc false @doc false
@spec create_changeset(new_invite(), attrs :: map()) :: Changeset.t(new_invite()) @spec create_changeset(new_invite(), User.t(), token :: binary(), attrs :: map()) ::
def create_changeset(invite, attrs) do Changeset.t(new_invite())
def create_changeset(invite, %User{id: user_id}, token, attrs) do
invite invite
|> cast(attrs, [:name, :token, :uses_left, :disabled_at, :user_id]) |> change(token: token, user_id: user_id)
|> cast(attrs, [:name, :uses_left, :disabled_at])
|> validate_required([:name, :token, :user_id]) |> validate_required([:name, :token, :user_id])
|> validate_number(:uses_left, greater_than_or_equal_to: 0) |> validate_number(:uses_left, greater_than_or_equal_to: 0)
end end
@ -51,7 +53,7 @@ defmodule Cannery.Invites.Invite do
def update_changeset(invite, attrs) do def update_changeset(invite, attrs) do
invite invite
|> cast(attrs, [:name, :uses_left, :disabled_at]) |> cast(attrs, [:name, :uses_left, :disabled_at])
|> validate_required([:name, :token, :user_id]) |> validate_required([:name])
|> validate_number(:uses_left, greater_than_or_equal_to: 0) |> validate_number(:uses_left, greater_than_or_equal_to: 0)
end end
end end

View File

@ -74,8 +74,8 @@ defmodule Cannery.Tags do
""" """
@spec create_tag(attrs :: map(), User.t()) :: @spec create_tag(attrs :: map(), User.t()) ::
{:ok, Tag.t()} | {:error, Changeset.t(Tag.new_tag())} {:ok, Tag.t()} | {:error, Changeset.t(Tag.new_tag())}
def create_tag(attrs, %User{id: user_id}), def create_tag(attrs, %User{} = user),
do: %Tag{} |> Tag.create_changeset(attrs |> Map.put("user_id", user_id)) |> Repo.insert() do: %Tag{} |> Tag.create_changeset(user, attrs) |> Repo.insert()
@doc """ @doc """
Updates a tag. Updates a tag.
@ -121,20 +121,6 @@ defmodule Cannery.Tags do
@spec delete_tag!(Tag.t(), User.t()) :: Tag.t() @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!() def delete_tag!(%Tag{user_id: user_id} = tag, %User{id: user_id}), do: tag |> Repo.delete!()
@doc """
Returns an `%Changeset{}` for tracking tag changes.
## Examples
iex> change_tag(tag)
%Changeset{data: %Tag{}}
"""
@spec change_tag(Tag.t() | Tag.new_tag()) :: Changeset.t(Tag.t() | Tag.new_tag())
@spec change_tag(Tag.t() | Tag.new_tag(), attrs :: map()) ::
Changeset.t(Tag.t() | Tag.new_tag())
def change_tag(tag, attrs \\ %{}), do: Tag.update_changeset(tag, attrs)
@doc """ @doc """
Get a random tag bg_color in `#ffffff` hex format Get a random tag bg_color in `#ffffff` hex format

View File

@ -35,10 +35,11 @@ defmodule Cannery.Tags.Tag do
@type id() :: UUID.t() @type id() :: UUID.t()
@doc false @doc false
@spec create_changeset(new_tag(), attrs :: map()) :: Changeset.t(new_tag()) @spec create_changeset(new_tag(), User.t(), attrs :: map()) :: Changeset.t(new_tag())
def create_changeset(tag, attrs) do def create_changeset(tag, %User{id: user_id}, attrs) do
tag tag
|> cast(attrs, [:name, :bg_color, :text_color, :user_id]) |> change(user_id: user_id)
|> cast(attrs, [:name, :bg_color, :text_color])
|> validate_required([:name, :bg_color, :text_color, :user_id]) |> validate_required([:name, :bg_color, :text_color, :user_id])
end end
@ -47,6 +48,6 @@ defmodule Cannery.Tags.Tag do
def update_changeset(tag, attrs) do def update_changeset(tag, attrs) do
tag tag
|> cast(attrs, [:name, :bg_color, :text_color]) |> cast(attrs, [:name, :bg_color, :text_color])
|> validate_required([:name, :bg_color, :text_color, :user_id]) |> validate_required([:name, :bg_color, :text_color])
end end
end end

View File

@ -16,9 +16,10 @@ defmodule CanneryWeb.Components.AddShotGroupComponent do
}, },
Socket.t() Socket.t()
) :: {: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} |> ActivityLog.change_shot_group() %ShotGroup{date: NaiveDateTime.utc_now(), count: 1}
|> ShotGroup.create_changeset(current_user, ammo_group, %{})
{:ok, socket |> assign(assigns) |> assign(:changeset, changeset)} {:ok, socket |> assign(assigns) |> assign(:changeset, changeset)}
end end
@ -27,21 +28,13 @@ defmodule CanneryWeb.Components.AddShotGroupComponent do
def handle_event( def handle_event(
"validate", "validate",
%{"shot_group" => shot_group_params}, %{"shot_group" => shot_group_params},
%{ %{assigns: %{ammo_group: ammo_group, current_user: current_user}} = socket
assigns: %{
ammo_group: %AmmoGroup{id: ammo_group_id} = ammo_group,
current_user: %User{id: user_id}
}
} = socket
) do ) do
shot_group_params = params = shot_group_params |> process_params(ammo_group)
shot_group_params
|> process_params(ammo_group)
|> Map.merge(%{"ammo_group_id" => ammo_group_id, "user_id" => user_id})
changeset = changeset =
%ShotGroup{} %ShotGroup{}
|> ActivityLog.change_shot_group(shot_group_params) |> ShotGroup.create_changeset(current_user, ammo_group, params)
|> Map.put(:action, :validate) |> Map.put(:action, :validate)
{:noreply, socket |> assign(:changeset, changeset)} {:noreply, socket |> assign(:changeset, changeset)}
@ -51,17 +44,12 @@ defmodule CanneryWeb.Components.AddShotGroupComponent do
"save", "save",
%{"shot_group" => shot_group_params}, %{"shot_group" => shot_group_params},
%{ %{
assigns: %{ assigns: %{ammo_group: ammo_group, current_user: current_user, return_to: return_to}
ammo_group: %{id: ammo_group_id} = ammo_group,
current_user: %{id: user_id} = current_user,
return_to: return_to
}
} = socket } = socket
) do ) do
socket = socket =
shot_group_params shot_group_params
|> process_params(ammo_group) |> process_params(ammo_group)
|> Map.merge(%{"ammo_group_id" => ammo_group_id, "user_id" => user_id})
|> ActivityLog.create_shot_group(current_user, ammo_group) |> ActivityLog.create_shot_group(current_user, ammo_group)
|> case do |> case do
{:ok, _shot_group} -> {:ok, _shot_group} ->

View File

@ -45,7 +45,12 @@ defmodule CanneryWeb.Components.ContainerCard do
</span> </span>
<% end %> <% end %>
<%= if @container.ammo_groups do %> <%= unless @container.ammo_groups |> Enum.empty?() do %>
<span class="rounded-lg title text-lg">
<%= gettext("Packs:") %>
<%= @container |> Containers.get_container_ammo_group_count!() %>
</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 |> Containers.get_container_rounds!() %>

View File

@ -22,7 +22,7 @@ defmodule CanneryWeb.Components.MoveAmmoGroupComponent do
assigns, assigns,
socket socket
) do ) do
changeset = Ammo.change_ammo_group(ammo_group) changeset = ammo_group |> AmmoGroup.update_changeset(%{})
containers = containers =
Containers.list_containers(current_user) Containers.list_containers(current_user)

View File

@ -16,10 +16,16 @@ defmodule CanneryWeb.Components.Topbar do
<nav role="navigation" class="mb-8 px-8 py-4 w-full bg-primary-400"> <nav role="navigation" class="mb-8 px-8 py-4 w-full bg-primary-400">
<div class="flex flex-col sm:flex-row justify-between items-center"> <div class="flex flex-col sm:flex-row justify-between items-center">
<div class="mb-4 sm:mb-0 sm:mr-8 flex flex-row justify-start items-center space-x-2"> <div class="mb-4 sm:mb-0 sm:mr-8 flex flex-row justify-start items-center space-x-2">
<%= live_redirect("Cannery", <%= live_redirect to: Routes.live_path(Endpoint, HomeLive),
to: Routes.live_path(Endpoint, HomeLive), class: "inline mx-2 my-1 leading-5 text-xl text-white"
class: "mx-2 my-1 leading-5 text-xl text-white hover:underline" do %>
) %> <img
src={Routes.static_path(Endpoint, "/images/cannery.svg")}
alt={gettext("Cannery logo")}
class="inline-block h-8 mx-1"
/>
<h1 class="inline hover:underline">Cannery</h1>
<% end %>
<%= if @title_content do %> <%= if @title_content do %>
<span class="mx-2 my-1"> <span class="mx-2 my-1">
@ -47,13 +53,13 @@ defmodule CanneryWeb.Components.Topbar do
) %> ) %>
</li> </li>
<li class="mx-2 my-1"> <li class="mx-2 my-1">
<%= live_redirect(gettext("Ammo"), <%= live_redirect(gettext("Catalog"),
to: Routes.ammo_type_index_path(Endpoint, :index), to: Routes.ammo_type_index_path(Endpoint, :index),
class: "text-primary-600 text-white hover:underline" class: "text-primary-600 text-white hover:underline"
) %> ) %>
</li> </li>
<li class="mx-2 my-1"> <li class="mx-2 my-1">
<%= live_redirect(gettext("Manage"), <%= live_redirect(gettext("Ammo"),
to: Routes.ammo_group_index_path(Endpoint, :index), to: Routes.ammo_group_index_path(Endpoint, :index),
class: "text-primary-600 text-white hover:underline" class: "text-primary-600 text-white hover:underline"
) %> ) %>

View File

@ -21,38 +21,30 @@ defmodule CanneryWeb.AmmoGroupLive.FormComponent do
end end
@spec update(Socket.t()) :: {:ok, Socket.t()} @spec update(Socket.t()) :: {:ok, Socket.t()}
def update(%{assigns: %{ammo_group: ammo_group, current_user: current_user}} = socket) do def update(%{assigns: %{current_user: current_user}} = socket) do
%{assigns: %{ammo_types: ammo_types, containers: containers}} =
socket = socket =
socket socket
|> assign(:ammo_group_create_limit, @ammo_group_create_limit) |> assign(:ammo_group_create_limit, @ammo_group_create_limit)
|> assign(:changeset, Ammo.change_ammo_group(ammo_group))
|> assign(:ammo_types, Ammo.list_ammo_types(current_user)) |> assign(:ammo_types, Ammo.list_ammo_types(current_user))
|> assign_new(:containers, fn -> Containers.list_containers(current_user) end) |> assign_new(:containers, fn -> Containers.list_containers(current_user) end)
{:ok, socket} params =
if ammo_types |> List.first() |> is_nil(),
do: %{},
else: %{} |> Map.put("ammo_type_id", ammo_types |> List.first() |> Map.get(:id))
params =
if containers |> List.first() |> is_nil(),
do: params,
else: params |> Map.put("container_id", containers |> List.first() |> Map.get(:id))
{:ok, socket |> assign_changeset(params)}
end end
@impl true @impl true
def handle_event( def handle_event("validate", %{"ammo_group" => ammo_group_params}, socket) do
"validate", {:noreply, socket |> assign_changeset(ammo_group_params)}
%{"ammo_group" => ammo_group_params},
%{assigns: %{action: action, ammo_group: ammo_group}} = socket
) do
changeset_action =
case action do
:new -> :insert
:edit -> :update
end
changeset = ammo_group |> Ammo.change_ammo_group(ammo_group_params)
changeset =
case changeset |> Changeset.apply_action(changeset_action) do
{:ok, _data} -> changeset
{:error, changeset} -> changeset
end
{:noreply, socket |> assign(:changeset, changeset)}
end end
def handle_event( def handle_event(
@ -76,6 +68,44 @@ defmodule CanneryWeb.AmmoGroupLive.FormComponent do
# Save Helpers # Save Helpers
defp assign_changeset(
%{assigns: %{action: action, ammo_group: ammo_group, current_user: user}} = socket,
ammo_group_params
) do
changeset_action =
case action do
:new -> :insert
:edit -> :update
end
changeset =
case action do
:new ->
ammo_type =
if ammo_group_params |> Map.has_key?("ammo_type_id"),
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)
:edit ->
ammo_group |> AmmoGroup.update_changeset(ammo_group_params)
end
changeset =
case changeset |> Changeset.apply_action(changeset_action) do
{:ok, _data} -> changeset
{:error, changeset} -> changeset
end
socket |> assign(:changeset, changeset)
end
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,
@ -85,7 +115,7 @@ defmodule CanneryWeb.AmmoGroupLive.FormComponent do
socket = socket =
case Ammo.update_ammo_group(ammo_group, ammo_group_params, current_user) do case Ammo.update_ammo_group(ammo_group, ammo_group_params, current_user) do
{:ok, _ammo_group} -> {:ok, _ammo_group} ->
prompt = dgettext("prompts", "Ammo group updated successfully") prompt = dgettext("prompts", "Ammo updated successfully")
socket |> put_flash(:info, prompt) |> push_redirect(to: return_to) socket |> put_flash(:info, prompt) |> push_redirect(to: return_to)
{:error, %Changeset{} = changeset} -> {:error, %Changeset{} = changeset} ->
@ -146,8 +176,8 @@ defmodule CanneryWeb.AmmoGroupLive.FormComponent do
prompt = prompt =
dngettext( dngettext(
"prompts", "prompts",
"Ammo group created successfully", "Ammo added successfully",
"Ammo groups created successfully", "Ammo added successfully",
count count
) )

View File

@ -74,7 +74,8 @@ defmodule CanneryWeb.AmmoGroupLive.Index do
defp display_ammo_groups(%{assigns: %{current_user: current_user}} = socket) do defp display_ammo_groups(%{assigns: %{current_user: current_user}} = socket) do
ammo_groups = Ammo.list_ammo_groups(current_user) |> Repo.preload([:ammo_type, :container]) ammo_groups = Ammo.list_ammo_groups(current_user) |> Repo.preload([:ammo_type, :container])
containers = Containers.list_containers(current_user) ammo_types_count = Ammo.get_ammo_types_count!(current_user)
containers_count = Containers.get_containers_count!(current_user)
columns = [ columns = [
%{label: gettext("Ammo type"), key: "ammo_type"}, %{label: gettext("Ammo type"), key: "ammo_type"},
@ -92,7 +93,13 @@ defmodule CanneryWeb.AmmoGroupLive.Index do
|> Enum.map(fn ammo_group -> ammo_group |> get_row_data_for_ammo_group(columns) end) |> Enum.map(fn ammo_group -> ammo_group |> get_row_data_for_ammo_group(columns) end)
socket socket
|> assign(ammo_groups: ammo_groups, containers: containers, columns: columns, rows: rows) |> assign(
ammo_groups: ammo_groups,
ammo_types_count: ammo_types_count,
containers_count: containers_count,
columns: columns,
rows: rows
)
end end
@spec get_row_data_for_ammo_group(AmmoGroup.t(), [map()]) :: [map()] @spec get_row_data_for_ammo_group(AmmoGroup.t(), [map()]) :: [map()]

View File

@ -8,8 +8,10 @@
<%= gettext("No Ammo") %> <%= gettext("No Ammo") %>
<%= display_emoji("😔") %> <%= display_emoji("😔") %>
</h2> </h2>
<% end %>
<%= if @containers |> Enum.empty?() do %> <%= cond do %>
<% @containers_count == 0 -> %>
<div class="flex justify-center items-center"> <div class="flex justify-center items-center">
<h2 class="m-2 title text-md text-primary-600"> <h2 class="m-2 title text-md text-primary-600">
<%= dgettext("prompts", "You'll need to") %> <%= dgettext("prompts", "You'll need to") %>
@ -20,31 +22,30 @@
class: "btn btn-primary" class: "btn btn-primary"
) %> ) %>
</div> </div>
<% else %> <% @ammo_types_count == 0 -> %>
<div class="flex justify-center items-center">
<h2 class="m-2 title text-md text-primary-600">
<%= dgettext("prompts", "You'll need to") %>
</h2>
<%= live_patch(dgettext("actions", "add an ammo type first"),
to: Routes.ammo_type_index_path(Endpoint, :new),
class: "btn btn-primary"
) %>
</div>
<% @ammo_groups |> Enum.empty?() -> %>
<%= live_patch(dgettext("actions", "Add your first box!"), <%= live_patch(dgettext("actions", "Add your first box!"),
to: Routes.ammo_group_index_path(Endpoint, :new), to: Routes.ammo_group_index_path(Endpoint, :new),
class: "btn btn-primary" class: "btn btn-primary"
) %> ) %>
<% end %> <% true -> %>
<% else %> <%= live_patch(dgettext("actions", "Add Ammo"),
<%= if @containers |> Enum.empty?() do %>
<div class="flex justify-center items-center">
<h2 class="m-2 title text-md text-primary-600">
<%= dgettext("prompts", "You'll need to") %>
</h2>
<%= live_patch(dgettext("actions", "add a container first"),
to: Routes.container_index_path(Endpoint, :new),
class: "btn btn-primary"
) %>
</div>
<% else %>
<%= live_patch(dgettext("actions", "New Ammo group"),
to: Routes.ammo_group_index_path(Endpoint, :new), to: Routes.ammo_group_index_path(Endpoint, :new),
class: "btn btn-primary" class: "btn btn-primary"
) %> ) %>
<% end %> <% end %>
<%= unless @ammo_groups |> Enum.empty?() do %>
<.live_component <.live_component
module={CanneryWeb.Components.TableComponent} module={CanneryWeb.Components.TableComponent}
id="ammo_groups_index_table" id="ammo_groups_index_table"
@ -66,7 +67,6 @@
ammo_group={@ammo_group} ammo_group={@ammo_group}
return_to={Routes.ammo_group_index_path(Endpoint, :index)} return_to={Routes.ammo_group_index_path(Endpoint, :index)}
current_user={@current_user} current_user={@current_user}
containers={@containers}
/> />
</.modal> </.modal>
<% @live_action == :add_shot_group -> %> <% @live_action == :add_shot_group -> %>

View File

@ -35,9 +35,9 @@ defmodule CanneryWeb.AmmoGroupLive.Show do
defp page_title(:add_shot_group), do: gettext("Record Shots") defp page_title(:add_shot_group), do: gettext("Record Shots")
defp page_title(:edit_shot_group), do: gettext("Edit Shot Records") defp page_title(:edit_shot_group), do: gettext("Edit Shot Records")
defp page_title(:move), do: gettext("Move Ammo group") defp page_title(:move), do: gettext("Move Ammo")
defp page_title(:show), do: gettext("Show Ammo group") defp page_title(:show), do: gettext("Show Ammo")
defp page_title(:edit), do: gettext("Edit Ammo group") defp page_title(:edit), do: gettext("Edit Ammo")
@impl true @impl true
def handle_event( def handle_event(
@ -47,7 +47,7 @@ defmodule CanneryWeb.AmmoGroupLive.Show do
) do ) do
ammo_group |> Ammo.delete_ammo_group!(current_user) ammo_group |> Ammo.delete_ammo_group!(current_user)
prompt = dgettext("prompts", "Ammo group deleted succesfully") prompt = dgettext("prompts", "Ammo deleted succesfully")
redirect_to = Routes.ammo_group_index_path(socket, :index) redirect_to = Routes.ammo_group_index_path(socket, :index)
{:noreply, socket |> put_flash(:info, prompt) |> push_redirect(to: redirect_to)} {:noreply, socket |> put_flash(:info, prompt) |> push_redirect(to: redirect_to)}

View File

@ -52,7 +52,7 @@
<div class="flex flex-col justify-center items-center"> <div class="flex flex-col justify-center items-center">
<div class="flex flex-wrap justify-center items-center text-primary-600"> <div class="flex flex-wrap justify-center items-center text-primary-600">
<%= live_patch(dgettext("actions", "Ammo Details"), <%= live_patch(dgettext("actions", "View in Catalog"),
to: Routes.ammo_type_show_path(Endpoint, :show, @ammo_group.ammo_type), to: Routes.ammo_type_show_path(Endpoint, :show, @ammo_group.ammo_type),
class: "mx-4 my-2 btn btn-primary", class: "mx-4 my-2 btn btn-primary",
data: [qa: "details"] data: [qa: "details"]
@ -105,7 +105,7 @@
<.container_card container={@ammo_group.container} /> <.container_card container={@ammo_group.container} />
<% else %> <% else %>
<%= gettext("This ammo group is not in a container") %> <%= gettext("This ammo is not in a container") %>
<% end %> <% end %>
</div> </div>

View File

@ -13,17 +13,13 @@ defmodule CanneryWeb.AmmoTypeLive.FormComponent do
%{:ammo_type => AmmoType.t(), :current_user => User.t(), optional(any) => any}, %{:ammo_type => AmmoType.t(), :current_user => User.t(), optional(any) => any},
Socket.t() Socket.t()
) :: {:ok, Socket.t()} ) :: {:ok, Socket.t()}
def update(%{ammo_type: ammo_type, current_user: _current_user} = assigns, socket) do def update(%{current_user: _current_user} = assigns, socket) do
{:ok, socket |> assign(assigns) |> assign(:changeset, Ammo.change_ammo_type(ammo_type))} {:ok, socket |> assign(assigns) |> assign_changeset(%{})}
end end
@impl true @impl true
def handle_event( def handle_event("validate", %{"ammo_type" => ammo_type_params}, socket) do
"validate", {:noreply, socket |> assign_changeset(ammo_type_params)}
%{"ammo_type" => ammo_type_params},
%{assigns: %{ammo_type: ammo_type}} = socket
) do
{:noreply, socket |> assign(:changeset, ammo_type |> Ammo.change_ammo_type(ammo_type_params))}
end end
def handle_event( def handle_event(
@ -34,6 +30,31 @@ defmodule CanneryWeb.AmmoTypeLive.FormComponent do
save_ammo_type(socket, action, ammo_type_params) save_ammo_type(socket, action, ammo_type_params)
end end
defp assign_changeset(
%{assigns: %{action: action, ammo_type: ammo_type, current_user: user}} = socket,
ammo_type_params
) do
changeset_action =
case action do
:new -> :insert
:edit -> :update
end
changeset =
case action do
:new -> ammo_type |> AmmoType.create_changeset(user, ammo_type_params)
:edit -> ammo_type |> AmmoType.update_changeset(ammo_type_params)
end
changeset =
case changeset |> Changeset.apply_action(changeset_action) do
{:ok, _data} -> changeset
{:error, changeset} -> changeset
end
socket |> assign(changeset: changeset)
end
defp save_ammo_type( defp save_ammo_type(
%{assigns: %{ammo_type: ammo_type, current_user: current_user, return_to: return_to}} = %{assigns: %{ammo_type: ammo_type, current_user: current_user, return_to: return_to}} =
socket, socket,

View File

@ -137,7 +137,7 @@ defmodule CanneryWeb.AmmoTypeLive.Index do
phx_click: "delete", phx_click: "delete",
phx_value_id: ammo_type.id, phx_value_id: ammo_type.id,
data: [ data: [
confirm: dgettext("prompts", "Are you sure you want to delete this ammo?"), confirm: dgettext("prompts", "Are you sure you want to delete %{name}? This will delete all %{name} type ammo as well!", name: ammo_type.name),
qa: "delete-#{ammo_type.id}" qa: "delete-#{ammo_type.id}"
] do %> ] do %>
<i class="fa-lg fas fa-trash"></i> <i class="fa-lg fas fa-trash"></i>

View File

@ -1,6 +1,6 @@
<div class="flex flex-col space-y-8 justify-center items-center"> <div class="flex flex-col space-y-8 justify-center items-center">
<h1 class="title text-2xl title-primary-500"> <h1 class="title text-2xl title-primary-500">
<%= gettext("Ammo Types") %> <%= gettext("Catalog") %>
</h1> </h1>
<%= if @rows |> Enum.empty?() do %> <%= if @rows |> Enum.empty?() do %>

View File

@ -24,7 +24,7 @@
phx_click: "delete", phx_click: "delete",
data: [ data: [
confirm: confirm:
dgettext("prompts", "Are you sure you want to delete %{name}?", name: @ammo_type.name), dgettext("prompts", "Are you sure you want to delete %{name}? This will delete all %{name} type ammo as well!", name: @ammo_type.name),
qa: "delete" qa: "delete"
] do %> ] do %>
<i class="fa-fw fa-lg fas fa-trash"></i> <i class="fa-fw fa-lg fas fa-trash"></i>

View File

@ -13,18 +13,13 @@ defmodule CanneryWeb.ContainerLive.FormComponent do
%{:container => Container.t(), :current_user => User.t(), optional(any) => any}, %{:container => Container.t(), :current_user => User.t(), optional(any) => any},
Socket.t() Socket.t()
) :: {:ok, Socket.t()} ) :: {:ok, Socket.t()}
def update(%{container: container} = assigns, socket) do def update(%{container: _container} = assigns, socket) do
{:ok, socket |> assign(assigns) |> assign(:changeset, Containers.change_container(container))} {:ok, socket |> assign(assigns) |> assign_changeset(%{})}
end end
@impl true @impl true
def handle_event( def handle_event("validate", %{"container" => container_params}, socket) do
"validate", {:noreply, socket |> assign_changeset(container_params)}
%{"container" => container_params},
%{assigns: %{container: container}} = socket
) do
changeset = container |> Containers.change_container(container_params)
{:noreply, socket |> assign(:changeset, changeset)}
end end
def handle_event( def handle_event(
@ -35,6 +30,31 @@ defmodule CanneryWeb.ContainerLive.FormComponent do
save_container(socket, action, container_params) save_container(socket, action, container_params)
end end
defp assign_changeset(
%{assigns: %{action: action, container: container, current_user: user}} = socket,
container_params
) do
changeset_action =
case action do
:new -> :insert
:edit -> :update
end
changeset =
case action do
:new -> container |> Container.create_changeset(user, container_params)
:edit -> container |> Container.update_changeset(container_params)
end
changeset =
case changeset |> Changeset.apply_action(changeset_action) do
{:ok, _data} -> changeset
{:error, changeset} -> changeset
end
socket |> assign(:changeset, changeset)
end
defp save_container( defp save_container(
%{assigns: %{container: container, current_user: current_user, return_to: return_to}} = %{assigns: %{container: container, current_user: current_user, return_to: return_to}} =
socket, socket,

View File

@ -22,6 +22,18 @@
</span> </span>
<% end %> <% end %>
<%= unless @container.ammo_groups |> Enum.empty?() do %>
<span class="rounded-lg title text-lg">
<%= gettext("Packs:") %>
<%= @container |> Containers.get_container_ammo_group_count!() %>
</span>
<span class="rounded-lg title text-lg">
<%= gettext("Rounds:") %>
<%= @container |> Containers.get_container_rounds!() %>
</span>
<% end %>
<div class="flex space-x-4 justify-center items-center text-primary-600"> <div class="flex space-x-4 justify-center items-center text-primary-600">
<%= live_patch to: Routes.container_show_path(Endpoint, :edit, @container), <%= live_patch to: Routes.container_show_path(Endpoint, :edit, @container),
class: "text-primary-600 link", class: "text-primary-600 link",
@ -75,7 +87,7 @@
<div> <div>
<%= if @container.ammo_groups |> Enum.empty?() do %> <%= if @container.ammo_groups |> Enum.empty?() do %>
<h2 class="mx-8 my-4 title text-lg text-primary-600"> <h2 class="mx-8 my-4 title text-lg text-primary-600">
<%= gettext("No ammo groups in this container") %> <%= gettext("No ammo in this container") %>
</h2> </h2>
<% else %> <% else %>
<div class="flex flex-wrap justify-center items-center"> <div class="flex flex-wrap justify-center items-center">

View File

@ -5,6 +5,7 @@ defmodule CanneryWeb.HomeLive do
use CanneryWeb, :live_view use CanneryWeb, :live_view
alias Cannery.Accounts alias Cannery.Accounts
alias CanneryWeb.Endpoint
@impl true @impl true
def mount(_params, _session, socket) do def mount(_params, _session, socket) do
@ -36,6 +37,13 @@ defmodule CanneryWeb.HomeLive do
def render(assigns) do def render(assigns) do
~H""" ~H"""
<div class="mx-auto px-8 sm:px-16 flex flex-col justify-center items-center text-center space-y-4 max-w-3xl"> <div class="mx-auto px-8 sm:px-16 flex flex-col justify-center items-center text-center space-y-4 max-w-3xl">
<img
src={Routes.static_path(Endpoint, "/images/cannery.svg")}
alt={gettext("Cannery logo")}
class="inline-block w-32 hover:-mt-2 hover:mb-2 transition-all duration-500 ease-in-out"
title={gettext("isn't he cute >:3")}
/>
<h1 class="title text-primary-600 text-2xl"> <h1 class="title text-primary-600 text-2xl">
<%= gettext("Welcome to %{name}", name: "Cannery") %> <%= gettext("Welcome to %{name}", name: "Cannery") %>
</h1> </h1>
@ -126,7 +134,7 @@ defmodule CanneryWeb.HomeLive do
to: "https://gitea.bubbletea.dev/shibao/cannery/src/branch/stable/CHANGELOG.md", to: "https://gitea.bubbletea.dev/shibao/cannery/src/branch/stable/CHANGELOG.md",
target: "_blank", target: "_blank",
rel: "noopener noreferrer" do %> rel: "noopener noreferrer" do %>
<p>0.5.3</p> <p>0.5.5</p>
<i class="fas fa-md fa-info-circle"></i> <i class="fas fa-md fa-info-circle"></i>
<% end %> <% end %>
</li> </li>

View File

@ -13,23 +13,44 @@ defmodule CanneryWeb.InviteLive.FormComponent do
%{:invite => Invite.t(), :current_user => User.t(), optional(any) => any}, %{:invite => Invite.t(), :current_user => User.t(), optional(any) => any},
Socket.t() Socket.t()
) :: {:ok, Socket.t()} ) :: {:ok, Socket.t()}
def update(%{invite: invite} = assigns, socket) do def update(%{invite: _invite} = assigns, socket) do
{:ok, socket |> assign(assigns) |> assign(:changeset, Invites.change_invite(invite))} {:ok, socket |> assign(assigns) |> assign_changeset(%{})}
end end
@impl true @impl true
def handle_event( def handle_event("validate", %{"invite" => invite_params}, socket) do
"validate", {:noreply, socket |> assign_changeset(invite_params)}
%{"invite" => invite_params},
%{assigns: %{invite: invite}} = socket
) do
{:noreply, socket |> assign(:changeset, invite |> Invites.change_invite(invite_params))}
end end
def handle_event("save", %{"invite" => invite_params}, %{assigns: %{action: action}} = socket) do def handle_event("save", %{"invite" => invite_params}, %{assigns: %{action: action}} = socket) do
save_invite(socket, action, invite_params) save_invite(socket, action, invite_params)
end end
defp assign_changeset(
%{assigns: %{action: action, current_user: user, invite: invite}} = socket,
invite_params
) do
changeset_action =
case action do
:new -> :insert
:edit -> :update
end
changeset =
case action do
:new -> invite |> Invite.create_changeset(user, "example_token", invite_params)
:edit -> invite |> Invite.update_changeset(invite_params)
end
changeset =
case changeset |> Changeset.apply_action(changeset_action) do
{:ok, _data} -> changeset
{:error, changeset} -> changeset
end
socket |> assign(:changeset, changeset)
end
defp save_invite( defp save_invite(
%{assigns: %{current_user: current_user, invite: invite, return_to: return_to}} = socket, %{assigns: %{current_user: current_user, invite: invite, return_to: return_to}} = socket,
:edit, :edit,

View File

@ -24,6 +24,9 @@
<%= label(f, :uses_left, gettext("Uses left"), class: "title text-lg text-primary-600") %> <%= label(f, :uses_left, gettext("Uses left"), class: "title text-lg text-primary-600") %>
<%= number_input(f, :uses_left, min: 0, class: "input input-primary col-span-2") %> <%= number_input(f, :uses_left, min: 0, class: "input input-primary col-span-2") %>
<%= error_tag(f, :uses_left, "col-span-3") %> <%= error_tag(f, :uses_left, "col-span-3") %>
<span class="col-span-3 text-primary-400 italic text-center">
<%= gettext("Leave \"Uses left\" blank to make invite unlimited") %>
</span>
<%= submit(dgettext("actions", "Save"), <%= submit(dgettext("actions", "Save"),
class: "mx-auto btn btn-primary col-span-3", class: "mx-auto btn btn-primary col-span-3",

View File

@ -1,6 +1,6 @@
defmodule CanneryWeb.RangeLive.FormComponent do defmodule CanneryWeb.RangeLive.FormComponent do
@moduledoc """ @moduledoc """
Livecomponent that can update or create a ShotGroup Livecomponent that can update a ShotGroup
""" """
use CanneryWeb, :live_component use CanneryWeb, :live_component
@ -24,7 +24,7 @@ defmodule CanneryWeb.RangeLive.FormComponent do
} = assigns, } = assigns,
socket socket
) do ) do
changeset = shot_group |> ActivityLog.change_shot_group() changeset = shot_group |> ShotGroup.update_changeset(current_user, %{})
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, changeset: changeset)}
end end
@ -33,11 +33,11 @@ defmodule CanneryWeb.RangeLive.FormComponent do
def handle_event( def handle_event(
"validate", "validate",
%{"shot_group" => shot_group_params}, %{"shot_group" => shot_group_params},
%{assigns: %{shot_group: shot_group}} = socket %{assigns: %{current_user: current_user, shot_group: shot_group}} = socket
) do ) do
changeset = changeset =
shot_group shot_group
|> ActivityLog.change_shot_group(shot_group_params) |> ShotGroup.update_changeset(current_user, shot_group_params)
|> Map.put(:action, :validate) |> Map.put(:action, :validate)
{:noreply, assign(socket, :changeset, changeset)} {:noreply, assign(socket, :changeset, changeset)}

View File

@ -65,7 +65,7 @@ defmodule CanneryWeb.RangeLive.Index do
{:ok, _ammo_group} = {:ok, _ammo_group} =
ammo_group |> Ammo.update_ammo_group(%{"staged" => !ammo_group.staged}, current_user) ammo_group |> Ammo.update_ammo_group(%{"staged" => !ammo_group.staged}, current_user)
prompt = dgettext("prompts", "Ammo group unstaged succesfully") prompt = dgettext("prompts", "Ammo unstaged succesfully")
{:noreply, socket |> put_flash(:info, prompt) |> display_shot_groups()} {:noreply, socket |> put_flash(:info, prompt) |> display_shot_groups()}
end end

View File

@ -12,19 +12,44 @@ defmodule CanneryWeb.TagLive.FormComponent do
@impl true @impl true
@spec update(%{:tag => Tag.t(), :current_user => User.t(), optional(any) => any}, Socket.t()) :: @spec update(%{:tag => Tag.t(), :current_user => User.t(), optional(any) => any}, Socket.t()) ::
{:ok, Socket.t()} {:ok, Socket.t()}
def update(%{tag: tag} = assigns, socket) do def update(%{tag: _tag} = assigns, socket) do
{:ok, socket |> assign(assigns) |> assign(:changeset, Tags.change_tag(tag))} {:ok, socket |> assign(assigns) |> assign_changeset(%{})}
end end
@impl true @impl true
def handle_event("validate", %{"tag" => tag_params}, %{assigns: %{tag: tag}} = socket) do def handle_event("validate", %{"tag" => tag_params}, socket) do
{:noreply, socket |> assign(:changeset, tag |> Tags.change_tag(tag_params))} {:noreply, socket |> assign_changeset(tag_params)}
end end
def handle_event("save", %{"tag" => tag_params}, %{assigns: %{action: action}} = socket) do def handle_event("save", %{"tag" => tag_params}, %{assigns: %{action: action}} = socket) do
save_tag(socket, action, tag_params) save_tag(socket, action, tag_params)
end end
defp assign_changeset(
%{assigns: %{action: action, current_user: user, tag: tag}} = socket,
tag_params
) do
changeset_action =
case action do
:new -> :insert
:edit -> :update
end
changeset =
case action do
:new -> tag |> Tag.create_changeset(user, tag_params)
:edit -> tag |> Tag.update_changeset(tag_params)
end
changeset =
case changeset |> Changeset.apply_action(changeset_action) do
{:ok, _data} -> changeset
{:error, changeset} -> changeset
end
socket |> assign(:changeset, changeset)
end
@impl true @impl true
def render(assigns) do def render(assigns) do
~H""" ~H"""

View File

@ -65,12 +65,12 @@ defmodule CanneryWeb.Router do
live "/tags/new", TagLive.Index, :new live "/tags/new", TagLive.Index, :new
live "/tags/:id/edit", TagLive.Index, :edit live "/tags/:id/edit", TagLive.Index, :edit
live "/ammo_types", AmmoTypeLive.Index, :index live "/catalog", AmmoTypeLive.Index, :index
live "/ammo_types/new", AmmoTypeLive.Index, :new live "/catalog/new", AmmoTypeLive.Index, :new
live "/ammo_types/:id/edit", AmmoTypeLive.Index, :edit live "/catalog/:id/edit", AmmoTypeLive.Index, :edit
live "/ammo_types/:id", AmmoTypeLive.Show, :show live "/catalog/:id", AmmoTypeLive.Show, :show
live "/ammo_types/:id/show/edit", AmmoTypeLive.Show, :edit live "/catalog/:id/show/edit", AmmoTypeLive.Show, :edit
live "/containers", ContainerLive.Index, :index live "/containers", ContainerLive.Index, :index
live "/containers/new", ContainerLive.Index, :new live "/containers/new", ContainerLive.Index, :new
@ -81,17 +81,17 @@ defmodule CanneryWeb.Router do
live "/containers/:id/show/edit", ContainerLive.Show, :edit live "/containers/:id/show/edit", ContainerLive.Show, :edit
live "/containers/:id/show/edit_tags", ContainerLive.Show, :edit_tags live "/containers/:id/show/edit_tags", ContainerLive.Show, :edit_tags
live "/ammo_groups", AmmoGroupLive.Index, :index live "/ammo", AmmoGroupLive.Index, :index
live "/ammo_groups/new", AmmoGroupLive.Index, :new live "/ammo/new", AmmoGroupLive.Index, :new
live "/ammo_groups/:id/edit", AmmoGroupLive.Index, :edit live "/ammo/:id/edit", AmmoGroupLive.Index, :edit
live "/ammo_groups/:id/add_shot_group", AmmoGroupLive.Index, :add_shot_group live "/ammo/:id/add_shot_group", AmmoGroupLive.Index, :add_shot_group
live "/ammo_groups/:id/move", AmmoGroupLive.Index, :move live "/ammo/:id/move", AmmoGroupLive.Index, :move
live "/ammo_groups/:id", AmmoGroupLive.Show, :show live "/ammo/:id", AmmoGroupLive.Show, :show
live "/ammo_groups/:id/show/edit", AmmoGroupLive.Show, :edit live "/ammo/:id/show/edit", AmmoGroupLive.Show, :edit
live "/ammo_groups/:id/show/add_shot_group", AmmoGroupLive.Show, :add_shot_group live "/ammo/:id/show/add_shot_group", AmmoGroupLive.Show, :add_shot_group
live "/ammo_groups/:id/show/move", AmmoGroupLive.Show, :move live "/ammo/:id/show/move", AmmoGroupLive.Show, :move
live "/ammo_groups/:id/show/:shot_group_id/edit", AmmoGroupLive.Show, :edit_shot_group live "/ammo/:id/show/:shot_group_id/edit", AmmoGroupLive.Show, :edit_shot_group
live "/range", RangeLive.Index, :index live "/range", RangeLive.Index, :index
live "/range/:id/edit", RangeLive.Index, :edit live "/range/:id/edit", RangeLive.Index, :edit

View File

@ -5,6 +5,11 @@
<meta http-equiv="X-UA-Compatible" content="IE=edge" /> <meta http-equiv="X-UA-Compatible" content="IE=edge" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" /> <meta name="viewport" content="width=device-width, initial-scale=1.0" />
<%= csrf_meta_tag() %> <%= csrf_meta_tag() %>
<link
rel="shortcut icon"
type="image/jpg"
href={Routes.static_path(@conn, "/images/cannery.svg")}
/>
<%= if(assigns |> Map.has_key?(:page_title), do: @page_title, else: "Cannery") <%= if(assigns |> Map.has_key?(:page_title), do: @page_title, else: "Cannery")
|> live_title_tag(suffix: " | Cannery") %> |> live_title_tag(suffix: " | Cannery") %>
<link phx-track-static rel="stylesheet" href={Routes.static_path(@conn, "/css/app.css")} /> <link phx-track-static rel="stylesheet" href={Routes.static_path(@conn, "/css/app.css")} />

View File

@ -4,7 +4,7 @@ defmodule Cannery.MixProject do
def project do def project do
[ [
app: :cannery, app: :cannery,
version: "0.5.3", version: "0.5.5",
elixir: "1.13.4", elixir: "1.13.4",
elixirc_paths: elixirc_paths(Mix.env()), elixirc_paths: elixirc_paths(Mix.env()),
compilers: [:gettext] ++ Mix.compilers(), compilers: [:gettext] ++ Mix.compilers(),

View File

@ -12,11 +12,12 @@ msgstr ""
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
#: lib/cannery_web/live/ammo_group_live/index.ex:44 #: lib/cannery_web/live/ammo_group_live/index.ex:44
#: lib/cannery_web/live/ammo_group_live/index.html.heex:42
msgid "Add Ammo" msgid "Add Ammo"
msgstr "" msgstr ""
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
#: lib/cannery_web/live/ammo_group_live/index.html.heex:24 #: lib/cannery_web/live/ammo_group_live/index.html.heex:37
msgid "Add your first box!" msgid "Add your first box!"
msgstr "" msgstr ""
@ -65,7 +66,7 @@ msgid "Invite someone new!"
msgstr "" msgstr ""
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
#: lib/cannery_web/components/topbar.ex:106 #: lib/cannery_web/components/topbar.ex:112
#: lib/cannery_web/templates/user_confirmation/new.html.heex:30 #: lib/cannery_web/templates/user_confirmation/new.html.heex:30
#: lib/cannery_web/templates/user_registration/new.html.heex:48 #: lib/cannery_web/templates/user_registration/new.html.heex:48
#: lib/cannery_web/templates/user_reset_password/edit.html.heex:48 #: lib/cannery_web/templates/user_reset_password/edit.html.heex:48
@ -80,11 +81,6 @@ msgstr ""
msgid "Make your first tag!" msgid "Make your first tag!"
msgstr "" msgstr ""
#, elixir-autogen, elixir-format
#: lib/cannery_web/live/ammo_group_live/index.html.heex:42
msgid "New Ammo group"
msgstr ""
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
#: lib/cannery_web/live/ammo_type_live/index.html.heex:17 #: lib/cannery_web/live/ammo_type_live/index.html.heex:17
msgid "New Ammo type" msgid "New Ammo type"
@ -101,7 +97,7 @@ msgid "New Tag"
msgstr "" msgstr ""
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
#: lib/cannery_web/components/topbar.ex:99 #: lib/cannery_web/components/topbar.ex:105
#: lib/cannery_web/templates/user_confirmation/new.html.heex:25 #: lib/cannery_web/templates/user_confirmation/new.html.heex:25
#: 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:42 #: lib/cannery_web/templates/user_registration/new.html.heex:42
@ -128,9 +124,9 @@ msgstr ""
#: lib/cannery_web/live/ammo_group_live/form_component.html.heex:73 #: lib/cannery_web/live/ammo_group_live/form_component.html.heex:73
#: lib/cannery_web/live/ammo_type_live/form_component.html.heex:156 #: lib/cannery_web/live/ammo_type_live/form_component.html.heex:156
#: lib/cannery_web/live/container_live/form_component.html.heex:50 #: lib/cannery_web/live/container_live/form_component.html.heex:50
#: lib/cannery_web/live/invite_live/form_component.html.heex:28 #: lib/cannery_web/live/invite_live/form_component.html.heex:31
#: lib/cannery_web/live/range_live/form_component.html.heex:40 #: lib/cannery_web/live/range_live/form_component.html.heex:40
#: lib/cannery_web/live/tag_live/form_component.ex:66 #: lib/cannery_web/live/tag_live/form_component.ex:91
msgid "Save" msgid "Save"
msgstr "" msgstr ""
@ -140,7 +136,7 @@ msgid "Send instructions to reset password"
msgstr "" msgstr ""
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
#: lib/cannery_web/live/container_live/show.html.heex:53 #: lib/cannery_web/live/container_live/show.html.heex:65
msgid "Why not add one?" msgid "Why not add one?"
msgstr "" msgstr ""
@ -160,17 +156,12 @@ msgid "Why not get some ready to shoot?"
msgstr "" msgstr ""
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
#: lib/cannery_web/live/ammo_group_live/index.ex:144 #: lib/cannery_web/live/ammo_group_live/index.ex:151
#: lib/cannery_web/live/ammo_group_live/show.html.heex:91 #: lib/cannery_web/live/ammo_group_live/show.html.heex:91
#: lib/cannery_web/live/range_live/index.html.heex:36 #: lib/cannery_web/live/range_live/index.html.heex:36
msgid "Record shots" msgid "Record shots"
msgstr "" msgstr ""
#, elixir-autogen, elixir-format
#: lib/cannery_web/live/ammo_group_live/show.html.heex:55
msgid "Ammo Details"
msgstr ""
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
#: lib/cannery_web/components/move_ammo_group_component.ex:89 #: lib/cannery_web/components/move_ammo_group_component.ex:89
msgid "Add another container!" msgid "Add another container!"
@ -192,8 +183,7 @@ msgid "Copy to clipboard"
msgstr "" msgstr ""
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
#: lib/cannery_web/live/ammo_group_live/index.html.heex:18 #: lib/cannery_web/live/ammo_group_live/index.html.heex:20
#: lib/cannery_web/live/ammo_group_live/index.html.heex:36
msgid "add a container first" msgid "add a container first"
msgstr "" msgstr ""
@ -211,3 +201,13 @@ msgstr ""
#: lib/cannery_web/templates/user_settings/edit.html.heex:134 #: lib/cannery_web/templates/user_settings/edit.html.heex:134
msgid "Change language" msgid "Change language"
msgstr "" msgstr ""
#, elixir-autogen, elixir-format
#: lib/cannery_web/live/ammo_group_live/show.html.heex:55
msgid "View in Catalog"
msgstr ""
#, elixir-autogen, elixir-format
#: lib/cannery_web/live/ammo_group_live/index.html.heex:31
msgid "add an ammo type first"
msgstr ""

View File

@ -25,11 +25,12 @@ msgstr ""
## effect: edit them in PO (.po) files instead. ## effect: edit them in PO (.po) files instead.
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
#: lib/cannery_web/live/ammo_group_live/index.ex:44 #: lib/cannery_web/live/ammo_group_live/index.ex:44
#: lib/cannery_web/live/ammo_group_live/index.html.heex:42
msgid "Add Ammo" msgid "Add Ammo"
msgstr "Munition hinzufügen" msgstr "Munition hinzufügen"
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
#: lib/cannery_web/live/ammo_group_live/index.html.heex:24 #: lib/cannery_web/live/ammo_group_live/index.html.heex:37
msgid "Add your first box!" msgid "Add your first box!"
msgstr "Fügen Sie ihre erste Box hinzu!" msgstr "Fügen Sie ihre erste Box hinzu!"
@ -78,7 +79,7 @@ msgid "Invite someone new!"
msgstr "Laden Sie jemanden ein!" msgstr "Laden Sie jemanden ein!"
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
#: lib/cannery_web/components/topbar.ex:106 #: lib/cannery_web/components/topbar.ex:112
#: lib/cannery_web/templates/user_confirmation/new.html.heex:30 #: lib/cannery_web/templates/user_confirmation/new.html.heex:30
#: lib/cannery_web/templates/user_registration/new.html.heex:48 #: lib/cannery_web/templates/user_registration/new.html.heex:48
#: lib/cannery_web/templates/user_reset_password/edit.html.heex:48 #: lib/cannery_web/templates/user_reset_password/edit.html.heex:48
@ -93,11 +94,6 @@ msgstr "Einloggen"
msgid "Make your first tag!" msgid "Make your first tag!"
msgstr "Erstellen Sie ihren ersten Tag!" msgstr "Erstellen Sie ihren ersten Tag!"
#, elixir-autogen, elixir-format
#: lib/cannery_web/live/ammo_group_live/index.html.heex:42
msgid "New Ammo group"
msgstr "Neue Munitionsgruppe"
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
#: lib/cannery_web/live/ammo_type_live/index.html.heex:17 #: lib/cannery_web/live/ammo_type_live/index.html.heex:17
msgid "New Ammo type" msgid "New Ammo type"
@ -114,7 +110,7 @@ msgid "New Tag"
msgstr "Neuer Tag" msgstr "Neuer Tag"
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
#: lib/cannery_web/components/topbar.ex:99 #: lib/cannery_web/components/topbar.ex:105
#: lib/cannery_web/templates/user_confirmation/new.html.heex:25 #: lib/cannery_web/templates/user_confirmation/new.html.heex:25
#: 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:42 #: lib/cannery_web/templates/user_registration/new.html.heex:42
@ -141,9 +137,9 @@ msgstr "Passwort zurücksetzen"
#: lib/cannery_web/live/ammo_group_live/form_component.html.heex:73 #: lib/cannery_web/live/ammo_group_live/form_component.html.heex:73
#: lib/cannery_web/live/ammo_type_live/form_component.html.heex:156 #: lib/cannery_web/live/ammo_type_live/form_component.html.heex:156
#: lib/cannery_web/live/container_live/form_component.html.heex:50 #: lib/cannery_web/live/container_live/form_component.html.heex:50
#: lib/cannery_web/live/invite_live/form_component.html.heex:28 #: lib/cannery_web/live/invite_live/form_component.html.heex:31
#: lib/cannery_web/live/range_live/form_component.html.heex:40 #: lib/cannery_web/live/range_live/form_component.html.heex:40
#: lib/cannery_web/live/tag_live/form_component.ex:66 #: lib/cannery_web/live/tag_live/form_component.ex:91
msgid "Save" msgid "Save"
msgstr "Speichern" msgstr "Speichern"
@ -153,7 +149,7 @@ msgid "Send instructions to reset password"
msgstr "Anleitung zum Passwort zurücksetzen zusenden" msgstr "Anleitung zum Passwort zurücksetzen zusenden"
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
#: lib/cannery_web/live/container_live/show.html.heex:53 #: lib/cannery_web/live/container_live/show.html.heex:65
msgid "Why not add one?" msgid "Why not add one?"
msgstr "Warum fügen Sie keine hinzu?" msgstr "Warum fügen Sie keine hinzu?"
@ -173,17 +169,12 @@ 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?"
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
#: lib/cannery_web/live/ammo_group_live/index.ex:144 #: lib/cannery_web/live/ammo_group_live/index.ex:151
#: lib/cannery_web/live/ammo_group_live/show.html.heex:91 #: lib/cannery_web/live/ammo_group_live/show.html.heex:91
#: lib/cannery_web/live/range_live/index.html.heex:36 #: lib/cannery_web/live/range_live/index.html.heex:36
msgid "Record shots" msgid "Record shots"
msgstr "Schüsse dokumentieren" msgstr "Schüsse dokumentieren"
#, elixir-autogen, elixir-format
#: lib/cannery_web/live/ammo_group_live/show.html.heex:55
msgid "Ammo Details"
msgstr "Munitionsdetails"
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
#: lib/cannery_web/components/move_ammo_group_component.ex:89 #: lib/cannery_web/components/move_ammo_group_component.ex:89
msgid "Add another container!" msgid "Add another container!"
@ -205,8 +196,7 @@ msgid "Copy to clipboard"
msgstr "In die Zwischenablage kopieren" msgstr "In die Zwischenablage kopieren"
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
#: lib/cannery_web/live/ammo_group_live/index.html.heex:18 #: lib/cannery_web/live/ammo_group_live/index.html.heex:20
#: lib/cannery_web/live/ammo_group_live/index.html.heex:36
msgid "add a container first" msgid "add a container first"
msgstr "Zuerst einen Behälter hinzufügen" msgstr "Zuerst einen Behälter hinzufügen"
@ -224,3 +214,13 @@ msgstr "Sprache wechseln"
#: lib/cannery_web/templates/user_settings/edit.html.heex:134 #: lib/cannery_web/templates/user_settings/edit.html.heex:134
msgid "Change language" msgid "Change language"
msgstr "Sprache wechseln" msgstr "Sprache wechseln"
#, elixir-autogen, elixir-format
#: lib/cannery_web/live/ammo_group_live/show.html.heex:55
msgid "View in Catalog"
msgstr ""
#, elixir-autogen, elixir-format
#: lib/cannery_web/live/ammo_group_live/index.html.heex:31
msgid "add an ammo type first"
msgstr ""

View File

@ -24,14 +24,14 @@ msgstr ""
## 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.
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
#: lib/cannery_web/live/home_live.ex:56 #: lib/cannery_web/live/home_live.ex:64
msgid "%{name} lets you easily keep an eye on your ammo levels before and after range day" msgid "%{name} 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"
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
#: lib/cannery_web/live/home_live.ex:78 #: lib/cannery_web/live/home_live.ex:86
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"
@ -41,12 +41,12 @@ msgid "Admins"
msgstr "Admins" msgstr "Admins"
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
#: lib/cannery_web/live/home_live.ex:92 #: lib/cannery_web/live/home_live.ex:100
msgid "Admins:" msgid "Admins:"
msgstr "Admins:" msgstr "Admins:"
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
#: lib/cannery_web/components/topbar.ex:50 #: lib/cannery_web/components/topbar.ex:62
#: lib/cannery_web/live/ammo_group_live/index.html.heex:3 #: lib/cannery_web/live/ammo_group_live/index.html.heex:3
#: lib/cannery_web/live/range_live/index.ex:80 #: lib/cannery_web/live/range_live/index.ex:80
msgid "Ammo" msgid "Ammo"
@ -54,7 +54,7 @@ msgstr "Munition"
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
#: lib/cannery_web/live/ammo_group_live/form_component.html.heex:21 #: lib/cannery_web/live/ammo_group_live/form_component.html.heex:21
#: lib/cannery_web/live/ammo_group_live/index.ex:80 #: lib/cannery_web/live/ammo_group_live/index.ex:81
msgid "Ammo type" msgid "Ammo type"
msgstr "Munitionsarten" msgstr "Munitionsarten"
@ -65,7 +65,7 @@ msgid "Average Price paid"
msgstr "Durchschnittlicher Kaufpreis" msgstr "Durchschnittlicher Kaufpreis"
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
#: lib/cannery_web/live/tag_live/form_component.ex:54 #: lib/cannery_web/live/tag_live/form_component.ex:79
msgid "Background color" msgid "Background color"
msgstr "Hintergrundfarbe" msgstr "Hintergrundfarbe"
@ -119,12 +119,12 @@ msgstr "Gehäusematerial"
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
#: lib/cannery_web/components/move_ammo_group_component.ex:67 #: lib/cannery_web/components/move_ammo_group_component.ex:67
#: lib/cannery_web/live/ammo_group_live/form_component.html.heex:48 #: lib/cannery_web/live/ammo_group_live/form_component.html.heex:48
#: lib/cannery_web/live/ammo_group_live/index.ex:85 #: lib/cannery_web/live/ammo_group_live/index.ex:86
msgid "Container" msgid "Container"
msgstr "Behälter" msgstr "Behälter"
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
#: lib/cannery_web/components/topbar.ex:44 #: lib/cannery_web/components/topbar.ex:50
#: lib/cannery_web/live/container_live/index.ex:36 #: lib/cannery_web/live/container_live/index.ex:36
#: lib/cannery_web/live/container_live/index.html.heex:3 #: lib/cannery_web/live/container_live/index.html.heex:3
msgid "Containers" msgid "Containers"
@ -139,7 +139,7 @@ msgstr "Korrosiv"
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
#: lib/cannery_web/live/ammo_group_live/form_component.html.heex:27 #: lib/cannery_web/live/ammo_group_live/form_component.html.heex:27
#: lib/cannery_web/live/ammo_group_live/index.ex:81 #: lib/cannery_web/live/ammo_group_live/index.ex:82
msgid "Count" msgid "Count"
msgstr "Anzahl" msgstr "Anzahl"
@ -167,13 +167,12 @@ msgid "Disable"
msgstr "Deaktivieren" msgstr "Deaktivieren"
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
#: lib/cannery_web/live/home_live.ex:53 #: lib/cannery_web/live/home_live.ex:61
msgid "Easy to Use:" msgid "Easy to Use:"
msgstr "Einfache Anwendung:" msgstr "Einfache Anwendung:"
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
#: 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/show.ex:40
msgid "Edit Ammo group" msgid "Edit Ammo group"
msgstr "Munitionsgruppe bearbeiten" msgstr "Munitionsgruppe bearbeiten"
@ -223,7 +222,7 @@ msgid "Incendiary"
msgstr "Brandmunition" msgstr "Brandmunition"
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
#: lib/cannery_web/live/home_live.ex:87 #: lib/cannery_web/live/home_live.ex:95
msgid "Instance Information" msgid "Instance Information"
msgstr "Instanzinformationen" msgstr "Instanzinformationen"
@ -233,12 +232,12 @@ msgid "Invite Disabled"
msgstr "Einladung deaktiviert" msgstr "Einladung deaktiviert"
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
#: lib/cannery_web/live/home_live.ex:118 #: lib/cannery_web/live/home_live.ex:126
msgid "Invite Only" msgid "Invite Only"
msgstr "Nur mit Einladung" msgstr "Nur mit Einladung"
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
#: lib/cannery_web/components/topbar.ex:69 #: lib/cannery_web/components/topbar.ex:75
#: lib/cannery_web/live/invite_live/index.ex:41 #: 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
msgid "Invites" msgid "Invites"
@ -266,11 +265,6 @@ msgstr "Standort:"
msgid "Magazine, Clip, Ammo Box, etc" msgid "Magazine, Clip, Ammo Box, etc"
msgstr "Magazin, Ladestreifen, Munitionskiste usw." msgstr "Magazin, Ladestreifen, Munitionskiste usw."
#, elixir-autogen, elixir-format
#: lib/cannery_web/components/topbar.ex:56
msgid "Manage"
msgstr "Verwalten"
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
#: lib/cannery_web/live/ammo_type_live/form_component.html.heex:148 #: lib/cannery_web/live/ammo_type_live/form_component.html.heex:148
#: lib/cannery_web/live/ammo_type_live/index.ex:73 #: lib/cannery_web/live/ammo_type_live/index.ex:73
@ -293,7 +287,7 @@ msgstr "Meine coole Munitionskiste"
#: lib/cannery_web/live/ammo_type_live/index.ex:51 #: lib/cannery_web/live/ammo_type_live/index.ex:51
#: lib/cannery_web/live/container_live/form_component.html.heex:20 #: lib/cannery_web/live/container_live/form_component.html.heex:20
#: lib/cannery_web/live/invite_live/form_component.html.heex:20 #: lib/cannery_web/live/invite_live/form_component.html.heex:20
#: lib/cannery_web/live/tag_live/form_component.ex:50 #: lib/cannery_web/live/tag_live/form_component.ex:75
msgid "Name" msgid "Name"
msgstr "Name" msgstr "Name"
@ -332,11 +326,6 @@ msgstr "Keine Munitionsarten"
msgid "No ammo for this type" msgid "No ammo for this type"
msgstr "Keine Munition dieser Art" msgstr "Keine Munition dieser Art"
#, elixir-autogen, elixir-format
#: lib/cannery_web/live/container_live/show.html.heex:78
msgid "No ammo groups in this container"
msgstr "Keine Munitionsgruppe in diesem Behälter"
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
#: lib/cannery_web/live/container_live/index.html.heex:8 #: lib/cannery_web/live/container_live/index.html.heex:8
msgid "No containers" msgid "No containers"
@ -382,7 +371,7 @@ msgstr "Druck"
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
#: lib/cannery_web/live/ammo_group_live/form_component.html.heex:34 #: lib/cannery_web/live/ammo_group_live/form_component.html.heex:34
#: lib/cannery_web/live/ammo_group_live/index.ex:82 #: lib/cannery_web/live/ammo_group_live/index.ex:83
msgid "Price paid" msgid "Price paid"
msgstr "Kaufpreis" msgstr "Kaufpreis"
@ -399,17 +388,17 @@ msgid "Primer type"
msgstr "Zündertyp" msgstr "Zündertyp"
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
#: lib/cannery_web/live/home_live.ex:117 #: lib/cannery_web/live/home_live.ex:125
msgid "Public Signups" msgid "Public Signups"
msgstr "Öffentliche Registrierung" msgstr "Öffentliche Registrierung"
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
#: lib/cannery_web/live/home_live.ex:65 #: lib/cannery_web/live/home_live.ex:73
msgid "Secure:" msgid "Secure:"
msgstr "Sicher:" msgstr "Sicher:"
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
#: lib/cannery_web/live/home_live.ex:68 #: lib/cannery_web/live/home_live.ex:76
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 ""
"Hosten Sie Ihre eigene Instanz oder verwenden Sie eine Instanz, der Sie " "Hosten Sie Ihre eigene Instanz oder verwenden Sie eine Instanz, der Sie "
@ -426,18 +415,13 @@ msgstr "Unbegrenzt setzen"
msgid "Settings" msgid "Settings"
msgstr "Einstellungen" msgstr "Einstellungen"
#, elixir-autogen, elixir-format
#: lib/cannery_web/live/ammo_group_live/show.ex:39
msgid "Show Ammo group"
msgstr "Munitionsgruppen anzeigen"
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
#: lib/cannery_web/live/ammo_type_live/show.ex:44 #: lib/cannery_web/live/ammo_type_live/show.ex:44
msgid "Show Ammo type" msgid "Show Ammo type"
msgstr "Zeige Munitionsarten" msgstr "Zeige Munitionsarten"
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
#: lib/cannery_web/live/home_live.ex:75 #: lib/cannery_web/live/home_live.ex:83
msgid "Simple:" msgid "Simple:"
msgstr "Einfach:" msgstr "Einfach:"
@ -452,7 +436,7 @@ msgid "Stored in"
msgstr "Gelagert in" msgstr "Gelagert in"
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
#: lib/cannery_web/components/topbar.ex:38 #: lib/cannery_web/components/topbar.ex:44
#: lib/cannery_web/live/tag_live/index.ex:32 #: lib/cannery_web/live/tag_live/index.ex:32
#: lib/cannery_web/live/tag_live/index.html.heex:3 #: lib/cannery_web/live/tag_live/index.html.heex:3
msgid "Tags" msgid "Tags"
@ -464,20 +448,15 @@ msgid "Tags can be added to your containers to help you organize"
msgstr "Tags können zur besseren Ordnung einem Behälter hinzugefügt werden" msgstr "Tags können zur besseren Ordnung einem Behälter hinzugefügt werden"
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
#: lib/cannery_web/live/tag_live/form_component.ex:60 #: lib/cannery_web/live/tag_live/form_component.ex:85
msgid "Text color" msgid "Text color"
msgstr "Textfarbe" msgstr "Textfarbe"
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
#: lib/cannery_web/live/home_live.ex:44 #: lib/cannery_web/live/home_live.ex:52
msgid "The self-hosted firearm tracker website" msgid "The self-hosted firearm tracker website"
msgstr "Die selbst-gehostete Website zur Verwaltung von Schusswaffen" msgstr "Die selbst-gehostete Website zur Verwaltung von Schusswaffen"
#, elixir-autogen, elixir-format
#: lib/cannery_web/live/ammo_group_live/show.html.heex:108
msgid "This ammo group is not in a container"
msgstr "Diese Munitionsgruppe ist nicht in einem Behälter"
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
#: lib/cannery_web/live/ammo_type_live/form_component.html.heex:132 #: lib/cannery_web/live/ammo_type_live/form_component.html.heex:132
#: lib/cannery_web/live/ammo_type_live/index.ex:69 #: lib/cannery_web/live/ammo_type_live/index.ex:69
@ -513,23 +492,23 @@ msgid "Uses left"
msgstr "Verbleibende Nutzung" msgstr "Verbleibende Nutzung"
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
#: lib/cannery_web/live/home_live.ex:40 #: lib/cannery_web/live/home_live.ex:48
msgid "Welcome to %{name}" msgid "Welcome to %{name}"
msgstr "Willkommen %{name}" msgstr "Willkommen %{name}"
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
#: lib/cannery_web/live/home_live.ex:69 #: lib/cannery_web/live/home_live.ex:77
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"
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
#: lib/cannery_web/live/container_live/show.html.heex:49 #: lib/cannery_web/live/container_live/show.html.heex:61
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"
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
#: lib/cannery_web/components/topbar.ex:62 #: lib/cannery_web/components/topbar.ex:68
#: lib/cannery_web/live/ammo_group_live/index.ex:84 #: lib/cannery_web/live/ammo_group_live/index.ex:85
msgid "Range" msgid "Range"
msgstr "Schießplatz" msgstr "Schießplatz"
@ -572,11 +551,6 @@ msgstr "Für Schießplatz deselektieren"
msgid "Record shots" msgid "Record shots"
msgstr "Schüsse dokumentieren" msgstr "Schüsse dokumentieren"
#, elixir-autogen, elixir-format
#: lib/cannery_web/live/ammo_type_live/index.html.heex:3
msgid "Ammo Types"
msgstr "Munitionsarten"
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
#: lib/cannery_web/live/ammo_group_live/index.ex:49 #: lib/cannery_web/live/ammo_group_live/index.ex:49
msgid "Ammo groups" msgid "Ammo groups"
@ -622,7 +596,6 @@ msgstr "Schießkladde"
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
#: lib/cannery_web/live/ammo_group_live/index.ex:32 #: lib/cannery_web/live/ammo_group_live/index.ex:32
#: lib/cannery_web/live/ammo_group_live/show.ex:38
msgid "Move Ammo group" msgid "Move Ammo group"
msgstr "Munitionsgruppe verschieben" msgstr "Munitionsgruppe verschieben"
@ -643,7 +616,7 @@ msgstr "Schießkladde"
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
#: lib/cannery_web/components/ammo_group_card.ex:48 #: lib/cannery_web/components/ammo_group_card.ex:48
#: lib/cannery_web/live/ammo_group_live/index.ex:118 #: lib/cannery_web/live/ammo_group_live/index.ex:125
#: 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:44
#: lib/cannery_web/live/ammo_type_live/index.ex:114 #: lib/cannery_web/live/ammo_type_live/index.ex:114
@ -708,12 +681,12 @@ msgid "New password"
msgstr "Neues Passwort" msgstr "Neues Passwort"
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
#: lib/cannery_web/live/ammo_group_live/index.ex:141 #: lib/cannery_web/live/ammo_group_live/index.ex:148
msgid "Stage" msgid "Stage"
msgstr "Markiert" msgstr "Markiert"
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
#: lib/cannery_web/live/ammo_group_live/index.ex:141 #: lib/cannery_web/live/ammo_group_live/index.ex:148
msgid "Unstage" msgid "Unstage"
msgstr "Demarkiert" msgstr "Demarkiert"
@ -747,7 +720,8 @@ msgid "Edit %{name} tags"
msgstr "Editiere %{name} Tags" msgstr "Editiere %{name} Tags"
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
#: lib/cannery_web/components/container_card.ex:50 #: lib/cannery_web/components/container_card.ex:55
#: lib/cannery_web/live/container_live/show.html.heex:32
msgid "Rounds:" msgid "Rounds:"
msgstr "Patronen:" msgstr "Patronen:"
@ -763,7 +737,7 @@ msgid "No cost information"
msgstr "Keine Preisinformationen" msgstr "Keine Preisinformationen"
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
#: lib/cannery_web/live/ammo_group_live/index.ex:83 #: lib/cannery_web/live/ammo_group_live/index.ex:84
msgid "% left" msgid "% left"
msgstr "% verbleibend" msgstr "% verbleibend"
@ -849,7 +823,7 @@ msgid "Ammo types"
msgstr "Munitionsart" msgstr "Munitionsart"
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
#: lib/cannery_web/live/ammo_group_live/index.ex:86 #: lib/cannery_web/live/ammo_group_live/index.ex:87
msgid "Added on" msgid "Added on"
msgstr "Hinzugefügt am" msgstr "Hinzugefügt am"
@ -889,21 +863,74 @@ msgid "Language"
msgstr "Sprache" msgstr "Sprache"
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
#: lib/cannery_web/live/home_live.ex:139 #: lib/cannery_web/live/home_live.ex:147
msgid "Get involved!" msgid "Get involved!"
msgstr "Mach mit!" msgstr "Mach mit!"
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
#: lib/cannery_web/live/home_live.ex:156 #: lib/cannery_web/live/home_live.ex:164
msgid "Help translate" msgid "Help translate"
msgstr "Hilf beim Übersetzen" msgstr "Hilf beim Übersetzen"
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
#: lib/cannery_web/live/home_live.ex:165 #: lib/cannery_web/live/home_live.ex:173
msgid "Report bugs or request features" msgid "Report bugs or request features"
msgstr "Sende Bugs oder Erweiterungsvorschläge" msgstr "Sende Bugs oder Erweiterungsvorschläge"
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
#: lib/cannery_web/live/home_live.ex:147 #: lib/cannery_web/live/home_live.ex:155
msgid "View the source code" msgid "View the source code"
msgstr "Quellcode ansehen" msgstr "Quellcode ansehen"
#, elixir-autogen, elixir-format
#: lib/cannery_web/components/topbar.ex:56
#: lib/cannery_web/live/ammo_type_live/index.html.heex:3
msgid "Catalog"
msgstr ""
#, elixir-autogen, elixir-format, fuzzy
#: lib/cannery_web/live/ammo_group_live/show.ex:40
msgid "Edit Ammo"
msgstr "Munitionstyp bearbeiten"
#, elixir-autogen, elixir-format, fuzzy
#: lib/cannery_web/live/ammo_group_live/show.ex:38
msgid "Move Ammo"
msgstr "Munition verschieben"
#, elixir-autogen, elixir-format, fuzzy
#: lib/cannery_web/live/container_live/show.html.heex:90
msgid "No ammo in this container"
msgstr "Keine Munitionsgruppe in diesem Behälter"
#, elixir-autogen, elixir-format, fuzzy
#: lib/cannery_web/live/ammo_group_live/show.ex:39
msgid "Show Ammo"
msgstr "Zeige Munitionsarten"
#, elixir-autogen, elixir-format, fuzzy
#: lib/cannery_web/live/ammo_group_live/show.html.heex:108
msgid "This ammo is not in a container"
msgstr "Diese Munitionsgruppe ist nicht in einem Behälter"
#, elixir-autogen, elixir-format
#: lib/cannery_web/components/container_card.ex:50
#: lib/cannery_web/live/container_live/show.html.heex:27
msgid "Packs:"
msgstr ""
#, elixir-autogen, elixir-format
#: lib/cannery_web/components/topbar.ex:24
#: lib/cannery_web/live/home_live.ex:42
msgid "Cannery logo"
msgstr ""
#, elixir-autogen, elixir-format
#: lib/cannery_web/live/home_live.ex:44
msgid "isn't he cute >:3"
msgstr ""
#, elixir-autogen, elixir-format
#: lib/cannery_web/live/invite_live/form_component.html.heex:28
msgid "Leave \"Uses left\" blank to make invite unlimited"
msgstr ""

View File

@ -24,7 +24,7 @@ msgstr ""
## 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.
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
#: lib/cannery/containers.ex:122 #: lib/cannery/containers.ex:140
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"
@ -152,13 +152,13 @@ msgid "Tag could not be added"
msgstr "Tag konnte nicht hinzugefügt werden" msgstr "Tag konnte nicht hinzugefügt werden"
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
#: lib/cannery/activity_log.ex:125 #: lib/cannery/activity_log/shot_group.ex:115
msgid "Count must be at least 1" msgid "Count must be at least 1"
msgstr "Anzahl muss mindestens 1 sein" msgstr "Anzahl muss mindestens 1 sein"
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
#: lib/cannery/activity_log.ex:73 #: lib/cannery/activity_log/shot_group.ex:74
#: lib/cannery/activity_log.ex:120 #: lib/cannery/activity_log/shot_group.ex:111
msgid "Count must be less than %{count}" msgid "Count must be less than %{count}"
msgstr "Anzahl muss weniger als %{count} betragen" msgstr "Anzahl muss weniger als %{count} betragen"
@ -176,13 +176,28 @@ msgid "Tag could not be removed"
msgstr "Tag konnte nicht gelöscht werden" msgstr "Tag konnte nicht gelöscht werden"
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
#: lib/cannery_web/live/ammo_group_live/form_component.ex:126 #: lib/cannery_web/live/ammo_group_live/form_component.ex:156
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"
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
#: lib/cannery_web/live/ammo_group_live/form_component.ex:111 #: lib/cannery_web/live/ammo_group_live/form_component.ex:141
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}"
#, elixir-autogen, elixir-format
#: lib/cannery/ammo.ex:407
msgid "Invalid multiplier"
msgstr ""
#, elixir-autogen, elixir-format
#: lib/cannery/ammo/ammo_group.ex:84
msgid "Please select an ammo type and container"
msgstr ""
#, elixir-autogen, elixir-format
#: lib/cannery/activity_log/shot_group.ex:69
msgid "Please select a valid user and ammo group"
msgstr ""

View File

@ -24,10 +24,10 @@ msgstr ""
## 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.
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
#: lib/cannery_web/live/ammo_type_live/form_component.ex:64 #: lib/cannery_web/live/ammo_type_live/form_component.ex:85
#: lib/cannery_web/live/container_live/form_component.ex:65 #: lib/cannery_web/live/container_live/form_component.ex:85
#: lib/cannery_web/live/invite_live/form_component.ex:59 #: lib/cannery_web/live/invite_live/form_component.ex:80
#: lib/cannery_web/live/tag_live/form_component.ex:101 #: lib/cannery_web/live/tag_live/form_component.ex:126
msgid "%{name} created successfully" msgid "%{name} created successfully"
msgstr "%{name} erfolgreich erstellt" msgstr "%{name} erfolgreich erstellt"
@ -62,10 +62,10 @@ msgid "%{name} updated succesfully"
msgstr "%{name} erfolgreich aktualisiert" msgstr "%{name} erfolgreich aktualisiert"
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
#: lib/cannery_web/live/ammo_type_live/form_component.ex:46 #: lib/cannery_web/live/ammo_type_live/form_component.ex:67
#: lib/cannery_web/live/container_live/form_component.ex:47 #: lib/cannery_web/live/container_live/form_component.ex:67
#: lib/cannery_web/live/invite_live/form_component.ex:41 #: lib/cannery_web/live/invite_live/form_component.ex:62
#: lib/cannery_web/live/tag_live/form_component.ex:83 #: lib/cannery_web/live/tag_live/form_component.ex:108
msgid "%{name} updated successfully" msgid "%{name} updated successfully"
msgstr "%{name} erfolgreich aktualisiert" msgstr "%{name} erfolgreich aktualisiert"
@ -76,15 +76,9 @@ msgstr "Eine Mail zum Bestätigen ihre Mailadresse wurde Ihnen zugesandt."
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
#: lib/cannery_web/live/ammo_group_live/index.ex:56 #: lib/cannery_web/live/ammo_group_live/index.ex:56
#: lib/cannery_web/live/ammo_group_live/show.ex:50
msgid "Ammo group deleted succesfully" msgid "Ammo group deleted succesfully"
msgstr "Munitionsgruppe erfolgreich gelöscht" msgstr "Munitionsgruppe erfolgreich gelöscht"
#, elixir-autogen, elixir-format
#: lib/cannery_web/live/ammo_group_live/form_component.ex:88
msgid "Ammo group updated successfully"
msgstr "Munitionsgruppe erfolgreich aktualisiert"
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
#: lib/cannery_web/live/invite_live/index.html.heex:102 #: lib/cannery_web/live/invite_live/index.html.heex:102
#: lib/cannery_web/live/invite_live/index.html.heex:131 #: lib/cannery_web/live/invite_live/index.html.heex:131
@ -94,9 +88,8 @@ msgstr ""
"zurückgenommen werden!" "zurückgenommen werden!"
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
#: lib/cannery_web/live/ammo_type_live/show.html.heex:27
#: lib/cannery_web/live/container_live/index.html.heex:46 #: lib/cannery_web/live/container_live/index.html.heex:46
#: lib/cannery_web/live/container_live/show.html.heex:37 #: lib/cannery_web/live/container_live/show.html.heex:49
#: lib/cannery_web/live/tag_live/index.html.heex:38 #: lib/cannery_web/live/tag_live/index.html.heex:38
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?"
@ -107,9 +100,8 @@ msgid "Are you sure you want to delete the invite for %{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?"
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
#: lib/cannery_web/live/ammo_group_live/index.ex:177 #: lib/cannery_web/live/ammo_group_live/index.ex:184
#: lib/cannery_web/live/ammo_group_live/show.html.heex:71 #: lib/cannery_web/live/ammo_group_live/show.html.heex:71
#: lib/cannery_web/live/ammo_type_live/index.ex:140
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?"
@ -119,7 +111,7 @@ 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?"
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
#: lib/cannery_web/components/topbar.ex:84 #: lib/cannery_web/components/topbar.ex:90
msgid "Are you sure you want to log out?" msgid "Are you sure you want to log out?"
msgstr "Wirklich ausloggen?" msgstr "Wirklich ausloggen?"
@ -168,7 +160,7 @@ 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"
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
#: lib/cannery_web/live/home_live.ex:96 #: lib/cannery_web/live/home_live.ex:104
msgid "Register to setup %{name}" msgid "Register to setup %{name}"
msgstr "Registrieren Sie sich, um %{name} zu bearbeiten" msgstr "Registrieren Sie sich, um %{name} zu bearbeiten"
@ -177,9 +169,9 @@ msgstr "Registrieren Sie sich, um %{name} zu bearbeiten"
#: lib/cannery_web/live/ammo_group_live/form_component.html.heex:74 #: lib/cannery_web/live/ammo_group_live/form_component.html.heex:74
#: lib/cannery_web/live/ammo_type_live/form_component.html.heex:157 #: lib/cannery_web/live/ammo_type_live/form_component.html.heex:157
#: lib/cannery_web/live/container_live/form_component.html.heex:52 #: lib/cannery_web/live/container_live/form_component.html.heex:52
#: lib/cannery_web/live/invite_live/form_component.html.heex:30 #: lib/cannery_web/live/invite_live/form_component.html.heex:33
#: lib/cannery_web/live/range_live/form_component.html.heex:42 #: lib/cannery_web/live/range_live/form_component.html.heex:42
#: lib/cannery_web/live/tag_live/form_component.ex:68 #: lib/cannery_web/live/tag_live/form_component.ex:93
msgid "Saving..." msgid "Saving..."
msgstr "Speichere..." msgstr "Speichere..."
@ -211,7 +203,7 @@ msgid "Adding..."
msgstr "Füge hinzu..." msgstr "Füge hinzu..."
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
#: lib/cannery_web/components/add_shot_group_component.ex:68 #: lib/cannery_web/components/add_shot_group_component.ex:56
msgid "Shots recorded successfully" msgid "Shots recorded successfully"
msgstr "Schüsse erfolgreich dokumentiert" msgstr "Schüsse erfolgreich dokumentiert"
@ -220,11 +212,6 @@ msgstr "Schüsse erfolgreich dokumentiert"
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?"
#, elixir-autogen, elixir-format
#: lib/cannery_web/live/range_live/index.ex:68
msgid "Ammo group unstaged succesfully"
msgstr "Munition erfolgreich demarkiert"
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
#: lib/cannery_web/live/ammo_group_live/show.ex:130 #: lib/cannery_web/live/ammo_group_live/show.ex:130
#: lib/cannery_web/live/range_live/index.ex:128 #: lib/cannery_web/live/range_live/index.ex:128
@ -263,8 +250,8 @@ msgid "%{name} removed successfully"
msgstr "%{name} erfolgreich entfernt" msgstr "%{name} erfolgreich entfernt"
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
#: lib/cannery_web/live/ammo_group_live/index.html.heex:15 #: lib/cannery_web/live/ammo_group_live/index.html.heex:17
#: lib/cannery_web/live/ammo_group_live/index.html.heex:33 #: lib/cannery_web/live/ammo_group_live/index.html.heex:28
msgid "You'll need to" msgid "You'll need to"
msgstr "Sie müssen" msgstr "Sie müssen"
@ -273,13 +260,6 @@ msgstr "Sie müssen"
msgid "Creating..." msgid "Creating..."
msgstr "Erstellen..." msgstr "Erstellen..."
#, elixir-autogen, elixir-format
#: lib/cannery_web/live/ammo_group_live/form_component.ex:147
msgid "Ammo group created successfully"
msgid_plural "Ammo groups created successfully"
msgstr[0] "Munitionsgruppe erfolgreich erstellt"
msgstr[1] "Munitionsgruppen erfolgreich erstellt"
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
#: lib/cannery_web/templates/user_settings/edit.html.heex:136 #: lib/cannery_web/templates/user_settings/edit.html.heex:136
msgid "Are you sure you want to change your language?" msgid "Are you sure you want to change your language?"
@ -289,3 +269,31 @@ msgstr "Möchten Sie die Sprache wechseln?"
#: lib/cannery_web/controllers/user_settings_controller.ex:65 #: lib/cannery_web/controllers/user_settings_controller.ex:65
msgid "Language updated successfully." msgid "Language updated successfully."
msgstr "Spracheinstellung gespeichert." msgstr "Spracheinstellung gespeichert."
#, elixir-autogen, elixir-format, fuzzy
#: lib/cannery_web/live/ammo_group_live/show.ex:50
msgid "Ammo deleted succesfully"
msgstr "Munitionsgruppe erfolgreich gelöscht"
#, elixir-autogen, elixir-format, fuzzy
#: lib/cannery_web/live/range_live/index.ex:68
msgid "Ammo unstaged succesfully"
msgstr "Munition erfolgreich demarkiert"
#, elixir-autogen, elixir-format, fuzzy
#: lib/cannery_web/live/ammo_group_live/form_component.ex:118
msgid "Ammo updated successfully"
msgstr "Munitionsgruppe erfolgreich aktualisiert"
#, elixir-autogen, elixir-format, fuzzy
#: lib/cannery_web/live/ammo_group_live/form_component.ex:177
msgid "Ammo added successfully"
msgid_plural "Ammo added successfully"
msgstr[0] "Munitionsgruppe erfolgreich aktualisiert"
msgstr[1] "Munitionsgruppe erfolgreich aktualisiert"
#, elixir-autogen, elixir-format, fuzzy
#: lib/cannery_web/live/ammo_type_live/index.ex:140
#: lib/cannery_web/live/ammo_type_live/show.html.heex:27
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?"

View File

@ -11,12 +11,12 @@ msgid ""
msgstr "" msgstr ""
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
#: lib/cannery_web/live/home_live.ex:56 #: lib/cannery_web/live/home_live.ex:64
msgid "%{name} lets you easily keep an eye on your ammo levels before and after range day" msgid "%{name} lets you easily keep an eye on your ammo levels before and after range day"
msgstr "" msgstr ""
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
#: lib/cannery_web/live/home_live.ex:78 #: lib/cannery_web/live/home_live.ex:86
msgid "Access from any internet-capable device" msgid "Access from any internet-capable device"
msgstr "" msgstr ""
@ -26,12 +26,12 @@ msgid "Admins"
msgstr "" msgstr ""
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
#: lib/cannery_web/live/home_live.ex:92 #: lib/cannery_web/live/home_live.ex:100
msgid "Admins:" msgid "Admins:"
msgstr "" msgstr ""
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
#: lib/cannery_web/components/topbar.ex:50 #: lib/cannery_web/components/topbar.ex:62
#: lib/cannery_web/live/ammo_group_live/index.html.heex:3 #: lib/cannery_web/live/ammo_group_live/index.html.heex:3
#: lib/cannery_web/live/range_live/index.ex:80 #: lib/cannery_web/live/range_live/index.ex:80
msgid "Ammo" msgid "Ammo"
@ -39,7 +39,7 @@ msgstr ""
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
#: lib/cannery_web/live/ammo_group_live/form_component.html.heex:21 #: lib/cannery_web/live/ammo_group_live/form_component.html.heex:21
#: lib/cannery_web/live/ammo_group_live/index.ex:80 #: lib/cannery_web/live/ammo_group_live/index.ex:81
msgid "Ammo type" msgid "Ammo type"
msgstr "" msgstr ""
@ -50,7 +50,7 @@ msgid "Average Price paid"
msgstr "" msgstr ""
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
#: lib/cannery_web/live/tag_live/form_component.ex:54 #: lib/cannery_web/live/tag_live/form_component.ex:79
msgid "Background color" msgid "Background color"
msgstr "" msgstr ""
@ -104,12 +104,12 @@ msgstr ""
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
#: lib/cannery_web/components/move_ammo_group_component.ex:67 #: lib/cannery_web/components/move_ammo_group_component.ex:67
#: lib/cannery_web/live/ammo_group_live/form_component.html.heex:48 #: lib/cannery_web/live/ammo_group_live/form_component.html.heex:48
#: lib/cannery_web/live/ammo_group_live/index.ex:85 #: lib/cannery_web/live/ammo_group_live/index.ex:86
msgid "Container" msgid "Container"
msgstr "" msgstr ""
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
#: lib/cannery_web/components/topbar.ex:44 #: lib/cannery_web/components/topbar.ex:50
#: lib/cannery_web/live/container_live/index.ex:36 #: lib/cannery_web/live/container_live/index.ex:36
#: lib/cannery_web/live/container_live/index.html.heex:3 #: lib/cannery_web/live/container_live/index.html.heex:3
msgid "Containers" msgid "Containers"
@ -124,7 +124,7 @@ msgstr ""
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
#: lib/cannery_web/live/ammo_group_live/form_component.html.heex:27 #: lib/cannery_web/live/ammo_group_live/form_component.html.heex:27
#: lib/cannery_web/live/ammo_group_live/index.ex:81 #: lib/cannery_web/live/ammo_group_live/index.ex:82
msgid "Count" msgid "Count"
msgstr "" msgstr ""
@ -152,13 +152,12 @@ msgid "Disable"
msgstr "" msgstr ""
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
#: lib/cannery_web/live/home_live.ex:53 #: lib/cannery_web/live/home_live.ex:61
msgid "Easy to Use:" msgid "Easy to Use:"
msgstr "" msgstr ""
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
#: 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/show.ex:40
msgid "Edit Ammo group" msgid "Edit Ammo group"
msgstr "" msgstr ""
@ -208,7 +207,7 @@ msgid "Incendiary"
msgstr "" msgstr ""
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
#: lib/cannery_web/live/home_live.ex:87 #: lib/cannery_web/live/home_live.ex:95
msgid "Instance Information" msgid "Instance Information"
msgstr "" msgstr ""
@ -218,12 +217,12 @@ msgid "Invite Disabled"
msgstr "" msgstr ""
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
#: lib/cannery_web/live/home_live.ex:118 #: lib/cannery_web/live/home_live.ex:126
msgid "Invite Only" msgid "Invite Only"
msgstr "" msgstr ""
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
#: lib/cannery_web/components/topbar.ex:69 #: lib/cannery_web/components/topbar.ex:75
#: lib/cannery_web/live/invite_live/index.ex:41 #: 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
msgid "Invites" msgid "Invites"
@ -251,11 +250,6 @@ msgstr ""
msgid "Magazine, Clip, Ammo Box, etc" msgid "Magazine, Clip, Ammo Box, etc"
msgstr "" msgstr ""
#, elixir-autogen, elixir-format
#: lib/cannery_web/components/topbar.ex:56
msgid "Manage"
msgstr ""
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
#: lib/cannery_web/live/ammo_type_live/form_component.html.heex:148 #: lib/cannery_web/live/ammo_type_live/form_component.html.heex:148
#: lib/cannery_web/live/ammo_type_live/index.ex:73 #: lib/cannery_web/live/ammo_type_live/index.ex:73
@ -278,7 +272,7 @@ msgstr ""
#: lib/cannery_web/live/ammo_type_live/index.ex:51 #: lib/cannery_web/live/ammo_type_live/index.ex:51
#: lib/cannery_web/live/container_live/form_component.html.heex:20 #: lib/cannery_web/live/container_live/form_component.html.heex:20
#: lib/cannery_web/live/invite_live/form_component.html.heex:20 #: lib/cannery_web/live/invite_live/form_component.html.heex:20
#: lib/cannery_web/live/tag_live/form_component.ex:50 #: lib/cannery_web/live/tag_live/form_component.ex:75
msgid "Name" msgid "Name"
msgstr "" msgstr ""
@ -317,11 +311,6 @@ msgstr ""
msgid "No ammo for this type" msgid "No ammo for this type"
msgstr "" msgstr ""
#, elixir-autogen, elixir-format
#: lib/cannery_web/live/container_live/show.html.heex:78
msgid "No ammo groups in this container"
msgstr ""
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
#: lib/cannery_web/live/container_live/index.html.heex:8 #: lib/cannery_web/live/container_live/index.html.heex:8
msgid "No containers" msgid "No containers"
@ -367,7 +356,7 @@ msgstr ""
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
#: lib/cannery_web/live/ammo_group_live/form_component.html.heex:34 #: lib/cannery_web/live/ammo_group_live/form_component.html.heex:34
#: lib/cannery_web/live/ammo_group_live/index.ex:82 #: lib/cannery_web/live/ammo_group_live/index.ex:83
msgid "Price paid" msgid "Price paid"
msgstr "" msgstr ""
@ -384,17 +373,17 @@ msgid "Primer type"
msgstr "" msgstr ""
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
#: lib/cannery_web/live/home_live.ex:117 #: lib/cannery_web/live/home_live.ex:125
msgid "Public Signups" msgid "Public Signups"
msgstr "" msgstr ""
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
#: lib/cannery_web/live/home_live.ex:65 #: lib/cannery_web/live/home_live.ex:73
msgid "Secure:" msgid "Secure:"
msgstr "" msgstr ""
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
#: lib/cannery_web/live/home_live.ex:68 #: lib/cannery_web/live/home_live.ex:76
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 ""
@ -409,18 +398,13 @@ msgstr ""
msgid "Settings" msgid "Settings"
msgstr "" msgstr ""
#, elixir-autogen, elixir-format
#: lib/cannery_web/live/ammo_group_live/show.ex:39
msgid "Show Ammo group"
msgstr ""
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
#: lib/cannery_web/live/ammo_type_live/show.ex:44 #: lib/cannery_web/live/ammo_type_live/show.ex:44
msgid "Show Ammo type" msgid "Show Ammo type"
msgstr "" msgstr ""
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
#: lib/cannery_web/live/home_live.ex:75 #: lib/cannery_web/live/home_live.ex:83
msgid "Simple:" msgid "Simple:"
msgstr "" msgstr ""
@ -435,7 +419,7 @@ msgid "Stored in"
msgstr "" msgstr ""
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
#: lib/cannery_web/components/topbar.ex:38 #: lib/cannery_web/components/topbar.ex:44
#: lib/cannery_web/live/tag_live/index.ex:32 #: lib/cannery_web/live/tag_live/index.ex:32
#: lib/cannery_web/live/tag_live/index.html.heex:3 #: lib/cannery_web/live/tag_live/index.html.heex:3
msgid "Tags" msgid "Tags"
@ -447,20 +431,15 @@ msgid "Tags can be added to your containers to help you organize"
msgstr "" msgstr ""
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
#: lib/cannery_web/live/tag_live/form_component.ex:60 #: lib/cannery_web/live/tag_live/form_component.ex:85
msgid "Text color" msgid "Text color"
msgstr "" msgstr ""
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
#: lib/cannery_web/live/home_live.ex:44 #: lib/cannery_web/live/home_live.ex:52
msgid "The self-hosted firearm tracker website" msgid "The self-hosted firearm tracker website"
msgstr "" msgstr ""
#, elixir-autogen, elixir-format
#: lib/cannery_web/live/ammo_group_live/show.html.heex:108
msgid "This ammo group is not in a container"
msgstr ""
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
#: lib/cannery_web/live/ammo_type_live/form_component.html.heex:132 #: lib/cannery_web/live/ammo_type_live/form_component.html.heex:132
#: lib/cannery_web/live/ammo_type_live/index.ex:69 #: lib/cannery_web/live/ammo_type_live/index.ex:69
@ -496,23 +475,23 @@ msgid "Uses left"
msgstr "" msgstr ""
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
#: lib/cannery_web/live/home_live.ex:40 #: lib/cannery_web/live/home_live.ex:48
msgid "Welcome to %{name}" msgid "Welcome to %{name}"
msgstr "" msgstr ""
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
#: lib/cannery_web/live/home_live.ex:69 #: lib/cannery_web/live/home_live.ex:77
msgid "Your data stays with you, period" msgid "Your data stays with you, period"
msgstr "" msgstr ""
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
#: lib/cannery_web/live/container_live/show.html.heex:49 #: lib/cannery_web/live/container_live/show.html.heex:61
msgid "No tags for this container" msgid "No tags for this container"
msgstr "" msgstr ""
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
#: lib/cannery_web/components/topbar.ex:62 #: lib/cannery_web/components/topbar.ex:68
#: lib/cannery_web/live/ammo_group_live/index.ex:84 #: lib/cannery_web/live/ammo_group_live/index.ex:85
msgid "Range" msgid "Range"
msgstr "" msgstr ""
@ -555,11 +534,6 @@ msgstr ""
msgid "Record shots" msgid "Record shots"
msgstr "" msgstr ""
#, elixir-autogen, elixir-format
#: lib/cannery_web/live/ammo_type_live/index.html.heex:3
msgid "Ammo Types"
msgstr ""
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
#: lib/cannery_web/live/ammo_group_live/index.ex:49 #: lib/cannery_web/live/ammo_group_live/index.ex:49
msgid "Ammo groups" msgid "Ammo groups"
@ -605,7 +579,6 @@ msgstr ""
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
#: lib/cannery_web/live/ammo_group_live/index.ex:32 #: lib/cannery_web/live/ammo_group_live/index.ex:32
#: lib/cannery_web/live/ammo_group_live/show.ex:38
msgid "Move Ammo group" msgid "Move Ammo group"
msgstr "" msgstr ""
@ -626,7 +599,7 @@ msgstr ""
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
#: lib/cannery_web/components/ammo_group_card.ex:48 #: lib/cannery_web/components/ammo_group_card.ex:48
#: lib/cannery_web/live/ammo_group_live/index.ex:118 #: lib/cannery_web/live/ammo_group_live/index.ex:125
#: 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:44
#: lib/cannery_web/live/ammo_type_live/index.ex:114 #: lib/cannery_web/live/ammo_type_live/index.ex:114
@ -691,12 +664,12 @@ msgid "New password"
msgstr "" msgstr ""
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
#: lib/cannery_web/live/ammo_group_live/index.ex:141 #: lib/cannery_web/live/ammo_group_live/index.ex:148
msgid "Stage" msgid "Stage"
msgstr "" msgstr ""
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
#: lib/cannery_web/live/ammo_group_live/index.ex:141 #: lib/cannery_web/live/ammo_group_live/index.ex:148
msgid "Unstage" msgid "Unstage"
msgstr "" msgstr ""
@ -730,7 +703,8 @@ msgid "Edit %{name} tags"
msgstr "" msgstr ""
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
#: lib/cannery_web/components/container_card.ex:50 #: lib/cannery_web/components/container_card.ex:55
#: lib/cannery_web/live/container_live/show.html.heex:32
msgid "Rounds:" msgid "Rounds:"
msgstr "" msgstr ""
@ -746,7 +720,7 @@ msgid "No cost information"
msgstr "" msgstr ""
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
#: lib/cannery_web/live/ammo_group_live/index.ex:83 #: lib/cannery_web/live/ammo_group_live/index.ex:84
msgid "% left" msgid "% left"
msgstr "" msgstr ""
@ -832,7 +806,7 @@ msgid "Ammo types"
msgstr "" msgstr ""
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
#: lib/cannery_web/live/ammo_group_live/index.ex:86 #: lib/cannery_web/live/ammo_group_live/index.ex:87
msgid "Added on" msgid "Added on"
msgstr "" msgstr ""
@ -872,21 +846,74 @@ msgid "Language"
msgstr "" msgstr ""
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
#: lib/cannery_web/live/home_live.ex:139 #: lib/cannery_web/live/home_live.ex:147
msgid "Get involved!" msgid "Get involved!"
msgstr "" msgstr ""
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
#: lib/cannery_web/live/home_live.ex:156 #: lib/cannery_web/live/home_live.ex:164
msgid "Help translate" msgid "Help translate"
msgstr "" msgstr ""
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
#: lib/cannery_web/live/home_live.ex:165 #: lib/cannery_web/live/home_live.ex:173
msgid "Report bugs or request features" msgid "Report bugs or request features"
msgstr "" msgstr ""
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
#: lib/cannery_web/live/home_live.ex:147 #: lib/cannery_web/live/home_live.ex:155
msgid "View the source code" msgid "View the source code"
msgstr "" msgstr ""
#, elixir-autogen, elixir-format
#: lib/cannery_web/components/topbar.ex:56
#: lib/cannery_web/live/ammo_type_live/index.html.heex:3
msgid "Catalog"
msgstr ""
#, elixir-autogen, elixir-format
#: lib/cannery_web/live/ammo_group_live/show.ex:40
msgid "Edit Ammo"
msgstr ""
#, elixir-autogen, elixir-format
#: lib/cannery_web/live/ammo_group_live/show.ex:38
msgid "Move Ammo"
msgstr ""
#, elixir-autogen, elixir-format
#: lib/cannery_web/live/container_live/show.html.heex:90
msgid "No ammo in this container"
msgstr ""
#, elixir-autogen, elixir-format
#: lib/cannery_web/live/ammo_group_live/show.ex:39
msgid "Show Ammo"
msgstr ""
#, elixir-autogen, elixir-format
#: lib/cannery_web/live/ammo_group_live/show.html.heex:108
msgid "This ammo is not in a container"
msgstr ""
#, elixir-autogen, elixir-format
#: lib/cannery_web/components/container_card.ex:50
#: lib/cannery_web/live/container_live/show.html.heex:27
msgid "Packs:"
msgstr ""
#, elixir-autogen, elixir-format
#: lib/cannery_web/components/topbar.ex:24
#: lib/cannery_web/live/home_live.ex:42
msgid "Cannery logo"
msgstr ""
#, elixir-autogen, elixir-format
#: lib/cannery_web/live/home_live.ex:44
msgid "isn't he cute >:3"
msgstr ""
#, elixir-autogen, elixir-format
#: lib/cannery_web/live/invite_live/form_component.html.heex:28
msgid "Leave \"Uses left\" blank to make invite unlimited"
msgstr ""

View File

@ -13,11 +13,12 @@ msgstr ""
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
#: lib/cannery_web/live/ammo_group_live/index.ex:44 #: lib/cannery_web/live/ammo_group_live/index.ex:44
#: lib/cannery_web/live/ammo_group_live/index.html.heex:42
msgid "Add Ammo" msgid "Add Ammo"
msgstr "" msgstr ""
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
#: lib/cannery_web/live/ammo_group_live/index.html.heex:24 #: lib/cannery_web/live/ammo_group_live/index.html.heex:37
msgid "Add your first box!" msgid "Add your first box!"
msgstr "" msgstr ""
@ -66,7 +67,7 @@ msgid "Invite someone new!"
msgstr "" msgstr ""
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
#: lib/cannery_web/components/topbar.ex:106 #: lib/cannery_web/components/topbar.ex:112
#: lib/cannery_web/templates/user_confirmation/new.html.heex:30 #: lib/cannery_web/templates/user_confirmation/new.html.heex:30
#: lib/cannery_web/templates/user_registration/new.html.heex:48 #: lib/cannery_web/templates/user_registration/new.html.heex:48
#: lib/cannery_web/templates/user_reset_password/edit.html.heex:48 #: lib/cannery_web/templates/user_reset_password/edit.html.heex:48
@ -81,11 +82,6 @@ msgstr ""
msgid "Make your first tag!" msgid "Make your first tag!"
msgstr "" msgstr ""
#, elixir-autogen, elixir-format
#: lib/cannery_web/live/ammo_group_live/index.html.heex:42
msgid "New Ammo group"
msgstr ""
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
#: lib/cannery_web/live/ammo_type_live/index.html.heex:17 #: lib/cannery_web/live/ammo_type_live/index.html.heex:17
msgid "New Ammo type" msgid "New Ammo type"
@ -102,7 +98,7 @@ msgid "New Tag"
msgstr "" msgstr ""
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
#: lib/cannery_web/components/topbar.ex:99 #: lib/cannery_web/components/topbar.ex:105
#: lib/cannery_web/templates/user_confirmation/new.html.heex:25 #: lib/cannery_web/templates/user_confirmation/new.html.heex:25
#: 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:42 #: lib/cannery_web/templates/user_registration/new.html.heex:42
@ -129,9 +125,9 @@ msgstr ""
#: lib/cannery_web/live/ammo_group_live/form_component.html.heex:73 #: lib/cannery_web/live/ammo_group_live/form_component.html.heex:73
#: lib/cannery_web/live/ammo_type_live/form_component.html.heex:156 #: lib/cannery_web/live/ammo_type_live/form_component.html.heex:156
#: lib/cannery_web/live/container_live/form_component.html.heex:50 #: lib/cannery_web/live/container_live/form_component.html.heex:50
#: lib/cannery_web/live/invite_live/form_component.html.heex:28 #: lib/cannery_web/live/invite_live/form_component.html.heex:31
#: lib/cannery_web/live/range_live/form_component.html.heex:40 #: lib/cannery_web/live/range_live/form_component.html.heex:40
#: lib/cannery_web/live/tag_live/form_component.ex:66 #: lib/cannery_web/live/tag_live/form_component.ex:91
msgid "Save" msgid "Save"
msgstr "" msgstr ""
@ -141,7 +137,7 @@ msgid "Send instructions to reset password"
msgstr "" msgstr ""
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
#: lib/cannery_web/live/container_live/show.html.heex:53 #: lib/cannery_web/live/container_live/show.html.heex:65
msgid "Why not add one?" msgid "Why not add one?"
msgstr "" msgstr ""
@ -161,17 +157,12 @@ msgid "Why not get some ready to shoot?"
msgstr "" msgstr ""
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
#: lib/cannery_web/live/ammo_group_live/index.ex:144 #: lib/cannery_web/live/ammo_group_live/index.ex:151
#: lib/cannery_web/live/ammo_group_live/show.html.heex:91 #: lib/cannery_web/live/ammo_group_live/show.html.heex:91
#: lib/cannery_web/live/range_live/index.html.heex:36 #: lib/cannery_web/live/range_live/index.html.heex:36
msgid "Record shots" msgid "Record shots"
msgstr "" msgstr ""
#, elixir-autogen, elixir-format
#: lib/cannery_web/live/ammo_group_live/show.html.heex:55
msgid "Ammo Details"
msgstr ""
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
#: lib/cannery_web/components/move_ammo_group_component.ex:89 #: lib/cannery_web/components/move_ammo_group_component.ex:89
msgid "Add another container!" msgid "Add another container!"
@ -193,8 +184,7 @@ msgid "Copy to clipboard"
msgstr "" msgstr ""
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
#: lib/cannery_web/live/ammo_group_live/index.html.heex:18 #: lib/cannery_web/live/ammo_group_live/index.html.heex:20
#: lib/cannery_web/live/ammo_group_live/index.html.heex:36
msgid "add a container first" msgid "add a container first"
msgstr "" msgstr ""
@ -212,3 +202,13 @@ msgstr ""
#: lib/cannery_web/templates/user_settings/edit.html.heex:134 #: lib/cannery_web/templates/user_settings/edit.html.heex:134
msgid "Change language" msgid "Change language"
msgstr "" msgstr ""
#, elixir-autogen, elixir-format
#: lib/cannery_web/live/ammo_group_live/show.html.heex:55
msgid "View in Catalog"
msgstr ""
#, elixir-autogen, elixir-format
#: lib/cannery_web/live/ammo_group_live/index.html.heex:31
msgid "add an ammo type first"
msgstr ""

View File

@ -12,12 +12,12 @@ msgstr ""
"Plural-Forms: nplurals=2\n" "Plural-Forms: nplurals=2\n"
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
#: lib/cannery_web/live/home_live.ex:56 #: lib/cannery_web/live/home_live.ex:64
msgid "%{name} lets you easily keep an eye on your ammo levels before and after range day" msgid "%{name} lets you easily keep an eye on your ammo levels before and after range day"
msgstr "" msgstr ""
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
#: lib/cannery_web/live/home_live.ex:78 #: lib/cannery_web/live/home_live.ex:86
msgid "Access from any internet-capable device" msgid "Access from any internet-capable device"
msgstr "" msgstr ""
@ -27,12 +27,12 @@ msgid "Admins"
msgstr "" msgstr ""
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
#: lib/cannery_web/live/home_live.ex:92 #: lib/cannery_web/live/home_live.ex:100
msgid "Admins:" msgid "Admins:"
msgstr "" msgstr ""
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
#: lib/cannery_web/components/topbar.ex:50 #: lib/cannery_web/components/topbar.ex:62
#: lib/cannery_web/live/ammo_group_live/index.html.heex:3 #: lib/cannery_web/live/ammo_group_live/index.html.heex:3
#: lib/cannery_web/live/range_live/index.ex:80 #: lib/cannery_web/live/range_live/index.ex:80
msgid "Ammo" msgid "Ammo"
@ -40,7 +40,7 @@ msgstr ""
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
#: lib/cannery_web/live/ammo_group_live/form_component.html.heex:21 #: lib/cannery_web/live/ammo_group_live/form_component.html.heex:21
#: lib/cannery_web/live/ammo_group_live/index.ex:80 #: lib/cannery_web/live/ammo_group_live/index.ex:81
msgid "Ammo type" msgid "Ammo type"
msgstr "" msgstr ""
@ -51,7 +51,7 @@ msgid "Average Price paid"
msgstr "" msgstr ""
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
#: lib/cannery_web/live/tag_live/form_component.ex:54 #: lib/cannery_web/live/tag_live/form_component.ex:79
msgid "Background color" msgid "Background color"
msgstr "" msgstr ""
@ -105,12 +105,12 @@ msgstr ""
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
#: lib/cannery_web/components/move_ammo_group_component.ex:67 #: lib/cannery_web/components/move_ammo_group_component.ex:67
#: lib/cannery_web/live/ammo_group_live/form_component.html.heex:48 #: lib/cannery_web/live/ammo_group_live/form_component.html.heex:48
#: lib/cannery_web/live/ammo_group_live/index.ex:85 #: lib/cannery_web/live/ammo_group_live/index.ex:86
msgid "Container" msgid "Container"
msgstr "" msgstr ""
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
#: lib/cannery_web/components/topbar.ex:44 #: lib/cannery_web/components/topbar.ex:50
#: lib/cannery_web/live/container_live/index.ex:36 #: lib/cannery_web/live/container_live/index.ex:36
#: lib/cannery_web/live/container_live/index.html.heex:3 #: lib/cannery_web/live/container_live/index.html.heex:3
msgid "Containers" msgid "Containers"
@ -125,7 +125,7 @@ msgstr ""
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
#: lib/cannery_web/live/ammo_group_live/form_component.html.heex:27 #: lib/cannery_web/live/ammo_group_live/form_component.html.heex:27
#: lib/cannery_web/live/ammo_group_live/index.ex:81 #: lib/cannery_web/live/ammo_group_live/index.ex:82
msgid "Count" msgid "Count"
msgstr "" msgstr ""
@ -153,13 +153,12 @@ msgid "Disable"
msgstr "" msgstr ""
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
#: lib/cannery_web/live/home_live.ex:53 #: lib/cannery_web/live/home_live.ex:61
msgid "Easy to Use:" msgid "Easy to Use:"
msgstr "" msgstr ""
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
#: 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/show.ex:40
msgid "Edit Ammo group" msgid "Edit Ammo group"
msgstr "" msgstr ""
@ -209,7 +208,7 @@ msgid "Incendiary"
msgstr "" msgstr ""
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
#: lib/cannery_web/live/home_live.ex:87 #: lib/cannery_web/live/home_live.ex:95
msgid "Instance Information" msgid "Instance Information"
msgstr "" msgstr ""
@ -219,12 +218,12 @@ msgid "Invite Disabled"
msgstr "" msgstr ""
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
#: lib/cannery_web/live/home_live.ex:118 #: lib/cannery_web/live/home_live.ex:126
msgid "Invite Only" msgid "Invite Only"
msgstr "" msgstr ""
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
#: lib/cannery_web/components/topbar.ex:69 #: lib/cannery_web/components/topbar.ex:75
#: lib/cannery_web/live/invite_live/index.ex:41 #: 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
msgid "Invites" msgid "Invites"
@ -252,11 +251,6 @@ msgstr ""
msgid "Magazine, Clip, Ammo Box, etc" msgid "Magazine, Clip, Ammo Box, etc"
msgstr "" msgstr ""
#, elixir-autogen, elixir-format
#: lib/cannery_web/components/topbar.ex:56
msgid "Manage"
msgstr ""
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
#: lib/cannery_web/live/ammo_type_live/form_component.html.heex:148 #: lib/cannery_web/live/ammo_type_live/form_component.html.heex:148
#: lib/cannery_web/live/ammo_type_live/index.ex:73 #: lib/cannery_web/live/ammo_type_live/index.ex:73
@ -279,7 +273,7 @@ msgstr ""
#: lib/cannery_web/live/ammo_type_live/index.ex:51 #: lib/cannery_web/live/ammo_type_live/index.ex:51
#: lib/cannery_web/live/container_live/form_component.html.heex:20 #: lib/cannery_web/live/container_live/form_component.html.heex:20
#: lib/cannery_web/live/invite_live/form_component.html.heex:20 #: lib/cannery_web/live/invite_live/form_component.html.heex:20
#: lib/cannery_web/live/tag_live/form_component.ex:50 #: lib/cannery_web/live/tag_live/form_component.ex:75
msgid "Name" msgid "Name"
msgstr "" msgstr ""
@ -318,11 +312,6 @@ msgstr ""
msgid "No ammo for this type" msgid "No ammo for this type"
msgstr "" msgstr ""
#, elixir-autogen, elixir-format
#: lib/cannery_web/live/container_live/show.html.heex:78
msgid "No ammo groups in this container"
msgstr ""
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
#: lib/cannery_web/live/container_live/index.html.heex:8 #: lib/cannery_web/live/container_live/index.html.heex:8
msgid "No containers" msgid "No containers"
@ -368,7 +357,7 @@ msgstr ""
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
#: lib/cannery_web/live/ammo_group_live/form_component.html.heex:34 #: lib/cannery_web/live/ammo_group_live/form_component.html.heex:34
#: lib/cannery_web/live/ammo_group_live/index.ex:82 #: lib/cannery_web/live/ammo_group_live/index.ex:83
msgid "Price paid" msgid "Price paid"
msgstr "" msgstr ""
@ -385,17 +374,17 @@ msgid "Primer type"
msgstr "" msgstr ""
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
#: lib/cannery_web/live/home_live.ex:117 #: lib/cannery_web/live/home_live.ex:125
msgid "Public Signups" msgid "Public Signups"
msgstr "" msgstr ""
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
#: lib/cannery_web/live/home_live.ex:65 #: lib/cannery_web/live/home_live.ex:73
msgid "Secure:" msgid "Secure:"
msgstr "" msgstr ""
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
#: lib/cannery_web/live/home_live.ex:68 #: lib/cannery_web/live/home_live.ex:76
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 ""
@ -410,18 +399,13 @@ msgstr ""
msgid "Settings" msgid "Settings"
msgstr "" msgstr ""
#, elixir-autogen, elixir-format
#: lib/cannery_web/live/ammo_group_live/show.ex:39
msgid "Show Ammo group"
msgstr ""
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
#: lib/cannery_web/live/ammo_type_live/show.ex:44 #: lib/cannery_web/live/ammo_type_live/show.ex:44
msgid "Show Ammo type" msgid "Show Ammo type"
msgstr "" msgstr ""
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
#: lib/cannery_web/live/home_live.ex:75 #: lib/cannery_web/live/home_live.ex:83
msgid "Simple:" msgid "Simple:"
msgstr "" msgstr ""
@ -436,7 +420,7 @@ msgid "Stored in"
msgstr "" msgstr ""
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
#: lib/cannery_web/components/topbar.ex:38 #: lib/cannery_web/components/topbar.ex:44
#: lib/cannery_web/live/tag_live/index.ex:32 #: lib/cannery_web/live/tag_live/index.ex:32
#: lib/cannery_web/live/tag_live/index.html.heex:3 #: lib/cannery_web/live/tag_live/index.html.heex:3
msgid "Tags" msgid "Tags"
@ -448,20 +432,15 @@ msgid "Tags can be added to your containers to help you organize"
msgstr "" msgstr ""
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
#: lib/cannery_web/live/tag_live/form_component.ex:60 #: lib/cannery_web/live/tag_live/form_component.ex:85
msgid "Text color" msgid "Text color"
msgstr "" msgstr ""
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
#: lib/cannery_web/live/home_live.ex:44 #: lib/cannery_web/live/home_live.ex:52
msgid "The self-hosted firearm tracker website" msgid "The self-hosted firearm tracker website"
msgstr "" msgstr ""
#, elixir-autogen, elixir-format
#: lib/cannery_web/live/ammo_group_live/show.html.heex:108
msgid "This ammo group is not in a container"
msgstr ""
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
#: lib/cannery_web/live/ammo_type_live/form_component.html.heex:132 #: lib/cannery_web/live/ammo_type_live/form_component.html.heex:132
#: lib/cannery_web/live/ammo_type_live/index.ex:69 #: lib/cannery_web/live/ammo_type_live/index.ex:69
@ -497,23 +476,23 @@ msgid "Uses left"
msgstr "" msgstr ""
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
#: lib/cannery_web/live/home_live.ex:40 #: lib/cannery_web/live/home_live.ex:48
msgid "Welcome to %{name}" msgid "Welcome to %{name}"
msgstr "" msgstr ""
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
#: lib/cannery_web/live/home_live.ex:69 #: lib/cannery_web/live/home_live.ex:77
msgid "Your data stays with you, period" msgid "Your data stays with you, period"
msgstr "" msgstr ""
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
#: lib/cannery_web/live/container_live/show.html.heex:49 #: lib/cannery_web/live/container_live/show.html.heex:61
msgid "No tags for this container" msgid "No tags for this container"
msgstr "" msgstr ""
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
#: lib/cannery_web/components/topbar.ex:62 #: lib/cannery_web/components/topbar.ex:68
#: lib/cannery_web/live/ammo_group_live/index.ex:84 #: lib/cannery_web/live/ammo_group_live/index.ex:85
msgid "Range" msgid "Range"
msgstr "" msgstr ""
@ -556,11 +535,6 @@ msgstr ""
msgid "Record shots" msgid "Record shots"
msgstr "" msgstr ""
#, elixir-autogen, elixir-format
#: lib/cannery_web/live/ammo_type_live/index.html.heex:3
msgid "Ammo Types"
msgstr ""
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
#: lib/cannery_web/live/ammo_group_live/index.ex:49 #: lib/cannery_web/live/ammo_group_live/index.ex:49
msgid "Ammo groups" msgid "Ammo groups"
@ -606,7 +580,6 @@ msgstr ""
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
#: lib/cannery_web/live/ammo_group_live/index.ex:32 #: lib/cannery_web/live/ammo_group_live/index.ex:32
#: lib/cannery_web/live/ammo_group_live/show.ex:38
msgid "Move Ammo group" msgid "Move Ammo group"
msgstr "" msgstr ""
@ -627,7 +600,7 @@ msgstr ""
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
#: lib/cannery_web/components/ammo_group_card.ex:48 #: lib/cannery_web/components/ammo_group_card.ex:48
#: lib/cannery_web/live/ammo_group_live/index.ex:118 #: lib/cannery_web/live/ammo_group_live/index.ex:125
#: 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:44
#: lib/cannery_web/live/ammo_type_live/index.ex:114 #: lib/cannery_web/live/ammo_type_live/index.ex:114
@ -692,12 +665,12 @@ msgid "New password"
msgstr "" msgstr ""
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
#: lib/cannery_web/live/ammo_group_live/index.ex:141 #: lib/cannery_web/live/ammo_group_live/index.ex:148
msgid "Stage" msgid "Stage"
msgstr "" msgstr ""
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
#: lib/cannery_web/live/ammo_group_live/index.ex:141 #: lib/cannery_web/live/ammo_group_live/index.ex:148
msgid "Unstage" msgid "Unstage"
msgstr "" msgstr ""
@ -731,7 +704,8 @@ msgid "Edit %{name} tags"
msgstr "" msgstr ""
#, elixir-autogen, elixir-format, fuzzy #, elixir-autogen, elixir-format, fuzzy
#: lib/cannery_web/components/container_card.ex:50 #: lib/cannery_web/components/container_card.ex:55
#: lib/cannery_web/live/container_live/show.html.heex:32
msgid "Rounds:" msgid "Rounds:"
msgstr "" msgstr ""
@ -747,7 +721,7 @@ msgid "No cost information"
msgstr "" msgstr ""
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
#: lib/cannery_web/live/ammo_group_live/index.ex:83 #: lib/cannery_web/live/ammo_group_live/index.ex:84
msgid "% left" msgid "% left"
msgstr "" msgstr ""
@ -833,7 +807,7 @@ msgid "Ammo types"
msgstr "" msgstr ""
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
#: lib/cannery_web/live/ammo_group_live/index.ex:86 #: lib/cannery_web/live/ammo_group_live/index.ex:87
msgid "Added on" msgid "Added on"
msgstr "" msgstr ""
@ -873,21 +847,74 @@ msgid "Language"
msgstr "" msgstr ""
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
#: lib/cannery_web/live/home_live.ex:139 #: lib/cannery_web/live/home_live.ex:147
msgid "Get involved!" msgid "Get involved!"
msgstr "" msgstr ""
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
#: lib/cannery_web/live/home_live.ex:156 #: lib/cannery_web/live/home_live.ex:164
msgid "Help translate" msgid "Help translate"
msgstr "" msgstr ""
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
#: lib/cannery_web/live/home_live.ex:165 #: lib/cannery_web/live/home_live.ex:173
msgid "Report bugs or request features" msgid "Report bugs or request features"
msgstr "" msgstr ""
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
#: lib/cannery_web/live/home_live.ex:147 #: lib/cannery_web/live/home_live.ex:155
msgid "View the source code" msgid "View the source code"
msgstr "" msgstr ""
#, elixir-autogen, elixir-format
#: lib/cannery_web/components/topbar.ex:56
#: lib/cannery_web/live/ammo_type_live/index.html.heex:3
msgid "Catalog"
msgstr ""
#, elixir-autogen, elixir-format, fuzzy
#: lib/cannery_web/live/ammo_group_live/show.ex:40
msgid "Edit Ammo"
msgstr ""
#, elixir-autogen, elixir-format, fuzzy
#: lib/cannery_web/live/ammo_group_live/show.ex:38
msgid "Move Ammo"
msgstr ""
#, elixir-autogen, elixir-format, fuzzy
#: lib/cannery_web/live/container_live/show.html.heex:90
msgid "No ammo in this container"
msgstr ""
#, elixir-autogen, elixir-format, fuzzy
#: lib/cannery_web/live/ammo_group_live/show.ex:39
msgid "Show Ammo"
msgstr ""
#, elixir-autogen, elixir-format, fuzzy
#: lib/cannery_web/live/ammo_group_live/show.html.heex:108
msgid "This ammo is not in a container"
msgstr ""
#, elixir-autogen, elixir-format
#: lib/cannery_web/components/container_card.ex:50
#: lib/cannery_web/live/container_live/show.html.heex:27
msgid "Packs:"
msgstr ""
#, elixir-autogen, elixir-format
#: lib/cannery_web/components/topbar.ex:24
#: lib/cannery_web/live/home_live.ex:42
msgid "Cannery logo"
msgstr ""
#, elixir-autogen, elixir-format
#: lib/cannery_web/live/home_live.ex:44
msgid "isn't he cute >:3"
msgstr ""
#, elixir-autogen, elixir-format
#: lib/cannery_web/live/invite_live/form_component.html.heex:28
msgid "Leave \"Uses left\" blank to make invite unlimited"
msgstr ""

View File

@ -11,7 +11,7 @@ msgstr ""
"Language: en\n" "Language: en\n"
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
#: lib/cannery/containers.ex:122 #: lib/cannery/containers.ex:140
msgid "Container must be empty before deleting" msgid "Container must be empty before deleting"
msgstr "" msgstr ""
@ -139,13 +139,13 @@ msgid "Tag could not be added"
msgstr "" msgstr ""
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
#: lib/cannery/activity_log.ex:125 #: lib/cannery/activity_log/shot_group.ex:115
msgid "Count must be at least 1" msgid "Count must be at least 1"
msgstr "" msgstr ""
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
#: lib/cannery/activity_log.ex:73 #: lib/cannery/activity_log/shot_group.ex:74
#: lib/cannery/activity_log.ex:120 #: lib/cannery/activity_log/shot_group.ex:111
msgid "Count must be less than %{count}" msgid "Count must be less than %{count}"
msgstr "" msgstr ""
@ -161,11 +161,26 @@ msgid "Tag could not be removed"
msgstr "" msgstr ""
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
#: lib/cannery_web/live/ammo_group_live/form_component.ex:126 #: lib/cannery_web/live/ammo_group_live/form_component.ex:156
msgid "Could not parse number of copies" msgid "Could not parse number of copies"
msgstr "" msgstr ""
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
#: lib/cannery_web/live/ammo_group_live/form_component.ex:111 #: lib/cannery_web/live/ammo_group_live/form_component.ex:141
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 ""
#, elixir-autogen, elixir-format
#: lib/cannery/ammo.ex:407
msgid "Invalid multiplier"
msgstr ""
#, elixir-autogen, elixir-format
#: lib/cannery/ammo/ammo_group.ex:84
msgid "Please select an ammo type and container"
msgstr ""
#, elixir-autogen, elixir-format
#: lib/cannery/activity_log/shot_group.ex:69
msgid "Please select a valid user and ammo group"
msgstr ""

View File

@ -12,10 +12,10 @@ msgstr ""
"Plural-Forms: nplurals=2\n" "Plural-Forms: nplurals=2\n"
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
#: lib/cannery_web/live/ammo_type_live/form_component.ex:64 #: lib/cannery_web/live/ammo_type_live/form_component.ex:85
#: lib/cannery_web/live/container_live/form_component.ex:65 #: lib/cannery_web/live/container_live/form_component.ex:85
#: lib/cannery_web/live/invite_live/form_component.ex:59 #: lib/cannery_web/live/invite_live/form_component.ex:80
#: lib/cannery_web/live/tag_live/form_component.ex:101 #: lib/cannery_web/live/tag_live/form_component.ex:126
msgid "%{name} created successfully" msgid "%{name} created successfully"
msgstr "" msgstr ""
@ -50,10 +50,10 @@ msgid "%{name} updated succesfully"
msgstr "" msgstr ""
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
#: lib/cannery_web/live/ammo_type_live/form_component.ex:46 #: lib/cannery_web/live/ammo_type_live/form_component.ex:67
#: lib/cannery_web/live/container_live/form_component.ex:47 #: lib/cannery_web/live/container_live/form_component.ex:67
#: lib/cannery_web/live/invite_live/form_component.ex:41 #: lib/cannery_web/live/invite_live/form_component.ex:62
#: lib/cannery_web/live/tag_live/form_component.ex:83 #: lib/cannery_web/live/tag_live/form_component.ex:108
msgid "%{name} updated successfully" msgid "%{name} updated successfully"
msgstr "" msgstr ""
@ -64,15 +64,9 @@ msgstr ""
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
#: lib/cannery_web/live/ammo_group_live/index.ex:56 #: lib/cannery_web/live/ammo_group_live/index.ex:56
#: lib/cannery_web/live/ammo_group_live/show.ex:50
msgid "Ammo group deleted succesfully" msgid "Ammo group deleted succesfully"
msgstr "" msgstr ""
#, elixir-autogen, elixir-format
#: lib/cannery_web/live/ammo_group_live/form_component.ex:88
msgid "Ammo group updated successfully"
msgstr ""
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
#: lib/cannery_web/live/invite_live/index.html.heex:102 #: lib/cannery_web/live/invite_live/index.html.heex:102
#: lib/cannery_web/live/invite_live/index.html.heex:131 #: lib/cannery_web/live/invite_live/index.html.heex:131
@ -80,9 +74,8 @@ msgid "Are you sure you want to delete %{email}? This action is permanent!"
msgstr "" msgstr ""
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
#: lib/cannery_web/live/ammo_type_live/show.html.heex:27
#: lib/cannery_web/live/container_live/index.html.heex:46 #: lib/cannery_web/live/container_live/index.html.heex:46
#: lib/cannery_web/live/container_live/show.html.heex:37 #: lib/cannery_web/live/container_live/show.html.heex:49
#: lib/cannery_web/live/tag_live/index.html.heex:38 #: lib/cannery_web/live/tag_live/index.html.heex:38
msgid "Are you sure you want to delete %{name}?" msgid "Are you sure you want to delete %{name}?"
msgstr "" msgstr ""
@ -93,9 +86,8 @@ msgid "Are you sure you want to delete the invite for %{name}?"
msgstr "" msgstr ""
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
#: lib/cannery_web/live/ammo_group_live/index.ex:177 #: lib/cannery_web/live/ammo_group_live/index.ex:184
#: lib/cannery_web/live/ammo_group_live/show.html.heex:71 #: lib/cannery_web/live/ammo_group_live/show.html.heex:71
#: lib/cannery_web/live/ammo_type_live/index.ex:140
msgid "Are you sure you want to delete this ammo?" msgid "Are you sure you want to delete this ammo?"
msgstr "" msgstr ""
@ -105,7 +97,7 @@ msgid "Are you sure you want to delete your account?"
msgstr "" msgstr ""
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
#: lib/cannery_web/components/topbar.ex:84 #: lib/cannery_web/components/topbar.ex:90
msgid "Are you sure you want to log out?" msgid "Are you sure you want to log out?"
msgstr "" msgstr ""
@ -150,7 +142,7 @@ msgid "Please check your email to verify your account"
msgstr "" msgstr ""
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
#: lib/cannery_web/live/home_live.ex:96 #: lib/cannery_web/live/home_live.ex:104
msgid "Register to setup %{name}" msgid "Register to setup %{name}"
msgstr "" msgstr ""
@ -159,9 +151,9 @@ msgstr ""
#: lib/cannery_web/live/ammo_group_live/form_component.html.heex:74 #: lib/cannery_web/live/ammo_group_live/form_component.html.heex:74
#: lib/cannery_web/live/ammo_type_live/form_component.html.heex:157 #: lib/cannery_web/live/ammo_type_live/form_component.html.heex:157
#: lib/cannery_web/live/container_live/form_component.html.heex:52 #: lib/cannery_web/live/container_live/form_component.html.heex:52
#: lib/cannery_web/live/invite_live/form_component.html.heex:30 #: lib/cannery_web/live/invite_live/form_component.html.heex:33
#: lib/cannery_web/live/range_live/form_component.html.heex:42 #: lib/cannery_web/live/range_live/form_component.html.heex:42
#: lib/cannery_web/live/tag_live/form_component.ex:68 #: lib/cannery_web/live/tag_live/form_component.ex:93
msgid "Saving..." msgid "Saving..."
msgstr "" msgstr ""
@ -191,7 +183,7 @@ msgid "Adding..."
msgstr "" msgstr ""
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
#: lib/cannery_web/components/add_shot_group_component.ex:68 #: lib/cannery_web/components/add_shot_group_component.ex:56
msgid "Shots recorded successfully" msgid "Shots recorded successfully"
msgstr "" msgstr ""
@ -200,11 +192,6 @@ msgstr ""
msgid "Are you sure you want to unstage this ammo?" msgid "Are you sure you want to unstage this ammo?"
msgstr "" msgstr ""
#, elixir-autogen, elixir-format
#: lib/cannery_web/live/range_live/index.ex:68
msgid "Ammo group unstaged succesfully"
msgstr ""
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
#: lib/cannery_web/live/ammo_group_live/show.ex:130 #: lib/cannery_web/live/ammo_group_live/show.ex:130
#: lib/cannery_web/live/range_live/index.ex:128 #: lib/cannery_web/live/range_live/index.ex:128
@ -243,8 +230,8 @@ msgid "%{name} removed successfully"
msgstr "" msgstr ""
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
#: lib/cannery_web/live/ammo_group_live/index.html.heex:15 #: lib/cannery_web/live/ammo_group_live/index.html.heex:17
#: lib/cannery_web/live/ammo_group_live/index.html.heex:33 #: lib/cannery_web/live/ammo_group_live/index.html.heex:28
msgid "You'll need to" msgid "You'll need to"
msgstr "" msgstr ""
@ -253,13 +240,6 @@ msgstr ""
msgid "Creating..." msgid "Creating..."
msgstr "" msgstr ""
#, elixir-autogen, elixir-format, fuzzy
#: lib/cannery_web/live/ammo_group_live/form_component.ex:147
msgid "Ammo group created successfully"
msgid_plural "Ammo groups created successfully"
msgstr[0] ""
msgstr[1] ""
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
#: lib/cannery_web/templates/user_settings/edit.html.heex:136 #: lib/cannery_web/templates/user_settings/edit.html.heex:136
msgid "Are you sure you want to change your language?" msgid "Are you sure you want to change your language?"
@ -269,3 +249,31 @@ msgstr ""
#: lib/cannery_web/controllers/user_settings_controller.ex:65 #: lib/cannery_web/controllers/user_settings_controller.ex:65
msgid "Language updated successfully." msgid "Language updated successfully."
msgstr "" msgstr ""
#, elixir-autogen, elixir-format, fuzzy
#: lib/cannery_web/live/ammo_group_live/show.ex:50
msgid "Ammo deleted succesfully"
msgstr ""
#, elixir-autogen, elixir-format, fuzzy
#: lib/cannery_web/live/range_live/index.ex:68
msgid "Ammo unstaged succesfully"
msgstr ""
#, elixir-autogen, elixir-format, fuzzy
#: lib/cannery_web/live/ammo_group_live/form_component.ex:118
msgid "Ammo updated successfully"
msgstr ""
#, elixir-autogen, elixir-format, fuzzy
#: lib/cannery_web/live/ammo_group_live/form_component.ex:177
msgid "Ammo added successfully"
msgid_plural "Ammo added successfully"
msgstr[0] ""
msgstr[1] ""
#, elixir-autogen, elixir-format, fuzzy
#: lib/cannery_web/live/ammo_type_live/index.ex:140
#: lib/cannery_web/live/ammo_type_live/show.html.heex:27
msgid "Are you sure you want to delete %{name}? This will delete all %{name} type ammo as well!"
msgstr ""

View File

@ -11,7 +11,7 @@ msgid ""
msgstr "" msgstr ""
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
#: lib/cannery/containers.ex:122 #: lib/cannery/containers.ex:140
msgid "Container must be empty before deleting" msgid "Container must be empty before deleting"
msgstr "" msgstr ""
@ -138,13 +138,13 @@ msgid "Tag could not be added"
msgstr "" msgstr ""
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
#: lib/cannery/activity_log.ex:125 #: lib/cannery/activity_log/shot_group.ex:115
msgid "Count must be at least 1" msgid "Count must be at least 1"
msgstr "" msgstr ""
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
#: lib/cannery/activity_log.ex:73 #: lib/cannery/activity_log/shot_group.ex:74
#: lib/cannery/activity_log.ex:120 #: lib/cannery/activity_log/shot_group.ex:111
msgid "Count must be less than %{count}" msgid "Count must be less than %{count}"
msgstr "" msgstr ""
@ -160,11 +160,26 @@ msgid "Tag could not be removed"
msgstr "" msgstr ""
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
#: lib/cannery_web/live/ammo_group_live/form_component.ex:126 #: lib/cannery_web/live/ammo_group_live/form_component.ex:156
msgid "Could not parse number of copies" msgid "Could not parse number of copies"
msgstr "" msgstr ""
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
#: lib/cannery_web/live/ammo_group_live/form_component.ex:111 #: lib/cannery_web/live/ammo_group_live/form_component.ex:141
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 ""
#, elixir-autogen, elixir-format
#: lib/cannery/ammo.ex:407
msgid "Invalid multiplier"
msgstr ""
#, elixir-autogen, elixir-format
#: lib/cannery/ammo/ammo_group.ex:84
msgid "Please select an ammo type and container"
msgstr ""
#, elixir-autogen, elixir-format
#: lib/cannery/activity_log/shot_group.ex:69
msgid "Please select a valid user and ammo group"
msgstr ""

View File

@ -140,7 +140,7 @@ msgstr ""
#: lib/cannery_web/live/ammo_group_live/form_component.html.heex:73 #: lib/cannery_web/live/ammo_group_live/form_component.html.heex:73
#: lib/cannery_web/live/ammo_type_live/form_component.html.heex:156 #: lib/cannery_web/live/ammo_type_live/form_component.html.heex:156
#: lib/cannery_web/live/container_live/form_component.html.heex:50 #: lib/cannery_web/live/container_live/form_component.html.heex:50
#: lib/cannery_web/live/invite_live/form_component.html.heex:28 #: lib/cannery_web/live/invite_live/form_component.html.heex:31
#: lib/cannery_web/live/range_live/form_component.html.heex:40 #: lib/cannery_web/live/range_live/form_component.html.heex:40
#: lib/cannery_web/live/tag_live/form_component.ex:66 #: lib/cannery_web/live/tag_live/form_component.ex:66
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
@ -224,3 +224,13 @@ msgstr ""
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
msgid "Change language" msgid "Change language"
msgstr "" msgstr ""
#, elixir-autogen, elixir-format
#: lib/cannery_web/live/ammo_group_live/show.html.heex:55
msgid "View in Catalog"
msgstr ""
#, elixir-autogen, elixir-format
#: lib/cannery_web/live/ammo_group_live/index.html.heex:31
msgid "add an ammo type first"
msgstr ""

View File

@ -640,7 +640,7 @@ msgid "Shot log"
msgstr "" msgstr ""
#: lib/cannery_web/components/ammo_group_card.ex:48 #: lib/cannery_web/components/ammo_group_card.ex:48
#: lib/cannery_web/live/ammo_group_live/index.ex:118 #: lib/cannery_web/live/ammo_group_live/index.ex:125
#: 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:44
#: lib/cannery_web/live/ammo_type_live/index.ex:114 #: lib/cannery_web/live/ammo_type_live/index.ex:114
@ -905,3 +905,56 @@ msgstr ""
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
msgid "View the source code" msgid "View the source code"
msgstr "" msgstr ""
#, elixir-autogen, elixir-format
#: lib/cannery_web/components/topbar.ex:56
#: lib/cannery_web/live/ammo_type_live/index.html.heex:3
msgid "Catalog"
msgstr ""
#, elixir-autogen, elixir-format, fuzzy
#: lib/cannery_web/live/ammo_group_live/show.ex:40
msgid "Edit Ammo"
msgstr ""
#, elixir-autogen, elixir-format, fuzzy
#: lib/cannery_web/live/ammo_group_live/show.ex:38
msgid "Move Ammo"
msgstr ""
#, elixir-autogen, elixir-format, fuzzy
#: lib/cannery_web/live/container_live/show.html.heex:90
msgid "No ammo in this container"
msgstr ""
#, elixir-autogen, elixir-format, fuzzy
#: lib/cannery_web/live/ammo_group_live/show.ex:39
msgid "Show Ammo"
msgstr ""
#, elixir-autogen, elixir-format, fuzzy
#: lib/cannery_web/live/ammo_group_live/show.html.heex:108
msgid "This ammo is not in a container"
msgstr ""
#, elixir-autogen, elixir-format
#: lib/cannery_web/components/container_card.ex:50
#: lib/cannery_web/live/container_live/show.html.heex:27
msgid "Packs:"
msgstr ""
#, elixir-autogen, elixir-format
#: lib/cannery_web/components/topbar.ex:24
#: lib/cannery_web/live/home_live.ex:42
msgid "Cannery logo"
msgstr ""
#, elixir-autogen, elixir-format
#: lib/cannery_web/live/home_live.ex:44
msgid "isn't he cute >:3"
msgstr ""
#, elixir-autogen, elixir-format
#: lib/cannery_web/live/invite_live/form_component.html.heex:28
msgid "Leave \"Uses left\" blank to make invite unlimited"
msgstr ""

View File

@ -184,3 +184,18 @@ msgstr ""
#, 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 ""
#, elixir-autogen, elixir-format
#: lib/cannery/ammo.ex:407
msgid "Invalid multiplier"
msgstr ""
#, elixir-autogen, elixir-format
#: lib/cannery/ammo/ammo_group.ex:84
msgid "Please select an ammo type and container"
msgstr ""
#, elixir-autogen, elixir-format
#: lib/cannery/activity_log/shot_group.ex:69
msgid "Please select a valid user and ammo group"
msgstr ""

View File

@ -95,7 +95,7 @@ msgstr "Está seguro que desea eliminar %{email}? Esta acción es permanente!"
#: lib/cannery_web/live/ammo_type_live/show.html.heex:27 #: lib/cannery_web/live/ammo_type_live/show.html.heex:27
#: lib/cannery_web/live/container_live/index.html.heex:46 #: lib/cannery_web/live/container_live/index.html.heex:46
#: lib/cannery_web/live/container_live/show.html.heex:37 #: lib/cannery_web/live/container_live/show.html.heex:49
#: lib/cannery_web/live/tag_live/index.html.heex:38 #: lib/cannery_web/live/tag_live/index.html.heex:38
#, 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}?"
@ -176,7 +176,7 @@ msgstr "Regístrese para configurar %{name}"
#: lib/cannery_web/live/ammo_group_live/form_component.html.heex:74 #: lib/cannery_web/live/ammo_group_live/form_component.html.heex:74
#: lib/cannery_web/live/ammo_type_live/form_component.html.heex:157 #: lib/cannery_web/live/ammo_type_live/form_component.html.heex:157
#: lib/cannery_web/live/container_live/form_component.html.heex:52 #: lib/cannery_web/live/container_live/form_component.html.heex:52
#: lib/cannery_web/live/invite_live/form_component.html.heex:30 #: lib/cannery_web/live/invite_live/form_component.html.heex:33
#: lib/cannery_web/live/range_live/form_component.html.heex:42 #: lib/cannery_web/live/range_live/form_component.html.heex:42
#: lib/cannery_web/live/tag_live/form_component.ex:68 #: lib/cannery_web/live/tag_live/form_component.ex:68
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
@ -288,3 +288,31 @@ msgstr ""
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
msgid "Language updated successfully." msgid "Language updated successfully."
msgstr "" msgstr ""
#, elixir-autogen, elixir-format, fuzzy
#: lib/cannery_web/live/ammo_group_live/show.ex:50
msgid "Ammo deleted succesfully"
msgstr ""
#, elixir-autogen, elixir-format, fuzzy
#: lib/cannery_web/live/range_live/index.ex:68
msgid "Ammo unstaged succesfully"
msgstr ""
#, elixir-autogen, elixir-format, fuzzy
#: lib/cannery_web/live/ammo_group_live/form_component.ex:118
msgid "Ammo updated successfully"
msgstr ""
#, elixir-autogen, elixir-format, fuzzy
#: lib/cannery_web/live/ammo_group_live/form_component.ex:177
msgid "Ammo added successfully"
msgid_plural "Ammo added successfully"
msgstr[0] ""
msgstr[1] ""
#, elixir-autogen, elixir-format, fuzzy
#: lib/cannery_web/live/ammo_type_live/index.ex:140
#: lib/cannery_web/live/ammo_type_live/show.html.heex:27
msgid "Are you sure you want to delete %{name}? This will delete all %{name} type ammo as well!"
msgstr ""

View File

@ -25,11 +25,12 @@ msgstr ""
## effect: edit them in PO (.po) files instead. ## effect: edit them in PO (.po) files instead.
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
#: lib/cannery_web/live/ammo_group_live/index.ex:44 #: lib/cannery_web/live/ammo_group_live/index.ex:44
#: lib/cannery_web/live/ammo_group_live/index.html.heex:42
msgid "Add Ammo" msgid "Add Ammo"
msgstr "ajouter munition" msgstr "ajouter munition"
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
#: lib/cannery_web/live/ammo_group_live/index.html.heex:24 #: lib/cannery_web/live/ammo_group_live/index.html.heex:37
msgid "Add your first box!" msgid "Add your first box!"
msgstr "Ajoutez votre première caisse !" msgstr "Ajoutez votre première caisse !"
@ -78,7 +79,7 @@ msgid "Invite someone new!"
msgstr "Invitez une nouvelle personne!" msgstr "Invitez une nouvelle personne!"
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
#: lib/cannery_web/components/topbar.ex:106 #: lib/cannery_web/components/topbar.ex:112
#: lib/cannery_web/templates/user_confirmation/new.html.heex:30 #: lib/cannery_web/templates/user_confirmation/new.html.heex:30
#: lib/cannery_web/templates/user_registration/new.html.heex:48 #: lib/cannery_web/templates/user_registration/new.html.heex:48
#: lib/cannery_web/templates/user_reset_password/edit.html.heex:48 #: lib/cannery_web/templates/user_reset_password/edit.html.heex:48
@ -93,11 +94,6 @@ msgstr "Se connecter"
msgid "Make your first tag!" msgid "Make your first tag!"
msgstr "Faîtes votre premier tag!" msgstr "Faîtes votre premier tag!"
#, elixir-autogen, elixir-format
#: lib/cannery_web/live/ammo_group_live/index.html.heex:42
msgid "New Ammo group"
msgstr "Nouveau groupe de munition"
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
#: lib/cannery_web/live/ammo_type_live/index.html.heex:17 #: lib/cannery_web/live/ammo_type_live/index.html.heex:17
msgid "New Ammo type" msgid "New Ammo type"
@ -114,7 +110,7 @@ msgid "New Tag"
msgstr "Nouveau tag" msgstr "Nouveau tag"
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
#: lib/cannery_web/components/topbar.ex:99 #: lib/cannery_web/components/topbar.ex:105
#: lib/cannery_web/templates/user_confirmation/new.html.heex:25 #: lib/cannery_web/templates/user_confirmation/new.html.heex:25
#: 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:42 #: lib/cannery_web/templates/user_registration/new.html.heex:42
@ -141,9 +137,9 @@ msgstr "Réinitialisé le mot de passe"
#: lib/cannery_web/live/ammo_group_live/form_component.html.heex:73 #: lib/cannery_web/live/ammo_group_live/form_component.html.heex:73
#: lib/cannery_web/live/ammo_type_live/form_component.html.heex:156 #: lib/cannery_web/live/ammo_type_live/form_component.html.heex:156
#: lib/cannery_web/live/container_live/form_component.html.heex:50 #: lib/cannery_web/live/container_live/form_component.html.heex:50
#: lib/cannery_web/live/invite_live/form_component.html.heex:28 #: lib/cannery_web/live/invite_live/form_component.html.heex:31
#: lib/cannery_web/live/range_live/form_component.html.heex:40 #: lib/cannery_web/live/range_live/form_component.html.heex:40
#: lib/cannery_web/live/tag_live/form_component.ex:66 #: lib/cannery_web/live/tag_live/form_component.ex:91
msgid "Save" msgid "Save"
msgstr "Sauvegarder" msgstr "Sauvegarder"
@ -153,7 +149,7 @@ 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"
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
#: lib/cannery_web/live/container_live/show.html.heex:53 #: lib/cannery_web/live/container_live/show.html.heex:65
msgid "Why not add one?" msgid "Why not add one?"
msgstr "Pourquoi pas en ajouter un?" msgstr "Pourquoi pas en ajouter un?"
@ -173,17 +169,12 @@ msgid "Why not get some ready to shoot?"
msgstr "Pourquoi pas en préparer pour tirer?" msgstr "Pourquoi pas en préparer pour tirer?"
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
#: lib/cannery_web/live/ammo_group_live/index.ex:144 #: lib/cannery_web/live/ammo_group_live/index.ex:151
#: lib/cannery_web/live/ammo_group_live/show.html.heex:91 #: lib/cannery_web/live/ammo_group_live/show.html.heex:91
#: lib/cannery_web/live/range_live/index.html.heex:36 #: lib/cannery_web/live/range_live/index.html.heex:36
msgid "Record shots" msgid "Record shots"
msgstr "Enregistrer des tirs" msgstr "Enregistrer des tirs"
#, elixir-autogen, elixir-format
#: lib/cannery_web/live/ammo_group_live/show.html.heex:55
msgid "Ammo Details"
msgstr "Détails de la munition"
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
#: lib/cannery_web/components/move_ammo_group_component.ex:89 #: lib/cannery_web/components/move_ammo_group_component.ex:89
msgid "Add another container!" msgid "Add another container!"
@ -205,8 +196,7 @@ msgid "Copy to clipboard"
msgstr "Copier dans le presse-papier" msgstr "Copier dans le presse-papier"
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
#: lib/cannery_web/live/ammo_group_live/index.html.heex:18 #: lib/cannery_web/live/ammo_group_live/index.html.heex:20
#: lib/cannery_web/live/ammo_group_live/index.html.heex:36
msgid "add a container first" msgid "add a container first"
msgstr "ajouter un conteneur en premier" msgstr "ajouter un conteneur en premier"
@ -224,3 +214,13 @@ msgstr "Changer la langue"
#: lib/cannery_web/templates/user_settings/edit.html.heex:134 #: lib/cannery_web/templates/user_settings/edit.html.heex:134
msgid "Change language" msgid "Change language"
msgstr "Changer la langue" msgstr "Changer la langue"
#, elixir-autogen, elixir-format
#: lib/cannery_web/live/ammo_group_live/show.html.heex:55
msgid "View in Catalog"
msgstr ""
#, elixir-autogen, elixir-format
#: lib/cannery_web/live/ammo_group_live/index.html.heex:31
msgid "add an ammo type first"
msgstr ""

View File

@ -24,14 +24,14 @@ msgstr ""
## 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.
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
#: lib/cannery_web/live/home_live.ex:56 #: lib/cannery_web/live/home_live.ex:64
msgid "%{name} lets you easily keep an eye on your ammo levels before and after range day" msgid "%{name} 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"
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
#: lib/cannery_web/live/home_live.ex:78 #: lib/cannery_web/live/home_live.ex:86
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"
@ -41,12 +41,12 @@ msgid "Admins"
msgstr "Administrateur·ices" msgstr "Administrateur·ices"
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
#: lib/cannery_web/live/home_live.ex:92 #: lib/cannery_web/live/home_live.ex:100
msgid "Admins:" msgid "Admins:"
msgstr "Administrateur·ices:" msgstr "Administrateur·ices:"
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
#: lib/cannery_web/components/topbar.ex:50 #: lib/cannery_web/components/topbar.ex:62
#: lib/cannery_web/live/ammo_group_live/index.html.heex:3 #: lib/cannery_web/live/ammo_group_live/index.html.heex:3
#: lib/cannery_web/live/range_live/index.ex:80 #: lib/cannery_web/live/range_live/index.ex:80
msgid "Ammo" msgid "Ammo"
@ -54,7 +54,7 @@ msgstr "Munition"
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
#: lib/cannery_web/live/ammo_group_live/form_component.html.heex:21 #: lib/cannery_web/live/ammo_group_live/form_component.html.heex:21
#: lib/cannery_web/live/ammo_group_live/index.ex:80 #: lib/cannery_web/live/ammo_group_live/index.ex:81
msgid "Ammo type" msgid "Ammo type"
msgstr "Type de munition" msgstr "Type de munition"
@ -65,7 +65,7 @@ msgid "Average Price paid"
msgstr "Prix acheté moyen" msgstr "Prix acheté moyen"
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
#: lib/cannery_web/live/tag_live/form_component.ex:54 #: lib/cannery_web/live/tag_live/form_component.ex:79
msgid "Background color" msgid "Background color"
msgstr "Couleur de fond" msgstr "Couleur de fond"
@ -119,12 +119,12 @@ msgstr "Matériau de la caisse"
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
#: lib/cannery_web/components/move_ammo_group_component.ex:67 #: lib/cannery_web/components/move_ammo_group_component.ex:67
#: lib/cannery_web/live/ammo_group_live/form_component.html.heex:48 #: lib/cannery_web/live/ammo_group_live/form_component.html.heex:48
#: lib/cannery_web/live/ammo_group_live/index.ex:85 #: lib/cannery_web/live/ammo_group_live/index.ex:86
msgid "Container" msgid "Container"
msgstr "Conteneur" msgstr "Conteneur"
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
#: lib/cannery_web/components/topbar.ex:44 #: lib/cannery_web/components/topbar.ex:50
#: lib/cannery_web/live/container_live/index.ex:36 #: lib/cannery_web/live/container_live/index.ex:36
#: lib/cannery_web/live/container_live/index.html.heex:3 #: lib/cannery_web/live/container_live/index.html.heex:3
msgid "Containers" msgid "Containers"
@ -139,7 +139,7 @@ msgstr "Corrosive"
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
#: lib/cannery_web/live/ammo_group_live/form_component.html.heex:27 #: lib/cannery_web/live/ammo_group_live/form_component.html.heex:27
#: lib/cannery_web/live/ammo_group_live/index.ex:81 #: lib/cannery_web/live/ammo_group_live/index.ex:82
msgid "Count" msgid "Count"
msgstr "Quantité" msgstr "Quantité"
@ -167,13 +167,12 @@ msgid "Disable"
msgstr "Désactiver" msgstr "Désactiver"
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
#: lib/cannery_web/live/home_live.ex:53 #: lib/cannery_web/live/home_live.ex:61
msgid "Easy to Use:" msgid "Easy to Use:"
msgstr "Simple à utiliser:" msgstr "Simple à utiliser:"
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
#: 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/show.ex:40
msgid "Edit Ammo group" msgid "Edit Ammo group"
msgstr "Éditer le groupe de munition" msgstr "Éditer le groupe de munition"
@ -223,7 +222,7 @@ msgid "Incendiary"
msgstr "Incendiaire" msgstr "Incendiaire"
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
#: lib/cannery_web/live/home_live.ex:87 #: lib/cannery_web/live/home_live.ex:95
msgid "Instance Information" msgid "Instance Information"
msgstr "Information de linstance" msgstr "Information de linstance"
@ -233,12 +232,12 @@ msgid "Invite Disabled"
msgstr "Invitation désactivée" msgstr "Invitation désactivée"
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
#: lib/cannery_web/live/home_live.ex:118 #: lib/cannery_web/live/home_live.ex:126
msgid "Invite Only" msgid "Invite Only"
msgstr "Uniquement sur invitation" msgstr "Uniquement sur invitation"
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
#: lib/cannery_web/components/topbar.ex:69 #: lib/cannery_web/components/topbar.ex:75
#: lib/cannery_web/live/invite_live/index.ex:41 #: 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
msgid "Invites" msgid "Invites"
@ -266,11 +265,6 @@ msgstr "Localisation:"
msgid "Magazine, Clip, Ammo Box, etc" msgid "Magazine, Clip, Ammo Box, etc"
msgstr "Chargeur, lame-chargeur, boite de munition, etc." msgstr "Chargeur, lame-chargeur, boite de munition, etc."
#, elixir-autogen, elixir-format
#: lib/cannery_web/components/topbar.ex:56
msgid "Manage"
msgstr "Gérer"
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
#: lib/cannery_web/live/ammo_type_live/form_component.html.heex:148 #: lib/cannery_web/live/ammo_type_live/form_component.html.heex:148
#: lib/cannery_web/live/ammo_type_live/index.ex:73 #: lib/cannery_web/live/ammo_type_live/index.ex:73
@ -293,7 +287,7 @@ msgstr "Ma superbe boite de munition"
#: lib/cannery_web/live/ammo_type_live/index.ex:51 #: lib/cannery_web/live/ammo_type_live/index.ex:51
#: lib/cannery_web/live/container_live/form_component.html.heex:20 #: lib/cannery_web/live/container_live/form_component.html.heex:20
#: lib/cannery_web/live/invite_live/form_component.html.heex:20 #: lib/cannery_web/live/invite_live/form_component.html.heex:20
#: lib/cannery_web/live/tag_live/form_component.ex:50 #: lib/cannery_web/live/tag_live/form_component.ex:75
msgid "Name" msgid "Name"
msgstr "Nom" msgstr "Nom"
@ -332,11 +326,6 @@ msgstr "Aucun type de munition"
msgid "No ammo for this type" msgid "No ammo for this type"
msgstr "Aucune munition pour ce type" msgstr "Aucune munition pour ce type"
#, elixir-autogen, elixir-format
#: lib/cannery_web/live/container_live/show.html.heex:78
msgid "No ammo groups in this container"
msgstr "Aucun groupe de munition pour ce conteneur"
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
#: lib/cannery_web/live/container_live/index.html.heex:8 #: lib/cannery_web/live/container_live/index.html.heex:8
msgid "No containers" msgid "No containers"
@ -382,7 +371,7 @@ msgstr "Pression"
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
#: lib/cannery_web/live/ammo_group_live/form_component.html.heex:34 #: lib/cannery_web/live/ammo_group_live/form_component.html.heex:34
#: lib/cannery_web/live/ammo_group_live/index.ex:82 #: lib/cannery_web/live/ammo_group_live/index.ex:83
msgid "Price paid" msgid "Price paid"
msgstr "Prix payé" msgstr "Prix payé"
@ -399,17 +388,17 @@ msgid "Primer type"
msgstr "Type damorce" msgstr "Type damorce"
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
#: lib/cannery_web/live/home_live.ex:117 #: lib/cannery_web/live/home_live.ex:125
msgid "Public Signups" msgid "Public Signups"
msgstr "Enregistrements publics" msgstr "Enregistrements publics"
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
#: lib/cannery_web/live/home_live.ex:65 #: lib/cannery_web/live/home_live.ex:73
msgid "Secure:" msgid "Secure:"
msgstr "Sécurisé:" msgstr "Sécurisé:"
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
#: lib/cannery_web/live/home_live.ex:68 #: lib/cannery_web/live/home_live.ex:76
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 ""
"Auto-hébergez votre propre instance ou utilisez celle dune personne à " "Auto-hébergez votre propre instance ou utilisez celle dune personne à "
@ -426,18 +415,13 @@ msgstr "Mettre illimité"
msgid "Settings" msgid "Settings"
msgstr "Paramètres" msgstr "Paramètres"
#, elixir-autogen, elixir-format
#: lib/cannery_web/live/ammo_group_live/show.ex:39
msgid "Show Ammo group"
msgstr "Montrer le groupe de munition"
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
#: lib/cannery_web/live/ammo_type_live/show.ex:44 #: lib/cannery_web/live/ammo_type_live/show.ex:44
msgid "Show Ammo type" msgid "Show Ammo type"
msgstr "Montrer le type de munition" msgstr "Montrer le type de munition"
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
#: lib/cannery_web/live/home_live.ex:75 #: lib/cannery_web/live/home_live.ex:83
msgid "Simple:" msgid "Simple:"
msgstr "Simple:" msgstr "Simple:"
@ -452,7 +436,7 @@ msgid "Stored in"
msgstr "Est stocké dans" msgstr "Est stocké dans"
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
#: lib/cannery_web/components/topbar.ex:38 #: lib/cannery_web/components/topbar.ex:44
#: lib/cannery_web/live/tag_live/index.ex:32 #: lib/cannery_web/live/tag_live/index.ex:32
#: lib/cannery_web/live/tag_live/index.html.heex:3 #: lib/cannery_web/live/tag_live/index.html.heex:3
msgid "Tags" msgid "Tags"
@ -466,20 +450,15 @@ msgstr ""
"organiser" "organiser"
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
#: lib/cannery_web/live/tag_live/form_component.ex:60 #: lib/cannery_web/live/tag_live/form_component.ex:85
msgid "Text color" msgid "Text color"
msgstr "Couleur du texte" msgstr "Couleur du texte"
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
#: lib/cannery_web/live/home_live.ex:44 #: lib/cannery_web/live/home_live.ex:52
msgid "The self-hosted firearm tracker website" msgid "The self-hosted firearm tracker website"
msgstr "Le site web de suivi darme à feux auto-hébergé" msgstr "Le site web de suivi darme à feux auto-hébergé"
#, elixir-autogen, elixir-format
#: lib/cannery_web/live/ammo_group_live/show.html.heex:108
msgid "This ammo group is not in a container"
msgstr "Ce groupe de munition nest pas dans un conteneur"
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
#: lib/cannery_web/live/ammo_type_live/form_component.html.heex:132 #: lib/cannery_web/live/ammo_type_live/form_component.html.heex:132
#: lib/cannery_web/live/ammo_type_live/index.ex:69 #: lib/cannery_web/live/ammo_type_live/index.ex:69
@ -515,23 +494,23 @@ msgid "Uses left"
msgstr "Utilisations restantes" msgstr "Utilisations restantes"
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
#: lib/cannery_web/live/home_live.ex:40 #: lib/cannery_web/live/home_live.ex:48
msgid "Welcome to %{name}" msgid "Welcome to %{name}"
msgstr "Bienvenue à %{name}" msgstr "Bienvenue à %{name}"
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
#: lib/cannery_web/live/home_live.ex:69 #: lib/cannery_web/live/home_live.ex:77
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"
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
#: lib/cannery_web/live/container_live/show.html.heex:49 #: lib/cannery_web/live/container_live/show.html.heex:61
msgid "No tags for this container" msgid "No tags for this container"
msgstr "Aucun tag pour ce conteneur" msgstr "Aucun tag pour ce conteneur"
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
#: lib/cannery_web/components/topbar.ex:62 #: lib/cannery_web/components/topbar.ex:68
#: lib/cannery_web/live/ammo_group_live/index.ex:84 #: lib/cannery_web/live/ammo_group_live/index.ex:85
msgid "Range" msgid "Range"
msgstr "Portée" msgstr "Portée"
@ -574,11 +553,6 @@ msgstr "Désélectionner pour le stand"
msgid "Record shots" msgid "Record shots"
msgstr "Tirs enregistrés" msgstr "Tirs enregistrés"
#, elixir-autogen, elixir-format
#: lib/cannery_web/live/ammo_type_live/index.html.heex:3
msgid "Ammo Types"
msgstr "Types de munition"
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
#: lib/cannery_web/live/ammo_group_live/index.ex:49 #: lib/cannery_web/live/ammo_group_live/index.ex:49
msgid "Ammo groups" msgid "Ammo groups"
@ -624,7 +598,6 @@ msgstr "Enregistrements de tir"
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
#: lib/cannery_web/live/ammo_group_live/index.ex:32 #: lib/cannery_web/live/ammo_group_live/index.ex:32
#: lib/cannery_web/live/ammo_group_live/show.ex:38
msgid "Move Ammo group" msgid "Move Ammo group"
msgstr "Déplacer le groupe de munition" msgstr "Déplacer le groupe de munition"
@ -645,7 +618,7 @@ msgstr "Évènements de tir"
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
#: lib/cannery_web/components/ammo_group_card.ex:48 #: lib/cannery_web/components/ammo_group_card.ex:48
#: lib/cannery_web/live/ammo_group_live/index.ex:118 #: lib/cannery_web/live/ammo_group_live/index.ex:125
#: 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:44
#: lib/cannery_web/live/ammo_type_live/index.ex:114 #: lib/cannery_web/live/ammo_type_live/index.ex:114
@ -710,12 +683,12 @@ msgid "New password"
msgstr "Nouveau mot de passe" msgstr "Nouveau mot de passe"
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
#: lib/cannery_web/live/ammo_group_live/index.ex:141 #: lib/cannery_web/live/ammo_group_live/index.ex:148
msgid "Stage" msgid "Stage"
msgstr "Sélectionné" msgstr "Sélectionné"
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
#: lib/cannery_web/live/ammo_group_live/index.ex:141 #: lib/cannery_web/live/ammo_group_live/index.ex:148
msgid "Unstage" msgid "Unstage"
msgstr "Désélectionner" msgstr "Désélectionner"
@ -749,7 +722,8 @@ msgid "Edit %{name} tags"
msgstr "Éditer les tags de %{name}" msgstr "Éditer les tags de %{name}"
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
#: lib/cannery_web/components/container_card.ex:50 #: lib/cannery_web/components/container_card.ex:55
#: lib/cannery_web/live/container_live/show.html.heex:32
msgid "Rounds:" msgid "Rounds:"
msgstr "Cartouches:" msgstr "Cartouches:"
@ -765,7 +739,7 @@ msgid "No cost information"
msgstr "Aucune information de prix" msgstr "Aucune information de prix"
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
#: lib/cannery_web/live/ammo_group_live/index.ex:83 #: lib/cannery_web/live/ammo_group_live/index.ex:84
msgid "% left" msgid "% left"
msgstr "%restante" msgstr "%restante"
@ -851,7 +825,7 @@ msgid "Ammo types"
msgstr "Types de munition" msgstr "Types de munition"
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
#: lib/cannery_web/live/ammo_group_live/index.ex:86 #: lib/cannery_web/live/ammo_group_live/index.ex:87
msgid "Added on" msgid "Added on"
msgstr "Ajouté le" msgstr "Ajouté le"
@ -891,21 +865,74 @@ msgid "Language"
msgstr "Langue" msgstr "Langue"
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
#: lib/cannery_web/live/home_live.ex:139 #: lib/cannery_web/live/home_live.ex:147
msgid "Get involved!" msgid "Get involved!"
msgstr "Impliquez-vous!" msgstr "Impliquez-vous!"
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
#: lib/cannery_web/live/home_live.ex:156 #: lib/cannery_web/live/home_live.ex:164
msgid "Help translate" msgid "Help translate"
msgstr "Aider à la traduction" msgstr "Aider à la traduction"
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
#: lib/cannery_web/live/home_live.ex:165 #: lib/cannery_web/live/home_live.ex:173
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é"
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
#: lib/cannery_web/live/home_live.ex:147 #: lib/cannery_web/live/home_live.ex:155
msgid "View the source code" msgid "View the source code"
msgstr "Voir le code source" msgstr "Voir le code source"
#, elixir-autogen, elixir-format
#: lib/cannery_web/components/topbar.ex:56
#: lib/cannery_web/live/ammo_type_live/index.html.heex:3
msgid "Catalog"
msgstr ""
#, elixir-autogen, elixir-format, fuzzy
#: lib/cannery_web/live/ammo_group_live/show.ex:40
msgid "Edit Ammo"
msgstr "Éditer le type de munition"
#, elixir-autogen, elixir-format, fuzzy
#: lib/cannery_web/live/ammo_group_live/show.ex:38
msgid "Move Ammo"
msgstr "Déplacer munition"
#, elixir-autogen, elixir-format, fuzzy
#: lib/cannery_web/live/container_live/show.html.heex:90
msgid "No ammo in this container"
msgstr "Aucun groupe de munition pour ce conteneur"
#, elixir-autogen, elixir-format, fuzzy
#: lib/cannery_web/live/ammo_group_live/show.ex:39
msgid "Show Ammo"
msgstr "Montrer le type de munition"
#, elixir-autogen, elixir-format, fuzzy
#: lib/cannery_web/live/ammo_group_live/show.html.heex:108
msgid "This ammo is not in a container"
msgstr "Ce groupe de munition nest pas dans un conteneur"
#, elixir-autogen, elixir-format
#: lib/cannery_web/components/container_card.ex:50
#: lib/cannery_web/live/container_live/show.html.heex:27
msgid "Packs:"
msgstr ""
#, elixir-autogen, elixir-format
#: lib/cannery_web/components/topbar.ex:24
#: lib/cannery_web/live/home_live.ex:42
msgid "Cannery logo"
msgstr ""
#, elixir-autogen, elixir-format
#: lib/cannery_web/live/home_live.ex:44
msgid "isn't he cute >:3"
msgstr ""
#, elixir-autogen, elixir-format
#: lib/cannery_web/live/invite_live/form_component.html.heex:28
msgid "Leave \"Uses left\" blank to make invite unlimited"
msgstr ""

View File

@ -24,7 +24,7 @@ msgstr ""
## 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.
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
#: lib/cannery/containers.ex:122 #: lib/cannery/containers.ex:140
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é"
@ -153,13 +153,13 @@ msgid "Tag could not be added"
msgstr "Le tag na pas pu être ajouté" msgstr "Le tag na pas pu être ajouté"
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
#: lib/cannery/activity_log.ex:125 #: lib/cannery/activity_log/shot_group.ex:115
msgid "Count must be at least 1" msgid "Count must be at least 1"
msgstr "Le nombre doit être au moins égal à 1" msgstr "Le nombre doit être au moins égal à 1"
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
#: lib/cannery/activity_log.ex:73 #: lib/cannery/activity_log/shot_group.ex:74
#: lib/cannery/activity_log.ex:120 #: lib/cannery/activity_log/shot_group.ex:111
msgid "Count must be less than %{count}" msgid "Count must be less than %{count}"
msgstr "La quantité doit être inférieur à %{count}" msgstr "La quantité doit être inférieur à %{count}"
@ -177,11 +177,26 @@ msgid "Tag could not be removed"
msgstr "Le tag na pas pu être retiré" msgstr "Le tag na pas pu être retiré"
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
#: lib/cannery_web/live/ammo_group_live/form_component.ex:126 #: lib/cannery_web/live/ammo_group_live/form_component.ex:156
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"
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
#: lib/cannery_web/live/ammo_group_live/form_component.ex:111 #: lib/cannery_web/live/ammo_group_live/form_component.ex:141
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}"
#, elixir-autogen, elixir-format
#: lib/cannery/ammo.ex:407
msgid "Invalid multiplier"
msgstr ""
#, elixir-autogen, elixir-format
#: lib/cannery/ammo/ammo_group.ex:84
msgid "Please select an ammo type and container"
msgstr ""
#, elixir-autogen, elixir-format
#: lib/cannery/activity_log/shot_group.ex:69
msgid "Please select a valid user and ammo group"
msgstr ""

View File

@ -24,10 +24,10 @@ msgstr ""
## 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.
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
#: lib/cannery_web/live/ammo_type_live/form_component.ex:64 #: lib/cannery_web/live/ammo_type_live/form_component.ex:85
#: lib/cannery_web/live/container_live/form_component.ex:65 #: lib/cannery_web/live/container_live/form_component.ex:85
#: lib/cannery_web/live/invite_live/form_component.ex:59 #: lib/cannery_web/live/invite_live/form_component.ex:80
#: lib/cannery_web/live/tag_live/form_component.ex:101 #: lib/cannery_web/live/tag_live/form_component.ex:126
msgid "%{name} created successfully" msgid "%{name} created successfully"
msgstr "%{name} créé· avec succès" msgstr "%{name} créé· avec succès"
@ -62,10 +62,10 @@ msgid "%{name} updated succesfully"
msgstr "%{name} mis à jour avec succès" msgstr "%{name} mis à jour avec succès"
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
#: lib/cannery_web/live/ammo_type_live/form_component.ex:46 #: lib/cannery_web/live/ammo_type_live/form_component.ex:67
#: lib/cannery_web/live/container_live/form_component.ex:47 #: lib/cannery_web/live/container_live/form_component.ex:67
#: lib/cannery_web/live/invite_live/form_component.ex:41 #: lib/cannery_web/live/invite_live/form_component.ex:62
#: lib/cannery_web/live/tag_live/form_component.ex:83 #: lib/cannery_web/live/tag_live/form_component.ex:108
msgid "%{name} updated successfully" msgid "%{name} updated successfully"
msgstr "%{name} mis à jour avec succès" msgstr "%{name} mis à jour avec succès"
@ -78,15 +78,9 @@ msgstr ""
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
#: lib/cannery_web/live/ammo_group_live/index.ex:56 #: lib/cannery_web/live/ammo_group_live/index.ex:56
#: lib/cannery_web/live/ammo_group_live/show.ex:50
msgid "Ammo group deleted succesfully" msgid "Ammo group deleted succesfully"
msgstr "Groupe de munition supprimé avec succès" msgstr "Groupe de munition supprimé avec succès"
#, elixir-autogen, elixir-format
#: lib/cannery_web/live/ammo_group_live/form_component.ex:88
msgid "Ammo group updated successfully"
msgstr "Groupe de munition mis à jour avec succès"
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
#: lib/cannery_web/live/invite_live/index.html.heex:102 #: lib/cannery_web/live/invite_live/index.html.heex:102
#: lib/cannery_web/live/invite_live/index.html.heex:131 #: lib/cannery_web/live/invite_live/index.html.heex:131
@ -95,9 +89,8 @@ 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!"
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
#: lib/cannery_web/live/ammo_type_live/show.html.heex:27
#: lib/cannery_web/live/container_live/index.html.heex:46 #: lib/cannery_web/live/container_live/index.html.heex:46
#: lib/cannery_web/live/container_live/show.html.heex:37 #: lib/cannery_web/live/container_live/show.html.heex:49
#: lib/cannery_web/live/tag_live/index.html.heex:38 #: lib/cannery_web/live/tag_live/index.html.heex:38
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}?"
@ -108,9 +101,8 @@ msgid "Are you sure you want to delete the invite for %{name}?"
msgstr "Êtes-vous certain·e de supprimer linvitation pour %{name}?" msgstr "Êtes-vous certain·e de supprimer linvitation pour %{name}?"
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
#: lib/cannery_web/live/ammo_group_live/index.ex:177 #: lib/cannery_web/live/ammo_group_live/index.ex:184
#: lib/cannery_web/live/ammo_group_live/show.html.heex:71 #: lib/cannery_web/live/ammo_group_live/show.html.heex:71
#: lib/cannery_web/live/ammo_type_live/index.ex:140
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?"
@ -120,7 +112,7 @@ 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?"
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
#: lib/cannery_web/components/topbar.ex:84 #: lib/cannery_web/components/topbar.ex:90
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?"
@ -169,7 +161,7 @@ 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"
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
#: lib/cannery_web/live/home_live.ex:96 #: lib/cannery_web/live/home_live.ex:104
msgid "Register to setup %{name}" msgid "Register to setup %{name}"
msgstr "Senregistrer pour mettre en place %{name}" msgstr "Senregistrer pour mettre en place %{name}"
@ -178,9 +170,9 @@ msgstr "Senregistrer pour mettre en place %{name}"
#: lib/cannery_web/live/ammo_group_live/form_component.html.heex:74 #: lib/cannery_web/live/ammo_group_live/form_component.html.heex:74
#: lib/cannery_web/live/ammo_type_live/form_component.html.heex:157 #: lib/cannery_web/live/ammo_type_live/form_component.html.heex:157
#: lib/cannery_web/live/container_live/form_component.html.heex:52 #: lib/cannery_web/live/container_live/form_component.html.heex:52
#: lib/cannery_web/live/invite_live/form_component.html.heex:30 #: lib/cannery_web/live/invite_live/form_component.html.heex:33
#: lib/cannery_web/live/range_live/form_component.html.heex:42 #: lib/cannery_web/live/range_live/form_component.html.heex:42
#: lib/cannery_web/live/tag_live/form_component.ex:68 #: lib/cannery_web/live/tag_live/form_component.ex:93
msgid "Saving..." msgid "Saving..."
msgstr "Sauvegarde en cours…" msgstr "Sauvegarde en cours…"
@ -212,7 +204,7 @@ msgid "Adding..."
msgstr "Ajout en cours…" msgstr "Ajout en cours…"
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
#: lib/cannery_web/components/add_shot_group_component.ex:68 #: lib/cannery_web/components/add_shot_group_component.ex:56
msgid "Shots recorded successfully" msgid "Shots recorded successfully"
msgstr "Tirs enregistré avec succès" msgstr "Tirs enregistré avec succès"
@ -221,11 +213,6 @@ msgstr "Tirs enregistré avec succès"
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?"
#, elixir-autogen, elixir-format
#: lib/cannery_web/live/range_live/index.ex:68
msgid "Ammo group unstaged succesfully"
msgstr "Groupe de munition désélectionner avec succès"
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
#: lib/cannery_web/live/ammo_group_live/show.ex:130 #: lib/cannery_web/live/ammo_group_live/show.ex:130
#: lib/cannery_web/live/range_live/index.ex:128 #: lib/cannery_web/live/range_live/index.ex:128
@ -264,8 +251,8 @@ msgid "%{name} removed successfully"
msgstr "%{name} retiré avec succès" msgstr "%{name} retiré avec succès"
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
#: lib/cannery_web/live/ammo_group_live/index.html.heex:15 #: lib/cannery_web/live/ammo_group_live/index.html.heex:17
#: lib/cannery_web/live/ammo_group_live/index.html.heex:33 #: lib/cannery_web/live/ammo_group_live/index.html.heex:28
msgid "You'll need to" msgid "You'll need to"
msgstr "Vous aurez besoin de" msgstr "Vous aurez besoin de"
@ -274,13 +261,6 @@ msgstr "Vous aurez besoin de"
msgid "Creating..." msgid "Creating..."
msgstr "Création en cours…" msgstr "Création en cours…"
#, elixir-autogen, elixir-format
#: lib/cannery_web/live/ammo_group_live/form_component.ex:147
msgid "Ammo group created successfully"
msgid_plural "Ammo groups created successfully"
msgstr[0] "Groupe de munition créé avec succès"
msgstr[1] "Groupes de munitions créé avec succès"
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
#: lib/cannery_web/templates/user_settings/edit.html.heex:136 #: lib/cannery_web/templates/user_settings/edit.html.heex:136
msgid "Are you sure you want to change your language?" msgid "Are you sure you want to change your language?"
@ -290,3 +270,31 @@ msgstr "Êtes-vous certain·e de vouloir changer votre langue?"
#: lib/cannery_web/controllers/user_settings_controller.ex:65 #: lib/cannery_web/controllers/user_settings_controller.ex:65
msgid "Language updated successfully." msgid "Language updated successfully."
msgstr "Langue mise à jour avec succès." msgstr "Langue mise à jour avec succès."
#, elixir-autogen, elixir-format, fuzzy
#: lib/cannery_web/live/ammo_group_live/show.ex:50
msgid "Ammo deleted succesfully"
msgstr "Groupe de munition supprimé avec succès"
#, elixir-autogen, elixir-format, fuzzy
#: lib/cannery_web/live/range_live/index.ex:68
msgid "Ammo unstaged succesfully"
msgstr "Groupe de munition désélectionner avec succès"
#, elixir-autogen, elixir-format, fuzzy
#: lib/cannery_web/live/ammo_group_live/form_component.ex:118
msgid "Ammo updated successfully"
msgstr "Groupe de munition mis à jour avec succès"
#, elixir-autogen, elixir-format, fuzzy
#: lib/cannery_web/live/ammo_group_live/form_component.ex:177
msgid "Ammo added successfully"
msgid_plural "Ammo added successfully"
msgstr[0] "Groupe de munition mis à jour avec succès"
msgstr[1] "Groupe de munition mis à jour avec succès"
#, elixir-autogen, elixir-format, fuzzy
#: lib/cannery_web/live/ammo_type_live/index.ex:140
#: lib/cannery_web/live/ammo_type_live/show.html.heex:27
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}?"

View File

@ -11,10 +11,10 @@ msgid ""
msgstr "" msgstr ""
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
#: lib/cannery_web/live/ammo_type_live/form_component.ex:64 #: lib/cannery_web/live/ammo_type_live/form_component.ex:85
#: lib/cannery_web/live/container_live/form_component.ex:65 #: lib/cannery_web/live/container_live/form_component.ex:85
#: lib/cannery_web/live/invite_live/form_component.ex:59 #: lib/cannery_web/live/invite_live/form_component.ex:80
#: lib/cannery_web/live/tag_live/form_component.ex:101 #: lib/cannery_web/live/tag_live/form_component.ex:126
msgid "%{name} created successfully" msgid "%{name} created successfully"
msgstr "" msgstr ""
@ -49,10 +49,10 @@ msgid "%{name} updated succesfully"
msgstr "" msgstr ""
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
#: lib/cannery_web/live/ammo_type_live/form_component.ex:46 #: lib/cannery_web/live/ammo_type_live/form_component.ex:67
#: lib/cannery_web/live/container_live/form_component.ex:47 #: lib/cannery_web/live/container_live/form_component.ex:67
#: lib/cannery_web/live/invite_live/form_component.ex:41 #: lib/cannery_web/live/invite_live/form_component.ex:62
#: lib/cannery_web/live/tag_live/form_component.ex:83 #: lib/cannery_web/live/tag_live/form_component.ex:108
msgid "%{name} updated successfully" msgid "%{name} updated successfully"
msgstr "" msgstr ""
@ -63,15 +63,9 @@ msgstr ""
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
#: lib/cannery_web/live/ammo_group_live/index.ex:56 #: lib/cannery_web/live/ammo_group_live/index.ex:56
#: lib/cannery_web/live/ammo_group_live/show.ex:50
msgid "Ammo group deleted succesfully" msgid "Ammo group deleted succesfully"
msgstr "" msgstr ""
#, elixir-autogen, elixir-format
#: lib/cannery_web/live/ammo_group_live/form_component.ex:88
msgid "Ammo group updated successfully"
msgstr ""
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
#: lib/cannery_web/live/invite_live/index.html.heex:102 #: lib/cannery_web/live/invite_live/index.html.heex:102
#: lib/cannery_web/live/invite_live/index.html.heex:131 #: lib/cannery_web/live/invite_live/index.html.heex:131
@ -79,9 +73,8 @@ msgid "Are you sure you want to delete %{email}? This action is permanent!"
msgstr "" msgstr ""
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
#: lib/cannery_web/live/ammo_type_live/show.html.heex:27
#: lib/cannery_web/live/container_live/index.html.heex:46 #: lib/cannery_web/live/container_live/index.html.heex:46
#: lib/cannery_web/live/container_live/show.html.heex:37 #: lib/cannery_web/live/container_live/show.html.heex:49
#: lib/cannery_web/live/tag_live/index.html.heex:38 #: lib/cannery_web/live/tag_live/index.html.heex:38
msgid "Are you sure you want to delete %{name}?" msgid "Are you sure you want to delete %{name}?"
msgstr "" msgstr ""
@ -92,9 +85,8 @@ msgid "Are you sure you want to delete the invite for %{name}?"
msgstr "" msgstr ""
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
#: lib/cannery_web/live/ammo_group_live/index.ex:177 #: lib/cannery_web/live/ammo_group_live/index.ex:184
#: lib/cannery_web/live/ammo_group_live/show.html.heex:71 #: lib/cannery_web/live/ammo_group_live/show.html.heex:71
#: lib/cannery_web/live/ammo_type_live/index.ex:140
msgid "Are you sure you want to delete this ammo?" msgid "Are you sure you want to delete this ammo?"
msgstr "" msgstr ""
@ -104,7 +96,7 @@ msgid "Are you sure you want to delete your account?"
msgstr "" msgstr ""
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
#: lib/cannery_web/components/topbar.ex:84 #: lib/cannery_web/components/topbar.ex:90
msgid "Are you sure you want to log out?" msgid "Are you sure you want to log out?"
msgstr "" msgstr ""
@ -149,7 +141,7 @@ msgid "Please check your email to verify your account"
msgstr "" msgstr ""
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
#: lib/cannery_web/live/home_live.ex:96 #: lib/cannery_web/live/home_live.ex:104
msgid "Register to setup %{name}" msgid "Register to setup %{name}"
msgstr "" msgstr ""
@ -158,9 +150,9 @@ msgstr ""
#: lib/cannery_web/live/ammo_group_live/form_component.html.heex:74 #: lib/cannery_web/live/ammo_group_live/form_component.html.heex:74
#: lib/cannery_web/live/ammo_type_live/form_component.html.heex:157 #: lib/cannery_web/live/ammo_type_live/form_component.html.heex:157
#: lib/cannery_web/live/container_live/form_component.html.heex:52 #: lib/cannery_web/live/container_live/form_component.html.heex:52
#: lib/cannery_web/live/invite_live/form_component.html.heex:30 #: lib/cannery_web/live/invite_live/form_component.html.heex:33
#: lib/cannery_web/live/range_live/form_component.html.heex:42 #: lib/cannery_web/live/range_live/form_component.html.heex:42
#: lib/cannery_web/live/tag_live/form_component.ex:68 #: lib/cannery_web/live/tag_live/form_component.ex:93
msgid "Saving..." msgid "Saving..."
msgstr "" msgstr ""
@ -190,7 +182,7 @@ msgid "Adding..."
msgstr "" msgstr ""
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
#: lib/cannery_web/components/add_shot_group_component.ex:68 #: lib/cannery_web/components/add_shot_group_component.ex:56
msgid "Shots recorded successfully" msgid "Shots recorded successfully"
msgstr "" msgstr ""
@ -199,11 +191,6 @@ msgstr ""
msgid "Are you sure you want to unstage this ammo?" msgid "Are you sure you want to unstage this ammo?"
msgstr "" msgstr ""
#, elixir-autogen, elixir-format
#: lib/cannery_web/live/range_live/index.ex:68
msgid "Ammo group unstaged succesfully"
msgstr ""
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
#: lib/cannery_web/live/ammo_group_live/show.ex:130 #: lib/cannery_web/live/ammo_group_live/show.ex:130
#: lib/cannery_web/live/range_live/index.ex:128 #: lib/cannery_web/live/range_live/index.ex:128
@ -242,8 +229,8 @@ msgid "%{name} removed successfully"
msgstr "" msgstr ""
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
#: lib/cannery_web/live/ammo_group_live/index.html.heex:15 #: lib/cannery_web/live/ammo_group_live/index.html.heex:17
#: lib/cannery_web/live/ammo_group_live/index.html.heex:33 #: lib/cannery_web/live/ammo_group_live/index.html.heex:28
msgid "You'll need to" msgid "You'll need to"
msgstr "" msgstr ""
@ -252,13 +239,6 @@ msgstr ""
msgid "Creating..." msgid "Creating..."
msgstr "" msgstr ""
#, elixir-autogen, elixir-format
#: lib/cannery_web/live/ammo_group_live/form_component.ex:147
msgid "Ammo group created successfully"
msgid_plural "Ammo groups created successfully"
msgstr[0] ""
msgstr[1] ""
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
#: lib/cannery_web/templates/user_settings/edit.html.heex:136 #: lib/cannery_web/templates/user_settings/edit.html.heex:136
msgid "Are you sure you want to change your language?" msgid "Are you sure you want to change your language?"
@ -268,3 +248,31 @@ msgstr ""
#: lib/cannery_web/controllers/user_settings_controller.ex:65 #: lib/cannery_web/controllers/user_settings_controller.ex:65
msgid "Language updated successfully." msgid "Language updated successfully."
msgstr "" msgstr ""
#, elixir-autogen, elixir-format
#: lib/cannery_web/live/ammo_group_live/show.ex:50
msgid "Ammo deleted succesfully"
msgstr ""
#, elixir-autogen, elixir-format
#: lib/cannery_web/live/range_live/index.ex:68
msgid "Ammo unstaged succesfully"
msgstr ""
#, elixir-autogen, elixir-format
#: lib/cannery_web/live/ammo_group_live/form_component.ex:118
msgid "Ammo updated successfully"
msgstr ""
#, elixir-autogen, elixir-format
#: lib/cannery_web/live/ammo_group_live/form_component.ex:177
msgid "Ammo added successfully"
msgid_plural "Ammo added successfully"
msgstr[0] ""
msgstr[1] ""
#, elixir-autogen, elixir-format
#: lib/cannery_web/live/ammo_type_live/index.ex:140
#: lib/cannery_web/live/ammo_type_live/show.html.heex:27
msgid "Are you sure you want to delete %{name}? This will delete all %{name} type ammo as well!"
msgstr ""

View File

@ -178,10 +178,5 @@ 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 "change_shot_group/1 returns a shot_group changeset",
%{shot_group: shot_group} do
assert %Ecto.Changeset{} = ActivityLog.change_shot_group(shot_group)
end
end end
end end

View File

@ -92,11 +92,6 @@ defmodule Cannery.AmmoTest do
assert {:ok, %AmmoType{}} = Ammo.delete_ammo_type(ammo_type, current_user) assert {:ok, %AmmoType{}} = Ammo.delete_ammo_type(ammo_type, current_user)
assert_raise Ecto.NoResultsError, fn -> Ammo.get_ammo_type!(ammo_type.id, current_user) end assert_raise Ecto.NoResultsError, fn -> Ammo.get_ammo_type!(ammo_type.id, current_user) end
end end
test "change_ammo_type/1 returns a ammo_type changeset",
%{ammo_type: ammo_type} do
assert %Changeset{} = Ammo.change_ammo_type(ammo_type)
end
end end
describe "ammo_groups" do describe "ammo_groups" do
@ -180,9 +175,5 @@ defmodule Cannery.AmmoTest do
Ammo.get_ammo_group!(ammo_group.id, current_user) Ammo.get_ammo_group!(ammo_group.id, current_user)
end end
end end
test "change_ammo_group/1 returns a ammo_group changeset", %{ammo_group: ammo_group} do
assert %Changeset{} = Ammo.change_ammo_group(ammo_group)
end
end end
end end

View File

@ -87,9 +87,5 @@ defmodule Cannery.ContainersTest do
Containers.get_container!(container.id, current_user) Containers.get_container!(container.id, current_user)
end end
end end
test "change_container/1 returns a container changeset", %{container: container} do
assert %Changeset{} = Containers.change_container(container)
end
end end
end end

View File

@ -68,9 +68,5 @@ defmodule Cannery.InvitesTest do
assert {:ok, %Invite{}} = Invites.delete_invite(invite, current_user) assert {:ok, %Invite{}} = Invites.delete_invite(invite, current_user)
assert_raise Ecto.NoResultsError, fn -> Invites.get_invite!(invite.id, current_user) end assert_raise Ecto.NoResultsError, fn -> Invites.get_invite!(invite.id, current_user) end
end end
test "change_invite/1 returns a invite changeset", %{invite: invite} do
assert %Changeset{} = Invites.change_invite(invite)
end
end end
end end

View File

@ -68,9 +68,5 @@ defmodule Cannery.TagsTest do
assert {:ok, %Tag{}} = Tags.delete_tag(tag, current_user) assert {:ok, %Tag{}} = Tags.delete_tag(tag, current_user)
assert_raise Ecto.NoResultsError, fn -> Tags.get_tag!(tag.id, current_user) end assert_raise Ecto.NoResultsError, fn -> Tags.get_tag!(tag.id, current_user) end
end end
test "change_tag/1 returns a tag changeset", %{tag: tag} do
assert %Changeset{} = Tags.change_tag(tag)
end
end end
end end

View File

@ -35,15 +35,15 @@ defmodule CanneryWeb.AmmoGroupLiveTest do
{:ok, _index_live, html} = live(conn, Routes.ammo_group_index_path(conn, :index)) {:ok, _index_live, html} = live(conn, Routes.ammo_group_index_path(conn, :index))
ammo_group = ammo_group |> Repo.preload(:ammo_type) ammo_group = ammo_group |> Repo.preload(:ammo_type)
assert html =~ gettext("Ammo groups") assert html =~ gettext("Ammo")
assert html =~ ammo_group.ammo_type.name assert html =~ ammo_group.ammo_type.name
end end
test "saves a single new ammo_group", %{conn: conn} do test "saves a single new ammo_group", %{conn: conn} do
{:ok, index_live, _html} = live(conn, Routes.ammo_group_index_path(conn, :index)) {:ok, index_live, _html} = live(conn, Routes.ammo_group_index_path(conn, :index))
assert index_live |> element("a", dgettext("actions", "New Ammo group")) |> render_click() =~ assert index_live |> element("a", dgettext("actions", "Add Ammo")) |> render_click() =~
gettext("New Ammo group") gettext("Add Ammo")
assert_patch(index_live, Routes.ammo_group_index_path(conn, :new)) assert_patch(index_live, Routes.ammo_group_index_path(conn, :new))
@ -57,7 +57,7 @@ defmodule CanneryWeb.AmmoGroupLiveTest do
|> render_submit() |> render_submit()
|> follow_redirect(conn, Routes.ammo_group_index_path(conn, :index)) |> follow_redirect(conn, Routes.ammo_group_index_path(conn, :index))
assert html =~ dgettext("prompts", "Ammo group created successfully") assert html =~ dgettext("prompts", "Ammo added successfully")
assert html =~ "42" assert html =~ "42"
end end
@ -66,8 +66,8 @@ defmodule CanneryWeb.AmmoGroupLiveTest do
{:ok, index_live, _html} = live(conn, Routes.ammo_group_index_path(conn, :index)) {:ok, index_live, _html} = live(conn, Routes.ammo_group_index_path(conn, :index))
assert index_live |> element("a", dgettext("actions", "New Ammo group")) |> render_click() =~ assert index_live |> element("a", dgettext("actions", "Add Ammo")) |> render_click() =~
gettext("New Ammo group") gettext("Add Ammo")
assert_patch(index_live, Routes.ammo_group_index_path(conn, :new)) assert_patch(index_live, Routes.ammo_group_index_path(conn, :new))
@ -83,15 +83,15 @@ defmodule CanneryWeb.AmmoGroupLiveTest do
|> render_submit() |> render_submit()
|> follow_redirect(conn, Routes.ammo_group_index_path(conn, :index)) |> follow_redirect(conn, Routes.ammo_group_index_path(conn, :index))
assert html =~ dgettext("prompts", "Ammo groups created successfully") assert html =~ dgettext("prompts", "Ammo added successfully")
assert Ammo.list_ammo_groups(current_user) |> Enum.count() == multiplier + 1 assert Ammo.list_ammo_groups(current_user) |> Enum.count() == multiplier + 1
end end
test "does not save invalid number of new ammo_groups", %{conn: conn} do test "does not save invalid number of new ammo_groups", %{conn: conn} do
{:ok, index_live, _html} = live(conn, Routes.ammo_group_index_path(conn, :index)) {:ok, index_live, _html} = live(conn, Routes.ammo_group_index_path(conn, :index))
assert index_live |> element("a", dgettext("actions", "New Ammo group")) |> render_click() =~ assert index_live |> element("a", dgettext("actions", "Add Ammo")) |> render_click() =~
gettext("New Ammo group") gettext("Add Ammo")
assert_patch(index_live, Routes.ammo_group_index_path(conn, :new)) assert_patch(index_live, Routes.ammo_group_index_path(conn, :new))
@ -150,7 +150,7 @@ defmodule CanneryWeb.AmmoGroupLiveTest do
assert index_live assert index_live
|> element("[data-qa=\"edit-#{ammo_group.id}\"]") |> element("[data-qa=\"edit-#{ammo_group.id}\"]")
|> render_click() =~ |> render_click() =~
gettext("Edit Ammo group") gettext("Edit Ammo")
assert_patch(index_live, Routes.ammo_group_index_path(conn, :edit, ammo_group)) assert_patch(index_live, Routes.ammo_group_index_path(conn, :edit, ammo_group))
@ -164,7 +164,7 @@ defmodule CanneryWeb.AmmoGroupLiveTest do
|> render_submit() |> render_submit()
|> follow_redirect(conn, Routes.ammo_group_index_path(conn, :index)) |> follow_redirect(conn, Routes.ammo_group_index_path(conn, :index))
assert html =~ dgettext("prompts", "Ammo group updated successfully") assert html =~ dgettext("prompts", "Ammo updated successfully")
assert html =~ "43" assert html =~ "43"
end end
@ -186,7 +186,7 @@ defmodule CanneryWeb.AmmoGroupLiveTest do
{:ok, _show_live, html} = live(conn, Routes.ammo_group_show_path(conn, :show, ammo_group)) {:ok, _show_live, html} = live(conn, Routes.ammo_group_show_path(conn, :show, ammo_group))
ammo_group = ammo_group |> Repo.preload(:ammo_type) ammo_group = ammo_group |> Repo.preload(:ammo_type)
assert html =~ gettext("Show Ammo group") assert html =~ gettext("Show Ammo")
assert html =~ ammo_group.ammo_type.name assert html =~ ammo_group.ammo_type.name
end end
@ -196,7 +196,7 @@ defmodule CanneryWeb.AmmoGroupLiveTest do
assert show_live assert show_live
|> element("[data-qa=\"edit\"]") |> element("[data-qa=\"edit\"]")
|> render_click() =~ |> render_click() =~
gettext("Edit Ammo group") gettext("Edit Ammo")
assert_patch(show_live, Routes.ammo_group_show_path(conn, :edit, ammo_group)) assert_patch(show_live, Routes.ammo_group_show_path(conn, :edit, ammo_group))
@ -210,7 +210,7 @@ defmodule CanneryWeb.AmmoGroupLiveTest do
|> render_submit() |> render_submit()
|> follow_redirect(conn, Routes.ammo_group_show_path(conn, :show, ammo_group)) |> follow_redirect(conn, Routes.ammo_group_show_path(conn, :show, ammo_group))
assert html =~ dgettext("prompts", "Ammo group updated successfully") assert html =~ dgettext("prompts", "Ammo updated successfully")
assert html =~ "some updated notes" assert html =~ "some updated notes"
end end