# `Localize.PersonName.MF2`
[🔗](https://github.com/elixir-localize/localize_person_names/blob/v0.1.0/lib/localize/person_name/mf2.ex#L1)

MF2 custom function for locale-aware person name formatting.

Implements `Localize.Message.Function` so that `%Localize.PersonName{}`
structs can be formatted directly inside MF2 messages:

    {$name :personName}
    {$name :personName format=long formality=formal}

## Registration

### Application config (recommended for most projects)

    # config/config.exs
    config :localize, :mf2_functions, %{
      "personName" => Localize.PersonName.MF2
    }

### Per-call

    Localize.Message.format(
      "{$name :personName format=long}",
      %{"name" => person},
      locale: :en,
      functions: %{"personName" => Localize.PersonName.MF2}
    )

## Supported MF2 options

| MF2 option | Maps to | Values |
|---|---|---|
| `format` | `:format` | `short`, `medium`, `long` |
| `formality` | `:formality` | `formal`, `informal` |
| `usage` | `:usage` | `addressing`, `referring`, `monogram` |
| `order` | `:order` | `givenFirst`, `surnameFirst`, `sorting` |

The `:locale` is inherited from the MF2 message's interpreter
options and does not need to be specified as an MF2 function
option.

---

*Consult [api-reference.md](api-reference.md) for complete listing*
