| Line 627: |
Line 627: |
| | | | |
| | if 13 > tonumber(year2) then return false; end -- don't allow 2003-05 which might be May 2003 | | if 13 > tonumber(year2) then return false; end -- don't allow 2003-05 which might be May 2003 |
| − | year2 = century .. year2; -- add the century to year2 for comparisons | + | year2 = century .. year2; -- add the century to year2 for comparisons |
| | if tonumber(year) >= tonumber(year2) then return false; end -- left to right, earlier to later, not the same | | if tonumber(year) >= tonumber(year2) then return false; end -- left to right, earlier to later, not the same |
| | if not is_valid_year(year2) then return false; end -- no year farther in the future than next year | | if not is_valid_year(year2) then return false; end -- no year farther in the future than next year |
| Line 639: |
Line 639: |
| | else | | else |
| | return false; -- date format not one of the MOS:DATE approved formats | | return false; -- date format not one of the MOS:DATE approved formats |
| | + | end |
| | + | |
| | + | if param ~= 'date' then -- CITEREF disambiguation only allowed in |date=; |year= & |publication-date= promote to date |
| | + | if anchor_year:match ('%l$') then |
| | + | return false; |
| | + | end |
| | end | | end |
| | | | |
| Line 1,102: |
Line 1,108: |
| | xlate = is_xlateable (month); -- get translate <month>; returns translation or nil | | xlate = is_xlateable (month); -- get translate <month>; returns translation or nil |
| | | | |
| − | -- if cfg.date_names.en.long[month] then -- long month dates
| |
| − | -- if cfg.date_names.inv_local_long[cfg.date_names.en.long[month]] then
| |
| − | -- xlate = cfg.date_names.inv_local_long[cfg.date_names.en.long[month]];
| |
| − | -- end
| |
| − | ---- mode = 'F'; -- English name is long so use long local name
| |
| − | -- elseif cfg.date_names.en.short[month] then -- short month dates
| |
| − | -- if cfg.date_names.inv_local_short[cfg.date_names.en.short[month]] then
| |
| − | -- xlate = cfg.date_names.inv_local_short[cfg.date_names.en.short[month]];
| |
| − | -- end
| |
| − | ---- mode = 'M'; -- English name is short so use short local name
| |
| − | -- elseif cfg.date_names.en.quarter[month] then -- quarter dates
| |
| − | -- if cfg.date_names.inv_local_quarter[cfg.date_names.en.quarter[month]] then
| |
| − | -- xlate = cfg.date_names.inv_local_quarter[cfg.date_names.en.quarter[month]];
| |
| − | -- end
| |
| − | -- elseif cfg.date_names.en.season[month] then -- season dates
| |
| − | -- if cfg.date_names.inv_local_season[cfg.date_names.en.season[month]] then
| |
| − | -- xlate = cfg.date_names.inv_local_season[cfg.date_names.en.season[month]];
| |
| − | -- end
| |
| − | -- elseif cfg.date_names.en.named[month] then -- named dates
| |
| − | -- if cfg.date_names.inv_local_named[cfg.date_names.en.named[month]] then
| |
| − | -- xlate = cfg.date_names.inv_local_named[cfg.date_names.en.named[month]];
| |
| − | -- end
| |
| − | -- else
| |
| − | -- xlate=nil; -- not an English month name; could be local language month name
| |
| − | ---- mode = nil; -- not an English month name; could be local language month name or an English season name
| |
| − | -- end
| |
| − |
| |
| | if xlate then | | if xlate then |
| − | -- if mode then -- might be a season
| |
| − | -- xlate = lang_object:formatDate(mode, '1' .. month); -- translate the month name to this local language
| |
| | date = mw.ustring.gsub (date, month, xlate); -- replace the English with the translation | | date = mw.ustring.gsub (date, month, xlate); -- replace the English with the translation |
| | date_parameters_list[param_name].val = date; -- save the translated date | | date_parameters_list[param_name].val = date; -- save the translated date |