الفرق بين المراجعتين لصفحة: «وحدة:Age»

أُزيل ١٬١٧٥ بايت ،  ٢٠ نوفمبر ٢٠٢١
ط
مراجعة واحدة
(update from Module:Age/sandbox; this aids localization; used at bnwiki + bswiki)
ط (مراجعة واحدة)
سطر ٣: سطر ٣:
local mtext = {
local mtext = {
-- Message and other text that should be localized.
-- Message and other text that should be localized.
-- Also need to localize text in table names in function dateDifference.
['mt-bad-param1'] =            'Invalid parameter $1',
['mt-bad-param1'] =            'Invalid parameter $1',
['mt-bad-param2'] =            'Parameter $1=$2 is invalid',
['mt-bad-param2'] =            'Parameter $1=$2 is invalid',
سطر ٢٦: سطر ٢٥:
['mt-template-bad-name'] =      'The specified template name is not valid',
['mt-template-bad-name'] =      'The specified template name is not valid',
['mt-template-x'] =            'The template invoking this must have "|template=x" where x is the wanted operation',
['mt-template-x'] =            'The template invoking this must have "|template=x" where x is the wanted operation',
['txt-and'] =                  ' and ',
['txt-age'] =                  '(age ',
['txt-or'] =                   ' or ',
['txt-aged'] =                 ' (aged ',
['txt-category'] =             'Category:Age error',
['txt-and'] =                   '، و ',
['txt-comma-and'] =            ', and ',
['txt-comma-and'] =            '، و ',
['txt-error'] =                'Error: ',
['txt-error'] =                'خطأ: ',
['txt-format-default'] =        'mf',  -- 'df' (day first = dmy) or 'mf' (month first = mdy)
['txt-or'] =                   ' أو ',
['txt-module-convertnumeric'] = 'Module:ConvertNumeric',
['txt-module-date'] =          'Module:Date',
['txt-sandbox'] =              'sandbox',
['txt-bda'] = '<span style="display:none"> (<span class="bday">$1</span>) </span>$2<span class="noprint ForceAgeToShow"> (age&nbsp;$3)</span>',
['txt-dda'] = '$2<span style="display:none">($1)</span> (aged&nbsp;$3)',
['txt-bda-disp'] = 'disp_raw',  -- disp_raw → age is a number only; disp_age → age is a number and unit (normally years but months or days if very young)
['txt-dda-disp'] = 'disp_raw',
['txt-dmy'] = '%-d %B %-Y',
['txt-mdy'] = '%B %-d, %-Y',
}
 
local isWarning = {
['mt-bad-param1'] = true,
}
}


local abbr_plural = {
y = 'سنوات',
m = 'شهور',
w = 'أسابيع',
d = 'أيام',
H = 'ساعات',
M = 'دقائق',
S = 'ثواني',
}
local translate, from_en, to_en, isZero
local translate, from_en, to_en, isZero
if translate then
if translate then
سطر ٦٤: سطر ٦٠:
-- Return objects exported from the date module or its sandbox.
-- Return objects exported from the date module or its sandbox.
if not _Date then
if not _Date then
local sandbox = frame:getTitle():find(mtext['txt-sandbox'], 1, true) and ('/' .. mtext['txt-sandbox']) or ''
local sandbox = frame:getTitle():find('ملعب', 1, true) and '/ملعب' or ''
local datemod = require(mtext['txt-module-date'] .. sandbox)
local datemod = require('Module:Date2' .. sandbox)
local realDate = datemod._Date
local realDate = datemod._Date
_currentDate = datemod._current
_currentDate = datemod._current
سطر ١١٦: سطر ١١٢:
end
end
return text
return text
end
local function dateFormat(args)
-- Return string for wanted date format.
local default = mtext['txt-format-default']
local other = default == 'df' and 'mf' or 'df'
local wanted = stripToNil(args[other]) and other or default
return wanted == 'df' and mtext['txt-dmy'] or mtext['txt-mdy']
end
local function substituteParameters(text, ...)
-- Return text after substituting any given parameters for $1, $2, etc.
return mw.message.newRawMessage(text, ...):plain()
end
end


سطر ١٣٨: سطر ١٢١:
end
end


local function message(msg, ...)
local function message(msg, id)
-- Return formatted message text for an error or warning.
-- Return formatted message text for an error or warning.
local function getText(msg)
local function getText(msg)
return mtext[msg] or error('Bug: message "' .. tostring(msg) .. '" not defined')
return mtext[msg] or error('Bug: message "' .. tostring(msg) .. '" not defined')
end
local text
if type(msg) == 'table' then
text = getText(msg[1])
local rep = {}
for i, v in ipairs(msg) do
if i > 1 then
rep['$' .. (i - 1)] = v
end
end
text = text:gsub('$%d+', rep)
else
text = getText(msg)
end
end
local categories = {
local categories = {
error = mtext['txt-category'],
error = '[[Category:Age error]]',
warning = mtext['txt-category'],
warning = '[[Category:Age error]]',  -- same as error until determine whether 'Age warning' would be worthwhile
}
}
local a, b, k, category
local a, b, category
local text = substituteParameters(getText(msg), ...)
if id == 'warning' then
if isWarning[msg] then
a = '<sup>[<i>'
a = '<sup>[<i>'
b = '</i>]</sup>'
b = '</i>]</sup>'
k = 'warning'
else
else
a = '<strong class="error">' .. getText('txt-error')
a = '<strong class="error">' .. getText('txt-error')
b = '</strong>'
b = '</strong>'
k = 'error'
end
end
if mw.title.getCurrentTitle():inNamespaces(0) then
if mw.title.getCurrentTitle():inNamespaces(0) then
-- Category only in namespaces: 0=article.
-- Category only in namespaces: 0=article.
category = '[[' .. categories[k] .. ']]'
category = categories[id or 'error']
end
end
return
return
سطر ١٩٥: سطر ١٨٨:
-- i == 1 for the first number which can optionally start with an uppercase letter.
-- i == 1 for the first number which can optionally start with an uppercase letter.
number = tostring(number)
number = tostring(number)
return require(mtext['txt-module-convertnumeric']).spell_number(
return require('Module:ConvertNumeric').spell_number(
number,
number,
nil,                      -- fraction numerator
nil,                      -- fraction numerator
سطر ٢٤٧: سطر ٢٤٠:
result = '<span data-sort-value="_SORTKEY_♠"></span>'
result = '<span data-sort-value="_SORTKEY_♠"></span>'
end
end
return (result:gsub('_SORTKEY_', sortKey))
return result:gsub('_SORTKEY_', sortKey)
end
end
end
end
سطر ٢٧٤: سطر ٢٦٧:
sep = {
sep = {
comma = 'sep_comma',
comma = 'sep_comma',
[','] = 'sep_comma',
['،'] = 'sep_comma',
serialcomma = 'sep_serialcomma',
serialcomma = 'sep_serialcomma',
space = 'sep_space',
space = 'sep_space',
سطر ٢٩٣: سطر ٢٨٦:
hm = { 'H', 'M', id = 'hm' },
hm = { 'H', 'M', id = 'hm' },
hms = { 'H', 'M', 'S', id = 'hms' },
hms = { 'H', 'M', 'S', id = 'hms' },
M = { 'M', id = 'M' },
s = { 'S', id = 's' },
d = { 'd', id = 'd' },
d = { 'd', id = 'd' },
dh = { 'd', 'H', id = 'dh' },
dh = { 'd', 'H', id = 'dh' },
سطر ٣٥٠: سطر ٣٤١:
date = date + item
date = date + item
if not date then
if not date then
return message('mt-cannot-add', item)
return message({ 'mt-cannot-add', item })
end
end
end
end
سطر ٤٠٦: سطر ٣٩٧:
end
end
local name = names[components[i]]
local name = names[components[i]]
--if islist then
--name = abbr_plural[components[i]] -- إضافة اسم الجمع باللغة العربية
--end
--mw.log( 'vstr: ' .. vstr )
if name then
if name then
if type(name) == 'table' then
local plural = abbr_plural[components[i]] -- names.plural
name = mw.getContentLanguage():plural(islist and v[2] or v, name)
if not plural or (islist and v[2] or v) == 1 then
plural = ''
end
end
text:add(vstr .. sep .. name)
if plural ~= "s" and plural ~= "" then name = "" end
text:add(vstr .. sep .. name .. plural)
else
else
text:add(vstr)
text:add(vstr)
سطر ٤٢١: سطر ٤١٨:
last = ' '
last = ' '
elseif options.join == 'sep_comma' then
elseif options.join == 'sep_comma' then
first = ', '
first = ' و'
last = ', '
last = ' و'
elseif options.join == 'sep_serialcomma' and text.n > 2 then
elseif options.join == 'sep_serialcomma' and text.n > 2 then
first = ', '
first = '، و'
last = mtext['txt-comma-and']
last = mtext['txt-comma-and']
else
else
first = ', '
first = '، و'
last = mtext['txt-and']
last = mtext['txt-and']
end
end
سطر ٤٥٨: سطر ٤٥٥:
-- which have been validated.
-- which have been validated.
local names = {
local names = {
-- Each name is:
-- * a string if no plural form of the name is used; or
-- * a table of strings, one of which is selected using the rules at
--  https://translatewiki.net/wiki/Plural/Mediawiki_plural_rules
abbr_off = {
abbr_off = {
plural = 's',
sep = '&nbsp;',
sep = '&nbsp;',
y = {'year', 'years'},
y = 'سنة',
m = {'month', 'months'},
m = 'شهر',
w = {'week', 'weeks'},
w = 'أسبوع',
d = {'day', 'days'},
d = 'يوم',
H = {'hour', 'hours'},
H = 'ساعة',
M = {'minute', 'minutes'},
M = 'دقيقة',
S = {'second', 'seconds'},
S = 'ثانية',
},
},
abbr_on = {
abbr_on = {
سطر ٤٨٢: سطر ٤٧٦:
},
},
abbr_infant = {      -- for {{age for infant}}
abbr_infant = {      -- for {{age for infant}}
plural = 's',
sep = '&nbsp;',
sep = '&nbsp;',
y = {'yr', 'yrs'},
y = 'yr',
m = {'mo', 'mos'},
m = 'mo',
w = {'wk', 'wks'},
w = 'wk',
d = {'day', 'days'},
d = 'day',
H = {'hr', 'hrs'},
H = 'hr',
M = {'min', 'mins'},
M = 'min',
S = {'sec', 'secs'},
S = 'sec',
},
},
abbr_raw = {},
abbr_raw = {},
سطر ٥٧٠: سطر ٥٦٥:
(textOptions.suffix or '')
(textOptions.suffix or '')
end
end
return message('mt-bad-show', show.id)
return message({ 'mt-bad-show', show.id })
end
end


سطر ٦٤٤: سطر ٦٣٩:
for i = 1, nrDates do
for i = 1, nrDates do
local index = i == 1 and 1 or 4
local index = i == 1 and 1 or 4
local y, m, d = fields[index], fields[index+1], fields[index+2]
dates[i] = Date(fields[index], fields[index+1], fields[index+2])
if (m == 2 or m == '2') and (d == 29 or d == '29') then
-- Workaround error with following which attempt to use invalid date 2001-02-29.
-- {{age_ymwd|year1=2001|year2=2004|month2=2|day2=29}}
-- {{age_ymwd|year1=2001|month1=2|year2=2004|month2=1|day2=29}}
-- TODO Get rid of wantMixture because even this ugly code does not handle
-- 'Feb' or 'February' or 'feb' or 'february'.
if not ((y % 4 == 0 and y % 100 ~= 0) or y % 400 == 0) then
d = 28
end
end
dates[i] = Date(y, m, d)
end
end
else
else
سطر ٨٨١: سطر ٨٦٥:
return message('mt-invalid-bd-age')
return message('mt-invalid-bd-age')
end
end
local disp = mtext['txt-bda-disp']
local disp, show = 'disp_raw', 'y'
local show = 'y'
if diff.years < 2 then
if diff.years < 2 then
disp = 'disp_age'
disp = 'disp_age'
سطر ٨٩١: سطر ٨٧٤:
end
end
end
end
local result = substituteParameters(
local df = stripToNil(args.df)  -- day first (dmy); default is month first (mdy)
mtext['txt-bda'],
local result = '(<span class="bday">%-Y-%m-%d</span>) </span>' ..
date:text('%-Y-%m-%d'),
(df and '%-d %B %-Y' or '%B %-d, %-Y')
from_en(date:text(dateFormat(args))),
result = from_en('<span style="display:none"> ' ..
from_en(dateDifference({
date:text(result) ..
'<span class="noprint ForceAgeToShow"> ' ..
mtext['txt-age'] ..
dateDifference({
diff = diff,
diff = diff,
show = show,
show = show,
سطر ٩٠١: سطر ٨٨٧:
disp = disp,
disp = disp,
sep = 'sep_space',
sep = 'sep_space',
}))
}) ..
)
')</span>')
local warnings = tonumber(frame.args.warnings)
local warnings = tonumber(frame.args.warnings)
if warnings and warnings > 0 then
if warnings and warnings > 0 then
سطر ٩٣١: سطر ٩١٧:
end
end
if invalid then
if invalid then
result = result .. message('mt-bad-param1', invalid)
result = result .. message({ 'mt-bad-param1', invalid }, 'warning')
end
end
end
end
سطر ٩٦٩: سطر ٩٥٥:
return message('mt-invalid-dates-age')
return message('mt-invalid-dates-age')
end
end
local fmt_date, fmt_ymd
local df = stripToNil(args.df)  -- day first (dmy); default is month first (mdy)
local result
if date1.day then  -- y, m, d known
if date1.day then  -- y, m, d known
fmt_date = dateFormat(args)
result = (df and
fmt_ymd = '%-Y-%m-%d'
'%-d %B %-Y' or
'%B %-d, %-Y') ..
'<span style="display:none">(%-Y-%m-%d)</span>'
elseif date1.month then  -- y, m known; d unknown
elseif date1.month then  -- y, m known; d unknown
fmt_date = '%B %-Y'
result =
fmt_ymd = '%-Y-%m-00'
'%B %-Y' ..
'<span style="display:none">(%-Y-%m-00)</span>'
else  -- y known; m, d unknown
else  -- y known; m, d unknown
fmt_date = '%-Y'
result =
fmt_ymd = '%-Y-00-00'
'%-Y' ..
'<span style="display:none">(%-Y-00-00)</span>'
end
end
local result = substituteParameters(
result = from_en(date1:text(result) ..
mtext['txt-dda'],
mtext['txt-aged'] ..
date1:text(fmt_ymd),
dateDifference({
from_en(date1:text(fmt_date)),
from_en(dateDifference({
diff = diff,
diff = diff,
show = 'y',
show = 'y',
abbr = 'abbr_off',
abbr = 'abbr_off',
disp = mtext['txt-dda-disp'],
disp = 'disp_raw',
range = 'dash',
range = 'dash',
sep = 'sep_space',
sep = 'sep_space',
}))
}) ..
)
')')
local warnings = tonumber(frame.args.warnings)
local warnings = tonumber(frame.args.warnings)
if warnings and warnings > 0 then
if warnings and warnings > 0 then
سطر ١٬٠١٥: سطر ١٬٠٠٤:
end
end
if invalid then
if invalid then
result = result .. message('mt-bad-param1', invalid)
result = result .. message({ 'mt-bad-param1', invalid }, 'warning')
end
end
end
end
سطر ١٬٠٨٧: سطر ١٬٠٧٦:
parm = translate[parm]
parm = translate[parm]
if parm == nil then  -- test for nil because false is a valid setting
if parm == nil then  -- test for nil because false is a valid setting
return message('mt-bad-param2', argname, args[argname])
return message({ 'mt-bad-param2', argname, args[argname] })
end
end
parms[argname] = parm
parms[argname] = parm
سطر ١٬٠٩٨: سطر ١٬٠٨٧:
if show then
if show then
if show.id ~= round then
if show.id ~= round then
return message('mt-conflicting-show', args.show, args.round)
return message({ 'mt-conflicting-show', args.show, args.round })
end
end
else
else