A simple lookup table is currently used to transliterate Unicode codepoints into Latin characters. While this is acceptably accurate for some languages (e.g. chinese characters to pinyin), it fails badly in languages with more complex transliteration rules.
Thankfully, the Unicode CLDR Transliteration Guidelines has done the heavy lifting.
Most platforms tap into this data through the ICU4C library. Personally I think the API is excellent, but calling C code from Erlang/Elixir has always been iffy.
I’m keen to hear what others have to say.