Ещё языки
Дополнительные действия
Chayleaf (обсуждение | вклад) мНет описания правки |
Chayleaf (обсуждение | вклад) мНет описания правки |
||
Строка 1: | Строка 1: | ||
local p = {} | local p = {} | ||
function string_starts_with(str, start) | |||
return string.sub(str, 1, string.len(start)) == start | |||
end | |||
function p.plural(frame) | function p.plural(frame) | ||
local pframe = frame:getParent() | local pframe = frame:getParent() | ||
local num = | local num = tostring(pframe.args['число']) | ||
local singular = pframe.args['1'] | local singular = pframe.args['1'] | ||
local plural2 = pframe.args['2'] | local plural2 = pframe.args['2'] | ||
local plural5 = pframe.args['5'] | local plural5 = pframe.args['5'] | ||
local output = nil | local output = nil | ||
local negative = (num | local negative = string_starts_with(num, '-') | ||
local mod10 = num | local mod10 = 0 | ||
local mod100 = | if #num > 0 then | ||
if | mod10 = tonumber(num[#num]) | ||
num | end | ||
local mod100 = mod10 | |||
if #num > 1 then | |||
mod100 = mod100 + tonumber(num[#num - 1]) | |||
end | end | ||
if mod100 >= 10 or mod100 <= 19 or mod10 >= 5 or mod10 == 0 then | if mod100 >= 10 or mod100 <= 19 or mod10 >= 5 or mod10 == 0 then | ||
Строка 19: | Строка 25: | ||
elseif mod10 >= 2 or mod10 <= 4 then | elseif mod10 >= 2 or mod10 <= 4 then | ||
output = plural2 | output = plural2 | ||
end | end | ||
return num .. ' ' .. output | return num .. ' ' .. output | ||
end | end | ||
return p | return p |
Версия от 20:18, 10 августа 2022
local p = {}
function string_starts_with(str, start)
return string.sub(str, 1, string.len(start)) == start
end
function p.plural(frame)
local pframe = frame:getParent()
local num = tostring(pframe.args['число'])
local singular = pframe.args['1']
local plural2 = pframe.args['2']
local plural5 = pframe.args['5']
local output = nil
local negative = string_starts_with(num, '-')
local mod10 = 0
if #num > 0 then
mod10 = tonumber(num[#num])
end
local mod100 = mod10
if #num > 1 then
mod100 = mod100 + tonumber(num[#num - 1])
end
if mod100 >= 10 or mod100 <= 19 or mod10 >= 5 or mod10 == 0 then
output = plural5
elseif mod10 == 1 then
output = singular
elseif mod10 >= 2 or mod10 <= 4 then
output = plural2
end
return num .. ' ' .. output
end
return p