Edit

kmx.io/kmxgit/lib/kmxgit_web/views/error_helpers.ex

Branch :

  • lib/kmxgit_web/views/error_helpers.ex
  • ## kmxgit
    ## Copyright 2022 kmx.io <contact@kmx.io>
    ##
    ## Permission is hereby granted to use this software granted
    ## the above copyright notice and this permission paragraph
    ## are included in all copies and substantial portions of this
    ## software.
    ##
    ## THIS SOFTWARE IS PROVIDED "AS-IS" WITHOUT ANY GUARANTEE OF
    ## PURPOSE AND PERFORMANCE. IN NO EVENT WHATSOEVER SHALL THE
    ## AUTHOR BE CONSIDERED LIABLE FOR THE USE AND PERFORMANCE OF
    ## THIS SOFTWARE.
    
    defmodule KmxgitWeb.ErrorHelpers do
      @moduledoc """
      Conveniences for translating and building error messages.
      """
    
      use Phoenix.HTML
    
      @doc """
      Generates tag for inlined form input errors.
      """
      def error_tag(form, field) do
        Enum.map(Keyword.get_values(form.errors, field), fn error ->
          content_tag(:span, translate_error(error),
            class: "invalid-feedback",
            phx_feedback_for: input_name(form, field)
          )
        end)
      end
    
      @doc """
      Translates an error message using gettext.
      """
      def translate_error({msg, opts}) do
        # When using gettext, we typically pass the strings we want
        # to translate as a static argument:
        #
        #     # Translate "is invalid" in the "errors" domain
        #     dgettext("errors", "is invalid")
        #
        #     # Translate the number of files with plural rules
        #     dngettext("errors", "1 file", "%{count} files", count)
        #
        # Because the error messages we show in our forms and APIs
        # are defined inside Ecto, we need to translate them dynamically.
        # This requires us to call the Gettext module passing our gettext
        # backend as first argument.
        #
        # Note we use the "errors" domain, which means translations
        # should be written to the errors.po file. The :count option is
        # set by Ecto and indicates we should also apply plural rules.
        if count = opts[:count] do
          Gettext.dngettext(KmxgitWeb.Gettext, "errors", msg, msg, count, opts)
        else
          Gettext.dgettext(KmxgitWeb.Gettext, "errors", msg, opts)
        end
      end
    end