Modulo:AraboTr
Aspetto
La documentazione per questo modulo può essere creata in Modulo:AraboTr/man
local p = {}
function p.traslittera(frame)
local testo = frame.args[1] or ""
if testo == "" then return "" end
local originale = testo
-- 1. Gestione Articolo (Google preferisce 'al' unito senza raddoppiare la solare)
testo = mw.ustring.gsub(testo, "^ال", "al")
testo = mw.ustring.gsub(testo, "%sال", " al")
-- 2. Mappatura Caratteri Semplificata (Più vicina ai suoni di Google)
local map = {
['ب']='b', ['ت']='t', ['ث']='th', ['ج']='j', ['ح']='h', ['خ']='kh',
['د']='d', ['ذ']='dh', ['ر']='r', ['ز']='z', ['س']='s', ['ش']='sh',
['ص']='s', ['ض']='d', ['ط']='t', ['ظ']='z', ['ع']='a', ['غ']='gh',
['ف']='f', ['ق']='q', ['ك']='k', ['ل']='l', ['م']='m', ['ن']='n',
['ه']='h', ['و']='u', ['ي']='y', ['ة']='at', ['أ']='a', ['إ']='i',
['ا']='a', ['آ']='a', ['ى']='a', ['\217\145']='' -- Rimuoviamo la shadda per ora
}
local res = ""
for i = 1, mw.ustring.len(testo) do
local char = mw.ustring.sub(testo, i, i)
res = res .. (map[char] or char)
end
-- 3. Pulizia Post-Elaborazione come Google
res = res:lower()
-- Corregge i raddoppiamenti antiestetici (es. 'iyiy' -> 'i')
res = res:gsub("yy", "y"):gsub("uu", "u"):gsub("ii", "i")
-- Gestione 'at' finale (Stato costrutto vs fine frase)
res = res:gsub("at%s", "at "):gsub("at$", "a")
-- Inserimento vocali "probabili" (Euristiche per nomi comuni)
res = res:gsub("almlk", "almalak") -- Trasforma al-mlk in al-malak
res = res:gsub("iyin", "iayn"):gsub("iyayn", "iayn")
-- 4. Output
return '<span lang="ar" dir="rtl">' .. originale .. '</span> (<i>' .. res .. '</i>)'
end
return p -- {{#invoke:AraboTr|traslittera|الشَّمْس}}