Compare commits

..

No commits in common. "b29a5cce7b8a10cf257ecdb2dcba21cc1eb481b8" and "42e2d1c76e7fd68b5fe9bf98ac8d1e4710a3643a" have entirely different histories.

70 changed files with 734 additions and 771 deletions

View File

@ -13,24 +13,20 @@ steps:
mount:
- _build
- deps
- .npm
- .mix
- assets/node_modules/
- name: test
image: elixir:1.14.1-alpine
environment:
TEST_DATABASE_URL: ecto://postgres:postgres@database/cannery_test
HOST: testing.example.tld
MIX_HOME: /drone/src/.mix
MIX_ARCHIVES: /drone/src/.mix/archives
MIX_ENV: test
commands:
- apk add --no-cache build-base npm git
- mix local.rebar --force --if-missing
- mix local.hex --force --if-missing
- apk add --no-cache build-base npm git python3
- mix local.rebar --force
- mix local.hex --force
- mix deps.get
- npm set cache .npm
- npm --prefix ./assets ci --no-audit --prefer-offline
- mix deps.compile
- npm --prefix ./assets ci --progress=false --no-audit --loglevel=error
- npm run --prefix ./assets deploy
- mix do phx.digest, gettext.extract
- mix test.all
@ -80,8 +76,7 @@ steps:
mount:
- _build
- deps
- .npm
- .mix
- assets/node_modules/
services:
- name: database

2
.gitignore vendored
View File

@ -25,7 +25,7 @@ cannery-*.tar
# If NPM crashes, it generates a log, let's ignore it too.
npm-debug.log
# The directory NPM downloads your dependencies sources to.
# Ignore assets that are produced by build tools.
/assets/node_modules/
# Since we are building assets from assets/,

View File

@ -1,3 +1,3 @@
elixir 1.14.1-otp-25
erlang 25.1.2
nodejs 18.9.1
nodejs 18.12.1

View File

@ -1,8 +1,3 @@
# v0.8.3
- Improve some styles
- Improve server log
- Various minor improvements
# v0.8.2
- Fix bug with public registration
- Improve templates

View File

@ -63,8 +63,7 @@ And as always, thank you!
[`phx_gen_auth`](https://hexdocs.pm/phx_gen_auth/).
- `Dockerfile` and example `docker-compose.yml`
- Automatic migrations in `MIX_ENV=prod` or Docker image
- JS linting with [standard.js](https://standardjs.com), HEEx linting with
[heex_formatter](https://github.com/feliperenan/heex_formatter)
- JS linting with [standard.js](https://standardjs.com)
## Docs
@ -110,7 +109,7 @@ In `dev` mode, Cannery will listen for these environment variables at runtime.
- `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`.
- `LOCALE`: Sets a custom default locale. Defaults to `en_US`.
- Available options: `en_US`, `de`, `fr`, and `es`
- Available options: `en_US`, `de`, and `fr`
## `MIX_ENV=test`

View File

@ -64,7 +64,7 @@ You can use the following environment variables to configure Cannery in
- `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 default locale. Defaults to `en_US`
- Available options: `en_US`, `de`, `fr` and `es`
- Available options: `en_US`, `de`, and `fr`
- `SMTP_HOST`: The url for your SMTP email provider. Must be set
- `SMTP_PORT`: The port for your SMTP relay. Defaults to `587`.
- `SMTP_USERNAME`: The username for your SMTP relay. Must be set!

View File

@ -25,6 +25,7 @@
}
.btn {
@apply inline-block break-words;
@apply focus:outline-none px-4 py-2 rounded-lg;
@apply shadow-sm focus:shadow-lg;
@apply transition-all duration-300 ease-in-out;
@ -51,6 +52,7 @@
}
.link {
@apply inline-block break-words;
@apply hover:underline;
@apply transition-colors duration-500 ease-in-out;
}

View File

@ -3,8 +3,8 @@
"description": " ",
"license": "MIT",
"engines": {
"node": "v18.9.1",
"npm": "8.10.0"
"node": "18.12.1",
"npm": "8.19.2"
},
"scripts": {
"deploy": "NODE_ENV=production webpack --mode production",

View File

@ -16,8 +16,9 @@ defmodule Cannery.Accounts do
## Examples
iex> get_user_by_email("foo@example.com")
%User{}
iex> register_user(%{email: "foo@example.com", password: "valid_password"})
iex> with %User{} <- get_user_by_email("foo@example.com"), do: :passed
:passed
iex> get_user_by_email("unknown@example.com")
nil
@ -33,8 +34,9 @@ defmodule Cannery.Accounts do
## Examples
iex> get_user_by_email_and_password("foo@example.com", "valid_password")
%User{}
iex> register_user(%{email: "foo@example.com", password: "valid_password"})
iex> with %User{} <- get_user_by_email_and_password("foo@example.com", "valid_password"), do: :passed
:passed
iex> get_user_by_email_and_password("foo@example.com", "invalid_password")
nil
@ -55,14 +57,15 @@ defmodule Cannery.Accounts do
## Examples
iex> get_user!(user_id)
iex> {:ok, user} = register_user(%{email: "foo@example.com", password: "valid_password"})
iex> get_user!(user.id)
user
iex> get_user!()
> get_user!()
** (Ecto.NoResultsError)
"""
@spec get_user!(User.id()) :: User.t()
@spec get_user!(User.t()) :: User.t()
def get_user!(id) do
Repo.get!(User, id)
end
@ -72,8 +75,10 @@ defmodule Cannery.Accounts do
## Examples
iex> list_all_users_by_role(user1)
%{admin: [%User{role: :admin}], user: [%User{role: :user}]}
iex> {:ok, user1} = register_user(%{email: "foo1@example.com", password: "valid_password"})
iex> {:ok, user2} = register_user(%{email: "foo2@example.com", password: "valid_password"})
iex> with %{admin: [^user1], user: [^user2]} <- list_all_users_by_role(user1), do: :passed
:passed
"""
@spec list_all_users_by_role(User.t()) :: %{User.role() => [User.t()]}
@ -86,8 +91,9 @@ defmodule Cannery.Accounts do
## Examples
iex> list_users_by_role(:admin)
[%User{role: :admin}]
iex> {:ok, user} = register_user(%{email: "foo@example.com", password: "valid_password"})
iex> with [^user] <- list_users_by_role(:admin), do: :passed
:passed
"""
@spec list_users_by_role(:admin) :: [User.t()]
@ -102,11 +108,13 @@ defmodule Cannery.Accounts do
## Examples
iex> register_user(%{email: "foo@example.com", password: "valid_password"})
{:ok, %User{email: "foo@example.com"}}
iex> with {:ok, %User{email: "foo@example.com"}} <-
...> register_user(%{email: "foo@example.com", password: "valid_password"}),
...> do: :passed
:passed
iex> register_user(%{email: "foo@example"})
{:error, %Changeset{}}
iex> with {:error, %Changeset{}} <- register_user(%{email: "foo@example"}), do: :passed
:passed
"""
@spec register_user(attrs :: map()) ::
@ -141,11 +149,11 @@ defmodule Cannery.Accounts do
## Examples
iex> change_user_registration()
%Changeset{}
iex> with %Changeset{} <- change_user_registration(), do: :passed
:passed
iex> change_user_registration(%{password: "hi"}
%Changeset{}
iex> with %Changeset{} <- change_user_registration(%{password: "hi"}), do: :passed
:passed
"""
@spec change_user_registration() :: User.changeset()
@ -161,8 +169,8 @@ defmodule Cannery.Accounts do
## Examples
iex> change_user_email(%User{email: "foo@example.com"})
%Changeset{}
iex> with %Changeset{} <- change_user_email(%User{email: "foo@example.com"}), do: :passed
:passed
"""
@spec change_user_email(User.t()) :: User.changeset()
@ -176,8 +184,8 @@ defmodule Cannery.Accounts do
## Examples
iex> change_user_role(%User{}, :user)
%Changeset{}
iex> with %Changeset{} <- change_user_role(%User{}, :user), do: :passed
:passed
"""
@spec change_user_role(User.t(), User.role()) :: User.changeset()
@ -191,11 +199,17 @@ defmodule Cannery.Accounts do
## Examples
iex> apply_user_email(user, "valid_password", %{email: "new_email@account.com"})
{:ok, %User{}}
iex> {:ok, user} = register_user(%{email: "foo@example.com", password: "valid_password"})
iex> with {:ok, %User{}} <-
...> apply_user_email(user, "valid_password", %{email: "new_email@account.com"}),
...> do: :passed
:passed
iex> apply_user_email(user, "invalid password", %{email: "new_email@account"})
{:error, %Changeset{}}
iex> {:ok, user} = register_user(%{email: "foo@example.com", password: "valid_password"})
iex> with {:error, %Changeset{}} <-
...> apply_user_email(user, "invalid password", %{email: "new_email@account"}),
...> do: :passed
:passed
"""
@spec apply_user_email(User.t(), email :: String.t(), attrs :: map()) ::
@ -240,8 +254,12 @@ defmodule Cannery.Accounts do
## Examples
iex> deliver_update_email_instructions(user, "new_foo@example.com", fn _token -> "example url" end)
%Oban.Job{args: %{email: :update_email, user_id: ^user_id, attrs: %{url: "example url"}}}
iex> {:ok, %{id: user_id} = user} = register_user(%{email: "foo@example.com", password: "valid_password"})
iex> with %Oban.Job{
...> args: %{email: :update_email, user_id: ^user_id, attrs: %{url: "example url"}}
...> } <- deliver_update_email_instructions(user, "new_foo@example.com", fn _token -> "example url" end),
...> do: :passed
:passed
"""
@spec deliver_update_email_instructions(User.t(), current_email :: String.t(), function) ::
@ -258,8 +276,8 @@ defmodule Cannery.Accounts do
## Examples
iex> change_user_password(%User{})
%Changeset{}
iex> with %Changeset{} <- change_user_password(%User{}), do: :passed
:passed
"""
@spec change_user_password(User.t(), attrs :: map()) :: User.changeset()
@ -272,14 +290,20 @@ defmodule Cannery.Accounts do
## Examples
iex> reset_user_password(user, %{
...> password: "new password",
...> password_confirmation: "new password"
...> })
{:ok, %User{}}
iex> {:ok, user} = register_user(%{email: "foo@example.com", password: "valid_password"})
iex> with {:ok, %User{}} <-
...> reset_user_password(user, %{
...> password: "new password",
...> password_confirmation: "new password"
...> }),
...> do: :passed
:passed
iex> update_user_password(user, "invalid password", %{password: "123"})
{:error, %Changeset{}}
iex> {:ok, user} = register_user(%{email: "foo@example.com", password: "valid_password"})
iex> with {:error, %Changeset{}} <-
...> update_user_password(user, "invalid password", %{password: "123"}),
...> do: :passed
:passed
"""
@spec update_user_password(User.t(), String.t(), attrs :: map()) ::
@ -305,8 +329,8 @@ defmodule Cannery.Accounts do
## Examples
iex> change_user_locale(%User{})
%Changeset{}
iex> with %Changeset{} <- change_user_locale(%User{}), do: :passed
:passed
"""
@spec change_user_locale(User.t()) :: User.changeset()
@ -319,8 +343,9 @@ defmodule Cannery.Accounts do
## Examples
iex> update_user_locale(user, "en_US")
{:ok, %User{}}
iex> {:ok, user} = register_user(%{email: "foo@example.com", password: "valid_password"})
iex> with {:ok, %User{}} <- update_user_locale(user, "en_US"), do: :passed
:passed
"""
@spec update_user_locale(User.t(), locale :: String.t()) ::
@ -334,11 +359,13 @@ defmodule Cannery.Accounts do
## Examples
iex> delete_user!(user, %User{id: 123, role: :admin})
%User{}
iex> {:ok, user} = register_user(%{email: "foo@example.com", password: "valid_password"})
iex> with %User{} <- delete_user!(user, %User{id: 123, role: :admin}), do: :passed
:passed
iex> delete_user!(user, user)
%User{}
iex> {:ok, user} = register_user(%{email: "foo@example.com", password: "valid_password"})
iex> with %User{} <- delete_user!(user, user), do: :passed
:passed
"""
@spec delete_user!(user_to_delete :: User.t(), User.t()) :: User.t()
@ -394,10 +421,11 @@ defmodule Cannery.Accounts do
## Examples
iex> is_admin?(%User{role: :admin})
iex> {:ok, user} = register_user(%{email: "foo@example.com", password: "valid_password"})
iex> is_admin?(user)
true
iex> is_admin?(%User{})
iex> is_admin?(%User{id: Ecto.UUID.generate()})
false
"""
@ -411,7 +439,8 @@ defmodule Cannery.Accounts do
## Examples
iex> is_already_admin?(%User{role: :admin})
iex> {:ok, user} = register_user(%{email: "foo@example.com", password: "valid_password"})
iex> is_already_admin?(user)
true
iex> is_already_admin?(%User{})
@ -429,9 +458,15 @@ defmodule Cannery.Accounts do
## Examples
iex> deliver_user_confirmation_instructions(user, fn _token -> "example url" end)
%Oban.Job{args: %{email: :welcome, user_id: ^user_id, attrs: %{url: "example url"}}}
iex> {:ok, %{id: user_id} = user} = register_user(%{email: "foo@example.com", password: "valid_password"})
iex> with %Oban.Job{
...> args: %{email: :welcome, user_id: ^user_id, attrs: %{url: "example url"}}
...> } <- deliver_user_confirmation_instructions(user, fn _token -> "example url" end),
...> do: :passed
:passed
iex> {:ok, user} = register_user(%{email: "foo@example.com", password: "valid_password"})
iex> user = user |> User.confirm_changeset() |> Repo.update!()
iex> deliver_user_confirmation_instructions(user, fn _token -> "example url" end)
{:error, :already_confirmed}
@ -479,8 +514,12 @@ defmodule Cannery.Accounts do
## Examples
iex> deliver_user_reset_password_instructions(user, fn _token -> "example url" end)
%Oban.Job{args: %{email: :reset_password, user_id: ^user_id, attrs: %{url: "example url"}}}
iex> {:ok, %{id: user_id} = user} = register_user(%{email: "foo@example.com", password: "valid_password"})
iex> with %Oban.Job{args: %{
...> email: :reset_password, user_id: ^user_id, attrs: %{url: "example url"}}
...> } <- deliver_user_reset_password_instructions(user, fn _token -> "example url" end),
...> do: :passed
:passed
"""
@spec deliver_user_reset_password_instructions(User.t(), function()) :: Job.t()
@ -496,8 +535,11 @@ defmodule Cannery.Accounts do
## Examples
iex> get_user_by_reset_password_token(encoded_token)
%User{}
iex> {:ok, user} = register_user(%{email: "foo@example.com", password: "valid_password"})
iex> {encoded_token, user_token} = UserToken.build_email_token(user, "reset_password")
iex> Repo.insert!(user_token)
iex> with %User{} <- get_user_by_reset_password_token(encoded_token), do: :passed
:passed
iex> get_user_by_reset_password_token("invalidtoken")
nil
@ -518,14 +560,20 @@ defmodule Cannery.Accounts do
## Examples
iex> reset_user_password(user, %{
...> password: "new password",
...> password_confirmation: "new password"
...> })
{:ok, %User{}}
iex> {:ok, user} = register_user(%{email: "foo@example.com", password: "valid_password"})
iex> with {:ok, %User{}} <-
...> reset_user_password(user, %{
...> password: "new password",
...> password_confirmation: "new password"
...> }),
...> do: :passed
:passed
iex> reset_user_password(user, %{password: "valid", password_confirmation: "not the same"})
{:error, %Changeset{}}
iex> {:ok, user} = register_user(%{email: "foo@example.com", password: "valid_password"})
iex> with {:error, %Changeset{}} <-
...> reset_user_password(user, %{password: "valid", password_confirmation: "not the same"}),
...> do: :passed
:passed
"""
@spec reset_user_password(User.t(), attrs :: map()) ::

View File

@ -27,21 +27,21 @@ defmodule Cannery.Email do
@spec generate_email(key :: String.t(), User.t(), attrs :: map()) :: t()
def generate_email("welcome", user, %{"url" => url}) do
user
|> base_email(dgettext("emails", "Confirm your Cannery account"))
|> base_email(dgettext("emails", "Confirm your %{name} account", name: "Cannery"))
|> render_body("confirm_email.html", %{user: user, url: url})
|> text_body(EmailView.render("confirm_email.txt", %{user: user, url: url}))
end
def generate_email("reset_password", user, %{"url" => url}) do
user
|> base_email(dgettext("emails", "Reset your Cannery password"))
|> base_email(dgettext("emails", "Reset your %{name} password", name: "Cannery"))
|> render_body("reset_password.html", %{user: user, url: url})
|> text_body(EmailView.render("reset_password.txt", %{user: user, url: url}))
end
def generate_email("update_email", user, %{"url" => url}) do
user
|> base_email(dgettext("emails", "Update your Cannery email"))
|> base_email(dgettext("emails", "Update your %{name} email", name: "Cannery"))
|> render_body("update_email.html", %{user: user, url: url})
|> text_body(EmailView.render("update_email.txt", %{user: user, url: url}))
end

View File

@ -4,7 +4,7 @@ defmodule Cannery.Application do
@moduledoc false
use Application
alias Cannery.Logger
alias Cannery.ErrorReporter
@impl true
def start(_type, _args) do
@ -33,7 +33,7 @@ defmodule Cannery.Application do
[:oban, :job, :start],
[:oban, :job, :stop]
],
&Logger.handle_event/4,
&ErrorReporter.handle_event/4,
[]
)

View File

@ -1,4 +1,4 @@
defmodule Cannery.Logger do
defmodule Cannery.ErrorReporter do
@moduledoc """
Custom logger for telemetry events
@ -12,47 +12,41 @@ defmodule Cannery.Logger do
data =
get_oban_job_data(meta, measure)
|> Map.put(:stacktrace, Exception.format_stacktrace(stacktrace))
|> pretty_encode()
Logger.error(meta.reason, data: data)
Logger.error(meta.reason, data: pretty_encode(data))
end
def handle_event([:oban, :job, :start], measure, meta, _config) do
data = get_oban_job_data(meta, measure) |> pretty_encode()
Logger.info("Started oban job", data: data)
Logger.info("Started oban job", data: get_oban_job_data(meta, measure) |> pretty_encode())
end
def handle_event([:oban, :job, :stop], measure, meta, _config) do
data = get_oban_job_data(meta, measure) |> pretty_encode()
Logger.info("Finished oban job", data: data)
Logger.info("Finished oban job", data: get_oban_job_data(meta, measure) |> pretty_encode())
end
def handle_event([:oban, :job, unhandled_event], measure, meta, _config) do
data =
get_oban_job_data(meta, measure)
|> Map.put(:event, unhandled_event)
|> pretty_encode()
Logger.warning("Unhandled oban job event", data: data)
Logger.warning("Unhandled oban job event", data: pretty_encode(data))
end
def handle_event(unhandled_event, measure, meta, config) do
data =
pretty_encode(%{
event: unhandled_event,
meta: meta,
measurements: measure,
config: config
})
data = %{
event: unhandled_event,
meta: meta,
measurements: measure,
config: config
}
Logger.warning("Unhandled telemetry event", data: data)
Logger.warning("Unhandled telemetry event", data: pretty_encode(data))
end
defp get_oban_job_data(%{job: job}, measure) do
%{
job: job |> Map.take([:id, :args, :meta, :queue, :worker]),
measurements: measure
}
job
|> Map.take([:id, :args, :meta, :queue, :worker])
|> Map.merge(measure)
end
defp pretty_encode(data) do

View File

@ -9,9 +9,7 @@ defmodule Cannery.Release do
def rollback(repo, version) do
load_app()
{:ok, _fun_return, _apps} =
Ecto.Migrator.with_repo(repo, &Ecto.Migrator.run(&1, :down, to: version))
{:ok, _fun, _opts} = Ecto.Migrator.with_repo(repo, &Ecto.Migrator.run(&1, :down, to: version))
end
defp load_app do
@ -22,8 +20,7 @@ defmodule Cannery.Release do
load_app()
for repo <- Application.fetch_env!(@app, :ecto_repos) do
{:ok, _fun_return, _apps} =
Ecto.Migrator.with_repo(repo, &Ecto.Migrator.run(&1, :up, all: true))
{:ok, _fun, _opts} = Ecto.Migrator.with_repo(repo, &Ecto.Migrator.run(&1, :up, all: true))
end
end
end

View File

@ -1,6 +1,6 @@
defmodule Cannery.Repo.Migrator do
@moduledoc """
Genserver to automatically perform all migration on app start
Genserver to automatically run migrations in prod env
"""
use GenServer

View File

@ -6,7 +6,7 @@ defmodule CanneryWeb.Components.Topbar do
use CanneryWeb, :component
alias Cannery.Accounts
alias CanneryWeb.HomeLive
alias CanneryWeb.{Endpoint, HomeLive}
def topbar(assigns) do
assigns =
@ -81,17 +81,19 @@ defmodule CanneryWeb.Components.Topbar do
<%= gettext("Range") %>
</.link>
</li>
<li :if={@current_user |> Accounts.is_already_admin?()} class="mx-2 my-1">
<.link
navigate={Routes.invite_index_path(Endpoint, :index)}
class="text-primary-600 text-white hover:underline"
>
<%= gettext("Invites") %>
</.link>
</li>
<%= if @current_user.role == :admin do %>
<li class="mx-2 my-1">
<.link
navigate={Routes.invite_index_path(Endpoint, :index)}
class="text-primary-600 text-white hover:underline"
>
<%= gettext("Invites") %>
</.link>
</li>
<% end %>
<li class="mx-2 my-1">
<.link
href={Routes.user_settings_path(Endpoint, :edit)}
navigate={Routes.user_settings_path(Endpoint, :edit)}
class="text-primary-600 text-white hover:underline truncate"
>
<%= @current_user.email %>
@ -106,33 +108,29 @@ defmodule CanneryWeb.Components.Topbar do
<i class="fas fa-sign-out-alt"></i>
</.link>
</li>
<li
:if={
@current_user |> Accounts.is_already_admin?() and
function_exported?(Routes, :live_dashboard_path, 2)
}
class="mx-2 my-1"
>
<.link
navigate={Routes.live_dashboard_path(Endpoint, :home)}
class="text-white text-white hover:underline"
>
<i class="fas fa-gauge"></i>
</.link>
</li>
<%= if @current_user.role == :admin and function_exported?(Routes, :live_dashboard_path, 2) do %>
<li class="mx-2 my-1">
<.link
navigate={Routes.live_dashboard_path(Endpoint, :home)}
class="text-primary-600 text-white hover:underline"
>
<i class="fas fa-gauge"></i>
</.link>
</li>
<% end %>
<% else %>
<li :if={Accounts.allow_registration?()} class="mx-2 my-1">
<.link
href={Routes.user_registration_path(Endpoint, :new)}
class="text-white hover:underline truncate"
navigate={Routes.user_registration_path(Endpoint, :new)}
class="text-primary-600 text-white hover:underline truncate"
>
<%= dgettext("actions", "Register") %>
</.link>
</li>
<li class="mx-2 my-1">
<.link
href={Routes.user_session_path(Endpoint, :new)}
class="text-white hover:underline truncate"
navigate={Routes.user_session_path(Endpoint, :new)}
class="text-primary-600 text-white hover:underline truncate"
>
<%= dgettext("actions", "Log in") %>
</.link>

View File

@ -1,8 +1,4 @@
defmodule CanneryWeb.HomeController do
@moduledoc """
Controller for home page
"""
use CanneryWeb, :controller
def index(conn, _params) do

View File

@ -7,7 +7,7 @@ defmodule CanneryWeb.InviteLive.Index do
import CanneryWeb.Components.{InviteCard, UserCard}
alias Cannery.Accounts
alias Cannery.Accounts.{Invite, Invites}
alias CanneryWeb.HomeLive
alias CanneryWeb.{Endpoint, HomeLive}
alias Phoenix.LiveView.JS
@impl true

View File

@ -1,4 +1,4 @@
<div class="mx-auto flex flex-col justify-center items-center space-y-4 max-w-3xl">
<div class="w-full flex flex-col space-y-8 justify-center items-center">
<h1 class="title text-2xl title-primary-500">
<%= gettext("Invites") %>
</h1>
@ -18,7 +18,7 @@
</.link>
<% end %>
<div class="flex flex-col justify-center items-stretch space-y-4">
<div class="w-full flex flex-row flex-wrap justify-center items-stretch">
<.invite_card :for={invite <- @invites} invite={invite} current_user={@current_user}>
<:code_actions>
<form phx-submit="copy_to_clipboard">
@ -87,7 +87,7 @@
<%= gettext("Admins") %>
</h1>
<div class="flex flex-col justify-center items-stretch space-y-4">
<div class="w-full flex flex-row flex-wrap justify-center items-stretch">
<.user_card :for={admin <- @admins} user={admin}>
<.link
href="#"
@ -115,7 +115,7 @@
<%= gettext("Users") %>
</h1>
<div class="flex flex-col justify-center items-stretch space-y-4">
<div class="w-full flex flex-row flex-wrap justify-center items-stretch">
<.user_card :for={user <- @users} user={user}>
<.link
href="#"

View File

@ -6,7 +6,7 @@ defmodule CanneryWeb.TagLive.Index do
use CanneryWeb, :live_view
import CanneryWeb.Components.TagCard
alias Cannery.{Tags, Tags.Tag}
alias CanneryWeb.ViewHelpers
alias CanneryWeb.{Endpoint, ViewHelpers}
@impl true
def mount(%{"search" => search}, _session, socket) do

View File

@ -3,21 +3,23 @@
<%= dgettext("emails", "Hi %{email},", email: @user.email) %>
</span>
<br />
<br/>
<span style="margin-bottom: 1em; font-size: 1.25em;">
<%= dgettext("emails", "Welcome to Cannery") %>
<%= dgettext("emails", "Welcome to %{name}!", name: "Cannery") %>
</span>
<br />
<br/>
<%= dgettext("emails", "You can confirm your account by visiting the URL below:") %>
<br />
<br/>
<a style="margin: 1em; color: rgb(31, 31, 31);" href={@url}><%= @url %></a>
<a style="margin: 1em; color: rgb(31, 31, 31);" href="<%= @url %>"><%= @url %></a>
<br />
<br/>
<%= dgettext("emails", "If you didn't create an account at Cannery, please ignore this.") %>
<%= dgettext("emails",
"If you didn't create an account at %{name}, please ignore this.",
name: "Cannery") %>
</div>

View File

@ -1,7 +1,7 @@
<%= dgettext("emails", "Hi %{email},", email: @user.email) %>
<%= dgettext("emails", "Welcome to Cannery") %>
<%= dgettext("emails", "Welcome to %{name}%!", name: "Cannery") %>
<%= dgettext("emails", "You can confirm your account by visiting the URL below:") %>

View File

@ -3,15 +3,17 @@
<%= dgettext("emails", "Hi %{email},", email: @user.email) %>
</span>
<br />
<br/>
<%= dgettext("emails", "You can reset your password by visiting the URL below:") %>
<br />
<br/>
<a style="margin: 1em; color: rgb(31, 31, 31);" href={@url}><%= @url %></a>
<a style="margin: 1em; color: rgb(31, 31, 31);" href="<%= @url %>"><%= @url %></a>
<br />
<br/>
<%= dgettext("emails", "If you didn't request this change from Cannery, please ignore this.") %>
<%= dgettext("emails",
"If you didn't request this change from %{name}, please ignore this.",
name: "Cannery") %>
</div>

View File

@ -3,18 +3,17 @@
<%= dgettext("emails", "Hi %{email},", email: @user.email) %>
</span>
<br />
<br/>
<%= dgettext("emails", "You can change your email by visiting the URL below:") %>
<br />
<br/>
<a style="margin: 1em; color: rgb(31, 31, 31);" href={@url}><%= @url %></a>
<a style="margin: 1em; color: rgb(31, 31, 31);" href="<%= @url %>"><%= @url %></a>
<br />
<br/>
<%= dgettext(
"emails",
"If you didn't request this change from Cannery, please ignore this."
) %>
<%= dgettext("emails",
"If you didn't request this change from %{name}, please ignore this.",
name: "Cannery") %>
</div>

View File

@ -13,7 +13,7 @@
</head>
<body class="pb-8 m-0 p-0 w-full h-full">
<header>
<.topbar current_user={assigns[:current_user]} />
<.topbar current_user={assigns[:current_user]}></.topbar>
</header>
<div class="pb-8 w-full flex flex-col justify-center items-center text-center">

View File

@ -1,6 +1,6 @@
<main role="main" class="min-h-full min-w-full">
<header>
<.topbar current_user={assigns[:current_user]} />
<.topbar current_user={assigns[:current_user]}></.topbar>
<div class="mx-8 my-2 flex flex-col space-y-4 text-center">
<p :if={get_flash(@conn, :info)} class="alert alert-info" role="alert">

View File

@ -12,7 +12,8 @@
<a style="color: rgb(31, 31, 31);" href={Routes.live_url(Endpoint, HomeLive)}>
<%= dgettext(
"emails",
"This email was sent from Cannery, the self-hosted firearm tracker website."
"This email was sent from %{name}, the self-hosted firearm tracker website.",
name: "Cannery"
) %>
</a>
</body>

View File

@ -7,5 +7,6 @@
=====================
<%= dgettext("emails",
"This email was sent from Cannery at %{url}, the self-hosted firearm tracker website.",
"This email was sent from %{name} at %{url}, the self-hosted firearm tracker website.",
name: "Cannery",
url: Routes.live_url(Endpoint, HomeLive)) %>

View File

@ -1,6 +1,6 @@
<main class="pb-8 min-w-full">
<header>
<.topbar current_user={assigns[:current_user]} />
<.topbar current_user={assigns[:current_user]}></.topbar>
<div class="mx-8 my-2 flex flex-col space-y-4 text-center">
<p

View File

@ -9,7 +9,7 @@
action={Routes.user_confirmation_path(@conn, :create)}
class="flex flex-col space-y-4 sm:space-y-0 sm:grid sm:grid-cols-3 sm:gap-4 justify-center items-center"
>
<%= label(f, :email, gettext("Email"), class: "title text-lg text-primary-600") %>
<%= label(f, :email, class: "title text-lg text-primary-600") %>
<%= email_input(f, :email, required: true, class: "input input-primary col-span-2") %>
<%= submit(dgettext("actions", "Resend confirmation instructions"),

View File

@ -17,11 +17,11 @@
<%= hidden_input(f, :invite_token, value: @invite_token) %>
<% end %>
<%= label(f, :email, gettext("Email"), class: "title text-lg text-primary-600") %>
<%= label(f, :email, class: "title text-lg text-primary-600") %>
<%= email_input(f, :email, required: true, class: "input input-primary col-span-2") %>
<%= error_tag(f, :email, "col-span-3") %>
<%= label(f, :password, gettext("Password"), class: "title text-lg text-primary-600") %>
<%= label(f, :password, class: "title text-lg text-primary-600") %>
<%= password_input(f, :password, required: true, class: "input input-primary col-span-2") %>
<%= error_tag(f, :password, "col-span-3") %>

View File

@ -9,15 +9,17 @@
action={Routes.user_reset_password_path(@conn, :update, @token)}
class="flex flex-col space-y-4 sm:space-y-0 sm:grid sm:grid-cols-3 sm:gap-4 justify-center items-center"
>
<p :if={@changeset.action && not @changeset.valid?()} class="alert alert-danger col-span-3">
<%= dgettext("errors", "Oops, something went wrong! Please check the errors below.") %>
</p>
<div :if={@changeset.action && not @changeset.valid?()} class="alert alert-danger col-span-3">
<p>
<%= dgettext("errors", "Oops, something went wrong! Please check the errors below.") %>
</p>
</div>
<%= label(f, :password, gettext("New password"), class: "title text-lg text-primary-600") %>
<%= label(f, :password, "New password", class: "title text-lg text-primary-600") %>
<%= password_input(f, :password, required: true, class: "input input-primary col-span-2") %>
<%= error_tag(f, :password, "col-span-3") %>
<%= label(f, :password_confirmation, gettext("Confirm new password"),
<%= label(f, :password_confirmation, "Confirm new password",
class: "title text-lg text-primary-600"
) %>
<%= password_input(f, :password_confirmation,

View File

@ -9,7 +9,7 @@
action={Routes.user_reset_password_path(@conn, :create)}
class="flex flex-col space-y-4 sm:space-y-0 sm:grid sm:grid-cols-3 sm:gap-4 justify-center items-center"
>
<%= label(f, :email, gettext("Email"), class: "title text-lg text-primary-600") %>
<%= label(f, :email, class: "title text-lg text-primary-600") %>
<%= email_input(f, :email, required: true, class: "input input-primary col-span-2") %>
<%= submit(dgettext("actions", "Send instructions to reset password"),

View File

@ -10,14 +10,16 @@
as="user"
class="flex flex-col space-y-4 sm:space-y-0 sm:grid sm:grid-cols-3 sm:gap-4 justify-center items-center"
>
<p :if={@error_message} class="alert alert-danger col-span-3">
<%= @error_message %>
</p>
<div :if={@error_message} class="alert alert-danger col-span-3">
<p>
<%= @error_message %>
</p>
</div>
<%= label(f, :email, gettext("Email"), class: "title text-lg text-primary-600") %>
<%= label(f, :email, class: "title text-lg text-primary-600") %>
<%= email_input(f, :email, required: true, class: "input input-primary col-span-2") %>
<%= label(f, :password, gettext("Password"), class: "title text-lg text-primary-600") %>
<%= label(f, :password, class: "title text-lg text-primary-600") %>
<%= password_input(f, :password, required: true, class: "input input-primary col-span-2") %>
<%= label(f, :remember_me, gettext("Keep me logged in for 60 days"),

View File

@ -1,5 +1,5 @@
<div class="mx-auto pb-8 max-w-3xl flex flex-col justify-center items-center text-right space-y-4">
<h1 class="pb-4 title text-primary-600 text-2xl text-center">
<div class="mx-auto pb-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">
<%= gettext("Settings") %>
</h1>
@ -11,7 +11,7 @@
action={Routes.user_settings_path(@conn, :update)}
class="flex flex-col space-y-4 sm:space-y-0 sm:grid sm:grid-cols-3 sm:gap-4 justify-center items-center"
>
<h3 class="title text-primary-600 text-lg text-center col-span-3">
<h3 class="title text-primary-600 text-lg col-span-3">
<%= dgettext("actions", "Change email") %>
</h3>
@ -19,12 +19,14 @@
:if={@email_changeset.action && not @email_changeset.valid?()}
class="alert alert-danger col-span-3"
>
<%= dgettext("errors", "Oops, something went wrong! Please check the errors below.") %>
<p>
<%= dgettext("errors", "Oops, something went wrong! Please check the errors below.") %>
</p>
</div>
<%= hidden_input(f, :action, name: "action", value: "update_email") %>
<%= label(f, :email, gettext("Email"), class: "title text-lg text-primary-600") %>
<%= label(f, :email, class: "title text-lg text-primary-600") %>
<%= email_input(f, :email, required: true, class: "mx-2 my-1 input input-primary col-span-2") %>
<%= error_tag(f, :email, "col-span-3") %>
@ -53,7 +55,7 @@
action={Routes.user_settings_path(@conn, :update)}
class="flex flex-col space-y-4 sm:space-y-0 sm:grid sm:grid-cols-3 sm:gap-4 justify-center items-center"
>
<h3 class="title text-primary-600 text-lg text-center col-span-3">
<h3 class="title text-primary-600 text-lg col-span-3">
<%= dgettext("actions", "Change password") %>
</h3>
@ -61,7 +63,9 @@
:if={@password_changeset.action && not @password_changeset.valid?()}
class="alert alert-danger col-span-3"
>
<%= dgettext("errors", "Oops, something went wrong! Please check the errors below.") %>
<p>
<%= dgettext("errors", "Oops, something went wrong! Please check the errors below.") %>
</p>
</div>
<%= hidden_input(f, :action, name: "action", value: "update_password") %>
@ -105,17 +109,19 @@
:let={f}
for={@locale_changeset}
action={Routes.user_settings_path(@conn, :update)}
class="flex flex-col space-y-4 sm:space-y-0 sm:grid sm:grid-cols-3 sm:gap-4 justify-center items-center"
class="flex flex-col space-y-4 justify-center items-center"
>
<h3 class="title text-primary-600 text-lg text-center col-span-3">
<h3 class="title text-primary-600 text-lg">
<%= dgettext("actions", "Change Language") %>
</h3>
<div
:if={@locale_changeset.action && not @locale_changeset.valid?()}
class="alert alert-danger col-span-3"
class="alert alert-danger"
>
<%= dgettext("errors", "Oops, something went wrong! Please check the errors below.") %>
<p>
<%= dgettext("errors", "Oops, something went wrong! Please check the errors below.") %>
</p>
</div>
<%= hidden_input(f, :action, name: "action", value: "update_locale") %>
@ -129,12 +135,12 @@
{gettext("French"), "fr"},
{gettext("Spanish"), "es"}
],
class: "mx-2 my-1 min-w-md input input-primary col-span-3"
class: "mx-2 my-1 min-w-md input input-primary"
) %>
<%= error_tag(f, :locale, "col-span-3") %>
<%= error_tag(f, :locale) %>
<%= submit(dgettext("actions", "Change language"),
class: "whitespace-nowrap mx-auto btn btn-primary col-span-3",
class: "whitespace-nowrap mx-auto btn btn-primary",
data: [qa: dgettext("prompts", "Are you sure you want to change your language?")]
) %>
</.form>

View File

@ -3,5 +3,5 @@ defmodule CanneryWeb.EmailView do
A view for email-related helper functions
"""
use CanneryWeb, :view
alias CanneryWeb.HomeLive
alias CanneryWeb.{Endpoint, HomeLive}
end

View File

@ -1,14 +1,14 @@
defmodule CanneryWeb.ErrorView do
use CanneryWeb, :view
import CanneryWeb.Components.Topbar
alias CanneryWeb.HomeLive
alias CanneryWeb.{Endpoint, HomeLive}
def template_not_found(error_path, _assigns) do
error_string =
case error_path do
"404.html" -> dgettext("errors", "Not found")
"401.html" -> dgettext("errors", "Unauthorized")
_other_path -> dgettext("errors", "Internal Server Error")
_other_template -> dgettext("errors", "Internal Server Error")
end
render("error.html", %{error_string: error_string})

View File

@ -1,7 +1,7 @@
defmodule CanneryWeb.LayoutView do
use CanneryWeb, :view
import CanneryWeb.Components.Topbar
alias CanneryWeb.HomeLive
alias CanneryWeb.{Endpoint, HomeLive}
# Phoenix LiveDashboard is available only in development by default,
# so we instruct Elixir to not warn if the dashboard route is missing.

View File

@ -4,7 +4,7 @@ defmodule Cannery.MixProject do
def project do
[
app: :cannery,
version: "0.8.3",
version: "0.8.2",
elixir: "1.14.1",
elixirc_paths: elixirc_paths(Mix.env()),
compilers: Mix.compilers(),

View File

@ -33,13 +33,13 @@ msgid "Add your first type!"
msgstr ""
#: lib/cannery_web/templates/user_settings/edit.html.heex:15
#: lib/cannery_web/templates/user_settings/edit.html.heex:43
#: lib/cannery_web/templates/user_settings/edit.html.heex:45
#, elixir-autogen, elixir-format
msgid "Change email"
msgstr ""
#: lib/cannery_web/templates/user_settings/edit.html.heex:57
#: lib/cannery_web/templates/user_settings/edit.html.heex:97
#: lib/cannery_web/templates/user_settings/edit.html.heex:59
#: lib/cannery_web/templates/user_settings/edit.html.heex:101
#, elixir-autogen, elixir-format
msgid "Change password"
msgstr ""
@ -49,14 +49,14 @@ msgstr ""
msgid "Create Invite"
msgstr ""
#: lib/cannery_web/templates/user_settings/edit.html.heex:159
#: lib/cannery_web/templates/user_settings/edit.html.heex:165
#, elixir-autogen, elixir-format
msgid "Delete User"
msgstr ""
#: lib/cannery_web/templates/user_registration/new.html.heex:47
#: lib/cannery_web/templates/user_reset_password/new.html.heex:3
#: lib/cannery_web/templates/user_session/new.html.heex:42
#: lib/cannery_web/templates/user_session/new.html.heex:44
#, elixir-autogen, elixir-format
msgid "Forgot your password?"
msgstr ""
@ -66,13 +66,13 @@ msgstr ""
msgid "Invite someone new!"
msgstr ""
#: lib/cannery_web/components/topbar.ex:137
#: lib/cannery_web/components/topbar.ex:135
#: lib/cannery_web/templates/user_confirmation/new.html.heex:31
#: lib/cannery_web/templates/user_registration/new.html.heex:44
#: lib/cannery_web/templates/user_reset_password/edit.html.heex:45
#: lib/cannery_web/templates/user_reset_password/edit.html.heex:47
#: lib/cannery_web/templates/user_reset_password/new.html.heex:31
#: lib/cannery_web/templates/user_session/new.html.heex:3
#: lib/cannery_web/templates/user_session/new.html.heex:28
#: lib/cannery_web/templates/user_session/new.html.heex:30
#, elixir-autogen, elixir-format
msgid "Log in"
msgstr ""
@ -97,13 +97,13 @@ msgstr ""
msgid "New Tag"
msgstr ""
#: lib/cannery_web/components/topbar.ex:129
#: lib/cannery_web/components/topbar.ex:127
#: lib/cannery_web/templates/user_confirmation/new.html.heex:28
#: lib/cannery_web/templates/user_registration/new.html.heex:3
#: lib/cannery_web/templates/user_registration/new.html.heex:37
#: lib/cannery_web/templates/user_reset_password/edit.html.heex:42
#: lib/cannery_web/templates/user_reset_password/edit.html.heex:44
#: lib/cannery_web/templates/user_reset_password/new.html.heex:28
#: lib/cannery_web/templates/user_session/new.html.heex:39
#: lib/cannery_web/templates/user_session/new.html.heex:41
#, elixir-autogen, elixir-format
msgid "Register"
msgstr ""
@ -115,7 +115,7 @@ msgid "Resend confirmation instructions"
msgstr ""
#: lib/cannery_web/templates/user_reset_password/edit.html.heex:3
#: lib/cannery_web/templates/user_reset_password/edit.html.heex:29
#: lib/cannery_web/templates/user_reset_password/edit.html.heex:31
#, elixir-autogen, elixir-format
msgid "Reset password"
msgstr ""
@ -193,12 +193,12 @@ msgstr ""
msgid "Create"
msgstr ""
#: lib/cannery_web/templates/user_settings/edit.html.heex:111
#: lib/cannery_web/templates/user_settings/edit.html.heex:115
#, elixir-autogen, elixir-format
msgid "Change Language"
msgstr ""
#: lib/cannery_web/templates/user_settings/edit.html.heex:136
#: lib/cannery_web/templates/user_settings/edit.html.heex:142
#, elixir-autogen, elixir-format
msgid "Change language"
msgstr ""
@ -235,7 +235,7 @@ msgstr ""
msgid "Unstage from range"
msgstr ""
#: lib/cannery_web/templates/user_settings/edit.html.heex:150
#: lib/cannery_web/templates/user_settings/edit.html.heex:156
#, elixir-autogen, elixir-format
msgid "Export Data as JSON"
msgstr ""

View File

@ -46,13 +46,13 @@ msgid "Add your first type!"
msgstr "Fügen Sie ihre erste Munitionsart hinzu!"
#: lib/cannery_web/templates/user_settings/edit.html.heex:15
#: lib/cannery_web/templates/user_settings/edit.html.heex:43
#: lib/cannery_web/templates/user_settings/edit.html.heex:45
#, elixir-autogen, elixir-format
msgid "Change email"
msgstr "Mailadresse ändern"
#: lib/cannery_web/templates/user_settings/edit.html.heex:57
#: lib/cannery_web/templates/user_settings/edit.html.heex:97
#: lib/cannery_web/templates/user_settings/edit.html.heex:59
#: lib/cannery_web/templates/user_settings/edit.html.heex:101
#, elixir-autogen, elixir-format
msgid "Change password"
msgstr "Passwort ändern"
@ -62,14 +62,14 @@ msgstr "Passwort ändern"
msgid "Create Invite"
msgstr "Einladung erstellen"
#: lib/cannery_web/templates/user_settings/edit.html.heex:159
#: lib/cannery_web/templates/user_settings/edit.html.heex:165
#, elixir-autogen, elixir-format
msgid "Delete User"
msgstr "Benutzer löschen"
#: lib/cannery_web/templates/user_registration/new.html.heex:47
#: lib/cannery_web/templates/user_reset_password/new.html.heex:3
#: lib/cannery_web/templates/user_session/new.html.heex:42
#: lib/cannery_web/templates/user_session/new.html.heex:44
#, elixir-autogen, elixir-format
msgid "Forgot your password?"
msgstr "Passwort vergessen?"
@ -79,13 +79,13 @@ msgstr "Passwort vergessen?"
msgid "Invite someone new!"
msgstr "Laden Sie jemanden ein!"
#: lib/cannery_web/components/topbar.ex:137
#: lib/cannery_web/components/topbar.ex:135
#: lib/cannery_web/templates/user_confirmation/new.html.heex:31
#: lib/cannery_web/templates/user_registration/new.html.heex:44
#: lib/cannery_web/templates/user_reset_password/edit.html.heex:45
#: lib/cannery_web/templates/user_reset_password/edit.html.heex:47
#: lib/cannery_web/templates/user_reset_password/new.html.heex:31
#: lib/cannery_web/templates/user_session/new.html.heex:3
#: lib/cannery_web/templates/user_session/new.html.heex:28
#: lib/cannery_web/templates/user_session/new.html.heex:30
#, elixir-autogen, elixir-format
msgid "Log in"
msgstr "Einloggen"
@ -110,13 +110,13 @@ msgstr "Neuer Behälter"
msgid "New Tag"
msgstr "Neuer Tag"
#: lib/cannery_web/components/topbar.ex:129
#: lib/cannery_web/components/topbar.ex:127
#: lib/cannery_web/templates/user_confirmation/new.html.heex:28
#: lib/cannery_web/templates/user_registration/new.html.heex:3
#: lib/cannery_web/templates/user_registration/new.html.heex:37
#: lib/cannery_web/templates/user_reset_password/edit.html.heex:42
#: lib/cannery_web/templates/user_reset_password/edit.html.heex:44
#: lib/cannery_web/templates/user_reset_password/new.html.heex:28
#: lib/cannery_web/templates/user_session/new.html.heex:39
#: lib/cannery_web/templates/user_session/new.html.heex:41
#, elixir-autogen, elixir-format
msgid "Register"
msgstr "Registrieren"
@ -128,7 +128,7 @@ msgid "Resend confirmation instructions"
msgstr "Bestätigungsmail erneut senden"
#: lib/cannery_web/templates/user_reset_password/edit.html.heex:3
#: lib/cannery_web/templates/user_reset_password/edit.html.heex:29
#: lib/cannery_web/templates/user_reset_password/edit.html.heex:31
#, elixir-autogen, elixir-format
msgid "Reset password"
msgstr "Passwort zurücksetzen"
@ -206,12 +206,12 @@ msgstr "Zuerst einen Behälter hinzufügen"
msgid "Create"
msgstr "Erstellen"
#: lib/cannery_web/templates/user_settings/edit.html.heex:111
#: lib/cannery_web/templates/user_settings/edit.html.heex:115
#, elixir-autogen, elixir-format
msgid "Change Language"
msgstr "Sprache wechseln"
#: lib/cannery_web/templates/user_settings/edit.html.heex:136
#: lib/cannery_web/templates/user_settings/edit.html.heex:142
#, elixir-autogen, elixir-format
msgid "Change language"
msgstr "Sprache wechseln"
@ -248,7 +248,7 @@ msgstr ""
msgid "Unstage from range"
msgstr ""
#: lib/cannery_web/templates/user_settings/edit.html.heex:150
#: lib/cannery_web/templates/user_settings/edit.html.heex:156
#, elixir-autogen, elixir-format
msgid "Export Data as JSON"
msgstr ""

View File

@ -188,14 +188,14 @@ msgstr "Einladung deaktiviert"
msgid "Invite Only"
msgstr "Nur mit Einladung"
#: lib/cannery_web/components/topbar.ex:89
#: lib/cannery_web/components/topbar.ex:90
#: lib/cannery_web/live/invite_live/index.ex:42
#: lib/cannery_web/live/invite_live/index.html.heex:3
#, elixir-autogen, elixir-format
msgid "Invites"
msgstr "Einladungen"
#: lib/cannery_web/templates/user_session/new.html.heex:23
#: lib/cannery_web/templates/user_session/new.html.heex:25
#, elixir-autogen, elixir-format
msgid "Keep me logged in for 60 days"
msgstr "Für 60 Tage eingeloggt bleiben"
@ -574,20 +574,18 @@ msgstr "Pulverart"
msgid "UPC"
msgstr "UPC"
#: lib/cannery_web/templates/user_reset_password/edit.html.heex:20
#: lib/cannery_web/templates/user_settings/edit.html.heex:76
#: lib/cannery_web/templates/user_settings/edit.html.heex:80
#, elixir-autogen, elixir-format
msgid "Confirm new password"
msgstr "Passwort bestätigen"
#: lib/cannery_web/templates/user_settings/edit.html.heex:31
#: lib/cannery_web/templates/user_settings/edit.html.heex:85
#: lib/cannery_web/templates/user_settings/edit.html.heex:33
#: lib/cannery_web/templates/user_settings/edit.html.heex:89
#, elixir-autogen, elixir-format
msgid "Current password"
msgstr "Derzeitiges Passwort"
#: lib/cannery_web/templates/user_reset_password/edit.html.heex:16
#: lib/cannery_web/templates/user_settings/edit.html.heex:69
#: lib/cannery_web/templates/user_settings/edit.html.heex:73
#, elixir-autogen, elixir-format
msgid "New password"
msgstr "Neues Passwort"
@ -711,17 +709,17 @@ msgid "Added on:"
msgstr "Hinzugefügt am:"
#: lib/cannery_web/templates/user_registration/new.html.heex:32
#: lib/cannery_web/templates/user_settings/edit.html.heex:127
#: lib/cannery_web/templates/user_settings/edit.html.heex:133
#, elixir-autogen, elixir-format
msgid "English"
msgstr "Englisch"
#: lib/cannery_web/templates/user_settings/edit.html.heex:129
#: lib/cannery_web/templates/user_settings/edit.html.heex:135
#, elixir-autogen, elixir-format
msgid "French"
msgstr "Französisch"
#: lib/cannery_web/templates/user_settings/edit.html.heex:128
#: lib/cannery_web/templates/user_settings/edit.html.heex:134
#, elixir-autogen, elixir-format
msgid "German"
msgstr "Deutsch"
@ -1111,7 +1109,7 @@ msgstr ""
msgid "Search shot records"
msgstr ""
#: lib/cannery_web/templates/user_settings/edit.html.heex:130
#: lib/cannery_web/templates/user_settings/edit.html.heex:136
#, elixir-autogen, elixir-format
msgid "Spanish"
msgstr ""
@ -1199,18 +1197,3 @@ msgstr "Verbleibende Nutzung:"
#, elixir-autogen, elixir-format
msgid "Uses: %{uses_count}"
msgstr ""
#: lib/cannery_web/templates/user_confirmation/new.html.heex:12
#: lib/cannery_web/templates/user_registration/new.html.heex:20
#: lib/cannery_web/templates/user_reset_password/new.html.heex:12
#: lib/cannery_web/templates/user_session/new.html.heex:17
#: lib/cannery_web/templates/user_settings/edit.html.heex:27
#, elixir-autogen, elixir-format
msgid "Email"
msgstr ""
#: lib/cannery_web/templates/user_registration/new.html.heex:24
#: lib/cannery_web/templates/user_session/new.html.heex:20
#, elixir-autogen, elixir-format
msgid "Password"
msgstr ""

View File

@ -14,11 +14,25 @@ msgstr ""
"Plural-Forms: nplurals=2; plural=n != 1;\n"
"X-Generator: Weblate 4.11.2\n"
#: lib/cannery_web/templates/email/confirm_email.html.heex:3
## This file is a PO Template file.
##
## "msgid"s here are often extracted from source code.
## Add new translations manually only if they're dynamic
## translations that can't be statically extracted.
##
## Run "mix gettext.extract" to bring this file up to
## date. Leave "msgstr"s empty as changing them here has no
## effect: edit them in PO (.po) files instead.
#: lib/cannery/accounts/email.ex:30
#, elixir-autogen, elixir-format
msgid "Confirm your %{name} account"
msgstr "Bestätigen Sie ihr %{name} Nutzerkonto"
#: 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.heex: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/update_email.html.heex:3
#: lib/cannery_web/templates/email/update_email.html.eex:3
#: lib/cannery_web/templates/email/update_email.txt.eex:2
#, elixir-autogen, elixir-format
msgid "Hi %{email},"
@ -39,79 +53,69 @@ msgstr ""
"Falls Sie diese Änderung von %{url} nicht angefordert haben, ignorieren Sie "
"bitte diese Nachricht."
#: lib/cannery_web/templates/email/update_email.html.heex:8
#: lib/cannery/accounts/email.ex:37
#, elixir-autogen, elixir-format
msgid "Reset your %{name} password"
msgstr "Passwort für %{name} zurücksetzen"
#: lib/cannery/accounts/email.ex:44
#, elixir-autogen, elixir-format
msgid "Update your %{name} email"
msgstr "Aktualisieren Sie %{name} Mailadresse"
#: lib/cannery_web/templates/email/confirm_email.html.eex:9
#, elixir-autogen, elixir-format
msgid "Welcome to %{name}!"
msgstr "Willkommen %{name}!"
#: lib/cannery_web/templates/email/confirm_email.txt.eex:4
#, elixir-autogen, elixir-format
msgid "Welcome to %{name}%!"
msgstr "Willkommen %{name}%!"
#: lib/cannery_web/templates/email/update_email.html.eex:8
#: 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:"
msgstr "Sie können Ihre Mailadresse unter folgender URL ändern:"
#: lib/cannery_web/templates/email/confirm_email.html.heex:14
#: lib/cannery_web/templates/email/confirm_email.html.eex:14
#: 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:"
msgstr "Sie können Ihr Nutzerkonto unter folgender URL bestätigen:"
#: lib/cannery_web/templates/email/reset_password.html.heex:8
#: lib/cannery_web/templates/email/reset_password.html.eex:8
#: 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:"
msgstr "Sie können ihr Passwort unter folgender URL zurücksetzen:"
## This file is a PO Template file.
##
## "msgid"s here are often extracted from source code.
## Add new translations manually only if they're dynamic
## translations that can't be statically extracted.
##
## Run "mix gettext.extract" to bring this file up to
## date. Leave "msgstr"s empty as changing them here has no
## effect: edit them in PO (.po) files instead.
#: lib/cannery/accounts/email.ex:30
#, elixir-autogen, elixir-format, fuzzy
msgid "Confirm your Cannery account"
msgstr "Bestätigen Sie ihr %{name} Nutzerkonto"
#: lib/cannery_web/templates/email/confirm_email.html.heex:22
#, elixir-autogen, elixir-format, fuzzy
msgid "If you didn't create an account at Cannery, please ignore this."
#: lib/cannery_web/templates/email/confirm_email.html.eex:22
#, elixir-autogen, elixir-format
msgid "If you didn't create an account at %{name}, please ignore this."
msgstr ""
"Falls SIe dieses Nutzerkonto unter %{name}, nicht erstellt haben, ignorieren "
"Sie diese Nachricht bitte."
#: lib/cannery_web/templates/email/reset_password.html.heex:16
#: lib/cannery_web/templates/email/update_email.html.heex:16
#, elixir-autogen, elixir-format, fuzzy
msgid "If you didn't request this change from Cannery, please ignore this."
#: lib/cannery_web/templates/email/reset_password.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."
msgstr ""
"Falls Sie die Änderung von %{name} nicht angefragt haben, ignorieren Sie "
"diese Nachricht bitte."
#: lib/cannery/accounts/email.ex:37
#, elixir-autogen, elixir-format, fuzzy
msgid "Reset your Cannery password"
msgstr "Passwort für %{name} zurücksetzen"
#: lib/cannery_web/templates/layout/email.txt.eex:9
#, elixir-autogen, elixir-format, fuzzy
msgid "This email was sent from Cannery at %{url}, the self-hosted firearm tracker website."
#, elixir-autogen, elixir-format
msgid "This email was sent from %{name} at %{url}, the self-hosted firearm tracker website."
msgstr ""
"Diese Nachricht wurde von %{name} unter %{url} gesandt, einem selbst-"
"gehosteten Schusswaffenmanager."
#: lib/cannery_web/templates/layout/email.html.heex:13
#, elixir-autogen, elixir-format, fuzzy
msgid "This email was sent from Cannery, the self-hosted firearm tracker website."
#, elixir-autogen, elixir-format
msgid "This email was sent from %{name}, the self-hosted firearm tracker website."
msgstr ""
"Diese Nachricht wurde von %{name} gesandt, einem selbst-gehosteten "
"Schusswaffenmanager."
#: lib/cannery/accounts/email.ex:44
#, elixir-autogen, elixir-format, fuzzy
msgid "Update your Cannery email"
msgstr "Aktualisieren Sie %{name} Mailadresse"
#: lib/cannery_web/templates/email/confirm_email.html.heex:9
#: lib/cannery_web/templates/email/confirm_email.txt.eex:4
#, elixir-autogen, elixir-format, fuzzy
msgid "Welcome to Cannery"
msgstr "Willkommen %{name}!"

View File

@ -70,10 +70,10 @@ msgid "Not found"
msgstr "Nicht gefunden"
#: lib/cannery_web/templates/user_registration/new.html.heex:13
#: lib/cannery_web/templates/user_reset_password/edit.html.heex:13
#: lib/cannery_web/templates/user_settings/edit.html.heex:22
#: lib/cannery_web/templates/user_settings/edit.html.heex:64
#: lib/cannery_web/templates/user_settings/edit.html.heex:118
#: lib/cannery_web/templates/user_reset_password/edit.html.heex:14
#: lib/cannery_web/templates/user_settings/edit.html.heex:23
#: lib/cannery_web/templates/user_settings/edit.html.heex:67
#: lib/cannery_web/templates/user_settings/edit.html.heex:123
#, elixir-autogen, elixir-format
msgid "Oops, something went wrong! Please check the errors below."
msgstr "Oops, etwas ist schiefgegangen. Bitte beachten Sie den Fehler unten."

View File

@ -79,12 +79,12 @@ msgstr "Sind Sie sicher, dass sie %{name} löschen möchten?"
msgid "Are you sure you want to delete this ammo?"
msgstr "Sind Sie sicher, dass sie diese Munition löschen möchten?"
#: lib/cannery_web/templates/user_settings/edit.html.heex:157
#: lib/cannery_web/templates/user_settings/edit.html.heex:163
#, elixir-autogen, elixir-format
msgid "Are you sure you want to delete your account?"
msgstr "Sind Sie sicher, dass sie Ihren Account löschen möchten?"
#: lib/cannery_web/components/topbar.ex:104
#: lib/cannery_web/components/topbar.ex:106
#, elixir-autogen, elixir-format
msgid "Are you sure you want to log out?"
msgstr "Wirklich ausloggen?"
@ -224,7 +224,7 @@ msgstr "Sie müssen"
msgid "Creating..."
msgstr "Erstellen..."
#: lib/cannery_web/templates/user_settings/edit.html.heex:138
#: lib/cannery_web/templates/user_settings/edit.html.heex:144
#, elixir-autogen, elixir-format
msgid "Are you sure you want to change your language?"
msgstr "Möchten Sie die Sprache wechseln?"

View File

@ -184,14 +184,14 @@ msgstr ""
msgid "Invite Only"
msgstr ""
#: lib/cannery_web/components/topbar.ex:89
#: lib/cannery_web/components/topbar.ex:90
#: lib/cannery_web/live/invite_live/index.ex:42
#: lib/cannery_web/live/invite_live/index.html.heex:3
#, elixir-autogen, elixir-format
msgid "Invites"
msgstr ""
#: lib/cannery_web/templates/user_session/new.html.heex:23
#: lib/cannery_web/templates/user_session/new.html.heex:25
#, elixir-autogen, elixir-format
msgid "Keep me logged in for 60 days"
msgstr ""
@ -568,20 +568,18 @@ msgstr ""
msgid "UPC"
msgstr ""
#: lib/cannery_web/templates/user_reset_password/edit.html.heex:20
#: lib/cannery_web/templates/user_settings/edit.html.heex:76
#: lib/cannery_web/templates/user_settings/edit.html.heex:80
#, elixir-autogen, elixir-format
msgid "Confirm new password"
msgstr ""
#: lib/cannery_web/templates/user_settings/edit.html.heex:31
#: lib/cannery_web/templates/user_settings/edit.html.heex:85
#: lib/cannery_web/templates/user_settings/edit.html.heex:33
#: lib/cannery_web/templates/user_settings/edit.html.heex:89
#, elixir-autogen, elixir-format
msgid "Current password"
msgstr ""
#: lib/cannery_web/templates/user_reset_password/edit.html.heex:16
#: lib/cannery_web/templates/user_settings/edit.html.heex:69
#: lib/cannery_web/templates/user_settings/edit.html.heex:73
#, elixir-autogen, elixir-format
msgid "New password"
msgstr ""
@ -705,17 +703,17 @@ msgid "Added on:"
msgstr ""
#: lib/cannery_web/templates/user_registration/new.html.heex:32
#: lib/cannery_web/templates/user_settings/edit.html.heex:127
#: lib/cannery_web/templates/user_settings/edit.html.heex:133
#, elixir-autogen, elixir-format
msgid "English"
msgstr ""
#: lib/cannery_web/templates/user_settings/edit.html.heex:129
#: lib/cannery_web/templates/user_settings/edit.html.heex:135
#, elixir-autogen, elixir-format
msgid "French"
msgstr ""
#: lib/cannery_web/templates/user_settings/edit.html.heex:128
#: lib/cannery_web/templates/user_settings/edit.html.heex:134
#, elixir-autogen, elixir-format
msgid "German"
msgstr ""
@ -1105,7 +1103,7 @@ msgstr ""
msgid "Search shot records"
msgstr ""
#: lib/cannery_web/templates/user_settings/edit.html.heex:130
#: lib/cannery_web/templates/user_settings/edit.html.heex:136
#, elixir-autogen, elixir-format
msgid "Spanish"
msgstr ""
@ -1182,18 +1180,3 @@ msgstr ""
#, elixir-autogen, elixir-format
msgid "Uses: %{uses_count}"
msgstr ""
#: lib/cannery_web/templates/user_confirmation/new.html.heex:12
#: lib/cannery_web/templates/user_registration/new.html.heex:20
#: lib/cannery_web/templates/user_reset_password/new.html.heex:12
#: lib/cannery_web/templates/user_session/new.html.heex:17
#: lib/cannery_web/templates/user_settings/edit.html.heex:27
#, elixir-autogen, elixir-format
msgid "Email"
msgstr ""
#: lib/cannery_web/templates/user_registration/new.html.heex:24
#: lib/cannery_web/templates/user_session/new.html.heex:20
#, elixir-autogen, elixir-format
msgid "Password"
msgstr ""

View File

@ -10,11 +10,16 @@
msgid ""
msgstr ""
#: lib/cannery_web/templates/email/confirm_email.html.heex:3
#: lib/cannery/accounts/email.ex:30
#, elixir-autogen, elixir-format
msgid "Confirm your %{name} account"
msgstr ""
#: 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.heex: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/update_email.html.heex:3
#: lib/cannery_web/templates/email/update_email.html.eex:3
#: lib/cannery_web/templates/email/update_email.txt.eex:2
#, elixir-autogen, elixir-format
msgid "Hi %{email},"
@ -31,62 +36,61 @@ msgstr ""
msgid "If you didn't request this change from %{url}, please ignore this."
msgstr ""
#: lib/cannery_web/templates/email/update_email.html.heex:8
#: lib/cannery/accounts/email.ex:37
#, elixir-autogen, elixir-format
msgid "Reset your %{name} password"
msgstr ""
#: lib/cannery/accounts/email.ex:44
#, elixir-autogen, elixir-format
msgid "Update your %{name} email"
msgstr ""
#: lib/cannery_web/templates/email/confirm_email.html.eex:9
#, elixir-autogen, elixir-format
msgid "Welcome to %{name}!"
msgstr ""
#: lib/cannery_web/templates/email/confirm_email.txt.eex:4
#, elixir-autogen, elixir-format
msgid "Welcome to %{name}%!"
msgstr ""
#: lib/cannery_web/templates/email/update_email.html.eex:8
#: 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:"
msgstr ""
#: lib/cannery_web/templates/email/confirm_email.html.heex:14
#: lib/cannery_web/templates/email/confirm_email.html.eex:14
#: 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:"
msgstr ""
#: lib/cannery_web/templates/email/reset_password.html.heex:8
#: lib/cannery_web/templates/email/reset_password.html.eex:8
#: 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:"
msgstr ""
#: lib/cannery/accounts/email.ex:30
#: lib/cannery_web/templates/email/confirm_email.html.eex:22
#, elixir-autogen, elixir-format
msgid "Confirm your Cannery account"
msgid "If you didn't create an account at %{name}, please ignore this."
msgstr ""
#: lib/cannery_web/templates/email/confirm_email.html.heex:22
#: lib/cannery_web/templates/email/reset_password.html.eex:16
#: lib/cannery_web/templates/email/update_email.html.eex:16
#, elixir-autogen, elixir-format
msgid "If you didn't create an account at Cannery, please ignore this."
msgstr ""
#: lib/cannery_web/templates/email/reset_password.html.heex:16
#: lib/cannery_web/templates/email/update_email.html.heex:16
#, elixir-autogen, elixir-format
msgid "If you didn't request this change from Cannery, please ignore this."
msgstr ""
#: lib/cannery/accounts/email.ex:37
#, elixir-autogen, elixir-format
msgid "Reset your Cannery password"
msgid "If you didn't request this change from %{name}, please ignore this."
msgstr ""
#: lib/cannery_web/templates/layout/email.txt.eex:9
#, elixir-autogen, elixir-format
msgid "This email was sent from Cannery at %{url}, the self-hosted firearm tracker website."
msgid "This email was sent from %{name} at %{url}, the self-hosted firearm tracker website."
msgstr ""
#: lib/cannery_web/templates/layout/email.html.heex:13
#, elixir-autogen, elixir-format
msgid "This email was sent from Cannery, the self-hosted firearm tracker website."
msgstr ""
#: lib/cannery/accounts/email.ex:44
#, elixir-autogen, elixir-format
msgid "Update your Cannery email"
msgstr ""
#: lib/cannery_web/templates/email/confirm_email.html.heex:9
#: lib/cannery_web/templates/email/confirm_email.txt.eex:4
#, elixir-autogen, elixir-format
msgid "Welcome to Cannery"
msgid "This email was sent from %{name}, the self-hosted firearm tracker website."
msgstr ""

View File

@ -33,13 +33,13 @@ msgid "Add your first type!"
msgstr ""
#: lib/cannery_web/templates/user_settings/edit.html.heex:15
#: lib/cannery_web/templates/user_settings/edit.html.heex:43
#: lib/cannery_web/templates/user_settings/edit.html.heex:45
#, elixir-autogen, elixir-format
msgid "Change email"
msgstr ""
#: lib/cannery_web/templates/user_settings/edit.html.heex:57
#: lib/cannery_web/templates/user_settings/edit.html.heex:97
#: lib/cannery_web/templates/user_settings/edit.html.heex:59
#: lib/cannery_web/templates/user_settings/edit.html.heex:101
#, elixir-autogen, elixir-format
msgid "Change password"
msgstr ""
@ -49,14 +49,14 @@ msgstr ""
msgid "Create Invite"
msgstr ""
#: lib/cannery_web/templates/user_settings/edit.html.heex:159
#: lib/cannery_web/templates/user_settings/edit.html.heex:165
#, elixir-autogen, elixir-format
msgid "Delete User"
msgstr ""
#: lib/cannery_web/templates/user_registration/new.html.heex:47
#: lib/cannery_web/templates/user_reset_password/new.html.heex:3
#: lib/cannery_web/templates/user_session/new.html.heex:42
#: lib/cannery_web/templates/user_session/new.html.heex:44
#, elixir-autogen, elixir-format
msgid "Forgot your password?"
msgstr ""
@ -66,13 +66,13 @@ msgstr ""
msgid "Invite someone new!"
msgstr ""
#: lib/cannery_web/components/topbar.ex:137
#: lib/cannery_web/components/topbar.ex:135
#: lib/cannery_web/templates/user_confirmation/new.html.heex:31
#: lib/cannery_web/templates/user_registration/new.html.heex:44
#: lib/cannery_web/templates/user_reset_password/edit.html.heex:45
#: lib/cannery_web/templates/user_reset_password/edit.html.heex:47
#: lib/cannery_web/templates/user_reset_password/new.html.heex:31
#: lib/cannery_web/templates/user_session/new.html.heex:3
#: lib/cannery_web/templates/user_session/new.html.heex:28
#: lib/cannery_web/templates/user_session/new.html.heex:30
#, elixir-autogen, elixir-format
msgid "Log in"
msgstr ""
@ -97,13 +97,13 @@ msgstr ""
msgid "New Tag"
msgstr ""
#: lib/cannery_web/components/topbar.ex:129
#: lib/cannery_web/components/topbar.ex:127
#: lib/cannery_web/templates/user_confirmation/new.html.heex:28
#: lib/cannery_web/templates/user_registration/new.html.heex:3
#: lib/cannery_web/templates/user_registration/new.html.heex:37
#: lib/cannery_web/templates/user_reset_password/edit.html.heex:42
#: lib/cannery_web/templates/user_reset_password/edit.html.heex:44
#: lib/cannery_web/templates/user_reset_password/new.html.heex:28
#: lib/cannery_web/templates/user_session/new.html.heex:39
#: lib/cannery_web/templates/user_session/new.html.heex:41
#, elixir-autogen, elixir-format
msgid "Register"
msgstr ""
@ -115,7 +115,7 @@ msgid "Resend confirmation instructions"
msgstr ""
#: lib/cannery_web/templates/user_reset_password/edit.html.heex:3
#: lib/cannery_web/templates/user_reset_password/edit.html.heex:29
#: lib/cannery_web/templates/user_reset_password/edit.html.heex:31
#, elixir-autogen, elixir-format
msgid "Reset password"
msgstr ""
@ -193,12 +193,12 @@ msgstr ""
msgid "Create"
msgstr ""
#: lib/cannery_web/templates/user_settings/edit.html.heex:111
#: lib/cannery_web/templates/user_settings/edit.html.heex:115
#, elixir-autogen, elixir-format
msgid "Change Language"
msgstr ""
#: lib/cannery_web/templates/user_settings/edit.html.heex:136
#: lib/cannery_web/templates/user_settings/edit.html.heex:142
#, elixir-autogen, elixir-format
msgid "Change language"
msgstr ""
@ -235,7 +235,7 @@ msgstr ""
msgid "Unstage from range"
msgstr ""
#: lib/cannery_web/templates/user_settings/edit.html.heex:150
#: lib/cannery_web/templates/user_settings/edit.html.heex:156
#, elixir-autogen, elixir-format
msgid "Export Data as JSON"
msgstr ""

View File

@ -184,14 +184,14 @@ msgstr ""
msgid "Invite Only"
msgstr ""
#: lib/cannery_web/components/topbar.ex:89
#: lib/cannery_web/components/topbar.ex:90
#: lib/cannery_web/live/invite_live/index.ex:42
#: lib/cannery_web/live/invite_live/index.html.heex:3
#, elixir-autogen, elixir-format
msgid "Invites"
msgstr ""
#: lib/cannery_web/templates/user_session/new.html.heex:23
#: lib/cannery_web/templates/user_session/new.html.heex:25
#, elixir-autogen, elixir-format
msgid "Keep me logged in for 60 days"
msgstr ""
@ -568,20 +568,18 @@ msgstr ""
msgid "UPC"
msgstr ""
#: lib/cannery_web/templates/user_reset_password/edit.html.heex:20
#: lib/cannery_web/templates/user_settings/edit.html.heex:76
#: lib/cannery_web/templates/user_settings/edit.html.heex:80
#, elixir-autogen, elixir-format
msgid "Confirm new password"
msgstr ""
#: lib/cannery_web/templates/user_settings/edit.html.heex:31
#: lib/cannery_web/templates/user_settings/edit.html.heex:85
#: lib/cannery_web/templates/user_settings/edit.html.heex:33
#: lib/cannery_web/templates/user_settings/edit.html.heex:89
#, elixir-autogen, elixir-format
msgid "Current password"
msgstr ""
#: lib/cannery_web/templates/user_reset_password/edit.html.heex:16
#: lib/cannery_web/templates/user_settings/edit.html.heex:69
#: lib/cannery_web/templates/user_settings/edit.html.heex:73
#, elixir-autogen, elixir-format
msgid "New password"
msgstr ""
@ -705,17 +703,17 @@ msgid "Added on:"
msgstr ""
#: lib/cannery_web/templates/user_registration/new.html.heex:32
#: lib/cannery_web/templates/user_settings/edit.html.heex:127
#: lib/cannery_web/templates/user_settings/edit.html.heex:133
#, elixir-autogen, elixir-format
msgid "English"
msgstr ""
#: lib/cannery_web/templates/user_settings/edit.html.heex:129
#: lib/cannery_web/templates/user_settings/edit.html.heex:135
#, elixir-autogen, elixir-format
msgid "French"
msgstr ""
#: lib/cannery_web/templates/user_settings/edit.html.heex:128
#: lib/cannery_web/templates/user_settings/edit.html.heex:134
#, elixir-autogen, elixir-format
msgid "German"
msgstr ""
@ -1105,7 +1103,7 @@ msgstr ""
msgid "Search shot records"
msgstr ""
#: lib/cannery_web/templates/user_settings/edit.html.heex:130
#: lib/cannery_web/templates/user_settings/edit.html.heex:136
#, elixir-autogen, elixir-format
msgid "Spanish"
msgstr ""
@ -1182,18 +1180,3 @@ msgstr ""
#, elixir-autogen, elixir-format
msgid "Uses: %{uses_count}"
msgstr ""
#: lib/cannery_web/templates/user_confirmation/new.html.heex:12
#: lib/cannery_web/templates/user_registration/new.html.heex:20
#: lib/cannery_web/templates/user_reset_password/new.html.heex:12
#: lib/cannery_web/templates/user_session/new.html.heex:17
#: lib/cannery_web/templates/user_settings/edit.html.heex:27
#, elixir-autogen, elixir-format
msgid "Email"
msgstr ""
#: lib/cannery_web/templates/user_registration/new.html.heex:24
#: lib/cannery_web/templates/user_session/new.html.heex:20
#, elixir-autogen, elixir-format
msgid "Password"
msgstr ""

View File

@ -10,11 +10,16 @@ msgid ""
msgstr ""
"Language: en\n"
#: lib/cannery_web/templates/email/confirm_email.html.heex:3
#: lib/cannery/accounts/email.ex:30
#, elixir-autogen, elixir-format
msgid "Confirm your %{name} account"
msgstr ""
#: 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.heex: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/update_email.html.heex:3
#: lib/cannery_web/templates/email/update_email.html.eex:3
#: lib/cannery_web/templates/email/update_email.txt.eex:2
#, elixir-autogen, elixir-format
msgid "Hi %{email},"
@ -31,62 +36,61 @@ msgstr ""
msgid "If you didn't request this change from %{url}, please ignore this."
msgstr ""
#: lib/cannery_web/templates/email/update_email.html.heex:8
#: lib/cannery/accounts/email.ex:37
#, elixir-autogen, elixir-format
msgid "Reset your %{name} password"
msgstr ""
#: lib/cannery/accounts/email.ex:44
#, elixir-autogen, elixir-format
msgid "Update your %{name} email"
msgstr ""
#: lib/cannery_web/templates/email/confirm_email.html.eex:9
#, elixir-autogen, elixir-format
msgid "Welcome to %{name}!"
msgstr ""
#: lib/cannery_web/templates/email/confirm_email.txt.eex:4
#, elixir-autogen, elixir-format
msgid "Welcome to %{name}%!"
msgstr ""
#: lib/cannery_web/templates/email/update_email.html.eex:8
#: 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:"
msgstr ""
#: lib/cannery_web/templates/email/confirm_email.html.heex:14
#: lib/cannery_web/templates/email/confirm_email.html.eex:14
#: 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:"
msgstr ""
#: lib/cannery_web/templates/email/reset_password.html.heex:8
#: lib/cannery_web/templates/email/reset_password.html.eex:8
#: 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:"
msgstr ""
#: lib/cannery/accounts/email.ex:30
#, elixir-autogen, elixir-format, fuzzy
msgid "Confirm your Cannery account"
#: lib/cannery_web/templates/email/confirm_email.html.eex:22
#, elixir-autogen, elixir-format
msgid "If you didn't create an account at %{name}, please ignore this."
msgstr ""
#: lib/cannery_web/templates/email/confirm_email.html.heex:22
#, elixir-autogen, elixir-format, fuzzy
msgid "If you didn't create an account at Cannery, please ignore this."
msgstr ""
#: lib/cannery_web/templates/email/reset_password.html.heex:16
#: lib/cannery_web/templates/email/update_email.html.heex:16
#, elixir-autogen, elixir-format, fuzzy
msgid "If you didn't request this change from Cannery, please ignore this."
msgstr ""
#: lib/cannery/accounts/email.ex:37
#, elixir-autogen, elixir-format, fuzzy
msgid "Reset your Cannery password"
#: lib/cannery_web/templates/email/reset_password.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."
msgstr ""
#: lib/cannery_web/templates/layout/email.txt.eex:9
#, elixir-autogen, elixir-format, fuzzy
msgid "This email was sent from Cannery at %{url}, the self-hosted firearm tracker website."
#, elixir-autogen, elixir-format
msgid "This email was sent from %{name} at %{url}, the self-hosted firearm tracker website."
msgstr ""
#: lib/cannery_web/templates/layout/email.html.heex:13
#, elixir-autogen, elixir-format, fuzzy
msgid "This email was sent from Cannery, the self-hosted firearm tracker website."
msgstr ""
#: lib/cannery/accounts/email.ex:44
#, elixir-autogen, elixir-format, fuzzy
msgid "Update your Cannery email"
msgstr ""
#: lib/cannery_web/templates/email/confirm_email.html.heex:9
#: lib/cannery_web/templates/email/confirm_email.txt.eex:4
#, elixir-autogen, elixir-format, fuzzy
msgid "Welcome to Cannery"
#, elixir-autogen, elixir-format
msgid "This email was sent from %{name}, the self-hosted firearm tracker website."
msgstr ""

View File

@ -57,10 +57,10 @@ msgid "Not found"
msgstr ""
#: lib/cannery_web/templates/user_registration/new.html.heex:13
#: lib/cannery_web/templates/user_reset_password/edit.html.heex:13
#: lib/cannery_web/templates/user_settings/edit.html.heex:22
#: lib/cannery_web/templates/user_settings/edit.html.heex:64
#: lib/cannery_web/templates/user_settings/edit.html.heex:118
#: lib/cannery_web/templates/user_reset_password/edit.html.heex:14
#: lib/cannery_web/templates/user_settings/edit.html.heex:23
#: lib/cannery_web/templates/user_settings/edit.html.heex:67
#: lib/cannery_web/templates/user_settings/edit.html.heex:123
#, elixir-autogen, elixir-format
msgid "Oops, something went wrong! Please check the errors below."
msgstr ""

View File

@ -64,12 +64,12 @@ msgstr ""
msgid "Are you sure you want to delete this ammo?"
msgstr ""
#: lib/cannery_web/templates/user_settings/edit.html.heex:157
#: lib/cannery_web/templates/user_settings/edit.html.heex:163
#, elixir-autogen, elixir-format
msgid "Are you sure you want to delete your account?"
msgstr ""
#: lib/cannery_web/components/topbar.ex:104
#: lib/cannery_web/components/topbar.ex:106
#, elixir-autogen, elixir-format
msgid "Are you sure you want to log out?"
msgstr ""
@ -203,7 +203,7 @@ msgstr ""
msgid "Creating..."
msgstr ""
#: lib/cannery_web/templates/user_settings/edit.html.heex:138
#: lib/cannery_web/templates/user_settings/edit.html.heex:144
#, elixir-autogen, elixir-format
msgid "Are you sure you want to change your language?"
msgstr ""

View File

@ -57,10 +57,10 @@ msgid "Not found"
msgstr ""
#: lib/cannery_web/templates/user_registration/new.html.heex:13
#: lib/cannery_web/templates/user_reset_password/edit.html.heex:13
#: lib/cannery_web/templates/user_settings/edit.html.heex:22
#: lib/cannery_web/templates/user_settings/edit.html.heex:64
#: lib/cannery_web/templates/user_settings/edit.html.heex:118
#: lib/cannery_web/templates/user_reset_password/edit.html.heex:14
#: lib/cannery_web/templates/user_settings/edit.html.heex:23
#: lib/cannery_web/templates/user_settings/edit.html.heex:67
#: lib/cannery_web/templates/user_settings/edit.html.heex:123
#, elixir-autogen, elixir-format
msgid "Oops, something went wrong! Please check the errors below."
msgstr ""

View File

@ -46,13 +46,13 @@ msgid "Add your first type!"
msgstr "¡Añade tu primer tipo!"
#: lib/cannery_web/templates/user_settings/edit.html.heex:15
#: lib/cannery_web/templates/user_settings/edit.html.heex:43
#: lib/cannery_web/templates/user_settings/edit.html.heex:45
#, elixir-autogen, elixir-format
msgid "Change email"
msgstr "Cambiar correo electrónico"
#: lib/cannery_web/templates/user_settings/edit.html.heex:57
#: lib/cannery_web/templates/user_settings/edit.html.heex:97
#: lib/cannery_web/templates/user_settings/edit.html.heex:59
#: lib/cannery_web/templates/user_settings/edit.html.heex:101
#, elixir-autogen, elixir-format
msgid "Change password"
msgstr "Cambiar contraseña"
@ -62,14 +62,14 @@ msgstr "Cambiar contraseña"
msgid "Create Invite"
msgstr "Crear Invitación"
#: lib/cannery_web/templates/user_settings/edit.html.heex:159
#: lib/cannery_web/templates/user_settings/edit.html.heex:165
#, elixir-autogen, elixir-format
msgid "Delete User"
msgstr "Eliminar cuenta de Usuario"
#: lib/cannery_web/templates/user_registration/new.html.heex:47
#: lib/cannery_web/templates/user_reset_password/new.html.heex:3
#: lib/cannery_web/templates/user_session/new.html.heex:42
#: lib/cannery_web/templates/user_session/new.html.heex:44
#, elixir-autogen, elixir-format
msgid "Forgot your password?"
msgstr "¿Has olvidado tu contraseña?"
@ -79,13 +79,13 @@ msgstr "¿Has olvidado tu contraseña?"
msgid "Invite someone new!"
msgstr "¡Invita a alguien nuevo!"
#: lib/cannery_web/components/topbar.ex:137
#: lib/cannery_web/components/topbar.ex:135
#: lib/cannery_web/templates/user_confirmation/new.html.heex:31
#: lib/cannery_web/templates/user_registration/new.html.heex:44
#: lib/cannery_web/templates/user_reset_password/edit.html.heex:45
#: lib/cannery_web/templates/user_reset_password/edit.html.heex:47
#: lib/cannery_web/templates/user_reset_password/new.html.heex:31
#: lib/cannery_web/templates/user_session/new.html.heex:3
#: lib/cannery_web/templates/user_session/new.html.heex:28
#: lib/cannery_web/templates/user_session/new.html.heex:30
#, elixir-autogen, elixir-format
msgid "Log in"
msgstr "Entrar"
@ -110,13 +110,13 @@ msgstr "Nuevo Contenedor"
msgid "New Tag"
msgstr "Nueva Etiqueta"
#: lib/cannery_web/components/topbar.ex:129
#: lib/cannery_web/components/topbar.ex:127
#: lib/cannery_web/templates/user_confirmation/new.html.heex:28
#: lib/cannery_web/templates/user_registration/new.html.heex:3
#: lib/cannery_web/templates/user_registration/new.html.heex:37
#: lib/cannery_web/templates/user_reset_password/edit.html.heex:42
#: lib/cannery_web/templates/user_reset_password/edit.html.heex:44
#: lib/cannery_web/templates/user_reset_password/new.html.heex:28
#: lib/cannery_web/templates/user_session/new.html.heex:39
#: lib/cannery_web/templates/user_session/new.html.heex:41
#, elixir-autogen, elixir-format
msgid "Register"
msgstr "Registrarse"
@ -128,7 +128,7 @@ msgid "Resend confirmation instructions"
msgstr "Reenviar instrucciones de confirmación"
#: lib/cannery_web/templates/user_reset_password/edit.html.heex:3
#: lib/cannery_web/templates/user_reset_password/edit.html.heex:29
#: lib/cannery_web/templates/user_reset_password/edit.html.heex:31
#, elixir-autogen, elixir-format
msgid "Reset password"
msgstr "Resetear contraseña"
@ -206,12 +206,12 @@ msgstr "añade primero un contenedor"
msgid "Create"
msgstr "Crear"
#: lib/cannery_web/templates/user_settings/edit.html.heex:111
#: lib/cannery_web/templates/user_settings/edit.html.heex:115
#, elixir-autogen, elixir-format
msgid "Change Language"
msgstr "Cambiar Lenguaje"
#: lib/cannery_web/templates/user_settings/edit.html.heex:136
#: lib/cannery_web/templates/user_settings/edit.html.heex:142
#, elixir-autogen, elixir-format
msgid "Change language"
msgstr "Cambiar lenguaje"
@ -248,7 +248,7 @@ msgstr "Preparar para el campo de tiro"
msgid "Unstage from range"
msgstr "Desmontar del campo de tiro"
#: lib/cannery_web/templates/user_settings/edit.html.heex:150
#: lib/cannery_web/templates/user_settings/edit.html.heex:156
#, elixir-autogen, elixir-format
msgid "Export Data as JSON"
msgstr "Exportar datos como JSON"

View File

@ -188,14 +188,14 @@ msgstr "Invitación Desactivada"
msgid "Invite Only"
msgstr "Solo Invitación"
#: lib/cannery_web/components/topbar.ex:89
#: lib/cannery_web/components/topbar.ex:90
#: lib/cannery_web/live/invite_live/index.ex:42
#: lib/cannery_web/live/invite_live/index.html.heex:3
#, elixir-autogen, elixir-format
msgid "Invites"
msgstr "Invitaciones"
#: lib/cannery_web/templates/user_session/new.html.heex:23
#: lib/cannery_web/templates/user_session/new.html.heex:25
#, elixir-autogen, elixir-format
msgid "Keep me logged in for 60 days"
msgstr "Mantener registrado durante 60 días"
@ -575,20 +575,18 @@ msgstr "Tipo de polvora"
msgid "UPC"
msgstr ""
#: lib/cannery_web/templates/user_reset_password/edit.html.heex:20
#: lib/cannery_web/templates/user_settings/edit.html.heex:76
#: lib/cannery_web/templates/user_settings/edit.html.heex:80
#, elixir-autogen, elixir-format
msgid "Confirm new password"
msgstr "Confirme contraseña nueva"
#: lib/cannery_web/templates/user_settings/edit.html.heex:31
#: lib/cannery_web/templates/user_settings/edit.html.heex:85
#: lib/cannery_web/templates/user_settings/edit.html.heex:33
#: lib/cannery_web/templates/user_settings/edit.html.heex:89
#, elixir-autogen, elixir-format
msgid "Current password"
msgstr "Contraseña actual"
#: lib/cannery_web/templates/user_reset_password/edit.html.heex:16
#: lib/cannery_web/templates/user_settings/edit.html.heex:69
#: lib/cannery_web/templates/user_settings/edit.html.heex:73
#, elixir-autogen, elixir-format
msgid "New password"
msgstr "Nueva contraseña"
@ -712,17 +710,17 @@ msgid "Added on:"
msgstr "Añadido en:"
#: lib/cannery_web/templates/user_registration/new.html.heex:32
#: lib/cannery_web/templates/user_settings/edit.html.heex:127
#: lib/cannery_web/templates/user_settings/edit.html.heex:133
#, elixir-autogen, elixir-format
msgid "English"
msgstr "Inglés"
#: lib/cannery_web/templates/user_settings/edit.html.heex:129
#: lib/cannery_web/templates/user_settings/edit.html.heex:135
#, elixir-autogen, elixir-format
msgid "French"
msgstr "Francés"
#: lib/cannery_web/templates/user_settings/edit.html.heex:128
#: lib/cannery_web/templates/user_settings/edit.html.heex:134
#, elixir-autogen, elixir-format
msgid "German"
msgstr "Alemán"
@ -1113,7 +1111,7 @@ msgstr ""
msgid "Search shot records"
msgstr ""
#: lib/cannery_web/templates/user_settings/edit.html.heex:130
#: lib/cannery_web/templates/user_settings/edit.html.heex:136
#, elixir-autogen, elixir-format
msgid "Spanish"
msgstr ""
@ -1201,18 +1199,3 @@ msgstr "Usos Restantes:"
#, elixir-autogen, elixir-format
msgid "Uses: %{uses_count}"
msgstr ""
#: lib/cannery_web/templates/user_confirmation/new.html.heex:12
#: lib/cannery_web/templates/user_registration/new.html.heex:20
#: lib/cannery_web/templates/user_reset_password/new.html.heex:12
#: lib/cannery_web/templates/user_session/new.html.heex:17
#: lib/cannery_web/templates/user_settings/edit.html.heex:27
#, elixir-autogen, elixir-format
msgid "Email"
msgstr ""
#: lib/cannery_web/templates/user_registration/new.html.heex:24
#: lib/cannery_web/templates/user_session/new.html.heex:20
#, elixir-autogen, elixir-format
msgid "Password"
msgstr ""

View File

@ -14,11 +14,25 @@ msgstr ""
"Plural-Forms: nplurals=2; plural=n != 1;\n"
"X-Generator: Weblate 4.14.2\n"
#: lib/cannery_web/templates/email/confirm_email.html.heex:3
## This file is a PO Template file.
##
## "msgid"s here are often extracted from source code.
## Add new translations manually only if they're dynamic
## translations that can't be statically extracted.
##
## Run "mix gettext.extract" to bring this file up to
## date. Leave "msgstr"s empty as changing them here has no
## effect: edit them in PO (.po) files instead.
#: lib/cannery/accounts/email.ex:30
#, elixir-autogen, elixir-format
msgid "Confirm your %{name} account"
msgstr "Confirma el %{name} de la cuenta"
#: 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.heex: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/update_email.html.heex:3
#: lib/cannery_web/templates/email/update_email.html.eex:3
#: lib/cannery_web/templates/email/update_email.txt.eex:2
#, elixir-autogen, elixir-format
msgid "Hi %{email},"
@ -35,7 +49,27 @@ msgstr "Si no creó un usuario en %{url}, por favor, ignore este mensaje."
msgid "If you didn't request this change from %{url}, please ignore this."
msgstr "Si no pidió este cambio desde %{url}, por favor, ignore este mensaje."
#: lib/cannery_web/templates/email/update_email.html.heex:8
#: lib/cannery/accounts/email.ex:37
#, elixir-autogen, elixir-format
msgid "Reset your %{name} password"
msgstr "Reseteé su contraseña en %{name}"
#: lib/cannery/accounts/email.ex:44
#, elixir-autogen, elixir-format
msgid "Update your %{name} email"
msgstr "Actualice su correo en &{url}"
#: lib/cannery_web/templates/email/confirm_email.html.eex:9
#, elixir-autogen, elixir-format
msgid "Welcome to %{name}!"
msgstr "¡Bienvenide a %{name}!"
#: lib/cannery_web/templates/email/confirm_email.txt.eex:4
#, elixir-autogen, elixir-format
msgid "Welcome to %{name}%!"
msgstr "¡Bienvenide a %{name}%!"
#: lib/cannery_web/templates/email/update_email.html.eex:8
#: 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:"
@ -43,14 +77,14 @@ msgstr ""
"Puede cambiar su correo electrónico visitando el enlace que se muestra a "
"continuación:"
#: lib/cannery_web/templates/email/confirm_email.html.heex:14
#: lib/cannery_web/templates/email/confirm_email.html.eex:14
#: 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:"
msgstr ""
"Puede confirmar su cuenta visitando el enlace que se muestra a continuación:"
#: lib/cannery_web/templates/email/reset_password.html.heex:8
#: lib/cannery_web/templates/email/reset_password.html.eex:8
#: 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:"
@ -58,59 +92,29 @@ msgstr ""
"Puede reestablecer su contraseña visitando el enlace que se muestra a "
"continuación:"
## This file is a PO Template file.
##
## "msgid"s here are often extracted from source code.
## Add new translations manually only if they're dynamic
## translations that can't be statically extracted.
##
## Run "mix gettext.extract" to bring this file up to
## date. Leave "msgstr"s empty as changing them here has no
## effect: edit them in PO (.po) files instead.
#: lib/cannery/accounts/email.ex:30
#, elixir-autogen, elixir-format, fuzzy
msgid "Confirm your Cannery account"
msgstr "Confirma el %{name} de la cuenta"
#: lib/cannery_web/templates/email/confirm_email.html.heex:22
#, elixir-autogen, elixir-format, fuzzy
msgid "If you didn't create an account at Cannery, please ignore this."
#: lib/cannery_web/templates/email/confirm_email.html.eex:22
#, elixir-autogen, elixir-format
msgid "If you didn't create an account at %{name}, please ignore this."
msgstr "Si no ha creado una cuenta en %{name}, por favor, ignore este mensaje."
#: lib/cannery_web/templates/email/reset_password.html.heex:16
#: lib/cannery_web/templates/email/update_email.html.heex:16
#, elixir-autogen, elixir-format, fuzzy
msgid "If you didn't request this change from Cannery, please ignore this."
#: lib/cannery_web/templates/email/reset_password.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."
msgstr ""
"Si no ha solicitado este cambio desde %{name}, por favor, ignore este "
"mensaje."
#: lib/cannery/accounts/email.ex:37
#, elixir-autogen, elixir-format, fuzzy
msgid "Reset your Cannery password"
msgstr "Reseteé su contraseña en %{name}"
#: lib/cannery_web/templates/layout/email.txt.eex:9
#, elixir-autogen, elixir-format, fuzzy
msgid "This email was sent from Cannery at %{url}, the self-hosted firearm tracker website."
#, elixir-autogen, elixir-format
msgid "This email was sent from %{name} at %{url}, the self-hosted firearm tracker website."
msgstr ""
"Este correo se mandó por %{name} desde %{url}, la página de seguimiento de "
"armas autogestionada."
#: lib/cannery_web/templates/layout/email.html.heex:13
#, elixir-autogen, elixir-format, fuzzy
msgid "This email was sent from Cannery, the self-hosted firearm tracker website."
#, elixir-autogen, elixir-format
msgid "This email was sent from %{name}, the self-hosted firearm tracker website."
msgstr ""
"Este correo se mandó por %{name}, la página de seguimiento de armas "
"autogestionada."
#: lib/cannery/accounts/email.ex:44
#, elixir-autogen, elixir-format, fuzzy
msgid "Update your Cannery email"
msgstr "Actualice su correo en &{url}"
#: lib/cannery_web/templates/email/confirm_email.html.heex:9
#: lib/cannery_web/templates/email/confirm_email.txt.eex:4
#, elixir-autogen, elixir-format, fuzzy
msgid "Welcome to Cannery"
msgstr "¡Bienvenide a %{name}!"

View File

@ -70,10 +70,10 @@ msgid "Not found"
msgstr "No se encontró"
#: lib/cannery_web/templates/user_registration/new.html.heex:13
#: lib/cannery_web/templates/user_reset_password/edit.html.heex:13
#: lib/cannery_web/templates/user_settings/edit.html.heex:22
#: lib/cannery_web/templates/user_settings/edit.html.heex:64
#: lib/cannery_web/templates/user_settings/edit.html.heex:118
#: lib/cannery_web/templates/user_reset_password/edit.html.heex:14
#: lib/cannery_web/templates/user_settings/edit.html.heex:23
#: lib/cannery_web/templates/user_settings/edit.html.heex:67
#: lib/cannery_web/templates/user_settings/edit.html.heex:123
#, elixir-autogen, elixir-format
msgid "Oops, something went wrong! Please check the errors below."
msgstr ""

View File

@ -79,12 +79,12 @@ msgstr "Está seguro que desea eliminar %{name}?"
msgid "Are you sure you want to delete this ammo?"
msgstr "Está seguro que desea eliminar esta munición?"
#: lib/cannery_web/templates/user_settings/edit.html.heex:157
#: lib/cannery_web/templates/user_settings/edit.html.heex:163
#, elixir-autogen, elixir-format
msgid "Are you sure you want to delete your account?"
msgstr "Está seguro que desea eliminar su cuenta?"
#: lib/cannery_web/components/topbar.ex:104
#: lib/cannery_web/components/topbar.ex:106
#, elixir-autogen, elixir-format
msgid "Are you sure you want to log out?"
msgstr "Está seguro que desea cerrar sesión?"
@ -223,7 +223,7 @@ msgstr "Necesitará hacerlo"
msgid "Creating..."
msgstr "Creando..."
#: lib/cannery_web/templates/user_settings/edit.html.heex:138
#: lib/cannery_web/templates/user_settings/edit.html.heex:144
#, elixir-autogen, elixir-format
msgid "Are you sure you want to change your language?"
msgstr "¿Está segure de que quiere cambiar el idioma?"

View File

@ -46,13 +46,13 @@ msgid "Add your first type!"
msgstr "Ajoutez votre premier type!"
#: lib/cannery_web/templates/user_settings/edit.html.heex:15
#: lib/cannery_web/templates/user_settings/edit.html.heex:43
#: lib/cannery_web/templates/user_settings/edit.html.heex:45
#, elixir-autogen, elixir-format
msgid "Change email"
msgstr "Changer le mél"
#: lib/cannery_web/templates/user_settings/edit.html.heex:57
#: lib/cannery_web/templates/user_settings/edit.html.heex:97
#: lib/cannery_web/templates/user_settings/edit.html.heex:59
#: lib/cannery_web/templates/user_settings/edit.html.heex:101
#, elixir-autogen, elixir-format
msgid "Change password"
msgstr "Changer le mot de passe"
@ -62,14 +62,14 @@ msgstr "Changer le mot de passe"
msgid "Create Invite"
msgstr "Créer une invitation"
#: lib/cannery_web/templates/user_settings/edit.html.heex:159
#: lib/cannery_web/templates/user_settings/edit.html.heex:165
#, elixir-autogen, elixir-format
msgid "Delete User"
msgstr "Supprimer utilisateur"
#: lib/cannery_web/templates/user_registration/new.html.heex:47
#: lib/cannery_web/templates/user_reset_password/new.html.heex:3
#: lib/cannery_web/templates/user_session/new.html.heex:42
#: lib/cannery_web/templates/user_session/new.html.heex:44
#, elixir-autogen, elixir-format
msgid "Forgot your password?"
msgstr "Mot de passe oublié?"
@ -79,13 +79,13 @@ msgstr "Mot de passe oublié?"
msgid "Invite someone new!"
msgstr "Invitez une nouvelle personne!"
#: lib/cannery_web/components/topbar.ex:137
#: lib/cannery_web/components/topbar.ex:135
#: lib/cannery_web/templates/user_confirmation/new.html.heex:31
#: lib/cannery_web/templates/user_registration/new.html.heex:44
#: lib/cannery_web/templates/user_reset_password/edit.html.heex:45
#: lib/cannery_web/templates/user_reset_password/edit.html.heex:47
#: lib/cannery_web/templates/user_reset_password/new.html.heex:31
#: lib/cannery_web/templates/user_session/new.html.heex:3
#: lib/cannery_web/templates/user_session/new.html.heex:28
#: lib/cannery_web/templates/user_session/new.html.heex:30
#, elixir-autogen, elixir-format
msgid "Log in"
msgstr "Se connecter"
@ -110,13 +110,13 @@ msgstr "Nouveau conteneur"
msgid "New Tag"
msgstr "Nouveau tag"
#: lib/cannery_web/components/topbar.ex:129
#: lib/cannery_web/components/topbar.ex:127
#: lib/cannery_web/templates/user_confirmation/new.html.heex:28
#: lib/cannery_web/templates/user_registration/new.html.heex:3
#: lib/cannery_web/templates/user_registration/new.html.heex:37
#: lib/cannery_web/templates/user_reset_password/edit.html.heex:42
#: lib/cannery_web/templates/user_reset_password/edit.html.heex:44
#: lib/cannery_web/templates/user_reset_password/new.html.heex:28
#: lib/cannery_web/templates/user_session/new.html.heex:39
#: lib/cannery_web/templates/user_session/new.html.heex:41
#, elixir-autogen, elixir-format
msgid "Register"
msgstr "Senregistrer"
@ -128,7 +128,7 @@ msgid "Resend confirmation instructions"
msgstr "Renvoyer les instructions de confirmation"
#: lib/cannery_web/templates/user_reset_password/edit.html.heex:3
#: lib/cannery_web/templates/user_reset_password/edit.html.heex:29
#: lib/cannery_web/templates/user_reset_password/edit.html.heex:31
#, elixir-autogen, elixir-format
msgid "Reset password"
msgstr "Réinitialisé le mot de passe"
@ -206,12 +206,12 @@ msgstr "ajouter un conteneur en premier"
msgid "Create"
msgstr "Créer"
#: lib/cannery_web/templates/user_settings/edit.html.heex:111
#: lib/cannery_web/templates/user_settings/edit.html.heex:115
#, elixir-autogen, elixir-format
msgid "Change Language"
msgstr "Changer la langue"
#: lib/cannery_web/templates/user_settings/edit.html.heex:136
#: lib/cannery_web/templates/user_settings/edit.html.heex:142
#, elixir-autogen, elixir-format
msgid "Change language"
msgstr "Changer la langue"
@ -248,7 +248,7 @@ msgstr ""
msgid "Unstage from range"
msgstr ""
#: lib/cannery_web/templates/user_settings/edit.html.heex:150
#: lib/cannery_web/templates/user_settings/edit.html.heex:156
#, elixir-autogen, elixir-format
msgid "Export Data as JSON"
msgstr ""

View File

@ -188,14 +188,14 @@ msgstr "Invitation désactivée"
msgid "Invite Only"
msgstr "Uniquement sur invitation"
#: lib/cannery_web/components/topbar.ex:89
#: lib/cannery_web/components/topbar.ex:90
#: lib/cannery_web/live/invite_live/index.ex:42
#: lib/cannery_web/live/invite_live/index.html.heex:3
#, elixir-autogen, elixir-format
msgid "Invites"
msgstr "Invitations"
#: lib/cannery_web/templates/user_session/new.html.heex:23
#: lib/cannery_web/templates/user_session/new.html.heex:25
#, elixir-autogen, elixir-format
msgid "Keep me logged in for 60 days"
msgstr "Me garder authentifié durant 60 jours"
@ -576,20 +576,18 @@ msgstr "Type de poudre"
msgid "UPC"
msgstr "UPC"
#: lib/cannery_web/templates/user_reset_password/edit.html.heex:20
#: lib/cannery_web/templates/user_settings/edit.html.heex:76
#: lib/cannery_web/templates/user_settings/edit.html.heex:80
#, elixir-autogen, elixir-format
msgid "Confirm new password"
msgstr "Confirmez le nouveau mot de passe"
#: lib/cannery_web/templates/user_settings/edit.html.heex:31
#: lib/cannery_web/templates/user_settings/edit.html.heex:85
#: lib/cannery_web/templates/user_settings/edit.html.heex:33
#: lib/cannery_web/templates/user_settings/edit.html.heex:89
#, elixir-autogen, elixir-format
msgid "Current password"
msgstr "Mot de passe actuel"
#: lib/cannery_web/templates/user_reset_password/edit.html.heex:16
#: lib/cannery_web/templates/user_settings/edit.html.heex:69
#: lib/cannery_web/templates/user_settings/edit.html.heex:73
#, elixir-autogen, elixir-format
msgid "New password"
msgstr "Nouveau mot de passe"
@ -713,17 +711,17 @@ msgid "Added on:"
msgstr "Ajouté le:"
#: lib/cannery_web/templates/user_registration/new.html.heex:32
#: lib/cannery_web/templates/user_settings/edit.html.heex:127
#: lib/cannery_web/templates/user_settings/edit.html.heex:133
#, elixir-autogen, elixir-format
msgid "English"
msgstr "Anglais"
#: lib/cannery_web/templates/user_settings/edit.html.heex:129
#: lib/cannery_web/templates/user_settings/edit.html.heex:135
#, elixir-autogen, elixir-format
msgid "French"
msgstr "Français"
#: lib/cannery_web/templates/user_settings/edit.html.heex:128
#: lib/cannery_web/templates/user_settings/edit.html.heex:134
#, elixir-autogen, elixir-format
msgid "German"
msgstr "Allemand"
@ -1114,7 +1112,7 @@ msgstr ""
msgid "Search shot records"
msgstr ""
#: lib/cannery_web/templates/user_settings/edit.html.heex:130
#: lib/cannery_web/templates/user_settings/edit.html.heex:136
#, elixir-autogen, elixir-format
msgid "Spanish"
msgstr ""
@ -1202,18 +1200,3 @@ msgstr "Utilisations restantes:"
#, elixir-autogen, elixir-format
msgid "Uses: %{uses_count}"
msgstr ""
#: lib/cannery_web/templates/user_confirmation/new.html.heex:12
#: lib/cannery_web/templates/user_registration/new.html.heex:20
#: lib/cannery_web/templates/user_reset_password/new.html.heex:12
#: lib/cannery_web/templates/user_session/new.html.heex:17
#: lib/cannery_web/templates/user_settings/edit.html.heex:27
#, elixir-autogen, elixir-format
msgid "Email"
msgstr ""
#: lib/cannery_web/templates/user_registration/new.html.heex:24
#: lib/cannery_web/templates/user_session/new.html.heex:20
#, elixir-autogen, elixir-format
msgid "Password"
msgstr ""

View File

@ -14,11 +14,25 @@ msgstr ""
"Plural-Forms: nplurals=2; plural=n > 1;\n"
"X-Generator: Weblate 4.11.2\n"
#: lib/cannery_web/templates/email/confirm_email.html.heex:3
## This file is a PO Template file.
##
## "msgid"s here are often extracted from source code.
## Add new translations manually only if they're dynamic
## translations that can't be statically extracted.
##
## Run "mix gettext.extract" to bring this file up to
## date. Leave "msgstr"s empty as changing them here has no
## effect: edit them in PO (.po) files instead.
#: lib/cannery/accounts/email.ex:30
#, elixir-autogen, elixir-format
msgid "Confirm your %{name} account"
msgstr "Confirmer votre compte %{name}"
#: 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.heex: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/update_email.html.heex:3
#: lib/cannery_web/templates/email/update_email.html.eex:3
#: lib/cannery_web/templates/email/update_email.txt.eex:2
#, elixir-autogen, elixir-format
msgid "Hi %{email},"
@ -37,76 +51,66 @@ msgstr ""
"Si vous navez pas demandé ce changement depuis %{url}, veuillez ignorer "
"ceci."
#: lib/cannery_web/templates/email/update_email.html.heex:8
#: lib/cannery/accounts/email.ex:37
#, elixir-autogen, elixir-format
msgid "Reset your %{name} password"
msgstr "Réinitialiser votre mot de passe %{name}"
#: lib/cannery/accounts/email.ex:44
#, elixir-autogen, elixir-format
msgid "Update your %{name} email"
msgstr "Mettre à jour votre mél %{name}"
#: lib/cannery_web/templates/email/confirm_email.html.eex:9
#, elixir-autogen, elixir-format
msgid "Welcome to %{name}!"
msgstr "Bienvenue à %{name}!"
#: lib/cannery_web/templates/email/confirm_email.txt.eex:4
#, elixir-autogen, elixir-format
msgid "Welcome to %{name}%!"
msgstr "Bienvenue à %{name}%!"
#: lib/cannery_web/templates/email/update_email.html.eex:8
#: 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:"
msgstr "Vous pouvez changer votre mél en consultant lURL ci-dessous:"
#: lib/cannery_web/templates/email/confirm_email.html.heex:14
#: lib/cannery_web/templates/email/confirm_email.html.eex:14
#: 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:"
msgstr "Vous pouvez confirmer votre compte en consultant lURL ci-dessous:"
#: lib/cannery_web/templates/email/reset_password.html.heex:8
#: lib/cannery_web/templates/email/reset_password.html.eex:8
#: 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:"
msgstr ""
"Vous pouvez réinitialiser votre mot de passe en visitant lURL ci-dessous:"
## This file is a PO Template file.
##
## "msgid"s here are often extracted from source code.
## Add new translations manually only if they're dynamic
## translations that can't be statically extracted.
##
## Run "mix gettext.extract" to bring this file up to
## date. Leave "msgstr"s empty as changing them here has no
## effect: edit them in PO (.po) files instead.
#: lib/cannery/accounts/email.ex:30
#, elixir-autogen, elixir-format, fuzzy
msgid "Confirm your Cannery account"
msgstr "Confirmer votre compte %{name}"
#: lib/cannery_web/templates/email/confirm_email.html.heex:22
#, elixir-autogen, elixir-format, fuzzy
msgid "If you didn't create an account at Cannery, please ignore this."
#: lib/cannery_web/templates/email/confirm_email.html.eex:22
#, elixir-autogen, elixir-format
msgid "If you didn't create an account at %{name}, please ignore this."
msgstr "Si vous navez pas créé de compte à %{name}, veuillez ignorer ceci."
#: lib/cannery_web/templates/email/reset_password.html.heex:16
#: lib/cannery_web/templates/email/update_email.html.heex:16
#, elixir-autogen, elixir-format, fuzzy
msgid "If you didn't request this change from Cannery, please ignore this."
#: lib/cannery_web/templates/email/reset_password.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."
msgstr ""
"Si vous navez pas demandé ce changement depuis %{name}, veuillez ignorer "
"ceci."
#: lib/cannery/accounts/email.ex:37
#, elixir-autogen, elixir-format, fuzzy
msgid "Reset your Cannery password"
msgstr "Réinitialiser votre mot de passe %{name}"
#: lib/cannery_web/templates/layout/email.txt.eex:9
#, elixir-autogen, elixir-format, fuzzy
msgid "This email was sent from Cannery at %{url}, the self-hosted firearm tracker website."
#, elixir-autogen, elixir-format
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."
#: lib/cannery_web/templates/layout/email.html.heex:13
#, elixir-autogen, elixir-format, fuzzy
msgid "This email was sent from Cannery, the self-hosted firearm tracker website."
#, elixir-autogen, elixir-format
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."
#: lib/cannery/accounts/email.ex:44
#, elixir-autogen, elixir-format, fuzzy
msgid "Update your Cannery email"
msgstr "Mettre à jour votre mél %{name}"
#: lib/cannery_web/templates/email/confirm_email.html.heex:9
#: lib/cannery_web/templates/email/confirm_email.txt.eex:4
#, elixir-autogen, elixir-format, fuzzy
msgid "Welcome to Cannery"
msgstr "Bienvenue à %{name}!"

View File

@ -70,10 +70,10 @@ msgid "Not found"
msgstr "Pas trouvé"
#: lib/cannery_web/templates/user_registration/new.html.heex:13
#: lib/cannery_web/templates/user_reset_password/edit.html.heex:13
#: lib/cannery_web/templates/user_settings/edit.html.heex:22
#: lib/cannery_web/templates/user_settings/edit.html.heex:64
#: lib/cannery_web/templates/user_settings/edit.html.heex:118
#: lib/cannery_web/templates/user_reset_password/edit.html.heex:14
#: lib/cannery_web/templates/user_settings/edit.html.heex:23
#: lib/cannery_web/templates/user_settings/edit.html.heex:67
#: lib/cannery_web/templates/user_settings/edit.html.heex:123
#, elixir-autogen, elixir-format
msgid "Oops, something went wrong! Please check the errors below."
msgstr ""

View File

@ -80,12 +80,12 @@ msgstr "Êtes-vous certain·e de supprimer %{name}?"
msgid "Are you sure you want to delete this ammo?"
msgstr "Êtes-vous certain·e de supprimer cette munition?"
#: lib/cannery_web/templates/user_settings/edit.html.heex:157
#: lib/cannery_web/templates/user_settings/edit.html.heex:163
#, elixir-autogen, elixir-format
msgid "Are you sure you want to delete your account?"
msgstr "Êtes-vous certain·e de supprimer votre compte?"
#: lib/cannery_web/components/topbar.ex:104
#: lib/cannery_web/components/topbar.ex:106
#, elixir-autogen, elixir-format
msgid "Are you sure you want to log out?"
msgstr "Êtes-vous certain·e de vouloir vous déconnecter?"
@ -225,7 +225,7 @@ msgstr "Vous aurez besoin de"
msgid "Creating..."
msgstr "Création en cours…"
#: lib/cannery_web/templates/user_settings/edit.html.heex:138
#: lib/cannery_web/templates/user_settings/edit.html.heex:144
#, elixir-autogen, elixir-format
msgid "Are you sure you want to change your language?"
msgstr "Êtes-vous certain·e de vouloir changer votre langue?"

View File

@ -44,13 +44,13 @@ msgid "Add your first type!"
msgstr ""
#: lib/cannery_web/templates/user_settings/edit.html.heex:15
#: lib/cannery_web/templates/user_settings/edit.html.heex:43
#: lib/cannery_web/templates/user_settings/edit.html.heex:45
#, elixir-autogen, elixir-format
msgid "Change email"
msgstr ""
#: lib/cannery_web/templates/user_settings/edit.html.heex:57
#: lib/cannery_web/templates/user_settings/edit.html.heex:97
#: lib/cannery_web/templates/user_settings/edit.html.heex:59
#: lib/cannery_web/templates/user_settings/edit.html.heex:101
#, elixir-autogen, elixir-format
msgid "Change password"
msgstr ""
@ -60,14 +60,14 @@ msgstr ""
msgid "Create Invite"
msgstr ""
#: lib/cannery_web/templates/user_settings/edit.html.heex:159
#: lib/cannery_web/templates/user_settings/edit.html.heex:165
#, elixir-autogen, elixir-format
msgid "Delete User"
msgstr ""
#: lib/cannery_web/templates/user_registration/new.html.heex:47
#: lib/cannery_web/templates/user_reset_password/new.html.heex:3
#: lib/cannery_web/templates/user_session/new.html.heex:42
#: lib/cannery_web/templates/user_session/new.html.heex:44
#, elixir-autogen, elixir-format
msgid "Forgot your password?"
msgstr ""
@ -77,13 +77,13 @@ msgstr ""
msgid "Invite someone new!"
msgstr ""
#: lib/cannery_web/components/topbar.ex:137
#: lib/cannery_web/components/topbar.ex:135
#: lib/cannery_web/templates/user_confirmation/new.html.heex:31
#: lib/cannery_web/templates/user_registration/new.html.heex:44
#: lib/cannery_web/templates/user_reset_password/edit.html.heex:45
#: lib/cannery_web/templates/user_reset_password/edit.html.heex:47
#: lib/cannery_web/templates/user_reset_password/new.html.heex:31
#: lib/cannery_web/templates/user_session/new.html.heex:3
#: lib/cannery_web/templates/user_session/new.html.heex:28
#: lib/cannery_web/templates/user_session/new.html.heex:30
#, elixir-autogen, elixir-format
msgid "Log in"
msgstr ""
@ -108,13 +108,13 @@ msgstr ""
msgid "New Tag"
msgstr ""
#: lib/cannery_web/components/topbar.ex:129
#: lib/cannery_web/components/topbar.ex:127
#: lib/cannery_web/templates/user_confirmation/new.html.heex:28
#: lib/cannery_web/templates/user_registration/new.html.heex:3
#: lib/cannery_web/templates/user_registration/new.html.heex:37
#: lib/cannery_web/templates/user_reset_password/edit.html.heex:42
#: lib/cannery_web/templates/user_reset_password/edit.html.heex:44
#: lib/cannery_web/templates/user_reset_password/new.html.heex:28
#: lib/cannery_web/templates/user_session/new.html.heex:39
#: lib/cannery_web/templates/user_session/new.html.heex:41
#, elixir-autogen, elixir-format
msgid "Register"
msgstr ""
@ -126,7 +126,7 @@ msgid "Resend confirmation instructions"
msgstr ""
#: lib/cannery_web/templates/user_reset_password/edit.html.heex:3
#: lib/cannery_web/templates/user_reset_password/edit.html.heex:29
#: lib/cannery_web/templates/user_reset_password/edit.html.heex:31
#, elixir-autogen, elixir-format
msgid "Reset password"
msgstr ""
@ -204,12 +204,12 @@ msgstr ""
msgid "Create"
msgstr ""
#: lib/cannery_web/templates/user_settings/edit.html.heex:111
#: lib/cannery_web/templates/user_settings/edit.html.heex:115
#, elixir-autogen, elixir-format
msgid "Change Language"
msgstr ""
#: lib/cannery_web/templates/user_settings/edit.html.heex:136
#: lib/cannery_web/templates/user_settings/edit.html.heex:142
#, elixir-autogen, elixir-format
msgid "Change language"
msgstr ""
@ -246,7 +246,7 @@ msgstr ""
msgid "Unstage from range"
msgstr ""
#: lib/cannery_web/templates/user_settings/edit.html.heex:150
#: lib/cannery_web/templates/user_settings/edit.html.heex:156
#, elixir-autogen, elixir-format
msgid "Export Data as JSON"
msgstr ""

View File

@ -186,14 +186,14 @@ msgstr ""
msgid "Invite Only"
msgstr ""
#: lib/cannery_web/components/topbar.ex:89
#: lib/cannery_web/components/topbar.ex:90
#: lib/cannery_web/live/invite_live/index.ex:42
#: lib/cannery_web/live/invite_live/index.html.heex:3
#, elixir-autogen, elixir-format
msgid "Invites"
msgstr ""
#: lib/cannery_web/templates/user_session/new.html.heex:23
#: lib/cannery_web/templates/user_session/new.html.heex:25
#, elixir-autogen, elixir-format
msgid "Keep me logged in for 60 days"
msgstr ""
@ -570,20 +570,18 @@ msgstr ""
msgid "UPC"
msgstr ""
#: lib/cannery_web/templates/user_reset_password/edit.html.heex:20
#: lib/cannery_web/templates/user_settings/edit.html.heex:76
#: lib/cannery_web/templates/user_settings/edit.html.heex:80
#, elixir-autogen, elixir-format
msgid "Confirm new password"
msgstr ""
#: lib/cannery_web/templates/user_settings/edit.html.heex:31
#: lib/cannery_web/templates/user_settings/edit.html.heex:85
#: lib/cannery_web/templates/user_settings/edit.html.heex:33
#: lib/cannery_web/templates/user_settings/edit.html.heex:89
#, elixir-autogen, elixir-format
msgid "Current password"
msgstr ""
#: lib/cannery_web/templates/user_reset_password/edit.html.heex:16
#: lib/cannery_web/templates/user_settings/edit.html.heex:69
#: lib/cannery_web/templates/user_settings/edit.html.heex:73
#, elixir-autogen, elixir-format
msgid "New password"
msgstr ""
@ -707,17 +705,17 @@ msgid "Added on:"
msgstr ""
#: lib/cannery_web/templates/user_registration/new.html.heex:32
#: lib/cannery_web/templates/user_settings/edit.html.heex:127
#: lib/cannery_web/templates/user_settings/edit.html.heex:133
#, elixir-autogen, elixir-format
msgid "English"
msgstr ""
#: lib/cannery_web/templates/user_settings/edit.html.heex:129
#: lib/cannery_web/templates/user_settings/edit.html.heex:135
#, elixir-autogen, elixir-format
msgid "French"
msgstr ""
#: lib/cannery_web/templates/user_settings/edit.html.heex:128
#: lib/cannery_web/templates/user_settings/edit.html.heex:134
#, elixir-autogen, elixir-format
msgid "German"
msgstr ""
@ -1107,7 +1105,7 @@ msgstr ""
msgid "Search shot records"
msgstr ""
#: lib/cannery_web/templates/user_settings/edit.html.heex:130
#: lib/cannery_web/templates/user_settings/edit.html.heex:136
#, elixir-autogen, elixir-format
msgid "Spanish"
msgstr ""
@ -1193,18 +1191,3 @@ msgstr ""
#, elixir-autogen, elixir-format
msgid "Uses: %{uses_count}"
msgstr ""
#: lib/cannery_web/templates/user_confirmation/new.html.heex:12
#: lib/cannery_web/templates/user_registration/new.html.heex:20
#: lib/cannery_web/templates/user_reset_password/new.html.heex:12
#: lib/cannery_web/templates/user_session/new.html.heex:17
#: lib/cannery_web/templates/user_settings/edit.html.heex:27
#, elixir-autogen, elixir-format
msgid "Email"
msgstr ""
#: lib/cannery_web/templates/user_registration/new.html.heex:24
#: lib/cannery_web/templates/user_session/new.html.heex:20
#, elixir-autogen, elixir-format
msgid "Password"
msgstr ""

View File

@ -12,11 +12,25 @@ msgstr ""
"Content-Transfer-Encoding: 8bit\n"
"X-Generator: Translate Toolkit 3.7.3\n"
#: lib/cannery_web/templates/email/confirm_email.html.heex:3
## This file is a PO Template file.
##
## "msgid"s here are often extracted from source code.
## Add new translations manually only if they're dynamic
## translations that can't be statically extracted.
##
## Run "mix gettext.extract" to bring this file up to
## date. Leave "msgstr"s empty as changing them here has no
## effect: edit them in PO (.po) files instead.
#: lib/cannery/accounts/email.ex:30
#, elixir-autogen, elixir-format
msgid "Confirm your %{name} account"
msgstr ""
#: 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.heex: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/update_email.html.heex:3
#: lib/cannery_web/templates/email/update_email.html.eex:3
#: lib/cannery_web/templates/email/update_email.txt.eex:2
#, elixir-autogen, elixir-format
msgid "Hi %{email},"
@ -33,71 +47,61 @@ msgstr ""
msgid "If you didn't request this change from %{url}, please ignore this."
msgstr ""
#: lib/cannery_web/templates/email/update_email.html.heex:8
#: lib/cannery/accounts/email.ex:37
#, elixir-autogen, elixir-format
msgid "Reset your %{name} password"
msgstr ""
#: lib/cannery/accounts/email.ex:44
#, elixir-autogen, elixir-format
msgid "Update your %{name} email"
msgstr ""
#: lib/cannery_web/templates/email/confirm_email.html.eex:9
#, elixir-autogen, elixir-format
msgid "Welcome to %{name}!"
msgstr ""
#: lib/cannery_web/templates/email/confirm_email.txt.eex:4
#, elixir-autogen, elixir-format
msgid "Welcome to %{name}%!"
msgstr ""
#: lib/cannery_web/templates/email/update_email.html.eex:8
#: 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:"
msgstr ""
#: lib/cannery_web/templates/email/confirm_email.html.heex:14
#: lib/cannery_web/templates/email/confirm_email.html.eex:14
#: 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:"
msgstr ""
#: lib/cannery_web/templates/email/reset_password.html.heex:8
#: lib/cannery_web/templates/email/reset_password.html.eex:8
#: 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:"
msgstr ""
## This file is a PO Template file.
##
## "msgid"s here are often extracted from source code.
## Add new translations manually only if they're dynamic
## translations that can't be statically extracted.
##
## Run "mix gettext.extract" to bring this file up to
## date. Leave "msgstr"s empty as changing them here has no
## effect: edit them in PO (.po) files instead.
#: lib/cannery/accounts/email.ex:30
#, elixir-autogen, elixir-format, fuzzy
msgid "Confirm your Cannery account"
#: lib/cannery_web/templates/email/confirm_email.html.eex:22
#, elixir-autogen, elixir-format
msgid "If you didn't create an account at %{name}, please ignore this."
msgstr ""
#: lib/cannery_web/templates/email/confirm_email.html.heex:22
#, elixir-autogen, elixir-format, fuzzy
msgid "If you didn't create an account at Cannery, please ignore this."
msgstr ""
#: lib/cannery_web/templates/email/reset_password.html.heex:16
#: lib/cannery_web/templates/email/update_email.html.heex:16
#, elixir-autogen, elixir-format, fuzzy
msgid "If you didn't request this change from Cannery, please ignore this."
msgstr ""
#: lib/cannery/accounts/email.ex:37
#, elixir-autogen, elixir-format, fuzzy
msgid "Reset your Cannery password"
#: lib/cannery_web/templates/email/reset_password.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."
msgstr ""
#: lib/cannery_web/templates/layout/email.txt.eex:9
#, elixir-autogen, elixir-format, fuzzy
msgid "This email was sent from Cannery at %{url}, the self-hosted firearm tracker website."
#, elixir-autogen, elixir-format
msgid "This email was sent from %{name} at %{url}, the self-hosted firearm tracker website."
msgstr ""
#: lib/cannery_web/templates/layout/email.html.heex:13
#, elixir-autogen, elixir-format, fuzzy
msgid "This email was sent from Cannery, the self-hosted firearm tracker website."
msgstr ""
#: lib/cannery/accounts/email.ex:44
#, elixir-autogen, elixir-format, fuzzy
msgid "Update your Cannery email"
msgstr ""
#: lib/cannery_web/templates/email/confirm_email.html.heex:9
#: lib/cannery_web/templates/email/confirm_email.txt.eex:4
#, elixir-autogen, elixir-format, fuzzy
msgid "Welcome to Cannery"
#, elixir-autogen, elixir-format
msgid "This email was sent from %{name}, the self-hosted firearm tracker website."
msgstr ""

View File

@ -71,10 +71,10 @@ msgid "Not found"
msgstr "Ní feidir é a fáil"
#: lib/cannery_web/templates/user_registration/new.html.heex:13
#: lib/cannery_web/templates/user_reset_password/edit.html.heex:13
#: lib/cannery_web/templates/user_settings/edit.html.heex:22
#: lib/cannery_web/templates/user_settings/edit.html.heex:64
#: lib/cannery_web/templates/user_settings/edit.html.heex:118
#: lib/cannery_web/templates/user_reset_password/edit.html.heex:14
#: lib/cannery_web/templates/user_settings/edit.html.heex:23
#: lib/cannery_web/templates/user_settings/edit.html.heex:67
#: lib/cannery_web/templates/user_settings/edit.html.heex:123
#, elixir-autogen, elixir-format
msgid "Oops, something went wrong! Please check the errors below."
msgstr ""

View File

@ -75,12 +75,12 @@ msgstr ""
msgid "Are you sure you want to delete this ammo?"
msgstr ""
#: lib/cannery_web/templates/user_settings/edit.html.heex:157
#: lib/cannery_web/templates/user_settings/edit.html.heex:163
#, elixir-autogen, elixir-format
msgid "Are you sure you want to delete your account?"
msgstr ""
#: lib/cannery_web/components/topbar.ex:104
#: lib/cannery_web/components/topbar.ex:106
#, elixir-autogen, elixir-format
msgid "Are you sure you want to log out?"
msgstr ""
@ -214,7 +214,7 @@ msgstr ""
msgid "Creating..."
msgstr ""
#: lib/cannery_web/templates/user_settings/edit.html.heex:138
#: lib/cannery_web/templates/user_settings/edit.html.heex:144
#, elixir-autogen, elixir-format
msgid "Are you sure you want to change your language?"
msgstr ""

View File

@ -64,12 +64,12 @@ msgstr ""
msgid "Are you sure you want to delete this ammo?"
msgstr ""
#: lib/cannery_web/templates/user_settings/edit.html.heex:157
#: lib/cannery_web/templates/user_settings/edit.html.heex:163
#, elixir-autogen, elixir-format
msgid "Are you sure you want to delete your account?"
msgstr ""
#: lib/cannery_web/components/topbar.ex:104
#: lib/cannery_web/components/topbar.ex:106
#, elixir-autogen, elixir-format
msgid "Are you sure you want to log out?"
msgstr ""
@ -203,7 +203,7 @@ msgstr ""
msgid "Creating..."
msgstr ""
#: lib/cannery_web/templates/user_settings/edit.html.heex:138
#: lib/cannery_web/templates/user_settings/edit.html.heex:144
#, elixir-autogen, elixir-format
msgid "Are you sure you want to change your language?"
msgstr ""

View File

@ -10,6 +10,8 @@ defmodule Cannery.AccountsTest do
@moduletag :accounts_test
doctest Accounts, import: true
describe "get_user_by_email/1" do
test "does not return the user if the email does not exist" do
refute Accounts.get_user_by_email("unknown@example.com")

View File

@ -116,7 +116,7 @@ defmodule CanneryWeb.UserAuthTest do
end
test "does not authenticate if data is missing", %{conn: conn, current_user: current_user} do
_session_token = Accounts.generate_user_session_token(current_user)
_token = Accounts.generate_user_session_token(current_user)
conn = UserAuth.fetch_current_user(conn, [])
refute get_session(conn, :user_token)
refute conn.assigns.current_user