Modul:Plural
Aspect
Acest modul Lua formează un număr urmat de substantivul corect acordat, conform regulilor limbii române:
- 1 folosește forma de singular: 1 locuitor;
- 0 și numerele care se termină în 1–19 (modulo 100) folosesc prima formă de plural: 0 locuitori, 2 locuitori, 15 locuitori, 112 locuitori;
- toate celelalte numere (20 și mai mult, precum și 100, 200 etc.) folosesc prepoziția de urmată de plural: 20 de locuitori, 1.234 de locuitori, 100 de locuitori.
Numărul este formatat cu separatorul de mii al limbii române (1.234).
Utilizare în șabloane
Modulul este folosit de Format:Plural:
{{Plural|număr|singular|plural 1|plural 2}}
- Parametri
1– numărul (obligatoriu). Se acceptă și numere formatate, de exemplu1.234.2– forma de singular (obligatoriu).3– prima formă de plural (opțional). Dacă lipsește, se caută în Modul:Plural/data; dacă nici acolo nu există, se adaugă -i la singular.4– forma folosită pentru numere ≥ 20 (opțional). Dacă lipsește, se folosește de + prima formă de plural.
- Exemple
| Cod | Rezultat |
|---|---|
{{Plural|1|locuitor}} |
1 locuitor |
{{Plural|15|locuitor}} |
15 locuitori |
{{Plural|20|locuitor}} |
20 de locuitori |
{{Plural|1234|locuitor|locuitori}} |
1.234 de locuitori |
{{Plural|1234|locuitor|locuitori|de locuitori}} |
1.234 de locuitori |
{{Plural|0|casă}} |
0 case |
Utilizare în alte module
local Plural = require('Modul:Plural')
Plural.build_plural(1234, 'locuitor', 'locuitori') -- "1.234 de locuitori"
Plural.build_form(15, 'locuitor') -- "locuitori" (fără număr)
Plural.build_first_plural('copil') -- forma din Modul:Plural/data, altfel „copili”
Funcții
p.get_plural(frame)- Punct de intrare pentru
{{#invoke:Plural|get_plural}}(apelat prin Format:Plural). Citește parametrii 1–4 descriși mai sus. Dacă numărul sau singularul lipsesc ori numărul nu poate fi interpretat, afișează un mesaj de eroare. p.get_first_plural(frame)- Returnează prima formă de plural a cuvântului din parametrul 1.
p.build_plural(count, singular, first_plural, second_plural)- Returnează numărul formatat urmat de forma acordată.
counttrebuie să fie un număr Lua; ultimii doi parametri sunt opționali. p.build_form(count, singular, first_plural, second_plural)- La fel ca
build_plural, dar returnează doar forma cuvântului, fără număr. p.build_first_plural(singular)- Returnează pluralul din Modul:Plural/data sau, în lipsa lui, singularul cu terminația -i.
Date
Pluralele neregulate sunt păstrate în Modul:Plural/data, sub forma unui tabel plural (singular → plural). Exemplu:
return { plural = { ['copil'] = 'copii', ['ochi'] = 'ochi' } }
Dependențe
local getArgs = require('Module:Arguments').getArgs
local lang = mw.getLanguage("ro")
local p = {}
function p.build_first_plural(singular)
local plural = mw.loadData("Modul:Plural/data").plural
if plural[singular] ~= nil then
return plural[singular]
else
return string.format("%si", singular)
end
end
function p.build_plural(count, singular, first_plural, second_plural)
local form
if count == 1 then
form = singular
elseif count == 0 or count ~= nil and (count%100 > 0 and count%100 < 20) then
if first_plural == nil then
form = p.build_first_plural(singular)
else
form = first_plural
end
else
if second_plural == nil and first_plural == nil then
form = "de " .. p.build_first_plural(singular)
elseif first_plural ~= nil then
form = "de " .. first_plural
else
form = second_plural
end
end
return string.format("%s %s", lang:formatNum(count), form)
end
function p.get_plural(frame)
-- if we don't have any args, try to get them from the template
if frame.args[1] == nil then
origArgs = getArgs(frame, { wrappers = { 'Format:Plural' } })
else
origArgs = frame.args
end
local form = ""
local count = lang:parseFormattedNumber(origArgs[1])
local singular = origArgs[2]
local first_plural = nil
local second_plural = nil
if origArgs[3] ~= nil then
first_plural = origArgs[3]
end
if origArgs[4] ~= nil then
local first_plural = origArgs[4]
end
return p.build_plural(count, singular, first_plural, second_plural)
end
function p.get_first_plural(frame)
if frame.args or frame.args[1] == nil then
origArgs = getArgs(frame, { wrappers = { 'Format:Plural' } })
else
origArgs = frame.args
end
return p.build_first_plural(origArgs[1])
end
return p