- add user management to invite page
	
		
			
	
		
	
	
		
	
		
			Some checks reported errors
		
		
	
	
		
			
				
	
				continuous-integration/drone/push Build was killed
				
			
		
		
	
	
				
					
				
			
		
			Some checks reported errors
		
		
	
	continuous-integration/drone/push Build was killed
				
			- harden accounts context
This commit is contained in:
		| @@ -63,6 +63,19 @@ defmodule Cannery.Accounts do | ||||
|   @spec get_user!(User.t()) :: User.t() | ||||
|   def get_user!(id), do: Repo.get!(User, id) | ||||
|  | ||||
|   @doc """ | ||||
|   Returns all users grouped by role. | ||||
|  | ||||
|   ## Examples | ||||
|  | ||||
|       iex> list_users_by_role(%User{id: 123, role: :admin}) | ||||
|       [admin: [%User{}], user: [%User{}, %User{}]] | ||||
|  | ||||
|   """ | ||||
|   @spec list_all_users_by_role(User.t()) :: %{String.t() => [User.t()]} | ||||
|   def list_all_users_by_role(%User{role: :admin}) do | ||||
|     Repo.all(User) |> Enum.group_by(fn user -> user.role end) | ||||
|   end | ||||
|  | ||||
|   @doc """ | ||||
|   Returns all users for a certain role. | ||||
|   | ||||
							
								
								
									
										39
									
								
								lib/cannery_web/components/invite_card.ex
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										39
									
								
								lib/cannery_web/components/invite_card.ex
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,39 @@ | ||||
| defmodule CanneryWeb.Components.InviteCard do | ||||
|   @moduledoc """ | ||||
|   Display card for an invite | ||||
|   """ | ||||
|  | ||||
|   use CanneryWeb, :component | ||||
|   alias CanneryWeb.Endpoint | ||||
|  | ||||
|   def invite_card(assigns) do | ||||
|     ~H""" | ||||
|     <div class="px-8 py-4 flex flex-col justify-center items-center space-y-4 | ||||
|       border border-gray-400 rounded-lg shadow-lg hover:shadow-md"> | ||||
|       <h1 class="title text-xl"> | ||||
|         <%= @invite.name %> | ||||
|       </h1> | ||||
|  | ||||
|       <%= if @invite.disabled_at |> is_nil() do %> | ||||
|         <h2 class="title text-md"> | ||||
|           <%= gettext("Uses Left:") %> | ||||
|           <%= @invite.uses_left || "Unlimited" %> | ||||
|         </h2> | ||||
|       <% else %> | ||||
|         <h2 class="title text-md"> | ||||
|           <%= gettext("Invite Disabled") %> | ||||
|         </h2> | ||||
|       <% end %> | ||||
|  | ||||
|       <code class="text-xs px-4 py-2 rounded-lg text-gray-100 bg-primary-800"><%= Routes.user_registration_url(Endpoint, :new, invite: @invite.token) %> | ||||
|       </code> | ||||
|  | ||||
|       <%= if @inner_block do %> | ||||
|         <div class="flex space-x-4 justify-center items-center"> | ||||
|           <%= render_slot(@inner_block) %> | ||||
|         </div> | ||||
|       <% end %> | ||||
|     </div> | ||||
|     """ | ||||
|   end | ||||
| end | ||||
							
								
								
									
										35
									
								
								lib/cannery_web/components/user_card.ex
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										35
									
								
								lib/cannery_web/components/user_card.ex
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,35 @@ | ||||
| defmodule CanneryWeb.Components.UserCard do | ||||
|   @moduledoc """ | ||||
|   Display card for a user | ||||
|   """ | ||||
|  | ||||
|   use CanneryWeb, :component | ||||
|  | ||||
|   def user_card(assigns) do | ||||
|     ~H""" | ||||
|     <div | ||||
|       id={"user-#{@user.id}"} | ||||
|       class="mx-4 my-2 px-8 py-4 flex flex-col justify-center items-center | ||||
|           border border-gray-400 rounded-lg shadow-lg hover:shadow-md" | ||||
|     > | ||||
|       <h1 class="px-4 py-2 rounded-lg title text-xl"> | ||||
|         <%= @user.email %> | ||||
|       </h1> | ||||
|  | ||||
|       <h3 class="px-4 py-2 rounded-lg title text-lg"> | ||||
|         <%= if @user.confirmed_at |> is_nil() do %> | ||||
|           Email unconfirmed | ||||
|         <% else %> | ||||
|           User was confirmed at <%= @user.confirmed_at |> display_datetime() %> | ||||
|         <% end %> | ||||
|       </h3> | ||||
|  | ||||
|       <%= if @inner_block do %> | ||||
|         <div class="px-4 py-2 flex space-x-4 justify-center items-center"> | ||||
|           <%= render_slot(@inner_block) %> | ||||
|         </div> | ||||
|       <% end %> | ||||
|     </div> | ||||
|     """ | ||||
|   end | ||||
| end | ||||
| @@ -3,7 +3,7 @@ defmodule CanneryWeb.UserRegistrationController do | ||||
|   import CanneryWeb.Gettext | ||||
|   alias Cannery.{Accounts, Invites} | ||||
|   alias Cannery.Accounts.User | ||||
|   alias CanneryWeb.{HomeLive, UserAuth} | ||||
|   alias CanneryWeb.{Endpoint, HomeLive} | ||||
|  | ||||
|   def new(conn, %{"invite" => invite_token}) do | ||||
|     invite = Invites.get_invite_by_token(invite_token) | ||||
| @@ -13,7 +13,7 @@ defmodule CanneryWeb.UserRegistrationController do | ||||
|     else | ||||
|       conn | ||||
|       |> put_flash(:error, dgettext("errors", "Sorry, this invite was not found or expired")) | ||||
|       |> redirect(to: Routes.live_path(CanneryWeb.Endpoint, HomeLive)) | ||||
|       |> redirect(to: Routes.live_path(Endpoint, HomeLive)) | ||||
|     end | ||||
|   end | ||||
|  | ||||
| @@ -23,7 +23,7 @@ defmodule CanneryWeb.UserRegistrationController do | ||||
|     else | ||||
|       conn | ||||
|       |> put_flash(:error, dgettext("errors", "Sorry, public registration is disabled")) | ||||
|       |> redirect(to: Routes.live_path(CanneryWeb.Endpoint, HomeLive)) | ||||
|       |> redirect(to: Routes.live_path(Endpoint, HomeLive)) | ||||
|     end | ||||
|   end | ||||
|  | ||||
| @@ -41,7 +41,7 @@ defmodule CanneryWeb.UserRegistrationController do | ||||
|     else | ||||
|       conn | ||||
|       |> put_flash(:error, dgettext("errors", "Sorry, this invite was not found or expired")) | ||||
|       |> redirect(to: Routes.live_path(CanneryWeb.Endpoint, HomeLive)) | ||||
|       |> redirect(to: Routes.live_path(Endpoint, HomeLive)) | ||||
|     end | ||||
|   end | ||||
|  | ||||
| @@ -51,7 +51,7 @@ defmodule CanneryWeb.UserRegistrationController do | ||||
|     else | ||||
|       conn | ||||
|       |> put_flash(:error, dgettext("errors", "Sorry, public registration is disabled")) | ||||
|       |> redirect(to: Routes.live_path(CanneryWeb.Endpoint, HomeLive)) | ||||
|       |> redirect(to: Routes.live_path(Endpoint, HomeLive)) | ||||
|     end | ||||
|   end | ||||
|  | ||||
| @@ -68,8 +68,8 @@ defmodule CanneryWeb.UserRegistrationController do | ||||
|         ) | ||||
|  | ||||
|         conn | ||||
|         |> put_flash(:info, dgettext("prompts", "User created successfully.")) | ||||
|         |> UserAuth.log_in_user(user) | ||||
|         |> put_flash(:info, dgettext("prompts", "Please check your email to verify your account")) | ||||
|         |> redirect(to: Routes.user_session_path(Endpoint, :new)) | ||||
|  | ||||
|       {:error, %Ecto.Changeset{} = changeset} -> | ||||
|         render(conn, "new.html", changeset: changeset, invite: invite) | ||||
|   | ||||
| @@ -4,9 +4,8 @@ defmodule CanneryWeb.InviteLive.Index do | ||||
|   """ | ||||
|  | ||||
|   use CanneryWeb, :live_view | ||||
|  | ||||
|   alias Cannery.Invites | ||||
|   alias Cannery.Invites.Invite | ||||
|   import CanneryWeb.Components.{InviteCard, UserCard} | ||||
|   alias Cannery.{Accounts, Invites, Invites.Invite} | ||||
|   alias CanneryWeb.{Endpoint, HomeLive} | ||||
|  | ||||
|   @impl true | ||||
| @@ -44,7 +43,11 @@ defmodule CanneryWeb.InviteLive.Index do | ||||
|   end | ||||
|  | ||||
|   @impl true | ||||
|   def handle_event("delete", %{"id" => id}, %{assigns: %{current_user: current_user}} = socket) do | ||||
|   def handle_event( | ||||
|         "delete_invite", | ||||
|         %{"id" => id}, | ||||
|         %{assigns: %{current_user: current_user}} = socket | ||||
|       ) do | ||||
|     %{name: invite_name} = | ||||
|       id |> Invites.get_invite!(current_user) |> Invites.delete_invite!(current_user) | ||||
|  | ||||
| @@ -106,7 +109,30 @@ defmodule CanneryWeb.InviteLive.Index do | ||||
|     {:noreply, socket} | ||||
|   end | ||||
|  | ||||
|   @impl true | ||||
|   def handle_event( | ||||
|         "delete_user", | ||||
|         %{"id" => id}, | ||||
|         %{assigns: %{current_user: current_user}} = socket | ||||
|       ) do | ||||
|     %{email: user_email} = Accounts.get_user!(id) |> Accounts.delete_user!(current_user) | ||||
|  | ||||
|     prompt = dgettext("prompts", "%{name} deleted succesfully", name: user_email) | ||||
|  | ||||
|     {:noreply, socket |> put_flash(:info, prompt) |> display_invites()} | ||||
|   end | ||||
|  | ||||
|   defp display_invites(%{assigns: %{current_user: current_user}} = socket) do | ||||
|     socket |> assign(:invites, Invites.list_invites(current_user)) | ||||
|     invites = Invites.list_invites(current_user) | ||||
|  | ||||
|     all_users = Accounts.list_all_users_by_role(current_user) | ||||
|  | ||||
|     admins = | ||||
|       all_users | ||||
|       |> Map.get(:admin, []) | ||||
|       |> Enum.reject(fn %{id: user_id} -> user_id == current_user.id end) | ||||
|  | ||||
|     users = all_users |> Map.get(:user, []) | ||||
|     socket |> assign(invites: invites, admins: admins, users: users) | ||||
|   end | ||||
| end | ||||
|   | ||||
							
								
								
									
										136
									
								
								lib/cannery_web/live/invite_live/index.html.heex
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										136
									
								
								lib/cannery_web/live/invite_live/index.html.heex
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,136 @@ | ||||
| <div class="flex flex-col space-y-8 justify-center items-center"> | ||||
|   <h1 class="title text-2xl title-primary-500"> | ||||
|     <%= gettext("Listing Invites") %> | ||||
|   </h1> | ||||
|  | ||||
|   <%= if @invites |> Enum.empty?() do %> | ||||
|     <h1 class="title text-xl text-primary-500"> | ||||
|       <%= gettext("No invites") %> 😔 | ||||
|     </h1> | ||||
|  | ||||
|     <%= live_patch(dgettext("actions", "Invite someone new!"), | ||||
|       to: Routes.invite_index_path(@socket, :new), | ||||
|       class: "btn btn-primary" | ||||
|     ) %> | ||||
|   <% else %> | ||||
|     <%= live_patch(dgettext("actions", "Create Invite"), | ||||
|       to: Routes.invite_index_path(@socket, :new), | ||||
|       class: "btn btn-primary" | ||||
|     ) %> | ||||
|   <% end %> | ||||
|  | ||||
|   <div class="flex flex-row flex-wrap space-x-4 space-y-4"> | ||||
|     <%= for invite <- @invites do %> | ||||
|       <.invite_card invite={invite}> | ||||
|         <%= live_patch to: Routes.invite_index_path(Endpoint, :edit, invite), | ||||
|                    class: "text-primary-500 link" do %> | ||||
|           <i class="fa-fw fa-lg fas fa-edit"></i> | ||||
|         <% end %> | ||||
|  | ||||
|         <%= link to: "#", | ||||
|              class: "text-primary-500 link", | ||||
|              phx_click: "delete_invite", | ||||
|              phx_value_id: invite.id, | ||||
|              data: [ | ||||
|                confirm: | ||||
|                  dgettext("prompts", "Are you sure you want to delete the invite for %{name}?", | ||||
|                    name: invite.name | ||||
|                  ) | ||||
|              ] do %> | ||||
|           <i class="fa-fw fa-lg fas fa-trash"></i> | ||||
|         <% end %> | ||||
|  | ||||
|         <%= if invite.disabled_at |> is_nil() do %> | ||||
|           <a href="#" class="btn btn-primary" phx-click="disable_invite" phx-value-id={invite.id}> | ||||
|             <%= gettext("Disable") %> | ||||
|           </a> | ||||
|         <% else %> | ||||
|           <a href="#" class="btn btn-primary" phx-click="enable_invite" phx-value-id={invite.id}> | ||||
|             <%= gettext("Enable") %> | ||||
|           </a> | ||||
|         <% end %> | ||||
|  | ||||
|         <%= if invite.disabled_at |> is_nil() and not (invite.uses_left |> is_nil()) do %> | ||||
|           <a | ||||
|             href="#" | ||||
|             class="btn btn-primary" | ||||
|             phx-click="set_unlimited" | ||||
|             phx-value-id={invite.id} | ||||
|             data-confirm={dgettext("prompts", "Are you sure you want to make %{name} unlimited?", name: invite.name)} | ||||
|           > | ||||
|             <%= gettext("Set Unlimited") %> | ||||
|           </a> | ||||
|         <% end %> | ||||
|       </.invite_card> | ||||
|     <% end %> | ||||
|   </div> | ||||
|  | ||||
|   <%= unless @admins |> Enum.empty?() do %> | ||||
|     <hr class="hr"> | ||||
|  | ||||
|     <div class="flex flex-col justify-center items-center space-y-4"> | ||||
|       <h1 class="title text-xl text-primary-500"> | ||||
|         <%= gettext("Admins") %> | ||||
|       </h1> | ||||
|  | ||||
|       <%= for admin <- @admins do %> | ||||
|         <.user_card user={admin}> | ||||
|           <%= link to: "#", | ||||
|                class: "text-primary-500 link", | ||||
|                phx_click: "delete_user", | ||||
|                phx_value_id: admin.id, | ||||
|                data: [ | ||||
|                  confirm: | ||||
|                    dgettext( | ||||
|                      "prompts", | ||||
|                      "Are you sure you want to delete %{email}? This action is permanent!", | ||||
|                      email: admin.email | ||||
|                    ) | ||||
|                ] do %> | ||||
|             <i class="fa-fw fa-lg fas fa-trash"></i> | ||||
|           <% end %> | ||||
|         </.user_card> | ||||
|       <% end %> | ||||
|     </div> | ||||
|   <% end %> | ||||
|  | ||||
|   <%= unless @users |> Enum.empty?() do %> | ||||
|     <hr class="hr"> | ||||
|  | ||||
|     <div class="flex flex-col justify-center items-center space-y-4"> | ||||
|       <h1 class="title text-xl text-primary-500"> | ||||
|         <%= gettext("Users") %> | ||||
|       </h1> | ||||
|  | ||||
|       <%= for user <- @users do %> | ||||
|         <.user_card user={user}> | ||||
|           <%= link to: "#", | ||||
|                class: "text-primary-500 link", | ||||
|                phx_click: "delete_user", | ||||
|                phx_value_id: user.id, | ||||
|                data: [ | ||||
|                  confirm: | ||||
|                    dgettext( | ||||
|                      "prompts", | ||||
|                      "Are you sure you want to delete %{email}? This action is permanent!", | ||||
|                      email: user.email | ||||
|                    ) | ||||
|                ] do %> | ||||
|             <i class="fa-fw fa-lg fas fa-trash"></i> | ||||
|           <% end %> | ||||
|         </.user_card> | ||||
|       <% end %> | ||||
|     </div> | ||||
|   <% end %> | ||||
| </div> | ||||
|  | ||||
| <%= if @live_action in [:new, :edit] do %> | ||||
|   <%= live_modal(CanneryWeb.InviteLive.FormComponent, | ||||
|     id: @invite.id || :new, | ||||
|     title: @page_title, | ||||
|     action: @live_action, | ||||
|     invite: @invite, | ||||
|     return_to: Routes.invite_index_path(@socket, :index), | ||||
|     current_user: @current_user | ||||
|   ) %> | ||||
| <% end %> | ||||
| @@ -1,90 +0,0 @@ | ||||
| <div class="flex flex-col space-y-8 justify-center items-center"> | ||||
|   <h1 class="title text-2xl title-primary-500"> | ||||
|     <%= gettext("Listing Invites") %> | ||||
|   </h1> | ||||
|  | ||||
|   <%= if @invites |> Enum.empty?() do %> | ||||
|     <h1 class="title text-xl text-primary-500"> | ||||
|       <%= gettext("No invites") %> 😔 | ||||
|     </h1> | ||||
|  | ||||
|     <%= live_patch dgettext("actions", "Invite someone new!"), | ||||
|       to: Routes.invite_index_path(@socket, :new), | ||||
|       class: "btn btn-primary" %> | ||||
|   <% else %> | ||||
|     <%= live_patch dgettext("actions", "Create Invite"), | ||||
|       to: Routes.invite_index_path(@socket, :new), | ||||
|       class: "btn btn-primary" %> | ||||
|   <% end %> | ||||
|  | ||||
|   <div class="flex flex-row flex-wrap space-x-4 space-y-4"> | ||||
|     <%= for invite <- @invites do %> | ||||
|       <div class="px-8 py-4 flex flex-col justify-center items-center space-y-4 | ||||
|         border border-gray-400 rounded-lg shadow-lg hover:shadow-md"> | ||||
|         <h1 class="title text-xl"> | ||||
|           <%= invite.name %> | ||||
|         </h1> | ||||
|  | ||||
|         <%= if invite.disabled_at |> is_nil() do %> | ||||
|           <h2 class="title text-md"> | ||||
|             <%= gettext("Uses Left:") %> | ||||
|             <%= invite.uses_left || "Unlimited" %> | ||||
|           </h2> | ||||
|         <% else %> | ||||
|           <h2 class="title text-md"> | ||||
|             <%= gettext("Invite Disabled") %> | ||||
|           </h2> | ||||
|         <% end %> | ||||
|  | ||||
|         <code class="text-xs px-4 py-2 rounded-lg text-gray-100 bg-primary-800"> | ||||
|           <%= Routes.user_registration_url(@socket, :new, invite: invite.token) %> | ||||
|         </code> | ||||
|  | ||||
|         <div class="flex space-x-4 justify-center items-center"> | ||||
|           <%= live_patch to: Routes.invite_index_path(@socket, :edit, invite), | ||||
|                     class: "text-primary-500 link" do %> | ||||
|             <i class="fa-fw fa-lg fas fa-edit"></i> | ||||
|           <% end %> | ||||
|  | ||||
|           <%= link to: "#", | ||||
|               class: "text-primary-500 link", | ||||
|               phx_click: "delete", | ||||
|             phx_value_id: invite.id, | ||||
|             data: [confirm: dgettext("prompts", "Are you sure you want to delete the invite for %{name}?", name: invite.name)] do %> | ||||
|             <i class="fa-fw fa-lg fas fa-trash"></i> | ||||
|           <% end %> | ||||
|  | ||||
|           <%= if invite.disabled_at |> is_nil() do %> | ||||
|             <a href="#" class="btn btn-primary" | ||||
|               phx-click="disable" phx-value-id="<%= invite.id %>"> | ||||
|               <%= gettext("Disable") %> | ||||
|             </a> | ||||
|           <% else %> | ||||
|             <a href="#" class="btn btn-primary" | ||||
|               phx-click="enable" phx-value-id="<%= invite.id %>"> | ||||
|               <%= gettext("Enable") %> | ||||
|             </a> | ||||
|           <% end %> | ||||
|  | ||||
|           <%= if invite.disabled_at |> is_nil() and not(invite.uses_left |> is_nil()) do %> | ||||
|             <a href="#" class="btn btn-primary" | ||||
|               phx-click="set_unlimited" phx-value-id="<%= invite.id %>" | ||||
|               data-confirm={dgettext("prompts", "Are you sure you want to make %{name} unlimited?", name: invite.name)}> | ||||
|               <%= gettext("Set Unlimited") %> | ||||
|             </a> | ||||
|           <% end %> | ||||
|         </div> | ||||
|       </div> | ||||
|     <% end %> | ||||
|   </div> | ||||
| </div> | ||||
|  | ||||
| <%= if @live_action in [:new, :edit] do %> | ||||
|   <%= live_modal CanneryWeb.InviteLive.FormComponent, | ||||
|     id: @invite.id || :new, | ||||
|     title: @page_title, | ||||
|     action: @live_action, | ||||
|     invite: @invite, | ||||
|     return_to: Routes.invite_index_path(@socket, :index), | ||||
|     current_user: @current_user %> | ||||
| <% end %> | ||||
| @@ -11,27 +11,23 @@ msgid "" | ||||
| msgstr "" | ||||
|  | ||||
| #, elixir-format, ex-autogen | ||||
| #: lib/cannery_web/components/topbar.ex:96 | ||||
| #: lib/cannery_web/templates/layout/topbar.html.heex:36 | ||||
| #: lib/cannery_web/templates/user_confirmation/new.html.heex:26 | ||||
| #: lib/cannery_web/templates/user_registration/new.html.heex:39 | ||||
| #: lib/cannery_web/templates/user_reset_password/edit.html.heex:41 | ||||
| #: lib/cannery_web/templates/user_reset_password/new.html.heex:27 | ||||
| #: lib/cannery_web/templates/user_session/new.html.heex:3 | ||||
| #: lib/cannery_web/templates/user_session/new.html.heex:35 | ||||
| msgid "Log in" | ||||
| #: lib/cannery_web/live/ammo_group_live/index.ex:28 | ||||
| msgid "Add Ammo" | ||||
| msgstr "" | ||||
|  | ||||
| #, elixir-format, ex-autogen | ||||
| #: lib/cannery_web/components/topbar.ex:89 | ||||
| #: lib/cannery_web/templates/layout/topbar.html.heex:28 | ||||
| #: lib/cannery_web/templates/user_confirmation/new.html.heex:21 | ||||
| #: lib/cannery_web/templates/user_registration/new.html.heex:3 | ||||
| #: lib/cannery_web/templates/user_registration/new.html.heex:34 | ||||
| #: lib/cannery_web/templates/user_reset_password/edit.html.heex:36 | ||||
| #: lib/cannery_web/templates/user_reset_password/new.html.heex:22 | ||||
| #: lib/cannery_web/templates/user_session/new.html.heex:41 | ||||
| msgid "Register" | ||||
| #: lib/cannery_web/live/ammo_group_live/index.html.heex:11 | ||||
| msgid "Add your first box!" | ||||
| msgstr "" | ||||
|  | ||||
| #, elixir-format, ex-autogen | ||||
| #: lib/cannery_web/live/container_live/index.html.heex:11 | ||||
| msgid "Add your first container!" | ||||
| msgstr "" | ||||
|  | ||||
| #, elixir-format, ex-autogen | ||||
| #: lib/cannery_web/live/ammo_type_live/index.html.heex:11 | ||||
| msgid "Add your first type!" | ||||
| msgstr "" | ||||
|  | ||||
| #, elixir-format, ex-autogen | ||||
| @@ -46,6 +42,11 @@ msgstr "" | ||||
| msgid "Change password" | ||||
| msgstr "" | ||||
|  | ||||
| #, elixir-format, ex-autogen | ||||
| #: lib/cannery_web/live/invite_live/index.html.heex:16 | ||||
| msgid "Create Invite" | ||||
| msgstr "" | ||||
|  | ||||
| #, elixir-format, ex-autogen | ||||
| #: lib/cannery_web/templates/user_settings/edit.html.heex:100 | ||||
| msgid "Delete User" | ||||
| @@ -58,6 +59,60 @@ msgstr "" | ||||
| msgid "Forgot your password?" | ||||
| msgstr "" | ||||
|  | ||||
| #, elixir-format, ex-autogen | ||||
| #: lib/cannery_web/live/invite_live/index.html.heex:11 | ||||
| msgid "Invite someone new!" | ||||
| msgstr "" | ||||
|  | ||||
| #, elixir-format, ex-autogen | ||||
| #: lib/cannery_web/components/topbar.ex:96 | ||||
| #: lib/cannery_web/templates/layout/topbar.html.heex:36 | ||||
| #: lib/cannery_web/templates/user_confirmation/new.html.heex:26 | ||||
| #: lib/cannery_web/templates/user_registration/new.html.heex:39 | ||||
| #: lib/cannery_web/templates/user_reset_password/edit.html.heex:41 | ||||
| #: lib/cannery_web/templates/user_reset_password/new.html.heex:27 | ||||
| #: lib/cannery_web/templates/user_session/new.html.heex:3 | ||||
| #: lib/cannery_web/templates/user_session/new.html.heex:35 | ||||
| msgid "Log in" | ||||
| msgstr "" | ||||
|  | ||||
| #, elixir-format, ex-autogen | ||||
| #: lib/cannery_web/live/tag_live/index.html.heex:13 | ||||
| msgid "Make your first tag!" | ||||
| msgstr "" | ||||
|  | ||||
| #, elixir-format, ex-autogen | ||||
| #: lib/cannery_web/live/ammo_group_live/index.html.heex:16 | ||||
| msgid "New Ammo group" | ||||
| msgstr "" | ||||
|  | ||||
| #, elixir-format, ex-autogen | ||||
| #: lib/cannery_web/live/ammo_type_live/index.html.heex:16 | ||||
| msgid "New Ammo type" | ||||
| msgstr "" | ||||
|  | ||||
| #, elixir-format, ex-autogen | ||||
| #: lib/cannery_web/live/container_live/index.html.heex:16 | ||||
| msgid "New Container" | ||||
| msgstr "" | ||||
|  | ||||
| #, elixir-format, ex-autogen | ||||
| #: lib/cannery_web/live/tag_live/index.html.heex:18 | ||||
| msgid "New Tag" | ||||
| msgstr "" | ||||
|  | ||||
| #, elixir-format, ex-autogen | ||||
| #: lib/cannery_web/components/topbar.ex:89 | ||||
| #: lib/cannery_web/templates/layout/topbar.html.heex:28 | ||||
| #: lib/cannery_web/templates/user_confirmation/new.html.heex:21 | ||||
| #: lib/cannery_web/templates/user_registration/new.html.heex:3 | ||||
| #: lib/cannery_web/templates/user_registration/new.html.heex:34 | ||||
| #: lib/cannery_web/templates/user_reset_password/edit.html.heex:36 | ||||
| #: lib/cannery_web/templates/user_reset_password/new.html.heex:22 | ||||
| #: lib/cannery_web/templates/user_session/new.html.heex:41 | ||||
| msgid "Register" | ||||
| msgstr "" | ||||
|  | ||||
| #, elixir-format, ex-autogen | ||||
| #: lib/cannery_web/templates/user_confirmation/new.html.heex:3 | ||||
| #: lib/cannery_web/templates/user_confirmation/new.html.heex:15 | ||||
| @@ -70,26 +125,6 @@ msgstr "" | ||||
| msgid "Reset password" | ||||
| msgstr "" | ||||
|  | ||||
| #, elixir-format, ex-autogen | ||||
| #: lib/cannery_web/templates/user_reset_password/new.html.heex:16 | ||||
| msgid "Send instructions to reset password" | ||||
| msgstr "" | ||||
|  | ||||
| #, elixir-format, ex-autogen | ||||
| #: lib/cannery_web/live/ammo_group_live/index.ex:28 | ||||
| msgid "Add Ammo" | ||||
| msgstr "" | ||||
|  | ||||
| #, elixir-format, ex-autogen | ||||
| #: lib/cannery_web/live/ammo_group_live/index.html.heex:11 | ||||
| msgid "Add your first box!" | ||||
| msgstr "" | ||||
|  | ||||
| #, elixir-format, ex-autogen | ||||
| #: lib/cannery_web/live/ammo_group_live/index.html.heex:16 | ||||
| msgid "New Ammo group" | ||||
| msgstr "" | ||||
|  | ||||
| #, elixir-format, ex-autogen | ||||
| #: lib/cannery_web/live/ammo_group_live/form_component.ex:102 | ||||
| #: lib/cannery_web/live/ammo_type_live/form_component.ex:161 | ||||
| @@ -99,47 +134,12 @@ msgstr "" | ||||
| msgid "Save" | ||||
| msgstr "" | ||||
|  | ||||
| #, elixir-format, ex-autogen | ||||
| #: lib/cannery_web/templates/user_reset_password/new.html.heex:16 | ||||
| msgid "Send instructions to reset password" | ||||
| msgstr "" | ||||
|  | ||||
| #, elixir-format, ex-autogen | ||||
| #: lib/cannery_web/live/ammo_group_live/index.html.heex:56 | ||||
| msgid "View" | ||||
| msgstr "" | ||||
|  | ||||
| #, elixir-format, ex-autogen | ||||
| #: lib/cannery_web/live/ammo_type_live/index.html.heex:11 | ||||
| msgid "Add your first type!" | ||||
| msgstr "" | ||||
|  | ||||
| #, elixir-format, ex-autogen | ||||
| #: lib/cannery_web/live/ammo_type_live/index.html.heex:16 | ||||
| msgid "New Ammo type" | ||||
| msgstr "" | ||||
|  | ||||
| #, elixir-format, ex-autogen | ||||
| #: lib/cannery_web/live/container_live/index.html.heex:11 | ||||
| msgid "Add your first container!" | ||||
| msgstr "" | ||||
|  | ||||
| #, elixir-format, ex-autogen | ||||
| #: lib/cannery_web/live/container_live/index.html.heex:16 | ||||
| msgid "New Container" | ||||
| msgstr "" | ||||
|  | ||||
| #, elixir-format, ex-autogen | ||||
| #: lib/cannery_web/live/invite_live/index.html.leex:15 | ||||
| msgid "Create Invite" | ||||
| msgstr "" | ||||
|  | ||||
| #, elixir-format, ex-autogen | ||||
| #: lib/cannery_web/live/invite_live/index.html.leex:11 | ||||
| msgid "Invite someone new!" | ||||
| msgstr "" | ||||
|  | ||||
| #, elixir-format, ex-autogen | ||||
| #: lib/cannery_web/live/tag_live/index.html.heex:18 | ||||
| msgid "New Tag" | ||||
| msgstr "" | ||||
|  | ||||
| #, elixir-format, ex-autogen | ||||
| #: lib/cannery_web/live/tag_live/index.html.heex:13 | ||||
| msgid "Make your first tag!" | ||||
| msgstr "" | ||||
|   | ||||
| @@ -21,33 +21,8 @@ msgid "Access from any internet-capable device" | ||||
| msgstr "" | ||||
|  | ||||
| #, elixir-format, ex-autogen | ||||
| #: lib/cannery_web/live/home_live.ex:85 | ||||
| msgid "Instance Information" | ||||
| msgstr "" | ||||
|  | ||||
| #, elixir-format, ex-autogen | ||||
| #: lib/cannery_web/live/home_live.ex:116 | ||||
| msgid "Invite Only" | ||||
| msgstr "" | ||||
|  | ||||
| #, elixir-format, ex-autogen | ||||
| #: lib/cannery_web/live/home_live.ex:115 | ||||
| msgid "Public Signups" | ||||
| msgstr "" | ||||
|  | ||||
| #, elixir-format, ex-autogen | ||||
| #: lib/cannery_web/live/home_live.ex:39 | ||||
| msgid "Welcome to %{name}" | ||||
| msgstr "" | ||||
|  | ||||
| #, elixir-format, ex-autogen | ||||
| #: lib/cannery_web/live/home_live.ex:67 | ||||
| msgid "Your data stays with you, period" | ||||
| msgstr "" | ||||
|  | ||||
| #, elixir-format, ex-autogen | ||||
| #: lib/cannery_web/live/home_live.ex:43 | ||||
| msgid "The self-hosted firearm tracker website" | ||||
| #: lib/cannery_web/live/invite_live/index.html.heex:73 | ||||
| msgid "Admins" | ||||
| msgstr "" | ||||
|  | ||||
| #, elixir-format, ex-autogen | ||||
| @@ -55,133 +30,11 @@ msgstr "" | ||||
| msgid "Admins:" | ||||
| msgstr "" | ||||
|  | ||||
| #, elixir-format, ex-autogen | ||||
| #: lib/cannery_web/live/home_live.ex:52 | ||||
| msgid "Easy to Use:" | ||||
| msgstr "" | ||||
|  | ||||
| #, elixir-format, ex-autogen | ||||
| #: lib/cannery_web/live/home_live.ex:63 | ||||
| msgid "Secure:" | ||||
| msgstr "" | ||||
|  | ||||
| #, elixir-format, ex-autogen | ||||
| #: lib/cannery_web/live/home_live.ex:73 | ||||
| msgid "Simple:" | ||||
| msgstr "" | ||||
|  | ||||
| #, elixir-format, ex-autogen | ||||
| #: lib/cannery_web/live/home_live.ex:66 | ||||
| msgid "Self-host your own instance, or use an instance from someone you trust." | ||||
| msgstr "" | ||||
|  | ||||
| #, elixir-format, ex-autogen | ||||
| #: lib/cannery_web/components/topbar.ex:47 | ||||
| msgid "Ammo" | ||||
| msgstr "" | ||||
|  | ||||
| #, elixir-format, ex-autogen | ||||
| #: lib/cannery_web/components/topbar.ex:41 | ||||
| msgid "Containers" | ||||
| msgstr "" | ||||
|  | ||||
| #, elixir-format, ex-autogen | ||||
| #: lib/cannery_web/components/topbar.ex:60 | ||||
| msgid "Invites" | ||||
| msgstr "" | ||||
|  | ||||
| #, elixir-format, ex-autogen | ||||
| #: lib/cannery_web/components/topbar.ex:53 | ||||
| msgid "Manage" | ||||
| msgstr "" | ||||
|  | ||||
| #, elixir-format, ex-autogen | ||||
| #: lib/cannery_web/components/topbar.ex:35 | ||||
| msgid "Tags" | ||||
| msgstr "" | ||||
|  | ||||
| #, elixir-format, ex-autogen | ||||
| #: lib/cannery_web/templates/user_session/new.html.heex:29 | ||||
| msgid "Keep me logged in for 60 days" | ||||
| msgstr "" | ||||
|  | ||||
| #, elixir-format, ex-autogen | ||||
| #: lib/cannery_web/templates/user_settings/edit.html.heex:3 | ||||
| msgid "Settings" | ||||
| msgstr "" | ||||
|  | ||||
| #, elixir-format, ex-autogen | ||||
| #: lib/cannery_web/live/ammo_group_live/form_component.ex:75 | ||||
| #: lib/cannery_web/live/ammo_group_live/index.html.heex:26 | ||||
| msgid "Count" | ||||
| msgstr "" | ||||
|  | ||||
| #, elixir-format, ex-autogen | ||||
| #: lib/cannery_web/components/ammo_group_card.ex:28 | ||||
| #: lib/cannery_web/live/ammo_group_live/show.html.heex:8 | ||||
| msgid "Count:" | ||||
| msgstr "" | ||||
|  | ||||
| #, elixir-format, ex-autogen | ||||
| #: lib/cannery_web/live/ammo_group_live/index.ex:22 | ||||
| #: lib/cannery_web/live/ammo_group_live/show.ex:40 | ||||
| msgid "Edit Ammo group" | ||||
| msgstr "" | ||||
|  | ||||
| #, elixir-format, ex-autogen | ||||
| #: lib/cannery_web/live/ammo_group_live/index.html.heex:3 | ||||
| msgid "Listing Ammo" | ||||
| msgstr "" | ||||
|  | ||||
| #, elixir-format, ex-autogen | ||||
| #: lib/cannery_web/live/ammo_group_live/index.ex:33 | ||||
| msgid "Listing Ammo groups" | ||||
| msgstr "" | ||||
|  | ||||
| #, elixir-format, ex-autogen | ||||
| #: lib/cannery_web/live/ammo_group_live/index.html.heex:8 | ||||
| msgid "No Ammo" | ||||
| msgstr "" | ||||
|  | ||||
| #, elixir-format, ex-autogen | ||||
| #: lib/cannery_web/live/ammo_group_live/form_component.ex:89 | ||||
| #: lib/cannery_web/live/ammo_group_live/index.html.heex:32 | ||||
| msgid "Notes" | ||||
| msgstr "" | ||||
|  | ||||
| #, elixir-format, ex-autogen | ||||
| #: lib/cannery_web/components/ammo_group_card.ex:34 | ||||
| #: lib/cannery_web/live/ammo_group_live/show.html.heex:14 | ||||
| msgid "Notes:" | ||||
| msgstr "" | ||||
|  | ||||
| #, elixir-format, ex-autogen | ||||
| #: lib/cannery_web/live/ammo_group_live/form_component.ex:82 | ||||
| #: lib/cannery_web/live/ammo_group_live/index.html.heex:29 | ||||
| msgid "Price paid" | ||||
| msgstr "" | ||||
|  | ||||
| #, elixir-format, ex-autogen | ||||
| #: lib/cannery_web/components/ammo_group_card.ex:41 | ||||
| #: lib/cannery_web/live/ammo_group_live/show.html.heex:21 | ||||
| msgid "Price paid:" | ||||
| msgstr "" | ||||
|  | ||||
| #, elixir-format, ex-autogen | ||||
| #: lib/cannery_web/live/ammo_group_live/show.ex:39 | ||||
| msgid "Show Ammo group" | ||||
| msgstr "" | ||||
|  | ||||
| #, elixir-format, ex-autogen | ||||
| #: lib/cannery_web/live/ammo_group_live/show.html.heex:45 | ||||
| msgid "Stored in" | ||||
| msgstr "" | ||||
|  | ||||
| #, elixir-format, ex-autogen | ||||
| #: lib/cannery_web/live/ammo_group_live/show.html.heex:50 | ||||
| msgid "This ammo group is not in a container" | ||||
| msgstr "" | ||||
|  | ||||
| #, elixir-format, ex-autogen | ||||
| #: lib/cannery_web/live/ammo_group_live/form_component.ex:69 | ||||
| msgid "Ammo type" | ||||
| @@ -192,6 +45,11 @@ msgstr "" | ||||
| msgid "Average Price paid" | ||||
| msgstr "" | ||||
|  | ||||
| #, elixir-format, ex-autogen | ||||
| #: lib/cannery_web/live/tag_live/form_component.ex:54 | ||||
| msgid "Background color" | ||||
| msgstr "" | ||||
|  | ||||
| #, elixir-format, ex-autogen | ||||
| #: lib/cannery_web/live/ammo_type_live/form_component.ex:145 | ||||
| #: lib/cannery_web/live/ammo_type_live/index.html.heex:38 | ||||
| @@ -243,24 +101,84 @@ msgstr "" | ||||
| msgid "Container" | ||||
| msgstr "" | ||||
|  | ||||
| #, elixir-format, ex-autogen | ||||
| #: lib/cannery_web/components/topbar.ex:41 | ||||
| msgid "Containers" | ||||
| msgstr "" | ||||
|  | ||||
| #, elixir-format, ex-autogen | ||||
| #: lib/cannery_web/live/ammo_type_live/form_component.ex:149 | ||||
| #: lib/cannery_web/live/ammo_type_live/index.html.heex:39 | ||||
| msgid "Corrosive" | ||||
| msgstr "" | ||||
|  | ||||
| #, elixir-format, ex-autogen | ||||
| #: lib/cannery_web/live/ammo_group_live/form_component.ex:75 | ||||
| #: lib/cannery_web/live/ammo_group_live/index.html.heex:26 | ||||
| msgid "Count" | ||||
| msgstr "" | ||||
|  | ||||
| #, elixir-format, ex-autogen | ||||
| #: lib/cannery_web/components/ammo_group_card.ex:28 | ||||
| #: lib/cannery_web/live/ammo_group_live/show.html.heex:8 | ||||
| msgid "Count:" | ||||
| msgstr "" | ||||
|  | ||||
| #, elixir-format, ex-autogen | ||||
| #: lib/cannery_web/live/ammo_type_live/form_component.ex:63 | ||||
| #: lib/cannery_web/live/container_live/form_component.ex:67 | ||||
| msgid "Description" | ||||
| msgstr "" | ||||
|  | ||||
| #, elixir-format, ex-autogen | ||||
| #: lib/cannery_web/components/container_card.ex:26 | ||||
| #: lib/cannery_web/live/container_live/show.html.heex:8 | ||||
| msgid "Description:" | ||||
| msgstr "" | ||||
|  | ||||
| #, elixir-format, ex-autogen | ||||
| #: lib/cannery_web/live/invite_live/index.html.heex:45 | ||||
| msgid "Disable" | ||||
| msgstr "" | ||||
|  | ||||
| #, elixir-format, ex-autogen | ||||
| #: lib/cannery_web/live/home_live.ex:52 | ||||
| msgid "Easy to Use:" | ||||
| msgstr "" | ||||
|  | ||||
| #, elixir-format, ex-autogen | ||||
| #: lib/cannery_web/live/ammo_group_live/index.ex:22 | ||||
| #: lib/cannery_web/live/ammo_group_live/show.ex:40 | ||||
| msgid "Edit Ammo group" | ||||
| msgstr "" | ||||
|  | ||||
| #, elixir-format, ex-autogen | ||||
| #: lib/cannery_web/live/ammo_type_live/index.ex:23 | ||||
| #: lib/cannery_web/live/ammo_type_live/show.ex:46 | ||||
| msgid "Edit Ammo type" | ||||
| msgstr "" | ||||
|  | ||||
| #, elixir-format, ex-autogen | ||||
| #: lib/cannery_web/live/container_live/index.ex:23 | ||||
| #: lib/cannery_web/live/container_live/show.ex:67 | ||||
| msgid "Edit Container" | ||||
| msgstr "" | ||||
|  | ||||
| #, elixir-format, ex-autogen | ||||
| #: lib/cannery_web/live/invite_live/index.ex:34 | ||||
| msgid "Edit Invite" | ||||
| msgstr "" | ||||
|  | ||||
| #, elixir-format, ex-autogen | ||||
| #: lib/cannery_web/live/tag_live/index.ex:23 | ||||
| msgid "Edit Tag" | ||||
| msgstr "" | ||||
|  | ||||
| #, elixir-format, ex-autogen | ||||
| #: lib/cannery_web/live/invite_live/index.html.heex:49 | ||||
| msgid "Enable" | ||||
| msgstr "" | ||||
|  | ||||
| #, elixir-format, ex-autogen | ||||
| #: lib/cannery_web/live/ammo_type_live/form_component.ex:74 | ||||
| msgid "Example bullet type abbreviations" | ||||
| @@ -284,110 +202,69 @@ msgstr "" | ||||
| msgid "Incendiary" | ||||
| msgstr "" | ||||
|  | ||||
| #, elixir-format, ex-autogen | ||||
| #: lib/cannery_web/live/home_live.ex:85 | ||||
| msgid "Instance Information" | ||||
| msgstr "" | ||||
|  | ||||
| #, elixir-format, ex-autogen | ||||
| #: lib/cannery_web/components/invite_card.ex:24 | ||||
| msgid "Invite Disabled" | ||||
| msgstr "" | ||||
|  | ||||
| #, elixir-format, ex-autogen | ||||
| #: lib/cannery_web/live/home_live.ex:116 | ||||
| msgid "Invite Only" | ||||
| msgstr "" | ||||
|  | ||||
| #, elixir-format, ex-autogen | ||||
| #: lib/cannery_web/components/topbar.ex:60 | ||||
| msgid "Invites" | ||||
| msgstr "" | ||||
|  | ||||
| #, elixir-format, ex-autogen | ||||
| #: lib/cannery_web/templates/user_session/new.html.heex:29 | ||||
| msgid "Keep me logged in for 60 days" | ||||
| msgstr "" | ||||
|  | ||||
| #, elixir-format, ex-autogen | ||||
| #: lib/cannery_web/live/ammo_group_live/index.html.heex:3 | ||||
| msgid "Listing Ammo" | ||||
| msgstr "" | ||||
|  | ||||
| #, elixir-format, ex-autogen | ||||
| #: lib/cannery_web/live/ammo_type_live/index.html.heex:3 | ||||
| msgid "Listing Ammo Types" | ||||
| msgstr "" | ||||
|  | ||||
| #, elixir-format, ex-autogen | ||||
| #: lib/cannery_web/live/ammo_group_live/index.ex:33 | ||||
| msgid "Listing Ammo groups" | ||||
| msgstr "" | ||||
|  | ||||
| #, elixir-format, ex-autogen | ||||
| #: lib/cannery_web/live/ammo_type_live/index.ex:34 | ||||
| msgid "Listing Ammo types" | ||||
| msgstr "" | ||||
|  | ||||
| #, elixir-format, ex-autogen | ||||
| #: lib/cannery_web/live/ammo_type_live/form_component.ex:153 | ||||
| #: lib/cannery_web/live/ammo_type_live/index.html.heex:40 | ||||
| msgid "Manufacturer" | ||||
| msgstr "" | ||||
|  | ||||
| #, elixir-format, ex-autogen | ||||
| #: lib/cannery_web/live/ammo_type_live/form_component.ex:59 | ||||
| #: lib/cannery_web/live/ammo_type_live/index.html.heex:26 | ||||
| #: lib/cannery_web/live/container_live/form_component.ex:60 | ||||
| #: lib/cannery_web/live/invite_live/form_component.ex:55 | ||||
| #: lib/cannery_web/live/tag_live/form_component.ex:50 | ||||
| msgid "Name" | ||||
| msgstr "" | ||||
|  | ||||
| #, elixir-format, ex-autogen | ||||
| #: lib/cannery_web/live/ammo_type_live/index.ex:29 | ||||
| msgid "New Ammo type" | ||||
| msgstr "" | ||||
|  | ||||
| #, elixir-format, ex-autogen | ||||
| #: lib/cannery_web/live/ammo_type_live/index.html.heex:8 | ||||
| msgid "No Ammo Types" | ||||
| msgstr "" | ||||
|  | ||||
| #, elixir-format, ex-autogen | ||||
| #: lib/cannery_web/live/ammo_type_live/show.html.heex:99 | ||||
| msgid "No ammo for this type" | ||||
| msgstr "" | ||||
|  | ||||
| #, elixir-format, ex-autogen | ||||
| #: lib/cannery_web/live/ammo_type_live/form_component.ex:119 | ||||
| #: lib/cannery_web/live/ammo_type_live/index.html.heex:33 | ||||
| #: lib/cannery_web/live/ammo_type_live/show.html.heex:42 | ||||
| msgid "Pressure" | ||||
| msgstr "" | ||||
|  | ||||
| #, elixir-format, ex-autogen | ||||
| #: lib/cannery_web/live/ammo_type_live/form_component.ex:126 | ||||
| #: lib/cannery_web/live/ammo_type_live/index.html.heex:34 | ||||
| #: lib/cannery_web/live/ammo_type_live/show.html.heex:43 | ||||
| msgid "Primer type" | ||||
| msgstr "" | ||||
|  | ||||
| #, elixir-format, ex-autogen | ||||
| #: lib/cannery_web/live/ammo_type_live/form_component.ex:133 | ||||
| #: lib/cannery_web/live/ammo_type_live/index.html.heex:35 | ||||
| msgid "Rimfire" | ||||
| msgstr "" | ||||
|  | ||||
| #, elixir-format, ex-autogen | ||||
| #: lib/cannery_web/live/ammo_type_live/form_component.ex:157 | ||||
| msgid "SKU" | ||||
| msgstr "" | ||||
|  | ||||
| #, elixir-format, ex-autogen | ||||
| #: lib/cannery_web/live/ammo_type_live/show.ex:45 | ||||
| msgid "Show Ammo type" | ||||
| msgstr "" | ||||
|  | ||||
| #, elixir-format, ex-autogen | ||||
| #: lib/cannery_web/live/ammo_type_live/index.html.heex:41 | ||||
| msgid "Sku" | ||||
| msgstr "" | ||||
|  | ||||
| #, elixir-format, ex-autogen | ||||
| #: lib/cannery_web/live/ammo_type_live/form_component.ex:86 | ||||
| msgid "Steel" | ||||
| msgstr "" | ||||
|  | ||||
| #, elixir-format, ex-autogen | ||||
| #: lib/cannery_web/live/ammo_type_live/form_component.ex:137 | ||||
| #: lib/cannery_web/live/ammo_type_live/index.html.heex:36 | ||||
| msgid "Tracer" | ||||
| msgstr "" | ||||
|  | ||||
| #, elixir-format, ex-autogen | ||||
| #: lib/cannery_web/components/container_card.ex:26 | ||||
| #: lib/cannery_web/live/container_live/show.html.heex:8 | ||||
| msgid "Description:" | ||||
| msgstr "" | ||||
|  | ||||
| #, elixir-format, ex-autogen | ||||
| #: lib/cannery_web/live/container_live/index.ex:23 | ||||
| #: lib/cannery_web/live/container_live/show.ex:67 | ||||
| msgid "Edit Container" | ||||
| msgstr "" | ||||
|  | ||||
| #, elixir-format, ex-autogen | ||||
| #: lib/cannery_web/live/container_live/index.ex:32 | ||||
| #: lib/cannery_web/live/container_live/index.html.heex:3 | ||||
| msgid "Listing Containers" | ||||
| msgstr "" | ||||
|  | ||||
| #, elixir-format, ex-autogen | ||||
| #: lib/cannery_web/live/invite_live/index.ex:42 | ||||
| #: lib/cannery_web/live/invite_live/index.html.heex:3 | ||||
| msgid "Listing Invites" | ||||
| msgstr "" | ||||
|  | ||||
| #, elixir-format, ex-autogen | ||||
| #: lib/cannery_web/live/tag_live/index.ex:34 | ||||
| #: lib/cannery_web/live/tag_live/index.html.heex:3 | ||||
| msgid "Listing Tags" | ||||
| msgstr "" | ||||
|  | ||||
| #, elixir-format, ex-autogen | ||||
| #: lib/cannery_web/live/container_live/form_component.ex:82 | ||||
| msgid "Location" | ||||
| @@ -404,6 +281,17 @@ msgstr "" | ||||
| msgid "Magazine, Clip, Ammo Box, etc" | ||||
| msgstr "" | ||||
|  | ||||
| #, elixir-format, ex-autogen | ||||
| #: lib/cannery_web/components/topbar.ex:53 | ||||
| msgid "Manage" | ||||
| msgstr "" | ||||
|  | ||||
| #, elixir-format, ex-autogen | ||||
| #: lib/cannery_web/live/ammo_type_live/form_component.ex:153 | ||||
| #: lib/cannery_web/live/ammo_type_live/index.html.heex:40 | ||||
| msgid "Manufacturer" | ||||
| msgstr "" | ||||
|  | ||||
| #, elixir-format, ex-autogen | ||||
| #: lib/cannery_web/live/container_live/form_component.ex:71 | ||||
| msgid "Metal ammo can with the anime girl sticker" | ||||
| @@ -414,11 +302,50 @@ msgstr "" | ||||
| msgid "My cool ammo can" | ||||
| msgstr "" | ||||
|  | ||||
| #, elixir-format, ex-autogen | ||||
| #: lib/cannery_web/live/ammo_type_live/form_component.ex:59 | ||||
| #: lib/cannery_web/live/ammo_type_live/index.html.heex:26 | ||||
| #: lib/cannery_web/live/container_live/form_component.ex:60 | ||||
| #: lib/cannery_web/live/invite_live/form_component.ex:55 | ||||
| #: lib/cannery_web/live/tag_live/form_component.ex:50 | ||||
| msgid "Name" | ||||
| msgstr "" | ||||
|  | ||||
| #, elixir-format, ex-autogen | ||||
| #: lib/cannery_web/live/ammo_type_live/index.ex:29 | ||||
| msgid "New Ammo type" | ||||
| msgstr "" | ||||
|  | ||||
| #, elixir-format, ex-autogen | ||||
| #: lib/cannery_web/live/container_live/index.ex:28 | ||||
| msgid "New Container" | ||||
| msgstr "" | ||||
|  | ||||
| #, elixir-format, ex-autogen | ||||
| #: lib/cannery_web/live/invite_live/index.ex:38 | ||||
| msgid "New Invite" | ||||
| msgstr "" | ||||
|  | ||||
| #, elixir-format, ex-autogen | ||||
| #: lib/cannery_web/live/tag_live/index.ex:29 | ||||
| msgid "New Tag" | ||||
| msgstr "" | ||||
|  | ||||
| #, elixir-format, ex-autogen | ||||
| #: lib/cannery_web/live/ammo_group_live/index.html.heex:8 | ||||
| msgid "No Ammo" | ||||
| msgstr "" | ||||
|  | ||||
| #, elixir-format, ex-autogen | ||||
| #: lib/cannery_web/live/ammo_type_live/index.html.heex:8 | ||||
| msgid "No Ammo Types" | ||||
| msgstr "" | ||||
|  | ||||
| #, elixir-format, ex-autogen | ||||
| #: lib/cannery_web/live/ammo_type_live/show.html.heex:99 | ||||
| msgid "No ammo for this type" | ||||
| msgstr "" | ||||
|  | ||||
| #, elixir-format, ex-autogen | ||||
| #: lib/cannery_web/live/container_live/show.html.heex:46 | ||||
| msgid "No ammo groups in this container" | ||||
| @@ -429,16 +356,161 @@ msgstr "" | ||||
| msgid "No containers" | ||||
| msgstr "" | ||||
|  | ||||
| #, elixir-format, ex-autogen | ||||
| #: lib/cannery_web/live/invite_live/index.html.heex:8 | ||||
| msgid "No invites" | ||||
| msgstr "" | ||||
|  | ||||
| #, elixir-format, ex-autogen | ||||
| #: lib/cannery_web/live/tag_live/index.html.heex:10 | ||||
| msgid "No tags" | ||||
| msgstr "" | ||||
|  | ||||
| #, elixir-format, ex-autogen | ||||
| #: lib/cannery_web/live/ammo_group_live/form_component.ex:89 | ||||
| #: lib/cannery_web/live/ammo_group_live/index.html.heex:32 | ||||
| msgid "Notes" | ||||
| msgstr "" | ||||
|  | ||||
| #, elixir-format, ex-autogen | ||||
| #: lib/cannery_web/components/ammo_group_card.ex:34 | ||||
| #: lib/cannery_web/live/ammo_group_live/show.html.heex:14 | ||||
| msgid "Notes:" | ||||
| msgstr "" | ||||
|  | ||||
| #, elixir-format, ex-autogen | ||||
| #: lib/cannery_web/live/container_live/form_component.ex:86 | ||||
| msgid "On the bookshelf" | ||||
| msgstr "" | ||||
|  | ||||
| #, elixir-format, ex-autogen | ||||
| #: lib/cannery_web/live/ammo_type_live/form_component.ex:119 | ||||
| #: lib/cannery_web/live/ammo_type_live/index.html.heex:33 | ||||
| #: lib/cannery_web/live/ammo_type_live/show.html.heex:42 | ||||
| msgid "Pressure" | ||||
| msgstr "" | ||||
|  | ||||
| #, elixir-format, ex-autogen | ||||
| #: lib/cannery_web/live/ammo_group_live/form_component.ex:82 | ||||
| #: lib/cannery_web/live/ammo_group_live/index.html.heex:29 | ||||
| msgid "Price paid" | ||||
| msgstr "" | ||||
|  | ||||
| #, elixir-format, ex-autogen | ||||
| #: lib/cannery_web/components/ammo_group_card.ex:41 | ||||
| #: lib/cannery_web/live/ammo_group_live/show.html.heex:21 | ||||
| msgid "Price paid:" | ||||
| msgstr "" | ||||
|  | ||||
| #, elixir-format, ex-autogen | ||||
| #: lib/cannery_web/live/ammo_type_live/form_component.ex:126 | ||||
| #: lib/cannery_web/live/ammo_type_live/index.html.heex:34 | ||||
| #: lib/cannery_web/live/ammo_type_live/show.html.heex:43 | ||||
| msgid "Primer type" | ||||
| msgstr "" | ||||
|  | ||||
| #, elixir-format, ex-autogen | ||||
| #: lib/cannery_web/live/home_live.ex:115 | ||||
| msgid "Public Signups" | ||||
| msgstr "" | ||||
|  | ||||
| #, elixir-format, ex-autogen | ||||
| #: lib/cannery_web/live/ammo_type_live/form_component.ex:133 | ||||
| #: lib/cannery_web/live/ammo_type_live/index.html.heex:35 | ||||
| msgid "Rimfire" | ||||
| msgstr "" | ||||
|  | ||||
| #, elixir-format, ex-autogen | ||||
| #: lib/cannery_web/live/ammo_type_live/form_component.ex:157 | ||||
| msgid "SKU" | ||||
| msgstr "" | ||||
|  | ||||
| #, elixir-format, ex-autogen | ||||
| #: lib/cannery_web/live/home_live.ex:63 | ||||
| msgid "Secure:" | ||||
| msgstr "" | ||||
|  | ||||
| #, elixir-format, ex-autogen | ||||
| #: lib/cannery_web/live/home_live.ex:66 | ||||
| msgid "Self-host your own instance, or use an instance from someone you trust." | ||||
| msgstr "" | ||||
|  | ||||
| #, elixir-format, ex-autogen | ||||
| #: lib/cannery_web/live/invite_live/index.html.heex:61 | ||||
| msgid "Set Unlimited" | ||||
| msgstr "" | ||||
|  | ||||
| #, elixir-format, ex-autogen | ||||
| #: lib/cannery_web/templates/user_settings/edit.html.heex:3 | ||||
| msgid "Settings" | ||||
| msgstr "" | ||||
|  | ||||
| #, elixir-format, ex-autogen | ||||
| #: lib/cannery_web/live/ammo_group_live/show.ex:39 | ||||
| msgid "Show Ammo group" | ||||
| msgstr "" | ||||
|  | ||||
| #, elixir-format, ex-autogen | ||||
| #: lib/cannery_web/live/ammo_type_live/show.ex:45 | ||||
| msgid "Show Ammo type" | ||||
| msgstr "" | ||||
|  | ||||
| #, elixir-format, ex-autogen | ||||
| #: lib/cannery_web/live/container_live/show.ex:66 | ||||
| msgid "Show Container" | ||||
| msgstr "" | ||||
|  | ||||
| #, elixir-format, ex-autogen | ||||
| #: lib/cannery_web/live/home_live.ex:73 | ||||
| msgid "Simple:" | ||||
| msgstr "" | ||||
|  | ||||
| #, elixir-format, ex-autogen | ||||
| #: lib/cannery_web/live/ammo_type_live/index.html.heex:41 | ||||
| msgid "Sku" | ||||
| msgstr "" | ||||
|  | ||||
| #, elixir-format, ex-autogen | ||||
| #: lib/cannery_web/live/ammo_type_live/form_component.ex:86 | ||||
| msgid "Steel" | ||||
| msgstr "" | ||||
|  | ||||
| #, elixir-format, ex-autogen | ||||
| #: lib/cannery_web/live/ammo_group_live/show.html.heex:45 | ||||
| msgid "Stored in" | ||||
| msgstr "" | ||||
|  | ||||
| #, elixir-format, ex-autogen | ||||
| #: lib/cannery_web/components/topbar.ex:35 | ||||
| msgid "Tags" | ||||
| msgstr "" | ||||
|  | ||||
| #, elixir-format, ex-autogen | ||||
| #: lib/cannery_web/live/tag_live/index.html.heex:6 | ||||
| msgid "Tags can be added to your containers to help you organize" | ||||
| msgstr "" | ||||
|  | ||||
| #, elixir-format, ex-autogen | ||||
| #: lib/cannery_web/live/tag_live/form_component.ex:60 | ||||
| msgid "Text color" | ||||
| msgstr "" | ||||
|  | ||||
| #, elixir-format, ex-autogen | ||||
| #: lib/cannery_web/live/home_live.ex:43 | ||||
| msgid "The self-hosted firearm tracker website" | ||||
| msgstr "" | ||||
|  | ||||
| #, elixir-format, ex-autogen | ||||
| #: lib/cannery_web/live/ammo_group_live/show.html.heex:50 | ||||
| msgid "This ammo group is not in a container" | ||||
| msgstr "" | ||||
|  | ||||
| #, elixir-format, ex-autogen | ||||
| #: lib/cannery_web/live/ammo_type_live/form_component.ex:137 | ||||
| #: lib/cannery_web/live/ammo_type_live/index.html.heex:36 | ||||
| msgid "Tracer" | ||||
| msgstr "" | ||||
|  | ||||
| #, elixir-format, ex-autogen | ||||
| #: lib/cannery_web/live/container_live/form_component.ex:75 | ||||
| msgid "Type" | ||||
| @@ -451,84 +523,12 @@ msgid "Type:" | ||||
| msgstr "" | ||||
|  | ||||
| #, elixir-format, ex-autogen | ||||
| #: lib/cannery_web/live/tag_live/form_component.ex:54 | ||||
| msgid "Background color" | ||||
| #: lib/cannery_web/live/invite_live/index.html.heex:102 | ||||
| msgid "Users" | ||||
| msgstr "" | ||||
|  | ||||
| #, elixir-format, ex-autogen | ||||
| #: lib/cannery_web/live/invite_live/index.html.leex:60 | ||||
| msgid "Disable" | ||||
| msgstr "" | ||||
|  | ||||
| #, elixir-format, ex-autogen | ||||
| #: lib/cannery_web/live/invite_live/index.ex:35 | ||||
| msgid "Edit Invite" | ||||
| msgstr "" | ||||
|  | ||||
| #, elixir-format, ex-autogen | ||||
| #: lib/cannery_web/live/tag_live/index.ex:23 | ||||
| msgid "Edit Tag" | ||||
| msgstr "" | ||||
|  | ||||
| #, elixir-format, ex-autogen | ||||
| #: lib/cannery_web/live/invite_live/index.html.leex:65 | ||||
| msgid "Enable" | ||||
| msgstr "" | ||||
|  | ||||
| #, elixir-format, ex-autogen | ||||
| #: lib/cannery_web/live/invite_live/index.html.leex:35 | ||||
| msgid "Invite Disabled" | ||||
| msgstr "" | ||||
|  | ||||
| #, elixir-format, ex-autogen | ||||
| #: lib/cannery_web/live/invite_live/index.ex:43 | ||||
| #: lib/cannery_web/live/invite_live/index.html.leex:3 | ||||
| msgid "Listing Invites" | ||||
| msgstr "" | ||||
|  | ||||
| #, elixir-format, ex-autogen | ||||
| #: lib/cannery_web/live/tag_live/index.ex:34 | ||||
| #: lib/cannery_web/live/tag_live/index.html.heex:3 | ||||
| msgid "Listing Tags" | ||||
| msgstr "" | ||||
|  | ||||
| #, elixir-format, ex-autogen | ||||
| #: lib/cannery_web/live/invite_live/index.ex:39 | ||||
| msgid "New Invite" | ||||
| msgstr "" | ||||
|  | ||||
| #, elixir-format, ex-autogen | ||||
| #: lib/cannery_web/live/tag_live/index.ex:29 | ||||
| msgid "New Tag" | ||||
| msgstr "" | ||||
|  | ||||
| #, elixir-format, ex-autogen | ||||
| #: lib/cannery_web/live/invite_live/index.html.leex:8 | ||||
| msgid "No invites" | ||||
| msgstr "" | ||||
|  | ||||
| #, elixir-format, ex-autogen | ||||
| #: lib/cannery_web/live/tag_live/index.html.heex:10 | ||||
| msgid "No tags" | ||||
| msgstr "" | ||||
|  | ||||
| #, elixir-format, ex-autogen | ||||
| #: lib/cannery_web/live/invite_live/index.html.leex:73 | ||||
| msgid "Set Unlimited" | ||||
| msgstr "" | ||||
|  | ||||
| #, elixir-format, ex-autogen | ||||
| #: lib/cannery_web/live/tag_live/index.html.heex:6 | ||||
| msgid "Tags can be added to your containers to help you organize" | ||||
| msgstr "" | ||||
|  | ||||
| #, elixir-format, ex-autogen | ||||
| #: lib/cannery_web/live/tag_live/form_component.ex:60 | ||||
| msgid "Text color" | ||||
| msgstr "" | ||||
|  | ||||
| #, elixir-format, ex-autogen | ||||
| #: lib/cannery_web/live/invite_live/index.html.leex:30 | ||||
| #: lib/cannery_web/components/invite_card.ex:19 | ||||
| msgid "Uses Left:" | ||||
| msgstr "" | ||||
|  | ||||
| @@ -536,3 +536,13 @@ msgstr "" | ||||
| #: lib/cannery_web/live/invite_live/form_component.ex:59 | ||||
| msgid "Uses left" | ||||
| msgstr "" | ||||
|  | ||||
| #, elixir-format, ex-autogen | ||||
| #: lib/cannery_web/live/home_live.ex:39 | ||||
| msgid "Welcome to %{name}" | ||||
| msgstr "" | ||||
|  | ||||
| #, elixir-format, ex-autogen | ||||
| #: lib/cannery_web/live/home_live.ex:67 | ||||
| msgid "Your data stays with you, period" | ||||
| msgstr "" | ||||
|   | ||||
| @@ -10,31 +10,11 @@ | ||||
| msgid "" | ||||
| msgstr "" | ||||
|  | ||||
| #, elixir-format, ex-autogen | ||||
| #: lib/cannery_web/templates/layout/email.html.heex:13 | ||||
| msgid "This email was sent from %{name}" | ||||
| msgstr "" | ||||
|  | ||||
| #, elixir-format, ex-autogen | ||||
| #: lib/cannery_web/templates/layout/email.txt.eex:10 | ||||
| msgid "This email was sent from %{name} at %{url}" | ||||
| msgstr "" | ||||
|  | ||||
| #, elixir-format, ex-autogen | ||||
| #: lib/cannery/accounts/email.ex:30 | ||||
| msgid "Confirm your %{name} account" | ||||
| msgstr "" | ||||
|  | ||||
| #, elixir-format, ex-autogen | ||||
| #: lib/cannery/accounts/email.ex:37 | ||||
| msgid "Reset your %{name} password" | ||||
| msgstr "" | ||||
|  | ||||
| #, elixir-format, ex-autogen | ||||
| #: lib/cannery/accounts/email.ex:44 | ||||
| msgid "Update your %{name} email" | ||||
| msgstr "" | ||||
|  | ||||
| #, elixir-format, ex-autogen | ||||
| #: lib/cannery_web/templates/email/confirm_email.html.eex:2 | ||||
| #: lib/cannery_web/templates/email/confirm_email.txt.eex:2 | ||||
| @@ -59,6 +39,26 @@ msgstr "" | ||||
| msgid "If you didn't request this change from %{url}, please ignore this." | ||||
| msgstr "" | ||||
|  | ||||
| #, elixir-format, ex-autogen | ||||
| #: lib/cannery/accounts/email.ex:37 | ||||
| msgid "Reset your %{name} password" | ||||
| msgstr "" | ||||
|  | ||||
| #, elixir-format, ex-autogen | ||||
| #: lib/cannery_web/templates/layout/email.html.heex:13 | ||||
| msgid "This email was sent from %{name}" | ||||
| msgstr "" | ||||
|  | ||||
| #, elixir-format, ex-autogen | ||||
| #: lib/cannery_web/templates/layout/email.txt.eex:10 | ||||
| msgid "This email was sent from %{name} at %{url}" | ||||
| msgstr "" | ||||
|  | ||||
| #, elixir-format, ex-autogen | ||||
| #: lib/cannery/accounts/email.ex:44 | ||||
| msgid "Update your %{name} email" | ||||
| msgstr "" | ||||
|  | ||||
| #, elixir-format, ex-autogen | ||||
| #: lib/cannery_web/templates/email/confirm_email.html.eex:4 | ||||
| msgid "Welcome to %{name}!" | ||||
|   | ||||
| @@ -1,116 +1,34 @@ | ||||
| ## This is a PO Template file. | ||||
| ## This file is a PO Template file. | ||||
| ## | ||||
| ## `msgid`s here are often extracted from source code. | ||||
| ## "msgid"s here are often extracted from source code. | ||||
| ## Add new translations manually only if they're dynamic | ||||
| ## 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. | ||||
| ## From Ecto.Changeset.cast/4 | ||||
| msgid "can't be blank" | ||||
| msgstr "" | ||||
|  | ||||
| ## From Ecto.Changeset.unique_constraint/3 | ||||
| msgid "has already been taken" | ||||
| msgstr "" | ||||
|  | ||||
| ## From Ecto.Changeset.put_change/3 | ||||
| msgid "is invalid" | ||||
| msgstr "" | ||||
|  | ||||
| ## From Ecto.Changeset.validate_acceptance/3 | ||||
| msgid "must be accepted" | ||||
| msgstr "" | ||||
|  | ||||
| ## From Ecto.Changeset.validate_format/3 | ||||
| msgid "has invalid format" | ||||
| msgstr "" | ||||
|  | ||||
| ## From Ecto.Changeset.validate_subset/3 | ||||
| msgid "has an invalid entry" | ||||
| msgstr "" | ||||
|  | ||||
| ## From Ecto.Changeset.validate_exclusion/3 | ||||
| msgid "is reserved" | ||||
| msgstr "" | ||||
|  | ||||
| ## From Ecto.Changeset.validate_confirmation/3 | ||||
| msgid "does not match confirmation" | ||||
| msgstr "" | ||||
|  | ||||
| ## From Ecto.Changeset.no_assoc_constraint/3 | ||||
| msgid "is still associated with this entry" | ||||
| msgstr "" | ||||
|  | ||||
| msgid "are still associated with this entry" | ||||
| msgstr "" | ||||
|  | ||||
| ## From Ecto.Changeset.validate_length/3 | ||||
| msgid "should be %{count} character(s)" | ||||
| msgid_plural "should be %{count} character(s)" | ||||
| msgstr[0] "" | ||||
| msgstr[1] "" | ||||
|  | ||||
| msgid "should have %{count} item(s)" | ||||
| msgid_plural "should have %{count} item(s)" | ||||
| msgstr[0] "" | ||||
| msgstr[1] "" | ||||
|  | ||||
| msgid "should be at least %{count} character(s)" | ||||
| msgid_plural "should be at least %{count} character(s)" | ||||
| msgstr[0] "" | ||||
| msgstr[1] "" | ||||
|  | ||||
| msgid "should have at least %{count} item(s)" | ||||
| msgid_plural "should have at least %{count} item(s)" | ||||
| msgstr[0] "" | ||||
| msgstr[1] "" | ||||
|  | ||||
| msgid "should be at most %{count} character(s)" | ||||
| msgid_plural "should be at most %{count} character(s)" | ||||
| msgstr[0] "" | ||||
| msgstr[1] "" | ||||
|  | ||||
| msgid "should have at most %{count} item(s)" | ||||
| msgid_plural "should have at most %{count} item(s)" | ||||
| msgstr[0] "" | ||||
| msgstr[1] "" | ||||
|  | ||||
| ## From Ecto.Changeset.validate_number/3 | ||||
| msgid "must be less than %{number}" | ||||
| msgstr "" | ||||
|  | ||||
| msgid "must be greater than %{number}" | ||||
| msgstr "" | ||||
|  | ||||
| msgid "must be less than or equal to %{number}" | ||||
| msgstr "" | ||||
|  | ||||
| msgid "must be greater than or equal to %{number}" | ||||
| msgstr "" | ||||
|  | ||||
| msgid "must be equal to %{number}" | ||||
| ## 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. | ||||
| msgid "" | ||||
| msgstr "" | ||||
|  | ||||
| #, elixir-format, ex-autogen | ||||
| #: lib/cannery/accounts/user.ex:128 | ||||
| msgid "did not change" | ||||
| #: lib/cannery/containers.ex:105 | ||||
| msgid "Container must be empty before deleting" | ||||
| msgstr "" | ||||
|  | ||||
| #, elixir-format, ex-autogen | ||||
| #: lib/cannery/accounts/user.ex:149 | ||||
| msgid "does not match password" | ||||
| #: lib/cannery_web/live/container_live/index.ex:54 | ||||
| #: lib/cannery_web/live/container_live/show.ex:52 | ||||
| msgid "Could not delete %{name}: %{error}" | ||||
| msgstr "" | ||||
|  | ||||
| #, elixir-format, ex-autogen | ||||
| #: lib/cannery/accounts/user.ex:186 | ||||
| msgid "is not valid" | ||||
| #: lib/cannery_web/live/container_live/index.ex:42 | ||||
| msgid "Could not find that container" | ||||
| msgstr "" | ||||
|  | ||||
| #, elixir-format, ex-autogen | ||||
| #: lib/cannery/accounts/user.ex:82 | ||||
| msgid "must have the @ sign and no spaces" | ||||
| #: lib/cannery_web/controllers/user_settings_controller.ex:67 | ||||
| msgid "Email change link is invalid or it has expired." | ||||
| msgstr "" | ||||
|  | ||||
| #, elixir-format, ex-autogen | ||||
| @@ -118,32 +36,14 @@ msgstr "" | ||||
| msgid "Error" | ||||
| msgstr "" | ||||
|  | ||||
| #, elixir-format, ex-autogen | ||||
| #: lib/cannery_web/views/error_view.ex:11 | ||||
| msgid "Internal Server Error" | ||||
| msgstr "" | ||||
|  | ||||
| #, elixir-format, ex-autogen | ||||
| #: lib/cannery_web/views/error_view.ex:9 | ||||
| msgid "Not found" | ||||
| msgstr "" | ||||
|  | ||||
| #, elixir-format, ex-autogen | ||||
| #: lib/cannery_web/views/error_view.ex:10 | ||||
| msgid "Unauthorized" | ||||
| msgstr "" | ||||
|  | ||||
| #, elixir-format, ex-autogen | ||||
| #: lib/cannery_web/templates/error/error.html.heex:28 | ||||
| msgid "Go back home" | ||||
| msgstr "" | ||||
|  | ||||
| #, elixir-format, ex-autogen | ||||
| #: 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:17 | ||||
| #: lib/cannery_web/templates/user_settings/edit.html.heex:58 | ||||
| msgid "Oops, something went wrong! Please check the errors below." | ||||
| #: lib/cannery_web/views/error_view.ex:11 | ||||
| msgid "Internal Server Error" | ||||
| msgstr "" | ||||
|  | ||||
| #, elixir-format, ex-autogen | ||||
| @@ -152,8 +52,16 @@ msgid "Invalid email or password" | ||||
| msgstr "" | ||||
|  | ||||
| #, elixir-format, ex-autogen | ||||
| #: lib/cannery_web/controllers/user_settings_controller.ex:67 | ||||
| msgid "Email change link is invalid or it has expired." | ||||
| #: lib/cannery_web/views/error_view.ex:9 | ||||
| msgid "Not found" | ||||
| msgstr "" | ||||
|  | ||||
| #, elixir-format, ex-autogen | ||||
| #: 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:17 | ||||
| #: lib/cannery_web/templates/user_settings/edit.html.heex:58 | ||||
| msgid "Oops, something went wrong! Please check the errors below." | ||||
| msgstr "" | ||||
|  | ||||
| #, elixir-format, ex-autogen | ||||
| @@ -178,11 +86,21 @@ msgstr "" | ||||
| msgid "Unable to delete user" | ||||
| msgstr "" | ||||
|  | ||||
| #, elixir-format, ex-autogen | ||||
| #: lib/cannery_web/views/error_view.ex:10 | ||||
| msgid "Unauthorized" | ||||
| msgstr "" | ||||
|  | ||||
| #, elixir-format, ex-autogen | ||||
| #: lib/cannery_web/controllers/user_confirmation_controller.ex:53 | ||||
| msgid "User confirmation link is invalid or it has expired." | ||||
| msgstr "" | ||||
|  | ||||
| #, elixir-format, ex-autogen | ||||
| #: lib/cannery_web/live/invite_live/index.ex:19 | ||||
| msgid "You are not authorized to view this page" | ||||
| msgstr "" | ||||
|  | ||||
| #, elixir-format, ex-autogen | ||||
| #: lib/cannery_web/controllers/user_auth.ex:160 | ||||
| msgid "You are not authorized to view this page." | ||||
| @@ -194,22 +112,21 @@ msgid "You must log in to access this page." | ||||
| msgstr "" | ||||
|  | ||||
| #, elixir-format, ex-autogen | ||||
| #: lib/cannery_web/live/container_live/index.ex:42 | ||||
| msgid "Could not find that container" | ||||
| #: lib/cannery/accounts/user.ex:128 | ||||
| msgid "did not change" | ||||
| msgstr "" | ||||
|  | ||||
| #, elixir-format, ex-autogen | ||||
| #: lib/cannery/containers.ex:105 | ||||
| msgid "Container must be empty before deleting" | ||||
| #: lib/cannery/accounts/user.ex:149 | ||||
| msgid "does not match password" | ||||
| msgstr "" | ||||
|  | ||||
| #, elixir-format, ex-autogen | ||||
| #: lib/cannery_web/live/container_live/index.ex:54 | ||||
| #: lib/cannery_web/live/container_live/show.ex:52 | ||||
| msgid "Could not delete %{name}: %{error}" | ||||
| #: lib/cannery/accounts/user.ex:186 | ||||
| msgid "is not valid" | ||||
| msgstr "" | ||||
|  | ||||
| #, elixir-format, ex-autogen | ||||
| #: lib/cannery_web/live/invite_live/index.ex:20 | ||||
| msgid "You are not authorized to view this page" | ||||
| #: lib/cannery/accounts/user.ex:82 | ||||
| msgid "must have the @ sign and no spaces" | ||||
| msgstr "" | ||||
|   | ||||
| @@ -11,8 +11,101 @@ msgid "" | ||||
| msgstr "" | ||||
|  | ||||
| #, elixir-format, ex-autogen | ||||
| #: lib/cannery_web/live/home_live.ex:94 | ||||
| msgid "Register to setup %{name}" | ||||
| #: lib/cannery_web/live/ammo_type_live/form_component.ex:193 | ||||
| #: lib/cannery_web/live/container_live/form_component.ex:126 | ||||
| #: lib/cannery_web/live/invite_live/form_component.ex:98 | ||||
| #: lib/cannery_web/live/tag_live/form_component.ex:101 | ||||
| msgid "%{name} created successfully" | ||||
| msgstr "" | ||||
|  | ||||
| #, elixir-format, ex-autogen | ||||
| #: lib/cannery_web/live/ammo_type_live/index.ex:41 | ||||
| #: lib/cannery_web/live/ammo_type_live/show.ex:39 | ||||
| #: lib/cannery_web/live/invite_live/index.ex:54 | ||||
| #: lib/cannery_web/live/invite_live/index.ex:120 | ||||
| #: lib/cannery_web/live/tag_live/index.ex:41 | ||||
| msgid "%{name} deleted succesfully" | ||||
| msgstr "" | ||||
|  | ||||
| #, elixir-format, ex-autogen | ||||
| #: lib/cannery_web/live/invite_live/index.ex:102 | ||||
| msgid "%{name} disabled succesfully" | ||||
| msgstr "" | ||||
|  | ||||
| #, elixir-format, ex-autogen | ||||
| #: lib/cannery_web/live/invite_live/index.ex:84 | ||||
| msgid "%{name} enabled succesfully" | ||||
| msgstr "" | ||||
|  | ||||
| #, elixir-format, ex-autogen | ||||
| #: lib/cannery_web/live/container_live/index.ex:47 | ||||
| #: lib/cannery_web/live/container_live/show.ex:42 | ||||
| msgid "%{name} has been deleted" | ||||
| msgstr "" | ||||
|  | ||||
| #, elixir-format, ex-autogen | ||||
| #: lib/cannery_web/live/invite_live/index.ex:68 | ||||
| msgid "%{name} updated succesfully" | ||||
| msgstr "" | ||||
|  | ||||
| #, elixir-format, ex-autogen | ||||
| #: lib/cannery_web/live/ammo_type_live/form_component.ex:179 | ||||
| #: lib/cannery_web/live/container_live/form_component.ex:108 | ||||
| #: lib/cannery_web/live/invite_live/form_component.ex:80 | ||||
| #: lib/cannery_web/live/tag_live/form_component.ex:83 | ||||
| msgid "%{name} updated successfully" | ||||
| msgstr "" | ||||
|  | ||||
| #, elixir-format, ex-autogen | ||||
| #: lib/cannery_web/controllers/user_settings_controller.ex:28 | ||||
| msgid "A link to confirm your email change has been sent to the new address." | ||||
| msgstr "" | ||||
|  | ||||
| #, elixir-format, ex-autogen | ||||
| #: lib/cannery_web/live/ammo_group_live/form_component.ex:151 | ||||
| msgid "Ammo group created successfully" | ||||
| msgstr "" | ||||
|  | ||||
| #, elixir-format, ex-autogen | ||||
| #: lib/cannery_web/live/ammo_group_live/index.ex:40 | ||||
| #: lib/cannery_web/live/ammo_group_live/show.ex:33 | ||||
| msgid "Ammo group deleted succesfully" | ||||
| msgstr "" | ||||
|  | ||||
| #, elixir-format, ex-autogen | ||||
| #: lib/cannery_web/live/ammo_group_live/form_component.ex:133 | ||||
| msgid "Ammo group updated successfully" | ||||
| msgstr "" | ||||
|  | ||||
| #, elixir-format, ex-autogen | ||||
| #: lib/cannery_web/live/invite_live/index.html.heex:84 | ||||
| #: lib/cannery_web/live/invite_live/index.html.heex:113 | ||||
| msgid "Are you sure you want to delete %{email}? This action is permanent!" | ||||
| msgstr "" | ||||
|  | ||||
| #, elixir-format, ex-autogen | ||||
| #: lib/cannery_web/live/ammo_type_live/show.html.heex:26 | ||||
| #: lib/cannery_web/live/container_live/index.html.heex:36 | ||||
| #: lib/cannery_web/live/container_live/show.html.heex:36 | ||||
| #: lib/cannery_web/live/tag_live/index.html.heex:36 | ||||
| msgid "Are you sure you want to delete %{name}?" | ||||
| msgstr "" | ||||
|  | ||||
| #, elixir-format, ex-autogen | ||||
| #: lib/cannery_web/live/invite_live/index.html.heex:36 | ||||
| msgid "Are you sure you want to delete the invite for %{name}?" | ||||
| msgstr "" | ||||
|  | ||||
| #, elixir-format, ex-autogen | ||||
| #: lib/cannery_web/live/ammo_group_live/index.html.heex:69 | ||||
| #: lib/cannery_web/live/ammo_group_live/show.html.heex:35 | ||||
| #: lib/cannery_web/live/ammo_type_live/index.html.heex:104 | ||||
| msgid "Are you sure you want to delete this ammo?" | ||||
| msgstr "" | ||||
|  | ||||
| #, elixir-format, ex-autogen | ||||
| #: lib/cannery_web/templates/user_settings/edit.html.heex:104 | ||||
| msgid "Are you sure you want to delete your account?" | ||||
| msgstr "" | ||||
|  | ||||
| #, elixir-format, ex-autogen | ||||
| @@ -22,13 +115,8 @@ msgid "Are you sure you want to log out?" | ||||
| msgstr "" | ||||
|  | ||||
| #, elixir-format, ex-autogen | ||||
| #: lib/cannery_web/templates/user_settings/edit.html.heex:104 | ||||
| msgid "Are you sure you want to delete your account?" | ||||
| msgstr "" | ||||
|  | ||||
| #, elixir-format, ex-autogen | ||||
| #: lib/cannery_web/controllers/user_settings_controller.ex:28 | ||||
| msgid "A link to confirm your email change has been sent to the new address." | ||||
| #: lib/cannery_web/live/invite_live/index.html.heex:59 | ||||
| msgid "Are you sure you want to make %{name} unlimited?" | ||||
| msgstr "" | ||||
|  | ||||
| #, elixir-format, ex-autogen | ||||
| @@ -61,36 +149,14 @@ msgstr "" | ||||
| msgid "Password updated successfully." | ||||
| msgstr "" | ||||
|  | ||||
| #, elixir-format, ex-autogen | ||||
| #: lib/cannery_web/controllers/user_confirmation_controller.ex:37 | ||||
| msgid "User confirmed successfully." | ||||
| msgstr "" | ||||
|  | ||||
| #, elixir-format, ex-autogen | ||||
| #: lib/cannery_web/controllers/user_registration_controller.ex:71 | ||||
| msgid "User created successfully." | ||||
| msgid "Please check your email to verify your account" | ||||
| msgstr "" | ||||
|  | ||||
| #, elixir-format, ex-autogen | ||||
| #: lib/cannery_web/controllers/user_settings_controller.ex:78 | ||||
| msgid "Your account has been deleted" | ||||
| msgstr "" | ||||
|  | ||||
| #, elixir-format, ex-autogen | ||||
| #: lib/cannery_web/live/ammo_group_live/form_component.ex:151 | ||||
| msgid "Ammo group created successfully" | ||||
| msgstr "" | ||||
|  | ||||
| #, elixir-format, ex-autogen | ||||
| #: lib/cannery_web/live/ammo_group_live/form_component.ex:133 | ||||
| msgid "Ammo group updated successfully" | ||||
| msgstr "" | ||||
|  | ||||
| #, elixir-format, ex-autogen | ||||
| #: lib/cannery_web/live/ammo_group_live/index.html.heex:69 | ||||
| #: lib/cannery_web/live/ammo_group_live/show.html.heex:35 | ||||
| #: lib/cannery_web/live/ammo_type_live/index.html.heex:104 | ||||
| msgid "Are you sure you want to delete this ammo?" | ||||
| #: lib/cannery_web/live/home_live.ex:94 | ||||
| msgid "Register to setup %{name}" | ||||
| msgstr "" | ||||
|  | ||||
| #, elixir-format, ex-autogen | ||||
| @@ -103,65 +169,11 @@ msgid "Saving..." | ||||
| msgstr "" | ||||
|  | ||||
| #, elixir-format, ex-autogen | ||||
| #: lib/cannery_web/live/ammo_type_live/show.html.heex:26 | ||||
| #: lib/cannery_web/live/container_live/index.html.heex:36 | ||||
| #: lib/cannery_web/live/container_live/show.html.heex:36 | ||||
| #: lib/cannery_web/live/tag_live/index.html.heex:36 | ||||
| msgid "Are you sure you want to delete %{name}?" | ||||
| #: lib/cannery_web/controllers/user_confirmation_controller.ex:37 | ||||
| msgid "User confirmed successfully." | ||||
| msgstr "" | ||||
|  | ||||
| #, elixir-format, ex-autogen | ||||
| #: lib/cannery_web/live/container_live/index.ex:47 | ||||
| #: lib/cannery_web/live/container_live/show.ex:42 | ||||
| msgid "%{name} has been deleted" | ||||
| msgstr "" | ||||
|  | ||||
| #, elixir-format, ex-autogen | ||||
| #: lib/cannery_web/live/invite_live/index.html.leex:53 | ||||
| msgid "Are you sure you want to delete the invite for %{name}?" | ||||
| msgstr "" | ||||
|  | ||||
| #, elixir-format, ex-autogen | ||||
| #: lib/cannery_web/live/ammo_type_live/form_component.ex:193 | ||||
| #: lib/cannery_web/live/container_live/form_component.ex:126 | ||||
| #: lib/cannery_web/live/invite_live/form_component.ex:98 | ||||
| #: lib/cannery_web/live/tag_live/form_component.ex:101 | ||||
| msgid "%{name} created successfully" | ||||
| msgstr "" | ||||
|  | ||||
| #, elixir-format, ex-autogen | ||||
| #: lib/cannery_web/live/ammo_type_live/index.ex:41 | ||||
| #: lib/cannery_web/live/ammo_type_live/show.ex:39 | ||||
| #: lib/cannery_web/live/invite_live/index.ex:51 | ||||
| #: lib/cannery_web/live/tag_live/index.ex:41 | ||||
| msgid "%{name} deleted succesfully" | ||||
| msgstr "" | ||||
|  | ||||
| #, elixir-format, ex-autogen | ||||
| #: lib/cannery_web/live/ammo_type_live/form_component.ex:179 | ||||
| #: lib/cannery_web/live/container_live/form_component.ex:108 | ||||
| #: lib/cannery_web/live/invite_live/form_component.ex:80 | ||||
| #: lib/cannery_web/live/tag_live/form_component.ex:83 | ||||
| msgid "%{name} updated successfully" | ||||
| msgstr "" | ||||
|  | ||||
| #, elixir-format, ex-autogen | ||||
| #: lib/cannery_web/live/ammo_group_live/index.ex:40 | ||||
| #: lib/cannery_web/live/ammo_group_live/show.ex:33 | ||||
| msgid "Ammo group deleted succesfully" | ||||
| msgstr "" | ||||
|  | ||||
| #, elixir-format, ex-autogen | ||||
| #: lib/cannery_web/live/invite_live/index.ex:99 | ||||
| msgid "%{name} disabled succesfully" | ||||
| msgstr "" | ||||
|  | ||||
| #, elixir-format, ex-autogen | ||||
| #: lib/cannery_web/live/invite_live/index.ex:81 | ||||
| msgid "%{name} enabled succesfully" | ||||
| msgstr "" | ||||
|  | ||||
| #, elixir-format, ex-autogen | ||||
| #: lib/cannery_web/live/invite_live/index.ex:65 | ||||
| msgid "%{name} updated succesfully" | ||||
| #: lib/cannery_web/controllers/user_settings_controller.ex:78 | ||||
| msgid "Your account has been deleted" | ||||
| msgstr "" | ||||
|   | ||||
		Reference in New Issue
	
	Block a user