Compare commits
32 Commits
6083fbca4f
...
0.6.0
Author | SHA1 | Date | |
---|---|---|---|
a3e7e3a86d | |||
0c088ed06d | |||
1c7721887f | |||
0dbd1af553 | |||
c828def2b2 | |||
7ef582510e | |||
726ede7e46 | |||
8fa75e2559 | |||
0d6f6de7df | |||
76d3554b4b | |||
09394ea408 | |||
3dd6430105 | |||
53bb0ddb03 | |||
e3ff04ced3 | |||
db4b3fab24 | |||
d86f5a6d98 | |||
9420337228 | |||
e2a4dc4b92 | |||
175eef95fb | |||
ba8d7988b3 | |||
1f017ced4a | |||
67304ae22e | |||
30da5bc4f7 | |||
580d703f12 | |||
cb4de9a6ff | |||
ca4b5b9822 | |||
13bf8ab2b1 | |||
ffd1029e78 | |||
1d8f3360d8 | |||
6b565abf93 | |||
239b15a782 | |||
cfbec3189c |
@ -16,7 +16,7 @@ steps:
|
|||||||
- assets/node_modules/
|
- assets/node_modules/
|
||||||
|
|
||||||
- name: test
|
- name: test
|
||||||
image: elixir:1.13.4-alpine
|
image: elixir:1.14.1-alpine
|
||||||
environment:
|
environment:
|
||||||
TEST_DATABASE_URL: ecto://postgres:postgres@database/cannery_test
|
TEST_DATABASE_URL: ecto://postgres:postgres@database/cannery_test
|
||||||
HOST: testing.example.tld
|
HOST: testing.example.tld
|
||||||
@ -29,7 +29,7 @@ steps:
|
|||||||
- npm --prefix ./assets ci --progress=false --no-audit --loglevel=error
|
- npm --prefix ./assets ci --progress=false --no-audit --loglevel=error
|
||||||
- npm run --prefix ./assets deploy
|
- npm run --prefix ./assets deploy
|
||||||
- mix do phx.digest, gettext.extract
|
- mix do phx.digest, gettext.extract
|
||||||
- mix test
|
- mix test.all
|
||||||
|
|
||||||
- name: build and publish stable
|
- name: build and publish stable
|
||||||
image: thegeeklab/drone-docker-buildx
|
image: thegeeklab/drone-docker-buildx
|
||||||
@ -38,7 +38,7 @@ steps:
|
|||||||
repo: shibaobun/cannery
|
repo: shibaobun/cannery
|
||||||
purge: true
|
purge: true
|
||||||
compress: true
|
compress: true
|
||||||
platforms: linux/amd64,linux/arm64,linux/arm/v7
|
platforms: linux/amd64,linux/arm/v7
|
||||||
username:
|
username:
|
||||||
from_secret: docker_username
|
from_secret: docker_username
|
||||||
password:
|
password:
|
||||||
@ -55,7 +55,7 @@ steps:
|
|||||||
repo: shibaobun/cannery
|
repo: shibaobun/cannery
|
||||||
purge: true
|
purge: true
|
||||||
compress: true
|
compress: true
|
||||||
platforms: linux/amd64,linux/arm64,linux/arm/v7
|
platforms: linux/amd64,linux/arm/v7
|
||||||
username:
|
username:
|
||||||
from_secret: docker_username
|
from_secret: docker_username
|
||||||
password:
|
password:
|
||||||
|
@ -1,3 +1,3 @@
|
|||||||
elixir 1.13.4-otp-24
|
elixir 1.14.1-otp-25
|
||||||
erlang 24.2
|
erlang 25.1.2
|
||||||
nodejs 16.13.2
|
nodejs 18.12.1
|
||||||
|
12
CHANGELOG.md
12
CHANGELOG.md
@ -1,14 +1,24 @@
|
|||||||
# v0.5.5
|
# v0.6.0
|
||||||
- Update translations
|
- Update translations
|
||||||
|
- Display used-up date on used-up ammo
|
||||||
- Make ammo index page a bit more compact
|
- Make ammo index page a bit more compact
|
||||||
- Make ammo index page filter used-up ammo
|
- Make ammo index page filter used-up ammo
|
||||||
- Make ammo catalog page include ammo count
|
- Make ammo catalog page include ammo count
|
||||||
- Make ammo type show page a bit more compact
|
- Make ammo type show page a bit more compact
|
||||||
- Make ammo type show page include container names for each ammo
|
- Make ammo type show page include container names for each ammo
|
||||||
- Make ammo type show page filter used-up ammo
|
- Make ammo type show page filter used-up ammo
|
||||||
|
- Make container index page optionally display a table
|
||||||
- Make container show page a bit more compact
|
- Make container show page a bit more compact
|
||||||
- Make container show page filter used-up ammo
|
- Make container show page filter used-up ammo
|
||||||
- Forgot to add the logo as the favicon whoops
|
- Forgot to add the logo as the favicon whoops
|
||||||
|
- Add graph to range page
|
||||||
|
- Add JSON export of data
|
||||||
|
- Add ammo cloning
|
||||||
|
- Add ammo type cloning
|
||||||
|
- Add container cloning
|
||||||
|
- Fix bug with moving ammo packs between containers
|
||||||
|
- Add button to set rounds left to 0 when creating a shot group
|
||||||
|
- Update project dependencies
|
||||||
|
|
||||||
# v0.5.4
|
# v0.5.4
|
||||||
- Rename "Ammo" tab to "Catalog", and "Manage" tab is now "Ammo"
|
- Rename "Ammo" tab to "Catalog", and "Manage" tab is now "Ammo"
|
||||||
|
@ -1,4 +1,4 @@
|
|||||||
FROM elixir:1.13.4-alpine AS build
|
FROM elixir:1.14.1-alpine AS build
|
||||||
|
|
||||||
# install build dependencies
|
# install build dependencies
|
||||||
RUN apk add --no-cache build-base npm git python3
|
RUN apk add --no-cache build-base npm git python3
|
||||||
|
@ -26,6 +26,7 @@ import { Socket } from 'phoenix'
|
|||||||
import { LiveSocket } from 'phoenix_live_view'
|
import { LiveSocket } from 'phoenix_live_view'
|
||||||
import topbar from '../vendor/topbar'
|
import topbar from '../vendor/topbar'
|
||||||
import MaintainAttrs from './maintain_attrs'
|
import MaintainAttrs from './maintain_attrs'
|
||||||
|
import ShotLogChart from './shot_log_chart'
|
||||||
import Alpine from 'alpinejs'
|
import Alpine from 'alpinejs'
|
||||||
|
|
||||||
const csrfToken = document.querySelector("meta[name='csrf-token']").getAttribute('content')
|
const csrfToken = document.querySelector("meta[name='csrf-token']").getAttribute('content')
|
||||||
@ -36,7 +37,7 @@ const liveSocket = new LiveSocket('/live', Socket, {
|
|||||||
}
|
}
|
||||||
},
|
},
|
||||||
params: { _csrf_token: csrfToken },
|
params: { _csrf_token: csrfToken },
|
||||||
hooks: { MaintainAttrs }
|
hooks: { MaintainAttrs, ShotLogChart }
|
||||||
})
|
})
|
||||||
|
|
||||||
// alpine.js
|
// alpine.js
|
||||||
@ -66,3 +67,8 @@ window.addEventListener('cannery:clipcopy', (event) => {
|
|||||||
window.alert('Sorry, your browser does not support clipboard copy.')
|
window.alert('Sorry, your browser does not support clipboard copy.')
|
||||||
}
|
}
|
||||||
})
|
})
|
||||||
|
|
||||||
|
// Set input value to 0
|
||||||
|
window.addEventListener('cannery:set-zero', (event) => {
|
||||||
|
event.target.value = 0
|
||||||
|
})
|
||||||
|
83
assets/js/shot_log_chart.js
Normal file
83
assets/js/shot_log_chart.js
Normal file
@ -0,0 +1,83 @@
|
|||||||
|
import { Chart, Title, Tooltip, Legend, LineController, LineElement, PointElement, TimeScale, LinearScale } from 'chart.js'
|
||||||
|
import 'chartjs-adapter-date-fns'
|
||||||
|
Chart.register(Title, Tooltip, Legend, LineController, LineElement, PointElement, TimeScale, LinearScale)
|
||||||
|
|
||||||
|
export default {
|
||||||
|
initalizeChart (el) {
|
||||||
|
const data = JSON.parse(el.dataset.chartData)
|
||||||
|
|
||||||
|
this.el.chart = new Chart(el, {
|
||||||
|
type: 'line',
|
||||||
|
data: {
|
||||||
|
datasets: [{
|
||||||
|
label: el.dataset.label,
|
||||||
|
data: data.map(({ date, count, labels }) => ({
|
||||||
|
labels,
|
||||||
|
x: date,
|
||||||
|
y: count
|
||||||
|
})),
|
||||||
|
backgroundColor: el.dataset.color,
|
||||||
|
borderColor: el.dataset.color,
|
||||||
|
fill: true,
|
||||||
|
borderWidth: 4
|
||||||
|
}]
|
||||||
|
},
|
||||||
|
options: {
|
||||||
|
elements: {
|
||||||
|
point: {
|
||||||
|
radius: 7,
|
||||||
|
hoverRadius: 10
|
||||||
|
}
|
||||||
|
},
|
||||||
|
plugins: {
|
||||||
|
legend: {
|
||||||
|
position: 'bottom',
|
||||||
|
labels: {
|
||||||
|
padding: 20
|
||||||
|
}
|
||||||
|
},
|
||||||
|
tooltip: {
|
||||||
|
displayColors: false,
|
||||||
|
callbacks: {
|
||||||
|
label: ({ raw: { labels } }) => labels
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
scales: {
|
||||||
|
y: {
|
||||||
|
beginAtZero: true,
|
||||||
|
stacked: true,
|
||||||
|
grace: '15%',
|
||||||
|
ticks: {
|
||||||
|
padding: 15
|
||||||
|
}
|
||||||
|
},
|
||||||
|
x: {
|
||||||
|
type: 'time',
|
||||||
|
time: {
|
||||||
|
unit: 'day'
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
transitions: {
|
||||||
|
show: {
|
||||||
|
animations: {
|
||||||
|
x: {
|
||||||
|
from: 0
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
hide: {
|
||||||
|
animations: {
|
||||||
|
x: {
|
||||||
|
to: 0
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
})
|
||||||
|
},
|
||||||
|
mounted () { this.initalizeChart(this.el) },
|
||||||
|
updated () { this.initalizeChart(this.el) }
|
||||||
|
}
|
10981
assets/package-lock.json
generated
10981
assets/package-lock.json
generated
File diff suppressed because it is too large
Load Diff
@ -2,6 +2,10 @@
|
|||||||
"repository": {},
|
"repository": {},
|
||||||
"description": " ",
|
"description": " ",
|
||||||
"license": "MIT",
|
"license": "MIT",
|
||||||
|
"engines": {
|
||||||
|
"node": "18.12.1",
|
||||||
|
"npm": "8.19.2"
|
||||||
|
},
|
||||||
"scripts": {
|
"scripts": {
|
||||||
"deploy": "NODE_ENV=production webpack --mode production",
|
"deploy": "NODE_ENV=production webpack --mode production",
|
||||||
"watch": "webpack --mode development --watch --watch-options-stdin",
|
"watch": "webpack --mode development --watch --watch-options-stdin",
|
||||||
@ -11,6 +15,9 @@
|
|||||||
"dependencies": {
|
"dependencies": {
|
||||||
"@fortawesome/fontawesome-free": "^6.1.1",
|
"@fortawesome/fontawesome-free": "^6.1.1",
|
||||||
"alpinejs": "^3.10.2",
|
"alpinejs": "^3.10.2",
|
||||||
|
"chart.js": "^3.9.1",
|
||||||
|
"chartjs-adapter-date-fns": "^2.0.0",
|
||||||
|
"date-fns": "^2.29.3",
|
||||||
"phoenix": "file:../deps/phoenix",
|
"phoenix": "file:../deps/phoenix",
|
||||||
"phoenix_html": "file:../deps/phoenix_html",
|
"phoenix_html": "file:../deps/phoenix_html",
|
||||||
"phoenix_live_view": "file:../deps/phoenix_live_view",
|
"phoenix_live_view": "file:../deps/phoenix_live_view",
|
||||||
@ -30,6 +37,7 @@
|
|||||||
"postcss-import": "^14.1.0",
|
"postcss-import": "^14.1.0",
|
||||||
"postcss-loader": "^6.2.1",
|
"postcss-loader": "^6.2.1",
|
||||||
"postcss-preset-env": "^7.5.0",
|
"postcss-preset-env": "^7.5.0",
|
||||||
|
"sass": "^1.56.0",
|
||||||
"sass-loader": "^12.6.0",
|
"sass-loader": "^12.6.0",
|
||||||
"standard": "^17.0.0",
|
"standard": "^17.0.0",
|
||||||
"tailwindcss": "^3.0.24",
|
"tailwindcss": "^3.0.24",
|
||||||
|
@ -9,6 +9,14 @@ defmodule Cannery.Accounts.User do
|
|||||||
alias Ecto.{Changeset, UUID}
|
alias Ecto.{Changeset, UUID}
|
||||||
alias Cannery.{Accounts.User, Invites.Invite}
|
alias Cannery.{Accounts.User, Invites.Invite}
|
||||||
|
|
||||||
|
@derive {Jason.Encoder,
|
||||||
|
only: [
|
||||||
|
:id,
|
||||||
|
:email,
|
||||||
|
:confirmed_at,
|
||||||
|
:role,
|
||||||
|
:locale
|
||||||
|
]}
|
||||||
@derive {Inspect, except: [:password]}
|
@derive {Inspect, except: [:password]}
|
||||||
@primary_key {:id, :binary_id, autogenerate: true}
|
@primary_key {:id, :binary_id, autogenerate: true}
|
||||||
@foreign_key_type :binary_id
|
@foreign_key_type :binary_id
|
||||||
|
@ -9,6 +9,14 @@ defmodule Cannery.ActivityLog.ShotGroup do
|
|||||||
alias Cannery.{Accounts.User, ActivityLog.ShotGroup, Ammo.AmmoGroup, Repo}
|
alias Cannery.{Accounts.User, ActivityLog.ShotGroup, Ammo.AmmoGroup, Repo}
|
||||||
alias Ecto.{Changeset, UUID}
|
alias Ecto.{Changeset, UUID}
|
||||||
|
|
||||||
|
@derive {Jason.Encoder,
|
||||||
|
only: [
|
||||||
|
:id,
|
||||||
|
:count,
|
||||||
|
:date,
|
||||||
|
:notes,
|
||||||
|
:ammo_group_id
|
||||||
|
]}
|
||||||
@primary_key {:id, :binary_id, autogenerate: true}
|
@primary_key {:id, :binary_id, autogenerate: true}
|
||||||
@foreign_key_type :binary_id
|
@foreign_key_type :binary_id
|
||||||
schema "shot_groups" do
|
schema "shot_groups" do
|
||||||
@ -58,7 +66,7 @@ defmodule Cannery.ActivityLog.ShotGroup do
|
|||||||
|> cast(attrs, [:count, :notes, :date])
|
|> 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_create_shot_group_count(ammo_group)
|
||||||
|> validate_required([:count, :ammo_group_id, :user_id])
|
|> validate_required([:count, :date, :ammo_group_id, :user_id])
|
||||||
end
|
end
|
||||||
|
|
||||||
def create_changeset(shot_group, _invalid_user, _invalid_ammo_group, attrs) do
|
def create_changeset(shot_group, _invalid_user, _invalid_ammo_group, attrs) do
|
||||||
@ -90,7 +98,7 @@ defmodule Cannery.ActivityLog.ShotGroup 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, :date])
|
||||||
|> validate_update_shot_group_count(shot_group, user)
|
|> validate_update_shot_group_count(shot_group, user)
|
||||||
end
|
end
|
||||||
|
|
||||||
|
@ -101,7 +101,7 @@ defmodule Cannery.Ammo do
|
|||||||
## Examples
|
## Examples
|
||||||
|
|
||||||
iex> get_round_count_for_ammo_type(123, %User{id: 123})
|
iex> get_round_count_for_ammo_type(123, %User{id: 123})
|
||||||
%AmmoType{}
|
35
|
||||||
|
|
||||||
iex> get_round_count_for_ammo_type(456, %User{id: 123})
|
iex> get_round_count_for_ammo_type(456, %User{id: 123})
|
||||||
** (Ecto.NoResultsError)
|
** (Ecto.NoResultsError)
|
||||||
@ -127,7 +127,7 @@ defmodule Cannery.Ammo do
|
|||||||
## Examples
|
## Examples
|
||||||
|
|
||||||
iex> get_used_count_for_ammo_type(123, %User{id: 123})
|
iex> get_used_count_for_ammo_type(123, %User{id: 123})
|
||||||
%AmmoType{}
|
35
|
||||||
|
|
||||||
iex> get_used_count_for_ammo_type(456, %User{id: 123})
|
iex> get_used_count_for_ammo_type(456, %User{id: 123})
|
||||||
** (Ecto.NoResultsError)
|
** (Ecto.NoResultsError)
|
||||||
@ -146,6 +146,29 @@ defmodule Cannery.Ammo do
|
|||||||
) || 0
|
) || 0
|
||||||
end
|
end
|
||||||
|
|
||||||
|
@doc """
|
||||||
|
Gets the total number of ammo ever bought for an ammo type
|
||||||
|
|
||||||
|
Raises `Ecto.NoResultsError` if the Ammo type does not exist.
|
||||||
|
|
||||||
|
## Examples
|
||||||
|
|
||||||
|
iex> get_historical_count_for_ammo_type(123, %User{id: 123})
|
||||||
|
%AmmoType{}
|
||||||
|
|
||||||
|
iex> get_historical_count_for_ammo_type(456, %User{id: 123})
|
||||||
|
** (Ecto.NoResultsError)
|
||||||
|
|
||||||
|
"""
|
||||||
|
@spec get_historical_count_for_ammo_type(AmmoType.t(), User.t()) :: non_neg_integer()
|
||||||
|
def get_historical_count_for_ammo_type(
|
||||||
|
%AmmoType{user_id: user_id} = ammo_type,
|
||||||
|
%User{id: user_id} = user
|
||||||
|
) do
|
||||||
|
get_round_count_for_ammo_type(ammo_type, user) +
|
||||||
|
get_used_count_for_ammo_type(ammo_type, user)
|
||||||
|
end
|
||||||
|
|
||||||
@doc """
|
@doc """
|
||||||
Creates a ammo_type.
|
Creates a ammo_type.
|
||||||
|
|
||||||
@ -227,7 +250,7 @@ defmodule Cannery.Ammo do
|
|||||||
def list_ammo_groups_for_type(
|
def list_ammo_groups_for_type(
|
||||||
%AmmoType{id: ammo_type_id, user_id: user_id},
|
%AmmoType{id: ammo_type_id, user_id: user_id},
|
||||||
%User{id: user_id},
|
%User{id: user_id},
|
||||||
_include_empty = true
|
true = _include_empty
|
||||||
) do
|
) do
|
||||||
Repo.all(
|
Repo.all(
|
||||||
from ag in AmmoGroup,
|
from ag in AmmoGroup,
|
||||||
@ -242,7 +265,7 @@ defmodule Cannery.Ammo do
|
|||||||
def list_ammo_groups_for_type(
|
def list_ammo_groups_for_type(
|
||||||
%AmmoType{id: ammo_type_id, user_id: user_id},
|
%AmmoType{id: ammo_type_id, user_id: user_id},
|
||||||
%User{id: user_id},
|
%User{id: user_id},
|
||||||
_include_empty = false
|
false = _include_empty
|
||||||
) do
|
) do
|
||||||
Repo.all(
|
Repo.all(
|
||||||
from ag in AmmoGroup,
|
from ag in AmmoGroup,
|
||||||
@ -272,7 +295,7 @@ defmodule Cannery.Ammo do
|
|||||||
def list_ammo_groups_for_container(
|
def list_ammo_groups_for_container(
|
||||||
%Container{id: container_id, user_id: user_id},
|
%Container{id: container_id, user_id: user_id},
|
||||||
%User{id: user_id},
|
%User{id: user_id},
|
||||||
_include_empty = true
|
true = _include_empty
|
||||||
) do
|
) do
|
||||||
Repo.all(
|
Repo.all(
|
||||||
from ag in AmmoGroup,
|
from ag in AmmoGroup,
|
||||||
@ -287,7 +310,7 @@ defmodule Cannery.Ammo do
|
|||||||
def list_ammo_groups_for_container(
|
def list_ammo_groups_for_container(
|
||||||
%Container{id: container_id, user_id: user_id},
|
%Container{id: container_id, user_id: user_id},
|
||||||
%User{id: user_id},
|
%User{id: user_id},
|
||||||
_include_empty = false
|
false = _include_empty
|
||||||
) do
|
) do
|
||||||
Repo.all(
|
Repo.all(
|
||||||
from ag in AmmoGroup,
|
from ag in AmmoGroup,
|
||||||
@ -305,9 +328,12 @@ defmodule Cannery.Ammo do
|
|||||||
|
|
||||||
## Examples
|
## Examples
|
||||||
|
|
||||||
iex> get_ammo_groups_count_for_type(%User{id: 123})
|
iex> get_ammo_groups_count_for_type(%AmmoType{id: 123}, %User{id: 123})
|
||||||
3
|
3
|
||||||
|
|
||||||
|
iex> get_ammo_groups_count_for_type(%AmmoType{id: 123}, %User{id: 123}, true)
|
||||||
|
5
|
||||||
|
|
||||||
"""
|
"""
|
||||||
@spec get_ammo_groups_count_for_type(AmmoType.t(), User.t()) :: [AmmoGroup.t()]
|
@spec get_ammo_groups_count_for_type(AmmoType.t(), User.t()) :: [AmmoGroup.t()]
|
||||||
@spec get_ammo_groups_count_for_type(AmmoType.t(), User.t(), include_empty :: boolean()) ::
|
@spec get_ammo_groups_count_for_type(AmmoType.t(), User.t(), include_empty :: boolean()) ::
|
||||||
@ -317,7 +343,7 @@ defmodule Cannery.Ammo do
|
|||||||
def get_ammo_groups_count_for_type(
|
def get_ammo_groups_count_for_type(
|
||||||
%AmmoType{id: ammo_type_id, user_id: user_id},
|
%AmmoType{id: ammo_type_id, user_id: user_id},
|
||||||
%User{id: user_id},
|
%User{id: user_id},
|
||||||
_include_empty = true
|
true = _include_empty
|
||||||
) do
|
) do
|
||||||
Repo.one!(
|
Repo.one!(
|
||||||
from ag in AmmoGroup,
|
from ag in AmmoGroup,
|
||||||
@ -331,7 +357,7 @@ defmodule Cannery.Ammo do
|
|||||||
def get_ammo_groups_count_for_type(
|
def get_ammo_groups_count_for_type(
|
||||||
%AmmoType{id: ammo_type_id, user_id: user_id},
|
%AmmoType{id: ammo_type_id, user_id: user_id},
|
||||||
%User{id: user_id},
|
%User{id: user_id},
|
||||||
_include_empty = false
|
false = _include_empty
|
||||||
) do
|
) do
|
||||||
Repo.one!(
|
Repo.one!(
|
||||||
from ag in AmmoGroup,
|
from ag in AmmoGroup,
|
||||||
@ -343,6 +369,30 @@ defmodule Cannery.Ammo do
|
|||||||
) || 0
|
) || 0
|
||||||
end
|
end
|
||||||
|
|
||||||
|
@doc """
|
||||||
|
Returns the count of used ammo_groups for an ammo type.
|
||||||
|
|
||||||
|
## Examples
|
||||||
|
|
||||||
|
iex> get_used_ammo_groups_count_for_type(%AmmoType{id: 123}, %User{id: 123})
|
||||||
|
3
|
||||||
|
|
||||||
|
"""
|
||||||
|
@spec get_used_ammo_groups_count_for_type(AmmoType.t(), User.t()) :: [AmmoGroup.t()]
|
||||||
|
def get_used_ammo_groups_count_for_type(
|
||||||
|
%AmmoType{id: ammo_type_id, user_id: user_id},
|
||||||
|
%User{id: user_id}
|
||||||
|
) do
|
||||||
|
Repo.one!(
|
||||||
|
from ag in AmmoGroup,
|
||||||
|
where: ag.user_id == ^user_id,
|
||||||
|
where: ag.ammo_type_id == ^ammo_type_id,
|
||||||
|
where: ag.count == 0,
|
||||||
|
distinct: true,
|
||||||
|
select: count(ag.id)
|
||||||
|
) || 0
|
||||||
|
end
|
||||||
|
|
||||||
@doc """
|
@doc """
|
||||||
Returns the list of ammo_groups for a user.
|
Returns the list of ammo_groups for a user.
|
||||||
|
|
||||||
@ -356,7 +406,7 @@ defmodule Cannery.Ammo do
|
|||||||
@spec list_ammo_groups(User.t(), include_empty :: boolean()) :: [AmmoGroup.t()]
|
@spec list_ammo_groups(User.t(), include_empty :: boolean()) :: [AmmoGroup.t()]
|
||||||
def list_ammo_groups(user, include_empty \\ false)
|
def list_ammo_groups(user, include_empty \\ false)
|
||||||
|
|
||||||
def list_ammo_groups(%User{id: user_id}, _include_empty = true) do
|
def list_ammo_groups(%User{id: user_id}, true = _include_empty) do
|
||||||
Repo.all(
|
Repo.all(
|
||||||
from ag in AmmoGroup,
|
from ag in AmmoGroup,
|
||||||
left_join: sg in assoc(ag, :shot_groups),
|
left_join: sg in assoc(ag, :shot_groups),
|
||||||
@ -366,7 +416,7 @@ defmodule Cannery.Ammo do
|
|||||||
)
|
)
|
||||||
end
|
end
|
||||||
|
|
||||||
def list_ammo_groups(%User{id: user_id}, _include_empty = false) do
|
def list_ammo_groups(%User{id: user_id}, false = _include_empty) do
|
||||||
Repo.all(
|
Repo.all(
|
||||||
from ag in AmmoGroup,
|
from ag in AmmoGroup,
|
||||||
left_join: sg in assoc(ag, :shot_groups),
|
left_join: sg in assoc(ag, :shot_groups),
|
||||||
@ -435,6 +485,17 @@ defmodule Cannery.Ammo do
|
|||||||
|> Enum.sum()
|
|> Enum.sum()
|
||||||
end
|
end
|
||||||
|
|
||||||
|
@doc """
|
||||||
|
Returns the last entered shot group for an ammo group
|
||||||
|
"""
|
||||||
|
@spec get_last_used_shot_group(AmmoGroup.t()) :: ShotGroup.t() | nil
|
||||||
|
def get_last_used_shot_group(%AmmoGroup{} = ammo_group) do
|
||||||
|
ammo_group
|
||||||
|
|> Repo.preload(:shot_groups)
|
||||||
|
|> Map.fetch!(:shot_groups)
|
||||||
|
|> Enum.max_by(fn %{date: date} -> date end, Date, fn -> nil end)
|
||||||
|
end
|
||||||
|
|
||||||
@doc """
|
@doc """
|
||||||
Calculates the percentage remaining of an ammo group out of 100
|
Calculates the percentage remaining of an ammo group out of 100
|
||||||
"""
|
"""
|
||||||
@ -445,7 +506,9 @@ defmodule Cannery.Ammo do
|
|||||||
ammo_group = ammo_group |> Repo.preload(:shot_groups)
|
ammo_group = ammo_group |> Repo.preload(:shot_groups)
|
||||||
|
|
||||||
shot_group_sum =
|
shot_group_sum =
|
||||||
ammo_group.shot_groups |> Enum.map(fn %{count: count} -> count end) |> Enum.sum()
|
ammo_group.shot_groups
|
||||||
|
|> Enum.map(fn %{count: count} -> count end)
|
||||||
|
|> Enum.sum()
|
||||||
|
|
||||||
round(count / (count + shot_group_sum) * 100)
|
round(count / (count + shot_group_sum) * 100)
|
||||||
end
|
end
|
||||||
@ -544,8 +607,12 @@ defmodule Cannery.Ammo do
|
|||||||
"""
|
"""
|
||||||
@spec update_ammo_group(AmmoGroup.t(), attrs :: map(), User.t()) ::
|
@spec update_ammo_group(AmmoGroup.t(), attrs :: map(), User.t()) ::
|
||||||
{:ok, AmmoGroup.t()} | {:error, Changeset.t(AmmoGroup.t())}
|
{:ok, AmmoGroup.t()} | {:error, Changeset.t(AmmoGroup.t())}
|
||||||
def update_ammo_group(%AmmoGroup{user_id: user_id} = ammo_group, attrs, %User{id: user_id}),
|
def update_ammo_group(
|
||||||
do: ammo_group |> AmmoGroup.update_changeset(attrs) |> Repo.update()
|
%AmmoGroup{user_id: user_id} = ammo_group,
|
||||||
|
attrs,
|
||||||
|
%User{id: user_id} = user
|
||||||
|
),
|
||||||
|
do: ammo_group |> AmmoGroup.update_changeset(attrs, user) |> Repo.update()
|
||||||
|
|
||||||
@doc """
|
@doc """
|
||||||
Deletes a ammo_group.
|
Deletes a ammo_group.
|
||||||
|
@ -10,9 +10,19 @@ defmodule Cannery.Ammo.AmmoGroup do
|
|||||||
import CanneryWeb.Gettext
|
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, Containers.Container}
|
||||||
alias Ecto.{Changeset, UUID}
|
alias Ecto.{Changeset, UUID}
|
||||||
|
|
||||||
|
@derive {Jason.Encoder,
|
||||||
|
only: [
|
||||||
|
:id,
|
||||||
|
:count,
|
||||||
|
:notes,
|
||||||
|
:price_paid,
|
||||||
|
:staged,
|
||||||
|
:ammo_type_id,
|
||||||
|
:container_id
|
||||||
|
]}
|
||||||
@primary_key {:id, :binary_id, autogenerate: true}
|
@primary_key {:id, :binary_id, autogenerate: true}
|
||||||
@foreign_key_type :binary_id
|
@foreign_key_type :binary_id
|
||||||
schema "ammo_groups" do
|
schema "ammo_groups" do
|
||||||
@ -85,13 +95,24 @@ defmodule Cannery.Ammo.AmmoGroup do
|
|||||||
end
|
end
|
||||||
|
|
||||||
@doc false
|
@doc false
|
||||||
@spec update_changeset(t() | new_ammo_group(), attrs :: map()) ::
|
@spec update_changeset(t() | new_ammo_group(), attrs :: map(), User.t()) ::
|
||||||
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, user) do
|
||||||
ammo_group
|
ammo_group
|
||||||
|> cast(attrs, [:count, :price_paid, :notes, :staged])
|
|> cast(attrs, [:count, :price_paid, :notes, :staged, :container_id])
|
||||||
|> validate_number(:count, greater_than_or_equal_to: 0)
|
|> validate_number(:count, greater_than_or_equal_to: 0)
|
||||||
|> validate_required([:count, :staged])
|
|> validate_container_id(user)
|
||||||
|
|> validate_required([:count, :staged, :container_id])
|
||||||
|
end
|
||||||
|
|
||||||
|
defp validate_container_id(changeset, user) do
|
||||||
|
container_id = changeset |> Changeset.get_field(:container_id)
|
||||||
|
|
||||||
|
if container_id do
|
||||||
|
Containers.get_container!(container_id, user)
|
||||||
|
end
|
||||||
|
|
||||||
|
changeset
|
||||||
end
|
end
|
||||||
|
|
||||||
@doc """
|
@doc """
|
||||||
|
@ -11,6 +11,31 @@ defmodule Cannery.Ammo.AmmoType do
|
|||||||
alias Cannery.Ammo.{AmmoGroup, AmmoType}
|
alias Cannery.Ammo.{AmmoGroup, AmmoType}
|
||||||
alias Ecto.{Changeset, UUID}
|
alias Ecto.{Changeset, UUID}
|
||||||
|
|
||||||
|
@derive {Jason.Encoder,
|
||||||
|
only: [
|
||||||
|
:id,
|
||||||
|
:name,
|
||||||
|
:desc,
|
||||||
|
:bullet_type,
|
||||||
|
:bullet_core,
|
||||||
|
:cartridge,
|
||||||
|
:caliber,
|
||||||
|
:case_material,
|
||||||
|
:jacket_type,
|
||||||
|
:muzzle_velocity,
|
||||||
|
:powder_type,
|
||||||
|
:powder_grains_per_charge,
|
||||||
|
:grains,
|
||||||
|
:pressure,
|
||||||
|
:primer_type,
|
||||||
|
:firing_type,
|
||||||
|
:tracer,
|
||||||
|
:incendiary,
|
||||||
|
:blank,
|
||||||
|
:corrosive,
|
||||||
|
:manufacturer,
|
||||||
|
:upc
|
||||||
|
]}
|
||||||
@primary_key {:id, :binary_id, autogenerate: true}
|
@primary_key {:id, :binary_id, autogenerate: true}
|
||||||
@foreign_key_type :binary_id
|
@foreign_key_type :binary_id
|
||||||
schema "ammo_types" do
|
schema "ammo_types" do
|
||||||
|
@ -9,6 +9,15 @@ defmodule Cannery.Containers.Container do
|
|||||||
alias Cannery.Containers.{Container, ContainerTag}
|
alias Cannery.Containers.{Container, ContainerTag}
|
||||||
alias Cannery.{Accounts.User, Ammo.AmmoGroup, Tags.Tag}
|
alias Cannery.{Accounts.User, Ammo.AmmoGroup, Tags.Tag}
|
||||||
|
|
||||||
|
@derive {Jason.Encoder,
|
||||||
|
only: [
|
||||||
|
:id,
|
||||||
|
:name,
|
||||||
|
:desc,
|
||||||
|
:location,
|
||||||
|
:type,
|
||||||
|
:tags
|
||||||
|
]}
|
||||||
@primary_key {:id, :binary_id, autogenerate: true}
|
@primary_key {:id, :binary_id, autogenerate: true}
|
||||||
@foreign_key_type :binary_id
|
@foreign_key_type :binary_id
|
||||||
schema "containers" do
|
schema "containers" do
|
||||||
|
@ -120,18 +120,4 @@ 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 """
|
|
||||||
Get a random tag bg_color in `#ffffff` hex format
|
|
||||||
|
|
||||||
## Examples
|
|
||||||
|
|
||||||
iex> random_color()
|
|
||||||
"#cc0066"
|
|
||||||
"""
|
|
||||||
@spec random_bg_color() :: <<_::7>>
|
|
||||||
def random_bg_color do
|
|
||||||
["#cc0066", "#ff6699", "#6666ff", "#0066cc", "#00cc66", "#669900", "#ff9900", "#996633"]
|
|
||||||
|> Enum.random()
|
|
||||||
end
|
|
||||||
end
|
end
|
||||||
|
@ -9,6 +9,13 @@ defmodule Cannery.Tags.Tag do
|
|||||||
alias Ecto.{Changeset, UUID}
|
alias Ecto.{Changeset, UUID}
|
||||||
alias Cannery.{Accounts.User, Tags.Tag}
|
alias Cannery.{Accounts.User, Tags.Tag}
|
||||||
|
|
||||||
|
@derive {Jason.Encoder,
|
||||||
|
only: [
|
||||||
|
:id,
|
||||||
|
:name,
|
||||||
|
:bg_color,
|
||||||
|
:text_color
|
||||||
|
]}
|
||||||
@primary_key {:id, :binary_id, autogenerate: true}
|
@primary_key {:id, :binary_id, autogenerate: true}
|
||||||
@foreign_key_type :binary_id
|
@foreign_key_type :binary_id
|
||||||
schema "tags" do
|
schema "tags" do
|
||||||
|
@ -96,7 +96,7 @@ defmodule CanneryWeb do
|
|||||||
|
|
||||||
# Import LiveView and .heex helpers (live_render, live_patch, <.form>, etc)
|
# Import LiveView and .heex helpers (live_render, live_patch, <.form>, etc)
|
||||||
# credo:disable-for-next-line Credo.Check.Consistency.MultiAliasImportRequireUse
|
# credo:disable-for-next-line Credo.Check.Consistency.MultiAliasImportRequireUse
|
||||||
import Phoenix.LiveView.Helpers
|
import Phoenix.Component
|
||||||
|
|
||||||
# Import basic rendering functionality (render, render_layout, etc)
|
# Import basic rendering functionality (render, render_layout, etc)
|
||||||
# credo:disable-for-next-line Credo.Check.Consistency.MultiAliasImportRequireUse
|
# credo:disable-for-next-line Credo.Check.Consistency.MultiAliasImportRequireUse
|
||||||
|
@ -5,7 +5,7 @@ defmodule CanneryWeb.Components.AddShotGroupComponent do
|
|||||||
|
|
||||||
use CanneryWeb, :live_component
|
use CanneryWeb, :live_component
|
||||||
alias Cannery.{Accounts.User, ActivityLog, ActivityLog.ShotGroup, Ammo.AmmoGroup}
|
alias Cannery.{Accounts.User, ActivityLog, ActivityLog.ShotGroup, Ammo.AmmoGroup}
|
||||||
alias Phoenix.LiveView.Socket
|
alias Phoenix.LiveView.{JS, Socket}
|
||||||
|
|
||||||
@impl true
|
@impl true
|
||||||
@spec update(
|
@spec update(
|
||||||
@ -54,7 +54,7 @@ defmodule CanneryWeb.Components.AddShotGroupComponent do
|
|||||||
|> case do
|
|> case do
|
||||||
{:ok, _shot_group} ->
|
{:ok, _shot_group} ->
|
||||||
prompt = dgettext("prompts", "Shots recorded successfully")
|
prompt = dgettext("prompts", "Shots recorded successfully")
|
||||||
socket |> put_flash(:info, prompt) |> push_redirect(to: return_to)
|
socket |> put_flash(:info, prompt) |> push_navigate(to: return_to)
|
||||||
|
|
||||||
{:error, %Ecto.Changeset{} = changeset} ->
|
{:error, %Ecto.Changeset{} = changeset} ->
|
||||||
socket |> assign(changeset: changeset)
|
socket |> assign(changeset: changeset)
|
||||||
|
@ -4,7 +4,7 @@
|
|||||||
</h2>
|
</h2>
|
||||||
|
|
||||||
<.form
|
<.form
|
||||||
let={f}
|
:let={f}
|
||||||
for={@changeset}
|
for={@changeset}
|
||||||
id="shot-group-form"
|
id="shot-group-form"
|
||||||
class="flex flex-col space-y-4 sm:space-y-0 sm:grid sm:grid-cols-3 sm:gap-4 justify-center items-center"
|
class="flex flex-col space-y-4 sm:space-y-0 sm:grid sm:grid-cols-3 sm:gap-4 justify-center items-center"
|
||||||
@ -22,9 +22,16 @@
|
|||||||
<%= number_input(f, :ammo_left,
|
<%= number_input(f, :ammo_left,
|
||||||
min: 0,
|
min: 0,
|
||||||
max: @ammo_group.count - 1,
|
max: @ammo_group.count - 1,
|
||||||
placeholder: 0,
|
placeholder: gettext("Rounds left"),
|
||||||
class: "input input-primary col-span-2"
|
class: "input input-primary"
|
||||||
) %>
|
) %>
|
||||||
|
<button
|
||||||
|
type="button"
|
||||||
|
class="mx-2 my-1 text-sm btn btn-primary"
|
||||||
|
phx-click={JS.dispatch("cannery:set-zero", to: "#shot-group-form_ammo_left")}
|
||||||
|
>
|
||||||
|
<%= gettext("Used up!") %>
|
||||||
|
</button>
|
||||||
<%= error_tag(f, :ammo_left, "col-span-3") %>
|
<%= error_tag(f, :ammo_left, "col-span-3") %>
|
||||||
|
|
||||||
<%= label(f, :notes, gettext("Notes"), class: "title text-lg text-primary-600") %>
|
<%= label(f, :notes, gettext("Notes"), class: "title text-lg text-primary-600") %>
|
||||||
|
@ -4,9 +4,13 @@ defmodule CanneryWeb.Components.AmmoGroupCard do
|
|||||||
"""
|
"""
|
||||||
|
|
||||||
use CanneryWeb, :component
|
use CanneryWeb, :component
|
||||||
alias Cannery.Repo
|
alias Cannery.{Ammo, Ammo.AmmoGroup, Repo}
|
||||||
alias CanneryWeb.Endpoint
|
alias CanneryWeb.Endpoint
|
||||||
|
|
||||||
|
attr :ammo_group, AmmoGroup, required: true
|
||||||
|
attr :show_container, :boolean, default: false
|
||||||
|
slot(:inner_block)
|
||||||
|
|
||||||
def ammo_group_card(%{ammo_group: ammo_group} = assigns) do
|
def ammo_group_card(%{ammo_group: ammo_group} = assigns) do
|
||||||
assigns =
|
assigns =
|
||||||
%{show_container: show_container} = assigns |> assign_new(:show_container, fn -> false end)
|
%{show_container: show_container} = assigns |> assign_new(:show_container, fn -> false end)
|
||||||
@ -22,12 +26,11 @@ defmodule CanneryWeb.Components.AmmoGroupCard do
|
|||||||
border border-gray-400 rounded-lg shadow-lg hover:shadow-md
|
border border-gray-400 rounded-lg shadow-lg hover:shadow-md
|
||||||
transition-all duration-300 ease-in-out"
|
transition-all duration-300 ease-in-out"
|
||||||
>
|
>
|
||||||
<%= live_patch to: Routes.ammo_group_show_path(Endpoint, :show, @ammo_group),
|
<.link navigate={Routes.ammo_group_show_path(Endpoint, :show, @ammo_group)} class="mb-2 link">
|
||||||
class: "mb-2 link" do %>
|
|
||||||
<h1 class="title text-xl title-primary-500">
|
<h1 class="title text-xl title-primary-500">
|
||||||
<%= @ammo_group.ammo_type.name %>
|
<%= @ammo_group.ammo_type.name %>
|
||||||
</h1>
|
</h1>
|
||||||
<% end %>
|
</.link>
|
||||||
|
|
||||||
<div class="flex flex-col justify-center items-center">
|
<div class="flex flex-col justify-center items-center">
|
||||||
<span class="rounded-lg title text-lg">
|
<span class="rounded-lg title text-lg">
|
||||||
@ -47,6 +50,13 @@ defmodule CanneryWeb.Components.AmmoGroupCard do
|
|||||||
<%= @ammo_group.inserted_at |> display_datetime() %>
|
<%= @ammo_group.inserted_at |> display_datetime() %>
|
||||||
</span>
|
</span>
|
||||||
|
|
||||||
|
<%= if @ammo_group.count == 0 do %>
|
||||||
|
<span class="rounded-lg title text-lg">
|
||||||
|
<%= gettext("Used up on:") %>
|
||||||
|
<%= @ammo_group |> Ammo.get_last_used_shot_group() |> Map.get(:date) |> display_date() %>
|
||||||
|
</span>
|
||||||
|
<% end %>
|
||||||
|
|
||||||
<%= if @ammo_group.price_paid do %>
|
<%= if @ammo_group.price_paid do %>
|
||||||
<span class="rounded-lg title text-lg">
|
<span class="rounded-lg title text-lg">
|
||||||
<%= gettext("Price paid:") %>
|
<%= gettext("Price paid:") %>
|
||||||
@ -60,10 +70,12 @@ defmodule CanneryWeb.Components.AmmoGroupCard do
|
|||||||
<span class="rounded-lg title text-lg">
|
<span class="rounded-lg title text-lg">
|
||||||
<%= gettext("Container:") %>
|
<%= gettext("Container:") %>
|
||||||
|
|
||||||
<%= live_patch to: Routes.container_show_path(Endpoint, :show, @ammo_group.container),
|
<.link
|
||||||
class: "link" do %>
|
navigate={Routes.container_show_path(Endpoint, :show, @ammo_group.container)}
|
||||||
|
class="link"
|
||||||
|
>
|
||||||
<%= @ammo_group.container.name %>
|
<%= @ammo_group.container.name %>
|
||||||
<% end %>
|
</.link>
|
||||||
</span>
|
</span>
|
||||||
<% end %>
|
<% end %>
|
||||||
</div>
|
</div>
|
||||||
|
@ -5,11 +5,20 @@ defmodule CanneryWeb.Components.ContainerCard do
|
|||||||
|
|
||||||
use CanneryWeb, :component
|
use CanneryWeb, :component
|
||||||
import CanneryWeb.Components.TagCard
|
import CanneryWeb.Components.TagCard
|
||||||
alias Cannery.{Containers, Repo}
|
alias Cannery.{Containers, Containers.Container, Repo}
|
||||||
alias CanneryWeb.Endpoint
|
alias CanneryWeb.Endpoint
|
||||||
|
alias Phoenix.LiveView.Rendered
|
||||||
|
|
||||||
|
attr :container, Container, required: true
|
||||||
|
slot(:tag_actions)
|
||||||
|
slot(:inner_block)
|
||||||
|
|
||||||
|
@spec container_card(assigns :: map()) :: Rendered.t()
|
||||||
def container_card(%{container: container} = assigns) do
|
def container_card(%{container: container} = assigns) do
|
||||||
assigns = assigns |> Map.put(:container, container |> Repo.preload([:tags, :ammo_groups]))
|
assigns =
|
||||||
|
assigns
|
||||||
|
|> assign(container: container |> Repo.preload([:tags, :ammo_groups]))
|
||||||
|
|> assign_new(:tag_actions, fn -> [] end)
|
||||||
|
|
||||||
~H"""
|
~H"""
|
||||||
<div
|
<div
|
||||||
@ -19,12 +28,11 @@ defmodule CanneryWeb.Components.ContainerCard do
|
|||||||
transition-all duration-300 ease-in-out"
|
transition-all duration-300 ease-in-out"
|
||||||
>
|
>
|
||||||
<div class="max-w-full mb-4 flex flex-col justify-center items-center space-y-2">
|
<div class="max-w-full mb-4 flex flex-col justify-center items-center space-y-2">
|
||||||
<%= live_redirect to: Routes.container_show_path(Endpoint, :show, @container),
|
<.link navigate={Routes.container_show_path(Endpoint, :show, @container)} class="link">
|
||||||
class: "link" do %>
|
|
||||||
<h1 class="px-4 py-2 rounded-lg title text-xl">
|
<h1 class="px-4 py-2 rounded-lg title text-xl">
|
||||||
<%= @container.name %>
|
<%= @container.name %>
|
||||||
</h1>
|
</h1>
|
||||||
<% end %>
|
</.link>
|
||||||
|
|
||||||
<%= if @container.desc do %>
|
<%= if @container.desc do %>
|
||||||
<span class="rounded-lg title text-lg">
|
<span class="rounded-lg title text-lg">
|
||||||
@ -64,9 +72,7 @@ defmodule CanneryWeb.Components.ContainerCard do
|
|||||||
<% end %>
|
<% end %>
|
||||||
<% end %>
|
<% end %>
|
||||||
|
|
||||||
<%= if assigns |> Map.has_key?(:tag_actions) do %>
|
|
||||||
<%= render_slot(@tag_actions) %>
|
<%= render_slot(@tag_actions) %>
|
||||||
<% end %>
|
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
|
@ -4,9 +4,16 @@ defmodule CanneryWeb.Components.InviteCard do
|
|||||||
"""
|
"""
|
||||||
|
|
||||||
use CanneryWeb, :component
|
use CanneryWeb, :component
|
||||||
|
alias Cannery.Invites.Invite
|
||||||
alias CanneryWeb.Endpoint
|
alias CanneryWeb.Endpoint
|
||||||
|
|
||||||
|
attr :invite, Invite, required: true
|
||||||
|
slot(:inner_block)
|
||||||
|
slot(:code_actions)
|
||||||
|
|
||||||
def invite_card(assigns) do
|
def invite_card(assigns) do
|
||||||
|
assigns = assigns |> assign_new(:code_actions, fn -> [] end)
|
||||||
|
|
||||||
~H"""
|
~H"""
|
||||||
<div class="mx-4 my-2 px-8 py-4 flex flex-col justify-center items-center space-y-4
|
<div class="mx-4 my-2 px-8 py-4 flex flex-col justify-center items-center space-y-4
|
||||||
border border-gray-400 rounded-lg shadow-lg hover:shadow-md
|
border border-gray-400 rounded-lg shadow-lg hover:shadow-md
|
||||||
@ -34,9 +41,7 @@ defmodule CanneryWeb.Components.InviteCard do
|
|||||||
<%= Routes.user_registration_url(Endpoint, :new, invite: @invite.token) %>
|
<%= Routes.user_registration_url(Endpoint, :new, invite: @invite.token) %>
|
||||||
</code>
|
</code>
|
||||||
|
|
||||||
<%= if @code_actions do %>
|
|
||||||
<%= render_slot(@code_actions) %>
|
<%= render_slot(@code_actions) %>
|
||||||
<% end %>
|
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<%= if @inner_block do %>
|
<%= if @inner_block do %>
|
||||||
|
@ -22,7 +22,7 @@ defmodule CanneryWeb.Components.MoveAmmoGroupComponent do
|
|||||||
assigns,
|
assigns,
|
||||||
socket
|
socket
|
||||||
) do
|
) do
|
||||||
changeset = ammo_group |> AmmoGroup.update_changeset(%{})
|
changeset = ammo_group |> AmmoGroup.update_changeset(%{}, current_user)
|
||||||
|
|
||||||
containers =
|
containers =
|
||||||
Containers.list_containers(current_user)
|
Containers.list_containers(current_user)
|
||||||
@ -52,7 +52,7 @@ defmodule CanneryWeb.Components.MoveAmmoGroupComponent do
|
|||||||
{:ok, _ammo_group} ->
|
{:ok, _ammo_group} ->
|
||||||
prompt = dgettext("prompts", "Ammo moved to %{name} successfully", name: container_name)
|
prompt = dgettext("prompts", "Ammo moved to %{name} successfully", name: container_name)
|
||||||
|
|
||||||
socket |> put_flash(:info, prompt) |> push_redirect(to: return_to)
|
socket |> put_flash(:info, prompt) |> push_navigate(to: return_to)
|
||||||
|
|
||||||
{:error, %Ecto.Changeset{} = changeset} ->
|
{:error, %Ecto.Changeset{} = changeset} ->
|
||||||
socket |> assign(changeset: changeset)
|
socket |> assign(changeset: changeset)
|
||||||
@ -77,7 +77,7 @@ defmodule CanneryWeb.Components.MoveAmmoGroupComponent do
|
|||||||
~H"""
|
~H"""
|
||||||
<div class="w-full flex flex-col space-y-8 justify-center items-center">
|
<div class="w-full flex flex-col space-y-8 justify-center items-center">
|
||||||
<h2 class="mb-8 text-center title text-xl text-primary-600">
|
<h2 class="mb-8 text-center title text-xl text-primary-600">
|
||||||
<%= gettext("Move ammo") %>
|
<%= dgettext("actions", "Move ammo") %>
|
||||||
</h2>
|
</h2>
|
||||||
|
|
||||||
<%= if @containers |> Enum.empty?() do %>
|
<%= if @containers |> Enum.empty?() do %>
|
||||||
@ -86,10 +86,9 @@ defmodule CanneryWeb.Components.MoveAmmoGroupComponent do
|
|||||||
<%= display_emoji("😔") %>
|
<%= display_emoji("😔") %>
|
||||||
</h2>
|
</h2>
|
||||||
|
|
||||||
<%= live_patch(dgettext("actions", "Add another container!"),
|
<.link navigate={Routes.container_index_path(Endpoint, :new)} class="btn btn-primary">
|
||||||
to: Routes.container_index_path(Endpoint, :new),
|
<%= dgettext("actions", "Add another container!") %>
|
||||||
class: "btn btn-primary"
|
</.link>
|
||||||
) %>
|
|
||||||
<% else %>
|
<% else %>
|
||||||
<.live_component
|
<.live_component
|
||||||
module={CanneryWeb.Components.TableComponent}
|
module={CanneryWeb.Components.TableComponent}
|
||||||
@ -122,7 +121,7 @@ defmodule CanneryWeb.Components.MoveAmmoGroupComponent do
|
|||||||
class="btn btn-primary"
|
class="btn btn-primary"
|
||||||
phx-click="move"
|
phx-click="move"
|
||||||
phx-target={@myself}
|
phx-target={@myself}
|
||||||
phx-value-container_id={container.id}
|
phx-value-container_id={@container.id}
|
||||||
>
|
>
|
||||||
<%= dgettext("actions", "Select") %>
|
<%= dgettext("actions", "Select") %>
|
||||||
</button>
|
</button>
|
||||||
|
@ -6,7 +6,7 @@ defmodule CanneryWeb.Components.TableComponent do
|
|||||||
- `:columns`: An array of maps containing the following keys
|
- `:columns`: An array of maps containing the following keys
|
||||||
- `:label`: A gettext'd or otherwise user-facing string label for the
|
- `:label`: A gettext'd or otherwise user-facing string label for the
|
||||||
column. Can be nil
|
column. Can be nil
|
||||||
- `:key`: A string key used for sorting
|
- `:key`: An atom key used for sorting
|
||||||
- `:class`: Extra classes to be applied to the column element, if desired.
|
- `:class`: Extra classes to be applied to the column element, if desired.
|
||||||
Optional
|
Optional
|
||||||
- `:sortable`: If false, will prevent the user from sorting with it.
|
- `:sortable`: If false, will prevent the user from sorting with it.
|
||||||
@ -28,26 +28,46 @@ defmodule CanneryWeb.Components.TableComponent do
|
|||||||
required(:columns) =>
|
required(:columns) =>
|
||||||
list(%{
|
list(%{
|
||||||
required(:label) => String.t() | nil,
|
required(:label) => String.t() | nil,
|
||||||
required(:key) => String.t() | nil,
|
required(:key) => atom() | nil,
|
||||||
optional(:class) => String.t(),
|
optional(:class) => String.t(),
|
||||||
optional(:sortable) => false
|
optional(:sortable) => false
|
||||||
}),
|
}),
|
||||||
required(:rows) =>
|
required(:rows) =>
|
||||||
list(%{
|
list(%{
|
||||||
(key :: String.t()) => any() | {custom_sort_value :: String.t(), value :: any()}
|
(key :: atom()) => any() | {custom_sort_value :: String.t(), value :: any()}
|
||||||
}),
|
}),
|
||||||
|
optional(:inital_key) => atom(),
|
||||||
|
optional(:initial_sort_mode) => atom(),
|
||||||
optional(any()) => any()
|
optional(any()) => any()
|
||||||
},
|
},
|
||||||
Socket.t()
|
Socket.t()
|
||||||
) :: {:ok, Socket.t()}
|
) :: {:ok, Socket.t()}
|
||||||
def update(%{columns: columns, rows: rows} = assigns, socket) do
|
def update(%{columns: columns, rows: rows} = assigns, socket) do
|
||||||
initial_key = columns |> List.first() |> Map.get(:key)
|
initial_key =
|
||||||
rows = rows |> Enum.sort_by(fn row -> row |> Map.get(initial_key) end, :asc)
|
if assigns |> Map.has_key?(:initial_key) do
|
||||||
|
assigns.initial_key
|
||||||
|
else
|
||||||
|
columns |> List.first(%{}) |> Map.get(:key)
|
||||||
|
end
|
||||||
|
|
||||||
|
initial_sort_mode =
|
||||||
|
if assigns |> Map.has_key?(:initial_sort_mode) do
|
||||||
|
assigns.initial_sort_mode
|
||||||
|
else
|
||||||
|
:asc
|
||||||
|
end
|
||||||
|
|
||||||
|
rows = rows |> Enum.sort_by(fn row -> row |> Map.get(initial_key) end, initial_sort_mode)
|
||||||
|
|
||||||
socket =
|
socket =
|
||||||
socket
|
socket
|
||||||
|> assign(assigns)
|
|> assign(assigns)
|
||||||
|> assign(columns: columns, rows: rows, last_sort_key: initial_key, sort_mode: :asc)
|
|> assign(
|
||||||
|
columns: columns,
|
||||||
|
rows: rows,
|
||||||
|
last_sort_key: initial_key,
|
||||||
|
sort_mode: initial_sort_mode
|
||||||
|
)
|
||||||
|
|
||||||
{:ok, socket}
|
{:ok, socket}
|
||||||
end
|
end
|
||||||
@ -56,20 +76,19 @@ defmodule CanneryWeb.Components.TableComponent do
|
|||||||
def handle_event(
|
def handle_event(
|
||||||
"sort_by",
|
"sort_by",
|
||||||
%{"sort-key" => key},
|
%{"sort-key" => key},
|
||||||
%{assigns: %{rows: rows, last_sort_key: key, sort_mode: sort_mode}} = socket
|
%{assigns: %{rows: rows, last_sort_key: last_sort_key, sort_mode: sort_mode}} = socket
|
||||||
) do
|
) do
|
||||||
sort_mode = if sort_mode == :asc, do: :desc, else: :asc
|
key = key |> String.to_existing_atom()
|
||||||
rows = rows |> sort_by_custom_sort_value_or_value(key, sort_mode)
|
|
||||||
{:noreply, socket |> assign(sort_mode: sort_mode, rows: rows)}
|
sort_mode =
|
||||||
|
case {key, sort_mode} do
|
||||||
|
{^last_sort_key, :asc} -> :desc
|
||||||
|
{^last_sort_key, :desc} -> :asc
|
||||||
|
{_new_sort_key, _last_sort_mode} -> :asc
|
||||||
end
|
end
|
||||||
|
|
||||||
def handle_event(
|
rows = rows |> sort_by_custom_sort_value_or_value(key, sort_mode)
|
||||||
"sort_by",
|
{:noreply, socket |> assign(last_sort_key: key, sort_mode: sort_mode, rows: rows)}
|
||||||
%{"sort-key" => key},
|
|
||||||
%{assigns: %{rows: rows}} = socket
|
|
||||||
) do
|
|
||||||
rows = rows |> sort_by_custom_sort_value_or_value(key, :asc)
|
|
||||||
{:noreply, socket |> assign(last_sort_key: key, sort_mode: :asc, rows: rows)}
|
|
||||||
end
|
end
|
||||||
|
|
||||||
defp sort_by_custom_sort_value_or_value(rows, key, sort_mode) do
|
defp sort_by_custom_sort_value_or_value(rows, key, sort_mode) do
|
||||||
|
@ -1,4 +1,4 @@
|
|||||||
<div class="w-full overflow-x-auto border border-gray-600 rounded-lg shadow-lg bg-black">
|
<div id={@id} class="w-full overflow-x-auto border border-gray-600 rounded-lg shadow-lg bg-black">
|
||||||
<table class="min-w-full table-auto text-center bg-white">
|
<table class="min-w-full table-auto text-center bg-white">
|
||||||
<thead class="border-b border-primary-600">
|
<thead class="border-b border-primary-600">
|
||||||
<tr>
|
<tr>
|
||||||
|
@ -4,6 +4,10 @@ defmodule CanneryWeb.Components.TagCard do
|
|||||||
"""
|
"""
|
||||||
|
|
||||||
use CanneryWeb, :component
|
use CanneryWeb, :component
|
||||||
|
alias Cannery.Tags.Tag
|
||||||
|
|
||||||
|
attr :tag, Tag, required: true
|
||||||
|
slot(:inner_block, required: true)
|
||||||
|
|
||||||
def tag_card(assigns) do
|
def tag_card(assigns) do
|
||||||
~H"""
|
~H"""
|
||||||
@ -19,6 +23,8 @@ defmodule CanneryWeb.Components.TagCard do
|
|||||||
"""
|
"""
|
||||||
end
|
end
|
||||||
|
|
||||||
|
attr :tag, Tag, required: true
|
||||||
|
|
||||||
def simple_tag_card(assigns) do
|
def simple_tag_card(assigns) do
|
||||||
~H"""
|
~H"""
|
||||||
<h1
|
<h1
|
||||||
|
@ -16,16 +16,17 @@ 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 to: Routes.live_path(Endpoint, HomeLive),
|
<.link
|
||||||
class: "inline mx-2 my-1 leading-5 text-xl text-white"
|
navigate={Routes.live_path(Endpoint, HomeLive)}
|
||||||
do %>
|
class="inline mx-2 my-1 leading-5 text-xl text-white"
|
||||||
|
>
|
||||||
<img
|
<img
|
||||||
src={Routes.static_path(Endpoint, "/images/cannery.svg")}
|
src={Routes.static_path(Endpoint, "/images/cannery.svg")}
|
||||||
alt={gettext("Cannery logo")}
|
alt={gettext("Cannery logo")}
|
||||||
class="inline-block h-8 mx-1"
|
class="inline-block h-8 mx-1"
|
||||||
/>
|
/>
|
||||||
<h1 class="inline hover:underline">Cannery</h1>
|
<h1 class="inline hover:underline">Cannery</h1>
|
||||||
<% end %>
|
</.link>
|
||||||
|
|
||||||
<%= if @title_content do %>
|
<%= if @title_content do %>
|
||||||
<span class="mx-2 my-1">
|
<span class="mx-2 my-1">
|
||||||
@ -41,78 +42,100 @@ defmodule CanneryWeb.Components.Topbar do
|
|||||||
text-lg text-white text-ellipsis">
|
text-lg text-white text-ellipsis">
|
||||||
<%= if @current_user do %>
|
<%= if @current_user do %>
|
||||||
<li class="mx-2 my-1">
|
<li class="mx-2 my-1">
|
||||||
<%= live_redirect(gettext("Tags"),
|
<.link
|
||||||
to: Routes.tag_index_path(Endpoint, :index),
|
navigate={Routes.tag_index_path(Endpoint, :index)}
|
||||||
class: "text-primary-600 text-white hover:underline"
|
class="text-primary-600 text-white hover:underline"
|
||||||
) %>
|
>
|
||||||
|
<%= gettext("Tags") %>
|
||||||
|
</.link>
|
||||||
</li>
|
</li>
|
||||||
<li class="mx-2 my-1">
|
<li class="mx-2 my-1">
|
||||||
<%= live_redirect(gettext("Containers"),
|
<.link
|
||||||
to: Routes.container_index_path(Endpoint, :index),
|
navigate={Routes.container_index_path(Endpoint, :index)}
|
||||||
class: "text-primary-600 text-white hover:underline"
|
class="text-primary-600 text-white hover:underline"
|
||||||
) %>
|
>
|
||||||
|
<%= gettext("Containers") %>
|
||||||
|
</.link>
|
||||||
</li>
|
</li>
|
||||||
<li class="mx-2 my-1">
|
<li class="mx-2 my-1">
|
||||||
<%= live_redirect(gettext("Catalog"),
|
<.link
|
||||||
to: Routes.ammo_type_index_path(Endpoint, :index),
|
navigate={Routes.ammo_type_index_path(Endpoint, :index)}
|
||||||
class: "text-primary-600 text-white hover:underline"
|
class="text-primary-600 text-white hover:underline"
|
||||||
) %>
|
>
|
||||||
|
<%= gettext("Catalog") %>
|
||||||
|
</.link>
|
||||||
</li>
|
</li>
|
||||||
<li class="mx-2 my-1">
|
<li class="mx-2 my-1">
|
||||||
<%= live_redirect(gettext("Ammo"),
|
<.link
|
||||||
to: Routes.ammo_group_index_path(Endpoint, :index),
|
navigate={Routes.ammo_group_index_path(Endpoint, :index)}
|
||||||
class: "text-primary-600 text-white hover:underline"
|
class="text-primary-600 text-white hover:underline"
|
||||||
) %>
|
>
|
||||||
|
<%= gettext("Ammo") %>
|
||||||
|
</.link>
|
||||||
</li>
|
</li>
|
||||||
<li class="mx-2 my-1">
|
<li class="mx-2 my-1">
|
||||||
<%= live_redirect(gettext("Range"),
|
<.link
|
||||||
to: Routes.range_index_path(Endpoint, :index),
|
navigate={Routes.range_index_path(Endpoint, :index)}
|
||||||
class: "text-primary-600 text-white hover:underline"
|
class="text-primary-600 text-white hover:underline"
|
||||||
) %>
|
>
|
||||||
|
<%= gettext("Range") %>
|
||||||
|
</.link>
|
||||||
</li>
|
</li>
|
||||||
<%= if @current_user.role == :admin do %>
|
<%= if @current_user.role == :admin do %>
|
||||||
<li class="mx-2 my-1">
|
<li class="mx-2 my-1">
|
||||||
<%= live_redirect(gettext("Invites"),
|
<.link
|
||||||
to: Routes.invite_index_path(Endpoint, :index),
|
navigate={Routes.invite_index_path(Endpoint, :index)}
|
||||||
class: "text-primary-600 text-white hover:underline"
|
class="text-primary-600 text-white hover:underline"
|
||||||
) %>
|
>
|
||||||
|
<%= gettext("Invites") %>
|
||||||
|
</.link>
|
||||||
</li>
|
</li>
|
||||||
<% end %>
|
<% end %>
|
||||||
<li class="mx-2 my-1">
|
<li class="mx-2 my-1">
|
||||||
<%= live_redirect(@current_user.email,
|
<.link
|
||||||
to: Routes.user_settings_path(Endpoint, :edit),
|
navigate={Routes.user_settings_path(Endpoint, :edit)}
|
||||||
class: "text-primary-600 text-white hover:underline truncate"
|
class="text-primary-600 text-white hover:underline truncate"
|
||||||
) %>
|
>
|
||||||
|
<%= @current_user.email %>
|
||||||
|
</.link>
|
||||||
</li>
|
</li>
|
||||||
<li class="mx-2 my-1">
|
<li class="mx-2 my-1">
|
||||||
<%= link to: Routes.user_session_path(Endpoint, :delete),
|
<.link
|
||||||
method: :delete,
|
href={Routes.user_session_path(Endpoint, :delete)}
|
||||||
data: [confirm: dgettext("prompts", "Are you sure you want to log out?")] do %>
|
method="delete"
|
||||||
|
data-confirm={dgettext("prompts", "Are you sure you want to log out?")}
|
||||||
|
>
|
||||||
<i class="fas fa-sign-out-alt"></i>
|
<i class="fas fa-sign-out-alt"></i>
|
||||||
<% end %>
|
</.link>
|
||||||
</li>
|
</li>
|
||||||
<%= if @current_user.role == :admin and function_exported?(Routes, :live_dashboard_path, 2) do %>
|
<%= if @current_user.role == :admin and function_exported?(Routes, :live_dashboard_path, 2) do %>
|
||||||
<li class="mx-2 my-1">
|
<li class="mx-2 my-1">
|
||||||
<%= live_redirect to: Routes.live_dashboard_path(Endpoint, :home),
|
<.link
|
||||||
class: "text-primary-600 text-white hover:underline" do %>
|
navigate={Routes.live_dashboard_path(Endpoint, :home)}
|
||||||
|
class="text-primary-600 text-white hover:underline"
|
||||||
|
>
|
||||||
<i class="fas fa-gauge"></i>
|
<i class="fas fa-gauge"></i>
|
||||||
<% end %>
|
</.link>
|
||||||
</li>
|
</li>
|
||||||
<% end %>
|
<% end %>
|
||||||
<% else %>
|
<% else %>
|
||||||
<%= if Accounts.allow_registration?() do %>
|
<%= if Accounts.allow_registration?() do %>
|
||||||
<li class="mx-2 my-1">
|
<li class="mx-2 my-1">
|
||||||
<%= live_redirect(dgettext("actions", "Register"),
|
<.link
|
||||||
to: Routes.user_registration_path(Endpoint, :new),
|
navigate={Routes.user_registration_path(Endpoint, :new)}
|
||||||
class: "text-primary-600 text-white hover:underline truncate"
|
class="text-primary-600 text-white hover:underline truncate"
|
||||||
) %>
|
>
|
||||||
|
<%= dgettext("actions", "Register") %>
|
||||||
|
</.link>
|
||||||
</li>
|
</li>
|
||||||
<% end %>
|
<% end %>
|
||||||
<li class="mx-2 my-1">
|
<li class="mx-2 my-1">
|
||||||
<%= live_redirect(dgettext("actions", "Log in"),
|
<.link
|
||||||
to: Routes.user_session_path(Endpoint, :new),
|
navigate={Routes.user_session_path(Endpoint, :new)}
|
||||||
class: "text-primary-600 text-white hover:underline truncate"
|
class="text-primary-600 text-white hover:underline truncate"
|
||||||
) %>
|
>
|
||||||
|
<%= dgettext("actions", "Log in") %>
|
||||||
|
</.link>
|
||||||
</li>
|
</li>
|
||||||
<% end %>
|
<% end %>
|
||||||
</ul>
|
</ul>
|
||||||
|
@ -4,6 +4,10 @@ defmodule CanneryWeb.Components.UserCard do
|
|||||||
"""
|
"""
|
||||||
|
|
||||||
use CanneryWeb, :component
|
use CanneryWeb, :component
|
||||||
|
alias Cannery.Accounts.User
|
||||||
|
|
||||||
|
attr :user, User, required: true
|
||||||
|
slot(:inner_block, required: true)
|
||||||
|
|
||||||
def user_card(assigns) do
|
def user_card(assigns) do
|
||||||
~H"""
|
~H"""
|
||||||
|
65
lib/cannery_web/controllers/export_controller.ex
Normal file
65
lib/cannery_web/controllers/export_controller.ex
Normal file
@ -0,0 +1,65 @@
|
|||||||
|
defmodule CanneryWeb.ExportController do
|
||||||
|
use CanneryWeb, :controller
|
||||||
|
alias Cannery.{ActivityLog, Ammo, Containers}
|
||||||
|
|
||||||
|
def export(%{assigns: %{current_user: current_user}} = conn, %{"mode" => "json"}) do
|
||||||
|
ammo_types =
|
||||||
|
Ammo.list_ammo_types(current_user)
|
||||||
|
|> Enum.map(fn ammo_type ->
|
||||||
|
average_cost = ammo_type |> Ammo.get_average_cost_for_ammo_type!(current_user)
|
||||||
|
round_count = ammo_type |> Ammo.get_round_count_for_ammo_type(current_user)
|
||||||
|
used_count = ammo_type |> Ammo.get_used_count_for_ammo_type(current_user)
|
||||||
|
ammo_group_count = ammo_type |> Ammo.get_ammo_groups_count_for_type(current_user, true)
|
||||||
|
|
||||||
|
ammo_type
|
||||||
|
|> Jason.encode!()
|
||||||
|
|> Jason.decode!()
|
||||||
|
|> Map.merge(%{
|
||||||
|
"average_cost" => average_cost,
|
||||||
|
"round_count" => round_count,
|
||||||
|
"used_count" => used_count,
|
||||||
|
"ammo_group_count" => ammo_group_count
|
||||||
|
})
|
||||||
|
end)
|
||||||
|
|
||||||
|
ammo_groups =
|
||||||
|
Ammo.list_ammo_groups(current_user, true)
|
||||||
|
|> Enum.map(fn ammo_group ->
|
||||||
|
used_count = ammo_group |> Ammo.get_used_count()
|
||||||
|
percentage_remaining = ammo_group |> Ammo.get_percentage_remaining()
|
||||||
|
|
||||||
|
ammo_group
|
||||||
|
|> Jason.encode!()
|
||||||
|
|> Jason.decode!()
|
||||||
|
|> Map.merge(%{
|
||||||
|
"used_count" => used_count,
|
||||||
|
"percentage_remaining" => percentage_remaining
|
||||||
|
})
|
||||||
|
end)
|
||||||
|
|
||||||
|
shot_groups = ActivityLog.list_shot_groups(current_user)
|
||||||
|
|
||||||
|
containers =
|
||||||
|
Containers.list_containers(current_user)
|
||||||
|
|> Enum.map(fn container ->
|
||||||
|
ammo_group_count = container |> Containers.get_container_ammo_group_count!()
|
||||||
|
round_count = container |> Containers.get_container_rounds!()
|
||||||
|
|
||||||
|
container
|
||||||
|
|> Jason.encode!()
|
||||||
|
|> Jason.decode!()
|
||||||
|
|> Map.merge(%{
|
||||||
|
"ammo_group_count" => ammo_group_count,
|
||||||
|
"round_count" => round_count
|
||||||
|
})
|
||||||
|
end)
|
||||||
|
|
||||||
|
json(conn, %{
|
||||||
|
user: current_user,
|
||||||
|
ammo_types: ammo_types,
|
||||||
|
ammo_groups: ammo_groups,
|
||||||
|
shot_groups: shot_groups,
|
||||||
|
containers: containers
|
||||||
|
})
|
||||||
|
end
|
||||||
|
end
|
@ -73,14 +73,14 @@ defmodule CanneryWeb.AmmoGroupLive.FormComponent do
|
|||||||
ammo_group_params
|
ammo_group_params
|
||||||
) do
|
) do
|
||||||
changeset_action =
|
changeset_action =
|
||||||
case action do
|
cond do
|
||||||
:new -> :insert
|
action in [:new, :clone] -> :insert
|
||||||
:edit -> :update
|
action == :edit -> :update
|
||||||
end
|
end
|
||||||
|
|
||||||
changeset =
|
changeset =
|
||||||
case action do
|
cond do
|
||||||
:new ->
|
action in [:new, :clone] ->
|
||||||
ammo_type =
|
ammo_type =
|
||||||
if ammo_group_params |> Map.has_key?("ammo_type_id"),
|
if ammo_group_params |> Map.has_key?("ammo_type_id"),
|
||||||
do: ammo_group_params |> Map.get("ammo_type_id") |> Ammo.get_ammo_type!(user),
|
do: ammo_group_params |> Map.get("ammo_type_id") |> Ammo.get_ammo_type!(user),
|
||||||
@ -93,8 +93,8 @@ defmodule CanneryWeb.AmmoGroupLive.FormComponent do
|
|||||||
|
|
||||||
ammo_group |> AmmoGroup.create_changeset(ammo_type, container, user, ammo_group_params)
|
ammo_group |> AmmoGroup.create_changeset(ammo_type, container, user, ammo_group_params)
|
||||||
|
|
||||||
:edit ->
|
action == :edit ->
|
||||||
ammo_group |> AmmoGroup.update_changeset(ammo_group_params)
|
ammo_group |> AmmoGroup.update_changeset(ammo_group_params, user)
|
||||||
end
|
end
|
||||||
|
|
||||||
changeset =
|
changeset =
|
||||||
@ -116,7 +116,7 @@ defmodule CanneryWeb.AmmoGroupLive.FormComponent do
|
|||||||
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 updated successfully")
|
prompt = dgettext("prompts", "Ammo updated successfully")
|
||||||
socket |> put_flash(:info, prompt) |> push_redirect(to: return_to)
|
socket |> put_flash(:info, prompt) |> push_navigate(to: return_to)
|
||||||
|
|
||||||
{:error, %Changeset{} = changeset} ->
|
{:error, %Changeset{} = changeset} ->
|
||||||
socket |> assign(:changeset, changeset)
|
socket |> assign(:changeset, changeset)
|
||||||
@ -127,9 +127,10 @@ defmodule CanneryWeb.AmmoGroupLive.FormComponent do
|
|||||||
|
|
||||||
defp save_ammo_group(
|
defp save_ammo_group(
|
||||||
%{assigns: %{changeset: changeset}} = socket,
|
%{assigns: %{changeset: changeset}} = socket,
|
||||||
:new,
|
action,
|
||||||
%{"multiplier" => multiplier_str} = ammo_group_params
|
%{"multiplier" => multiplier_str} = ammo_group_params
|
||||||
) do
|
)
|
||||||
|
when action in [:new, :clone] do
|
||||||
socket =
|
socket =
|
||||||
case multiplier_str |> Integer.parse() do
|
case multiplier_str |> Integer.parse() do
|
||||||
{multiplier, _remainder}
|
{multiplier, _remainder}
|
||||||
@ -181,7 +182,7 @@ defmodule CanneryWeb.AmmoGroupLive.FormComponent do
|
|||||||
count
|
count
|
||||||
)
|
)
|
||||||
|
|
||||||
socket |> put_flash(:info, prompt) |> push_redirect(to: return_to)
|
socket |> put_flash(:info, prompt) |> push_navigate(to: return_to)
|
||||||
|
|
||||||
{:error, %Changeset{} = changeset} ->
|
{:error, %Changeset{} = changeset} ->
|
||||||
socket |> assign(changeset: changeset)
|
socket |> assign(changeset: changeset)
|
||||||
|
@ -4,7 +4,7 @@
|
|||||||
</h2>
|
</h2>
|
||||||
|
|
||||||
<.form
|
<.form
|
||||||
let={f}
|
:let={f}
|
||||||
for={@changeset}
|
for={@changeset}
|
||||||
id="ammo_group-form"
|
id="ammo_group-form"
|
||||||
phx-target={@myself}
|
phx-target={@myself}
|
||||||
@ -51,8 +51,8 @@
|
|||||||
) %>
|
) %>
|
||||||
<%= error_tag(f, :container_id, "col-span-3 text-center") %>
|
<%= error_tag(f, :container_id, "col-span-3 text-center") %>
|
||||||
|
|
||||||
<%= case @action do %>
|
<%= cond do %>
|
||||||
<% :new -> %>
|
<% @action in [:new, :clone] -> %>
|
||||||
<hr class="hr col-span-3" />
|
<hr class="hr col-span-3" />
|
||||||
|
|
||||||
<%= label(f, :multiplier, gettext("Copies"), class: "title text-lg text-primary-600") %>
|
<%= label(f, :multiplier, gettext("Copies"), class: "title text-lg text-primary-600") %>
|
||||||
@ -69,7 +69,7 @@
|
|||||||
) %>
|
) %>
|
||||||
|
|
||||||
<%= error_tag(f, :multiplier, "col-span-3 text-center") %>
|
<%= error_tag(f, :multiplier, "col-span-3 text-center") %>
|
||||||
<% :edit -> %>
|
<% @action == :edit -> %>
|
||||||
<%= submit(dgettext("actions", "Save"),
|
<%= submit(dgettext("actions", "Save"),
|
||||||
phx_disable_with: dgettext("prompts", "Saving..."),
|
phx_disable_with: dgettext("prompts", "Saving..."),
|
||||||
class: "mx-auto col-span-3 btn btn-primary"
|
class: "mx-auto col-span-3 btn btn-primary"
|
||||||
|
@ -9,12 +9,12 @@ defmodule CanneryWeb.AmmoGroupLive.Index do
|
|||||||
|
|
||||||
@impl true
|
@impl true
|
||||||
def mount(_params, _session, socket) do
|
def mount(_params, _session, socket) do
|
||||||
{:ok, socket |> assign(show_used: false) |> display_ammo_groups()}
|
{:ok, socket |> assign(show_used: false)}
|
||||||
end
|
end
|
||||||
|
|
||||||
@impl true
|
@impl true
|
||||||
def handle_params(params, _url, %{assigns: %{live_action: live_action}} = socket) do
|
def handle_params(params, _url, %{assigns: %{live_action: live_action}} = socket) do
|
||||||
{:noreply, apply_action(socket, live_action, params)}
|
{:noreply, apply_action(socket, live_action, params) |> display_ammo_groups()}
|
||||||
end
|
end
|
||||||
|
|
||||||
defp apply_action(
|
defp apply_action(
|
||||||
@ -39,6 +39,12 @@ defmodule CanneryWeb.AmmoGroupLive.Index do
|
|||||||
|> assign(:ammo_group, Ammo.get_ammo_group!(id, current_user))
|
|> assign(:ammo_group, Ammo.get_ammo_group!(id, current_user))
|
||||||
end
|
end
|
||||||
|
|
||||||
|
defp apply_action(%{assigns: %{current_user: current_user}} = socket, :clone, %{"id" => id}) do
|
||||||
|
socket
|
||||||
|
|> assign(:page_title, dgettext("actions", "Add Ammo"))
|
||||||
|
|> assign(:ammo_group, %{Ammo.get_ammo_group!(id, current_user) | id: nil})
|
||||||
|
end
|
||||||
|
|
||||||
defp apply_action(socket, :new, _params) do
|
defp apply_action(socket, :new, _params) do
|
||||||
socket
|
socket
|
||||||
|> assign(:page_title, dgettext("actions", "Add Ammo"))
|
|> assign(:page_title, dgettext("actions", "Add Ammo"))
|
||||||
@ -46,7 +52,9 @@ defmodule CanneryWeb.AmmoGroupLive.Index do
|
|||||||
end
|
end
|
||||||
|
|
||||||
defp apply_action(socket, :index, _params) do
|
defp apply_action(socket, :index, _params) do
|
||||||
socket |> assign(:page_title, gettext("Ammo groups")) |> assign(:ammo_group, nil)
|
socket
|
||||||
|
|> assign(:page_title, gettext("Ammo groups"))
|
||||||
|
|> assign(:ammo_group, nil)
|
||||||
end
|
end
|
||||||
|
|
||||||
@impl true
|
@impl true
|
||||||
@ -73,7 +81,7 @@ defmodule CanneryWeb.AmmoGroupLive.Index do
|
|||||||
end
|
end
|
||||||
|
|
||||||
@impl true
|
@impl true
|
||||||
def handle_event("toggle_show_used", _, %{assigns: %{show_used: show_used}} = socket) do
|
def handle_event("toggle_show_used", _params, %{assigns: %{show_used: show_used}} = socket) do
|
||||||
{:noreply, socket |> assign(:show_used, !show_used) |> display_ammo_groups()}
|
{:noreply, socket |> assign(:show_used, !show_used) |> display_ammo_groups()}
|
||||||
end
|
end
|
||||||
|
|
||||||
@ -81,22 +89,31 @@ defmodule CanneryWeb.AmmoGroupLive.Index do
|
|||||||
%{assigns: %{current_user: current_user, show_used: show_used}} = socket
|
%{assigns: %{current_user: current_user, show_used: show_used}} = socket
|
||||||
) do
|
) do
|
||||||
ammo_groups =
|
ammo_groups =
|
||||||
Ammo.list_ammo_groups(current_user, show_used) |> Repo.preload([:ammo_type, :container])
|
Ammo.list_ammo_groups(current_user, show_used)
|
||||||
|
|> Repo.preload([:ammo_type, :container], force: true)
|
||||||
|
|
||||||
ammo_types_count = Ammo.get_ammo_types_count!(current_user)
|
ammo_types_count = Ammo.get_ammo_types_count!(current_user)
|
||||||
containers_count = Containers.get_containers_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},
|
||||||
%{label: gettext("Count"), key: "count"},
|
%{label: gettext("Count"), key: :count},
|
||||||
%{label: gettext("Price paid"), key: "price_paid"},
|
%{label: gettext("Price paid"), key: :price_paid},
|
||||||
%{label: gettext("% left"), key: "remaining"},
|
%{label: gettext("% left"), key: :remaining},
|
||||||
%{label: gettext("Range"), key: "range"},
|
%{label: gettext("Range"), key: :range},
|
||||||
%{label: gettext("Container"), key: "container"},
|
%{label: gettext("Container"), key: :container},
|
||||||
%{label: gettext("Added on"), key: "added_on"},
|
%{label: gettext("Added on"), key: :added_on}
|
||||||
%{label: nil, key: "actions", sortable: false}
|
|
||||||
]
|
]
|
||||||
|
|
||||||
|
columns =
|
||||||
|
if show_used do
|
||||||
|
columns ++ [%{label: gettext("Used up on"), key: :used_up_on}]
|
||||||
|
else
|
||||||
|
columns
|
||||||
|
end
|
||||||
|
|
||||||
|
columns = columns ++ [%{label: nil, key: :actions, sortable: false}]
|
||||||
|
|
||||||
rows =
|
rows =
|
||||||
ammo_groups
|
ammo_groups
|
||||||
|> 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)
|
||||||
@ -119,21 +136,24 @@ defmodule CanneryWeb.AmmoGroupLive.Index do
|
|||||||
|> Enum.into(%{}, fn %{key: key} -> {key, get_value_for_key(key, ammo_group)} end)
|
|> Enum.into(%{}, fn %{key: key} -> {key, get_value_for_key(key, ammo_group)} end)
|
||||||
end
|
end
|
||||||
|
|
||||||
@spec get_value_for_key(String.t(), AmmoGroup.t()) :: any()
|
@spec get_value_for_key(atom(), AmmoGroup.t()) :: any()
|
||||||
defp get_value_for_key("ammo_type", %{ammo_type: ammo_type}) do
|
defp get_value_for_key(:ammo_type, %{ammo_type: ammo_type}) do
|
||||||
|
assigns = %{ammo_type: ammo_type}
|
||||||
|
|
||||||
{ammo_type.name,
|
{ammo_type.name,
|
||||||
live_patch(ammo_type.name,
|
~H"""
|
||||||
to: Routes.ammo_type_show_path(Endpoint, :show, ammo_type),
|
<.link navigate={Routes.ammo_type_show_path(Endpoint, :show, @ammo_type)} class="link">
|
||||||
class: "link"
|
<%= @ammo_type.name %>
|
||||||
)}
|
</.link>
|
||||||
|
"""}
|
||||||
end
|
end
|
||||||
|
|
||||||
defp get_value_for_key("price_paid", %{price_paid: nil}), do: {"a", nil}
|
defp get_value_for_key(:price_paid, %{price_paid: nil}), do: {"a", nil}
|
||||||
|
|
||||||
defp get_value_for_key("price_paid", %{price_paid: price_paid}),
|
defp get_value_for_key(:price_paid, %{price_paid: price_paid}),
|
||||||
do: gettext("$%{amount}", amount: price_paid |> :erlang.float_to_binary(decimals: 2))
|
do: gettext("$%{amount}", amount: price_paid |> :erlang.float_to_binary(decimals: 2))
|
||||||
|
|
||||||
defp get_value_for_key("added_on", %{inserted_at: inserted_at}) do
|
defp get_value_for_key(:added_on, %{inserted_at: inserted_at}) do
|
||||||
assigns = %{inserted_at: inserted_at}
|
assigns = %{inserted_at: inserted_at}
|
||||||
|
|
||||||
{inserted_at,
|
{inserted_at,
|
||||||
@ -142,7 +162,22 @@ defmodule CanneryWeb.AmmoGroupLive.Index do
|
|||||||
"""}
|
"""}
|
||||||
end
|
end
|
||||||
|
|
||||||
defp get_value_for_key("range", %{staged: staged} = ammo_group) do
|
defp get_value_for_key(:used_up_on, ammo_group) do
|
||||||
|
last_shot_group_date =
|
||||||
|
case ammo_group |> Ammo.get_last_used_shot_group() do
|
||||||
|
%{date: last_shot_group_date} -> last_shot_group_date
|
||||||
|
_no_shot_groups -> nil
|
||||||
|
end
|
||||||
|
|
||||||
|
assigns = %{last_shot_group_date: last_shot_group_date}
|
||||||
|
|
||||||
|
{last_shot_group_date,
|
||||||
|
~H"""
|
||||||
|
<%= @last_shot_group_date |> display_date() %>
|
||||||
|
"""}
|
||||||
|
end
|
||||||
|
|
||||||
|
defp get_value_for_key(:range, %{staged: staged} = ammo_group) do
|
||||||
assigns = %{ammo_group: ammo_group}
|
assigns = %{ammo_group: ammo_group}
|
||||||
|
|
||||||
{staged,
|
{staged,
|
||||||
@ -152,76 +187,91 @@ defmodule CanneryWeb.AmmoGroupLive.Index do
|
|||||||
type="button"
|
type="button"
|
||||||
class="mx-2 my-1 text-sm btn btn-primary"
|
class="mx-2 my-1 text-sm btn btn-primary"
|
||||||
phx-click="toggle_staged"
|
phx-click="toggle_staged"
|
||||||
phx-value-ammo_group_id={ammo_group.id}
|
phx-value-ammo_group_id={@ammo_group.id}
|
||||||
>
|
>
|
||||||
<%= if ammo_group.staged, do: gettext("Unstage"), else: gettext("Stage") %>
|
<%= if @ammo_group.staged, do: gettext("Unstage"), else: gettext("Stage") %>
|
||||||
</button>
|
</button>
|
||||||
|
|
||||||
<%= live_patch(dgettext("actions", "Record shots"),
|
<.link
|
||||||
to: Routes.ammo_group_index_path(Endpoint, :add_shot_group, ammo_group),
|
patch={Routes.ammo_group_index_path(Endpoint, :add_shot_group, @ammo_group)}
|
||||||
class: "mx-2 my-1 text-sm btn btn-primary"
|
class="mx-2 my-1 text-sm btn btn-primary"
|
||||||
) %>
|
>
|
||||||
|
<%= dgettext("actions", "Record shots") %>
|
||||||
|
</.link>
|
||||||
</div>
|
</div>
|
||||||
"""}
|
"""}
|
||||||
end
|
end
|
||||||
|
|
||||||
defp get_value_for_key("remaining", ammo_group),
|
defp get_value_for_key(:remaining, ammo_group),
|
||||||
do: "#{ammo_group |> Ammo.get_percentage_remaining()}%"
|
do: gettext("%{percentage}%", percentage: ammo_group |> Ammo.get_percentage_remaining())
|
||||||
|
|
||||||
defp get_value_for_key("actions", ammo_group) do
|
defp get_value_for_key(:actions, ammo_group) do
|
||||||
assigns = %{ammo_group: ammo_group}
|
assigns = %{ammo_group: ammo_group}
|
||||||
|
|
||||||
~H"""
|
~H"""
|
||||||
<div class="py-2 px-4 h-full space-x-4 flex justify-center items-center">
|
<div class="py-2 px-4 h-full space-x-4 flex justify-center items-center">
|
||||||
<%= live_redirect to: Routes.ammo_group_show_path(Endpoint, :show, ammo_group),
|
<.link
|
||||||
class: "text-primary-600 link",
|
navigate={Routes.ammo_group_show_path(Endpoint, :show, @ammo_group)}
|
||||||
data: [qa: "view-#{ammo_group.id}"] do %>
|
class="text-primary-600 link"
|
||||||
|
data-qa={"view-#{@ammo_group.id}"}
|
||||||
|
>
|
||||||
<i class="fa-fw fa-lg fas fa-eye"></i>
|
<i class="fa-fw fa-lg fas fa-eye"></i>
|
||||||
<% end %>
|
</.link>
|
||||||
|
|
||||||
<%= live_patch to: Routes.ammo_group_index_path(Endpoint, :edit, ammo_group),
|
<.link
|
||||||
class: "text-primary-600 link",
|
patch={Routes.ammo_group_index_path(Endpoint, :edit, @ammo_group)}
|
||||||
data: [qa: "edit-#{ammo_group.id}"] do %>
|
class="text-primary-600 link"
|
||||||
|
data-qa={"edit-#{@ammo_group.id}"}
|
||||||
|
>
|
||||||
<i class="fa-fw fa-lg fas fa-edit"></i>
|
<i class="fa-fw fa-lg fas fa-edit"></i>
|
||||||
<% end %>
|
</.link>
|
||||||
|
|
||||||
<%= link to: "#",
|
<.link
|
||||||
class: "text-primary-600 link",
|
patch={Routes.ammo_group_index_path(Endpoint, :clone, @ammo_group)}
|
||||||
phx_click: "delete",
|
class="text-primary-600 link"
|
||||||
phx_value_id: ammo_group.id,
|
data-qa={"clone-#{@ammo_group.id}"}
|
||||||
data: [
|
>
|
||||||
confirm: dgettext("prompts", "Are you sure you want to delete this ammo?"),
|
<i class="fa-fw fa-lg fas fa-copy"></i>
|
||||||
qa: "delete-#{ammo_group.id}"
|
</.link>
|
||||||
] do %>
|
|
||||||
|
<.link
|
||||||
|
href="#"
|
||||||
|
class="text-primary-600 link"
|
||||||
|
phx-click="delete"
|
||||||
|
phx-value-id={@ammo_group.id}
|
||||||
|
data-confirm={dgettext("prompts", "Are you sure you want to delete this ammo?")}
|
||||||
|
data-qa={"delete-#{@ammo_group.id}"}
|
||||||
|
>
|
||||||
<i class="fa-fw fa-lg fas fa-trash"></i>
|
<i class="fa-fw fa-lg fas fa-trash"></i>
|
||||||
<% end %>
|
</.link>
|
||||||
</div>
|
</div>
|
||||||
"""
|
"""
|
||||||
end
|
end
|
||||||
|
|
||||||
defp get_value_for_key("container", %{container: nil}), do: {nil, nil}
|
defp get_value_for_key(:container, %{container: nil}), do: {nil, nil}
|
||||||
|
|
||||||
defp get_value_for_key("container", %{container: %{name: container_name}} = ammo_group) do
|
defp get_value_for_key(:container, %{container: %{name: container_name}} = ammo_group) do
|
||||||
assigns = %{ammo_group: ammo_group}
|
assigns = %{ammo_group: ammo_group}
|
||||||
|
|
||||||
{container_name,
|
{container_name,
|
||||||
~H"""
|
~H"""
|
||||||
<div class="min-w-20 py-2 px-4 h-full flex flew-wrap justify-center items-center">
|
<div class="min-w-20 py-2 px-4 h-full flex flew-wrap justify-center items-center">
|
||||||
<%= live_patch(
|
<.link
|
||||||
@ammo_group.container.name,
|
navigate={Routes.container_show_path(Endpoint, :show, @ammo_group.container)}
|
||||||
to: Routes.container_show_path(Endpoint, :show, @ammo_group.container),
|
class="mx-2 my-1 link"
|
||||||
class: "mx-2 my-1 link"
|
>
|
||||||
) %>
|
<%= @ammo_group.container.name %>
|
||||||
|
</.link>
|
||||||
|
|
||||||
<%= live_patch(
|
<.link
|
||||||
gettext("Move ammo"),
|
patch={Routes.ammo_group_index_path(Endpoint, :move, @ammo_group)}
|
||||||
to: Routes.ammo_group_index_path(Endpoint, :move, @ammo_group),
|
class="mx-2 my-1 text-sm btn btn-primary"
|
||||||
class: "mx-2 my-1 text-sm btn btn-primary"
|
>
|
||||||
) %>
|
<%= gettext("Move ammo") %>
|
||||||
|
</.link>
|
||||||
</div>
|
</div>
|
||||||
"""}
|
"""}
|
||||||
end
|
end
|
||||||
|
|
||||||
defp get_value_for_key(key, ammo_group),
|
defp get_value_for_key(key, ammo_group), do: ammo_group |> Map.get(key)
|
||||||
do: ammo_group |> Map.get(key |> String.to_existing_atom())
|
|
||||||
end
|
end
|
||||||
|
@ -17,10 +17,9 @@
|
|||||||
<%= dgettext("prompts", "You'll need to") %>
|
<%= dgettext("prompts", "You'll need to") %>
|
||||||
</h2>
|
</h2>
|
||||||
|
|
||||||
<%= live_patch(dgettext("actions", "add a container first"),
|
<.link navigate={Routes.container_index_path(Endpoint, :new)} class="btn btn-primary">
|
||||||
to: Routes.container_index_path(Endpoint, :new),
|
<%= dgettext("actions", "add a container first") %>
|
||||||
class: "btn btn-primary"
|
</.link>
|
||||||
) %>
|
|
||||||
</div>
|
</div>
|
||||||
<% @ammo_types_count == 0 -> %>
|
<% @ammo_types_count == 0 -> %>
|
||||||
<div class="flex justify-center items-center">
|
<div class="flex justify-center items-center">
|
||||||
@ -28,21 +27,18 @@
|
|||||||
<%= dgettext("prompts", "You'll need to") %>
|
<%= dgettext("prompts", "You'll need to") %>
|
||||||
</h2>
|
</h2>
|
||||||
|
|
||||||
<%= live_patch(dgettext("actions", "add an ammo type first"),
|
<.link navigate={Routes.ammo_type_index_path(Endpoint, :new)} class="btn btn-primary">
|
||||||
to: Routes.ammo_type_index_path(Endpoint, :new),
|
<%= dgettext("actions", "add an ammo type first") %>
|
||||||
class: "btn btn-primary"
|
</.link>
|
||||||
) %>
|
|
||||||
</div>
|
</div>
|
||||||
<% @ammo_groups |> Enum.empty?() -> %>
|
<% @ammo_groups |> Enum.empty?() -> %>
|
||||||
<%= live_patch(dgettext("actions", "Add your first box!"),
|
<.link patch={Routes.ammo_group_index_path(Endpoint, :new)} class="btn btn-primary">
|
||||||
to: Routes.ammo_group_index_path(Endpoint, :new),
|
<%= dgettext("actions", "Add your first box!") %>
|
||||||
class: "btn btn-primary"
|
</.link>
|
||||||
) %>
|
|
||||||
<% true -> %>
|
<% true -> %>
|
||||||
<%= live_patch(dgettext("actions", "Add Ammo"),
|
<.link patch={Routes.ammo_group_index_path(Endpoint, :new)} class="btn btn-primary">
|
||||||
to: Routes.ammo_group_index_path(Endpoint, :new),
|
<%= dgettext("actions", "Add Ammo") %>
|
||||||
class: "btn btn-primary"
|
</.link>
|
||||||
) %>
|
|
||||||
<% end %>
|
<% end %>
|
||||||
|
|
||||||
<%= unless @ammo_groups |> Enum.empty?() do %>
|
<%= unless @ammo_groups |> Enum.empty?() do %>
|
||||||
@ -65,7 +61,7 @@
|
|||||||
</div>
|
</div>
|
||||||
|
|
||||||
<%= cond do %>
|
<%= cond do %>
|
||||||
<% @live_action in [:new, :edit] -> %>
|
<% @live_action in [:new, :edit, :clone] -> %>
|
||||||
<.modal return_to={Routes.ammo_group_index_path(Endpoint, :index)}>
|
<.modal return_to={Routes.ammo_group_index_path(Endpoint, :index)}>
|
||||||
<.live_component
|
<.live_component
|
||||||
module={CanneryWeb.AmmoGroupLive.FormComponent}
|
module={CanneryWeb.AmmoGroupLive.FormComponent}
|
||||||
|
@ -50,7 +50,7 @@ defmodule CanneryWeb.AmmoGroupLive.Show do
|
|||||||
prompt = dgettext("prompts", "Ammo 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_navigate(to: redirect_to)}
|
||||||
end
|
end
|
||||||
|
|
||||||
@impl true
|
@impl true
|
||||||
@ -84,10 +84,10 @@ defmodule CanneryWeb.AmmoGroupLive.Show do
|
|||||||
ammo_group = ammo_group |> Repo.preload([:container, :ammo_type, :shot_groups], force: true)
|
ammo_group = ammo_group |> Repo.preload([:container, :ammo_type, :shot_groups], force: true)
|
||||||
|
|
||||||
columns = [
|
columns = [
|
||||||
%{label: gettext("Rounds shot"), key: "count"},
|
%{label: gettext("Rounds shot"), key: :count},
|
||||||
%{label: gettext("Notes"), key: "notes"},
|
%{label: gettext("Notes"), key: :notes},
|
||||||
%{label: gettext("Date"), key: "date"},
|
%{label: gettext("Date"), key: :date},
|
||||||
%{label: nil, key: "actions", sortable: false}
|
%{label: nil, key: :actions, sortable: false}
|
||||||
]
|
]
|
||||||
|
|
||||||
rows =
|
rows =
|
||||||
@ -110,33 +110,35 @@ defmodule CanneryWeb.AmmoGroupLive.Show do
|
|||||||
|> Enum.into(%{}, fn %{key: key} ->
|
|> Enum.into(%{}, fn %{key: key} ->
|
||||||
value =
|
value =
|
||||||
case key do
|
case key do
|
||||||
"date" ->
|
:date ->
|
||||||
{date, date |> display_date()}
|
{date, date |> display_date()}
|
||||||
|
|
||||||
"actions" ->
|
:actions ->
|
||||||
~H"""
|
~H"""
|
||||||
<div class="px-4 py-2 space-x-4 flex justify-center items-center">
|
<div class="px-4 py-2 space-x-4 flex justify-center items-center">
|
||||||
<%= live_patch to: Routes.ammo_group_show_path(Endpoint, :edit_shot_group, @ammo_group, shot_group),
|
<.link
|
||||||
class: "text-primary-600 link",
|
patch={Routes.ammo_group_show_path(Endpoint, :edit_shot_group, @ammo_group, @shot_group)}
|
||||||
data: [qa: "edit-#{shot_group.id}"] do %>
|
class="text-primary-600 link"
|
||||||
|
data-qa={"edit-#{@shot_group.id}"}
|
||||||
|
>
|
||||||
<i class="fa-fw fa-lg fas fa-edit"></i>
|
<i class="fa-fw fa-lg fas fa-edit"></i>
|
||||||
<% end %>
|
</.link>
|
||||||
|
|
||||||
<%= link to: "#",
|
<.link
|
||||||
class: "text-primary-600 link",
|
href="#"
|
||||||
phx_click: "delete_shot_group",
|
class="text-primary-600 link"
|
||||||
phx_value_id: shot_group.id,
|
phx-click="delete_shot_group"
|
||||||
data: [
|
phx-value-id={@shot_group.id}
|
||||||
confirm: dgettext("prompts", "Are you sure you want to delete this shot record?"),
|
data-confirm={dgettext("prompts", "Are you sure you want to delete this shot record?")}
|
||||||
qa: "delete-#{shot_group.id}"
|
data-qa={"delete-#{@shot_group.id}"}
|
||||||
] do %>
|
>
|
||||||
<i class="fa-fw fa-lg fas fa-trash"></i>
|
<i class="fa-fw fa-lg fas fa-trash"></i>
|
||||||
<% end %>
|
</.link>
|
||||||
</div>
|
</div>
|
||||||
"""
|
"""
|
||||||
|
|
||||||
key ->
|
key ->
|
||||||
shot_group |> Map.get(key |> String.to_existing_atom())
|
shot_group |> Map.get(key)
|
||||||
end
|
end
|
||||||
|
|
||||||
{key, value}
|
{key, value}
|
||||||
|
@ -16,7 +16,7 @@
|
|||||||
|
|
||||||
<span class="rounded-lg title text-lg">
|
<span class="rounded-lg title text-lg">
|
||||||
<%= gettext("Percentage left:") %>
|
<%= gettext("Percentage left:") %>
|
||||||
<%= "#{@ammo_group |> Ammo.get_percentage_remaining()}%" %>
|
<%= gettext("%{percentage}%", percentage: @ammo_group |> Ammo.get_percentage_remaining()) %>
|
||||||
</span>
|
</span>
|
||||||
|
|
||||||
<%= if @ammo_group.notes do %>
|
<%= if @ammo_group.notes do %>
|
||||||
@ -52,46 +52,54 @@
|
|||||||
|
|
||||||
<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", "View in Catalog"),
|
<.link
|
||||||
to: Routes.ammo_type_show_path(Endpoint, :show, @ammo_group.ammo_type),
|
navigate={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"
|
||||||
) %>
|
>
|
||||||
|
<%= dgettext("actions", "View in Catalog") %>
|
||||||
|
</.link>
|
||||||
|
|
||||||
<%= live_patch to: Routes.ammo_group_show_path(Endpoint, :edit, @ammo_group),
|
<.link
|
||||||
class: "mx-4 my-2 text-primary-600 link",
|
patch={Routes.ammo_group_show_path(Endpoint, :edit, @ammo_group)}
|
||||||
data: [qa: "edit"] do %>
|
class="mx-4 my-2 text-primary-600 link"
|
||||||
|
data-qa="edit"
|
||||||
|
>
|
||||||
<i class="fa-fw fa-lg fas fa-edit"></i>
|
<i class="fa-fw fa-lg fas fa-edit"></i>
|
||||||
<% end %>
|
</.link>
|
||||||
|
|
||||||
<%= link to: "#",
|
<.link
|
||||||
class: "mx-4 my-2 text-primary-600 link",
|
href="#"
|
||||||
phx_click: "delete",
|
class="mx-4 my-2 text-primary-600 link"
|
||||||
data: [
|
phx-click="delete"
|
||||||
confirm: dgettext("prompts", "Are you sure you want to delete this ammo?"),
|
data-confirm={dgettext("prompts", "Are you sure you want to delete this ammo?")}
|
||||||
qa: "delete"
|
data-qa="delete"
|
||||||
] do %>
|
>
|
||||||
<i class="fa-fw fa-lg fas fa-trash"></i>
|
<i class="fa-fw fa-lg fas fa-trash"></i>
|
||||||
<% end %>
|
</.link>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<div class="flex flex-wrap justify-center items-center text-primary-600">
|
<div class="flex flex-wrap justify-center items-center text-primary-600">
|
||||||
<button type="button" class="mx-4 my-2 btn btn-primary" phx-click="toggle_staged">
|
<button type="button" class="mx-4 my-2 btn btn-primary" phx-click="toggle_staged">
|
||||||
<%= if @ammo_group.staged,
|
<%= if @ammo_group.staged,
|
||||||
do: gettext("Unstage from range"),
|
do: dgettext("actions", "Unstage from range"),
|
||||||
else: gettext("Stage for range") %>
|
else: dgettext("actions", "Stage for range") %>
|
||||||
</button>
|
</button>
|
||||||
|
|
||||||
<%= live_patch(dgettext("actions", "Move containers"),
|
<.link
|
||||||
to: Routes.ammo_group_show_path(Endpoint, :move, @ammo_group),
|
patch={Routes.ammo_group_show_path(Endpoint, :move, @ammo_group)}
|
||||||
class: "btn btn-primary",
|
class="btn btn-primary"
|
||||||
data: [qa: "move"]
|
data-qa="move"
|
||||||
) %>
|
>
|
||||||
|
<%= dgettext("actions", "Move containers") %>
|
||||||
|
</.link>
|
||||||
|
|
||||||
<%= live_patch(dgettext("actions", "Record shots"),
|
<.link
|
||||||
to: Routes.ammo_group_show_path(Endpoint, :add_shot_group, @ammo_group),
|
patch={Routes.ammo_group_show_path(Endpoint, :add_shot_group, @ammo_group)}
|
||||||
class: "mx-4 my-2 btn btn-primary"
|
class="mx-4 my-2 btn btn-primary"
|
||||||
) %>
|
>
|
||||||
|
<%= dgettext("actions", "Record shots") %>
|
||||||
|
</.link>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
|
@ -35,15 +35,15 @@ defmodule CanneryWeb.AmmoTypeLive.FormComponent do
|
|||||||
ammo_type_params
|
ammo_type_params
|
||||||
) do
|
) do
|
||||||
changeset_action =
|
changeset_action =
|
||||||
case action do
|
cond do
|
||||||
:new -> :insert
|
action in [:new, :clone] -> :insert
|
||||||
:edit -> :update
|
action == :edit -> :update
|
||||||
end
|
end
|
||||||
|
|
||||||
changeset =
|
changeset =
|
||||||
case action do
|
cond do
|
||||||
:new -> ammo_type |> AmmoType.create_changeset(user, ammo_type_params)
|
action in [:new, :clone] -> ammo_type |> AmmoType.create_changeset(user, ammo_type_params)
|
||||||
:edit -> ammo_type |> AmmoType.update_changeset(ammo_type_params)
|
action == :edit -> ammo_type |> AmmoType.update_changeset(ammo_type_params)
|
||||||
end
|
end
|
||||||
|
|
||||||
changeset =
|
changeset =
|
||||||
@ -65,7 +65,7 @@ defmodule CanneryWeb.AmmoTypeLive.FormComponent do
|
|||||||
case Ammo.update_ammo_type(ammo_type, ammo_type_params, current_user) do
|
case Ammo.update_ammo_type(ammo_type, ammo_type_params, current_user) do
|
||||||
{:ok, %{name: ammo_type_name}} ->
|
{:ok, %{name: ammo_type_name}} ->
|
||||||
prompt = dgettext("prompts", "%{name} updated successfully", name: ammo_type_name)
|
prompt = dgettext("prompts", "%{name} updated successfully", name: ammo_type_name)
|
||||||
socket |> put_flash(:info, prompt) |> push_redirect(to: return_to)
|
socket |> put_flash(:info, prompt) |> push_navigate(to: return_to)
|
||||||
|
|
||||||
{:error, %Changeset{} = changeset} ->
|
{:error, %Changeset{} = changeset} ->
|
||||||
socket |> assign(:changeset, changeset)
|
socket |> assign(:changeset, changeset)
|
||||||
@ -76,14 +76,15 @@ defmodule CanneryWeb.AmmoTypeLive.FormComponent do
|
|||||||
|
|
||||||
defp save_ammo_type(
|
defp save_ammo_type(
|
||||||
%{assigns: %{current_user: current_user, return_to: return_to}} = socket,
|
%{assigns: %{current_user: current_user, return_to: return_to}} = socket,
|
||||||
:new,
|
action,
|
||||||
ammo_type_params
|
ammo_type_params
|
||||||
) do
|
)
|
||||||
|
when action in [:new, :clone] do
|
||||||
socket =
|
socket =
|
||||||
case Ammo.create_ammo_type(ammo_type_params, current_user) do
|
case Ammo.create_ammo_type(ammo_type_params, current_user) do
|
||||||
{:ok, %{name: ammo_type_name}} ->
|
{:ok, %{name: ammo_type_name}} ->
|
||||||
prompt = dgettext("prompts", "%{name} created successfully", name: ammo_type_name)
|
prompt = dgettext("prompts", "%{name} created successfully", name: ammo_type_name)
|
||||||
socket |> put_flash(:info, prompt) |> push_redirect(to: return_to)
|
socket |> put_flash(:info, prompt) |> push_navigate(to: return_to)
|
||||||
|
|
||||||
{:error, %Changeset{} = changeset} ->
|
{:error, %Changeset{} = changeset} ->
|
||||||
socket |> assign(changeset: changeset)
|
socket |> assign(changeset: changeset)
|
||||||
|
@ -3,7 +3,7 @@
|
|||||||
<%= @title %>
|
<%= @title %>
|
||||||
</h2>
|
</h2>
|
||||||
<.form
|
<.form
|
||||||
let={f}
|
:let={f}
|
||||||
for={@changeset}
|
for={@changeset}
|
||||||
id="ammo_type-form"
|
id="ammo_type-form"
|
||||||
phx-target={@myself}
|
phx-target={@myself}
|
||||||
|
@ -10,7 +10,7 @@ defmodule CanneryWeb.AmmoTypeLive.Index do
|
|||||||
|
|
||||||
@impl true
|
@impl true
|
||||||
def mount(_params, _session, socket) do
|
def mount(_params, _session, socket) do
|
||||||
{:ok, socket |> list_ammo_types()}
|
{:ok, socket |> assign(:show_used, false) |> list_ammo_types()}
|
||||||
end
|
end
|
||||||
|
|
||||||
@impl true
|
@impl true
|
||||||
@ -24,6 +24,12 @@ defmodule CanneryWeb.AmmoTypeLive.Index do
|
|||||||
|> assign(:ammo_type, Ammo.get_ammo_type!(id, current_user))
|
|> assign(:ammo_type, Ammo.get_ammo_type!(id, current_user))
|
||||||
end
|
end
|
||||||
|
|
||||||
|
defp apply_action(%{assigns: %{current_user: current_user}} = socket, :clone, %{"id" => id}) do
|
||||||
|
socket
|
||||||
|
|> assign(:page_title, gettext("New Ammo type"))
|
||||||
|
|> assign(:ammo_type, %{Ammo.get_ammo_type!(id, current_user) | id: nil})
|
||||||
|
end
|
||||||
|
|
||||||
defp apply_action(socket, :new, _params) do
|
defp apply_action(socket, :new, _params) do
|
||||||
socket
|
socket
|
||||||
|> assign(:page_title, gettext("New Ammo type"))
|
|> assign(:page_title, gettext("New Ammo type"))
|
||||||
@ -43,34 +49,39 @@ defmodule CanneryWeb.AmmoTypeLive.Index do
|
|||||||
{:noreply, socket |> put_flash(:info, prompt) |> list_ammo_types()}
|
{:noreply, socket |> put_flash(:info, prompt) |> list_ammo_types()}
|
||||||
end
|
end
|
||||||
|
|
||||||
defp list_ammo_types(%{assigns: %{current_user: current_user}} = socket) do
|
@impl true
|
||||||
|
def handle_event("toggle_show_used", _params, %{assigns: %{show_used: show_used}} = socket) do
|
||||||
|
{:noreply, socket |> assign(:show_used, !show_used) |> list_ammo_types()}
|
||||||
|
end
|
||||||
|
|
||||||
|
defp list_ammo_types(%{assigns: %{current_user: current_user, show_used: show_used}} = socket) do
|
||||||
ammo_types = Ammo.list_ammo_types(current_user)
|
ammo_types = Ammo.list_ammo_types(current_user)
|
||||||
|
|
||||||
columns =
|
columns =
|
||||||
[
|
[
|
||||||
%{label: gettext("Name"), key: "name", type: :name},
|
%{label: gettext("Name"), key: :name, type: :name},
|
||||||
%{label: gettext("Bullet type"), key: "bullet_type", type: :string},
|
%{label: gettext("Bullet type"), key: :bullet_type, type: :string},
|
||||||
%{label: gettext("Bullet core"), key: "bullet_core", type: :string},
|
%{label: gettext("Bullet core"), key: :bullet_core, type: :string},
|
||||||
%{label: gettext("Cartridge"), key: "cartridge", type: :string},
|
%{label: gettext("Cartridge"), key: :cartridge, type: :string},
|
||||||
%{label: gettext("Caliber"), key: "caliber", type: :string},
|
%{label: gettext("Caliber"), key: :caliber, type: :string},
|
||||||
%{label: gettext("Case material"), key: "case_material", type: :string},
|
%{label: gettext("Case material"), key: :case_material, type: :string},
|
||||||
%{label: gettext("Jacket type"), key: "jacket_type", type: :string},
|
%{label: gettext("Jacket type"), key: :jacket_type, type: :string},
|
||||||
%{label: gettext("Muzzle velocity"), key: "muzzle_velocity", type: :string},
|
%{label: gettext("Muzzle velocity"), key: :muzzle_velocity, type: :string},
|
||||||
%{label: gettext("Powder type"), key: "powder_type", type: :string},
|
%{label: gettext("Powder type"), key: :powder_type, type: :string},
|
||||||
%{
|
%{
|
||||||
label: gettext("Powder grains per charge"),
|
label: gettext("Powder grains per charge"),
|
||||||
key: "powder_grains_per_charge",
|
key: :powder_grains_per_charge,
|
||||||
type: :string
|
type: :string
|
||||||
},
|
},
|
||||||
%{label: gettext("Grains"), key: "grains", type: :string},
|
%{label: gettext("Grains"), key: :grains, type: :string},
|
||||||
%{label: gettext("Pressure"), key: "pressure", type: :string},
|
%{label: gettext("Pressure"), key: :pressure, type: :string},
|
||||||
%{label: gettext("Primer type"), key: "primer_type", type: :string},
|
%{label: gettext("Primer type"), key: :primer_type, type: :string},
|
||||||
%{label: gettext("Firing type"), key: "firing_type", type: :string},
|
%{label: gettext("Firing type"), key: :firing_type, type: :string},
|
||||||
%{label: gettext("Tracer"), key: "tracer", type: :boolean},
|
%{label: gettext("Tracer"), key: :tracer, type: :boolean},
|
||||||
%{label: gettext("Incendiary"), key: "incendiary", type: :boolean},
|
%{label: gettext("Incendiary"), key: :incendiary, type: :boolean},
|
||||||
%{label: gettext("Blank"), key: "blank", type: :boolean},
|
%{label: gettext("Blank"), key: :blank, type: :boolean},
|
||||||
%{label: gettext("Corrosive"), key: "corrosive", type: :boolean},
|
%{label: gettext("Corrosive"), key: :corrosive, type: :boolean},
|
||||||
%{label: gettext("Manufacturer"), key: "manufacturer", type: :string},
|
%{label: gettext("Manufacturer"), key: :manufacturer, type: :string},
|
||||||
%{label: gettext("UPC"), key: "upc", type: :string}
|
%{label: gettext("UPC"), key: "upc", type: :string}
|
||||||
]
|
]
|
||||||
|> Enum.filter(fn %{key: key, type: type} ->
|
|> Enum.filter(fn %{key: key, type: type} ->
|
||||||
@ -79,13 +90,51 @@ defmodule CanneryWeb.AmmoTypeLive.Index do
|
|||||||
|
|
||||||
ammo_types
|
ammo_types
|
||||||
|> Enum.any?(fn ammo_type ->
|
|> Enum.any?(fn ammo_type ->
|
||||||
not (ammo_type |> Map.get(key |> String.to_existing_atom()) == default_value)
|
not (ammo_type |> Map.get(key) == default_value)
|
||||||
end)
|
end)
|
||||||
end)
|
end)
|
||||||
|> Kernel.++([
|
|> Kernel.++([
|
||||||
%{label: gettext("Total # of rounds"), key: "round_count", type: :round_count},
|
%{label: gettext("Rounds"), key: :round_count, type: :round_count}
|
||||||
%{label: gettext("Total # of ammo"), key: "ammo_count", type: :ammo_count},
|
])
|
||||||
%{label: gettext("Average Price paid"), key: "avg_price_paid", type: :avg_price_paid},
|
|> Kernel.++(
|
||||||
|
if show_used do
|
||||||
|
[
|
||||||
|
%{
|
||||||
|
label: gettext("Used rounds"),
|
||||||
|
key: :used_round_count,
|
||||||
|
type: :used_round_count
|
||||||
|
},
|
||||||
|
%{
|
||||||
|
label: gettext("Total ever rounds"),
|
||||||
|
key: :historical_round_count,
|
||||||
|
type: :historical_round_count
|
||||||
|
}
|
||||||
|
]
|
||||||
|
else
|
||||||
|
[]
|
||||||
|
end
|
||||||
|
)
|
||||||
|
|> Kernel.++([%{label: gettext("Packs"), key: :ammo_count, type: :ammo_count}])
|
||||||
|
|> Kernel.++(
|
||||||
|
if show_used do
|
||||||
|
[
|
||||||
|
%{
|
||||||
|
label: gettext("Used packs"),
|
||||||
|
key: :used_ammo_count,
|
||||||
|
type: :used_ammo_count
|
||||||
|
},
|
||||||
|
%{
|
||||||
|
label: gettext("Total ever packs"),
|
||||||
|
key: :historical_ammo_count,
|
||||||
|
type: :historical_ammo_count
|
||||||
|
}
|
||||||
|
]
|
||||||
|
else
|
||||||
|
[]
|
||||||
|
end
|
||||||
|
)
|
||||||
|
|> Kernel.++([
|
||||||
|
%{label: gettext("Average Price paid"), key: :avg_price_paid, type: :avg_price_paid},
|
||||||
%{label: nil, key: "actions", type: :actions, sortable: false}
|
%{label: nil, key: "actions", type: :actions, sortable: false}
|
||||||
])
|
])
|
||||||
|
|
||||||
@ -104,11 +153,23 @@ defmodule CanneryWeb.AmmoTypeLive.Index do
|
|||||||
end
|
end
|
||||||
|
|
||||||
defp get_ammo_type_value(:boolean, key, ammo_type, _current_user),
|
defp get_ammo_type_value(:boolean, key, ammo_type, _current_user),
|
||||||
do: ammo_type |> Map.get(key |> String.to_existing_atom()) |> humanize()
|
do: ammo_type |> Map.get(key) |> humanize()
|
||||||
|
|
||||||
defp get_ammo_type_value(:round_count, _key, ammo_type, current_user),
|
defp get_ammo_type_value(:round_count, _key, ammo_type, current_user),
|
||||||
do: ammo_type |> Ammo.get_round_count_for_ammo_type(current_user)
|
do: ammo_type |> Ammo.get_round_count_for_ammo_type(current_user)
|
||||||
|
|
||||||
|
defp get_ammo_type_value(:historical_round_count, _key, ammo_type, current_user),
|
||||||
|
do: ammo_type |> Ammo.get_historical_count_for_ammo_type(current_user)
|
||||||
|
|
||||||
|
defp get_ammo_type_value(:used_round_count, _key, ammo_type, current_user),
|
||||||
|
do: ammo_type |> Ammo.get_used_count_for_ammo_type(current_user)
|
||||||
|
|
||||||
|
defp get_ammo_type_value(:historical_ammo_count, _key, ammo_type, current_user),
|
||||||
|
do: ammo_type |> Ammo.get_ammo_groups_count_for_type(current_user, true)
|
||||||
|
|
||||||
|
defp get_ammo_type_value(:used_ammo_count, _key, ammo_type, current_user),
|
||||||
|
do: ammo_type |> Ammo.get_used_ammo_groups_count_for_type(current_user)
|
||||||
|
|
||||||
defp get_ammo_type_value(:ammo_count, _key, ammo_type, current_user),
|
defp get_ammo_type_value(:ammo_count, _key, ammo_type, current_user),
|
||||||
do: ammo_type |> Ammo.get_ammo_groups_count_for_type(current_user)
|
do: ammo_type |> Ammo.get_ammo_groups_count_for_type(current_user)
|
||||||
|
|
||||||
@ -123,11 +184,13 @@ defmodule CanneryWeb.AmmoTypeLive.Index do
|
|||||||
assigns = %{ammo_type: ammo_type}
|
assigns = %{ammo_type: ammo_type}
|
||||||
|
|
||||||
~H"""
|
~H"""
|
||||||
<%= live_redirect to: Routes.ammo_type_show_path(Endpoint, :show, ammo_type),
|
<.link
|
||||||
class: "link",
|
navigate={Routes.ammo_type_show_path(Endpoint, :show, @ammo_type)}
|
||||||
data: [qa: "view-name-#{ammo_type.id}"] do %>
|
class="link"
|
||||||
<%= ammo_type.name %>
|
data-qa={"view-name-#{@ammo_type.id}"}
|
||||||
<% end %>
|
>
|
||||||
|
<%= @ammo_type.name %>
|
||||||
|
</.link>
|
||||||
"""
|
"""
|
||||||
end
|
end
|
||||||
|
|
||||||
@ -136,34 +199,51 @@ defmodule CanneryWeb.AmmoTypeLive.Index do
|
|||||||
|
|
||||||
~H"""
|
~H"""
|
||||||
<div class="px-4 py-2 space-x-4 flex justify-center items-center">
|
<div class="px-4 py-2 space-x-4 flex justify-center items-center">
|
||||||
<%= live_redirect to: Routes.ammo_type_show_path(Endpoint, :show, ammo_type),
|
<.link
|
||||||
class: "text-primary-600 link",
|
navigate={Routes.ammo_type_show_path(Endpoint, :show, @ammo_type)}
|
||||||
data: [qa: "view-#{ammo_type.id}"] do %>
|
class="text-primary-600 link"
|
||||||
|
data-qa={"view-#{@ammo_type.id}"}
|
||||||
|
>
|
||||||
<i class="fa-fw fa-lg fas fa-eye"></i>
|
<i class="fa-fw fa-lg fas fa-eye"></i>
|
||||||
<% end %>
|
</.link>
|
||||||
|
|
||||||
<%= live_patch to: Routes.ammo_type_index_path(Endpoint, :edit, ammo_type),
|
<.link
|
||||||
class: "text-primary-600 link",
|
patch={Routes.ammo_type_index_path(Endpoint, :edit, @ammo_type)}
|
||||||
data: [qa: "edit-#{ammo_type.id}"] do %>
|
class="text-primary-600 link"
|
||||||
|
data-qa={"edit-#{@ammo_type.id}"}
|
||||||
|
>
|
||||||
<i class="fa-fw fa-lg fas fa-edit"></i>
|
<i class="fa-fw fa-lg fas fa-edit"></i>
|
||||||
<% end %>
|
</.link>
|
||||||
|
|
||||||
<%= link to: "#",
|
<.link
|
||||||
class: "text-primary-600 link",
|
patch={Routes.ammo_type_index_path(Endpoint, :clone, @ammo_type)}
|
||||||
phx_click: "delete",
|
class="text-primary-600 link"
|
||||||
phx_value_id: ammo_type.id,
|
data-qa={"clone-#{@ammo_type.id}"}
|
||||||
data: [
|
>
|
||||||
confirm: dgettext("prompts", "Are you sure you want to delete %{name}? This will delete all %{name} type ammo as well!", name: ammo_type.name),
|
<i class="fa-fw fa-lg fas fa-copy"></i>
|
||||||
qa: "delete-#{ammo_type.id}"
|
</.link>
|
||||||
] do %>
|
|
||||||
|
<.link
|
||||||
|
href="#"
|
||||||
|
class="text-primary-600 link"
|
||||||
|
phx-click="delete"
|
||||||
|
phx-value-id={@ammo_type.id}
|
||||||
|
data-confirm={
|
||||||
|
dgettext(
|
||||||
|
"prompts",
|
||||||
|
"Are you sure you want to delete %{name}? This will delete all %{name} type ammo as well!",
|
||||||
|
name: @ammo_type.name
|
||||||
|
)
|
||||||
|
}
|
||||||
|
data-qa={"delete-#{@ammo_type.id}"}
|
||||||
|
>
|
||||||
<i class="fa-lg fas fa-trash"></i>
|
<i class="fa-lg fas fa-trash"></i>
|
||||||
<% end %>
|
</.link>
|
||||||
</div>
|
</div>
|
||||||
"""
|
"""
|
||||||
end
|
end
|
||||||
|
|
||||||
defp get_ammo_type_value(nil, _key, _ammo_type, _current_user), do: nil
|
defp get_ammo_type_value(nil, _key, _ammo_type, _current_user), do: nil
|
||||||
|
|
||||||
defp get_ammo_type_value(_other, key, ammo_type, _current_user),
|
defp get_ammo_type_value(_other, key, ammo_type, _current_user), do: ammo_type |> Map.get(key)
|
||||||
do: ammo_type |> Map.get(key |> String.to_existing_atom())
|
|
||||||
end
|
end
|
||||||
|
@ -9,15 +9,21 @@
|
|||||||
<%= display_emoji("😔") %>
|
<%= display_emoji("😔") %>
|
||||||
</h2>
|
</h2>
|
||||||
|
|
||||||
<%= live_patch(dgettext("actions", "Add your first type!"),
|
<.link patch={Routes.ammo_type_index_path(Endpoint, :new)} class="btn btn-primary">
|
||||||
to: Routes.ammo_type_index_path(Endpoint, :new),
|
<%= dgettext("actions", "Add your first type!") %>
|
||||||
class: "btn btn-primary"
|
</.link>
|
||||||
) %>
|
|
||||||
<% else %>
|
<% else %>
|
||||||
<%= live_patch(dgettext("actions", "New Ammo type"),
|
<.link patch={Routes.ammo_type_index_path(Endpoint, :new)} class="btn btn-primary">
|
||||||
to: Routes.ammo_type_index_path(Endpoint, :new),
|
<%= dgettext("actions", "New Ammo type") %>
|
||||||
class: "btn btn-primary"
|
</.link>
|
||||||
) %>
|
|
||||||
|
<div class="flex flex-col justify-center items-center">
|
||||||
|
<.toggle_button action="toggle_show_used" value={@show_used}>
|
||||||
|
<span class="title text-lg text-primary-600">
|
||||||
|
<%= gettext("Show used") %>
|
||||||
|
</span>
|
||||||
|
</.toggle_button>
|
||||||
|
</div>
|
||||||
|
|
||||||
<.live_component
|
<.live_component
|
||||||
module={CanneryWeb.Components.TableComponent}
|
module={CanneryWeb.Components.TableComponent}
|
||||||
@ -29,7 +35,7 @@
|
|||||||
<% end %>
|
<% end %>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<%= if @live_action in [:new, :edit] do %>
|
<%= if @live_action in [:new, :edit, :clone] do %>
|
||||||
<.modal return_to={Routes.ammo_type_index_path(Endpoint, :index)}>
|
<.modal return_to={Routes.ammo_type_index_path(Endpoint, :index)}>
|
||||||
<.live_component
|
<.live_component
|
||||||
module={CanneryWeb.AmmoTypeLive.FormComponent}
|
module={CanneryWeb.AmmoTypeLive.FormComponent}
|
||||||
|
@ -28,11 +28,11 @@ defmodule CanneryWeb.AmmoTypeLive.Show do
|
|||||||
prompt = dgettext("prompts", "%{name} deleted succesfully", name: ammo_type_name)
|
prompt = dgettext("prompts", "%{name} deleted succesfully", name: ammo_type_name)
|
||||||
redirect_to = Routes.ammo_type_index_path(socket, :index)
|
redirect_to = Routes.ammo_type_index_path(socket, :index)
|
||||||
|
|
||||||
{:noreply, socket |> put_flash(:info, prompt) |> push_redirect(to: redirect_to)}
|
{:noreply, socket |> put_flash(:info, prompt) |> push_navigate(to: redirect_to)}
|
||||||
end
|
end
|
||||||
|
|
||||||
@impl true
|
@impl true
|
||||||
def handle_event("toggle_show_used", _, %{assigns: %{show_used: show_used}} = socket) do
|
def handle_event("toggle_show_used", _params, %{assigns: %{show_used: show_used}} = socket) do
|
||||||
{:noreply, socket |> assign(:show_used, !show_used) |> display_ammo_type()}
|
{:noreply, socket |> assign(:show_used, !show_used) |> display_ammo_type()}
|
||||||
end
|
end
|
||||||
|
|
||||||
|
@ -12,22 +12,29 @@
|
|||||||
<% end %>
|
<% 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.ammo_type_show_path(Endpoint, :edit, @ammo_type),
|
<.link
|
||||||
class: "text-primary-600 link",
|
patch={Routes.ammo_type_show_path(Endpoint, :edit, @ammo_type)}
|
||||||
data: [qa: "edit"] do %>
|
class="text-primary-600 link"
|
||||||
|
data-qa="edit"
|
||||||
|
>
|
||||||
<i class="fa-fw fa-lg fas fa-edit"></i>
|
<i class="fa-fw fa-lg fas fa-edit"></i>
|
||||||
<% end %>
|
</.link>
|
||||||
|
|
||||||
<%= link to: "#",
|
<.link
|
||||||
class: "text-primary-600 link",
|
href="#"
|
||||||
phx_click: "delete",
|
class="text-primary-600 link"
|
||||||
data: [
|
phx-click="delete"
|
||||||
confirm:
|
data-confirm={
|
||||||
dgettext("prompts", "Are you sure you want to delete %{name}? This will delete all %{name} type ammo as well!", name: @ammo_type.name),
|
dgettext(
|
||||||
qa: "delete"
|
"prompts",
|
||||||
] do %>
|
"Are you sure you want to delete %{name}? This will delete all %{name} type ammo as well!",
|
||||||
|
name: @ammo_type.name
|
||||||
|
)
|
||||||
|
}
|
||||||
|
data-qa="delete"
|
||||||
|
>
|
||||||
<i class="fa-fw fa-lg fas fa-trash"></i>
|
<i class="fa-fw fa-lg fas fa-trash"></i>
|
||||||
<% end %>
|
</.link>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<hr class="hr" />
|
<hr class="hr" />
|
||||||
@ -71,7 +78,7 @@
|
|||||||
<% end %>
|
<% end %>
|
||||||
|
|
||||||
<h3 class="title text-lg">
|
<h3 class="title text-lg">
|
||||||
<%= gettext("Current # of rounds:") %>
|
<%= gettext("Rounds:") %>
|
||||||
</h3>
|
</h3>
|
||||||
|
|
||||||
<span class="text-primary-600">
|
<span class="text-primary-600">
|
||||||
@ -79,13 +86,45 @@
|
|||||||
</span>
|
</span>
|
||||||
|
|
||||||
<h3 class="title text-lg">
|
<h3 class="title text-lg">
|
||||||
<%= gettext("Total rounds shot:") %>
|
<%= gettext("Used rounds:") %>
|
||||||
</h3>
|
</h3>
|
||||||
|
|
||||||
<span class="text-primary-600">
|
<span class="text-primary-600">
|
||||||
<%= @ammo_type |> Ammo.get_used_count_for_ammo_type(@current_user) %>
|
<%= @ammo_type |> Ammo.get_used_count_for_ammo_type(@current_user) %>
|
||||||
</span>
|
</span>
|
||||||
|
|
||||||
|
<h3 class="title text-lg">
|
||||||
|
<%= gettext("Total ever rounds:") %>
|
||||||
|
</h3>
|
||||||
|
|
||||||
|
<span class="text-primary-600">
|
||||||
|
<%= @ammo_type |> Ammo.get_historical_count_for_ammo_type(@current_user) %>
|
||||||
|
</span>
|
||||||
|
|
||||||
|
<h3 class="title text-lg">
|
||||||
|
<%= gettext("Packs:") %>
|
||||||
|
</h3>
|
||||||
|
|
||||||
|
<span class="text-primary-600">
|
||||||
|
<%= @ammo_type |> Ammo.get_ammo_groups_count_for_type(@current_user) %>
|
||||||
|
</span>
|
||||||
|
|
||||||
|
<h3 class="title text-lg">
|
||||||
|
<%= gettext("Used packs:") %>
|
||||||
|
</h3>
|
||||||
|
|
||||||
|
<span class="text-primary-600">
|
||||||
|
<%= @ammo_type |> Ammo.get_used_ammo_groups_count_for_type(@current_user) %>
|
||||||
|
</span>
|
||||||
|
|
||||||
|
<h3 class="title text-lg">
|
||||||
|
<%= gettext("Total ever packs:") %>
|
||||||
|
</h3>
|
||||||
|
|
||||||
|
<span class="text-primary-600">
|
||||||
|
<%= @ammo_type |> Ammo.get_ammo_groups_count_for_type(@current_user, true) %>
|
||||||
|
</span>
|
||||||
|
|
||||||
<h3 class="title text-lg">
|
<h3 class="title text-lg">
|
||||||
<%= gettext("Added on:") %>
|
<%= gettext("Added on:") %>
|
||||||
</h3>
|
</h3>
|
||||||
|
@ -5,24 +5,25 @@
|
|||||||
|
|
||||||
<div class="flex flex-wrap justify-center items-center">
|
<div class="flex flex-wrap justify-center items-center">
|
||||||
<%= for tag <- @container.tags do %>
|
<%= for tag <- @container.tags do %>
|
||||||
<%= link to: "#",
|
<.link
|
||||||
class: "mx-2 my-1 px-4 py-2 rounded-lg title text-xl",
|
href="#"
|
||||||
style: "color: #{tag.text_color}; background-color: #{tag.bg_color}",
|
class="mx-2 my-1 px-4 py-2 rounded-lg title text-xl"
|
||||||
phx_click: "delete",
|
style={"color: #{tag.text_color}; background-color: #{tag.bg_color}"}
|
||||||
phx_value_tag_id: tag.id,
|
phx-click="delete"
|
||||||
phx_target: @myself,
|
phx-value-tag-id={tag.id}
|
||||||
data: [
|
phx-target={@myself}
|
||||||
confirm:
|
data-confirm={
|
||||||
dgettext(
|
dgettext(
|
||||||
"prompts",
|
"prompts",
|
||||||
"Are you sure you want to remove the %{tag_name} tag from %{container_name}?",
|
"Are you sure you want to remove the %{tag_name} tag from %{container_name}?",
|
||||||
tag_name: tag.name,
|
tag_name: tag.name,
|
||||||
container_name: @container.name
|
container_name: @container.name
|
||||||
)
|
)
|
||||||
] do %>
|
}
|
||||||
|
>
|
||||||
<%= tag.name %>
|
<%= tag.name %>
|
||||||
<i class="fa-fw fa-sm fas fa-trash"></i>
|
<i class="fa-fw fa-sm fas fa-trash"></i>
|
||||||
<% end %>
|
</.link>
|
||||||
<% end %>
|
<% end %>
|
||||||
|
|
||||||
<%= if @container.tags |> Enum.empty?() do %>
|
<%= if @container.tags |> Enum.empty?() do %>
|
||||||
@ -37,7 +38,7 @@
|
|||||||
<hr class="hr" />
|
<hr class="hr" />
|
||||||
|
|
||||||
<.form
|
<.form
|
||||||
let={f}
|
:let={f}
|
||||||
for={:tag}
|
for={:tag}
|
||||||
id="add-tag-to-container-form"
|
id="add-tag-to-container-form"
|
||||||
class="flex flex-col space-y-4 sm:space-y-0 sm:grid sm:grid-cols-3 sm:gap-4 justify-center items-center"
|
class="flex flex-col space-y-4 sm:space-y-0 sm:grid sm:grid-cols-3 sm:gap-4 justify-center items-center"
|
||||||
|
@ -35,15 +35,18 @@ defmodule CanneryWeb.ContainerLive.FormComponent do
|
|||||||
container_params
|
container_params
|
||||||
) do
|
) do
|
||||||
changeset_action =
|
changeset_action =
|
||||||
case action do
|
cond do
|
||||||
:new -> :insert
|
action in [:new, :clone] -> :insert
|
||||||
:edit -> :update
|
action == :edit -> :update
|
||||||
end
|
end
|
||||||
|
|
||||||
changeset =
|
changeset =
|
||||||
case action do
|
cond do
|
||||||
:new -> container |> Container.create_changeset(user, container_params)
|
action in [:new, :clone] ->
|
||||||
:edit -> container |> Container.update_changeset(container_params)
|
container |> Container.create_changeset(user, container_params)
|
||||||
|
|
||||||
|
action == :edit ->
|
||||||
|
container |> Container.update_changeset(container_params)
|
||||||
end
|
end
|
||||||
|
|
||||||
changeset =
|
changeset =
|
||||||
@ -65,7 +68,7 @@ defmodule CanneryWeb.ContainerLive.FormComponent do
|
|||||||
case Containers.update_container(container, current_user, container_params) do
|
case Containers.update_container(container, current_user, container_params) do
|
||||||
{:ok, %{name: container_name}} ->
|
{:ok, %{name: container_name}} ->
|
||||||
prompt = dgettext("prompts", "%{name} updated successfully", name: container_name)
|
prompt = dgettext("prompts", "%{name} updated successfully", name: container_name)
|
||||||
socket |> put_flash(:info, prompt) |> push_redirect(to: return_to)
|
socket |> put_flash(:info, prompt) |> push_navigate(to: return_to)
|
||||||
|
|
||||||
{:error, %Changeset{} = changeset} ->
|
{:error, %Changeset{} = changeset} ->
|
||||||
socket |> assign(:changeset, changeset)
|
socket |> assign(:changeset, changeset)
|
||||||
@ -76,14 +79,15 @@ defmodule CanneryWeb.ContainerLive.FormComponent do
|
|||||||
|
|
||||||
defp save_container(
|
defp save_container(
|
||||||
%{assigns: %{current_user: current_user, return_to: return_to}} = socket,
|
%{assigns: %{current_user: current_user, return_to: return_to}} = socket,
|
||||||
:new,
|
action,
|
||||||
container_params
|
container_params
|
||||||
) do
|
)
|
||||||
|
when action in [:new, :clone] do
|
||||||
socket =
|
socket =
|
||||||
case Containers.create_container(container_params, current_user) do
|
case Containers.create_container(container_params, current_user) do
|
||||||
{:ok, %{name: container_name}} ->
|
{:ok, %{name: container_name}} ->
|
||||||
prompt = dgettext("prompts", "%{name} created successfully", name: container_name)
|
prompt = dgettext("prompts", "%{name} created successfully", name: container_name)
|
||||||
socket |> put_flash(:info, prompt) |> push_redirect(to: return_to)
|
socket |> put_flash(:info, prompt) |> push_navigate(to: return_to)
|
||||||
|
|
||||||
{:error, %Changeset{} = changeset} ->
|
{:error, %Changeset{} = changeset} ->
|
||||||
socket |> assign(changeset: changeset)
|
socket |> assign(changeset: changeset)
|
||||||
|
@ -3,7 +3,7 @@
|
|||||||
<%= @title %>
|
<%= @title %>
|
||||||
</h2>
|
</h2>
|
||||||
<.form
|
<.form
|
||||||
let={f}
|
:let={f}
|
||||||
for={@changeset}
|
for={@changeset}
|
||||||
id="container-form"
|
id="container-form"
|
||||||
class="flex flex-col space-y-4 sm:space-y-0 sm:grid sm:grid-cols-3 sm:gap-4 justify-center items-center"
|
class="flex flex-col space-y-4 sm:space-y-0 sm:grid sm:grid-cols-3 sm:gap-4 justify-center items-center"
|
||||||
|
@ -6,11 +6,11 @@ defmodule CanneryWeb.ContainerLive.Index do
|
|||||||
use CanneryWeb, :live_view
|
use CanneryWeb, :live_view
|
||||||
import CanneryWeb.Components.ContainerCard
|
import CanneryWeb.Components.ContainerCard
|
||||||
alias Cannery.{Containers, Containers.Container, Repo}
|
alias Cannery.{Containers, Containers.Container, Repo}
|
||||||
alias CanneryWeb.Endpoint
|
alias CanneryWeb.{Components.TagCard, Endpoint}
|
||||||
alias Ecto.Changeset
|
alias Ecto.Changeset
|
||||||
|
|
||||||
@impl true
|
@impl true
|
||||||
def mount(_params, _session, socket), do: {:ok, socket}
|
def mount(_params, _session, socket), do: {:ok, socket |> assign(view_table: false)}
|
||||||
|
|
||||||
@impl true
|
@impl true
|
||||||
def handle_params(params, _url, %{assigns: %{live_action: live_action}} = socket) do
|
def handle_params(params, _url, %{assigns: %{live_action: live_action}} = socket) do
|
||||||
@ -31,10 +31,29 @@ defmodule CanneryWeb.ContainerLive.Index do
|
|||||||
socket |> assign(:page_title, gettext("New Container")) |> assign(:container, %Container{})
|
socket |> assign(:page_title, gettext("New Container")) |> assign(:container, %Container{})
|
||||||
end
|
end
|
||||||
|
|
||||||
|
defp apply_action(%{assigns: %{current_user: current_user}} = socket, :clone, %{"id" => id}) do
|
||||||
|
container = Containers.get_container!(id, current_user)
|
||||||
|
|
||||||
|
socket
|
||||||
|
|> assign(page_title: gettext("New Container"), container: %{container | id: nil})
|
||||||
|
end
|
||||||
|
|
||||||
defp apply_action(socket, :index, _params) do
|
defp apply_action(socket, :index, _params) do
|
||||||
socket
|
socket
|
||||||
|> assign(:page_title, gettext("Containers"))
|
|> assign(
|
||||||
|> assign(:container, nil)
|
page_title: gettext("Containers"),
|
||||||
|
container: nil
|
||||||
|
)
|
||||||
|
|> display_containers()
|
||||||
|
end
|
||||||
|
|
||||||
|
defp apply_action(socket, :table, _params) do
|
||||||
|
socket
|
||||||
|
|> assign(
|
||||||
|
page_title: gettext("Containers"),
|
||||||
|
container: nil,
|
||||||
|
view_table: true
|
||||||
|
)
|
||||||
|> display_containers()
|
|> display_containers()
|
||||||
end
|
end
|
||||||
|
|
||||||
@ -83,10 +102,135 @@ defmodule CanneryWeb.ContainerLive.Index do
|
|||||||
{:noreply, socket}
|
{:noreply, socket}
|
||||||
end
|
end
|
||||||
|
|
||||||
|
@impl true
|
||||||
|
def handle_event("toggle_table", _params, %{assigns: %{view_table: view_table}} = socket) do
|
||||||
|
new_path =
|
||||||
|
if view_table,
|
||||||
|
do: Routes.container_index_path(Endpoint, :index),
|
||||||
|
else: Routes.container_index_path(Endpoint, :table)
|
||||||
|
|
||||||
|
{:noreply, socket |> assign(view_table: !view_table) |> push_patch(to: new_path)}
|
||||||
|
end
|
||||||
|
|
||||||
defp display_containers(%{assigns: %{current_user: current_user}} = socket) do
|
defp display_containers(%{assigns: %{current_user: current_user}} = socket) do
|
||||||
containers =
|
containers =
|
||||||
Containers.list_containers(current_user) |> Repo.preload([:tags, :ammo_groups], force: true)
|
Containers.list_containers(current_user) |> Repo.preload([:tags, :ammo_groups], force: true)
|
||||||
|
|
||||||
socket |> assign(containers: containers)
|
columns =
|
||||||
|
[
|
||||||
|
%{label: gettext("Name"), key: :name, type: :string},
|
||||||
|
%{label: gettext("Description"), key: :desc, type: :string},
|
||||||
|
%{label: gettext("Location"), key: :location, type: :string},
|
||||||
|
%{label: gettext("Type"), key: :type, type: :string},
|
||||||
|
%{label: gettext("Packs"), key: :packs, type: :integer},
|
||||||
|
%{label: gettext("Rounds"), key: :rounds, type: :string},
|
||||||
|
%{label: gettext("Tags"), key: :tags, type: :tags},
|
||||||
|
%{label: nil, key: :actions, sortable: false, type: :actions}
|
||||||
|
]
|
||||||
|
|> Enum.filter(fn %{key: key, type: type} ->
|
||||||
|
# remove columns if all values match defaults
|
||||||
|
default_value =
|
||||||
|
case type do
|
||||||
|
:boolean -> false
|
||||||
|
_other_type -> nil
|
||||||
end
|
end
|
||||||
|
|
||||||
|
containers
|
||||||
|
|> Enum.any?(fn container ->
|
||||||
|
type in [:tags, :actions] or not (container |> Map.get(key) == default_value)
|
||||||
|
end)
|
||||||
|
end)
|
||||||
|
|
||||||
|
rows =
|
||||||
|
containers
|
||||||
|
|> Enum.map(fn container -> container |> get_row_data_for_container(columns) end)
|
||||||
|
|
||||||
|
socket
|
||||||
|
|> assign(
|
||||||
|
containers: containers,
|
||||||
|
columns: columns,
|
||||||
|
rows: rows
|
||||||
|
)
|
||||||
|
end
|
||||||
|
|
||||||
|
@spec get_row_data_for_container(Container.t(), [map()]) :: [map()]
|
||||||
|
defp get_row_data_for_container(container, columns) do
|
||||||
|
container = container |> Repo.preload([:ammo_groups, :tags])
|
||||||
|
|
||||||
|
columns
|
||||||
|
|> Enum.into(%{}, fn %{key: key} -> {key, get_value_for_key(key, container)} end)
|
||||||
|
end
|
||||||
|
|
||||||
|
@spec get_value_for_key(atom(), Container.t()) :: any()
|
||||||
|
defp get_value_for_key(:packs, container) do
|
||||||
|
container |> Containers.get_container_ammo_group_count!()
|
||||||
|
end
|
||||||
|
|
||||||
|
defp get_value_for_key(:rounds, container) do
|
||||||
|
container |> Containers.get_container_rounds!()
|
||||||
|
end
|
||||||
|
|
||||||
|
defp get_value_for_key(:tags, container) do
|
||||||
|
assigns = %{container: container}
|
||||||
|
|
||||||
|
{container.tags |> Enum.map(fn %{name: name} -> name end),
|
||||||
|
~H"""
|
||||||
|
<div class="flex flex-wrap justify-center items-center">
|
||||||
|
<%= unless @container.tags |> Enum.empty?() do %>
|
||||||
|
<%= for tag <- @container.tags do %>
|
||||||
|
<TagCard.simple_tag_card tag={tag} />
|
||||||
|
<% end %>
|
||||||
|
<% end %>
|
||||||
|
|
||||||
|
<div class="mx-4 my-2">
|
||||||
|
<.link
|
||||||
|
patch={Routes.container_index_path(Endpoint, :edit_tags, @container)}
|
||||||
|
class="text-primary-600 link"
|
||||||
|
>
|
||||||
|
<i class="fa-fw fa-lg fas fa-tags"></i>
|
||||||
|
</.link>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
"""}
|
||||||
|
end
|
||||||
|
|
||||||
|
defp get_value_for_key(:actions, container) do
|
||||||
|
assigns = %{container: container}
|
||||||
|
|
||||||
|
~H"""
|
||||||
|
<.link
|
||||||
|
patch={Routes.container_index_path(Endpoint, :edit, @container)}
|
||||||
|
class="text-primary-600 link"
|
||||||
|
data-qa={"edit-#{@container.id}"}
|
||||||
|
>
|
||||||
|
<i class="fa-fw fa-lg fas fa-edit"></i>
|
||||||
|
</.link>
|
||||||
|
|
||||||
|
<.link
|
||||||
|
patch={Routes.container_index_path(Endpoint, :clone, @container)}
|
||||||
|
class="text-primary-600 link"
|
||||||
|
data-qa={"clone-#{@container.id}"}
|
||||||
|
>
|
||||||
|
<i class="fa-fw fa-lg fas fa-copy"></i>
|
||||||
|
</.link>
|
||||||
|
|
||||||
|
<.link
|
||||||
|
href="#"
|
||||||
|
class="text-primary-600 link"
|
||||||
|
phx-click="delete"
|
||||||
|
phx-value-id={@container.id}
|
||||||
|
data-confirm={
|
||||||
|
dgettext("prompts", "Are you sure you want to delete %{name}?", name: @container.name)
|
||||||
|
}
|
||||||
|
data-qa={"delete-#{@container.id}"}
|
||||||
|
>
|
||||||
|
<i class="fa-fw fa-lg fas fa-trash"></i>
|
||||||
|
</.link>
|
||||||
|
"""
|
||||||
|
end
|
||||||
|
|
||||||
|
defp get_value_for_key(key, container), do: container |> Map.get(key)
|
||||||
|
|
||||||
|
def return_to(true = _view_table), do: Routes.container_index_path(Endpoint, :table)
|
||||||
|
def return_to(false = _view_table), do: Routes.container_index_path(Endpoint, :index)
|
||||||
end
|
end
|
||||||
|
@ -9,66 +9,95 @@
|
|||||||
<%= display_emoji("😔") %>
|
<%= display_emoji("😔") %>
|
||||||
</h2>
|
</h2>
|
||||||
|
|
||||||
<%= live_patch(dgettext("actions", "Add your first container!"),
|
<.link patch={Routes.container_index_path(Endpoint, :new)} class="btn btn-primary">
|
||||||
to: Routes.container_index_path(Endpoint, :new),
|
<%= dgettext("actions", "Add your first container!") %>
|
||||||
class: "btn btn-primary"
|
</.link>
|
||||||
) %>
|
|
||||||
<% else %>
|
<% else %>
|
||||||
<%= live_patch(dgettext("actions", "New Container"),
|
<.link patch={Routes.container_index_path(Endpoint, :new)} class="btn btn-primary">
|
||||||
to: Routes.container_index_path(Endpoint, :new),
|
<%= dgettext("actions", "New Container") %>
|
||||||
class: "btn btn-primary"
|
</.link>
|
||||||
) %>
|
|
||||||
|
<div class="flex flex-col justify-center items-center">
|
||||||
|
<.toggle_button action="toggle_table" value={@view_table}>
|
||||||
|
<span class="title text-lg text-primary-600">
|
||||||
|
<%= gettext("View as table") %>
|
||||||
|
</span>
|
||||||
|
</.toggle_button>
|
||||||
|
</div>
|
||||||
<% end %>
|
<% end %>
|
||||||
|
|
||||||
<div class="max-w-full flex flex-row flex-wrap justify-center items-center">
|
<div class="max-w-full flex flex-row flex-wrap justify-center items-center">
|
||||||
|
<%= if @view_table do %>
|
||||||
|
<.live_component
|
||||||
|
module={CanneryWeb.Components.TableComponent}
|
||||||
|
id="containers_index_table"
|
||||||
|
action={@live_action}
|
||||||
|
columns={@columns}
|
||||||
|
rows={@rows}
|
||||||
|
/>
|
||||||
|
<% else %>
|
||||||
<%= for container <- @containers do %>
|
<%= for container <- @containers do %>
|
||||||
<.container_card container={container}>
|
<.container_card container={container}>
|
||||||
<:tag_actions>
|
<:tag_actions>
|
||||||
<div class="mx-4 my-2">
|
<div class="mx-4 my-2">
|
||||||
<%= live_patch to: Routes.container_index_path(Endpoint, :edit_tags, container),
|
<.link
|
||||||
class: "text-primary-600 link" do %>
|
patch={Routes.container_index_path(Endpoint, :edit_tags, container)}
|
||||||
|
class="text-primary-600 link"
|
||||||
|
>
|
||||||
<i class="fa-fw fa-lg fas fa-tags"></i>
|
<i class="fa-fw fa-lg fas fa-tags"></i>
|
||||||
<% end %>
|
</.link>
|
||||||
</div>
|
</div>
|
||||||
</:tag_actions>
|
</:tag_actions>
|
||||||
<%= live_patch to: Routes.container_index_path(Endpoint, :edit, container),
|
<.link
|
||||||
class: "text-primary-600 link",
|
patch={Routes.container_index_path(Endpoint, :edit, container)}
|
||||||
data: [qa: "edit-#{container.id}"] do %>
|
class="text-primary-600 link"
|
||||||
|
data-qa={"edit-#{container.id}"}
|
||||||
|
>
|
||||||
<i class="fa-fw fa-lg fas fa-edit"></i>
|
<i class="fa-fw fa-lg fas fa-edit"></i>
|
||||||
<% end %>
|
</.link>
|
||||||
|
|
||||||
<%= link to: "#",
|
<.link
|
||||||
class: "text-primary-600 link",
|
patch={Routes.container_index_path(Endpoint, :clone, container)}
|
||||||
phx_click: "delete",
|
class="text-primary-600 link"
|
||||||
phx_value_id: container.id,
|
data-qa={"clone-#{container.id}"}
|
||||||
data: [
|
>
|
||||||
confirm:
|
<i class="fa-fw fa-lg fas fa-copy"></i>
|
||||||
dgettext("prompts", "Are you sure you want to delete %{name}?", name: container.name),
|
</.link>
|
||||||
qa: "delete-#{container.id}"
|
|
||||||
] do %>
|
<.link
|
||||||
|
href="#"
|
||||||
|
class="text-primary-600 link"
|
||||||
|
phx-click="delete"
|
||||||
|
phx-value-id={container.id}
|
||||||
|
data-confirm={
|
||||||
|
dgettext("prompts", "Are you sure you want to delete %{name}?", name: container.name)
|
||||||
|
}
|
||||||
|
data-qa={"delete-#{container.id}"}
|
||||||
|
>
|
||||||
<i class="fa-fw fa-lg fas fa-trash"></i>
|
<i class="fa-fw fa-lg fas fa-trash"></i>
|
||||||
<% end %>
|
</.link>
|
||||||
</.container_card>
|
</.container_card>
|
||||||
<% end %>
|
<% end %>
|
||||||
|
<% end %>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<%= if @live_action in [:new, :edit] do %>
|
<%= if @live_action in [:new, :edit, :clone] do %>
|
||||||
<.modal return_to={Routes.container_index_path(Endpoint, :index)}>
|
<.modal return_to={return_to(@view_table)}>
|
||||||
<.live_component
|
<.live_component
|
||||||
module={CanneryWeb.ContainerLive.FormComponent}
|
module={CanneryWeb.ContainerLive.FormComponent}
|
||||||
id={@container.id || :new}
|
id={@container.id || :new}
|
||||||
title={@page_title}
|
title={@page_title}
|
||||||
action={@live_action}
|
action={@live_action}
|
||||||
container={@container}
|
container={@container}
|
||||||
return_to={Routes.container_index_path(Endpoint, :index)}
|
return_to={return_to(@view_table)}
|
||||||
current_user={@current_user}
|
current_user={@current_user}
|
||||||
/>
|
/>
|
||||||
</.modal>
|
</.modal>
|
||||||
<% end %>
|
<% end %>
|
||||||
|
|
||||||
<%= if @live_action == :edit_tags do %>
|
<%= if @live_action == :edit_tags do %>
|
||||||
<.modal return_to={Routes.container_index_path(Endpoint, :index)}>
|
<.modal return_to={return_to(@view_table)}>
|
||||||
<.live_component
|
<.live_component
|
||||||
module={CanneryWeb.ContainerLive.EditTagsComponent}
|
module={CanneryWeb.ContainerLive.EditTagsComponent}
|
||||||
id={@container.id}
|
id={@container.id}
|
||||||
|
@ -5,7 +5,7 @@ defmodule CanneryWeb.ContainerLive.Show do
|
|||||||
|
|
||||||
use CanneryWeb, :live_view
|
use CanneryWeb, :live_view
|
||||||
import CanneryWeb.Components.{AmmoGroupCard, TagCard}
|
import CanneryWeb.Components.{AmmoGroupCard, TagCard}
|
||||||
alias Cannery.{Ammo, Accounts.User, Containers, Containers.Container, Repo, Tags}
|
alias Cannery.{Accounts.User, Ammo, Containers, Containers.Container, Repo, Tags}
|
||||||
alias CanneryWeb.Endpoint
|
alias CanneryWeb.Endpoint
|
||||||
alias Ecto.Changeset
|
alias Ecto.Changeset
|
||||||
alias Phoenix.LiveView.Socket
|
alias Phoenix.LiveView.Socket
|
||||||
@ -62,7 +62,7 @@ defmodule CanneryWeb.ContainerLive.Show do
|
|||||||
|
|
||||||
socket
|
socket
|
||||||
|> put_flash(:info, prompt)
|
|> put_flash(:info, prompt)
|
||||||
|> push_redirect(to: Routes.container_index_path(socket, :index))
|
|> push_navigate(to: Routes.container_index_path(socket, :index))
|
||||||
|
|
||||||
{:error, %{action: :delete, errors: [ammo_groups: _error], valid?: false} = changeset} ->
|
{:error, %{action: :delete, errors: [ammo_groups: _error], valid?: false} = changeset} ->
|
||||||
ammo_groups_error = changeset |> changeset_errors(:ammo_groups) |> Enum.join(", ")
|
ammo_groups_error = changeset |> changeset_errors(:ammo_groups) |> Enum.join(", ")
|
||||||
@ -83,7 +83,7 @@ defmodule CanneryWeb.ContainerLive.Show do
|
|||||||
end
|
end
|
||||||
|
|
||||||
@impl true
|
@impl true
|
||||||
def handle_event("toggle_show_used", _, %{assigns: %{show_used: show_used}} = socket) do
|
def handle_event("toggle_show_used", _params, %{assigns: %{show_used: show_used}} = socket) do
|
||||||
{:noreply, socket |> assign(:show_used, !show_used) |> render_container()}
|
{:noreply, socket |> assign(:show_used, !show_used) |> render_container()}
|
||||||
end
|
end
|
||||||
|
|
||||||
|
@ -35,22 +35,25 @@
|
|||||||
<% end %>
|
<% 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),
|
<.link
|
||||||
class: "text-primary-600 link",
|
patch={Routes.container_show_path(Endpoint, :edit, @container)}
|
||||||
data: [qa: "edit"] do %>
|
class="text-primary-600 link"
|
||||||
|
data-qa="edit"
|
||||||
|
>
|
||||||
<i class="fa-fw fa-lg fas fa-edit"></i>
|
<i class="fa-fw fa-lg fas fa-edit"></i>
|
||||||
<% end %>
|
</.link>
|
||||||
|
|
||||||
<%= link to: "#",
|
<.link
|
||||||
class: "text-primary-600 link",
|
href="#"
|
||||||
phx_click: "delete_container",
|
class="text-primary-600 link"
|
||||||
data: [
|
phx-click="delete_container"
|
||||||
confirm:
|
data-confirm={
|
||||||
dgettext("prompts", "Are you sure you want to delete %{name}?", name: @container.name),
|
dgettext("prompts", "Are you sure you want to delete %{name}?", name: @container.name)
|
||||||
qa: "delete"
|
}
|
||||||
] do %>
|
data-qa="delete"
|
||||||
|
>
|
||||||
<i class="fa-fw fa-lg fas fa-trash"></i>
|
<i class="fa-fw fa-lg fas fa-trash"></i>
|
||||||
<% end %>
|
</.link>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<hr class="mb-4 hr" />
|
<hr class="mb-4 hr" />
|
||||||
@ -62,10 +65,12 @@
|
|||||||
<%= display_emoji("😔") %>
|
<%= display_emoji("😔") %>
|
||||||
</h2>
|
</h2>
|
||||||
|
|
||||||
<%= live_patch(dgettext("actions", "Why not add one?"),
|
<.link
|
||||||
to: Routes.container_show_path(Endpoint, :edit_tags, @container),
|
patch={Routes.container_show_path(Endpoint, :edit_tags, @container)}
|
||||||
class: "btn btn-primary"
|
class="btn btn-primary"
|
||||||
) %>
|
>
|
||||||
|
<%= dgettext("actions", "Why not add one?") %>
|
||||||
|
</.link>
|
||||||
</div>
|
</div>
|
||||||
<% else %>
|
<% else %>
|
||||||
<div class="flex flex-wrap justify-center items-center">
|
<div class="flex flex-wrap justify-center items-center">
|
||||||
@ -74,10 +79,12 @@
|
|||||||
<% end %>
|
<% end %>
|
||||||
|
|
||||||
<div class="mx-4 my-2">
|
<div class="mx-4 my-2">
|
||||||
<%= live_patch to: Routes.container_show_path(Endpoint, :edit_tags, @container),
|
<.link
|
||||||
class: "text-primary-600 link" do %>
|
patch={Routes.container_show_path(Endpoint, :edit_tags, @container)}
|
||||||
|
class="text-primary-600 link"
|
||||||
|
>
|
||||||
<i class="fa-fw fa-lg fas fa-tags"></i>
|
<i class="fa-fw fa-lg fas fa-tags"></i>
|
||||||
<% end %>
|
</.link>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
<% end %>
|
<% end %>
|
||||||
@ -87,7 +94,7 @@
|
|||||||
<div class="flex flex-col justify-center items-center">
|
<div class="flex flex-col justify-center items-center">
|
||||||
<.toggle_button action="toggle_show_used" value={@show_used}>
|
<.toggle_button action="toggle_show_used" value={@show_used}>
|
||||||
<span class="title text-lg text-primary-600">
|
<span class="title text-lg text-primary-600">
|
||||||
<%= gettext("Show used") %>
|
<%= dgettext("actions", "Show used") %>
|
||||||
</span>
|
</span>
|
||||||
</.toggle_button>
|
</.toggle_button>
|
||||||
</div>
|
</div>
|
||||||
|
@ -101,10 +101,12 @@ defmodule CanneryWeb.HomeLive do
|
|||||||
</b>
|
</b>
|
||||||
<p>
|
<p>
|
||||||
<%= if @admins |> Enum.empty?() do %>
|
<%= if @admins |> Enum.empty?() do %>
|
||||||
<%= link(dgettext("prompts", "Register to setup %{name}", name: "Cannery"),
|
<.link
|
||||||
class: "hover:underline",
|
href={Routes.user_registration_path(CanneryWeb.Endpoint, :new)}
|
||||||
to: Routes.user_registration_path(CanneryWeb.Endpoint, :new)
|
class="hover:underline"
|
||||||
) %>
|
>
|
||||||
|
<%= dgettext("prompts", "Register to setup %{name}", name: "Cannery") %>
|
||||||
|
</.link>
|
||||||
<% else %>
|
<% else %>
|
||||||
<div class="flex flex-wrap justify-center space-x-2">
|
<div class="flex flex-wrap justify-center space-x-2">
|
||||||
<%= for admin <- @admins do %>
|
<%= for admin <- @admins do %>
|
||||||
@ -130,13 +132,15 @@ defmodule CanneryWeb.HomeLive do
|
|||||||
|
|
||||||
<li class="flex flex-row justify-center items-center space-x-2">
|
<li class="flex flex-row justify-center items-center space-x-2">
|
||||||
<b>Version:</b>
|
<b>Version:</b>
|
||||||
<%= link class: "flex flex-row justify-center items-center space-x-2 hover:underline",
|
<.link
|
||||||
to: "https://gitea.bubbletea.dev/shibao/cannery/src/branch/stable/CHANGELOG.md",
|
href="https://gitea.bubbletea.dev/shibao/cannery/src/branch/stable/CHANGELOG.md"
|
||||||
target: "_blank",
|
class="flex flex-row justify-center items-center space-x-2 hover:underline"
|
||||||
rel: "noopener noreferrer" do %>
|
target="_blank"
|
||||||
<p>0.5.5</p>
|
rel="noopener noreferrer"
|
||||||
|
>
|
||||||
|
<p>0.6.0</p>
|
||||||
<i class="fas fa-md fa-info-circle"></i>
|
<i class="fas fa-md fa-info-circle"></i>
|
||||||
<% end %>
|
</.link>
|
||||||
</li>
|
</li>
|
||||||
</ul>
|
</ul>
|
||||||
|
|
||||||
@ -148,31 +152,37 @@ defmodule CanneryWeb.HomeLive do
|
|||||||
</h2>
|
</h2>
|
||||||
|
|
||||||
<li class="flex flex-col justify-center space-x-2">
|
<li class="flex flex-col justify-center space-x-2">
|
||||||
<%= link class: "flex flex-row justify-center items-center space-x-2 hover:underline",
|
<.link
|
||||||
to: "https://gitea.bubbletea.dev/shibao/cannery",
|
class="flex flex-row justify-center items-center space-x-2 hover:underline"
|
||||||
target: "_blank",
|
href="https://gitea.bubbletea.dev/shibao/cannery"
|
||||||
rel: "noopener noreferrer" do %>
|
target="_blank"
|
||||||
|
rel="noopener noreferrer"
|
||||||
|
>
|
||||||
<p><%= gettext("View the source code") %></p>
|
<p><%= gettext("View the source code") %></p>
|
||||||
<i class="fas fa-md fa-code"></i>
|
<i class="fas fa-md fa-code"></i>
|
||||||
<% end %>
|
</.link>
|
||||||
</li>
|
</li>
|
||||||
<li class="flex flex-col justify-center space-x-2">
|
<li class="flex flex-col justify-center space-x-2">
|
||||||
<%= link class: "flex flex-row justify-center items-center space-x-2 hover:underline",
|
<.link
|
||||||
to: "https://weblate.bubbletea.dev/engage/cannery",
|
class="flex flex-row justify-center items-center space-x-2 hover:underline"
|
||||||
target: "_blank",
|
href="https://weblate.bubbletea.dev/engage/cannery"
|
||||||
rel: "noopener noreferrer" do %>
|
target="_blank"
|
||||||
|
rel="noopener noreferrer"
|
||||||
|
>
|
||||||
<p><%= gettext("Help translate") %></p>
|
<p><%= gettext("Help translate") %></p>
|
||||||
<i class="fas fa-md fa-language"></i>
|
<i class="fas fa-md fa-language"></i>
|
||||||
<% end %>
|
</.link>
|
||||||
</li>
|
</li>
|
||||||
<li class="flex flex-col justify-center space-x-2">
|
<li class="flex flex-col justify-center space-x-2">
|
||||||
<%= link class: "flex flex-row justify-center items-center space-x-2 hover:underline",
|
<.link
|
||||||
to: "https://gitea.bubbletea.dev/shibao/cannery/issues/new",
|
class="flex flex-row justify-center items-center space-x-2 hover:underline"
|
||||||
target: "_blank",
|
href="https://gitea.bubbletea.dev/shibao/cannery/issues/new"
|
||||||
rel: "noopener noreferrer" do %>
|
target="_blank"
|
||||||
|
rel="noopener noreferrer"
|
||||||
|
>
|
||||||
<p><%= gettext("Report bugs or request features") %></p>
|
<p><%= gettext("Report bugs or request features") %></p>
|
||||||
<i class="fas fa-md fa-spider"></i>
|
<i class="fas fa-md fa-spider"></i>
|
||||||
<% end %>
|
</.link>
|
||||||
</li>
|
</li>
|
||||||
</ul>
|
</ul>
|
||||||
</div>
|
</div>
|
||||||
|
@ -2,7 +2,7 @@ defmodule CanneryWeb.InitAssigns do
|
|||||||
@moduledoc """
|
@moduledoc """
|
||||||
Ensures common `assigns` are applied to all LiveViews attaching this hook.
|
Ensures common `assigns` are applied to all LiveViews attaching this hook.
|
||||||
"""
|
"""
|
||||||
import Phoenix.LiveView
|
import Phoenix.Component
|
||||||
alias Cannery.Accounts
|
alias Cannery.Accounts
|
||||||
|
|
||||||
def on_mount(:default, _params, %{"locale" => locale, "user_token" => user_token}, socket) do
|
def on_mount(:default, _params, %{"locale" => locale, "user_token" => user_token}, socket) do
|
||||||
|
@ -60,7 +60,7 @@ defmodule CanneryWeb.InviteLive.FormComponent do
|
|||||||
case invite |> Invites.update_invite(invite_params, current_user) do
|
case invite |> Invites.update_invite(invite_params, current_user) do
|
||||||
{:ok, %{name: invite_name}} ->
|
{:ok, %{name: invite_name}} ->
|
||||||
prompt = dgettext("prompts", "%{name} updated successfully", name: invite_name)
|
prompt = dgettext("prompts", "%{name} updated successfully", name: invite_name)
|
||||||
socket |> put_flash(:info, prompt) |> push_redirect(to: return_to)
|
socket |> put_flash(:info, prompt) |> push_navigate(to: return_to)
|
||||||
|
|
||||||
{:error, %Changeset{} = changeset} ->
|
{:error, %Changeset{} = changeset} ->
|
||||||
socket |> assign(:changeset, changeset)
|
socket |> assign(:changeset, changeset)
|
||||||
@ -78,7 +78,7 @@ defmodule CanneryWeb.InviteLive.FormComponent do
|
|||||||
case current_user |> Invites.create_invite(invite_params) do
|
case current_user |> Invites.create_invite(invite_params) do
|
||||||
{:ok, %{name: invite_name}} ->
|
{:ok, %{name: invite_name}} ->
|
||||||
prompt = dgettext("prompts", "%{name} created successfully", name: invite_name)
|
prompt = dgettext("prompts", "%{name} created successfully", name: invite_name)
|
||||||
socket |> put_flash(:info, prompt) |> push_redirect(to: return_to)
|
socket |> put_flash(:info, prompt) |> push_navigate(to: return_to)
|
||||||
|
|
||||||
{:error, %Changeset{} = changeset} ->
|
{:error, %Changeset{} = changeset} ->
|
||||||
socket |> assign(changeset: changeset)
|
socket |> assign(changeset: changeset)
|
||||||
|
@ -3,7 +3,7 @@
|
|||||||
<%= @title %>
|
<%= @title %>
|
||||||
</h2>
|
</h2>
|
||||||
<.form
|
<.form
|
||||||
let={f}
|
:let={f}
|
||||||
for={@changeset}
|
for={@changeset}
|
||||||
id="invite-form"
|
id="invite-form"
|
||||||
class="flex flex-col space-y-4 sm:space-y-0 sm:grid sm:grid-cols-3 sm:gap-4 justify-center items-center"
|
class="flex flex-col space-y-4 sm:space-y-0 sm:grid sm:grid-cols-3 sm:gap-4 justify-center items-center"
|
||||||
|
@ -17,7 +17,7 @@ defmodule CanneryWeb.InviteLive.Index do
|
|||||||
else
|
else
|
||||||
prompt = dgettext("errors", "You are not authorized to view this page")
|
prompt = dgettext("errors", "You are not authorized to view this page")
|
||||||
return_to = Routes.live_path(Endpoint, HomeLive)
|
return_to = Routes.live_path(Endpoint, HomeLive)
|
||||||
socket |> put_flash(:error, prompt) |> push_redirect(to: return_to)
|
socket |> put_flash(:error, prompt) |> push_navigate(to: return_to)
|
||||||
end
|
end
|
||||||
|
|
||||||
{:ok, socket}
|
{:ok, socket}
|
||||||
|
@ -9,15 +9,13 @@
|
|||||||
<%= display_emoji("😔") %>
|
<%= display_emoji("😔") %>
|
||||||
</h1>
|
</h1>
|
||||||
|
|
||||||
<%= live_patch(dgettext("actions", "Invite someone new!"),
|
<.link patch={Routes.invite_index_path(Endpoint, :new)} class="btn btn-primary">
|
||||||
to: Routes.invite_index_path(Endpoint, :new),
|
<%= dgettext("actions", "Invite someone new!") %>
|
||||||
class: "btn btn-primary"
|
</.link>
|
||||||
) %>
|
|
||||||
<% else %>
|
<% else %>
|
||||||
<%= live_patch(dgettext("actions", "Create Invite"),
|
<.link patch={Routes.invite_index_path(Endpoint, :new)} class="btn btn-primary">
|
||||||
to: Routes.invite_index_path(Endpoint, :new),
|
<%= dgettext("actions", "Create Invite") %>
|
||||||
class: "btn btn-primary"
|
</.link>
|
||||||
) %>
|
|
||||||
<% end %>
|
<% end %>
|
||||||
|
|
||||||
<div class="w-full flex flex-row flex-wrap justify-center items-center">
|
<div class="w-full flex flex-row flex-wrap justify-center items-center">
|
||||||
@ -34,33 +32,36 @@
|
|||||||
</button>
|
</button>
|
||||||
</form>
|
</form>
|
||||||
</:code_actions>
|
</:code_actions>
|
||||||
<%= live_patch to: Routes.invite_index_path(Endpoint, :edit, invite),
|
<.link
|
||||||
class: "text-primary-600 link",
|
patch={Routes.invite_index_path(Endpoint, :edit, invite)}
|
||||||
data: [qa: "edit-#{invite.id}"] do %>
|
class="text-primary-600 link"
|
||||||
|
data-qa={"edit-#{invite.id}"}
|
||||||
|
>
|
||||||
<i class="fa-fw fa-lg fas fa-edit"></i>
|
<i class="fa-fw fa-lg fas fa-edit"></i>
|
||||||
<% end %>
|
</.link>
|
||||||
|
|
||||||
<%= link to: "#",
|
<.link
|
||||||
class: "text-primary-600 link",
|
href="#"
|
||||||
phx_click: "delete_invite",
|
class="text-primary-600 link"
|
||||||
phx_value_id: invite.id,
|
phx-click="delete_invite"
|
||||||
data: [
|
phx-value-id={invite.id}
|
||||||
confirm:
|
data-confirm={
|
||||||
dgettext("prompts", "Are you sure you want to delete the invite for %{name}?",
|
dgettext("prompts", "Are you sure you want to delete the invite for %{name}?",
|
||||||
name: invite.name
|
name: invite.name
|
||||||
),
|
)
|
||||||
qa: "delete-#{invite.id}"
|
}
|
||||||
] do %>
|
data-qa={"delete-#{invite.id}"}
|
||||||
|
>
|
||||||
<i class="fa-fw fa-lg fas fa-trash"></i>
|
<i class="fa-fw fa-lg fas fa-trash"></i>
|
||||||
<% end %>
|
</.link>
|
||||||
|
|
||||||
<%= if invite.disabled_at |> is_nil() do %>
|
<%= if invite.disabled_at |> is_nil() do %>
|
||||||
<a href="#" class="btn btn-primary" phx-click="disable_invite" phx-value-id={invite.id}>
|
<a href="#" class="btn btn-primary" phx-click="disable_invite" phx-value-id={invite.id}>
|
||||||
<%= gettext("Disable") %>
|
<%= dgettext("actions", "Disable") %>
|
||||||
</a>
|
</a>
|
||||||
<% else %>
|
<% else %>
|
||||||
<a href="#" class="btn btn-primary" phx-click="enable_invite" phx-value-id={invite.id}>
|
<a href="#" class="btn btn-primary" phx-click="enable_invite" phx-value-id={invite.id}>
|
||||||
<%= gettext("Enable") %>
|
<%= dgettext("actions", "Enable") %>
|
||||||
</a>
|
</a>
|
||||||
<% end %>
|
<% end %>
|
||||||
|
|
||||||
@ -76,7 +77,7 @@
|
|||||||
)
|
)
|
||||||
}
|
}
|
||||||
>
|
>
|
||||||
<%= gettext("Set Unlimited") %>
|
<%= dgettext("actions", "Set Unlimited") %>
|
||||||
</a>
|
</a>
|
||||||
<% end %>
|
<% end %>
|
||||||
</.invite_card>
|
</.invite_card>
|
||||||
@ -93,20 +94,21 @@
|
|||||||
<div class="w-full flex flex-row flex-wrap justify-center items-center">
|
<div class="w-full flex flex-row flex-wrap justify-center items-center">
|
||||||
<%= for admin <- @admins do %>
|
<%= for admin <- @admins do %>
|
||||||
<.user_card user={admin}>
|
<.user_card user={admin}>
|
||||||
<%= link to: "#",
|
<.link
|
||||||
class: "text-primary-600 link",
|
href="#"
|
||||||
phx_click: "delete_user",
|
class="text-primary-600 link"
|
||||||
phx_value_id: admin.id,
|
phx-click="delete_user"
|
||||||
data: [
|
phx-value-id={admin.id}
|
||||||
confirm:
|
data-confirm={
|
||||||
dgettext(
|
dgettext(
|
||||||
"prompts",
|
"prompts",
|
||||||
"Are you sure you want to delete %{email}? This action is permanent!",
|
"Are you sure you want to delete %{email}? This action is permanent!",
|
||||||
email: admin.email
|
email: admin.email
|
||||||
)
|
)
|
||||||
] do %>
|
}
|
||||||
|
>
|
||||||
<i class="fa-fw fa-lg fas fa-trash"></i>
|
<i class="fa-fw fa-lg fas fa-trash"></i>
|
||||||
<% end %>
|
</.link>
|
||||||
</.user_card>
|
</.user_card>
|
||||||
<% end %>
|
<% end %>
|
||||||
</div>
|
</div>
|
||||||
@ -122,20 +124,21 @@
|
|||||||
<div class="w-full flex flex-row flex-wrap justify-center items-center">
|
<div class="w-full flex flex-row flex-wrap justify-center items-center">
|
||||||
<%= for user <- @users do %>
|
<%= for user <- @users do %>
|
||||||
<.user_card user={user}>
|
<.user_card user={user}>
|
||||||
<%= link to: "#",
|
<.link
|
||||||
class: "text-primary-600 link",
|
href="#"
|
||||||
phx_click: "delete_user",
|
class="text-primary-600 link"
|
||||||
phx_value_id: user.id,
|
phx-click="delete_user"
|
||||||
data: [
|
phx-value-id={user.id}
|
||||||
confirm:
|
data-confirm={
|
||||||
dgettext(
|
dgettext(
|
||||||
"prompts",
|
"prompts",
|
||||||
"Are you sure you want to delete %{email}? This action is permanent!",
|
"Are you sure you want to delete %{email}? This action is permanent!",
|
||||||
email: user.email
|
email: user.email
|
||||||
)
|
)
|
||||||
] do %>
|
}
|
||||||
|
>
|
||||||
<i class="fa-fw fa-lg fas fa-trash"></i>
|
<i class="fa-fw fa-lg fas fa-trash"></i>
|
||||||
<% end %>
|
</.link>
|
||||||
</.user_card>
|
</.user_card>
|
||||||
<% end %>
|
<% end %>
|
||||||
</div>
|
</div>
|
||||||
|
@ -3,7 +3,7 @@ defmodule CanneryWeb.LiveHelpers do
|
|||||||
Contains common helper functions for liveviews
|
Contains common helper functions for liveviews
|
||||||
"""
|
"""
|
||||||
|
|
||||||
import Phoenix.LiveView.Helpers
|
import Phoenix.Component
|
||||||
alias Phoenix.LiveView.JS
|
alias Phoenix.LiveView.JS
|
||||||
|
|
||||||
@doc """
|
@doc """
|
||||||
@ -27,17 +27,17 @@ defmodule CanneryWeb.LiveHelpers do
|
|||||||
"""
|
"""
|
||||||
def modal(assigns) do
|
def modal(assigns) do
|
||||||
~H"""
|
~H"""
|
||||||
<%= live_patch to: @return_to,
|
<.link
|
||||||
id: "modal-bg",
|
patch={@return_to}
|
||||||
class:
|
id="modal-bg"
|
||||||
"fade-in fixed z-10 left-0 top-0
|
class="fade-in fixed z-10 left-0 top-0
|
||||||
w-full h-full overflow-hidden
|
w-full h-full overflow-hidden
|
||||||
p-8 flex flex-col justify-center items-center cursor-auto",
|
p-8 flex flex-col justify-center items-center cursor-auto"
|
||||||
style: "background-color: rgba(0,0,0,0.4);",
|
style="background-color: rgba(0,0,0,0.4);"
|
||||||
phx_remove: hide_modal()
|
phx_remove={hide_modal()}
|
||||||
do %>
|
>
|
||||||
<span class="hidden"></span>
|
<span class="hidden"></span>
|
||||||
<% end %>
|
</.link>
|
||||||
|
|
||||||
<div
|
<div
|
||||||
id="modal"
|
id="modal"
|
||||||
@ -53,15 +53,16 @@ defmodule CanneryWeb.LiveHelpers do
|
|||||||
flex flex-col justify-start items-center
|
flex flex-col justify-start items-center
|
||||||
bg-white border-2 rounded-lg"
|
bg-white border-2 rounded-lg"
|
||||||
>
|
>
|
||||||
<%= live_patch to: @return_to,
|
<.link
|
||||||
id: "close",
|
patch={@return_to}
|
||||||
class:
|
id="close"
|
||||||
"absolute top-8 right-10
|
class="absolute top-8 right-10
|
||||||
text-gray-500 hover:text-gray-800
|
text-gray-500 hover:text-gray-800
|
||||||
transition-all duration-500 ease-in-out",
|
transition-all duration-500 ease-in-out"
|
||||||
phx_remove: hide_modal() do %>
|
phx_remove={hide_modal()}
|
||||||
|
>
|
||||||
<i class="fa-fw fa-lg fas fa-times"></i>
|
<i class="fa-fw fa-lg fas fa-times"></i>
|
||||||
<% end %>
|
</.link>
|
||||||
|
|
||||||
<div class="overflow-x-hidden overflow-y-auto w-full p-8 flex flex-col space-y-4 justify-start items-center">
|
<div class="overflow-x-hidden overflow-y-auto w-full p-8 flex flex-col space-y-4 justify-start items-center">
|
||||||
<%= render_slot(@inner_block) %>
|
<%= render_slot(@inner_block) %>
|
||||||
|
@ -53,7 +53,7 @@ defmodule CanneryWeb.RangeLive.FormComponent do
|
|||||||
case ActivityLog.update_shot_group(shot_group, shot_group_params, current_user) do
|
case ActivityLog.update_shot_group(shot_group, shot_group_params, current_user) do
|
||||||
{:ok, _shot_group} ->
|
{:ok, _shot_group} ->
|
||||||
prompt = dgettext("prompts", "Shot records updated successfully")
|
prompt = dgettext("prompts", "Shot records updated successfully")
|
||||||
socket |> put_flash(:info, prompt) |> push_redirect(to: return_to)
|
socket |> put_flash(:info, prompt) |> push_navigate(to: return_to)
|
||||||
|
|
||||||
{:error, %Ecto.Changeset{} = changeset} ->
|
{:error, %Ecto.Changeset{} = changeset} ->
|
||||||
socket |> assign(:changeset, changeset)
|
socket |> assign(:changeset, changeset)
|
||||||
|
@ -4,7 +4,7 @@
|
|||||||
</h2>
|
</h2>
|
||||||
|
|
||||||
<.form
|
<.form
|
||||||
let={f}
|
:let={f}
|
||||||
for={@changeset}
|
for={@changeset}
|
||||||
id="shot-group-form"
|
id="shot-group-form"
|
||||||
class="flex flex-col space-y-4 sm:space-y-0 sm:grid sm:grid-cols-3 sm:gap-4 justify-center items-center"
|
class="flex flex-col space-y-4 sm:space-y-0 sm:grid sm:grid-cols-3 sm:gap-4 justify-center items-center"
|
||||||
|
@ -77,64 +77,120 @@ defmodule CanneryWeb.RangeLive.Index do
|
|||||||
ammo_groups = Ammo.list_staged_ammo_groups(current_user)
|
ammo_groups = Ammo.list_staged_ammo_groups(current_user)
|
||||||
|
|
||||||
columns = [
|
columns = [
|
||||||
%{label: gettext("Ammo"), key: "name"},
|
%{label: gettext("Ammo"), key: :name},
|
||||||
%{label: gettext("Rounds shot"), key: "count"},
|
%{label: gettext("Rounds shot"), key: :count},
|
||||||
%{label: gettext("Notes"), key: "notes"},
|
%{label: gettext("Notes"), key: :notes},
|
||||||
%{label: gettext("Date"), key: "date"},
|
%{label: gettext("Date"), key: :date},
|
||||||
%{label: nil, key: "actions", sortable: false}
|
%{label: nil, key: :actions, sortable: false}
|
||||||
]
|
]
|
||||||
|
|
||||||
rows =
|
rows =
|
||||||
shot_groups
|
shot_groups
|
||||||
|> Enum.map(fn shot_group -> shot_group |> get_row_data_for_shot_group(columns) end)
|
|> Enum.map(fn shot_group -> shot_group |> get_row_data_for_shot_group(columns) end)
|
||||||
|
|
||||||
|
chart_data =
|
||||||
|
shot_groups
|
||||||
|
|> Enum.map(fn shot_group ->
|
||||||
|
shot_group
|
||||||
|
|> get_chart_data_for_shot_group([:name, :count, :notes, :date])
|
||||||
|
end)
|
||||||
|
|> Enum.sort_by(fn %{date: date} -> date end, Date)
|
||||||
|
|
||||||
socket
|
socket
|
||||||
|> assign(ammo_groups: ammo_groups, columns: columns, rows: rows, shot_groups: shot_groups)
|
|> assign(
|
||||||
|
ammo_groups: ammo_groups,
|
||||||
|
columns: columns,
|
||||||
|
rows: rows,
|
||||||
|
chart_data: chart_data,
|
||||||
|
shot_groups: shot_groups
|
||||||
|
)
|
||||||
end
|
end
|
||||||
|
|
||||||
@spec get_row_data_for_shot_group(ShotGroup.t(), [map()]) :: [map()]
|
@spec get_chart_data_for_shot_group(ShotGroup.t(), keys :: [atom()]) :: map()
|
||||||
|
defp get_chart_data_for_shot_group(shot_group, keys) do
|
||||||
|
shot_group = shot_group |> Repo.preload(ammo_group: :ammo_type)
|
||||||
|
|
||||||
|
labels =
|
||||||
|
if shot_group.notes do
|
||||||
|
[gettext("Notes: %{notes}", notes: shot_group.notes)]
|
||||||
|
else
|
||||||
|
[]
|
||||||
|
end
|
||||||
|
|
||||||
|
labels = [
|
||||||
|
gettext(
|
||||||
|
"Name: %{name}",
|
||||||
|
name: shot_group.ammo_group.ammo_type.name
|
||||||
|
),
|
||||||
|
gettext(
|
||||||
|
"Rounds shot: %{count}",
|
||||||
|
count: shot_group.count
|
||||||
|
)
|
||||||
|
| labels
|
||||||
|
]
|
||||||
|
|
||||||
|
keys
|
||||||
|
|> Map.new(fn key ->
|
||||||
|
value =
|
||||||
|
case key do
|
||||||
|
:name -> shot_group.ammo_group.ammo_type.name
|
||||||
|
key -> shot_group |> Map.get(key)
|
||||||
|
end
|
||||||
|
|
||||||
|
{key, value}
|
||||||
|
end)
|
||||||
|
|> Map.put(:labels, labels)
|
||||||
|
end
|
||||||
|
|
||||||
|
@spec get_row_data_for_shot_group(ShotGroup.t(), [map()]) :: map()
|
||||||
defp get_row_data_for_shot_group(%{date: date} = shot_group, columns) do
|
defp get_row_data_for_shot_group(%{date: date} = shot_group, columns) do
|
||||||
shot_group = shot_group |> Repo.preload(ammo_group: :ammo_type)
|
shot_group = shot_group |> Repo.preload(ammo_group: :ammo_type)
|
||||||
assigns = %{shot_group: shot_group}
|
assigns = %{shot_group: shot_group}
|
||||||
|
|
||||||
columns
|
columns
|
||||||
|> Enum.into(%{}, fn %{key: key} ->
|
|> Map.new(fn %{key: key} ->
|
||||||
value =
|
value =
|
||||||
case key do
|
case key do
|
||||||
"name" ->
|
:name ->
|
||||||
{shot_group.ammo_group.ammo_type.name,
|
{shot_group.ammo_group.ammo_type.name,
|
||||||
live_patch(shot_group.ammo_group.ammo_type.name,
|
~H"""
|
||||||
to: Routes.ammo_group_show_path(Endpoint, :show, shot_group.ammo_group),
|
<.link
|
||||||
class: "link"
|
navigate={Routes.ammo_group_show_path(Endpoint, :show, @shot_group.ammo_group)}
|
||||||
)}
|
class="link"
|
||||||
|
>
|
||||||
|
<%= @shot_group.ammo_group.ammo_type.name %>
|
||||||
|
</.link>
|
||||||
|
"""}
|
||||||
|
|
||||||
"date" ->
|
:date ->
|
||||||
date |> display_date()
|
date |> display_date()
|
||||||
|
|
||||||
"actions" ->
|
:actions ->
|
||||||
~H"""
|
~H"""
|
||||||
<div class="px-4 py-2 space-x-4 flex justify-center items-center">
|
<div class="px-4 py-2 space-x-4 flex justify-center items-center">
|
||||||
<%= live_patch to: Routes.range_index_path(Endpoint, :edit, shot_group),
|
<.link
|
||||||
class: "text-primary-600 link",
|
patch={Routes.range_index_path(Endpoint, :edit, @shot_group)}
|
||||||
data: [qa: "edit-#{shot_group.id}"] do %>
|
class="text-primary-600 link"
|
||||||
|
data-qa={"edit-#{@shot_group.id}"}
|
||||||
|
>
|
||||||
<i class="fa-fw fa-lg fas fa-edit"></i>
|
<i class="fa-fw fa-lg fas fa-edit"></i>
|
||||||
<% end %>
|
</.link>
|
||||||
|
|
||||||
<%= link to: "#",
|
<.link
|
||||||
class: "text-primary-600 link",
|
href="#"
|
||||||
phx_click: "delete",
|
class="text-primary-600 link"
|
||||||
phx_value_id: shot_group.id,
|
phx-click="delete"
|
||||||
data: [
|
phx-value-id={@shot_group.id}
|
||||||
confirm: dgettext("prompts", "Are you sure you want to delete this shot record?"),
|
data-confirm={dgettext("prompts", "Are you sure you want to delete this shot record?")}
|
||||||
qa: "delete-#{shot_group.id}"
|
data-qa={"delete-#{@shot_group.id}"}
|
||||||
] do %>
|
>
|
||||||
<i class="fa-fw fa-lg fas fa-trash"></i>
|
<i class="fa-fw fa-lg fas fa-trash"></i>
|
||||||
<% end %>
|
</.link>
|
||||||
</div>
|
</div>
|
||||||
"""
|
"""
|
||||||
|
|
||||||
key ->
|
key ->
|
||||||
shot_group |> Map.get(key |> String.to_existing_atom())
|
shot_group |> Map.get(key)
|
||||||
end
|
end
|
||||||
|
|
||||||
{key, value}
|
{key, value}
|
||||||
|
@ -9,15 +9,13 @@
|
|||||||
<%= display_emoji("😔") %>
|
<%= display_emoji("😔") %>
|
||||||
</h1>
|
</h1>
|
||||||
|
|
||||||
<%= live_patch(dgettext("actions", "Why not get some ready to shoot?"),
|
<.link navigate={Routes.ammo_group_index_path(Endpoint, :index)} class="btn btn-primary">
|
||||||
to: Routes.ammo_group_index_path(Endpoint, :index),
|
<%= dgettext("actions", "Why not get some ready to shoot?") %>
|
||||||
class: "btn btn-primary"
|
</.link>
|
||||||
) %>
|
|
||||||
<% else %>
|
<% else %>
|
||||||
<%= live_patch(dgettext("actions", "Stage ammo"),
|
<.link navigate={Routes.ammo_group_index_path(Endpoint, :index)} class="btn btn-primary">
|
||||||
to: Routes.ammo_group_index_path(Endpoint, :index),
|
<%= dgettext("actions", "Stage ammo") %>
|
||||||
class: "btn btn-primary"
|
</.link>
|
||||||
) %>
|
|
||||||
|
|
||||||
<%= for ammo_group <- @ammo_groups do %>
|
<%= for ammo_group <- @ammo_groups do %>
|
||||||
<.ammo_group_card ammo_group={ammo_group}>
|
<.ammo_group_card ammo_group={ammo_group}>
|
||||||
@ -29,14 +27,16 @@
|
|||||||
data-confirm={"#{dgettext("prompts", "Are you sure you want to unstage this ammo?")}"}
|
data-confirm={"#{dgettext("prompts", "Are you sure you want to unstage this ammo?")}"}
|
||||||
>
|
>
|
||||||
<%= if ammo_group.staged,
|
<%= if ammo_group.staged,
|
||||||
do: gettext("Unstage from range"),
|
do: dgettext("actions", "Unstage from range"),
|
||||||
else: gettext("Stage for range") %>
|
else: dgettext("actions", "Stage for range") %>
|
||||||
</button>
|
</button>
|
||||||
|
|
||||||
<%= live_patch(dgettext("actions", "Record shots"),
|
<.link
|
||||||
to: Routes.range_index_path(Endpoint, :add_shot_group, ammo_group),
|
patch={Routes.range_index_path(Endpoint, :add_shot_group, ammo_group)}
|
||||||
class: "btn btn-primary"
|
class="btn btn-primary"
|
||||||
) %>
|
>
|
||||||
|
<%= dgettext("actions", "Record shots") %>
|
||||||
|
</.link>
|
||||||
</.ammo_group_card>
|
</.ammo_group_card>
|
||||||
<% end %>
|
<% end %>
|
||||||
<% end %>
|
<% end %>
|
||||||
@ -53,11 +53,27 @@
|
|||||||
<%= gettext("Shot log") %>
|
<%= gettext("Shot log") %>
|
||||||
</h1>
|
</h1>
|
||||||
|
|
||||||
|
<canvas
|
||||||
|
id="shot-log-chart"
|
||||||
|
phx-hook="ShotLogChart"
|
||||||
|
phx-update="ignore"
|
||||||
|
class="max-h-72"
|
||||||
|
data-chart-data={Jason.encode!(@chart_data)}
|
||||||
|
data-label={gettext("Rounds fired")}
|
||||||
|
data-color={random_color()}
|
||||||
|
aria-label={gettext("Rounds fired chart")}
|
||||||
|
role="img"
|
||||||
|
>
|
||||||
|
<%= dgettext("errors", "Your browser does not support the canvas element.") %>
|
||||||
|
</canvas>
|
||||||
|
|
||||||
<.live_component
|
<.live_component
|
||||||
module={CanneryWeb.Components.TableComponent}
|
module={CanneryWeb.Components.TableComponent}
|
||||||
id="shot_groups_index_table"
|
id="shot_groups_index_table"
|
||||||
columns={@columns}
|
columns={@columns}
|
||||||
rows={@rows}
|
rows={@rows}
|
||||||
|
initial_key={:date}
|
||||||
|
initial_sort_mode={:desc}
|
||||||
/>
|
/>
|
||||||
<% end %>
|
<% end %>
|
||||||
</div>
|
</div>
|
||||||
|
@ -58,7 +58,7 @@ defmodule CanneryWeb.TagLive.FormComponent do
|
|||||||
<%= @title %>
|
<%= @title %>
|
||||||
</h2>
|
</h2>
|
||||||
<.form
|
<.form
|
||||||
let={f}
|
:let={f}
|
||||||
for={@changeset}
|
for={@changeset}
|
||||||
id="tag-form"
|
id="tag-form"
|
||||||
class="flex flex-col space-y-4 sm:space-y-0 sm:grid sm:grid-cols-3 sm:gap-4 justify-center items-center"
|
class="flex flex-col space-y-4 sm:space-y-0 sm:grid sm:grid-cols-3 sm:gap-4 justify-center items-center"
|
||||||
@ -106,7 +106,7 @@ defmodule CanneryWeb.TagLive.FormComponent do
|
|||||||
case Tags.update_tag(tag, tag_params, current_user) do
|
case Tags.update_tag(tag, tag_params, current_user) do
|
||||||
{:ok, %{name: tag_name}} ->
|
{:ok, %{name: tag_name}} ->
|
||||||
prompt = dgettext("prompts", "%{name} updated successfully", name: tag_name)
|
prompt = dgettext("prompts", "%{name} updated successfully", name: tag_name)
|
||||||
socket |> put_flash(:info, prompt) |> push_redirect(to: return_to)
|
socket |> put_flash(:info, prompt) |> push_navigate(to: return_to)
|
||||||
|
|
||||||
{:error, %Changeset{} = changeset} ->
|
{:error, %Changeset{} = changeset} ->
|
||||||
socket |> assign(:changeset, changeset)
|
socket |> assign(:changeset, changeset)
|
||||||
@ -124,7 +124,7 @@ defmodule CanneryWeb.TagLive.FormComponent do
|
|||||||
case Tags.create_tag(tag_params, current_user) do
|
case Tags.create_tag(tag_params, current_user) do
|
||||||
{:ok, %{name: tag_name}} ->
|
{:ok, %{name: tag_name}} ->
|
||||||
prompt = dgettext("prompts", "%{name} created successfully", name: tag_name)
|
prompt = dgettext("prompts", "%{name} created successfully", name: tag_name)
|
||||||
socket |> put_flash(:info, prompt) |> push_redirect(to: return_to)
|
socket |> put_flash(:info, prompt) |> push_navigate(to: return_to)
|
||||||
|
|
||||||
{:error, %Changeset{} = changeset} ->
|
{:error, %Changeset{} = changeset} ->
|
||||||
socket |> assign(changeset: changeset)
|
socket |> assign(changeset: changeset)
|
||||||
|
@ -6,7 +6,7 @@ defmodule CanneryWeb.TagLive.Index do
|
|||||||
use CanneryWeb, :live_view
|
use CanneryWeb, :live_view
|
||||||
import CanneryWeb.Components.TagCard
|
import CanneryWeb.Components.TagCard
|
||||||
alias Cannery.{Tags, Tags.Tag}
|
alias Cannery.{Tags, Tags.Tag}
|
||||||
alias CanneryWeb.Endpoint
|
alias CanneryWeb.{Endpoint, ViewHelpers}
|
||||||
|
|
||||||
@impl true
|
@impl true
|
||||||
def mount(_params, _session, socket), do: {:ok, socket |> display_tags()}
|
def mount(_params, _session, socket), do: {:ok, socket |> display_tags()}
|
||||||
@ -25,7 +25,7 @@ defmodule CanneryWeb.TagLive.Index do
|
|||||||
defp apply_action(socket, :new, _params) do
|
defp apply_action(socket, :new, _params) do
|
||||||
socket
|
socket
|
||||||
|> assign(:page_title, gettext("New Tag"))
|
|> assign(:page_title, gettext("New Tag"))
|
||||||
|> assign(:tag, %Tag{bg_color: Tags.random_bg_color(), text_color: "#ffffff"})
|
|> assign(:tag, %Tag{bg_color: ViewHelpers.random_color(), text_color: "#ffffff"})
|
||||||
end
|
end
|
||||||
|
|
||||||
defp apply_action(socket, :index, _params) do
|
defp apply_action(socket, :index, _params) do
|
||||||
|
@ -11,35 +11,37 @@
|
|||||||
<%= display_emoji("😔") %>
|
<%= display_emoji("😔") %>
|
||||||
</h2>
|
</h2>
|
||||||
|
|
||||||
<%= live_patch(dgettext("actions", "Make your first tag!"),
|
<.link patch={Routes.tag_index_path(Endpoint, :new)} class="btn btn-primary">
|
||||||
to: Routes.tag_index_path(Endpoint, :new),
|
<%= dgettext("actions", "Make your first tag!") %>
|
||||||
class: "btn btn-primary"
|
</.link>
|
||||||
) %>
|
|
||||||
<% else %>
|
<% else %>
|
||||||
<%= live_patch(dgettext("actions", "New Tag"),
|
<.link patch={Routes.tag_index_path(Endpoint, :new)} class="btn btn-primary">
|
||||||
to: Routes.tag_index_path(Endpoint, :new),
|
<%= dgettext("actions", "New Tag") %>
|
||||||
class: "btn btn-primary"
|
</.link>
|
||||||
) %>
|
|
||||||
<% end %>
|
<% end %>
|
||||||
<div class="flex flex-row flex-wrap justify-center items-center">
|
<div class="flex flex-row flex-wrap justify-center items-center">
|
||||||
<%= for tag <- @tags do %>
|
<%= for tag <- @tags do %>
|
||||||
<.tag_card tag={tag}>
|
<.tag_card tag={tag}>
|
||||||
<%= live_patch to: Routes.tag_index_path(Endpoint, :edit, tag),
|
<.link
|
||||||
class: "text-primary-600 link",
|
patch={Routes.tag_index_path(Endpoint, :edit, tag)}
|
||||||
data: [qa: "edit-#{tag.id}"] do %>
|
class="text-primary-600 link"
|
||||||
|
data-qa={"edit-#{tag.id}"}
|
||||||
|
>
|
||||||
<i class="fa-fw fa-lg fas fa-edit"></i>
|
<i class="fa-fw fa-lg fas fa-edit"></i>
|
||||||
<% end %>
|
</.link>
|
||||||
|
|
||||||
<%= link to: "#",
|
<.link
|
||||||
class: "text-primary-600 link",
|
href="#"
|
||||||
phx_click: "delete",
|
class="text-primary-600 link"
|
||||||
phx_value_id: tag.id,
|
phx-click="delete"
|
||||||
data: [
|
phx-value-id={tag.id}
|
||||||
confirm: dgettext("prompts", "Are you sure you want to delete %{name}?", name: tag.name),
|
data-confirm={
|
||||||
qa: "delete-#{tag.id}"
|
dgettext("prompts", "Are you sure you want to delete %{name}?", name: tag.name)
|
||||||
] do %>
|
}
|
||||||
|
data-qa={"delete-#{tag.id}"}
|
||||||
|
>
|
||||||
<i class="fa-fw fa-lg fas fa-trash"></i>
|
<i class="fa-fw fa-lg fas fa-trash"></i>
|
||||||
<% end %>
|
</.link>
|
||||||
</.tag_card>
|
</.tag_card>
|
||||||
<% end %>
|
<% end %>
|
||||||
</div>
|
</div>
|
||||||
|
@ -11,7 +11,7 @@ defmodule CanneryWeb.Router do
|
|||||||
plug :protect_from_forgery
|
plug :protect_from_forgery
|
||||||
plug :put_secure_browser_headers
|
plug :put_secure_browser_headers
|
||||||
plug :fetch_current_user
|
plug :fetch_current_user
|
||||||
plug :put_user_locale, default: Application.get_env(:gettext, :default_locale, "en_US")
|
plug :put_user_locale, default: Application.compile_env(:gettext, :default_locale, "en_US")
|
||||||
end
|
end
|
||||||
|
|
||||||
defp put_user_locale(%{assigns: %{current_user: %{locale: locale}}} = conn, default: default) do
|
defp put_user_locale(%{assigns: %{current_user: %{locale: locale}}} = conn, default: default) do
|
||||||
@ -60,6 +60,7 @@ defmodule CanneryWeb.Router do
|
|||||||
put "/users/settings", UserSettingsController, :update
|
put "/users/settings", UserSettingsController, :update
|
||||||
delete "/users/settings/:id", UserSettingsController, :delete
|
delete "/users/settings/:id", UserSettingsController, :delete
|
||||||
get "/users/settings/confirm_email/:token", UserSettingsController, :confirm_email
|
get "/users/settings/confirm_email/:token", UserSettingsController, :confirm_email
|
||||||
|
get "/export/:mode", ExportController, :export
|
||||||
|
|
||||||
live "/tags", TagLive.Index, :index
|
live "/tags", TagLive.Index, :index
|
||||||
live "/tags/new", TagLive.Index, :new
|
live "/tags/new", TagLive.Index, :new
|
||||||
@ -67,14 +68,17 @@ defmodule CanneryWeb.Router do
|
|||||||
|
|
||||||
live "/catalog", AmmoTypeLive.Index, :index
|
live "/catalog", AmmoTypeLive.Index, :index
|
||||||
live "/catalog/new", AmmoTypeLive.Index, :new
|
live "/catalog/new", AmmoTypeLive.Index, :new
|
||||||
|
live "/catalog/:id/clone", AmmoTypeLive.Index, :clone
|
||||||
live "/catalog/:id/edit", AmmoTypeLive.Index, :edit
|
live "/catalog/:id/edit", AmmoTypeLive.Index, :edit
|
||||||
|
|
||||||
live "/catalog/:id", AmmoTypeLive.Show, :show
|
live "/catalog/:id", AmmoTypeLive.Show, :show
|
||||||
live "/catalog/: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/table", ContainerLive.Index, :table
|
||||||
live "/containers/new", ContainerLive.Index, :new
|
live "/containers/new", ContainerLive.Index, :new
|
||||||
live "/containers/:id/edit", ContainerLive.Index, :edit
|
live "/containers/:id/edit", ContainerLive.Index, :edit
|
||||||
|
live "/containers/:id/clone", ContainerLive.Index, :clone
|
||||||
live "/containers/:id/edit_tags", ContainerLive.Index, :edit_tags
|
live "/containers/:id/edit_tags", ContainerLive.Index, :edit_tags
|
||||||
|
|
||||||
live "/containers/:id", ContainerLive.Show, :show
|
live "/containers/:id", ContainerLive.Show, :show
|
||||||
@ -84,6 +88,7 @@ defmodule CanneryWeb.Router do
|
|||||||
live "/ammo", AmmoGroupLive.Index, :index
|
live "/ammo", AmmoGroupLive.Index, :index
|
||||||
live "/ammo/new", AmmoGroupLive.Index, :new
|
live "/ammo/new", AmmoGroupLive.Index, :new
|
||||||
live "/ammo/:id/edit", AmmoGroupLive.Index, :edit
|
live "/ammo/:id/edit", AmmoGroupLive.Index, :edit
|
||||||
|
live "/ammo/:id/clone", AmmoGroupLive.Index, :clone
|
||||||
live "/ammo/:id/add_shot_group", AmmoGroupLive.Index, :add_shot_group
|
live "/ammo/:id/add_shot_group", AmmoGroupLive.Index, :add_shot_group
|
||||||
live "/ammo/:id/move", AmmoGroupLive.Index, :move
|
live "/ammo/:id/move", AmmoGroupLive.Index, :move
|
||||||
|
|
||||||
|
@ -10,8 +10,9 @@
|
|||||||
type="image/jpg"
|
type="image/jpg"
|
||||||
href={Routes.static_path(@conn, "/images/cannery.svg")}
|
href={Routes.static_path(@conn, "/images/cannery.svg")}
|
||||||
/>
|
/>
|
||||||
<%= if(assigns |> Map.has_key?(:page_title), do: @page_title, else: "Cannery")
|
<.live_title suffix=" | Cannery">
|
||||||
|> live_title_tag(suffix: " | Cannery") %>
|
<%= assigns[:page_title] || "Cannery" %>
|
||||||
|
</.live_title>
|
||||||
<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")} />
|
||||||
<script
|
<script
|
||||||
defer
|
defer
|
||||||
|
@ -22,14 +22,12 @@
|
|||||||
|
|
||||||
<div class="flex flex-row justify-center items-center space-x-4">
|
<div class="flex flex-row justify-center items-center space-x-4">
|
||||||
<%= if Accounts.allow_registration?() do %>
|
<%= if Accounts.allow_registration?() do %>
|
||||||
<%= link(dgettext("actions", "Register"),
|
<.link href={Routes.user_registration_path(@conn, :new)} class="btn btn-primary">
|
||||||
to: Routes.user_registration_path(@conn, :new),
|
<%= dgettext("actions", "Register") %>
|
||||||
class: "btn btn-primary"
|
</.link>
|
||||||
) %>
|
|
||||||
<% end %>
|
<% end %>
|
||||||
<%= link(dgettext("actions", "Log in"),
|
<.link href={Routes.user_session_path(@conn, :new)} class="btn btn-primary">
|
||||||
to: Routes.user_session_path(@conn, :new),
|
<%= dgettext("actions", "Log in") %>
|
||||||
class: "btn btn-primary"
|
</.link>
|
||||||
) %>
|
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
@ -45,13 +45,11 @@
|
|||||||
<hr class="hr" />
|
<hr class="hr" />
|
||||||
|
|
||||||
<div class="flex flex-row justify-center items-center space-x-4">
|
<div class="flex flex-row justify-center items-center space-x-4">
|
||||||
<%= link(dgettext("actions", "Log in"),
|
<.link href={Routes.user_session_path(@conn, :new)} class="btn btn-primary">
|
||||||
to: Routes.user_session_path(@conn, :new),
|
<%= dgettext("actions", "Log in") %>
|
||||||
class: "btn btn-primary"
|
</.link>
|
||||||
) %>
|
<.link href={Routes.user_reset_password_path(@conn, :new)} class="btn btn-primary">
|
||||||
<%= link(dgettext("actions", "Forgot your password?"),
|
<%= dgettext("actions", "Forgot your password?") %>
|
||||||
to: Routes.user_reset_password_path(@conn, :new),
|
</.link>
|
||||||
class: "btn btn-primary"
|
|
||||||
) %>
|
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
@ -40,14 +40,12 @@
|
|||||||
|
|
||||||
<div class="flex flex-row justify-center items-center space-x-4">
|
<div class="flex flex-row justify-center items-center space-x-4">
|
||||||
<%= if Accounts.allow_registration?() do %>
|
<%= if Accounts.allow_registration?() do %>
|
||||||
<%= link(dgettext("actions", "Register"),
|
<.link href={Routes.user_registration_path(@conn, :new)} class="btn btn-primary">
|
||||||
to: Routes.user_registration_path(@conn, :new),
|
<%= dgettext("actions", "Register") %>
|
||||||
class: "btn btn-primary"
|
</.link>
|
||||||
) %>
|
|
||||||
<% end %>
|
<% end %>
|
||||||
<%= link(dgettext("actions", "Log in"),
|
<.link href={Routes.user_session_path(@conn, :new)} class="btn btn-primary">
|
||||||
to: Routes.user_session_path(@conn, :new),
|
<%= dgettext("actions", "Log in") %>
|
||||||
class: "btn btn-primary"
|
</.link>
|
||||||
) %>
|
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
@ -22,14 +22,12 @@
|
|||||||
|
|
||||||
<div class="flex flex-row justify-center items-center space-x-4">
|
<div class="flex flex-row justify-center items-center space-x-4">
|
||||||
<%= if Accounts.allow_registration?() do %>
|
<%= if Accounts.allow_registration?() do %>
|
||||||
<%= link(dgettext("actions", "Register"),
|
<.link href={Routes.user_registration_path(@conn, :new)} class="btn btn-primary">
|
||||||
to: Routes.user_registration_path(@conn, :new),
|
<%= dgettext("actions", "Register") %>
|
||||||
class: "btn btn-primary"
|
</.link>
|
||||||
) %>
|
|
||||||
<% end %>
|
<% end %>
|
||||||
<%= link(dgettext("actions", "Log in"),
|
<.link href={Routes.user_session_path(@conn, :new)} class="btn btn-primary">
|
||||||
to: Routes.user_session_path(@conn, :new),
|
<%= dgettext("actions", "Log in") %>
|
||||||
class: "btn btn-primary"
|
</.link>
|
||||||
) %>
|
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
@ -37,14 +37,12 @@
|
|||||||
|
|
||||||
<div class="flex flex-row justify-center items-center space-x-4">
|
<div class="flex flex-row justify-center items-center space-x-4">
|
||||||
<%= if Accounts.allow_registration?() do %>
|
<%= if Accounts.allow_registration?() do %>
|
||||||
<%= link(dgettext("actions", "Register"),
|
<.link href={Routes.user_registration_path(@conn, :new)} class="btn btn-primary">
|
||||||
to: Routes.user_registration_path(@conn, :new),
|
<%= dgettext("actions", "Register") %>
|
||||||
class: "btn btn-primary"
|
</.link>
|
||||||
) %>
|
|
||||||
<% end %>
|
<% end %>
|
||||||
<%= link(dgettext("actions", "Forgot your password?"),
|
<.link href={Routes.user_reset_password_path(@conn, :new)} class="btn btn-primary">
|
||||||
to: Routes.user_reset_password_path(@conn, :new),
|
<%= dgettext("actions", "Forgot your password?") %>
|
||||||
class: "btn btn-primary"
|
</.link>
|
||||||
) %>
|
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
@ -6,7 +6,7 @@
|
|||||||
<hr class="hr" />
|
<hr class="hr" />
|
||||||
|
|
||||||
<.form
|
<.form
|
||||||
let={f}
|
:let={f}
|
||||||
for={@email_changeset}
|
for={@email_changeset}
|
||||||
action={Routes.user_settings_path(@conn, :update)}
|
action={Routes.user_settings_path(@conn, :update)}
|
||||||
class="flex flex-col space-y-4 sm:space-y-0 sm:grid sm:grid-cols-3 sm:gap-4 justify-center items-center"
|
class="flex flex-col space-y-4 sm:space-y-0 sm:grid sm:grid-cols-3 sm:gap-4 justify-center items-center"
|
||||||
@ -49,7 +49,7 @@
|
|||||||
<hr class="hr" />
|
<hr class="hr" />
|
||||||
|
|
||||||
<.form
|
<.form
|
||||||
let={f}
|
:let={f}
|
||||||
for={@password_changeset}
|
for={@password_changeset}
|
||||||
action={Routes.user_settings_path(@conn, :update)}
|
action={Routes.user_settings_path(@conn, :update)}
|
||||||
class="flex flex-col space-y-4 sm:space-y-0 sm:grid sm:grid-cols-3 sm:gap-4 justify-center items-center"
|
class="flex flex-col space-y-4 sm:space-y-0 sm:grid sm:grid-cols-3 sm:gap-4 justify-center items-center"
|
||||||
@ -104,7 +104,7 @@
|
|||||||
<hr class="hr" />
|
<hr class="hr" />
|
||||||
|
|
||||||
<.form
|
<.form
|
||||||
let={f}
|
:let={f}
|
||||||
for={@locale_changeset}
|
for={@locale_changeset}
|
||||||
action={Routes.user_settings_path(@conn, :update)}
|
action={Routes.user_settings_path(@conn, :update)}
|
||||||
class="flex flex-col space-y-4 justify-center items-center"
|
class="flex flex-col space-y-4 justify-center items-center"
|
||||||
@ -139,10 +139,22 @@
|
|||||||
|
|
||||||
<hr class="hr" />
|
<hr class="hr" />
|
||||||
|
|
||||||
<%= link(dgettext("actions", "Delete User"),
|
<div class="flex justify-center items-center">
|
||||||
to: Routes.user_settings_path(@conn, :delete, @current_user),
|
<.link
|
||||||
method: :delete,
|
href={Routes.export_path(@conn, :export, :json)}
|
||||||
class: "btn btn-alert",
|
class="mx-4 my-2 btn btn-primary"
|
||||||
data: [confirm: dgettext("prompts", "Are you sure you want to delete your account?")]
|
target="_blank"
|
||||||
) %>
|
>
|
||||||
|
<%= dgettext("actions", "Export Data as JSON") %>
|
||||||
|
</.link>
|
||||||
|
|
||||||
|
<.link
|
||||||
|
href={Routes.user_settings_path(@conn, :delete, @current_user)}
|
||||||
|
method={:delete}
|
||||||
|
class="mx-4 my-2 btn btn-alert"
|
||||||
|
data-confirm={dgettext("prompts", "Are you sure you want to delete your account?")}
|
||||||
|
>
|
||||||
|
<%= dgettext("actions", "Delete User") %>
|
||||||
|
</.link>
|
||||||
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
@ -4,7 +4,7 @@ defmodule CanneryWeb.ErrorHelpers do
|
|||||||
"""
|
"""
|
||||||
|
|
||||||
use Phoenix.HTML
|
use Phoenix.HTML
|
||||||
import Phoenix.LiveView.Helpers
|
import Phoenix.Component
|
||||||
alias Ecto.Changeset
|
alias Ecto.Changeset
|
||||||
alias Phoenix.{HTML.Form, LiveView.Rendered}
|
alias Phoenix.{HTML.Form, LiveView.Rendered}
|
||||||
|
|
||||||
|
@ -5,8 +5,7 @@ defmodule CanneryWeb.ViewHelpers do
|
|||||||
:view`
|
:view`
|
||||||
"""
|
"""
|
||||||
|
|
||||||
import Phoenix.LiveView
|
import Phoenix.Component
|
||||||
import Phoenix.LiveView.Helpers
|
|
||||||
|
|
||||||
@id_length 16
|
@id_length 16
|
||||||
|
|
||||||
@ -24,11 +23,16 @@ defmodule CanneryWeb.ViewHelpers do
|
|||||||
}
|
}
|
||||||
|
|
||||||
~H"""
|
~H"""
|
||||||
<time id={@id} datetime={@datetime} x-data={"{
|
<time
|
||||||
|
id={@id}
|
||||||
|
datetime={@datetime}
|
||||||
|
x-data={"{
|
||||||
date:
|
date:
|
||||||
Intl.DateTimeFormat([], {dateStyle: 'short', timeStyle: 'long'})
|
Intl.DateTimeFormat([], {dateStyle: 'short', timeStyle: 'long'})
|
||||||
.format(new Date(\"#{@datetime}\"))
|
.format(new Date(\"#{@datetime}\"))
|
||||||
}"} x-text="date">
|
}"}
|
||||||
|
x-text="date"
|
||||||
|
>
|
||||||
<%= @datetime %>
|
<%= @datetime %>
|
||||||
</time>
|
</time>
|
||||||
"""
|
"""
|
||||||
@ -48,10 +52,15 @@ defmodule CanneryWeb.ViewHelpers do
|
|||||||
}
|
}
|
||||||
|
|
||||||
~H"""
|
~H"""
|
||||||
<time id={@id} datetime={@date} x-data={"{
|
<time
|
||||||
|
id={@id}
|
||||||
|
datetime={@date}
|
||||||
|
x-data={"{
|
||||||
date:
|
date:
|
||||||
Intl.DateTimeFormat([], {timeZone: 'Etc/UTC', dateStyle: 'short'}).format(new Date(\"#{@date}\"))
|
Intl.DateTimeFormat([], {timeZone: 'Etc/UTC', dateStyle: 'short'}).format(new Date(\"#{@date}\"))
|
||||||
}"} x-text="date">
|
}"}
|
||||||
|
x-text="date"
|
||||||
|
>
|
||||||
<%= @date %>
|
<%= @date %>
|
||||||
</time>
|
</time>
|
||||||
"""
|
"""
|
||||||
@ -86,11 +95,12 @@ defmodule CanneryWeb.ViewHelpers do
|
|||||||
~H"""
|
~H"""
|
||||||
<label for={@id} class="inline-flex relative items-center cursor-pointer">
|
<label for={@id} class="inline-flex relative items-center cursor-pointer">
|
||||||
<input
|
<input
|
||||||
|
id={@id}
|
||||||
type="checkbox"
|
type="checkbox"
|
||||||
value={@value}
|
value={@value}
|
||||||
checked={@value}
|
checked={@value}
|
||||||
id={@id}
|
|
||||||
class="sr-only peer"
|
class="sr-only peer"
|
||||||
|
data-qa={@id}
|
||||||
{
|
{
|
||||||
if assigns |> Map.has_key?(:target),
|
if assigns |> Map.has_key?(:target),
|
||||||
do: %{"phx-click" => @action, "phx-value-value" => @value, "phx-target" => @target},
|
do: %{"phx-click" => @action, "phx-value-value" => @value, "phx-target" => @target},
|
||||||
@ -105,4 +115,18 @@ defmodule CanneryWeb.ViewHelpers do
|
|||||||
</label>
|
</label>
|
||||||
"""
|
"""
|
||||||
end
|
end
|
||||||
|
|
||||||
|
@doc """
|
||||||
|
Get a random color in `#ffffff` hex format
|
||||||
|
|
||||||
|
## Examples
|
||||||
|
|
||||||
|
iex> random_color()
|
||||||
|
"#cc0066"
|
||||||
|
"""
|
||||||
|
@spec random_color() :: <<_::7>>
|
||||||
|
def random_color do
|
||||||
|
["#cc0066", "#ff6699", "#6666ff", "#0066cc", "#00cc66", "#669900", "#ff9900", "#996633"]
|
||||||
|
|> Enum.random()
|
||||||
|
end
|
||||||
end
|
end
|
||||||
|
16
mix.exs
16
mix.exs
@ -4,16 +4,16 @@ defmodule Cannery.MixProject do
|
|||||||
def project do
|
def project do
|
||||||
[
|
[
|
||||||
app: :cannery,
|
app: :cannery,
|
||||||
version: "0.5.5",
|
version: "0.6.0",
|
||||||
elixir: "1.13.4",
|
elixir: "1.14.1",
|
||||||
elixirc_paths: elixirc_paths(Mix.env()),
|
elixirc_paths: elixirc_paths(Mix.env()),
|
||||||
compilers: [:gettext] ++ Mix.compilers(),
|
compilers: Mix.compilers(),
|
||||||
start_permanent: Mix.env() == :prod,
|
start_permanent: Mix.env() == :prod,
|
||||||
aliases: aliases(),
|
aliases: aliases(),
|
||||||
deps: deps(),
|
deps: deps(),
|
||||||
dialyzer: [plt_add_apps: [:ex_unit]],
|
dialyzer: [plt_add_apps: [:ex_unit]],
|
||||||
consolidate_protocols: Mix.env() not in [:dev, :test],
|
consolidate_protocols: Mix.env() not in [:dev, :test],
|
||||||
preferred_cli_env: [test: :test],
|
preferred_cli_env: [test: :test, "test.all": :test],
|
||||||
# ExDoc
|
# ExDoc
|
||||||
name: "Cannery",
|
name: "Cannery",
|
||||||
source_url: "https://gitea.bubbletea.dev/shibao/cannery",
|
source_url: "https://gitea.bubbletea.dev/shibao/cannery",
|
||||||
@ -48,11 +48,11 @@ defmodule Cannery.MixProject do
|
|||||||
defp deps do
|
defp deps do
|
||||||
[
|
[
|
||||||
{:bcrypt_elixir, "~> 2.0"},
|
{:bcrypt_elixir, "~> 2.0"},
|
||||||
{:phoenix, "~> 1.6"},
|
{:phoenix, "~> 1.6.0"},
|
||||||
{:phoenix_ecto, "~> 4.4"},
|
{:phoenix_ecto, "~> 4.4"},
|
||||||
{:phoenix_html, "~> 3.0"},
|
{:phoenix_html, "~> 3.0"},
|
||||||
{:phoenix_live_reload, "~> 1.2", only: :dev},
|
{:phoenix_live_reload, "~> 1.2", only: :dev},
|
||||||
{:phoenix_live_view, "~> 0.17"},
|
{:phoenix_live_view, "~> 0.18.0"},
|
||||||
{:phoenix_view, "~> 1.1"},
|
{:phoenix_view, "~> 1.1"},
|
||||||
{:phoenix_live_dashboard, "~> 0.6"},
|
{:phoenix_live_dashboard, "~> 0.6"},
|
||||||
{:ecto_sql, "~> 3.6"},
|
{:ecto_sql, "~> 3.6"},
|
||||||
@ -86,13 +86,13 @@ defmodule Cannery.MixProject do
|
|||||||
setup: ["deps.get", "compile", "ecto.setup", "cmd npm install --prefix assets"],
|
setup: ["deps.get", "compile", "ecto.setup", "cmd npm install --prefix assets"],
|
||||||
"ecto.setup": ["ecto.create", "ecto.migrate", "run priv/repo/seeds.exs"],
|
"ecto.setup": ["ecto.create", "ecto.migrate", "run priv/repo/seeds.exs"],
|
||||||
"ecto.reset": ["ecto.drop", "ecto.setup"],
|
"ecto.reset": ["ecto.drop", "ecto.setup"],
|
||||||
format: [
|
"format.all": [
|
||||||
"cmd npm run format --prefix assets",
|
"cmd npm run format --prefix assets",
|
||||||
"format",
|
"format",
|
||||||
"gettext.extract --merge",
|
"gettext.extract --merge",
|
||||||
"gettext.merge --no-fuzzy priv/gettext"
|
"gettext.merge --no-fuzzy priv/gettext"
|
||||||
],
|
],
|
||||||
test: [
|
"test.all": [
|
||||||
"cmd npm run test --prefix assets",
|
"cmd npm run test --prefix assets",
|
||||||
"dialyzer",
|
"dialyzer",
|
||||||
"credo --strict",
|
"credo --strict",
|
||||||
|
46
mix.lock
46
mix.lock
@ -1,54 +1,54 @@
|
|||||||
%{
|
%{
|
||||||
"bcrypt_elixir": {:hex, :bcrypt_elixir, "2.3.1", "5114d780459a04f2b4aeef52307de23de961b69e13a5cd98a911e39fda13f420", [:make, :mix], [{:comeonin, "~> 5.3", [hex: :comeonin, repo: "hexpm", optional: false]}, {:elixir_make, "~> 0.6", [hex: :elixir_make, repo: "hexpm", optional: false]}], "hexpm", "42182d5f46764def15bf9af83739e3bf4ad22661b1c34fc3e88558efced07279"},
|
"bcrypt_elixir": {:hex, :bcrypt_elixir, "2.3.1", "5114d780459a04f2b4aeef52307de23de961b69e13a5cd98a911e39fda13f420", [:make, :mix], [{:comeonin, "~> 5.3", [hex: :comeonin, repo: "hexpm", optional: false]}, {:elixir_make, "~> 0.6", [hex: :elixir_make, repo: "hexpm", optional: false]}], "hexpm", "42182d5f46764def15bf9af83739e3bf4ad22661b1c34fc3e88558efced07279"},
|
||||||
"bunt": {:hex, :bunt, "0.2.0", "951c6e801e8b1d2cbe58ebbd3e616a869061ddadcc4863d0a2182541acae9a38", [:mix], [], "hexpm", "7af5c7e09fe1d40f76c8e4f9dd2be7cebd83909f31fee7cd0e9eadc567da8353"},
|
"bunt": {:hex, :bunt, "0.2.1", "e2d4792f7bc0ced7583ab54922808919518d0e57ee162901a16a1b6664ef3b14", [:mix], [], "hexpm", "a330bfb4245239787b15005e66ae6845c9cd524a288f0d141c148b02603777a5"},
|
||||||
"castore": {:hex, :castore, "0.1.14", "3f6d7c7c1574c402fef29559d3f1a7389ba3524bc6a090a5e9e6abc3af65dcca", [:mix], [], "hexpm", "b34af542eadb727e6c8b37fdf73e18b2e02eb483a4ea0b52fd500bc23f052b7b"},
|
"castore": {:hex, :castore, "0.1.18", "deb5b9ab02400561b6f5708f3e7660fc35ca2d51bfc6a940d2f513f89c2975fc", [:mix], [], "hexpm", "61bbaf6452b782ef80b33cdb45701afbcf0a918a45ebe7e73f1130d661e66a06"},
|
||||||
"comeonin": {:hex, :comeonin, "5.3.3", "2c564dac95a35650e9b6acfe6d2952083d8a08e4a89b93a481acb552b325892e", [:mix], [], "hexpm", "3e38c9c2cb080828116597ca8807bb482618a315bfafd98c90bc22a821cc84df"},
|
"comeonin": {:hex, :comeonin, "5.3.3", "2c564dac95a35650e9b6acfe6d2952083d8a08e4a89b93a481acb552b325892e", [:mix], [], "hexpm", "3e38c9c2cb080828116597ca8807bb482618a315bfafd98c90bc22a821cc84df"},
|
||||||
"connection": {:hex, :connection, "1.1.0", "ff2a49c4b75b6fb3e674bfc5536451607270aac754ffd1bdfe175abe4a6d7a68", [:mix], [], "hexpm", "722c1eb0a418fbe91ba7bd59a47e28008a189d47e37e0e7bb85585a016b2869c"},
|
"connection": {:hex, :connection, "1.1.0", "ff2a49c4b75b6fb3e674bfc5536451607270aac754ffd1bdfe175abe4a6d7a68", [:mix], [], "hexpm", "722c1eb0a418fbe91ba7bd59a47e28008a189d47e37e0e7bb85585a016b2869c"},
|
||||||
"cowboy": {:hex, :cowboy, "2.9.0", "865dd8b6607e14cf03282e10e934023a1bd8be6f6bacf921a7e2a96d800cd452", [:make, :rebar3], [{:cowlib, "2.11.0", [hex: :cowlib, repo: "hexpm", optional: false]}, {:ranch, "1.8.0", [hex: :ranch, repo: "hexpm", optional: false]}], "hexpm", "2c729f934b4e1aa149aff882f57c6372c15399a20d54f65c8d67bef583021bde"},
|
"cowboy": {:hex, :cowboy, "2.9.0", "865dd8b6607e14cf03282e10e934023a1bd8be6f6bacf921a7e2a96d800cd452", [:make, :rebar3], [{:cowlib, "2.11.0", [hex: :cowlib, repo: "hexpm", optional: false]}, {:ranch, "1.8.0", [hex: :ranch, repo: "hexpm", optional: false]}], "hexpm", "2c729f934b4e1aa149aff882f57c6372c15399a20d54f65c8d67bef583021bde"},
|
||||||
"cowboy_telemetry": {:hex, :cowboy_telemetry, "0.4.0", "f239f68b588efa7707abce16a84d0d2acf3a0f50571f8bb7f56a15865aae820c", [:rebar3], [{:cowboy, "~> 2.7", [hex: :cowboy, repo: "hexpm", optional: false]}, {:telemetry, "~> 1.0", [hex: :telemetry, repo: "hexpm", optional: false]}], "hexpm", "7d98bac1ee4565d31b62d59f8823dfd8356a169e7fcbb83831b8a5397404c9de"},
|
"cowboy_telemetry": {:hex, :cowboy_telemetry, "0.4.0", "f239f68b588efa7707abce16a84d0d2acf3a0f50571f8bb7f56a15865aae820c", [:rebar3], [{:cowboy, "~> 2.7", [hex: :cowboy, repo: "hexpm", optional: false]}, {:telemetry, "~> 1.0", [hex: :telemetry, repo: "hexpm", optional: false]}], "hexpm", "7d98bac1ee4565d31b62d59f8823dfd8356a169e7fcbb83831b8a5397404c9de"},
|
||||||
"cowlib": {:hex, :cowlib, "2.11.0", "0b9ff9c346629256c42ebe1eeb769a83c6cb771a6ee5960bd110ab0b9b872063", [:make, :rebar3], [], "hexpm", "2b3e9da0b21c4565751a6d4901c20d1b4cc25cbb7fd50d91d2ab6dd287bc86a9"},
|
"cowlib": {:hex, :cowlib, "2.11.0", "0b9ff9c346629256c42ebe1eeb769a83c6cb771a6ee5960bd110ab0b9b872063", [:make, :rebar3], [], "hexpm", "2b3e9da0b21c4565751a6d4901c20d1b4cc25cbb7fd50d91d2ab6dd287bc86a9"},
|
||||||
"credo": {:hex, :credo, "1.6.4", "ddd474afb6e8c240313f3a7b0d025cc3213f0d171879429bf8535d7021d9ad78", [:mix], [{:bunt, "~> 0.2.0", [hex: :bunt, repo: "hexpm", optional: false]}, {:file_system, "~> 0.2.8", [hex: :file_system, repo: "hexpm", optional: false]}, {:jason, "~> 1.0", [hex: :jason, repo: "hexpm", optional: false]}], "hexpm", "c28f910b61e1ff829bffa056ef7293a8db50e87f2c57a9b5c3f57eee124536b7"},
|
"credo": {:hex, :credo, "1.6.7", "323f5734350fd23a456f2688b9430e7d517afb313fbd38671b8a4449798a7854", [:mix], [{:bunt, "~> 0.2.1", [hex: :bunt, repo: "hexpm", optional: false]}, {:file_system, "~> 0.2.8", [hex: :file_system, repo: "hexpm", optional: false]}, {:jason, "~> 1.0", [hex: :jason, repo: "hexpm", optional: false]}], "hexpm", "41e110bfb007f7eda7f897c10bf019ceab9a0b269ce79f015d54b0dcf4fc7dd3"},
|
||||||
"db_connection": {:hex, :db_connection, "2.4.2", "f92e79aff2375299a16bcb069a14ee8615c3414863a6fef93156aee8e86c2ff3", [:mix], [{:connection, "~> 1.0", [hex: :connection, repo: "hexpm", optional: false]}, {:telemetry, "~> 0.4 or ~> 1.0", [hex: :telemetry, repo: "hexpm", optional: false]}], "hexpm", "4fe53ca91b99f55ea249693a0229356a08f4d1a7931d8ffa79289b145fe83668"},
|
"db_connection": {:hex, :db_connection, "2.4.2", "f92e79aff2375299a16bcb069a14ee8615c3414863a6fef93156aee8e86c2ff3", [:mix], [{:connection, "~> 1.0", [hex: :connection, repo: "hexpm", optional: false]}, {:telemetry, "~> 0.4 or ~> 1.0", [hex: :telemetry, repo: "hexpm", optional: false]}], "hexpm", "4fe53ca91b99f55ea249693a0229356a08f4d1a7931d8ffa79289b145fe83668"},
|
||||||
"decimal": {:hex, :decimal, "2.0.0", "a78296e617b0f5dd4c6caf57c714431347912ffb1d0842e998e9792b5642d697", [:mix], [], "hexpm", "34666e9c55dea81013e77d9d87370fe6cb6291d1ef32f46a1600230b1d44f577"},
|
"decimal": {:hex, :decimal, "2.0.0", "a78296e617b0f5dd4c6caf57c714431347912ffb1d0842e998e9792b5642d697", [:mix], [], "hexpm", "34666e9c55dea81013e77d9d87370fe6cb6291d1ef32f46a1600230b1d44f577"},
|
||||||
"dialyxir": {:hex, :dialyxir, "1.1.0", "c5aab0d6e71e5522e77beff7ba9e08f8e02bad90dfbeffae60eaf0cb47e29488", [:mix], [{:erlex, ">= 0.2.6", [hex: :erlex, repo: "hexpm", optional: false]}], "hexpm", "07ea8e49c45f15264ebe6d5b93799d4dd56a44036cf42d0ad9c960bc266c0b9a"},
|
"dialyxir": {:hex, :dialyxir, "1.2.0", "58344b3e87c2e7095304c81a9ae65cb68b613e28340690dfe1a5597fd08dec37", [:mix], [{:erlex, ">= 0.2.6", [hex: :erlex, repo: "hexpm", optional: false]}], "hexpm", "61072136427a851674cab81762be4dbeae7679f85b1272b6d25c3a839aff8463"},
|
||||||
"earmark_parser": {:hex, :earmark_parser, "1.4.25", "2024618731c55ebfcc5439d756852ec4e85978a39d0d58593763924d9a15916f", [:mix], [], "hexpm", "56749c5e1c59447f7b7a23ddb235e4b3defe276afc220a6227237f3efe83f51e"},
|
"earmark_parser": {:hex, :earmark_parser, "1.4.29", "149d50dcb3a93d9f3d6f3ecf18c918fb5a2d3c001b5d3305c926cddfbd33355b", [:mix], [], "hexpm", "4902af1b3eb139016aed210888748db8070b8125c2342ce3dcae4f38dcc63503"},
|
||||||
"ecto": {:hex, :ecto, "3.8.2", "7b9aca632f9da80ffed525354e4de466a66e042abcbc8509b6b600072c8d8ee0", [:mix], [{:decimal, "~> 1.6 or ~> 2.0", [hex: :decimal, repo: "hexpm", optional: false]}, {:jason, "~> 1.0", [hex: :jason, repo: "hexpm", optional: true]}, {:telemetry, "~> 0.4 or ~> 1.0", [hex: :telemetry, repo: "hexpm", optional: false]}], "hexpm", "afe2912cc23f61a6a8466c158331d54e0f427029dd97ca936644bc116d6599b3"},
|
"ecto": {:hex, :ecto, "3.9.1", "67173b1687afeb68ce805ee7420b4261649d5e2deed8fe5550df23bab0bc4396", [:mix], [{:decimal, "~> 1.6 or ~> 2.0", [hex: :decimal, repo: "hexpm", optional: false]}, {:jason, "~> 1.0", [hex: :jason, repo: "hexpm", optional: true]}, {:telemetry, "~> 0.4 or ~> 1.0", [hex: :telemetry, repo: "hexpm", optional: false]}], "hexpm", "c80bb3d736648df790f7f92f81b36c922d9dd3203ca65be4ff01d067f54eb304"},
|
||||||
"ecto_psql_extras": {:hex, :ecto_psql_extras, "0.7.4", "5d43fd088d39a158c860b17e8d210669587f63ec89ea122a4654861c8c6e2db4", [:mix], [{:ecto_sql, "~> 3.4", [hex: :ecto_sql, repo: "hexpm", optional: false]}, {:postgrex, ">= 0.15.7", [hex: :postgrex, repo: "hexpm", optional: false]}, {:table_rex, "~> 3.1.1", [hex: :table_rex, repo: "hexpm", optional: false]}], "hexpm", "311db02f1b772e3d0dc7f56a05044b5e1499d78ed6abf38885e1ca70059449e5"},
|
"ecto_psql_extras": {:hex, :ecto_psql_extras, "0.7.4", "5d43fd088d39a158c860b17e8d210669587f63ec89ea122a4654861c8c6e2db4", [:mix], [{:ecto_sql, "~> 3.4", [hex: :ecto_sql, repo: "hexpm", optional: false]}, {:postgrex, ">= 0.15.7", [hex: :postgrex, repo: "hexpm", optional: false]}, {:table_rex, "~> 3.1.1", [hex: :table_rex, repo: "hexpm", optional: false]}], "hexpm", "311db02f1b772e3d0dc7f56a05044b5e1499d78ed6abf38885e1ca70059449e5"},
|
||||||
"ecto_sql": {:hex, :ecto_sql, "3.8.1", "1acaaba32ca0551fd19e492fc7c80414e72fc1a7140fc9395aaa53c2e8629798", [:mix], [{:db_connection, "~> 2.5 or ~> 2.4.1", [hex: :db_connection, repo: "hexpm", optional: false]}, {:ecto, "~> 3.8.1", [hex: :ecto, repo: "hexpm", optional: false]}, {:myxql, "~> 0.6.0", [hex: :myxql, repo: "hexpm", optional: true]}, {:postgrex, "~> 0.15.0 or ~> 0.16.0 or ~> 1.0", [hex: :postgrex, repo: "hexpm", optional: true]}, {:tds, "~> 2.1.1 or ~> 2.2", [hex: :tds, repo: "hexpm", optional: true]}, {:telemetry, "~> 0.4.0 or ~> 1.0", [hex: :telemetry, repo: "hexpm", optional: false]}], "hexpm", "ba7fc75882edce6f2ceca047315d5db27ead773cafea47f1724e35f1e7964525"},
|
"ecto_sql": {:hex, :ecto_sql, "3.9.0", "2bb21210a2a13317e098a420a8c1cc58b0c3421ab8e3acfa96417dab7817918c", [:mix], [{:db_connection, "~> 2.5 or ~> 2.4.1", [hex: :db_connection, repo: "hexpm", optional: false]}, {:ecto, "~> 3.9.0", [hex: :ecto, repo: "hexpm", optional: false]}, {:myxql, "~> 0.6.0", [hex: :myxql, repo: "hexpm", optional: true]}, {:postgrex, "~> 0.16.0 or ~> 1.0", [hex: :postgrex, repo: "hexpm", optional: true]}, {:tds, "~> 2.1.1 or ~> 2.2", [hex: :tds, repo: "hexpm", optional: true]}, {:telemetry, "~> 0.4.0 or ~> 1.0", [hex: :telemetry, repo: "hexpm", optional: false]}], "hexpm", "a8f3f720073b8b1ac4c978be25fa7960ed7fd44997420c304a4a2e200b596453"},
|
||||||
"elixir_make": {:hex, :elixir_make, "0.6.3", "bc07d53221216838d79e03a8019d0839786703129599e9619f4ab74c8c096eac", [:mix], [], "hexpm", "f5cbd651c5678bcaabdbb7857658ee106b12509cd976c2c2fca99688e1daf716"},
|
"elixir_make": {:hex, :elixir_make, "0.6.3", "bc07d53221216838d79e03a8019d0839786703129599e9619f4ab74c8c096eac", [:mix], [], "hexpm", "f5cbd651c5678bcaabdbb7857658ee106b12509cd976c2c2fca99688e1daf716"},
|
||||||
"erlex": {:hex, :erlex, "0.2.6", "c7987d15e899c7a2f34f5420d2a2ea0d659682c06ac607572df55a43753aa12e", [:mix], [], "hexpm", "2ed2e25711feb44d52b17d2780eabf998452f6efda104877a3881c2f8c0c0c75"},
|
"erlex": {:hex, :erlex, "0.2.6", "c7987d15e899c7a2f34f5420d2a2ea0d659682c06ac607572df55a43753aa12e", [:mix], [], "hexpm", "2ed2e25711feb44d52b17d2780eabf998452f6efda104877a3881c2f8c0c0c75"},
|
||||||
"esbuild": {:hex, :esbuild, "0.4.0", "9f17db148aead4cf1e6e6a584214357287a93407b5fb51a031f122b61385d4c2", [:mix], [{:castore, ">= 0.0.0", [hex: :castore, repo: "hexpm", optional: false]}], "hexpm", "b61e4e6b92ffe45e4ee4755a22de6211a67c67987dc02afb35a425a0add1d447"},
|
"esbuild": {:hex, :esbuild, "0.4.0", "9f17db148aead4cf1e6e6a584214357287a93407b5fb51a031f122b61385d4c2", [:mix], [{:castore, ">= 0.0.0", [hex: :castore, repo: "hexpm", optional: false]}], "hexpm", "b61e4e6b92ffe45e4ee4755a22de6211a67c67987dc02afb35a425a0add1d447"},
|
||||||
"ex_doc": {:hex, :ex_doc, "0.28.4", "001a0ea6beac2f810f1abc3dbf4b123e9593eaa5f00dd13ded024eae7c523298", [:mix], [{:earmark_parser, "~> 1.4.19", [hex: :earmark_parser, repo: "hexpm", optional: false]}, {:makeup_elixir, "~> 0.14", [hex: :makeup_elixir, repo: "hexpm", optional: false]}, {:makeup_erlang, "~> 0.1", [hex: :makeup_erlang, repo: "hexpm", optional: false]}], "hexpm", "bf85d003dd34911d89c8ddb8bda1a958af3471a274a4c2150a9c01c78ac3f8ed"},
|
"ex_doc": {:hex, :ex_doc, "0.29.0", "4a1cb903ce746aceef9c1f9ae8a6c12b742a5461e6959b9d3b24d813ffbea146", [:mix], [{:earmark_parser, "~> 1.4.19", [hex: :earmark_parser, repo: "hexpm", optional: false]}, {:makeup_elixir, "~> 0.14", [hex: :makeup_elixir, repo: "hexpm", optional: false]}, {:makeup_erlang, "~> 0.1", [hex: :makeup_erlang, repo: "hexpm", optional: false]}], "hexpm", "f096adb8bbca677d35d278223361c7792d496b3fc0d0224c9d4bc2f651af5db1"},
|
||||||
"file_system": {:hex, :file_system, "0.2.10", "fb082005a9cd1711c05b5248710f8826b02d7d1784e7c3451f9c1231d4fc162d", [:mix], [], "hexpm", "41195edbfb562a593726eda3b3e8b103a309b733ad25f3d642ba49696bf715dc"},
|
"file_system": {:hex, :file_system, "0.2.10", "fb082005a9cd1711c05b5248710f8826b02d7d1784e7c3451f9c1231d4fc162d", [:mix], [], "hexpm", "41195edbfb562a593726eda3b3e8b103a309b733ad25f3d642ba49696bf715dc"},
|
||||||
"floki": {:hex, :floki, "0.32.1", "dfe3b8db3b793939c264e6f785bca01753d17318d144bd44b407fb3493acaa87", [:mix], [{:html_entities, "~> 0.5.0", [hex: :html_entities, repo: "hexpm", optional: false]}], "hexpm", "d4b91c713e4a784a3f7b1e3cc016eefc619f6b1c3898464222867cafd3c681a3"},
|
"floki": {:hex, :floki, "0.34.0", "002d0cc194b48794d74711731db004fafeb328fe676976f160685262d43706a8", [:mix], [], "hexpm", "9c3a9f43f40dde00332a589bd9d389b90c1f518aef500364d00636acc5ebc99c"},
|
||||||
"gen_smtp": {:hex, :gen_smtp, "1.2.0", "9cfc75c72a8821588b9b9fe947ae5ab2aed95a052b81237e0928633a13276fd3", [:rebar3], [{:ranch, ">= 1.8.0", [hex: :ranch, repo: "hexpm", optional: false]}], "hexpm", "5ee0375680bca8f20c4d85f58c2894441443a743355430ff33a783fe03296779"},
|
"gen_smtp": {:hex, :gen_smtp, "1.2.0", "9cfc75c72a8821588b9b9fe947ae5ab2aed95a052b81237e0928633a13276fd3", [:rebar3], [{:ranch, ">= 1.8.0", [hex: :ranch, repo: "hexpm", optional: false]}], "hexpm", "5ee0375680bca8f20c4d85f58c2894441443a743355430ff33a783fe03296779"},
|
||||||
"gettext": {:hex, :gettext, "0.19.1", "564953fd21f29358e68b91634799d9d26989f8d039d7512622efb3c3b1c97892", [:mix], [], "hexpm", "10c656c0912b8299adba9b061c06947511e3f109ab0d18b44a866a4498e77222"},
|
"gettext": {:hex, :gettext, "0.20.0", "75ad71de05f2ef56991dbae224d35c68b098dd0e26918def5bb45591d5c8d429", [:mix], [], "hexpm", "1c03b177435e93a47441d7f681a7040bd2a816ece9e2666d1c9001035121eb3d"},
|
||||||
"heex_formatter": {:git, "https://github.com/feliperenan/heex_formatter.git", "dfefc9ae267fb0874c287ceb6c47dda106c59552", []},
|
"heex_formatter": {:git, "https://github.com/feliperenan/heex_formatter.git", "dfefc9ae267fb0874c287ceb6c47dda106c59552", []},
|
||||||
"html_entities": {:hex, :html_entities, "0.5.2", "9e47e70598da7de2a9ff6af8758399251db6dbb7eebe2b013f2bbd2515895c3c", [:mix], [], "hexpm", "c53ba390403485615623b9531e97696f076ed415e8d8058b1dbaa28181f4fdcc"},
|
"html_entities": {:hex, :html_entities, "0.5.2", "9e47e70598da7de2a9ff6af8758399251db6dbb7eebe2b013f2bbd2515895c3c", [:mix], [], "hexpm", "c53ba390403485615623b9531e97696f076ed415e8d8058b1dbaa28181f4fdcc"},
|
||||||
"hut": {:hex, :hut, "1.3.0", "71f2f054e657c03f959cf1acc43f436ea87580696528ca2a55c8afb1b06c85e7", [:"erlang.mk", :rebar, :rebar3], [], "hexpm", "7e15d28555d8a1f2b5a3a931ec120af0753e4853a4c66053db354f35bf9ab563"},
|
"hut": {:hex, :hut, "1.3.0", "71f2f054e657c03f959cf1acc43f436ea87580696528ca2a55c8afb1b06c85e7", [:"erlang.mk", :rebar, :rebar3], [], "hexpm", "7e15d28555d8a1f2b5a3a931ec120af0753e4853a4c66053db354f35bf9ab563"},
|
||||||
"jason": {:hex, :jason, "1.3.0", "fa6b82a934feb176263ad2df0dbd91bf633d4a46ebfdffea0c8ae82953714946", [:mix], [{:decimal, "~> 1.0 or ~> 2.0", [hex: :decimal, repo: "hexpm", optional: true]}], "hexpm", "53fc1f51255390e0ec7e50f9cb41e751c260d065dcba2bf0d08dc51a4002c2ac"},
|
"jason": {:hex, :jason, "1.4.0", "e855647bc964a44e2f67df589ccf49105ae039d4179db7f6271dfd3843dc27e6", [:mix], [{:decimal, "~> 1.0 or ~> 2.0", [hex: :decimal, repo: "hexpm", optional: true]}], "hexpm", "79a3791085b2a0f743ca04cec0f7be26443738779d09302e01318f97bdb82121"},
|
||||||
"makeup": {:hex, :makeup, "1.1.0", "6b67c8bc2882a6b6a445859952a602afc1a41c2e08379ca057c0f525366fc3ca", [:mix], [{:nimble_parsec, "~> 1.2.2 or ~> 1.3", [hex: :nimble_parsec, repo: "hexpm", optional: false]}], "hexpm", "0a45ed501f4a8897f580eabf99a2e5234ea3e75a4373c8a52824f6e873be57a6"},
|
"makeup": {:hex, :makeup, "1.1.0", "6b67c8bc2882a6b6a445859952a602afc1a41c2e08379ca057c0f525366fc3ca", [:mix], [{:nimble_parsec, "~> 1.2.2 or ~> 1.3", [hex: :nimble_parsec, repo: "hexpm", optional: false]}], "hexpm", "0a45ed501f4a8897f580eabf99a2e5234ea3e75a4373c8a52824f6e873be57a6"},
|
||||||
"makeup_elixir": {:hex, :makeup_elixir, "0.16.0", "f8c570a0d33f8039513fbccaf7108c5d750f47d8defd44088371191b76492b0b", [:mix], [{:makeup, "~> 1.0", [hex: :makeup, repo: "hexpm", optional: false]}, {:nimble_parsec, "~> 1.2.3", [hex: :nimble_parsec, repo: "hexpm", optional: false]}], "hexpm", "28b2cbdc13960a46ae9a8858c4bebdec3c9a6d7b4b9e7f4ed1502f8159f338e7"},
|
"makeup_elixir": {:hex, :makeup_elixir, "0.16.0", "f8c570a0d33f8039513fbccaf7108c5d750f47d8defd44088371191b76492b0b", [:mix], [{:makeup, "~> 1.0", [hex: :makeup, repo: "hexpm", optional: false]}, {:nimble_parsec, "~> 1.2.3", [hex: :nimble_parsec, repo: "hexpm", optional: false]}], "hexpm", "28b2cbdc13960a46ae9a8858c4bebdec3c9a6d7b4b9e7f4ed1502f8159f338e7"},
|
||||||
"makeup_erlang": {:hex, :makeup_erlang, "0.1.1", "3fcb7f09eb9d98dc4d208f49cc955a34218fc41ff6b84df7c75b3e6e533cc65f", [:mix], [{:makeup, "~> 1.0", [hex: :makeup, repo: "hexpm", optional: false]}], "hexpm", "174d0809e98a4ef0b3309256cbf97101c6ec01c4ab0b23e926a9e17df2077cbb"},
|
"makeup_erlang": {:hex, :makeup_erlang, "0.1.1", "3fcb7f09eb9d98dc4d208f49cc955a34218fc41ff6b84df7c75b3e6e533cc65f", [:mix], [{:makeup, "~> 1.0", [hex: :makeup, repo: "hexpm", optional: false]}], "hexpm", "174d0809e98a4ef0b3309256cbf97101c6ec01c4ab0b23e926a9e17df2077cbb"},
|
||||||
"mime": {:hex, :mime, "2.0.2", "0b9e1a4c840eafb68d820b0e2158ef5c49385d17fb36855ac6e7e087d4b1dcc5", [:mix], [], "hexpm", "e6a3f76b4c277739e36c2e21a2c640778ba4c3846189d5ab19f97f126df5f9b7"},
|
"mime": {:hex, :mime, "2.0.3", "3676436d3d1f7b81b5a2d2bd8405f412c677558c81b1c92be58c00562bb59095", [:mix], [], "hexpm", "27a30bf0db44d25eecba73755acf4068cbfe26a4372f9eb3e4ea3a45956bff6b"},
|
||||||
"nimble_parsec": {:hex, :nimble_parsec, "1.2.3", "244836e6e3f1200c7f30cb56733fd808744eca61fd182f731eac4af635cc6d0b", [:mix], [], "hexpm", "c8d789e39b9131acf7b99291e93dae60ab48ef14a7ee9d58c6964f59efb570b0"},
|
"nimble_parsec": {:hex, :nimble_parsec, "1.2.3", "244836e6e3f1200c7f30cb56733fd808744eca61fd182f731eac4af635cc6d0b", [:mix], [], "hexpm", "c8d789e39b9131acf7b99291e93dae60ab48ef14a7ee9d58c6964f59efb570b0"},
|
||||||
"oban": {:hex, :oban, "2.12.0", "bd5a283770c6ab1284aad81e5566cfb89f4119b08f52508d92d73551283c8789", [:mix], [{:ecto_sql, "~> 3.6", [hex: :ecto_sql, repo: "hexpm", optional: false]}, {:jason, "~> 1.1", [hex: :jason, repo: "hexpm", optional: false]}, {:postgrex, "~> 0.16", [hex: :postgrex, repo: "hexpm", optional: false]}, {:telemetry, "~> 0.4 or ~> 1.0", [hex: :telemetry, repo: "hexpm", optional: false]}], "hexpm", "1557b7b046b13c0b5360f55a9fb7e56975f6b5f8247e56f2c54575bd95435ca0"},
|
"oban": {:hex, :oban, "2.13.4", "b4c4f48f4c89cc01036670eefa28aa9c03d09aadd402655475b936983d597006", [:mix], [{:ecto_sql, "~> 3.6", [hex: :ecto_sql, repo: "hexpm", optional: false]}, {:jason, "~> 1.1", [hex: :jason, repo: "hexpm", optional: false]}, {:postgrex, "~> 0.16", [hex: :postgrex, repo: "hexpm", optional: false]}, {:telemetry, "~> 0.4 or ~> 1.0", [hex: :telemetry, repo: "hexpm", optional: false]}], "hexpm", "a7d26f82b409e2d7928fbb75a17716e06ad3f783ebe9af260e3dd23abed7f124"},
|
||||||
"phoenix": {:hex, :phoenix, "1.6.8", "9a34e5f4dd3ba959176c199fd5b2277b02e64005462428b71cf6ce9cb5e09cb4", [:mix], [{:jason, "~> 1.0", [hex: :jason, repo: "hexpm", optional: true]}, {:phoenix_pubsub, "~> 2.0", [hex: :phoenix_pubsub, repo: "hexpm", optional: false]}, {:phoenix_view, "~> 1.0", [hex: :phoenix_view, repo: "hexpm", optional: false]}, {:plug, "~> 1.10", [hex: :plug, repo: "hexpm", optional: false]}, {:plug_cowboy, "~> 2.2", [hex: :plug_cowboy, repo: "hexpm", optional: true]}, {:plug_crypto, "~> 1.2", [hex: :plug_crypto, repo: "hexpm", optional: false]}, {:telemetry, "~> 0.4 or ~> 1.0", [hex: :telemetry, repo: "hexpm", optional: false]}], "hexpm", "9f4d616aeb9c5e019bddfc1f9078b8c06f852ffa838e67f925559cc0993e9f71"},
|
"phoenix": {:hex, :phoenix, "1.6.15", "0a1d96bbc10747fd83525370d691953cdb6f3ccbac61aa01b4acb012474b047d", [:mix], [{:castore, ">= 0.0.0", [hex: :castore, repo: "hexpm", optional: false]}, {:jason, "~> 1.0", [hex: :jason, repo: "hexpm", optional: true]}, {:phoenix_pubsub, "~> 2.0", [hex: :phoenix_pubsub, repo: "hexpm", optional: false]}, {:phoenix_view, "~> 1.0 or ~> 2.0", [hex: :phoenix_view, repo: "hexpm", optional: false]}, {:plug, "~> 1.10", [hex: :plug, repo: "hexpm", optional: false]}, {:plug_cowboy, "~> 2.2", [hex: :plug_cowboy, repo: "hexpm", optional: true]}, {:plug_crypto, "~> 1.2", [hex: :plug_crypto, repo: "hexpm", optional: false]}, {:telemetry, "~> 0.4 or ~> 1.0", [hex: :telemetry, repo: "hexpm", optional: false]}], "hexpm", "d70ab9fbf6b394755ea88b644d34d79d8b146e490973151f248cacd122d20672"},
|
||||||
"phoenix_ecto": {:hex, :phoenix_ecto, "4.4.0", "0672ed4e4808b3fbed494dded89958e22fb882de47a97634c0b13e7b0b5f7720", [:mix], [{:ecto, "~> 3.3", [hex: :ecto, repo: "hexpm", optional: false]}, {:phoenix_html, "~> 2.14.2 or ~> 3.0", [hex: :phoenix_html, repo: "hexpm", optional: true]}, {:plug, "~> 1.9", [hex: :plug, repo: "hexpm", optional: false]}], "hexpm", "09864e558ed31ee00bd48fcc1d4fc58ae9678c9e81649075431e69dbabb43cc1"},
|
"phoenix_ecto": {:hex, :phoenix_ecto, "4.4.0", "0672ed4e4808b3fbed494dded89958e22fb882de47a97634c0b13e7b0b5f7720", [:mix], [{:ecto, "~> 3.3", [hex: :ecto, repo: "hexpm", optional: false]}, {:phoenix_html, "~> 2.14.2 or ~> 3.0", [hex: :phoenix_html, repo: "hexpm", optional: true]}, {:plug, "~> 1.9", [hex: :plug, repo: "hexpm", optional: false]}], "hexpm", "09864e558ed31ee00bd48fcc1d4fc58ae9678c9e81649075431e69dbabb43cc1"},
|
||||||
"phoenix_html": {:hex, :phoenix_html, "3.2.0", "1c1219d4b6cb22ac72f12f73dc5fad6c7563104d083f711c3fcd8551a1f4ae11", [:mix], [{:plug, "~> 1.5", [hex: :plug, repo: "hexpm", optional: true]}], "hexpm", "36ec97ba56d25c0136ef1992c37957e4246b649d620958a1f9fa86165f8bc54f"},
|
"phoenix_html": {:hex, :phoenix_html, "3.2.0", "1c1219d4b6cb22ac72f12f73dc5fad6c7563104d083f711c3fcd8551a1f4ae11", [:mix], [{:plug, "~> 1.5", [hex: :plug, repo: "hexpm", optional: true]}], "hexpm", "36ec97ba56d25c0136ef1992c37957e4246b649d620958a1f9fa86165f8bc54f"},
|
||||||
"phoenix_live_dashboard": {:hex, :phoenix_live_dashboard, "0.6.5", "1495bb014be12c9a9252eca04b9af54246f6b5c1e4cd1f30210cd00ec540cf8e", [:mix], [{:ecto, "~> 3.6.2 or ~> 3.7", [hex: :ecto, repo: "hexpm", optional: true]}, {:ecto_mysql_extras, "~> 0.3", [hex: :ecto_mysql_extras, repo: "hexpm", optional: true]}, {:ecto_psql_extras, "~> 0.7", [hex: :ecto_psql_extras, repo: "hexpm", optional: true]}, {:mime, "~> 1.6 or ~> 2.0", [hex: :mime, repo: "hexpm", optional: false]}, {:phoenix_live_view, "~> 0.17.7", [hex: :phoenix_live_view, repo: "hexpm", optional: false]}, {:telemetry_metrics, "~> 0.6.0", [hex: :telemetry_metrics, repo: "hexpm", optional: false]}], "hexpm", "ef4fa50dd78364409039c99cf6f98ab5209b4c5f8796c17f4db118324f0db852"},
|
"phoenix_live_dashboard": {:hex, :phoenix_live_dashboard, "0.7.1", "b0bf8f3348dec4910907a2ad1453e642f6fe4d444376c1c9b26222d63c73cf97", [:mix], [{:ecto, "~> 3.6.2 or ~> 3.7", [hex: :ecto, repo: "hexpm", optional: true]}, {:ecto_mysql_extras, "~> 0.5", [hex: :ecto_mysql_extras, repo: "hexpm", optional: true]}, {:ecto_psql_extras, "~> 0.7", [hex: :ecto_psql_extras, repo: "hexpm", optional: true]}, {:mime, "~> 1.6 or ~> 2.0", [hex: :mime, repo: "hexpm", optional: false]}, {:phoenix_live_view, "~> 0.18.0", [hex: :phoenix_live_view, repo: "hexpm", optional: false]}, {:telemetry_metrics, "~> 0.6 or ~> 1.0", [hex: :telemetry_metrics, repo: "hexpm", optional: false]}], "hexpm", "b6c5d744bf4b40692b1b361d3608bdfd05aeab83e17c7bc217d730f007f31abf"},
|
||||||
"phoenix_live_reload": {:hex, :phoenix_live_reload, "1.3.3", "3a53772a6118d5679bf50fc1670505a290e32a1d195df9e069d8c53ab040c054", [:mix], [{:file_system, "~> 0.2.1 or ~> 0.3", [hex: :file_system, repo: "hexpm", optional: false]}, {:phoenix, "~> 1.4", [hex: :phoenix, repo: "hexpm", optional: false]}], "hexpm", "766796676e5f558dbae5d1bdb066849673e956005e3730dfd5affd7a6da4abac"},
|
"phoenix_live_reload": {:hex, :phoenix_live_reload, "1.4.0", "4fe222c0be55fdc3f9c711e24955fc42a7cd9b7a2f5f406f2580a567c335a573", [:mix], [{:file_system, "~> 0.2.1 or ~> 0.3", [hex: :file_system, repo: "hexpm", optional: false]}, {:phoenix, "~> 1.4", [hex: :phoenix, repo: "hexpm", optional: false]}], "hexpm", "bebf0fc2d2113b61cb5968f585367234b7b4c21d963d691de7b4b2dc6cdaae6f"},
|
||||||
"phoenix_live_view": {:hex, :phoenix_live_view, "0.17.9", "36b5aa812bc3ccd64c9630f6b3234d9ea21105493237e927aae19d0ba758f0db", [:mix], [{:jason, "~> 1.0", [hex: :jason, repo: "hexpm", optional: true]}, {:phoenix, "~> 1.6.0", [hex: :phoenix, repo: "hexpm", optional: false]}, {:phoenix_html, "~> 3.1", [hex: :phoenix_html, repo: "hexpm", optional: false]}, {:telemetry, "~> 0.4.2 or ~> 1.0", [hex: :telemetry, repo: "hexpm", optional: false]}], "hexpm", "f7ebc3e0ba0c5f6b6996ed6c901ddbfdaba59a6d09b569e7cb2f2f7d693b4455"},
|
"phoenix_live_view": {:hex, :phoenix_live_view, "0.18.2", "635cf07de947235deb030cd6b776c71a3b790ab04cebf526aa8c879fe17c7784", [:mix], [{:jason, "~> 1.0", [hex: :jason, repo: "hexpm", optional: true]}, {:phoenix, "~> 1.6 or ~> 1.7", [hex: :phoenix, repo: "hexpm", optional: false]}, {:phoenix_html, "~> 3.1", [hex: :phoenix_html, repo: "hexpm", optional: false]}, {:telemetry, "~> 0.4.2 or ~> 1.0", [hex: :telemetry, repo: "hexpm", optional: false]}], "hexpm", "da287a77327e996cc166e4c440c3ad5ab33ccdb151b91c793209b39ebbce5b75"},
|
||||||
"phoenix_pubsub": {:hex, :phoenix_pubsub, "2.1.1", "ba04e489ef03763bf28a17eb2eaddc2c20c6d217e2150a61e3298b0f4c2012b5", [:mix], [], "hexpm", "81367c6d1eea5878ad726be80808eb5a787a23dee699f96e72b1109c57cdd8d9"},
|
"phoenix_pubsub": {:hex, :phoenix_pubsub, "2.1.1", "ba04e489ef03763bf28a17eb2eaddc2c20c6d217e2150a61e3298b0f4c2012b5", [:mix], [], "hexpm", "81367c6d1eea5878ad726be80808eb5a787a23dee699f96e72b1109c57cdd8d9"},
|
||||||
"phoenix_swoosh": {:hex, :phoenix_swoosh, "1.0.1", "0db6eb6405a6b06cae4fdf4144659b3f4fee4553e2856fe8a53ba12e9fb21a74", [:mix], [{:finch, "~> 0.8", [hex: :finch, repo: "hexpm", optional: true]}, {:hackney, "~> 1.10", [hex: :hackney, repo: "hexpm", optional: true]}, {:phoenix, "~> 1.6", [hex: :phoenix, repo: "hexpm", optional: true]}, {:phoenix_html, "~> 3.0", [hex: :phoenix_html, repo: "hexpm", optional: true]}, {:phoenix_view, "~> 1.0", [hex: :phoenix_view, repo: "hexpm", optional: false]}, {:swoosh, "~> 1.5", [hex: :swoosh, repo: "hexpm", optional: false]}], "hexpm", "e34890004baec08f0fa12bd8c77bf64bfb4156b84a07fb79da9322fa94bc3781"},
|
"phoenix_swoosh": {:hex, :phoenix_swoosh, "1.1.0", "f8e4780705c9f254cc853f7a40e25f7198ba4d91102bcfad2226669b69766b35", [:mix], [{:finch, "~> 0.8", [hex: :finch, repo: "hexpm", optional: true]}, {:hackney, "~> 1.10", [hex: :hackney, repo: "hexpm", optional: true]}, {:phoenix, "~> 1.6", [hex: :phoenix, repo: "hexpm", optional: true]}, {:phoenix_html, "~> 3.0", [hex: :phoenix_html, repo: "hexpm", optional: true]}, {:phoenix_view, "~> 1.0 or ~> 2.0", [hex: :phoenix_view, repo: "hexpm", optional: false]}, {:swoosh, "~> 1.5", [hex: :swoosh, repo: "hexpm", optional: false]}], "hexpm", "aa82f10afd9a4b6080fdf3274dbb9432b25b210d42b4b6b55308f6e59cd87c3d"},
|
||||||
"phoenix_view": {:hex, :phoenix_view, "1.1.2", "1b82764a065fb41051637872c7bd07ed2fdb6f5c3bd89684d4dca6e10115c95a", [:mix], [{:phoenix_html, "~> 2.14.2 or ~> 3.0", [hex: :phoenix_html, repo: "hexpm", optional: true]}], "hexpm", "7ae90ad27b09091266f6adbb61e1d2516a7c3d7062c6789d46a7554ec40f3a56"},
|
"phoenix_view": {:hex, :phoenix_view, "1.1.2", "1b82764a065fb41051637872c7bd07ed2fdb6f5c3bd89684d4dca6e10115c95a", [:mix], [{:phoenix_html, "~> 2.14.2 or ~> 3.0", [hex: :phoenix_html, repo: "hexpm", optional: true]}], "hexpm", "7ae90ad27b09091266f6adbb61e1d2516a7c3d7062c6789d46a7554ec40f3a56"},
|
||||||
"plug": {:hex, :plug, "1.13.6", "187beb6b67c6cec50503e940f0434ea4692b19384d47e5fdfd701e93cadb4cc2", [:mix], [{:mime, "~> 1.0 or ~> 2.0", [hex: :mime, repo: "hexpm", optional: false]}, {:plug_crypto, "~> 1.1.1 or ~> 1.2", [hex: :plug_crypto, repo: "hexpm", optional: false]}, {:telemetry, "~> 0.4.3 or ~> 1.0", [hex: :telemetry, repo: "hexpm", optional: false]}], "hexpm", "02b9c6b9955bce92c829f31d6284bf53c591ca63c4fb9ff81dfd0418667a34ff"},
|
"plug": {:hex, :plug, "1.14.0", "ba4f558468f69cbd9f6b356d25443d0b796fbdc887e03fa89001384a9cac638f", [:mix], [{:mime, "~> 1.0 or ~> 2.0", [hex: :mime, repo: "hexpm", optional: false]}, {:plug_crypto, "~> 1.1.1 or ~> 1.2", [hex: :plug_crypto, repo: "hexpm", optional: false]}, {:telemetry, "~> 0.4.3 or ~> 1.0", [hex: :telemetry, repo: "hexpm", optional: false]}], "hexpm", "bf020432c7d4feb7b3af16a0c2701455cbbbb95e5b6866132cb09eb0c29adc14"},
|
||||||
"plug_cowboy": {:hex, :plug_cowboy, "2.5.2", "62894ccd601cf9597e2c23911ff12798a8a18d237e9739f58a6b04e4988899fe", [:mix], [{:cowboy, "~> 2.7", [hex: :cowboy, repo: "hexpm", optional: false]}, {:cowboy_telemetry, "~> 0.3", [hex: :cowboy_telemetry, repo: "hexpm", optional: false]}, {:plug, "~> 1.7", [hex: :plug, repo: "hexpm", optional: false]}], "hexpm", "ea6e87f774c8608d60c8d34022a7d073bd7680a0a013f049fc62bf35efea1044"},
|
"plug_cowboy": {:hex, :plug_cowboy, "2.6.0", "d1cf12ff96a1ca4f52207c5271a6c351a4733f413803488d75b70ccf44aebec2", [:mix], [{:cowboy, "~> 2.7", [hex: :cowboy, repo: "hexpm", optional: false]}, {:cowboy_telemetry, "~> 0.3", [hex: :cowboy_telemetry, repo: "hexpm", optional: false]}, {:plug, "~> 1.14", [hex: :plug, repo: "hexpm", optional: false]}], "hexpm", "073cf20b753ce6682ed72905cd62a2d4bd9bad1bf9f7feb02a1b8e525bd94fa6"},
|
||||||
"plug_crypto": {:hex, :plug_crypto, "1.2.2", "05654514ac717ff3a1843204b424477d9e60c143406aa94daf2274fdd280794d", [:mix], [], "hexpm", "87631c7ad914a5a445f0a3809f99b079113ae4ed4b867348dd9eec288cecb6db"},
|
"plug_crypto": {:hex, :plug_crypto, "1.2.3", "8f77d13aeb32bfd9e654cb68f0af517b371fb34c56c9f2b58fe3df1235c1251a", [:mix], [], "hexpm", "b5672099c6ad5c202c45f5a403f21a3411247f164e4a8fab056e5cd8a290f4a2"},
|
||||||
"postgrex": {:hex, :postgrex, "0.16.3", "fac79a81a9a234b11c44235a4494d8565303fa4b9147acf57e48978a074971db", [:mix], [{:connection, "~> 1.1", [hex: :connection, repo: "hexpm", optional: false]}, {:db_connection, "~> 2.1", [hex: :db_connection, repo: "hexpm", optional: false]}, {:decimal, "~> 1.5 or ~> 2.0", [hex: :decimal, repo: "hexpm", optional: false]}, {:jason, "~> 1.0", [hex: :jason, repo: "hexpm", optional: true]}, {:table, "~> 0.1.0", [hex: :table, repo: "hexpm", optional: true]}], "hexpm", "aeaae1d2d1322da4e5fe90d241b0a564ce03a3add09d7270fb85362166194590"},
|
"postgrex": {:hex, :postgrex, "0.16.5", "fcc4035cc90e23933c5d69a9cd686e329469446ef7abba2cf70f08e2c4b69810", [:mix], [{:connection, "~> 1.1", [hex: :connection, repo: "hexpm", optional: false]}, {:db_connection, "~> 2.1", [hex: :db_connection, repo: "hexpm", optional: false]}, {:decimal, "~> 1.5 or ~> 2.0", [hex: :decimal, repo: "hexpm", optional: false]}, {:jason, "~> 1.0", [hex: :jason, repo: "hexpm", optional: true]}, {:table, "~> 0.1.0", [hex: :table, repo: "hexpm", optional: true]}], "hexpm", "edead639dc6e882618c01d8fc891214c481ab9a3788dfe38dd5e37fd1d5fb2e8"},
|
||||||
"ranch": {:hex, :ranch, "1.8.0", "8c7a100a139fd57f17327b6413e4167ac559fbc04ca7448e9be9057311597a1d", [:make, :rebar3], [], "hexpm", "49fbcfd3682fab1f5d109351b61257676da1a2fdbe295904176d5e521a2ddfe5"},
|
"ranch": {:hex, :ranch, "1.8.0", "8c7a100a139fd57f17327b6413e4167ac559fbc04ca7448e9be9057311597a1d", [:make, :rebar3], [], "hexpm", "49fbcfd3682fab1f5d109351b61257676da1a2fdbe295904176d5e521a2ddfe5"},
|
||||||
"set_locale": {:hex, :set_locale, "0.2.9", "33350ba3c66f1c560dffc43019eea4b573f91c5cbe3e461fe0e5395d2d6ba2c3", [:mix], [{:gettext, "~>0.14", [hex: :gettext, repo: "hexpm", optional: false]}, {:phoenix, ">1.3.0", [hex: :phoenix, repo: "hexpm", optional: false]}], "hexpm", "e46348b64b7c5d725d0c90a6524942a19b65e6ce27372ddf9a727dfb64ba236c"},
|
"set_locale": {:hex, :set_locale, "0.2.9", "33350ba3c66f1c560dffc43019eea4b573f91c5cbe3e461fe0e5395d2d6ba2c3", [:mix], [{:gettext, "~>0.14", [hex: :gettext, repo: "hexpm", optional: false]}, {:phoenix, ">1.3.0", [hex: :phoenix, repo: "hexpm", optional: false]}], "hexpm", "e46348b64b7c5d725d0c90a6524942a19b65e6ce27372ddf9a727dfb64ba236c"},
|
||||||
"swoosh": {:hex, :swoosh, "1.6.6", "6018c6f4659ac0b4f30684982993b7812b2bb97436d39f76fcfa8c9e3ae74f85", [:mix], [{:cowboy, "~> 1.1 or ~> 2.4", [hex: :cowboy, repo: "hexpm", optional: true]}, {:ex_aws, "~> 2.1", [hex: :ex_aws, repo: "hexpm", optional: true]}, {:finch, "~> 0.6", [hex: :finch, repo: "hexpm", optional: true]}, {:gen_smtp, "~> 0.13 or ~> 1.0", [hex: :gen_smtp, repo: "hexpm", optional: true]}, {:hackney, "~> 1.9", [hex: :hackney, repo: "hexpm", optional: true]}, {:jason, "~> 1.0", [hex: :jason, repo: "hexpm", optional: false]}, {:mail, "~> 0.2", [hex: :mail, repo: "hexpm", optional: true]}, {:mime, "~> 1.1 or ~> 2.0", [hex: :mime, repo: "hexpm", optional: false]}, {:plug_cowboy, ">= 1.0.0", [hex: :plug_cowboy, repo: "hexpm", optional: true]}, {:telemetry, "~> 0.4.2 or ~> 1.0", [hex: :telemetry, repo: "hexpm", optional: false]}], "hexpm", "e92c7206efd442f08484993676ab072afab2f2bb1e87e604230bb1183c5980de"},
|
"swoosh": {:hex, :swoosh, "1.8.2", "af9a22ab2c0d20b266f61acca737fa11a121902de9466a39e91bacdce012101c", [:mix], [{:cowboy, "~> 1.1 or ~> 2.4", [hex: :cowboy, repo: "hexpm", optional: true]}, {:ex_aws, "~> 2.1", [hex: :ex_aws, repo: "hexpm", optional: true]}, {:finch, "~> 0.6", [hex: :finch, repo: "hexpm", optional: true]}, {:gen_smtp, "~> 0.13 or ~> 1.0", [hex: :gen_smtp, repo: "hexpm", optional: true]}, {:hackney, "~> 1.9", [hex: :hackney, repo: "hexpm", optional: true]}, {:jason, "~> 1.0", [hex: :jason, repo: "hexpm", optional: false]}, {:mail, "~> 0.2", [hex: :mail, repo: "hexpm", optional: true]}, {:mime, "~> 1.1 or ~> 2.0", [hex: :mime, repo: "hexpm", optional: false]}, {:plug_cowboy, ">= 1.0.0", [hex: :plug_cowboy, repo: "hexpm", optional: true]}, {:telemetry, "~> 0.4.2 or ~> 1.0", [hex: :telemetry, repo: "hexpm", optional: false]}], "hexpm", "d058ba750eafadb6c09a84a352c14c5d1eeeda6e84945fcc95785b7f3067b7db"},
|
||||||
"table_rex": {:hex, :table_rex, "3.1.1", "0c67164d1714b5e806d5067c1e96ff098ba7ae79413cc075973e17c38a587caa", [:mix], [], "hexpm", "678a23aba4d670419c23c17790f9dcd635a4a89022040df7d5d772cb21012490"},
|
"table_rex": {:hex, :table_rex, "3.1.1", "0c67164d1714b5e806d5067c1e96ff098ba7ae79413cc075973e17c38a587caa", [:mix], [], "hexpm", "678a23aba4d670419c23c17790f9dcd635a4a89022040df7d5d772cb21012490"},
|
||||||
"telemetry": {:hex, :telemetry, "1.1.0", "a589817034a27eab11144ad24d5c0f9fab1f58173274b1e9bae7074af9cbee51", [:rebar3], [], "hexpm", "b727b2a1f75614774cff2d7565b64d0dfa5bd52ba517f16543e6fc7efcc0df48"},
|
"telemetry": {:hex, :telemetry, "1.1.0", "a589817034a27eab11144ad24d5c0f9fab1f58173274b1e9bae7074af9cbee51", [:rebar3], [], "hexpm", "b727b2a1f75614774cff2d7565b64d0dfa5bd52ba517f16543e6fc7efcc0df48"},
|
||||||
"telemetry_metrics": {:hex, :telemetry_metrics, "0.6.1", "315d9163a1d4660aedc3fee73f33f1d355dcc76c5c3ab3d59e76e3edf80eef1f", [:mix], [{:telemetry, "~> 0.4 or ~> 1.0", [hex: :telemetry, repo: "hexpm", optional: false]}], "hexpm", "7be9e0871c41732c233be71e4be11b96e56177bf15dde64a8ac9ce72ac9834c6"},
|
"telemetry_metrics": {:hex, :telemetry_metrics, "0.6.1", "315d9163a1d4660aedc3fee73f33f1d355dcc76c5c3ab3d59e76e3edf80eef1f", [:mix], [{:telemetry, "~> 0.4 or ~> 1.0", [hex: :telemetry, repo: "hexpm", optional: false]}], "hexpm", "7be9e0871c41732c233be71e4be11b96e56177bf15dde64a8ac9ce72ac9834c6"},
|
||||||
|
@ -10,204 +10,247 @@
|
|||||||
msgid ""
|
msgid ""
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#, 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
|
#: lib/cannery_web/live/ammo_group_live/index.ex:50
|
||||||
|
#: lib/cannery_web/live/ammo_group_live/index.html.heex:40
|
||||||
|
#, elixir-autogen, elixir-format
|
||||||
msgid "Add Ammo"
|
msgid "Add Ammo"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
|
#: lib/cannery_web/live/ammo_group_live/index.html.heex:36
|
||||||
#, elixir-autogen, elixir-format
|
#, elixir-autogen, elixir-format
|
||||||
#: lib/cannery_web/live/ammo_group_live/index.html.heex:37
|
|
||||||
msgid "Add your first box!"
|
msgid "Add your first box!"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
|
#: lib/cannery_web/live/container_live/index.html.heex:13
|
||||||
#, elixir-autogen, elixir-format
|
#, elixir-autogen, elixir-format
|
||||||
#: lib/cannery_web/live/container_live/index.html.heex:12
|
|
||||||
msgid "Add your first container!"
|
msgid "Add your first container!"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
|
#: lib/cannery_web/live/ammo_type_live/index.html.heex:13
|
||||||
#, elixir-autogen, elixir-format
|
#, elixir-autogen, elixir-format
|
||||||
#: lib/cannery_web/live/ammo_type_live/index.html.heex:12
|
|
||||||
msgid "Add your first type!"
|
msgid "Add your first type!"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#, elixir-autogen, elixir-format
|
|
||||||
#: lib/cannery_web/templates/user_settings/edit.html.heex:15
|
#: lib/cannery_web/templates/user_settings/edit.html.heex:15
|
||||||
#: lib/cannery_web/templates/user_settings/edit.html.heex:44
|
#: lib/cannery_web/templates/user_settings/edit.html.heex:44
|
||||||
|
#, elixir-autogen, elixir-format
|
||||||
msgid "Change email"
|
msgid "Change email"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#, elixir-autogen, elixir-format
|
|
||||||
#: lib/cannery_web/templates/user_settings/edit.html.heex:58
|
#: lib/cannery_web/templates/user_settings/edit.html.heex:58
|
||||||
#: lib/cannery_web/templates/user_settings/edit.html.heex:99
|
#: lib/cannery_web/templates/user_settings/edit.html.heex:99
|
||||||
|
#, elixir-autogen, elixir-format
|
||||||
msgid "Change password"
|
msgid "Change password"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#, elixir-autogen, elixir-format
|
|
||||||
#: lib/cannery_web/live/invite_live/index.html.heex:17
|
#: lib/cannery_web/live/invite_live/index.html.heex:17
|
||||||
|
#, elixir-autogen, elixir-format
|
||||||
msgid "Create Invite"
|
msgid "Create Invite"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
|
#: lib/cannery_web/templates/user_settings/edit.html.heex:157
|
||||||
#, elixir-autogen, elixir-format
|
#, elixir-autogen, elixir-format
|
||||||
#: lib/cannery_web/templates/user_settings/edit.html.heex:142
|
|
||||||
msgid "Delete User"
|
msgid "Delete User"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#, elixir-autogen, elixir-format
|
|
||||||
#: lib/cannery_web/templates/user_registration/new.html.heex:52
|
#: lib/cannery_web/templates/user_registration/new.html.heex:52
|
||||||
#: lib/cannery_web/templates/user_reset_password/new.html.heex:3
|
#: lib/cannery_web/templates/user_reset_password/new.html.heex:3
|
||||||
#: lib/cannery_web/templates/user_session/new.html.heex:45
|
#: lib/cannery_web/templates/user_session/new.html.heex:45
|
||||||
|
#, elixir-autogen, elixir-format
|
||||||
msgid "Forgot your password?"
|
msgid "Forgot your password?"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
|
#: lib/cannery_web/live/invite_live/index.html.heex:13
|
||||||
#, elixir-autogen, elixir-format
|
#, elixir-autogen, elixir-format
|
||||||
#: lib/cannery_web/live/invite_live/index.html.heex:12
|
|
||||||
msgid "Invite someone new!"
|
msgid "Invite someone new!"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#, elixir-autogen, elixir-format
|
#: lib/cannery_web/components/topbar.ex:137
|
||||||
#: 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:49
|
||||||
#: lib/cannery_web/templates/user_reset_password/edit.html.heex:48
|
#: lib/cannery_web/templates/user_reset_password/edit.html.heex:48
|
||||||
#: lib/cannery_web/templates/user_reset_password/new.html.heex:30
|
#: lib/cannery_web/templates/user_reset_password/new.html.heex:30
|
||||||
#: lib/cannery_web/templates/user_session/new.html.heex:3
|
#: lib/cannery_web/templates/user_session/new.html.heex:3
|
||||||
#: lib/cannery_web/templates/user_session/new.html.heex:33
|
#: lib/cannery_web/templates/user_session/new.html.heex:33
|
||||||
|
#, elixir-autogen, elixir-format
|
||||||
msgid "Log in"
|
msgid "Log in"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
|
#: lib/cannery_web/live/tag_live/index.html.heex:15
|
||||||
#, elixir-autogen, elixir-format
|
#, elixir-autogen, elixir-format
|
||||||
#: lib/cannery_web/live/tag_live/index.html.heex:14
|
|
||||||
msgid "Make your first tag!"
|
msgid "Make your first tag!"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#, 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
|
||||||
|
#, elixir-autogen, elixir-format
|
||||||
msgid "New Ammo type"
|
msgid "New Ammo type"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#, elixir-autogen, elixir-format
|
|
||||||
#: lib/cannery_web/live/container_live/index.html.heex:17
|
#: lib/cannery_web/live/container_live/index.html.heex:17
|
||||||
|
#, elixir-autogen, elixir-format
|
||||||
msgid "New Container"
|
msgid "New Container"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#, elixir-autogen, elixir-format
|
|
||||||
#: lib/cannery_web/live/tag_live/index.html.heex:19
|
#: lib/cannery_web/live/tag_live/index.html.heex:19
|
||||||
|
#, elixir-autogen, elixir-format
|
||||||
msgid "New Tag"
|
msgid "New Tag"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#, elixir-autogen, elixir-format
|
#: lib/cannery_web/components/topbar.ex:128
|
||||||
#: lib/cannery_web/components/topbar.ex:105
|
#: lib/cannery_web/templates/user_confirmation/new.html.heex:26
|
||||||
#: 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
|
||||||
#: lib/cannery_web/templates/user_reset_password/edit.html.heex:43
|
#: lib/cannery_web/templates/user_reset_password/edit.html.heex:44
|
||||||
#: lib/cannery_web/templates/user_reset_password/new.html.heex:25
|
#: lib/cannery_web/templates/user_reset_password/new.html.heex:26
|
||||||
#: lib/cannery_web/templates/user_session/new.html.heex:40
|
#: lib/cannery_web/templates/user_session/new.html.heex:41
|
||||||
|
#, elixir-autogen, elixir-format
|
||||||
msgid "Register"
|
msgid "Register"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#, elixir-autogen, elixir-format
|
|
||||||
#: lib/cannery_web/templates/user_confirmation/new.html.heex:3
|
#: lib/cannery_web/templates/user_confirmation/new.html.heex:3
|
||||||
#: lib/cannery_web/templates/user_confirmation/new.html.heex:16
|
#: lib/cannery_web/templates/user_confirmation/new.html.heex:16
|
||||||
|
#, elixir-autogen, elixir-format
|
||||||
msgid "Resend confirmation instructions"
|
msgid "Resend confirmation instructions"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#, elixir-autogen, elixir-format
|
|
||||||
#: lib/cannery_web/templates/user_reset_password/edit.html.heex:3
|
#: lib/cannery_web/templates/user_reset_password/edit.html.heex:3
|
||||||
#: lib/cannery_web/templates/user_reset_password/edit.html.heex:34
|
#: lib/cannery_web/templates/user_reset_password/edit.html.heex:34
|
||||||
|
#, elixir-autogen, elixir-format
|
||||||
msgid "Reset password"
|
msgid "Reset password"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#, elixir-autogen, elixir-format
|
#: lib/cannery_web/components/add_shot_group_component.html.heex:53
|
||||||
#: lib/cannery_web/components/add_shot_group_component.html.heex:46
|
|
||||||
#: 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:31
|
#: 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:91
|
#: lib/cannery_web/live/tag_live/form_component.ex:91
|
||||||
|
#, elixir-autogen, elixir-format
|
||||||
msgid "Save"
|
msgid "Save"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#, elixir-autogen, elixir-format
|
|
||||||
#: lib/cannery_web/templates/user_reset_password/new.html.heex:16
|
#: lib/cannery_web/templates/user_reset_password/new.html.heex:16
|
||||||
|
#, elixir-autogen, elixir-format
|
||||||
msgid "Send instructions to reset password"
|
msgid "Send instructions to reset password"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
|
#: lib/cannery_web/live/container_live/show.html.heex:72
|
||||||
#, elixir-autogen, elixir-format
|
#, elixir-autogen, elixir-format
|
||||||
#: lib/cannery_web/live/container_live/show.html.heex:65
|
|
||||||
msgid "Why not add one?"
|
msgid "Why not add one?"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
|
#: lib/cannery_web/live/container_live/edit_tags_component.html.heex:53
|
||||||
#, elixir-autogen, elixir-format
|
#, elixir-autogen, elixir-format
|
||||||
#: lib/cannery_web/live/container_live/edit_tags_component.html.heex:52
|
|
||||||
msgid "Add"
|
msgid "Add"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#, elixir-autogen, elixir-format
|
|
||||||
#: lib/cannery_web/live/range_live/index.html.heex:17
|
#: lib/cannery_web/live/range_live/index.html.heex:17
|
||||||
|
#, elixir-autogen, elixir-format
|
||||||
msgid "Stage ammo"
|
msgid "Stage ammo"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
|
#: lib/cannery_web/live/range_live/index.html.heex:13
|
||||||
#, elixir-autogen, elixir-format
|
#, elixir-autogen, elixir-format
|
||||||
#: lib/cannery_web/live/range_live/index.html.heex:12
|
|
||||||
msgid "Why not get some ready to shoot?"
|
msgid "Why not get some ready to shoot?"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
|
#: lib/cannery_web/live/ammo_group_live/index.ex:199
|
||||||
|
#: lib/cannery_web/live/ammo_group_live/show.html.heex:101
|
||||||
|
#: lib/cannery_web/live/range_live/index.html.heex:38
|
||||||
#, elixir-autogen, elixir-format
|
#, elixir-autogen, elixir-format
|
||||||
#: lib/cannery_web/live/ammo_group_live/index.ex:160
|
|
||||||
#: lib/cannery_web/live/ammo_group_live/show.html.heex:91
|
|
||||||
#: lib/cannery_web/live/range_live/index.html.heex:36
|
|
||||||
msgid "Record shots"
|
msgid "Record shots"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
|
#: lib/cannery_web/components/move_ammo_group_component.ex:90
|
||||||
#, elixir-autogen, elixir-format
|
#, elixir-autogen, elixir-format
|
||||||
#: lib/cannery_web/components/move_ammo_group_component.ex:89
|
|
||||||
msgid "Add another container!"
|
msgid "Add another container!"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
|
#: lib/cannery_web/live/ammo_group_live/show.html.heex:94
|
||||||
#, elixir-autogen, elixir-format
|
#, elixir-autogen, elixir-format
|
||||||
#: lib/cannery_web/live/ammo_group_live/show.html.heex:85
|
|
||||||
msgid "Move containers"
|
msgid "Move containers"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
|
#: lib/cannery_web/components/move_ammo_group_component.ex:126
|
||||||
#, elixir-autogen, elixir-format
|
#, elixir-autogen, elixir-format
|
||||||
#: lib/cannery_web/components/move_ammo_group_component.ex:127
|
|
||||||
msgid "Select"
|
msgid "Select"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
|
#: lib/cannery_web/live/invite_live/index.html.heex:31
|
||||||
#, elixir-autogen, elixir-format
|
#, elixir-autogen, elixir-format
|
||||||
#: lib/cannery_web/live/invite_live/index.html.heex:33
|
|
||||||
msgid "Copy to clipboard"
|
msgid "Copy to clipboard"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
|
#: lib/cannery_web/live/ammo_group_live/index.html.heex:21
|
||||||
#, elixir-autogen, elixir-format
|
#, elixir-autogen, elixir-format
|
||||||
#: lib/cannery_web/live/ammo_group_live/index.html.heex:20
|
|
||||||
msgid "add a container first"
|
msgid "add a container first"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#, elixir-autogen, elixir-format
|
|
||||||
#: lib/cannery_web/live/ammo_group_live/form_component.html.heex:66
|
#: lib/cannery_web/live/ammo_group_live/form_component.html.heex:66
|
||||||
|
#, elixir-autogen, elixir-format
|
||||||
msgid "Create"
|
msgid "Create"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#, elixir-autogen, elixir-format
|
|
||||||
#: lib/cannery_web/templates/user_settings/edit.html.heex:113
|
#: lib/cannery_web/templates/user_settings/edit.html.heex:113
|
||||||
|
#, elixir-autogen, elixir-format
|
||||||
msgid "Change Language"
|
msgid "Change Language"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#, elixir-autogen, elixir-format
|
|
||||||
#: lib/cannery_web/templates/user_settings/edit.html.heex:134
|
#: lib/cannery_web/templates/user_settings/edit.html.heex:134
|
||||||
|
#, elixir-autogen, elixir-format
|
||||||
msgid "Change language"
|
msgid "Change language"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
|
#: lib/cannery_web/live/ammo_group_live/show.html.heex:60
|
||||||
#, elixir-autogen, elixir-format
|
#, elixir-autogen, elixir-format
|
||||||
#: lib/cannery_web/live/ammo_group_live/show.html.heex:55
|
|
||||||
msgid "View in Catalog"
|
msgid "View in Catalog"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#, elixir-autogen, elixir-format
|
|
||||||
#: lib/cannery_web/live/ammo_group_live/index.html.heex:31
|
#: lib/cannery_web/live/ammo_group_live/index.html.heex:31
|
||||||
|
#, elixir-autogen, elixir-format
|
||||||
msgid "add an ammo type first"
|
msgid "add an ammo type first"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
|
#: lib/cannery_web/live/invite_live/index.html.heex:60
|
||||||
|
#, elixir-autogen, elixir-format
|
||||||
|
msgid "Disable"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: lib/cannery_web/live/invite_live/index.html.heex:64
|
||||||
|
#, elixir-autogen, elixir-format
|
||||||
|
msgid "Enable"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: lib/cannery_web/components/move_ammo_group_component.ex:80
|
||||||
|
#, elixir-autogen, elixir-format
|
||||||
|
msgid "Move ammo"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: lib/cannery_web/live/invite_live/index.html.heex:80
|
||||||
|
#, elixir-autogen, elixir-format
|
||||||
|
msgid "Set Unlimited"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: lib/cannery_web/live/container_live/show.html.heex:97
|
||||||
|
#, elixir-autogen, elixir-format
|
||||||
|
msgid "Show used"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: lib/cannery_web/live/ammo_group_live/show.html.heex:86
|
||||||
|
#: lib/cannery_web/live/range_live/index.html.heex:31
|
||||||
|
#, elixir-autogen, elixir-format
|
||||||
|
msgid "Stage for range"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: lib/cannery_web/live/ammo_group_live/show.html.heex:85
|
||||||
|
#: lib/cannery_web/live/range_live/index.html.heex:30
|
||||||
|
#, elixir-autogen, elixir-format
|
||||||
|
msgid "Unstage from range"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: lib/cannery_web/templates/user_settings/edit.html.heex:148
|
||||||
|
#, elixir-autogen, elixir-format
|
||||||
|
msgid "Export Data as JSON"
|
||||||
|
msgstr ""
|
||||||
|
@ -23,204 +23,247 @@ msgstr ""
|
|||||||
## Run "mix gettext.extract" to bring this file up to
|
## Run "mix gettext.extract" to bring this file up to
|
||||||
## date. Leave "msgstr"s empty as changing them here has no
|
## date. Leave "msgstr"s empty as changing them here has no
|
||||||
## effect: edit them in PO (.po) files instead.
|
## effect: edit them in PO (.po) files instead.
|
||||||
#, 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
|
#: lib/cannery_web/live/ammo_group_live/index.ex:50
|
||||||
|
#: lib/cannery_web/live/ammo_group_live/index.html.heex:40
|
||||||
|
#, elixir-autogen, elixir-format
|
||||||
msgid "Add Ammo"
|
msgid "Add Ammo"
|
||||||
msgstr "Munition hinzufügen"
|
msgstr "Munition hinzufügen"
|
||||||
|
|
||||||
|
#: lib/cannery_web/live/ammo_group_live/index.html.heex:36
|
||||||
#, elixir-autogen, elixir-format
|
#, elixir-autogen, elixir-format
|
||||||
#: 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!"
|
||||||
|
|
||||||
|
#: lib/cannery_web/live/container_live/index.html.heex:13
|
||||||
#, elixir-autogen, elixir-format
|
#, elixir-autogen, elixir-format
|
||||||
#: lib/cannery_web/live/container_live/index.html.heex:12
|
|
||||||
msgid "Add your first container!"
|
msgid "Add your first container!"
|
||||||
msgstr "Fügen Sie ihren ersten Behälter hinzu!"
|
msgstr "Fügen Sie ihren ersten Behälter hinzu!"
|
||||||
|
|
||||||
|
#: lib/cannery_web/live/ammo_type_live/index.html.heex:13
|
||||||
#, elixir-autogen, elixir-format
|
#, elixir-autogen, elixir-format
|
||||||
#: lib/cannery_web/live/ammo_type_live/index.html.heex:12
|
|
||||||
msgid "Add your first type!"
|
msgid "Add your first type!"
|
||||||
msgstr "Fügen Sie ihre erste Munitionsart hinzu!"
|
msgstr "Fügen Sie ihre erste Munitionsart hinzu!"
|
||||||
|
|
||||||
#, elixir-autogen, elixir-format
|
|
||||||
#: lib/cannery_web/templates/user_settings/edit.html.heex:15
|
#: lib/cannery_web/templates/user_settings/edit.html.heex:15
|
||||||
#: lib/cannery_web/templates/user_settings/edit.html.heex:44
|
#: lib/cannery_web/templates/user_settings/edit.html.heex:44
|
||||||
|
#, elixir-autogen, elixir-format
|
||||||
msgid "Change email"
|
msgid "Change email"
|
||||||
msgstr "Mailadresse ändern"
|
msgstr "Mailadresse ändern"
|
||||||
|
|
||||||
#, elixir-autogen, elixir-format
|
|
||||||
#: lib/cannery_web/templates/user_settings/edit.html.heex:58
|
#: lib/cannery_web/templates/user_settings/edit.html.heex:58
|
||||||
#: lib/cannery_web/templates/user_settings/edit.html.heex:99
|
#: lib/cannery_web/templates/user_settings/edit.html.heex:99
|
||||||
|
#, elixir-autogen, elixir-format
|
||||||
msgid "Change password"
|
msgid "Change password"
|
||||||
msgstr "Passwort ändern"
|
msgstr "Passwort ändern"
|
||||||
|
|
||||||
#, elixir-autogen, elixir-format
|
|
||||||
#: lib/cannery_web/live/invite_live/index.html.heex:17
|
#: lib/cannery_web/live/invite_live/index.html.heex:17
|
||||||
|
#, elixir-autogen, elixir-format
|
||||||
msgid "Create Invite"
|
msgid "Create Invite"
|
||||||
msgstr "Einladung erstellen"
|
msgstr "Einladung erstellen"
|
||||||
|
|
||||||
|
#: lib/cannery_web/templates/user_settings/edit.html.heex:157
|
||||||
#, elixir-autogen, elixir-format
|
#, elixir-autogen, elixir-format
|
||||||
#: lib/cannery_web/templates/user_settings/edit.html.heex:142
|
|
||||||
msgid "Delete User"
|
msgid "Delete User"
|
||||||
msgstr "Benutzer löschen"
|
msgstr "Benutzer löschen"
|
||||||
|
|
||||||
#, elixir-autogen, elixir-format
|
|
||||||
#: lib/cannery_web/templates/user_registration/new.html.heex:52
|
#: lib/cannery_web/templates/user_registration/new.html.heex:52
|
||||||
#: lib/cannery_web/templates/user_reset_password/new.html.heex:3
|
#: lib/cannery_web/templates/user_reset_password/new.html.heex:3
|
||||||
#: lib/cannery_web/templates/user_session/new.html.heex:45
|
#: lib/cannery_web/templates/user_session/new.html.heex:45
|
||||||
|
#, elixir-autogen, elixir-format
|
||||||
msgid "Forgot your password?"
|
msgid "Forgot your password?"
|
||||||
msgstr "Passwort vergessen?"
|
msgstr "Passwort vergessen?"
|
||||||
|
|
||||||
|
#: lib/cannery_web/live/invite_live/index.html.heex:13
|
||||||
#, elixir-autogen, elixir-format
|
#, elixir-autogen, elixir-format
|
||||||
#: lib/cannery_web/live/invite_live/index.html.heex:12
|
|
||||||
msgid "Invite someone new!"
|
msgid "Invite someone new!"
|
||||||
msgstr "Laden Sie jemanden ein!"
|
msgstr "Laden Sie jemanden ein!"
|
||||||
|
|
||||||
#, elixir-autogen, elixir-format
|
#: lib/cannery_web/components/topbar.ex:137
|
||||||
#: 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:49
|
||||||
#: lib/cannery_web/templates/user_reset_password/edit.html.heex:48
|
#: lib/cannery_web/templates/user_reset_password/edit.html.heex:48
|
||||||
#: lib/cannery_web/templates/user_reset_password/new.html.heex:30
|
#: lib/cannery_web/templates/user_reset_password/new.html.heex:30
|
||||||
#: lib/cannery_web/templates/user_session/new.html.heex:3
|
#: lib/cannery_web/templates/user_session/new.html.heex:3
|
||||||
#: lib/cannery_web/templates/user_session/new.html.heex:33
|
#: lib/cannery_web/templates/user_session/new.html.heex:33
|
||||||
|
#, elixir-autogen, elixir-format
|
||||||
msgid "Log in"
|
msgid "Log in"
|
||||||
msgstr "Einloggen"
|
msgstr "Einloggen"
|
||||||
|
|
||||||
|
#: lib/cannery_web/live/tag_live/index.html.heex:15
|
||||||
#, elixir-autogen, elixir-format
|
#, elixir-autogen, elixir-format
|
||||||
#: lib/cannery_web/live/tag_live/index.html.heex:14
|
|
||||||
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_type_live/index.html.heex:17
|
#: lib/cannery_web/live/ammo_type_live/index.html.heex:17
|
||||||
|
#, elixir-autogen, elixir-format
|
||||||
msgid "New Ammo type"
|
msgid "New Ammo type"
|
||||||
msgstr "Neue Munitionsart"
|
msgstr "Neue Munitionsart"
|
||||||
|
|
||||||
#, elixir-autogen, elixir-format
|
|
||||||
#: lib/cannery_web/live/container_live/index.html.heex:17
|
#: lib/cannery_web/live/container_live/index.html.heex:17
|
||||||
|
#, elixir-autogen, elixir-format
|
||||||
msgid "New Container"
|
msgid "New Container"
|
||||||
msgstr "Neuer Behälter"
|
msgstr "Neuer Behälter"
|
||||||
|
|
||||||
#, elixir-autogen, elixir-format
|
|
||||||
#: lib/cannery_web/live/tag_live/index.html.heex:19
|
#: lib/cannery_web/live/tag_live/index.html.heex:19
|
||||||
|
#, elixir-autogen, elixir-format
|
||||||
msgid "New Tag"
|
msgid "New Tag"
|
||||||
msgstr "Neuer Tag"
|
msgstr "Neuer Tag"
|
||||||
|
|
||||||
#, elixir-autogen, elixir-format
|
#: lib/cannery_web/components/topbar.ex:128
|
||||||
#: lib/cannery_web/components/topbar.ex:105
|
#: lib/cannery_web/templates/user_confirmation/new.html.heex:26
|
||||||
#: 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
|
||||||
#: lib/cannery_web/templates/user_reset_password/edit.html.heex:43
|
#: lib/cannery_web/templates/user_reset_password/edit.html.heex:44
|
||||||
#: lib/cannery_web/templates/user_reset_password/new.html.heex:25
|
#: lib/cannery_web/templates/user_reset_password/new.html.heex:26
|
||||||
#: lib/cannery_web/templates/user_session/new.html.heex:40
|
#: lib/cannery_web/templates/user_session/new.html.heex:41
|
||||||
|
#, elixir-autogen, elixir-format
|
||||||
msgid "Register"
|
msgid "Register"
|
||||||
msgstr "Registrieren"
|
msgstr "Registrieren"
|
||||||
|
|
||||||
#, elixir-autogen, elixir-format
|
|
||||||
#: lib/cannery_web/templates/user_confirmation/new.html.heex:3
|
#: lib/cannery_web/templates/user_confirmation/new.html.heex:3
|
||||||
#: lib/cannery_web/templates/user_confirmation/new.html.heex:16
|
#: lib/cannery_web/templates/user_confirmation/new.html.heex:16
|
||||||
|
#, elixir-autogen, elixir-format
|
||||||
msgid "Resend confirmation instructions"
|
msgid "Resend confirmation instructions"
|
||||||
msgstr "Bestätigungsmail erneut senden"
|
msgstr "Bestätigungsmail erneut senden"
|
||||||
|
|
||||||
#, elixir-autogen, elixir-format
|
|
||||||
#: lib/cannery_web/templates/user_reset_password/edit.html.heex:3
|
#: lib/cannery_web/templates/user_reset_password/edit.html.heex:3
|
||||||
#: lib/cannery_web/templates/user_reset_password/edit.html.heex:34
|
#: lib/cannery_web/templates/user_reset_password/edit.html.heex:34
|
||||||
|
#, elixir-autogen, elixir-format
|
||||||
msgid "Reset password"
|
msgid "Reset password"
|
||||||
msgstr "Passwort zurücksetzen"
|
msgstr "Passwort zurücksetzen"
|
||||||
|
|
||||||
#, elixir-autogen, elixir-format
|
#: lib/cannery_web/components/add_shot_group_component.html.heex:53
|
||||||
#: lib/cannery_web/components/add_shot_group_component.html.heex:46
|
|
||||||
#: 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:31
|
#: 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:91
|
#: lib/cannery_web/live/tag_live/form_component.ex:91
|
||||||
|
#, elixir-autogen, elixir-format
|
||||||
msgid "Save"
|
msgid "Save"
|
||||||
msgstr "Speichern"
|
msgstr "Speichern"
|
||||||
|
|
||||||
#, elixir-autogen, elixir-format
|
|
||||||
#: lib/cannery_web/templates/user_reset_password/new.html.heex:16
|
#: lib/cannery_web/templates/user_reset_password/new.html.heex:16
|
||||||
|
#, elixir-autogen, elixir-format
|
||||||
msgid "Send instructions to reset password"
|
msgid "Send instructions to reset password"
|
||||||
msgstr "Anleitung zum Passwort zurücksetzen zusenden"
|
msgstr "Anleitung zum Passwort zurücksetzen zusenden"
|
||||||
|
|
||||||
|
#: lib/cannery_web/live/container_live/show.html.heex:72
|
||||||
#, elixir-autogen, elixir-format
|
#, elixir-autogen, elixir-format
|
||||||
#: 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?"
|
||||||
|
|
||||||
|
#: lib/cannery_web/live/container_live/edit_tags_component.html.heex:53
|
||||||
#, elixir-autogen, elixir-format
|
#, elixir-autogen, elixir-format
|
||||||
#: lib/cannery_web/live/container_live/edit_tags_component.html.heex:52
|
|
||||||
msgid "Add"
|
msgid "Add"
|
||||||
msgstr "Hinzufügen"
|
msgstr "Hinzufügen"
|
||||||
|
|
||||||
#, elixir-autogen, elixir-format
|
|
||||||
#: lib/cannery_web/live/range_live/index.html.heex:17
|
#: lib/cannery_web/live/range_live/index.html.heex:17
|
||||||
|
#, elixir-autogen, elixir-format
|
||||||
msgid "Stage ammo"
|
msgid "Stage ammo"
|
||||||
msgstr "Munition markieren"
|
msgstr "Munition markieren"
|
||||||
|
|
||||||
|
#: lib/cannery_web/live/range_live/index.html.heex:13
|
||||||
#, elixir-autogen, elixir-format
|
#, elixir-autogen, elixir-format
|
||||||
#: lib/cannery_web/live/range_live/index.html.heex:12
|
|
||||||
msgid "Why not get some ready to shoot?"
|
msgid "Why not get some ready to shoot?"
|
||||||
msgstr "Warum nicht einige für den Schießstand auswählen?"
|
msgstr "Warum nicht einige für den Schießstand auswählen?"
|
||||||
|
|
||||||
|
#: lib/cannery_web/live/ammo_group_live/index.ex:199
|
||||||
|
#: lib/cannery_web/live/ammo_group_live/show.html.heex:101
|
||||||
|
#: lib/cannery_web/live/range_live/index.html.heex:38
|
||||||
#, elixir-autogen, elixir-format
|
#, elixir-autogen, elixir-format
|
||||||
#: lib/cannery_web/live/ammo_group_live/index.ex:160
|
|
||||||
#: lib/cannery_web/live/ammo_group_live/show.html.heex:91
|
|
||||||
#: lib/cannery_web/live/range_live/index.html.heex:36
|
|
||||||
msgid "Record shots"
|
msgid "Record shots"
|
||||||
msgstr "Schüsse dokumentieren"
|
msgstr "Schüsse dokumentieren"
|
||||||
|
|
||||||
|
#: lib/cannery_web/components/move_ammo_group_component.ex:90
|
||||||
#, elixir-autogen, elixir-format
|
#, elixir-autogen, elixir-format
|
||||||
#: lib/cannery_web/components/move_ammo_group_component.ex:89
|
|
||||||
msgid "Add another container!"
|
msgid "Add another container!"
|
||||||
msgstr "Einen weiteren Behälter hinzufügen!"
|
msgstr "Einen weiteren Behälter hinzufügen!"
|
||||||
|
|
||||||
|
#: lib/cannery_web/live/ammo_group_live/show.html.heex:94
|
||||||
#, elixir-autogen, elixir-format
|
#, elixir-autogen, elixir-format
|
||||||
#: lib/cannery_web/live/ammo_group_live/show.html.heex:85
|
|
||||||
msgid "Move containers"
|
msgid "Move containers"
|
||||||
msgstr "Behälter verschieben"
|
msgstr "Behälter verschieben"
|
||||||
|
|
||||||
|
#: lib/cannery_web/components/move_ammo_group_component.ex:126
|
||||||
#, elixir-autogen, elixir-format
|
#, elixir-autogen, elixir-format
|
||||||
#: lib/cannery_web/components/move_ammo_group_component.ex:127
|
|
||||||
msgid "Select"
|
msgid "Select"
|
||||||
msgstr "Markieren"
|
msgstr "Markieren"
|
||||||
|
|
||||||
|
#: lib/cannery_web/live/invite_live/index.html.heex:31
|
||||||
#, elixir-autogen, elixir-format
|
#, elixir-autogen, elixir-format
|
||||||
#: lib/cannery_web/live/invite_live/index.html.heex:33
|
|
||||||
msgid "Copy to clipboard"
|
msgid "Copy to clipboard"
|
||||||
msgstr "In die Zwischenablage kopieren"
|
msgstr "In die Zwischenablage kopieren"
|
||||||
|
|
||||||
|
#: lib/cannery_web/live/ammo_group_live/index.html.heex:21
|
||||||
#, elixir-autogen, elixir-format
|
#, elixir-autogen, elixir-format
|
||||||
#: lib/cannery_web/live/ammo_group_live/index.html.heex:20
|
|
||||||
msgid "add a container first"
|
msgid "add a container first"
|
||||||
msgstr "Zuerst einen Behälter hinzufügen"
|
msgstr "Zuerst einen Behälter hinzufügen"
|
||||||
|
|
||||||
#, elixir-autogen, elixir-format
|
|
||||||
#: lib/cannery_web/live/ammo_group_live/form_component.html.heex:66
|
#: lib/cannery_web/live/ammo_group_live/form_component.html.heex:66
|
||||||
|
#, elixir-autogen, elixir-format
|
||||||
msgid "Create"
|
msgid "Create"
|
||||||
msgstr "Erstellen"
|
msgstr "Erstellen"
|
||||||
|
|
||||||
#, elixir-autogen, elixir-format
|
|
||||||
#: lib/cannery_web/templates/user_settings/edit.html.heex:113
|
#: lib/cannery_web/templates/user_settings/edit.html.heex:113
|
||||||
|
#, elixir-autogen, elixir-format
|
||||||
msgid "Change Language"
|
msgid "Change Language"
|
||||||
msgstr "Sprache wechseln"
|
msgstr "Sprache wechseln"
|
||||||
|
|
||||||
#, elixir-autogen, elixir-format
|
|
||||||
#: lib/cannery_web/templates/user_settings/edit.html.heex:134
|
#: lib/cannery_web/templates/user_settings/edit.html.heex:134
|
||||||
|
#, elixir-autogen, elixir-format
|
||||||
msgid "Change language"
|
msgid "Change language"
|
||||||
msgstr "Sprache wechseln"
|
msgstr "Sprache wechseln"
|
||||||
|
|
||||||
|
#: lib/cannery_web/live/ammo_group_live/show.html.heex:60
|
||||||
#, elixir-autogen, elixir-format
|
#, elixir-autogen, elixir-format
|
||||||
#: lib/cannery_web/live/ammo_group_live/show.html.heex:55
|
|
||||||
msgid "View in Catalog"
|
msgid "View in Catalog"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#, elixir-autogen, elixir-format
|
|
||||||
#: lib/cannery_web/live/ammo_group_live/index.html.heex:31
|
#: lib/cannery_web/live/ammo_group_live/index.html.heex:31
|
||||||
|
#, elixir-autogen, elixir-format
|
||||||
msgid "add an ammo type first"
|
msgid "add an ammo type first"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
|
#: lib/cannery_web/live/invite_live/index.html.heex:60
|
||||||
|
#, elixir-autogen, elixir-format
|
||||||
|
msgid "Disable"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: lib/cannery_web/live/invite_live/index.html.heex:64
|
||||||
|
#, elixir-autogen, elixir-format
|
||||||
|
msgid "Enable"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: lib/cannery_web/components/move_ammo_group_component.ex:80
|
||||||
|
#, elixir-autogen, elixir-format
|
||||||
|
msgid "Move ammo"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: lib/cannery_web/live/invite_live/index.html.heex:80
|
||||||
|
#, elixir-autogen, elixir-format
|
||||||
|
msgid "Set Unlimited"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: lib/cannery_web/live/container_live/show.html.heex:97
|
||||||
|
#, elixir-autogen, elixir-format
|
||||||
|
msgid "Show used"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: lib/cannery_web/live/ammo_group_live/show.html.heex:86
|
||||||
|
#: lib/cannery_web/live/range_live/index.html.heex:31
|
||||||
|
#, elixir-autogen, elixir-format
|
||||||
|
msgid "Stage for range"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: lib/cannery_web/live/ammo_group_live/show.html.heex:85
|
||||||
|
#: lib/cannery_web/live/range_live/index.html.heex:30
|
||||||
|
#, elixir-autogen, elixir-format
|
||||||
|
msgid "Unstage from range"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: lib/cannery_web/templates/user_settings/edit.html.heex:148
|
||||||
|
#, elixir-autogen, elixir-format
|
||||||
|
msgid "Export Data as JSON"
|
||||||
|
msgstr ""
|
||||||
|
File diff suppressed because it is too large
Load Diff
@ -23,98 +23,98 @@ msgstr ""
|
|||||||
## Run "mix gettext.extract" to bring this file up to
|
## Run "mix gettext.extract" to bring this file up to
|
||||||
## date. Leave "msgstr"s empty as changing them here has no
|
## date. Leave "msgstr"s empty as changing them here has no
|
||||||
## effect: edit them in PO (.po) files instead.
|
## effect: edit them in PO (.po) files instead.
|
||||||
#, elixir-autogen, elixir-format
|
|
||||||
#: lib/cannery/accounts/email.ex:30
|
#: lib/cannery/accounts/email.ex:30
|
||||||
|
#, elixir-autogen, elixir-format
|
||||||
msgid "Confirm your %{name} account"
|
msgid "Confirm your %{name} account"
|
||||||
msgstr "Bestätigen Sie ihr %{name} Nutzerkonto"
|
msgstr "Bestätigen Sie ihr %{name} Nutzerkonto"
|
||||||
|
|
||||||
#, elixir-autogen, elixir-format
|
|
||||||
#: lib/cannery_web/templates/email/confirm_email.html.eex:3
|
#: lib/cannery_web/templates/email/confirm_email.html.eex:3
|
||||||
#: lib/cannery_web/templates/email/confirm_email.txt.eex:2
|
#: lib/cannery_web/templates/email/confirm_email.txt.eex:2
|
||||||
#: lib/cannery_web/templates/email/reset_password.html.eex:3
|
#: lib/cannery_web/templates/email/reset_password.html.eex:3
|
||||||
#: lib/cannery_web/templates/email/reset_password.txt.eex:2
|
#: lib/cannery_web/templates/email/reset_password.txt.eex:2
|
||||||
#: lib/cannery_web/templates/email/update_email.html.eex:3
|
#: lib/cannery_web/templates/email/update_email.html.eex:3
|
||||||
#: lib/cannery_web/templates/email/update_email.txt.eex:2
|
#: lib/cannery_web/templates/email/update_email.txt.eex:2
|
||||||
|
#, elixir-autogen, elixir-format
|
||||||
msgid "Hi %{email},"
|
msgid "Hi %{email},"
|
||||||
msgstr "Hallo %{email},"
|
msgstr "Hallo %{email},"
|
||||||
|
|
||||||
#, elixir-autogen, elixir-format
|
|
||||||
#: lib/cannery_web/templates/email/confirm_email.txt.eex:10
|
#: lib/cannery_web/templates/email/confirm_email.txt.eex:10
|
||||||
|
#, elixir-autogen, elixir-format
|
||||||
msgid "If you didn't create an account at %{url}, please ignore this."
|
msgid "If you didn't create an account at %{url}, please ignore this."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
"Falls Sie dieses Nutzerkonto bei %{url} nicht erstellt haben, ignorieren Sie "
|
"Falls Sie dieses Nutzerkonto bei %{url} nicht erstellt haben, ignorieren Sie "
|
||||||
"diese Nachricht bitte."
|
"diese Nachricht bitte."
|
||||||
|
|
||||||
#, elixir-autogen, elixir-format
|
|
||||||
#: lib/cannery_web/templates/email/reset_password.txt.eex:8
|
#: lib/cannery_web/templates/email/reset_password.txt.eex:8
|
||||||
#: lib/cannery_web/templates/email/update_email.txt.eex:8
|
#: lib/cannery_web/templates/email/update_email.txt.eex:8
|
||||||
|
#, elixir-autogen, elixir-format
|
||||||
msgid "If you didn't request this change from %{url}, please ignore this."
|
msgid "If you didn't request this change from %{url}, please ignore this."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
"Falls Sie diese Änderung von %{url} nicht angefordert haben, ignorieren Sie "
|
"Falls Sie diese Änderung von %{url} nicht angefordert haben, ignorieren Sie "
|
||||||
"bitte diese Nachricht."
|
"bitte diese Nachricht."
|
||||||
|
|
||||||
#, elixir-autogen, elixir-format
|
|
||||||
#: lib/cannery/accounts/email.ex:37
|
#: lib/cannery/accounts/email.ex:37
|
||||||
|
#, elixir-autogen, elixir-format
|
||||||
msgid "Reset your %{name} password"
|
msgid "Reset your %{name} password"
|
||||||
msgstr "Passwort für %{name} zurücksetzen"
|
msgstr "Passwort für %{name} zurücksetzen"
|
||||||
|
|
||||||
#, elixir-autogen, elixir-format
|
|
||||||
#: lib/cannery/accounts/email.ex:44
|
#: lib/cannery/accounts/email.ex:44
|
||||||
|
#, elixir-autogen, elixir-format
|
||||||
msgid "Update your %{name} email"
|
msgid "Update your %{name} email"
|
||||||
msgstr "Aktualisieren Sie %{name} Mailadresse"
|
msgstr "Aktualisieren Sie %{name} Mailadresse"
|
||||||
|
|
||||||
#, elixir-autogen, elixir-format
|
|
||||||
#: lib/cannery_web/templates/email/confirm_email.html.eex:9
|
#: lib/cannery_web/templates/email/confirm_email.html.eex:9
|
||||||
|
#, elixir-autogen, elixir-format
|
||||||
msgid "Welcome to %{name}!"
|
msgid "Welcome to %{name}!"
|
||||||
msgstr "Willkommen %{name}!"
|
msgstr "Willkommen %{name}!"
|
||||||
|
|
||||||
#, elixir-autogen, elixir-format
|
|
||||||
#: lib/cannery_web/templates/email/confirm_email.txt.eex:4
|
#: lib/cannery_web/templates/email/confirm_email.txt.eex:4
|
||||||
|
#, elixir-autogen, elixir-format
|
||||||
msgid "Welcome to %{name}%!"
|
msgid "Welcome to %{name}%!"
|
||||||
msgstr "Willkommen %{name}%!"
|
msgstr "Willkommen %{name}%!"
|
||||||
|
|
||||||
#, elixir-autogen, elixir-format
|
|
||||||
#: lib/cannery_web/templates/email/update_email.html.eex:8
|
#: lib/cannery_web/templates/email/update_email.html.eex:8
|
||||||
#: lib/cannery_web/templates/email/update_email.txt.eex:4
|
#: lib/cannery_web/templates/email/update_email.txt.eex:4
|
||||||
|
#, elixir-autogen, elixir-format
|
||||||
msgid "You can change your email by visiting the URL below:"
|
msgid "You can change your email by visiting the URL below:"
|
||||||
msgstr "Sie können Ihre Mailadresse unter folgender URL ändern:"
|
msgstr "Sie können Ihre Mailadresse unter folgender URL ändern:"
|
||||||
|
|
||||||
#, elixir-autogen, elixir-format
|
|
||||||
#: lib/cannery_web/templates/email/confirm_email.html.eex:14
|
#: lib/cannery_web/templates/email/confirm_email.html.eex:14
|
||||||
#: lib/cannery_web/templates/email/confirm_email.txt.eex:6
|
#: lib/cannery_web/templates/email/confirm_email.txt.eex:6
|
||||||
|
#, elixir-autogen, elixir-format
|
||||||
msgid "You can confirm your account by visiting the URL below:"
|
msgid "You can confirm your account by visiting the URL below:"
|
||||||
msgstr "Sie können Ihr Nutzerkonto unter folgender URL bestätigen:"
|
msgstr "Sie können Ihr Nutzerkonto unter folgender URL bestätigen:"
|
||||||
|
|
||||||
#, elixir-autogen, elixir-format
|
|
||||||
#: lib/cannery_web/templates/email/reset_password.html.eex:8
|
#: lib/cannery_web/templates/email/reset_password.html.eex:8
|
||||||
#: lib/cannery_web/templates/email/reset_password.txt.eex:4
|
#: lib/cannery_web/templates/email/reset_password.txt.eex:4
|
||||||
|
#, elixir-autogen, elixir-format
|
||||||
msgid "You can reset your password by visiting the URL below:"
|
msgid "You can reset your password by visiting the URL below:"
|
||||||
msgstr "Sie können ihr Passwort unter folgender URL zurücksetzen:"
|
msgstr "Sie können ihr Passwort unter folgender URL zurücksetzen:"
|
||||||
|
|
||||||
#, elixir-autogen, elixir-format
|
|
||||||
#: lib/cannery_web/templates/email/confirm_email.html.eex:22
|
#: lib/cannery_web/templates/email/confirm_email.html.eex:22
|
||||||
|
#, elixir-autogen, elixir-format
|
||||||
msgid "If you didn't create an account at %{name}, please ignore this."
|
msgid "If you didn't create an account at %{name}, please ignore this."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
"Falls SIe dieses Nutzerkonto unter %{name}, nicht erstellt haben, ignorieren "
|
"Falls SIe dieses Nutzerkonto unter %{name}, nicht erstellt haben, ignorieren "
|
||||||
"Sie diese Nachricht bitte."
|
"Sie diese Nachricht bitte."
|
||||||
|
|
||||||
#, elixir-autogen, elixir-format
|
|
||||||
#: lib/cannery_web/templates/email/reset_password.html.eex:16
|
#: lib/cannery_web/templates/email/reset_password.html.eex:16
|
||||||
#: lib/cannery_web/templates/email/update_email.html.eex:16
|
#: lib/cannery_web/templates/email/update_email.html.eex:16
|
||||||
|
#, elixir-autogen, elixir-format
|
||||||
msgid "If you didn't request this change from %{name}, please ignore this."
|
msgid "If you didn't request this change from %{name}, please ignore this."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
"Falls Sie die Änderung von %{name} nicht angefragt haben, ignorieren Sie "
|
"Falls Sie die Änderung von %{name} nicht angefragt haben, ignorieren Sie "
|
||||||
"diese Nachricht bitte."
|
"diese Nachricht bitte."
|
||||||
|
|
||||||
#, elixir-autogen, elixir-format
|
|
||||||
#: lib/cannery_web/templates/layout/email.txt.eex:9
|
#: lib/cannery_web/templates/layout/email.txt.eex:9
|
||||||
|
#, elixir-autogen, elixir-format
|
||||||
msgid "This email was sent from %{name} at %{url}, the self-hosted firearm tracker website."
|
msgid "This email was sent from %{name} at %{url}, the self-hosted firearm tracker website."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
"Diese Nachricht wurde von %{name} unter %{url} gesandt, einem selbst-"
|
"Diese Nachricht wurde von %{name} unter %{url} gesandt, einem selbst-"
|
||||||
"gehosteten Schusswaffenmanager."
|
"gehosteten Schusswaffenmanager."
|
||||||
|
|
||||||
#, elixir-autogen, elixir-format
|
|
||||||
#: lib/cannery_web/templates/layout/email.html.heex:13
|
#: lib/cannery_web/templates/layout/email.html.heex:13
|
||||||
|
#, elixir-autogen, elixir-format
|
||||||
msgid "This email was sent from %{name}, the self-hosted firearm tracker website."
|
msgid "This email was sent from %{name}, the self-hosted firearm tracker website."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
"Diese Nachricht wurde von %{name} gesandt, einem selbst-gehosteten "
|
"Diese Nachricht wurde von %{name} gesandt, einem selbst-gehosteten "
|
||||||
|
@ -23,181 +23,186 @@ msgstr ""
|
|||||||
## Run "mix gettext.extract" to bring this file up to
|
## Run "mix gettext.extract" to bring this file up to
|
||||||
## date. Leave "msgstr"s empty as changing them here has no
|
## date. Leave "msgstr"s empty as changing them here has no
|
||||||
## effect: edit them in PO (.po) files instead.
|
## effect: edit them in PO (.po) files instead.
|
||||||
#, elixir-autogen, elixir-format
|
|
||||||
#: lib/cannery/containers.ex:140
|
#: lib/cannery/containers.ex:140
|
||||||
|
#, elixir-autogen, elixir-format
|
||||||
msgid "Container must be empty before deleting"
|
msgid "Container must be empty before deleting"
|
||||||
msgstr "Behälter muss vor dem Löschen leer sein"
|
msgstr "Behälter muss vor dem Löschen leer sein"
|
||||||
|
|
||||||
#, elixir-autogen, elixir-format
|
#: lib/cannery_web/live/container_live/index.ex:88
|
||||||
#: lib/cannery_web/live/container_live/index.ex:69
|
|
||||||
#: lib/cannery_web/live/container_live/show.ex:71
|
#: lib/cannery_web/live/container_live/show.ex:71
|
||||||
|
#, elixir-autogen, elixir-format
|
||||||
msgid "Could not delete %{name}: %{error}"
|
msgid "Could not delete %{name}: %{error}"
|
||||||
msgstr "Konnte %{name} nicht löschen: %{error}"
|
msgstr "Konnte %{name} nicht löschen: %{error}"
|
||||||
|
|
||||||
|
#: lib/cannery_web/live/container_live/index.ex:76
|
||||||
#, elixir-autogen, elixir-format
|
#, elixir-autogen, elixir-format
|
||||||
#: lib/cannery_web/live/container_live/index.ex:57
|
|
||||||
msgid "Could not find that container"
|
msgid "Could not find that container"
|
||||||
msgstr "Konnte Behälter nicht finden"
|
msgstr "Konnte Behälter nicht finden"
|
||||||
|
|
||||||
#, elixir-autogen, elixir-format
|
|
||||||
#: lib/cannery_web/controllers/user_settings_controller.ex:84
|
#: lib/cannery_web/controllers/user_settings_controller.ex:84
|
||||||
|
#, elixir-autogen, elixir-format
|
||||||
msgid "Email change link is invalid or it has expired."
|
msgid "Email change link is invalid or it has expired."
|
||||||
msgstr "Mailadressenänderungs-Link ist ungültig oder abgelaufen."
|
msgstr "Mailadressenänderungs-Link ist ungültig oder abgelaufen."
|
||||||
|
|
||||||
#, elixir-autogen, elixir-format
|
|
||||||
#: lib/cannery_web/templates/error/error.html.heex:8
|
#: lib/cannery_web/templates/error/error.html.heex:8
|
||||||
|
#, elixir-autogen, elixir-format
|
||||||
msgid "Error"
|
msgid "Error"
|
||||||
msgstr "Fehler"
|
msgstr "Fehler"
|
||||||
|
|
||||||
#, elixir-autogen, elixir-format
|
|
||||||
#: lib/cannery_web/templates/error/error.html.heex:28
|
#: lib/cannery_web/templates/error/error.html.heex:28
|
||||||
|
#, elixir-autogen, elixir-format
|
||||||
msgid "Go back home"
|
msgid "Go back home"
|
||||||
msgstr "Zur Hauptseite zurückkehren"
|
msgstr "Zur Hauptseite zurückkehren"
|
||||||
|
|
||||||
#, elixir-autogen, elixir-format
|
|
||||||
#: lib/cannery_web/views/error_view.ex:11
|
#: lib/cannery_web/views/error_view.ex:11
|
||||||
|
#, elixir-autogen, elixir-format
|
||||||
msgid "Internal Server Error"
|
msgid "Internal Server Error"
|
||||||
msgstr "Interner Serverfehler"
|
msgstr "Interner Serverfehler"
|
||||||
|
|
||||||
#, elixir-autogen, elixir-format
|
|
||||||
#: lib/cannery_web/controllers/user_session_controller.ex:17
|
#: lib/cannery_web/controllers/user_session_controller.ex:17
|
||||||
|
#, elixir-autogen, elixir-format
|
||||||
msgid "Invalid email or password"
|
msgid "Invalid email or password"
|
||||||
msgstr "Ungültige Mailadresse oder Passwort"
|
msgstr "Ungültige Mailadresse oder Passwort"
|
||||||
|
|
||||||
#, elixir-autogen, elixir-format
|
|
||||||
#: lib/cannery_web/views/error_view.ex:9
|
#: lib/cannery_web/views/error_view.ex:9
|
||||||
|
#, elixir-autogen, elixir-format
|
||||||
msgid "Not found"
|
msgid "Not found"
|
||||||
msgstr "Nicht gefunden"
|
msgstr "Nicht gefunden"
|
||||||
|
|
||||||
#, elixir-autogen, elixir-format
|
|
||||||
#: lib/cannery_web/templates/user_registration/new.html.heex:16
|
#: lib/cannery_web/templates/user_registration/new.html.heex:16
|
||||||
#: lib/cannery_web/templates/user_reset_password/edit.html.heex:16
|
#: lib/cannery_web/templates/user_reset_password/edit.html.heex:16
|
||||||
#: lib/cannery_web/templates/user_settings/edit.html.heex:21
|
#: lib/cannery_web/templates/user_settings/edit.html.heex:21
|
||||||
#: lib/cannery_web/templates/user_settings/edit.html.heex:64
|
#: lib/cannery_web/templates/user_settings/edit.html.heex:64
|
||||||
#: lib/cannery_web/templates/user_settings/edit.html.heex:119
|
#: lib/cannery_web/templates/user_settings/edit.html.heex:119
|
||||||
|
#, elixir-autogen, elixir-format
|
||||||
msgid "Oops, something went wrong! Please check the errors below."
|
msgid "Oops, something went wrong! Please check the errors below."
|
||||||
msgstr "Oops, etwas ist schiefgegangen. Bitte beachten Sie den Fehler unten."
|
msgstr "Oops, etwas ist schiefgegangen. Bitte beachten Sie den Fehler unten."
|
||||||
|
|
||||||
#, elixir-autogen, elixir-format
|
|
||||||
#: lib/cannery_web/controllers/user_reset_password_controller.ex:63
|
#: lib/cannery_web/controllers/user_reset_password_controller.ex:63
|
||||||
|
#, elixir-autogen, elixir-format
|
||||||
msgid "Reset password link is invalid or it has expired."
|
msgid "Reset password link is invalid or it has expired."
|
||||||
msgstr "Link zum Passwort zurücksetzen ist ungültig oder abgelaufen."
|
msgstr "Link zum Passwort zurücksetzen ist ungültig oder abgelaufen."
|
||||||
|
|
||||||
#, elixir-autogen, elixir-format
|
|
||||||
#: lib/cannery_web/controllers/user_registration_controller.ex:25
|
#: lib/cannery_web/controllers/user_registration_controller.ex:25
|
||||||
#: lib/cannery_web/controllers/user_registration_controller.ex:56
|
#: lib/cannery_web/controllers/user_registration_controller.ex:56
|
||||||
|
#, elixir-autogen, elixir-format
|
||||||
msgid "Sorry, public registration is disabled"
|
msgid "Sorry, public registration is disabled"
|
||||||
msgstr "Entschuldigung, aber öffentliche Registrierung ist deaktiviert"
|
msgstr "Entschuldigung, aber öffentliche Registrierung ist deaktiviert"
|
||||||
|
|
||||||
#, elixir-autogen, elixir-format
|
|
||||||
#: lib/cannery_web/controllers/user_registration_controller.ex:15
|
#: lib/cannery_web/controllers/user_registration_controller.ex:15
|
||||||
#: lib/cannery_web/controllers/user_registration_controller.ex:46
|
#: lib/cannery_web/controllers/user_registration_controller.ex:46
|
||||||
|
#, elixir-autogen, elixir-format
|
||||||
msgid "Sorry, this invite was not found or expired"
|
msgid "Sorry, this invite was not found or expired"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
"Entschuldigung, aber diese Einladung wurde nicht gefunden oder ist abgelaufen"
|
"Entschuldigung, aber diese Einladung wurde nicht gefunden oder ist abgelaufen"
|
||||||
|
|
||||||
#, elixir-autogen, elixir-format
|
|
||||||
#: lib/cannery_web/controllers/user_settings_controller.ex:99
|
#: lib/cannery_web/controllers/user_settings_controller.ex:99
|
||||||
|
#, elixir-autogen, elixir-format
|
||||||
msgid "Unable to delete user"
|
msgid "Unable to delete user"
|
||||||
msgstr "Dieser Nutzer konnte nicht gelöscht werden"
|
msgstr "Dieser Nutzer konnte nicht gelöscht werden"
|
||||||
|
|
||||||
#, elixir-autogen, elixir-format
|
|
||||||
#: lib/cannery_web/views/error_view.ex:10
|
#: lib/cannery_web/views/error_view.ex:10
|
||||||
|
#, elixir-autogen, elixir-format
|
||||||
msgid "Unauthorized"
|
msgid "Unauthorized"
|
||||||
msgstr "Unbefugt"
|
msgstr "Unbefugt"
|
||||||
|
|
||||||
#, elixir-autogen, elixir-format
|
|
||||||
#: lib/cannery_web/controllers/user_confirmation_controller.ex:54
|
#: lib/cannery_web/controllers/user_confirmation_controller.ex:54
|
||||||
|
#, elixir-autogen, elixir-format
|
||||||
msgid "User confirmation link is invalid or it has expired."
|
msgid "User confirmation link is invalid or it has expired."
|
||||||
msgstr "Nutzerkonto Bestätigungslink ist ungültig oder abgelaufen."
|
msgstr "Nutzerkonto Bestätigungslink ist ungültig oder abgelaufen."
|
||||||
|
|
||||||
#, elixir-autogen, elixir-format
|
|
||||||
#: lib/cannery_web/live/invite_live/index.ex:18
|
#: lib/cannery_web/live/invite_live/index.ex:18
|
||||||
|
#, elixir-autogen, elixir-format
|
||||||
msgid "You are not authorized to view this page"
|
msgid "You are not authorized to view this page"
|
||||||
msgstr "Sie sind nicht berechtigt, diese Seite aufzurufen"
|
msgstr "Sie sind nicht berechtigt, diese Seite aufzurufen"
|
||||||
|
|
||||||
#, elixir-autogen, elixir-format
|
|
||||||
#: lib/cannery_web/controllers/user_auth.ex:177
|
#: lib/cannery_web/controllers/user_auth.ex:177
|
||||||
|
#, elixir-autogen, elixir-format
|
||||||
msgid "You are not authorized to view this page."
|
msgid "You are not authorized to view this page."
|
||||||
msgstr "Sie sind nicht berechtigt, diese Seite aufzurufen."
|
msgstr "Sie sind nicht berechtigt, diese Seite aufzurufen."
|
||||||
|
|
||||||
|
#: lib/cannery/accounts/user.ex:138
|
||||||
#, elixir-autogen, elixir-format
|
#, elixir-autogen, elixir-format
|
||||||
#: lib/cannery/accounts/user.ex:130
|
|
||||||
msgid "did not change"
|
msgid "did not change"
|
||||||
msgstr "hat sich nicht geändert"
|
msgstr "hat sich nicht geändert"
|
||||||
|
|
||||||
|
#: lib/cannery/accounts/user.ex:159
|
||||||
#, elixir-autogen, elixir-format
|
#, elixir-autogen, elixir-format
|
||||||
#: lib/cannery/accounts/user.ex:151
|
|
||||||
msgid "does not match password"
|
msgid "does not match password"
|
||||||
msgstr "Passwort stimmt nicht überein"
|
msgstr "Passwort stimmt nicht überein"
|
||||||
|
|
||||||
|
#: lib/cannery/accounts/user.ex:196
|
||||||
#, elixir-autogen, elixir-format
|
#, elixir-autogen, elixir-format
|
||||||
#: lib/cannery/accounts/user.ex:188
|
|
||||||
msgid "is not valid"
|
msgid "is not valid"
|
||||||
msgstr "ist nicht gültig"
|
msgstr "ist nicht gültig"
|
||||||
|
|
||||||
|
#: lib/cannery/accounts/user.ex:92
|
||||||
#, elixir-autogen, elixir-format
|
#, elixir-autogen, elixir-format
|
||||||
#: lib/cannery/accounts/user.ex:84
|
|
||||||
msgid "must have the @ sign and no spaces"
|
msgid "must have the @ sign and no spaces"
|
||||||
msgstr "Muss ein @ Zeichen und keine Leerzeichen haben"
|
msgstr "Muss ein @ Zeichen und keine Leerzeichen haben"
|
||||||
|
|
||||||
#, elixir-autogen, elixir-format
|
|
||||||
#: lib/cannery/tags.ex:40
|
#: lib/cannery/tags.ex:40
|
||||||
|
#, elixir-autogen, elixir-format
|
||||||
msgid "Tag not found"
|
msgid "Tag not found"
|
||||||
msgstr "Tag nicht gefunden"
|
msgstr "Tag nicht gefunden"
|
||||||
|
|
||||||
#, elixir-autogen, elixir-format
|
|
||||||
#: lib/cannery_web/live/container_live/edit_tags_component.ex:30
|
#: lib/cannery_web/live/container_live/edit_tags_component.ex:30
|
||||||
|
#, elixir-autogen, elixir-format
|
||||||
msgid "Tag could not be added"
|
msgid "Tag could not be added"
|
||||||
msgstr "Tag konnte nicht hinzugefügt werden"
|
msgstr "Tag konnte nicht hinzugefügt werden"
|
||||||
|
|
||||||
|
#: lib/cannery/activity_log/shot_group.ex:123
|
||||||
#, elixir-autogen, elixir-format
|
#, elixir-autogen, elixir-format
|
||||||
#: 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"
|
||||||
|
|
||||||
|
#: lib/cannery/activity_log/shot_group.ex:82
|
||||||
|
#: lib/cannery/activity_log/shot_group.ex:119
|
||||||
#, elixir-autogen, elixir-format
|
#, elixir-autogen, elixir-format
|
||||||
#: lib/cannery/activity_log/shot_group.ex:74
|
|
||||||
#: 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"
|
||||||
|
|
||||||
#, elixir-autogen, elixir-format
|
|
||||||
#: lib/cannery_web/controllers/user_auth.ex:39
|
#: lib/cannery_web/controllers/user_auth.ex:39
|
||||||
#: lib/cannery_web/controllers/user_auth.ex:161
|
#: lib/cannery_web/controllers/user_auth.ex:161
|
||||||
|
#, elixir-autogen, elixir-format
|
||||||
msgid "You must confirm your account and log in to access this page."
|
msgid "You must confirm your account and log in to access this page."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
"Sie müssen ihr Nutzerkonto bestätigen und einloggen, um diese Seite "
|
"Sie müssen ihr Nutzerkonto bestätigen und einloggen, um diese Seite "
|
||||||
"anzuzeigen."
|
"anzuzeigen."
|
||||||
|
|
||||||
#, elixir-autogen, elixir-format
|
|
||||||
#: lib/cannery_web/live/container_live/edit_tags_component.ex:52
|
#: lib/cannery_web/live/container_live/edit_tags_component.ex:52
|
||||||
|
#, elixir-autogen, elixir-format
|
||||||
msgid "Tag could not be removed"
|
msgid "Tag could not be removed"
|
||||||
msgstr "Tag konnte nicht gelöscht werden"
|
msgstr "Tag konnte nicht gelöscht werden"
|
||||||
|
|
||||||
|
#: lib/cannery_web/live/ammo_group_live/form_component.ex:157
|
||||||
#, elixir-autogen, elixir-format
|
#, elixir-autogen, elixir-format
|
||||||
#: 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"
|
||||||
|
|
||||||
|
#: lib/cannery_web/live/ammo_group_live/form_component.ex:142
|
||||||
#, elixir-autogen, elixir-format
|
#, elixir-autogen, elixir-format
|
||||||
#: 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}"
|
||||||
|
|
||||||
|
#: lib/cannery/ammo.ex:587
|
||||||
#, elixir-autogen, elixir-format
|
#, elixir-autogen, elixir-format
|
||||||
#: lib/cannery/ammo.ex:524
|
|
||||||
msgid "Invalid multiplier"
|
msgid "Invalid multiplier"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
|
#: lib/cannery/ammo/ammo_group.ex:94
|
||||||
#, elixir-autogen, elixir-format
|
#, elixir-autogen, elixir-format
|
||||||
#: lib/cannery/ammo/ammo_group.ex:84
|
|
||||||
msgid "Please select an ammo type and container"
|
msgid "Please select an ammo type and container"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
|
#: lib/cannery/activity_log/shot_group.ex:77
|
||||||
#, elixir-autogen, elixir-format
|
#, elixir-autogen, elixir-format
|
||||||
#: lib/cannery/activity_log/shot_group.ex:69
|
|
||||||
msgid "Please select a valid user and ammo group"
|
msgid "Please select a valid user and ammo group"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
|
#: lib/cannery_web/live/range_live/index.html.heex:67
|
||||||
|
#, elixir-autogen, elixir-format
|
||||||
|
msgid "Your browser does not support the canvas element."
|
||||||
|
msgstr ""
|
||||||
|
@ -23,277 +23,278 @@ msgstr ""
|
|||||||
## Run "mix gettext.extract" to bring this file up to
|
## Run "mix gettext.extract" to bring this file up to
|
||||||
## date. Leave "msgstr"s empty as changing them here has no
|
## date. Leave "msgstr"s empty as changing them here has no
|
||||||
## effect: edit them in PO (.po) files instead.
|
## effect: edit them in PO (.po) files instead.
|
||||||
#, elixir-autogen, elixir-format
|
#: lib/cannery_web/live/ammo_type_live/form_component.ex:86
|
||||||
#: lib/cannery_web/live/ammo_type_live/form_component.ex:85
|
#: lib/cannery_web/live/container_live/form_component.ex:89
|
||||||
#: lib/cannery_web/live/container_live/form_component.ex:85
|
|
||||||
#: lib/cannery_web/live/invite_live/form_component.ex:80
|
#: lib/cannery_web/live/invite_live/form_component.ex:80
|
||||||
#: lib/cannery_web/live/tag_live/form_component.ex:126
|
#: lib/cannery_web/live/tag_live/form_component.ex:126
|
||||||
|
#, elixir-autogen, elixir-format
|
||||||
msgid "%{name} created successfully"
|
msgid "%{name} created successfully"
|
||||||
msgstr "%{name} erfolgreich erstellt"
|
msgstr "%{name} erfolgreich erstellt"
|
||||||
|
|
||||||
#, elixir-autogen, elixir-format
|
#: lib/cannery_web/live/ammo_type_live/index.ex:47
|
||||||
#: lib/cannery_web/live/ammo_type_live/index.ex:41
|
|
||||||
#: lib/cannery_web/live/ammo_type_live/show.ex:28
|
#: lib/cannery_web/live/ammo_type_live/show.ex:28
|
||||||
#: lib/cannery_web/live/invite_live/index.ex:53
|
#: lib/cannery_web/live/invite_live/index.ex:53
|
||||||
#: lib/cannery_web/live/invite_live/index.ex:133
|
#: lib/cannery_web/live/invite_live/index.ex:133
|
||||||
#: lib/cannery_web/live/tag_live/index.ex:38
|
#: lib/cannery_web/live/tag_live/index.ex:38
|
||||||
|
#, elixir-autogen, elixir-format
|
||||||
msgid "%{name} deleted succesfully"
|
msgid "%{name} deleted succesfully"
|
||||||
msgstr "%{name} erfolgreich gelöscht"
|
msgstr "%{name} erfolgreich gelöscht"
|
||||||
|
|
||||||
#, elixir-autogen, elixir-format
|
|
||||||
#: lib/cannery_web/live/invite_live/index.ex:109
|
#: lib/cannery_web/live/invite_live/index.ex:109
|
||||||
|
#, elixir-autogen, elixir-format
|
||||||
msgid "%{name} disabled succesfully"
|
msgid "%{name} disabled succesfully"
|
||||||
msgstr "%{name} erfolgreich deaktiviert"
|
msgstr "%{name} erfolgreich deaktiviert"
|
||||||
|
|
||||||
#, elixir-autogen, elixir-format
|
|
||||||
#: lib/cannery_web/live/invite_live/index.ex:87
|
#: lib/cannery_web/live/invite_live/index.ex:87
|
||||||
|
#, elixir-autogen, elixir-format
|
||||||
msgid "%{name} enabled succesfully"
|
msgid "%{name} enabled succesfully"
|
||||||
msgstr "%{name} erfolgreich aktiviert"
|
msgstr "%{name} erfolgreich aktiviert"
|
||||||
|
|
||||||
#, elixir-autogen, elixir-format
|
#: lib/cannery_web/live/container_live/index.ex:81
|
||||||
#: lib/cannery_web/live/container_live/index.ex:62
|
|
||||||
#: lib/cannery_web/live/container_live/show.ex:61
|
#: lib/cannery_web/live/container_live/show.ex:61
|
||||||
|
#, elixir-autogen, elixir-format
|
||||||
msgid "%{name} has been deleted"
|
msgid "%{name} has been deleted"
|
||||||
msgstr "%{name} wurde gelöscht"
|
msgstr "%{name} wurde gelöscht"
|
||||||
|
|
||||||
#, elixir-autogen, elixir-format
|
|
||||||
#: lib/cannery_web/live/invite_live/index.ex:67
|
#: lib/cannery_web/live/invite_live/index.ex:67
|
||||||
|
#, elixir-autogen, elixir-format
|
||||||
msgid "%{name} updated succesfully"
|
msgid "%{name} updated succesfully"
|
||||||
msgstr "%{name} erfolgreich aktualisiert"
|
msgstr "%{name} erfolgreich aktualisiert"
|
||||||
|
|
||||||
#, elixir-autogen, elixir-format
|
|
||||||
#: lib/cannery_web/live/ammo_type_live/form_component.ex:67
|
#: lib/cannery_web/live/ammo_type_live/form_component.ex:67
|
||||||
#: lib/cannery_web/live/container_live/form_component.ex:67
|
#: lib/cannery_web/live/container_live/form_component.ex:70
|
||||||
#: lib/cannery_web/live/invite_live/form_component.ex:62
|
#: lib/cannery_web/live/invite_live/form_component.ex:62
|
||||||
#: lib/cannery_web/live/tag_live/form_component.ex:108
|
#: lib/cannery_web/live/tag_live/form_component.ex:108
|
||||||
|
#, elixir-autogen, elixir-format
|
||||||
msgid "%{name} updated successfully"
|
msgid "%{name} updated successfully"
|
||||||
msgstr "%{name} erfolgreich aktualisiert"
|
msgstr "%{name} erfolgreich aktualisiert"
|
||||||
|
|
||||||
#, elixir-autogen, elixir-format
|
|
||||||
#: lib/cannery_web/controllers/user_settings_controller.ex:29
|
#: lib/cannery_web/controllers/user_settings_controller.ex:29
|
||||||
|
#, elixir-autogen, elixir-format
|
||||||
msgid "A link to confirm your email change has been sent to the new address."
|
msgid "A link to confirm your email change has been sent to the new address."
|
||||||
msgstr "Eine Mail zum Bestätigen ihre Mailadresse wurde Ihnen zugesandt."
|
msgstr "Eine Mail zum Bestätigen ihre Mailadresse wurde Ihnen zugesandt."
|
||||||
|
|
||||||
|
#: lib/cannery_web/live/ammo_group_live/index.ex:64
|
||||||
#, elixir-autogen, elixir-format
|
#, elixir-autogen, elixir-format
|
||||||
#: lib/cannery_web/live/ammo_group_live/index.ex:56
|
|
||||||
msgid "Ammo group deleted succesfully"
|
msgid "Ammo group deleted succesfully"
|
||||||
msgstr "Munitionsgruppe erfolgreich gelöscht"
|
msgstr "Munitionsgruppe erfolgreich gelöscht"
|
||||||
|
|
||||||
|
#: lib/cannery_web/live/invite_live/index.html.heex:103
|
||||||
|
#: lib/cannery_web/live/invite_live/index.html.heex:133
|
||||||
#, 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:131
|
|
||||||
msgid "Are you sure you want to delete %{email}? This action is permanent!"
|
msgid "Are you sure you want to delete %{email}? This action is permanent!"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
"Sind Sie sicher, dass sie %{email} löschen möchten? Dies kann nicht "
|
"Sind Sie sicher, dass sie %{email} löschen möchten? Dies kann nicht "
|
||||||
"zurückgenommen werden!"
|
"zurückgenommen werden!"
|
||||||
|
|
||||||
|
#: lib/cannery_web/live/container_live/index.ex:223
|
||||||
|
#: lib/cannery_web/live/container_live/index.html.heex:73
|
||||||
|
#: lib/cannery_web/live/container_live/show.html.heex:51
|
||||||
|
#: lib/cannery_web/live/tag_live/index.html.heex:39
|
||||||
#, elixir-autogen, elixir-format
|
#, elixir-autogen, elixir-format
|
||||||
#: lib/cannery_web/live/container_live/index.html.heex:46
|
|
||||||
#: lib/cannery_web/live/container_live/show.html.heex:49
|
|
||||||
#: 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?"
|
||||||
|
|
||||||
#, elixir-autogen, elixir-format
|
|
||||||
#: lib/cannery_web/live/invite_live/index.html.heex:49
|
#: lib/cannery_web/live/invite_live/index.html.heex:49
|
||||||
|
#, elixir-autogen, elixir-format
|
||||||
msgid "Are you sure you want to delete the invite for %{name}?"
|
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?"
|
||||||
|
|
||||||
|
#: lib/cannery_web/live/ammo_group_live/index.ex:242
|
||||||
|
#: lib/cannery_web/live/ammo_group_live/show.html.heex:75
|
||||||
#, elixir-autogen, elixir-format
|
#, elixir-autogen, elixir-format
|
||||||
#: lib/cannery_web/live/ammo_group_live/index.ex:193
|
|
||||||
#: lib/cannery_web/live/ammo_group_live/show.html.heex:71
|
|
||||||
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?"
|
||||||
|
|
||||||
|
#: lib/cannery_web/templates/user_settings/edit.html.heex:155
|
||||||
#, elixir-autogen, elixir-format
|
#, elixir-autogen, elixir-format
|
||||||
#: lib/cannery_web/templates/user_settings/edit.html.heex:146
|
|
||||||
msgid "Are you sure you want to delete your account?"
|
msgid "Are you sure you want to delete your account?"
|
||||||
msgstr "Sind Sie sicher, dass sie Ihren Account löschen möchten?"
|
msgstr "Sind Sie sicher, dass sie Ihren Account löschen möchten?"
|
||||||
|
|
||||||
|
#: lib/cannery_web/components/topbar.ex:106
|
||||||
#, elixir-autogen, elixir-format
|
#, elixir-autogen, elixir-format
|
||||||
#: 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?"
|
||||||
|
|
||||||
|
#: lib/cannery_web/live/invite_live/index.html.heex:75
|
||||||
#, elixir-autogen, elixir-format
|
#, elixir-autogen, elixir-format
|
||||||
#: lib/cannery_web/live/invite_live/index.html.heex:74
|
|
||||||
msgid "Are you sure you want to make %{name} unlimited?"
|
msgid "Are you sure you want to make %{name} unlimited?"
|
||||||
msgstr "Sind Sie sicher, dass sie %{name} auf unbegrenzt setzen möchten?"
|
msgstr "Sind Sie sicher, dass sie %{name} auf unbegrenzt setzen möchten?"
|
||||||
|
|
||||||
#, elixir-autogen, elixir-format
|
|
||||||
#: lib/cannery_web/controllers/user_settings_controller.ex:77
|
#: lib/cannery_web/controllers/user_settings_controller.ex:77
|
||||||
|
#, elixir-autogen, elixir-format
|
||||||
msgid "Email changed successfully."
|
msgid "Email changed successfully."
|
||||||
msgstr "Mailadresse erfolgreich geändert."
|
msgstr "Mailadresse erfolgreich geändert."
|
||||||
|
|
||||||
#, elixir-autogen, elixir-format
|
|
||||||
#: lib/cannery_web/controllers/user_confirmation_controller.ex:23
|
#: lib/cannery_web/controllers/user_confirmation_controller.ex:23
|
||||||
|
#, elixir-autogen, elixir-format
|
||||||
msgid "If your email is in our system and it has not been confirmed yet, you will receive an email with instructions shortly."
|
msgid "If your email is in our system and it has not been confirmed yet, you will receive an email with instructions shortly."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
"Falls Ihre Mailadresse bereits in unserer Datenbank ist und noch nicht "
|
"Falls Ihre Mailadresse bereits in unserer Datenbank ist und noch nicht "
|
||||||
"bestätigt wurde, erhalten Sie gleich eine Mail mit Anweisungen."
|
"bestätigt wurde, erhalten Sie gleich eine Mail mit Anweisungen."
|
||||||
|
|
||||||
#, elixir-autogen, elixir-format
|
|
||||||
#: lib/cannery_web/controllers/user_reset_password_controller.ex:24
|
#: lib/cannery_web/controllers/user_reset_password_controller.ex:24
|
||||||
|
#, elixir-autogen, elixir-format
|
||||||
msgid "If your email is in our system, you will receive instructions to reset your password shortly."
|
msgid "If your email is in our system, you will receive instructions to reset your password shortly."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
"Falls Ihre Mailadresse bereits in unserer Datenbank ist, erhalten Sie gleich "
|
"Falls Ihre Mailadresse bereits in unserer Datenbank ist, erhalten Sie gleich "
|
||||||
"eine Mail mit Anweisungen zum Ändern ihres Passworts."
|
"eine Mail mit Anweisungen zum Ändern ihres Passworts."
|
||||||
|
|
||||||
#, elixir-autogen, elixir-format
|
|
||||||
#: lib/cannery_web/controllers/user_session_controller.ex:23
|
#: lib/cannery_web/controllers/user_session_controller.ex:23
|
||||||
|
#, elixir-autogen, elixir-format
|
||||||
msgid "Logged out successfully."
|
msgid "Logged out successfully."
|
||||||
msgstr "Erfolgreich ausgeloggt."
|
msgstr "Erfolgreich ausgeloggt."
|
||||||
|
|
||||||
#, elixir-autogen, elixir-format
|
|
||||||
#: lib/cannery_web/controllers/user_reset_password_controller.ex:46
|
#: lib/cannery_web/controllers/user_reset_password_controller.ex:46
|
||||||
|
#, elixir-autogen, elixir-format
|
||||||
msgid "Password reset successfully."
|
msgid "Password reset successfully."
|
||||||
msgstr "Passwort erfolgreich zurückgesetzt."
|
msgstr "Passwort erfolgreich zurückgesetzt."
|
||||||
|
|
||||||
#, elixir-autogen, elixir-format
|
|
||||||
#: lib/cannery_web/controllers/user_settings_controller.ex:49
|
#: lib/cannery_web/controllers/user_settings_controller.ex:49
|
||||||
|
#, elixir-autogen, elixir-format
|
||||||
msgid "Password updated successfully."
|
msgid "Password updated successfully."
|
||||||
msgstr "Passwort erfolgreich geändert."
|
msgstr "Passwort erfolgreich geändert."
|
||||||
|
|
||||||
#, elixir-autogen, elixir-format
|
|
||||||
#: lib/cannery_web/controllers/user_registration_controller.ex:74
|
#: lib/cannery_web/controllers/user_registration_controller.ex:74
|
||||||
|
#, elixir-autogen, elixir-format
|
||||||
msgid "Please check your email to verify your account"
|
msgid "Please check your email to verify your account"
|
||||||
msgstr "Bitte überprüfen Sie ihre Mailbox und bestätigen Sie das Nutzerkonto"
|
msgstr "Bitte überprüfen Sie ihre Mailbox und bestätigen Sie das Nutzerkonto"
|
||||||
|
|
||||||
|
#: lib/cannery_web/live/home_live.ex:108
|
||||||
#, elixir-autogen, elixir-format
|
#, elixir-autogen, elixir-format
|
||||||
#: 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"
|
||||||
|
|
||||||
#, elixir-autogen, elixir-format
|
#: lib/cannery_web/components/add_shot_group_component.html.heex:55
|
||||||
#: lib/cannery_web/components/add_shot_group_component.html.heex:48
|
|
||||||
#: 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:33
|
#: 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:93
|
#: lib/cannery_web/live/tag_live/form_component.ex:93
|
||||||
|
#, elixir-autogen, elixir-format
|
||||||
msgid "Saving..."
|
msgid "Saving..."
|
||||||
msgstr "Speichere..."
|
msgstr "Speichere..."
|
||||||
|
|
||||||
#, elixir-autogen, elixir-format
|
|
||||||
#: lib/cannery_web/controllers/user_settings_controller.ex:95
|
#: lib/cannery_web/controllers/user_settings_controller.ex:95
|
||||||
|
#, elixir-autogen, elixir-format
|
||||||
msgid "Your account has been deleted"
|
msgid "Your account has been deleted"
|
||||||
msgstr "Ihr Nutzerkonto wurde gelöscht"
|
msgstr "Ihr Nutzerkonto wurde gelöscht"
|
||||||
|
|
||||||
#, elixir-autogen, elixir-format
|
|
||||||
#: lib/cannery_web/live/container_live/edit_tags_component.html.heex:16
|
#: lib/cannery_web/live/container_live/edit_tags_component.html.heex:16
|
||||||
|
#, elixir-autogen, elixir-format
|
||||||
msgid "Are you sure you want to remove the %{tag_name} tag from %{container_name}?"
|
msgid "Are you sure you want to remove the %{tag_name} tag from %{container_name}?"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
"Sind Sie sicher, dass sie %{tag_name} Tag von %{container_name} entfernen "
|
"Sind Sie sicher, dass sie %{tag_name} Tag von %{container_name} entfernen "
|
||||||
"wollen?"
|
"wollen?"
|
||||||
|
|
||||||
#, elixir-autogen, elixir-format
|
|
||||||
#: lib/cannery_web/live/container_live/edit_tags_component.ex:36
|
#: lib/cannery_web/live/container_live/edit_tags_component.ex:36
|
||||||
|
#, elixir-autogen, elixir-format
|
||||||
msgid "%{name} added successfully"
|
msgid "%{name} added successfully"
|
||||||
msgstr "%{name} erfolgreich hinzugefügt"
|
msgstr "%{name} erfolgreich hinzugefügt"
|
||||||
|
|
||||||
#, elixir-autogen, elixir-format
|
|
||||||
#: lib/cannery_web/live/container_live/show.ex:37
|
#: lib/cannery_web/live/container_live/show.ex:37
|
||||||
|
#, elixir-autogen, elixir-format
|
||||||
msgid "%{tag_name} has been removed from %{container_name}"
|
msgid "%{tag_name} has been removed from %{container_name}"
|
||||||
msgstr "%{tag_name} wurde von %{container_name} entfernt"
|
msgstr "%{tag_name} wurde von %{container_name} entfernt"
|
||||||
|
|
||||||
|
#: lib/cannery_web/live/container_live/edit_tags_component.html.heex:55
|
||||||
#, elixir-autogen, elixir-format
|
#, elixir-autogen, elixir-format
|
||||||
#: lib/cannery_web/live/container_live/edit_tags_component.html.heex:54
|
|
||||||
msgid "Adding..."
|
msgid "Adding..."
|
||||||
msgstr "Füge hinzu..."
|
msgstr "Füge hinzu..."
|
||||||
|
|
||||||
#, elixir-autogen, elixir-format
|
|
||||||
#: lib/cannery_web/components/add_shot_group_component.ex:56
|
#: lib/cannery_web/components/add_shot_group_component.ex:56
|
||||||
|
#, elixir-autogen, elixir-format
|
||||||
msgid "Shots recorded successfully"
|
msgid "Shots recorded successfully"
|
||||||
msgstr "Schüsse erfolgreich dokumentiert"
|
msgstr "Schüsse erfolgreich dokumentiert"
|
||||||
|
|
||||||
|
#: lib/cannery_web/live/range_live/index.html.heex:27
|
||||||
#, elixir-autogen, elixir-format
|
#, elixir-autogen, elixir-format
|
||||||
#: lib/cannery_web/live/range_live/index.html.heex:29
|
|
||||||
msgid "Are you sure you want to unstage this ammo?"
|
msgid "Are you sure you want to unstage this ammo?"
|
||||||
msgstr "Sind sie sicher, dass Sie diese Munition demarkieren möchten?"
|
msgstr "Sind sie sicher, dass Sie diese Munition demarkieren möchten?"
|
||||||
|
|
||||||
|
#: lib/cannery_web/live/ammo_group_live/show.ex:132
|
||||||
|
#: lib/cannery_web/live/range_live/index.ex:184
|
||||||
#, elixir-autogen, elixir-format
|
#, elixir-autogen, elixir-format
|
||||||
#: lib/cannery_web/live/ammo_group_live/show.ex:130
|
|
||||||
#: lib/cannery_web/live/range_live/index.ex:128
|
|
||||||
msgid "Are you sure you want to delete this shot record?"
|
msgid "Are you sure you want to delete this shot record?"
|
||||||
msgstr "Sind sie sicher, dass sie die Schießkladde löschen möchten?"
|
msgstr "Sind sie sicher, dass sie die Schießkladde löschen möchten?"
|
||||||
|
|
||||||
#, elixir-autogen, elixir-format
|
|
||||||
#: lib/cannery_web/live/ammo_group_live/show.ex:78
|
#: lib/cannery_web/live/ammo_group_live/show.ex:78
|
||||||
#: lib/cannery_web/live/range_live/index.ex:54
|
#: lib/cannery_web/live/range_live/index.ex:54
|
||||||
|
#, elixir-autogen, elixir-format
|
||||||
msgid "Shot records deleted succesfully"
|
msgid "Shot records deleted succesfully"
|
||||||
msgstr "Schießkladde erfolgreich gelöscht"
|
msgstr "Schießkladde erfolgreich gelöscht"
|
||||||
|
|
||||||
#, elixir-autogen, elixir-format
|
|
||||||
#: lib/cannery_web/live/range_live/form_component.ex:55
|
#: lib/cannery_web/live/range_live/form_component.ex:55
|
||||||
|
#, elixir-autogen, elixir-format
|
||||||
msgid "Shot records updated successfully"
|
msgid "Shot records updated successfully"
|
||||||
msgstr "Schießkladde erfolgreich aktualisiert"
|
msgstr "Schießkladde erfolgreich aktualisiert"
|
||||||
|
|
||||||
#, elixir-autogen, elixir-format
|
|
||||||
#: lib/cannery_web/controllers/user_confirmation_controller.ex:38
|
#: lib/cannery_web/controllers/user_confirmation_controller.ex:38
|
||||||
|
#, elixir-autogen, elixir-format
|
||||||
msgid "%{email} confirmed successfully."
|
msgid "%{email} confirmed successfully."
|
||||||
msgstr "%{email} erfolgreich bestätigt."
|
msgstr "%{email} erfolgreich bestätigt."
|
||||||
|
|
||||||
#, elixir-autogen, elixir-format
|
|
||||||
#: lib/cannery_web/components/move_ammo_group_component.ex:53
|
#: lib/cannery_web/components/move_ammo_group_component.ex:53
|
||||||
|
#, elixir-autogen, elixir-format
|
||||||
msgid "Ammo moved to %{name} successfully"
|
msgid "Ammo moved to %{name} successfully"
|
||||||
msgstr "Munition erfolgreich zu %{name} verschoben"
|
msgstr "Munition erfolgreich zu %{name} verschoben"
|
||||||
|
|
||||||
#, elixir-autogen, elixir-format
|
|
||||||
#: lib/cannery_web/live/invite_live/index.ex:121
|
#: lib/cannery_web/live/invite_live/index.ex:121
|
||||||
|
#, elixir-autogen, elixir-format
|
||||||
msgid "Copied to clipboard"
|
msgid "Copied to clipboard"
|
||||||
msgstr "Der Zwischenablage hinzugefügt"
|
msgstr "Der Zwischenablage hinzugefügt"
|
||||||
|
|
||||||
#, elixir-autogen, elixir-format
|
|
||||||
#: lib/cannery_web/live/container_live/edit_tags_component.ex:58
|
#: lib/cannery_web/live/container_live/edit_tags_component.ex:58
|
||||||
|
#, elixir-autogen, elixir-format
|
||||||
msgid "%{name} removed successfully"
|
msgid "%{name} removed successfully"
|
||||||
msgstr "%{name} erfolgreich entfernt"
|
msgstr "%{name} erfolgreich entfernt"
|
||||||
|
|
||||||
#, elixir-autogen, elixir-format
|
|
||||||
#: lib/cannery_web/live/ammo_group_live/index.html.heex:17
|
#: lib/cannery_web/live/ammo_group_live/index.html.heex:17
|
||||||
#: lib/cannery_web/live/ammo_group_live/index.html.heex:28
|
#: lib/cannery_web/live/ammo_group_live/index.html.heex:27
|
||||||
|
#, elixir-autogen, elixir-format
|
||||||
msgid "You'll need to"
|
msgid "You'll need to"
|
||||||
msgstr "Sie müssen"
|
msgstr "Sie müssen"
|
||||||
|
|
||||||
#, elixir-autogen, elixir-format
|
|
||||||
#: lib/cannery_web/live/ammo_group_live/form_component.html.heex:67
|
#: lib/cannery_web/live/ammo_group_live/form_component.html.heex:67
|
||||||
|
#, elixir-autogen, elixir-format
|
||||||
msgid "Creating..."
|
msgid "Creating..."
|
||||||
msgstr "Erstellen..."
|
msgstr "Erstellen..."
|
||||||
|
|
||||||
#, elixir-autogen, elixir-format
|
|
||||||
#: lib/cannery_web/templates/user_settings/edit.html.heex:136
|
#: lib/cannery_web/templates/user_settings/edit.html.heex:136
|
||||||
|
#, elixir-autogen, elixir-format
|
||||||
msgid "Are you sure you want to change your language?"
|
msgid "Are you sure you want to change your language?"
|
||||||
msgstr "Möchten Sie die Sprache wechseln?"
|
msgstr "Möchten Sie die Sprache wechseln?"
|
||||||
|
|
||||||
#, elixir-autogen, elixir-format
|
|
||||||
#: lib/cannery_web/controllers/user_settings_controller.ex:65
|
#: lib/cannery_web/controllers/user_settings_controller.ex:65
|
||||||
|
#, elixir-autogen, elixir-format
|
||||||
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
|
#: lib/cannery_web/live/ammo_group_live/show.ex:50
|
||||||
|
#, elixir-autogen, elixir-format, fuzzy
|
||||||
msgid "Ammo deleted succesfully"
|
msgid "Ammo deleted succesfully"
|
||||||
msgstr "Munitionsgruppe erfolgreich gelöscht"
|
msgstr "Munitionsgruppe erfolgreich gelöscht"
|
||||||
|
|
||||||
#, elixir-autogen, elixir-format, fuzzy
|
|
||||||
#: lib/cannery_web/live/range_live/index.ex:68
|
#: lib/cannery_web/live/range_live/index.ex:68
|
||||||
|
#, elixir-autogen, elixir-format, fuzzy
|
||||||
msgid "Ammo unstaged succesfully"
|
msgid "Ammo unstaged succesfully"
|
||||||
msgstr "Munition erfolgreich demarkiert"
|
msgstr "Munition erfolgreich demarkiert"
|
||||||
|
|
||||||
#, elixir-autogen, elixir-format, fuzzy
|
|
||||||
#: lib/cannery_web/live/ammo_group_live/form_component.ex:118
|
#: lib/cannery_web/live/ammo_group_live/form_component.ex:118
|
||||||
|
#, elixir-autogen, elixir-format, fuzzy
|
||||||
msgid "Ammo updated successfully"
|
msgid "Ammo updated successfully"
|
||||||
msgstr "Munitionsgruppe erfolgreich aktualisiert"
|
msgstr "Munitionsgruppe erfolgreich aktualisiert"
|
||||||
|
|
||||||
|
#: lib/cannery_web/live/ammo_group_live/form_component.ex:178
|
||||||
#, elixir-autogen, elixir-format, fuzzy
|
#, elixir-autogen, elixir-format, fuzzy
|
||||||
#: lib/cannery_web/live/ammo_group_live/form_component.ex:177
|
|
||||||
msgid "Ammo added successfully"
|
msgid "Ammo added successfully"
|
||||||
msgid_plural "Ammo added successfully"
|
msgid_plural "Ammo added successfully"
|
||||||
msgstr[0] "Munitionsgruppe erfolgreich aktualisiert"
|
msgstr[0] "Munitionsgruppe erfolgreich aktualisiert"
|
||||||
msgstr[1] "Munitionsgruppe erfolgreich aktualisiert"
|
msgstr[1] "Munitionsgruppe erfolgreich aktualisiert"
|
||||||
|
|
||||||
|
#: lib/cannery_web/live/ammo_type_live/index.ex:232
|
||||||
|
#: lib/cannery_web/live/ammo_type_live/show.html.heex:28
|
||||||
#, elixir-autogen, elixir-format, fuzzy
|
#, elixir-autogen, elixir-format, fuzzy
|
||||||
#: lib/cannery_web/live/ammo_type_live/index.ex:156
|
|
||||||
#: lib/cannery_web/live/ammo_type_live/show.html.heex:26
|
|
||||||
msgid "Are you sure you want to delete %{name}? This will delete all %{name} type ammo as well!"
|
msgid "Are you sure you want to delete %{name}? This will delete all %{name} type ammo as well!"
|
||||||
msgstr "Sind Sie sicher, dass sie %{name} löschen möchten?"
|
msgstr "Sind Sie sicher, dass sie %{name} löschen möchten?"
|
||||||
|
File diff suppressed because it is too large
Load Diff
@ -10,87 +10,87 @@
|
|||||||
msgid ""
|
msgid ""
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#, elixir-autogen, elixir-format
|
|
||||||
#: lib/cannery/accounts/email.ex:30
|
#: lib/cannery/accounts/email.ex:30
|
||||||
|
#, elixir-autogen, elixir-format
|
||||||
msgid "Confirm your %{name} account"
|
msgid "Confirm your %{name} account"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#, elixir-autogen, elixir-format
|
|
||||||
#: lib/cannery_web/templates/email/confirm_email.html.eex:3
|
#: lib/cannery_web/templates/email/confirm_email.html.eex:3
|
||||||
#: lib/cannery_web/templates/email/confirm_email.txt.eex:2
|
#: lib/cannery_web/templates/email/confirm_email.txt.eex:2
|
||||||
#: lib/cannery_web/templates/email/reset_password.html.eex:3
|
#: lib/cannery_web/templates/email/reset_password.html.eex:3
|
||||||
#: lib/cannery_web/templates/email/reset_password.txt.eex:2
|
#: lib/cannery_web/templates/email/reset_password.txt.eex:2
|
||||||
#: lib/cannery_web/templates/email/update_email.html.eex:3
|
#: lib/cannery_web/templates/email/update_email.html.eex:3
|
||||||
#: lib/cannery_web/templates/email/update_email.txt.eex:2
|
#: lib/cannery_web/templates/email/update_email.txt.eex:2
|
||||||
|
#, elixir-autogen, elixir-format
|
||||||
msgid "Hi %{email},"
|
msgid "Hi %{email},"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#, elixir-autogen, elixir-format
|
|
||||||
#: lib/cannery_web/templates/email/confirm_email.txt.eex:10
|
#: lib/cannery_web/templates/email/confirm_email.txt.eex:10
|
||||||
|
#, elixir-autogen, elixir-format
|
||||||
msgid "If you didn't create an account at %{url}, please ignore this."
|
msgid "If you didn't create an account at %{url}, please ignore this."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#, elixir-autogen, elixir-format
|
|
||||||
#: lib/cannery_web/templates/email/reset_password.txt.eex:8
|
#: lib/cannery_web/templates/email/reset_password.txt.eex:8
|
||||||
#: lib/cannery_web/templates/email/update_email.txt.eex:8
|
#: lib/cannery_web/templates/email/update_email.txt.eex:8
|
||||||
|
#, elixir-autogen, elixir-format
|
||||||
msgid "If you didn't request this change from %{url}, please ignore this."
|
msgid "If you didn't request this change from %{url}, please ignore this."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#, elixir-autogen, elixir-format
|
|
||||||
#: lib/cannery/accounts/email.ex:37
|
#: lib/cannery/accounts/email.ex:37
|
||||||
|
#, elixir-autogen, elixir-format
|
||||||
msgid "Reset your %{name} password"
|
msgid "Reset your %{name} password"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#, elixir-autogen, elixir-format
|
|
||||||
#: lib/cannery/accounts/email.ex:44
|
#: lib/cannery/accounts/email.ex:44
|
||||||
|
#, elixir-autogen, elixir-format
|
||||||
msgid "Update your %{name} email"
|
msgid "Update your %{name} email"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#, elixir-autogen, elixir-format
|
|
||||||
#: lib/cannery_web/templates/email/confirm_email.html.eex:9
|
#: lib/cannery_web/templates/email/confirm_email.html.eex:9
|
||||||
|
#, elixir-autogen, elixir-format
|
||||||
msgid "Welcome to %{name}!"
|
msgid "Welcome to %{name}!"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#, elixir-autogen, elixir-format
|
|
||||||
#: lib/cannery_web/templates/email/confirm_email.txt.eex:4
|
#: lib/cannery_web/templates/email/confirm_email.txt.eex:4
|
||||||
|
#, elixir-autogen, elixir-format
|
||||||
msgid "Welcome to %{name}%!"
|
msgid "Welcome to %{name}%!"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#, elixir-autogen, elixir-format
|
|
||||||
#: lib/cannery_web/templates/email/update_email.html.eex:8
|
#: lib/cannery_web/templates/email/update_email.html.eex:8
|
||||||
#: lib/cannery_web/templates/email/update_email.txt.eex:4
|
#: lib/cannery_web/templates/email/update_email.txt.eex:4
|
||||||
|
#, elixir-autogen, elixir-format
|
||||||
msgid "You can change your email by visiting the URL below:"
|
msgid "You can change your email by visiting the URL below:"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#, elixir-autogen, elixir-format
|
|
||||||
#: lib/cannery_web/templates/email/confirm_email.html.eex:14
|
#: lib/cannery_web/templates/email/confirm_email.html.eex:14
|
||||||
#: lib/cannery_web/templates/email/confirm_email.txt.eex:6
|
#: lib/cannery_web/templates/email/confirm_email.txt.eex:6
|
||||||
|
#, elixir-autogen, elixir-format
|
||||||
msgid "You can confirm your account by visiting the URL below:"
|
msgid "You can confirm your account by visiting the URL below:"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#, elixir-autogen, elixir-format
|
|
||||||
#: lib/cannery_web/templates/email/reset_password.html.eex:8
|
#: lib/cannery_web/templates/email/reset_password.html.eex:8
|
||||||
#: lib/cannery_web/templates/email/reset_password.txt.eex:4
|
#: lib/cannery_web/templates/email/reset_password.txt.eex:4
|
||||||
|
#, elixir-autogen, elixir-format
|
||||||
msgid "You can reset your password by visiting the URL below:"
|
msgid "You can reset your password by visiting the URL below:"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#, elixir-autogen, elixir-format
|
|
||||||
#: lib/cannery_web/templates/email/confirm_email.html.eex:22
|
#: lib/cannery_web/templates/email/confirm_email.html.eex:22
|
||||||
|
#, elixir-autogen, elixir-format
|
||||||
msgid "If you didn't create an account at %{name}, please ignore this."
|
msgid "If you didn't create an account at %{name}, please ignore this."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#, elixir-autogen, elixir-format
|
|
||||||
#: lib/cannery_web/templates/email/reset_password.html.eex:16
|
#: lib/cannery_web/templates/email/reset_password.html.eex:16
|
||||||
#: lib/cannery_web/templates/email/update_email.html.eex:16
|
#: lib/cannery_web/templates/email/update_email.html.eex:16
|
||||||
|
#, elixir-autogen, elixir-format
|
||||||
msgid "If you didn't request this change from %{name}, please ignore this."
|
msgid "If you didn't request this change from %{name}, please ignore this."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#, elixir-autogen, elixir-format
|
|
||||||
#: lib/cannery_web/templates/layout/email.txt.eex:9
|
#: lib/cannery_web/templates/layout/email.txt.eex:9
|
||||||
|
#, elixir-autogen, elixir-format
|
||||||
msgid "This email was sent from %{name} at %{url}, the self-hosted firearm tracker website."
|
msgid "This email was sent from %{name} at %{url}, the self-hosted firearm tracker website."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#, elixir-autogen, elixir-format
|
|
||||||
#: lib/cannery_web/templates/layout/email.html.heex:13
|
#: lib/cannery_web/templates/layout/email.html.heex:13
|
||||||
|
#, elixir-autogen, elixir-format
|
||||||
msgid "This email was sent from %{name}, the self-hosted firearm tracker website."
|
msgid "This email was sent from %{name}, the self-hosted firearm tracker website."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
@ -11,204 +11,247 @@ msgstr ""
|
|||||||
"Language: en\n"
|
"Language: en\n"
|
||||||
"Plural-Forms: nplurals=2\n"
|
"Plural-Forms: nplurals=2\n"
|
||||||
|
|
||||||
#, 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
|
#: lib/cannery_web/live/ammo_group_live/index.ex:50
|
||||||
|
#: lib/cannery_web/live/ammo_group_live/index.html.heex:40
|
||||||
|
#, elixir-autogen, elixir-format
|
||||||
msgid "Add Ammo"
|
msgid "Add Ammo"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
|
#: lib/cannery_web/live/ammo_group_live/index.html.heex:36
|
||||||
#, elixir-autogen, elixir-format
|
#, elixir-autogen, elixir-format
|
||||||
#: lib/cannery_web/live/ammo_group_live/index.html.heex:37
|
|
||||||
msgid "Add your first box!"
|
msgid "Add your first box!"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
|
#: lib/cannery_web/live/container_live/index.html.heex:13
|
||||||
#, elixir-autogen, elixir-format
|
#, elixir-autogen, elixir-format
|
||||||
#: lib/cannery_web/live/container_live/index.html.heex:12
|
|
||||||
msgid "Add your first container!"
|
msgid "Add your first container!"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
|
#: lib/cannery_web/live/ammo_type_live/index.html.heex:13
|
||||||
#, elixir-autogen, elixir-format
|
#, elixir-autogen, elixir-format
|
||||||
#: lib/cannery_web/live/ammo_type_live/index.html.heex:12
|
|
||||||
msgid "Add your first type!"
|
msgid "Add your first type!"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#, elixir-autogen, elixir-format
|
|
||||||
#: lib/cannery_web/templates/user_settings/edit.html.heex:15
|
#: lib/cannery_web/templates/user_settings/edit.html.heex:15
|
||||||
#: lib/cannery_web/templates/user_settings/edit.html.heex:44
|
#: lib/cannery_web/templates/user_settings/edit.html.heex:44
|
||||||
|
#, elixir-autogen, elixir-format
|
||||||
msgid "Change email"
|
msgid "Change email"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#, elixir-autogen, elixir-format
|
|
||||||
#: lib/cannery_web/templates/user_settings/edit.html.heex:58
|
#: lib/cannery_web/templates/user_settings/edit.html.heex:58
|
||||||
#: lib/cannery_web/templates/user_settings/edit.html.heex:99
|
#: lib/cannery_web/templates/user_settings/edit.html.heex:99
|
||||||
|
#, elixir-autogen, elixir-format
|
||||||
msgid "Change password"
|
msgid "Change password"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#, elixir-autogen, elixir-format
|
|
||||||
#: lib/cannery_web/live/invite_live/index.html.heex:17
|
#: lib/cannery_web/live/invite_live/index.html.heex:17
|
||||||
|
#, elixir-autogen, elixir-format
|
||||||
msgid "Create Invite"
|
msgid "Create Invite"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
|
#: lib/cannery_web/templates/user_settings/edit.html.heex:157
|
||||||
#, elixir-autogen, elixir-format
|
#, elixir-autogen, elixir-format
|
||||||
#: lib/cannery_web/templates/user_settings/edit.html.heex:142
|
|
||||||
msgid "Delete User"
|
msgid "Delete User"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#, elixir-autogen, elixir-format
|
|
||||||
#: lib/cannery_web/templates/user_registration/new.html.heex:52
|
#: lib/cannery_web/templates/user_registration/new.html.heex:52
|
||||||
#: lib/cannery_web/templates/user_reset_password/new.html.heex:3
|
#: lib/cannery_web/templates/user_reset_password/new.html.heex:3
|
||||||
#: lib/cannery_web/templates/user_session/new.html.heex:45
|
#: lib/cannery_web/templates/user_session/new.html.heex:45
|
||||||
|
#, elixir-autogen, elixir-format
|
||||||
msgid "Forgot your password?"
|
msgid "Forgot your password?"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
|
#: lib/cannery_web/live/invite_live/index.html.heex:13
|
||||||
#, elixir-autogen, elixir-format
|
#, elixir-autogen, elixir-format
|
||||||
#: lib/cannery_web/live/invite_live/index.html.heex:12
|
|
||||||
msgid "Invite someone new!"
|
msgid "Invite someone new!"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#, elixir-autogen, elixir-format
|
#: lib/cannery_web/components/topbar.ex:137
|
||||||
#: 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:49
|
||||||
#: lib/cannery_web/templates/user_reset_password/edit.html.heex:48
|
#: lib/cannery_web/templates/user_reset_password/edit.html.heex:48
|
||||||
#: lib/cannery_web/templates/user_reset_password/new.html.heex:30
|
#: lib/cannery_web/templates/user_reset_password/new.html.heex:30
|
||||||
#: lib/cannery_web/templates/user_session/new.html.heex:3
|
#: lib/cannery_web/templates/user_session/new.html.heex:3
|
||||||
#: lib/cannery_web/templates/user_session/new.html.heex:33
|
#: lib/cannery_web/templates/user_session/new.html.heex:33
|
||||||
|
#, elixir-autogen, elixir-format
|
||||||
msgid "Log in"
|
msgid "Log in"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
|
#: lib/cannery_web/live/tag_live/index.html.heex:15
|
||||||
#, elixir-autogen, elixir-format
|
#, elixir-autogen, elixir-format
|
||||||
#: lib/cannery_web/live/tag_live/index.html.heex:14
|
|
||||||
msgid "Make your first tag!"
|
msgid "Make your first tag!"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#, 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
|
||||||
|
#, elixir-autogen, elixir-format
|
||||||
msgid "New Ammo type"
|
msgid "New Ammo type"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#, elixir-autogen, elixir-format
|
|
||||||
#: lib/cannery_web/live/container_live/index.html.heex:17
|
#: lib/cannery_web/live/container_live/index.html.heex:17
|
||||||
|
#, elixir-autogen, elixir-format
|
||||||
msgid "New Container"
|
msgid "New Container"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#, elixir-autogen, elixir-format
|
|
||||||
#: lib/cannery_web/live/tag_live/index.html.heex:19
|
#: lib/cannery_web/live/tag_live/index.html.heex:19
|
||||||
|
#, elixir-autogen, elixir-format
|
||||||
msgid "New Tag"
|
msgid "New Tag"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#, elixir-autogen, elixir-format
|
#: lib/cannery_web/components/topbar.ex:128
|
||||||
#: lib/cannery_web/components/topbar.ex:105
|
#: lib/cannery_web/templates/user_confirmation/new.html.heex:26
|
||||||
#: 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
|
||||||
#: lib/cannery_web/templates/user_reset_password/edit.html.heex:43
|
#: lib/cannery_web/templates/user_reset_password/edit.html.heex:44
|
||||||
#: lib/cannery_web/templates/user_reset_password/new.html.heex:25
|
#: lib/cannery_web/templates/user_reset_password/new.html.heex:26
|
||||||
#: lib/cannery_web/templates/user_session/new.html.heex:40
|
#: lib/cannery_web/templates/user_session/new.html.heex:41
|
||||||
|
#, elixir-autogen, elixir-format
|
||||||
msgid "Register"
|
msgid "Register"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#, elixir-autogen, elixir-format
|
|
||||||
#: lib/cannery_web/templates/user_confirmation/new.html.heex:3
|
#: lib/cannery_web/templates/user_confirmation/new.html.heex:3
|
||||||
#: lib/cannery_web/templates/user_confirmation/new.html.heex:16
|
#: lib/cannery_web/templates/user_confirmation/new.html.heex:16
|
||||||
|
#, elixir-autogen, elixir-format
|
||||||
msgid "Resend confirmation instructions"
|
msgid "Resend confirmation instructions"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#, elixir-autogen, elixir-format
|
|
||||||
#: lib/cannery_web/templates/user_reset_password/edit.html.heex:3
|
#: lib/cannery_web/templates/user_reset_password/edit.html.heex:3
|
||||||
#: lib/cannery_web/templates/user_reset_password/edit.html.heex:34
|
#: lib/cannery_web/templates/user_reset_password/edit.html.heex:34
|
||||||
|
#, elixir-autogen, elixir-format
|
||||||
msgid "Reset password"
|
msgid "Reset password"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#, elixir-autogen, elixir-format
|
#: lib/cannery_web/components/add_shot_group_component.html.heex:53
|
||||||
#: lib/cannery_web/components/add_shot_group_component.html.heex:46
|
|
||||||
#: 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:31
|
#: 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:91
|
#: lib/cannery_web/live/tag_live/form_component.ex:91
|
||||||
|
#, elixir-autogen, elixir-format
|
||||||
msgid "Save"
|
msgid "Save"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#, elixir-autogen, elixir-format
|
|
||||||
#: lib/cannery_web/templates/user_reset_password/new.html.heex:16
|
#: lib/cannery_web/templates/user_reset_password/new.html.heex:16
|
||||||
|
#, elixir-autogen, elixir-format
|
||||||
msgid "Send instructions to reset password"
|
msgid "Send instructions to reset password"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
|
#: lib/cannery_web/live/container_live/show.html.heex:72
|
||||||
#, elixir-autogen, elixir-format
|
#, elixir-autogen, elixir-format
|
||||||
#: lib/cannery_web/live/container_live/show.html.heex:65
|
|
||||||
msgid "Why not add one?"
|
msgid "Why not add one?"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
|
#: lib/cannery_web/live/container_live/edit_tags_component.html.heex:53
|
||||||
#, elixir-autogen, elixir-format
|
#, elixir-autogen, elixir-format
|
||||||
#: lib/cannery_web/live/container_live/edit_tags_component.html.heex:52
|
|
||||||
msgid "Add"
|
msgid "Add"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#, elixir-autogen, elixir-format
|
|
||||||
#: lib/cannery_web/live/range_live/index.html.heex:17
|
#: lib/cannery_web/live/range_live/index.html.heex:17
|
||||||
|
#, elixir-autogen, elixir-format
|
||||||
msgid "Stage ammo"
|
msgid "Stage ammo"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
|
#: lib/cannery_web/live/range_live/index.html.heex:13
|
||||||
#, elixir-autogen, elixir-format
|
#, elixir-autogen, elixir-format
|
||||||
#: lib/cannery_web/live/range_live/index.html.heex:12
|
|
||||||
msgid "Why not get some ready to shoot?"
|
msgid "Why not get some ready to shoot?"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
|
#: lib/cannery_web/live/ammo_group_live/index.ex:199
|
||||||
|
#: lib/cannery_web/live/ammo_group_live/show.html.heex:101
|
||||||
|
#: lib/cannery_web/live/range_live/index.html.heex:38
|
||||||
#, elixir-autogen, elixir-format
|
#, elixir-autogen, elixir-format
|
||||||
#: lib/cannery_web/live/ammo_group_live/index.ex:160
|
|
||||||
#: lib/cannery_web/live/ammo_group_live/show.html.heex:91
|
|
||||||
#: lib/cannery_web/live/range_live/index.html.heex:36
|
|
||||||
msgid "Record shots"
|
msgid "Record shots"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
|
#: lib/cannery_web/components/move_ammo_group_component.ex:90
|
||||||
#, elixir-autogen, elixir-format
|
#, elixir-autogen, elixir-format
|
||||||
#: lib/cannery_web/components/move_ammo_group_component.ex:89
|
|
||||||
msgid "Add another container!"
|
msgid "Add another container!"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
|
#: lib/cannery_web/live/ammo_group_live/show.html.heex:94
|
||||||
#, elixir-autogen, elixir-format
|
#, elixir-autogen, elixir-format
|
||||||
#: lib/cannery_web/live/ammo_group_live/show.html.heex:85
|
|
||||||
msgid "Move containers"
|
msgid "Move containers"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
|
#: lib/cannery_web/components/move_ammo_group_component.ex:126
|
||||||
#, elixir-autogen, elixir-format
|
#, elixir-autogen, elixir-format
|
||||||
#: lib/cannery_web/components/move_ammo_group_component.ex:127
|
|
||||||
msgid "Select"
|
msgid "Select"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
|
#: lib/cannery_web/live/invite_live/index.html.heex:31
|
||||||
#, elixir-autogen, elixir-format
|
#, elixir-autogen, elixir-format
|
||||||
#: lib/cannery_web/live/invite_live/index.html.heex:33
|
|
||||||
msgid "Copy to clipboard"
|
msgid "Copy to clipboard"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
|
#: lib/cannery_web/live/ammo_group_live/index.html.heex:21
|
||||||
#, elixir-autogen, elixir-format
|
#, elixir-autogen, elixir-format
|
||||||
#: lib/cannery_web/live/ammo_group_live/index.html.heex:20
|
|
||||||
msgid "add a container first"
|
msgid "add a container first"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#, elixir-autogen, elixir-format, fuzzy
|
|
||||||
#: lib/cannery_web/live/ammo_group_live/form_component.html.heex:66
|
#: lib/cannery_web/live/ammo_group_live/form_component.html.heex:66
|
||||||
|
#, elixir-autogen, elixir-format, fuzzy
|
||||||
msgid "Create"
|
msgid "Create"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#, elixir-autogen, elixir-format
|
|
||||||
#: lib/cannery_web/templates/user_settings/edit.html.heex:113
|
#: lib/cannery_web/templates/user_settings/edit.html.heex:113
|
||||||
|
#, elixir-autogen, elixir-format
|
||||||
msgid "Change Language"
|
msgid "Change Language"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#, elixir-autogen, elixir-format
|
|
||||||
#: lib/cannery_web/templates/user_settings/edit.html.heex:134
|
#: lib/cannery_web/templates/user_settings/edit.html.heex:134
|
||||||
|
#, elixir-autogen, elixir-format
|
||||||
msgid "Change language"
|
msgid "Change language"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
|
#: lib/cannery_web/live/ammo_group_live/show.html.heex:60
|
||||||
#, elixir-autogen, elixir-format
|
#, elixir-autogen, elixir-format
|
||||||
#: lib/cannery_web/live/ammo_group_live/show.html.heex:55
|
|
||||||
msgid "View in Catalog"
|
msgid "View in Catalog"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#, elixir-autogen, elixir-format
|
|
||||||
#: lib/cannery_web/live/ammo_group_live/index.html.heex:31
|
#: lib/cannery_web/live/ammo_group_live/index.html.heex:31
|
||||||
|
#, elixir-autogen, elixir-format
|
||||||
msgid "add an ammo type first"
|
msgid "add an ammo type first"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
|
#: lib/cannery_web/live/invite_live/index.html.heex:60
|
||||||
|
#, elixir-autogen, elixir-format
|
||||||
|
msgid "Disable"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: lib/cannery_web/live/invite_live/index.html.heex:64
|
||||||
|
#, elixir-autogen, elixir-format
|
||||||
|
msgid "Enable"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: lib/cannery_web/components/move_ammo_group_component.ex:80
|
||||||
|
#, elixir-autogen, elixir-format
|
||||||
|
msgid "Move ammo"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: lib/cannery_web/live/invite_live/index.html.heex:80
|
||||||
|
#, elixir-autogen, elixir-format
|
||||||
|
msgid "Set Unlimited"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: lib/cannery_web/live/container_live/show.html.heex:97
|
||||||
|
#, elixir-autogen, elixir-format
|
||||||
|
msgid "Show used"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: lib/cannery_web/live/ammo_group_live/show.html.heex:86
|
||||||
|
#: lib/cannery_web/live/range_live/index.html.heex:31
|
||||||
|
#, elixir-autogen, elixir-format
|
||||||
|
msgid "Stage for range"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: lib/cannery_web/live/ammo_group_live/show.html.heex:85
|
||||||
|
#: lib/cannery_web/live/range_live/index.html.heex:30
|
||||||
|
#, elixir-autogen, elixir-format
|
||||||
|
msgid "Unstage from range"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: lib/cannery_web/templates/user_settings/edit.html.heex:148
|
||||||
|
#, elixir-autogen, elixir-format
|
||||||
|
msgid "Export Data as JSON"
|
||||||
|
msgstr ""
|
||||||
|
File diff suppressed because it is too large
Load Diff
@ -11,87 +11,87 @@ msgstr ""
|
|||||||
"Language: en\n"
|
"Language: en\n"
|
||||||
"Plural-Forms: nplurals=2\n"
|
"Plural-Forms: nplurals=2\n"
|
||||||
|
|
||||||
#, elixir-autogen, elixir-format
|
|
||||||
#: lib/cannery/accounts/email.ex:30
|
#: lib/cannery/accounts/email.ex:30
|
||||||
|
#, elixir-autogen, elixir-format
|
||||||
msgid "Confirm your %{name} account"
|
msgid "Confirm your %{name} account"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#, elixir-autogen, elixir-format
|
|
||||||
#: lib/cannery_web/templates/email/confirm_email.html.eex:3
|
#: lib/cannery_web/templates/email/confirm_email.html.eex:3
|
||||||
#: lib/cannery_web/templates/email/confirm_email.txt.eex:2
|
#: lib/cannery_web/templates/email/confirm_email.txt.eex:2
|
||||||
#: lib/cannery_web/templates/email/reset_password.html.eex:3
|
#: lib/cannery_web/templates/email/reset_password.html.eex:3
|
||||||
#: lib/cannery_web/templates/email/reset_password.txt.eex:2
|
#: lib/cannery_web/templates/email/reset_password.txt.eex:2
|
||||||
#: lib/cannery_web/templates/email/update_email.html.eex:3
|
#: lib/cannery_web/templates/email/update_email.html.eex:3
|
||||||
#: lib/cannery_web/templates/email/update_email.txt.eex:2
|
#: lib/cannery_web/templates/email/update_email.txt.eex:2
|
||||||
|
#, elixir-autogen, elixir-format
|
||||||
msgid "Hi %{email},"
|
msgid "Hi %{email},"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#, elixir-autogen, elixir-format
|
|
||||||
#: lib/cannery_web/templates/email/confirm_email.txt.eex:10
|
#: lib/cannery_web/templates/email/confirm_email.txt.eex:10
|
||||||
|
#, elixir-autogen, elixir-format
|
||||||
msgid "If you didn't create an account at %{url}, please ignore this."
|
msgid "If you didn't create an account at %{url}, please ignore this."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#, elixir-autogen, elixir-format
|
|
||||||
#: lib/cannery_web/templates/email/reset_password.txt.eex:8
|
#: lib/cannery_web/templates/email/reset_password.txt.eex:8
|
||||||
#: lib/cannery_web/templates/email/update_email.txt.eex:8
|
#: lib/cannery_web/templates/email/update_email.txt.eex:8
|
||||||
|
#, elixir-autogen, elixir-format
|
||||||
msgid "If you didn't request this change from %{url}, please ignore this."
|
msgid "If you didn't request this change from %{url}, please ignore this."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#, elixir-autogen, elixir-format
|
|
||||||
#: lib/cannery/accounts/email.ex:37
|
#: lib/cannery/accounts/email.ex:37
|
||||||
|
#, elixir-autogen, elixir-format
|
||||||
msgid "Reset your %{name} password"
|
msgid "Reset your %{name} password"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#, elixir-autogen, elixir-format
|
|
||||||
#: lib/cannery/accounts/email.ex:44
|
#: lib/cannery/accounts/email.ex:44
|
||||||
|
#, elixir-autogen, elixir-format
|
||||||
msgid "Update your %{name} email"
|
msgid "Update your %{name} email"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#, elixir-autogen, elixir-format
|
|
||||||
#: lib/cannery_web/templates/email/confirm_email.html.eex:9
|
#: lib/cannery_web/templates/email/confirm_email.html.eex:9
|
||||||
|
#, elixir-autogen, elixir-format
|
||||||
msgid "Welcome to %{name}!"
|
msgid "Welcome to %{name}!"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#, elixir-autogen, elixir-format
|
|
||||||
#: lib/cannery_web/templates/email/confirm_email.txt.eex:4
|
#: lib/cannery_web/templates/email/confirm_email.txt.eex:4
|
||||||
|
#, elixir-autogen, elixir-format
|
||||||
msgid "Welcome to %{name}%!"
|
msgid "Welcome to %{name}%!"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#, elixir-autogen, elixir-format
|
|
||||||
#: lib/cannery_web/templates/email/update_email.html.eex:8
|
#: lib/cannery_web/templates/email/update_email.html.eex:8
|
||||||
#: lib/cannery_web/templates/email/update_email.txt.eex:4
|
#: lib/cannery_web/templates/email/update_email.txt.eex:4
|
||||||
|
#, elixir-autogen, elixir-format
|
||||||
msgid "You can change your email by visiting the URL below:"
|
msgid "You can change your email by visiting the URL below:"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#, elixir-autogen, elixir-format
|
|
||||||
#: lib/cannery_web/templates/email/confirm_email.html.eex:14
|
#: lib/cannery_web/templates/email/confirm_email.html.eex:14
|
||||||
#: lib/cannery_web/templates/email/confirm_email.txt.eex:6
|
#: lib/cannery_web/templates/email/confirm_email.txt.eex:6
|
||||||
|
#, elixir-autogen, elixir-format
|
||||||
msgid "You can confirm your account by visiting the URL below:"
|
msgid "You can confirm your account by visiting the URL below:"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#, elixir-autogen, elixir-format
|
|
||||||
#: lib/cannery_web/templates/email/reset_password.html.eex:8
|
#: lib/cannery_web/templates/email/reset_password.html.eex:8
|
||||||
#: lib/cannery_web/templates/email/reset_password.txt.eex:4
|
#: lib/cannery_web/templates/email/reset_password.txt.eex:4
|
||||||
|
#, elixir-autogen, elixir-format
|
||||||
msgid "You can reset your password by visiting the URL below:"
|
msgid "You can reset your password by visiting the URL below:"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#, elixir-autogen, elixir-format
|
|
||||||
#: lib/cannery_web/templates/email/confirm_email.html.eex:22
|
#: lib/cannery_web/templates/email/confirm_email.html.eex:22
|
||||||
|
#, elixir-autogen, elixir-format
|
||||||
msgid "If you didn't create an account at %{name}, please ignore this."
|
msgid "If you didn't create an account at %{name}, please ignore this."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#, elixir-autogen, elixir-format
|
|
||||||
#: lib/cannery_web/templates/email/reset_password.html.eex:16
|
#: lib/cannery_web/templates/email/reset_password.html.eex:16
|
||||||
#: lib/cannery_web/templates/email/update_email.html.eex:16
|
#: lib/cannery_web/templates/email/update_email.html.eex:16
|
||||||
|
#, elixir-autogen, elixir-format
|
||||||
msgid "If you didn't request this change from %{name}, please ignore this."
|
msgid "If you didn't request this change from %{name}, please ignore this."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#, elixir-autogen, elixir-format
|
|
||||||
#: lib/cannery_web/templates/layout/email.txt.eex:9
|
#: lib/cannery_web/templates/layout/email.txt.eex:9
|
||||||
|
#, elixir-autogen, elixir-format
|
||||||
msgid "This email was sent from %{name} at %{url}, the self-hosted firearm tracker website."
|
msgid "This email was sent from %{name} at %{url}, the self-hosted firearm tracker website."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#, elixir-autogen, elixir-format
|
|
||||||
#: lib/cannery_web/templates/layout/email.html.heex:13
|
#: lib/cannery_web/templates/layout/email.html.heex:13
|
||||||
|
#, elixir-autogen, elixir-format
|
||||||
msgid "This email was sent from %{name}, the self-hosted firearm tracker website."
|
msgid "This email was sent from %{name}, the self-hosted firearm tracker website."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
@ -10,177 +10,182 @@ msgid ""
|
|||||||
msgstr ""
|
msgstr ""
|
||||||
"Language: en\n"
|
"Language: en\n"
|
||||||
|
|
||||||
#, elixir-autogen, elixir-format
|
|
||||||
#: lib/cannery/containers.ex:140
|
#: lib/cannery/containers.ex:140
|
||||||
|
#, elixir-autogen, elixir-format
|
||||||
msgid "Container must be empty before deleting"
|
msgid "Container must be empty before deleting"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#, elixir-autogen, elixir-format
|
#: lib/cannery_web/live/container_live/index.ex:88
|
||||||
#: lib/cannery_web/live/container_live/index.ex:69
|
|
||||||
#: lib/cannery_web/live/container_live/show.ex:71
|
#: lib/cannery_web/live/container_live/show.ex:71
|
||||||
|
#, elixir-autogen, elixir-format
|
||||||
msgid "Could not delete %{name}: %{error}"
|
msgid "Could not delete %{name}: %{error}"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
|
#: lib/cannery_web/live/container_live/index.ex:76
|
||||||
#, elixir-autogen, elixir-format
|
#, elixir-autogen, elixir-format
|
||||||
#: lib/cannery_web/live/container_live/index.ex:57
|
|
||||||
msgid "Could not find that container"
|
msgid "Could not find that container"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#, elixir-autogen, elixir-format
|
|
||||||
#: lib/cannery_web/controllers/user_settings_controller.ex:84
|
#: lib/cannery_web/controllers/user_settings_controller.ex:84
|
||||||
|
#, elixir-autogen, elixir-format
|
||||||
msgid "Email change link is invalid or it has expired."
|
msgid "Email change link is invalid or it has expired."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#, elixir-autogen, elixir-format
|
|
||||||
#: lib/cannery_web/templates/error/error.html.heex:8
|
#: lib/cannery_web/templates/error/error.html.heex:8
|
||||||
|
#, elixir-autogen, elixir-format
|
||||||
msgid "Error"
|
msgid "Error"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#, elixir-autogen, elixir-format
|
|
||||||
#: lib/cannery_web/templates/error/error.html.heex:28
|
#: lib/cannery_web/templates/error/error.html.heex:28
|
||||||
|
#, elixir-autogen, elixir-format
|
||||||
msgid "Go back home"
|
msgid "Go back home"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#, elixir-autogen, elixir-format
|
|
||||||
#: lib/cannery_web/views/error_view.ex:11
|
#: lib/cannery_web/views/error_view.ex:11
|
||||||
|
#, elixir-autogen, elixir-format
|
||||||
msgid "Internal Server Error"
|
msgid "Internal Server Error"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#, elixir-autogen, elixir-format
|
|
||||||
#: lib/cannery_web/controllers/user_session_controller.ex:17
|
#: lib/cannery_web/controllers/user_session_controller.ex:17
|
||||||
|
#, elixir-autogen, elixir-format
|
||||||
msgid "Invalid email or password"
|
msgid "Invalid email or password"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#, elixir-autogen, elixir-format
|
|
||||||
#: lib/cannery_web/views/error_view.ex:9
|
#: lib/cannery_web/views/error_view.ex:9
|
||||||
|
#, elixir-autogen, elixir-format
|
||||||
msgid "Not found"
|
msgid "Not found"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#, elixir-autogen, elixir-format
|
|
||||||
#: lib/cannery_web/templates/user_registration/new.html.heex:16
|
#: lib/cannery_web/templates/user_registration/new.html.heex:16
|
||||||
#: lib/cannery_web/templates/user_reset_password/edit.html.heex:16
|
#: lib/cannery_web/templates/user_reset_password/edit.html.heex:16
|
||||||
#: lib/cannery_web/templates/user_settings/edit.html.heex:21
|
#: lib/cannery_web/templates/user_settings/edit.html.heex:21
|
||||||
#: lib/cannery_web/templates/user_settings/edit.html.heex:64
|
#: lib/cannery_web/templates/user_settings/edit.html.heex:64
|
||||||
#: lib/cannery_web/templates/user_settings/edit.html.heex:119
|
#: lib/cannery_web/templates/user_settings/edit.html.heex:119
|
||||||
|
#, elixir-autogen, elixir-format
|
||||||
msgid "Oops, something went wrong! Please check the errors below."
|
msgid "Oops, something went wrong! Please check the errors below."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#, elixir-autogen, elixir-format
|
|
||||||
#: lib/cannery_web/controllers/user_reset_password_controller.ex:63
|
#: lib/cannery_web/controllers/user_reset_password_controller.ex:63
|
||||||
|
#, elixir-autogen, elixir-format
|
||||||
msgid "Reset password link is invalid or it has expired."
|
msgid "Reset password link is invalid or it has expired."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#, elixir-autogen, elixir-format
|
|
||||||
#: lib/cannery_web/controllers/user_registration_controller.ex:25
|
#: lib/cannery_web/controllers/user_registration_controller.ex:25
|
||||||
#: lib/cannery_web/controllers/user_registration_controller.ex:56
|
#: lib/cannery_web/controllers/user_registration_controller.ex:56
|
||||||
|
#, elixir-autogen, elixir-format
|
||||||
msgid "Sorry, public registration is disabled"
|
msgid "Sorry, public registration is disabled"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#, elixir-autogen, elixir-format
|
|
||||||
#: lib/cannery_web/controllers/user_registration_controller.ex:15
|
#: lib/cannery_web/controllers/user_registration_controller.ex:15
|
||||||
#: lib/cannery_web/controllers/user_registration_controller.ex:46
|
#: lib/cannery_web/controllers/user_registration_controller.ex:46
|
||||||
|
#, elixir-autogen, elixir-format
|
||||||
msgid "Sorry, this invite was not found or expired"
|
msgid "Sorry, this invite was not found or expired"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#, elixir-autogen, elixir-format
|
|
||||||
#: lib/cannery_web/controllers/user_settings_controller.ex:99
|
#: lib/cannery_web/controllers/user_settings_controller.ex:99
|
||||||
|
#, elixir-autogen, elixir-format
|
||||||
msgid "Unable to delete user"
|
msgid "Unable to delete user"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#, elixir-autogen, elixir-format
|
|
||||||
#: lib/cannery_web/views/error_view.ex:10
|
#: lib/cannery_web/views/error_view.ex:10
|
||||||
|
#, elixir-autogen, elixir-format
|
||||||
msgid "Unauthorized"
|
msgid "Unauthorized"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#, elixir-autogen, elixir-format
|
|
||||||
#: lib/cannery_web/controllers/user_confirmation_controller.ex:54
|
#: lib/cannery_web/controllers/user_confirmation_controller.ex:54
|
||||||
|
#, elixir-autogen, elixir-format
|
||||||
msgid "User confirmation link is invalid or it has expired."
|
msgid "User confirmation link is invalid or it has expired."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#, elixir-autogen, elixir-format
|
|
||||||
#: lib/cannery_web/live/invite_live/index.ex:18
|
#: lib/cannery_web/live/invite_live/index.ex:18
|
||||||
|
#, elixir-autogen, elixir-format
|
||||||
msgid "You are not authorized to view this page"
|
msgid "You are not authorized to view this page"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#, elixir-autogen, elixir-format
|
|
||||||
#: lib/cannery_web/controllers/user_auth.ex:177
|
#: lib/cannery_web/controllers/user_auth.ex:177
|
||||||
|
#, elixir-autogen, elixir-format
|
||||||
msgid "You are not authorized to view this page."
|
msgid "You are not authorized to view this page."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
|
#: lib/cannery/accounts/user.ex:138
|
||||||
#, elixir-autogen, elixir-format
|
#, elixir-autogen, elixir-format
|
||||||
#: lib/cannery/accounts/user.ex:130
|
|
||||||
msgid "did not change"
|
msgid "did not change"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
|
#: lib/cannery/accounts/user.ex:159
|
||||||
#, elixir-autogen, elixir-format
|
#, elixir-autogen, elixir-format
|
||||||
#: lib/cannery/accounts/user.ex:151
|
|
||||||
msgid "does not match password"
|
msgid "does not match password"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
## From Ecto.Changeset.put_change/3
|
## From Ecto.Changeset.put_change/3
|
||||||
|
#: lib/cannery/accounts/user.ex:196
|
||||||
#, elixir-autogen, elixir-format, fuzzy
|
#, elixir-autogen, elixir-format, fuzzy
|
||||||
#: lib/cannery/accounts/user.ex:188
|
|
||||||
msgid "is not valid"
|
msgid "is not valid"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
|
#: lib/cannery/accounts/user.ex:92
|
||||||
#, elixir-autogen, elixir-format
|
#, elixir-autogen, elixir-format
|
||||||
#: lib/cannery/accounts/user.ex:84
|
|
||||||
msgid "must have the @ sign and no spaces"
|
msgid "must have the @ sign and no spaces"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#, elixir-autogen, elixir-format
|
|
||||||
#: lib/cannery/tags.ex:40
|
#: lib/cannery/tags.ex:40
|
||||||
|
#, elixir-autogen, elixir-format
|
||||||
msgid "Tag not found"
|
msgid "Tag not found"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#, elixir-autogen, elixir-format
|
|
||||||
#: lib/cannery_web/live/container_live/edit_tags_component.ex:30
|
#: lib/cannery_web/live/container_live/edit_tags_component.ex:30
|
||||||
|
#, elixir-autogen, elixir-format
|
||||||
msgid "Tag could not be added"
|
msgid "Tag could not be added"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
|
#: lib/cannery/activity_log/shot_group.ex:123
|
||||||
#, elixir-autogen, elixir-format
|
#, elixir-autogen, elixir-format
|
||||||
#: lib/cannery/activity_log/shot_group.ex:115
|
|
||||||
msgid "Count must be at least 1"
|
msgid "Count must be at least 1"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
|
#: lib/cannery/activity_log/shot_group.ex:82
|
||||||
|
#: lib/cannery/activity_log/shot_group.ex:119
|
||||||
#, elixir-autogen, elixir-format
|
#, elixir-autogen, elixir-format
|
||||||
#: lib/cannery/activity_log/shot_group.ex:74
|
|
||||||
#: lib/cannery/activity_log/shot_group.ex:111
|
|
||||||
msgid "Count must be less than %{count}"
|
msgid "Count must be less than %{count}"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#, elixir-autogen, elixir-format
|
|
||||||
#: lib/cannery_web/controllers/user_auth.ex:39
|
#: lib/cannery_web/controllers/user_auth.ex:39
|
||||||
#: lib/cannery_web/controllers/user_auth.ex:161
|
#: lib/cannery_web/controllers/user_auth.ex:161
|
||||||
|
#, elixir-autogen, elixir-format
|
||||||
msgid "You must confirm your account and log in to access this page."
|
msgid "You must confirm your account and log in to access this page."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#, elixir-autogen, elixir-format, fuzzy
|
|
||||||
#: lib/cannery_web/live/container_live/edit_tags_component.ex:52
|
#: lib/cannery_web/live/container_live/edit_tags_component.ex:52
|
||||||
|
#, elixir-autogen, elixir-format, fuzzy
|
||||||
msgid "Tag could not be removed"
|
msgid "Tag could not be removed"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
|
#: lib/cannery_web/live/ammo_group_live/form_component.ex:157
|
||||||
#, elixir-autogen, elixir-format
|
#, elixir-autogen, elixir-format
|
||||||
#: 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 ""
|
||||||
|
|
||||||
|
#: lib/cannery_web/live/ammo_group_live/form_component.ex:142
|
||||||
#, elixir-autogen, elixir-format
|
#, elixir-autogen, elixir-format
|
||||||
#: 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 ""
|
||||||
|
|
||||||
|
#: lib/cannery/ammo.ex:587
|
||||||
#, elixir-autogen, elixir-format
|
#, elixir-autogen, elixir-format
|
||||||
#: lib/cannery/ammo.ex:524
|
|
||||||
msgid "Invalid multiplier"
|
msgid "Invalid multiplier"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
|
#: lib/cannery/ammo/ammo_group.ex:94
|
||||||
#, elixir-autogen, elixir-format
|
#, elixir-autogen, elixir-format
|
||||||
#: lib/cannery/ammo/ammo_group.ex:84
|
|
||||||
msgid "Please select an ammo type and container"
|
msgid "Please select an ammo type and container"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
|
#: lib/cannery/activity_log/shot_group.ex:77
|
||||||
#, elixir-autogen, elixir-format
|
#, elixir-autogen, elixir-format
|
||||||
#: lib/cannery/activity_log/shot_group.ex:69
|
|
||||||
msgid "Please select a valid user and ammo group"
|
msgid "Please select a valid user and ammo group"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
|
#: lib/cannery_web/live/range_live/index.html.heex:67
|
||||||
|
#, elixir-autogen, elixir-format
|
||||||
|
msgid "Your browser does not support the canvas element."
|
||||||
|
msgstr ""
|
||||||
|
@ -11,269 +11,270 @@ msgstr ""
|
|||||||
"Language: en\n"
|
"Language: en\n"
|
||||||
"Plural-Forms: nplurals=2\n"
|
"Plural-Forms: nplurals=2\n"
|
||||||
|
|
||||||
#, elixir-autogen, elixir-format
|
#: lib/cannery_web/live/ammo_type_live/form_component.ex:86
|
||||||
#: lib/cannery_web/live/ammo_type_live/form_component.ex:85
|
#: lib/cannery_web/live/container_live/form_component.ex:89
|
||||||
#: lib/cannery_web/live/container_live/form_component.ex:85
|
|
||||||
#: lib/cannery_web/live/invite_live/form_component.ex:80
|
#: lib/cannery_web/live/invite_live/form_component.ex:80
|
||||||
#: lib/cannery_web/live/tag_live/form_component.ex:126
|
#: lib/cannery_web/live/tag_live/form_component.ex:126
|
||||||
|
#, elixir-autogen, elixir-format
|
||||||
msgid "%{name} created successfully"
|
msgid "%{name} created successfully"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#, elixir-autogen, elixir-format
|
#: lib/cannery_web/live/ammo_type_live/index.ex:47
|
||||||
#: lib/cannery_web/live/ammo_type_live/index.ex:41
|
|
||||||
#: lib/cannery_web/live/ammo_type_live/show.ex:28
|
#: lib/cannery_web/live/ammo_type_live/show.ex:28
|
||||||
#: lib/cannery_web/live/invite_live/index.ex:53
|
#: lib/cannery_web/live/invite_live/index.ex:53
|
||||||
#: lib/cannery_web/live/invite_live/index.ex:133
|
#: lib/cannery_web/live/invite_live/index.ex:133
|
||||||
#: lib/cannery_web/live/tag_live/index.ex:38
|
#: lib/cannery_web/live/tag_live/index.ex:38
|
||||||
|
#, elixir-autogen, elixir-format
|
||||||
msgid "%{name} deleted succesfully"
|
msgid "%{name} deleted succesfully"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#, elixir-autogen, elixir-format
|
|
||||||
#: lib/cannery_web/live/invite_live/index.ex:109
|
#: lib/cannery_web/live/invite_live/index.ex:109
|
||||||
|
#, elixir-autogen, elixir-format
|
||||||
msgid "%{name} disabled succesfully"
|
msgid "%{name} disabled succesfully"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#, elixir-autogen, elixir-format
|
|
||||||
#: lib/cannery_web/live/invite_live/index.ex:87
|
#: lib/cannery_web/live/invite_live/index.ex:87
|
||||||
|
#, elixir-autogen, elixir-format
|
||||||
msgid "%{name} enabled succesfully"
|
msgid "%{name} enabled succesfully"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#, elixir-autogen, elixir-format
|
#: lib/cannery_web/live/container_live/index.ex:81
|
||||||
#: lib/cannery_web/live/container_live/index.ex:62
|
|
||||||
#: lib/cannery_web/live/container_live/show.ex:61
|
#: lib/cannery_web/live/container_live/show.ex:61
|
||||||
|
#, elixir-autogen, elixir-format
|
||||||
msgid "%{name} has been deleted"
|
msgid "%{name} has been deleted"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#, elixir-autogen, elixir-format
|
|
||||||
#: lib/cannery_web/live/invite_live/index.ex:67
|
#: lib/cannery_web/live/invite_live/index.ex:67
|
||||||
|
#, elixir-autogen, elixir-format
|
||||||
msgid "%{name} updated succesfully"
|
msgid "%{name} updated succesfully"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#, elixir-autogen, elixir-format
|
|
||||||
#: lib/cannery_web/live/ammo_type_live/form_component.ex:67
|
#: lib/cannery_web/live/ammo_type_live/form_component.ex:67
|
||||||
#: lib/cannery_web/live/container_live/form_component.ex:67
|
#: lib/cannery_web/live/container_live/form_component.ex:70
|
||||||
#: lib/cannery_web/live/invite_live/form_component.ex:62
|
#: lib/cannery_web/live/invite_live/form_component.ex:62
|
||||||
#: lib/cannery_web/live/tag_live/form_component.ex:108
|
#: lib/cannery_web/live/tag_live/form_component.ex:108
|
||||||
|
#, elixir-autogen, elixir-format
|
||||||
msgid "%{name} updated successfully"
|
msgid "%{name} updated successfully"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#, elixir-autogen, elixir-format
|
|
||||||
#: lib/cannery_web/controllers/user_settings_controller.ex:29
|
#: lib/cannery_web/controllers/user_settings_controller.ex:29
|
||||||
|
#, elixir-autogen, elixir-format
|
||||||
msgid "A link to confirm your email change has been sent to the new address."
|
msgid "A link to confirm your email change has been sent to the new address."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
|
#: lib/cannery_web/live/ammo_group_live/index.ex:64
|
||||||
#, elixir-autogen, elixir-format
|
#, elixir-autogen, elixir-format
|
||||||
#: lib/cannery_web/live/ammo_group_live/index.ex:56
|
|
||||||
msgid "Ammo group deleted succesfully"
|
msgid "Ammo group deleted succesfully"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
|
#: lib/cannery_web/live/invite_live/index.html.heex:103
|
||||||
|
#: lib/cannery_web/live/invite_live/index.html.heex:133
|
||||||
#, 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:131
|
|
||||||
msgid "Are you sure you want to delete %{email}? This action is permanent!"
|
msgid "Are you sure you want to delete %{email}? This action is permanent!"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
|
#: lib/cannery_web/live/container_live/index.ex:223
|
||||||
|
#: lib/cannery_web/live/container_live/index.html.heex:73
|
||||||
|
#: lib/cannery_web/live/container_live/show.html.heex:51
|
||||||
|
#: lib/cannery_web/live/tag_live/index.html.heex:39
|
||||||
#, elixir-autogen, elixir-format
|
#, elixir-autogen, elixir-format
|
||||||
#: lib/cannery_web/live/container_live/index.html.heex:46
|
|
||||||
#: lib/cannery_web/live/container_live/show.html.heex:49
|
|
||||||
#: 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 ""
|
||||||
|
|
||||||
#, elixir-autogen, elixir-format
|
|
||||||
#: lib/cannery_web/live/invite_live/index.html.heex:49
|
#: lib/cannery_web/live/invite_live/index.html.heex:49
|
||||||
|
#, elixir-autogen, elixir-format
|
||||||
msgid "Are you sure you want to delete the invite for %{name}?"
|
msgid "Are you sure you want to delete the invite for %{name}?"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
|
#: lib/cannery_web/live/ammo_group_live/index.ex:242
|
||||||
|
#: lib/cannery_web/live/ammo_group_live/show.html.heex:75
|
||||||
#, elixir-autogen, elixir-format
|
#, elixir-autogen, elixir-format
|
||||||
#: lib/cannery_web/live/ammo_group_live/index.ex:193
|
|
||||||
#: lib/cannery_web/live/ammo_group_live/show.html.heex:71
|
|
||||||
msgid "Are you sure you want to delete this ammo?"
|
msgid "Are you sure you want to delete this ammo?"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
|
#: lib/cannery_web/templates/user_settings/edit.html.heex:155
|
||||||
#, elixir-autogen, elixir-format
|
#, elixir-autogen, elixir-format
|
||||||
#: lib/cannery_web/templates/user_settings/edit.html.heex:146
|
|
||||||
msgid "Are you sure you want to delete your account?"
|
msgid "Are you sure you want to delete your account?"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
|
#: lib/cannery_web/components/topbar.ex:106
|
||||||
#, elixir-autogen, elixir-format
|
#, elixir-autogen, elixir-format
|
||||||
#: 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 ""
|
||||||
|
|
||||||
|
#: lib/cannery_web/live/invite_live/index.html.heex:75
|
||||||
#, elixir-autogen, elixir-format
|
#, elixir-autogen, elixir-format
|
||||||
#: lib/cannery_web/live/invite_live/index.html.heex:74
|
|
||||||
msgid "Are you sure you want to make %{name} unlimited?"
|
msgid "Are you sure you want to make %{name} unlimited?"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#, elixir-autogen, elixir-format
|
|
||||||
#: lib/cannery_web/controllers/user_settings_controller.ex:77
|
#: lib/cannery_web/controllers/user_settings_controller.ex:77
|
||||||
|
#, elixir-autogen, elixir-format
|
||||||
msgid "Email changed successfully."
|
msgid "Email changed successfully."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#, elixir-autogen, elixir-format
|
|
||||||
#: lib/cannery_web/controllers/user_confirmation_controller.ex:23
|
#: lib/cannery_web/controllers/user_confirmation_controller.ex:23
|
||||||
|
#, elixir-autogen, elixir-format
|
||||||
msgid "If your email is in our system and it has not been confirmed yet, you will receive an email with instructions shortly."
|
msgid "If your email is in our system and it has not been confirmed yet, you will receive an email with instructions shortly."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#, elixir-autogen, elixir-format
|
|
||||||
#: lib/cannery_web/controllers/user_reset_password_controller.ex:24
|
#: lib/cannery_web/controllers/user_reset_password_controller.ex:24
|
||||||
|
#, elixir-autogen, elixir-format
|
||||||
msgid "If your email is in our system, you will receive instructions to reset your password shortly."
|
msgid "If your email is in our system, you will receive instructions to reset your password shortly."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#, elixir-autogen, elixir-format
|
|
||||||
#: lib/cannery_web/controllers/user_session_controller.ex:23
|
#: lib/cannery_web/controllers/user_session_controller.ex:23
|
||||||
|
#, elixir-autogen, elixir-format
|
||||||
msgid "Logged out successfully."
|
msgid "Logged out successfully."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#, elixir-autogen, elixir-format
|
|
||||||
#: lib/cannery_web/controllers/user_reset_password_controller.ex:46
|
#: lib/cannery_web/controllers/user_reset_password_controller.ex:46
|
||||||
|
#, elixir-autogen, elixir-format
|
||||||
msgid "Password reset successfully."
|
msgid "Password reset successfully."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#, elixir-autogen, elixir-format
|
|
||||||
#: lib/cannery_web/controllers/user_settings_controller.ex:49
|
#: lib/cannery_web/controllers/user_settings_controller.ex:49
|
||||||
|
#, elixir-autogen, elixir-format
|
||||||
msgid "Password updated successfully."
|
msgid "Password updated successfully."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#, elixir-autogen, elixir-format
|
|
||||||
#: lib/cannery_web/controllers/user_registration_controller.ex:74
|
#: lib/cannery_web/controllers/user_registration_controller.ex:74
|
||||||
|
#, elixir-autogen, elixir-format
|
||||||
msgid "Please check your email to verify your account"
|
msgid "Please check your email to verify your account"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
|
#: lib/cannery_web/live/home_live.ex:108
|
||||||
#, elixir-autogen, elixir-format
|
#, elixir-autogen, elixir-format
|
||||||
#: lib/cannery_web/live/home_live.ex:104
|
|
||||||
msgid "Register to setup %{name}"
|
msgid "Register to setup %{name}"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#, elixir-autogen, elixir-format
|
#: lib/cannery_web/components/add_shot_group_component.html.heex:55
|
||||||
#: lib/cannery_web/components/add_shot_group_component.html.heex:48
|
|
||||||
#: 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:33
|
#: 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:93
|
#: lib/cannery_web/live/tag_live/form_component.ex:93
|
||||||
|
#, elixir-autogen, elixir-format
|
||||||
msgid "Saving..."
|
msgid "Saving..."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#, elixir-autogen, elixir-format
|
|
||||||
#: lib/cannery_web/controllers/user_settings_controller.ex:95
|
#: lib/cannery_web/controllers/user_settings_controller.ex:95
|
||||||
|
#, elixir-autogen, elixir-format
|
||||||
msgid "Your account has been deleted"
|
msgid "Your account has been deleted"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#, elixir-autogen, elixir-format
|
|
||||||
#: lib/cannery_web/live/container_live/edit_tags_component.html.heex:16
|
#: lib/cannery_web/live/container_live/edit_tags_component.html.heex:16
|
||||||
|
#, elixir-autogen, elixir-format
|
||||||
msgid "Are you sure you want to remove the %{tag_name} tag from %{container_name}?"
|
msgid "Are you sure you want to remove the %{tag_name} tag from %{container_name}?"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#, elixir-autogen, elixir-format
|
|
||||||
#: lib/cannery_web/live/container_live/edit_tags_component.ex:36
|
#: lib/cannery_web/live/container_live/edit_tags_component.ex:36
|
||||||
|
#, elixir-autogen, elixir-format
|
||||||
msgid "%{name} added successfully"
|
msgid "%{name} added successfully"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#, elixir-autogen, elixir-format
|
|
||||||
#: lib/cannery_web/live/container_live/show.ex:37
|
#: lib/cannery_web/live/container_live/show.ex:37
|
||||||
|
#, elixir-autogen, elixir-format
|
||||||
msgid "%{tag_name} has been removed from %{container_name}"
|
msgid "%{tag_name} has been removed from %{container_name}"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
|
#: lib/cannery_web/live/container_live/edit_tags_component.html.heex:55
|
||||||
#, elixir-autogen, elixir-format
|
#, elixir-autogen, elixir-format
|
||||||
#: lib/cannery_web/live/container_live/edit_tags_component.html.heex:54
|
|
||||||
msgid "Adding..."
|
msgid "Adding..."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#, elixir-autogen, elixir-format
|
|
||||||
#: lib/cannery_web/components/add_shot_group_component.ex:56
|
#: lib/cannery_web/components/add_shot_group_component.ex:56
|
||||||
|
#, elixir-autogen, elixir-format
|
||||||
msgid "Shots recorded successfully"
|
msgid "Shots recorded successfully"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
|
#: lib/cannery_web/live/range_live/index.html.heex:27
|
||||||
#, elixir-autogen, elixir-format
|
#, elixir-autogen, elixir-format
|
||||||
#: lib/cannery_web/live/range_live/index.html.heex:29
|
|
||||||
msgid "Are you sure you want to unstage this ammo?"
|
msgid "Are you sure you want to unstage this ammo?"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
|
#: lib/cannery_web/live/ammo_group_live/show.ex:132
|
||||||
|
#: lib/cannery_web/live/range_live/index.ex:184
|
||||||
#, elixir-autogen, elixir-format
|
#, elixir-autogen, elixir-format
|
||||||
#: lib/cannery_web/live/ammo_group_live/show.ex:130
|
|
||||||
#: lib/cannery_web/live/range_live/index.ex:128
|
|
||||||
msgid "Are you sure you want to delete this shot record?"
|
msgid "Are you sure you want to delete this shot record?"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#, elixir-autogen, elixir-format
|
|
||||||
#: lib/cannery_web/live/ammo_group_live/show.ex:78
|
#: lib/cannery_web/live/ammo_group_live/show.ex:78
|
||||||
#: lib/cannery_web/live/range_live/index.ex:54
|
#: lib/cannery_web/live/range_live/index.ex:54
|
||||||
|
#, elixir-autogen, elixir-format
|
||||||
msgid "Shot records deleted succesfully"
|
msgid "Shot records deleted succesfully"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#, elixir-autogen, elixir-format
|
|
||||||
#: lib/cannery_web/live/range_live/form_component.ex:55
|
#: lib/cannery_web/live/range_live/form_component.ex:55
|
||||||
|
#, elixir-autogen, elixir-format
|
||||||
msgid "Shot records updated successfully"
|
msgid "Shot records updated successfully"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#, elixir-autogen, elixir-format
|
|
||||||
#: lib/cannery_web/controllers/user_confirmation_controller.ex:38
|
#: lib/cannery_web/controllers/user_confirmation_controller.ex:38
|
||||||
|
#, elixir-autogen, elixir-format
|
||||||
msgid "%{email} confirmed successfully."
|
msgid "%{email} confirmed successfully."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#, elixir-autogen, elixir-format
|
|
||||||
#: lib/cannery_web/components/move_ammo_group_component.ex:53
|
#: lib/cannery_web/components/move_ammo_group_component.ex:53
|
||||||
|
#, elixir-autogen, elixir-format
|
||||||
msgid "Ammo moved to %{name} successfully"
|
msgid "Ammo moved to %{name} successfully"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#, elixir-autogen, elixir-format
|
|
||||||
#: lib/cannery_web/live/invite_live/index.ex:121
|
#: lib/cannery_web/live/invite_live/index.ex:121
|
||||||
|
#, elixir-autogen, elixir-format
|
||||||
msgid "Copied to clipboard"
|
msgid "Copied to clipboard"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#, elixir-autogen, elixir-format, fuzzy
|
|
||||||
#: lib/cannery_web/live/container_live/edit_tags_component.ex:58
|
#: lib/cannery_web/live/container_live/edit_tags_component.ex:58
|
||||||
|
#, elixir-autogen, elixir-format, fuzzy
|
||||||
msgid "%{name} removed successfully"
|
msgid "%{name} removed successfully"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#, elixir-autogen, elixir-format
|
|
||||||
#: lib/cannery_web/live/ammo_group_live/index.html.heex:17
|
#: lib/cannery_web/live/ammo_group_live/index.html.heex:17
|
||||||
#: lib/cannery_web/live/ammo_group_live/index.html.heex:28
|
#: lib/cannery_web/live/ammo_group_live/index.html.heex:27
|
||||||
|
#, elixir-autogen, elixir-format
|
||||||
msgid "You'll need to"
|
msgid "You'll need to"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#, elixir-autogen, elixir-format, fuzzy
|
|
||||||
#: lib/cannery_web/live/ammo_group_live/form_component.html.heex:67
|
#: lib/cannery_web/live/ammo_group_live/form_component.html.heex:67
|
||||||
|
#, elixir-autogen, elixir-format, fuzzy
|
||||||
msgid "Creating..."
|
msgid "Creating..."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#, elixir-autogen, elixir-format
|
|
||||||
#: lib/cannery_web/templates/user_settings/edit.html.heex:136
|
#: lib/cannery_web/templates/user_settings/edit.html.heex:136
|
||||||
|
#, elixir-autogen, elixir-format
|
||||||
msgid "Are you sure you want to change your language?"
|
msgid "Are you sure you want to change your language?"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#, elixir-autogen, elixir-format
|
|
||||||
#: lib/cannery_web/controllers/user_settings_controller.ex:65
|
#: lib/cannery_web/controllers/user_settings_controller.ex:65
|
||||||
|
#, 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
|
#: lib/cannery_web/live/ammo_group_live/show.ex:50
|
||||||
|
#, elixir-autogen, elixir-format, fuzzy
|
||||||
msgid "Ammo deleted succesfully"
|
msgid "Ammo deleted succesfully"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#, elixir-autogen, elixir-format, fuzzy
|
|
||||||
#: lib/cannery_web/live/range_live/index.ex:68
|
#: lib/cannery_web/live/range_live/index.ex:68
|
||||||
|
#, elixir-autogen, elixir-format, fuzzy
|
||||||
msgid "Ammo unstaged succesfully"
|
msgid "Ammo unstaged succesfully"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#, elixir-autogen, elixir-format, fuzzy
|
|
||||||
#: lib/cannery_web/live/ammo_group_live/form_component.ex:118
|
#: lib/cannery_web/live/ammo_group_live/form_component.ex:118
|
||||||
|
#, elixir-autogen, elixir-format, fuzzy
|
||||||
msgid "Ammo updated successfully"
|
msgid "Ammo updated successfully"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
|
#: lib/cannery_web/live/ammo_group_live/form_component.ex:178
|
||||||
#, elixir-autogen, elixir-format, fuzzy
|
#, elixir-autogen, elixir-format, fuzzy
|
||||||
#: lib/cannery_web/live/ammo_group_live/form_component.ex:177
|
|
||||||
msgid "Ammo added successfully"
|
msgid "Ammo added successfully"
|
||||||
msgid_plural "Ammo added successfully"
|
msgid_plural "Ammo added successfully"
|
||||||
msgstr[0] ""
|
msgstr[0] ""
|
||||||
msgstr[1] ""
|
msgstr[1] ""
|
||||||
|
|
||||||
|
#: lib/cannery_web/live/ammo_type_live/index.ex:232
|
||||||
|
#: lib/cannery_web/live/ammo_type_live/show.html.heex:28
|
||||||
#, elixir-autogen, elixir-format, fuzzy
|
#, elixir-autogen, elixir-format, fuzzy
|
||||||
#: lib/cannery_web/live/ammo_type_live/index.ex:156
|
|
||||||
#: lib/cannery_web/live/ammo_type_live/show.html.heex:26
|
|
||||||
msgid "Are you sure you want to delete %{name}? This will delete all %{name} type ammo as well!"
|
msgid "Are you sure you want to delete %{name}? This will delete all %{name} type ammo as well!"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
@ -10,176 +10,181 @@
|
|||||||
msgid ""
|
msgid ""
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#, elixir-autogen, elixir-format
|
|
||||||
#: lib/cannery/containers.ex:140
|
#: lib/cannery/containers.ex:140
|
||||||
|
#, elixir-autogen, elixir-format
|
||||||
msgid "Container must be empty before deleting"
|
msgid "Container must be empty before deleting"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#, elixir-autogen, elixir-format
|
#: lib/cannery_web/live/container_live/index.ex:88
|
||||||
#: lib/cannery_web/live/container_live/index.ex:69
|
|
||||||
#: lib/cannery_web/live/container_live/show.ex:71
|
#: lib/cannery_web/live/container_live/show.ex:71
|
||||||
|
#, elixir-autogen, elixir-format
|
||||||
msgid "Could not delete %{name}: %{error}"
|
msgid "Could not delete %{name}: %{error}"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
|
#: lib/cannery_web/live/container_live/index.ex:76
|
||||||
#, elixir-autogen, elixir-format
|
#, elixir-autogen, elixir-format
|
||||||
#: lib/cannery_web/live/container_live/index.ex:57
|
|
||||||
msgid "Could not find that container"
|
msgid "Could not find that container"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#, elixir-autogen, elixir-format
|
|
||||||
#: lib/cannery_web/controllers/user_settings_controller.ex:84
|
#: lib/cannery_web/controllers/user_settings_controller.ex:84
|
||||||
|
#, elixir-autogen, elixir-format
|
||||||
msgid "Email change link is invalid or it has expired."
|
msgid "Email change link is invalid or it has expired."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#, elixir-autogen, elixir-format
|
|
||||||
#: lib/cannery_web/templates/error/error.html.heex:8
|
#: lib/cannery_web/templates/error/error.html.heex:8
|
||||||
|
#, elixir-autogen, elixir-format
|
||||||
msgid "Error"
|
msgid "Error"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#, elixir-autogen, elixir-format
|
|
||||||
#: lib/cannery_web/templates/error/error.html.heex:28
|
#: lib/cannery_web/templates/error/error.html.heex:28
|
||||||
|
#, elixir-autogen, elixir-format
|
||||||
msgid "Go back home"
|
msgid "Go back home"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#, elixir-autogen, elixir-format
|
|
||||||
#: lib/cannery_web/views/error_view.ex:11
|
#: lib/cannery_web/views/error_view.ex:11
|
||||||
|
#, elixir-autogen, elixir-format
|
||||||
msgid "Internal Server Error"
|
msgid "Internal Server Error"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#, elixir-autogen, elixir-format
|
|
||||||
#: lib/cannery_web/controllers/user_session_controller.ex:17
|
#: lib/cannery_web/controllers/user_session_controller.ex:17
|
||||||
|
#, elixir-autogen, elixir-format
|
||||||
msgid "Invalid email or password"
|
msgid "Invalid email or password"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#, elixir-autogen, elixir-format
|
|
||||||
#: lib/cannery_web/views/error_view.ex:9
|
#: lib/cannery_web/views/error_view.ex:9
|
||||||
|
#, elixir-autogen, elixir-format
|
||||||
msgid "Not found"
|
msgid "Not found"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#, elixir-autogen, elixir-format
|
|
||||||
#: lib/cannery_web/templates/user_registration/new.html.heex:16
|
#: lib/cannery_web/templates/user_registration/new.html.heex:16
|
||||||
#: lib/cannery_web/templates/user_reset_password/edit.html.heex:16
|
#: lib/cannery_web/templates/user_reset_password/edit.html.heex:16
|
||||||
#: lib/cannery_web/templates/user_settings/edit.html.heex:21
|
#: lib/cannery_web/templates/user_settings/edit.html.heex:21
|
||||||
#: lib/cannery_web/templates/user_settings/edit.html.heex:64
|
#: lib/cannery_web/templates/user_settings/edit.html.heex:64
|
||||||
#: lib/cannery_web/templates/user_settings/edit.html.heex:119
|
#: lib/cannery_web/templates/user_settings/edit.html.heex:119
|
||||||
|
#, elixir-autogen, elixir-format
|
||||||
msgid "Oops, something went wrong! Please check the errors below."
|
msgid "Oops, something went wrong! Please check the errors below."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#, elixir-autogen, elixir-format
|
|
||||||
#: lib/cannery_web/controllers/user_reset_password_controller.ex:63
|
#: lib/cannery_web/controllers/user_reset_password_controller.ex:63
|
||||||
|
#, elixir-autogen, elixir-format
|
||||||
msgid "Reset password link is invalid or it has expired."
|
msgid "Reset password link is invalid or it has expired."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#, elixir-autogen, elixir-format
|
|
||||||
#: lib/cannery_web/controllers/user_registration_controller.ex:25
|
#: lib/cannery_web/controllers/user_registration_controller.ex:25
|
||||||
#: lib/cannery_web/controllers/user_registration_controller.ex:56
|
#: lib/cannery_web/controllers/user_registration_controller.ex:56
|
||||||
|
#, elixir-autogen, elixir-format
|
||||||
msgid "Sorry, public registration is disabled"
|
msgid "Sorry, public registration is disabled"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#, elixir-autogen, elixir-format
|
|
||||||
#: lib/cannery_web/controllers/user_registration_controller.ex:15
|
#: lib/cannery_web/controllers/user_registration_controller.ex:15
|
||||||
#: lib/cannery_web/controllers/user_registration_controller.ex:46
|
#: lib/cannery_web/controllers/user_registration_controller.ex:46
|
||||||
|
#, elixir-autogen, elixir-format
|
||||||
msgid "Sorry, this invite was not found or expired"
|
msgid "Sorry, this invite was not found or expired"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#, elixir-autogen, elixir-format
|
|
||||||
#: lib/cannery_web/controllers/user_settings_controller.ex:99
|
#: lib/cannery_web/controllers/user_settings_controller.ex:99
|
||||||
|
#, elixir-autogen, elixir-format
|
||||||
msgid "Unable to delete user"
|
msgid "Unable to delete user"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#, elixir-autogen, elixir-format
|
|
||||||
#: lib/cannery_web/views/error_view.ex:10
|
#: lib/cannery_web/views/error_view.ex:10
|
||||||
|
#, elixir-autogen, elixir-format
|
||||||
msgid "Unauthorized"
|
msgid "Unauthorized"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#, elixir-autogen, elixir-format
|
|
||||||
#: lib/cannery_web/controllers/user_confirmation_controller.ex:54
|
#: lib/cannery_web/controllers/user_confirmation_controller.ex:54
|
||||||
|
#, elixir-autogen, elixir-format
|
||||||
msgid "User confirmation link is invalid or it has expired."
|
msgid "User confirmation link is invalid or it has expired."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#, elixir-autogen, elixir-format
|
|
||||||
#: lib/cannery_web/live/invite_live/index.ex:18
|
#: lib/cannery_web/live/invite_live/index.ex:18
|
||||||
|
#, elixir-autogen, elixir-format
|
||||||
msgid "You are not authorized to view this page"
|
msgid "You are not authorized to view this page"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#, elixir-autogen, elixir-format
|
|
||||||
#: lib/cannery_web/controllers/user_auth.ex:177
|
#: lib/cannery_web/controllers/user_auth.ex:177
|
||||||
|
#, elixir-autogen, elixir-format
|
||||||
msgid "You are not authorized to view this page."
|
msgid "You are not authorized to view this page."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
|
#: lib/cannery/accounts/user.ex:138
|
||||||
#, elixir-autogen, elixir-format
|
#, elixir-autogen, elixir-format
|
||||||
#: lib/cannery/accounts/user.ex:130
|
|
||||||
msgid "did not change"
|
msgid "did not change"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
|
#: lib/cannery/accounts/user.ex:159
|
||||||
#, elixir-autogen, elixir-format
|
#, elixir-autogen, elixir-format
|
||||||
#: lib/cannery/accounts/user.ex:151
|
|
||||||
msgid "does not match password"
|
msgid "does not match password"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
|
#: lib/cannery/accounts/user.ex:196
|
||||||
#, elixir-autogen, elixir-format
|
#, elixir-autogen, elixir-format
|
||||||
#: lib/cannery/accounts/user.ex:188
|
|
||||||
msgid "is not valid"
|
msgid "is not valid"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
|
#: lib/cannery/accounts/user.ex:92
|
||||||
#, elixir-autogen, elixir-format
|
#, elixir-autogen, elixir-format
|
||||||
#: lib/cannery/accounts/user.ex:84
|
|
||||||
msgid "must have the @ sign and no spaces"
|
msgid "must have the @ sign and no spaces"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#, elixir-autogen, elixir-format
|
|
||||||
#: lib/cannery/tags.ex:40
|
#: lib/cannery/tags.ex:40
|
||||||
|
#, elixir-autogen, elixir-format
|
||||||
msgid "Tag not found"
|
msgid "Tag not found"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#, elixir-autogen, elixir-format
|
|
||||||
#: lib/cannery_web/live/container_live/edit_tags_component.ex:30
|
#: lib/cannery_web/live/container_live/edit_tags_component.ex:30
|
||||||
|
#, elixir-autogen, elixir-format
|
||||||
msgid "Tag could not be added"
|
msgid "Tag could not be added"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
|
#: lib/cannery/activity_log/shot_group.ex:123
|
||||||
#, elixir-autogen, elixir-format
|
#, elixir-autogen, elixir-format
|
||||||
#: lib/cannery/activity_log/shot_group.ex:115
|
|
||||||
msgid "Count must be at least 1"
|
msgid "Count must be at least 1"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
|
#: lib/cannery/activity_log/shot_group.ex:82
|
||||||
|
#: lib/cannery/activity_log/shot_group.ex:119
|
||||||
#, elixir-autogen, elixir-format
|
#, elixir-autogen, elixir-format
|
||||||
#: lib/cannery/activity_log/shot_group.ex:74
|
|
||||||
#: lib/cannery/activity_log/shot_group.ex:111
|
|
||||||
msgid "Count must be less than %{count}"
|
msgid "Count must be less than %{count}"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#, elixir-autogen, elixir-format
|
|
||||||
#: lib/cannery_web/controllers/user_auth.ex:39
|
#: lib/cannery_web/controllers/user_auth.ex:39
|
||||||
#: lib/cannery_web/controllers/user_auth.ex:161
|
#: lib/cannery_web/controllers/user_auth.ex:161
|
||||||
|
#, elixir-autogen, elixir-format
|
||||||
msgid "You must confirm your account and log in to access this page."
|
msgid "You must confirm your account and log in to access this page."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#, elixir-autogen, elixir-format
|
|
||||||
#: lib/cannery_web/live/container_live/edit_tags_component.ex:52
|
#: lib/cannery_web/live/container_live/edit_tags_component.ex:52
|
||||||
|
#, elixir-autogen, elixir-format
|
||||||
msgid "Tag could not be removed"
|
msgid "Tag could not be removed"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
|
#: lib/cannery_web/live/ammo_group_live/form_component.ex:157
|
||||||
#, elixir-autogen, elixir-format
|
#, elixir-autogen, elixir-format
|
||||||
#: 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 ""
|
||||||
|
|
||||||
|
#: lib/cannery_web/live/ammo_group_live/form_component.ex:142
|
||||||
#, elixir-autogen, elixir-format
|
#, elixir-autogen, elixir-format
|
||||||
#: 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 ""
|
||||||
|
|
||||||
|
#: lib/cannery/ammo.ex:587
|
||||||
#, elixir-autogen, elixir-format
|
#, elixir-autogen, elixir-format
|
||||||
#: lib/cannery/ammo.ex:524
|
|
||||||
msgid "Invalid multiplier"
|
msgid "Invalid multiplier"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
|
#: lib/cannery/ammo/ammo_group.ex:94
|
||||||
#, elixir-autogen, elixir-format
|
#, elixir-autogen, elixir-format
|
||||||
#: lib/cannery/ammo/ammo_group.ex:84
|
|
||||||
msgid "Please select an ammo type and container"
|
msgid "Please select an ammo type and container"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
|
#: lib/cannery/activity_log/shot_group.ex:77
|
||||||
#, elixir-autogen, elixir-format
|
#, elixir-autogen, elixir-format
|
||||||
#: lib/cannery/activity_log/shot_group.ex:69
|
|
||||||
msgid "Please select a valid user and ammo group"
|
msgid "Please select a valid user and ammo group"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
|
#: lib/cannery_web/live/range_live/index.html.heex:67
|
||||||
|
#, elixir-autogen, elixir-format
|
||||||
|
msgid "Your browser does not support the canvas element."
|
||||||
|
msgstr ""
|
||||||
|
@ -23,204 +23,247 @@ msgstr ""
|
|||||||
## Run "mix gettext.extract" to bring this file up to
|
## Run "mix gettext.extract" to bring this file up to
|
||||||
## date. Leave "msgstr"s empty as changing them here has no
|
## date. Leave "msgstr"s empty as changing them here has no
|
||||||
## effect: edit them in PO (.po) files instead.
|
## effect: edit them in PO (.po) files instead.
|
||||||
#, 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
|
#: lib/cannery_web/live/ammo_group_live/index.ex:50
|
||||||
|
#: lib/cannery_web/live/ammo_group_live/index.html.heex:40
|
||||||
|
#, elixir-autogen, elixir-format
|
||||||
msgid "Add Ammo"
|
msgid "Add Ammo"
|
||||||
msgstr "Añadir Munición"
|
msgstr "Añadir Munición"
|
||||||
|
|
||||||
|
#: lib/cannery_web/live/ammo_group_live/index.html.heex:36
|
||||||
#, elixir-autogen, elixir-format
|
#, elixir-autogen, elixir-format
|
||||||
#: lib/cannery_web/live/ammo_group_live/index.html.heex:37
|
|
||||||
msgid "Add your first box!"
|
msgid "Add your first box!"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
|
#: lib/cannery_web/live/container_live/index.html.heex:13
|
||||||
#, elixir-autogen, elixir-format
|
#, elixir-autogen, elixir-format
|
||||||
#: lib/cannery_web/live/container_live/index.html.heex:12
|
|
||||||
msgid "Add your first container!"
|
msgid "Add your first container!"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
|
#: lib/cannery_web/live/ammo_type_live/index.html.heex:13
|
||||||
#, elixir-autogen, elixir-format
|
#, elixir-autogen, elixir-format
|
||||||
#: lib/cannery_web/live/ammo_type_live/index.html.heex:12
|
|
||||||
msgid "Add your first type!"
|
msgid "Add your first type!"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#, elixir-autogen, elixir-format
|
|
||||||
#: lib/cannery_web/templates/user_settings/edit.html.heex:15
|
#: lib/cannery_web/templates/user_settings/edit.html.heex:15
|
||||||
#: lib/cannery_web/templates/user_settings/edit.html.heex:44
|
#: lib/cannery_web/templates/user_settings/edit.html.heex:44
|
||||||
|
#, elixir-autogen, elixir-format
|
||||||
msgid "Change email"
|
msgid "Change email"
|
||||||
msgstr "Cambiar correo electrónico"
|
msgstr "Cambiar correo electrónico"
|
||||||
|
|
||||||
#, elixir-autogen, elixir-format
|
|
||||||
#: lib/cannery_web/templates/user_settings/edit.html.heex:58
|
#: lib/cannery_web/templates/user_settings/edit.html.heex:58
|
||||||
#: lib/cannery_web/templates/user_settings/edit.html.heex:99
|
#: lib/cannery_web/templates/user_settings/edit.html.heex:99
|
||||||
|
#, elixir-autogen, elixir-format
|
||||||
msgid "Change password"
|
msgid "Change password"
|
||||||
msgstr "Cambiar contraseña"
|
msgstr "Cambiar contraseña"
|
||||||
|
|
||||||
#, elixir-autogen, elixir-format
|
|
||||||
#: lib/cannery_web/live/invite_live/index.html.heex:17
|
#: lib/cannery_web/live/invite_live/index.html.heex:17
|
||||||
|
#, elixir-autogen, elixir-format
|
||||||
msgid "Create Invite"
|
msgid "Create Invite"
|
||||||
msgstr "Crear Invitación"
|
msgstr "Crear Invitación"
|
||||||
|
|
||||||
|
#: lib/cannery_web/templates/user_settings/edit.html.heex:157
|
||||||
#, elixir-autogen, elixir-format
|
#, elixir-autogen, elixir-format
|
||||||
#: lib/cannery_web/templates/user_settings/edit.html.heex:142
|
|
||||||
msgid "Delete User"
|
msgid "Delete User"
|
||||||
msgstr "Eliminar cuenta de Usuario"
|
msgstr "Eliminar cuenta de Usuario"
|
||||||
|
|
||||||
#, elixir-autogen, elixir-format
|
|
||||||
#: lib/cannery_web/templates/user_registration/new.html.heex:52
|
#: lib/cannery_web/templates/user_registration/new.html.heex:52
|
||||||
#: lib/cannery_web/templates/user_reset_password/new.html.heex:3
|
#: lib/cannery_web/templates/user_reset_password/new.html.heex:3
|
||||||
#: lib/cannery_web/templates/user_session/new.html.heex:45
|
#: lib/cannery_web/templates/user_session/new.html.heex:45
|
||||||
|
#, elixir-autogen, elixir-format
|
||||||
msgid "Forgot your password?"
|
msgid "Forgot your password?"
|
||||||
msgstr "¿Has olvidado tu contraseña?"
|
msgstr "¿Has olvidado tu contraseña?"
|
||||||
|
|
||||||
|
#: lib/cannery_web/live/invite_live/index.html.heex:13
|
||||||
#, elixir-autogen, elixir-format
|
#, elixir-autogen, elixir-format
|
||||||
#: lib/cannery_web/live/invite_live/index.html.heex:12
|
|
||||||
msgid "Invite someone new!"
|
msgid "Invite someone new!"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#, elixir-autogen, elixir-format
|
#: lib/cannery_web/components/topbar.ex:137
|
||||||
#: 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:49
|
||||||
#: lib/cannery_web/templates/user_reset_password/edit.html.heex:48
|
#: lib/cannery_web/templates/user_reset_password/edit.html.heex:48
|
||||||
#: lib/cannery_web/templates/user_reset_password/new.html.heex:30
|
#: lib/cannery_web/templates/user_reset_password/new.html.heex:30
|
||||||
#: lib/cannery_web/templates/user_session/new.html.heex:3
|
#: lib/cannery_web/templates/user_session/new.html.heex:3
|
||||||
#: lib/cannery_web/templates/user_session/new.html.heex:33
|
#: lib/cannery_web/templates/user_session/new.html.heex:33
|
||||||
|
#, elixir-autogen, elixir-format
|
||||||
msgid "Log in"
|
msgid "Log in"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
|
#: lib/cannery_web/live/tag_live/index.html.heex:15
|
||||||
#, elixir-autogen, elixir-format
|
#, elixir-autogen, elixir-format
|
||||||
#: lib/cannery_web/live/tag_live/index.html.heex:14
|
|
||||||
msgid "Make your first tag!"
|
msgid "Make your first tag!"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#, 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
|
||||||
|
#, elixir-autogen, elixir-format
|
||||||
msgid "New Ammo type"
|
msgid "New Ammo type"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#, elixir-autogen, elixir-format
|
|
||||||
#: lib/cannery_web/live/container_live/index.html.heex:17
|
#: lib/cannery_web/live/container_live/index.html.heex:17
|
||||||
|
#, elixir-autogen, elixir-format
|
||||||
msgid "New Container"
|
msgid "New Container"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#, elixir-autogen, elixir-format
|
|
||||||
#: lib/cannery_web/live/tag_live/index.html.heex:19
|
#: lib/cannery_web/live/tag_live/index.html.heex:19
|
||||||
|
#, elixir-autogen, elixir-format
|
||||||
msgid "New Tag"
|
msgid "New Tag"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#, elixir-autogen, elixir-format
|
#: lib/cannery_web/components/topbar.ex:128
|
||||||
#: lib/cannery_web/components/topbar.ex:105
|
#: lib/cannery_web/templates/user_confirmation/new.html.heex:26
|
||||||
#: 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
|
||||||
#: lib/cannery_web/templates/user_reset_password/edit.html.heex:43
|
#: lib/cannery_web/templates/user_reset_password/edit.html.heex:44
|
||||||
#: lib/cannery_web/templates/user_reset_password/new.html.heex:25
|
#: lib/cannery_web/templates/user_reset_password/new.html.heex:26
|
||||||
#: lib/cannery_web/templates/user_session/new.html.heex:40
|
#: lib/cannery_web/templates/user_session/new.html.heex:41
|
||||||
|
#, elixir-autogen, elixir-format
|
||||||
msgid "Register"
|
msgid "Register"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#, elixir-autogen, elixir-format
|
|
||||||
#: lib/cannery_web/templates/user_confirmation/new.html.heex:3
|
#: lib/cannery_web/templates/user_confirmation/new.html.heex:3
|
||||||
#: lib/cannery_web/templates/user_confirmation/new.html.heex:16
|
#: lib/cannery_web/templates/user_confirmation/new.html.heex:16
|
||||||
|
#, elixir-autogen, elixir-format
|
||||||
msgid "Resend confirmation instructions"
|
msgid "Resend confirmation instructions"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#, elixir-autogen, elixir-format
|
|
||||||
#: lib/cannery_web/templates/user_reset_password/edit.html.heex:3
|
#: lib/cannery_web/templates/user_reset_password/edit.html.heex:3
|
||||||
#: lib/cannery_web/templates/user_reset_password/edit.html.heex:34
|
#: lib/cannery_web/templates/user_reset_password/edit.html.heex:34
|
||||||
|
#, elixir-autogen, elixir-format
|
||||||
msgid "Reset password"
|
msgid "Reset password"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#, elixir-autogen, elixir-format
|
#: lib/cannery_web/components/add_shot_group_component.html.heex:53
|
||||||
#: lib/cannery_web/components/add_shot_group_component.html.heex:46
|
|
||||||
#: 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:31
|
#: 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:91
|
#: lib/cannery_web/live/tag_live/form_component.ex:91
|
||||||
|
#, elixir-autogen, elixir-format
|
||||||
msgid "Save"
|
msgid "Save"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#, elixir-autogen, elixir-format
|
|
||||||
#: lib/cannery_web/templates/user_reset_password/new.html.heex:16
|
#: lib/cannery_web/templates/user_reset_password/new.html.heex:16
|
||||||
|
#, elixir-autogen, elixir-format
|
||||||
msgid "Send instructions to reset password"
|
msgid "Send instructions to reset password"
|
||||||
msgstr "Enviar instrucciones para reestablecer contraseña"
|
msgstr "Enviar instrucciones para reestablecer contraseña"
|
||||||
|
|
||||||
|
#: lib/cannery_web/live/container_live/show.html.heex:72
|
||||||
#, elixir-autogen, elixir-format
|
#, elixir-autogen, elixir-format
|
||||||
#: lib/cannery_web/live/container_live/show.html.heex:65
|
|
||||||
msgid "Why not add one?"
|
msgid "Why not add one?"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
|
#: lib/cannery_web/live/container_live/edit_tags_component.html.heex:53
|
||||||
#, elixir-autogen, elixir-format
|
#, elixir-autogen, elixir-format
|
||||||
#: lib/cannery_web/live/container_live/edit_tags_component.html.heex:52
|
|
||||||
msgid "Add"
|
msgid "Add"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#, elixir-autogen, elixir-format
|
|
||||||
#: lib/cannery_web/live/range_live/index.html.heex:17
|
#: lib/cannery_web/live/range_live/index.html.heex:17
|
||||||
|
#, elixir-autogen, elixir-format
|
||||||
msgid "Stage ammo"
|
msgid "Stage ammo"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
|
#: lib/cannery_web/live/range_live/index.html.heex:13
|
||||||
#, elixir-autogen, elixir-format
|
#, elixir-autogen, elixir-format
|
||||||
#: lib/cannery_web/live/range_live/index.html.heex:12
|
|
||||||
msgid "Why not get some ready to shoot?"
|
msgid "Why not get some ready to shoot?"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
|
#: lib/cannery_web/live/ammo_group_live/index.ex:199
|
||||||
|
#: lib/cannery_web/live/ammo_group_live/show.html.heex:101
|
||||||
|
#: lib/cannery_web/live/range_live/index.html.heex:38
|
||||||
#, elixir-autogen, elixir-format
|
#, elixir-autogen, elixir-format
|
||||||
#: lib/cannery_web/live/ammo_group_live/index.ex:160
|
|
||||||
#: lib/cannery_web/live/ammo_group_live/show.html.heex:91
|
|
||||||
#: lib/cannery_web/live/range_live/index.html.heex:36
|
|
||||||
msgid "Record shots"
|
msgid "Record shots"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
|
#: lib/cannery_web/components/move_ammo_group_component.ex:90
|
||||||
#, elixir-autogen, elixir-format
|
#, elixir-autogen, elixir-format
|
||||||
#: lib/cannery_web/components/move_ammo_group_component.ex:89
|
|
||||||
msgid "Add another container!"
|
msgid "Add another container!"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
|
#: lib/cannery_web/live/ammo_group_live/show.html.heex:94
|
||||||
#, elixir-autogen, elixir-format
|
#, elixir-autogen, elixir-format
|
||||||
#: lib/cannery_web/live/ammo_group_live/show.html.heex:85
|
|
||||||
msgid "Move containers"
|
msgid "Move containers"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
|
#: lib/cannery_web/components/move_ammo_group_component.ex:126
|
||||||
#, elixir-autogen, elixir-format
|
#, elixir-autogen, elixir-format
|
||||||
#: lib/cannery_web/components/move_ammo_group_component.ex:127
|
|
||||||
msgid "Select"
|
msgid "Select"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
|
#: lib/cannery_web/live/invite_live/index.html.heex:31
|
||||||
#, elixir-autogen, elixir-format
|
#, elixir-autogen, elixir-format
|
||||||
#: lib/cannery_web/live/invite_live/index.html.heex:33
|
|
||||||
msgid "Copy to clipboard"
|
msgid "Copy to clipboard"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
|
#: lib/cannery_web/live/ammo_group_live/index.html.heex:21
|
||||||
#, elixir-autogen, elixir-format
|
#, elixir-autogen, elixir-format
|
||||||
#: lib/cannery_web/live/ammo_group_live/index.html.heex:20
|
|
||||||
msgid "add a container first"
|
msgid "add a container first"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#, elixir-autogen, elixir-format
|
|
||||||
#: lib/cannery_web/live/ammo_group_live/form_component.html.heex:66
|
#: lib/cannery_web/live/ammo_group_live/form_component.html.heex:66
|
||||||
|
#, elixir-autogen, elixir-format
|
||||||
msgid "Create"
|
msgid "Create"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#, elixir-autogen, elixir-format
|
|
||||||
#: lib/cannery_web/templates/user_settings/edit.html.heex:113
|
#: lib/cannery_web/templates/user_settings/edit.html.heex:113
|
||||||
|
#, elixir-autogen, elixir-format
|
||||||
msgid "Change Language"
|
msgid "Change Language"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#, elixir-autogen, elixir-format
|
|
||||||
#: lib/cannery_web/templates/user_settings/edit.html.heex:134
|
#: lib/cannery_web/templates/user_settings/edit.html.heex:134
|
||||||
|
#, elixir-autogen, elixir-format
|
||||||
msgid "Change language"
|
msgid "Change language"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
|
#: lib/cannery_web/live/ammo_group_live/show.html.heex:60
|
||||||
#, elixir-autogen, elixir-format
|
#, elixir-autogen, elixir-format
|
||||||
#: lib/cannery_web/live/ammo_group_live/show.html.heex:55
|
|
||||||
msgid "View in Catalog"
|
msgid "View in Catalog"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#, elixir-autogen, elixir-format
|
|
||||||
#: lib/cannery_web/live/ammo_group_live/index.html.heex:31
|
#: lib/cannery_web/live/ammo_group_live/index.html.heex:31
|
||||||
|
#, elixir-autogen, elixir-format
|
||||||
msgid "add an ammo type first"
|
msgid "add an ammo type first"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
|
#: lib/cannery_web/live/invite_live/index.html.heex:60
|
||||||
|
#, elixir-autogen, elixir-format
|
||||||
|
msgid "Disable"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: lib/cannery_web/live/invite_live/index.html.heex:64
|
||||||
|
#, elixir-autogen, elixir-format
|
||||||
|
msgid "Enable"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: lib/cannery_web/components/move_ammo_group_component.ex:80
|
||||||
|
#, elixir-autogen, elixir-format
|
||||||
|
msgid "Move ammo"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: lib/cannery_web/live/invite_live/index.html.heex:80
|
||||||
|
#, elixir-autogen, elixir-format
|
||||||
|
msgid "Set Unlimited"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: lib/cannery_web/live/container_live/show.html.heex:97
|
||||||
|
#, elixir-autogen, elixir-format
|
||||||
|
msgid "Show used"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: lib/cannery_web/live/ammo_group_live/show.html.heex:86
|
||||||
|
#: lib/cannery_web/live/range_live/index.html.heex:31
|
||||||
|
#, elixir-autogen, elixir-format
|
||||||
|
msgid "Stage for range"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: lib/cannery_web/live/ammo_group_live/show.html.heex:85
|
||||||
|
#: lib/cannery_web/live/range_live/index.html.heex:30
|
||||||
|
#, elixir-autogen, elixir-format
|
||||||
|
msgid "Unstage from range"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: lib/cannery_web/templates/user_settings/edit.html.heex:148
|
||||||
|
#, elixir-autogen, elixir-format
|
||||||
|
msgid "Export Data as JSON"
|
||||||
|
msgstr ""
|
||||||
|
File diff suppressed because it is too large
Load Diff
@ -23,92 +23,92 @@ msgstr ""
|
|||||||
## Run "mix gettext.extract" to bring this file up to
|
## Run "mix gettext.extract" to bring this file up to
|
||||||
## date. Leave "msgstr"s empty as changing them here has no
|
## date. Leave "msgstr"s empty as changing them here has no
|
||||||
## effect: edit them in PO (.po) files instead.
|
## effect: edit them in PO (.po) files instead.
|
||||||
#, elixir-autogen, elixir-format
|
|
||||||
#: lib/cannery/accounts/email.ex:30
|
#: lib/cannery/accounts/email.ex:30
|
||||||
|
#, elixir-autogen, elixir-format
|
||||||
msgid "Confirm your %{name} account"
|
msgid "Confirm your %{name} account"
|
||||||
msgstr "Confirma el %{name} de la cuenta"
|
msgstr "Confirma el %{name} de la cuenta"
|
||||||
|
|
||||||
#, elixir-autogen, elixir-format
|
|
||||||
#: lib/cannery_web/templates/email/confirm_email.html.eex:3
|
#: lib/cannery_web/templates/email/confirm_email.html.eex:3
|
||||||
#: lib/cannery_web/templates/email/confirm_email.txt.eex:2
|
#: lib/cannery_web/templates/email/confirm_email.txt.eex:2
|
||||||
#: lib/cannery_web/templates/email/reset_password.html.eex:3
|
#: lib/cannery_web/templates/email/reset_password.html.eex:3
|
||||||
#: lib/cannery_web/templates/email/reset_password.txt.eex:2
|
#: lib/cannery_web/templates/email/reset_password.txt.eex:2
|
||||||
#: lib/cannery_web/templates/email/update_email.html.eex:3
|
#: lib/cannery_web/templates/email/update_email.html.eex:3
|
||||||
#: lib/cannery_web/templates/email/update_email.txt.eex:2
|
#: lib/cannery_web/templates/email/update_email.txt.eex:2
|
||||||
|
#, elixir-autogen, elixir-format
|
||||||
msgid "Hi %{email},"
|
msgid "Hi %{email},"
|
||||||
msgstr "Hola %{email},"
|
msgstr "Hola %{email},"
|
||||||
|
|
||||||
#, elixir-autogen, elixir-format
|
|
||||||
#: lib/cannery_web/templates/email/confirm_email.txt.eex:10
|
#: lib/cannery_web/templates/email/confirm_email.txt.eex:10
|
||||||
|
#, elixir-autogen, elixir-format
|
||||||
msgid "If you didn't create an account at %{url}, please ignore this."
|
msgid "If you didn't create an account at %{url}, please ignore this."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#, elixir-autogen, elixir-format
|
|
||||||
#: lib/cannery_web/templates/email/reset_password.txt.eex:8
|
#: lib/cannery_web/templates/email/reset_password.txt.eex:8
|
||||||
#: lib/cannery_web/templates/email/update_email.txt.eex:8
|
#: lib/cannery_web/templates/email/update_email.txt.eex:8
|
||||||
|
#, elixir-autogen, elixir-format
|
||||||
msgid "If you didn't request this change from %{url}, please ignore this."
|
msgid "If you didn't request this change from %{url}, please ignore this."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#, elixir-autogen, elixir-format
|
|
||||||
#: lib/cannery/accounts/email.ex:37
|
#: lib/cannery/accounts/email.ex:37
|
||||||
|
#, elixir-autogen, elixir-format
|
||||||
msgid "Reset your %{name} password"
|
msgid "Reset your %{name} password"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#, elixir-autogen, elixir-format
|
|
||||||
#: lib/cannery/accounts/email.ex:44
|
#: lib/cannery/accounts/email.ex:44
|
||||||
|
#, elixir-autogen, elixir-format
|
||||||
msgid "Update your %{name} email"
|
msgid "Update your %{name} email"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#, elixir-autogen, elixir-format
|
|
||||||
#: lib/cannery_web/templates/email/confirm_email.html.eex:9
|
#: lib/cannery_web/templates/email/confirm_email.html.eex:9
|
||||||
|
#, elixir-autogen, elixir-format
|
||||||
msgid "Welcome to %{name}!"
|
msgid "Welcome to %{name}!"
|
||||||
msgstr "¡Bienvenide a %{name}!"
|
msgstr "¡Bienvenide a %{name}!"
|
||||||
|
|
||||||
#, elixir-autogen, elixir-format
|
|
||||||
#: lib/cannery_web/templates/email/confirm_email.txt.eex:4
|
#: lib/cannery_web/templates/email/confirm_email.txt.eex:4
|
||||||
|
#, elixir-autogen, elixir-format
|
||||||
msgid "Welcome to %{name}%!"
|
msgid "Welcome to %{name}%!"
|
||||||
msgstr "¡Bienvenide a %{name}%!"
|
msgstr "¡Bienvenide a %{name}%!"
|
||||||
|
|
||||||
#, elixir-autogen, elixir-format
|
|
||||||
#: lib/cannery_web/templates/email/update_email.html.eex:8
|
#: lib/cannery_web/templates/email/update_email.html.eex:8
|
||||||
#: lib/cannery_web/templates/email/update_email.txt.eex:4
|
#: lib/cannery_web/templates/email/update_email.txt.eex:4
|
||||||
|
#, elixir-autogen, elixir-format
|
||||||
msgid "You can change your email by visiting the URL below:"
|
msgid "You can change your email by visiting the URL below:"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
"Puede cambiar su correo electrónico visitando el enlace que se muestra a "
|
"Puede cambiar su correo electrónico visitando el enlace que se muestra a "
|
||||||
"continuación:"
|
"continuación:"
|
||||||
|
|
||||||
#, elixir-autogen, elixir-format
|
|
||||||
#: lib/cannery_web/templates/email/confirm_email.html.eex:14
|
#: lib/cannery_web/templates/email/confirm_email.html.eex:14
|
||||||
#: lib/cannery_web/templates/email/confirm_email.txt.eex:6
|
#: lib/cannery_web/templates/email/confirm_email.txt.eex:6
|
||||||
|
#, elixir-autogen, elixir-format
|
||||||
msgid "You can confirm your account by visiting the URL below:"
|
msgid "You can confirm your account by visiting the URL below:"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
"Puede confirmar su cuenta visitando el enlace que se muestra a continuación:"
|
"Puede confirmar su cuenta visitando el enlace que se muestra a continuación:"
|
||||||
|
|
||||||
#, elixir-autogen, elixir-format
|
|
||||||
#: lib/cannery_web/templates/email/reset_password.html.eex:8
|
#: lib/cannery_web/templates/email/reset_password.html.eex:8
|
||||||
#: lib/cannery_web/templates/email/reset_password.txt.eex:4
|
#: lib/cannery_web/templates/email/reset_password.txt.eex:4
|
||||||
|
#, elixir-autogen, elixir-format
|
||||||
msgid "You can reset your password by visiting the URL below:"
|
msgid "You can reset your password by visiting the URL below:"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
"Puede reestablecer su contraseña visitando el enlace que se muestra a "
|
"Puede reestablecer su contraseña visitando el enlace que se muestra a "
|
||||||
"continuación:"
|
"continuación:"
|
||||||
|
|
||||||
#, elixir-autogen, elixir-format
|
|
||||||
#: lib/cannery_web/templates/email/confirm_email.html.eex:22
|
#: lib/cannery_web/templates/email/confirm_email.html.eex:22
|
||||||
|
#, elixir-autogen, elixir-format
|
||||||
msgid "If you didn't create an account at %{name}, please ignore this."
|
msgid "If you didn't create an account at %{name}, please ignore this."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#, elixir-autogen, elixir-format
|
|
||||||
#: lib/cannery_web/templates/email/reset_password.html.eex:16
|
#: lib/cannery_web/templates/email/reset_password.html.eex:16
|
||||||
#: lib/cannery_web/templates/email/update_email.html.eex:16
|
#: lib/cannery_web/templates/email/update_email.html.eex:16
|
||||||
|
#, elixir-autogen, elixir-format
|
||||||
msgid "If you didn't request this change from %{name}, please ignore this."
|
msgid "If you didn't request this change from %{name}, please ignore this."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#, elixir-autogen, elixir-format
|
|
||||||
#: lib/cannery_web/templates/layout/email.txt.eex:9
|
#: lib/cannery_web/templates/layout/email.txt.eex:9
|
||||||
|
#, elixir-autogen, elixir-format
|
||||||
msgid "This email was sent from %{name} at %{url}, the self-hosted firearm tracker website."
|
msgid "This email was sent from %{name} at %{url}, the self-hosted firearm tracker website."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#, elixir-autogen, elixir-format
|
|
||||||
#: lib/cannery_web/templates/layout/email.html.heex:13
|
#: lib/cannery_web/templates/layout/email.html.heex:13
|
||||||
|
#, elixir-autogen, elixir-format
|
||||||
msgid "This email was sent from %{name}, the self-hosted firearm tracker website."
|
msgid "This email was sent from %{name}, the self-hosted firearm tracker website."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
@ -23,179 +23,184 @@ msgstr ""
|
|||||||
## Run "mix gettext.extract" to bring this file up to
|
## Run "mix gettext.extract" to bring this file up to
|
||||||
## date. Leave "msgstr"s empty as changing them here has no
|
## date. Leave "msgstr"s empty as changing them here has no
|
||||||
## effect: edit them in PO (.po) files instead.
|
## effect: edit them in PO (.po) files instead.
|
||||||
#, elixir-autogen, elixir-format
|
|
||||||
#: lib/cannery/containers.ex:140
|
#: lib/cannery/containers.ex:140
|
||||||
|
#, elixir-autogen, elixir-format
|
||||||
msgid "Container must be empty before deleting"
|
msgid "Container must be empty before deleting"
|
||||||
msgstr "el Contenedor debe estar vació antes de borrarlo"
|
msgstr "el Contenedor debe estar vació antes de borrarlo"
|
||||||
|
|
||||||
#, elixir-autogen, elixir-format
|
#: lib/cannery_web/live/container_live/index.ex:88
|
||||||
#: lib/cannery_web/live/container_live/index.ex:69
|
|
||||||
#: lib/cannery_web/live/container_live/show.ex:71
|
#: lib/cannery_web/live/container_live/show.ex:71
|
||||||
|
#, elixir-autogen, elixir-format
|
||||||
msgid "Could not delete %{name}: %{error}"
|
msgid "Could not delete %{name}: %{error}"
|
||||||
msgstr "No se pudo eliminar %{name}: %{error}"
|
msgstr "No se pudo eliminar %{name}: %{error}"
|
||||||
|
|
||||||
|
#: lib/cannery_web/live/container_live/index.ex:76
|
||||||
#, elixir-autogen, elixir-format
|
#, elixir-autogen, elixir-format
|
||||||
#: lib/cannery_web/live/container_live/index.ex:57
|
|
||||||
msgid "Could not find that container"
|
msgid "Could not find that container"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#, elixir-autogen, elixir-format
|
|
||||||
#: lib/cannery_web/controllers/user_settings_controller.ex:84
|
#: lib/cannery_web/controllers/user_settings_controller.ex:84
|
||||||
|
#, elixir-autogen, elixir-format
|
||||||
msgid "Email change link is invalid or it has expired."
|
msgid "Email change link is invalid or it has expired."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#, elixir-autogen, elixir-format
|
|
||||||
#: lib/cannery_web/templates/error/error.html.heex:8
|
#: lib/cannery_web/templates/error/error.html.heex:8
|
||||||
|
#, elixir-autogen, elixir-format
|
||||||
msgid "Error"
|
msgid "Error"
|
||||||
msgstr "Error"
|
msgstr "Error"
|
||||||
|
|
||||||
#, elixir-autogen, elixir-format
|
|
||||||
#: lib/cannery_web/templates/error/error.html.heex:28
|
#: lib/cannery_web/templates/error/error.html.heex:28
|
||||||
|
#, elixir-autogen, elixir-format
|
||||||
msgid "Go back home"
|
msgid "Go back home"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#, elixir-autogen, elixir-format
|
|
||||||
#: lib/cannery_web/views/error_view.ex:11
|
#: lib/cannery_web/views/error_view.ex:11
|
||||||
|
#, elixir-autogen, elixir-format
|
||||||
msgid "Internal Server Error"
|
msgid "Internal Server Error"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#, elixir-autogen, elixir-format
|
|
||||||
#: lib/cannery_web/controllers/user_session_controller.ex:17
|
#: lib/cannery_web/controllers/user_session_controller.ex:17
|
||||||
|
#, elixir-autogen, elixir-format
|
||||||
msgid "Invalid email or password"
|
msgid "Invalid email or password"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#, elixir-autogen, elixir-format
|
|
||||||
#: lib/cannery_web/views/error_view.ex:9
|
#: lib/cannery_web/views/error_view.ex:9
|
||||||
|
#, elixir-autogen, elixir-format
|
||||||
msgid "Not found"
|
msgid "Not found"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#, elixir-autogen, elixir-format
|
|
||||||
#: lib/cannery_web/templates/user_registration/new.html.heex:16
|
#: lib/cannery_web/templates/user_registration/new.html.heex:16
|
||||||
#: lib/cannery_web/templates/user_reset_password/edit.html.heex:16
|
#: lib/cannery_web/templates/user_reset_password/edit.html.heex:16
|
||||||
#: lib/cannery_web/templates/user_settings/edit.html.heex:21
|
#: lib/cannery_web/templates/user_settings/edit.html.heex:21
|
||||||
#: lib/cannery_web/templates/user_settings/edit.html.heex:64
|
#: lib/cannery_web/templates/user_settings/edit.html.heex:64
|
||||||
#: lib/cannery_web/templates/user_settings/edit.html.heex:119
|
#: lib/cannery_web/templates/user_settings/edit.html.heex:119
|
||||||
|
#, elixir-autogen, elixir-format
|
||||||
msgid "Oops, something went wrong! Please check the errors below."
|
msgid "Oops, something went wrong! Please check the errors below."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
"¡Ups, algo ha ido mal! Por favor, compruebe los errores que se muestran a "
|
"¡Ups, algo ha ido mal! Por favor, compruebe los errores que se muestran a "
|
||||||
"continuación."
|
"continuación."
|
||||||
|
|
||||||
#, elixir-autogen, elixir-format
|
|
||||||
#: lib/cannery_web/controllers/user_reset_password_controller.ex:63
|
#: lib/cannery_web/controllers/user_reset_password_controller.ex:63
|
||||||
|
#, elixir-autogen, elixir-format
|
||||||
msgid "Reset password link is invalid or it has expired."
|
msgid "Reset password link is invalid or it has expired."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
"El enlace de reestablecimiento de la contraseña es inválido o ha caducado."
|
"El enlace de reestablecimiento de la contraseña es inválido o ha caducado."
|
||||||
|
|
||||||
#, elixir-autogen, elixir-format
|
|
||||||
#: lib/cannery_web/controllers/user_registration_controller.ex:25
|
#: lib/cannery_web/controllers/user_registration_controller.ex:25
|
||||||
#: lib/cannery_web/controllers/user_registration_controller.ex:56
|
#: lib/cannery_web/controllers/user_registration_controller.ex:56
|
||||||
|
#, elixir-autogen, elixir-format
|
||||||
msgid "Sorry, public registration is disabled"
|
msgid "Sorry, public registration is disabled"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#, elixir-autogen, elixir-format
|
|
||||||
#: lib/cannery_web/controllers/user_registration_controller.ex:15
|
#: lib/cannery_web/controllers/user_registration_controller.ex:15
|
||||||
#: lib/cannery_web/controllers/user_registration_controller.ex:46
|
#: lib/cannery_web/controllers/user_registration_controller.ex:46
|
||||||
|
#, elixir-autogen, elixir-format
|
||||||
msgid "Sorry, this invite was not found or expired"
|
msgid "Sorry, this invite was not found or expired"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#, elixir-autogen, elixir-format
|
|
||||||
#: lib/cannery_web/controllers/user_settings_controller.ex:99
|
#: lib/cannery_web/controllers/user_settings_controller.ex:99
|
||||||
|
#, elixir-autogen, elixir-format
|
||||||
msgid "Unable to delete user"
|
msgid "Unable to delete user"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#, elixir-autogen, elixir-format
|
|
||||||
#: lib/cannery_web/views/error_view.ex:10
|
#: lib/cannery_web/views/error_view.ex:10
|
||||||
|
#, elixir-autogen, elixir-format
|
||||||
msgid "Unauthorized"
|
msgid "Unauthorized"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#, elixir-autogen, elixir-format
|
|
||||||
#: lib/cannery_web/controllers/user_confirmation_controller.ex:54
|
#: lib/cannery_web/controllers/user_confirmation_controller.ex:54
|
||||||
|
#, elixir-autogen, elixir-format
|
||||||
msgid "User confirmation link is invalid or it has expired."
|
msgid "User confirmation link is invalid or it has expired."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#, elixir-autogen, elixir-format
|
|
||||||
#: lib/cannery_web/live/invite_live/index.ex:18
|
#: lib/cannery_web/live/invite_live/index.ex:18
|
||||||
|
#, elixir-autogen, elixir-format
|
||||||
msgid "You are not authorized to view this page"
|
msgid "You are not authorized to view this page"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#, elixir-autogen, elixir-format
|
|
||||||
#: lib/cannery_web/controllers/user_auth.ex:177
|
#: lib/cannery_web/controllers/user_auth.ex:177
|
||||||
|
#, elixir-autogen, elixir-format
|
||||||
msgid "You are not authorized to view this page."
|
msgid "You are not authorized to view this page."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
|
#: lib/cannery/accounts/user.ex:138
|
||||||
#, elixir-autogen, elixir-format
|
#, elixir-autogen, elixir-format
|
||||||
#: lib/cannery/accounts/user.ex:130
|
|
||||||
msgid "did not change"
|
msgid "did not change"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
|
#: lib/cannery/accounts/user.ex:159
|
||||||
#, elixir-autogen, elixir-format
|
#, elixir-autogen, elixir-format
|
||||||
#: lib/cannery/accounts/user.ex:151
|
|
||||||
msgid "does not match password"
|
msgid "does not match password"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
|
#: lib/cannery/accounts/user.ex:196
|
||||||
#, elixir-autogen, elixir-format
|
#, elixir-autogen, elixir-format
|
||||||
#: lib/cannery/accounts/user.ex:188
|
|
||||||
msgid "is not valid"
|
msgid "is not valid"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
|
#: lib/cannery/accounts/user.ex:92
|
||||||
#, elixir-autogen, elixir-format
|
#, elixir-autogen, elixir-format
|
||||||
#: lib/cannery/accounts/user.ex:84
|
|
||||||
msgid "must have the @ sign and no spaces"
|
msgid "must have the @ sign and no spaces"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#, elixir-autogen, elixir-format
|
|
||||||
#: lib/cannery/tags.ex:40
|
#: lib/cannery/tags.ex:40
|
||||||
|
#, elixir-autogen, elixir-format
|
||||||
msgid "Tag not found"
|
msgid "Tag not found"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#, elixir-autogen, elixir-format
|
|
||||||
#: lib/cannery_web/live/container_live/edit_tags_component.ex:30
|
#: lib/cannery_web/live/container_live/edit_tags_component.ex:30
|
||||||
|
#, elixir-autogen, elixir-format
|
||||||
msgid "Tag could not be added"
|
msgid "Tag could not be added"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
|
#: lib/cannery/activity_log/shot_group.ex:123
|
||||||
#, elixir-autogen, elixir-format
|
#, elixir-autogen, elixir-format
|
||||||
#: lib/cannery/activity_log/shot_group.ex:115
|
|
||||||
msgid "Count must be at least 1"
|
msgid "Count must be at least 1"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
|
#: lib/cannery/activity_log/shot_group.ex:82
|
||||||
|
#: lib/cannery/activity_log/shot_group.ex:119
|
||||||
#, elixir-autogen, elixir-format
|
#, elixir-autogen, elixir-format
|
||||||
#: lib/cannery/activity_log/shot_group.ex:74
|
|
||||||
#: lib/cannery/activity_log/shot_group.ex:111
|
|
||||||
msgid "Count must be less than %{count}"
|
msgid "Count must be less than %{count}"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#, elixir-autogen, elixir-format
|
|
||||||
#: lib/cannery_web/controllers/user_auth.ex:39
|
#: lib/cannery_web/controllers/user_auth.ex:39
|
||||||
#: lib/cannery_web/controllers/user_auth.ex:161
|
#: lib/cannery_web/controllers/user_auth.ex:161
|
||||||
|
#, elixir-autogen, elixir-format
|
||||||
msgid "You must confirm your account and log in to access this page."
|
msgid "You must confirm your account and log in to access this page."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#, elixir-autogen, elixir-format
|
|
||||||
#: lib/cannery_web/live/container_live/edit_tags_component.ex:52
|
#: lib/cannery_web/live/container_live/edit_tags_component.ex:52
|
||||||
|
#, elixir-autogen, elixir-format
|
||||||
msgid "Tag could not be removed"
|
msgid "Tag could not be removed"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
|
#: lib/cannery_web/live/ammo_group_live/form_component.ex:157
|
||||||
#, elixir-autogen, elixir-format
|
#, elixir-autogen, elixir-format
|
||||||
#: 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 ""
|
||||||
|
|
||||||
|
#: lib/cannery_web/live/ammo_group_live/form_component.ex:142
|
||||||
#, elixir-autogen, elixir-format
|
#, elixir-autogen, elixir-format
|
||||||
#: 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 ""
|
||||||
|
|
||||||
|
#: lib/cannery/ammo.ex:587
|
||||||
#, elixir-autogen, elixir-format
|
#, elixir-autogen, elixir-format
|
||||||
#: lib/cannery/ammo.ex:524
|
|
||||||
msgid "Invalid multiplier"
|
msgid "Invalid multiplier"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
|
#: lib/cannery/ammo/ammo_group.ex:94
|
||||||
#, elixir-autogen, elixir-format
|
#, elixir-autogen, elixir-format
|
||||||
#: lib/cannery/ammo/ammo_group.ex:84
|
|
||||||
msgid "Please select an ammo type and container"
|
msgid "Please select an ammo type and container"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
|
#: lib/cannery/activity_log/shot_group.ex:77
|
||||||
#, elixir-autogen, elixir-format
|
#, elixir-autogen, elixir-format
|
||||||
#: lib/cannery/activity_log/shot_group.ex:69
|
|
||||||
msgid "Please select a valid user and ammo group"
|
msgid "Please select a valid user and ammo group"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
|
#: lib/cannery_web/live/range_live/index.html.heex:67
|
||||||
|
#, elixir-autogen, elixir-format
|
||||||
|
msgid "Your browser does not support the canvas element."
|
||||||
|
msgstr ""
|
||||||
|
@ -23,276 +23,277 @@ msgstr ""
|
|||||||
## Run "mix gettext.extract" to bring this file up to
|
## Run "mix gettext.extract" to bring this file up to
|
||||||
## date. Leave "msgstr"s empty as changing them here has no
|
## date. Leave "msgstr"s empty as changing them here has no
|
||||||
## effect: edit them in PO (.po) files instead.
|
## effect: edit them in PO (.po) files instead.
|
||||||
#, elixir-autogen, elixir-format
|
#: lib/cannery_web/live/ammo_type_live/form_component.ex:86
|
||||||
#: lib/cannery_web/live/ammo_type_live/form_component.ex:85
|
#: lib/cannery_web/live/container_live/form_component.ex:89
|
||||||
#: lib/cannery_web/live/container_live/form_component.ex:85
|
|
||||||
#: lib/cannery_web/live/invite_live/form_component.ex:80
|
#: lib/cannery_web/live/invite_live/form_component.ex:80
|
||||||
#: lib/cannery_web/live/tag_live/form_component.ex:126
|
#: lib/cannery_web/live/tag_live/form_component.ex:126
|
||||||
|
#, elixir-autogen, elixir-format
|
||||||
msgid "%{name} created successfully"
|
msgid "%{name} created successfully"
|
||||||
msgstr "%{name} creado exitosamente"
|
msgstr "%{name} creado exitosamente"
|
||||||
|
|
||||||
#, elixir-autogen, elixir-format
|
#: lib/cannery_web/live/ammo_type_live/index.ex:47
|
||||||
#: lib/cannery_web/live/ammo_type_live/index.ex:41
|
|
||||||
#: lib/cannery_web/live/ammo_type_live/show.ex:28
|
#: lib/cannery_web/live/ammo_type_live/show.ex:28
|
||||||
#: lib/cannery_web/live/invite_live/index.ex:53
|
#: lib/cannery_web/live/invite_live/index.ex:53
|
||||||
#: lib/cannery_web/live/invite_live/index.ex:133
|
#: lib/cannery_web/live/invite_live/index.ex:133
|
||||||
#: lib/cannery_web/live/tag_live/index.ex:38
|
#: lib/cannery_web/live/tag_live/index.ex:38
|
||||||
|
#, elixir-autogen, elixir-format
|
||||||
msgid "%{name} deleted succesfully"
|
msgid "%{name} deleted succesfully"
|
||||||
msgstr "%{name} borrado exitosamente"
|
msgstr "%{name} borrado exitosamente"
|
||||||
|
|
||||||
#, elixir-autogen, elixir-format
|
|
||||||
#: lib/cannery_web/live/invite_live/index.ex:109
|
#: lib/cannery_web/live/invite_live/index.ex:109
|
||||||
|
#, elixir-autogen, elixir-format
|
||||||
msgid "%{name} disabled succesfully"
|
msgid "%{name} disabled succesfully"
|
||||||
msgstr "%{name} desactivado exitosamente"
|
msgstr "%{name} desactivado exitosamente"
|
||||||
|
|
||||||
#, elixir-autogen, elixir-format
|
|
||||||
#: lib/cannery_web/live/invite_live/index.ex:87
|
#: lib/cannery_web/live/invite_live/index.ex:87
|
||||||
|
#, elixir-autogen, elixir-format
|
||||||
msgid "%{name} enabled succesfully"
|
msgid "%{name} enabled succesfully"
|
||||||
msgstr "%{name} activado exitosamente"
|
msgstr "%{name} activado exitosamente"
|
||||||
|
|
||||||
#, elixir-autogen, elixir-format
|
#: lib/cannery_web/live/container_live/index.ex:81
|
||||||
#: lib/cannery_web/live/container_live/index.ex:62
|
|
||||||
#: lib/cannery_web/live/container_live/show.ex:61
|
#: lib/cannery_web/live/container_live/show.ex:61
|
||||||
|
#, elixir-autogen, elixir-format
|
||||||
msgid "%{name} has been deleted"
|
msgid "%{name} has been deleted"
|
||||||
msgstr "%{name} ha sido borrado"
|
msgstr "%{name} ha sido borrado"
|
||||||
|
|
||||||
#, elixir-autogen, elixir-format
|
|
||||||
#: lib/cannery_web/live/invite_live/index.ex:67
|
#: lib/cannery_web/live/invite_live/index.ex:67
|
||||||
|
#, elixir-autogen, elixir-format
|
||||||
msgid "%{name} updated succesfully"
|
msgid "%{name} updated succesfully"
|
||||||
msgstr "%{name} actualizado exitosamente"
|
msgstr "%{name} actualizado exitosamente"
|
||||||
|
|
||||||
#, elixir-autogen, elixir-format
|
|
||||||
#: lib/cannery_web/live/ammo_type_live/form_component.ex:67
|
#: lib/cannery_web/live/ammo_type_live/form_component.ex:67
|
||||||
#: lib/cannery_web/live/container_live/form_component.ex:67
|
#: lib/cannery_web/live/container_live/form_component.ex:70
|
||||||
#: lib/cannery_web/live/invite_live/form_component.ex:62
|
#: lib/cannery_web/live/invite_live/form_component.ex:62
|
||||||
#: lib/cannery_web/live/tag_live/form_component.ex:108
|
#: lib/cannery_web/live/tag_live/form_component.ex:108
|
||||||
|
#, elixir-autogen, elixir-format
|
||||||
msgid "%{name} updated successfully"
|
msgid "%{name} updated successfully"
|
||||||
msgstr "%{name} actualizado exitosamente"
|
msgstr "%{name} actualizado exitosamente"
|
||||||
|
|
||||||
#, elixir-autogen, elixir-format
|
|
||||||
#: lib/cannery_web/controllers/user_settings_controller.ex:29
|
#: lib/cannery_web/controllers/user_settings_controller.ex:29
|
||||||
|
#, elixir-autogen, elixir-format
|
||||||
msgid "A link to confirm your email change has been sent to the new address."
|
msgid "A link to confirm your email change has been sent to the new address."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
"Un enlace para confirmar el correo electrónico ha sido enviado a la nueva "
|
"Un enlace para confirmar el correo electrónico ha sido enviado a la nueva "
|
||||||
"dirección."
|
"dirección."
|
||||||
|
|
||||||
|
#: lib/cannery_web/live/ammo_group_live/index.ex:64
|
||||||
#, elixir-autogen, elixir-format
|
#, elixir-autogen, elixir-format
|
||||||
#: lib/cannery_web/live/ammo_group_live/index.ex:56
|
|
||||||
msgid "Ammo group deleted succesfully"
|
msgid "Ammo group deleted succesfully"
|
||||||
msgstr "Grupo de Munición borrado exitosamente"
|
msgstr "Grupo de Munición borrado exitosamente"
|
||||||
|
|
||||||
|
#: lib/cannery_web/live/invite_live/index.html.heex:103
|
||||||
|
#: lib/cannery_web/live/invite_live/index.html.heex:133
|
||||||
#, 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:131
|
|
||||||
msgid "Are you sure you want to delete %{email}? This action is permanent!"
|
msgid "Are you sure you want to delete %{email}? This action is permanent!"
|
||||||
msgstr "Está seguro que desea eliminar %{email}? Esta acción es permanente!"
|
msgstr "Está seguro que desea eliminar %{email}? Esta acción es permanente!"
|
||||||
|
|
||||||
|
#: lib/cannery_web/live/container_live/index.ex:223
|
||||||
|
#: lib/cannery_web/live/container_live/index.html.heex:73
|
||||||
|
#: lib/cannery_web/live/container_live/show.html.heex:51
|
||||||
|
#: lib/cannery_web/live/tag_live/index.html.heex:39
|
||||||
#, elixir-autogen, elixir-format
|
#, elixir-autogen, elixir-format
|
||||||
#: lib/cannery_web/live/container_live/index.html.heex:46
|
|
||||||
#: lib/cannery_web/live/container_live/show.html.heex:49
|
|
||||||
#: 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 "Está seguro que desea eliminar %{name}?"
|
msgstr "Está seguro que desea eliminar %{name}?"
|
||||||
|
|
||||||
#, elixir-autogen, elixir-format
|
|
||||||
#: lib/cannery_web/live/invite_live/index.html.heex:49
|
#: lib/cannery_web/live/invite_live/index.html.heex:49
|
||||||
|
#, elixir-autogen, elixir-format
|
||||||
msgid "Are you sure you want to delete the invite for %{name}?"
|
msgid "Are you sure you want to delete the invite for %{name}?"
|
||||||
msgstr "Está seguro que quiere eliminar la invitación para %{name}?"
|
msgstr "Está seguro que quiere eliminar la invitación para %{name}?"
|
||||||
|
|
||||||
|
#: lib/cannery_web/live/ammo_group_live/index.ex:242
|
||||||
|
#: lib/cannery_web/live/ammo_group_live/show.html.heex:75
|
||||||
#, elixir-autogen, elixir-format
|
#, elixir-autogen, elixir-format
|
||||||
#: lib/cannery_web/live/ammo_group_live/index.ex:193
|
|
||||||
#: lib/cannery_web/live/ammo_group_live/show.html.heex:71
|
|
||||||
msgid "Are you sure you want to delete this ammo?"
|
msgid "Are you sure you want to delete this ammo?"
|
||||||
msgstr "Está seguro que desea eliminar esta munición?"
|
msgstr "Está seguro que desea eliminar esta munición?"
|
||||||
|
|
||||||
|
#: lib/cannery_web/templates/user_settings/edit.html.heex:155
|
||||||
#, elixir-autogen, elixir-format
|
#, elixir-autogen, elixir-format
|
||||||
#: lib/cannery_web/templates/user_settings/edit.html.heex:146
|
|
||||||
msgid "Are you sure you want to delete your account?"
|
msgid "Are you sure you want to delete your account?"
|
||||||
msgstr "Está seguro que desea eliminar su cuenta?"
|
msgstr "Está seguro que desea eliminar su cuenta?"
|
||||||
|
|
||||||
|
#: lib/cannery_web/components/topbar.ex:106
|
||||||
#, elixir-autogen, elixir-format
|
#, elixir-autogen, elixir-format
|
||||||
#: 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 "Está seguro que desea cerrar sesión?"
|
msgstr "Está seguro que desea cerrar sesión?"
|
||||||
|
|
||||||
|
#: lib/cannery_web/live/invite_live/index.html.heex:75
|
||||||
#, elixir-autogen, elixir-format
|
#, elixir-autogen, elixir-format
|
||||||
#: lib/cannery_web/live/invite_live/index.html.heex:74
|
|
||||||
msgid "Are you sure you want to make %{name} unlimited?"
|
msgid "Are you sure you want to make %{name} unlimited?"
|
||||||
msgstr "Está seguro que desea hacer %{name} ilimitado?"
|
msgstr "Está seguro que desea hacer %{name} ilimitado?"
|
||||||
|
|
||||||
#, elixir-autogen, elixir-format
|
|
||||||
#: lib/cannery_web/controllers/user_settings_controller.ex:77
|
#: lib/cannery_web/controllers/user_settings_controller.ex:77
|
||||||
|
#, elixir-autogen, elixir-format
|
||||||
msgid "Email changed successfully."
|
msgid "Email changed successfully."
|
||||||
msgstr "Correo electrónico cambiado exitosamente."
|
msgstr "Correo electrónico cambiado exitosamente."
|
||||||
|
|
||||||
#, elixir-autogen, elixir-format
|
|
||||||
#: lib/cannery_web/controllers/user_confirmation_controller.ex:23
|
#: lib/cannery_web/controllers/user_confirmation_controller.ex:23
|
||||||
|
#, elixir-autogen, elixir-format
|
||||||
msgid "If your email is in our system and it has not been confirmed yet, you will receive an email with instructions shortly."
|
msgid "If your email is in our system and it has not been confirmed yet, you will receive an email with instructions shortly."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
"Si su correo electrónico está en nuestro sistema y no ha sido confirmado "
|
"Si su correo electrónico está en nuestro sistema y no ha sido confirmado "
|
||||||
"aun, recibirá un correo con instrucciones en breve."
|
"aun, recibirá un correo con instrucciones en breve."
|
||||||
|
|
||||||
#, elixir-autogen, elixir-format
|
|
||||||
#: lib/cannery_web/controllers/user_reset_password_controller.ex:24
|
#: lib/cannery_web/controllers/user_reset_password_controller.ex:24
|
||||||
|
#, elixir-autogen, elixir-format
|
||||||
msgid "If your email is in our system, you will receive instructions to reset your password shortly."
|
msgid "If your email is in our system, you will receive instructions to reset your password shortly."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
"Si su correo electrónico está en nuestro sistema, recibirá instrucciones "
|
"Si su correo electrónico está en nuestro sistema, recibirá instrucciones "
|
||||||
"para reiniciar la contraseña en breve."
|
"para reiniciar la contraseña en breve."
|
||||||
|
|
||||||
#, elixir-autogen, elixir-format
|
|
||||||
#: lib/cannery_web/controllers/user_session_controller.ex:23
|
#: lib/cannery_web/controllers/user_session_controller.ex:23
|
||||||
|
#, elixir-autogen, elixir-format
|
||||||
msgid "Logged out successfully."
|
msgid "Logged out successfully."
|
||||||
msgstr "Sesión cerrada exitosamente."
|
msgstr "Sesión cerrada exitosamente."
|
||||||
|
|
||||||
#, elixir-autogen, elixir-format
|
|
||||||
#: lib/cannery_web/controllers/user_reset_password_controller.ex:46
|
#: lib/cannery_web/controllers/user_reset_password_controller.ex:46
|
||||||
|
#, elixir-autogen, elixir-format
|
||||||
msgid "Password reset successfully."
|
msgid "Password reset successfully."
|
||||||
msgstr "Contraseña reiniciada exitosamente."
|
msgstr "Contraseña reiniciada exitosamente."
|
||||||
|
|
||||||
#, elixir-autogen, elixir-format
|
|
||||||
#: lib/cannery_web/controllers/user_settings_controller.ex:49
|
#: lib/cannery_web/controllers/user_settings_controller.ex:49
|
||||||
|
#, elixir-autogen, elixir-format
|
||||||
msgid "Password updated successfully."
|
msgid "Password updated successfully."
|
||||||
msgstr "Contraseña cambiada exitosamente."
|
msgstr "Contraseña cambiada exitosamente."
|
||||||
|
|
||||||
#, elixir-autogen, elixir-format
|
|
||||||
#: lib/cannery_web/controllers/user_registration_controller.ex:74
|
#: lib/cannery_web/controllers/user_registration_controller.ex:74
|
||||||
|
#, elixir-autogen, elixir-format
|
||||||
msgid "Please check your email to verify your account"
|
msgid "Please check your email to verify your account"
|
||||||
msgstr "Por favor chequea el correo para verificar tu cuenta"
|
msgstr "Por favor chequea el correo para verificar tu cuenta"
|
||||||
|
|
||||||
|
#: lib/cannery_web/live/home_live.ex:108
|
||||||
#, elixir-autogen, elixir-format
|
#, elixir-autogen, elixir-format
|
||||||
#: lib/cannery_web/live/home_live.ex:104
|
|
||||||
msgid "Register to setup %{name}"
|
msgid "Register to setup %{name}"
|
||||||
msgstr "Regístrese para configurar %{name}"
|
msgstr "Regístrese para configurar %{name}"
|
||||||
|
|
||||||
#, elixir-autogen, elixir-format
|
#: lib/cannery_web/components/add_shot_group_component.html.heex:55
|
||||||
#: lib/cannery_web/components/add_shot_group_component.html.heex:48
|
|
||||||
#: 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:33
|
#: 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:93
|
#: lib/cannery_web/live/tag_live/form_component.ex:93
|
||||||
|
#, elixir-autogen, elixir-format
|
||||||
msgid "Saving..."
|
msgid "Saving..."
|
||||||
msgstr "Guardando..."
|
msgstr "Guardando..."
|
||||||
|
|
||||||
#, elixir-autogen, elixir-format
|
|
||||||
#: lib/cannery_web/controllers/user_settings_controller.ex:95
|
#: lib/cannery_web/controllers/user_settings_controller.ex:95
|
||||||
|
#, elixir-autogen, elixir-format
|
||||||
msgid "Your account has been deleted"
|
msgid "Your account has been deleted"
|
||||||
msgstr "Su cuenta ha sido eliminada"
|
msgstr "Su cuenta ha sido eliminada"
|
||||||
|
|
||||||
#, elixir-autogen, elixir-format
|
|
||||||
#: lib/cannery_web/live/container_live/edit_tags_component.html.heex:16
|
#: lib/cannery_web/live/container_live/edit_tags_component.html.heex:16
|
||||||
|
#, elixir-autogen, elixir-format
|
||||||
msgid "Are you sure you want to remove the %{tag_name} tag from %{container_name}?"
|
msgid "Are you sure you want to remove the %{tag_name} tag from %{container_name}?"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
"Está seguro que desea remover la etiqueta %{tag_name} de %{container_name}?"
|
"Está seguro que desea remover la etiqueta %{tag_name} de %{container_name}?"
|
||||||
|
|
||||||
#, elixir-autogen, elixir-format
|
|
||||||
#: lib/cannery_web/live/container_live/edit_tags_component.ex:36
|
#: lib/cannery_web/live/container_live/edit_tags_component.ex:36
|
||||||
|
#, elixir-autogen, elixir-format
|
||||||
msgid "%{name} added successfully"
|
msgid "%{name} added successfully"
|
||||||
msgstr "%{name} añadido exitosamente"
|
msgstr "%{name} añadido exitosamente"
|
||||||
|
|
||||||
#, elixir-autogen, elixir-format
|
|
||||||
#: lib/cannery_web/live/container_live/show.ex:37
|
#: lib/cannery_web/live/container_live/show.ex:37
|
||||||
|
#, elixir-autogen, elixir-format
|
||||||
msgid "%{tag_name} has been removed from %{container_name}"
|
msgid "%{tag_name} has been removed from %{container_name}"
|
||||||
msgstr "se ha removido %{tag_name} de %{container_name}"
|
msgstr "se ha removido %{tag_name} de %{container_name}"
|
||||||
|
|
||||||
|
#: lib/cannery_web/live/container_live/edit_tags_component.html.heex:55
|
||||||
#, elixir-autogen, elixir-format
|
#, elixir-autogen, elixir-format
|
||||||
#: lib/cannery_web/live/container_live/edit_tags_component.html.heex:54
|
|
||||||
msgid "Adding..."
|
msgid "Adding..."
|
||||||
msgstr "Añadiendo..."
|
msgstr "Añadiendo..."
|
||||||
|
|
||||||
#, elixir-autogen, elixir-format
|
|
||||||
#: lib/cannery_web/components/add_shot_group_component.ex:56
|
#: lib/cannery_web/components/add_shot_group_component.ex:56
|
||||||
|
#, elixir-autogen, elixir-format
|
||||||
msgid "Shots recorded successfully"
|
msgid "Shots recorded successfully"
|
||||||
msgstr "Tiros registrados exitosamente"
|
msgstr "Tiros registrados exitosamente"
|
||||||
|
|
||||||
|
#: lib/cannery_web/live/range_live/index.html.heex:27
|
||||||
#, elixir-autogen, elixir-format
|
#, elixir-autogen, elixir-format
|
||||||
#: lib/cannery_web/live/range_live/index.html.heex:29
|
|
||||||
msgid "Are you sure you want to unstage this ammo?"
|
msgid "Are you sure you want to unstage this ammo?"
|
||||||
msgstr "Está seguro que desea desmontar esta munición?"
|
msgstr "Está seguro que desea desmontar esta munición?"
|
||||||
|
|
||||||
|
#: lib/cannery_web/live/ammo_group_live/show.ex:132
|
||||||
|
#: lib/cannery_web/live/range_live/index.ex:184
|
||||||
#, elixir-autogen, elixir-format
|
#, elixir-autogen, elixir-format
|
||||||
#: lib/cannery_web/live/ammo_group_live/show.ex:130
|
|
||||||
#: lib/cannery_web/live/range_live/index.ex:128
|
|
||||||
msgid "Are you sure you want to delete this shot record?"
|
msgid "Are you sure you want to delete this shot record?"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#, elixir-autogen, elixir-format
|
|
||||||
#: lib/cannery_web/live/ammo_group_live/show.ex:78
|
#: lib/cannery_web/live/ammo_group_live/show.ex:78
|
||||||
#: lib/cannery_web/live/range_live/index.ex:54
|
#: lib/cannery_web/live/range_live/index.ex:54
|
||||||
|
#, elixir-autogen, elixir-format
|
||||||
msgid "Shot records deleted succesfully"
|
msgid "Shot records deleted succesfully"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#, elixir-autogen, elixir-format
|
|
||||||
#: lib/cannery_web/live/range_live/form_component.ex:55
|
#: lib/cannery_web/live/range_live/form_component.ex:55
|
||||||
|
#, elixir-autogen, elixir-format
|
||||||
msgid "Shot records updated successfully"
|
msgid "Shot records updated successfully"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#, elixir-autogen, elixir-format
|
|
||||||
#: lib/cannery_web/controllers/user_confirmation_controller.ex:38
|
#: lib/cannery_web/controllers/user_confirmation_controller.ex:38
|
||||||
|
#, elixir-autogen, elixir-format
|
||||||
msgid "%{email} confirmed successfully."
|
msgid "%{email} confirmed successfully."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#, elixir-autogen, elixir-format
|
|
||||||
#: lib/cannery_web/components/move_ammo_group_component.ex:53
|
#: lib/cannery_web/components/move_ammo_group_component.ex:53
|
||||||
|
#, elixir-autogen, elixir-format
|
||||||
msgid "Ammo moved to %{name} successfully"
|
msgid "Ammo moved to %{name} successfully"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#, elixir-autogen, elixir-format
|
|
||||||
#: lib/cannery_web/live/invite_live/index.ex:121
|
#: lib/cannery_web/live/invite_live/index.ex:121
|
||||||
|
#, elixir-autogen, elixir-format
|
||||||
msgid "Copied to clipboard"
|
msgid "Copied to clipboard"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#, elixir-autogen, elixir-format
|
|
||||||
#: lib/cannery_web/live/container_live/edit_tags_component.ex:58
|
#: lib/cannery_web/live/container_live/edit_tags_component.ex:58
|
||||||
|
#, elixir-autogen, elixir-format
|
||||||
msgid "%{name} removed successfully"
|
msgid "%{name} removed successfully"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#, elixir-autogen, elixir-format
|
|
||||||
#: lib/cannery_web/live/ammo_group_live/index.html.heex:17
|
#: lib/cannery_web/live/ammo_group_live/index.html.heex:17
|
||||||
#: lib/cannery_web/live/ammo_group_live/index.html.heex:28
|
#: lib/cannery_web/live/ammo_group_live/index.html.heex:27
|
||||||
|
#, elixir-autogen, elixir-format
|
||||||
msgid "You'll need to"
|
msgid "You'll need to"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#, elixir-autogen, elixir-format
|
|
||||||
#: lib/cannery_web/live/ammo_group_live/form_component.html.heex:67
|
#: lib/cannery_web/live/ammo_group_live/form_component.html.heex:67
|
||||||
|
#, elixir-autogen, elixir-format
|
||||||
msgid "Creating..."
|
msgid "Creating..."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#, elixir-autogen, elixir-format
|
|
||||||
#: lib/cannery_web/templates/user_settings/edit.html.heex:136
|
#: lib/cannery_web/templates/user_settings/edit.html.heex:136
|
||||||
|
#, elixir-autogen, elixir-format
|
||||||
msgid "Are you sure you want to change your language?"
|
msgid "Are you sure you want to change your language?"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#, elixir-autogen, elixir-format
|
|
||||||
#: lib/cannery_web/controllers/user_settings_controller.ex:65
|
#: lib/cannery_web/controllers/user_settings_controller.ex:65
|
||||||
|
#, 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
|
#: lib/cannery_web/live/ammo_group_live/show.ex:50
|
||||||
|
#, elixir-autogen, elixir-format, fuzzy
|
||||||
msgid "Ammo deleted succesfully"
|
msgid "Ammo deleted succesfully"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#, elixir-autogen, elixir-format, fuzzy
|
|
||||||
#: lib/cannery_web/live/range_live/index.ex:68
|
#: lib/cannery_web/live/range_live/index.ex:68
|
||||||
|
#, elixir-autogen, elixir-format, fuzzy
|
||||||
msgid "Ammo unstaged succesfully"
|
msgid "Ammo unstaged succesfully"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#, elixir-autogen, elixir-format, fuzzy
|
|
||||||
#: lib/cannery_web/live/ammo_group_live/form_component.ex:118
|
#: lib/cannery_web/live/ammo_group_live/form_component.ex:118
|
||||||
|
#, elixir-autogen, elixir-format, fuzzy
|
||||||
msgid "Ammo updated successfully"
|
msgid "Ammo updated successfully"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
|
#: lib/cannery_web/live/ammo_group_live/form_component.ex:178
|
||||||
#, elixir-autogen, elixir-format, fuzzy
|
#, elixir-autogen, elixir-format, fuzzy
|
||||||
#: lib/cannery_web/live/ammo_group_live/form_component.ex:177
|
|
||||||
msgid "Ammo added successfully"
|
msgid "Ammo added successfully"
|
||||||
msgid_plural "Ammo added successfully"
|
msgid_plural "Ammo added successfully"
|
||||||
msgstr[0] ""
|
msgstr[0] ""
|
||||||
msgstr[1] ""
|
msgstr[1] ""
|
||||||
|
|
||||||
|
#: lib/cannery_web/live/ammo_type_live/index.ex:232
|
||||||
|
#: lib/cannery_web/live/ammo_type_live/show.html.heex:28
|
||||||
#, elixir-autogen, elixir-format, fuzzy
|
#, elixir-autogen, elixir-format, fuzzy
|
||||||
#: lib/cannery_web/live/ammo_type_live/index.ex:156
|
|
||||||
#: lib/cannery_web/live/ammo_type_live/show.html.heex:26
|
|
||||||
msgid "Are you sure you want to delete %{name}? This will delete all %{name} type ammo as well!"
|
msgid "Are you sure you want to delete %{name}? This will delete all %{name} type ammo as well!"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
@ -14,213 +14,256 @@ msgstr ""
|
|||||||
"Plural-Forms: nplurals=2; plural=n > 1;\n"
|
"Plural-Forms: nplurals=2; plural=n > 1;\n"
|
||||||
"X-Generator: Weblate 4.12.1\n"
|
"X-Generator: Weblate 4.12.1\n"
|
||||||
|
|
||||||
## This file is a PO Template file.
|
# # This file is a PO Template file.
|
||||||
##
|
# #
|
||||||
## "msgid"s here are often extracted from source code.
|
# # "msgid"s here are often extracted from source code.
|
||||||
## Add new translations manually only if they're dynamic
|
# # Add new translations manually only if they're dynamic
|
||||||
## translations that can't be statically extracted.
|
# # translations that can't be statically extracted.
|
||||||
##
|
# #
|
||||||
## Run "mix gettext.extract" to bring this file up to
|
# # Run "mix gettext.extract" to bring this file up to
|
||||||
## date. Leave "msgstr"s empty as changing them here has no
|
# # date. Leave "msgstr"s empty as changing them here has no
|
||||||
## effect: edit them in PO (.po) files instead.
|
# # effect: edit them in PO (.po) files instead.
|
||||||
#, 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
|
#: lib/cannery_web/live/ammo_group_live/index.ex:50
|
||||||
|
#: lib/cannery_web/live/ammo_group_live/index.html.heex:40
|
||||||
|
#, elixir-autogen, elixir-format
|
||||||
msgid "Add Ammo"
|
msgid "Add Ammo"
|
||||||
msgstr "ajouter munition"
|
msgstr "ajouter munition"
|
||||||
|
|
||||||
|
#: lib/cannery_web/live/ammo_group_live/index.html.heex:36
|
||||||
#, elixir-autogen, elixir-format
|
#, elixir-autogen, elixir-format
|
||||||
#: 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 !"
|
||||||
|
|
||||||
|
#: lib/cannery_web/live/container_live/index.html.heex:13
|
||||||
#, elixir-autogen, elixir-format
|
#, elixir-autogen, elixir-format
|
||||||
#: lib/cannery_web/live/container_live/index.html.heex:12
|
|
||||||
msgid "Add your first container!"
|
msgid "Add your first container!"
|
||||||
msgstr "Ajoutez votre premier conteneur !"
|
msgstr "Ajoutez votre premier conteneur !"
|
||||||
|
|
||||||
|
#: lib/cannery_web/live/ammo_type_live/index.html.heex:13
|
||||||
#, elixir-autogen, elixir-format
|
#, elixir-autogen, elixir-format
|
||||||
#: lib/cannery_web/live/ammo_type_live/index.html.heex:12
|
|
||||||
msgid "Add your first type!"
|
msgid "Add your first type!"
|
||||||
msgstr "Ajoutez votre premier type !"
|
msgstr "Ajoutez votre premier type !"
|
||||||
|
|
||||||
#, elixir-autogen, elixir-format
|
|
||||||
#: lib/cannery_web/templates/user_settings/edit.html.heex:15
|
#: lib/cannery_web/templates/user_settings/edit.html.heex:15
|
||||||
#: lib/cannery_web/templates/user_settings/edit.html.heex:44
|
#: lib/cannery_web/templates/user_settings/edit.html.heex:44
|
||||||
|
#, elixir-autogen, elixir-format
|
||||||
msgid "Change email"
|
msgid "Change email"
|
||||||
msgstr "Changer le mél"
|
msgstr "Changer le mél"
|
||||||
|
|
||||||
#, elixir-autogen, elixir-format
|
|
||||||
#: lib/cannery_web/templates/user_settings/edit.html.heex:58
|
#: lib/cannery_web/templates/user_settings/edit.html.heex:58
|
||||||
#: lib/cannery_web/templates/user_settings/edit.html.heex:99
|
#: lib/cannery_web/templates/user_settings/edit.html.heex:99
|
||||||
|
#, elixir-autogen, elixir-format
|
||||||
msgid "Change password"
|
msgid "Change password"
|
||||||
msgstr "Changer le mot de passe"
|
msgstr "Changer le mot de passe"
|
||||||
|
|
||||||
#, elixir-autogen, elixir-format
|
|
||||||
#: lib/cannery_web/live/invite_live/index.html.heex:17
|
#: lib/cannery_web/live/invite_live/index.html.heex:17
|
||||||
|
#, elixir-autogen, elixir-format
|
||||||
msgid "Create Invite"
|
msgid "Create Invite"
|
||||||
msgstr "Créer une invitation"
|
msgstr "Créer une invitation"
|
||||||
|
|
||||||
|
#: lib/cannery_web/templates/user_settings/edit.html.heex:157
|
||||||
#, elixir-autogen, elixir-format
|
#, elixir-autogen, elixir-format
|
||||||
#: lib/cannery_web/templates/user_settings/edit.html.heex:142
|
|
||||||
msgid "Delete User"
|
msgid "Delete User"
|
||||||
msgstr "Supprimer utilisateur"
|
msgstr "Supprimer utilisateur"
|
||||||
|
|
||||||
#, elixir-autogen, elixir-format
|
|
||||||
#: lib/cannery_web/templates/user_registration/new.html.heex:52
|
#: lib/cannery_web/templates/user_registration/new.html.heex:52
|
||||||
#: lib/cannery_web/templates/user_reset_password/new.html.heex:3
|
#: lib/cannery_web/templates/user_reset_password/new.html.heex:3
|
||||||
#: lib/cannery_web/templates/user_session/new.html.heex:45
|
#: lib/cannery_web/templates/user_session/new.html.heex:45
|
||||||
|
#, elixir-autogen, elixir-format
|
||||||
msgid "Forgot your password?"
|
msgid "Forgot your password?"
|
||||||
msgstr "Mot de passe oublié ?"
|
msgstr "Mot de passe oublié ?"
|
||||||
|
|
||||||
|
#: lib/cannery_web/live/invite_live/index.html.heex:13
|
||||||
#, elixir-autogen, elixir-format
|
#, elixir-autogen, elixir-format
|
||||||
#: lib/cannery_web/live/invite_live/index.html.heex:12
|
|
||||||
msgid "Invite someone new!"
|
msgid "Invite someone new!"
|
||||||
msgstr "Invitez une nouvelle personne !"
|
msgstr "Invitez une nouvelle personne !"
|
||||||
|
|
||||||
#, elixir-autogen, elixir-format
|
#: lib/cannery_web/components/topbar.ex:137
|
||||||
#: 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:49
|
||||||
#: lib/cannery_web/templates/user_reset_password/edit.html.heex:48
|
#: lib/cannery_web/templates/user_reset_password/edit.html.heex:48
|
||||||
#: lib/cannery_web/templates/user_reset_password/new.html.heex:30
|
#: lib/cannery_web/templates/user_reset_password/new.html.heex:30
|
||||||
#: lib/cannery_web/templates/user_session/new.html.heex:3
|
#: lib/cannery_web/templates/user_session/new.html.heex:3
|
||||||
#: lib/cannery_web/templates/user_session/new.html.heex:33
|
#: lib/cannery_web/templates/user_session/new.html.heex:33
|
||||||
|
#, elixir-autogen, elixir-format
|
||||||
msgid "Log in"
|
msgid "Log in"
|
||||||
msgstr "Se connecter"
|
msgstr "Se connecter"
|
||||||
|
|
||||||
|
#: lib/cannery_web/live/tag_live/index.html.heex:15
|
||||||
#, elixir-autogen, elixir-format
|
#, elixir-autogen, elixir-format
|
||||||
#: lib/cannery_web/live/tag_live/index.html.heex:14
|
|
||||||
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_type_live/index.html.heex:17
|
#: lib/cannery_web/live/ammo_type_live/index.html.heex:17
|
||||||
|
#, elixir-autogen, elixir-format
|
||||||
msgid "New Ammo type"
|
msgid "New Ammo type"
|
||||||
msgstr "Nouveau type de munition"
|
msgstr "Nouveau type de munition"
|
||||||
|
|
||||||
#, elixir-autogen, elixir-format
|
|
||||||
#: lib/cannery_web/live/container_live/index.html.heex:17
|
#: lib/cannery_web/live/container_live/index.html.heex:17
|
||||||
|
#, elixir-autogen, elixir-format
|
||||||
msgid "New Container"
|
msgid "New Container"
|
||||||
msgstr "Nouveau conteneur"
|
msgstr "Nouveau conteneur"
|
||||||
|
|
||||||
#, elixir-autogen, elixir-format
|
|
||||||
#: lib/cannery_web/live/tag_live/index.html.heex:19
|
#: lib/cannery_web/live/tag_live/index.html.heex:19
|
||||||
|
#, elixir-autogen, elixir-format
|
||||||
msgid "New Tag"
|
msgid "New Tag"
|
||||||
msgstr "Nouveau tag"
|
msgstr "Nouveau tag"
|
||||||
|
|
||||||
#, elixir-autogen, elixir-format
|
#: lib/cannery_web/components/topbar.ex:128
|
||||||
#: lib/cannery_web/components/topbar.ex:105
|
#: lib/cannery_web/templates/user_confirmation/new.html.heex:26
|
||||||
#: 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
|
||||||
#: lib/cannery_web/templates/user_reset_password/edit.html.heex:43
|
#: lib/cannery_web/templates/user_reset_password/edit.html.heex:44
|
||||||
#: lib/cannery_web/templates/user_reset_password/new.html.heex:25
|
#: lib/cannery_web/templates/user_reset_password/new.html.heex:26
|
||||||
#: lib/cannery_web/templates/user_session/new.html.heex:40
|
#: lib/cannery_web/templates/user_session/new.html.heex:41
|
||||||
|
#, elixir-autogen, elixir-format
|
||||||
msgid "Register"
|
msgid "Register"
|
||||||
msgstr "S’enregistrer"
|
msgstr "S’enregistrer"
|
||||||
|
|
||||||
#, elixir-autogen, elixir-format
|
|
||||||
#: lib/cannery_web/templates/user_confirmation/new.html.heex:3
|
#: lib/cannery_web/templates/user_confirmation/new.html.heex:3
|
||||||
#: lib/cannery_web/templates/user_confirmation/new.html.heex:16
|
#: lib/cannery_web/templates/user_confirmation/new.html.heex:16
|
||||||
|
#, elixir-autogen, elixir-format
|
||||||
msgid "Resend confirmation instructions"
|
msgid "Resend confirmation instructions"
|
||||||
msgstr "Renvoyer les instructions de confirmation"
|
msgstr "Renvoyer les instructions de confirmation"
|
||||||
|
|
||||||
#, elixir-autogen, elixir-format
|
|
||||||
#: lib/cannery_web/templates/user_reset_password/edit.html.heex:3
|
#: lib/cannery_web/templates/user_reset_password/edit.html.heex:3
|
||||||
#: lib/cannery_web/templates/user_reset_password/edit.html.heex:34
|
#: lib/cannery_web/templates/user_reset_password/edit.html.heex:34
|
||||||
|
#, elixir-autogen, elixir-format
|
||||||
msgid "Reset password"
|
msgid "Reset password"
|
||||||
msgstr "Réinitialisé le mot de passe"
|
msgstr "Réinitialisé le mot de passe"
|
||||||
|
|
||||||
#, elixir-autogen, elixir-format
|
#: lib/cannery_web/components/add_shot_group_component.html.heex:53
|
||||||
#: lib/cannery_web/components/add_shot_group_component.html.heex:46
|
|
||||||
#: 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:31
|
#: 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:91
|
#: lib/cannery_web/live/tag_live/form_component.ex:91
|
||||||
|
#, elixir-autogen, elixir-format
|
||||||
msgid "Save"
|
msgid "Save"
|
||||||
msgstr "Sauvegarder"
|
msgstr "Sauvegarder"
|
||||||
|
|
||||||
#, elixir-autogen, elixir-format
|
|
||||||
#: lib/cannery_web/templates/user_reset_password/new.html.heex:16
|
#: lib/cannery_web/templates/user_reset_password/new.html.heex:16
|
||||||
|
#, elixir-autogen, elixir-format
|
||||||
msgid "Send instructions to reset password"
|
msgid "Send instructions to reset password"
|
||||||
msgstr "Envoyer les instructions pour réinitialiser le mot de passe"
|
msgstr "Envoyer les instructions pour réinitialiser le mot de passe"
|
||||||
|
|
||||||
|
#: lib/cannery_web/live/container_live/show.html.heex:72
|
||||||
#, elixir-autogen, elixir-format
|
#, elixir-autogen, elixir-format
|
||||||
#: 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 ?"
|
||||||
|
|
||||||
|
#: lib/cannery_web/live/container_live/edit_tags_component.html.heex:53
|
||||||
#, elixir-autogen, elixir-format
|
#, elixir-autogen, elixir-format
|
||||||
#: lib/cannery_web/live/container_live/edit_tags_component.html.heex:52
|
|
||||||
msgid "Add"
|
msgid "Add"
|
||||||
msgstr "Ajouter"
|
msgstr "Ajouter"
|
||||||
|
|
||||||
#, elixir-autogen, elixir-format
|
|
||||||
#: lib/cannery_web/live/range_live/index.html.heex:17
|
#: lib/cannery_web/live/range_live/index.html.heex:17
|
||||||
|
#, elixir-autogen, elixir-format
|
||||||
msgid "Stage ammo"
|
msgid "Stage ammo"
|
||||||
msgstr "Munition préparée"
|
msgstr "Munition préparée"
|
||||||
|
|
||||||
|
#: lib/cannery_web/live/range_live/index.html.heex:13
|
||||||
#, elixir-autogen, elixir-format
|
#, elixir-autogen, elixir-format
|
||||||
#: lib/cannery_web/live/range_live/index.html.heex:12
|
|
||||||
msgid "Why not get some ready to shoot?"
|
msgid "Why not get some ready to shoot?"
|
||||||
msgstr "Pourquoi pas en préparer pour tirer ?"
|
msgstr "Pourquoi pas en préparer pour tirer ?"
|
||||||
|
|
||||||
|
#: lib/cannery_web/live/ammo_group_live/index.ex:199
|
||||||
|
#: lib/cannery_web/live/ammo_group_live/show.html.heex:101
|
||||||
|
#: lib/cannery_web/live/range_live/index.html.heex:38
|
||||||
#, elixir-autogen, elixir-format
|
#, elixir-autogen, elixir-format
|
||||||
#: lib/cannery_web/live/ammo_group_live/index.ex:160
|
|
||||||
#: lib/cannery_web/live/ammo_group_live/show.html.heex:91
|
|
||||||
#: lib/cannery_web/live/range_live/index.html.heex:36
|
|
||||||
msgid "Record shots"
|
msgid "Record shots"
|
||||||
msgstr "Enregistrer des tirs"
|
msgstr "Enregistrer des tirs"
|
||||||
|
|
||||||
|
#: lib/cannery_web/components/move_ammo_group_component.ex:90
|
||||||
#, elixir-autogen, elixir-format
|
#, elixir-autogen, elixir-format
|
||||||
#: lib/cannery_web/components/move_ammo_group_component.ex:89
|
|
||||||
msgid "Add another container!"
|
msgid "Add another container!"
|
||||||
msgstr "Ajoutez un autre conteneur !"
|
msgstr "Ajoutez un autre conteneur !"
|
||||||
|
|
||||||
|
#: lib/cannery_web/live/ammo_group_live/show.html.heex:94
|
||||||
#, elixir-autogen, elixir-format
|
#, elixir-autogen, elixir-format
|
||||||
#: lib/cannery_web/live/ammo_group_live/show.html.heex:85
|
|
||||||
msgid "Move containers"
|
msgid "Move containers"
|
||||||
msgstr "Déplacer les conteneurs"
|
msgstr "Déplacer les conteneurs"
|
||||||
|
|
||||||
|
#: lib/cannery_web/components/move_ammo_group_component.ex:126
|
||||||
#, elixir-autogen, elixir-format
|
#, elixir-autogen, elixir-format
|
||||||
#: lib/cannery_web/components/move_ammo_group_component.ex:127
|
|
||||||
msgid "Select"
|
msgid "Select"
|
||||||
msgstr "Sélectionner"
|
msgstr "Sélectionner"
|
||||||
|
|
||||||
|
#: lib/cannery_web/live/invite_live/index.html.heex:31
|
||||||
#, elixir-autogen, elixir-format
|
#, elixir-autogen, elixir-format
|
||||||
#: lib/cannery_web/live/invite_live/index.html.heex:33
|
|
||||||
msgid "Copy to clipboard"
|
msgid "Copy to clipboard"
|
||||||
msgstr "Copier dans le presse-papier"
|
msgstr "Copier dans le presse-papier"
|
||||||
|
|
||||||
|
#: lib/cannery_web/live/ammo_group_live/index.html.heex:21
|
||||||
#, elixir-autogen, elixir-format
|
#, elixir-autogen, elixir-format
|
||||||
#: lib/cannery_web/live/ammo_group_live/index.html.heex:20
|
|
||||||
msgid "add a container first"
|
msgid "add a container first"
|
||||||
msgstr "ajouter un conteneur en premier"
|
msgstr "ajouter un conteneur en premier"
|
||||||
|
|
||||||
#, elixir-autogen, elixir-format
|
|
||||||
#: lib/cannery_web/live/ammo_group_live/form_component.html.heex:66
|
#: lib/cannery_web/live/ammo_group_live/form_component.html.heex:66
|
||||||
|
#, elixir-autogen, elixir-format
|
||||||
msgid "Create"
|
msgid "Create"
|
||||||
msgstr "Créer"
|
msgstr "Créer"
|
||||||
|
|
||||||
#, elixir-autogen, elixir-format
|
|
||||||
#: lib/cannery_web/templates/user_settings/edit.html.heex:113
|
#: lib/cannery_web/templates/user_settings/edit.html.heex:113
|
||||||
|
#, elixir-autogen, elixir-format
|
||||||
msgid "Change Language"
|
msgid "Change Language"
|
||||||
msgstr "Changer la langue"
|
msgstr "Changer la langue"
|
||||||
|
|
||||||
#, elixir-autogen, elixir-format
|
|
||||||
#: lib/cannery_web/templates/user_settings/edit.html.heex:134
|
#: lib/cannery_web/templates/user_settings/edit.html.heex:134
|
||||||
|
#, elixir-autogen, elixir-format
|
||||||
msgid "Change language"
|
msgid "Change language"
|
||||||
msgstr "Changer la langue"
|
msgstr "Changer la langue"
|
||||||
|
|
||||||
|
#: lib/cannery_web/live/ammo_group_live/show.html.heex:60
|
||||||
#, elixir-autogen, elixir-format
|
#, elixir-autogen, elixir-format
|
||||||
#: lib/cannery_web/live/ammo_group_live/show.html.heex:55
|
|
||||||
msgid "View in Catalog"
|
msgid "View in Catalog"
|
||||||
|
msgstr "Voir en catalogue"
|
||||||
|
|
||||||
|
#: lib/cannery_web/live/ammo_group_live/index.html.heex:31
|
||||||
|
#, elixir-autogen, elixir-format
|
||||||
|
msgid "add an ammo type first"
|
||||||
|
msgstr "Ajoutez d'abord un type de munitions"
|
||||||
|
|
||||||
|
#: lib/cannery_web/live/invite_live/index.html.heex:60
|
||||||
|
#, elixir-autogen, elixir-format
|
||||||
|
msgid "Disable"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
|
#: lib/cannery_web/live/invite_live/index.html.heex:64
|
||||||
#, elixir-autogen, elixir-format
|
#, elixir-autogen, elixir-format
|
||||||
#: lib/cannery_web/live/ammo_group_live/index.html.heex:31
|
msgid "Enable"
|
||||||
msgid "add an ammo type first"
|
msgstr ""
|
||||||
|
|
||||||
|
#: lib/cannery_web/components/move_ammo_group_component.ex:80
|
||||||
|
#, elixir-autogen, elixir-format
|
||||||
|
msgid "Move ammo"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: lib/cannery_web/live/invite_live/index.html.heex:80
|
||||||
|
#, elixir-autogen, elixir-format
|
||||||
|
msgid "Set Unlimited"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: lib/cannery_web/live/container_live/show.html.heex:97
|
||||||
|
#, elixir-autogen, elixir-format
|
||||||
|
msgid "Show used"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: lib/cannery_web/live/ammo_group_live/show.html.heex:86
|
||||||
|
#: lib/cannery_web/live/range_live/index.html.heex:31
|
||||||
|
#, elixir-autogen, elixir-format
|
||||||
|
msgid "Stage for range"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: lib/cannery_web/live/ammo_group_live/show.html.heex:85
|
||||||
|
#: lib/cannery_web/live/range_live/index.html.heex:30
|
||||||
|
#, elixir-autogen, elixir-format
|
||||||
|
msgid "Unstage from range"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: lib/cannery_web/templates/user_settings/edit.html.heex:148
|
||||||
|
#, elixir-autogen, elixir-format
|
||||||
|
msgid "Export Data as JSON"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
File diff suppressed because it is too large
Load Diff
@ -23,94 +23,94 @@ msgstr ""
|
|||||||
## Run "mix gettext.extract" to bring this file up to
|
## Run "mix gettext.extract" to bring this file up to
|
||||||
## date. Leave "msgstr"s empty as changing them here has no
|
## date. Leave "msgstr"s empty as changing them here has no
|
||||||
## effect: edit them in PO (.po) files instead.
|
## effect: edit them in PO (.po) files instead.
|
||||||
#, elixir-autogen, elixir-format
|
|
||||||
#: lib/cannery/accounts/email.ex:30
|
#: lib/cannery/accounts/email.ex:30
|
||||||
|
#, elixir-autogen, elixir-format
|
||||||
msgid "Confirm your %{name} account"
|
msgid "Confirm your %{name} account"
|
||||||
msgstr "Confirmer votre compte %{name}"
|
msgstr "Confirmer votre compte %{name}"
|
||||||
|
|
||||||
#, elixir-autogen, elixir-format
|
|
||||||
#: lib/cannery_web/templates/email/confirm_email.html.eex:3
|
#: lib/cannery_web/templates/email/confirm_email.html.eex:3
|
||||||
#: lib/cannery_web/templates/email/confirm_email.txt.eex:2
|
#: lib/cannery_web/templates/email/confirm_email.txt.eex:2
|
||||||
#: lib/cannery_web/templates/email/reset_password.html.eex:3
|
#: lib/cannery_web/templates/email/reset_password.html.eex:3
|
||||||
#: lib/cannery_web/templates/email/reset_password.txt.eex:2
|
#: lib/cannery_web/templates/email/reset_password.txt.eex:2
|
||||||
#: lib/cannery_web/templates/email/update_email.html.eex:3
|
#: lib/cannery_web/templates/email/update_email.html.eex:3
|
||||||
#: lib/cannery_web/templates/email/update_email.txt.eex:2
|
#: lib/cannery_web/templates/email/update_email.txt.eex:2
|
||||||
|
#, elixir-autogen, elixir-format
|
||||||
msgid "Hi %{email},"
|
msgid "Hi %{email},"
|
||||||
msgstr "Salut %{email},"
|
msgstr "Salut %{email},"
|
||||||
|
|
||||||
#, elixir-autogen, elixir-format
|
|
||||||
#: lib/cannery_web/templates/email/confirm_email.txt.eex:10
|
#: lib/cannery_web/templates/email/confirm_email.txt.eex:10
|
||||||
|
#, elixir-autogen, elixir-format
|
||||||
msgid "If you didn't create an account at %{url}, please ignore this."
|
msgid "If you didn't create an account at %{url}, please ignore this."
|
||||||
msgstr "Si vous n’avez créé un compte à %{url}, veuillez ignorer ceci."
|
msgstr "Si vous n’avez créé un compte à %{url}, veuillez ignorer ceci."
|
||||||
|
|
||||||
#, elixir-autogen, elixir-format
|
|
||||||
#: lib/cannery_web/templates/email/reset_password.txt.eex:8
|
#: lib/cannery_web/templates/email/reset_password.txt.eex:8
|
||||||
#: lib/cannery_web/templates/email/update_email.txt.eex:8
|
#: lib/cannery_web/templates/email/update_email.txt.eex:8
|
||||||
|
#, elixir-autogen, elixir-format
|
||||||
msgid "If you didn't request this change from %{url}, please ignore this."
|
msgid "If you didn't request this change from %{url}, please ignore this."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
"Si vous n’avez pas demandé ce changement depuis %{url}, veuillez ignorer "
|
"Si vous n’avez pas demandé ce changement depuis %{url}, veuillez ignorer "
|
||||||
"ceci."
|
"ceci."
|
||||||
|
|
||||||
#, elixir-autogen, elixir-format
|
|
||||||
#: lib/cannery/accounts/email.ex:37
|
#: lib/cannery/accounts/email.ex:37
|
||||||
|
#, elixir-autogen, elixir-format
|
||||||
msgid "Reset your %{name} password"
|
msgid "Reset your %{name} password"
|
||||||
msgstr "Réinitialiser votre mot de passe %{name}"
|
msgstr "Réinitialiser votre mot de passe %{name}"
|
||||||
|
|
||||||
#, elixir-autogen, elixir-format
|
|
||||||
#: lib/cannery/accounts/email.ex:44
|
#: lib/cannery/accounts/email.ex:44
|
||||||
|
#, elixir-autogen, elixir-format
|
||||||
msgid "Update your %{name} email"
|
msgid "Update your %{name} email"
|
||||||
msgstr "Mettre à jour votre mél %{name}"
|
msgstr "Mettre à jour votre mél %{name}"
|
||||||
|
|
||||||
#, elixir-autogen, elixir-format
|
|
||||||
#: lib/cannery_web/templates/email/confirm_email.html.eex:9
|
#: lib/cannery_web/templates/email/confirm_email.html.eex:9
|
||||||
|
#, elixir-autogen, elixir-format
|
||||||
msgid "Welcome to %{name}!"
|
msgid "Welcome to %{name}!"
|
||||||
msgstr "Bienvenue à %{name} !"
|
msgstr "Bienvenue à %{name} !"
|
||||||
|
|
||||||
#, elixir-autogen, elixir-format
|
|
||||||
#: lib/cannery_web/templates/email/confirm_email.txt.eex:4
|
#: lib/cannery_web/templates/email/confirm_email.txt.eex:4
|
||||||
|
#, elixir-autogen, elixir-format
|
||||||
msgid "Welcome to %{name}%!"
|
msgid "Welcome to %{name}%!"
|
||||||
msgstr "Bienvenue à %{name}% !"
|
msgstr "Bienvenue à %{name}% !"
|
||||||
|
|
||||||
#, elixir-autogen, elixir-format
|
|
||||||
#: lib/cannery_web/templates/email/update_email.html.eex:8
|
#: lib/cannery_web/templates/email/update_email.html.eex:8
|
||||||
#: lib/cannery_web/templates/email/update_email.txt.eex:4
|
#: lib/cannery_web/templates/email/update_email.txt.eex:4
|
||||||
|
#, elixir-autogen, elixir-format
|
||||||
msgid "You can change your email by visiting the URL below:"
|
msgid "You can change your email by visiting the URL below:"
|
||||||
msgstr "Vous pouvez changer votre mél en consultant l’URL ci-dessous :"
|
msgstr "Vous pouvez changer votre mél en consultant l’URL ci-dessous :"
|
||||||
|
|
||||||
#, elixir-autogen, elixir-format
|
|
||||||
#: lib/cannery_web/templates/email/confirm_email.html.eex:14
|
#: lib/cannery_web/templates/email/confirm_email.html.eex:14
|
||||||
#: lib/cannery_web/templates/email/confirm_email.txt.eex:6
|
#: lib/cannery_web/templates/email/confirm_email.txt.eex:6
|
||||||
|
#, elixir-autogen, elixir-format
|
||||||
msgid "You can confirm your account by visiting the URL below:"
|
msgid "You can confirm your account by visiting the URL below:"
|
||||||
msgstr "Vous pouvez confirmer votre compte en consultant l’URL ci-dessous :"
|
msgstr "Vous pouvez confirmer votre compte en consultant l’URL ci-dessous :"
|
||||||
|
|
||||||
#, elixir-autogen, elixir-format
|
|
||||||
#: lib/cannery_web/templates/email/reset_password.html.eex:8
|
#: lib/cannery_web/templates/email/reset_password.html.eex:8
|
||||||
#: lib/cannery_web/templates/email/reset_password.txt.eex:4
|
#: lib/cannery_web/templates/email/reset_password.txt.eex:4
|
||||||
|
#, elixir-autogen, elixir-format
|
||||||
msgid "You can reset your password by visiting the URL below:"
|
msgid "You can reset your password by visiting the URL below:"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
"Vous pouvez réinitialiser votre mot de passe en visitant l’URL ci-dessous :"
|
"Vous pouvez réinitialiser votre mot de passe en visitant l’URL ci-dessous :"
|
||||||
|
|
||||||
#, elixir-autogen, elixir-format
|
|
||||||
#: lib/cannery_web/templates/email/confirm_email.html.eex:22
|
#: lib/cannery_web/templates/email/confirm_email.html.eex:22
|
||||||
|
#, elixir-autogen, elixir-format
|
||||||
msgid "If you didn't create an account at %{name}, please ignore this."
|
msgid "If you didn't create an account at %{name}, please ignore this."
|
||||||
msgstr "Si vous n’avez pas créé de compte à %{name}, veuillez ignorer ceci."
|
msgstr "Si vous n’avez pas créé de compte à %{name}, veuillez ignorer ceci."
|
||||||
|
|
||||||
#, elixir-autogen, elixir-format
|
|
||||||
#: lib/cannery_web/templates/email/reset_password.html.eex:16
|
#: lib/cannery_web/templates/email/reset_password.html.eex:16
|
||||||
#: lib/cannery_web/templates/email/update_email.html.eex:16
|
#: lib/cannery_web/templates/email/update_email.html.eex:16
|
||||||
|
#, elixir-autogen, elixir-format
|
||||||
msgid "If you didn't request this change from %{name}, please ignore this."
|
msgid "If you didn't request this change from %{name}, please ignore this."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
"Si vous n’avez pas demandé ce changement depuis %{name}, veuillez ignorer "
|
"Si vous n’avez pas demandé ce changement depuis %{name}, veuillez ignorer "
|
||||||
"ceci."
|
"ceci."
|
||||||
|
|
||||||
#, elixir-autogen, elixir-format
|
|
||||||
#: lib/cannery_web/templates/layout/email.txt.eex:9
|
#: lib/cannery_web/templates/layout/email.txt.eex:9
|
||||||
|
#, elixir-autogen, elixir-format
|
||||||
msgid "This email was sent from %{name} at %{url}, the self-hosted firearm tracker website."
|
msgid "This email was sent from %{name} at %{url}, the self-hosted firearm tracker website."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
"Ce mél a été envoyé depuis %{name} à %{url}, le site web de suivi d’arme à "
|
"Ce mél a été envoyé depuis %{name} à %{url}, le site web de suivi d’arme à "
|
||||||
"feux."
|
"feux."
|
||||||
|
|
||||||
#, elixir-autogen, elixir-format
|
|
||||||
#: lib/cannery_web/templates/layout/email.html.heex:13
|
#: lib/cannery_web/templates/layout/email.html.heex:13
|
||||||
|
#, elixir-autogen, elixir-format
|
||||||
msgid "This email was sent from %{name}, the self-hosted firearm tracker website."
|
msgid "This email was sent from %{name}, the self-hosted firearm tracker website."
|
||||||
msgstr "Ce mél a été envoyé depuis %{name}, le site web de suivi d’arme à feu."
|
msgstr "Ce mél a été envoyé depuis %{name}, le site web de suivi d’arme à feu."
|
||||||
|
@ -14,189 +14,194 @@ msgstr ""
|
|||||||
"Plural-Forms: nplurals=2; plural=n > 1;\n"
|
"Plural-Forms: nplurals=2; plural=n > 1;\n"
|
||||||
"X-Generator: Weblate 4.12\n"
|
"X-Generator: Weblate 4.12\n"
|
||||||
|
|
||||||
## This file is a PO Template file.
|
# # This file is a PO Template file.
|
||||||
##
|
# #
|
||||||
## "msgid"s here are often extracted from source code.
|
# # "msgid"s here are often extracted from source code.
|
||||||
## Add new translations manually only if they're dynamic
|
# # Add new translations manually only if they're dynamic
|
||||||
## translations that can't be statically extracted.
|
# # translations that can't be statically extracted.
|
||||||
##
|
# #
|
||||||
## Run "mix gettext.extract" to bring this file up to
|
# # Run "mix gettext.extract" to bring this file up to
|
||||||
## date. Leave "msgstr"s empty as changing them here has no
|
# # date. Leave "msgstr"s empty as changing them here has no
|
||||||
## effect: edit them in PO (.po) files instead.
|
# # effect: edit them in PO (.po) files instead.
|
||||||
#, elixir-autogen, elixir-format
|
|
||||||
#: lib/cannery/containers.ex:140
|
#: lib/cannery/containers.ex:140
|
||||||
|
#, elixir-autogen, elixir-format
|
||||||
msgid "Container must be empty before deleting"
|
msgid "Container must be empty before deleting"
|
||||||
msgstr "Le conteneur doit être vide pour être supprimé"
|
msgstr "Le conteneur doit être vide pour être supprimé"
|
||||||
|
|
||||||
#, elixir-autogen, elixir-format
|
#: lib/cannery_web/live/container_live/index.ex:88
|
||||||
#: lib/cannery_web/live/container_live/index.ex:69
|
|
||||||
#: lib/cannery_web/live/container_live/show.ex:71
|
#: lib/cannery_web/live/container_live/show.ex:71
|
||||||
|
#, elixir-autogen, elixir-format
|
||||||
msgid "Could not delete %{name}: %{error}"
|
msgid "Could not delete %{name}: %{error}"
|
||||||
msgstr "Impossible de supprimer %{name} : %{error}"
|
msgstr "Impossible de supprimer %{name} : %{error}"
|
||||||
|
|
||||||
|
#: lib/cannery_web/live/container_live/index.ex:76
|
||||||
#, elixir-autogen, elixir-format
|
#, elixir-autogen, elixir-format
|
||||||
#: lib/cannery_web/live/container_live/index.ex:57
|
|
||||||
msgid "Could not find that container"
|
msgid "Could not find that container"
|
||||||
msgstr "Impossible de trouver ce conteneur"
|
msgstr "Impossible de trouver ce conteneur"
|
||||||
|
|
||||||
#, elixir-autogen, elixir-format
|
|
||||||
#: lib/cannery_web/controllers/user_settings_controller.ex:84
|
#: lib/cannery_web/controllers/user_settings_controller.ex:84
|
||||||
|
#, elixir-autogen, elixir-format
|
||||||
msgid "Email change link is invalid or it has expired."
|
msgid "Email change link is invalid or it has expired."
|
||||||
msgstr "Le lien de changement de mél est invalide ou a expiré."
|
msgstr "Le lien de changement de mél est invalide ou a expiré."
|
||||||
|
|
||||||
#, elixir-autogen, elixir-format
|
|
||||||
#: lib/cannery_web/templates/error/error.html.heex:8
|
#: lib/cannery_web/templates/error/error.html.heex:8
|
||||||
|
#, elixir-autogen, elixir-format
|
||||||
msgid "Error"
|
msgid "Error"
|
||||||
msgstr "Erreur"
|
msgstr "Erreur"
|
||||||
|
|
||||||
#, elixir-autogen, elixir-format
|
|
||||||
#: lib/cannery_web/templates/error/error.html.heex:28
|
#: lib/cannery_web/templates/error/error.html.heex:28
|
||||||
|
#, elixir-autogen, elixir-format
|
||||||
msgid "Go back home"
|
msgid "Go back home"
|
||||||
msgstr "Retour au menu principal"
|
msgstr "Retour au menu principal"
|
||||||
|
|
||||||
#, elixir-autogen, elixir-format
|
|
||||||
#: lib/cannery_web/views/error_view.ex:11
|
#: lib/cannery_web/views/error_view.ex:11
|
||||||
|
#, elixir-autogen, elixir-format
|
||||||
msgid "Internal Server Error"
|
msgid "Internal Server Error"
|
||||||
msgstr "Erreur interne du serveur"
|
msgstr "Erreur interne du serveur"
|
||||||
|
|
||||||
#, elixir-autogen, elixir-format
|
|
||||||
#: lib/cannery_web/controllers/user_session_controller.ex:17
|
#: lib/cannery_web/controllers/user_session_controller.ex:17
|
||||||
|
#, elixir-autogen, elixir-format
|
||||||
msgid "Invalid email or password"
|
msgid "Invalid email or password"
|
||||||
msgstr "Mél ou mot de passe invalide"
|
msgstr "Mél ou mot de passe invalide"
|
||||||
|
|
||||||
#, elixir-autogen, elixir-format
|
|
||||||
#: lib/cannery_web/views/error_view.ex:9
|
#: lib/cannery_web/views/error_view.ex:9
|
||||||
|
#, elixir-autogen, elixir-format
|
||||||
msgid "Not found"
|
msgid "Not found"
|
||||||
msgstr "Pas trouvé"
|
msgstr "Pas trouvé"
|
||||||
|
|
||||||
#, elixir-autogen, elixir-format
|
|
||||||
#: lib/cannery_web/templates/user_registration/new.html.heex:16
|
#: lib/cannery_web/templates/user_registration/new.html.heex:16
|
||||||
#: lib/cannery_web/templates/user_reset_password/edit.html.heex:16
|
#: lib/cannery_web/templates/user_reset_password/edit.html.heex:16
|
||||||
#: lib/cannery_web/templates/user_settings/edit.html.heex:21
|
#: lib/cannery_web/templates/user_settings/edit.html.heex:21
|
||||||
#: lib/cannery_web/templates/user_settings/edit.html.heex:64
|
#: lib/cannery_web/templates/user_settings/edit.html.heex:64
|
||||||
#: lib/cannery_web/templates/user_settings/edit.html.heex:119
|
#: lib/cannery_web/templates/user_settings/edit.html.heex:119
|
||||||
|
#, elixir-autogen, elixir-format
|
||||||
msgid "Oops, something went wrong! Please check the errors below."
|
msgid "Oops, something went wrong! Please check the errors below."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
"Oups, quelque chose s’est mal passé ! Veuillez vérifier les erreurs en "
|
"Oups, quelque chose s’est mal passé ! Veuillez vérifier les erreurs en "
|
||||||
"dessous."
|
"dessous."
|
||||||
|
|
||||||
#, elixir-autogen, elixir-format
|
|
||||||
#: lib/cannery_web/controllers/user_reset_password_controller.ex:63
|
#: lib/cannery_web/controllers/user_reset_password_controller.ex:63
|
||||||
|
#, elixir-autogen, elixir-format
|
||||||
msgid "Reset password link is invalid or it has expired."
|
msgid "Reset password link is invalid or it has expired."
|
||||||
msgstr "Le lien de réinitialisation de mot de passe est invalide ou expiré."
|
msgstr "Le lien de réinitialisation de mot de passe est invalide ou expiré."
|
||||||
|
|
||||||
#, elixir-autogen, elixir-format
|
|
||||||
#: lib/cannery_web/controllers/user_registration_controller.ex:25
|
#: lib/cannery_web/controllers/user_registration_controller.ex:25
|
||||||
#: lib/cannery_web/controllers/user_registration_controller.ex:56
|
#: lib/cannery_web/controllers/user_registration_controller.ex:56
|
||||||
|
#, elixir-autogen, elixir-format
|
||||||
msgid "Sorry, public registration is disabled"
|
msgid "Sorry, public registration is disabled"
|
||||||
msgstr "Désolé, l’enregistrement public est désactivé"
|
msgstr "Désolé, l’enregistrement public est désactivé"
|
||||||
|
|
||||||
#, elixir-autogen, elixir-format
|
|
||||||
#: lib/cannery_web/controllers/user_registration_controller.ex:15
|
#: lib/cannery_web/controllers/user_registration_controller.ex:15
|
||||||
#: lib/cannery_web/controllers/user_registration_controller.ex:46
|
#: lib/cannery_web/controllers/user_registration_controller.ex:46
|
||||||
|
#, elixir-autogen, elixir-format
|
||||||
msgid "Sorry, this invite was not found or expired"
|
msgid "Sorry, this invite was not found or expired"
|
||||||
msgstr "Désolé, cette invitation n’est pas trouvée ou est expirée"
|
msgstr "Désolé, cette invitation n’est pas trouvée ou est expirée"
|
||||||
|
|
||||||
#, elixir-autogen, elixir-format
|
|
||||||
#: lib/cannery_web/controllers/user_settings_controller.ex:99
|
#: lib/cannery_web/controllers/user_settings_controller.ex:99
|
||||||
|
#, elixir-autogen, elixir-format
|
||||||
msgid "Unable to delete user"
|
msgid "Unable to delete user"
|
||||||
msgstr "Impossible de supprimer l’utilisateur·ice"
|
msgstr "Impossible de supprimer l’utilisateur·ice"
|
||||||
|
|
||||||
#, elixir-autogen, elixir-format
|
|
||||||
#: lib/cannery_web/views/error_view.ex:10
|
#: lib/cannery_web/views/error_view.ex:10
|
||||||
|
#, elixir-autogen, elixir-format
|
||||||
msgid "Unauthorized"
|
msgid "Unauthorized"
|
||||||
msgstr "Non autorisé·e"
|
msgstr "Non autorisé·e"
|
||||||
|
|
||||||
#, elixir-autogen, elixir-format
|
|
||||||
#: lib/cannery_web/controllers/user_confirmation_controller.ex:54
|
#: lib/cannery_web/controllers/user_confirmation_controller.ex:54
|
||||||
|
#, elixir-autogen, elixir-format
|
||||||
msgid "User confirmation link is invalid or it has expired."
|
msgid "User confirmation link is invalid or it has expired."
|
||||||
msgstr "Le lien de confirmation d’utilisateur·ice est invalide ou a expiré."
|
msgstr "Le lien de confirmation d’utilisateur·ice est invalide ou a expiré."
|
||||||
|
|
||||||
#, elixir-autogen, elixir-format
|
|
||||||
#: lib/cannery_web/live/invite_live/index.ex:18
|
#: lib/cannery_web/live/invite_live/index.ex:18
|
||||||
|
#, elixir-autogen, elixir-format
|
||||||
msgid "You are not authorized to view this page"
|
msgid "You are not authorized to view this page"
|
||||||
msgstr "Vous n’êtes pas autorisé·e à voir cette page"
|
msgstr "Vous n’êtes pas autorisé·e à voir cette page"
|
||||||
|
|
||||||
#, elixir-autogen, elixir-format
|
|
||||||
#: lib/cannery_web/controllers/user_auth.ex:177
|
#: lib/cannery_web/controllers/user_auth.ex:177
|
||||||
|
#, elixir-autogen, elixir-format
|
||||||
msgid "You are not authorized to view this page."
|
msgid "You are not authorized to view this page."
|
||||||
msgstr "Vous n’êtes pas autorisé·e à voir cette page."
|
msgstr "Vous n’êtes pas autorisé·e à voir cette page."
|
||||||
|
|
||||||
|
#: lib/cannery/accounts/user.ex:138
|
||||||
#, elixir-autogen, elixir-format
|
#, elixir-autogen, elixir-format
|
||||||
#: lib/cannery/accounts/user.ex:130
|
|
||||||
msgid "did not change"
|
msgid "did not change"
|
||||||
msgstr "est inchangé"
|
msgstr "est inchangé"
|
||||||
|
|
||||||
|
#: lib/cannery/accounts/user.ex:159
|
||||||
#, elixir-autogen, elixir-format
|
#, elixir-autogen, elixir-format
|
||||||
#: lib/cannery/accounts/user.ex:151
|
|
||||||
msgid "does not match password"
|
msgid "does not match password"
|
||||||
msgstr "le mot de passe ne correspond pas"
|
msgstr "le mot de passe ne correspond pas"
|
||||||
|
|
||||||
|
#: lib/cannery/accounts/user.ex:196
|
||||||
#, elixir-autogen, elixir-format
|
#, elixir-autogen, elixir-format
|
||||||
#: lib/cannery/accounts/user.ex:188
|
|
||||||
msgid "is not valid"
|
msgid "is not valid"
|
||||||
msgstr "n’est pas valide"
|
msgstr "n’est pas valide"
|
||||||
|
|
||||||
|
#: lib/cannery/accounts/user.ex:92
|
||||||
#, elixir-autogen, elixir-format
|
#, elixir-autogen, elixir-format
|
||||||
#: lib/cannery/accounts/user.ex:84
|
|
||||||
msgid "must have the @ sign and no spaces"
|
msgid "must have the @ sign and no spaces"
|
||||||
msgstr "doit contenir le symbole @ et aucune espace"
|
msgstr "doit contenir le symbole @ et aucune espace"
|
||||||
|
|
||||||
#, elixir-autogen, elixir-format
|
|
||||||
#: lib/cannery/tags.ex:40
|
#: lib/cannery/tags.ex:40
|
||||||
|
#, elixir-autogen, elixir-format
|
||||||
msgid "Tag not found"
|
msgid "Tag not found"
|
||||||
msgstr "Tag pas trouvé"
|
msgstr "Tag pas trouvé"
|
||||||
|
|
||||||
#, elixir-autogen, elixir-format
|
|
||||||
#: lib/cannery_web/live/container_live/edit_tags_component.ex:30
|
#: lib/cannery_web/live/container_live/edit_tags_component.ex:30
|
||||||
|
#, elixir-autogen, elixir-format
|
||||||
msgid "Tag could not be added"
|
msgid "Tag could not be added"
|
||||||
msgstr "Le tag n’a pas pu être ajouté"
|
msgstr "Le tag n’a pas pu être ajouté"
|
||||||
|
|
||||||
|
#: lib/cannery/activity_log/shot_group.ex:123
|
||||||
#, elixir-autogen, elixir-format
|
#, elixir-autogen, elixir-format
|
||||||
#: 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"
|
||||||
|
|
||||||
|
#: lib/cannery/activity_log/shot_group.ex:82
|
||||||
|
#: lib/cannery/activity_log/shot_group.ex:119
|
||||||
#, elixir-autogen, elixir-format
|
#, elixir-autogen, elixir-format
|
||||||
#: lib/cannery/activity_log/shot_group.ex:74
|
|
||||||
#: 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}"
|
||||||
|
|
||||||
#, elixir-autogen, elixir-format
|
|
||||||
#: lib/cannery_web/controllers/user_auth.ex:39
|
#: lib/cannery_web/controllers/user_auth.ex:39
|
||||||
#: lib/cannery_web/controllers/user_auth.ex:161
|
#: lib/cannery_web/controllers/user_auth.ex:161
|
||||||
|
#, elixir-autogen, elixir-format
|
||||||
msgid "You must confirm your account and log in to access this page."
|
msgid "You must confirm your account and log in to access this page."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
"Vous devez d’abord confirmer votre compte et vous connecter pour accéder à "
|
"Vous devez d’abord confirmer votre compte et vous connecter pour accéder à "
|
||||||
"cette page."
|
"cette page."
|
||||||
|
|
||||||
#, elixir-autogen, elixir-format
|
|
||||||
#: lib/cannery_web/live/container_live/edit_tags_component.ex:52
|
#: lib/cannery_web/live/container_live/edit_tags_component.ex:52
|
||||||
|
#, elixir-autogen, elixir-format
|
||||||
msgid "Tag could not be removed"
|
msgid "Tag could not be removed"
|
||||||
msgstr "Le tag n’a pas pu être retiré"
|
msgstr "Le tag n’a pas pu être retiré"
|
||||||
|
|
||||||
|
#: lib/cannery_web/live/ammo_group_live/form_component.ex:157
|
||||||
#, elixir-autogen, elixir-format
|
#, elixir-autogen, elixir-format
|
||||||
#: 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"
|
||||||
|
|
||||||
|
#: lib/cannery_web/live/ammo_group_live/form_component.ex:142
|
||||||
#, elixir-autogen, elixir-format
|
#, elixir-autogen, elixir-format
|
||||||
#: 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}"
|
||||||
|
|
||||||
|
#: lib/cannery/ammo.ex:587
|
||||||
#, elixir-autogen, elixir-format
|
#, elixir-autogen, elixir-format
|
||||||
#: lib/cannery/ammo.ex:524
|
|
||||||
msgid "Invalid multiplier"
|
msgid "Invalid multiplier"
|
||||||
msgstr ""
|
msgstr "Multiplicateur invalide"
|
||||||
|
|
||||||
|
#: lib/cannery/ammo/ammo_group.ex:94
|
||||||
#, elixir-autogen, elixir-format
|
#, elixir-autogen, elixir-format
|
||||||
#: lib/cannery/ammo/ammo_group.ex:84
|
|
||||||
msgid "Please select an ammo type and container"
|
msgid "Please select an ammo type and container"
|
||||||
msgstr ""
|
msgstr "Veuillez choisir un type de munitions et un conteneur"
|
||||||
|
|
||||||
|
#: lib/cannery/activity_log/shot_group.ex:77
|
||||||
#, elixir-autogen, elixir-format
|
#, elixir-autogen, elixir-format
|
||||||
#: lib/cannery/activity_log/shot_group.ex:69
|
|
||||||
msgid "Please select a valid user and ammo group"
|
msgid "Please select a valid user and ammo group"
|
||||||
|
msgstr "Veuillez choisir un utilisateur valide et un groupe de munitions"
|
||||||
|
|
||||||
|
#: lib/cannery_web/live/range_live/index.html.heex:67
|
||||||
|
#, elixir-autogen, elixir-format
|
||||||
|
msgid "Your browser does not support the canvas element."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
@ -23,278 +23,279 @@ msgstr ""
|
|||||||
## Run "mix gettext.extract" to bring this file up to
|
## Run "mix gettext.extract" to bring this file up to
|
||||||
## date. Leave "msgstr"s empty as changing them here has no
|
## date. Leave "msgstr"s empty as changing them here has no
|
||||||
## effect: edit them in PO (.po) files instead.
|
## effect: edit them in PO (.po) files instead.
|
||||||
#, elixir-autogen, elixir-format
|
#: lib/cannery_web/live/ammo_type_live/form_component.ex:86
|
||||||
#: lib/cannery_web/live/ammo_type_live/form_component.ex:85
|
#: lib/cannery_web/live/container_live/form_component.ex:89
|
||||||
#: lib/cannery_web/live/container_live/form_component.ex:85
|
|
||||||
#: lib/cannery_web/live/invite_live/form_component.ex:80
|
#: lib/cannery_web/live/invite_live/form_component.ex:80
|
||||||
#: lib/cannery_web/live/tag_live/form_component.ex:126
|
#: lib/cannery_web/live/tag_live/form_component.ex:126
|
||||||
|
#, elixir-autogen, elixir-format
|
||||||
msgid "%{name} created successfully"
|
msgid "%{name} created successfully"
|
||||||
msgstr "%{name} créé· avec succès"
|
msgstr "%{name} créé· avec succès"
|
||||||
|
|
||||||
#, elixir-autogen, elixir-format
|
#: lib/cannery_web/live/ammo_type_live/index.ex:47
|
||||||
#: lib/cannery_web/live/ammo_type_live/index.ex:41
|
|
||||||
#: lib/cannery_web/live/ammo_type_live/show.ex:28
|
#: lib/cannery_web/live/ammo_type_live/show.ex:28
|
||||||
#: lib/cannery_web/live/invite_live/index.ex:53
|
#: lib/cannery_web/live/invite_live/index.ex:53
|
||||||
#: lib/cannery_web/live/invite_live/index.ex:133
|
#: lib/cannery_web/live/invite_live/index.ex:133
|
||||||
#: lib/cannery_web/live/tag_live/index.ex:38
|
#: lib/cannery_web/live/tag_live/index.ex:38
|
||||||
|
#, elixir-autogen, elixir-format
|
||||||
msgid "%{name} deleted succesfully"
|
msgid "%{name} deleted succesfully"
|
||||||
msgstr "%{name} supprimé· avec succès"
|
msgstr "%{name} supprimé· avec succès"
|
||||||
|
|
||||||
#, elixir-autogen, elixir-format
|
|
||||||
#: lib/cannery_web/live/invite_live/index.ex:109
|
#: lib/cannery_web/live/invite_live/index.ex:109
|
||||||
|
#, elixir-autogen, elixir-format
|
||||||
msgid "%{name} disabled succesfully"
|
msgid "%{name} disabled succesfully"
|
||||||
msgstr "%{name} supprimé·e avec succès"
|
msgstr "%{name} supprimé·e avec succès"
|
||||||
|
|
||||||
#, elixir-autogen, elixir-format
|
|
||||||
#: lib/cannery_web/live/invite_live/index.ex:87
|
#: lib/cannery_web/live/invite_live/index.ex:87
|
||||||
|
#, elixir-autogen, elixir-format
|
||||||
msgid "%{name} enabled succesfully"
|
msgid "%{name} enabled succesfully"
|
||||||
msgstr "%{name} activé·e avec succès"
|
msgstr "%{name} activé·e avec succès"
|
||||||
|
|
||||||
#, elixir-autogen, elixir-format
|
#: lib/cannery_web/live/container_live/index.ex:81
|
||||||
#: lib/cannery_web/live/container_live/index.ex:62
|
|
||||||
#: lib/cannery_web/live/container_live/show.ex:61
|
#: lib/cannery_web/live/container_live/show.ex:61
|
||||||
|
#, elixir-autogen, elixir-format
|
||||||
msgid "%{name} has been deleted"
|
msgid "%{name} has been deleted"
|
||||||
msgstr "%{name} a été supprimé·e"
|
msgstr "%{name} a été supprimé·e"
|
||||||
|
|
||||||
#, elixir-autogen, elixir-format
|
|
||||||
#: lib/cannery_web/live/invite_live/index.ex:67
|
#: lib/cannery_web/live/invite_live/index.ex:67
|
||||||
|
#, elixir-autogen, elixir-format
|
||||||
msgid "%{name} updated succesfully"
|
msgid "%{name} updated succesfully"
|
||||||
msgstr "%{name} mis à jour avec succès"
|
msgstr "%{name} mis à jour avec succès"
|
||||||
|
|
||||||
#, elixir-autogen, elixir-format
|
|
||||||
#: lib/cannery_web/live/ammo_type_live/form_component.ex:67
|
#: lib/cannery_web/live/ammo_type_live/form_component.ex:67
|
||||||
#: lib/cannery_web/live/container_live/form_component.ex:67
|
#: lib/cannery_web/live/container_live/form_component.ex:70
|
||||||
#: lib/cannery_web/live/invite_live/form_component.ex:62
|
#: lib/cannery_web/live/invite_live/form_component.ex:62
|
||||||
#: lib/cannery_web/live/tag_live/form_component.ex:108
|
#: lib/cannery_web/live/tag_live/form_component.ex:108
|
||||||
|
#, elixir-autogen, elixir-format
|
||||||
msgid "%{name} updated successfully"
|
msgid "%{name} updated successfully"
|
||||||
msgstr "%{name} mis à jour avec succès"
|
msgstr "%{name} mis à jour avec succès"
|
||||||
|
|
||||||
#, elixir-autogen, elixir-format
|
|
||||||
#: lib/cannery_web/controllers/user_settings_controller.ex:29
|
#: lib/cannery_web/controllers/user_settings_controller.ex:29
|
||||||
|
#, elixir-autogen, elixir-format
|
||||||
msgid "A link to confirm your email change has been sent to the new address."
|
msgid "A link to confirm your email change has been sent to the new address."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
"Un lien pour confirmer votre changement de mél a été envoyé à la nouvelle "
|
"Un lien pour confirmer votre changement de mél a été envoyé à la nouvelle "
|
||||||
"adresse."
|
"adresse."
|
||||||
|
|
||||||
|
#: lib/cannery_web/live/ammo_group_live/index.ex:64
|
||||||
#, elixir-autogen, elixir-format
|
#, elixir-autogen, elixir-format
|
||||||
#: lib/cannery_web/live/ammo_group_live/index.ex:56
|
|
||||||
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"
|
||||||
|
|
||||||
|
#: lib/cannery_web/live/invite_live/index.html.heex:103
|
||||||
|
#: lib/cannery_web/live/invite_live/index.html.heex:133
|
||||||
#, 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:131
|
|
||||||
msgid "Are you sure you want to delete %{email}? This action is permanent!"
|
msgid "Are you sure you want to delete %{email}? This action is permanent!"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
"Êtes-vous certain·e de supprimer %{email} ? Cette action est définitive !"
|
"Êtes-vous certain·e de supprimer %{email} ? Cette action est définitive !"
|
||||||
|
|
||||||
|
#: lib/cannery_web/live/container_live/index.ex:223
|
||||||
|
#: lib/cannery_web/live/container_live/index.html.heex:73
|
||||||
|
#: lib/cannery_web/live/container_live/show.html.heex:51
|
||||||
|
#: lib/cannery_web/live/tag_live/index.html.heex:39
|
||||||
#, elixir-autogen, elixir-format
|
#, elixir-autogen, elixir-format
|
||||||
#: lib/cannery_web/live/container_live/index.html.heex:46
|
|
||||||
#: lib/cannery_web/live/container_live/show.html.heex:49
|
|
||||||
#: 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} ?"
|
||||||
|
|
||||||
#, elixir-autogen, elixir-format
|
|
||||||
#: lib/cannery_web/live/invite_live/index.html.heex:49
|
#: lib/cannery_web/live/invite_live/index.html.heex:49
|
||||||
|
#, elixir-autogen, elixir-format
|
||||||
msgid "Are you sure you want to delete the invite for %{name}?"
|
msgid "Are you sure you want to delete the invite for %{name}?"
|
||||||
msgstr "Êtes-vous certain·e de supprimer l’invitation pour %{name} ?"
|
msgstr "Êtes-vous certain·e de supprimer l’invitation pour %{name} ?"
|
||||||
|
|
||||||
|
#: lib/cannery_web/live/ammo_group_live/index.ex:242
|
||||||
|
#: lib/cannery_web/live/ammo_group_live/show.html.heex:75
|
||||||
#, elixir-autogen, elixir-format
|
#, elixir-autogen, elixir-format
|
||||||
#: lib/cannery_web/live/ammo_group_live/index.ex:193
|
|
||||||
#: lib/cannery_web/live/ammo_group_live/show.html.heex:71
|
|
||||||
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 ?"
|
||||||
|
|
||||||
|
#: lib/cannery_web/templates/user_settings/edit.html.heex:155
|
||||||
#, elixir-autogen, elixir-format
|
#, elixir-autogen, elixir-format
|
||||||
#: lib/cannery_web/templates/user_settings/edit.html.heex:146
|
|
||||||
msgid "Are you sure you want to delete your account?"
|
msgid "Are you sure you want to delete your account?"
|
||||||
msgstr "Êtes-vous certain·e de supprimer votre compte ?"
|
msgstr "Êtes-vous certain·e de supprimer votre compte ?"
|
||||||
|
|
||||||
|
#: lib/cannery_web/components/topbar.ex:106
|
||||||
#, elixir-autogen, elixir-format
|
#, elixir-autogen, elixir-format
|
||||||
#: 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 ?"
|
||||||
|
|
||||||
|
#: lib/cannery_web/live/invite_live/index.html.heex:75
|
||||||
#, elixir-autogen, elixir-format
|
#, elixir-autogen, elixir-format
|
||||||
#: lib/cannery_web/live/invite_live/index.html.heex:74
|
|
||||||
msgid "Are you sure you want to make %{name} unlimited?"
|
msgid "Are you sure you want to make %{name} unlimited?"
|
||||||
msgstr "Êtes-vous certain·e de vouloir rendre %{name} illimité ?"
|
msgstr "Êtes-vous certain·e de vouloir rendre %{name} illimité ?"
|
||||||
|
|
||||||
#, elixir-autogen, elixir-format
|
|
||||||
#: lib/cannery_web/controllers/user_settings_controller.ex:77
|
#: lib/cannery_web/controllers/user_settings_controller.ex:77
|
||||||
|
#, elixir-autogen, elixir-format
|
||||||
msgid "Email changed successfully."
|
msgid "Email changed successfully."
|
||||||
msgstr "Mél changé avec succès."
|
msgstr "Mél changé avec succès."
|
||||||
|
|
||||||
#, elixir-autogen, elixir-format
|
|
||||||
#: lib/cannery_web/controllers/user_confirmation_controller.ex:23
|
#: lib/cannery_web/controllers/user_confirmation_controller.ex:23
|
||||||
|
#, elixir-autogen, elixir-format
|
||||||
msgid "If your email is in our system and it has not been confirmed yet, you will receive an email with instructions shortly."
|
msgid "If your email is in our system and it has not been confirmed yet, you will receive an email with instructions shortly."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
"Si votre mél est dans notre système et n’a pas encore été confirmé, vous "
|
"Si votre mél est dans notre système et n’a pas encore été confirmé, vous "
|
||||||
"recevrez un mél avec les instructions sous peu."
|
"recevrez un mél avec les instructions sous peu."
|
||||||
|
|
||||||
#, elixir-autogen, elixir-format
|
|
||||||
#: lib/cannery_web/controllers/user_reset_password_controller.ex:24
|
#: lib/cannery_web/controllers/user_reset_password_controller.ex:24
|
||||||
|
#, elixir-autogen, elixir-format
|
||||||
msgid "If your email is in our system, you will receive instructions to reset your password shortly."
|
msgid "If your email is in our system, you will receive instructions to reset your password shortly."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
"Si votre mél est dans notre système, vous recevrez les instructions pour "
|
"Si votre mél est dans notre système, vous recevrez les instructions pour "
|
||||||
"réinitialiser votre mot de passe sous peu."
|
"réinitialiser votre mot de passe sous peu."
|
||||||
|
|
||||||
#, elixir-autogen, elixir-format
|
|
||||||
#: lib/cannery_web/controllers/user_session_controller.ex:23
|
#: lib/cannery_web/controllers/user_session_controller.ex:23
|
||||||
|
#, elixir-autogen, elixir-format
|
||||||
msgid "Logged out successfully."
|
msgid "Logged out successfully."
|
||||||
msgstr "Déconnecté avec succès."
|
msgstr "Déconnecté avec succès."
|
||||||
|
|
||||||
#, elixir-autogen, elixir-format
|
|
||||||
#: lib/cannery_web/controllers/user_reset_password_controller.ex:46
|
#: lib/cannery_web/controllers/user_reset_password_controller.ex:46
|
||||||
|
#, elixir-autogen, elixir-format
|
||||||
msgid "Password reset successfully."
|
msgid "Password reset successfully."
|
||||||
msgstr "Mot de passe réinitialiser avec succès."
|
msgstr "Mot de passe réinitialiser avec succès."
|
||||||
|
|
||||||
#, elixir-autogen, elixir-format
|
|
||||||
#: lib/cannery_web/controllers/user_settings_controller.ex:49
|
#: lib/cannery_web/controllers/user_settings_controller.ex:49
|
||||||
|
#, elixir-autogen, elixir-format
|
||||||
msgid "Password updated successfully."
|
msgid "Password updated successfully."
|
||||||
msgstr "Mot de passe mis à jour avec succès."
|
msgstr "Mot de passe mis à jour avec succès."
|
||||||
|
|
||||||
#, elixir-autogen, elixir-format
|
|
||||||
#: lib/cannery_web/controllers/user_registration_controller.ex:74
|
#: lib/cannery_web/controllers/user_registration_controller.ex:74
|
||||||
|
#, elixir-autogen, elixir-format
|
||||||
msgid "Please check your email to verify your account"
|
msgid "Please check your email to verify your account"
|
||||||
msgstr "Veuillez vérifier votre mél pour confirmer votre compte"
|
msgstr "Veuillez vérifier votre mél pour confirmer votre compte"
|
||||||
|
|
||||||
|
#: lib/cannery_web/live/home_live.ex:108
|
||||||
#, elixir-autogen, elixir-format
|
#, elixir-autogen, elixir-format
|
||||||
#: lib/cannery_web/live/home_live.ex:104
|
|
||||||
msgid "Register to setup %{name}"
|
msgid "Register to setup %{name}"
|
||||||
msgstr "S’enregistrer pour mettre en place %{name}"
|
msgstr "S’enregistrer pour mettre en place %{name}"
|
||||||
|
|
||||||
#, elixir-autogen, elixir-format
|
#: lib/cannery_web/components/add_shot_group_component.html.heex:55
|
||||||
#: lib/cannery_web/components/add_shot_group_component.html.heex:48
|
|
||||||
#: 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:33
|
#: 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:93
|
#: lib/cannery_web/live/tag_live/form_component.ex:93
|
||||||
|
#, elixir-autogen, elixir-format
|
||||||
msgid "Saving..."
|
msgid "Saving..."
|
||||||
msgstr "Sauvegarde en cours…"
|
msgstr "Sauvegarde en cours…"
|
||||||
|
|
||||||
#, elixir-autogen, elixir-format
|
|
||||||
#: lib/cannery_web/controllers/user_settings_controller.ex:95
|
#: lib/cannery_web/controllers/user_settings_controller.ex:95
|
||||||
|
#, elixir-autogen, elixir-format
|
||||||
msgid "Your account has been deleted"
|
msgid "Your account has been deleted"
|
||||||
msgstr "Votre compte a été supprimé"
|
msgstr "Votre compte a été supprimé"
|
||||||
|
|
||||||
#, elixir-autogen, elixir-format
|
|
||||||
#: lib/cannery_web/live/container_live/edit_tags_component.html.heex:16
|
#: lib/cannery_web/live/container_live/edit_tags_component.html.heex:16
|
||||||
|
#, elixir-autogen, elixir-format
|
||||||
msgid "Are you sure you want to remove the %{tag_name} tag from %{container_name}?"
|
msgid "Are you sure you want to remove the %{tag_name} tag from %{container_name}?"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
"Êtes-vous certain·e de vouloir retirer le tag %{tag_name} de "
|
"Êtes-vous certain·e de vouloir retirer le tag %{tag_name} de "
|
||||||
"%{container_name} ?"
|
"%{container_name} ?"
|
||||||
|
|
||||||
#, elixir-autogen, elixir-format
|
|
||||||
#: lib/cannery_web/live/container_live/edit_tags_component.ex:36
|
#: lib/cannery_web/live/container_live/edit_tags_component.ex:36
|
||||||
|
#, elixir-autogen, elixir-format
|
||||||
msgid "%{name} added successfully"
|
msgid "%{name} added successfully"
|
||||||
msgstr "%{name} a été ajouté avec succès"
|
msgstr "%{name} a été ajouté avec succès"
|
||||||
|
|
||||||
#, elixir-autogen, elixir-format
|
|
||||||
#: lib/cannery_web/live/container_live/show.ex:37
|
#: lib/cannery_web/live/container_live/show.ex:37
|
||||||
|
#, elixir-autogen, elixir-format
|
||||||
msgid "%{tag_name} has been removed from %{container_name}"
|
msgid "%{tag_name} has been removed from %{container_name}"
|
||||||
msgstr "%{tag_name} a été retiré de %{container_name}"
|
msgstr "%{tag_name} a été retiré de %{container_name}"
|
||||||
|
|
||||||
|
#: lib/cannery_web/live/container_live/edit_tags_component.html.heex:55
|
||||||
#, elixir-autogen, elixir-format
|
#, elixir-autogen, elixir-format
|
||||||
#: lib/cannery_web/live/container_live/edit_tags_component.html.heex:54
|
|
||||||
msgid "Adding..."
|
msgid "Adding..."
|
||||||
msgstr "Ajout en cours…"
|
msgstr "Ajout en cours…"
|
||||||
|
|
||||||
#, elixir-autogen, elixir-format
|
|
||||||
#: lib/cannery_web/components/add_shot_group_component.ex:56
|
#: lib/cannery_web/components/add_shot_group_component.ex:56
|
||||||
|
#, elixir-autogen, elixir-format
|
||||||
msgid "Shots recorded successfully"
|
msgid "Shots recorded successfully"
|
||||||
msgstr "Tirs enregistré avec succès"
|
msgstr "Tirs enregistré avec succès"
|
||||||
|
|
||||||
|
#: lib/cannery_web/live/range_live/index.html.heex:27
|
||||||
#, elixir-autogen, elixir-format
|
#, elixir-autogen, elixir-format
|
||||||
#: lib/cannery_web/live/range_live/index.html.heex:29
|
|
||||||
msgid "Are you sure you want to unstage this ammo?"
|
msgid "Are you sure you want to unstage this ammo?"
|
||||||
msgstr "Êtes-vous certain·e de vouloir désélectionner cette munition ?"
|
msgstr "Êtes-vous certain·e de vouloir désélectionner cette munition ?"
|
||||||
|
|
||||||
|
#: lib/cannery_web/live/ammo_group_live/show.ex:132
|
||||||
|
#: lib/cannery_web/live/range_live/index.ex:184
|
||||||
#, elixir-autogen, elixir-format
|
#, elixir-autogen, elixir-format
|
||||||
#: lib/cannery_web/live/ammo_group_live/show.ex:130
|
|
||||||
#: lib/cannery_web/live/range_live/index.ex:128
|
|
||||||
msgid "Are you sure you want to delete this shot record?"
|
msgid "Are you sure you want to delete this shot record?"
|
||||||
msgstr "Êtes-vous certain·e de vouloir supprimer cet enregistrement de tir ?"
|
msgstr "Êtes-vous certain·e de vouloir supprimer cet enregistrement de tir ?"
|
||||||
|
|
||||||
#, elixir-autogen, elixir-format
|
|
||||||
#: lib/cannery_web/live/ammo_group_live/show.ex:78
|
#: lib/cannery_web/live/ammo_group_live/show.ex:78
|
||||||
#: lib/cannery_web/live/range_live/index.ex:54
|
#: lib/cannery_web/live/range_live/index.ex:54
|
||||||
|
#, elixir-autogen, elixir-format
|
||||||
msgid "Shot records deleted succesfully"
|
msgid "Shot records deleted succesfully"
|
||||||
msgstr "Enregistrements de tir supprimés avec succès"
|
msgstr "Enregistrements de tir supprimés avec succès"
|
||||||
|
|
||||||
#, elixir-autogen, elixir-format
|
|
||||||
#: lib/cannery_web/live/range_live/form_component.ex:55
|
#: lib/cannery_web/live/range_live/form_component.ex:55
|
||||||
|
#, elixir-autogen, elixir-format
|
||||||
msgid "Shot records updated successfully"
|
msgid "Shot records updated successfully"
|
||||||
msgstr "Enregistrements de tir mis à jour avec succès"
|
msgstr "Enregistrements de tir mis à jour avec succès"
|
||||||
|
|
||||||
#, elixir-autogen, elixir-format
|
|
||||||
#: lib/cannery_web/controllers/user_confirmation_controller.ex:38
|
#: lib/cannery_web/controllers/user_confirmation_controller.ex:38
|
||||||
|
#, elixir-autogen, elixir-format
|
||||||
msgid "%{email} confirmed successfully."
|
msgid "%{email} confirmed successfully."
|
||||||
msgstr "%{email} confirmé avec succès."
|
msgstr "%{email} confirmé avec succès."
|
||||||
|
|
||||||
#, elixir-autogen, elixir-format
|
|
||||||
#: lib/cannery_web/components/move_ammo_group_component.ex:53
|
#: lib/cannery_web/components/move_ammo_group_component.ex:53
|
||||||
|
#, elixir-autogen, elixir-format
|
||||||
msgid "Ammo moved to %{name} successfully"
|
msgid "Ammo moved to %{name} successfully"
|
||||||
msgstr "Munition déplacée à %{name} avec succès"
|
msgstr "Munition déplacée à %{name} avec succès"
|
||||||
|
|
||||||
#, elixir-autogen, elixir-format
|
|
||||||
#: lib/cannery_web/live/invite_live/index.ex:121
|
#: lib/cannery_web/live/invite_live/index.ex:121
|
||||||
|
#, elixir-autogen, elixir-format
|
||||||
msgid "Copied to clipboard"
|
msgid "Copied to clipboard"
|
||||||
msgstr "Copié dans le presse-papier"
|
msgstr "Copié dans le presse-papier"
|
||||||
|
|
||||||
#, elixir-autogen, elixir-format
|
|
||||||
#: lib/cannery_web/live/container_live/edit_tags_component.ex:58
|
#: lib/cannery_web/live/container_live/edit_tags_component.ex:58
|
||||||
|
#, elixir-autogen, elixir-format
|
||||||
msgid "%{name} removed successfully"
|
msgid "%{name} removed successfully"
|
||||||
msgstr "%{name} retiré avec succès"
|
msgstr "%{name} retiré avec succès"
|
||||||
|
|
||||||
#, elixir-autogen, elixir-format
|
|
||||||
#: lib/cannery_web/live/ammo_group_live/index.html.heex:17
|
#: lib/cannery_web/live/ammo_group_live/index.html.heex:17
|
||||||
#: lib/cannery_web/live/ammo_group_live/index.html.heex:28
|
#: lib/cannery_web/live/ammo_group_live/index.html.heex:27
|
||||||
|
#, elixir-autogen, elixir-format
|
||||||
msgid "You'll need to"
|
msgid "You'll need to"
|
||||||
msgstr "Vous aurez besoin de"
|
msgstr "Vous aurez besoin de"
|
||||||
|
|
||||||
#, elixir-autogen, elixir-format
|
|
||||||
#: lib/cannery_web/live/ammo_group_live/form_component.html.heex:67
|
#: lib/cannery_web/live/ammo_group_live/form_component.html.heex:67
|
||||||
|
#, elixir-autogen, elixir-format
|
||||||
msgid "Creating..."
|
msgid "Creating..."
|
||||||
msgstr "Création en cours…"
|
msgstr "Création en cours…"
|
||||||
|
|
||||||
#, elixir-autogen, elixir-format
|
|
||||||
#: lib/cannery_web/templates/user_settings/edit.html.heex:136
|
#: lib/cannery_web/templates/user_settings/edit.html.heex:136
|
||||||
|
#, elixir-autogen, elixir-format
|
||||||
msgid "Are you sure you want to change your language?"
|
msgid "Are you sure you want to change your language?"
|
||||||
msgstr "Êtes-vous certain·e de vouloir changer votre langue ?"
|
msgstr "Êtes-vous certain·e de vouloir changer votre langue ?"
|
||||||
|
|
||||||
#, elixir-autogen, elixir-format
|
|
||||||
#: lib/cannery_web/controllers/user_settings_controller.ex:65
|
#: lib/cannery_web/controllers/user_settings_controller.ex:65
|
||||||
|
#, elixir-autogen, elixir-format
|
||||||
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
|
#: lib/cannery_web/live/ammo_group_live/show.ex:50
|
||||||
|
#, elixir-autogen, elixir-format, fuzzy
|
||||||
msgid "Ammo deleted succesfully"
|
msgid "Ammo deleted succesfully"
|
||||||
msgstr "Groupe de munition supprimé avec succès"
|
msgstr "Groupe de munition supprimé avec succès"
|
||||||
|
|
||||||
#, elixir-autogen, elixir-format, fuzzy
|
|
||||||
#: lib/cannery_web/live/range_live/index.ex:68
|
#: lib/cannery_web/live/range_live/index.ex:68
|
||||||
|
#, elixir-autogen, elixir-format, fuzzy
|
||||||
msgid "Ammo unstaged succesfully"
|
msgid "Ammo unstaged succesfully"
|
||||||
msgstr "Groupe de munition désélectionner avec succès"
|
msgstr "Groupe de munition désélectionner avec succès"
|
||||||
|
|
||||||
#, elixir-autogen, elixir-format, fuzzy
|
|
||||||
#: lib/cannery_web/live/ammo_group_live/form_component.ex:118
|
#: lib/cannery_web/live/ammo_group_live/form_component.ex:118
|
||||||
|
#, elixir-autogen, elixir-format, fuzzy
|
||||||
msgid "Ammo updated successfully"
|
msgid "Ammo updated successfully"
|
||||||
msgstr "Groupe de munition mis à jour avec succès"
|
msgstr "Groupe de munition mis à jour avec succès"
|
||||||
|
|
||||||
|
#: lib/cannery_web/live/ammo_group_live/form_component.ex:178
|
||||||
#, elixir-autogen, elixir-format, fuzzy
|
#, elixir-autogen, elixir-format, fuzzy
|
||||||
#: lib/cannery_web/live/ammo_group_live/form_component.ex:177
|
|
||||||
msgid "Ammo added successfully"
|
msgid "Ammo added successfully"
|
||||||
msgid_plural "Ammo added successfully"
|
msgid_plural "Ammo added successfully"
|
||||||
msgstr[0] "Groupe de munition mis à jour avec succès"
|
msgstr[0] "Groupe de munition mis à jour avec succès"
|
||||||
msgstr[1] "Groupe de munition mis à jour avec succès"
|
msgstr[1] "Groupe de munition mis à jour avec succès"
|
||||||
|
|
||||||
|
#: lib/cannery_web/live/ammo_type_live/index.ex:232
|
||||||
|
#: lib/cannery_web/live/ammo_type_live/show.html.heex:28
|
||||||
#, elixir-autogen, elixir-format, fuzzy
|
#, elixir-autogen, elixir-format, fuzzy
|
||||||
#: lib/cannery_web/live/ammo_type_live/index.ex:156
|
|
||||||
#: lib/cannery_web/live/ammo_type_live/show.html.heex:26
|
|
||||||
msgid "Are you sure you want to delete %{name}? This will delete all %{name} type ammo as well!"
|
msgid "Are you sure you want to delete %{name}? This will delete all %{name} type ammo as well!"
|
||||||
msgstr "Êtes-vous certain·e de supprimer %{name} ?"
|
msgstr "Êtes-vous certain·e de supprimer %{name} ?"
|
||||||
|
267
priv/gettext/ga/LC_MESSAGES/actions.po
Normal file
267
priv/gettext/ga/LC_MESSAGES/actions.po
Normal file
@ -0,0 +1,267 @@
|
|||||||
|
msgid ""
|
||||||
|
msgstr ""
|
||||||
|
"Project-Id-Version: PACKAGE VERSION\n"
|
||||||
|
"Report-Msgid-Bugs-To: \n"
|
||||||
|
"POT-Creation-Date: 2022-11-06 23:51+0000\n"
|
||||||
|
"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
|
||||||
|
"Last-Translator: Automatically generated\n"
|
||||||
|
"Language-Team: none\n"
|
||||||
|
"Language: ga\n"
|
||||||
|
"MIME-Version: 1.0\n"
|
||||||
|
"Content-Type: text/plain; charset=UTF-8\n"
|
||||||
|
"Content-Transfer-Encoding: 8bit\n"
|
||||||
|
"X-Generator: Translate Toolkit 3.7.3\n"
|
||||||
|
|
||||||
|
## This file is a PO Template file.
|
||||||
|
##
|
||||||
|
## "msgid"s here are often extracted from source code.
|
||||||
|
## Add new translations manually only if they're dynamic
|
||||||
|
## translations that can't be statically extracted.
|
||||||
|
##
|
||||||
|
## Run "mix gettext.extract" to bring this file up to
|
||||||
|
## date. Leave "msgstr"s empty as changing them here has no
|
||||||
|
## effect: edit them in PO (.po) files instead.
|
||||||
|
#: lib/cannery_web/live/ammo_group_live/index.ex:44
|
||||||
|
#: lib/cannery_web/live/ammo_group_live/index.ex:50
|
||||||
|
#: lib/cannery_web/live/ammo_group_live/index.html.heex:40
|
||||||
|
#, elixir-autogen, elixir-format
|
||||||
|
msgid "Add Ammo"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: lib/cannery_web/live/ammo_group_live/index.html.heex:36
|
||||||
|
#, elixir-autogen, elixir-format
|
||||||
|
msgid "Add your first box!"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: lib/cannery_web/live/container_live/index.html.heex:13
|
||||||
|
#, elixir-autogen, elixir-format
|
||||||
|
msgid "Add your first container!"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: lib/cannery_web/live/ammo_type_live/index.html.heex:13
|
||||||
|
#, elixir-autogen, elixir-format
|
||||||
|
msgid "Add your first type!"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: lib/cannery_web/templates/user_settings/edit.html.heex:15
|
||||||
|
#: lib/cannery_web/templates/user_settings/edit.html.heex:44
|
||||||
|
#, elixir-autogen, elixir-format
|
||||||
|
msgid "Change email"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: lib/cannery_web/templates/user_settings/edit.html.heex:58
|
||||||
|
#: lib/cannery_web/templates/user_settings/edit.html.heex:99
|
||||||
|
#, elixir-autogen, elixir-format
|
||||||
|
msgid "Change password"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: lib/cannery_web/live/invite_live/index.html.heex:17
|
||||||
|
#, elixir-autogen, elixir-format
|
||||||
|
msgid "Create Invite"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: lib/cannery_web/templates/user_settings/edit.html.heex:157
|
||||||
|
#, elixir-autogen, elixir-format
|
||||||
|
msgid "Delete User"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: lib/cannery_web/templates/user_registration/new.html.heex:52
|
||||||
|
#: lib/cannery_web/templates/user_reset_password/new.html.heex:3
|
||||||
|
#: lib/cannery_web/templates/user_session/new.html.heex:45
|
||||||
|
#, elixir-autogen, elixir-format
|
||||||
|
msgid "Forgot your password?"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: lib/cannery_web/live/invite_live/index.html.heex:13
|
||||||
|
#, elixir-autogen, elixir-format
|
||||||
|
msgid "Invite someone new!"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: lib/cannery_web/components/topbar.ex:137
|
||||||
|
#: lib/cannery_web/templates/user_confirmation/new.html.heex:30
|
||||||
|
#: lib/cannery_web/templates/user_registration/new.html.heex:49
|
||||||
|
#: lib/cannery_web/templates/user_reset_password/edit.html.heex:48
|
||||||
|
#: lib/cannery_web/templates/user_reset_password/new.html.heex:30
|
||||||
|
#: lib/cannery_web/templates/user_session/new.html.heex:3
|
||||||
|
#: lib/cannery_web/templates/user_session/new.html.heex:33
|
||||||
|
#, elixir-autogen, elixir-format
|
||||||
|
msgid "Log in"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: lib/cannery_web/live/tag_live/index.html.heex:15
|
||||||
|
#, elixir-autogen, elixir-format
|
||||||
|
msgid "Make your first tag!"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: lib/cannery_web/live/ammo_type_live/index.html.heex:17
|
||||||
|
#, elixir-autogen, elixir-format
|
||||||
|
msgid "New Ammo type"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: lib/cannery_web/live/container_live/index.html.heex:17
|
||||||
|
#, elixir-autogen, elixir-format
|
||||||
|
msgid "New Container"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: lib/cannery_web/live/tag_live/index.html.heex:19
|
||||||
|
#, elixir-autogen, elixir-format
|
||||||
|
msgid "New Tag"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: lib/cannery_web/components/topbar.ex:128
|
||||||
|
#: lib/cannery_web/templates/user_confirmation/new.html.heex:26
|
||||||
|
#: 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_reset_password/edit.html.heex:44
|
||||||
|
#: lib/cannery_web/templates/user_reset_password/new.html.heex:26
|
||||||
|
#: lib/cannery_web/templates/user_session/new.html.heex:41
|
||||||
|
#, elixir-autogen, elixir-format
|
||||||
|
msgid "Register"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: lib/cannery_web/templates/user_confirmation/new.html.heex:3
|
||||||
|
#: lib/cannery_web/templates/user_confirmation/new.html.heex:16
|
||||||
|
#, elixir-autogen, elixir-format
|
||||||
|
msgid "Resend confirmation instructions"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: lib/cannery_web/templates/user_reset_password/edit.html.heex:3
|
||||||
|
#: lib/cannery_web/templates/user_reset_password/edit.html.heex:34
|
||||||
|
#, elixir-autogen, elixir-format
|
||||||
|
msgid "Reset password"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: lib/cannery_web/components/add_shot_group_component.html.heex:53
|
||||||
|
#: 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/container_live/form_component.html.heex:50
|
||||||
|
#: 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/tag_live/form_component.ex:91
|
||||||
|
#, elixir-autogen, elixir-format
|
||||||
|
msgid "Save"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: lib/cannery_web/templates/user_reset_password/new.html.heex:16
|
||||||
|
#, elixir-autogen, elixir-format
|
||||||
|
msgid "Send instructions to reset password"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: lib/cannery_web/live/container_live/show.html.heex:72
|
||||||
|
#, elixir-autogen, elixir-format
|
||||||
|
msgid "Why not add one?"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: lib/cannery_web/live/container_live/edit_tags_component.html.heex:53
|
||||||
|
#, elixir-autogen, elixir-format
|
||||||
|
msgid "Add"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: lib/cannery_web/live/range_live/index.html.heex:17
|
||||||
|
#, elixir-autogen, elixir-format
|
||||||
|
msgid "Stage ammo"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: lib/cannery_web/live/range_live/index.html.heex:13
|
||||||
|
#, elixir-autogen, elixir-format
|
||||||
|
msgid "Why not get some ready to shoot?"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: lib/cannery_web/live/ammo_group_live/index.ex:199
|
||||||
|
#: lib/cannery_web/live/ammo_group_live/show.html.heex:101
|
||||||
|
#: lib/cannery_web/live/range_live/index.html.heex:38
|
||||||
|
#, elixir-autogen, elixir-format
|
||||||
|
msgid "Record shots"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: lib/cannery_web/components/move_ammo_group_component.ex:90
|
||||||
|
#, elixir-autogen, elixir-format
|
||||||
|
msgid "Add another container!"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: lib/cannery_web/live/ammo_group_live/show.html.heex:94
|
||||||
|
#, elixir-autogen, elixir-format
|
||||||
|
msgid "Move containers"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: lib/cannery_web/components/move_ammo_group_component.ex:126
|
||||||
|
#, elixir-autogen, elixir-format
|
||||||
|
msgid "Select"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: lib/cannery_web/live/invite_live/index.html.heex:31
|
||||||
|
#, elixir-autogen, elixir-format
|
||||||
|
msgid "Copy to clipboard"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: lib/cannery_web/live/ammo_group_live/index.html.heex:21
|
||||||
|
#, elixir-autogen, elixir-format
|
||||||
|
msgid "add a container first"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: lib/cannery_web/live/ammo_group_live/form_component.html.heex:66
|
||||||
|
#, elixir-autogen, elixir-format
|
||||||
|
msgid "Create"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: lib/cannery_web/templates/user_settings/edit.html.heex:113
|
||||||
|
#, elixir-autogen, elixir-format
|
||||||
|
msgid "Change Language"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: lib/cannery_web/templates/user_settings/edit.html.heex:134
|
||||||
|
#, elixir-autogen, elixir-format
|
||||||
|
msgid "Change language"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: lib/cannery_web/live/ammo_group_live/show.html.heex:60
|
||||||
|
#, elixir-autogen, elixir-format
|
||||||
|
msgid "View in Catalog"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: lib/cannery_web/live/ammo_group_live/index.html.heex:31
|
||||||
|
#, elixir-autogen, elixir-format
|
||||||
|
msgid "add an ammo type first"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: lib/cannery_web/live/invite_live/index.html.heex:60
|
||||||
|
#, elixir-autogen, elixir-format
|
||||||
|
msgid "Disable"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: lib/cannery_web/live/invite_live/index.html.heex:64
|
||||||
|
#, elixir-autogen, elixir-format
|
||||||
|
msgid "Enable"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: lib/cannery_web/components/move_ammo_group_component.ex:80
|
||||||
|
#, elixir-autogen, elixir-format
|
||||||
|
msgid "Move ammo"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: lib/cannery_web/live/invite_live/index.html.heex:80
|
||||||
|
#, elixir-autogen, elixir-format
|
||||||
|
msgid "Set Unlimited"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: lib/cannery_web/live/container_live/show.html.heex:97
|
||||||
|
#, elixir-autogen, elixir-format
|
||||||
|
msgid "Show used"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: lib/cannery_web/live/ammo_group_live/show.html.heex:86
|
||||||
|
#: lib/cannery_web/live/range_live/index.html.heex:31
|
||||||
|
#, elixir-autogen, elixir-format
|
||||||
|
msgid "Stage for range"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: lib/cannery_web/live/ammo_group_live/show.html.heex:85
|
||||||
|
#: lib/cannery_web/live/range_live/index.html.heex:30
|
||||||
|
#, elixir-autogen, elixir-format
|
||||||
|
msgid "Unstage from range"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: lib/cannery_web/templates/user_settings/edit.html.heex:148
|
||||||
|
#, elixir-autogen, elixir-format
|
||||||
|
msgid "Export Data as JSON"
|
||||||
|
msgstr ""
|
1014
priv/gettext/ga/LC_MESSAGES/default.po
Normal file
1014
priv/gettext/ga/LC_MESSAGES/default.po
Normal file
File diff suppressed because it is too large
Load Diff
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user