78 Commits
0.5.0 ... 0.5.5

Author SHA1 Message Date
b6e0a543ec mix format
All checks were successful
continuous-integration/drone/push Build is passing
2022-07-05 01:13:38 -04:00
cf75007e4d add logo as favicon
Some checks failed
continuous-integration/drone/push Build is failing
2022-07-05 01:09:47 -04:00
1583ad3503 remove logo from readme lol
All checks were successful
continuous-integration/drone/push Build is passing
2022-07-04 21:55:57 -04:00
2af9c7a4f9 update screenshot lol
All checks were successful
continuous-integration/drone/push Build is passing
2022-07-04 21:52:08 -04:00
7e7d6258d5 add note about creating unlimited invites
All checks were successful
continuous-integration/drone/push Build is passing
2022-07-04 21:47:31 -04:00
f246b9db93 prompt to create first ammo type before trying to create first ammo
All checks were successful
continuous-integration/drone/push Build is passing
2022-07-04 21:41:07 -04:00
5836a82ff7 add note about ammo when deleting ammo type 2022-07-04 21:40:07 -04:00
7464947497 use initial ammo group form component select state 2022-07-04 21:22:59 -04:00
3adb8c9aae pass invite token in properly 2022-07-04 21:16:09 -04:00
dce04e4d7f harden invite changesets 2022-07-04 21:09:55 -04:00
ee6266be3f harden tag changesets 2022-07-04 21:06:35 -04:00
36f56528ee use container changeset helper 2022-07-04 20:52:21 -04:00
76bbab1de9 add logo contribution 2022-07-04 20:47:12 -04:00
6c09261368 use changeset helper 2022-07-04 20:39:21 -04:00
3593334c85 fix container changeset 2022-07-04 20:30:05 -04:00
57b5cb432d fix container tag changeset 2022-07-04 20:25:55 -04:00
5b5fd7173b fix ammo type changesets 2022-07-04 20:22:39 -04:00
41bcc2f456 add logo 😄
All checks were successful
continuous-integration/drone/push Build is passing
2022-07-04 20:19:03 -04:00
947659b207 fix ammo_group changesets 2022-07-04 20:06:41 -04:00
9ebca20dc6 add error case for create_changeset 2022-07-04 20:06:31 -04:00
3cbd62e84c fix shotgroup changesets 2022-07-01 21:39:08 -04:00
67010640f0 remove unchangeable requirements 2022-07-01 19:53:44 -04:00
5fd46c326f update gettext
All checks were successful
continuous-integration/drone/push Build is passing
2022-07-01 19:16:59 -04:00
8c62a39c97 bump to 0.5.4 2022-07-01 19:16:31 -04:00
9a1a104c6d add pack and round count to containers 2022-07-01 19:13:54 -04:00
11b1ae9980 update paths
All checks were successful
continuous-integration/drone/push Build is passing
2022-07-01 00:33:32 -04:00
948fa929ec rename "Ammo Details" to "View in Catalog" 2022-07-01 00:27:51 -04:00
268085e761 update changelog 2022-07-01 00:25:38 -04:00
a1efd7cc60 improve ammo group wording 2022-07-01 00:23:04 -04:00
2db9ab968f rename ammo types page to catalog 2022-07-01 00:20:50 -04:00
7863b06215 update changelog
All checks were successful
continuous-integration/drone/push Build is passing
2022-05-21 17:19:15 -04:00
eb8cae27c0 gettext merge 2022-05-21 17:16:13 -04:00
ecca9ee4a9 Translated using Weblate (French)
All checks were successful
continuous-integration/drone/push Build is passing
Currently translated at 100.0% (157 of 157 strings)

Translation: cannery/default
Translate-URL: https://weblate.bubbletea.dev/projects/cannery/default/fr/
2022-05-21 19:47:00 +00:00
a0c4f20afd Added translation using Weblate (Spanish)
All checks were successful
continuous-integration/drone/push Build is passing
2022-05-21 19:45:00 +00:00
0e46a05360 Added translation using Weblate (Spanish)
All checks were successful
continuous-integration/drone/push Build is passing
2022-05-21 19:44:59 +00:00
1062d97f79 Added translation using Weblate (Spanish)
All checks were successful
continuous-integration/drone/push Build is passing
2022-05-21 19:44:57 +00:00
1b5df8c56c Added translation using Weblate (Spanish) 2022-05-21 19:44:57 +00:00
da5c136313 Added translation using Weblate (Spanish)
All checks were successful
continuous-integration/drone/push Build is passing
2022-05-21 19:44:56 +00:00
ef206d273f Added translation using Weblate (Spanish) 2022-05-21 19:44:55 +00:00
ef513a8108 Translated using Weblate (French)
All checks were successful
continuous-integration/drone/push Build is passing
Currently translated at 100.0% (35 of 35 strings)

Translation: cannery/actions
Translate-URL: https://weblate.bubbletea.dev/projects/cannery/actions/fr/
2022-05-18 18:51:25 +00:00
ed1765c652 Translated using Weblate (French)
Currently translated at 100.0% (46 of 46 strings)

Translation: cannery/prompts
Translate-URL: https://weblate.bubbletea.dev/projects/cannery/prompts/fr/
2022-05-18 18:51:25 +00:00
541e6a4612 Translated using Weblate (French)
Currently translated at 100.0% (157 of 157 strings)

Translation: cannery/default
Translate-URL: https://weblate.bubbletea.dev/projects/cannery/default/fr/
2022-05-18 18:51:24 +00:00
43589a88c3 Translated using Weblate (German)
All checks were successful
continuous-integration/drone/push Build is passing
Currently translated at 100.0% (35 of 35 strings)

Translation: cannery/actions
Translate-URL: https://weblate.bubbletea.dev/projects/cannery/actions/de/
2022-05-12 20:28:57 +00:00
15a6e75e7d Translated using Weblate (German)
Currently translated at 100.0% (46 of 46 strings)

Translation: cannery/prompts
Translate-URL: https://weblate.bubbletea.dev/projects/cannery/prompts/de/
2022-05-12 20:28:57 +00:00
2681a37fad Translated using Weblate (German)
Currently translated at 100.0% (157 of 157 strings)

Translation: cannery/default
Translate-URL: https://weblate.bubbletea.dev/projects/cannery/default/de/
2022-05-12 20:28:57 +00:00
d086c4c813 update to fa 6.1.1
All checks were successful
continuous-integration/drone/push Build is passing
2022-05-06 23:51:53 -04:00
f49fe21da5 remove invalid opts 2022-05-06 23:36:42 -04:00
717c898d48 update deps 2022-05-06 23:36:39 -04:00
085411132d fix button text wrapping 2022-05-06 20:30:52 -04:00
c8a6a9d81e fix gettext command
All checks were successful
continuous-integration/drone/push Build is passing
2022-05-06 00:55:47 -04:00
a0389db9ef run npm audit
All checks were successful
continuous-integration/drone/push Build is passing
2022-05-06 00:03:57 -04:00
e6e4db7410 add involvement links 2022-05-05 23:59:31 -04:00
78542a533a bump version 2022-05-05 23:45:03 -04:00
46665dce88 add changes to changelog 2022-05-05 23:44:32 -04:00
4b420f313c add locale as per user setting 2022-05-05 23:26:29 -04:00
42b4d0758f add gettext changes 2022-05-05 23:02:06 -04:00
901c2a948f add created at date to ammo types 2022-05-05 21:43:49 -04:00
6fe5a29ebd add registered on date to user card 2022-05-05 21:43:13 -04:00
ce7223597c add created date to ammo groups 2022-05-05 21:43:03 -04:00
4791a2849e add locale options to guides
All checks were successful
continuous-integration/drone/push Build is passing
2022-04-24 20:20:07 -04:00
7edc9642d4 add french translation 2022-04-24 20:19:20 -04:00
2ae0c3133c Translated using Weblate (French)
All checks were successful
continuous-integration/drone/push Build is passing
Currently translated at 100.0% (146 of 146 strings)

Translation: cannery/default
Translate-URL: https://weblate.bubbletea.dev/projects/cannery/default/fr/
2022-04-25 00:12:41 +00:00
f284773f68 Translated using Weblate (French)
All checks were successful
continuous-integration/drone/push Build is passing
Currently translated at 100.0% (30 of 30 strings)

Translation: cannery/errors
Translate-URL: https://weblate.bubbletea.dev/projects/cannery/errors/fr/
2022-04-24 08:27:09 +00:00
d35a81ef39 Translated using Weblate (French)
Currently translated at 100.0% (33 of 33 strings)

Translation: cannery/actions
Translate-URL: https://weblate.bubbletea.dev/projects/cannery/actions/fr/
2022-04-24 08:27:09 +00:00
4c3ebaec53 Translated using Weblate (French)
Currently translated at 100.0% (44 of 44 strings)

Translation: cannery/prompts
Translate-URL: https://weblate.bubbletea.dev/projects/cannery/prompts/fr/
2022-04-24 08:27:09 +00:00
a13a57c6ee Translated using Weblate (French)
Currently translated at 98.6% (144 of 146 strings)

Translation: cannery/default
Translate-URL: https://weblate.bubbletea.dev/projects/cannery/default/fr/
2022-04-24 08:27:09 +00:00
8c7b9f9a9b Translated using Weblate (French)
All checks were successful
continuous-integration/drone/push Build is passing
Currently translated at 86.6% (26 of 30 strings)

Translation: cannery/errors
Translate-URL: https://weblate.bubbletea.dev/projects/cannery/errors/fr/
2022-04-23 07:52:35 +00:00
7b7604f48f Translated using Weblate (French)
All checks were successful
continuous-integration/drone/push Build is passing
Currently translated at 100.0% (15 of 15 strings)

Translation: cannery/emails
Translate-URL: https://weblate.bubbletea.dev/projects/cannery/emails/fr/
2022-04-22 18:37:17 +00:00
b1b52b9edc Translated using Weblate (French)
Currently translated at 69.6% (23 of 33 strings)

Translation: cannery/actions
Translate-URL: https://weblate.bubbletea.dev/projects/cannery/actions/fr/
2022-04-22 18:37:17 +00:00
3fcea8e679 Translated using Weblate (French)
Currently translated at 76.6% (23 of 30 strings)

Translation: cannery/errors
Translate-URL: https://weblate.bubbletea.dev/projects/cannery/errors/fr/
2022-04-22 18:37:17 +00:00
98ec324a2c Translated using Weblate (French)
Currently translated at 54.5% (24 of 44 strings)

Translation: cannery/prompts
Translate-URL: https://weblate.bubbletea.dev/projects/cannery/prompts/fr/
2022-04-22 18:37:17 +00:00
0868789811 Translated using Weblate (French)
Currently translated at 16.4% (24 of 146 strings)

Translation: cannery/default
Translate-URL: https://weblate.bubbletea.dev/projects/cannery/default/fr/
2022-04-22 18:37:17 +00:00
87c62f9ef8 Added translation using Weblate (French)
All checks were successful
continuous-integration/drone/push Build is passing
2022-04-20 18:02:37 +00:00
0919ee2a72 Added translation using Weblate (French)
All checks were successful
continuous-integration/drone/push Build is passing
2022-04-20 18:02:36 +00:00
0b910af077 Added translation using Weblate (French)
All checks were successful
continuous-integration/drone/push Build is passing
2022-04-20 18:02:35 +00:00
cb81eb4116 Added translation using Weblate (French)
All checks were successful
continuous-integration/drone/push Build is passing
2022-04-20 18:02:35 +00:00
b1d7cfe591 Added translation using Weblate (French)
All checks were successful
continuous-integration/drone/push Build is passing
2022-04-20 18:02:33 +00:00
1431b92e42 Added translation using Weblate (French) 2022-04-20 18:02:33 +00:00
97 changed files with 11294 additions and 7595 deletions

View File

@ -1,3 +1,34 @@
# v0.5.5
- Forgot to add the logo as the favicon whoops
# v0.5.4
- Rename "Ammo" tab to "Catalog", and "Manage" tab is now "Ammo"
- Ammo groups are now just referred to as Ammo or "Packs"
- URL paths now reflect new names
- Add pack and round count to container information
- Add cute logo >:3 Thank you [kalli](https://twitter.com/t0kkuro)!
- Add note about deleting an ammo type deleting all ammo of that type as well
- Prompt to create first ammo type before trying to create first ammo
- Add note about creating unlimited invites
- Update screenshot lol
# v0.5.3
- Update French translation: Thank you [duponin](https://udongein.xyz/users/duponin)!
- Update German translation: Thank you [Kaia](https://shitposter.club/users/kaia)!
# v0.5.2
- Add "Added on" date to ammo groups
- Add "Added on" date to ammo types
- Add "Registered on" date to user information
- Add language in user settings. The `LOCALE` environment variable will continue
to set the default locale for the application.
- Add involvement links to home page
- Fix button text-wrapping
- Update dependencies
# v0.5.1
- Add French translation: Thank you [duponin](https://udongein.xyz/users/duponin)!
# v0.5.0 # v0.5.0
- Add German translation: Thank you [Kaia](https://shitposter.club/users/kaia)! - Add German translation: Thank you [Kaia](https://shitposter.club/users/kaia)!
- Fix not being able to edit ammo group when fully used up - Fix not being able to edit ammo group when fully used up

View File

@ -63,8 +63,7 @@ And as always, thank you!
[`phx_gen_auth`](https://hexdocs.pm/phx_gen_auth/). [`phx_gen_auth`](https://hexdocs.pm/phx_gen_auth/).
- `Dockerfile` and example `docker-compose.yml` - `Dockerfile` and example `docker-compose.yml`
- Automatic migrations in `MIX_ENV=prod` or Docker image - Automatic migrations in `MIX_ENV=prod` or Docker image
- JS linting with [standard.js](https://standardjs.com), HEEx linting with - JS linting with [standard.js](https://standardjs.com)
[heex_formatter](https://github.com/feliperenan/heex_formatter)
## Docs ## Docs
@ -109,7 +108,8 @@ In `dev` mode, Cannery will listen for these environment variables at runtime.
Defaults to `false`. Defaults to `false`.
- `POOL_SIZE`: Controls the pool size to use with PostgreSQL. Defaults to `10`. - `POOL_SIZE`: Controls the pool size to use with PostgreSQL. Defaults to `10`.
- `REGISTRATION`: Controls if user sign-up should be invite only or set to public. Set to `public` to enable public registration. Defaults to `invite`. - `REGISTRATION`: Controls if user sign-up should be invite only or set to public. Set to `public` to enable public registration. Defaults to `invite`.
- `LOCALE`: Sets a custom locale. Defaults to `en_US`. - `LOCALE`: Sets a custom default locale. Defaults to `en_US`.
- Available options: `en_US`, `de`, and `fr`
## `MIX_ENV=test` ## `MIX_ENV=test`
@ -142,3 +142,5 @@ Thank you so much for your contributions!
- shibao (https://misskey.bubbletea.dev/@shibao) - shibao (https://misskey.bubbletea.dev/@shibao)
- kaia (https://shitposter.club/users/kaia) - kaia (https://shitposter.club/users/kaia)
- duponin (https://udongein.xyz/users/duponin)
- kalli (https://twitter.com/t0kkuro)

View File

@ -1,6 +1,6 @@
# Cannery # Cannery
![screenshot](https://gitea.bubbletea.dev/shibao/cannery/raw/branch/stable/home.png) ![old screenshot](https://gitea.bubbletea.dev/shibao/cannery/raw/branch/stable/home.png)
The self-hosted firearm tracker website. The self-hosted firearm tracker website.
@ -63,7 +63,8 @@ You can use the following environment variables to configure Cannery in
with `docker run -it shibaobun/cannery mix phx.gen.secret` and set for server to start. with `docker run -it shibaobun/cannery mix phx.gen.secret` and set for server to start.
- `REGISTRATION`: Controls if user sign-up should be invite only or set to - `REGISTRATION`: Controls if user sign-up should be invite only or set to
public. Set to `public` to enable public registration. Defaults to `invite`. public. Set to `public` to enable public registration. Defaults to `invite`.
- `LOCALE`: Sets a custom locale. Defaults to `en_US`. - `LOCALE`: Sets a custom default locale. Defaults to `en_US`
- Available options: `en_US`, `de`, and `fr`
- `SMTP_HOST`: The url for your SMTP email provider. Must be set - `SMTP_HOST`: The url for your SMTP email provider. Must be set
- `SMTP_PORT`: The port for your SMTP relay. Defaults to `587`. - `SMTP_PORT`: The port for your SMTP relay. Defaults to `587`.
- `SMTP_USERNAME`: The username for your SMTP relay. Must be set! - `SMTP_USERNAME`: The username for your SMTP relay. Must be set!

View File

@ -25,7 +25,7 @@
} }
.btn { .btn {
@apply inline-block break-all min-w-4; @apply inline-block break-words min-w-4;
@apply focus:outline-none px-4 py-2 rounded-lg; @apply focus:outline-none px-4 py-2 rounded-lg;
@apply shadow-sm focus:shadow-lg; @apply shadow-sm focus:shadow-lg;
@apply transition-all duration-300 ease-in-out; @apply transition-all duration-300 ease-in-out;

11731
assets/package-lock.json generated

File diff suppressed because it is too large Load Diff

View File

@ -9,36 +9,33 @@
"test": "standard" "test": "standard"
}, },
"dependencies": { "dependencies": {
"@fortawesome/fontawesome-free": "^5.15.4", "@fortawesome/fontawesome-free": "^6.1.1",
"alpinejs": "^3.9.0", "alpinejs": "^3.10.2",
"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",
"topbar": "^0.1.4" "topbar": "^1.0.1"
}, },
"devDependencies": { "devDependencies": {
"@babel/core": "^7.15.0", "@babel/core": "^7.17.10",
"@babel/preset-env": "^7.15.0", "@babel/preset-env": "^7.17.10",
"autoprefixer": "^10.2.6", "autoprefixer": "^10.4.7",
"babel-loader": "^8.2.2", "babel-loader": "^8.2.5",
"copy-webpack-plugin": "^9.0.0", "copy-webpack-plugin": "^10.2.4",
"css-loader": "^5.2.7", "css-loader": "^6.7.1",
"css-minimizer-webpack-plugin": "^3.0.1", "css-minimizer-webpack-plugin": "^3.4.1",
"file-loader": "^6.2.0", "file-loader": "^6.2.0",
"hard-source-webpack-plugin": "^0.13.1", "mini-css-extract-plugin": "^2.6.0",
"mini-css-extract-plugin": "^1.6.0", "postcss": "^8.4.13",
"node-sass": "^7.0.1", "postcss-import": "^14.1.0",
"postcss": "^8.3.6", "postcss-loader": "^6.2.1",
"postcss-import": "^14.0.2", "postcss-preset-env": "^7.5.0",
"postcss-loader": "^6.1.1", "sass-loader": "^12.6.0",
"postcss-preset-env": "^7.3.1", "standard": "^17.0.0",
"sass-loader": "^12.1.0", "tailwindcss": "^3.0.24",
"standard": "^16.0.4", "terser-webpack-plugin": "^5.3.1",
"style-loader": "^3.2.1", "webpack": "^5.72.0",
"tailwindcss": "^2.2.7", "webpack-cli": "^4.9.2",
"terser-webpack-plugin": "^5.1.3", "webpack-dev-server": "^4.9.0"
"webpack": "^5.67.0",
"webpack-cli": "^4.8.0",
"webpack-dev-server": "^4.7.4"
} }
} }

Binary file not shown.

After

Width:  |  Height:  |  Size: 84 KiB

File diff suppressed because one or more lines are too long

After

Width:  |  Height:  |  Size: 516 KiB

View File

@ -1,24 +1,18 @@
const colors = require('tailwindcss/colors') const colors = require('tailwindcss/colors')
module.exports = { module.exports = {
purge: [ content: [
'../lib/**/*.ex', '../lib/**/*.{ex,heex,leex,eex}',
'../lib/**/*.heex',
'../lib/**/*.leex',
'../lib/**/*.eex',
'./js/**/*.js' './js/**/*.js'
], ],
darkMode: 'media',
theme: { theme: {
colors: { colors: {
transparent: 'transparent', transparent: 'transparent',
current: 'currentColor', current: 'currentColor',
primary: colors.gray, primary: colors.gray,
black: colors.black, black: colors.black,
white: colors.white, white: colors.white,
gray: colors.trueGray, gray: colors.neutral,
indigo: colors.indigo, indigo: colors.indigo,
red: colors.rose, red: colors.rose,
yellow: colors.amber yellow: colors.amber
@ -45,11 +39,5 @@ module.exports = {
} }
} }
}, },
variants: {
extend: {
backgroundColor: ['active'],
borderColor: ['active']
}
},
plugins: [] plugins: []
} }

View File

@ -44,19 +44,14 @@ module.exports = (env, options) => {
}, },
{ {
test: /\.(woff(2)?|ttf|eot|svg|otf)(\?v=[0-9]\.[0-9]\.[0-9])?$/, test: /\.(woff(2)?|ttf|eot|svg|otf)(\?v=[0-9]\.[0-9]\.[0-9])?$/,
loader: 'file-loader', type: 'asset/resource',
options: { generator: { filename: 'fonts/[name][ext]' }
name: '[name].[ext]?[hash]',
outputPath: '../fonts'
}
} }
] ]
}, },
plugins: [ plugins: [
new MiniCssExtractPlugin({ filename: '../css/app.css' }), new MiniCssExtractPlugin({ filename: '../css/app.css' }),
new CopyWebpackPlugin({ new CopyWebpackPlugin({ patterns: [{ from: 'static/', to: '../' }] })
patterns: [{ from: 'static/', to: '../' }]
})
] ]
} }
} }

BIN
home.png

Binary file not shown.

Before

Width:  |  Height:  |  Size: 78 KiB

After

Width:  |  Height:  |  Size: 113 KiB

View File

@ -269,6 +269,35 @@ defmodule Cannery.Accounts do
end end
end end
@doc """
Returns an `%Changeset{}` for changing the user locale.
## Examples
iex> change_user_locale(user)
%Changeset{data: %User{}}
"""
@spec change_user_locale(User.t()) :: Changeset.t(User.t())
def change_user_locale(%{locale: locale} = user), do: User.locale_changeset(user, locale)
@doc """
Updates the user locale.
## Examples
iex> update_user_locale(user, "valid locale")
{:ok, %User{}}
iex> update_user_password(user, "invalid locale")
{:error, %Changeset{}}
"""
@spec update_user_locale(User.t(), locale :: String.t()) ::
{:ok, User.t()} | {:error, Changeset.t(User.t())}
def update_user_locale(user, locale),
do: user |> User.locale_changeset(locale) |> Repo.update()
@doc """ @doc """
Deletes a user. must be performed by an admin or the same user! Deletes a user. must be performed by an admin or the same user!

View File

@ -18,6 +18,7 @@ defmodule Cannery.Accounts.User do
field :hashed_password, :string field :hashed_password, :string
field :confirmed_at, :naive_datetime field :confirmed_at, :naive_datetime
field :role, Ecto.Enum, values: [:admin, :user], default: :user field :role, Ecto.Enum, values: [:admin, :user], default: :user
field :locale, :string
has_many :invites, Invite, on_delete: :delete_all has_many :invites, Invite, on_delete: :delete_all
@ -31,6 +32,7 @@ defmodule Cannery.Accounts.User do
hashed_password: String.t(), hashed_password: String.t(),
confirmed_at: NaiveDateTime.t(), confirmed_at: NaiveDateTime.t(),
role: atom(), role: atom(),
locale: String.t() | nil,
invites: [Invite.t()], invites: [Invite.t()],
inserted_at: NaiveDateTime.t(), inserted_at: NaiveDateTime.t(),
updated_at: NaiveDateTime.t() updated_at: NaiveDateTime.t()
@ -60,7 +62,7 @@ defmodule Cannery.Accounts.User do
Changeset.t(t() | new_user()) Changeset.t(t() | new_user())
def registration_changeset(user, attrs, opts \\ []) do def registration_changeset(user, attrs, opts \\ []) do
user user
|> cast(attrs, [:email, :password, :role]) |> cast(attrs, [:email, :password, :role, :locale])
|> validate_email() |> validate_email()
|> validate_password(opts) |> validate_password(opts)
end end
@ -185,4 +187,14 @@ defmodule Cannery.Accounts.User do
do: changeset, do: changeset,
else: changeset |> add_error(:current_password, dgettext("errors", "is not valid")) else: changeset |> add_error(:current_password, dgettext("errors", "is not valid"))
end end
@doc """
A changeset for changing the user's locale
"""
@spec locale_changeset(t() | Changeset.t(t()), locale :: String.t() | nil) :: Changeset.t(t())
def locale_changeset(user_or_changeset, locale) do
user_or_changeset
|> cast(%{"locale" => locale}, [:locale])
|> validate_required(:locale)
end
end end

View File

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

View File

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

View File

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

View File

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

View File

@ -31,10 +31,10 @@ defmodule Cannery.Ammo.AmmoType do
field :pressure, :string field :pressure, :string
field :primer_type, :string field :primer_type, :string
field :firing_type, :string field :firing_type, :string
field :tracer, :boolean, null: false, default: false field :tracer, :boolean, default: false
field :incendiary, :boolean, null: false, default: false field :incendiary, :boolean, default: false
field :blank, :boolean, null: false, default: false field :blank, :boolean, default: false
field :corrosive, :boolean, null: false, default: false field :corrosive, :boolean, default: false
field :manufacturer, :string field :manufacturer, :string
field :upc, :string field :upc, :string
@ -105,10 +105,12 @@ defmodule Cannery.Ammo.AmmoType do
] ]
@doc false @doc false
@spec create_changeset(new_ammo_type(), attrs :: map()) :: Changeset.t(new_ammo_type()) @spec create_changeset(new_ammo_type(), User.t(), attrs :: map()) ::
def create_changeset(ammo_type, attrs) do Changeset.t(new_ammo_type())
def create_changeset(ammo_type, %User{id: user_id}, attrs) do
ammo_type ammo_type
|> cast(attrs, [:user_id | changeset_fields()]) |> change(user_id: user_id)
|> cast(attrs, changeset_fields())
|> validate_required([:name, :user_id]) |> validate_required([:name, :user_id])
end end
@ -118,6 +120,6 @@ defmodule Cannery.Ammo.AmmoType do
def update_changeset(ammo_type, attrs) do def update_changeset(ammo_type, attrs) do
ammo_type ammo_type
|> cast(attrs, changeset_fields()) |> cast(attrs, changeset_fields())
|> validate_required([:name, :user_id]) |> validate_required(:name)
end end
end end

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

@ -47,6 +47,7 @@ defmodule CanneryWeb do
use Phoenix.LiveView, use Phoenix.LiveView,
layout: {CanneryWeb.LayoutView, "live.html"} layout: {CanneryWeb.LayoutView, "live.html"}
on_mount CanneryWeb.InitAssigns
unquote(view_helpers()) unquote(view_helpers())
end end
end end

View File

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

View File

@ -37,6 +37,11 @@ defmodule CanneryWeb.Components.AmmoGroupCard do
</span> </span>
<% end %> <% end %>
<span class="rounded-lg title text-lg">
<%= gettext("Added on:") %>
<%= @ammo_group.inserted_at |> display_datetime() %>
</span>
<%= if @ammo_group.price_paid do %> <%= if @ammo_group.price_paid do %>
<span class="rounded-lg title text-lg"> <span class="rounded-lg title text-lg">
<%= gettext("Price paid:") %> <%= gettext("Price paid:") %>

View File

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

View File

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

View File

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

View File

@ -18,12 +18,18 @@ defmodule CanneryWeb.Components.UserCard do
</h1> </h1>
<h3 class="px-4 py-2 rounded-lg title text-lg"> <h3 class="px-4 py-2 rounded-lg title text-lg">
<p>
<%= if @user.confirmed_at |> is_nil() do %> <%= if @user.confirmed_at |> is_nil() do %>
Email unconfirmed Email unconfirmed
<% else %> <% else %>
<p>User was confirmed at</p> User was confirmed at <%= @user.confirmed_at |> display_datetime() %>
<%= @user.confirmed_at |> display_datetime() %>
<% end %> <% end %>
</p>
<p>
<%= gettext("User registered on") %>
<%= @user.inserted_at |> display_datetime() %>
</p>
</h3> </h3>
<%= if @inner_block do %> <%= if @inner_block do %>

View File

@ -10,10 +10,11 @@ defmodule CanneryWeb.UserSettingsController do
render(conn, "edit.html", page_title: gettext("Settings")) render(conn, "edit.html", page_title: gettext("Settings"))
end end
def update(conn, %{"action" => "update_email"} = params) do def update(%{assigns: %{current_user: user}} = conn, %{
%{"current_password" => password, "user" => user_params} = params "action" => "update_email",
user = conn.assigns.current_user "current_password" => password,
"user" => user_params
}) do
case Accounts.apply_user_email(user, password, user_params) do case Accounts.apply_user_email(user, password, user_params) do
{:ok, applied_user} -> {:ok, applied_user} ->
Accounts.deliver_update_email_instructions( Accounts.deliver_update_email_instructions(
@ -33,14 +34,15 @@ defmodule CanneryWeb.UserSettingsController do
|> redirect(to: Routes.user_settings_path(conn, :edit)) |> redirect(to: Routes.user_settings_path(conn, :edit))
{:error, changeset} -> {:error, changeset} ->
render(conn, "edit.html", email_changeset: changeset) conn |> render("edit.html", email_changeset: changeset)
end end
end end
def update(conn, %{"action" => "update_password"} = params) do def update(%{assigns: %{current_user: user}} = conn, %{
%{"current_password" => password, "user" => user_params} = params "action" => "update_password",
user = conn.assigns.current_user "current_password" => password,
"user" => user_params
}) do
case Accounts.update_user_password(user, password, user_params) do case Accounts.update_user_password(user, password, user_params) do
{:ok, user} -> {:ok, user} ->
conn conn
@ -49,12 +51,27 @@ defmodule CanneryWeb.UserSettingsController do
|> UserAuth.log_in_user(user) |> UserAuth.log_in_user(user)
{:error, changeset} -> {:error, changeset} ->
render(conn, "edit.html", password_changeset: changeset) conn |> render("edit.html", password_changeset: changeset)
end end
end end
def confirm_email(conn, %{"token" => token}) do def update(
case Accounts.update_user_email(conn.assigns.current_user, token) do %{assigns: %{current_user: user}} = conn,
%{"action" => "update_locale", "user" => %{"locale" => locale}}
) do
case Accounts.update_user_locale(user, locale) do
{:ok, _user} ->
conn
|> put_flash(:info, dgettext("prompts", "Language updated successfully."))
|> redirect(to: Routes.user_settings_path(conn, :edit))
{:error, changeset} ->
conn |> render("edit.html", locale_changeset: changeset)
end
end
def confirm_email(%{assigns: %{current_user: user}} = conn, %{"token" => token}) do
case Accounts.update_user_email(user, token) do
:ok -> :ok ->
conn conn
|> put_flash(:info, dgettext("prompts", "Email changed successfully.")) |> put_flash(:info, dgettext("prompts", "Email changed successfully."))
@ -84,11 +101,10 @@ defmodule CanneryWeb.UserSettingsController do
end end
end end
defp assign_email_and_password_changesets(conn, _opts) do defp assign_email_and_password_changesets(%{assigns: %{current_user: user}} = conn, _opts) do
user = conn.assigns.current_user
conn conn
|> assign(:email_changeset, Accounts.change_user_email(user)) |> assign(:email_changeset, Accounts.change_user_email(user))
|> assign(:password_changeset, Accounts.change_user_password(user)) |> assign(:password_changeset, Accounts.change_user_password(user))
|> assign(:locale_changeset, Accounts.change_user_locale(user))
end end
end end

View File

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

View File

@ -8,8 +8,8 @@ defmodule CanneryWeb.AmmoGroupLive.Index do
alias CanneryWeb.Endpoint alias CanneryWeb.Endpoint
@impl true @impl true
def mount(_params, session, socket) do def mount(_params, _session, socket) do
{:ok, socket |> assign_defaults(session) |> display_ammo_groups()} {:ok, socket |> display_ammo_groups()}
end end
@impl true @impl true
@ -74,7 +74,8 @@ defmodule CanneryWeb.AmmoGroupLive.Index do
defp display_ammo_groups(%{assigns: %{current_user: current_user}} = socket) do defp display_ammo_groups(%{assigns: %{current_user: current_user}} = socket) do
ammo_groups = Ammo.list_ammo_groups(current_user) |> Repo.preload([:ammo_type, :container]) ammo_groups = Ammo.list_ammo_groups(current_user) |> Repo.preload([:ammo_type, :container])
containers = Containers.list_containers(current_user) ammo_types_count = Ammo.get_ammo_types_count!(current_user)
containers_count = Containers.get_containers_count!(current_user)
columns = [ columns = [
%{label: gettext("Ammo type"), key: "ammo_type"}, %{label: gettext("Ammo type"), key: "ammo_type"},
@ -83,6 +84,7 @@ defmodule CanneryWeb.AmmoGroupLive.Index do
%{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: nil, key: "actions", sortable: false} %{label: nil, key: "actions", sortable: false}
] ]
@ -91,7 +93,13 @@ defmodule CanneryWeb.AmmoGroupLive.Index do
|> Enum.map(fn ammo_group -> ammo_group |> get_row_data_for_ammo_group(columns) end) |> Enum.map(fn ammo_group -> ammo_group |> get_row_data_for_ammo_group(columns) end)
socket socket
|> assign(ammo_groups: ammo_groups, containers: containers, columns: columns, rows: rows) |> assign(
ammo_groups: ammo_groups,
ammo_types_count: ammo_types_count,
containers_count: containers_count,
columns: columns,
rows: rows
)
end end
@spec get_row_data_for_ammo_group(AmmoGroup.t(), [map()]) :: [map()] @spec get_row_data_for_ammo_group(AmmoGroup.t(), [map()]) :: [map()]
@ -116,6 +124,15 @@ defmodule CanneryWeb.AmmoGroupLive.Index do
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
assigns = %{inserted_at: inserted_at}
{inserted_at,
~H"""
<%= @inserted_at |> display_datetime() %>
"""}
end
defp get_value_for_key("range", %{staged: staged} = ammo_group) do defp get_value_for_key("range", %{staged: staged} = ammo_group) do
assigns = %{ammo_group: ammo_group} assigns = %{ammo_group: ammo_group}

View File

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

View File

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

View File

@ -26,6 +26,11 @@
</span> </span>
<% end %> <% end %>
<span class="rounded-lg title text-lg">
<%= gettext("Added on:") %>
<%= @ammo_group.inserted_at |> display_datetime() %>
</span>
<%= if @ammo_group.price_paid do %> <%= if @ammo_group.price_paid do %>
<span class="rounded-lg title text-lg"> <span class="rounded-lg title text-lg">
<%= gettext("Original cost:") %> <%= gettext("Original cost:") %>
@ -47,7 +52,7 @@
<div class="flex flex-col justify-center items-center"> <div class="flex flex-col justify-center items-center">
<div class="flex flex-wrap justify-center items-center text-primary-600"> <div class="flex flex-wrap justify-center items-center text-primary-600">
<%= live_patch(dgettext("actions", "Ammo Details"), <%= live_patch(dgettext("actions", "View in Catalog"),
to: Routes.ammo_type_show_path(Endpoint, :show, @ammo_group.ammo_type), to: Routes.ammo_type_show_path(Endpoint, :show, @ammo_group.ammo_type),
class: "mx-4 my-2 btn btn-primary", class: "mx-4 my-2 btn btn-primary",
data: [qa: "details"] data: [qa: "details"]
@ -100,7 +105,7 @@
<.container_card container={@ammo_group.container} /> <.container_card container={@ammo_group.container} />
<% else %> <% else %>
<%= gettext("This ammo group is not in a container") %> <%= gettext("This ammo is not in a container") %>
<% end %> <% end %>
</div> </div>

View File

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

View File

@ -9,8 +9,8 @@ defmodule CanneryWeb.AmmoTypeLive.Index do
alias CanneryWeb.Endpoint alias CanneryWeb.Endpoint
@impl true @impl true
def mount(_params, session, socket) do def mount(_params, _session, socket) do
{:ok, socket |> assign_defaults(session) |> list_ammo_types()} {:ok, socket |> list_ammo_types()}
end end
@impl true @impl true
@ -137,7 +137,7 @@ defmodule CanneryWeb.AmmoTypeLive.Index do
phx_click: "delete", phx_click: "delete",
phx_value_id: ammo_type.id, phx_value_id: ammo_type.id,
data: [ data: [
confirm: dgettext("prompts", "Are you sure you want to delete this ammo?"), confirm: dgettext("prompts", "Are you sure you want to delete %{name}? This will delete all %{name} type ammo as well!", name: ammo_type.name),
qa: "delete-#{ammo_type.id}" qa: "delete-#{ammo_type.id}"
] do %> ] do %>
<i class="fa-lg fas fa-trash"></i> <i class="fa-lg fas fa-trash"></i>

View File

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

View File

@ -9,9 +9,7 @@ defmodule CanneryWeb.AmmoTypeLive.Show do
alias CanneryWeb.Endpoint alias CanneryWeb.Endpoint
@impl true @impl true
def mount(_params, session, socket) do def mount(_params, _session, socket), do: {:ok, socket}
{:ok, socket |> assign_defaults(session)}
end
@impl true @impl true
def handle_params(%{"id" => id}, _params, %{assigns: %{current_user: current_user}} = socket) do def handle_params(%{"id" => id}, _params, %{assigns: %{current_user: current_user}} = socket) do

View File

@ -24,7 +24,7 @@
phx_click: "delete", phx_click: "delete",
data: [ data: [
confirm: confirm:
dgettext("prompts", "Are you sure you want to delete %{name}?", name: @ammo_type.name), dgettext("prompts", "Are you sure you want to delete %{name}? This will delete all %{name} type ammo as well!", name: @ammo_type.name),
qa: "delete" qa: "delete"
] do %> ] do %>
<i class="fa-fw fa-lg fas fa-trash"></i> <i class="fa-fw fa-lg fas fa-trash"></i>
@ -87,6 +87,14 @@
<%= @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("Added on:") %>
</h3>
<span class="text-primary-600">
<%= @ammo_type.inserted_at |> display_datetime() %>
</span>
<%= if @avg_cost_per_round do %> <%= if @avg_cost_per_round do %>
<h3 class="title text-lg"> <h3 class="title text-lg">
<%= gettext("Average Price paid") %>: <%= gettext("Average Price paid") %>:

View File

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

View File

@ -10,9 +10,7 @@ defmodule CanneryWeb.ContainerLive.Index do
alias Ecto.Changeset alias Ecto.Changeset
@impl true @impl true
def mount(_params, session, socket) do def mount(_params, _session, socket), do: {:ok, socket}
{:ok, socket |> assign_defaults(session)}
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

View File

@ -11,9 +11,7 @@ defmodule CanneryWeb.ContainerLive.Show do
alias Phoenix.LiveView.Socket alias Phoenix.LiveView.Socket
@impl true @impl true
def mount(_params, session, socket) do def mount(_params, _session, socket), do: {:ok, socket}
{:ok, socket |> assign_defaults(session)}
end
@impl true @impl true
def handle_params( def handle_params(

View File

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

View File

@ -5,16 +5,12 @@ defmodule CanneryWeb.HomeLive do
use CanneryWeb, :live_view use CanneryWeb, :live_view
alias Cannery.Accounts alias Cannery.Accounts
alias CanneryWeb.Endpoint
@impl true @impl true
def mount(_params, session, socket) do def mount(_params, _session, socket) do
admins = Accounts.list_users_by_role(:admin) admins = Accounts.list_users_by_role(:admin)
socket = socket |> assign(page_title: "Home", query: "", results: %{}, admins: admins)
socket =
socket
|> assign_defaults(session)
|> assign(page_title: "Home", query: "", results: %{}, admins: admins)
{:ok, socket} {:ok, socket}
end end
@ -41,6 +37,13 @@ defmodule CanneryWeb.HomeLive do
def render(assigns) do def render(assigns) do
~H""" ~H"""
<div class="mx-auto px-8 sm:px-16 flex flex-col justify-center items-center text-center space-y-4 max-w-3xl"> <div class="mx-auto px-8 sm:px-16 flex flex-col justify-center items-center text-center space-y-4 max-w-3xl">
<img
src={Routes.static_path(Endpoint, "/images/cannery.svg")}
alt={gettext("Cannery logo")}
class="inline-block w-32 hover:-mt-2 hover:mb-2 transition-all duration-500 ease-in-out"
title={gettext("isn't he cute >:3")}
/>
<h1 class="title text-primary-600 text-2xl"> <h1 class="title text-primary-600 text-2xl">
<%= gettext("Welcome to %{name}", name: "Cannery") %> <%= gettext("Welcome to %{name}", name: "Cannery") %>
</h1> </h1>
@ -131,11 +134,47 @@ defmodule CanneryWeb.HomeLive do
to: "https://gitea.bubbletea.dev/shibao/cannery/src/branch/stable/CHANGELOG.md", to: "https://gitea.bubbletea.dev/shibao/cannery/src/branch/stable/CHANGELOG.md",
target: "_blank", target: "_blank",
rel: "noopener noreferrer" do %> rel: "noopener noreferrer" do %>
<p>0.5.0</p> <p>0.5.5</p>
<i class="fas fa-md fa-info-circle"></i> <i class="fas fa-md fa-info-circle"></i>
<% end %> <% end %>
</li> </li>
</ul> </ul>
<hr class="hr" />
<ul class="flex flex-col space-y-2 text-center justify-center">
<h2 class="title text-primary-600 text-lg">
<%= gettext("Get involved!") %>
</h2>
<li class="flex flex-col justify-center space-x-2">
<%= link class: "flex flex-row justify-center items-center space-x-2 hover:underline",
to: "https://gitea.bubbletea.dev/shibao/cannery",
target: "_blank",
rel: "noopener noreferrer" do %>
<p><%= gettext("View the source code") %></p>
<i class="fas fa-md fa-code"></i>
<% end %>
</li>
<li class="flex flex-col justify-center space-x-2">
<%= link class: "flex flex-row justify-center items-center space-x-2 hover:underline",
to: "https://weblate.bubbletea.dev/engage/cannery",
target: "_blank",
rel: "noopener noreferrer" do %>
<p><%= gettext("Help translate") %></p>
<i class="fas fa-md fa-language"></i>
<% end %>
</li>
<li class="flex flex-col justify-center space-x-2">
<%= link class: "flex flex-row justify-center items-center space-x-2 hover:underline",
to: "https://gitea.bubbletea.dev/shibao/cannery/issues/new",
target: "_blank",
rel: "noopener noreferrer" do %>
<p><%= gettext("Report bugs or request features") %></p>
<i class="fas fa-md fa-spider"></i>
<% end %>
</li>
</ul>
</div> </div>
""" """
end end

View File

@ -0,0 +1,19 @@
defmodule CanneryWeb.InitAssigns do
@moduledoc """
Ensures common `assigns` are applied to all LiveViews attaching this hook.
"""
import Phoenix.LiveView
alias Cannery.Accounts
def on_mount(:default, _params, %{"locale" => locale, "user_token" => user_token}, socket) do
Gettext.put_locale(locale)
socket =
socket
|> assign_new(:current_user, fn -> Accounts.get_user_by_session_token(user_token) end)
{:cont, socket}
end
def on_mount(:default, _params, _session, socket), do: {:cont, socket}
end

View File

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

View File

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

View File

@ -10,9 +10,7 @@ defmodule CanneryWeb.InviteLive.Index do
alias Phoenix.LiveView.JS alias Phoenix.LiveView.JS
@impl true @impl true
def mount(_params, session, socket) do def mount(_params, _session, %{assigns: %{current_user: current_user}} = socket) do
%{assigns: %{current_user: current_user}} = socket = socket |> assign_defaults(session)
socket = socket =
if current_user |> Map.get(:role) == :admin do if current_user |> Map.get(:role) == :admin do
socket |> display_invites() socket |> display_invites()

View File

@ -3,20 +3,9 @@ defmodule CanneryWeb.LiveHelpers do
Contains common helper functions for liveviews Contains common helper functions for liveviews
""" """
import Phoenix.LiveView
import Phoenix.LiveView.Helpers import Phoenix.LiveView.Helpers
alias Cannery.Accounts
alias Phoenix.LiveView.JS alias Phoenix.LiveView.JS
def assign_defaults(socket, %{"user_token" => user_token} = _session) do
socket
|> assign_new(:current_user, fn -> Accounts.get_user_by_session_token(user_token) end)
end
def assign_defaults(socket, _session) do
socket
end
@doc """ @doc """
Renders a live component inside a modal. Renders a live component inside a modal.

View File

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

View File

@ -10,9 +10,7 @@ defmodule CanneryWeb.RangeLive.Index do
alias Phoenix.LiveView.Socket alias Phoenix.LiveView.Socket
@impl true @impl true
def mount(_params, session, socket) do def mount(_params, _session, socket), do: {:ok, socket |> display_shot_groups()}
{:ok, socket |> assign_defaults(session) |> display_shot_groups()}
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
@ -67,7 +65,7 @@ defmodule CanneryWeb.RangeLive.Index do
{:ok, _ammo_group} = {:ok, _ammo_group} =
ammo_group |> Ammo.update_ammo_group(%{"staged" => !ammo_group.staged}, current_user) ammo_group |> Ammo.update_ammo_group(%{"staged" => !ammo_group.staged}, current_user)
prompt = dgettext("prompts", "Ammo group unstaged succesfully") prompt = dgettext("prompts", "Ammo unstaged succesfully")
{:noreply, socket |> put_flash(:info, prompt) |> display_shot_groups()} {:noreply, socket |> put_flash(:info, prompt) |> display_shot_groups()}
end end

View File

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

View File

@ -9,9 +9,7 @@ defmodule CanneryWeb.TagLive.Index do
alias CanneryWeb.Endpoint alias CanneryWeb.Endpoint
@impl true @impl true
def mount(_params, session, socket) do def mount(_params, _session, socket), do: {:ok, socket |> display_tags()}
{:ok, socket |> assign_defaults(session) |> display_tags()}
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

View File

@ -11,8 +11,17 @@ 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")
end
Gettext.put_locale(Application.get_env(:gettext, :default_locale, "en_US")) defp put_user_locale(%{assigns: %{current_user: %{locale: locale}}} = conn, default: default) do
Gettext.put_locale(locale || default)
conn |> put_session(:locale, locale || default)
end
defp put_user_locale(conn, default: default) do
Gettext.put_locale(default)
conn |> put_session(:locale, default)
end end
pipeline :require_admin do pipeline :require_admin do
@ -56,12 +65,12 @@ defmodule CanneryWeb.Router do
live "/tags/new", TagLive.Index, :new live "/tags/new", TagLive.Index, :new
live "/tags/:id/edit", TagLive.Index, :edit live "/tags/:id/edit", TagLive.Index, :edit
live "/ammo_types", AmmoTypeLive.Index, :index live "/catalog", AmmoTypeLive.Index, :index
live "/ammo_types/new", AmmoTypeLive.Index, :new live "/catalog/new", AmmoTypeLive.Index, :new
live "/ammo_types/:id/edit", AmmoTypeLive.Index, :edit live "/catalog/:id/edit", AmmoTypeLive.Index, :edit
live "/ammo_types/:id", AmmoTypeLive.Show, :show live "/catalog/:id", AmmoTypeLive.Show, :show
live "/ammo_types/:id/show/edit", AmmoTypeLive.Show, :edit live "/catalog/:id/show/edit", AmmoTypeLive.Show, :edit
live "/containers", ContainerLive.Index, :index live "/containers", ContainerLive.Index, :index
live "/containers/new", ContainerLive.Index, :new live "/containers/new", ContainerLive.Index, :new
@ -72,17 +81,17 @@ defmodule CanneryWeb.Router do
live "/containers/:id/show/edit", ContainerLive.Show, :edit live "/containers/:id/show/edit", ContainerLive.Show, :edit
live "/containers/:id/show/edit_tags", ContainerLive.Show, :edit_tags live "/containers/:id/show/edit_tags", ContainerLive.Show, :edit_tags
live "/ammo_groups", AmmoGroupLive.Index, :index live "/ammo", AmmoGroupLive.Index, :index
live "/ammo_groups/new", AmmoGroupLive.Index, :new live "/ammo/new", AmmoGroupLive.Index, :new
live "/ammo_groups/:id/edit", AmmoGroupLive.Index, :edit live "/ammo/:id/edit", AmmoGroupLive.Index, :edit
live "/ammo_groups/:id/add_shot_group", AmmoGroupLive.Index, :add_shot_group live "/ammo/:id/add_shot_group", AmmoGroupLive.Index, :add_shot_group
live "/ammo_groups/:id/move", AmmoGroupLive.Index, :move live "/ammo/:id/move", AmmoGroupLive.Index, :move
live "/ammo_groups/:id", AmmoGroupLive.Show, :show live "/ammo/:id", AmmoGroupLive.Show, :show
live "/ammo_groups/:id/show/edit", AmmoGroupLive.Show, :edit live "/ammo/:id/show/edit", AmmoGroupLive.Show, :edit
live "/ammo_groups/:id/show/add_shot_group", AmmoGroupLive.Show, :add_shot_group live "/ammo/:id/show/add_shot_group", AmmoGroupLive.Show, :add_shot_group
live "/ammo_groups/:id/show/move", AmmoGroupLive.Show, :move live "/ammo/:id/show/move", AmmoGroupLive.Show, :move
live "/ammo_groups/:id/show/:shot_group_id/edit", AmmoGroupLive.Show, :edit_shot_group live "/ammo/:id/show/:shot_group_id/edit", AmmoGroupLive.Show, :edit_shot_group
live "/range", RangeLive.Index, :index live "/range", RangeLive.Index, :index
live "/range/:id/edit", RangeLive.Index, :edit live "/range/:id/edit", RangeLive.Index, :edit

View File

@ -37,7 +37,7 @@
<%= gettext("Loading...") %> <%= gettext("Loading...") %>
</h1> </h1>
<i class="fas fa-3x fa-spin fa-cog"></i> <i class="fas fa-3x fa-spin fa-gear"></i>
</div> </div>
<div <div

View File

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

View File

@ -30,6 +30,15 @@
<%= password_input(f, :password, required: true, class: "input input-primary col-span-2") %> <%= password_input(f, :password, required: true, class: "input input-primary col-span-2") %>
<%= error_tag(f, :password, "col-span-3") %> <%= error_tag(f, :password, "col-span-3") %>
<%= label(f, :locale, gettext("Language"), class: "title text-lg text-primary-600") %>
<%= select(
f,
:locale,
[{gettext("English"), "en_US"}, {gettext("German"), "de"}, {gettext("French"), "fr"}],
class: "input input-primary col-span-2"
) %>
<%= error_tag(f, :locale) %>
<%= submit(dgettext("actions", "Register"), class: "mx-auto btn btn-primary col-span-3") %> <%= submit(dgettext("actions", "Register"), class: "mx-auto btn btn-primary col-span-3") %>
<% end %> <% end %>

View File

@ -1,17 +1,16 @@
<div class="mx-auto mb-8 max-w-2xl flex flex-col justify-center items-center space-y-4"> <div class="mx-auto mb-8 max-w-2xl flex flex-col justify-center items-center text-center space-y-4">
<h1 class="pb-4 title text-primary-600 text-xl"> <h1 class="pb-4 title text-primary-600 text-xl">
<%= gettext("Settings") %> <%= gettext("Settings") %>
</h1> </h1>
<hr class="hr" /> <hr class="hr" />
<%= form_for @email_changeset, <.form
Routes.user_settings_path(@conn, :update), let={f}
[ for={@email_changeset}
class: action={Routes.user_settings_path(@conn, :update)}
"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"
], >
fn f -> %>
<h3 class="title text-primary-600 text-lg col-span-3"> <h3 class="title text-primary-600 text-lg col-span-3">
<%= dgettext("actions", "Change email") %> <%= dgettext("actions", "Change email") %>
</h3> </h3>
@ -45,17 +44,16 @@
<%= submit(dgettext("actions", "Change email"), <%= submit(dgettext("actions", "Change email"),
class: "mx-auto btn btn-primary col-span-3" class: "mx-auto btn btn-primary col-span-3"
) %> ) %>
<% end %> </.form>
<hr class="hr" /> <hr class="hr" />
<%= form_for @password_changeset, <.form
Routes.user_settings_path(@conn, :update), let={f}
[ for={@password_changeset}
class: action={Routes.user_settings_path(@conn, :update)}
"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"
], >
fn f -> %>
<h3 class="title text-primary-600 text-lg col-span-3"> <h3 class="title text-primary-600 text-lg col-span-3">
<%= dgettext("actions", "Change password") %> <%= dgettext("actions", "Change password") %>
</h3> </h3>
@ -101,8 +99,44 @@
<%= submit(dgettext("actions", "Change password"), <%= submit(dgettext("actions", "Change password"),
class: "mx-auto btn btn-primary col-span-3" class: "mx-auto btn btn-primary col-span-3"
) %> ) %>
</.form>
<hr class="hr" />
<.form
let={f}
for={@locale_changeset}
action={Routes.user_settings_path(@conn, :update)}
class="flex flex-col space-y-4 justify-center items-center"
>
<h3 class="title text-primary-600 text-lg">
<%= dgettext("actions", "Change Language") %>
</h3>
<%= if @locale_changeset.action && not @locale_changeset.valid? do %>
<div class="alert alert-danger">
<p>
<%= dgettext("errors", "Oops, something went wrong! Please check the errors below.") %>
</p>
</div>
<% end %> <% end %>
<%= hidden_input(f, :action, name: "action", value: "update_locale") %>
<%= select(
f,
:locale,
[{gettext("English"), "en_US"}, {gettext("German"), "de"}, {gettext("French"), "fr"}],
class: "mx-2 my-1 min-w-md input input-primary"
) %>
<%= error_tag(f, :locale) %>
<%= submit(dgettext("actions", "Change language"),
class: "whitespace-nowrap mx-auto btn btn-primary",
data: [qa: dgettext("prompts", "Are you sure you want to change your language?")]
) %>
</.form>
<hr class="hr" /> <hr class="hr" />
<%= link(dgettext("actions", "Delete User"), <%= link(dgettext("actions", "Delete User"),

12
mix.exs
View File

@ -4,7 +4,7 @@ defmodule Cannery.MixProject do
def project do def project do
[ [
app: :cannery, app: :cannery,
version: "0.5.0", version: "0.5.5",
elixir: "1.13.4", elixir: "1.13.4",
elixirc_paths: elixirc_paths(Mix.env()), elixirc_paths: elixirc_paths(Mix.env()),
compilers: [:gettext] ++ Mix.compilers(), compilers: [:gettext] ++ Mix.compilers(),
@ -13,6 +13,7 @@ defmodule Cannery.MixProject do
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],
# ExDoc # ExDoc
name: "Cannery", name: "Cannery",
source_url: "https://gitea.bubbletea.dev/shibao/cannery", source_url: "https://gitea.bubbletea.dev/shibao/cannery",
@ -85,12 +86,19 @@ 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: ["cmd npm run format --prefix assets", "format", "gettext.extract"], format: [
"cmd npm run format --prefix assets",
"format",
"gettext.extract --merge",
"gettext.merge --no-fuzzy priv/gettext"
],
test: [ test: [
"cmd npm run test --prefix assets", "cmd npm run test --prefix assets",
"dialyzer", "dialyzer",
"credo --strict", "credo --strict",
"format --check-formatted", "format --check-formatted",
"gettext.extract --check-up-to-date",
"ecto.drop --quiet",
"ecto.create --quiet", "ecto.create --quiet",
"ecto.migrate --quiet", "ecto.migrate --quiet",
"test" "test"

View File

@ -12,13 +12,13 @@
"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.1.0", "c5aab0d6e71e5522e77beff7ba9e08f8e02bad90dfbeffae60eaf0cb47e29488", [:mix], [{:erlex, ">= 0.2.6", [hex: :erlex, repo: "hexpm", optional: false]}], "hexpm", "07ea8e49c45f15264ebe6d5b93799d4dd56a44036cf42d0ad9c960bc266c0b9a"},
"earmark_parser": {:hex, :earmark_parser, "1.4.25", "2024618731c55ebfcc5439d756852ec4e85978a39d0d58593763924d9a15916f", [:mix], [], "hexpm", "56749c5e1c59447f7b7a23ddb235e4b3defe276afc220a6227237f3efe83f51e"}, "earmark_parser": {:hex, :earmark_parser, "1.4.25", "2024618731c55ebfcc5439d756852ec4e85978a39d0d58593763924d9a15916f", [:mix], [], "hexpm", "56749c5e1c59447f7b7a23ddb235e4b3defe276afc220a6227237f3efe83f51e"},
"ecto": {:hex, :ecto, "3.7.2", "44c034f88e1980754983cc4400585970b4206841f6f3780967a65a9150ef09a8", [: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", "a600da5772d1c31abbf06f3e4a1ffb150e74ed3e2aa92ff3cee95901657a874e"}, "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_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.7.2", "55c60aa3a06168912abf145c6df38b0295c34118c3624cf7a6977cd6ce043081", [:mix], [{:db_connection, "~> 2.2", [hex: :db_connection, repo: "hexpm", optional: false]}, {:ecto, "~> 3.7.0", [hex: :ecto, repo: "hexpm", optional: false]}, {:myxql, "~> 0.4.0 or ~> 0.5.0 or ~> 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", "3c218ea62f305dcaef0b915fb56583195e7b91c91dcfb006ba1f669bfacbff2a"}, "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"},
"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.3", "6eea2f69995f5fba94cd6dd398df369fe4e777a47cd887714a0976930615c9e6", [: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", "05387a6a2655b5f9820f3f627450ed20b4325c25977b2ee69bed90af6688e718"}, "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"},
"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.32.1", "dfe3b8db3b793939c264e6f785bca01753d17318d144bd44b407fb3493acaa87", [:mix], [{:html_entities, "~> 0.5.0", [hex: :html_entities, repo: "hexpm", optional: false]}], "hexpm", "d4b91c713e4a784a3f7b1e3cc016eefc619f6b1c3898464222867cafd3c681a3"},
"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"},
@ -32,8 +32,8 @@
"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.2", "0b9e1a4c840eafb68d820b0e2158ef5c49385d17fb36855ac6e7e087d4b1dcc5", [:mix], [], "hexpm", "e6a3f76b4c277739e36c2e21a2c640778ba4c3846189d5ab19f97f126df5f9b7"},
"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.11.3", "f431f2f0c251b8490a7fa00d2cce7197a1cf4d3f04a3305e80411f083392998f", [: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", "26529da52bfca27740c984bfc70e7f954d6411ceeae0c7c94d2c8aa7c00b513d"}, "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"},
"phoenix": {:hex, :phoenix, "1.6.7", "f1de32418bbbcd471f4fe74d3860ee9c8e8c6c36a0ec173be8ff468a5d72ac90", [: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", "b354a4f11d9a2f3a380fb731042dae064f22d7aed8c7e7c024a2459f12994aad"}, "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_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.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"},
@ -45,10 +45,10 @@
"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.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_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.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_crypto": {:hex, :plug_crypto, "1.2.2", "05654514ac717ff3a1843204b424477d9e60c143406aa94daf2274fdd280794d", [:mix], [], "hexpm", "87631c7ad914a5a445f0a3809f99b079113ae4ed4b867348dd9eec288cecb6db"}, "plug_crypto": {:hex, :plug_crypto, "1.2.2", "05654514ac717ff3a1843204b424477d9e60c143406aa94daf2274fdd280794d", [:mix], [], "hexpm", "87631c7ad914a5a445f0a3809f99b079113ae4ed4b867348dd9eec288cecb6db"},
"postgrex": {:hex, :postgrex, "0.16.2", "0f83198d0e73a36e8d716b90f45f3bde75b5eebf4ade4f43fa1f88c90a812f74", [: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]}], "hexpm", "a9ea589754d9d4d076121090662b7afe155b374897a6550eb288f11d755acfa0"}, "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"},
"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.4", "ce3a4bf3e5276fd114178ebc5ed072ee0c177a7b3a09e5992aa005778ac143c2", [:mix], [{:cowboy, "~> 1.1 or ~> 2.4", [hex: :cowboy, 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", "ad4c8b534812433730b6241a1d9df38b1da75fdfa340f51887a31d7e9343fffe"}, "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"},
"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"},

View File

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

View File

@ -3,8 +3,8 @@ msgstr ""
"Project-Id-Version: PACKAGE VERSION\n" "Project-Id-Version: PACKAGE VERSION\n"
"Report-Msgid-Bugs-To: \n" "Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2022-04-19 19:32+0000\n" "POT-Creation-Date: 2022-04-19 19:32+0000\n"
"PO-Revision-Date: 2022-04-19 21:32+0000\n" "PO-Revision-Date: 2022-05-12 20:28+0000\n"
"Last-Translator: shibao <shibao@bubbletea.dev>\n" "Last-Translator: Kaia Estra <kaia@fedora.email>\n"
"Language-Team: German <https://weblate.bubbletea.dev/projects/cannery/" "Language-Team: German <https://weblate.bubbletea.dev/projects/cannery/"
"actions/de/>\n" "actions/de/>\n"
"Language: de\n" "Language: de\n"
@ -12,7 +12,7 @@ msgstr ""
"Content-Type: text/plain; charset=UTF-8\n" "Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n" "Content-Transfer-Encoding: 8bit\n"
"Plural-Forms: nplurals=2; plural=n != 1;\n" "Plural-Forms: nplurals=2; plural=n != 1;\n"
"X-Generator: Weblate 4.11.2\n" "X-Generator: Weblate 4.12.1\n"
## This file is a PO Template file. ## This file is a PO Template file.
## ##
@ -23,194 +23,204 @@ msgstr ""
## Run "mix gettext.extract" to bring this file up to ## Run "mix gettext.extract" to bring this file up to
## date. Leave "msgstr"s empty as changing them here has no ## date. Leave "msgstr"s empty as changing them here has no
## effect: edit them in PO (.po) files instead. ## effect: edit them in PO (.po) files instead.
#: lib/cannery_web/live/ammo_group_live/index.ex:44
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
#: lib/cannery_web/live/ammo_group_live/index.ex:44
#: lib/cannery_web/live/ammo_group_live/index.html.heex:42
msgid "Add Ammo" msgid "Add Ammo"
msgstr "Munition hinzufügen" msgstr "Munition hinzufügen"
#: lib/cannery_web/live/ammo_group_live/index.html.heex:24
#, 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:12
#, 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:12
#, 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!"
#: lib/cannery_web/templates/user_settings/edit.html.heex:16
#: lib/cannery_web/templates/user_settings/edit.html.heex:45
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
#: lib/cannery_web/templates/user_settings/edit.html.heex:15
#: lib/cannery_web/templates/user_settings/edit.html.heex:44
msgid "Change email" msgid "Change email"
msgstr "Mailadresse ändern" msgstr "Mailadresse ändern"
#: lib/cannery_web/templates/user_settings/edit.html.heex:60
#: lib/cannery_web/templates/user_settings/edit.html.heex:101
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
#: lib/cannery_web/templates/user_settings/edit.html.heex:58
#: lib/cannery_web/templates/user_settings/edit.html.heex:99
msgid "Change password" msgid "Change password"
msgstr "Passwort ändern" msgstr "Passwort ändern"
#: lib/cannery_web/live/invite_live/index.html.heex:17
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
#: lib/cannery_web/live/invite_live/index.html.heex:17
msgid "Create Invite" msgid "Create Invite"
msgstr "Einladung erstellen" msgstr "Einladung erstellen"
#: lib/cannery_web/templates/user_settings/edit.html.heex:108
#, 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"
#: lib/cannery_web/templates/user_registration/new.html.heex:43 #, elixir-autogen, elixir-format
#: 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:12
#, 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!"
#: lib/cannery_web/components/topbar.ex:108 #, elixir-autogen, elixir-format
#: 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:39 #: lib/cannery_web/templates/user_registration/new.html.heex:48
#: lib/cannery_web/templates/user_reset_password/edit.html.heex:48 #: lib/cannery_web/templates/user_reset_password/edit.html.heex:48
#: 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:14
#, 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!"
#: lib/cannery_web/live/ammo_group_live/index.html.heex:42
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
msgid "New Ammo group"
msgstr "Neue Munitionsgruppe"
#: 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"
#: lib/cannery_web/live/container_live/index.html.heex:17
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
#: lib/cannery_web/live/container_live/index.html.heex:17
msgid "New Container" msgid "New Container"
msgstr "Neuer Behälter" msgstr "Neuer Behälter"
#: lib/cannery_web/live/tag_live/index.html.heex:19
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
#: lib/cannery_web/live/tag_live/index.html.heex:19
msgid "New Tag" msgid "New Tag"
msgstr "Neuer Tag" msgstr "Neuer Tag"
#: lib/cannery_web/components/topbar.ex:101 #, elixir-autogen, elixir-format
#: lib/cannery_web/components/topbar.ex:105
#: lib/cannery_web/templates/user_confirmation/new.html.heex:25 #: lib/cannery_web/templates/user_confirmation/new.html.heex:25
#: lib/cannery_web/templates/user_registration/new.html.heex:3 #: lib/cannery_web/templates/user_registration/new.html.heex:3
#: lib/cannery_web/templates/user_registration/new.html.heex:33 #: 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:43
#: lib/cannery_web/templates/user_reset_password/new.html.heex:25 #: lib/cannery_web/templates/user_reset_password/new.html.heex:25
#: lib/cannery_web/templates/user_session/new.html.heex:40 #: lib/cannery_web/templates/user_session/new.html.heex:40
#, 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:46 #: 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:28 #: lib/cannery_web/live/invite_live/form_component.html.heex:31
#: lib/cannery_web/live/range_live/form_component.html.heex:40 #: lib/cannery_web/live/range_live/form_component.html.heex:40
#: lib/cannery_web/live/tag_live/form_component.ex:66 #: lib/cannery_web/live/tag_live/form_component.ex:91
#, elixir-autogen, elixir-format
msgid "Save" msgid "Save"
msgstr "Speichern" msgstr "Speichern"
#: lib/cannery_web/templates/user_reset_password/new.html.heex:16
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
#: lib/cannery_web/templates/user_reset_password/new.html.heex:16
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:53
#, 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:52
#, 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"
#: lib/cannery_web/live/range_live/index.html.heex:17
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
#: lib/cannery_web/live/range_live/index.html.heex:17
msgid "Stage ammo" msgid "Stage ammo"
msgstr "Munition markieren" msgstr "Munition markieren"
#: lib/cannery_web/live/range_live/index.html.heex:12
#, 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:134
#: lib/cannery_web/live/ammo_group_live/show.html.heex:86
#: lib/cannery_web/live/range_live/index.html.heex:36
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
#: lib/cannery_web/live/ammo_group_live/index.ex:151
#: lib/cannery_web/live/ammo_group_live/show.html.heex:91
#: lib/cannery_web/live/range_live/index.html.heex:36
msgid "Record shots" msgid "Record shots"
msgstr "Schüsse dokumentieren" msgstr "Schüsse dokumentieren"
#: lib/cannery_web/live/ammo_group_live/show.html.heex:50
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
msgid "Ammo Details"
msgstr "Munitionsdetails"
#: lib/cannery_web/components/move_ammo_group_component.ex:89 #: lib/cannery_web/components/move_ammo_group_component.ex:89
#, elixir-autogen, elixir-format
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:80
#, 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:127
#, 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:33
#, 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:18
#: 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: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"
#: lib/cannery_web/live/ammo_group_live/form_component.html.heex:66
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
#: lib/cannery_web/live/ammo_group_live/form_component.html.heex:66
msgid "Create" msgid "Create"
msgstr "Erstellen" msgstr "Erstellen"
#, elixir-autogen, elixir-format
#: lib/cannery_web/templates/user_settings/edit.html.heex:113
msgid "Change Language"
msgstr "Sprache wechseln"
#, elixir-autogen, elixir-format
#: lib/cannery_web/templates/user_settings/edit.html.heex:134
msgid "Change language"
msgstr "Sprache wechseln"
#, elixir-autogen, elixir-format
#: lib/cannery_web/live/ammo_group_live/show.html.heex:55
msgid "View in Catalog"
msgstr ""
#, elixir-autogen, elixir-format
#: lib/cannery_web/live/ammo_group_live/index.html.heex:31
msgid "add an ammo type first"
msgstr ""

File diff suppressed because it is too large Load Diff

View File

@ -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.
#: lib/cannery/accounts/email.ex:30
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
#: lib/cannery/accounts/email.ex:30
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},"
#: lib/cannery_web/templates/email/confirm_email.txt.eex:10
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
#: lib/cannery_web/templates/email/confirm_email.txt.eex:10
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."
#: lib/cannery/accounts/email.ex:37
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
#: lib/cannery/accounts/email.ex:37
msgid "Reset your %{name} password" msgid "Reset your %{name} password"
msgstr "Passwort für %{name} zurücksetzen" msgstr "Passwort für %{name} zurücksetzen"
#: lib/cannery/accounts/email.ex:44
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
#: lib/cannery/accounts/email.ex:44
msgid "Update your %{name} email" msgid "Update your %{name} email"
msgstr "Aktualisieren Sie %{name} Mailadresse" msgstr "Aktualisieren Sie %{name} Mailadresse"
#: lib/cannery_web/templates/email/confirm_email.html.eex:9
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
#: lib/cannery_web/templates/email/confirm_email.html.eex:9
msgid "Welcome to %{name}!" msgid "Welcome to %{name}!"
msgstr "Willkommen %{name}!" msgstr "Willkommen %{name}!"
#: lib/cannery_web/templates/email/confirm_email.txt.eex:4
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
#: lib/cannery_web/templates/email/confirm_email.txt.eex:4
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:"
#: lib/cannery_web/templates/email/confirm_email.html.eex:22
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
#: lib/cannery_web/templates/email/confirm_email.html.eex:22
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."
#: lib/cannery_web/templates/layout/email.txt.eex:9
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
#: lib/cannery_web/templates/layout/email.txt.eex:9
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."
#: lib/cannery_web/templates/layout/email.html.heex:17
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
#: lib/cannery_web/templates/layout/email.html.heex:13
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 "

View File

@ -23,165 +23,181 @@ msgstr ""
## Run "mix gettext.extract" to bring this file up to ## Run "mix gettext.extract" to bring this file up to
## date. Leave "msgstr"s empty as changing them here has no ## date. Leave "msgstr"s empty as changing them here has no
## effect: edit them in PO (.po) files instead. ## effect: edit them in PO (.po) files instead.
#: lib/cannery/containers.ex:122
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
#: lib/cannery/containers.ex:140
msgid "Container must be empty before deleting" msgid "Container must be empty before deleting"
msgstr "Behälter muss vor dem Löschen leer sein" msgstr "Behälter muss vor dem Löschen leer sein"
#: lib/cannery_web/live/container_live/index.ex:71
#: lib/cannery_web/live/container_live/show.ex:73
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
#: lib/cannery_web/live/container_live/index.ex:69
#: lib/cannery_web/live/container_live/show.ex:71
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:59
#, 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"
#: lib/cannery_web/controllers/user_settings_controller.ex:67
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
#: lib/cannery_web/controllers/user_settings_controller.ex:84
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."
#: lib/cannery_web/templates/error/error.html.heex:8
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
#: lib/cannery_web/templates/error/error.html.heex:8
msgid "Error" msgid "Error"
msgstr "Fehler" msgstr "Fehler"
#: lib/cannery_web/templates/error/error.html.heex:29
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
#: lib/cannery_web/templates/error/error.html.heex:28
msgid "Go back home" msgid "Go back home"
msgstr "Zur Hauptseite zurückkehren" msgstr "Zur Hauptseite zurückkehren"
#: lib/cannery_web/views/error_view.ex:11
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
#: lib/cannery_web/views/error_view.ex:11
msgid "Internal Server Error" msgid "Internal Server Error"
msgstr "Interner Serverfehler" msgstr "Interner Serverfehler"
#: lib/cannery_web/controllers/user_session_controller.ex:17
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
#: lib/cannery_web/controllers/user_session_controller.ex:17
msgid "Invalid email or password" msgid "Invalid email or password"
msgstr "Ungültige Mailadresse oder Passwort" msgstr "Ungültige Mailadresse oder Passwort"
#: lib/cannery_web/views/error_view.ex:9
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
#: lib/cannery_web/views/error_view.ex:9
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:22 #: lib/cannery_web/templates/user_settings/edit.html.heex:21
#: lib/cannery_web/templates/user_settings/edit.html.heex:66 #: lib/cannery_web/templates/user_settings/edit.html.heex:64
#, elixir-autogen, elixir-format #: lib/cannery_web/templates/user_settings/edit.html.heex:119
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."
#: lib/cannery_web/controllers/user_reset_password_controller.ex:63
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
#: lib/cannery_web/controllers/user_reset_password_controller.ex:63
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"
#: lib/cannery_web/controllers/user_settings_controller.ex:82
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
#: lib/cannery_web/controllers/user_settings_controller.ex:99
msgid "Unable to delete user" msgid "Unable to delete user"
msgstr "Dieser Nutzer konnte nicht gelöscht werden" msgstr "Dieser Nutzer konnte nicht gelöscht werden"
#: lib/cannery_web/views/error_view.ex:10
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
#: lib/cannery_web/views/error_view.ex:10
msgid "Unauthorized" msgid "Unauthorized"
msgstr "Unbefugt" msgstr "Unbefugt"
#: lib/cannery_web/controllers/user_confirmation_controller.ex:54
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
#: lib/cannery_web/controllers/user_confirmation_controller.ex:54
msgid "User confirmation link is invalid or it has expired." msgid "User confirmation link is invalid or it has expired."
msgstr "Nutzerkonto Bestätigungslink ist ungültig oder abgelaufen." msgstr "Nutzerkonto Bestätigungslink ist ungültig oder abgelaufen."
#: lib/cannery_web/live/invite_live/index.ex:20
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
#: lib/cannery_web/live/invite_live/index.ex:18
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_web/controllers/user_auth.ex:177
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
#: lib/cannery_web/controllers/user_auth.ex:177
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:128
#, 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:149
#, 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:186
#, 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:82
#, 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"
#: lib/cannery/tags.ex:40
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
#: lib/cannery/tags.ex:40
msgid "Tag not found" msgid "Tag not found"
msgstr "Tag nicht gefunden" msgstr "Tag nicht gefunden"
#: lib/cannery_web/live/container_live/edit_tags_component.ex:30
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
#: lib/cannery_web/live/container_live/edit_tags_component.ex:30
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.ex:125
#, 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.ex:73
#: lib/cannery/activity_log.ex:120
#, 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."
#: lib/cannery_web/live/container_live/edit_tags_component.ex:52
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
#: lib/cannery_web/live/container_live/edit_tags_component.ex:52
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:126
#, 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:111
#, 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}"
#, elixir-autogen, elixir-format
#: lib/cannery/ammo.ex:407
msgid "Invalid multiplier"
msgstr ""
#, elixir-autogen, elixir-format
#: lib/cannery/ammo/ammo_group.ex:84
msgid "Please select an ammo type and container"
msgstr ""
#, elixir-autogen, elixir-format
#: lib/cannery/activity_log/shot_group.ex:69
msgid "Please select a valid user and ammo group"
msgstr ""

View File

@ -3,7 +3,7 @@ msgstr ""
"Project-Id-Version: PACKAGE VERSION\n" "Project-Id-Version: PACKAGE VERSION\n"
"Report-Msgid-Bugs-To: \n" "Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2022-04-19 19:32+0000\n" "POT-Creation-Date: 2022-04-19 19:32+0000\n"
"PO-Revision-Date: 2022-04-19 21:32+0000\n" "PO-Revision-Date: 2022-05-12 20:28+0000\n"
"Last-Translator: Kaia Estra <kaia@fedora.email>\n" "Last-Translator: Kaia Estra <kaia@fedora.email>\n"
"Language-Team: German <https://weblate.bubbletea.dev/projects/cannery/" "Language-Team: German <https://weblate.bubbletea.dev/projects/cannery/"
"prompts/de/>\n" "prompts/de/>\n"
@ -12,7 +12,7 @@ msgstr ""
"Content-Type: text/plain; charset=UTF-8\n" "Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n" "Content-Transfer-Encoding: 8bit\n"
"Plural-Forms: nplurals=2; plural=n != 1;\n" "Plural-Forms: nplurals=2; plural=n != 1;\n"
"X-Generator: Weblate 4.11.2\n" "X-Generator: Weblate 4.12.1\n"
## This file is a PO Template file. ## This file is a PO Template file.
## ##
@ -23,259 +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.
#: lib/cannery_web/live/ammo_type_live/form_component.ex:64
#: lib/cannery_web/live/container_live/form_component.ex:65
#: lib/cannery_web/live/invite_live/form_component.ex:59
#: lib/cannery_web/live/tag_live/form_component.ex:101
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
#: lib/cannery_web/live/ammo_type_live/form_component.ex:85
#: lib/cannery_web/live/container_live/form_component.ex:85
#: lib/cannery_web/live/invite_live/form_component.ex:80
#: lib/cannery_web/live/tag_live/form_component.ex:126
msgid "%{name} created successfully" msgid "%{name} created successfully"
msgstr "%{name} erfolgreich erstellt" msgstr "%{name} erfolgreich erstellt"
#: lib/cannery_web/live/ammo_type_live/index.ex:41
#: lib/cannery_web/live/ammo_type_live/show.ex:40
#: lib/cannery_web/live/invite_live/index.ex:55
#: lib/cannery_web/live/invite_live/index.ex:135
#: lib/cannery_web/live/tag_live/index.ex:40
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
#: lib/cannery_web/live/ammo_type_live/index.ex:41
#: lib/cannery_web/live/ammo_type_live/show.ex:38
#: lib/cannery_web/live/invite_live/index.ex:53
#: lib/cannery_web/live/invite_live/index.ex:133
#: lib/cannery_web/live/tag_live/index.ex:38
msgid "%{name} deleted succesfully" msgid "%{name} deleted succesfully"
msgstr "%{name} erfolgreich gelöscht" msgstr "%{name} erfolgreich gelöscht"
#: lib/cannery_web/live/invite_live/index.ex:111
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
#: lib/cannery_web/live/invite_live/index.ex:109
msgid "%{name} disabled succesfully" msgid "%{name} disabled succesfully"
msgstr "%{name} erfolgreich deaktiviert" msgstr "%{name} erfolgreich deaktiviert"
#: lib/cannery_web/live/invite_live/index.ex:89
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
#: lib/cannery_web/live/invite_live/index.ex:87
msgid "%{name} enabled succesfully" msgid "%{name} enabled succesfully"
msgstr "%{name} erfolgreich aktiviert" msgstr "%{name} erfolgreich aktiviert"
#: lib/cannery_web/live/container_live/index.ex:64
#: lib/cannery_web/live/container_live/show.ex:63
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
#: lib/cannery_web/live/container_live/index.ex:62
#: lib/cannery_web/live/container_live/show.ex:61
msgid "%{name} has been deleted" msgid "%{name} has been deleted"
msgstr "%{name} wurde gelöscht" msgstr "%{name} wurde gelöscht"
#: lib/cannery_web/live/invite_live/index.ex:69
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
#: lib/cannery_web/live/invite_live/index.ex:67
msgid "%{name} updated succesfully" msgid "%{name} updated succesfully"
msgstr "%{name} erfolgreich aktualisiert" msgstr "%{name} erfolgreich aktualisiert"
#: lib/cannery_web/live/ammo_type_live/form_component.ex:46
#: lib/cannery_web/live/container_live/form_component.ex:47
#: lib/cannery_web/live/invite_live/form_component.ex:41
#: lib/cannery_web/live/tag_live/form_component.ex:83
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
#: 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/invite_live/form_component.ex:62
#: lib/cannery_web/live/tag_live/form_component.ex:108
msgid "%{name} updated successfully" msgid "%{name} updated successfully"
msgstr "%{name} erfolgreich aktualisiert" msgstr "%{name} erfolgreich aktualisiert"
#: lib/cannery_web/controllers/user_settings_controller.ex:28
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
#: lib/cannery_web/controllers/user_settings_controller.ex:29
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:56
#: lib/cannery_web/live/ammo_group_live/show.ex:52
#, 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/ammo_group_live/form_component.ex:88
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
msgid "Ammo group updated successfully"
msgstr "Munitionsgruppe erfolgreich aktualisiert"
#: lib/cannery_web/live/invite_live/index.html.heex:102 #: lib/cannery_web/live/invite_live/index.html.heex:102
#: lib/cannery_web/live/invite_live/index.html.heex:131 #: lib/cannery_web/live/invite_live/index.html.heex:131
#, elixir-autogen, elixir-format
msgid "Are you sure you want to delete %{email}? This action is permanent!" msgid "Are you sure you want to delete %{email}? This action is permanent!"
msgstr "" msgstr ""
"Sind Sie sicher, dass sie %{email} löschen möchten? Dies kann nicht " "Sind Sie sicher, dass sie %{email} löschen möchten? Dies kann nicht "
"zurückgenommen werden!" "zurückgenommen werden!"
#: lib/cannery_web/live/ammo_type_live/show.html.heex:29
#: lib/cannery_web/live/container_live/index.html.heex:46
#: lib/cannery_web/live/container_live/show.html.heex:37
#: lib/cannery_web/live/tag_live/index.html.heex:38
#, 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?"
#: lib/cannery_web/live/invite_live/index.html.heex:49
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
#: lib/cannery_web/live/invite_live/index.html.heex:49
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:167
#: lib/cannery_web/live/ammo_group_live/show.html.heex:66
#: lib/cannery_web/live/ammo_type_live/index.ex:130
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
#: lib/cannery_web/live/ammo_group_live/index.ex:184
#: 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:112
#, 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:86
#, 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:74
#, 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?"
#: lib/cannery_web/controllers/user_settings_controller.ex:60
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
#: lib/cannery_web/controllers/user_settings_controller.ex:77
msgid "Email changed successfully." msgid "Email changed successfully."
msgstr "Mailadresse erfolgreich geändert." msgstr "Mailadresse erfolgreich geändert."
#: lib/cannery_web/controllers/user_confirmation_controller.ex:23
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
#: lib/cannery_web/controllers/user_confirmation_controller.ex:23
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."
#: lib/cannery_web/controllers/user_reset_password_controller.ex:24
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
#: lib/cannery_web/controllers/user_reset_password_controller.ex:24
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."
#: lib/cannery_web/controllers/user_session_controller.ex:23
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
#: lib/cannery_web/controllers/user_session_controller.ex:23
msgid "Logged out successfully." msgid "Logged out successfully."
msgstr "Erfolgreich ausgeloggt." msgstr "Erfolgreich ausgeloggt."
#: lib/cannery_web/controllers/user_reset_password_controller.ex:46
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
#: lib/cannery_web/controllers/user_reset_password_controller.ex:46
msgid "Password reset successfully." msgid "Password reset successfully."
msgstr "Passwort erfolgreich zurückgesetzt." msgstr "Passwort erfolgreich zurückgesetzt."
#: lib/cannery_web/controllers/user_settings_controller.ex:47
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
#: lib/cannery_web/controllers/user_settings_controller.ex:49
msgid "Password updated successfully." msgid "Password updated successfully."
msgstr "Passwort erfolgreich geändert." msgstr "Passwort erfolgreich geändert."
#: lib/cannery_web/controllers/user_registration_controller.ex:74
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
#: lib/cannery_web/controllers/user_registration_controller.ex:74
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:103
#, 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:48 #: 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:30 #: lib/cannery_web/live/invite_live/form_component.html.heex:33
#: lib/cannery_web/live/range_live/form_component.html.heex:42 #: lib/cannery_web/live/range_live/form_component.html.heex:42
#: lib/cannery_web/live/tag_live/form_component.ex:68 #: lib/cannery_web/live/tag_live/form_component.ex:93
#, elixir-autogen, elixir-format
msgid "Saving..." msgid "Saving..."
msgstr "Speichere..." msgstr "Speichere..."
#: lib/cannery_web/controllers/user_settings_controller.ex:78
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
#: lib/cannery_web/controllers/user_settings_controller.ex:95
msgid "Your account has been deleted" msgid "Your account has been deleted"
msgstr "Ihr Nutzerkonto wurde gelöscht" msgstr "Ihr Nutzerkonto wurde gelöscht"
#: lib/cannery_web/live/container_live/edit_tags_component.html.heex:16
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
#: lib/cannery_web/live/container_live/edit_tags_component.html.heex:16
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?"
#: lib/cannery_web/live/container_live/edit_tags_component.ex:36
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
#: lib/cannery_web/live/container_live/edit_tags_component.ex:36
msgid "%{name} added successfully" msgid "%{name} added successfully"
msgstr "%{name} erfolgreich hinzugefügt" msgstr "%{name} erfolgreich hinzugefügt"
#: lib/cannery_web/live/container_live/show.ex:39
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
#: lib/cannery_web/live/container_live/show.ex:37
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:54
#, 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..."
#: lib/cannery_web/components/add_shot_group_component.ex:68
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
#: lib/cannery_web/components/add_shot_group_component.ex:56
msgid "Shots recorded successfully" msgid "Shots recorded successfully"
msgstr "Schüsse erfolgreich dokumentiert" msgstr "Schüsse erfolgreich dokumentiert"
#: lib/cannery_web/live/range_live/index.html.heex:29
#, 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/range_live/index.ex:70
#, elixir-autogen, elixir-format
msgid "Ammo group unstaged succesfully"
msgstr "Munition erfolgreich demarkiert"
#: lib/cannery_web/live/ammo_group_live/show.ex:132
#: lib/cannery_web/live/range_live/index.ex:130
#, 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?"
#: lib/cannery_web/live/ammo_group_live/show.ex:80
#: lib/cannery_web/live/range_live/index.ex:56
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
#: lib/cannery_web/live/ammo_group_live/show.ex:78
#: lib/cannery_web/live/range_live/index.ex:54
msgid "Shot records deleted succesfully" msgid "Shot records deleted succesfully"
msgstr "Schießkladde erfolgreich gelöscht" msgstr "Schießkladde erfolgreich gelöscht"
#: lib/cannery_web/live/range_live/form_component.ex:55
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
#: lib/cannery_web/live/range_live/form_component.ex:55
msgid "Shot records updated successfully" msgid "Shot records updated successfully"
msgstr "Schießkladde erfolgreich aktualisiert" msgstr "Schießkladde erfolgreich aktualisiert"
#: lib/cannery_web/controllers/user_confirmation_controller.ex:38
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
#: lib/cannery_web/controllers/user_confirmation_controller.ex:38
msgid "%{email} confirmed successfully." msgid "%{email} confirmed successfully."
msgstr "%{email} erfolgreich bestätigt." msgstr "%{email} erfolgreich bestätigt."
#: lib/cannery_web/components/move_ammo_group_component.ex:53
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
#: lib/cannery_web/components/move_ammo_group_component.ex:53
msgid "Ammo moved to %{name} successfully" msgid "Ammo moved to %{name} successfully"
msgstr "Munition erfolgreich zu %{name} verschoben" msgstr "Munition erfolgreich zu %{name} verschoben"
#: lib/cannery_web/live/invite_live/index.ex:123
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
#: lib/cannery_web/live/invite_live/index.ex:121
msgid "Copied to clipboard" msgid "Copied to clipboard"
msgstr "Der Zwischenablage hinzugefügt" msgstr "Der Zwischenablage hinzugefügt"
#: lib/cannery_web/live/container_live/edit_tags_component.ex:58
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
#: lib/cannery_web/live/container_live/edit_tags_component.ex:58
msgid "%{name} removed successfully" msgid "%{name} removed successfully"
msgstr "%{name} erfolgreich entfernt" msgstr "%{name} erfolgreich entfernt"
#: lib/cannery_web/live/ammo_group_live/index.html.heex:15
#: lib/cannery_web/live/ammo_group_live/index.html.heex:33
#, elixir-autogen, elixir-format #, 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:28
msgid "You'll need to" msgid "You'll need to"
msgstr "Sie müssen" msgstr "Sie müssen"
#: lib/cannery_web/live/ammo_group_live/form_component.html.heex:67
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
#: lib/cannery_web/live/ammo_group_live/form_component.html.heex:67
msgid "Creating..." msgid "Creating..."
msgstr "Erstellen..." msgstr "Erstellen..."
#: lib/cannery_web/live/ammo_group_live/form_component.ex:147
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
msgid "Ammo group created successfully" #: lib/cannery_web/templates/user_settings/edit.html.heex:136
msgid_plural "Ammo groups created successfully" msgid "Are you sure you want to change your language?"
msgstr[0] "Munitionsgruppe erfolgreich erstellt" msgstr "Möchten Sie die Sprache wechseln?"
msgstr[1] "Munitionsgruppen erfolgreich erstellt"
#, elixir-autogen, elixir-format
#: lib/cannery_web/controllers/user_settings_controller.ex:65
msgid "Language updated successfully."
msgstr "Spracheinstellung gespeichert."
#, elixir-autogen, elixir-format, fuzzy
#: lib/cannery_web/live/ammo_group_live/show.ex:50
msgid "Ammo deleted succesfully"
msgstr "Munitionsgruppe erfolgreich gelöscht"
#, elixir-autogen, elixir-format, fuzzy
#: lib/cannery_web/live/range_live/index.ex:68
msgid "Ammo unstaged succesfully"
msgstr "Munition erfolgreich demarkiert"
#, elixir-autogen, elixir-format, fuzzy
#: lib/cannery_web/live/ammo_group_live/form_component.ex:118
msgid "Ammo updated successfully"
msgstr "Munitionsgruppe erfolgreich aktualisiert"
#, elixir-autogen, elixir-format, fuzzy
#: lib/cannery_web/live/ammo_group_live/form_component.ex:177
msgid "Ammo added successfully"
msgid_plural "Ammo added successfully"
msgstr[0] "Munitionsgruppe erfolgreich aktualisiert"
msgstr[1] "Munitionsgruppe erfolgreich aktualisiert"
#, elixir-autogen, elixir-format, fuzzy
#: lib/cannery_web/live/ammo_type_live/index.ex:140
#: lib/cannery_web/live/ammo_type_live/show.html.heex:27
msgid "Are you sure you want to delete %{name}? This will delete all %{name} type ammo as well!"
msgstr "Sind Sie sicher, dass sie %{name} löschen möchten?"

View File

@ -11,12 +11,12 @@ msgid ""
msgstr "" msgstr ""
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
#: lib/cannery_web/live/home_live.ex:61 #: lib/cannery_web/live/home_live.ex:64
msgid "%{name} lets you easily keep an eye on your ammo levels before and after range day" msgid "%{name} lets you easily keep an eye on your ammo levels before and after range day"
msgstr "" msgstr ""
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
#: lib/cannery_web/live/home_live.ex:83 #: lib/cannery_web/live/home_live.ex:86
msgid "Access from any internet-capable device" msgid "Access from any internet-capable device"
msgstr "" msgstr ""
@ -26,31 +26,31 @@ msgid "Admins"
msgstr "" msgstr ""
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
#: lib/cannery_web/live/home_live.ex:97 #: lib/cannery_web/live/home_live.ex:100
msgid "Admins:" msgid "Admins:"
msgstr "" msgstr ""
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
#: lib/cannery_web/components/topbar.ex:50 #: lib/cannery_web/components/topbar.ex:62
#: lib/cannery_web/live/ammo_group_live/index.html.heex:3 #: lib/cannery_web/live/ammo_group_live/index.html.heex:3
#: lib/cannery_web/live/range_live/index.ex:82 #: lib/cannery_web/live/range_live/index.ex:80
msgid "Ammo" msgid "Ammo"
msgstr "" msgstr ""
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
#: lib/cannery_web/live/ammo_group_live/form_component.html.heex:21 #: lib/cannery_web/live/ammo_group_live/form_component.html.heex:21
#: lib/cannery_web/live/ammo_group_live/index.ex:80 #: lib/cannery_web/live/ammo_group_live/index.ex:81
msgid "Ammo type" msgid "Ammo type"
msgstr "" msgstr ""
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
#: lib/cannery_web/live/ammo_type_live/index.ex:87 #: lib/cannery_web/live/ammo_type_live/index.ex:87
#: lib/cannery_web/live/ammo_type_live/show.html.heex:92 #: lib/cannery_web/live/ammo_type_live/show.html.heex:100
msgid "Average Price paid" msgid "Average Price paid"
msgstr "" msgstr ""
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
#: lib/cannery_web/live/tag_live/form_component.ex:54 #: lib/cannery_web/live/tag_live/form_component.ex:79
msgid "Background color" msgid "Background color"
msgstr "" msgstr ""
@ -104,13 +104,13 @@ msgstr ""
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
#: lib/cannery_web/components/move_ammo_group_component.ex:67 #: lib/cannery_web/components/move_ammo_group_component.ex:67
#: lib/cannery_web/live/ammo_group_live/form_component.html.heex:48 #: lib/cannery_web/live/ammo_group_live/form_component.html.heex:48
#: lib/cannery_web/live/ammo_group_live/index.ex:85 #: lib/cannery_web/live/ammo_group_live/index.ex:86
msgid "Container" msgid "Container"
msgstr "" msgstr ""
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
#: lib/cannery_web/components/topbar.ex:44 #: lib/cannery_web/components/topbar.ex:50
#: lib/cannery_web/live/container_live/index.ex:38 #: lib/cannery_web/live/container_live/index.ex:36
#: lib/cannery_web/live/container_live/index.html.heex:3 #: lib/cannery_web/live/container_live/index.html.heex:3
msgid "Containers" msgid "Containers"
msgstr "" msgstr ""
@ -124,7 +124,7 @@ msgstr ""
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
#: lib/cannery_web/live/ammo_group_live/form_component.html.heex:27 #: lib/cannery_web/live/ammo_group_live/form_component.html.heex:27
#: lib/cannery_web/live/ammo_group_live/index.ex:81 #: lib/cannery_web/live/ammo_group_live/index.ex:82
msgid "Count" msgid "Count"
msgstr "" msgstr ""
@ -152,29 +152,28 @@ msgid "Disable"
msgstr "" msgstr ""
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
#: lib/cannery_web/live/home_live.ex:58 #: lib/cannery_web/live/home_live.ex:61
msgid "Easy to Use:" msgid "Easy to Use:"
msgstr "" msgstr ""
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
#: lib/cannery_web/live/ammo_group_live/index.ex:38 #: lib/cannery_web/live/ammo_group_live/index.ex:38
#: lib/cannery_web/live/ammo_group_live/show.ex:42
msgid "Edit Ammo group" msgid "Edit Ammo group"
msgstr "" msgstr ""
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
#: lib/cannery_web/live/ammo_type_live/index.ex:23 #: lib/cannery_web/live/ammo_type_live/index.ex:23
#: lib/cannery_web/live/ammo_type_live/show.ex:47 #: lib/cannery_web/live/ammo_type_live/show.ex:45
msgid "Edit Ammo type" msgid "Edit Ammo type"
msgstr "" msgstr ""
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
#: lib/cannery_web/live/invite_live/index.ex:35 #: lib/cannery_web/live/invite_live/index.ex:33
msgid "Edit Invite" msgid "Edit Invite"
msgstr "" msgstr ""
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
#: lib/cannery_web/live/tag_live/index.ex:23 #: lib/cannery_web/live/tag_live/index.ex:21
msgid "Edit Tag" msgid "Edit Tag"
msgstr "" msgstr ""
@ -208,7 +207,7 @@ msgid "Incendiary"
msgstr "" msgstr ""
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
#: lib/cannery_web/live/home_live.ex:92 #: lib/cannery_web/live/home_live.ex:95
msgid "Instance Information" msgid "Instance Information"
msgstr "" msgstr ""
@ -218,13 +217,13 @@ msgid "Invite Disabled"
msgstr "" msgstr ""
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
#: lib/cannery_web/live/home_live.ex:123 #: lib/cannery_web/live/home_live.ex:126
msgid "Invite Only" msgid "Invite Only"
msgstr "" msgstr ""
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
#: lib/cannery_web/components/topbar.ex:69 #: lib/cannery_web/components/topbar.ex:75
#: lib/cannery_web/live/invite_live/index.ex:43 #: lib/cannery_web/live/invite_live/index.ex:41
#: lib/cannery_web/live/invite_live/index.html.heex:3 #: lib/cannery_web/live/invite_live/index.html.heex:3
msgid "Invites" msgid "Invites"
msgstr "" msgstr ""
@ -251,11 +250,6 @@ msgstr ""
msgid "Magazine, Clip, Ammo Box, etc" msgid "Magazine, Clip, Ammo Box, etc"
msgstr "" msgstr ""
#, elixir-autogen, elixir-format
#: lib/cannery_web/components/topbar.ex:56
msgid "Manage"
msgstr ""
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
#: lib/cannery_web/live/ammo_type_live/form_component.html.heex:148 #: lib/cannery_web/live/ammo_type_live/form_component.html.heex:148
#: lib/cannery_web/live/ammo_type_live/index.ex:73 #: lib/cannery_web/live/ammo_type_live/index.ex:73
@ -278,7 +272,7 @@ msgstr ""
#: lib/cannery_web/live/ammo_type_live/index.ex:51 #: lib/cannery_web/live/ammo_type_live/index.ex:51
#: lib/cannery_web/live/container_live/form_component.html.heex:20 #: lib/cannery_web/live/container_live/form_component.html.heex:20
#: lib/cannery_web/live/invite_live/form_component.html.heex:20 #: lib/cannery_web/live/invite_live/form_component.html.heex:20
#: lib/cannery_web/live/tag_live/form_component.ex:50 #: lib/cannery_web/live/tag_live/form_component.ex:75
msgid "Name" msgid "Name"
msgstr "" msgstr ""
@ -288,17 +282,17 @@ msgid "New Ammo type"
msgstr "" msgstr ""
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
#: lib/cannery_web/live/container_live/index.ex:33 #: lib/cannery_web/live/container_live/index.ex:31
msgid "New Container" msgid "New Container"
msgstr "" msgstr ""
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
#: lib/cannery_web/live/invite_live/index.ex:39 #: lib/cannery_web/live/invite_live/index.ex:37
msgid "New Invite" msgid "New Invite"
msgstr "" msgstr ""
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
#: lib/cannery_web/live/tag_live/index.ex:29 #: lib/cannery_web/live/tag_live/index.ex:27
msgid "New Tag" msgid "New Tag"
msgstr "" msgstr ""
@ -313,15 +307,10 @@ msgid "No Ammo Types"
msgstr "" msgstr ""
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
#: lib/cannery_web/live/ammo_type_live/show.html.heex:112 #: lib/cannery_web/live/ammo_type_live/show.html.heex:120
msgid "No ammo for this type" msgid "No ammo for this type"
msgstr "" msgstr ""
#, elixir-autogen, elixir-format
#: lib/cannery_web/live/container_live/show.html.heex:78
msgid "No ammo groups in this container"
msgstr ""
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
#: lib/cannery_web/live/container_live/index.html.heex:8 #: lib/cannery_web/live/container_live/index.html.heex:8
msgid "No containers" msgid "No containers"
@ -341,9 +330,9 @@ msgstr ""
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
#: lib/cannery_web/components/add_shot_group_component.html.heex:30 #: lib/cannery_web/components/add_shot_group_component.html.heex:30
#: lib/cannery_web/live/ammo_group_live/form_component.html.heex:41 #: lib/cannery_web/live/ammo_group_live/form_component.html.heex:41
#: lib/cannery_web/live/ammo_group_live/show.ex:90 #: lib/cannery_web/live/ammo_group_live/show.ex:88
#: lib/cannery_web/live/range_live/form_component.html.heex:29 #: lib/cannery_web/live/range_live/form_component.html.heex:29
#: lib/cannery_web/live/range_live/index.ex:84 #: lib/cannery_web/live/range_live/index.ex:82
msgid "Notes" msgid "Notes"
msgstr "" msgstr ""
@ -367,12 +356,12 @@ msgstr ""
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
#: lib/cannery_web/live/ammo_group_live/form_component.html.heex:34 #: lib/cannery_web/live/ammo_group_live/form_component.html.heex:34
#: lib/cannery_web/live/ammo_group_live/index.ex:82 #: lib/cannery_web/live/ammo_group_live/index.ex:83
msgid "Price paid" msgid "Price paid"
msgstr "" msgstr ""
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
#: lib/cannery_web/components/ammo_group_card.ex:42 #: lib/cannery_web/components/ammo_group_card.ex:47
msgid "Price paid:" msgid "Price paid:"
msgstr "" msgstr ""
@ -384,17 +373,17 @@ msgid "Primer type"
msgstr "" msgstr ""
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
#: lib/cannery_web/live/home_live.ex:122 #: lib/cannery_web/live/home_live.ex:125
msgid "Public Signups" msgid "Public Signups"
msgstr "" msgstr ""
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
#: lib/cannery_web/live/home_live.ex:70 #: lib/cannery_web/live/home_live.ex:73
msgid "Secure:" msgid "Secure:"
msgstr "" msgstr ""
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
#: lib/cannery_web/live/home_live.ex:73 #: lib/cannery_web/live/home_live.ex:76
msgid "Self-host your own instance, or use an instance from someone you trust." msgid "Self-host your own instance, or use an instance from someone you trust."
msgstr "" msgstr ""
@ -410,17 +399,12 @@ msgid "Settings"
msgstr "" msgstr ""
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
#: lib/cannery_web/live/ammo_group_live/show.ex:41 #: lib/cannery_web/live/ammo_type_live/show.ex:44
msgid "Show Ammo group"
msgstr ""
#, elixir-autogen, elixir-format
#: lib/cannery_web/live/ammo_type_live/show.ex:46
msgid "Show Ammo type" msgid "Show Ammo type"
msgstr "" msgstr ""
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
#: lib/cannery_web/live/home_live.ex:80 #: lib/cannery_web/live/home_live.ex:83
msgid "Simple:" msgid "Simple:"
msgstr "" msgstr ""
@ -430,13 +414,13 @@ msgid "Steel"
msgstr "" msgstr ""
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
#: lib/cannery_web/live/ammo_group_live/show.html.heex:98 #: lib/cannery_web/live/ammo_group_live/show.html.heex:103
msgid "Stored in" msgid "Stored in"
msgstr "" msgstr ""
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
#: lib/cannery_web/components/topbar.ex:38 #: lib/cannery_web/components/topbar.ex:44
#: lib/cannery_web/live/tag_live/index.ex:34 #: lib/cannery_web/live/tag_live/index.ex:32
#: lib/cannery_web/live/tag_live/index.html.heex:3 #: lib/cannery_web/live/tag_live/index.html.heex:3
msgid "Tags" msgid "Tags"
msgstr "" msgstr ""
@ -447,20 +431,15 @@ msgid "Tags can be added to your containers to help you organize"
msgstr "" msgstr ""
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
#: lib/cannery_web/live/tag_live/form_component.ex:60 #: lib/cannery_web/live/tag_live/form_component.ex:85
msgid "Text color" msgid "Text color"
msgstr "" msgstr ""
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
#: lib/cannery_web/live/home_live.ex:49 #: lib/cannery_web/live/home_live.ex:52
msgid "The self-hosted firearm tracker website" msgid "The self-hosted firearm tracker website"
msgstr "" msgstr ""
#, elixir-autogen, elixir-format
#: lib/cannery_web/live/ammo_group_live/show.html.heex:103
msgid "This ammo group is not in a container"
msgstr ""
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
#: lib/cannery_web/live/ammo_type_live/form_component.html.heex:132 #: lib/cannery_web/live/ammo_type_live/form_component.html.heex:132
#: lib/cannery_web/live/ammo_type_live/index.ex:69 #: lib/cannery_web/live/ammo_type_live/index.ex:69
@ -496,23 +475,23 @@ msgid "Uses left"
msgstr "" msgstr ""
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
#: lib/cannery_web/live/home_live.ex:45 #: lib/cannery_web/live/home_live.ex:48
msgid "Welcome to %{name}" msgid "Welcome to %{name}"
msgstr "" msgstr ""
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
#: lib/cannery_web/live/home_live.ex:74 #: lib/cannery_web/live/home_live.ex:77
msgid "Your data stays with you, period" msgid "Your data stays with you, period"
msgstr "" msgstr ""
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
#: lib/cannery_web/live/container_live/show.html.heex:49 #: lib/cannery_web/live/container_live/show.html.heex:61
msgid "No tags for this container" msgid "No tags for this container"
msgstr "" msgstr ""
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
#: lib/cannery_web/components/topbar.ex:62 #: lib/cannery_web/components/topbar.ex:68
#: lib/cannery_web/live/ammo_group_live/index.ex:84 #: lib/cannery_web/live/ammo_group_live/index.ex:85
msgid "Range" msgid "Range"
msgstr "" msgstr ""
@ -522,8 +501,8 @@ msgid "Range day"
msgstr "" msgstr ""
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
#: lib/cannery_web/live/ammo_group_live/show.ex:91 #: lib/cannery_web/live/ammo_group_live/show.ex:89
#: lib/cannery_web/live/range_live/index.ex:85 #: lib/cannery_web/live/range_live/index.ex:83
msgid "Date" msgid "Date"
msgstr "" msgstr ""
@ -538,13 +517,13 @@ msgid "No ammo staged"
msgstr "" msgstr ""
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
#: lib/cannery_web/live/ammo_group_live/show.html.heex:77 #: lib/cannery_web/live/ammo_group_live/show.html.heex:82
#: lib/cannery_web/live/range_live/index.html.heex:33 #: lib/cannery_web/live/range_live/index.html.heex:33
msgid "Stage for range" msgid "Stage for range"
msgstr "" msgstr ""
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
#: lib/cannery_web/live/ammo_group_live/show.html.heex:76 #: lib/cannery_web/live/ammo_group_live/show.html.heex:81
#: lib/cannery_web/live/range_live/index.html.heex:32 #: lib/cannery_web/live/range_live/index.html.heex:32
msgid "Unstage from range" msgid "Unstage from range"
msgstr "" msgstr ""
@ -555,11 +534,6 @@ msgstr ""
msgid "Record shots" msgid "Record shots"
msgstr "" msgstr ""
#, elixir-autogen, elixir-format
#: lib/cannery_web/live/ammo_type_live/index.html.heex:3
msgid "Ammo Types"
msgstr ""
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
#: lib/cannery_web/live/ammo_group_live/index.ex:49 #: lib/cannery_web/live/ammo_group_live/index.ex:49
msgid "Ammo groups" msgid "Ammo groups"
@ -572,13 +546,13 @@ msgid "Date (UTC)"
msgstr "" msgstr ""
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
#: lib/cannery_web/live/ammo_group_live/show.ex:39 #: lib/cannery_web/live/ammo_group_live/show.ex:37
#: lib/cannery_web/live/range_live/index.ex:34 #: lib/cannery_web/live/range_live/index.ex:32
msgid "Edit Shot Records" msgid "Edit Shot Records"
msgstr "" msgstr ""
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
#: lib/cannery_web/live/range_live/index.ex:40 #: lib/cannery_web/live/range_live/index.ex:38
msgid "New Shot Records" msgid "New Shot Records"
msgstr "" msgstr ""
@ -593,19 +567,18 @@ msgid "Rounds left"
msgstr "" msgstr ""
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
#: lib/cannery_web/live/ammo_group_live/show.ex:89 #: lib/cannery_web/live/ammo_group_live/show.ex:87
#: lib/cannery_web/live/range_live/index.ex:83 #: lib/cannery_web/live/range_live/index.ex:81
msgid "Rounds shot" msgid "Rounds shot"
msgstr "" msgstr ""
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
#: lib/cannery_web/live/range_live/index.ex:46 #: lib/cannery_web/live/range_live/index.ex:44
msgid "Shot Records" msgid "Shot Records"
msgstr "" msgstr ""
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
#: lib/cannery_web/live/ammo_group_live/index.ex:32 #: lib/cannery_web/live/ammo_group_live/index.ex:32
#: lib/cannery_web/live/ammo_group_live/show.ex:40
msgid "Move Ammo group" msgid "Move Ammo group"
msgstr "" msgstr ""
@ -625,12 +598,12 @@ msgid "Shot log"
msgstr "" msgstr ""
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
#: lib/cannery_web/components/ammo_group_card.ex:43 #: lib/cannery_web/components/ammo_group_card.ex:48
#: lib/cannery_web/live/ammo_group_live/index.ex:117 #: lib/cannery_web/live/ammo_group_live/index.ex:125
#: lib/cannery_web/live/ammo_group_live/show.html.heex:32 #: lib/cannery_web/live/ammo_group_live/show.html.heex:37
#: lib/cannery_web/live/ammo_group_live/show.html.heex:39 #: lib/cannery_web/live/ammo_group_live/show.html.heex:44
#: lib/cannery_web/live/ammo_type_live/index.ex:114 #: lib/cannery_web/live/ammo_type_live/index.ex:114
#: lib/cannery_web/live/ammo_type_live/show.html.heex:96 #: lib/cannery_web/live/ammo_type_live/show.html.heex:104
msgid "$%{amount}" msgid "$%{amount}"
msgstr "" msgstr ""
@ -675,28 +648,28 @@ msgid "UPC"
msgstr "" msgstr ""
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
#: lib/cannery_web/templates/user_settings/edit.html.heex:80 #: lib/cannery_web/templates/user_settings/edit.html.heex:78
msgid "Confirm new password" msgid "Confirm new password"
msgstr "" msgstr ""
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
#: lib/cannery_web/templates/user_settings/edit.html.heex:33 #: lib/cannery_web/templates/user_settings/edit.html.heex:32
#: lib/cannery_web/templates/user_settings/edit.html.heex:89 #: lib/cannery_web/templates/user_settings/edit.html.heex:87
msgid "Current password" msgid "Current password"
msgstr "" msgstr ""
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
#: lib/cannery_web/templates/user_settings/edit.html.heex:73 #: lib/cannery_web/templates/user_settings/edit.html.heex:71
msgid "New password" msgid "New password"
msgstr "" msgstr ""
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
#: lib/cannery_web/live/ammo_group_live/index.ex:131 #: lib/cannery_web/live/ammo_group_live/index.ex:148
msgid "Stage" msgid "Stage"
msgstr "" msgstr ""
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
#: lib/cannery_web/live/ammo_group_live/index.ex:131 #: lib/cannery_web/live/ammo_group_live/index.ex:148
msgid "Unstage" msgid "Unstage"
msgstr "" msgstr ""
@ -718,45 +691,46 @@ msgid "Loading..."
msgstr "" msgstr ""
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
#: lib/cannery_web/live/container_live/index.ex:29 #: lib/cannery_web/live/container_live/index.ex:27
#: lib/cannery_web/live/container_live/show.ex:97 #: lib/cannery_web/live/container_live/show.ex:95
msgid "Edit %{name}" msgid "Edit %{name}"
msgstr "" msgstr ""
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
#: lib/cannery_web/live/container_live/index.ex:48 #: lib/cannery_web/live/container_live/index.ex:46
#: lib/cannery_web/live/container_live/show.ex:98 #: lib/cannery_web/live/container_live/show.ex:96
msgid "Edit %{name} tags" msgid "Edit %{name} tags"
msgstr "" msgstr ""
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
#: lib/cannery_web/components/container_card.ex:50 #: lib/cannery_web/components/container_card.ex:55
#: lib/cannery_web/live/container_live/show.html.heex:32
msgid "Rounds:" msgid "Rounds:"
msgstr "" msgstr ""
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
#: lib/cannery_web/live/container_live/show.ex:96 #: lib/cannery_web/live/container_live/show.ex:94
msgid "Show %{name}" msgid "Show %{name}"
msgstr "" msgstr ""
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
#: lib/cannery_web/live/ammo_type_live/index.ex:113 #: lib/cannery_web/live/ammo_type_live/index.ex:113
#: lib/cannery_web/live/ammo_type_live/show.html.heex:102 #: lib/cannery_web/live/ammo_type_live/show.html.heex:110
msgid "No cost information" msgid "No cost information"
msgstr "" msgstr ""
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
#: lib/cannery_web/live/ammo_group_live/index.ex:83 #: lib/cannery_web/live/ammo_group_live/index.ex:84
msgid "% left" msgid "% left"
msgstr "" msgstr ""
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
#: lib/cannery_web/live/ammo_group_live/show.html.heex:38 #: lib/cannery_web/live/ammo_group_live/show.html.heex:43
msgid "Current value:" msgid "Current value:"
msgstr "" msgstr ""
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
#: lib/cannery_web/live/ammo_group_live/show.html.heex:31 #: lib/cannery_web/live/ammo_group_live/show.html.heex:36
msgid "Original cost:" msgid "Original cost:"
msgstr "" msgstr ""
@ -771,7 +745,7 @@ msgid "Percentage left:"
msgstr "" msgstr ""
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
#: lib/cannery_web/live/ammo_group_live/show.html.heex:111 #: lib/cannery_web/live/ammo_group_live/show.html.heex:116
msgid "Rounds used" msgid "Rounds used"
msgstr "" msgstr ""
@ -816,8 +790,8 @@ msgid "Reset your password"
msgstr "" msgstr ""
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
#: lib/cannery_web/live/ammo_group_live/show.ex:38 #: lib/cannery_web/live/ammo_group_live/show.ex:36
#: lib/cannery_web/live/range_live/index.ex:28 #: lib/cannery_web/live/range_live/index.ex:26
msgid "Record Shots" msgid "Record Shots"
msgstr "" msgstr ""
@ -830,3 +804,116 @@ msgstr ""
#: lib/cannery_web/live/ammo_type_live/index.ex:34 #: lib/cannery_web/live/ammo_type_live/index.ex:34
msgid "Ammo types" msgid "Ammo types"
msgstr "" msgstr ""
#, elixir-autogen, elixir-format
#: lib/cannery_web/live/ammo_group_live/index.ex:87
msgid "Added on"
msgstr ""
#, elixir-autogen, elixir-format
#: lib/cannery_web/components/ammo_group_card.ex:41
#: lib/cannery_web/live/ammo_group_live/show.html.heex:30
#: lib/cannery_web/live/ammo_type_live/show.html.heex:91
msgid "Added on:"
msgstr ""
#, elixir-autogen, elixir-format
#: lib/cannery_web/components/user_card.ex:30
msgid "User registered on"
msgstr ""
#, elixir-autogen, elixir-format
#: lib/cannery_web/templates/user_registration/new.html.heex:37
#: lib/cannery_web/templates/user_settings/edit.html.heex:129
msgid "English"
msgstr ""
#, elixir-autogen, elixir-format
#: lib/cannery_web/templates/user_registration/new.html.heex:37
#: lib/cannery_web/templates/user_settings/edit.html.heex:129
msgid "French"
msgstr ""
#, elixir-autogen, elixir-format
#: lib/cannery_web/templates/user_registration/new.html.heex:37
#: lib/cannery_web/templates/user_settings/edit.html.heex:129
msgid "German"
msgstr ""
#, elixir-autogen, elixir-format
#: lib/cannery_web/templates/user_registration/new.html.heex:33
msgid "Language"
msgstr ""
#, elixir-autogen, elixir-format
#: lib/cannery_web/live/home_live.ex:147
msgid "Get involved!"
msgstr ""
#, elixir-autogen, elixir-format
#: lib/cannery_web/live/home_live.ex:164
msgid "Help translate"
msgstr ""
#, elixir-autogen, elixir-format
#: lib/cannery_web/live/home_live.ex:173
msgid "Report bugs or request features"
msgstr ""
#, elixir-autogen, elixir-format
#: lib/cannery_web/live/home_live.ex:155
msgid "View the source code"
msgstr ""
#, elixir-autogen, elixir-format
#: lib/cannery_web/components/topbar.ex:56
#: lib/cannery_web/live/ammo_type_live/index.html.heex:3
msgid "Catalog"
msgstr ""
#, elixir-autogen, elixir-format
#: lib/cannery_web/live/ammo_group_live/show.ex:40
msgid "Edit Ammo"
msgstr ""
#, elixir-autogen, elixir-format
#: lib/cannery_web/live/ammo_group_live/show.ex:38
msgid "Move Ammo"
msgstr ""
#, elixir-autogen, elixir-format
#: lib/cannery_web/live/container_live/show.html.heex:90
msgid "No ammo in this container"
msgstr ""
#, elixir-autogen, elixir-format
#: lib/cannery_web/live/ammo_group_live/show.ex:39
msgid "Show Ammo"
msgstr ""
#, elixir-autogen, elixir-format
#: lib/cannery_web/live/ammo_group_live/show.html.heex:108
msgid "This ammo is not in a container"
msgstr ""
#, elixir-autogen, elixir-format
#: lib/cannery_web/components/container_card.ex:50
#: lib/cannery_web/live/container_live/show.html.heex:27
msgid "Packs:"
msgstr ""
#, elixir-autogen, elixir-format
#: lib/cannery_web/components/topbar.ex:24
#: lib/cannery_web/live/home_live.ex:42
msgid "Cannery logo"
msgstr ""
#, elixir-autogen, elixir-format
#: lib/cannery_web/live/home_live.ex:44
msgid "isn't he cute >:3"
msgstr ""
#, elixir-autogen, elixir-format
#: lib/cannery_web/live/invite_live/form_component.html.heex:28
msgid "Leave \"Uses left\" blank to make invite unlimited"
msgstr ""

View File

@ -13,11 +13,12 @@ msgstr ""
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
#: lib/cannery_web/live/ammo_group_live/index.ex:44 #: lib/cannery_web/live/ammo_group_live/index.ex:44
#: lib/cannery_web/live/ammo_group_live/index.html.heex:42
msgid "Add Ammo" msgid "Add Ammo"
msgstr "" msgstr ""
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
#: lib/cannery_web/live/ammo_group_live/index.html.heex:24 #: lib/cannery_web/live/ammo_group_live/index.html.heex:37
msgid "Add your first box!" msgid "Add your first box!"
msgstr "" msgstr ""
@ -32,14 +33,14 @@ msgid "Add your first type!"
msgstr "" msgstr ""
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
#: lib/cannery_web/templates/user_settings/edit.html.heex:16 #: lib/cannery_web/templates/user_settings/edit.html.heex:15
#: lib/cannery_web/templates/user_settings/edit.html.heex:45 #: lib/cannery_web/templates/user_settings/edit.html.heex:44
msgid "Change email" msgid "Change email"
msgstr "" msgstr ""
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
#: lib/cannery_web/templates/user_settings/edit.html.heex:60 #: lib/cannery_web/templates/user_settings/edit.html.heex:58
#: lib/cannery_web/templates/user_settings/edit.html.heex:101 #: lib/cannery_web/templates/user_settings/edit.html.heex:99
msgid "Change password" msgid "Change password"
msgstr "" msgstr ""
@ -49,12 +50,12 @@ msgid "Create Invite"
msgstr "" msgstr ""
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
#: lib/cannery_web/templates/user_settings/edit.html.heex:108 #: lib/cannery_web/templates/user_settings/edit.html.heex:142
msgid "Delete User" msgid "Delete User"
msgstr "" msgstr ""
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
#: lib/cannery_web/templates/user_registration/new.html.heex:43 #: 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
msgid "Forgot your password?" msgid "Forgot your password?"
@ -66,9 +67,9 @@ msgid "Invite someone new!"
msgstr "" msgstr ""
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
#: lib/cannery_web/components/topbar.ex:108 #: 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:39 #: lib/cannery_web/templates/user_registration/new.html.heex:48
#: lib/cannery_web/templates/user_reset_password/edit.html.heex:48 #: lib/cannery_web/templates/user_reset_password/edit.html.heex:48
#: 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
@ -81,11 +82,6 @@ msgstr ""
msgid "Make your first tag!" msgid "Make your first tag!"
msgstr "" msgstr ""
#, elixir-autogen, elixir-format
#: lib/cannery_web/live/ammo_group_live/index.html.heex:42
msgid "New Ammo group"
msgstr ""
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
#: lib/cannery_web/live/ammo_type_live/index.html.heex:17 #: lib/cannery_web/live/ammo_type_live/index.html.heex:17
msgid "New Ammo type" msgid "New Ammo type"
@ -102,10 +98,10 @@ msgid "New Tag"
msgstr "" msgstr ""
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
#: lib/cannery_web/components/topbar.ex:101 #: lib/cannery_web/components/topbar.ex:105
#: lib/cannery_web/templates/user_confirmation/new.html.heex:25 #: lib/cannery_web/templates/user_confirmation/new.html.heex:25
#: lib/cannery_web/templates/user_registration/new.html.heex:3 #: lib/cannery_web/templates/user_registration/new.html.heex:3
#: lib/cannery_web/templates/user_registration/new.html.heex:33 #: 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:43
#: lib/cannery_web/templates/user_reset_password/new.html.heex:25 #: lib/cannery_web/templates/user_reset_password/new.html.heex:25
#: lib/cannery_web/templates/user_session/new.html.heex:40 #: lib/cannery_web/templates/user_session/new.html.heex:40
@ -129,9 +125,9 @@ msgstr ""
#: lib/cannery_web/live/ammo_group_live/form_component.html.heex:73 #: lib/cannery_web/live/ammo_group_live/form_component.html.heex:73
#: lib/cannery_web/live/ammo_type_live/form_component.html.heex:156 #: lib/cannery_web/live/ammo_type_live/form_component.html.heex:156
#: lib/cannery_web/live/container_live/form_component.html.heex:50 #: lib/cannery_web/live/container_live/form_component.html.heex:50
#: lib/cannery_web/live/invite_live/form_component.html.heex:28 #: lib/cannery_web/live/invite_live/form_component.html.heex:31
#: lib/cannery_web/live/range_live/form_component.html.heex:40 #: lib/cannery_web/live/range_live/form_component.html.heex:40
#: lib/cannery_web/live/tag_live/form_component.ex:66 #: lib/cannery_web/live/tag_live/form_component.ex:91
msgid "Save" msgid "Save"
msgstr "" msgstr ""
@ -141,7 +137,7 @@ msgid "Send instructions to reset password"
msgstr "" msgstr ""
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
#: lib/cannery_web/live/container_live/show.html.heex:53 #: lib/cannery_web/live/container_live/show.html.heex:65
msgid "Why not add one?" msgid "Why not add one?"
msgstr "" msgstr ""
@ -161,24 +157,19 @@ msgid "Why not get some ready to shoot?"
msgstr "" msgstr ""
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
#: lib/cannery_web/live/ammo_group_live/index.ex:133 #: lib/cannery_web/live/ammo_group_live/index.ex:151
#: lib/cannery_web/live/ammo_group_live/show.html.heex:86 #: lib/cannery_web/live/ammo_group_live/show.html.heex:91
#: lib/cannery_web/live/range_live/index.html.heex:36 #: lib/cannery_web/live/range_live/index.html.heex:36
msgid "Record shots" msgid "Record shots"
msgstr "" msgstr ""
#, elixir-autogen, elixir-format
#: lib/cannery_web/live/ammo_group_live/show.html.heex:50
msgid "Ammo Details"
msgstr ""
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
#: lib/cannery_web/components/move_ammo_group_component.ex:89 #: lib/cannery_web/components/move_ammo_group_component.ex:89
msgid "Add another container!" msgid "Add another container!"
msgstr "" msgstr ""
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
#: lib/cannery_web/live/ammo_group_live/show.html.heex:80 #: lib/cannery_web/live/ammo_group_live/show.html.heex:85
msgid "Move containers" msgid "Move containers"
msgstr "" msgstr ""
@ -193,8 +184,7 @@ msgid "Copy to clipboard"
msgstr "" msgstr ""
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
#: lib/cannery_web/live/ammo_group_live/index.html.heex:18 #: lib/cannery_web/live/ammo_group_live/index.html.heex:20
#: lib/cannery_web/live/ammo_group_live/index.html.heex:36
msgid "add a container first" msgid "add a container first"
msgstr "" msgstr ""
@ -202,3 +192,23 @@ msgstr ""
#: lib/cannery_web/live/ammo_group_live/form_component.html.heex:66 #: lib/cannery_web/live/ammo_group_live/form_component.html.heex:66
msgid "Create" msgid "Create"
msgstr "" msgstr ""
#, elixir-autogen, elixir-format
#: lib/cannery_web/templates/user_settings/edit.html.heex:113
msgid "Change Language"
msgstr ""
#, elixir-autogen, elixir-format
#: lib/cannery_web/templates/user_settings/edit.html.heex:134
msgid "Change language"
msgstr ""
#, elixir-autogen, elixir-format
#: lib/cannery_web/live/ammo_group_live/show.html.heex:55
msgid "View in Catalog"
msgstr ""
#, elixir-autogen, elixir-format
#: lib/cannery_web/live/ammo_group_live/index.html.heex:31
msgid "add an ammo type first"
msgstr ""

View File

@ -12,12 +12,12 @@ msgstr ""
"Plural-Forms: nplurals=2\n" "Plural-Forms: nplurals=2\n"
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
#: lib/cannery_web/live/home_live.ex:63 #: lib/cannery_web/live/home_live.ex:64
msgid "%{name} lets you easily keep an eye on your ammo levels before and after range day" msgid "%{name} lets you easily keep an eye on your ammo levels before and after range day"
msgstr "" msgstr ""
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
#: lib/cannery_web/live/home_live.ex:85 #: lib/cannery_web/live/home_live.ex:86
msgid "Access from any internet-capable device" msgid "Access from any internet-capable device"
msgstr "" msgstr ""
@ -27,37 +27,38 @@ msgid "Admins"
msgstr "" msgstr ""
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
#: lib/cannery_web/live/home_live.ex:99 #: lib/cannery_web/live/home_live.ex:100
msgid "Admins:" msgid "Admins:"
msgstr "" msgstr ""
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
#: lib/cannery_web/components/topbar.ex:52 #: lib/cannery_web/components/topbar.ex:62
#: lib/cannery_web/live/ammo_group_live/index.html.heex:3 #: lib/cannery_web/live/ammo_group_live/index.html.heex:3
#: lib/cannery_web/live/range_live/index.ex:82 #: lib/cannery_web/live/range_live/index.ex:80
msgid "Ammo" msgid "Ammo"
msgstr "" msgstr ""
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
#: lib/cannery_web/live/ammo_group_live/form_component.html.heex:21 #: lib/cannery_web/live/ammo_group_live/form_component.html.heex:21
#: lib/cannery_web/live/ammo_group_live/index.ex:80 #: lib/cannery_web/live/ammo_group_live/index.ex:81
msgid "Ammo type" msgid "Ammo type"
msgstr "" msgstr ""
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
#: lib/cannery_web/live/ammo_type_live/show.html.heex:94 #: lib/cannery_web/live/ammo_type_live/index.ex:87
#: lib/cannery_web/live/ammo_type_live/show.html.heex:100
msgid "Average Price paid" msgid "Average Price paid"
msgstr "" msgstr ""
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
#: lib/cannery_web/live/tag_live/form_component.ex:54 #: lib/cannery_web/live/tag_live/form_component.ex:79
msgid "Background color" msgid "Background color"
msgstr "" msgstr ""
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
#: lib/cannery_web/live/ammo_type_live/form_component.html.heex:140 #: lib/cannery_web/live/ammo_type_live/form_component.html.heex:140
#: lib/cannery_web/live/ammo_type_live/index.ex:71 #: lib/cannery_web/live/ammo_type_live/index.ex:71
#: lib/cannery_web/live/ammo_type_live/show.html.heex:55 #: lib/cannery_web/live/ammo_type_live/show.html.heex:53
msgid "Blank" msgid "Blank"
msgstr "" msgstr ""
@ -69,48 +70,48 @@ msgstr ""
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
#: lib/cannery_web/live/ammo_type_live/form_component.html.heex:44 #: lib/cannery_web/live/ammo_type_live/form_component.html.heex:44
#: lib/cannery_web/live/ammo_type_live/index.ex:53 #: lib/cannery_web/live/ammo_type_live/index.ex:53
#: lib/cannery_web/live/ammo_type_live/show.html.heex:41 #: lib/cannery_web/live/ammo_type_live/show.html.heex:39
msgid "Bullet core" msgid "Bullet core"
msgstr "" msgstr ""
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
#: lib/cannery_web/live/ammo_type_live/form_component.html.heex:37 #: lib/cannery_web/live/ammo_type_live/form_component.html.heex:37
#: lib/cannery_web/live/ammo_type_live/index.ex:52 #: lib/cannery_web/live/ammo_type_live/index.ex:52
#: lib/cannery_web/live/ammo_type_live/show.html.heex:40 #: lib/cannery_web/live/ammo_type_live/show.html.heex:38
msgid "Bullet type" msgid "Bullet type"
msgstr "" msgstr ""
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
#: lib/cannery_web/live/ammo_type_live/form_component.html.heex:58 #: lib/cannery_web/live/ammo_type_live/form_component.html.heex:58
#: lib/cannery_web/live/ammo_type_live/index.ex:55 #: lib/cannery_web/live/ammo_type_live/index.ex:55
#: lib/cannery_web/live/ammo_type_live/show.html.heex:43 #: lib/cannery_web/live/ammo_type_live/show.html.heex:41
msgid "Caliber" msgid "Caliber"
msgstr "" msgstr ""
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
#: lib/cannery_web/live/ammo_type_live/form_component.html.heex:51 #: lib/cannery_web/live/ammo_type_live/form_component.html.heex:51
#: lib/cannery_web/live/ammo_type_live/index.ex:54 #: lib/cannery_web/live/ammo_type_live/index.ex:54
#: lib/cannery_web/live/ammo_type_live/show.html.heex:42 #: lib/cannery_web/live/ammo_type_live/show.html.heex:40
msgid "Cartridge" msgid "Cartridge"
msgstr "" msgstr ""
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
#: lib/cannery_web/live/ammo_type_live/form_component.html.heex:65 #: lib/cannery_web/live/ammo_type_live/form_component.html.heex:65
#: lib/cannery_web/live/ammo_type_live/index.ex:56 #: lib/cannery_web/live/ammo_type_live/index.ex:56
#: lib/cannery_web/live/ammo_type_live/show.html.heex:44 #: lib/cannery_web/live/ammo_type_live/show.html.heex:42
msgid "Case material" msgid "Case material"
msgstr "" msgstr ""
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
#: lib/cannery_web/components/move_ammo_group_component.ex:67 #: lib/cannery_web/components/move_ammo_group_component.ex:67
#: lib/cannery_web/live/ammo_group_live/form_component.html.heex:48 #: lib/cannery_web/live/ammo_group_live/form_component.html.heex:48
#: lib/cannery_web/live/ammo_group_live/index.ex:85 #: lib/cannery_web/live/ammo_group_live/index.ex:86
msgid "Container" msgid "Container"
msgstr "" msgstr ""
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
#: lib/cannery_web/components/topbar.ex:46 #: lib/cannery_web/components/topbar.ex:50
#: lib/cannery_web/live/container_live/index.ex:38 #: lib/cannery_web/live/container_live/index.ex:36
#: lib/cannery_web/live/container_live/index.html.heex:3 #: lib/cannery_web/live/container_live/index.html.heex:3
msgid "Containers" msgid "Containers"
msgstr "" msgstr ""
@ -118,13 +119,13 @@ msgstr ""
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
#: lib/cannery_web/live/ammo_type_live/form_component.html.heex:144 #: lib/cannery_web/live/ammo_type_live/form_component.html.heex:144
#: lib/cannery_web/live/ammo_type_live/index.ex:72 #: lib/cannery_web/live/ammo_type_live/index.ex:72
#: lib/cannery_web/live/ammo_type_live/show.html.heex:56 #: lib/cannery_web/live/ammo_type_live/show.html.heex:54
msgid "Corrosive" msgid "Corrosive"
msgstr "" msgstr ""
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
#: lib/cannery_web/live/ammo_group_live/form_component.html.heex:27 #: lib/cannery_web/live/ammo_group_live/form_component.html.heex:27
#: lib/cannery_web/live/ammo_group_live/index.ex:81 #: lib/cannery_web/live/ammo_group_live/index.ex:82
msgid "Count" msgid "Count"
msgstr "" msgstr ""
@ -152,29 +153,28 @@ msgid "Disable"
msgstr "" msgstr ""
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
#: lib/cannery_web/live/home_live.ex:60 #: lib/cannery_web/live/home_live.ex:61
msgid "Easy to Use:" msgid "Easy to Use:"
msgstr "" msgstr ""
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
#: lib/cannery_web/live/ammo_group_live/index.ex:38 #: lib/cannery_web/live/ammo_group_live/index.ex:38
#: lib/cannery_web/live/ammo_group_live/show.ex:42
msgid "Edit Ammo group" msgid "Edit Ammo group"
msgstr "" msgstr ""
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
#: lib/cannery_web/live/ammo_type_live/index.ex:23 #: lib/cannery_web/live/ammo_type_live/index.ex:23
#: lib/cannery_web/live/ammo_type_live/show.ex:47 #: lib/cannery_web/live/ammo_type_live/show.ex:45
msgid "Edit Ammo type" msgid "Edit Ammo type"
msgstr "" msgstr ""
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
#: lib/cannery_web/live/invite_live/index.ex:35 #: lib/cannery_web/live/invite_live/index.ex:33
msgid "Edit Invite" msgid "Edit Invite"
msgstr "" msgstr ""
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
#: lib/cannery_web/live/tag_live/index.ex:23 #: lib/cannery_web/live/tag_live/index.ex:21
msgid "Edit Tag" msgid "Edit Tag"
msgstr "" msgstr ""
@ -196,35 +196,35 @@ msgstr ""
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
#: lib/cannery_web/live/ammo_type_live/form_component.html.heex:103 #: lib/cannery_web/live/ammo_type_live/form_component.html.heex:103
#: lib/cannery_web/live/ammo_type_live/index.ex:65 #: lib/cannery_web/live/ammo_type_live/index.ex:65
#: lib/cannery_web/live/ammo_type_live/show.html.heex:49 #: lib/cannery_web/live/ammo_type_live/show.html.heex:47
msgid "Grains" msgid "Grains"
msgstr "" msgstr ""
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
#: lib/cannery_web/live/ammo_type_live/form_component.html.heex:136 #: lib/cannery_web/live/ammo_type_live/form_component.html.heex:136
#: lib/cannery_web/live/ammo_type_live/index.ex:70 #: lib/cannery_web/live/ammo_type_live/index.ex:70
#: lib/cannery_web/live/ammo_type_live/show.html.heex:54 #: lib/cannery_web/live/ammo_type_live/show.html.heex:52
msgid "Incendiary" msgid "Incendiary"
msgstr "" msgstr ""
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
#: lib/cannery_web/live/home_live.ex:94 #: lib/cannery_web/live/home_live.ex:95
msgid "Instance Information" msgid "Instance Information"
msgstr "" msgstr ""
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
#: lib/cannery_web/components/invite_card.ex:27 #: lib/cannery_web/components/invite_card.ex:25
msgid "Invite Disabled" msgid "Invite Disabled"
msgstr "" msgstr ""
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
#: lib/cannery_web/live/home_live.ex:125 #: lib/cannery_web/live/home_live.ex:126
msgid "Invite Only" msgid "Invite Only"
msgstr "" msgstr ""
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
#: lib/cannery_web/components/topbar.ex:71 #: lib/cannery_web/components/topbar.ex:75
#: lib/cannery_web/live/invite_live/index.ex:43 #: lib/cannery_web/live/invite_live/index.ex:41
#: lib/cannery_web/live/invite_live/index.html.heex:3 #: lib/cannery_web/live/invite_live/index.html.heex:3
msgid "Invites" msgid "Invites"
msgstr "" msgstr ""
@ -251,15 +251,10 @@ msgstr ""
msgid "Magazine, Clip, Ammo Box, etc" msgid "Magazine, Clip, Ammo Box, etc"
msgstr "" msgstr ""
#, elixir-autogen, elixir-format
#: lib/cannery_web/components/topbar.ex:58
msgid "Manage"
msgstr ""
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
#: lib/cannery_web/live/ammo_type_live/form_component.html.heex:148 #: lib/cannery_web/live/ammo_type_live/form_component.html.heex:148
#: lib/cannery_web/live/ammo_type_live/index.ex:73 #: lib/cannery_web/live/ammo_type_live/index.ex:73
#: lib/cannery_web/live/ammo_type_live/show.html.heex:57 #: lib/cannery_web/live/ammo_type_live/show.html.heex:55
msgid "Manufacturer" msgid "Manufacturer"
msgstr "" msgstr ""
@ -278,7 +273,7 @@ msgstr ""
#: lib/cannery_web/live/ammo_type_live/index.ex:51 #: lib/cannery_web/live/ammo_type_live/index.ex:51
#: lib/cannery_web/live/container_live/form_component.html.heex:20 #: lib/cannery_web/live/container_live/form_component.html.heex:20
#: lib/cannery_web/live/invite_live/form_component.html.heex:20 #: lib/cannery_web/live/invite_live/form_component.html.heex:20
#: lib/cannery_web/live/tag_live/form_component.ex:50 #: lib/cannery_web/live/tag_live/form_component.ex:75
msgid "Name" msgid "Name"
msgstr "" msgstr ""
@ -288,17 +283,17 @@ msgid "New Ammo type"
msgstr "" msgstr ""
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
#: lib/cannery_web/live/container_live/index.ex:33 #: lib/cannery_web/live/container_live/index.ex:31
msgid "New Container" msgid "New Container"
msgstr "" msgstr ""
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
#: lib/cannery_web/live/invite_live/index.ex:39 #: lib/cannery_web/live/invite_live/index.ex:37
msgid "New Invite" msgid "New Invite"
msgstr "" msgstr ""
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
#: lib/cannery_web/live/tag_live/index.ex:29 #: lib/cannery_web/live/tag_live/index.ex:27
msgid "New Tag" msgid "New Tag"
msgstr "" msgstr ""
@ -313,15 +308,10 @@ msgid "No Ammo Types"
msgstr "" msgstr ""
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
#: lib/cannery_web/live/ammo_type_live/show.html.heex:114 #: lib/cannery_web/live/ammo_type_live/show.html.heex:120
msgid "No ammo for this type" msgid "No ammo for this type"
msgstr "" msgstr ""
#, elixir-autogen, elixir-format
#: lib/cannery_web/live/container_live/show.html.heex:78
msgid "No ammo groups in this container"
msgstr ""
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
#: lib/cannery_web/live/container_live/index.html.heex:8 #: lib/cannery_web/live/container_live/index.html.heex:8
msgid "No containers" msgid "No containers"
@ -341,9 +331,9 @@ msgstr ""
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
#: lib/cannery_web/components/add_shot_group_component.html.heex:30 #: lib/cannery_web/components/add_shot_group_component.html.heex:30
#: lib/cannery_web/live/ammo_group_live/form_component.html.heex:41 #: lib/cannery_web/live/ammo_group_live/form_component.html.heex:41
#: lib/cannery_web/live/ammo_group_live/show.ex:90 #: lib/cannery_web/live/ammo_group_live/show.ex:88
#: lib/cannery_web/live/range_live/form_component.html.heex:29 #: lib/cannery_web/live/range_live/form_component.html.heex:29
#: lib/cannery_web/live/range_live/index.ex:84 #: lib/cannery_web/live/range_live/index.ex:82
msgid "Notes" msgid "Notes"
msgstr "" msgstr ""
@ -361,40 +351,40 @@ msgstr ""
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
#: lib/cannery_web/live/ammo_type_live/form_component.html.heex:111 #: lib/cannery_web/live/ammo_type_live/form_component.html.heex:111
#: lib/cannery_web/live/ammo_type_live/index.ex:66 #: lib/cannery_web/live/ammo_type_live/index.ex:66
#: lib/cannery_web/live/ammo_type_live/show.html.heex:50 #: lib/cannery_web/live/ammo_type_live/show.html.heex:48
msgid "Pressure" msgid "Pressure"
msgstr "" msgstr ""
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
#: lib/cannery_web/live/ammo_group_live/form_component.html.heex:34 #: lib/cannery_web/live/ammo_group_live/form_component.html.heex:34
#: lib/cannery_web/live/ammo_group_live/index.ex:82 #: lib/cannery_web/live/ammo_group_live/index.ex:83
msgid "Price paid" msgid "Price paid"
msgstr "" msgstr ""
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
#: lib/cannery_web/components/ammo_group_card.ex:42 #: lib/cannery_web/components/ammo_group_card.ex:47
msgid "Price paid:" msgid "Price paid:"
msgstr "" msgstr ""
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
#: lib/cannery_web/live/ammo_type_live/form_component.html.heex:118 #: lib/cannery_web/live/ammo_type_live/form_component.html.heex:118
#: lib/cannery_web/live/ammo_type_live/index.ex:67 #: lib/cannery_web/live/ammo_type_live/index.ex:67
#: lib/cannery_web/live/ammo_type_live/show.html.heex:51 #: lib/cannery_web/live/ammo_type_live/show.html.heex:49
msgid "Primer type" msgid "Primer type"
msgstr "" msgstr ""
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
#: lib/cannery_web/live/home_live.ex:124 #: lib/cannery_web/live/home_live.ex:125
msgid "Public Signups" msgid "Public Signups"
msgstr "" msgstr ""
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
#: lib/cannery_web/live/home_live.ex:72 #: lib/cannery_web/live/home_live.ex:73
msgid "Secure:" msgid "Secure:"
msgstr "" msgstr ""
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
#: lib/cannery_web/live/home_live.ex:75 #: lib/cannery_web/live/home_live.ex:76
msgid "Self-host your own instance, or use an instance from someone you trust." msgid "Self-host your own instance, or use an instance from someone you trust."
msgstr "" msgstr ""
@ -410,17 +400,12 @@ msgid "Settings"
msgstr "" msgstr ""
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
#: lib/cannery_web/live/ammo_group_live/show.ex:41 #: lib/cannery_web/live/ammo_type_live/show.ex:44
msgid "Show Ammo group"
msgstr ""
#, elixir-autogen, elixir-format
#: lib/cannery_web/live/ammo_type_live/show.ex:46
msgid "Show Ammo type" msgid "Show Ammo type"
msgstr "" msgstr ""
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
#: lib/cannery_web/live/home_live.ex:82 #: lib/cannery_web/live/home_live.ex:83
msgid "Simple:" msgid "Simple:"
msgstr "" msgstr ""
@ -430,13 +415,13 @@ msgid "Steel"
msgstr "" msgstr ""
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
#: lib/cannery_web/live/ammo_group_live/show.html.heex:98 #: lib/cannery_web/live/ammo_group_live/show.html.heex:103
msgid "Stored in" msgid "Stored in"
msgstr "" msgstr ""
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
#: lib/cannery_web/components/topbar.ex:40 #: lib/cannery_web/components/topbar.ex:44
#: lib/cannery_web/live/tag_live/index.ex:34 #: lib/cannery_web/live/tag_live/index.ex:32
#: lib/cannery_web/live/tag_live/index.html.heex:3 #: lib/cannery_web/live/tag_live/index.html.heex:3
msgid "Tags" msgid "Tags"
msgstr "" msgstr ""
@ -447,24 +432,19 @@ msgid "Tags can be added to your containers to help you organize"
msgstr "" msgstr ""
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
#: lib/cannery_web/live/tag_live/form_component.ex:60 #: lib/cannery_web/live/tag_live/form_component.ex:85
msgid "Text color" msgid "Text color"
msgstr "" msgstr ""
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
#: lib/cannery_web/live/home_live.ex:51 #: lib/cannery_web/live/home_live.ex:52
msgid "The self-hosted firearm tracker website" msgid "The self-hosted firearm tracker website"
msgstr "" msgstr ""
#, elixir-autogen, elixir-format
#: lib/cannery_web/live/ammo_group_live/show.html.heex:103
msgid "This ammo group is not in a container"
msgstr ""
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
#: lib/cannery_web/live/ammo_type_live/form_component.html.heex:132 #: lib/cannery_web/live/ammo_type_live/form_component.html.heex:132
#: lib/cannery_web/live/ammo_type_live/index.ex:69 #: lib/cannery_web/live/ammo_type_live/index.ex:69
#: lib/cannery_web/live/ammo_type_live/show.html.heex:53 #: lib/cannery_web/live/ammo_type_live/show.html.heex:51
msgid "Tracer" msgid "Tracer"
msgstr "" msgstr ""
@ -486,7 +466,7 @@ msgid "Users"
msgstr "" msgstr ""
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
#: lib/cannery_web/components/invite_card.ex:22 #: lib/cannery_web/components/invite_card.ex:20
msgid "Uses Left:" msgid "Uses Left:"
msgstr "" msgstr ""
@ -496,23 +476,23 @@ msgid "Uses left"
msgstr "" msgstr ""
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
#: lib/cannery_web/live/home_live.ex:47 #: lib/cannery_web/live/home_live.ex:48
msgid "Welcome to %{name}" msgid "Welcome to %{name}"
msgstr "" msgstr ""
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
#: lib/cannery_web/live/home_live.ex:76 #: lib/cannery_web/live/home_live.ex:77
msgid "Your data stays with you, period" msgid "Your data stays with you, period"
msgstr "" msgstr ""
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
#: lib/cannery_web/live/container_live/show.html.heex:49 #: lib/cannery_web/live/container_live/show.html.heex:61
msgid "No tags for this container" msgid "No tags for this container"
msgstr "" msgstr ""
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
#: lib/cannery_web/components/topbar.ex:64 #: lib/cannery_web/components/topbar.ex:68
#: lib/cannery_web/live/ammo_group_live/index.ex:84 #: lib/cannery_web/live/ammo_group_live/index.ex:85
msgid "Range" msgid "Range"
msgstr "" msgstr ""
@ -522,8 +502,8 @@ msgid "Range day"
msgstr "" msgstr ""
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
#: lib/cannery_web/live/ammo_group_live/show.ex:91 #: lib/cannery_web/live/ammo_group_live/show.ex:89
#: lib/cannery_web/live/range_live/index.ex:85 #: lib/cannery_web/live/range_live/index.ex:83
msgid "Date" msgid "Date"
msgstr "" msgstr ""
@ -538,13 +518,13 @@ msgid "No ammo staged"
msgstr "" msgstr ""
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
#: lib/cannery_web/live/ammo_group_live/show.html.heex:77 #: lib/cannery_web/live/ammo_group_live/show.html.heex:82
#: lib/cannery_web/live/range_live/index.html.heex:33 #: lib/cannery_web/live/range_live/index.html.heex:33
msgid "Stage for range" msgid "Stage for range"
msgstr "" msgstr ""
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
#: lib/cannery_web/live/ammo_group_live/show.html.heex:76 #: lib/cannery_web/live/ammo_group_live/show.html.heex:81
#: lib/cannery_web/live/range_live/index.html.heex:32 #: lib/cannery_web/live/range_live/index.html.heex:32
msgid "Unstage from range" msgid "Unstage from range"
msgstr "" msgstr ""
@ -555,11 +535,6 @@ msgstr ""
msgid "Record shots" msgid "Record shots"
msgstr "" msgstr ""
#, elixir-autogen, elixir-format
#: lib/cannery_web/live/ammo_type_live/index.html.heex:3
msgid "Ammo Types"
msgstr ""
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
#: lib/cannery_web/live/ammo_group_live/index.ex:49 #: lib/cannery_web/live/ammo_group_live/index.ex:49
msgid "Ammo groups" msgid "Ammo groups"
@ -572,13 +547,13 @@ msgid "Date (UTC)"
msgstr "" msgstr ""
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
#: lib/cannery_web/live/ammo_group_live/show.ex:39 #: lib/cannery_web/live/ammo_group_live/show.ex:37
#: lib/cannery_web/live/range_live/index.ex:34 #: lib/cannery_web/live/range_live/index.ex:32
msgid "Edit Shot Records" msgid "Edit Shot Records"
msgstr "" msgstr ""
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
#: lib/cannery_web/live/range_live/index.ex:40 #: lib/cannery_web/live/range_live/index.ex:38
msgid "New Shot Records" msgid "New Shot Records"
msgstr "" msgstr ""
@ -593,19 +568,18 @@ msgid "Rounds left"
msgstr "" msgstr ""
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
#: lib/cannery_web/live/ammo_group_live/show.ex:89 #: lib/cannery_web/live/ammo_group_live/show.ex:87
#: lib/cannery_web/live/range_live/index.ex:83 #: lib/cannery_web/live/range_live/index.ex:81
msgid "Rounds shot" msgid "Rounds shot"
msgstr "" msgstr ""
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
#: lib/cannery_web/live/range_live/index.ex:46 #: lib/cannery_web/live/range_live/index.ex:44
msgid "Shot Records" msgid "Shot Records"
msgstr "" msgstr ""
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
#: lib/cannery_web/live/ammo_group_live/index.ex:32 #: lib/cannery_web/live/ammo_group_live/index.ex:32
#: lib/cannery_web/live/ammo_group_live/show.ex:40
msgid "Move Ammo group" msgid "Move Ammo group"
msgstr "" msgstr ""
@ -625,11 +599,12 @@ msgid "Shot log"
msgstr "" msgstr ""
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
#: lib/cannery_web/components/ammo_group_card.ex:43 #: lib/cannery_web/components/ammo_group_card.ex:48
#: lib/cannery_web/live/ammo_group_live/index.ex:117 #: lib/cannery_web/live/ammo_group_live/index.ex:125
#: lib/cannery_web/live/ammo_group_live/show.html.heex:32 #: lib/cannery_web/live/ammo_group_live/show.html.heex:37
#: lib/cannery_web/live/ammo_group_live/show.html.heex:39 #: lib/cannery_web/live/ammo_group_live/show.html.heex:44
#: lib/cannery_web/live/ammo_type_live/show.html.heex:98 #: lib/cannery_web/live/ammo_type_live/index.ex:114
#: lib/cannery_web/live/ammo_type_live/show.html.heex:104
msgid "$%{amount}" msgid "$%{amount}"
msgstr "" msgstr ""
@ -641,68 +616,68 @@ msgstr ""
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
#: lib/cannery_web/live/ammo_type_live/form_component.html.heex:72 #: lib/cannery_web/live/ammo_type_live/form_component.html.heex:72
#: lib/cannery_web/live/ammo_type_live/index.ex:57 #: lib/cannery_web/live/ammo_type_live/index.ex:57
#: lib/cannery_web/live/ammo_type_live/show.html.heex:45 #: lib/cannery_web/live/ammo_type_live/show.html.heex:43
msgid "Jacket type" msgid "Jacket type"
msgstr "" msgstr ""
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
#: lib/cannery_web/live/ammo_type_live/form_component.html.heex:79 #: lib/cannery_web/live/ammo_type_live/form_component.html.heex:79
#: lib/cannery_web/live/ammo_type_live/index.ex:58 #: lib/cannery_web/live/ammo_type_live/index.ex:58
#: lib/cannery_web/live/ammo_type_live/show.html.heex:46 #: lib/cannery_web/live/ammo_type_live/show.html.heex:44
msgid "Muzzle velocity" msgid "Muzzle velocity"
msgstr "" msgstr ""
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
#: lib/cannery_web/live/ammo_type_live/form_component.html.heex:93 #: lib/cannery_web/live/ammo_type_live/form_component.html.heex:93
#: lib/cannery_web/live/ammo_type_live/index.ex:61 #: lib/cannery_web/live/ammo_type_live/index.ex:61
#: lib/cannery_web/live/ammo_type_live/show.html.heex:48 #: lib/cannery_web/live/ammo_type_live/show.html.heex:46
msgid "Powder grains per charge" msgid "Powder grains per charge"
msgstr "" msgstr ""
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
#: lib/cannery_web/live/ammo_type_live/form_component.html.heex:89 #: lib/cannery_web/live/ammo_type_live/form_component.html.heex:89
#: lib/cannery_web/live/ammo_type_live/index.ex:59 #: lib/cannery_web/live/ammo_type_live/index.ex:59
#: lib/cannery_web/live/ammo_type_live/show.html.heex:47 #: lib/cannery_web/live/ammo_type_live/show.html.heex:45
msgid "Powder type" msgid "Powder type"
msgstr "" msgstr ""
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
#: lib/cannery_web/live/ammo_type_live/form_component.html.heex:152 #: lib/cannery_web/live/ammo_type_live/form_component.html.heex:152
#: lib/cannery_web/live/ammo_type_live/index.ex:74 #: lib/cannery_web/live/ammo_type_live/index.ex:74
#: lib/cannery_web/live/ammo_type_live/show.html.heex:58 #: lib/cannery_web/live/ammo_type_live/show.html.heex:56
msgid "UPC" msgid "UPC"
msgstr "" msgstr ""
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
#: lib/cannery_web/templates/user_settings/edit.html.heex:80 #: lib/cannery_web/templates/user_settings/edit.html.heex:78
msgid "Confirm new password" msgid "Confirm new password"
msgstr "" msgstr ""
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
#: lib/cannery_web/templates/user_settings/edit.html.heex:33 #: lib/cannery_web/templates/user_settings/edit.html.heex:32
#: lib/cannery_web/templates/user_settings/edit.html.heex:89 #: lib/cannery_web/templates/user_settings/edit.html.heex:87
msgid "Current password" msgid "Current password"
msgstr "" msgstr ""
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
#: lib/cannery_web/templates/user_settings/edit.html.heex:73 #: lib/cannery_web/templates/user_settings/edit.html.heex:71
msgid "New password" msgid "New password"
msgstr "" msgstr ""
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
#: lib/cannery_web/live/ammo_group_live/index.ex:130 #: lib/cannery_web/live/ammo_group_live/index.ex:148
msgid "Stage" msgid "Stage"
msgstr "" msgstr ""
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
#: lib/cannery_web/live/ammo_group_live/index.ex:130 #: lib/cannery_web/live/ammo_group_live/index.ex:148
msgid "Unstage" msgid "Unstage"
msgstr "" msgstr ""
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
#: lib/cannery_web/live/ammo_type_live/form_component.html.heex:125 #: lib/cannery_web/live/ammo_type_live/form_component.html.heex:125
#: lib/cannery_web/live/ammo_type_live/index.ex:68 #: lib/cannery_web/live/ammo_type_live/index.ex:68
#: lib/cannery_web/live/ammo_type_live/show.html.heex:52 #: lib/cannery_web/live/ammo_type_live/show.html.heex:50
msgid "Firing type" msgid "Firing type"
msgstr "" msgstr ""
@ -717,44 +692,46 @@ msgid "Loading..."
msgstr "" msgstr ""
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
#: lib/cannery_web/live/container_live/index.ex:29 #: lib/cannery_web/live/container_live/index.ex:27
#: lib/cannery_web/live/container_live/show.ex:97 #: lib/cannery_web/live/container_live/show.ex:95
msgid "Edit %{name}" msgid "Edit %{name}"
msgstr "" msgstr ""
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
#: lib/cannery_web/live/container_live/index.ex:48 #: lib/cannery_web/live/container_live/index.ex:46
#: lib/cannery_web/live/container_live/show.ex:98 #: lib/cannery_web/live/container_live/show.ex:96
msgid "Edit %{name} tags" msgid "Edit %{name} tags"
msgstr "" msgstr ""
#, elixir-autogen, elixir-format, fuzzy #, elixir-autogen, elixir-format, fuzzy
#: lib/cannery_web/components/container_card.ex:50 #: lib/cannery_web/components/container_card.ex:55
#: lib/cannery_web/live/container_live/show.html.heex:32
msgid "Rounds:" msgid "Rounds:"
msgstr "" msgstr ""
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
#: lib/cannery_web/live/container_live/show.ex:96 #: lib/cannery_web/live/container_live/show.ex:94
msgid "Show %{name}" msgid "Show %{name}"
msgstr "" msgstr ""
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
#: lib/cannery_web/live/ammo_type_live/show.html.heex:104 #: lib/cannery_web/live/ammo_type_live/index.ex:113
#: lib/cannery_web/live/ammo_type_live/show.html.heex:110
msgid "No cost information" msgid "No cost information"
msgstr "" msgstr ""
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
#: lib/cannery_web/live/ammo_group_live/index.ex:83 #: lib/cannery_web/live/ammo_group_live/index.ex:84
msgid "% left" msgid "% left"
msgstr "" msgstr ""
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
#: lib/cannery_web/live/ammo_group_live/show.html.heex:38 #: lib/cannery_web/live/ammo_group_live/show.html.heex:43
msgid "Current value:" msgid "Current value:"
msgstr "" msgstr ""
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
#: lib/cannery_web/live/ammo_group_live/show.html.heex:31 #: lib/cannery_web/live/ammo_group_live/show.html.heex:36
msgid "Original cost:" msgid "Original cost:"
msgstr "" msgstr ""
@ -769,12 +746,12 @@ msgid "Percentage left:"
msgstr "" msgstr ""
#, elixir-autogen, elixir-format, fuzzy #, elixir-autogen, elixir-format, fuzzy
#: lib/cannery_web/live/ammo_group_live/show.html.heex:111 #: lib/cannery_web/live/ammo_group_live/show.html.heex:116
msgid "Rounds used" msgid "Rounds used"
msgstr "" msgstr ""
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
#: lib/cannery_web/live/ammo_type_live/show.html.heex:77 #: lib/cannery_web/live/ammo_type_live/show.html.heex:75
msgid "Current # of rounds:" msgid "Current # of rounds:"
msgstr "" msgstr ""
@ -784,7 +761,7 @@ msgid "Total # of rounds"
msgstr "" msgstr ""
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
#: lib/cannery_web/live/ammo_type_live/show.html.heex:85 #: lib/cannery_web/live/ammo_type_live/show.html.heex:83
msgid "Total rounds shot:" msgid "Total rounds shot:"
msgstr "" msgstr ""
@ -814,8 +791,8 @@ msgid "Reset your password"
msgstr "" msgstr ""
#, elixir-autogen, elixir-format, fuzzy #, elixir-autogen, elixir-format, fuzzy
#: lib/cannery_web/live/ammo_group_live/show.ex:38 #: lib/cannery_web/live/ammo_group_live/show.ex:36
#: lib/cannery_web/live/range_live/index.ex:28 #: lib/cannery_web/live/range_live/index.ex:26
msgid "Record Shots" msgid "Record Shots"
msgstr "" msgstr ""
@ -828,3 +805,116 @@ msgstr ""
#: lib/cannery_web/live/ammo_type_live/index.ex:34 #: lib/cannery_web/live/ammo_type_live/index.ex:34
msgid "Ammo types" msgid "Ammo types"
msgstr "" msgstr ""
#, elixir-autogen, elixir-format
#: lib/cannery_web/live/ammo_group_live/index.ex:87
msgid "Added on"
msgstr ""
#, elixir-autogen, elixir-format
#: lib/cannery_web/components/ammo_group_card.ex:41
#: lib/cannery_web/live/ammo_group_live/show.html.heex:30
#: lib/cannery_web/live/ammo_type_live/show.html.heex:91
msgid "Added on:"
msgstr ""
#, elixir-autogen, elixir-format
#: lib/cannery_web/components/user_card.ex:30
msgid "User registered on"
msgstr ""
#, elixir-autogen, elixir-format
#: lib/cannery_web/templates/user_registration/new.html.heex:37
#: lib/cannery_web/templates/user_settings/edit.html.heex:129
msgid "English"
msgstr ""
#, elixir-autogen, elixir-format
#: lib/cannery_web/templates/user_registration/new.html.heex:37
#: lib/cannery_web/templates/user_settings/edit.html.heex:129
msgid "French"
msgstr ""
#, elixir-autogen, elixir-format
#: lib/cannery_web/templates/user_registration/new.html.heex:37
#: lib/cannery_web/templates/user_settings/edit.html.heex:129
msgid "German"
msgstr ""
#, elixir-autogen, elixir-format
#: lib/cannery_web/templates/user_registration/new.html.heex:33
msgid "Language"
msgstr ""
#, elixir-autogen, elixir-format
#: lib/cannery_web/live/home_live.ex:147
msgid "Get involved!"
msgstr ""
#, elixir-autogen, elixir-format
#: lib/cannery_web/live/home_live.ex:164
msgid "Help translate"
msgstr ""
#, elixir-autogen, elixir-format
#: lib/cannery_web/live/home_live.ex:173
msgid "Report bugs or request features"
msgstr ""
#, elixir-autogen, elixir-format
#: lib/cannery_web/live/home_live.ex:155
msgid "View the source code"
msgstr ""
#, elixir-autogen, elixir-format
#: lib/cannery_web/components/topbar.ex:56
#: lib/cannery_web/live/ammo_type_live/index.html.heex:3
msgid "Catalog"
msgstr ""
#, elixir-autogen, elixir-format, fuzzy
#: lib/cannery_web/live/ammo_group_live/show.ex:40
msgid "Edit Ammo"
msgstr ""
#, elixir-autogen, elixir-format, fuzzy
#: lib/cannery_web/live/ammo_group_live/show.ex:38
msgid "Move Ammo"
msgstr ""
#, elixir-autogen, elixir-format, fuzzy
#: lib/cannery_web/live/container_live/show.html.heex:90
msgid "No ammo in this container"
msgstr ""
#, elixir-autogen, elixir-format, fuzzy
#: lib/cannery_web/live/ammo_group_live/show.ex:39
msgid "Show Ammo"
msgstr ""
#, elixir-autogen, elixir-format, fuzzy
#: lib/cannery_web/live/ammo_group_live/show.html.heex:108
msgid "This ammo is not in a container"
msgstr ""
#, elixir-autogen, elixir-format
#: lib/cannery_web/components/container_card.ex:50
#: lib/cannery_web/live/container_live/show.html.heex:27
msgid "Packs:"
msgstr ""
#, elixir-autogen, elixir-format
#: lib/cannery_web/components/topbar.ex:24
#: lib/cannery_web/live/home_live.ex:42
msgid "Cannery logo"
msgstr ""
#, elixir-autogen, elixir-format
#: lib/cannery_web/live/home_live.ex:44
msgid "isn't he cute >:3"
msgstr ""
#, elixir-autogen, elixir-format
#: lib/cannery_web/live/invite_live/form_component.html.heex:28
msgid "Leave \"Uses left\" blank to make invite unlimited"
msgstr ""

View File

@ -92,6 +92,6 @@ msgid "This email was sent from %{name} at %{url}, the self-hosted firearm track
msgstr "" msgstr ""
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
#: lib/cannery_web/templates/layout/email.html.heex:17 #: lib/cannery_web/templates/layout/email.html.heex:13
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 ""

View File

@ -11,23 +11,23 @@ msgstr ""
"Language: en\n" "Language: en\n"
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
#: lib/cannery/containers.ex:122 #: lib/cannery/containers.ex:140
msgid "Container must be empty before deleting" msgid "Container must be empty before deleting"
msgstr "" msgstr ""
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
#: lib/cannery_web/live/container_live/index.ex:71 #: lib/cannery_web/live/container_live/index.ex:69
#: lib/cannery_web/live/container_live/show.ex:73 #: lib/cannery_web/live/container_live/show.ex:71
msgid "Could not delete %{name}: %{error}" msgid "Could not delete %{name}: %{error}"
msgstr "" msgstr ""
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
#: lib/cannery_web/live/container_live/index.ex:59 #: 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 #, elixir-autogen, elixir-format
#: lib/cannery_web/controllers/user_settings_controller.ex:67 #: lib/cannery_web/controllers/user_settings_controller.ex:84
msgid "Email change link is invalid or it has expired." msgid "Email change link is invalid or it has expired."
msgstr "" msgstr ""
@ -37,7 +37,7 @@ msgid "Error"
msgstr "" msgstr ""
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
#: lib/cannery_web/templates/error/error.html.heex:29 #: lib/cannery_web/templates/error/error.html.heex:28
msgid "Go back home" msgid "Go back home"
msgstr "" msgstr ""
@ -59,8 +59,9 @@ msgstr ""
#, elixir-autogen, elixir-format #, 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:22 #: lib/cannery_web/templates/user_settings/edit.html.heex:21
#: lib/cannery_web/templates/user_settings/edit.html.heex:66 #: lib/cannery_web/templates/user_settings/edit.html.heex:64
#: lib/cannery_web/templates/user_settings/edit.html.heex:119
msgid "Oops, something went wrong! Please check the errors below." msgid "Oops, something went wrong! Please check the errors below."
msgstr "" msgstr ""
@ -82,7 +83,7 @@ msgid "Sorry, this invite was not found or expired"
msgstr "" msgstr ""
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
#: lib/cannery_web/controllers/user_settings_controller.ex:82 #: lib/cannery_web/controllers/user_settings_controller.ex:99
msgid "Unable to delete user" msgid "Unable to delete user"
msgstr "" msgstr ""
@ -97,7 +98,7 @@ msgid "User confirmation link is invalid or it has expired."
msgstr "" msgstr ""
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
#: lib/cannery_web/live/invite_live/index.ex:20 #: lib/cannery_web/live/invite_live/index.ex:18
msgid "You are not authorized to view this page" msgid "You are not authorized to view this page"
msgstr "" msgstr ""
@ -107,23 +108,23 @@ msgid "You are not authorized to view this page."
msgstr "" msgstr ""
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
#: lib/cannery/accounts/user.ex:128 #: lib/cannery/accounts/user.ex:130
msgid "did not change" msgid "did not change"
msgstr "" msgstr ""
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
#: lib/cannery/accounts/user.ex:149 #: 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
#, elixir-autogen, elixir-format, fuzzy #, elixir-autogen, elixir-format, fuzzy
#: lib/cannery/accounts/user.ex:186 #: lib/cannery/accounts/user.ex:188
msgid "is not valid" msgid "is not valid"
msgstr "" msgstr ""
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
#: lib/cannery/accounts/user.ex:82 #: lib/cannery/accounts/user.ex:84
msgid "must have the @ sign and no spaces" msgid "must have the @ sign and no spaces"
msgstr "" msgstr ""
@ -138,13 +139,13 @@ msgid "Tag could not be added"
msgstr "" msgstr ""
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
#: lib/cannery/activity_log.ex:125 #: lib/cannery/activity_log/shot_group.ex:115
msgid "Count must be at least 1" msgid "Count must be at least 1"
msgstr "" msgstr ""
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
#: lib/cannery/activity_log.ex:73 #: lib/cannery/activity_log/shot_group.ex:74
#: lib/cannery/activity_log.ex:120 #: lib/cannery/activity_log/shot_group.ex:111
msgid "Count must be less than %{count}" msgid "Count must be less than %{count}"
msgstr "" msgstr ""
@ -160,11 +161,26 @@ msgid "Tag could not be removed"
msgstr "" msgstr ""
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
#: lib/cannery_web/live/ammo_group_live/form_component.ex:113 #: lib/cannery_web/live/ammo_group_live/form_component.ex:156
msgid "Could not parse number of copies" msgid "Could not parse number of copies"
msgstr "" msgstr ""
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
#: lib/cannery_web/live/ammo_group_live/form_component.ex:98 #: lib/cannery_web/live/ammo_group_live/form_component.ex:141
msgid "Invalid number of copies, must be between 1 and %{max}. Was %{multiplier}" msgid "Invalid number of copies, must be between 1 and %{max}. Was %{multiplier}"
msgstr "" msgstr ""
#, elixir-autogen, elixir-format
#: lib/cannery/ammo.ex:407
msgid "Invalid multiplier"
msgstr ""
#, elixir-autogen, elixir-format
#: lib/cannery/ammo/ammo_group.ex:84
msgid "Please select an ammo type and container"
msgstr ""
#, elixir-autogen, elixir-format
#: lib/cannery/activity_log/shot_group.ex:69
msgid "Please select a valid user and ammo group"
msgstr ""

View File

@ -12,67 +12,61 @@ msgstr ""
"Plural-Forms: nplurals=2\n" "Plural-Forms: nplurals=2\n"
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
#: lib/cannery_web/live/ammo_type_live/form_component.ex:64 #: lib/cannery_web/live/ammo_type_live/form_component.ex:85
#: lib/cannery_web/live/container_live/form_component.ex:65 #: lib/cannery_web/live/container_live/form_component.ex:85
#: lib/cannery_web/live/invite_live/form_component.ex:59 #: lib/cannery_web/live/invite_live/form_component.ex:80
#: lib/cannery_web/live/tag_live/form_component.ex:101 #: lib/cannery_web/live/tag_live/form_component.ex:126
msgid "%{name} created successfully" msgid "%{name} created successfully"
msgstr "" msgstr ""
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
#: lib/cannery_web/live/ammo_type_live/index.ex:41 #: lib/cannery_web/live/ammo_type_live/index.ex:41
#: lib/cannery_web/live/ammo_type_live/show.ex:40 #: lib/cannery_web/live/ammo_type_live/show.ex:38
#: lib/cannery_web/live/invite_live/index.ex:55 #: lib/cannery_web/live/invite_live/index.ex:53
#: lib/cannery_web/live/invite_live/index.ex:135 #: lib/cannery_web/live/invite_live/index.ex:133
#: lib/cannery_web/live/tag_live/index.ex:40 #: lib/cannery_web/live/tag_live/index.ex:38
msgid "%{name} deleted succesfully" msgid "%{name} deleted succesfully"
msgstr "" msgstr ""
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
#: lib/cannery_web/live/invite_live/index.ex:111 #: lib/cannery_web/live/invite_live/index.ex:109
msgid "%{name} disabled succesfully" msgid "%{name} disabled succesfully"
msgstr "" msgstr ""
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
#: lib/cannery_web/live/invite_live/index.ex:89 #: lib/cannery_web/live/invite_live/index.ex:87
msgid "%{name} enabled succesfully" msgid "%{name} enabled succesfully"
msgstr "" msgstr ""
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
#: lib/cannery_web/live/container_live/index.ex:64 #: lib/cannery_web/live/container_live/index.ex:62
#: lib/cannery_web/live/container_live/show.ex:63 #: lib/cannery_web/live/container_live/show.ex:61
msgid "%{name} has been deleted" msgid "%{name} has been deleted"
msgstr "" msgstr ""
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
#: lib/cannery_web/live/invite_live/index.ex:69 #: lib/cannery_web/live/invite_live/index.ex:67
msgid "%{name} updated succesfully" msgid "%{name} updated succesfully"
msgstr "" msgstr ""
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
#: lib/cannery_web/live/ammo_type_live/form_component.ex:46 #: lib/cannery_web/live/ammo_type_live/form_component.ex:67
#: lib/cannery_web/live/container_live/form_component.ex:47 #: lib/cannery_web/live/container_live/form_component.ex:67
#: lib/cannery_web/live/invite_live/form_component.ex:41 #: lib/cannery_web/live/invite_live/form_component.ex:62
#: lib/cannery_web/live/tag_live/form_component.ex:83 #: lib/cannery_web/live/tag_live/form_component.ex:108
msgid "%{name} updated successfully" msgid "%{name} updated successfully"
msgstr "" msgstr ""
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
#: lib/cannery_web/controllers/user_settings_controller.ex:28 #: lib/cannery_web/controllers/user_settings_controller.ex:29
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 ""
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
#: lib/cannery_web/live/ammo_group_live/index.ex:56 #: lib/cannery_web/live/ammo_group_live/index.ex:56
#: lib/cannery_web/live/ammo_group_live/show.ex:52
msgid "Ammo group deleted succesfully" msgid "Ammo group deleted succesfully"
msgstr "" msgstr ""
#, elixir-autogen, elixir-format
#: lib/cannery_web/live/ammo_group_live/form_component.ex:75
msgid "Ammo group updated successfully"
msgstr ""
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
#: lib/cannery_web/live/invite_live/index.html.heex:102 #: lib/cannery_web/live/invite_live/index.html.heex:102
#: lib/cannery_web/live/invite_live/index.html.heex:131 #: lib/cannery_web/live/invite_live/index.html.heex:131
@ -80,9 +74,8 @@ msgid "Are you sure you want to delete %{email}? This action is permanent!"
msgstr "" msgstr ""
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
#: lib/cannery_web/live/ammo_type_live/show.html.heex:29
#: lib/cannery_web/live/container_live/index.html.heex:46 #: lib/cannery_web/live/container_live/index.html.heex:46
#: lib/cannery_web/live/container_live/show.html.heex:37 #: lib/cannery_web/live/container_live/show.html.heex:49
#: lib/cannery_web/live/tag_live/index.html.heex:38 #: lib/cannery_web/live/tag_live/index.html.heex:38
msgid "Are you sure you want to delete %{name}?" msgid "Are you sure you want to delete %{name}?"
msgstr "" msgstr ""
@ -93,19 +86,18 @@ msgid "Are you sure you want to delete the invite for %{name}?"
msgstr "" msgstr ""
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
#: lib/cannery_web/live/ammo_group_live/index.ex:165 #: lib/cannery_web/live/ammo_group_live/index.ex:184
#: lib/cannery_web/live/ammo_group_live/show.html.heex:66 #: lib/cannery_web/live/ammo_group_live/show.html.heex:71
#: lib/cannery_web/live/ammo_type_live/index.ex:130
msgid "Are you sure you want to delete this ammo?" msgid "Are you sure you want to delete this ammo?"
msgstr "" msgstr ""
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
#: lib/cannery_web/templates/user_settings/edit.html.heex:112 #: 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 ""
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
#: lib/cannery_web/components/topbar.ex:86 #: 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 ""
@ -115,7 +107,7 @@ msgid "Are you sure you want to make %{name} unlimited?"
msgstr "" msgstr ""
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
#: lib/cannery_web/controllers/user_settings_controller.ex:60 #: lib/cannery_web/controllers/user_settings_controller.ex:77
msgid "Email changed successfully." msgid "Email changed successfully."
msgstr "" msgstr ""
@ -140,7 +132,7 @@ msgid "Password reset successfully."
msgstr "" msgstr ""
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
#: lib/cannery_web/controllers/user_settings_controller.ex:47 #: lib/cannery_web/controllers/user_settings_controller.ex:49
msgid "Password updated successfully." msgid "Password updated successfully."
msgstr "" msgstr ""
@ -150,7 +142,7 @@ msgid "Please check your email to verify your account"
msgstr "" msgstr ""
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
#: lib/cannery_web/live/home_live.ex:103 #: lib/cannery_web/live/home_live.ex:104
msgid "Register to setup %{name}" msgid "Register to setup %{name}"
msgstr "" msgstr ""
@ -159,14 +151,14 @@ msgstr ""
#: lib/cannery_web/live/ammo_group_live/form_component.html.heex:74 #: lib/cannery_web/live/ammo_group_live/form_component.html.heex:74
#: lib/cannery_web/live/ammo_type_live/form_component.html.heex:157 #: lib/cannery_web/live/ammo_type_live/form_component.html.heex:157
#: lib/cannery_web/live/container_live/form_component.html.heex:52 #: lib/cannery_web/live/container_live/form_component.html.heex:52
#: lib/cannery_web/live/invite_live/form_component.html.heex:30 #: lib/cannery_web/live/invite_live/form_component.html.heex:33
#: lib/cannery_web/live/range_live/form_component.html.heex:42 #: lib/cannery_web/live/range_live/form_component.html.heex:42
#: lib/cannery_web/live/tag_live/form_component.ex:68 #: lib/cannery_web/live/tag_live/form_component.ex:93
msgid "Saving..." msgid "Saving..."
msgstr "" msgstr ""
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
#: lib/cannery_web/controllers/user_settings_controller.ex:78 #: lib/cannery_web/controllers/user_settings_controller.ex:95
msgid "Your account has been deleted" msgid "Your account has been deleted"
msgstr "" msgstr ""
@ -181,7 +173,7 @@ msgid "%{name} added successfully"
msgstr "" msgstr ""
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
#: lib/cannery_web/live/container_live/show.ex:39 #: lib/cannery_web/live/container_live/show.ex:37
msgid "%{tag_name} has been removed from %{container_name}" msgid "%{tag_name} has been removed from %{container_name}"
msgstr "" msgstr ""
@ -191,7 +183,7 @@ msgid "Adding..."
msgstr "" msgstr ""
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
#: lib/cannery_web/components/add_shot_group_component.ex:68 #: lib/cannery_web/components/add_shot_group_component.ex:56
msgid "Shots recorded successfully" msgid "Shots recorded successfully"
msgstr "" msgstr ""
@ -201,19 +193,14 @@ msgid "Are you sure you want to unstage this ammo?"
msgstr "" msgstr ""
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
#: lib/cannery_web/live/range_live/index.ex:70 #: lib/cannery_web/live/ammo_group_live/show.ex:130
msgid "Ammo group unstaged succesfully" #: lib/cannery_web/live/range_live/index.ex:128
msgstr ""
#, elixir-autogen, elixir-format
#: lib/cannery_web/live/ammo_group_live/show.ex:132
#: lib/cannery_web/live/range_live/index.ex:130
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 #, elixir-autogen, elixir-format
#: lib/cannery_web/live/ammo_group_live/show.ex:80 #: lib/cannery_web/live/ammo_group_live/show.ex:78
#: lib/cannery_web/live/range_live/index.ex:56 #: lib/cannery_web/live/range_live/index.ex:54
msgid "Shot records deleted succesfully" msgid "Shot records deleted succesfully"
msgstr "" msgstr ""
@ -233,7 +220,7 @@ msgid "Ammo moved to %{name} successfully"
msgstr "" msgstr ""
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
#: lib/cannery_web/live/invite_live/index.ex:123 #: lib/cannery_web/live/invite_live/index.ex:121
msgid "Copied to clipboard" msgid "Copied to clipboard"
msgstr "" msgstr ""
@ -243,8 +230,8 @@ msgid "%{name} removed successfully"
msgstr "" msgstr ""
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
#: lib/cannery_web/live/ammo_group_live/index.html.heex:15 #: lib/cannery_web/live/ammo_group_live/index.html.heex:17
#: lib/cannery_web/live/ammo_group_live/index.html.heex:33 #: lib/cannery_web/live/ammo_group_live/index.html.heex:28
msgid "You'll need to" msgid "You'll need to"
msgstr "" msgstr ""
@ -253,9 +240,40 @@ msgstr ""
msgid "Creating..." msgid "Creating..."
msgstr "" msgstr ""
#, elixir-autogen, elixir-format
#: lib/cannery_web/templates/user_settings/edit.html.heex:136
msgid "Are you sure you want to change your language?"
msgstr ""
#, elixir-autogen, elixir-format
#: lib/cannery_web/controllers/user_settings_controller.ex:65
msgid "Language updated successfully."
msgstr ""
#, elixir-autogen, elixir-format, fuzzy #, elixir-autogen, elixir-format, fuzzy
#: lib/cannery_web/live/ammo_group_live/form_component.ex:134 #: lib/cannery_web/live/ammo_group_live/show.ex:50
msgid "Ammo group created successfully" msgid "Ammo deleted succesfully"
msgid_plural "Ammo groups created successfully" msgstr ""
#, elixir-autogen, elixir-format, fuzzy
#: lib/cannery_web/live/range_live/index.ex:68
msgid "Ammo unstaged succesfully"
msgstr ""
#, elixir-autogen, elixir-format, fuzzy
#: lib/cannery_web/live/ammo_group_live/form_component.ex:118
msgid "Ammo updated successfully"
msgstr ""
#, elixir-autogen, elixir-format, fuzzy
#: lib/cannery_web/live/ammo_group_live/form_component.ex:177
msgid "Ammo added successfully"
msgid_plural "Ammo added successfully"
msgstr[0] "" msgstr[0] ""
msgstr[1] "" msgstr[1] ""
#, elixir-autogen, elixir-format, fuzzy
#: lib/cannery_web/live/ammo_type_live/index.ex:140
#: lib/cannery_web/live/ammo_type_live/show.html.heex:27
msgid "Are you sure you want to delete %{name}? This will delete all %{name} type ammo as well!"
msgstr ""

View File

@ -11,23 +11,23 @@ msgid ""
msgstr "" msgstr ""
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
#: lib/cannery/containers.ex:122 #: lib/cannery/containers.ex:140
msgid "Container must be empty before deleting" msgid "Container must be empty before deleting"
msgstr "" msgstr ""
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
#: lib/cannery_web/live/container_live/index.ex:71 #: lib/cannery_web/live/container_live/index.ex:69
#: lib/cannery_web/live/container_live/show.ex:73 #: lib/cannery_web/live/container_live/show.ex:71
msgid "Could not delete %{name}: %{error}" msgid "Could not delete %{name}: %{error}"
msgstr "" msgstr ""
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
#: lib/cannery_web/live/container_live/index.ex:59 #: 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 #, elixir-autogen, elixir-format
#: lib/cannery_web/controllers/user_settings_controller.ex:67 #: lib/cannery_web/controllers/user_settings_controller.ex:84
msgid "Email change link is invalid or it has expired." msgid "Email change link is invalid or it has expired."
msgstr "" msgstr ""
@ -59,8 +59,9 @@ msgstr ""
#, elixir-autogen, elixir-format #, 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:22 #: lib/cannery_web/templates/user_settings/edit.html.heex:21
#: lib/cannery_web/templates/user_settings/edit.html.heex:66 #: lib/cannery_web/templates/user_settings/edit.html.heex:64
#: lib/cannery_web/templates/user_settings/edit.html.heex:119
msgid "Oops, something went wrong! Please check the errors below." msgid "Oops, something went wrong! Please check the errors below."
msgstr "" msgstr ""
@ -82,7 +83,7 @@ msgid "Sorry, this invite was not found or expired"
msgstr "" msgstr ""
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
#: lib/cannery_web/controllers/user_settings_controller.ex:82 #: lib/cannery_web/controllers/user_settings_controller.ex:99
msgid "Unable to delete user" msgid "Unable to delete user"
msgstr "" msgstr ""
@ -97,7 +98,7 @@ msgid "User confirmation link is invalid or it has expired."
msgstr "" msgstr ""
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
#: lib/cannery_web/live/invite_live/index.ex:20 #: lib/cannery_web/live/invite_live/index.ex:18
msgid "You are not authorized to view this page" msgid "You are not authorized to view this page"
msgstr "" msgstr ""
@ -107,22 +108,22 @@ msgid "You are not authorized to view this page."
msgstr "" msgstr ""
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
#: lib/cannery/accounts/user.ex:128 #: lib/cannery/accounts/user.ex:130
msgid "did not change" msgid "did not change"
msgstr "" msgstr ""
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
#: lib/cannery/accounts/user.ex:149 #: lib/cannery/accounts/user.ex:151
msgid "does not match password" msgid "does not match password"
msgstr "" msgstr ""
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
#: lib/cannery/accounts/user.ex:186 #: lib/cannery/accounts/user.ex:188
msgid "is not valid" msgid "is not valid"
msgstr "" msgstr ""
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
#: lib/cannery/accounts/user.ex:82 #: lib/cannery/accounts/user.ex:84
msgid "must have the @ sign and no spaces" msgid "must have the @ sign and no spaces"
msgstr "" msgstr ""
@ -137,13 +138,13 @@ msgid "Tag could not be added"
msgstr "" msgstr ""
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
#: lib/cannery/activity_log.ex:125 #: lib/cannery/activity_log/shot_group.ex:115
msgid "Count must be at least 1" msgid "Count must be at least 1"
msgstr "" msgstr ""
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
#: lib/cannery/activity_log.ex:73 #: lib/cannery/activity_log/shot_group.ex:74
#: lib/cannery/activity_log.ex:120 #: lib/cannery/activity_log/shot_group.ex:111
msgid "Count must be less than %{count}" msgid "Count must be less than %{count}"
msgstr "" msgstr ""
@ -159,11 +160,26 @@ msgid "Tag could not be removed"
msgstr "" msgstr ""
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
#: lib/cannery_web/live/ammo_group_live/form_component.ex:126 #: lib/cannery_web/live/ammo_group_live/form_component.ex:156
msgid "Could not parse number of copies" msgid "Could not parse number of copies"
msgstr "" msgstr ""
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
#: lib/cannery_web/live/ammo_group_live/form_component.ex:111 #: lib/cannery_web/live/ammo_group_live/form_component.ex:141
msgid "Invalid number of copies, must be between 1 and %{max}. Was %{multiplier}" msgid "Invalid number of copies, must be between 1 and %{max}. Was %{multiplier}"
msgstr "" msgstr ""
#, elixir-autogen, elixir-format
#: lib/cannery/ammo.ex:407
msgid "Invalid multiplier"
msgstr ""
#, elixir-autogen, elixir-format
#: lib/cannery/ammo/ammo_group.ex:84
msgid "Please select an ammo type and container"
msgstr ""
#, elixir-autogen, elixir-format
#: lib/cannery/activity_log/shot_group.ex:69
msgid "Please select a valid user and ammo group"
msgstr ""

View File

@ -0,0 +1,224 @@
msgid ""
msgstr ""
"Project-Id-Version: PACKAGE VERSION\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2022-05-21 19:45+0000\n"
"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
"Last-Translator: Automatically generated\n"
"Language-Team: none\n"
"Language: es\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"X-Generator: Translate Toolkit 3.6.2\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.
#, elixir-autogen, elixir-format
#: lib/cannery_web/live/ammo_group_live/index.ex:44
#: lib/cannery_web/live/ammo_group_live/index.html.heex:42
msgid "Add Ammo"
msgstr ""
#, elixir-autogen, elixir-format
#: lib/cannery_web/live/ammo_group_live/index.html.heex:37
msgid "Add your first box!"
msgstr ""
#, elixir-autogen, elixir-format
#: lib/cannery_web/live/container_live/index.html.heex:12
msgid "Add your first container!"
msgstr ""
#, elixir-autogen, elixir-format
#: lib/cannery_web/live/ammo_type_live/index.html.heex:12
msgid "Add your first type!"
msgstr ""
#, elixir-autogen, elixir-format
#: lib/cannery_web/templates/user_settings/edit.html.heex:15
#: lib/cannery_web/templates/user_settings/edit.html.heex:44
msgid "Change email"
msgstr ""
#, elixir-autogen, elixir-format
#: lib/cannery_web/templates/user_settings/edit.html.heex:58
#: lib/cannery_web/templates/user_settings/edit.html.heex:99
msgid "Change password"
msgstr ""
#, elixir-autogen, elixir-format
#: lib/cannery_web/live/invite_live/index.html.heex:17
msgid "Create Invite"
msgstr ""
#, elixir-autogen, elixir-format
#: lib/cannery_web/templates/user_settings/edit.html.heex:142
msgid "Delete User"
msgstr ""
#, elixir-autogen, elixir-format
#: 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
msgid "Forgot your password?"
msgstr ""
#, elixir-autogen, elixir-format
#: lib/cannery_web/live/invite_live/index.html.heex:12
msgid "Invite someone new!"
msgstr ""
#, elixir-autogen, elixir-format
#: lib/cannery_web/components/topbar.ex:112
#: 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_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
msgid "Log in"
msgstr ""
#, elixir-autogen, elixir-format
#: lib/cannery_web/live/tag_live/index.html.heex:14
msgid "Make your first tag!"
msgstr ""
#, elixir-autogen, elixir-format
#: lib/cannery_web/live/ammo_type_live/index.html.heex:17
msgid "New Ammo type"
msgstr ""
#, elixir-autogen, elixir-format
#: lib/cannery_web/live/container_live/index.html.heex:17
msgid "New Container"
msgstr ""
#, elixir-autogen, elixir-format
#: lib/cannery_web/live/tag_live/index.html.heex:19
msgid "New Tag"
msgstr ""
#, elixir-autogen, elixir-format
#: lib/cannery_web/components/topbar.ex:105
#: 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:42
#: lib/cannery_web/templates/user_reset_password/edit.html.heex:43
#: lib/cannery_web/templates/user_reset_password/new.html.heex:25
#: lib/cannery_web/templates/user_session/new.html.heex:40
msgid "Register"
msgstr ""
#, elixir-autogen, elixir-format
#: lib/cannery_web/templates/user_confirmation/new.html.heex:3
#: lib/cannery_web/templates/user_confirmation/new.html.heex:16
msgid "Resend confirmation instructions"
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:34
msgid "Reset password"
msgstr ""
#, elixir-autogen, elixir-format
#: 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_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
msgid "Save"
msgstr ""
#, elixir-autogen, elixir-format
#: lib/cannery_web/templates/user_reset_password/new.html.heex:16
msgid "Send instructions to reset password"
msgstr ""
#, elixir-autogen, elixir-format
#: lib/cannery_web/live/container_live/show.html.heex:65
msgid "Why not add one?"
msgstr ""
#, elixir-autogen, elixir-format
#: lib/cannery_web/live/container_live/edit_tags_component.html.heex:52
msgid "Add"
msgstr ""
#, elixir-autogen, elixir-format
#: lib/cannery_web/live/range_live/index.html.heex:17
msgid "Stage ammo"
msgstr ""
#, elixir-autogen, elixir-format
#: lib/cannery_web/live/range_live/index.html.heex:12
msgid "Why not get some ready to shoot?"
msgstr ""
#, elixir-autogen, elixir-format
#: lib/cannery_web/live/ammo_group_live/index.ex:151
#: lib/cannery_web/live/ammo_group_live/show.html.heex:91
#: lib/cannery_web/live/range_live/index.html.heex:36
msgid "Record shots"
msgstr ""
#, elixir-autogen, elixir-format
#: lib/cannery_web/components/move_ammo_group_component.ex:89
msgid "Add another container!"
msgstr ""
#, elixir-autogen, elixir-format
#: lib/cannery_web/live/ammo_group_live/show.html.heex:85
msgid "Move containers"
msgstr ""
#, elixir-autogen, elixir-format
#: lib/cannery_web/components/move_ammo_group_component.ex:127
msgid "Select"
msgstr ""
#, elixir-autogen, elixir-format
#: lib/cannery_web/live/invite_live/index.html.heex:33
msgid "Copy to clipboard"
msgstr ""
#, elixir-autogen, elixir-format
#: lib/cannery_web/live/ammo_group_live/index.html.heex:20
msgid "add a container first"
msgstr ""
#, elixir-autogen, elixir-format
#: lib/cannery_web/live/ammo_group_live/form_component.html.heex:66
msgid "Create"
msgstr ""
#, elixir-autogen, elixir-format
#: lib/cannery_web/templates/user_settings/edit.html.heex:113
msgid "Change Language"
msgstr ""
#, elixir-autogen, elixir-format
#: lib/cannery_web/templates/user_settings/edit.html.heex:134
msgid "Change language"
msgstr ""
#, elixir-autogen, elixir-format
#: lib/cannery_web/live/ammo_group_live/show.html.heex:55
msgid "View in Catalog"
msgstr ""
#, elixir-autogen, elixir-format
#: lib/cannery_web/live/ammo_group_live/index.html.heex:31
msgid "add an ammo type first"
msgstr ""

View File

@ -0,0 +1,930 @@
msgid ""
msgstr ""
"Project-Id-Version: PACKAGE VERSION\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2022-05-21 19:44+0000\n"
"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
"Last-Translator: Automatically generated\n"
"Language-Team: none\n"
"Language: es\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"X-Generator: Translate Toolkit 3.6.2\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.
#, elixir-autogen, elixir-format
#: lib/cannery_web/live/home_live.ex:64
msgid "%{name} lets you easily keep an eye on your ammo levels before and after range day"
msgstr ""
#, elixir-autogen, elixir-format
#: lib/cannery_web/live/home_live.ex:86
msgid "Access from any internet-capable device"
msgstr ""
#, elixir-autogen, elixir-format
#: lib/cannery_web/live/invite_live/index.html.heex:90
msgid "Admins"
msgstr ""
#, elixir-autogen, elixir-format
#: lib/cannery_web/live/home_live.ex:100
msgid "Admins:"
msgstr ""
#, elixir-autogen, elixir-format
#: lib/cannery_web/components/topbar.ex:62
#: lib/cannery_web/live/ammo_group_live/index.html.heex:3
#: lib/cannery_web/live/range_live/index.ex:80
msgid "Ammo"
msgstr ""
#, elixir-autogen, elixir-format
#: lib/cannery_web/live/ammo_group_live/form_component.html.heex:21
#: lib/cannery_web/live/ammo_group_live/index.ex:81
msgid "Ammo type"
msgstr ""
#, elixir-autogen, elixir-format
#: lib/cannery_web/live/ammo_type_live/index.ex:87
#: lib/cannery_web/live/ammo_type_live/show.html.heex:100
msgid "Average Price paid"
msgstr ""
#, elixir-autogen, elixir-format
#: lib/cannery_web/live/tag_live/form_component.ex:79
msgid "Background color"
msgstr ""
#, elixir-autogen, elixir-format
#: lib/cannery_web/live/ammo_type_live/form_component.html.heex:140
#: lib/cannery_web/live/ammo_type_live/index.ex:71
#: lib/cannery_web/live/ammo_type_live/show.html.heex:53
msgid "Blank"
msgstr ""
#, elixir-autogen, elixir-format
#: lib/cannery_web/live/ammo_type_live/form_component.html.heex:68
msgid "Brass"
msgstr ""
#, elixir-autogen, elixir-format
#: lib/cannery_web/live/ammo_type_live/form_component.html.heex:44
#: lib/cannery_web/live/ammo_type_live/index.ex:53
#: lib/cannery_web/live/ammo_type_live/show.html.heex:39
msgid "Bullet core"
msgstr ""
#, elixir-autogen, elixir-format
#: lib/cannery_web/live/ammo_type_live/form_component.html.heex:37
#: lib/cannery_web/live/ammo_type_live/index.ex:52
#: lib/cannery_web/live/ammo_type_live/show.html.heex:38
msgid "Bullet type"
msgstr ""
#, elixir-autogen, elixir-format
#: lib/cannery_web/live/ammo_type_live/form_component.html.heex:58
#: lib/cannery_web/live/ammo_type_live/index.ex:55
#: lib/cannery_web/live/ammo_type_live/show.html.heex:41
msgid "Caliber"
msgstr ""
#, elixir-autogen, elixir-format
#: lib/cannery_web/live/ammo_type_live/form_component.html.heex:51
#: lib/cannery_web/live/ammo_type_live/index.ex:54
#: lib/cannery_web/live/ammo_type_live/show.html.heex:40
msgid "Cartridge"
msgstr ""
#, elixir-autogen, elixir-format
#: lib/cannery_web/live/ammo_type_live/form_component.html.heex:65
#: lib/cannery_web/live/ammo_type_live/index.ex:56
#: lib/cannery_web/live/ammo_type_live/show.html.heex:42
msgid "Case material"
msgstr ""
#, elixir-autogen, elixir-format
#: lib/cannery_web/components/move_ammo_group_component.ex:67
#: lib/cannery_web/live/ammo_group_live/form_component.html.heex:48
#: lib/cannery_web/live/ammo_group_live/index.ex:86
msgid "Container"
msgstr ""
#, elixir-autogen, elixir-format
#: lib/cannery_web/components/topbar.ex:50
#: lib/cannery_web/live/container_live/index.ex:36
#: lib/cannery_web/live/container_live/index.html.heex:3
msgid "Containers"
msgstr ""
#, elixir-autogen, elixir-format
#: lib/cannery_web/live/ammo_type_live/form_component.html.heex:144
#: lib/cannery_web/live/ammo_type_live/index.ex:72
#: lib/cannery_web/live/ammo_type_live/show.html.heex:54
msgid "Corrosive"
msgstr ""
#, elixir-autogen, elixir-format
#: lib/cannery_web/live/ammo_group_live/form_component.html.heex:27
#: lib/cannery_web/live/ammo_group_live/index.ex:82
msgid "Count"
msgstr ""
#, elixir-autogen, elixir-format
#: lib/cannery_web/components/ammo_group_card.ex:29
#: lib/cannery_web/live/ammo_group_live/show.html.heex:8
msgid "Count:"
msgstr ""
#, elixir-autogen, elixir-format
#: lib/cannery_web/live/ammo_type_live/form_component.html.heex:24
#: lib/cannery_web/live/container_live/form_component.html.heex:27
msgid "Description"
msgstr ""
#, elixir-autogen, elixir-format
#: lib/cannery_web/components/container_card.ex:31
#: lib/cannery_web/live/container_live/show.html.heex:8
msgid "Description:"
msgstr ""
#, elixir-autogen, elixir-format
#: lib/cannery_web/live/invite_live/index.html.heex:59
msgid "Disable"
msgstr ""
#, elixir-autogen, elixir-format
#: lib/cannery_web/live/home_live.ex:61
msgid "Easy to Use:"
msgstr ""
#, elixir-autogen, elixir-format
#: lib/cannery_web/live/ammo_group_live/index.ex:38
msgid "Edit Ammo group"
msgstr ""
#, elixir-autogen, elixir-format
#: lib/cannery_web/live/ammo_type_live/index.ex:23
#: lib/cannery_web/live/ammo_type_live/show.ex:45
msgid "Edit Ammo type"
msgstr ""
#, elixir-autogen, elixir-format
#: lib/cannery_web/live/invite_live/index.ex:33
msgid "Edit Invite"
msgstr ""
#, elixir-autogen, elixir-format
#: lib/cannery_web/live/tag_live/index.ex:21
msgid "Edit Tag"
msgstr ""
#, elixir-autogen, elixir-format
#: lib/cannery_web/live/invite_live/index.html.heex:63
msgid "Enable"
msgstr ""
#, elixir-autogen, elixir-format
#: lib/cannery_web/live/ammo_type_live/form_component.html.heex:35
msgid "Example bullet type abbreviations"
msgstr ""
#, elixir-autogen, elixir-format
#: lib/cannery_web/live/ammo_type_live/form_component.html.heex:40
msgid "FMJ"
msgstr ""
#, elixir-autogen, elixir-format
#: lib/cannery_web/live/ammo_type_live/form_component.html.heex:103
#: lib/cannery_web/live/ammo_type_live/index.ex:65
#: lib/cannery_web/live/ammo_type_live/show.html.heex:47
msgid "Grains"
msgstr ""
#, elixir-autogen, elixir-format
#: lib/cannery_web/live/ammo_type_live/form_component.html.heex:136
#: lib/cannery_web/live/ammo_type_live/index.ex:70
#: lib/cannery_web/live/ammo_type_live/show.html.heex:52
msgid "Incendiary"
msgstr ""
#, elixir-autogen, elixir-format
#: lib/cannery_web/live/home_live.ex:95
msgid "Instance Information"
msgstr ""
#, elixir-autogen, elixir-format
#: lib/cannery_web/components/invite_card.ex:25
msgid "Invite Disabled"
msgstr ""
#, elixir-autogen, elixir-format
#: lib/cannery_web/live/home_live.ex:126
msgid "Invite Only"
msgstr ""
#, elixir-autogen, elixir-format
#: lib/cannery_web/components/topbar.ex:75
#: lib/cannery_web/live/invite_live/index.ex:41
#: lib/cannery_web/live/invite_live/index.html.heex:3
msgid "Invites"
msgstr ""
#, elixir-autogen, elixir-format
#: lib/cannery_web/templates/user_session/new.html.heex:28
msgid "Keep me logged in for 60 days"
msgstr ""
#, elixir-autogen, elixir-format
#: lib/cannery_web/components/move_ammo_group_component.ex:69
#: lib/cannery_web/live/container_live/form_component.html.heex:42
msgid "Location"
msgstr ""
#, elixir-autogen, elixir-format
#: lib/cannery_web/components/container_card.ex:43
#: lib/cannery_web/live/container_live/show.html.heex:20
msgid "Location:"
msgstr ""
#, elixir-autogen, elixir-format
#: lib/cannery_web/live/container_live/form_component.html.heex:38
msgid "Magazine, Clip, Ammo Box, etc"
msgstr ""
#, elixir-autogen, elixir-format
#: lib/cannery_web/live/ammo_type_live/form_component.html.heex:148
#: lib/cannery_web/live/ammo_type_live/index.ex:73
#: lib/cannery_web/live/ammo_type_live/show.html.heex:55
msgid "Manufacturer"
msgstr ""
#, elixir-autogen, elixir-format
#: lib/cannery_web/live/container_live/form_component.html.heex:31
msgid "Metal ammo can with the anime girl sticker"
msgstr ""
#, elixir-autogen, elixir-format
#: lib/cannery_web/live/container_live/form_component.html.heex:23
msgid "My cool ammo can"
msgstr ""
#, elixir-autogen, elixir-format
#: lib/cannery_web/live/ammo_type_live/form_component.html.heex:20
#: lib/cannery_web/live/ammo_type_live/index.ex:51
#: lib/cannery_web/live/container_live/form_component.html.heex:20
#: lib/cannery_web/live/invite_live/form_component.html.heex:20
#: lib/cannery_web/live/tag_live/form_component.ex:75
msgid "Name"
msgstr ""
#, elixir-autogen, elixir-format
#: lib/cannery_web/live/ammo_type_live/index.ex:29
msgid "New Ammo type"
msgstr ""
#, elixir-autogen, elixir-format
#: lib/cannery_web/live/container_live/index.ex:31
msgid "New Container"
msgstr ""
#, elixir-autogen, elixir-format
#: lib/cannery_web/live/invite_live/index.ex:37
msgid "New Invite"
msgstr ""
#, elixir-autogen, elixir-format
#: lib/cannery_web/live/tag_live/index.ex:27
msgid "New Tag"
msgstr ""
#, elixir-autogen, elixir-format
#: lib/cannery_web/live/ammo_group_live/index.html.heex:8
msgid "No Ammo"
msgstr ""
#, elixir-autogen, elixir-format
#: lib/cannery_web/live/ammo_type_live/index.html.heex:8
msgid "No Ammo Types"
msgstr ""
#, elixir-autogen, elixir-format
#: lib/cannery_web/live/ammo_type_live/show.html.heex:120
msgid "No ammo for this type"
msgstr ""
#, elixir-autogen, elixir-format
#: lib/cannery_web/live/container_live/index.html.heex:8
msgid "No containers"
msgstr ""
#, elixir-autogen, elixir-format
#: lib/cannery_web/live/invite_live/index.html.heex:8
msgid "No invites"
msgstr ""
#, elixir-autogen, elixir-format
#: lib/cannery_web/live/container_live/edit_tags_component.html.heex:30
#: lib/cannery_web/live/tag_live/index.html.heex:10
msgid "No tags"
msgstr ""
#, elixir-autogen, elixir-format
#: lib/cannery_web/components/add_shot_group_component.html.heex:30
#: lib/cannery_web/live/ammo_group_live/form_component.html.heex:41
#: lib/cannery_web/live/ammo_group_live/show.ex:88
#: lib/cannery_web/live/range_live/form_component.html.heex:29
#: lib/cannery_web/live/range_live/index.ex:82
msgid "Notes"
msgstr ""
#, elixir-autogen, elixir-format
#: lib/cannery_web/components/ammo_group_card.ex:35
#: lib/cannery_web/live/ammo_group_live/show.html.heex:24
msgid "Notes:"
msgstr ""
#, elixir-autogen, elixir-format
#: lib/cannery_web/live/container_live/form_component.html.heex:46
msgid "On the bookshelf"
msgstr ""
#, elixir-autogen, elixir-format
#: lib/cannery_web/live/ammo_type_live/form_component.html.heex:111
#: lib/cannery_web/live/ammo_type_live/index.ex:66
#: lib/cannery_web/live/ammo_type_live/show.html.heex:48
msgid "Pressure"
msgstr ""
#, elixir-autogen, elixir-format
#: lib/cannery_web/live/ammo_group_live/form_component.html.heex:34
#: lib/cannery_web/live/ammo_group_live/index.ex:83
msgid "Price paid"
msgstr ""
#, elixir-autogen, elixir-format
#: lib/cannery_web/components/ammo_group_card.ex:47
msgid "Price paid:"
msgstr ""
#, elixir-autogen, elixir-format
#: lib/cannery_web/live/ammo_type_live/form_component.html.heex:118
#: lib/cannery_web/live/ammo_type_live/index.ex:67
#: lib/cannery_web/live/ammo_type_live/show.html.heex:49
msgid "Primer type"
msgstr ""
#, elixir-autogen, elixir-format
#: lib/cannery_web/live/home_live.ex:125
msgid "Public Signups"
msgstr ""
#, elixir-autogen, elixir-format
#: lib/cannery_web/live/home_live.ex:73
msgid "Secure:"
msgstr ""
#, elixir-autogen, elixir-format
#: lib/cannery_web/live/home_live.ex:76
msgid "Self-host your own instance, or use an instance from someone you trust."
msgstr ""
#, elixir-autogen, elixir-format
#: lib/cannery_web/live/invite_live/index.html.heex:79
msgid "Set Unlimited"
msgstr ""
#, elixir-autogen, elixir-format
#: lib/cannery_web/controllers/user_settings_controller.ex:10
#: lib/cannery_web/templates/user_settings/edit.html.heex:3
msgid "Settings"
msgstr ""
#, elixir-autogen, elixir-format
#: lib/cannery_web/live/ammo_type_live/show.ex:44
msgid "Show Ammo type"
msgstr ""
#, elixir-autogen, elixir-format
#: lib/cannery_web/live/home_live.ex:83
msgid "Simple:"
msgstr ""
#, elixir-autogen, elixir-format
#: lib/cannery_web/live/ammo_type_live/form_component.html.heex:47
msgid "Steel"
msgstr ""
#, elixir-autogen, elixir-format
#: lib/cannery_web/live/ammo_group_live/show.html.heex:103
msgid "Stored in"
msgstr ""
#, elixir-autogen, elixir-format
#: lib/cannery_web/components/topbar.ex:44
#: lib/cannery_web/live/tag_live/index.ex:32
#: lib/cannery_web/live/tag_live/index.html.heex:3
msgid "Tags"
msgstr ""
#, elixir-autogen, elixir-format
#: lib/cannery_web/live/tag_live/index.html.heex:6
msgid "Tags can be added to your containers to help you organize"
msgstr ""
#, elixir-autogen, elixir-format
#: lib/cannery_web/live/tag_live/form_component.ex:85
msgid "Text color"
msgstr ""
#, elixir-autogen, elixir-format
#: lib/cannery_web/live/home_live.ex:52
msgid "The self-hosted firearm tracker website"
msgstr ""
#, elixir-autogen, elixir-format
#: lib/cannery_web/live/ammo_type_live/form_component.html.heex:132
#: lib/cannery_web/live/ammo_type_live/index.ex:69
#: lib/cannery_web/live/ammo_type_live/show.html.heex:51
msgid "Tracer"
msgstr ""
#, elixir-autogen, elixir-format
#: lib/cannery_web/components/move_ammo_group_component.ex:68
#: lib/cannery_web/live/container_live/form_component.html.heex:35
msgid "Type"
msgstr ""
#, elixir-autogen, elixir-format
#: lib/cannery_web/components/container_card.ex:37
#: lib/cannery_web/live/container_live/show.html.heex:14
msgid "Type:"
msgstr ""
#, elixir-autogen, elixir-format
#: lib/cannery_web/live/invite_live/index.html.heex:119
msgid "Users"
msgstr ""
#, elixir-autogen, elixir-format
#: lib/cannery_web/components/invite_card.ex:20
msgid "Uses Left:"
msgstr ""
#, elixir-autogen, elixir-format
#: lib/cannery_web/live/invite_live/form_component.html.heex:24
msgid "Uses left"
msgstr ""
#, elixir-autogen, elixir-format
#: lib/cannery_web/live/home_live.ex:48
msgid "Welcome to %{name}"
msgstr ""
#, elixir-autogen, elixir-format
#: lib/cannery_web/live/home_live.ex:77
msgid "Your data stays with you, period"
msgstr ""
#, elixir-autogen, elixir-format
#: lib/cannery_web/live/container_live/show.html.heex:61
msgid "No tags for this container"
msgstr ""
#, elixir-autogen, elixir-format
#: lib/cannery_web/components/topbar.ex:68
#: lib/cannery_web/live/ammo_group_live/index.ex:85
msgid "Range"
msgstr ""
#, elixir-autogen, elixir-format
#: lib/cannery_web/live/range_live/index.html.heex:3
msgid "Range day"
msgstr ""
#, elixir-autogen, elixir-format
#: lib/cannery_web/live/ammo_group_live/show.ex:89
#: lib/cannery_web/live/range_live/index.ex:83
msgid "Date"
msgstr ""
#, elixir-autogen, elixir-format
#: lib/cannery_web/live/range_live/form_component.html.heex:21
msgid "Shots fired"
msgstr ""
#, elixir-autogen, elixir-format
#: lib/cannery_web/live/range_live/index.html.heex:8
msgid "No ammo staged"
msgstr ""
#, elixir-autogen, elixir-format
#: lib/cannery_web/live/ammo_group_live/show.html.heex:82
#: lib/cannery_web/live/range_live/index.html.heex:33
msgid "Stage for range"
msgstr ""
#, elixir-autogen, elixir-format
#: lib/cannery_web/live/ammo_group_live/show.html.heex:81
#: lib/cannery_web/live/range_live/index.html.heex:32
msgid "Unstage from range"
msgstr ""
#, elixir-autogen, elixir-format
#: lib/cannery_web/components/add_shot_group_component.html.heex:3
#: lib/cannery_web/live/ammo_group_live/index.ex:26
msgid "Record shots"
msgstr ""
#, elixir-autogen, elixir-format
#: lib/cannery_web/live/ammo_group_live/index.ex:49
msgid "Ammo groups"
msgstr ""
#, elixir-autogen, elixir-format
#: lib/cannery_web/components/add_shot_group_component.html.heex:38
#: lib/cannery_web/live/range_live/form_component.html.heex:36
msgid "Date (UTC)"
msgstr ""
#, elixir-autogen, elixir-format
#: lib/cannery_web/live/ammo_group_live/show.ex:37
#: lib/cannery_web/live/range_live/index.ex:32
msgid "Edit Shot Records"
msgstr ""
#, elixir-autogen, elixir-format
#: lib/cannery_web/live/range_live/index.ex:38
msgid "New Shot Records"
msgstr ""
#, elixir-autogen, elixir-format
#: lib/cannery_web/live/range_live/index.html.heex:48
msgid "No shots recorded"
msgstr ""
#, elixir-autogen, elixir-format
#: lib/cannery_web/components/add_shot_group_component.html.heex:21
msgid "Rounds left"
msgstr ""
#, elixir-autogen, elixir-format
#: lib/cannery_web/live/ammo_group_live/show.ex:87
#: lib/cannery_web/live/range_live/index.ex:81
msgid "Rounds shot"
msgstr ""
#, elixir-autogen, elixir-format
#: lib/cannery_web/live/range_live/index.ex:44
msgid "Shot Records"
msgstr ""
#, elixir-autogen, elixir-format
#: lib/cannery_web/live/ammo_group_live/index.ex:32
msgid "Move Ammo group"
msgstr ""
#, elixir-autogen, elixir-format
#: lib/cannery_web/components/move_ammo_group_component.ex:80
msgid "Move ammo"
msgstr ""
#, elixir-autogen, elixir-format
#: lib/cannery_web/components/move_ammo_group_component.ex:85
msgid "No other containers"
msgstr ""
#, elixir-autogen, elixir-format
#: lib/cannery_web/live/range_live/index.html.heex:53
msgid "Shot log"
msgstr ""
#, elixir-autogen, elixir-format
#: lib/cannery_web/components/ammo_group_card.ex:48
#: lib/cannery_web/live/ammo_group_live/index.ex:125
#: lib/cannery_web/live/ammo_group_live/show.html.heex:37
#: lib/cannery_web/live/ammo_group_live/show.html.heex:44
#: lib/cannery_web/live/ammo_type_live/index.ex:114
#: lib/cannery_web/live/ammo_type_live/show.html.heex:104
msgid "$%{amount}"
msgstr ""
#, elixir-autogen, elixir-format
#: lib/cannery_web/live/ammo_type_live/form_component.html.heex:75
msgid "Bimetal"
msgstr ""
#, elixir-autogen, elixir-format
#: lib/cannery_web/live/ammo_type_live/form_component.html.heex:72
#: lib/cannery_web/live/ammo_type_live/index.ex:57
#: lib/cannery_web/live/ammo_type_live/show.html.heex:43
msgid "Jacket type"
msgstr ""
#, elixir-autogen, elixir-format
#: lib/cannery_web/live/ammo_type_live/form_component.html.heex:79
#: lib/cannery_web/live/ammo_type_live/index.ex:58
#: lib/cannery_web/live/ammo_type_live/show.html.heex:44
msgid "Muzzle velocity"
msgstr ""
#, elixir-autogen, elixir-format
#: lib/cannery_web/live/ammo_type_live/form_component.html.heex:93
#: lib/cannery_web/live/ammo_type_live/index.ex:61
#: lib/cannery_web/live/ammo_type_live/show.html.heex:46
msgid "Powder grains per charge"
msgstr ""
#, elixir-autogen, elixir-format
#: lib/cannery_web/live/ammo_type_live/form_component.html.heex:89
#: lib/cannery_web/live/ammo_type_live/index.ex:59
#: lib/cannery_web/live/ammo_type_live/show.html.heex:45
msgid "Powder type"
msgstr ""
#, elixir-autogen, elixir-format
#: lib/cannery_web/live/ammo_type_live/form_component.html.heex:152
#: lib/cannery_web/live/ammo_type_live/index.ex:74
#: lib/cannery_web/live/ammo_type_live/show.html.heex:56
msgid "UPC"
msgstr ""
#, elixir-autogen, elixir-format
#: lib/cannery_web/templates/user_settings/edit.html.heex:78
msgid "Confirm new password"
msgstr ""
#, elixir-autogen, elixir-format
#: lib/cannery_web/templates/user_settings/edit.html.heex:32
#: lib/cannery_web/templates/user_settings/edit.html.heex:87
msgid "Current password"
msgstr ""
#, elixir-autogen, elixir-format
#: lib/cannery_web/templates/user_settings/edit.html.heex:71
msgid "New password"
msgstr ""
#, elixir-autogen, elixir-format
#: lib/cannery_web/live/ammo_group_live/index.ex:148
msgid "Stage"
msgstr ""
#, elixir-autogen, elixir-format
#: lib/cannery_web/live/ammo_group_live/index.ex:148
msgid "Unstage"
msgstr ""
#, elixir-autogen, elixir-format
#: lib/cannery_web/live/ammo_type_live/form_component.html.heex:125
#: lib/cannery_web/live/ammo_type_live/index.ex:68
#: lib/cannery_web/live/ammo_type_live/show.html.heex:50
msgid "Firing type"
msgstr ""
#, elixir-autogen, elixir-format
#: lib/cannery_web/templates/layout/live.html.heex:50
msgid "Reconnecting..."
msgstr ""
#, elixir-autogen, elixir-format
#: lib/cannery_web/templates/layout/live.html.heex:37
msgid "Loading..."
msgstr ""
#, elixir-autogen, elixir-format
#: lib/cannery_web/live/container_live/index.ex:27
#: lib/cannery_web/live/container_live/show.ex:95
msgid "Edit %{name}"
msgstr ""
#, elixir-autogen, elixir-format
#: lib/cannery_web/live/container_live/index.ex:46
#: lib/cannery_web/live/container_live/show.ex:96
msgid "Edit %{name} tags"
msgstr ""
#, elixir-autogen, elixir-format
#: lib/cannery_web/components/container_card.ex:55
#: lib/cannery_web/live/container_live/show.html.heex:32
msgid "Rounds:"
msgstr ""
#, elixir-autogen, elixir-format
#: lib/cannery_web/live/container_live/show.ex:94
msgid "Show %{name}"
msgstr ""
#, elixir-autogen, elixir-format
#: lib/cannery_web/live/ammo_type_live/index.ex:113
#: lib/cannery_web/live/ammo_type_live/show.html.heex:110
msgid "No cost information"
msgstr ""
#, elixir-autogen, elixir-format
#: lib/cannery_web/live/ammo_group_live/index.ex:84
msgid "% left"
msgstr ""
#, elixir-autogen, elixir-format
#: lib/cannery_web/live/ammo_group_live/show.html.heex:43
msgid "Current value:"
msgstr ""
#, elixir-autogen, elixir-format
#: lib/cannery_web/live/ammo_group_live/show.html.heex:36
msgid "Original cost:"
msgstr ""
#, elixir-autogen, elixir-format
#: lib/cannery_web/live/ammo_group_live/show.html.heex:13
msgid "Original count:"
msgstr ""
#, elixir-autogen, elixir-format
#: lib/cannery_web/live/ammo_group_live/show.html.heex:18
msgid "Percentage left:"
msgstr ""
#, elixir-autogen, elixir-format
#: lib/cannery_web/live/ammo_group_live/show.html.heex:116
msgid "Rounds used"
msgstr ""
#, elixir-autogen, elixir-format
#: lib/cannery_web/live/ammo_type_live/show.html.heex:75
msgid "Current # of rounds:"
msgstr ""
#, elixir-autogen, elixir-format
#: lib/cannery_web/live/ammo_type_live/index.ex:86
msgid "Total # of rounds"
msgstr ""
#, elixir-autogen, elixir-format
#: lib/cannery_web/live/ammo_type_live/show.html.heex:83
msgid "Total rounds shot:"
msgstr ""
#, elixir-autogen, elixir-format
#: lib/cannery_web/controllers/user_confirmation_controller.ex:8
msgid "Confirm your account"
msgstr ""
#, elixir-autogen, elixir-format
#: lib/cannery_web/controllers/user_reset_password_controller.ex:9
msgid "Forgot your password?"
msgstr ""
#, elixir-autogen, elixir-format
#: lib/cannery_web/controllers/user_session_controller.ex:8
msgid "Log in"
msgstr ""
#, elixir-autogen, elixir-format
#: lib/cannery_web/controllers/user_registration_controller.ex:35
msgid "Register"
msgstr ""
#, elixir-autogen, elixir-format
#: lib/cannery_web/controllers/user_reset_password_controller.ex:36
msgid "Reset your password"
msgstr ""
#, elixir-autogen, elixir-format
#: lib/cannery_web/live/ammo_group_live/show.ex:36
#: lib/cannery_web/live/range_live/index.ex:26
msgid "Record Shots"
msgstr ""
#, elixir-autogen, elixir-format
#: lib/cannery_web/live/ammo_group_live/form_component.html.heex:58
msgid "Copies"
msgstr ""
#, elixir-autogen, elixir-format
#: lib/cannery_web/live/ammo_type_live/index.ex:34
msgid "Ammo types"
msgstr ""
#, elixir-autogen, elixir-format
#: lib/cannery_web/live/ammo_group_live/index.ex:87
msgid "Added on"
msgstr ""
#, elixir-autogen, elixir-format
#: lib/cannery_web/components/ammo_group_card.ex:41
#: lib/cannery_web/live/ammo_group_live/show.html.heex:30
#: lib/cannery_web/live/ammo_type_live/show.html.heex:91
msgid "Added on:"
msgstr ""
#, elixir-autogen, elixir-format
#: lib/cannery_web/components/user_card.ex:30
msgid "User registered on"
msgstr ""
#, elixir-autogen, elixir-format
#: lib/cannery_web/templates/user_registration/new.html.heex:37
#: lib/cannery_web/templates/user_settings/edit.html.heex:129
msgid "English"
msgstr ""
#, elixir-autogen, elixir-format
#: lib/cannery_web/templates/user_registration/new.html.heex:37
#: lib/cannery_web/templates/user_settings/edit.html.heex:129
msgid "French"
msgstr ""
#, elixir-autogen, elixir-format
#: lib/cannery_web/templates/user_registration/new.html.heex:37
#: lib/cannery_web/templates/user_settings/edit.html.heex:129
msgid "German"
msgstr ""
#, elixir-autogen, elixir-format
#: lib/cannery_web/templates/user_registration/new.html.heex:33
msgid "Language"
msgstr ""
#, elixir-autogen, elixir-format
#: lib/cannery_web/live/home_live.ex:147
msgid "Get involved!"
msgstr ""
#, elixir-autogen, elixir-format
#: lib/cannery_web/live/home_live.ex:164
msgid "Help translate"
msgstr ""
#, elixir-autogen, elixir-format
#: lib/cannery_web/live/home_live.ex:173
msgid "Report bugs or request features"
msgstr ""
#, elixir-autogen, elixir-format
#: lib/cannery_web/live/home_live.ex:155
msgid "View the source code"
msgstr ""
#, elixir-autogen, elixir-format
#: lib/cannery_web/components/topbar.ex:56
#: lib/cannery_web/live/ammo_type_live/index.html.heex:3
msgid "Catalog"
msgstr ""
#, elixir-autogen, elixir-format, fuzzy
#: lib/cannery_web/live/ammo_group_live/show.ex:40
msgid "Edit Ammo"
msgstr ""
#, elixir-autogen, elixir-format, fuzzy
#: lib/cannery_web/live/ammo_group_live/show.ex:38
msgid "Move Ammo"
msgstr ""
#, elixir-autogen, elixir-format, fuzzy
#: lib/cannery_web/live/container_live/show.html.heex:90
msgid "No ammo in this container"
msgstr ""
#, elixir-autogen, elixir-format, fuzzy
#: lib/cannery_web/live/ammo_group_live/show.ex:39
msgid "Show Ammo"
msgstr ""
#, elixir-autogen, elixir-format, fuzzy
#: lib/cannery_web/live/ammo_group_live/show.html.heex:108
msgid "This ammo is not in a container"
msgstr ""
#, elixir-autogen, elixir-format
#: lib/cannery_web/components/container_card.ex:50
#: lib/cannery_web/live/container_live/show.html.heex:27
msgid "Packs:"
msgstr ""
#, elixir-autogen, elixir-format
#: lib/cannery_web/components/topbar.ex:24
#: lib/cannery_web/live/home_live.ex:42
msgid "Cannery logo"
msgstr ""
#, elixir-autogen, elixir-format
#: lib/cannery_web/live/home_live.ex:44
msgid "isn't he cute >:3"
msgstr ""
#, elixir-autogen, elixir-format
#: lib/cannery_web/live/invite_live/form_component.html.heex:28
msgid "Leave \"Uses left\" blank to make invite unlimited"
msgstr ""

View File

@ -0,0 +1,107 @@
msgid ""
msgstr ""
"Project-Id-Version: PACKAGE VERSION\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2022-05-21 19:44+0000\n"
"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
"Last-Translator: Automatically generated\n"
"Language-Team: none\n"
"Language: es\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"X-Generator: Translate Toolkit 3.6.2\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.
#, elixir-autogen, elixir-format
#: lib/cannery/accounts/email.ex:30
msgid "Confirm your %{name} account"
msgstr ""
#, elixir-autogen, elixir-format
#: 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/reset_password.html.eex:3
#: 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.txt.eex:2
msgid "Hi %{email},"
msgstr ""
#, elixir-autogen, elixir-format
#: lib/cannery_web/templates/email/confirm_email.txt.eex:10
msgid "If you didn't create an account at %{url}, please ignore this."
msgstr ""
#, elixir-autogen, elixir-format
#: lib/cannery_web/templates/email/reset_password.txt.eex:8
#: lib/cannery_web/templates/email/update_email.txt.eex:8
msgid "If you didn't request this change from %{url}, please ignore this."
msgstr ""
#, elixir-autogen, elixir-format
#: lib/cannery/accounts/email.ex:37
msgid "Reset your %{name} password"
msgstr ""
#, elixir-autogen, elixir-format
#: lib/cannery/accounts/email.ex:44
msgid "Update your %{name} email"
msgstr ""
#, elixir-autogen, elixir-format
#: lib/cannery_web/templates/email/confirm_email.html.eex:9
msgid "Welcome to %{name}!"
msgstr ""
#, elixir-autogen, elixir-format
#: lib/cannery_web/templates/email/confirm_email.txt.eex:4
msgid "Welcome to %{name}%!"
msgstr ""
#, elixir-autogen, elixir-format
#: lib/cannery_web/templates/email/update_email.html.eex:8
#: lib/cannery_web/templates/email/update_email.txt.eex:4
msgid "You can change your email by visiting the URL below:"
msgstr ""
#, elixir-autogen, elixir-format
#: lib/cannery_web/templates/email/confirm_email.html.eex:14
#: lib/cannery_web/templates/email/confirm_email.txt.eex:6
msgid "You can confirm your account by visiting the URL below:"
msgstr ""
#, elixir-autogen, elixir-format
#: lib/cannery_web/templates/email/reset_password.html.eex:8
#: lib/cannery_web/templates/email/reset_password.txt.eex:4
msgid "You can reset your password by visiting the URL below:"
msgstr ""
#, elixir-autogen, elixir-format
#: lib/cannery_web/templates/email/confirm_email.html.eex:22
msgid "If you didn't create an account at %{name}, please ignore this."
msgstr ""
#, elixir-autogen, elixir-format
#: lib/cannery_web/templates/email/reset_password.html.eex:16
#: lib/cannery_web/templates/email/update_email.html.eex:16
msgid "If you didn't request this change from %{name}, please ignore this."
msgstr ""
#, elixir-autogen, elixir-format
#: lib/cannery_web/templates/layout/email.txt.eex:9
msgid "This email was sent from %{name} at %{url}, the self-hosted firearm tracker website."
msgstr ""
#, elixir-autogen, elixir-format
#: lib/cannery_web/templates/layout/email.html.heex:13
msgid "This email was sent from %{name}, the self-hosted firearm tracker website."
msgstr ""

View File

@ -0,0 +1,196 @@
msgid ""
msgstr ""
"Project-Id-Version: PACKAGE VERSION\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2022-05-21 19:44+0000\n"
"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
"Last-Translator: Automatically generated\n"
"Language-Team: none\n"
"Language: es\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"X-Generator: Translate Toolkit 3.6.2\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.
#, elixir-autogen, elixir-format
#: lib/cannery/containers.ex:140
msgid "Container must be empty before deleting"
msgstr ""
#, elixir-autogen, elixir-format
#: lib/cannery_web/live/container_live/index.ex:69
#: lib/cannery_web/live/container_live/show.ex:71
msgid "Could not delete %{name}: %{error}"
msgstr ""
#, elixir-autogen, elixir-format
#: lib/cannery_web/live/container_live/index.ex:57
msgid "Could not find that container"
msgstr ""
#, elixir-autogen, elixir-format
#: lib/cannery_web/controllers/user_settings_controller.ex:84
msgid "Email change link is invalid or it has expired."
msgstr ""
#, elixir-autogen, elixir-format
#: lib/cannery_web/templates/error/error.html.heex:8
msgid "Error"
msgstr ""
#, elixir-autogen, elixir-format
#: lib/cannery_web/templates/error/error.html.heex:28
msgid "Go back home"
msgstr ""
#, elixir-autogen, elixir-format
#: lib/cannery_web/views/error_view.ex:11
msgid "Internal Server Error"
msgstr ""
#, elixir-autogen, elixir-format
#: lib/cannery_web/controllers/user_session_controller.ex:17
msgid "Invalid email or password"
msgstr ""
#, elixir-autogen, elixir-format
#: lib/cannery_web/views/error_view.ex:9
msgid "Not found"
msgstr ""
#, elixir-autogen, elixir-format
#: 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_settings/edit.html.heex:21
#: lib/cannery_web/templates/user_settings/edit.html.heex:64
#: lib/cannery_web/templates/user_settings/edit.html.heex:119
msgid "Oops, something went wrong! Please check the errors below."
msgstr ""
#, elixir-autogen, elixir-format
#: lib/cannery_web/controllers/user_reset_password_controller.ex:63
msgid "Reset password link is invalid or it has expired."
msgstr ""
#, elixir-autogen, elixir-format
#: lib/cannery_web/controllers/user_registration_controller.ex:25
#: lib/cannery_web/controllers/user_registration_controller.ex:56
msgid "Sorry, public registration is disabled"
msgstr ""
#, elixir-autogen, elixir-format
#: lib/cannery_web/controllers/user_registration_controller.ex:15
#: lib/cannery_web/controllers/user_registration_controller.ex:46
msgid "Sorry, this invite was not found or expired"
msgstr ""
#, elixir-autogen, elixir-format
#: lib/cannery_web/controllers/user_settings_controller.ex:99
msgid "Unable to delete user"
msgstr ""
#, elixir-autogen, elixir-format
#: lib/cannery_web/views/error_view.ex:10
msgid "Unauthorized"
msgstr ""
#, elixir-autogen, elixir-format
#: lib/cannery_web/controllers/user_confirmation_controller.ex:54
msgid "User confirmation link is invalid or it has expired."
msgstr ""
#, elixir-autogen, elixir-format
#: lib/cannery_web/live/invite_live/index.ex:18
msgid "You are not authorized to view this page"
msgstr ""
#, elixir-autogen, elixir-format
#: lib/cannery_web/controllers/user_auth.ex:177
msgid "You are not authorized to view this page."
msgstr ""
#, elixir-autogen, elixir-format
#: lib/cannery/accounts/user.ex:130
msgid "did not change"
msgstr ""
#, elixir-autogen, elixir-format
#: lib/cannery/accounts/user.ex:151
msgid "does not match password"
msgstr ""
#, elixir-autogen, elixir-format
#: lib/cannery/accounts/user.ex:188
msgid "is not valid"
msgstr ""
#, elixir-autogen, elixir-format
#: lib/cannery/accounts/user.ex:84
msgid "must have the @ sign and no spaces"
msgstr ""
#, elixir-autogen, elixir-format
#: lib/cannery/tags.ex:40
msgid "Tag not found"
msgstr ""
#, elixir-autogen, elixir-format
#: lib/cannery_web/live/container_live/edit_tags_component.ex:30
msgid "Tag could not be added"
msgstr ""
#, elixir-autogen, elixir-format
#: lib/cannery/activity_log/shot_group.ex:115
msgid "Count must be at least 1"
msgstr ""
#, 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}"
msgstr ""
#, elixir-autogen, elixir-format
#: lib/cannery_web/controllers/user_auth.ex:39
#: lib/cannery_web/controllers/user_auth.ex:161
msgid "You must confirm your account and log in to access this page."
msgstr ""
#, elixir-autogen, elixir-format
#: lib/cannery_web/live/container_live/edit_tags_component.ex:52
msgid "Tag could not be removed"
msgstr ""
#, elixir-autogen, elixir-format
#: lib/cannery_web/live/ammo_group_live/form_component.ex:156
msgid "Could not parse number of copies"
msgstr ""
#, 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}"
msgstr ""
#, elixir-autogen, elixir-format
#: lib/cannery/ammo.ex:407
msgid "Invalid multiplier"
msgstr ""
#, elixir-autogen, elixir-format
#: lib/cannery/ammo/ammo_group.ex:84
msgid "Please select an ammo type and container"
msgstr ""
#, elixir-autogen, elixir-format
#: lib/cannery/activity_log/shot_group.ex:69
msgid "Please select a valid user and ammo group"
msgstr ""

View File

@ -0,0 +1,289 @@
msgid ""
msgstr ""
"Project-Id-Version: PACKAGE VERSION\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2022-05-21 19:44+0000\n"
"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
"Last-Translator: Automatically generated\n"
"Language-Team: none\n"
"Language: es\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"X-Generator: Translate Toolkit 3.6.2\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.
#, elixir-autogen, elixir-format
#: lib/cannery_web/live/ammo_type_live/form_component.ex:85
#: lib/cannery_web/live/container_live/form_component.ex:85
#: lib/cannery_web/live/invite_live/form_component.ex:80
#: lib/cannery_web/live/tag_live/form_component.ex:126
msgid "%{name} created successfully"
msgstr ""
#, elixir-autogen, elixir-format
#: lib/cannery_web/live/ammo_type_live/index.ex:41
#: lib/cannery_web/live/ammo_type_live/show.ex:38
#: lib/cannery_web/live/invite_live/index.ex:53
#: lib/cannery_web/live/invite_live/index.ex:133
#: lib/cannery_web/live/tag_live/index.ex:38
msgid "%{name} deleted succesfully"
msgstr ""
#, elixir-autogen, elixir-format
#: lib/cannery_web/live/invite_live/index.ex:109
msgid "%{name} disabled succesfully"
msgstr ""
#, elixir-autogen, elixir-format
#: lib/cannery_web/live/invite_live/index.ex:87
msgid "%{name} enabled succesfully"
msgstr ""
#, elixir-autogen, elixir-format
#: lib/cannery_web/live/container_live/index.ex:62
#: lib/cannery_web/live/container_live/show.ex:61
msgid "%{name} has been deleted"
msgstr ""
#, elixir-autogen, elixir-format
#: lib/cannery_web/live/invite_live/index.ex:67
msgid "%{name} updated succesfully"
msgstr ""
#, elixir-autogen, elixir-format
#: 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/invite_live/form_component.ex:62
#: lib/cannery_web/live/tag_live/form_component.ex:108
msgid "%{name} updated successfully"
msgstr ""
#, elixir-autogen, elixir-format
#: lib/cannery_web/controllers/user_settings_controller.ex:29
msgid "A link to confirm your email change has been sent to the new address."
msgstr ""
#, elixir-autogen, elixir-format
#: lib/cannery_web/live/ammo_group_live/index.ex:56
msgid "Ammo group deleted succesfully"
msgstr ""
#, 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!"
msgstr ""
#, 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}?"
msgstr ""
#, elixir-autogen, elixir-format
#: lib/cannery_web/live/invite_live/index.html.heex:49
msgid "Are you sure you want to delete the invite for %{name}?"
msgstr ""
#, elixir-autogen, elixir-format
#: lib/cannery_web/live/ammo_group_live/index.ex:184
#: lib/cannery_web/live/ammo_group_live/show.html.heex:71
msgid "Are you sure you want to delete this ammo?"
msgstr ""
#, elixir-autogen, elixir-format
#: lib/cannery_web/templates/user_settings/edit.html.heex:146
msgid "Are you sure you want to delete your account?"
msgstr ""
#, elixir-autogen, elixir-format
#: lib/cannery_web/components/topbar.ex:90
msgid "Are you sure you want to log out?"
msgstr ""
#, elixir-autogen, elixir-format
#: lib/cannery_web/live/invite_live/index.html.heex:74
msgid "Are you sure you want to make %{name} unlimited?"
msgstr ""
#, elixir-autogen, elixir-format
#: lib/cannery_web/controllers/user_settings_controller.ex:77
msgid "Email changed successfully."
msgstr ""
#, elixir-autogen, elixir-format
#: lib/cannery_web/controllers/user_confirmation_controller.ex:23
msgid "If your email is in our system and it has not been confirmed yet, you will receive an email with instructions shortly."
msgstr ""
#, elixir-autogen, elixir-format
#: lib/cannery_web/controllers/user_reset_password_controller.ex:24
msgid "If your email is in our system, you will receive instructions to reset your password shortly."
msgstr ""
#, elixir-autogen, elixir-format
#: lib/cannery_web/controllers/user_session_controller.ex:23
msgid "Logged out successfully."
msgstr ""
#, elixir-autogen, elixir-format
#: lib/cannery_web/controllers/user_reset_password_controller.ex:46
msgid "Password reset successfully."
msgstr ""
#, elixir-autogen, elixir-format
#: lib/cannery_web/controllers/user_settings_controller.ex:49
msgid "Password updated successfully."
msgstr ""
#, elixir-autogen, elixir-format
#: lib/cannery_web/controllers/user_registration_controller.ex:74
msgid "Please check your email to verify your account"
msgstr ""
#, elixir-autogen, elixir-format
#: lib/cannery_web/live/home_live.ex:104
msgid "Register to setup %{name}"
msgstr ""
#, elixir-autogen, elixir-format
#: 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_type_live/form_component.html.heex:157
#: 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/range_live/form_component.html.heex:42
#: lib/cannery_web/live/tag_live/form_component.ex:93
msgid "Saving..."
msgstr ""
#, elixir-autogen, elixir-format
#: lib/cannery_web/controllers/user_settings_controller.ex:95
msgid "Your account has been deleted"
msgstr ""
#, elixir-autogen, elixir-format
#: lib/cannery_web/live/container_live/edit_tags_component.html.heex:16
msgid "Are you sure you want to remove the %{tag_name} tag from %{container_name}?"
msgstr ""
#, elixir-autogen, elixir-format
#: lib/cannery_web/live/container_live/edit_tags_component.ex:36
msgid "%{name} added successfully"
msgstr ""
#, elixir-autogen, elixir-format
#: lib/cannery_web/live/container_live/show.ex:37
msgid "%{tag_name} has been removed from %{container_name}"
msgstr ""
#, elixir-autogen, elixir-format
#: lib/cannery_web/live/container_live/edit_tags_component.html.heex:54
msgid "Adding..."
msgstr ""
#, elixir-autogen, elixir-format
#: lib/cannery_web/components/add_shot_group_component.ex:56
msgid "Shots recorded successfully"
msgstr ""
#, elixir-autogen, elixir-format
#: lib/cannery_web/live/range_live/index.html.heex:29
msgid "Are you sure you want to unstage this ammo?"
msgstr ""
#, 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?"
msgstr ""
#, elixir-autogen, elixir-format
#: lib/cannery_web/live/ammo_group_live/show.ex:78
#: lib/cannery_web/live/range_live/index.ex:54
msgid "Shot records deleted succesfully"
msgstr ""
#, elixir-autogen, elixir-format
#: lib/cannery_web/live/range_live/form_component.ex:55
msgid "Shot records updated successfully"
msgstr ""
#, elixir-autogen, elixir-format
#: lib/cannery_web/controllers/user_confirmation_controller.ex:38
msgid "%{email} confirmed successfully."
msgstr ""
#, elixir-autogen, elixir-format
#: lib/cannery_web/components/move_ammo_group_component.ex:53
msgid "Ammo moved to %{name} successfully"
msgstr ""
#, elixir-autogen, elixir-format
#: lib/cannery_web/live/invite_live/index.ex:121
msgid "Copied to clipboard"
msgstr ""
#, elixir-autogen, elixir-format
#: lib/cannery_web/live/container_live/edit_tags_component.ex:58
msgid "%{name} removed successfully"
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:28
msgid "You'll need to"
msgstr ""
#, elixir-autogen, elixir-format
#: lib/cannery_web/live/ammo_group_live/form_component.html.heex:67
msgid "Creating..."
msgstr ""
#, elixir-autogen, elixir-format
#: lib/cannery_web/templates/user_settings/edit.html.heex:136
msgid "Are you sure you want to change your language?"
msgstr ""
#, elixir-autogen, elixir-format
#: lib/cannery_web/controllers/user_settings_controller.ex:65
msgid "Language updated successfully."
msgstr ""
#, elixir-autogen, elixir-format, fuzzy
#: lib/cannery_web/live/ammo_group_live/show.ex:50
msgid "Ammo deleted succesfully"
msgstr ""
#, elixir-autogen, elixir-format, fuzzy
#: lib/cannery_web/live/range_live/index.ex:68
msgid "Ammo unstaged succesfully"
msgstr ""
#, elixir-autogen, elixir-format, fuzzy
#: lib/cannery_web/live/ammo_group_live/form_component.ex:118
msgid "Ammo updated successfully"
msgstr ""
#, elixir-autogen, elixir-format, fuzzy
#: lib/cannery_web/live/ammo_group_live/form_component.ex:177
msgid "Ammo added successfully"
msgid_plural "Ammo added successfully"
msgstr[0] ""
msgstr[1] ""
#, elixir-autogen, elixir-format, fuzzy
#: lib/cannery_web/live/ammo_type_live/index.ex:140
#: lib/cannery_web/live/ammo_type_live/show.html.heex:27
msgid "Are you sure you want to delete %{name}? This will delete all %{name} type ammo as well!"
msgstr ""

View File

@ -0,0 +1,226 @@
msgid ""
msgstr ""
"Project-Id-Version: PACKAGE VERSION\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2022-04-20 18:02+0000\n"
"PO-Revision-Date: 2022-05-18 18:51+0000\n"
"Last-Translator: Antonin Dupont <pwet@dupon.in>\n"
"Language-Team: French <https://weblate.bubbletea.dev/projects/cannery/"
"actions/fr/>\n"
"Language: fr\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"Plural-Forms: nplurals=2; plural=n > 1;\n"
"X-Generator: Weblate 4.12.1\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.
#, elixir-autogen, elixir-format
#: lib/cannery_web/live/ammo_group_live/index.ex:44
#: lib/cannery_web/live/ammo_group_live/index.html.heex:42
msgid "Add Ammo"
msgstr "ajouter munition"
#, elixir-autogen, elixir-format
#: lib/cannery_web/live/ammo_group_live/index.html.heex:37
msgid "Add your first box!"
msgstr "Ajoutez votre première caisse !"
#, elixir-autogen, elixir-format
#: lib/cannery_web/live/container_live/index.html.heex:12
msgid "Add your first container!"
msgstr "Ajoutez votre premier conteneur!"
#, elixir-autogen, elixir-format
#: lib/cannery_web/live/ammo_type_live/index.html.heex:12
msgid "Add your first 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:44
msgid "Change email"
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:99
msgid "Change password"
msgstr "Changer le mot de passe"
#, elixir-autogen, elixir-format
#: lib/cannery_web/live/invite_live/index.html.heex:17
msgid "Create Invite"
msgstr "Créer une invitation"
#, elixir-autogen, elixir-format
#: lib/cannery_web/templates/user_settings/edit.html.heex:142
msgid "Delete User"
msgstr "Supprimer utilisateur"
#, elixir-autogen, elixir-format
#: 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
msgid "Forgot your password?"
msgstr "Mot de passe oublié?"
#, elixir-autogen, elixir-format
#: lib/cannery_web/live/invite_live/index.html.heex:12
msgid "Invite someone new!"
msgstr "Invitez une nouvelle personne!"
#, elixir-autogen, elixir-format
#: lib/cannery_web/components/topbar.ex:112
#: 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_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
msgid "Log in"
msgstr "Se connecter"
#, elixir-autogen, elixir-format
#: lib/cannery_web/live/tag_live/index.html.heex:14
msgid "Make your first tag!"
msgstr "Faîtes votre premier tag!"
#, elixir-autogen, elixir-format
#: lib/cannery_web/live/ammo_type_live/index.html.heex:17
msgid "New Ammo type"
msgstr "Nouveau type de munition"
#, elixir-autogen, elixir-format
#: lib/cannery_web/live/container_live/index.html.heex:17
msgid "New Container"
msgstr "Nouveau conteneur"
#, elixir-autogen, elixir-format
#: lib/cannery_web/live/tag_live/index.html.heex:19
msgid "New Tag"
msgstr "Nouveau tag"
#, elixir-autogen, elixir-format
#: lib/cannery_web/components/topbar.ex:105
#: 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:42
#: lib/cannery_web/templates/user_reset_password/edit.html.heex:43
#: lib/cannery_web/templates/user_reset_password/new.html.heex:25
#: lib/cannery_web/templates/user_session/new.html.heex:40
msgid "Register"
msgstr "Senregistrer"
#, elixir-autogen, elixir-format
#: lib/cannery_web/templates/user_confirmation/new.html.heex:3
#: lib/cannery_web/templates/user_confirmation/new.html.heex:16
msgid "Resend confirmation instructions"
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:34
msgid "Reset password"
msgstr "Réinitialisé le mot de passe"
#, elixir-autogen, elixir-format
#: 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_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
msgid "Save"
msgstr "Sauvegarder"
#, elixir-autogen, elixir-format
#: lib/cannery_web/templates/user_reset_password/new.html.heex:16
msgid "Send instructions to reset password"
msgstr "Envoyer les instructions pour réinitialiser le mot de passe"
#, elixir-autogen, elixir-format
#: lib/cannery_web/live/container_live/show.html.heex:65
msgid "Why not add one?"
msgstr "Pourquoi pas en ajouter un?"
#, elixir-autogen, elixir-format
#: lib/cannery_web/live/container_live/edit_tags_component.html.heex:52
msgid "Add"
msgstr "Ajouter"
#, elixir-autogen, elixir-format
#: lib/cannery_web/live/range_live/index.html.heex:17
msgid "Stage ammo"
msgstr "Munition préparée"
#, elixir-autogen, elixir-format
#: lib/cannery_web/live/range_live/index.html.heex:12
msgid "Why not get some ready to shoot?"
msgstr "Pourquoi pas en préparer pour tirer?"
#, elixir-autogen, elixir-format
#: lib/cannery_web/live/ammo_group_live/index.ex:151
#: lib/cannery_web/live/ammo_group_live/show.html.heex:91
#: lib/cannery_web/live/range_live/index.html.heex:36
msgid "Record shots"
msgstr "Enregistrer des tirs"
#, elixir-autogen, elixir-format
#: lib/cannery_web/components/move_ammo_group_component.ex:89
msgid "Add another container!"
msgstr "Ajoutez un autre conteneur!"
#, elixir-autogen, elixir-format
#: lib/cannery_web/live/ammo_group_live/show.html.heex:85
msgid "Move containers"
msgstr "Déplacer les conteneurs"
#, elixir-autogen, elixir-format
#: lib/cannery_web/components/move_ammo_group_component.ex:127
msgid "Select"
msgstr "Sélectionner"
#, elixir-autogen, elixir-format
#: lib/cannery_web/live/invite_live/index.html.heex:33
msgid "Copy to clipboard"
msgstr "Copier dans le presse-papier"
#, elixir-autogen, elixir-format
#: lib/cannery_web/live/ammo_group_live/index.html.heex:20
msgid "add a container first"
msgstr "ajouter un conteneur en premier"
#, elixir-autogen, elixir-format
#: lib/cannery_web/live/ammo_group_live/form_component.html.heex:66
msgid "Create"
msgstr "Créer"
#, elixir-autogen, elixir-format
#: lib/cannery_web/templates/user_settings/edit.html.heex:113
msgid "Change Language"
msgstr "Changer la langue"
#, elixir-autogen, elixir-format
#: lib/cannery_web/templates/user_settings/edit.html.heex:134
msgid "Change language"
msgstr "Changer la langue"
#, elixir-autogen, elixir-format
#: lib/cannery_web/live/ammo_group_live/show.html.heex:55
msgid "View in Catalog"
msgstr ""
#, elixir-autogen, elixir-format
#: lib/cannery_web/live/ammo_group_live/index.html.heex:31
msgid "add an ammo type first"
msgstr ""

View File

@ -0,0 +1,938 @@
msgid ""
msgstr ""
"Project-Id-Version: PACKAGE VERSION\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2022-04-20 18:02+0000\n"
"PO-Revision-Date: 2022-05-21 19:47+0000\n"
"Last-Translator: shibao <shibao@bubbletea.dev>\n"
"Language-Team: French <https://weblate.bubbletea.dev/projects/cannery/"
"default/fr/>\n"
"Language: fr\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"Plural-Forms: nplurals=2; plural=n > 1;\n"
"X-Generator: Weblate 4.12.2\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.
#, elixir-autogen, elixir-format
#: lib/cannery_web/live/home_live.ex:64
msgid "%{name} lets you easily keep an eye on your ammo levels before and after range day"
msgstr ""
"%{name} vous permet de facilement garder un œil sur votre niveau de munition "
"avant et après une journée de stand"
#, elixir-autogen, elixir-format
#: lib/cannery_web/live/home_live.ex:86
msgid "Access from any internet-capable device"
msgstr "Accédez depuis nimporte quel appareil connecté à internet"
#, elixir-autogen, elixir-format
#: lib/cannery_web/live/invite_live/index.html.heex:90
msgid "Admins"
msgstr "Administrateur·ices"
#, elixir-autogen, elixir-format
#: lib/cannery_web/live/home_live.ex:100
msgid "Admins:"
msgstr "Administrateur·ices:"
#, elixir-autogen, elixir-format
#: lib/cannery_web/components/topbar.ex:62
#: lib/cannery_web/live/ammo_group_live/index.html.heex:3
#: lib/cannery_web/live/range_live/index.ex:80
msgid "Ammo"
msgstr "Munition"
#, elixir-autogen, elixir-format
#: lib/cannery_web/live/ammo_group_live/form_component.html.heex:21
#: lib/cannery_web/live/ammo_group_live/index.ex:81
msgid "Ammo type"
msgstr "Type de munition"
#, elixir-autogen, elixir-format
#: lib/cannery_web/live/ammo_type_live/index.ex:87
#: lib/cannery_web/live/ammo_type_live/show.html.heex:100
msgid "Average Price paid"
msgstr "Prix acheté moyen"
#, elixir-autogen, elixir-format
#: lib/cannery_web/live/tag_live/form_component.ex:79
msgid "Background color"
msgstr "Couleur de fond"
#, elixir-autogen, elixir-format
#: lib/cannery_web/live/ammo_type_live/form_component.html.heex:140
#: lib/cannery_web/live/ammo_type_live/index.ex:71
#: lib/cannery_web/live/ammo_type_live/show.html.heex:53
msgid "Blank"
msgstr "Vide"
#, elixir-autogen, elixir-format
#: lib/cannery_web/live/ammo_type_live/form_component.html.heex:68
msgid "Brass"
msgstr "Cuivre"
#, elixir-autogen, elixir-format
#: lib/cannery_web/live/ammo_type_live/form_component.html.heex:44
#: lib/cannery_web/live/ammo_type_live/index.ex:53
#: lib/cannery_web/live/ammo_type_live/show.html.heex:39
msgid "Bullet core"
msgstr "Noyau de balle"
#, elixir-autogen, elixir-format
#: lib/cannery_web/live/ammo_type_live/form_component.html.heex:37
#: lib/cannery_web/live/ammo_type_live/index.ex:52
#: lib/cannery_web/live/ammo_type_live/show.html.heex:38
msgid "Bullet type"
msgstr "Type de balle"
#, elixir-autogen, elixir-format
#: lib/cannery_web/live/ammo_type_live/form_component.html.heex:58
#: lib/cannery_web/live/ammo_type_live/index.ex:55
#: lib/cannery_web/live/ammo_type_live/show.html.heex:41
msgid "Caliber"
msgstr "Calibre"
#, elixir-autogen, elixir-format
#: lib/cannery_web/live/ammo_type_live/form_component.html.heex:51
#: lib/cannery_web/live/ammo_type_live/index.ex:54
#: lib/cannery_web/live/ammo_type_live/show.html.heex:40
msgid "Cartridge"
msgstr "Cartouche"
#, elixir-autogen, elixir-format
#: lib/cannery_web/live/ammo_type_live/form_component.html.heex:65
#: lib/cannery_web/live/ammo_type_live/index.ex:56
#: lib/cannery_web/live/ammo_type_live/show.html.heex:42
msgid "Case material"
msgstr "Matériau de la caisse"
#, elixir-autogen, elixir-format
#: lib/cannery_web/components/move_ammo_group_component.ex:67
#: lib/cannery_web/live/ammo_group_live/form_component.html.heex:48
#: lib/cannery_web/live/ammo_group_live/index.ex:86
msgid "Container"
msgstr "Conteneur"
#, elixir-autogen, elixir-format
#: lib/cannery_web/components/topbar.ex:50
#: lib/cannery_web/live/container_live/index.ex:36
#: lib/cannery_web/live/container_live/index.html.heex:3
msgid "Containers"
msgstr "Conteneurs"
#, elixir-autogen, elixir-format
#: lib/cannery_web/live/ammo_type_live/form_component.html.heex:144
#: lib/cannery_web/live/ammo_type_live/index.ex:72
#: lib/cannery_web/live/ammo_type_live/show.html.heex:54
msgid "Corrosive"
msgstr "Corrosive"
#, elixir-autogen, elixir-format
#: lib/cannery_web/live/ammo_group_live/form_component.html.heex:27
#: lib/cannery_web/live/ammo_group_live/index.ex:82
msgid "Count"
msgstr "Quantité"
#, elixir-autogen, elixir-format
#: lib/cannery_web/components/ammo_group_card.ex:29
#: lib/cannery_web/live/ammo_group_live/show.html.heex:8
msgid "Count:"
msgstr "Quantité:"
#, elixir-autogen, elixir-format
#: lib/cannery_web/live/ammo_type_live/form_component.html.heex:24
#: lib/cannery_web/live/container_live/form_component.html.heex:27
msgid "Description"
msgstr "Description"
#, elixir-autogen, elixir-format
#: lib/cannery_web/components/container_card.ex:31
#: lib/cannery_web/live/container_live/show.html.heex:8
msgid "Description:"
msgstr "Description:"
#, elixir-autogen, elixir-format
#: lib/cannery_web/live/invite_live/index.html.heex:59
msgid "Disable"
msgstr "Désactiver"
#, elixir-autogen, elixir-format
#: lib/cannery_web/live/home_live.ex:61
msgid "Easy to Use:"
msgstr "Simple à utiliser:"
#, elixir-autogen, elixir-format
#: lib/cannery_web/live/ammo_group_live/index.ex:38
msgid "Edit Ammo group"
msgstr "Éditer le groupe de munition"
#, elixir-autogen, elixir-format
#: lib/cannery_web/live/ammo_type_live/index.ex:23
#: lib/cannery_web/live/ammo_type_live/show.ex:45
msgid "Edit Ammo type"
msgstr "Éditer le type de munition"
#, elixir-autogen, elixir-format
#: lib/cannery_web/live/invite_live/index.ex:33
msgid "Edit Invite"
msgstr "Modifier linvitation"
#, elixir-autogen, elixir-format
#: lib/cannery_web/live/tag_live/index.ex:21
msgid "Edit Tag"
msgstr "Modifier le tag"
#, elixir-autogen, elixir-format
#: lib/cannery_web/live/invite_live/index.html.heex:63
msgid "Enable"
msgstr "Activer"
#, elixir-autogen, elixir-format
#: lib/cannery_web/live/ammo_type_live/form_component.html.heex:35
msgid "Example bullet type abbreviations"
msgstr "Exemple dabréviations de type de balle"
#, elixir-autogen, elixir-format
#: lib/cannery_web/live/ammo_type_live/form_component.html.heex:40
msgid "FMJ"
msgstr "FMJ"
#, elixir-autogen, elixir-format
#: lib/cannery_web/live/ammo_type_live/form_component.html.heex:103
#: lib/cannery_web/live/ammo_type_live/index.ex:65
#: lib/cannery_web/live/ammo_type_live/show.html.heex:47
msgid "Grains"
msgstr "Graines"
#, elixir-autogen, elixir-format
#: lib/cannery_web/live/ammo_type_live/form_component.html.heex:136
#: lib/cannery_web/live/ammo_type_live/index.ex:70
#: lib/cannery_web/live/ammo_type_live/show.html.heex:52
msgid "Incendiary"
msgstr "Incendiaire"
#, elixir-autogen, elixir-format
#: lib/cannery_web/live/home_live.ex:95
msgid "Instance Information"
msgstr "Information de linstance"
#, elixir-autogen, elixir-format
#: lib/cannery_web/components/invite_card.ex:25
msgid "Invite Disabled"
msgstr "Invitation désactivée"
#, elixir-autogen, elixir-format
#: lib/cannery_web/live/home_live.ex:126
msgid "Invite Only"
msgstr "Uniquement sur invitation"
#, elixir-autogen, elixir-format
#: lib/cannery_web/components/topbar.ex:75
#: lib/cannery_web/live/invite_live/index.ex:41
#: lib/cannery_web/live/invite_live/index.html.heex:3
msgid "Invites"
msgstr "Invitations"
#, elixir-autogen, elixir-format
#: lib/cannery_web/templates/user_session/new.html.heex:28
msgid "Keep me logged in for 60 days"
msgstr "Me garder authentifié durant 60 jours"
#, elixir-autogen, elixir-format
#: lib/cannery_web/components/move_ammo_group_component.ex:69
#: lib/cannery_web/live/container_live/form_component.html.heex:42
msgid "Location"
msgstr "Localisation"
#, elixir-autogen, elixir-format
#: lib/cannery_web/components/container_card.ex:43
#: lib/cannery_web/live/container_live/show.html.heex:20
msgid "Location:"
msgstr "Localisation:"
#, elixir-autogen, elixir-format
#: lib/cannery_web/live/container_live/form_component.html.heex:38
msgid "Magazine, Clip, Ammo Box, etc"
msgstr "Chargeur, lame-chargeur, boite de munition, etc."
#, elixir-autogen, elixir-format
#: lib/cannery_web/live/ammo_type_live/form_component.html.heex:148
#: lib/cannery_web/live/ammo_type_live/index.ex:73
#: lib/cannery_web/live/ammo_type_live/show.html.heex:55
msgid "Manufacturer"
msgstr "Fabricant"
#, elixir-autogen, elixir-format
#: lib/cannery_web/live/container_live/form_component.html.heex:31
msgid "Metal ammo can with the anime girl sticker"
msgstr "Boite de munition avec le sticker de fille danimation"
#, elixir-autogen, elixir-format
#: lib/cannery_web/live/container_live/form_component.html.heex:23
msgid "My cool ammo can"
msgstr "Ma superbe boite de munition"
#, elixir-autogen, elixir-format
#: lib/cannery_web/live/ammo_type_live/form_component.html.heex:20
#: lib/cannery_web/live/ammo_type_live/index.ex:51
#: lib/cannery_web/live/container_live/form_component.html.heex:20
#: lib/cannery_web/live/invite_live/form_component.html.heex:20
#: lib/cannery_web/live/tag_live/form_component.ex:75
msgid "Name"
msgstr "Nom"
#, elixir-autogen, elixir-format
#: lib/cannery_web/live/ammo_type_live/index.ex:29
msgid "New Ammo type"
msgstr "Nouveau type de munition"
#, elixir-autogen, elixir-format
#: lib/cannery_web/live/container_live/index.ex:31
msgid "New Container"
msgstr "Nouveau conteneur"
#, elixir-autogen, elixir-format
#: lib/cannery_web/live/invite_live/index.ex:37
msgid "New Invite"
msgstr "Nouvelle invitation"
#, elixir-autogen, elixir-format
#: lib/cannery_web/live/tag_live/index.ex:27
msgid "New Tag"
msgstr "Nouveau tag"
#, elixir-autogen, elixir-format
#: lib/cannery_web/live/ammo_group_live/index.html.heex:8
msgid "No Ammo"
msgstr "Aucune munition"
#, elixir-autogen, elixir-format
#: lib/cannery_web/live/ammo_type_live/index.html.heex:8
msgid "No Ammo Types"
msgstr "Aucun type de munition"
#, elixir-autogen, elixir-format
#: lib/cannery_web/live/ammo_type_live/show.html.heex:120
msgid "No ammo for this type"
msgstr "Aucune munition pour ce type"
#, elixir-autogen, elixir-format
#: lib/cannery_web/live/container_live/index.html.heex:8
msgid "No containers"
msgstr "Aucun conteneur"
#, elixir-autogen, elixir-format
#: lib/cannery_web/live/invite_live/index.html.heex:8
msgid "No invites"
msgstr "Aucune invitation"
#, elixir-autogen, elixir-format
#: lib/cannery_web/live/container_live/edit_tags_component.html.heex:30
#: lib/cannery_web/live/tag_live/index.html.heex:10
msgid "No tags"
msgstr "Aucun tag"
#, elixir-autogen, elixir-format
#: lib/cannery_web/components/add_shot_group_component.html.heex:30
#: lib/cannery_web/live/ammo_group_live/form_component.html.heex:41
#: lib/cannery_web/live/ammo_group_live/show.ex:88
#: lib/cannery_web/live/range_live/form_component.html.heex:29
#: lib/cannery_web/live/range_live/index.ex:82
msgid "Notes"
msgstr "Notes"
#, elixir-autogen, elixir-format
#: lib/cannery_web/components/ammo_group_card.ex:35
#: lib/cannery_web/live/ammo_group_live/show.html.heex:24
msgid "Notes:"
msgstr "Notes:"
#, elixir-autogen, elixir-format
#: lib/cannery_web/live/container_live/form_component.html.heex:46
msgid "On the bookshelf"
msgstr "Sur létagère"
#, elixir-autogen, elixir-format
#: lib/cannery_web/live/ammo_type_live/form_component.html.heex:111
#: lib/cannery_web/live/ammo_type_live/index.ex:66
#: lib/cannery_web/live/ammo_type_live/show.html.heex:48
msgid "Pressure"
msgstr "Pression"
#, elixir-autogen, elixir-format
#: lib/cannery_web/live/ammo_group_live/form_component.html.heex:34
#: lib/cannery_web/live/ammo_group_live/index.ex:83
msgid "Price paid"
msgstr "Prix payé"
#, elixir-autogen, elixir-format
#: lib/cannery_web/components/ammo_group_card.ex:47
msgid "Price paid:"
msgstr "Prix payé:"
#, elixir-autogen, elixir-format
#: lib/cannery_web/live/ammo_type_live/form_component.html.heex:118
#: lib/cannery_web/live/ammo_type_live/index.ex:67
#: lib/cannery_web/live/ammo_type_live/show.html.heex:49
msgid "Primer type"
msgstr "Type damorce"
#, elixir-autogen, elixir-format
#: lib/cannery_web/live/home_live.ex:125
msgid "Public Signups"
msgstr "Enregistrements publics"
#, elixir-autogen, elixir-format
#: lib/cannery_web/live/home_live.ex:73
msgid "Secure:"
msgstr "Sécurisé:"
#, elixir-autogen, elixir-format
#: lib/cannery_web/live/home_live.ex:76
msgid "Self-host your own instance, or use an instance from someone you trust."
msgstr ""
"Auto-hébergez votre propre instance ou utilisez celle dune personne à "
"laquelle vous faîtes confiance."
#, elixir-autogen, elixir-format
#: lib/cannery_web/live/invite_live/index.html.heex:79
msgid "Set Unlimited"
msgstr "Mettre illimité"
#, elixir-autogen, elixir-format
#: lib/cannery_web/controllers/user_settings_controller.ex:10
#: lib/cannery_web/templates/user_settings/edit.html.heex:3
msgid "Settings"
msgstr "Paramètres"
#, elixir-autogen, elixir-format
#: lib/cannery_web/live/ammo_type_live/show.ex:44
msgid "Show Ammo type"
msgstr "Montrer le type de munition"
#, elixir-autogen, elixir-format
#: lib/cannery_web/live/home_live.ex:83
msgid "Simple:"
msgstr "Simple:"
#, elixir-autogen, elixir-format
#: lib/cannery_web/live/ammo_type_live/form_component.html.heex:47
msgid "Steel"
msgstr "Acier"
#, elixir-autogen, elixir-format
#: lib/cannery_web/live/ammo_group_live/show.html.heex:103
msgid "Stored in"
msgstr "Est stocké dans"
#, elixir-autogen, elixir-format
#: lib/cannery_web/components/topbar.ex:44
#: lib/cannery_web/live/tag_live/index.ex:32
#: lib/cannery_web/live/tag_live/index.html.heex:3
msgid "Tags"
msgstr "Tags"
#, elixir-autogen, elixir-format
#: lib/cannery_web/live/tag_live/index.html.heex:6
msgid "Tags can be added to your containers to help you organize"
msgstr ""
"Des tags peuvent être ajouté sur vos conteneurs pour vous aider à vous "
"organiser"
#, elixir-autogen, elixir-format
#: lib/cannery_web/live/tag_live/form_component.ex:85
msgid "Text color"
msgstr "Couleur du texte"
#, elixir-autogen, elixir-format
#: lib/cannery_web/live/home_live.ex:52
msgid "The self-hosted firearm tracker website"
msgstr "Le site web de suivi darme à feux auto-hébergé"
#, elixir-autogen, elixir-format
#: lib/cannery_web/live/ammo_type_live/form_component.html.heex:132
#: lib/cannery_web/live/ammo_type_live/index.ex:69
#: lib/cannery_web/live/ammo_type_live/show.html.heex:51
msgid "Tracer"
msgstr "Traceuse"
#, elixir-autogen, elixir-format
#: lib/cannery_web/components/move_ammo_group_component.ex:68
#: lib/cannery_web/live/container_live/form_component.html.heex:35
msgid "Type"
msgstr "Type"
#, elixir-autogen, elixir-format
#: lib/cannery_web/components/container_card.ex:37
#: lib/cannery_web/live/container_live/show.html.heex:14
msgid "Type:"
msgstr "Type:"
#, elixir-autogen, elixir-format
#: lib/cannery_web/live/invite_live/index.html.heex:119
msgid "Users"
msgstr "Utilisateurs"
#, elixir-autogen, elixir-format
#: lib/cannery_web/components/invite_card.ex:20
msgid "Uses Left:"
msgstr "Utilisations restantes:"
#, elixir-autogen, elixir-format
#: lib/cannery_web/live/invite_live/form_component.html.heex:24
msgid "Uses left"
msgstr "Utilisations restantes"
#, elixir-autogen, elixir-format
#: lib/cannery_web/live/home_live.ex:48
msgid "Welcome to %{name}"
msgstr "Bienvenue à %{name}"
#, elixir-autogen, elixir-format
#: lib/cannery_web/live/home_live.ex:77
msgid "Your data stays with you, period"
msgstr "Vos données restent avec vous, point final"
#, elixir-autogen, elixir-format
#: lib/cannery_web/live/container_live/show.html.heex:61
msgid "No tags for this container"
msgstr "Aucun tag pour ce conteneur"
#, elixir-autogen, elixir-format
#: lib/cannery_web/components/topbar.ex:68
#: lib/cannery_web/live/ammo_group_live/index.ex:85
msgid "Range"
msgstr "Portée"
#, elixir-autogen, elixir-format
#: lib/cannery_web/live/range_live/index.html.heex:3
msgid "Range day"
msgstr "Journée de stand"
#, elixir-autogen, elixir-format
#: lib/cannery_web/live/ammo_group_live/show.ex:89
#: lib/cannery_web/live/range_live/index.ex:83
msgid "Date"
msgstr "Date"
#, elixir-autogen, elixir-format
#: lib/cannery_web/live/range_live/form_component.html.heex:21
msgid "Shots fired"
msgstr "Tirs réalisés"
#, elixir-autogen, elixir-format
#: lib/cannery_web/live/range_live/index.html.heex:8
msgid "No ammo staged"
msgstr "Aucune munition sélectionnée"
#, elixir-autogen, elixir-format
#: lib/cannery_web/live/ammo_group_live/show.html.heex:82
#: lib/cannery_web/live/range_live/index.html.heex:33
msgid "Stage for range"
msgstr "Sélectionné pour le stand"
#, elixir-autogen, elixir-format
#: lib/cannery_web/live/ammo_group_live/show.html.heex:81
#: lib/cannery_web/live/range_live/index.html.heex:32
msgid "Unstage from range"
msgstr "Désélectionner pour le stand"
#, elixir-autogen, elixir-format
#: lib/cannery_web/components/add_shot_group_component.html.heex:3
#: lib/cannery_web/live/ammo_group_live/index.ex:26
msgid "Record shots"
msgstr "Tirs enregistrés"
#, elixir-autogen, elixir-format
#: lib/cannery_web/live/ammo_group_live/index.ex:49
msgid "Ammo groups"
msgstr "Groupes de munition"
#, elixir-autogen, elixir-format
#: lib/cannery_web/components/add_shot_group_component.html.heex:38
#: lib/cannery_web/live/range_live/form_component.html.heex:36
msgid "Date (UTC)"
msgstr "Date (UTC)"
#, elixir-autogen, elixir-format
#: lib/cannery_web/live/ammo_group_live/show.ex:37
#: lib/cannery_web/live/range_live/index.ex:32
msgid "Edit Shot Records"
msgstr "Modifier les enregistrements de tir"
#, elixir-autogen, elixir-format
#: lib/cannery_web/live/range_live/index.ex:38
msgid "New Shot Records"
msgstr "Nouveaux enregistrements de tir"
#, elixir-autogen, elixir-format
#: lib/cannery_web/live/range_live/index.html.heex:48
msgid "No shots recorded"
msgstr "Aucun tir enregistré"
#, elixir-autogen, elixir-format
#: lib/cannery_web/components/add_shot_group_component.html.heex:21
msgid "Rounds left"
msgstr "Cartouches restantes"
#, elixir-autogen, elixir-format
#: lib/cannery_web/live/ammo_group_live/show.ex:87
#: lib/cannery_web/live/range_live/index.ex:81
msgid "Rounds shot"
msgstr "Cartouches tirées"
#, elixir-autogen, elixir-format
#: lib/cannery_web/live/range_live/index.ex:44
msgid "Shot Records"
msgstr "Enregistrements de tir"
#, elixir-autogen, elixir-format
#: lib/cannery_web/live/ammo_group_live/index.ex:32
msgid "Move Ammo group"
msgstr "Déplacer le groupe de munition"
#, elixir-autogen, elixir-format
#: lib/cannery_web/components/move_ammo_group_component.ex:80
msgid "Move ammo"
msgstr "Déplacer munition"
#, elixir-autogen, elixir-format
#: lib/cannery_web/components/move_ammo_group_component.ex:85
msgid "No other containers"
msgstr "Aucun autre conteneur"
#, elixir-autogen, elixir-format
#: lib/cannery_web/live/range_live/index.html.heex:53
msgid "Shot log"
msgstr "Évènements de tir"
#, elixir-autogen, elixir-format
#: lib/cannery_web/components/ammo_group_card.ex:48
#: lib/cannery_web/live/ammo_group_live/index.ex:125
#: lib/cannery_web/live/ammo_group_live/show.html.heex:37
#: lib/cannery_web/live/ammo_group_live/show.html.heex:44
#: lib/cannery_web/live/ammo_type_live/index.ex:114
#: lib/cannery_web/live/ammo_type_live/show.html.heex:104
msgid "$%{amount}"
msgstr "%{amount}$"
#, elixir-autogen, elixir-format
#: lib/cannery_web/live/ammo_type_live/form_component.html.heex:75
msgid "Bimetal"
msgstr "Bi-métal"
#, elixir-autogen, elixir-format
#: lib/cannery_web/live/ammo_type_live/form_component.html.heex:72
#: lib/cannery_web/live/ammo_type_live/index.ex:57
#: lib/cannery_web/live/ammo_type_live/show.html.heex:43
msgid "Jacket type"
msgstr "Type de douille"
#, elixir-autogen, elixir-format
#: lib/cannery_web/live/ammo_type_live/form_component.html.heex:79
#: lib/cannery_web/live/ammo_type_live/index.ex:58
#: lib/cannery_web/live/ammo_type_live/show.html.heex:44
msgid "Muzzle velocity"
msgstr "Vélocité du canon"
#, elixir-autogen, elixir-format
#: lib/cannery_web/live/ammo_type_live/form_component.html.heex:93
#: lib/cannery_web/live/ammo_type_live/index.ex:61
#: lib/cannery_web/live/ammo_type_live/show.html.heex:46
msgid "Powder grains per charge"
msgstr "Graines de poudre par charge"
#, elixir-autogen, elixir-format
#: lib/cannery_web/live/ammo_type_live/form_component.html.heex:89
#: lib/cannery_web/live/ammo_type_live/index.ex:59
#: lib/cannery_web/live/ammo_type_live/show.html.heex:45
msgid "Powder type"
msgstr "Type de poudre"
#, elixir-autogen, elixir-format
#: lib/cannery_web/live/ammo_type_live/form_component.html.heex:152
#: lib/cannery_web/live/ammo_type_live/index.ex:74
#: lib/cannery_web/live/ammo_type_live/show.html.heex:56
msgid "UPC"
msgstr "UPC"
#, elixir-autogen, elixir-format
#: lib/cannery_web/templates/user_settings/edit.html.heex:78
msgid "Confirm new password"
msgstr "Confirmez le nouveau mot de passe"
#, elixir-autogen, elixir-format
#: lib/cannery_web/templates/user_settings/edit.html.heex:32
#: lib/cannery_web/templates/user_settings/edit.html.heex:87
msgid "Current password"
msgstr "Mot de passe actuel"
#, elixir-autogen, elixir-format
#: lib/cannery_web/templates/user_settings/edit.html.heex:71
msgid "New password"
msgstr "Nouveau mot de passe"
#, elixir-autogen, elixir-format
#: lib/cannery_web/live/ammo_group_live/index.ex:148
msgid "Stage"
msgstr "Sélectionné"
#, elixir-autogen, elixir-format
#: lib/cannery_web/live/ammo_group_live/index.ex:148
msgid "Unstage"
msgstr "Désélectionner"
#, elixir-autogen, elixir-format
#: lib/cannery_web/live/ammo_type_live/form_component.html.heex:125
#: lib/cannery_web/live/ammo_type_live/index.ex:68
#: lib/cannery_web/live/ammo_type_live/show.html.heex:50
msgid "Firing type"
msgstr "Type dallumage"
#, elixir-autogen, elixir-format
#: lib/cannery_web/templates/layout/live.html.heex:50
msgid "Reconnecting..."
msgstr "Reconnexion en cours…"
#, elixir-autogen, elixir-format
#: lib/cannery_web/templates/layout/live.html.heex:37
msgid "Loading..."
msgstr "Chargement en cours…"
#, elixir-autogen, elixir-format
#: lib/cannery_web/live/container_live/index.ex:27
#: lib/cannery_web/live/container_live/show.ex:95
msgid "Edit %{name}"
msgstr "Éditer %{name}"
#, elixir-autogen, elixir-format
#: lib/cannery_web/live/container_live/index.ex:46
#: lib/cannery_web/live/container_live/show.ex:96
msgid "Edit %{name} tags"
msgstr "Éditer les tags de %{name}"
#, elixir-autogen, elixir-format
#: lib/cannery_web/components/container_card.ex:55
#: lib/cannery_web/live/container_live/show.html.heex:32
msgid "Rounds:"
msgstr "Cartouches:"
#, elixir-autogen, elixir-format
#: lib/cannery_web/live/container_live/show.ex:94
msgid "Show %{name}"
msgstr "Montrer %{name}"
#, elixir-autogen, elixir-format
#: lib/cannery_web/live/ammo_type_live/index.ex:113
#: lib/cannery_web/live/ammo_type_live/show.html.heex:110
msgid "No cost information"
msgstr "Aucune information de prix"
#, elixir-autogen, elixir-format
#: lib/cannery_web/live/ammo_group_live/index.ex:84
msgid "% left"
msgstr "%restante"
#, elixir-autogen, elixir-format
#: lib/cannery_web/live/ammo_group_live/show.html.heex:43
msgid "Current value:"
msgstr "Valeur actuelle:"
#, elixir-autogen, elixir-format
#: lib/cannery_web/live/ammo_group_live/show.html.heex:36
msgid "Original cost:"
msgstr "Coût original:"
#, elixir-autogen, elixir-format
#: lib/cannery_web/live/ammo_group_live/show.html.heex:13
msgid "Original count:"
msgstr "Nombre original:"
#, elixir-autogen, elixir-format
#: lib/cannery_web/live/ammo_group_live/show.html.heex:18
msgid "Percentage left:"
msgstr "Pourcentage restant:"
#, elixir-autogen, elixir-format
#: lib/cannery_web/live/ammo_group_live/show.html.heex:116
msgid "Rounds used"
msgstr "Cartouches utilisées"
#, elixir-autogen, elixir-format
#: lib/cannery_web/live/ammo_type_live/show.html.heex:75
msgid "Current # of rounds:"
msgstr "Quantité actuelle de cartouches:"
#, elixir-autogen, elixir-format
#: lib/cannery_web/live/ammo_type_live/index.ex:86
msgid "Total # of rounds"
msgstr "Quantité de cartouches"
#, elixir-autogen, elixir-format
#: lib/cannery_web/live/ammo_type_live/show.html.heex:83
msgid "Total rounds shot:"
msgstr "Nombre totale de cartouches tirées:"
#, elixir-autogen, elixir-format
#: lib/cannery_web/controllers/user_confirmation_controller.ex:8
msgid "Confirm your account"
msgstr "Confirmez votre compte"
#, elixir-autogen, elixir-format
#: lib/cannery_web/controllers/user_reset_password_controller.ex:9
msgid "Forgot your password?"
msgstr "Mot de passe oublié?"
#, elixir-autogen, elixir-format
#: lib/cannery_web/controllers/user_session_controller.ex:8
msgid "Log in"
msgstr "Se connecter"
#, elixir-autogen, elixir-format
#: lib/cannery_web/controllers/user_registration_controller.ex:35
msgid "Register"
msgstr "Senregistrer"
#, elixir-autogen, elixir-format
#: lib/cannery_web/controllers/user_reset_password_controller.ex:36
msgid "Reset your password"
msgstr "Réinitialiser votre mot de passe"
#, elixir-autogen, elixir-format
#: lib/cannery_web/live/ammo_group_live/show.ex:36
#: lib/cannery_web/live/range_live/index.ex:26
msgid "Record Shots"
msgstr "Enregistrer des tirs"
#, elixir-autogen, elixir-format
#: lib/cannery_web/live/ammo_group_live/form_component.html.heex:58
msgid "Copies"
msgstr "Exemplaires"
#, elixir-autogen, elixir-format
#: lib/cannery_web/live/ammo_type_live/index.ex:34
msgid "Ammo types"
msgstr "Types de munition"
#, elixir-autogen, elixir-format
#: lib/cannery_web/live/ammo_group_live/index.ex:87
msgid "Added on"
msgstr "Ajouté le"
#, elixir-autogen, elixir-format
#: lib/cannery_web/components/ammo_group_card.ex:41
#: lib/cannery_web/live/ammo_group_live/show.html.heex:30
#: lib/cannery_web/live/ammo_type_live/show.html.heex:91
msgid "Added on:"
msgstr "Ajouté le:"
#, elixir-autogen, elixir-format
#: lib/cannery_web/components/user_card.ex:30
msgid "User registered on"
msgstr "Utilisateur·ice enregistré·e le"
#, elixir-autogen, elixir-format
#: lib/cannery_web/templates/user_registration/new.html.heex:37
#: lib/cannery_web/templates/user_settings/edit.html.heex:129
msgid "English"
msgstr "Anglais"
#, elixir-autogen, elixir-format
#: lib/cannery_web/templates/user_registration/new.html.heex:37
#: lib/cannery_web/templates/user_settings/edit.html.heex:129
msgid "French"
msgstr "Français"
#, elixir-autogen, elixir-format
#: lib/cannery_web/templates/user_registration/new.html.heex:37
#: lib/cannery_web/templates/user_settings/edit.html.heex:129
msgid "German"
msgstr "Allemand"
#, elixir-autogen, elixir-format
#: lib/cannery_web/templates/user_registration/new.html.heex:33
msgid "Language"
msgstr "Langue"
#, elixir-autogen, elixir-format
#: lib/cannery_web/live/home_live.ex:147
msgid "Get involved!"
msgstr "Impliquez-vous!"
#, elixir-autogen, elixir-format
#: lib/cannery_web/live/home_live.ex:164
msgid "Help translate"
msgstr "Aider à la traduction"
#, elixir-autogen, elixir-format
#: lib/cannery_web/live/home_live.ex:173
msgid "Report bugs or request features"
msgstr "Remonter des bugs ou une demande de fonctionnalité"
#, elixir-autogen, elixir-format
#: lib/cannery_web/live/home_live.ex:155
msgid "View the source code"
msgstr "Voir le code source"
#, elixir-autogen, elixir-format
#: lib/cannery_web/components/topbar.ex:56
#: lib/cannery_web/live/ammo_type_live/index.html.heex:3
msgid "Catalog"
msgstr ""
#, elixir-autogen, elixir-format, fuzzy
#: lib/cannery_web/live/ammo_group_live/show.ex:40
msgid "Edit Ammo"
msgstr "Éditer le type de munition"
#, elixir-autogen, elixir-format, fuzzy
#: lib/cannery_web/live/ammo_group_live/show.ex:38
msgid "Move Ammo"
msgstr "Déplacer munition"
#, elixir-autogen, elixir-format, fuzzy
#: lib/cannery_web/live/container_live/show.html.heex:90
msgid "No ammo in this container"
msgstr "Aucun groupe de munition pour ce conteneur"
#, elixir-autogen, elixir-format, fuzzy
#: lib/cannery_web/live/ammo_group_live/show.ex:39
msgid "Show Ammo"
msgstr "Montrer le type de munition"
#, elixir-autogen, elixir-format, fuzzy
#: lib/cannery_web/live/ammo_group_live/show.html.heex:108
msgid "This ammo is not in a container"
msgstr "Ce groupe de munition nest pas dans un conteneur"
#, elixir-autogen, elixir-format
#: lib/cannery_web/components/container_card.ex:50
#: lib/cannery_web/live/container_live/show.html.heex:27
msgid "Packs:"
msgstr ""
#, elixir-autogen, elixir-format
#: lib/cannery_web/components/topbar.ex:24
#: lib/cannery_web/live/home_live.ex:42
msgid "Cannery logo"
msgstr ""
#, elixir-autogen, elixir-format
#: lib/cannery_web/live/home_live.ex:44
msgid "isn't he cute >:3"
msgstr ""
#, elixir-autogen, elixir-format
#: lib/cannery_web/live/invite_live/form_component.html.heex:28
msgid "Leave \"Uses left\" blank to make invite unlimited"
msgstr ""

View File

@ -0,0 +1,116 @@
msgid ""
msgstr ""
"Project-Id-Version: PACKAGE VERSION\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2022-04-20 18:02+0000\n"
"PO-Revision-Date: 2022-04-22 18:37+0000\n"
"Last-Translator: Antonin Dupont <pwet@dupon.in>\n"
"Language-Team: French <https://weblate.bubbletea.dev/projects/cannery/emails/"
"fr/>\n"
"Language: fr\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"Plural-Forms: nplurals=2; plural=n > 1;\n"
"X-Generator: Weblate 4.11.2\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.
#, elixir-autogen, elixir-format
#: lib/cannery/accounts/email.ex:30
msgid "Confirm your %{name} account"
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.txt.eex:2
#: 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/update_email.html.eex:3
#: lib/cannery_web/templates/email/update_email.txt.eex:2
msgid "Hi %{email},"
msgstr "Salut %{email},"
#, elixir-autogen, elixir-format
#: lib/cannery_web/templates/email/confirm_email.txt.eex:10
msgid "If you didn't create an account at %{url}, please ignore this."
msgstr "Si vous navez 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/update_email.txt.eex:8
msgid "If you didn't request this change from %{url}, please ignore this."
msgstr ""
"Si vous navez pas demandé ce changement depuis %{url}, veuillez ignorer "
"ceci."
#, elixir-autogen, elixir-format
#: lib/cannery/accounts/email.ex:37
msgid "Reset your %{name} password"
msgstr "Réinitialiser votre mot de passe %{name}"
#, elixir-autogen, elixir-format
#: lib/cannery/accounts/email.ex:44
msgid "Update your %{name} email"
msgstr "Mettre à jour votre mél %{name}"
#, elixir-autogen, elixir-format
#: lib/cannery_web/templates/email/confirm_email.html.eex:9
msgid "Welcome to %{name}!"
msgstr "Bienvenue à %{name}!"
#, elixir-autogen, elixir-format
#: lib/cannery_web/templates/email/confirm_email.txt.eex:4
msgid "Welcome to %{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.txt.eex:4
msgid "You can change your email by visiting the URL below:"
msgstr "Vous pouvez changer votre mél en consultant lURL ci-dessous:"
#, elixir-autogen, elixir-format
#: lib/cannery_web/templates/email/confirm_email.html.eex:14
#: lib/cannery_web/templates/email/confirm_email.txt.eex:6
msgid "You can confirm your account by visiting the URL below:"
msgstr "Vous pouvez confirmer votre compte en consultant lURL ci-dessous:"
#, elixir-autogen, elixir-format
#: lib/cannery_web/templates/email/reset_password.html.eex:8
#: lib/cannery_web/templates/email/reset_password.txt.eex:4
msgid "You can reset your password by visiting the URL below:"
msgstr ""
"Vous pouvez réinitialiser votre mot de passe en visitant lURL ci-dessous:"
#, elixir-autogen, elixir-format
#: lib/cannery_web/templates/email/confirm_email.html.eex:22
msgid "If you didn't create an account at %{name}, please ignore this."
msgstr "Si vous navez 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/update_email.html.eex:16
msgid "If you didn't request this change from %{name}, please ignore this."
msgstr ""
"Si vous navez pas demandé ce changement depuis %{name}, veuillez ignorer "
"ceci."
#, elixir-autogen, elixir-format
#: lib/cannery_web/templates/layout/email.txt.eex:9
msgid "This email was sent from %{name} at %{url}, the self-hosted firearm tracker website."
msgstr ""
"Ce mél a été envoyé depuis %{name} à %{url}, le site web de suivi darme à "
"feux."
#, elixir-autogen, elixir-format
#: lib/cannery_web/templates/layout/email.html.heex:13
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 darme à feu."

View File

@ -0,0 +1,202 @@
msgid ""
msgstr ""
"Project-Id-Version: PACKAGE VERSION\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2022-04-20 18:02+0000\n"
"PO-Revision-Date: 2022-04-24 08:27+0000\n"
"Last-Translator: Antonin Dupont <pwet@dupon.in>\n"
"Language-Team: French <https://weblate.bubbletea.dev/projects/cannery/errors/"
"fr/>\n"
"Language: fr\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"Plural-Forms: nplurals=2; plural=n > 1;\n"
"X-Generator: Weblate 4.12\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.
#, elixir-autogen, elixir-format
#: lib/cannery/containers.ex:140
msgid "Container must be empty before deleting"
msgstr "Le conteneur doit être vide pour être supprimé"
#, elixir-autogen, elixir-format
#: lib/cannery_web/live/container_live/index.ex:69
#: lib/cannery_web/live/container_live/show.ex:71
msgid "Could not delete %{name}: %{error}"
msgstr "Impossible de supprimer %{name} : %{error}"
#, elixir-autogen, elixir-format
#: lib/cannery_web/live/container_live/index.ex:57
msgid "Could not find that container"
msgstr "Impossible de trouver ce conteneur"
#, elixir-autogen, elixir-format
#: lib/cannery_web/controllers/user_settings_controller.ex:84
msgid "Email change link is invalid or it has expired."
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
msgid "Error"
msgstr "Erreur"
#, elixir-autogen, elixir-format
#: lib/cannery_web/templates/error/error.html.heex:28
msgid "Go back home"
msgstr "Retour au menu principal"
#, elixir-autogen, elixir-format
#: lib/cannery_web/views/error_view.ex:11
msgid "Internal Server Error"
msgstr "Erreur interne du serveur"
#, elixir-autogen, elixir-format
#: lib/cannery_web/controllers/user_session_controller.ex:17
msgid "Invalid email or password"
msgstr "Mél ou mot de passe invalide"
#, elixir-autogen, elixir-format
#: lib/cannery_web/views/error_view.ex:9
msgid "Not found"
msgstr "Pas trouvé"
#, elixir-autogen, elixir-format
#: 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_settings/edit.html.heex:21
#: lib/cannery_web/templates/user_settings/edit.html.heex:64
#: lib/cannery_web/templates/user_settings/edit.html.heex:119
msgid "Oops, something went wrong! Please check the errors below."
msgstr ""
"Oups, quelque chose sest mal passé! Veuillez vérifier les erreurs en "
"dessous."
#, elixir-autogen, elixir-format
#: lib/cannery_web/controllers/user_reset_password_controller.ex:63
msgid "Reset password link is invalid or it has expired."
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:56
msgid "Sorry, public registration is disabled"
msgstr "Désolé, lenregistrement 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:46
msgid "Sorry, this invite was not found or expired"
msgstr "Désolé, cette invitation nest pas trouvée ou est expirée"
#, elixir-autogen, elixir-format
#: lib/cannery_web/controllers/user_settings_controller.ex:99
msgid "Unable to delete user"
msgstr "Impossible de supprimer lutilisateur·ice"
#, elixir-autogen, elixir-format
#: lib/cannery_web/views/error_view.ex:10
msgid "Unauthorized"
msgstr "Non autorisé·e"
#, elixir-autogen, elixir-format
#: lib/cannery_web/controllers/user_confirmation_controller.ex:54
msgid "User confirmation link is invalid or it has expired."
msgstr "Le lien de confirmation dutilisateur·ice est invalide ou a expiré."
#, elixir-autogen, elixir-format
#: lib/cannery_web/live/invite_live/index.ex:18
msgid "You are not authorized to view this page"
msgstr "Vous nêtes pas autorisé·e à voir cette page"
#, elixir-autogen, elixir-format
#: lib/cannery_web/controllers/user_auth.ex:177
msgid "You are not authorized to view this page."
msgstr "Vous nêtes pas autorisé·e à voir cette page."
#, elixir-autogen, elixir-format
#: lib/cannery/accounts/user.ex:130
msgid "did not change"
msgstr "est inchangé"
#, elixir-autogen, elixir-format
#: lib/cannery/accounts/user.ex:151
msgid "does not match password"
msgstr "le mot de passe ne correspond pas"
#, elixir-autogen, elixir-format
#: lib/cannery/accounts/user.ex:188
msgid "is not valid"
msgstr "nest pas valide"
#, elixir-autogen, elixir-format
#: lib/cannery/accounts/user.ex:84
msgid "must have the @ sign and no spaces"
msgstr "doit contenir le symbole @ et aucune espace"
#, elixir-autogen, elixir-format
#: lib/cannery/tags.ex:40
msgid "Tag not found"
msgstr "Tag pas trouvé"
#, elixir-autogen, elixir-format
#: lib/cannery_web/live/container_live/edit_tags_component.ex:30
msgid "Tag could not be added"
msgstr "Le tag na pas pu être ajouté"
#, elixir-autogen, elixir-format
#: lib/cannery/activity_log/shot_group.ex:115
msgid "Count must be at least 1"
msgstr "Le nombre doit être au moins égal à 1"
#, 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}"
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:161
msgid "You must confirm your account and log in to access this page."
msgstr ""
"Vous devez dabord confirmer votre compte et vous connecter pour accéder à "
"cette page."
#, elixir-autogen, elixir-format
#: lib/cannery_web/live/container_live/edit_tags_component.ex:52
msgid "Tag could not be removed"
msgstr "Le tag na pas pu être retiré"
#, elixir-autogen, elixir-format
#: lib/cannery_web/live/ammo_group_live/form_component.ex:156
msgid "Could not parse number of copies"
msgstr "Impossible d'analyser le nombre de copies"
#, 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}"
msgstr "Nombre de copies invalide, doit être 1 et %{max}. Été %{multiplier}"
#, elixir-autogen, elixir-format
#: lib/cannery/ammo.ex:407
msgid "Invalid multiplier"
msgstr ""
#, elixir-autogen, elixir-format
#: lib/cannery/ammo/ammo_group.ex:84
msgid "Please select an ammo type and container"
msgstr ""
#, elixir-autogen, elixir-format
#: lib/cannery/activity_log/shot_group.ex:69
msgid "Please select a valid user and ammo group"
msgstr ""

View File

@ -0,0 +1,300 @@
msgid ""
msgstr ""
"Project-Id-Version: PACKAGE VERSION\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2022-04-20 18:02+0000\n"
"PO-Revision-Date: 2022-05-18 18:51+0000\n"
"Last-Translator: Antonin Dupont <pwet@dupon.in>\n"
"Language-Team: French <https://weblate.bubbletea.dev/projects/cannery/"
"prompts/fr/>\n"
"Language: fr\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"Plural-Forms: nplurals=2; plural=n > 1;\n"
"X-Generator: Weblate 4.12.1\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.
#, elixir-autogen, elixir-format
#: lib/cannery_web/live/ammo_type_live/form_component.ex:85
#: lib/cannery_web/live/container_live/form_component.ex:85
#: lib/cannery_web/live/invite_live/form_component.ex:80
#: lib/cannery_web/live/tag_live/form_component.ex:126
msgid "%{name} created successfully"
msgstr "%{name} créé· avec succès"
#, elixir-autogen, elixir-format
#: lib/cannery_web/live/ammo_type_live/index.ex:41
#: lib/cannery_web/live/ammo_type_live/show.ex:38
#: lib/cannery_web/live/invite_live/index.ex:53
#: lib/cannery_web/live/invite_live/index.ex:133
#: lib/cannery_web/live/tag_live/index.ex:38
msgid "%{name} deleted succesfully"
msgstr "%{name} supprimé· avec succès"
#, elixir-autogen, elixir-format
#: lib/cannery_web/live/invite_live/index.ex:109
msgid "%{name} disabled succesfully"
msgstr "%{name} supprimé·e avec succès"
#, elixir-autogen, elixir-format
#: lib/cannery_web/live/invite_live/index.ex:87
msgid "%{name} enabled succesfully"
msgstr "%{name} activé·e avec succès"
#, elixir-autogen, elixir-format
#: lib/cannery_web/live/container_live/index.ex:62
#: lib/cannery_web/live/container_live/show.ex:61
msgid "%{name} has been deleted"
msgstr "%{name} a été supprimé·e"
#, elixir-autogen, elixir-format
#: lib/cannery_web/live/invite_live/index.ex:67
msgid "%{name} updated succesfully"
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/container_live/form_component.ex:67
#: lib/cannery_web/live/invite_live/form_component.ex:62
#: lib/cannery_web/live/tag_live/form_component.ex:108
msgid "%{name} updated successfully"
msgstr "%{name} mis à jour avec succès"
#, elixir-autogen, elixir-format
#: lib/cannery_web/controllers/user_settings_controller.ex:29
msgid "A link to confirm your email change has been sent to the new address."
msgstr ""
"Un lien pour confirmer votre changement de mél a été envoyé à la nouvelle "
"adresse."
#, elixir-autogen, elixir-format
#: lib/cannery_web/live/ammo_group_live/index.ex:56
msgid "Ammo group deleted succesfully"
msgstr "Groupe de munition supprimé avec succès"
#, 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!"
msgstr ""
"Êtes-vous certain·e de supprimer %{email}? Cette action est définitive!"
#, 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}?"
msgstr "Êtes-vous certain·e de supprimer %{name}?"
#, elixir-autogen, elixir-format
#: lib/cannery_web/live/invite_live/index.html.heex:49
msgid "Are you sure you want to delete the invite for %{name}?"
msgstr "Êtes-vous certain·e de supprimer linvitation pour %{name}?"
#, elixir-autogen, elixir-format
#: lib/cannery_web/live/ammo_group_live/index.ex:184
#: lib/cannery_web/live/ammo_group_live/show.html.heex:71
msgid "Are you sure you want to delete this ammo?"
msgstr "Êtes-vous certain·e de supprimer cette munition?"
#, elixir-autogen, elixir-format
#: lib/cannery_web/templates/user_settings/edit.html.heex:146
msgid "Are you sure you want to delete your account?"
msgstr "Êtes-vous certain·e de supprimer votre compte?"
#, elixir-autogen, elixir-format
#: lib/cannery_web/components/topbar.ex:90
msgid "Are you sure you want to log out?"
msgstr "Êtes-vous certain·e de vouloir vous déconnecter?"
#, elixir-autogen, elixir-format
#: lib/cannery_web/live/invite_live/index.html.heex:74
msgid "Are you sure you want to make %{name} unlimited?"
msgstr "Êtes-vous certain·e de vouloir rendre %{name} illimité?"
#, elixir-autogen, elixir-format
#: lib/cannery_web/controllers/user_settings_controller.ex:77
msgid "Email changed successfully."
msgstr "Mél changé avec succès."
#, elixir-autogen, elixir-format
#: lib/cannery_web/controllers/user_confirmation_controller.ex:23
msgid "If your email is in our system and it has not been confirmed yet, you will receive an email with instructions shortly."
msgstr ""
"Si votre mél est dans notre système et na pas encore été confirmé, vous "
"recevrez un mél avec les instructions sous peu."
#, elixir-autogen, elixir-format
#: lib/cannery_web/controllers/user_reset_password_controller.ex:24
msgid "If your email is in our system, you will receive instructions to reset your password shortly."
msgstr ""
"Si votre mél est dans notre système, vous recevrez les instructions pour "
"réinitialiser votre mot de passe sous peu."
#, elixir-autogen, elixir-format
#: lib/cannery_web/controllers/user_session_controller.ex:23
msgid "Logged out successfully."
msgstr "Déconnecté avec succès."
#, elixir-autogen, elixir-format
#: lib/cannery_web/controllers/user_reset_password_controller.ex:46
msgid "Password reset successfully."
msgstr "Mot de passe réinitialiser avec succès."
#, elixir-autogen, elixir-format
#: lib/cannery_web/controllers/user_settings_controller.ex:49
msgid "Password updated successfully."
msgstr "Mot de passe mis à jour avec succès."
#, elixir-autogen, elixir-format
#: lib/cannery_web/controllers/user_registration_controller.ex:74
msgid "Please check your email to verify your account"
msgstr "Veuillez vérifier votre mél pour confirmer votre compte"
#, elixir-autogen, elixir-format
#: lib/cannery_web/live/home_live.ex:104
msgid "Register to setup %{name}"
msgstr "Senregistrer pour mettre en place %{name}"
#, elixir-autogen, elixir-format
#: 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_type_live/form_component.html.heex:157
#: 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/range_live/form_component.html.heex:42
#: lib/cannery_web/live/tag_live/form_component.ex:93
msgid "Saving..."
msgstr "Sauvegarde en cours…"
#, elixir-autogen, elixir-format
#: lib/cannery_web/controllers/user_settings_controller.ex:95
msgid "Your account has been deleted"
msgstr "Votre compte a été supprimé"
#, elixir-autogen, elixir-format
#: lib/cannery_web/live/container_live/edit_tags_component.html.heex:16
msgid "Are you sure you want to remove the %{tag_name} tag from %{container_name}?"
msgstr ""
"Êtes-vous certain·e de vouloir retirer le tag %{tag_name} de "
"%{container_name}?"
#, elixir-autogen, elixir-format
#: lib/cannery_web/live/container_live/edit_tags_component.ex:36
msgid "%{name} added successfully"
msgstr "%{name} a été ajouté avec succès"
#, elixir-autogen, elixir-format
#: lib/cannery_web/live/container_live/show.ex:37
msgid "%{tag_name} has been removed from %{container_name}"
msgstr "%{tag_name} a été retiré de %{container_name}"
#, elixir-autogen, elixir-format
#: lib/cannery_web/live/container_live/edit_tags_component.html.heex:54
msgid "Adding..."
msgstr "Ajout en cours…"
#, elixir-autogen, elixir-format
#: lib/cannery_web/components/add_shot_group_component.ex:56
msgid "Shots recorded successfully"
msgstr "Tirs enregistré avec succès"
#, elixir-autogen, elixir-format
#: lib/cannery_web/live/range_live/index.html.heex:29
msgid "Are you sure you want to unstage this ammo?"
msgstr "Êtes-vous certain·e de vouloir désélectionner cette munition?"
#, 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?"
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/range_live/index.ex:54
msgid "Shot records deleted succesfully"
msgstr "Enregistrements de tir supprimés avec succès"
#, elixir-autogen, elixir-format
#: lib/cannery_web/live/range_live/form_component.ex:55
msgid "Shot records updated successfully"
msgstr "Enregistrements de tir mis à jour avec succès"
#, elixir-autogen, elixir-format
#: lib/cannery_web/controllers/user_confirmation_controller.ex:38
msgid "%{email} confirmed successfully."
msgstr "%{email} confirmé avec succès."
#, elixir-autogen, elixir-format
#: lib/cannery_web/components/move_ammo_group_component.ex:53
msgid "Ammo moved to %{name} successfully"
msgstr "Munition déplacée à %{name} avec succès"
#, elixir-autogen, elixir-format
#: lib/cannery_web/live/invite_live/index.ex:121
msgid "Copied to clipboard"
msgstr "Copié dans le presse-papier"
#, elixir-autogen, elixir-format
#: lib/cannery_web/live/container_live/edit_tags_component.ex:58
msgid "%{name} removed successfully"
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:28
msgid "You'll need to"
msgstr "Vous aurez besoin de"
#, elixir-autogen, elixir-format
#: lib/cannery_web/live/ammo_group_live/form_component.html.heex:67
msgid "Creating..."
msgstr "Création en cours…"
#, elixir-autogen, elixir-format
#: lib/cannery_web/templates/user_settings/edit.html.heex:136
msgid "Are you sure you want to change your language?"
msgstr "Êtes-vous certain·e de vouloir changer votre langue?"
#, elixir-autogen, elixir-format
#: lib/cannery_web/controllers/user_settings_controller.ex:65
msgid "Language updated successfully."
msgstr "Langue mise à jour avec succès."
#, elixir-autogen, elixir-format, fuzzy
#: lib/cannery_web/live/ammo_group_live/show.ex:50
msgid "Ammo deleted succesfully"
msgstr "Groupe de munition supprimé avec succès"
#, elixir-autogen, elixir-format, fuzzy
#: lib/cannery_web/live/range_live/index.ex:68
msgid "Ammo unstaged succesfully"
msgstr "Groupe de munition désélectionner avec succès"
#, elixir-autogen, elixir-format, fuzzy
#: lib/cannery_web/live/ammo_group_live/form_component.ex:118
msgid "Ammo updated successfully"
msgstr "Groupe de munition mis à jour avec succès"
#, elixir-autogen, elixir-format, fuzzy
#: lib/cannery_web/live/ammo_group_live/form_component.ex:177
msgid "Ammo added successfully"
msgid_plural "Ammo added successfully"
msgstr[0] "Groupe de munition mis à jour avec succès"
msgstr[1] "Groupe de munition mis à jour avec succès"
#, elixir-autogen, elixir-format, fuzzy
#: lib/cannery_web/live/ammo_type_live/index.ex:140
#: lib/cannery_web/live/ammo_type_live/show.html.heex:27
msgid "Are you sure you want to delete %{name}? This will delete all %{name} type ammo as well!"
msgstr "Êtes-vous certain·e de supprimer %{name}?"

View File

@ -11,67 +11,61 @@ msgid ""
msgstr "" msgstr ""
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
#: lib/cannery_web/live/ammo_type_live/form_component.ex:64 #: lib/cannery_web/live/ammo_type_live/form_component.ex:85
#: lib/cannery_web/live/container_live/form_component.ex:65 #: lib/cannery_web/live/container_live/form_component.ex:85
#: lib/cannery_web/live/invite_live/form_component.ex:59 #: lib/cannery_web/live/invite_live/form_component.ex:80
#: lib/cannery_web/live/tag_live/form_component.ex:101 #: lib/cannery_web/live/tag_live/form_component.ex:126
msgid "%{name} created successfully" msgid "%{name} created successfully"
msgstr "" msgstr ""
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
#: lib/cannery_web/live/ammo_type_live/index.ex:41 #: lib/cannery_web/live/ammo_type_live/index.ex:41
#: lib/cannery_web/live/ammo_type_live/show.ex:40 #: lib/cannery_web/live/ammo_type_live/show.ex:38
#: lib/cannery_web/live/invite_live/index.ex:55 #: lib/cannery_web/live/invite_live/index.ex:53
#: lib/cannery_web/live/invite_live/index.ex:135 #: lib/cannery_web/live/invite_live/index.ex:133
#: lib/cannery_web/live/tag_live/index.ex:40 #: lib/cannery_web/live/tag_live/index.ex:38
msgid "%{name} deleted succesfully" msgid "%{name} deleted succesfully"
msgstr "" msgstr ""
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
#: lib/cannery_web/live/invite_live/index.ex:111 #: lib/cannery_web/live/invite_live/index.ex:109
msgid "%{name} disabled succesfully" msgid "%{name} disabled succesfully"
msgstr "" msgstr ""
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
#: lib/cannery_web/live/invite_live/index.ex:89 #: lib/cannery_web/live/invite_live/index.ex:87
msgid "%{name} enabled succesfully" msgid "%{name} enabled succesfully"
msgstr "" msgstr ""
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
#: lib/cannery_web/live/container_live/index.ex:64 #: lib/cannery_web/live/container_live/index.ex:62
#: lib/cannery_web/live/container_live/show.ex:63 #: lib/cannery_web/live/container_live/show.ex:61
msgid "%{name} has been deleted" msgid "%{name} has been deleted"
msgstr "" msgstr ""
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
#: lib/cannery_web/live/invite_live/index.ex:69 #: lib/cannery_web/live/invite_live/index.ex:67
msgid "%{name} updated succesfully" msgid "%{name} updated succesfully"
msgstr "" msgstr ""
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
#: lib/cannery_web/live/ammo_type_live/form_component.ex:46 #: lib/cannery_web/live/ammo_type_live/form_component.ex:67
#: lib/cannery_web/live/container_live/form_component.ex:47 #: lib/cannery_web/live/container_live/form_component.ex:67
#: lib/cannery_web/live/invite_live/form_component.ex:41 #: lib/cannery_web/live/invite_live/form_component.ex:62
#: lib/cannery_web/live/tag_live/form_component.ex:83 #: lib/cannery_web/live/tag_live/form_component.ex:108
msgid "%{name} updated successfully" msgid "%{name} updated successfully"
msgstr "" msgstr ""
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
#: lib/cannery_web/controllers/user_settings_controller.ex:28 #: lib/cannery_web/controllers/user_settings_controller.ex:29
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 ""
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
#: lib/cannery_web/live/ammo_group_live/index.ex:56 #: lib/cannery_web/live/ammo_group_live/index.ex:56
#: lib/cannery_web/live/ammo_group_live/show.ex:52
msgid "Ammo group deleted succesfully" msgid "Ammo group deleted succesfully"
msgstr "" msgstr ""
#, elixir-autogen, elixir-format
#: lib/cannery_web/live/ammo_group_live/form_component.ex:88
msgid "Ammo group updated successfully"
msgstr ""
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
#: lib/cannery_web/live/invite_live/index.html.heex:102 #: lib/cannery_web/live/invite_live/index.html.heex:102
#: lib/cannery_web/live/invite_live/index.html.heex:131 #: lib/cannery_web/live/invite_live/index.html.heex:131
@ -79,9 +73,8 @@ msgid "Are you sure you want to delete %{email}? This action is permanent!"
msgstr "" msgstr ""
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
#: lib/cannery_web/live/ammo_type_live/show.html.heex:27
#: lib/cannery_web/live/container_live/index.html.heex:46 #: lib/cannery_web/live/container_live/index.html.heex:46
#: lib/cannery_web/live/container_live/show.html.heex:37 #: lib/cannery_web/live/container_live/show.html.heex:49
#: lib/cannery_web/live/tag_live/index.html.heex:38 #: lib/cannery_web/live/tag_live/index.html.heex:38
msgid "Are you sure you want to delete %{name}?" msgid "Are you sure you want to delete %{name}?"
msgstr "" msgstr ""
@ -92,19 +85,18 @@ msgid "Are you sure you want to delete the invite for %{name}?"
msgstr "" msgstr ""
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
#: lib/cannery_web/live/ammo_group_live/index.ex:167 #: lib/cannery_web/live/ammo_group_live/index.ex:184
#: lib/cannery_web/live/ammo_group_live/show.html.heex:66 #: lib/cannery_web/live/ammo_group_live/show.html.heex:71
#: lib/cannery_web/live/ammo_type_live/index.ex:140
msgid "Are you sure you want to delete this ammo?" msgid "Are you sure you want to delete this ammo?"
msgstr "" msgstr ""
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
#: lib/cannery_web/templates/user_settings/edit.html.heex:112 #: 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 ""
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
#: lib/cannery_web/components/topbar.ex:84 #: lib/cannery_web/components/topbar.ex:90
msgid "Are you sure you want to log out?" msgid "Are you sure you want to log out?"
msgstr "" msgstr ""
@ -114,7 +106,7 @@ msgid "Are you sure you want to make %{name} unlimited?"
msgstr "" msgstr ""
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
#: lib/cannery_web/controllers/user_settings_controller.ex:60 #: lib/cannery_web/controllers/user_settings_controller.ex:77
msgid "Email changed successfully." msgid "Email changed successfully."
msgstr "" msgstr ""
@ -139,7 +131,7 @@ msgid "Password reset successfully."
msgstr "" msgstr ""
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
#: lib/cannery_web/controllers/user_settings_controller.ex:47 #: lib/cannery_web/controllers/user_settings_controller.ex:49
msgid "Password updated successfully." msgid "Password updated successfully."
msgstr "" msgstr ""
@ -149,7 +141,7 @@ msgid "Please check your email to verify your account"
msgstr "" msgstr ""
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
#: lib/cannery_web/live/home_live.ex:101 #: lib/cannery_web/live/home_live.ex:104
msgid "Register to setup %{name}" msgid "Register to setup %{name}"
msgstr "" msgstr ""
@ -158,14 +150,14 @@ msgstr ""
#: lib/cannery_web/live/ammo_group_live/form_component.html.heex:74 #: lib/cannery_web/live/ammo_group_live/form_component.html.heex:74
#: lib/cannery_web/live/ammo_type_live/form_component.html.heex:157 #: lib/cannery_web/live/ammo_type_live/form_component.html.heex:157
#: lib/cannery_web/live/container_live/form_component.html.heex:52 #: lib/cannery_web/live/container_live/form_component.html.heex:52
#: lib/cannery_web/live/invite_live/form_component.html.heex:30 #: lib/cannery_web/live/invite_live/form_component.html.heex:33
#: lib/cannery_web/live/range_live/form_component.html.heex:42 #: lib/cannery_web/live/range_live/form_component.html.heex:42
#: lib/cannery_web/live/tag_live/form_component.ex:68 #: lib/cannery_web/live/tag_live/form_component.ex:93
msgid "Saving..." msgid "Saving..."
msgstr "" msgstr ""
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
#: lib/cannery_web/controllers/user_settings_controller.ex:78 #: lib/cannery_web/controllers/user_settings_controller.ex:95
msgid "Your account has been deleted" msgid "Your account has been deleted"
msgstr "" msgstr ""
@ -180,7 +172,7 @@ msgid "%{name} added successfully"
msgstr "" msgstr ""
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
#: lib/cannery_web/live/container_live/show.ex:39 #: lib/cannery_web/live/container_live/show.ex:37
msgid "%{tag_name} has been removed from %{container_name}" msgid "%{tag_name} has been removed from %{container_name}"
msgstr "" msgstr ""
@ -190,7 +182,7 @@ msgid "Adding..."
msgstr "" msgstr ""
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
#: lib/cannery_web/components/add_shot_group_component.ex:68 #: lib/cannery_web/components/add_shot_group_component.ex:56
msgid "Shots recorded successfully" msgid "Shots recorded successfully"
msgstr "" msgstr ""
@ -200,19 +192,14 @@ msgid "Are you sure you want to unstage this ammo?"
msgstr "" msgstr ""
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
#: lib/cannery_web/live/range_live/index.ex:70 #: lib/cannery_web/live/ammo_group_live/show.ex:130
msgid "Ammo group unstaged succesfully" #: lib/cannery_web/live/range_live/index.ex:128
msgstr ""
#, elixir-autogen, elixir-format
#: lib/cannery_web/live/ammo_group_live/show.ex:132
#: lib/cannery_web/live/range_live/index.ex:130
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 #, elixir-autogen, elixir-format
#: lib/cannery_web/live/ammo_group_live/show.ex:80 #: lib/cannery_web/live/ammo_group_live/show.ex:78
#: lib/cannery_web/live/range_live/index.ex:56 #: lib/cannery_web/live/range_live/index.ex:54
msgid "Shot records deleted succesfully" msgid "Shot records deleted succesfully"
msgstr "" msgstr ""
@ -232,7 +219,7 @@ msgid "Ammo moved to %{name} successfully"
msgstr "" msgstr ""
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
#: lib/cannery_web/live/invite_live/index.ex:123 #: lib/cannery_web/live/invite_live/index.ex:121
msgid "Copied to clipboard" msgid "Copied to clipboard"
msgstr "" msgstr ""
@ -242,8 +229,8 @@ msgid "%{name} removed successfully"
msgstr "" msgstr ""
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
#: lib/cannery_web/live/ammo_group_live/index.html.heex:15 #: lib/cannery_web/live/ammo_group_live/index.html.heex:17
#: lib/cannery_web/live/ammo_group_live/index.html.heex:33 #: lib/cannery_web/live/ammo_group_live/index.html.heex:28
msgid "You'll need to" msgid "You'll need to"
msgstr "" msgstr ""
@ -253,8 +240,39 @@ msgid "Creating..."
msgstr "" msgstr ""
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
#: lib/cannery_web/live/ammo_group_live/form_component.ex:147 #: lib/cannery_web/templates/user_settings/edit.html.heex:136
msgid "Ammo group created successfully" msgid "Are you sure you want to change your language?"
msgid_plural "Ammo groups created successfully" msgstr ""
#, elixir-autogen, elixir-format
#: lib/cannery_web/controllers/user_settings_controller.ex:65
msgid "Language updated successfully."
msgstr ""
#, elixir-autogen, elixir-format
#: lib/cannery_web/live/ammo_group_live/show.ex:50
msgid "Ammo deleted succesfully"
msgstr ""
#, elixir-autogen, elixir-format
#: lib/cannery_web/live/range_live/index.ex:68
msgid "Ammo unstaged succesfully"
msgstr ""
#, elixir-autogen, elixir-format
#: lib/cannery_web/live/ammo_group_live/form_component.ex:118
msgid "Ammo updated successfully"
msgstr ""
#, elixir-autogen, elixir-format
#: lib/cannery_web/live/ammo_group_live/form_component.ex:177
msgid "Ammo added successfully"
msgid_plural "Ammo added successfully"
msgstr[0] "" msgstr[0] ""
msgstr[1] "" msgstr[1] ""
#, elixir-autogen, elixir-format
#: lib/cannery_web/live/ammo_type_live/index.ex:140
#: lib/cannery_web/live/ammo_type_live/show.html.heex:27
msgid "Are you sure you want to delete %{name}? This will delete all %{name} type ammo as well!"
msgstr ""

10
priv/i18n/es.tbx Normal file
View File

@ -0,0 +1,10 @@
<?xml version="1.0"?>
<!DOCTYPE martif PUBLIC "ISO 12200:1999A//DTD MARTIF core (DXFcdV04)//EN" "TBXcdv04.dtd">
<martif type="TBX">
<martifHeader>
<fileDesc>
<sourceDesc><p>Translate Toolkit</p></sourceDesc>
</fileDesc>
</martifHeader>
<text><body></body></text>
</martif>

10
priv/i18n/fr.tbx Normal file
View File

@ -0,0 +1,10 @@
<?xml version="1.0"?>
<!DOCTYPE martif PUBLIC "ISO 12200:1999A//DTD MARTIF core (DXFcdV04)//EN" "TBXcdv04.dtd">
<martif type="TBX">
<martifHeader>
<fileDesc>
<sourceDesc><p>Translate Toolkit</p></sourceDesc>
</fileDesc>
</martifHeader>
<text><body></body></text>
</martif>

View File

@ -0,0 +1,9 @@
defmodule Cannery.Repo.Migrations.AddLocaleSetting do
use Ecto.Migration
def change do
alter table("users") do
add :locale, :string
end
end
end

View File

@ -178,10 +178,5 @@ defmodule Cannery.ActivityLogTest do
ActivityLog.get_shot_group!(shot_group.id, current_user) ActivityLog.get_shot_group!(shot_group.id, current_user)
end end
end end
test "change_shot_group/1 returns a shot_group changeset",
%{shot_group: shot_group} do
assert %Ecto.Changeset{} = ActivityLog.change_shot_group(shot_group)
end
end end
end end

View File

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

View File

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

View File

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

View File

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

View File

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