Modul:Lang
Bu, sayı formatı
ve satırdaki birinci sayı
şablonlarında qullanılğan kod. O, 123 456,78
formatını qullanıp sayılar oquy ve köstere.
Misaller
deñiştirSayı kösterüv
deñiştir{{#invoke:Lang|formatNum|123456789,12}}
(ya da{{sayı formatı|123456789,12}}
) => 123 456 789,12{{#invoke:Lang|formatNum|123456789,12|R}}
(ya da{{sayı formatı|123456789,12|R}}
) => 123456789.12
Sayı tapuv
deñiştir{{#invoke:Lang|extractNum|menim 3 dostum bar}}
(ya da{{satırdaki birinci sayı|menim 3 dostum bar}}
) => 3{{#invoke:Lang|extractNum|Frenkistanda 66628000±500 kişi bar}}
(ya da{{satırdaki birinci sayı|Frenkistanda 66628000±500 kişi bar}}
) => 66628000
Lua kodunda:
local langModule = require('Module:Lang') local numPeople = langModule._extractNum('Frenkistanda 66628000±500 kişi bar')
local p = {};
local MULTIPLIER_WORDS = {
['biñ'] = 1e3,
['mln'] = 1e6,
['mlrd'] = 1e9,
};
function p.formatNum(frame)
local anum = frame.args[1] or '';
local outputType = frame.args[2] or '';
local lang = mw.language.new('ru');
local multiplier = 1
if (outputType == 'R') then
--biñ, mln, mlrd olumaq
for word, value in pairs(MULTIPLIER_WORDS) do
number, realWord = anum:match("(.*)%s*(" .. word .. ")%.?")
if realWord == word then
multiplier = multiplier * value
anum = number
end
end
end
-- boşluqlar yoq etmek:
local preprocessedNumber = anum:gsub("%s", "")
local preprocessedNumber = preprocessedNumber:gsub(" ", "")
local preprocessedNumber = preprocessedNumber:gsub(" ", "")
local num = lang:parseFormattedNumber(preprocessedNumber);
if num ~= nil then
if outputType == 'R' then
return num * multiplier
else
return lang:formatNum(num);
end
else
return anum;
end
end
function p._extractNum(s)
local num = s:match("(%d+([,.]%d+))")
if num == nil then
num = s:match("%d+")
end
return num
end
function p.extractNum(frame)
local anum = frame.args[1] or '';
local num = p._extractNum(anum)
return num
end
return p