local p = {}
local m_languages = require("Module:languages")
-- 輔助函數:格式化日期連結
local function formatDateLink(lang, year, month, day, prefix)
-- 構建維基連結
local link = string.format("Wiktionary:外語每日一詞/存檔/%s年/%s月#%s日",
year, month, day)
local prefixText = prefix or ""
if prefix == nil then
prefixText = "、"
end
-- 使用中文格式的日期顯示
local date = string.format("%s年%s月%s日", year, month, day)
return string.format('%s[[%s|%s]]',
prefixText,
link,
date)
end
-- 輔助函數:檢查日期是否已過
local function hasDatePassed(year, month, day)
local current = os.time()
local target = os.time({
year = year,
month = month,
day = day,
hour = 0,
min = 0,
sec = 0
})
return current >= target
end
-- 入口函數
function p.show(frame)
local parent_args = frame:getParent().args
local params = {
[1] = {required = true, default = "und"},
[2] = {required = true, default = "2024"},
[3] = {required = true, default = "8月"},
[4] = {required = true, default = "1日"},
}
local args = require("Module:parameters").process(parent_args, params)
local lang = args[1] -- 語言代碼
local year = tonumber(args[2])
local monthStr = args[3] -- 格式:「3月」
local dayStr = args[4] -- 格式:「7日」
-- 檢查月份格式
local month = monthStr:match("^(%d+)月$")
if not month then
error('如果此頁面內容來自英語維基詞典,請將使用了 Template:fwotd 的部分移除。')
end
month = tonumber(month)
local day = dayStr:match("^(%d+)日$")
if not day then
error('格式:{{fwotd|語言代碼|yyyy|x月|y日}}')
end
day = tonumber(day)
-- 取得語言名稱
local langName = m_languages.getByCode(lang):getCanonicalName()
if not langName then
langName = lang
end
-- 建立分類文字
local categories = ''
local namespace = mw.title.getCurrentTitle().namespace
if namespace == 0 or namespace == 118 then
categories = string.format(
'\n[[Category:%s外語每日一詞]]\n[[Category:外語每日一詞存檔]]',
langName
)
end
-- 如果日期尚未到來,只回傳分類
if not hasDatePassed(year, month, day) then
return categories
end
-- 產生輸出
local output = mw.html.create('div')
output:addClass('was-wotd')
output:addClass('floatright')
output:css('margin-right', '15px')
output:css('clear', 'both')
local small = output:tag('small')
small:attr('title', string.format(
'本詞於%s年%s月%s日獲選為維基詞典外語每日一詞',
year, month, day
))
-- 添加主要日期連結
small:wikitext(formatDateLink(
lang, year, month, day,
'外語每日一詞 – '
))
-- 添加額外的日期連結(如果有的話)
if args[5] and args[6] and args[7] then
small:wikitext(formatDateLink(
lang, args[5], args[6], args[7]
))
end
if args[8] and args[9] and args[10] then
small:wikitext(formatDateLink(
lang, args[8], args[9], args[10]
))
end
return tostring(output) .. categories
end
return p