Module:LatestUpdate: Difference between revisionsGive feedback
Jump to navigation
Jump to search
No edit summary |
Added Plural rules for different languages |
||
| Line 1: | Line 1: | ||
local p = {} | local p = {} | ||
local data = mw.loadJsonData("Data:LatestUpdate.json") | local data = mw.loadJsonData("Data:LatestUpdate.json") | ||
local update = data.latest_update or {} | local update = data.latest_update or {} | ||
local month_map = { | local month_map = { | ||
January = 1, | January = 1, | ||
| Line 19: | Line 17: | ||
November = 11, | November = 11, | ||
December = 12 | December = 12 | ||
} | |||
-- Plural rules | |||
local plural_rules = { | |||
-- English | |||
en = function(n) | |||
return n == 1 and 1 or 2 | |||
end, | |||
-- Spanish | |||
es = function(n) | |||
return n == 1 and 1 or 2 | |||
end, | |||
-- French | |||
fr = function(n) | |||
return (n == 0 or n == 1) and 1 or 2 | |||
end, | |||
-- Korean (no plural distinction) | |||
ko = function(n) | |||
return 1 | |||
end, | |||
-- Russian | |||
ru = function(n) | |||
if n % 10 == 1 and n % 100 ~= 11 then | |||
return 1 | |||
elseif n % 10 >= 2 and n % 10 <= 4 and (n % 100 < 10 or n % 100 >= 20) then | |||
return 2 | |||
else | |||
return 3 | |||
end | |||
end, | |||
-- Turkish | |||
tr = function(n) | |||
return 1 | |||
end, | |||
-- Czech | |||
cs = function(n) | |||
if n == 1 then | |||
return 1 | |||
elseif n >= 2 and n <= 4 then | |||
return 2 | |||
else | |||
return 3 | |||
end | |||
end, | |||
-- Chinese (simplified) | |||
["zh-hans"] = function(n) | |||
return 1 | |||
end, | |||
-- Chinese (traditional) | |||
["zh-hant"] = function(n) | |||
return 1 | |||
end, | |||
-- uncomment when needed | |||
-- pl = function(n) | |||
-- if n == 1 then return 1 | |||
-- elseif n % 10 >= 2 and n % 10 <= 4 and (n % 100 < 10 or n % 100 >= 20) then return 2 | |||
-- else return 3 end | |||
-- end, | |||
-- uk = function(n) | |||
-- if n % 10 == 1 and n % 100 ~= 11 then return 1 | |||
-- elseif n % 10 >= 2 and n % 10 <= 4 and (n % 100 < 10 or n % 100 >= 20) then return 2 | |||
-- else return 3 end | |||
-- end, | |||
-- de = function(n) | |||
-- return n == 1 and 1 or 2 | |||
-- end, | |||
-- it = function(n) | |||
-- return n == 1 and 1 or 2 | |||
-- end, | |||
-- pt = function(n) | |||
-- return n == 1 and 1 or 2 | |||
-- end | |||
} | |||
local translations = { | |||
en = { | |||
[1] = "%d day ago", | |||
[2] = "%d days ago" | |||
}, | |||
es = { | |||
[1] = "hace %d día", | |||
[2] = "hace %d días" | |||
}, | |||
fr = { | |||
[1] = "il y a %d jour", | |||
[2] = "il y a %d jours" | |||
}, | |||
ko = { | |||
[1] = "%d일 전" | |||
}, | |||
ru = { | |||
[1] = "%d день назад", | |||
[2] = "%d дня назад", | |||
[3] = "%d дней назад" | |||
}, | |||
tr = { | |||
[1] = "%d gün önce" | |||
}, | |||
cs = { | |||
[1] = "před %d dnem", | |||
[2] = "před %d dny", | |||
[3] = "před %d dny" | |||
}, | |||
["zh-hans"] = { | |||
[1] = "%d天前" | |||
}, | |||
["zh-hant"] = { | |||
[1] = "%d天前" | |||
}, | |||
-- uncomment when needed | |||
-- pl = { | |||
-- [1] = "%d dzień temu", | |||
-- [2] = "%d dni temu", | |||
-- [3] = "%d dni temu" | |||
-- }, | |||
-- uk = { | |||
-- [1] = "%d день тому", | |||
-- [2] = "%d дні тому", | |||
-- [3] = "%d днів тому" | |||
-- }, | |||
-- de = { | |||
-- [1] = "vor %d Tag", | |||
-- [2] = "vor %d Tagen" | |||
-- }, | |||
-- it = { | |||
-- [1] = "%d giorno fa", | |||
-- [2] = "%d giorni fa" | |||
-- }, | |||
-- pt = { | |||
-- [1] = "há %d dia", | |||
-- [2] = "há %d dias" | |||
-- } | |||
} | } | ||
| Line 37: | Line 196: | ||
end | end | ||
function p.days_since() | function p.days_since() | ||
local month_number = getMonthNumber(update.month) | local month_number = getMonthNumber(update.month) | ||
| Line 64: | Line 222: | ||
end | end | ||
local function normalize_lang(lang) | |||
function p.days_since_text() | if not lang or lang == "" then | ||
return "en" | |||
end | |||
return string.gsub(lang, "^/", "") | |||
end | |||
function p.days_since_text(frame) | |||
local args = frame.args or {} | |||
local lang = normalize_lang(args.lang or args[1] or "en") | |||
if not translations[lang] then | |||
lang = "en" | |||
end | |||
local days = p.days_since() | local days = p.days_since() | ||
local plural_rule = plural_rules[lang] or plural_rules.en | |||
local form_index = plural_rule(days) | |||
local template = translations[lang][form_index] | |||
return string.format(template, days) | |||
end | end | ||
return p | return p | ||