<?xml version="1.0"?>
<rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/">
	<channel>
		<title>Islamical Commons  - Recent changes [en]</title>
		<link>https://commons.islamical.org/view/Special:RecentChanges</link>
		<description>Track the most recent changes to the wiki in this feed.</description>
		<language>en</language>
		<generator>MediaWiki 1.46.0</generator>
		<lastBuildDate>Sat, 26 Sep 2026 22:33:47 GMT</lastBuildDate>
		<item>
			<title>Template:Own</title>
			<link>https://commons.islamical.org/w/index.php?title=Template:Own&amp;diff=3968&amp;oldid=0</link>
			<guid isPermaLink="false">https://commons.islamical.org/w/index.php?title=Template:Own&amp;diff=3968&amp;oldid=0</guid>
			<description>&lt;p&gt;Created page with &amp;quot;&amp;lt;noinclude&amp;gt;{{heavily used template}}&amp;lt;/noinclude&amp;gt;&amp;lt;span class=&amp;quot;int-own-work&amp;quot; lang=&amp;quot;{{int:lang}}&amp;quot;&amp;gt;{{int:Wm-license-own-work}}&amp;lt;/span&amp;gt;&amp;lt;noinclude&amp;gt; {{documentation}} &amp;lt;/noinclude&amp;gt;&amp;quot;&lt;/p&gt;
&lt;p&gt;&lt;b&gt;New page&lt;/b&gt;&lt;/p&gt;&lt;div&gt;&amp;lt;noinclude&amp;gt;{{heavily used template}}&amp;lt;/noinclude&amp;gt;&amp;lt;span class=&amp;quot;int-own-work&amp;quot; lang=&amp;quot;{{int:lang}}&amp;quot;&amp;gt;{{int:Wm-license-own-work}}&amp;lt;/span&amp;gt;&amp;lt;noinclude&amp;gt;&lt;br /&gt;
{{documentation}}&lt;br /&gt;
&amp;lt;/noinclude&amp;gt;&lt;/div&gt;</description>
			<pubDate>Fri, 25 Sep 2026 08:56:36 GMT</pubDate>
			<dc:creator>Shahroudi</dc:creator>
			<comments>https://commons.islamical.org/view/Template_talk:Own</comments>
		</item>
		<item>
			<title>Module:DTZ</title>
			<link>https://commons.islamical.org/w/index.php?title=Module:DTZ&amp;diff=3967&amp;oldid=0</link>
			<guid isPermaLink="false">https://commons.islamical.org/w/index.php?title=Module:DTZ&amp;diff=3967&amp;oldid=0</guid>
			<description>&lt;p&gt;Created page with &amp;quot;--[[     Format date/times with time zones. Input can be specified using the following subset of ISO 8601:  YYYY-MM-DDTHH:MMZ       (UTC) YYYY-MM-DDTHH:MM+HH     (hours ahead of UTC) YYYY-MM-DDTHH:MM+HH:MM  (hours and minutes ahead of UTC) YYYY-MM-DDTHH:MM-HH     (hours behind of UTC) YYYY-MM-DDTHH:MM-HH:MM  (hours and minutes behind of UTC)  and similar strings with seconds included in the time:  YYYY-MM-DDTHH:MM:SSZ YYYY-MM-DDTHH:MM:SS+HH YYYY-MM-DDTHH:MM:SS+HH:MM YYYY...&amp;quot;&lt;/p&gt;
&lt;p&gt;&lt;b&gt;New page&lt;/b&gt;&lt;/p&gt;&lt;div&gt;--[[  &lt;br /&gt;
 &lt;br /&gt;
Format date/times with time zones. Input can be specified using the following&lt;br /&gt;
subset of ISO 8601:&lt;br /&gt;
&lt;br /&gt;
YYYY-MM-DDTHH:MMZ       (UTC)&lt;br /&gt;
YYYY-MM-DDTHH:MM+HH     (hours ahead of UTC)&lt;br /&gt;
YYYY-MM-DDTHH:MM+HH:MM  (hours and minutes ahead of UTC)&lt;br /&gt;
YYYY-MM-DDTHH:MM-HH     (hours behind of UTC)&lt;br /&gt;
YYYY-MM-DDTHH:MM-HH:MM  (hours and minutes behind of UTC)&lt;br /&gt;
&lt;br /&gt;
and similar strings with seconds included in the time:&lt;br /&gt;
&lt;br /&gt;
YYYY-MM-DDTHH:MM:SSZ&lt;br /&gt;
YYYY-MM-DDTHH:MM:SS+HH&lt;br /&gt;
YYYY-MM-DDTHH:MM:SS+HH:MM&lt;br /&gt;
YYYY-MM-DDTHH:MM:SS-HH&lt;br /&gt;
YYYY-MM-DDTHH:MM:SS-HH:MM&lt;br /&gt;
&lt;br /&gt;
]]&lt;br /&gt;
&lt;br /&gt;
local p = {}&lt;br /&gt;
&lt;br /&gt;
local Date = require(&amp;#039;Module:DateI18n-585816189&amp;#039;)&lt;br /&gt;
local errorcat = &amp;quot;[[Category:Incorrect use of DTZ]]&amp;quot;&lt;br /&gt;
&lt;br /&gt;
local function format(year, month, day, hour, minute, second, tzhour, tzmin, lang)&lt;br /&gt;
    local result = Date._Date({year, month, day, hour, minute, second, tzhour, tzmin}, lang)&lt;br /&gt;
    if result == &amp;#039;&amp;#039; then&lt;br /&gt;
       return &amp;quot;invalid values in date/time&amp;quot; .. errorcat&lt;br /&gt;
    end&lt;br /&gt;
    return result&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function p.DTZ(frame)&lt;br /&gt;
       local input = mw.text.trim(frame.args[1])&lt;br /&gt;
       local lang = frame:callParserFunction(&amp;quot;int&amp;quot;, &amp;quot;lang&amp;quot;) -- user&amp;#039;s language --&lt;br /&gt;
       local all, year, month, day, hour, minute, second = input:match(&amp;quot;^((%d%d%d%d)-(%d%d)-(%d%d)T(%d%d):(%d%d):(%d%d))&amp;quot;)&lt;br /&gt;
       if all == nil then&lt;br /&gt;
          all, year, month, day, hour, minute = input:match(&amp;quot;^((%d%d%d%d)-(%d%d)-(%d%d)T(%d%d):(%d%d))&amp;quot;)&lt;br /&gt;
         if all == nil then&lt;br /&gt;
            return &amp;quot;invalid date/time format&amp;quot; .. errorcat&lt;br /&gt;
         end&lt;br /&gt;
       end&lt;br /&gt;
       local tzhour, tzmin&lt;br /&gt;
       local rest = input:sub(all:len()+1)&lt;br /&gt;
       if rest == &amp;#039;&amp;#039; then&lt;br /&gt;
          return &amp;quot;missing timezone&amp;quot; .. errorcat&lt;br /&gt;
       end&lt;br /&gt;
       if rest:len() == 1 and rest:sub(1,1) == &amp;#039;Z&amp;#039; then&lt;br /&gt;
          return format(year, month, day, hour, minute, second, &amp;#039;0&amp;#039;, &amp;#039;&amp;#039;, lang)&lt;br /&gt;
       end&lt;br /&gt;
       local tzsign&lt;br /&gt;
       tzsign, tzhour, tzmin = rest:match(&amp;quot;^([+-])(%d%d):(%d%d)$&amp;quot;)&lt;br /&gt;
       if tzsign == nil then&lt;br /&gt;
          tzsign, tzhour = rest:match(&amp;quot;^([+-])(%d%d)$&amp;quot;)&lt;br /&gt;
          if tzsign == nil then&lt;br /&gt;
            return &amp;quot;invalid timezone&amp;quot; .. errorcat&lt;br /&gt;
          end     &lt;br /&gt;
          tzmin = &amp;#039;00&amp;#039; -- work around a glitch in Module:Date --&lt;br /&gt;
       end&lt;br /&gt;
       if tzsign == &amp;#039;-&amp;#039; then&lt;br /&gt;
          tzhour = -1 * tzhour&lt;br /&gt;
       end&lt;br /&gt;
       return format(year, month, day, hour, minute, second, tzhour, tzmin, lang)&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
return p&lt;/div&gt;</description>
			<pubDate>Fri, 25 Sep 2026 08:52:43 GMT</pubDate>
			<dc:creator>Shahroudi</dc:creator>
			<comments>https://commons.islamical.org/view/Module_talk:DTZ</comments>
		</item>
		<item>
			<title>Module:ISOdate/sandbox/testcases</title>
			<link>https://commons.islamical.org/w/index.php?title=Module:ISOdate/sandbox/testcases&amp;diff=3966&amp;oldid=0</link>
			<guid isPermaLink="false">https://commons.islamical.org/w/index.php?title=Module:ISOdate/sandbox/testcases&amp;diff=3966&amp;oldid=0</guid>
			<description>&lt;p&gt;Created page with &amp;quot;require(&amp;#039;strict&amp;#039;) local TUT = mw.title.new(mw.getCurrentFrame():getTitle()).basePageTitle -- the title under test local p = require(TUT.prefixedText) -- the module to be tested local ScribuntoUnit = require(&amp;#039;Module:ScribuntoUnit&amp;#039;) local suite = ScribuntoUnit:new() local Date  = require(&amp;#039;Module:DateI18n&amp;#039;)._Date    local function ISOdate(datestr, lang, case, class, trim_year) 	local datestr, succeded = p._ISOdate(datestr, lang, case, class, trim_year) 	return datestr end...&amp;quot;&lt;/p&gt;
&lt;p&gt;&lt;b&gt;New page&lt;/b&gt;&lt;/p&gt;&lt;div&gt;require(&amp;#039;strict&amp;#039;)&lt;br /&gt;
local TUT = mw.title.new(mw.getCurrentFrame():getTitle()).basePageTitle -- the title under test&lt;br /&gt;
local p = require(TUT.prefixedText) -- the module to be tested&lt;br /&gt;
local ScribuntoUnit = require(&amp;#039;Module:ScribuntoUnit&amp;#039;)&lt;br /&gt;
local suite = ScribuntoUnit:new()&lt;br /&gt;
local Date  = require(&amp;#039;Module:DateI18n&amp;#039;)._Date &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
local function ISOdate(datestr, lang, case, class, trim_year)&lt;br /&gt;
	local datestr, succeded = p._ISOdate(datestr, lang, case, class, trim_year)&lt;br /&gt;
	return datestr&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
local function ISOdate_en(datestr)&lt;br /&gt;
	local datestr, succeded = p._ISOdate(datestr, &amp;#039;en&amp;#039;, &amp;#039;&amp;#039;, &amp;#039;&amp;#039;, &amp;#039;100-999&amp;#039;)&lt;br /&gt;
	return datestr&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function suite:test_outer()&lt;br /&gt;
	local mod = &amp;#039;{{#invoke:&amp;#039; .. TUT.text .. &amp;#039;| &amp;#039;&lt;br /&gt;
	self:assertSameResult(p._ISOyear(&amp;#039;1999-08-18 08:15:30Z&amp;#039;),                                 mod..&amp;#039;ISOyear|1999-08-18 08:15:30Z}}&amp;#039;)&lt;br /&gt;
	self:assertSameResult(p._ISOdate(&amp;#039;1999-08-18 08:15:30Z&amp;#039;, &amp;#039;en&amp;#039;, &amp;#039;&amp;#039;, &amp;#039;dtstart&amp;#039;, &amp;#039;100-999&amp;#039;), mod..&amp;#039;ISOdate|1999-08-18 08:15:30Z|lang=en}}&amp;#039;)&lt;br /&gt;
	self:assertSameResult(p._ISOdate(&amp;#039;1999-08-18 08:15:30Z&amp;#039;, &amp;#039;pl&amp;#039;, &amp;#039;gen&amp;#039;, &amp;#039;test&amp;#039;, true),      mod..&amp;#039;ISOdate|1999-08-18 08:15:30Z|lang=pl|case=gen|class=test|trim_year=t}}&amp;#039;)&lt;br /&gt;
end &lt;br /&gt;
 &lt;br /&gt;
function suite:test_1_ISOyear()&lt;br /&gt;
	self:assertEquals(&amp;#039;1999&amp;#039;, p._ISOyear(&amp;#039;1999-08-18 08:15:30Z&amp;#039;))&lt;br /&gt;
	self:assertEquals(&amp;#039;1999&amp;#039;, p._ISOyear(&amp;#039;1999-08-18 08:15:30&amp;#039;))&lt;br /&gt;
	self:assertEquals(&amp;#039;1999&amp;#039;, p._ISOyear(&amp;#039;1999-08-18 08:15&amp;#039;))&lt;br /&gt;
	self:assertEquals(&amp;#039;1999&amp;#039;, p._ISOyear(&amp;#039;1999-08-18&amp;#039;))&lt;br /&gt;
	self:assertEquals(&amp;#039;1999&amp;#039;, p._ISOyear(&amp;#039;1999-08&amp;#039;))&lt;br /&gt;
	self:assertEquals(&amp;#039;1999&amp;#039;, p._ISOyear(&amp;#039;1999&amp;#039;))&lt;br /&gt;
	self:assertEquals(&amp;#039;0099&amp;#039;, p._ISOyear(&amp;#039;99-09&amp;#039;))&lt;br /&gt;
	self:assertEquals(&amp;#039;0000&amp;#039;, p._ISOyear(&amp;#039;0&amp;#039;))&lt;br /&gt;
	self:assertEquals(&amp;#039;&amp;#039;    , p._ISOyear(&amp;#039;qwerty&amp;#039;))&lt;br /&gt;
	self:assertEquals(&amp;#039;&amp;#039;    , p._ISOyear(&amp;#039;&amp;#039;))&lt;br /&gt;
	self:assertEquals(&amp;#039;&amp;#039;    , p._ISOyear(&amp;#039;1999/09&amp;#039;))&lt;br /&gt;
end &lt;br /&gt;
&lt;br /&gt;
function suite:test_2_ISOdate_basic()&lt;br /&gt;
	self:assertEquals(&amp;#039;10 August 1999, 08:15:30&amp;#039;, ISOdate_en(&amp;#039;1999-08-10 08:15:30Z&amp;#039;))&lt;br /&gt;
	self:assertEquals(&amp;#039;11 August 1999, 08:15:30&amp;#039;, ISOdate_en(&amp;#039;1999-08-11 08:15:30&amp;#039;))&lt;br /&gt;
	self:assertEquals(&amp;#039;12 August 1999, 08:15&amp;#039;,    ISOdate_en(&amp;#039;1999-08-12 08:15&amp;#039;))&lt;br /&gt;
	self:assertEquals(&amp;#039;13 August 1999&amp;#039;,           ISOdate_en(&amp;#039;1999-08-13&amp;#039;))&lt;br /&gt;
	self:assertEquals(   &amp;#039;August 1999&amp;#039;,           ISOdate_en(&amp;#039;1999-08&amp;#039;))&lt;br /&gt;
	self:assertEquals(          &amp;#039;1999&amp;#039;,           ISOdate_en(&amp;#039;1999&amp;#039;))&lt;br /&gt;
	self:assertEquals(&amp;#039;14 May 999&amp;#039;,               ISOdate_en(&amp;#039;999-05-14&amp;#039;))&lt;br /&gt;
	self:assertEquals(&amp;#039;15 July 0099&amp;#039;,             ISOdate_en(&amp;#039;99-07-15&amp;#039;))&lt;br /&gt;
	self:assertEquals(&amp;#039;16 September 0009&amp;#039;,        ISOdate_en(&amp;#039;9-09-16&amp;#039;))&lt;br /&gt;
	self:assertEquals(&amp;#039;December 1969&amp;#039;,            ISOdate_en(&amp;#039;1969-12&amp;#039;))&lt;br /&gt;
	self:assertEquals(&amp;#039;February 999&amp;#039;,             ISOdate_en(&amp;#039;999-02&amp;#039;))&lt;br /&gt;
	self:assertEquals(&amp;#039;999&amp;#039;,                      ISOdate_en(&amp;#039;999&amp;#039;))&lt;br /&gt;
	self:assertEquals(&amp;#039;0099&amp;#039;,                     ISOdate_en(&amp;#039;99&amp;#039;))&lt;br /&gt;
	self:assertEquals(&amp;#039;0009&amp;#039;,                     ISOdate_en(&amp;#039;9&amp;#039;))&lt;br /&gt;
	self:assertEquals(&amp;#039;&amp;quot;2010&amp;quot;&amp;#039;,              &amp;#039;&amp;quot;&amp;#039;..ISOdate_en(&amp;#039; 2010	&amp;#039;)..&amp;#039;&amp;quot;&amp;#039;)&lt;br /&gt;
end &lt;br /&gt;
&lt;br /&gt;
function suite:test_3_ISOdate_odd_dates()&lt;br /&gt;
	self:assertEquals(&amp;#039;1 August 1999, 08:05:03&amp;#039;,   ISOdate_en(&amp;#039;1999-8-1 8:5:3&amp;#039;))         -- no 0s in front of dates or months&lt;br /&gt;
 	self:assertEquals(&amp;#039;10 August 2010, 18:15:30&amp;#039;,  ISOdate_en(&amp;#039; 2010-08-10 18:15:30Z&amp;#039;))  -- spaces in front of the date&lt;br /&gt;
	self:assertEquals(&amp;#039;11 August 1999, 08:15&amp;#039;,     ISOdate_en(&amp;#039;1999-08-11T08:15&amp;#039;))       -- dates with &amp;quot;T&amp;quot; separator&lt;br /&gt;
	self:assertEquals(&amp;#039;12 August 1999, 08:15:30&amp;#039;,  ISOdate_en(&amp;#039;1999-08-12T08:15:30&amp;#039;))    -- dates with &amp;quot;T&amp;quot; separator&lt;br /&gt;
	self:assertEquals(&amp;#039;13 August 1999, 08:15:30&amp;#039;,  ISOdate_en(&amp;#039;1999-08-13T08:15:30Z&amp;#039;))   -- parse YYYY-MM-DD HH:MM:SS format with &amp;quot;Z&amp;quot;&lt;br /&gt;
	self:assertEquals(&amp;#039;14 August 1999, 08:15:30 (qwerty)&amp;#039;, ISOdate_en(&amp;#039;1999-08-14T08:15:30Z (qwerty)&amp;#039;)) -- parse date with text behind it&lt;br /&gt;
	self:assertEquals(&amp;#039;15 August 1999, 08:15 (qwerty)&amp;#039;, ISOdate_en(&amp;#039;1999-08-15T08:15 (qwerty)&amp;#039;))&lt;br /&gt;
end &lt;br /&gt;
&lt;br /&gt;
function suite:test_4_ISOdate_not_dates()&lt;br /&gt;
	-- not proper dates will be returned as-is&lt;br /&gt;
	self:assertEquals(&amp;#039;qwerty&amp;#039;,      ISOdate_en(&amp;#039;qwerty&amp;#039;)) &lt;br /&gt;
	self:assertEquals(&amp;#039;&amp;#039;,            ISOdate_en(&amp;#039; &amp;#039;)) &lt;br /&gt;
	self:assertEquals(&amp;#039;-2009-09&amp;#039;,    ISOdate_en(&amp;#039;-2009-09&amp;#039;)) &lt;br /&gt;
	self:assertEquals(&amp;#039;15-12-2008&amp;#039;,  ISOdate_en(&amp;#039;15-12-2008&amp;#039;)) &lt;br /&gt;
	self:assertEquals(&amp;#039;15 May 1999&amp;#039;, ISOdate_en(&amp;#039;15 May 1999&amp;#039;)) &lt;br /&gt;
	self:assertEquals(&amp;#039;1999-08-18T08 (creation date)&amp;#039;, ISOdate_en(&amp;#039;1999-08-18T08 (creation date)&amp;#039;)) &lt;br /&gt;
	self:assertSameResult(&amp;#039;{{other date|ca|1999}}&amp;#039;, ISOdate_en(&amp;#039;{{other date|ca|1999}}&amp;#039;))&lt;br /&gt;
end &lt;br /&gt;
&lt;br /&gt;
function suite:test_5_ISOdate_out_or_range()&lt;br /&gt;
	self:assertEquals(&amp;#039;18 August 1999&amp;#039;,   ISOdate_en(&amp;#039;1999-08-18 08:90:30&amp;#039;)) -- minute out of range, keep only the valid date&lt;br /&gt;
	self:assertEquals(&amp;#039;1999&amp;#039;,             ISOdate_en(&amp;#039;1999-18-18 08:20:30&amp;#039;)) -- month out of range, keep only the valid year&lt;br /&gt;
	self:assertEquals(&amp;#039;2000&amp;#039;,             ISOdate_en(&amp;#039;2000-13-29&amp;#039;))          -- month out of range, keep only the valid year&lt;br /&gt;
	self:assertEquals(&amp;#039;September 2009&amp;#039;,   ISOdate_en(&amp;#039;+2009-09&amp;#039;))            -- a plus sign for the year is ignored&lt;br /&gt;
	self:assertEquals(&amp;#039;1 March 1567&amp;#039;,     ISOdate_en(&amp;#039;1567-02-29&amp;#039;))          -- leap day on non-leap year&lt;br /&gt;
	self:assertEquals(&amp;#039;29 February 2000&amp;#039;, ISOdate_en(&amp;#039;2000-02-29&amp;#039;))          -- leap day on leap year	&lt;br /&gt;
end &lt;br /&gt;
&lt;br /&gt;
function suite:test_6_ISOdate_arguments()&lt;br /&gt;
	-- many arguments are just passed into Module:DateI18n&lt;br /&gt;
	local datevec, datestr = {2010,1,9}, &amp;#039;2010-01-09&amp;#039;&lt;br /&gt;
	local case, class, trim_year = &amp;#039;&amp;#039;, &amp;#039;&amp;#039;, &lt;br /&gt;
	self:assertEquals( ISOdate(datestr, &amp;#039;pl&amp;#039;),       Date(datevec, &amp;#039;pl&amp;#039;))&lt;br /&gt;
	self:assertEquals( ISOdate(datestr, &amp;#039;he&amp;#039;),       Date(datevec, &amp;#039;he&amp;#039;))&lt;br /&gt;
	self:assertEquals( ISOdate(datestr, &amp;#039;pl&amp;#039;,&amp;#039;nom&amp;#039;), Date(datevec, &amp;#039;pl&amp;#039;,&amp;#039;nom&amp;#039;))&lt;br /&gt;
	self:assertEquals( ISOdate(datestr, &amp;#039;pl&amp;#039;,&amp;#039;gen&amp;#039;), Date(datevec, &amp;#039;pl&amp;#039;,&amp;#039;gen&amp;#039;))&lt;br /&gt;
	self:assertEquals( ISOdate(datestr, &amp;#039;ru&amp;#039;,&amp;#039;ins&amp;#039;), Date(datevec, &amp;#039;ru&amp;#039;,&amp;#039;ins&amp;#039;))&lt;br /&gt;
	self:assertEquals( ISOdate(datestr, &amp;#039;ru&amp;#039;,&amp;#039;ins&amp;#039;,&amp;#039;dtstart&amp;#039;), Date(datevec, &amp;#039;ru&amp;#039;,&amp;#039;ins&amp;#039;,&amp;#039;dtstart&amp;#039;))&lt;br /&gt;
&lt;br /&gt;
    datevec, datestr = {995,10,28}, &amp;#039;995-10-28&amp;#039;&lt;br /&gt;
	self:assertEquals( ISOdate(datestr, &amp;#039;fr&amp;#039;),                Date(datevec, &amp;#039;fr&amp;#039;))&lt;br /&gt;
	self:assertEquals( ISOdate(datestr, &amp;#039;fr&amp;#039;, &amp;#039;&amp;#039;, &amp;#039;&amp;#039;, true),      Date(datevec, &amp;#039;fr&amp;#039;, &amp;#039;&amp;#039;, &amp;#039;&amp;#039;, true))&lt;br /&gt;
	self:assertEquals( ISOdate(datestr, &amp;#039;fr&amp;#039;, &amp;#039;&amp;#039;, &amp;#039;&amp;#039;, false),     Date(datevec, &amp;#039;fr&amp;#039;, &amp;#039;&amp;#039;, &amp;#039;&amp;#039;, false))&lt;br /&gt;
	self:assertEquals( ISOdate(datestr, &amp;#039;fr&amp;#039;, &amp;#039;&amp;#039;, &amp;#039;&amp;#039;, &amp;#039;100-990&amp;#039;), Date(datevec, &amp;#039;fr&amp;#039;, &amp;#039;&amp;#039;, &amp;#039;&amp;#039;, &amp;#039;100-990&amp;#039;))&lt;br /&gt;
end &lt;br /&gt;
&lt;br /&gt;
return suite&lt;/div&gt;</description>
			<pubDate>Fri, 25 Sep 2026 08:51:21 GMT</pubDate>
			<dc:creator>Shahroudi</dc:creator>
			<comments>https://commons.islamical.org/view/Module_talk:ISOdate/sandbox/testcases</comments>
		</item>
		<item>
			<title>Module:Date</title>
			<link>https://commons.islamical.org/w/index.php?title=Module:Date&amp;diff=3965&amp;oldid=0</link>
			<guid isPermaLink="false">https://commons.islamical.org/w/index.php?title=Module:Date&amp;diff=3965&amp;oldid=0</guid>
			<description>&lt;p&gt;Created page with &amp;quot;return require(&amp;#039;Module:DateI18n&amp;#039;)&amp;quot;&lt;/p&gt;
&lt;p&gt;&lt;b&gt;New page&lt;/b&gt;&lt;/p&gt;&lt;div&gt;return require(&amp;#039;Module:DateI18n&amp;#039;)&lt;/div&gt;</description>
			<pubDate>Fri, 25 Sep 2026 08:50:08 GMT</pubDate>
			<dc:creator>Shahroudi</dc:creator>
			<comments>https://commons.islamical.org/view/Module_talk:Date</comments>
		</item>
		<item>
			<title>Module:DateI18n-585816189</title>
			<link>https://commons.islamical.org/w/index.php?title=Module:DateI18n-585816189&amp;diff=3964&amp;oldid=0</link>
			<guid isPermaLink="false">https://commons.islamical.org/w/index.php?title=Module:DateI18n-585816189&amp;diff=3964&amp;oldid=0</guid>
			<description>&lt;p&gt;Created page with &amp;quot;--[[     __  __           _       _        ____        _       ___ _  ___          |  \/  | ___   __| |_   _| | ___ _|  _ \  __ _| |_ ___|_ _/ |( _ ) _ __    | |\/| |/ _ \ / _` | | | | |/ _ (_) | | |/ _` | __/ _ \| || |/ _ \| &amp;#039;_ \   | |  | | (_) | (_| | |_| | |  __/_| |_| | (_| | ||  __/| || | (_) | | | |  |_|  |_|\___/ \__,_|\__,_|_|\___(_)____/ \__,_|\__\___|___|_|\___/|_| |_|    This module is intended for processing of date strings.  Please do not modify this code wi...&amp;quot;&lt;/p&gt;
&lt;p&gt;&lt;b&gt;New page&lt;/b&gt;&lt;/p&gt;&lt;div&gt;--[[  &lt;br /&gt;
  __  __           _       _        ____        _       ___ _  ___        &lt;br /&gt;
 |  \/  | ___   __| |_   _| | ___ _|  _ \  __ _| |_ ___|_ _/ |( _ ) _ __  &lt;br /&gt;
 | |\/| |/ _ \ / _` | | | | |/ _ (_) | | |/ _` | __/ _ \| || |/ _ \| &amp;#039;_ \ &lt;br /&gt;
 | |  | | (_) | (_| | |_| | |  __/_| |_| | (_| | ||  __/| || | (_) | | | |&lt;br /&gt;
 |_|  |_|\___/ \__,_|\__,_|_|\___(_)____/ \__,_|\__\___|___|_|\___/|_| |_|&lt;br /&gt;
  &lt;br /&gt;
This module is intended for processing of date strings.&lt;br /&gt;
&lt;br /&gt;
Please do not modify this code without applying the changes first at Module:Date/sandbox and testing &lt;br /&gt;
at Module:Date/sandbox/testcases and Module talk:Date/sandbox/testcases.&lt;br /&gt;
&lt;br /&gt;
Authors and maintainers:&lt;br /&gt;
* User:Parent5446 - original version of the function mimicking template:ISOdate&lt;br /&gt;
* User:Jarekt - original version of the functions mimicking template:Date &lt;br /&gt;
]]&lt;br /&gt;
require(&amp;#039;strict&amp;#039;)&lt;br /&gt;
&lt;br /&gt;
-- ==================================================&lt;br /&gt;
-- === Internal functions ===========================&lt;br /&gt;
-- ==================================================&lt;br /&gt;
&lt;br /&gt;
-- Function allowing for consistent treatment of boolean-like wikitext input.&lt;br /&gt;
-- It works similarly to Module:Yesno&lt;br /&gt;
local function yesno(val, default)&lt;br /&gt;
	if type(val) == &amp;#039;boolean&amp;#039; then&lt;br /&gt;
		return val&lt;br /&gt;
	elseif type(val) == &amp;#039;number&amp;#039; then&lt;br /&gt;
		if val==1 then &lt;br /&gt;
			return true&lt;br /&gt;
		elseif val==0 then&lt;br /&gt;
			return false&lt;br /&gt;
		end&lt;br /&gt;
	elseif type(val) == &amp;#039;string&amp;#039; then&lt;br /&gt;
	    val = mw.ustring.lower(val)  -- put in lower case&lt;br /&gt;
	    if val == &amp;#039;no&amp;#039;  or val == &amp;#039;n&amp;#039; or val == &amp;#039;false&amp;#039; or tonumber(val) == 0 then&lt;br /&gt;
	        return false&lt;br /&gt;
	    elseif val == &amp;#039;yes&amp;#039; or val == &amp;#039;y&amp;#039; or val == &amp;#039;true&amp;#039;  or tonumber(val) == 1 then&lt;br /&gt;
	        return true&lt;br /&gt;
	    end&lt;br /&gt;
    end&lt;br /&gt;
    return default&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
---------------------------------------------------------------------------------------&lt;br /&gt;
-- String replacement that ignores part of the string in &amp;quot;...&amp;quot;&lt;br /&gt;
local function strReplace(String, old, new)&lt;br /&gt;
	if String:find(&amp;#039;&amp;quot;&amp;#039;) then&lt;br /&gt;
		local T={}&lt;br /&gt;
		for i, str in ipairs(mw.text.split( String, &amp;#039;&amp;quot;&amp;#039;, true )) do&lt;br /&gt;
			if i%2==1 then&lt;br /&gt;
				str = str:gsub(old, new)&lt;br /&gt;
			end&lt;br /&gt;
			table.insert(T, str)&lt;br /&gt;
		end&lt;br /&gt;
		return table.concat(T,&amp;#039;&amp;quot;&amp;#039;)&lt;br /&gt;
	else&lt;br /&gt;
		return String:gsub(old, new)&lt;br /&gt;
	end&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
---------------------------------------------------------------------------------------&lt;br /&gt;
-- process datevec&lt;br /&gt;
-- INPUT:&lt;br /&gt;
--  * datevec - Array of {year,month,day,hour,minute,second, tzhour, tzmin} containing broken &lt;br /&gt;
--    down date-time component strings or numbers&lt;br /&gt;
-- OUTPUT:&lt;br /&gt;
--  * datecode - a code specifying content of the array where Y&amp;#039; is year, &amp;#039;M&amp;#039; is month, &lt;br /&gt;
--     &amp;#039;D&amp;#039; is day, &amp;#039;H&amp;#039; is hour, &amp;#039;M&amp;#039; minute, &amp;#039;S&amp;#039; is second. output has to be one of YMDHMS, YMDHM, YMD, YM, MD, Y&lt;br /&gt;
--  * datenum - same array but holding only numbers or nuls&lt;br /&gt;
local function parserDatevec(datevec)&lt;br /&gt;
	-- if month is not a number than check if it is a month name in project&amp;#039;s language&lt;br /&gt;
	local month = datevec[2]&lt;br /&gt;
	if month and month~=&amp;#039;&amp;#039; and not tonumber(month) then&lt;br /&gt;
		datevec[2] = mw.getContentLanguage():formatDate( &amp;quot;n&amp;quot;, month)&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	-- create datecode based on which variables are provided and check for out-of-bound values&lt;br /&gt;
	local maxval = {nil, 12, 31, 23, 59, 59,  23, 59} -- max values for year, month, ...&lt;br /&gt;
	local minval = {nil,  1,  1,  0,  0,  0, -23,  0} -- min values for year, month, ...&lt;br /&gt;
	local c = {&amp;#039;Y&amp;#039;, &amp;#039;M&amp;#039;, &amp;#039;D&amp;#039;, &amp;#039;H&amp;#039;, &amp;#039;M&amp;#039;, &amp;#039;S&amp;#039;, &amp;#039;&amp;#039;, &amp;#039;&amp;#039;}&lt;br /&gt;
	local datecode = &amp;#039;&amp;#039; -- a string signifying which combination of variables was provided&lt;br /&gt;
	local datenum = {}  -- date-time encoded as a vector = [year, month, ... , second]&lt;br /&gt;
	for i = 1,8 do&lt;br /&gt;
		datenum[i] = tonumber(datevec[i])&lt;br /&gt;
		if datenum[i] and (i==1 or (datenum[i]&amp;gt;=minval[i] and datenum[i]&amp;lt;=maxval[i])) then&lt;br /&gt;
			datecode = datecode .. c[i]&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
	return datecode, datenum&lt;br /&gt;
end&lt;br /&gt;
	&lt;br /&gt;
---------------------------------------------------------------------------------------&lt;br /&gt;
-- process datevec&lt;br /&gt;
-- INPUT:&lt;br /&gt;
--  * datecode - a code specifying content of the array where Y&amp;#039; is year, &amp;#039;M&amp;#039; is month, &lt;br /&gt;
--     &amp;#039;D&amp;#039; is day, &amp;#039;H&amp;#039; is hour, &amp;#039;M&amp;#039; minute, &amp;#039;S&amp;#039; is second. output has to be one of YMDHMS, YMDHM, YMD, YM, MD, Y&lt;br /&gt;
--  * datenum - Array of {year,month,day,hour,minute,second, tzhour, tzmin} as numbers or nuls&lt;br /&gt;
-- OUTPUT:&lt;br /&gt;
--  * timeStamp - date string in the format taken by mw.language:formatDate lua function and {{#time}} perser function&lt;br /&gt;
--       https://www.mediawiki.org/wiki/Extension:Scribunto/Lua_reference_manual#mw.language:formatDate&lt;br /&gt;
--       https://www.mediawiki.org/wiki/Help:Extension:ParserFunctions#.23time&lt;br /&gt;
--  * datecode - with possible corrections&lt;br /&gt;
local function getTimestamp(datecode, datenum)&lt;br /&gt;
	-- create time stamp string (for example 2000-02-20 02:20:20) based on which variables were provided&lt;br /&gt;
	local timeStamp&lt;br /&gt;
	if datecode == &amp;#039;YMDHMS&amp;#039; then&lt;br /&gt;
		timeStamp = string.format(&amp;#039;%04i-%02i-%02i %02i:%02i:%02i&amp;#039;, datenum[1], datenum[2], datenum[3], datenum[4], datenum[5], datenum[6] )&lt;br /&gt;
	elseif datecode == &amp;#039;YMDHM&amp;#039; then&lt;br /&gt;
		timeStamp = string.format(&amp;#039;%04i-%02i-%02i %02i:%02i&amp;#039;, datenum[1], datenum[2], datenum[3], datenum[4], datenum[5] )&lt;br /&gt;
	elseif datecode:sub(1,3)==&amp;#039;YMD&amp;#039; then&lt;br /&gt;
		timeStamp = string.format(&amp;#039;%04i-%02i-%02i&amp;#039;, datenum[1], datenum[2], datenum[3] )&lt;br /&gt;
		datecode = &amp;#039;YMD&amp;#039; -- &amp;#039;YMD&amp;#039;, &amp;#039;YMDHMS&amp;#039; and &amp;#039;YMDHM&amp;#039; are the only supported format starting with &amp;#039;YMD&amp;#039;. All others will be converted to &amp;#039;YMD&amp;#039;&lt;br /&gt;
	elseif datecode == &amp;#039;YM&amp;#039; then&lt;br /&gt;
		timeStamp = string.format(&amp;#039;%04i-%02i&amp;#039;, datenum[1], datenum[2] )&lt;br /&gt;
	elseif datecode:sub(1,1)==&amp;#039;Y&amp;#039; then&lt;br /&gt;
		timeStamp = string.format(&amp;#039;%04i&amp;#039;, datenum[1] )&lt;br /&gt;
		datecode = &amp;#039;Y&amp;#039; &lt;br /&gt;
	elseif datecode == &amp;#039;M&amp;#039; then&lt;br /&gt;
		timeStamp = string.format(&amp;#039;%04i-%02i-%02i&amp;#039;, 2000, datenum[2], 1 )&lt;br /&gt;
	elseif datecode == &amp;#039;MD&amp;#039; then&lt;br /&gt;
		timeStamp = string.format(&amp;#039;%04i-%02i-%02i&amp;#039;, 2000, datenum[2], datenum[3] )&lt;br /&gt;
	else&lt;br /&gt;
		timeStamp = nil -- format not supported&lt;br /&gt;
	end&lt;br /&gt;
	return timeStamp, datecode&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
---------------------------------------------------------------------------------------&lt;br /&gt;
-- trim leading zeros in years prior to year 1000&lt;br /&gt;
-- INPUT:&lt;br /&gt;
--  * datestr   - translated date string &lt;br /&gt;
--  * lang      - language of translation&lt;br /&gt;
-- OUTPUT:&lt;br /&gt;
--  * datestr - updated date string &lt;br /&gt;
&lt;br /&gt;
local function trimYear(datestr, year, lang)&lt;br /&gt;
	local yearStr0, yearStr1, yearStr2, zeroStr&lt;br /&gt;
	yearStr0 = string.format(&amp;#039;%04i&amp;#039;, year ) -- 4 digit year in standard form &amp;quot;0123&amp;quot;&lt;br /&gt;
	yearStr1 = mw.language.new(lang):formatDate( &amp;#039;Y&amp;#039;, yearStr0) -- same as calling {{#time}} parser function&lt;br /&gt;
	--yearStr1 = mw.getCurrentFrame():callParserFunction( &amp;quot;#time&amp;quot;, { &amp;#039;Y&amp;#039;, yearStr0, lang } ) -- translate to a language &lt;br /&gt;
	if yearStr0==yearStr1 then -- most of languages use standard form of year &lt;br /&gt;
		yearStr2 = tostring(year)&lt;br /&gt;
	else -- some languages use different characters for numbers&lt;br /&gt;
		yearStr2 = yearStr1&lt;br /&gt;
		zeroStr = mw.ustring.sub(yearStr1,1,1) -- get &amp;quot;0&amp;quot; in whatever language&lt;br /&gt;
		for i=1,3 do -- trim leading zeros&lt;br /&gt;
			if mw.ustring.sub(yearStr2,1,1)==zeroStr then&lt;br /&gt;
				yearStr2 = mw.ustring.sub(yearStr2, 2, 5-i)&lt;br /&gt;
			else&lt;br /&gt;
				break&lt;br /&gt;
			end&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
	return string.gsub(datestr, yearStr1, yearStr2 ) -- in datestr replace long year with trimmed one&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
---------------------------------------------------------------------------------------&lt;br /&gt;
-- Look up proper format string to be passed to {{#time}} parser function&lt;br /&gt;
-- INPUTS:&lt;br /&gt;
--  * datecode: YMDHMS, YMDHM, YMD, YM, MD, Y, or M&lt;br /&gt;
--  * day     : Number between 1 and 31 (not needed for most languages)&lt;br /&gt;
--  * lang    : language&lt;br /&gt;
-- OUTPUT:&lt;br /&gt;
--  * dFormat : input to {{#time}} function&lt;br /&gt;
local function getDateFormat(datecode, day, lang)&lt;br /&gt;
	local function parseFormat(dFormat, day)&lt;br /&gt;
		if dFormat:find(&amp;#039;default&amp;#039;) and #dFormat&amp;gt;10 then&lt;br /&gt;
			-- special (and messy) case of dFormat code depending on a day number&lt;br /&gt;
			-- then json contains a string with more json containing &amp;quot;default&amp;quot; field and 2 digit day keys&lt;br /&gt;
			-- if desired day is not in that json than use &amp;quot;default&amp;quot; case&lt;br /&gt;
			dFormat = dFormat:gsub(&amp;#039;”&amp;#039;,&amp;#039;&amp;quot;&amp;#039;) -- change fancy double quote to a straight one, used for json marking&lt;br /&gt;
			local D = mw.text.jsonDecode( dFormat )		--com = mw.dumpObject(D)&lt;br /&gt;
			day = string.format(&amp;#039;d%02i&amp;#039;,day) -- create day key&lt;br /&gt;
			dFormat = D[day] or D.default&lt;br /&gt;
			dFormat = dFormat:gsub(&amp;quot;&amp;#039;&amp;quot;, &amp;#039;&amp;quot;&amp;#039;) -- change single quote to a double quote, used for {{#time}} marking&lt;br /&gt;
		end&lt;br /&gt;
		return dFormat&lt;br /&gt;
	end&lt;br /&gt;
	&lt;br /&gt;
	local T = {}&lt;br /&gt;
	local tab = mw.ext.data.get(&amp;#039;DateI18n.tab&amp;#039;, lang)&lt;br /&gt;
	for _, row in pairs(tab.data) do -- convert the output into a dictionary table&lt;br /&gt;
		local id, _, msg = unpack(row)&lt;br /&gt;
		T[id] = msg&lt;br /&gt;
	end&lt;br /&gt;
	local dFormat = T[datecode]&lt;br /&gt;
	if dFormat==&amp;#039;default&amp;#039; and (datecode==&amp;#039;YMDHMS&amp;#039; or datecode==&amp;#039;YMDHM&amp;#039;)  then &lt;br /&gt;
		-- for most languages adding hour:minute:second is done by adding &amp;quot;, HH:MM:SS to the &lt;br /&gt;
		-- day precission date, those languages are skipped in DateI18n.tab and default to &lt;br /&gt;
		-- English which stores word &amp;quot;default&amp;quot;&lt;br /&gt;
		dFormat = parseFormat(T[&amp;#039;YMD&amp;#039;], day).. &amp;#039;, H:i&amp;#039;&lt;br /&gt;
		if datecode==&amp;#039;YMDHMS&amp;#039; then&lt;br /&gt;
			dFormat = dFormat .. &amp;#039;:s&amp;#039;&lt;br /&gt;
		end&lt;br /&gt;
	else&lt;br /&gt;
		dFormat = parseFormat(dFormat, day)&lt;br /&gt;
	end&lt;br /&gt;
	return dFormat&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
---------------------------------------------------------------------------------------&lt;br /&gt;
-- Look up proper format string to be passed to {{#time}} parser function&lt;br /&gt;
-- INPUTS:&lt;br /&gt;
--  * month : month number&lt;br /&gt;
--  * case  : gramatic case abbriviation, like &amp;quot;ins&amp;quot;, &amp;quot;loc&amp;quot;&lt;br /&gt;
--  * lang  : language&lt;br /&gt;
-- OUTPUT:&lt;br /&gt;
--  * dFormat : input to {{#time}} function&lt;br /&gt;
local function MonthCase(month, case, lang)&lt;br /&gt;
	local T = {{},{},{},{},{},{},{},{},{},{},{},{}}&lt;br /&gt;
	local tab = mw.ext.data.get(&amp;#039;I18n/MonthCases.tab&amp;#039;, lang)&lt;br /&gt;
	for _, row in pairs(tab.data) do&lt;br /&gt;
		local mth, cs, msg = unpack(row)&lt;br /&gt;
		T[mth][cs] = msg&lt;br /&gt;
	end&lt;br /&gt;
	return T[month][case]&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
-- ==================================================&lt;br /&gt;
-- === External functions ===========================&lt;br /&gt;
-- ==================================================&lt;br /&gt;
local p = {}&lt;br /&gt;
&lt;br /&gt;
--[[ ========================================================================================&lt;br /&gt;
Date&lt;br /&gt;
 &lt;br /&gt;
This function is the core part of the ISOdate template. &lt;br /&gt;
 &lt;br /&gt;
Usage:&lt;br /&gt;
  local Date = require(&amp;#039;Module:DateI18n&amp;#039;)._Date&lt;br /&gt;
  local dateStr = Date({2020, 12, 30, 12, 20, 11}, lang)&lt;br /&gt;
 &lt;br /&gt;
Parameters:&lt;br /&gt;
  * {year,month,day,hour,minute,second, tzhour, tzmin}: broken down date-time component strings or numbers&lt;br /&gt;
		tzhour, tzmin are timezone offsets from UTC, hours and minutes&lt;br /&gt;
  * lang: The language to display it in&lt;br /&gt;
  * case: Language format (genitive, etc.) for some languages&lt;br /&gt;
  * class: CSS class for the &amp;lt;time&amp;gt; node, use &amp;quot;&amp;quot; for no metadata at all&lt;br /&gt;
]]&lt;br /&gt;
function p._Date(datevec, lang, case, class, trim_year)	&lt;br /&gt;
	-- make sure inputs are in the right format&lt;br /&gt;
	if not lang or not mw.language.isValidCode( lang ) then&lt;br /&gt;
		lang = mw.getCurrentFrame():callParserFunction( &amp;quot;int&amp;quot;, &amp;quot;lang&amp;quot; ) -- get user&amp;#039;s chosen language&lt;br /&gt;
	end&lt;br /&gt;
	if lang == &amp;#039;be-tarsk&amp;#039; then&lt;br /&gt;
		lang = &amp;#039;be-x-old&amp;#039;&lt;br /&gt;
	end&lt;br /&gt;
	&lt;br /&gt;
	-- process datevec and extract timeStamp and datecode strings as well as numeric datenum array&lt;br /&gt;
	local datecode,  datenum  = parserDatevec(datevec)&lt;br /&gt;
	local year, month, day = datenum[1], datenum[2], datenum[3]&lt;br /&gt;
	local timeStamp, datecode = getTimestamp(datecode, datenum)&lt;br /&gt;
	if not timeStamp then -- something went wrong in parserDatevec&lt;br /&gt;
		return &amp;#039;&amp;#039;&lt;br /&gt;
	end&lt;br /&gt;
	-- Commons [[Data:DateI18n.tab]] page stores prefered formats for diferent &lt;br /&gt;
	-- languages and datecodes (specifying year-month-day or just year of month-day, etc)&lt;br /&gt;
	-- Look up country specific format input to {{#time}} function&lt;br /&gt;
	local dFormat = getDateFormat(datecode, day, lang)&lt;br /&gt;
&lt;br /&gt;
	-- By default the gramatical case is not specified (case==&amp;#039;&amp;#039;) allowing the format to be specified &lt;br /&gt;
	-- in [[Data:DateI18n.tab]]. You can overwrite the default grammatical case of the month by &lt;br /&gt;
	-- specifying &amp;quot;case&amp;quot; variable. This is needed mostly by Slavic languages to create more complex &lt;br /&gt;
	-- phrases as it is done in [[c:Module:Complex date]]&lt;br /&gt;
	case = case or &amp;#039;&amp;#039;&lt;br /&gt;
	if (lang==&amp;#039;qu&amp;#039; or lang==&amp;#039;qug&amp;#039;) and (case==&amp;#039;nom&amp;#039;) then&lt;br /&gt;
		-- Special case related to Quechua and Kichwa languages. The form in the I18n is&lt;br /&gt;
		--  Genitive case with suffix &amp;quot;pi&amp;quot; added to month names provided by {#time}}&lt;br /&gt;
		-- in Nominative case that &amp;quot;pi&amp;quot; should be removed&lt;br /&gt;
		-- see https://commons.wikimedia.org/wiki/Template_talk:Date#Quechua from 2014&lt;br /&gt;
		dFormat = dFormat:gsub(&amp;#039;F&amp;quot;pi&amp;quot;&amp;#039;, &amp;#039;F&amp;#039;)&lt;br /&gt;
	elseif (case==&amp;#039;gen&amp;#039;) then&lt;br /&gt;
		dFormat = strReplace(dFormat, &amp;quot;F&amp;quot;, &amp;quot;xg&amp;quot;)&lt;br /&gt;
	elseif (case==&amp;#039;nom&amp;#039;) then&lt;br /&gt;
		dFormat = strReplace(dFormat, &amp;quot;xg&amp;quot;, &amp;quot;F&amp;quot;)&lt;br /&gt;
	elseif (case ~= &amp;#039;&amp;#039;) then&lt;br /&gt;
		-- see is page [[Data:I18n/MonthCases.tab]] on Commons have name of the month &lt;br /&gt;
		-- in specific gramatic case in desired language. If we have it than replace &lt;br /&gt;
		-- &amp;quot;F&amp;quot; and xg&amp;quot; in dFormat&lt;br /&gt;
		local monthMsg = MonthCase(month, case, lang)&lt;br /&gt;
		if  monthMsg and monthMsg ~= &amp;#039;&amp;#039; then -- make sure it exists&lt;br /&gt;
			dFormat = strReplace(dFormat, &amp;#039;F&amp;#039;,  &amp;#039;&amp;quot;&amp;#039;..monthMsg..&amp;#039;&amp;quot;&amp;#039;) -- replace default month with month name we already looked up&lt;br /&gt;
			dFormat = strReplace(dFormat, &amp;#039;xg&amp;#039;, &amp;#039;&amp;quot;&amp;#039;..monthMsg..&amp;#039;&amp;quot;&amp;#039;)&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
    -- Translate the date using specified format&lt;br /&gt;
	-- See https://www.mediawiki.org/wiki/Extension:Scribunto/Lua_reference_manual#mw.language:formatDate and &lt;br /&gt;
	-- https://www.mediawiki.org/wiki/Help:Extension:ParserFunctions##time for explanation of the format&lt;br /&gt;
	local langObj = mw.language.new(lang)&lt;br /&gt;
	local datestr = langObj:formatDate( dFormat, timeStamp) -- same as using {{#time}} parser function&lt;br /&gt;
	&lt;br /&gt;
	-- Special case related to Thai solar calendar: prior to 1940 new-year was at different &lt;br /&gt;
	-- time of year, so just year (datecode==&amp;#039;Y&amp;#039;) is ambiguous and is replaced by &amp;quot;YYYY or YYYY&amp;quot; phrase&lt;br /&gt;
	if lang==&amp;#039;th&amp;#039; and datecode==&amp;#039;Y&amp;#039; and year&amp;lt;=1940 then&lt;br /&gt;
		datestr = string.format(&amp;#039;%04i หรือ %04i&amp;#039;, year+542, year+543 ) &lt;br /&gt;
	end&lt;br /&gt;
	&lt;br /&gt;
	-- If year&amp;lt;1000 than either keep the date padded to the length of 4 digits or trim it&lt;br /&gt;
	-- decide if the year will stay padded with zeros (for years in 0-999 range)&lt;br /&gt;
	if year and year&amp;lt;1000 then&lt;br /&gt;
		if type(trim_year)==&amp;#039;nil&amp;#039; then &lt;br /&gt;
			trim_year = &amp;#039;100-999&amp;#039;&lt;br /&gt;
		end&lt;br /&gt;
		local trim = yesno(trim_year,nil) -- convert to boolean&lt;br /&gt;
		if trim==nil and type(trim_year)==&amp;#039;string&amp;#039; then&lt;br /&gt;
			-- if &amp;quot;trim_year&amp;quot; not a simple True/False than it is range of dates&lt;br /&gt;
			-- for example &amp;#039;100-999&amp;#039; means to pad one and 2 digit years to be 4 digit long, while keeping 3 digit years as is&lt;br /&gt;
			local YMin, YMax = trim_year:match( &amp;#039;(%d+)-(%d+)&amp;#039; )&lt;br /&gt;
			trim = (YMin~=nil and year&amp;gt;=tonumber(YMin) and year&amp;lt;=tonumber(YMax)) &lt;br /&gt;
		end&lt;br /&gt;
		if trim==true then&lt;br /&gt;
			datestr = trimYear(datestr, year, lang) -- in datestr replace long year with trimmed one&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	-- append timezone if present&lt;br /&gt;
	if datenum[7] and (datecode == &amp;#039;YMDHMS&amp;#039; or datecode == &amp;#039;YMDHM&amp;#039;) then&lt;br /&gt;
		-- use {{#time}} parser function to create timezone string, so that we use correct character set&lt;br /&gt;
		local sign = (datenum[7]&amp;lt;0) and &amp;#039;−&amp;#039; or &amp;#039;+&amp;#039;&lt;br /&gt;
		timeStamp = string.format(&amp;quot;2000-01-01 %02i:%02i:00&amp;quot;, math.abs(datenum[7]), datenum[8] or 0)&lt;br /&gt;
		local timezone = langObj:formatDate( &amp;#039;H:i&amp;#039;, timeStamp) -- same as using {{#time}} parser function&lt;br /&gt;
		datestr = string.format(&amp;quot;%s %s%s&amp;quot;, datestr, sign, timezone )&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	-- html formating and tagging of date string&lt;br /&gt;
	if class and class ~= &amp;#039;&amp;#039; and datecode~=&amp;#039;M&amp;#039; and datecode~=&amp;#039;MD&amp;#039;then&lt;br /&gt;
		local DateHtmlTags = &amp;#039;&amp;lt;span style=&amp;quot;white-space:nowrap&amp;quot;&amp;gt;&amp;lt;time class=&amp;quot;%s&amp;quot; datetime=&amp;quot;%s&amp;quot; lang=&amp;quot;%s&amp;quot; dir=&amp;quot;%s&amp;quot;&amp;gt;%s&amp;lt;/time&amp;gt;&amp;lt;/span&amp;gt;&amp;#039;&lt;br /&gt;
		datestr = DateHtmlTags:format(class, timeStamp, lang, langObj:getDir(), datestr)&lt;br /&gt;
	end&lt;br /&gt;
	return datestr&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
--[[ ========================================================================================&lt;br /&gt;
Date&lt;br /&gt;
 &lt;br /&gt;
This function is the core part of the ISOdate template. &lt;br /&gt;
 &lt;br /&gt;
Usage:&lt;br /&gt;
{{#invoke:DateI18n|Date|year=|month=|day=|hour=|minute=|second=|tzhour=|tzmin=|lang=en}}&lt;br /&gt;
 &lt;br /&gt;
Parameters:&lt;br /&gt;
  * year, month, day, hour, minute, second: broken down date-time component strings&lt;br /&gt;
  * tzhour, tzmin: timezone offset from UTC, hours and minutes&lt;br /&gt;
  * lang: The language to display it in&lt;br /&gt;
  * case: Language format (genitive, etc.) for some languages&lt;br /&gt;
  * class: CSS class for the &amp;lt;time&amp;gt; node, use &amp;quot;&amp;quot; for no metadata at all&lt;br /&gt;
]]&lt;br /&gt;
function p.Date(frame)&lt;br /&gt;
	local args = {}&lt;br /&gt;
	for name, value in pairs( frame.args ) do &lt;br /&gt;
		name = string.gsub( string.lower(name), &amp;#039; &amp;#039;, &amp;#039;_&amp;#039;)&lt;br /&gt;
		args[name] = value&lt;br /&gt;
	end&lt;br /&gt;
	return p._Date(	&lt;br /&gt;
		{ args.year, args.month, args.day, args.hour, args.minute, args.second, args.tzhour, args.tzmin },&lt;br /&gt;
		args.lang,                  -- language&lt;br /&gt;
		args.case,                  -- allows to specify grammatical case for the month for languages that use them&lt;br /&gt;
		args.class or &amp;#039;dtstart&amp;#039;,    -- allows to set the html class of the time node where the date is included. This is useful for microformats.&lt;br /&gt;
		args.trim_year or &amp;#039;100-999&amp;#039; -- by default pad one and 2 digit years to be 4 digit long, while keeping 3 digit years as is&lt;br /&gt;
	)	&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
return p&lt;/div&gt;</description>
			<pubDate>Fri, 25 Sep 2026 08:49:20 GMT</pubDate>
			<dc:creator>Shahroudi</dc:creator>
			<comments>https://commons.islamical.org/view/Module_talk:DateI18n-585816189</comments>
		</item>
		<item>
			<title>Module:DateI18n/sandbox 2</title>
			<link>https://commons.islamical.org/w/index.php?title=Module:DateI18n/sandbox_2&amp;diff=3963&amp;oldid=0</link>
			<guid isPermaLink="false">https://commons.islamical.org/w/index.php?title=Module:DateI18n/sandbox_2&amp;diff=3963&amp;oldid=0</guid>
			<description>&lt;p&gt;Created page with &amp;quot;--[[     __  __           _       _        ____        _       ___ _  ___          |  \/  | ___   __| |_   _| | ___ _|  _ \  __ _| |_ ___|_ _/ |( _ ) _ __    | |\/| |/ _ \ / _` | | | | |/ _ (_) | | |/ _` | __/ _ \| || |/ _ \| &amp;#039;_ \   | |  | | (_) | (_| | |_| | |  __/_| |_| | (_| | ||  __/| || | (_) | | | |  |_|  |_|\___/ \__,_|\__,_|_|\___(_)____/ \__,_|\__\___|___|_|\___/|_| |_|    This module is intended for processing of date strings.  Please do not modify this code wi...&amp;quot;&lt;/p&gt;
&lt;p&gt;&lt;b&gt;New page&lt;/b&gt;&lt;/p&gt;&lt;div&gt;--[[  &lt;br /&gt;
  __  __           _       _        ____        _       ___ _  ___        &lt;br /&gt;
 |  \/  | ___   __| |_   _| | ___ _|  _ \  __ _| |_ ___|_ _/ |( _ ) _ __  &lt;br /&gt;
 | |\/| |/ _ \ / _` | | | | |/ _ (_) | | |/ _` | __/ _ \| || |/ _ \| &amp;#039;_ \ &lt;br /&gt;
 | |  | | (_) | (_| | |_| | |  __/_| |_| | (_| | ||  __/| || | (_) | | | |&lt;br /&gt;
 |_|  |_|\___/ \__,_|\__,_|_|\___(_)____/ \__,_|\__\___|___|_|\___/|_| |_|&lt;br /&gt;
  &lt;br /&gt;
This module is intended for processing of date strings.&lt;br /&gt;
&lt;br /&gt;
Please do not modify this code without applying the changes first at Module:DateI18n/sandbox&lt;br /&gt;
and testing at Module:DateI18n/sandbox/testcases and Module talk:DateI18n/sandbox/testcases.&lt;br /&gt;
&lt;br /&gt;
Authors and maintainers:&lt;br /&gt;
* User:Parent5446 - original version of the function mimicking Template:ISOdate&lt;br /&gt;
* User:Jarekt - original version of the functions mimicking Template:Date &lt;br /&gt;
]]&lt;br /&gt;
&lt;br /&gt;
-- =======================================&lt;br /&gt;
-- === Dependencies ======================&lt;br /&gt;
-- =======================================&lt;br /&gt;
&lt;br /&gt;
require(&amp;#039;strict&amp;#039;)&lt;br /&gt;
&lt;br /&gt;
-- =======================================&lt;br /&gt;
-- === Local Functions ===================&lt;br /&gt;
-- =======================================&lt;br /&gt;
&lt;br /&gt;
------------------------------------------------------------------------------&lt;br /&gt;
--[[ (copied from Module:Core)&lt;br /&gt;
Function allowing for consistent treatment of boolean-like wikitext input.&lt;br /&gt;
Inputs:&lt;br /&gt;
  1) val - value to be evaluated, outputs as a function of values:&lt;br /&gt;
		true  : true  (boolean), 1 (number), or strings: &amp;quot;yes&amp;quot;, &amp;quot;y&amp;quot;, &amp;quot;true&amp;quot;, &amp;quot;1&amp;quot;&lt;br /&gt;
		false : false (boolean), 0 (number), or strings: &amp;quot;no&amp;quot;, &amp;quot;n&amp;quot;, &amp;quot;false&amp;quot;, &amp;quot;0&amp;quot;&lt;br /&gt;
  2) default - value to return otherwise&lt;br /&gt;
See Also: It works similarly to Module:Yesno&lt;br /&gt;
]]&lt;br /&gt;
local function yesno(val, default)&lt;br /&gt;
	if type(val) == &amp;#039;boolean&amp;#039; then&lt;br /&gt;
		return val&lt;br /&gt;
	elseif type(val) == &amp;#039;number&amp;#039; then&lt;br /&gt;
		val = tostring(val)&lt;br /&gt;
	end&lt;br /&gt;
	if type(val) == &amp;#039;string&amp;#039; then&lt;br /&gt;
		local LUT = {&lt;br /&gt;
			yes=true , y=true , [&amp;#039;true&amp;#039;] =true , t=true , [&amp;#039;1&amp;#039;]=true , on =true,&lt;br /&gt;
			no =false, n=false, [&amp;#039;false&amp;#039;]=false, f=false, [&amp;#039;0&amp;#039;]=false, off=false }&lt;br /&gt;
	    val = LUT[mw.ustring.lower(val)]  -- put in lower case&lt;br /&gt;
	    if (val~=nil) then&lt;br /&gt;
			return val&lt;br /&gt;
		end&lt;br /&gt;
    end&lt;br /&gt;
    return default&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
---------------------------------------------------------------------------------------&lt;br /&gt;
-- trim leading zeros in years prior to year 1000&lt;br /&gt;
-- INPUT:&lt;br /&gt;
--  * datestr   - translated date string &lt;br /&gt;
--  * lang      - language of translation&lt;br /&gt;
-- OUTPUT:&lt;br /&gt;
--  * datestr - updated date string &lt;br /&gt;
&lt;br /&gt;
local function trimYear(datestr, year, lang)&lt;br /&gt;
	local yearStr0, yearStr1, yearStr2, zeroStr&lt;br /&gt;
	yearStr0 = string.format(&amp;#039;%04i&amp;#039;, year ) -- 4 digit year in standard form &amp;quot;0123&amp;quot;&lt;br /&gt;
	yearStr1 = mw.language.new(lang):formatDate( &amp;#039;Y&amp;#039;, yearStr0) -- same as calling {{#time}} parser function&lt;br /&gt;
	--yearStr1 = mw.getCurrentFrame():callParserFunction( &amp;quot;#time&amp;quot;, { &amp;#039;Y&amp;#039;, yearStr0, lang } ) -- translate to a language &lt;br /&gt;
	if yearStr0==yearStr1 then -- most of languages use standard form of year &lt;br /&gt;
		yearStr2 = tostring(year)&lt;br /&gt;
	else -- some languages use different characters for numbers&lt;br /&gt;
		yearStr2 = yearStr1&lt;br /&gt;
		zeroStr = mw.ustring.sub(yearStr1,1,1) -- get &amp;quot;0&amp;quot; in whatever language&lt;br /&gt;
		for i=1,3 do -- trim leading zeros&lt;br /&gt;
			if mw.ustring.sub(yearStr2,1,1)==zeroStr then&lt;br /&gt;
				yearStr2 = mw.ustring.sub(yearStr2, 2, 5-i)&lt;br /&gt;
			else&lt;br /&gt;
				break&lt;br /&gt;
			end&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
	return string.gsub(datestr, yearStr1, yearStr2 ) -- in datestr replace long year with trimmed one&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
---------------------------------------------------------------------------------------&lt;br /&gt;
-- Look up proper format string to be passed to {{#time}} parser function&lt;br /&gt;
-- INPUTS:&lt;br /&gt;
--  * datecode: YMDhms, YMDhm, YMD, YM, Y, MDhms, MDhm, MD, or M&lt;br /&gt;
--  * day     : Number between 1 and 31 (not needed for most languages)&lt;br /&gt;
--  * lang    : language&lt;br /&gt;
-- OUTPUT:&lt;br /&gt;
--  * dFormat : input to {{#time}} function&lt;br /&gt;
local function getDateFormat(datecode, day, lang)&lt;br /&gt;
	local function parseFormat(dFormat, day)&lt;br /&gt;
		if dFormat:find(&amp;#039;default&amp;#039;) and #dFormat&amp;gt;10 then&lt;br /&gt;
			-- Special (and messy) case of dFormat code depending on a day number, where data is a&lt;br /&gt;
			-- JSON-encoded table {”default”:”*”,”dDD”:”*”} including fields for specific 2-digit days.&lt;br /&gt;
			-- Change curly double quotes (possibly used for easier editing in tabular data) in dFormat&lt;br /&gt;
			-- to straight ASCII double quotes (required for parsing of this JSON-encoded table).&lt;br /&gt;
			local D = mw.text.jsonDecode(mw.ustring.gsub(dFormat, &amp;#039;[„“‟”]&amp;#039;, &amp;#039;&amp;quot;&amp;#039;)) --com = mw.dumpObject(D)&lt;br /&gt;
			-- If the desired day is not in that JSON table, then use its &amp;quot;default&amp;quot; case.&lt;br /&gt;
			dFormat = D[string.format(&amp;#039;d%02i&amp;#039;, day)] or D.default&lt;br /&gt;
            -- Change ASCII single quotes to ASCII double quotes used for {{#time}} marking.&lt;br /&gt;
            -- Apostrophes needed in plain-text must not use ASCII single quotes but curly apostrophe&lt;br /&gt;
            -- e.g. { ‟default”: ‟j”, ‟d01”: ‟j’&amp;#039;o&amp;#039;” }, not { ‟default”: ‟j”, ‟d01”: ‟j&amp;#039;&amp;#039;o&amp;#039;” }.&lt;br /&gt;
		end&lt;br /&gt;
		dFormat = dFormat:gsub(&amp;quot;&amp;#039;&amp;quot;, &amp;#039;&amp;quot;&amp;#039;)&lt;br /&gt;
		return dFormat&lt;br /&gt;
	end&lt;br /&gt;
	&lt;br /&gt;
	local T = {}&lt;br /&gt;
	local tab = mw.ext.data.get(&amp;#039;DateI18n.tab&amp;#039;, lang)&lt;br /&gt;
	for _, row in pairs(tab.data) do -- convert the output into a dictionary table&lt;br /&gt;
		local id, _, msg = unpack(row)&lt;br /&gt;
		T[id] = msg&lt;br /&gt;
	end&lt;br /&gt;
    -- Compatibility of legacy data using &amp;#039;HMS&amp;#039; or &amp;#039;HM&amp;#039;, where &amp;#039;M&amp;#039; is ambiguous&lt;br /&gt;
    T.YMDhms = T.YMDhms or T.YMDHMS&lt;br /&gt;
    T.YMDhm  = T.YMDhm  or T.YMDHM&lt;br /&gt;
    datecode = datecode == &amp;#039;YMDHMS&amp;#039; and &amp;#039;YMDhms&amp;#039; or datecode == &amp;#039;YMDHM&amp;#039; and &amp;#039;YMDhm&amp;#039; or datecode&lt;br /&gt;
&lt;br /&gt;
	local dFormat = T[datecode]&lt;br /&gt;
	if dFormat == &amp;#039;default&amp;#039; and (datecode == &amp;#039;YMDhms&amp;#039; or datecode == &amp;#039;YMDhm&amp;#039;)  then &lt;br /&gt;
		-- For most languages adding hour:minute:second is done by adding &amp;quot;, HH:ii:ss to the &lt;br /&gt;
		-- day precission date, those languages are skipped in DateI18n.tab and default to &lt;br /&gt;
		-- English which stores word &amp;quot;default&amp;quot;&lt;br /&gt;
		dFormat = parseFormat(T[&amp;#039;YMD&amp;#039;], day).. &amp;#039;, H:i&amp;#039;&lt;br /&gt;
		if datecode == &amp;#039;YMDhms&amp;#039; then&lt;br /&gt;
			dFormat = dFormat .. &amp;#039;:s&amp;#039;&lt;br /&gt;
		end&lt;br /&gt;
	else&lt;br /&gt;
		dFormat = parseFormat(dFormat, day)&lt;br /&gt;
	end&lt;br /&gt;
	return dFormat&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
---------------------------------------------------------------------------------------&lt;br /&gt;
-- Look up proper format string to be passed to {{#time}} parser function&lt;br /&gt;
-- INPUTS:&lt;br /&gt;
--  * month : month number&lt;br /&gt;
--  * case  : gramatic case abbriviation, like &amp;quot;ins&amp;quot;, &amp;quot;loc&amp;quot;&lt;br /&gt;
--  * lang  : language&lt;br /&gt;
-- OUTPUT:&lt;br /&gt;
--  * dFormat : input to {{#time}} function&lt;br /&gt;
local function MonthCase(month, case, lang)&lt;br /&gt;
	if month == nil or case == nil then&lt;br /&gt;
		return nil&lt;br /&gt;
	end&lt;br /&gt;
	local T = {{},{},{},{},{},{},{},{},{},{},{},{}}&lt;br /&gt;
	local tab = mw.ext.data.get(&amp;#039;I18n/MonthCases.tab&amp;#039;, lang)&lt;br /&gt;
	for _, row in pairs(tab.data) do&lt;br /&gt;
		local mth, cs, msg = unpack(row)&lt;br /&gt;
		T[mth][cs] = msg&lt;br /&gt;
	end&lt;br /&gt;
	return T[month][case]&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
-- ==================================================&lt;br /&gt;
-- === External functions ===========================&lt;br /&gt;
-- ==================================================&lt;br /&gt;
local p = {}&lt;br /&gt;
&lt;br /&gt;
-- ===========================================================================&lt;br /&gt;
-- === Functions accesible from the outside to allow unit-testing&lt;br /&gt;
-- === Please do not use directly as they could change in the future&lt;br /&gt;
-- ===========================================================================&lt;br /&gt;
&lt;br /&gt;
---------------------------------------------------------------------------------------&lt;br /&gt;
-- Single string replacement that ignores part of the string in &amp;quot;...&amp;quot;&lt;br /&gt;
function p.strReplace(String, old, new)&lt;br /&gt;
	if String:find(&amp;#039;&amp;quot;&amp;#039;) then&lt;br /&gt;
		local T={}&lt;br /&gt;
		for i, str in ipairs(mw.text.split( String, &amp;#039;&amp;quot;&amp;#039;, true )) do&lt;br /&gt;
			if i%2==1 then&lt;br /&gt;
				str = str:gsub(old, new, 1)&lt;br /&gt;
			end&lt;br /&gt;
			table.insert(T, str)&lt;br /&gt;
		end&lt;br /&gt;
		return table.concat(T,&amp;#039;&amp;quot;&amp;#039;)&lt;br /&gt;
	else&lt;br /&gt;
		return String:gsub(old, new, 1)&lt;br /&gt;
	end&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
---------------------------------------------------------------------------------------&lt;br /&gt;
-- process datevec&lt;br /&gt;
-- INPUT:&lt;br /&gt;
--  * datevec - Array of {year,month,day,hour,minute,second, tzhour, tzmin} containing broken &lt;br /&gt;
--    down date-time component strings or numbers&lt;br /&gt;
-- OUTPUT:&lt;br /&gt;
--  * datenum - same array but holding only numbers or nuls&lt;br /&gt;
function p.clean_datevec(datevec)&lt;br /&gt;
	-- create datecode based on which variables are provided and check for out-of-bound values&lt;br /&gt;
	&lt;br /&gt;
	-- check special case of month provided as a name&lt;br /&gt;
	local month = datevec[2]&lt;br /&gt;
	if type(month) == &amp;#039;string&amp;#039; and month ~= &amp;#039;&amp;#039; and not tonumber(month) then&lt;br /&gt;
		-- When the month is not a number, check if it&amp;#039;s a month name in the project&amp;#039;s language.&lt;br /&gt;
		datevec[2] = mw.getContentLanguage():formatDate(&amp;#039;n&amp;#039;, month)&lt;br /&gt;
	end&lt;br /&gt;
		&lt;br /&gt;
	-- check bounds&lt;br /&gt;
	local maxval = {  1/0, 12, 31, 23, 59, 59,  23, 59 } -- max values (or  1/0=+inf) for year, month, day, hour, minute, second, tzhour, tzmin&lt;br /&gt;
	local minval = { -1/0, 01, 01, 00, 00, 00, -23, 00 } -- min values (or -1/0=-inf) for year, month, ...&lt;br /&gt;
	local datenum  = {} -- date-time encoded as a vector = [year, month, ... , second, tzhour, tzmin]&lt;br /&gt;
	for i = 1, 8 do&lt;br /&gt;
        local val = tonumber(datevec[i])&lt;br /&gt;
        if val and val &amp;gt;= minval[i] and val &amp;lt;= maxval[i] then -- These tests work with infinite min/max values.&lt;br /&gt;
		    datenum[i] = val&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
	&lt;br /&gt;
	-- leap second&lt;br /&gt;
	if tonumber(datevec[6]) == 60 then -- leap second &amp;#039;60&amp;#039; is valid only at end of 23:59 UTC, on 30 June or 31 December of specific years&lt;br /&gt;
--		datenum[6] = 60 &lt;br /&gt;
		local MDhm = table.concat({unpack(datenum,2,5)}, &amp;#039;,&amp;#039;)&lt;br /&gt;
	    if (MDhm == table.concat({6, 30, 23, 59}, &amp;#039;,&amp;#039;)) or (MDhm == table.concat({12, 31, 23, 59}, &amp;#039;,&amp;#039;)) then&lt;br /&gt;
		   datenum[6] = 60 &lt;br /&gt;
	    end&lt;br /&gt;
	end&lt;br /&gt;
	&lt;br /&gt;
	return datenum&lt;br /&gt;
end&lt;br /&gt;
	&lt;br /&gt;
---------------------------------------------------------------------------------------&lt;br /&gt;
-- process datevec&lt;br /&gt;
-- INPUT:&lt;br /&gt;
--  * datenum - Array of {year,month,day,hour,minute,second, tzhour, tzmin} as numbers or nuls&lt;br /&gt;
-- OUTPUT:&lt;br /&gt;
--  * timeStamp - date string in the format taken by mw.language:formatDate lua function and {{#time}} parser function&lt;br /&gt;
--       https://www.mediawiki.org/wiki/Extension:Scribunto/Lua_reference_manual#mw.language:formatDate&lt;br /&gt;
--       https://www.mediawiki.org/wiki/Help:Extension:ParserFunctions#.23time&lt;br /&gt;
--  * datecode - a code specifying content of the array where Y&amp;#039; is year, &amp;#039;M&amp;#039; is month,&lt;br /&gt;
--     &amp;#039;D&amp;#039; is day, &amp;#039;h&amp;#039; is hour, &amp;#039;m&amp;#039; minute, &amp;#039;s&amp;#039; is second.&lt;br /&gt;
--     Output has to be one of YMDhms, YMDhm, YMD, YM, Y, MDhms, MDhm, MD, M.&lt;br /&gt;
function p.getTimestamp(datenum)&lt;br /&gt;
&lt;br /&gt;
	-- create datecode based on datenum&lt;br /&gt;
	local codes  = { &amp;#039;Y&amp;#039;, &amp;#039;M&amp;#039;, &amp;#039;D&amp;#039;, &amp;#039;h&amp;#039;, &amp;#039;m&amp;#039;, &amp;#039;s&amp;#039;} &lt;br /&gt;
	local datecode = &amp;#039;&amp;#039; -- a string signifying which combination of variables was provided&lt;br /&gt;
	for i, c in ipairs(codes) do&lt;br /&gt;
		datecode = datecode .. (datenum[i] and c or &amp;#039;&amp;#039;) -- if datenum[i] than append codes[i] to datecode&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	-- create timestamp string (for example 2000-02-20 02:20:20) based on which variables were provided&lt;br /&gt;
	local timeStamp&lt;br /&gt;
    -- date starting by a year&lt;br /&gt;
	if datecode == &amp;#039;YMDhms&amp;#039; then&lt;br /&gt;
		timeStamp = string.format(&amp;#039;%04i-%02i-%02i %02i:%02i:%02i&amp;#039;, datenum[1], datenum[2], datenum[3], datenum[4], datenum[5], datenum[6] )&lt;br /&gt;
	elseif datecode == &amp;#039;YMDhm&amp;#039; then&lt;br /&gt;
		timeStamp = string.format(&amp;#039;%04i-%02i-%02i %02i:%02i&amp;#039;, datenum[1], datenum[2], datenum[3], datenum[4], datenum[5] )&lt;br /&gt;
	elseif datecode:sub(1,3)==&amp;#039;YMD&amp;#039; then&lt;br /&gt;
		timeStamp = string.format(&amp;#039;%04i-%02i-%02i&amp;#039;, datenum[1], datenum[2], datenum[3] )&lt;br /&gt;
		datecode  = &amp;#039;YMD&amp;#039; -- &amp;#039;YMDhms&amp;#039;, &amp;#039;YMDhm&amp;#039; and &amp;#039;YMD&amp;#039; are the only supported format starting with &amp;#039;YMD&amp;#039;; all others will be converted to &amp;#039;YMD&amp;#039;.&lt;br /&gt;
	elseif datecode:sub(1,2) == &amp;#039;YM&amp;#039; then&lt;br /&gt;
		timeStamp = string.format(&amp;#039;%04i-%02i&amp;#039;, datenum[1], datenum[2] )&lt;br /&gt;
		datecode  = &amp;#039;YM&amp;#039; &lt;br /&gt;
	elseif datecode:sub(1,1)==&amp;#039;Y&amp;#039; then&lt;br /&gt;
		timeStamp = string.format(&amp;#039;%04i&amp;#039;, datenum[1] )&lt;br /&gt;
		datecode  = &amp;#039;Y&amp;#039; &lt;br /&gt;
    -- date starting by a month (the implied year is 2000)&lt;br /&gt;
	elseif datecode== &amp;#039;MDhms&amp;#039; then&lt;br /&gt;
		timeStamp = string.format(&amp;#039;%04i-%02i-%02i %02i:%02i:%02i&amp;#039;, 2000, datenum[2], datenum[3], datenum[4], datenum[5], datenum[6] )&lt;br /&gt;
	elseif datecode == &amp;#039;MDhm&amp;#039; then&lt;br /&gt;
		timeStamp = string.format(&amp;#039;%04i-%02i-%02i %02i:%02i&amp;#039;, 2000, datenum[2], datenum[3], datenum[4], datenum[5] )&lt;br /&gt;
	elseif datecode:sub(1,2) == &amp;#039;MD&amp;#039; then&lt;br /&gt;
		timeStamp = string.format(&amp;#039;%04i-%02i-%02i&amp;#039;, 2000, datenum[2], datenum[3] )&lt;br /&gt;
		datecode = &amp;#039;MD&amp;#039; -- &amp;#039;MDhms&amp;#039;, &amp;#039;MDhm&amp;#039; and &amp;#039;MD&amp;#039; are the only supported format starting with &amp;#039;MD&amp;#039;; all others will be converted to &amp;#039;MD&amp;#039;&lt;br /&gt;
	elseif datecode:sub(1,1) == &amp;#039;M&amp;#039; then -- Ambiguous: could mean minutes, but here means month (when parsed as a name/abbrev, not as a number).&lt;br /&gt;
		timeStamp = string.format(&amp;#039;%04i-%02i-%02i&amp;#039;, 2000, datenum[2], 1 )&lt;br /&gt;
		datecode  = &amp;#039;M&amp;#039; &lt;br /&gt;
    -- other possible but unrecognized formats (e.g. &amp;#039;DHis&amp;#039;, &amp;#039;DHi&amp;#039;, &amp;#039;D&amp;#039;, &amp;#039;His&amp;#039;, &amp;#039;Hi&amp;#039;);&lt;br /&gt;
    -- note that &amp;#039;Dh&amp;#039;, &amp;#039;D&amp;#039;, &amp;#039;h&amp;#039;, &amp;#039;s&amp;#039; may eventually work, but not &amp;#039;m&amp;#039; for minute only, which is ambiguous with &amp;#039;M&amp;#039; for month only.&lt;br /&gt;
	else&lt;br /&gt;
		timeStamp = nil -- format not supported&lt;br /&gt;
	end&lt;br /&gt;
	return timeStamp, datecode&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
local function isValidLangCode(lang)&lt;br /&gt;
	if not lang then&lt;br /&gt;
		return false&lt;br /&gt;
	end&lt;br /&gt;
	lang = mw.text.trim(lang)&lt;br /&gt;
	return lang ~= &amp;#039;&amp;#039; and lang ~= &amp;#039;⧼Lang⧽&amp;#039; and mw.language.isValidCode(lang)&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
-- ===========================================================================&lt;br /&gt;
-- === Version of the function to be called from other LUA codes&lt;br /&gt;
-- ===========================================================================&lt;br /&gt;
&lt;br /&gt;
--[[ ========================================================================================&lt;br /&gt;
Date&lt;br /&gt;
 &lt;br /&gt;
This function is the core part of the ISOdate template. &lt;br /&gt;
 &lt;br /&gt;
Usage:&lt;br /&gt;
  local Date = require(&amp;#039;Module:DateI18n&amp;#039;)._Date&lt;br /&gt;
  local dateStr = Date({2020, 12, 30, 12, 20, 11}, lang)&lt;br /&gt;
 &lt;br /&gt;
Parameters:&lt;br /&gt;
  * {year,month,day,hour,minute,second, tzhour, tzmin}: broken down date-time component strings or numbers&lt;br /&gt;
		tzhour, tzmin are timezone offsets from UTC, hours and minutes&lt;br /&gt;
  * lang: The language to display it in&lt;br /&gt;
  * case: Language format (genitive, etc.) for some languages&lt;br /&gt;
  * class: CSS class for the &amp;lt;time&amp;gt; node, use &amp;quot;&amp;quot; for no metadata at all&lt;br /&gt;
]]&lt;br /&gt;
function p._Date(datevec, lang, case, class, trim_year)&lt;br /&gt;
	-- make sure inputs are in the right format&lt;br /&gt;
	&lt;br /&gt;
	-- set language&lt;br /&gt;
	if not isValidLangCode(lang) then&lt;br /&gt;
		-- get user&amp;#039;s chosen language&lt;br /&gt;
		-- equivalent to {{int:lang}}&lt;br /&gt;
		lang = mw.getCurrentFrame():callParserFunction(&amp;quot;int&amp;quot;, &amp;quot;lang&amp;quot;)&lt;br /&gt;
		&lt;br /&gt;
		if not isValidLangCode(lang) then&lt;br /&gt;
			-- if that doesn&amp;#039;t work, use the project language&lt;br /&gt;
			-- this is useful on projects which import this module from Commons&lt;br /&gt;
			lang = mw.language.getContentLanguage().code&lt;br /&gt;
			&lt;br /&gt;
			if not isValidLangCode(lang) then&lt;br /&gt;
				-- if that doesn&amp;#039;t work, use English&lt;br /&gt;
				lang = &amp;quot;en&amp;quot;&lt;br /&gt;
			end&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
	if lang == &amp;#039;be-tarask&amp;#039; then&lt;br /&gt;
		lang = &amp;#039;be-x-old&amp;#039;&lt;br /&gt;
	end&lt;br /&gt;
	&lt;br /&gt;
	-- process datevec and extract timeStamp and datecode strings as well as numeric datenum array&lt;br /&gt;
	local datenum  = p.clean_datevec(datevec)&lt;br /&gt;
	local year, month, day = datenum[1], datenum[2], datenum[3]&lt;br /&gt;
	local timeStamp, datecode = p.getTimestamp(datenum)&lt;br /&gt;
	if not timeStamp then -- something went wrong in parserDatevec&lt;br /&gt;
		return &amp;#039;&amp;#039;&lt;br /&gt;
	end&lt;br /&gt;
	-- Commons [[Data:DateI18n.tab]] page stores prefered formats for diferent &lt;br /&gt;
	-- languages and datecodes (specifying year-month-day or just year of month-day, etc)&lt;br /&gt;
	-- Look up country specific format input to {{#time}} function&lt;br /&gt;
	local dFormat = getDateFormat(datecode, day, lang)&lt;br /&gt;
&lt;br /&gt;
	-- By default the gramatical case is not specified (case==&amp;#039;&amp;#039;) allowing the format to be specified &lt;br /&gt;
	-- in [[Data:DateI18n.tab]]. You can overwrite the default grammatical case of the month by &lt;br /&gt;
	-- specifying &amp;quot;case&amp;quot; variable. This is needed mostly by Slavic languages to create more complex &lt;br /&gt;
	-- phrases as it is done in [[c:Module:Complex date]]&lt;br /&gt;
	case = case or &amp;#039;&amp;#039;&lt;br /&gt;
	if (lang==&amp;#039;qu&amp;#039; or lang==&amp;#039;qug&amp;#039;) and case==&amp;#039;nom&amp;#039; then&lt;br /&gt;
		-- Special case related to Quechua and Kichwa languages. The form in the I18n is&lt;br /&gt;
		--  Genitive case with suffix &amp;quot;pi&amp;quot; added to month names provided by {#time}}&lt;br /&gt;
		-- in Nominative case that &amp;quot;pi&amp;quot; should be removed&lt;br /&gt;
		-- see https://commons.wikimedia.org/wiki/Template_talk:Date#Quechua from 2014&lt;br /&gt;
		dFormat = dFormat:gsub(&amp;#039;F&amp;quot;pi&amp;quot;&amp;#039;, &amp;#039;F&amp;#039;)&lt;br /&gt;
	elseif case == &amp;#039;gen&amp;#039; then&lt;br /&gt;
		dFormat = p.strReplace(dFormat, &amp;quot;F&amp;quot;, &amp;quot;xg&amp;quot;)&lt;br /&gt;
	elseif case == &amp;#039;nom&amp;#039; then&lt;br /&gt;
		dFormat = p.strReplace(dFormat, &amp;quot;xg&amp;quot;, &amp;quot;F&amp;quot;)&lt;br /&gt;
	elseif case ~= &amp;#039;&amp;#039; and month ~= nil then&lt;br /&gt;
		-- see is page [[Data:I18n/MonthCases.tab]] on Commons have name of the month &lt;br /&gt;
		-- in specific gramatic case in desired language. If we have it than replace &lt;br /&gt;
		-- &amp;quot;F&amp;quot; and xg&amp;quot; in dFormat&lt;br /&gt;
		local monthMsg = MonthCase(month, case, lang)&lt;br /&gt;
		if  monthMsg and monthMsg ~= &amp;#039;&amp;#039; then -- make sure it exists&lt;br /&gt;
			dFormat = p.strReplace(dFormat, &amp;#039;F&amp;#039;,  &amp;#039;&amp;quot;&amp;#039;..monthMsg..&amp;#039;&amp;quot;&amp;#039;) -- replace default month with month name we already looked up&lt;br /&gt;
			dFormat = p.strReplace(dFormat, &amp;#039;xg&amp;#039;, &amp;#039;&amp;quot;&amp;#039;..monthMsg..&amp;#039;&amp;quot;&amp;#039;)&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
    -- Translate the date using specified format.&lt;br /&gt;
	-- See https://www.mediawiki.org/wiki/Extension:Scribunto/Lua_reference_manual#mw.language:formatDate and &lt;br /&gt;
	-- https://www.mediawiki.org/wiki/Help:Extension:ParserFunctions##time for explanation of the format&lt;br /&gt;
	local langObj = mw.language.new(lang)&lt;br /&gt;
	local datestr = langObj:formatDate(dFormat, timeStamp) -- same as using {{#time}} parser function&lt;br /&gt;
	&lt;br /&gt;
	-- Special case related to Thai solar calendar: prior to 1940 new-year was at different time of year,&lt;br /&gt;
	-- so just year (datecode == &amp;#039;Y&amp;#039;) is ambiguous and is replaced by &amp;quot;YYYY or YYYY&amp;quot; phrase&lt;br /&gt;
	if lang==&amp;#039;th&amp;#039; and datecode==&amp;#039;Y&amp;#039; and year&amp;lt;=1940 then&lt;br /&gt;
		datestr = string.format(&amp;#039;%04i หรือ %04i&amp;#039;, year+542, year+543 ) &lt;br /&gt;
	end&lt;br /&gt;
	&lt;br /&gt;
	-- If year &amp;lt; 1000 than either keep the date padded to the length of 4 digits or trim it.&lt;br /&gt;
	-- Decide if the year will stay padded with zeros (for years in 0-999 range).&lt;br /&gt;
	if year and year &amp;lt; 1000 then&lt;br /&gt;
		trim_year = yesno(trim_year, trim_year or &amp;#039;100-999&amp;#039;)&lt;br /&gt;
		if type(trim_year) == &amp;#039;string&amp;#039; then&lt;br /&gt;
			-- If `trim_year` not a simple boolean, then it&amp;#039;s a range of dates.&lt;br /&gt;
			-- For example &amp;#039;100-999&amp;#039; means to pad 1-or-2-digit years to be 4-digit long, while keeping 3-digit years as is.&lt;br /&gt;
			local YMin, YMax = trim_year:match( &amp;#039;(%d+)-(%d+)&amp;#039; )&lt;br /&gt;
			trim_year = YMin and year &amp;gt;= tonumber(YMin) and year &amp;lt;= tonumber(YMax)&lt;br /&gt;
		end&lt;br /&gt;
		if trim_year then&lt;br /&gt;
			datestr = trimYear(datestr, year, lang) -- in datestr replace long year with trimmed one&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	-- Append a timezone if present (after the hour and minute of the day).&lt;br /&gt;
	if datenum[7] and (datecode:sub(1, 5) == &amp;#039;YMDhm&amp;#039; or datecode:sub(1, 4) == &amp;#039;MDhm&amp;#039;) then&lt;br /&gt;
		-- Use {{#time}} parser function to create timezone string, so that we use the correct character set.&lt;br /&gt;
		local sign = (datenum[7]&amp;lt;0) and &amp;#039;−&amp;#039; or &amp;#039;+&amp;#039;&lt;br /&gt;
		timeStamp = string.format(&amp;quot;2000-01-01 %02i:%02i:00&amp;quot;, math.abs(datenum[7]), datenum[8] or 0)&lt;br /&gt;
		local timezone = langObj:formatDate(&amp;#039;H:i&amp;#039;, timeStamp) -- same as using {{#time}} parser function&lt;br /&gt;
		datestr = string.format(&amp;quot;%s %s%s&amp;quot;, datestr, sign, timezone )&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	-- HTML formating of date string and tagging for microformats (only for absolute dates with a year).&lt;br /&gt;
	if class and class ~= &amp;#039;&amp;#039; and class ~= &amp;#039;-&amp;#039; and datecode:sub(1,1) == &amp;#039;Y&amp;#039; then &lt;br /&gt;
		local pat = &amp;#039;&amp;lt;time class=&amp;quot;%s&amp;quot; datetime=&amp;quot;%s&amp;quot; lang=&amp;quot;%s&amp;quot; dir=&amp;quot;%s&amp;quot; style=&amp;quot;white-space:nowrap&amp;quot;&amp;gt;%s&amp;lt;/time&amp;gt;&amp;#039;&lt;br /&gt;
		datestr = pat:format(class, timeStamp, lang, langObj:getDir(), datestr)&lt;br /&gt;
	end&lt;br /&gt;
	return datestr&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
-- ===========================================================================&lt;br /&gt;
-- === Version of the function to be called from template namespace&lt;br /&gt;
-- ===========================================================================&lt;br /&gt;
&lt;br /&gt;
--[[ ========================================================================================&lt;br /&gt;
Date&lt;br /&gt;
 &lt;br /&gt;
This function is the core part of the ISOdate template. &lt;br /&gt;
 &lt;br /&gt;
Usage:&lt;br /&gt;
{{#invoke:DateI18n|Date|year=|month=|day=|hour=|minute=|second=|tzhour=|tzmin=|lang=en}}&lt;br /&gt;
 &lt;br /&gt;
Parameters:&lt;br /&gt;
  * year, month, day, hour, minute, second: broken down date-time component strings&lt;br /&gt;
  * tzhour, tzmin: timezone offset from UTC, hours and minutes&lt;br /&gt;
  * lang: The language to display it in&lt;br /&gt;
  * case: Language format (genitive, etc.) for some languages&lt;br /&gt;
  * class: CSS class for the &amp;lt;time&amp;gt; node, use &amp;quot;&amp;quot; for no metadata at all&lt;br /&gt;
]]&lt;br /&gt;
function p.Date(frame)&lt;br /&gt;
	-- get args&lt;br /&gt;
	local args = {}&lt;br /&gt;
	for key, value in pairs(frame.args) do &lt;br /&gt;
		local trimmed_key = string.gsub(string.lower(mw.text.trim(key)), &amp;#039; &amp;#039;, &amp;#039;_&amp;#039;)&lt;br /&gt;
		local trimmed_value = mw.text.trim(value)&lt;br /&gt;
		if trimmed_key ~= &amp;#039;class&amp;#039; and trimmed_value == &amp;#039;&amp;#039; then&lt;br /&gt;
			trimmed_value = nil&lt;br /&gt;
		end&lt;br /&gt;
		args[trimmed_key] = trimmed_value&lt;br /&gt;
	end&lt;br /&gt;
	&lt;br /&gt;
	-- default values&lt;br /&gt;
	-- Allows to set the html class of the time node where the date is included. This is useful for microformats.&lt;br /&gt;
	args.class = args.class or &amp;#039;-&amp;#039;&lt;br /&gt;
	if args.class == &amp;#039;&amp;#039; then&lt;br /&gt;
		args.class = &amp;#039;dtstart&amp;#039;&lt;br /&gt;
	end&lt;br /&gt;
	-- By default, pad one- and two-digit years to be 4 digits long, while keeping three-digit years as-is.&lt;br /&gt;
	args.trim_year = args.trim_year or &amp;#039;100-999&amp;#039;&lt;br /&gt;
	&lt;br /&gt;
	return p._Date(	&lt;br /&gt;
		{args.year, args.month, args.day, args.hour, args.minute, args.second, args.tzhour, args.tzmin},&lt;br /&gt;
		args.lang,&lt;br /&gt;
		args.case,	&lt;br /&gt;
		args.class,&lt;br /&gt;
		args.trim_year&lt;br /&gt;
	)	&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
return p&lt;/div&gt;</description>
			<pubDate>Fri, 25 Sep 2026 08:48:06 GMT</pubDate>
			<dc:creator>Shahroudi</dc:creator>
			<comments>https://commons.islamical.org/view/Module_talk:DateI18n/sandbox_2</comments>
		</item>
		<item>
			<title>Module:DateI18n/sandbox2</title>
			<link>https://commons.islamical.org/w/index.php?title=Module:DateI18n/sandbox2&amp;diff=3962&amp;oldid=0</link>
			<guid isPermaLink="false">https://commons.islamical.org/w/index.php?title=Module:DateI18n/sandbox2&amp;diff=3962&amp;oldid=0</guid>
			<description>&lt;p&gt;Created page with &amp;quot;--[[     __  __           _       _        ____        _       ___ _  ___          |  \/  | ___   __| |_   _| | ___ _|  _ \  __ _| |_ ___|_ _/ |( _ ) _ __    | |\/| |/ _ \ / _` | | | | |/ _ (_) | | |/ _` | __/ _ \| || |/ _ \| &amp;#039;_ \   | |  | | (_) | (_| | |_| | |  __/_| |_| | (_| | ||  __/| || | (_) | | | |  |_|  |_|\___/ \__,_|\__,_|_|\___(_)____/ \__,_|\__\___|___|_|\___/|_| |_|    This module is intended for processing of date strings.  Please do not modify this code wi...&amp;quot;&lt;/p&gt;
&lt;p&gt;&lt;b&gt;New page&lt;/b&gt;&lt;/p&gt;&lt;div&gt;--[[  &lt;br /&gt;
  __  __           _       _        ____        _       ___ _  ___        &lt;br /&gt;
 |  \/  | ___   __| |_   _| | ___ _|  _ \  __ _| |_ ___|_ _/ |( _ ) _ __  &lt;br /&gt;
 | |\/| |/ _ \ / _` | | | | |/ _ (_) | | |/ _` | __/ _ \| || |/ _ \| &amp;#039;_ \ &lt;br /&gt;
 | |  | | (_) | (_| | |_| | |  __/_| |_| | (_| | ||  __/| || | (_) | | | |&lt;br /&gt;
 |_|  |_|\___/ \__,_|\__,_|_|\___(_)____/ \__,_|\__\___|___|_|\___/|_| |_|&lt;br /&gt;
  &lt;br /&gt;
This module is intended for processing of date strings.&lt;br /&gt;
&lt;br /&gt;
Please do not modify this code without applying the changes first at Module:Date/sandbox and testing &lt;br /&gt;
at Module:Date/sandbox/testcases and Module talk:Date/sandbox/testcases.&lt;br /&gt;
&lt;br /&gt;
Authors and maintainers:&lt;br /&gt;
* User:Parent5446 - original version of the function mimicking template:ISOdate&lt;br /&gt;
* User:Jarekt - original version of the functions mimicking template:Date &lt;br /&gt;
]]&lt;br /&gt;
&lt;br /&gt;
-- =======================================&lt;br /&gt;
-- === Dependencies ======================&lt;br /&gt;
-- =======================================&lt;br /&gt;
&lt;br /&gt;
require(&amp;#039;strict&amp;#039;)&lt;br /&gt;
&lt;br /&gt;
-- =======================================&lt;br /&gt;
-- === Local Functions ===================&lt;br /&gt;
-- =======================================&lt;br /&gt;
&lt;br /&gt;
------------------------------------------------------------------------------&lt;br /&gt;
--[[ (copied from Module:Core)&lt;br /&gt;
Function allowing for consistent treatment of boolean-like wikitext input.&lt;br /&gt;
Inputs:&lt;br /&gt;
  1) val - value to be evaluated, outputs as a function of values:&lt;br /&gt;
		true  : true  (boolean), 1 (number), or strings: &amp;quot;yes&amp;quot;, &amp;quot;y&amp;quot;, &amp;quot;true&amp;quot;, &amp;quot;1&amp;quot;&lt;br /&gt;
		false : false (boolean), 0 (number), or strings: &amp;quot;no&amp;quot;, &amp;quot;n&amp;quot;, &amp;quot;false&amp;quot;, &amp;quot;0&amp;quot;&lt;br /&gt;
  2) default - value to return otherwise&lt;br /&gt;
See Also: It works similarly to Module:Yesno&lt;br /&gt;
]]&lt;br /&gt;
local function yesno(val, default)&lt;br /&gt;
	if type(val) == &amp;#039;boolean&amp;#039; then&lt;br /&gt;
		return val&lt;br /&gt;
	elseif type(val) == &amp;#039;number&amp;#039; then&lt;br /&gt;
		val = tostring(val)&lt;br /&gt;
	end&lt;br /&gt;
	if type(val) == &amp;#039;string&amp;#039; then&lt;br /&gt;
		local LUT = {&lt;br /&gt;
			yes=true , y=true , [&amp;#039;true&amp;#039;] =true , t=true , [&amp;#039;1&amp;#039;]=true , on =true,&lt;br /&gt;
			no =false, n=false, [&amp;#039;false&amp;#039;]=false, f=false, [&amp;#039;0&amp;#039;]=false, off=false }&lt;br /&gt;
	    val = LUT[mw.ustring.lower(val)]  -- put in lower case&lt;br /&gt;
	    if (val~=nil) then&lt;br /&gt;
			return val&lt;br /&gt;
		end&lt;br /&gt;
    end&lt;br /&gt;
    return default&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
---------------------------------------------------------------------------------------&lt;br /&gt;
-- trim leading zeros in years prior to year 1000&lt;br /&gt;
-- INPUT:&lt;br /&gt;
--  * datestr   - translated date string &lt;br /&gt;
--  * lang      - language of translation&lt;br /&gt;
-- OUTPUT:&lt;br /&gt;
--  * datestr - updated date string &lt;br /&gt;
&lt;br /&gt;
local function trimYear(datestr, year, lang)&lt;br /&gt;
	local yearStr0, yearStr1, yearStr2, zeroStr&lt;br /&gt;
	yearStr0 = string.format(&amp;#039;%04i&amp;#039;, year ) -- 4 digit year in standard form &amp;quot;0123&amp;quot;&lt;br /&gt;
	yearStr1 = mw.language.new(lang):formatDate( &amp;#039;Y&amp;#039;, yearStr0) -- same as calling {{#time}} parser function&lt;br /&gt;
	--yearStr1 = mw.getCurrentFrame():callParserFunction( &amp;quot;#time&amp;quot;, { &amp;#039;Y&amp;#039;, yearStr0, lang } ) -- translate to a language &lt;br /&gt;
	if yearStr0==yearStr1 then -- most of languages use standard form of year &lt;br /&gt;
		yearStr2 = tostring(year)&lt;br /&gt;
	else -- some languages use different characters for numbers&lt;br /&gt;
		yearStr2 = yearStr1&lt;br /&gt;
		zeroStr = mw.ustring.sub(yearStr1,1,1) -- get &amp;quot;0&amp;quot; in whatever language&lt;br /&gt;
		for i=1,3 do -- trim leading zeros&lt;br /&gt;
			if mw.ustring.sub(yearStr2,1,1)==zeroStr then&lt;br /&gt;
				yearStr2 = mw.ustring.sub(yearStr2, 2, 5-i)&lt;br /&gt;
			else&lt;br /&gt;
				break&lt;br /&gt;
			end&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
	return string.gsub(datestr, yearStr1, yearStr2 ) -- in datestr replace long year with trimmed one&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
---------------------------------------------------------------------------------------&lt;br /&gt;
-- Look up proper format string to be passed to {{#time}} parser function&lt;br /&gt;
-- INPUTS:&lt;br /&gt;
--  * datecode: YMDhms, YMDhm, YMD, YM, Y, MDhms, MDhm, MD, or M&lt;br /&gt;
--  * day     : Number between 1 and 31 (not needed for most languages)&lt;br /&gt;
--  * lang    : language&lt;br /&gt;
-- OUTPUT:&lt;br /&gt;
--  * dFormat : input to {{#time}} function&lt;br /&gt;
local function getDateFormat(datecode, day, lang)&lt;br /&gt;
	local function parseFormat(dFormat, day)&lt;br /&gt;
		if dFormat:find(&amp;#039;default&amp;#039;) and #dFormat&amp;gt;10 then&lt;br /&gt;
			-- Special (and messy) case of dFormat code depending on a day number, where data is a&lt;br /&gt;
			-- JSON-encoded table {”default”:”*”,”dDD”:”*”} including fields for specific 2-digit days.&lt;br /&gt;
			-- Change curly double quotes (possibly used for easier editing in tabular data) in dFormat&lt;br /&gt;
			-- to straight ASCII double quotes (required for parsing of this JSON-encoded table).&lt;br /&gt;
			local D = mw.text.jsonDecode(mw.ustring.gsub(dFormat, &amp;#039;[„“‟”]&amp;#039;, &amp;#039;&amp;quot;&amp;#039;)) --com = mw.dumpObject(D)&lt;br /&gt;
			-- If the desired day is not in that JSON table, then use its &amp;quot;default&amp;quot; case.&lt;br /&gt;
			dFormat = D[string.format(&amp;#039;d%02i&amp;#039;, day)] or D.default&lt;br /&gt;
            -- Change ASCII single quotes to ASCII double quotes used for {{#time}} marking.&lt;br /&gt;
            -- Apostrophes needed in plain-text must not use ASCII single quotes but curly apostrophe&lt;br /&gt;
            -- e.g. { ‟default”: ‟j”, ‟d01”: ‟j’&amp;#039;o&amp;#039;” }, not { ‟default”: ‟j”, ‟d01”: ‟j&amp;#039;&amp;#039;o&amp;#039;” }.&lt;br /&gt;
		end&lt;br /&gt;
		dFormat = dFormat:gsub(&amp;quot;&amp;#039;&amp;quot;, &amp;#039;&amp;quot;&amp;#039;)&lt;br /&gt;
		return dFormat&lt;br /&gt;
	end&lt;br /&gt;
	&lt;br /&gt;
	local T = {}&lt;br /&gt;
	local tab = mw.ext.data.get(&amp;#039;DateI18n.tab&amp;#039;, lang)&lt;br /&gt;
	for _, row in pairs(tab.data) do -- convert the output into a dictionary table&lt;br /&gt;
		local id, _, msg = unpack(row)&lt;br /&gt;
		T[id] = msg&lt;br /&gt;
	end&lt;br /&gt;
    -- Compatibility of legacy data using &amp;#039;HMS&amp;#039; or &amp;#039;HM&amp;#039;, where &amp;#039;M&amp;#039; is ambiguous&lt;br /&gt;
    T.YMDhms = T.YMDhms or T.YMDHMS&lt;br /&gt;
    T.YMDhm  = T.YMDhm  or T.YMDHM&lt;br /&gt;
    datecode = datecode == &amp;#039;YMDHMS&amp;#039; and &amp;#039;YMDhms&amp;#039; or datecode == &amp;#039;YMDHM&amp;#039; and &amp;#039;YMDhm&amp;#039; or datecode&lt;br /&gt;
&lt;br /&gt;
	local dFormat = T[datecode]&lt;br /&gt;
	if dFormat == &amp;#039;default&amp;#039; and (datecode == &amp;#039;YMDhms&amp;#039; or datecode == &amp;#039;YMDhm&amp;#039;)  then &lt;br /&gt;
		-- For most languages adding hour:minute:second is done by adding &amp;quot;, HH:ii:ss to the &lt;br /&gt;
		-- day precission date, those languages are skipped in DateI18n.tab and default to &lt;br /&gt;
		-- English which stores word &amp;quot;default&amp;quot;&lt;br /&gt;
		dFormat = parseFormat(T[&amp;#039;YMD&amp;#039;], day).. &amp;#039;, H:i&amp;#039;&lt;br /&gt;
		if datecode == &amp;#039;YMDhms&amp;#039; then&lt;br /&gt;
			dFormat = dFormat .. &amp;#039;:s&amp;#039;&lt;br /&gt;
		end&lt;br /&gt;
	else&lt;br /&gt;
		dFormat = parseFormat(dFormat, day)&lt;br /&gt;
	end&lt;br /&gt;
	return dFormat&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
---------------------------------------------------------------------------------------&lt;br /&gt;
-- Look up proper format string to be passed to {{#time}} parser function&lt;br /&gt;
-- INPUTS:&lt;br /&gt;
--  * month : month number&lt;br /&gt;
--  * case  : gramatic case abbriviation, like &amp;quot;ins&amp;quot;, &amp;quot;loc&amp;quot;&lt;br /&gt;
--  * lang  : language&lt;br /&gt;
-- OUTPUT:&lt;br /&gt;
--  * dFormat : input to {{#time}} function&lt;br /&gt;
local function MonthCase(month, case, lang)&lt;br /&gt;
	if month == nil or case == nil then&lt;br /&gt;
		return nil&lt;br /&gt;
	end&lt;br /&gt;
	local T = {{},{},{},{},{},{},{},{},{},{},{},{}}&lt;br /&gt;
	local tab = mw.ext.data.get(&amp;#039;I18n/MonthCases.tab&amp;#039;, lang)&lt;br /&gt;
	for _, row in pairs(tab.data) do&lt;br /&gt;
		local mth, cs, msg = unpack(row)&lt;br /&gt;
		T[mth][cs] = msg&lt;br /&gt;
	end&lt;br /&gt;
	return T[month][case]&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
-- ==================================================&lt;br /&gt;
-- === External functions ===========================&lt;br /&gt;
-- ==================================================&lt;br /&gt;
local p = {}&lt;br /&gt;
&lt;br /&gt;
-- ===========================================================================&lt;br /&gt;
-- === Functions accesible from the outside to allow unit-testing&lt;br /&gt;
-- === Please do not use directly as they could change in the future&lt;br /&gt;
-- ===========================================================================&lt;br /&gt;
&lt;br /&gt;
---------------------------------------------------------------------------------------&lt;br /&gt;
-- Single string replacement that ignores part of the string in &amp;quot;...&amp;quot;&lt;br /&gt;
function p.strReplace(String, old, new)&lt;br /&gt;
	if String:find(&amp;#039;&amp;quot;&amp;#039;) then&lt;br /&gt;
		local T={}&lt;br /&gt;
		for i, str in ipairs(mw.text.split( String, &amp;#039;&amp;quot;&amp;#039;, true )) do&lt;br /&gt;
			if i%2==1 then&lt;br /&gt;
				str = str:gsub(old, new, 1)&lt;br /&gt;
			end&lt;br /&gt;
			table.insert(T, str)&lt;br /&gt;
		end&lt;br /&gt;
		return table.concat(T,&amp;#039;&amp;quot;&amp;#039;)&lt;br /&gt;
	else&lt;br /&gt;
		return String:gsub(old, new, 1)&lt;br /&gt;
	end&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
---------------------------------------------------------------------------------------&lt;br /&gt;
-- process datevec&lt;br /&gt;
-- INPUT:&lt;br /&gt;
--  * datevec - Array of {year,month,day,hour,minute,second, tzhour, tzmin} containing broken &lt;br /&gt;
--    down date-time component strings or numbers&lt;br /&gt;
-- OUTPUT:&lt;br /&gt;
--  * datenum - same array but holding only numbers or nuls&lt;br /&gt;
function p.clean_datevec(datevec)&lt;br /&gt;
	-- create datecode based on which variables are provided and check for out-of-bound values&lt;br /&gt;
	&lt;br /&gt;
	-- check special case of month provided as a name&lt;br /&gt;
	local month = datevec[2]&lt;br /&gt;
	if type(month) == &amp;#039;string&amp;#039; and month ~= &amp;#039;&amp;#039; and not tonumber(month) then&lt;br /&gt;
		-- When the month is not a number, check if it&amp;#039;s a month name in the project&amp;#039;s language.&lt;br /&gt;
		datevec[2] = mw.getContentLanguage():formatDate(&amp;#039;n&amp;#039;, month)&lt;br /&gt;
	end&lt;br /&gt;
		&lt;br /&gt;
	-- check bounds&lt;br /&gt;
	local maxval = {  1/0, 12, 31, 23, 59, 59,  23, 59 } -- max values (or  1/0=+inf) for year, month, day, hour, minute, second, tzhour, tzmin&lt;br /&gt;
	local minval = { -1/0, 01, 01, 00, 00, 00, -23, 00 } -- min values (or -1/0=-inf) for year, month, ...&lt;br /&gt;
	local datenum  = {} -- date-time encoded as a vector = [year, month, ... , second, tzhour, tzmin]&lt;br /&gt;
	for i = 1, 8 do&lt;br /&gt;
        local val = tonumber(datevec[i])&lt;br /&gt;
        if val and val &amp;gt;= minval[i] and val &amp;lt;= maxval[i] then -- These tests work with infinite min/max values.&lt;br /&gt;
		    datenum[i] = val&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
	&lt;br /&gt;
	-- leap second&lt;br /&gt;
	if tonumber(datevec[6]) == 60 then -- leap second &amp;#039;60&amp;#039; is valid only at end of 23:59 UTC, on 30 June or 31 December of specific years&lt;br /&gt;
--		datenum[6] = 60 &lt;br /&gt;
		local MDhm = table.concat({unpack(datenum,2,5)}, &amp;#039;,&amp;#039;)&lt;br /&gt;
	    if (MDhm == table.concat({6, 30, 23, 59}, &amp;#039;,&amp;#039;)) or (MDhm == table.concat({12, 31, 23, 59}, &amp;#039;,&amp;#039;)) then&lt;br /&gt;
		   datenum[6] = 60 &lt;br /&gt;
	    end&lt;br /&gt;
	end&lt;br /&gt;
	&lt;br /&gt;
	return datenum&lt;br /&gt;
end&lt;br /&gt;
	&lt;br /&gt;
---------------------------------------------------------------------------------------&lt;br /&gt;
-- process datevec&lt;br /&gt;
-- INPUT:&lt;br /&gt;
--  * datenum - Array of {year,month,day,hour,minute,second, tzhour, tzmin} as numbers or nuls&lt;br /&gt;
-- OUTPUT:&lt;br /&gt;
--  * timeStamp - date string in the format taken by mw.language:formatDate lua function and {{#time}} parser function&lt;br /&gt;
--       https://www.mediawiki.org/wiki/Extension:Scribunto/Lua_reference_manual#mw.language:formatDate&lt;br /&gt;
--       https://www.mediawiki.org/wiki/Help:Extension:ParserFunctions#.23time&lt;br /&gt;
--  * datecode - a code specifying content of the array where Y&amp;#039; is year, &amp;#039;M&amp;#039; is month,&lt;br /&gt;
--     &amp;#039;D&amp;#039; is day, &amp;#039;h&amp;#039; is hour, &amp;#039;m&amp;#039; minute, &amp;#039;s&amp;#039; is second.&lt;br /&gt;
--     Output has to be one of YMDhms, YMDhm, YMD, YM, Y, MDhms, MDhm, MD, M.&lt;br /&gt;
function p.getTimestamp(datenum)&lt;br /&gt;
&lt;br /&gt;
	-- create datecode based on datenum&lt;br /&gt;
	local codes  = { &amp;#039;Y&amp;#039;, &amp;#039;M&amp;#039;, &amp;#039;D&amp;#039;, &amp;#039;h&amp;#039;, &amp;#039;m&amp;#039;, &amp;#039;s&amp;#039;} &lt;br /&gt;
	local datecode = &amp;#039;&amp;#039; -- a string signifying which combination of variables was provided&lt;br /&gt;
	for i, c in ipairs(codes) do&lt;br /&gt;
		datecode = datecode .. (datenum[i] and c or &amp;#039;&amp;#039;) -- if datenum[i] than append codes[i] to datecode&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	-- create timestamp string (for example 2000-02-20 02:20:20) based on which variables were provided&lt;br /&gt;
	local timeStamp&lt;br /&gt;
    -- date starting by a year&lt;br /&gt;
	if datecode == &amp;#039;YMDhms&amp;#039; then&lt;br /&gt;
		timeStamp = string.format(&amp;#039;%04i-%02i-%02i %02i:%02i:%02i&amp;#039;, datenum[1], datenum[2], datenum[3], datenum[4], datenum[5], datenum[6] )&lt;br /&gt;
	elseif datecode == &amp;#039;YMDhm&amp;#039; then&lt;br /&gt;
		timeStamp = string.format(&amp;#039;%04i-%02i-%02i %02i:%02i&amp;#039;, datenum[1], datenum[2], datenum[3], datenum[4], datenum[5] )&lt;br /&gt;
	elseif datecode:sub(1,3)==&amp;#039;YMD&amp;#039; then&lt;br /&gt;
		timeStamp = string.format(&amp;#039;%04i-%02i-%02i&amp;#039;, datenum[1], datenum[2], datenum[3] )&lt;br /&gt;
		datecode  = &amp;#039;YMD&amp;#039; -- &amp;#039;YMDhms&amp;#039;, &amp;#039;YMDhm&amp;#039; and &amp;#039;YMD&amp;#039; are the only supported format starting with &amp;#039;YMD&amp;#039;; all others will be converted to &amp;#039;YMD&amp;#039;.&lt;br /&gt;
	elseif datecode:sub(1,2) == &amp;#039;YM&amp;#039; then&lt;br /&gt;
		timeStamp = string.format(&amp;#039;%04i-%02i&amp;#039;, datenum[1], datenum[2] )&lt;br /&gt;
		datecode  = &amp;#039;YM&amp;#039; &lt;br /&gt;
	elseif datecode:sub(1,1)==&amp;#039;Y&amp;#039; then&lt;br /&gt;
		timeStamp = string.format(&amp;#039;%04i&amp;#039;, datenum[1] )&lt;br /&gt;
		datecode  = &amp;#039;Y&amp;#039; &lt;br /&gt;
    -- date starting by a month (the implied year is 2000)&lt;br /&gt;
	elseif datecode== &amp;#039;MDhms&amp;#039; then&lt;br /&gt;
		timeStamp = string.format(&amp;#039;%04i-%02i-%02i %02i:%02i:%02i&amp;#039;, 2000, datenum[2], datenum[3], datenum[4], datenum[5], datenum[6] )&lt;br /&gt;
	elseif datecode == &amp;#039;MDhm&amp;#039; then&lt;br /&gt;
		timeStamp = string.format(&amp;#039;%04i-%02i-%02i %02i:%02i&amp;#039;, 2000, datenum[2], datenum[3], datenum[4], datenum[5] )&lt;br /&gt;
	elseif datecode:sub(1,2) == &amp;#039;MD&amp;#039; then&lt;br /&gt;
		timeStamp = string.format(&amp;#039;%04i-%02i-%02i&amp;#039;, 2000, datenum[2], datenum[3] )&lt;br /&gt;
		datecode = &amp;#039;MD&amp;#039; -- &amp;#039;MDhms&amp;#039;, &amp;#039;MDhm&amp;#039; and &amp;#039;MD&amp;#039; are the only supported format starting with &amp;#039;MD&amp;#039;; all others will be converted to &amp;#039;MD&amp;#039;&lt;br /&gt;
	elseif datecode:sub(1,1) == &amp;#039;M&amp;#039; then -- Ambiguous: could mean minutes, but here means month (when parsed as a name/abbrev, not as a number).&lt;br /&gt;
		timeStamp = string.format(&amp;#039;%04i-%02i-%02i&amp;#039;, 2000, datenum[2], 1 )&lt;br /&gt;
		datecode  = &amp;#039;M&amp;#039; &lt;br /&gt;
    -- other possible but unrecognized formats (e.g. &amp;#039;DHis&amp;#039;, &amp;#039;DHi&amp;#039;, &amp;#039;D&amp;#039;, &amp;#039;His&amp;#039;, &amp;#039;Hi&amp;#039;);&lt;br /&gt;
    -- note that &amp;#039;Dh&amp;#039;, &amp;#039;D&amp;#039;, &amp;#039;h&amp;#039;, &amp;#039;s&amp;#039; may eventually work, but not &amp;#039;m&amp;#039; for minute only, which is ambiguous with &amp;#039;M&amp;#039; for month only.&lt;br /&gt;
	else&lt;br /&gt;
		timeStamp = nil -- format not supported&lt;br /&gt;
	end&lt;br /&gt;
	return timeStamp, datecode&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
-- ===========================================================================&lt;br /&gt;
-- === Version of the function to be called from other LUA codes&lt;br /&gt;
-- ===========================================================================&lt;br /&gt;
&lt;br /&gt;
--[[ ========================================================================================&lt;br /&gt;
Date&lt;br /&gt;
 &lt;br /&gt;
This function is the core part of the ISOdate template. &lt;br /&gt;
 &lt;br /&gt;
Usage:&lt;br /&gt;
  local Date = require(&amp;#039;Module:DateI18n&amp;#039;)._Date&lt;br /&gt;
  local dateStr = Date({2020, 12, 30, 12, 20, 11}, lang)&lt;br /&gt;
 &lt;br /&gt;
Parameters:&lt;br /&gt;
  * {year,month,day,hour,minute,second, tzhour, tzmin}: broken down date-time component strings or numbers&lt;br /&gt;
		tzhour, tzmin are timezone offsets from UTC, hours and minutes&lt;br /&gt;
  * lang: The language to display it in&lt;br /&gt;
  * case: Language format (genitive, etc.) for some languages&lt;br /&gt;
  * class: CSS class for the &amp;lt;time&amp;gt; node, use &amp;quot;&amp;quot; for no metadata at all&lt;br /&gt;
]]&lt;br /&gt;
function p._Date(datevec, lang, case, class, trim_year)	&lt;br /&gt;
	-- make sure inputs are in the right format&lt;br /&gt;
	if not lang or not mw.language.isValidCode( lang ) then&lt;br /&gt;
		lang = mw.getCurrentFrame():callParserFunction( &amp;quot;int&amp;quot;, &amp;quot;lang&amp;quot; ) -- get user&amp;#039;s chosen language&lt;br /&gt;
	end&lt;br /&gt;
	if lang == &amp;#039;be-tarask&amp;#039; then&lt;br /&gt;
		lang = &amp;#039;be-x-old&amp;#039;&lt;br /&gt;
	end&lt;br /&gt;
	&lt;br /&gt;
	-- process datevec and extract timeStamp and datecode strings as well as numeric datenum array&lt;br /&gt;
	local datenum  = p.clean_datevec(datevec)&lt;br /&gt;
	local year, month, day = datenum[1], datenum[2], datenum[3]&lt;br /&gt;
	local timeStamp, datecode = p.getTimestamp(datenum)&lt;br /&gt;
	if not timeStamp then -- something went wrong in parserDatevec&lt;br /&gt;
		return &amp;#039;&amp;#039;&lt;br /&gt;
	end&lt;br /&gt;
	-- Commons [[Data:DateI18n.tab]] page stores prefered formats for diferent &lt;br /&gt;
	-- languages and datecodes (specifying year-month-day or just year of month-day, etc)&lt;br /&gt;
	-- Look up country specific format input to {{#time}} function&lt;br /&gt;
	local dFormat = getDateFormat(datecode, day, lang)&lt;br /&gt;
&lt;br /&gt;
	-- By default the gramatical case is not specified (case==&amp;#039;&amp;#039;) allowing the format to be specified &lt;br /&gt;
	-- in [[Data:DateI18n.tab]]. You can overwrite the default grammatical case of the month by &lt;br /&gt;
	-- specifying &amp;quot;case&amp;quot; variable. This is needed mostly by Slavic languages to create more complex &lt;br /&gt;
	-- phrases as it is done in [[c:Module:Complex date]]&lt;br /&gt;
	case = case or &amp;#039;&amp;#039;&lt;br /&gt;
	if (lang==&amp;#039;qu&amp;#039; or lang==&amp;#039;qug&amp;#039;) and case==&amp;#039;nom&amp;#039; then&lt;br /&gt;
		-- Special case related to Quechua and Kichwa languages. The form in the I18n is&lt;br /&gt;
		--  Genitive case with suffix &amp;quot;pi&amp;quot; added to month names provided by {#time}}&lt;br /&gt;
		-- in Nominative case that &amp;quot;pi&amp;quot; should be removed&lt;br /&gt;
		-- see https://commons.wikimedia.org/wiki/Template_talk:Date#Quechua from 2014&lt;br /&gt;
		dFormat = dFormat:gsub(&amp;#039;F&amp;quot;pi&amp;quot;&amp;#039;, &amp;#039;F&amp;#039;)&lt;br /&gt;
	elseif case == &amp;#039;gen&amp;#039; then&lt;br /&gt;
		dFormat = p.strReplace(dFormat, &amp;quot;F&amp;quot;, &amp;quot;xg&amp;quot;)&lt;br /&gt;
	elseif case == &amp;#039;nom&amp;#039; then&lt;br /&gt;
		dFormat = p.strReplace(dFormat, &amp;quot;xg&amp;quot;, &amp;quot;F&amp;quot;)&lt;br /&gt;
	elseif case ~= &amp;#039;&amp;#039; and month ~= nil then&lt;br /&gt;
		-- see is page [[Data:I18n/MonthCases.tab]] on Commons have name of the month &lt;br /&gt;
		-- in specific gramatic case in desired language. If we have it than replace &lt;br /&gt;
		-- &amp;quot;F&amp;quot; and xg&amp;quot; in dFormat&lt;br /&gt;
		local monthMsg = MonthCase(month, case, lang)&lt;br /&gt;
		if  monthMsg and monthMsg ~= &amp;#039;&amp;#039; then -- make sure it exists&lt;br /&gt;
			dFormat = p.strReplace(dFormat, &amp;#039;F&amp;#039;,  &amp;#039;&amp;quot;&amp;#039;..monthMsg..&amp;#039;&amp;quot;&amp;#039;) -- replace default month with month name we already looked up&lt;br /&gt;
			dFormat = p.strReplace(dFormat, &amp;#039;xg&amp;#039;, &amp;#039;&amp;quot;&amp;#039;..monthMsg..&amp;#039;&amp;quot;&amp;#039;)&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
    -- Translate the date using specified format.&lt;br /&gt;
	-- See https://www.mediawiki.org/wiki/Extension:Scribunto/Lua_reference_manual#mw.language:formatDate and &lt;br /&gt;
	-- https://www.mediawiki.org/wiki/Help:Extension:ParserFunctions##time for explanation of the format&lt;br /&gt;
	local langObj = mw.language.new(lang)&lt;br /&gt;
	local datestr = langObj:formatDate(dFormat, timeStamp) -- same as using {{#time}} parser function&lt;br /&gt;
	&lt;br /&gt;
	-- Special case related to Thai solar calendar: prior to 1940 new-year was at different time of year,&lt;br /&gt;
	-- so just year (datecode == &amp;#039;Y&amp;#039;) is ambiguous and is replaced by &amp;quot;YYYY or YYYY&amp;quot; phrase&lt;br /&gt;
	if lang==&amp;#039;th&amp;#039; and datecode==&amp;#039;Y&amp;#039; and year&amp;lt;=1940 then&lt;br /&gt;
		datestr = string.format(&amp;#039;%04i หรือ %04i&amp;#039;, year+542, year+543 ) &lt;br /&gt;
	end&lt;br /&gt;
	&lt;br /&gt;
	-- If year &amp;lt; 1000 than either keep the date padded to the length of 4 digits or trim it.&lt;br /&gt;
	-- Decide if the year will stay padded with zeros (for years in 0-999 range).&lt;br /&gt;
	if year and year &amp;lt; 1000 then&lt;br /&gt;
		trim_year = yesno(trim_year, trim_year or &amp;#039;100-999&amp;#039;)&lt;br /&gt;
		if type(trim_year) == &amp;#039;string&amp;#039; then&lt;br /&gt;
			-- If `trim_year` not a simple boolean, then it&amp;#039;s a range of dates.&lt;br /&gt;
			-- For example &amp;#039;100-999&amp;#039; means to pad 1-or-2-digit years to be 4-digit long, while keeping 3-digit years as is.&lt;br /&gt;
			local YMin, YMax = trim_year:match( &amp;#039;(%d+)-(%d+)&amp;#039; )&lt;br /&gt;
			trim_year = YMin and year &amp;gt;= tonumber(YMin) and year &amp;lt;= tonumber(YMax)&lt;br /&gt;
		end&lt;br /&gt;
		if trim_year then&lt;br /&gt;
			datestr = trimYear(datestr, year, lang) -- in datestr replace long year with trimmed one&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	-- Append a timezone if present (after the hour and minute of the day).&lt;br /&gt;
	if datenum[7] and (datecode:sub(1, 5) == &amp;#039;YMDhm&amp;#039; or datecode:sub(1, 4) == &amp;#039;MDhm&amp;#039;) then&lt;br /&gt;
		-- Use {{#time}} parser function to create timezone string, so that we use the correct character set.&lt;br /&gt;
		local sign = (datenum[7]&amp;lt;0) and &amp;#039;−&amp;#039; or &amp;#039;+&amp;#039;&lt;br /&gt;
		timeStamp = string.format(&amp;quot;2000-01-01 %02i:%02i:00&amp;quot;, math.abs(datenum[7]), datenum[8] or 0)&lt;br /&gt;
		local timezone = langObj:formatDate(&amp;#039;H:i&amp;#039;, timeStamp) -- same as using {{#time}} parser function&lt;br /&gt;
		datestr = string.format(&amp;quot;%s %s%s&amp;quot;, datestr, sign, timezone )&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	-- HTML formating of date string and tagging for microformats (only for absolute dates with a year).&lt;br /&gt;
	if class and class ~= &amp;#039;&amp;#039; and class ~= &amp;#039;-&amp;#039; and datecode:sub(1,1) == &amp;#039;Y&amp;#039; then &lt;br /&gt;
		local pat = &amp;#039;&amp;lt;time class=&amp;quot;%s&amp;quot; datetime=&amp;quot;%s&amp;quot; lang=&amp;quot;%s&amp;quot; dir=&amp;quot;%s&amp;quot; style=&amp;quot;white-space:nowrap&amp;quot;&amp;gt;%s&amp;lt;/time&amp;gt;&amp;#039;&lt;br /&gt;
		datestr = pat:format(class, timeStamp, lang, langObj:getDir(), datestr)&lt;br /&gt;
	end&lt;br /&gt;
	return datestr&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
-- ===========================================================================&lt;br /&gt;
-- === Versions of the function to be called from template namespace&lt;br /&gt;
-- ===========================================================================&lt;br /&gt;
&lt;br /&gt;
--[[ ========================================================================================&lt;br /&gt;
Date&lt;br /&gt;
 &lt;br /&gt;
This function is the core part of the ISOdate template. &lt;br /&gt;
 &lt;br /&gt;
Usage:&lt;br /&gt;
{{#invoke:DateI18n|Date|year=|month=|day=|hour=|minute=|second=|tzhour=|tzmin=|lang=en}}&lt;br /&gt;
 &lt;br /&gt;
Parameters:&lt;br /&gt;
  * year, month, day, hour, minute, second: broken down date-time component strings&lt;br /&gt;
  * tzhour, tzmin: timezone offset from UTC, hours and minutes&lt;br /&gt;
  * lang: The language to display it in&lt;br /&gt;
  * case: Language format (genitive, etc.) for some languages&lt;br /&gt;
  * class: CSS class for the &amp;lt;time&amp;gt; node, use &amp;quot;&amp;quot; for no metadata at all&lt;br /&gt;
]]&lt;br /&gt;
function p.Date(frame)&lt;br /&gt;
	local args = {}&lt;br /&gt;
	for name, value in pairs( frame.args ) do &lt;br /&gt;
		name = string.gsub( string.lower(name), &amp;#039; &amp;#039;, &amp;#039;_&amp;#039;)&lt;br /&gt;
		args[name] = value&lt;br /&gt;
	end&lt;br /&gt;
	return p._Date(	&lt;br /&gt;
		{ args.year, args.month, args.day, args.hour, args.minute, args.second, args.tzhour, args.tzmin },&lt;br /&gt;
		args.lang,                  -- language&lt;br /&gt;
		args.case,                  -- allows to specify grammatical case for the month for languages that use them&lt;br /&gt;
		args.class or &amp;#039;dtstart&amp;#039;,    -- allows to set the html class of the time node where the date is included. This is useful for microformats.&lt;br /&gt;
		args.trim_year or &amp;#039;100-999&amp;#039; -- by default pad one and 2 digit years to be 4 digit long, while keeping 3 digit years as is&lt;br /&gt;
	)	&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
return p&lt;/div&gt;</description>
			<pubDate>Fri, 25 Sep 2026 08:47:45 GMT</pubDate>
			<dc:creator>Shahroudi</dc:creator>
			<comments>https://commons.islamical.org/view/Module_talk:DateI18n/sandbox2</comments>
		</item>
		<item>
			<title>Module:DateI18n/timef test</title>
			<link>https://commons.islamical.org/w/index.php?title=Module:DateI18n/timef_test&amp;diff=3961&amp;oldid=0</link>
			<guid isPermaLink="false">https://commons.islamical.org/w/index.php?title=Module:DateI18n/timef_test&amp;diff=3961&amp;oldid=0</guid>
			<description>&lt;p&gt;Created page with &amp;quot;local p = require(&amp;#039;Module:UnitTests&amp;#039;)  function p:test_1_English_language() 	self:preprocess_equals_preprocess(&amp;#039;{{#invoke:DateI18n|Date|year=2009|month=12|day=09|hour=13|minute=20|lang=en}}&amp;#039;, &amp;#039;{{#timef:2009-12-09T13:20:17|both|en}}&amp;#039;) 	self:preprocess_equals_preprocess(&amp;#039;{{#invoke:DateI18n|Date|year=2009|month=01|day=09|lang=en}}&amp;#039;, &amp;#039;{{#timef:2009-01-09|date|en}}&amp;#039;) 	self:preprocess_equals_preprocess(&amp;#039;{{#invoke:DateI18n|Date|month=12|day=09|lang=en}}&amp;#039;, &amp;#039;{{#timef:2009-12-09|p...&amp;quot;&lt;/p&gt;
&lt;p&gt;&lt;b&gt;New page&lt;/b&gt;&lt;/p&gt;&lt;div&gt;local p = require(&amp;#039;Module:UnitTests&amp;#039;)&lt;br /&gt;
&lt;br /&gt;
function p:test_1_English_language()&lt;br /&gt;
	self:preprocess_equals_preprocess(&amp;#039;{{#invoke:DateI18n|Date|year=2009|month=12|day=09|hour=13|minute=20|lang=en}}&amp;#039;, &amp;#039;{{#timef:2009-12-09T13:20:17|both|en}}&amp;#039;)&lt;br /&gt;
	self:preprocess_equals_preprocess(&amp;#039;{{#invoke:DateI18n|Date|year=2009|month=01|day=09|lang=en}}&amp;#039;, &amp;#039;{{#timef:2009-01-09|date|en}}&amp;#039;)&lt;br /&gt;
	self:preprocess_equals_preprocess(&amp;#039;{{#invoke:DateI18n|Date|month=12|day=09|lang=en}}&amp;#039;, &amp;#039;{{#timef:2009-12-09|pretty|en}}&amp;#039;)&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function p:test_2_YMD_format()&lt;br /&gt;
	self:preprocess_equals_preprocess_many(&lt;br /&gt;
		&amp;#039;{{#invoke:DateI18n|Date|year=2024|month=09|day=12|lang=&amp;#039;, &amp;#039;}}&amp;#039;,&lt;br /&gt;
		&amp;#039;{{#timef:2024-09-12|date|&amp;#039;, &amp;#039;}}&amp;#039;, {&lt;br /&gt;
			{&amp;#039;be&amp;#039;},&lt;br /&gt;
			{&amp;#039;be-x-old&amp;#039;},&lt;br /&gt;
			{&amp;#039;bn&amp;#039;},&lt;br /&gt;
			{&amp;#039;bpy&amp;#039;},&lt;br /&gt;
			{&amp;#039;ca&amp;#039;},&lt;br /&gt;
			{&amp;#039;ce&amp;#039;},&lt;br /&gt;
			{&amp;#039;ckb&amp;#039;},&lt;br /&gt;
			{&amp;#039;cs&amp;#039;},&lt;br /&gt;
			{&amp;#039;da&amp;#039;},&lt;br /&gt;
			{&amp;#039;de&amp;#039;},&lt;br /&gt;
			{&amp;#039;el&amp;#039;},&lt;br /&gt;
			{&amp;#039;en&amp;#039;},&lt;br /&gt;
			{&amp;#039;eo&amp;#039;},&lt;br /&gt;
			{&amp;#039;es&amp;#039;},&lt;br /&gt;
			{&amp;#039;et&amp;#039;},&lt;br /&gt;
			{&amp;#039;eu&amp;#039;},&lt;br /&gt;
			{&amp;#039;fa&amp;#039;},&lt;br /&gt;
			{&amp;#039;fi&amp;#039;},&lt;br /&gt;
			{&amp;#039;fr&amp;#039;},&lt;br /&gt;
			{&amp;#039;ga&amp;#039;},&lt;br /&gt;
			{&amp;#039;gl&amp;#039;},&lt;br /&gt;
			{&amp;#039;he&amp;#039;},&lt;br /&gt;
			{&amp;#039;hi&amp;#039;},&lt;br /&gt;
			{&amp;#039;hr&amp;#039;},&lt;br /&gt;
			{&amp;#039;hsb&amp;#039;},&lt;br /&gt;
			{&amp;#039;hu&amp;#039;},&lt;br /&gt;
			{&amp;#039;ia&amp;#039;},&lt;br /&gt;
			{&amp;#039;is&amp;#039;},&lt;br /&gt;
			{&amp;#039;it&amp;#039;},&lt;br /&gt;
			{&amp;#039;ja&amp;#039;},&lt;br /&gt;
			{&amp;#039;kn&amp;#039;},&lt;br /&gt;
			{&amp;#039;ko&amp;#039;},&lt;br /&gt;
			{&amp;#039;lt&amp;#039;},&lt;br /&gt;
			{&amp;#039;lv&amp;#039;},&lt;br /&gt;
			{&amp;#039;mk&amp;#039;},&lt;br /&gt;
			{&amp;#039;ml&amp;#039;},&lt;br /&gt;
			{&amp;#039;mr&amp;#039;},&lt;br /&gt;
			{&amp;#039;new&amp;#039;},&lt;br /&gt;
			{&amp;#039;nn&amp;#039;},&lt;br /&gt;
			{&amp;#039;no&amp;#039;},&lt;br /&gt;
			{&amp;#039;oc&amp;#039;},&lt;br /&gt;
			{&amp;#039;pa&amp;#039;},&lt;br /&gt;
			{&amp;#039;pl&amp;#039;},&lt;br /&gt;
			{&amp;#039;pt&amp;#039;},&lt;br /&gt;
			{&amp;#039;qu&amp;#039;},&lt;br /&gt;
			{&amp;#039;qug&amp;#039;},&lt;br /&gt;
			{&amp;#039;ru&amp;#039;},&lt;br /&gt;
			{&amp;#039;sk&amp;#039;},&lt;br /&gt;
			{&amp;#039;sl&amp;#039;},&lt;br /&gt;
			{&amp;#039;sr&amp;#039;},&lt;br /&gt;
			{&amp;#039;th&amp;#039;},&lt;br /&gt;
			{&amp;#039;uk&amp;#039;},&lt;br /&gt;
			{&amp;#039;vi&amp;#039;},&lt;br /&gt;
			{&amp;#039;yue&amp;#039;},&lt;br /&gt;
			{&amp;#039;zh-hans&amp;#039;}&lt;br /&gt;
	} )&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function p:test_3_MD_format()&lt;br /&gt;
	self:preprocess_equals_preprocess_many(&lt;br /&gt;
		&amp;#039;{{#invoke:DateI18n|Date|month=11|day=12|lang=&amp;#039;, &amp;#039;}}&amp;#039;,&lt;br /&gt;
		&amp;#039;{{#timef:0000-11-12|pretty|&amp;#039;, &amp;#039;}}&amp;#039;, {&lt;br /&gt;
			{&amp;#039;be&amp;#039;},&lt;br /&gt;
			{&amp;#039;be-x-old&amp;#039;},&lt;br /&gt;
			{&amp;#039;bn&amp;#039;},&lt;br /&gt;
			{&amp;#039;bpy&amp;#039;},&lt;br /&gt;
			{&amp;#039;ca&amp;#039;},&lt;br /&gt;
			{&amp;#039;ce&amp;#039;},&lt;br /&gt;
			{&amp;#039;ckb&amp;#039;},&lt;br /&gt;
			{&amp;#039;cs&amp;#039;},&lt;br /&gt;
			{&amp;#039;da&amp;#039;},&lt;br /&gt;
			{&amp;#039;de&amp;#039;},&lt;br /&gt;
			{&amp;#039;el&amp;#039;},&lt;br /&gt;
			{&amp;#039;en&amp;#039;},&lt;br /&gt;
			{&amp;#039;eo&amp;#039;},&lt;br /&gt;
			{&amp;#039;es&amp;#039;},&lt;br /&gt;
			{&amp;#039;et&amp;#039;},&lt;br /&gt;
			{&amp;#039;eu&amp;#039;},&lt;br /&gt;
			{&amp;#039;fa&amp;#039;},&lt;br /&gt;
			{&amp;#039;fi&amp;#039;},&lt;br /&gt;
			{&amp;#039;fr&amp;#039;},&lt;br /&gt;
			{&amp;#039;ga&amp;#039;},&lt;br /&gt;
			{&amp;#039;gl&amp;#039;},&lt;br /&gt;
			{&amp;#039;he&amp;#039;},&lt;br /&gt;
			{&amp;#039;hi&amp;#039;},&lt;br /&gt;
			{&amp;#039;hr&amp;#039;},&lt;br /&gt;
			{&amp;#039;hsb&amp;#039;},&lt;br /&gt;
			{&amp;#039;hu&amp;#039;},&lt;br /&gt;
			{&amp;#039;ia&amp;#039;},&lt;br /&gt;
			{&amp;#039;is&amp;#039;},&lt;br /&gt;
			{&amp;#039;it&amp;#039;},&lt;br /&gt;
			{&amp;#039;ja&amp;#039;},&lt;br /&gt;
			{&amp;#039;kn&amp;#039;},&lt;br /&gt;
			{&amp;#039;ko&amp;#039;},&lt;br /&gt;
			{&amp;#039;lt&amp;#039;},&lt;br /&gt;
			{&amp;#039;lv&amp;#039;},&lt;br /&gt;
			{&amp;#039;mk&amp;#039;},&lt;br /&gt;
			{&amp;#039;ml&amp;#039;},&lt;br /&gt;
			{&amp;#039;mr&amp;#039;},&lt;br /&gt;
			{&amp;#039;new&amp;#039;},&lt;br /&gt;
			{&amp;#039;nn&amp;#039;},&lt;br /&gt;
			{&amp;#039;no&amp;#039;},&lt;br /&gt;
			{&amp;#039;oc&amp;#039;},&lt;br /&gt;
			{&amp;#039;pa&amp;#039;},&lt;br /&gt;
			{&amp;#039;pl&amp;#039;},&lt;br /&gt;
			{&amp;#039;pt&amp;#039;},&lt;br /&gt;
			{&amp;#039;qu&amp;#039;},&lt;br /&gt;
			{&amp;#039;qug&amp;#039;},&lt;br /&gt;
			{&amp;#039;ru&amp;#039;},&lt;br /&gt;
			{&amp;#039;sk&amp;#039;},&lt;br /&gt;
			{&amp;#039;sl&amp;#039;},&lt;br /&gt;
			{&amp;#039;sr&amp;#039;},&lt;br /&gt;
			{&amp;#039;th&amp;#039;},&lt;br /&gt;
			{&amp;#039;uk&amp;#039;},&lt;br /&gt;
			{&amp;#039;vi&amp;#039;},&lt;br /&gt;
			{&amp;#039;yue&amp;#039;},&lt;br /&gt;
			{&amp;#039;zh-hans&amp;#039;}&lt;br /&gt;
	} )&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function p:test_4_YMDhm_format()&lt;br /&gt;
	self:preprocess_equals_preprocess_many(&lt;br /&gt;
		&amp;#039;{{#invoke:DateI18n|Date|year=2009|month=12|day=09|hour=13|minute=20|lang=&amp;#039;, &amp;#039;}}&amp;#039;,&lt;br /&gt;
		&amp;#039;{{#timef:2009-12-09T13:20:17|both|&amp;#039;, &amp;#039;}}&amp;#039;, {&lt;br /&gt;
			{&amp;#039;be&amp;#039;},&lt;br /&gt;
			{&amp;#039;be-x-old&amp;#039;},&lt;br /&gt;
			{&amp;#039;bn&amp;#039;},&lt;br /&gt;
			{&amp;#039;bpy&amp;#039;},&lt;br /&gt;
			{&amp;#039;ca&amp;#039;},&lt;br /&gt;
			{&amp;#039;ce&amp;#039;},&lt;br /&gt;
			{&amp;#039;ckb&amp;#039;},&lt;br /&gt;
			{&amp;#039;cs&amp;#039;},&lt;br /&gt;
			{&amp;#039;da&amp;#039;},&lt;br /&gt;
			{&amp;#039;de&amp;#039;},&lt;br /&gt;
			{&amp;#039;el&amp;#039;},&lt;br /&gt;
			{&amp;#039;en&amp;#039;},&lt;br /&gt;
			{&amp;#039;eo&amp;#039;},&lt;br /&gt;
			{&amp;#039;es&amp;#039;},&lt;br /&gt;
			{&amp;#039;et&amp;#039;},&lt;br /&gt;
			{&amp;#039;eu&amp;#039;},&lt;br /&gt;
			{&amp;#039;fa&amp;#039;},&lt;br /&gt;
			{&amp;#039;fi&amp;#039;},&lt;br /&gt;
			{&amp;#039;fr&amp;#039;},&lt;br /&gt;
			{&amp;#039;ga&amp;#039;},&lt;br /&gt;
			{&amp;#039;gl&amp;#039;},&lt;br /&gt;
			{&amp;#039;he&amp;#039;},&lt;br /&gt;
			{&amp;#039;hi&amp;#039;},&lt;br /&gt;
			{&amp;#039;hr&amp;#039;},&lt;br /&gt;
			{&amp;#039;hsb&amp;#039;},&lt;br /&gt;
			{&amp;#039;hu&amp;#039;},&lt;br /&gt;
			{&amp;#039;ia&amp;#039;},&lt;br /&gt;
			{&amp;#039;is&amp;#039;},&lt;br /&gt;
			{&amp;#039;it&amp;#039;},&lt;br /&gt;
			{&amp;#039;ja&amp;#039;},&lt;br /&gt;
			{&amp;#039;kn&amp;#039;},&lt;br /&gt;
			{&amp;#039;ko&amp;#039;},&lt;br /&gt;
			{&amp;#039;lt&amp;#039;},&lt;br /&gt;
			{&amp;#039;lv&amp;#039;},&lt;br /&gt;
			{&amp;#039;mk&amp;#039;},&lt;br /&gt;
			{&amp;#039;ml&amp;#039;},&lt;br /&gt;
			{&amp;#039;mr&amp;#039;},&lt;br /&gt;
			{&amp;#039;new&amp;#039;},&lt;br /&gt;
			{&amp;#039;nn&amp;#039;},&lt;br /&gt;
			{&amp;#039;no&amp;#039;},&lt;br /&gt;
			{&amp;#039;oc&amp;#039;},&lt;br /&gt;
			{&amp;#039;pa&amp;#039;},&lt;br /&gt;
			{&amp;#039;pl&amp;#039;},&lt;br /&gt;
			{&amp;#039;pt&amp;#039;},&lt;br /&gt;
			{&amp;#039;qu&amp;#039;},&lt;br /&gt;
			{&amp;#039;qug&amp;#039;},&lt;br /&gt;
			{&amp;#039;ru&amp;#039;},&lt;br /&gt;
			{&amp;#039;sk&amp;#039;},&lt;br /&gt;
			{&amp;#039;sl&amp;#039;},&lt;br /&gt;
			{&amp;#039;sr&amp;#039;},&lt;br /&gt;
			{&amp;#039;th&amp;#039;},&lt;br /&gt;
			{&amp;#039;uk&amp;#039;},&lt;br /&gt;
			{&amp;#039;vi&amp;#039;},&lt;br /&gt;
			{&amp;#039;yue&amp;#039;},&lt;br /&gt;
			{&amp;#039;zh-hans&amp;#039;}&lt;br /&gt;
	} )&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
function p:test_6_Romance_languages()&lt;br /&gt;
	self:preprocess_equals_preprocess(&amp;#039;{{#invoke:DateI18n|Date|year=2024|month=09|day=01|lang=fr}}&amp;#039;, &amp;#039;{{#timef:2024-09-01|date|fr}}&amp;#039;)&lt;br /&gt;
	self:preprocess_equals_preprocess(&amp;#039;{{#invoke:DateI18n|Date|year=2024|month=09|day=02|lang=fr}}&amp;#039;, &amp;#039;{{#timef:2024-09-02|date|fr}}&amp;#039;)&lt;br /&gt;
	self:preprocess_equals_preprocess(&amp;#039;{{#invoke:DateI18n|Date|month=08|day=02|lang=fr}}&amp;#039;, &amp;#039;{{#timef:2024-08-02|pretty|fr}}&amp;#039;)&lt;br /&gt;
	self:preprocess_equals_preprocess(&amp;#039;{{#invoke:DateI18n|Date|month=08|day=01|lang=fr}}&amp;#039;, &amp;#039;{{#timef:2024-08-01|pretty|fr}}&amp;#039;)&lt;br /&gt;
	&lt;br /&gt;
	self:preprocess_equals_preprocess(&amp;#039;{{#invoke:DateI18n|Date|year=2024|month=08|day=01|lang=ga}}&amp;#039;, &amp;#039;{{#timef:2024-08-01|date|ga}}&amp;#039;)&lt;br /&gt;
	self:preprocess_equals_preprocess(&amp;#039;{{#invoke:DateI18n|Date|year=2024|month=08|day=02|lang=ga}}&amp;#039;, &amp;#039;{{#timef:2024-08-02|date|ga}}&amp;#039;)&lt;br /&gt;
	self:preprocess_equals_preprocess(&amp;#039;{{#invoke:DateI18n|Date|month=07|day=02|lang=ga}}&amp;#039;, &amp;#039;{{#timef:2024-07-02|pretty|ga}}&amp;#039;)&lt;br /&gt;
	self:preprocess_equals_preprocess(&amp;#039;{{#invoke:DateI18n|Date|month=07|day=01|lang=ga}}&amp;#039;, &amp;#039;{{#timef:2024-07-01|pretty|ga}}&amp;#039;)&lt;br /&gt;
	&lt;br /&gt;
	self:preprocess_equals_preprocess(&amp;#039;{{#invoke:DateI18n|Date|year=2024|month=07|day=01|lang=ca}}&amp;#039;, &amp;#039;{{#timef:2024-07-01|date|ca}}&amp;#039;)&lt;br /&gt;
	self:preprocess_equals_preprocess(&amp;#039;{{#invoke:DateI18n|Date|year=2024|month=07|day=02|lang=ca}}&amp;#039;, &amp;#039;{{#timef:2024-07-02|date|ca}}&amp;#039;)&lt;br /&gt;
	self:preprocess_equals_preprocess(&amp;#039;{{#invoke:DateI18n|Date|month=06|day=02|lang=ca}}&amp;#039;, &amp;#039;{{#timef:2024-06-02|pretty|ca}}&amp;#039;)&lt;br /&gt;
	self:preprocess_equals_preprocess(&amp;#039;{{#invoke:DateI18n|Date|month=06|day=01|lang=ca}}&amp;#039;, &amp;#039;{{#timef:2024-06-01|pretty|ca}}&amp;#039;)&lt;br /&gt;
	&lt;br /&gt;
	self:preprocess_equals_preprocess(&amp;#039;{{#invoke:DateI18n|Date|year=2024|month=04|day=01|lang=eu}}&amp;#039;, &amp;#039;{{#timef:2024-04-01|date|eu}}&amp;#039;)&lt;br /&gt;
	self:preprocess_equals_preprocess(&amp;#039;{{#invoke:DateI18n|Date|year=2024|month=04|day=02|lang=eu}}&amp;#039;, &amp;#039;{{#timef:2024-04-02|date|eu}}&amp;#039;)&lt;br /&gt;
	self:preprocess_equals_preprocess(&amp;#039;{{#invoke:DateI18n|Date|year=2024|month=03|day=11|lang=eu}}&amp;#039;, &amp;#039;{{#timef:2024-03-11|date|eu}}&amp;#039;)&lt;br /&gt;
	self:preprocess_equals_preprocess(&amp;#039;{{#invoke:DateI18n|Date|year=2024|month=02|day=21|lang=eu}}&amp;#039;, &amp;#039;{{#timef:2024-02-21|date|eu}}&amp;#039;)&lt;br /&gt;
	self:preprocess_equals_preprocess(&amp;#039;{{#invoke:DateI18n|Date|year=2024|month=01|day=31|lang=eu}}&amp;#039;, &amp;#039;{{#timef:2024-01-31|date|eu}}&amp;#039;)&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function p:test_7_Quechua_language()&lt;br /&gt;
	self:preprocess_equals_preprocess(&amp;#039;{{#invoke:DateI18n|Date|year=2009|month=01|day=09|lang=qu}}&amp;#039;, &amp;#039;{{#timef:2009-01-09|date|qu}}&amp;#039;)&lt;br /&gt;
	self:preprocess_equals_preprocess(&amp;#039;{{#invoke:DateI18n|Date|month=12|day=09|lang=qu}}&amp;#039;, &amp;#039;{{#timef:0000-12-09|pretty|qu}}&amp;#039;)&lt;br /&gt;
	self:preprocess_equals_preprocess(&amp;#039;{{#invoke:DateI18n|Date|year=2009|month=01|day=09|lang=qug}}&amp;#039;, &amp;#039;{{#timef:2009-01-09|date|qug}}&amp;#039;)&lt;br /&gt;
	self:preprocess_equals_preprocess(&amp;#039;{{#invoke:DateI18n|Date|month=12|day=09|lang=qug}}&amp;#039;, &amp;#039;{{#timef:0000-12-09|pretty|qug}}&amp;#039;)&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function p:test_8_Thai_solar_calendar()&lt;br /&gt;
	self:preprocess_equals_preprocess(&amp;#039;{{#invoke:DateI18n|Date|year=2009|month=01|day=09|lang=th}}&amp;#039;, &amp;#039;{{#timef:2009-01-09|date|th}}&amp;#039;)&lt;br /&gt;
	self:preprocess_equals_preprocess(&amp;#039;{{#invoke:DateI18n|Date|month=12|day=09|lang=th}}&amp;#039;, &amp;#039;{{#timef:0000-12-09|pretty|th}}&amp;#039;)&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
return p&lt;/div&gt;</description>
			<pubDate>Fri, 25 Sep 2026 08:47:13 GMT</pubDate>
			<dc:creator>Shahroudi</dc:creator>
			<comments>https://commons.islamical.org/view/Module_talk:DateI18n/timef_test</comments>
		</item>
		<item>
			<title>Module:DateI18n/sandbox/testcases</title>
			<link>https://commons.islamical.org/w/index.php?title=Module:DateI18n/sandbox/testcases&amp;diff=3960&amp;oldid=0</link>
			<guid isPermaLink="false">https://commons.islamical.org/w/index.php?title=Module:DateI18n/sandbox/testcases&amp;diff=3960&amp;oldid=0</guid>
			<description>&lt;p&gt;Created page with &amp;quot;local TUT = mw.title.new(mw.getCurrentFrame():getTitle()).basePageTitle -- the title under test local p = require(TUT.prefixedText)-- the module to be tested local Date = p._Date local ScribuntoUnit = require(&amp;#039;Module:ScribuntoUnit&amp;#039;) local suite = ScribuntoUnit:new()  function suite:test_01_English() 	self:assertEquals( &amp;#039;20 July 1969, 20:17:40&amp;#039;, Date({1969,07,20,20,17,40},&amp;#039;en&amp;#039;)) 	self:assertEquals( &amp;#039;20 July 1969, 20:17&amp;#039;,    Date({1969,07,20,20,17},&amp;#039;en&amp;#039;)) 	self:assertEqual...&amp;quot;&lt;/p&gt;
&lt;p&gt;&lt;b&gt;New page&lt;/b&gt;&lt;/p&gt;&lt;div&gt;local TUT = mw.title.new(mw.getCurrentFrame():getTitle()).basePageTitle -- the title under test&lt;br /&gt;
local p = require(TUT.prefixedText)-- the module to be tested&lt;br /&gt;
local Date = p._Date&lt;br /&gt;
local ScribuntoUnit = require(&amp;#039;Module:ScribuntoUnit&amp;#039;)&lt;br /&gt;
local suite = ScribuntoUnit:new()&lt;br /&gt;
&lt;br /&gt;
function suite:test_01_English()&lt;br /&gt;
	self:assertEquals( &amp;#039;20 July 1969, 20:17:40&amp;#039;, Date({1969,07,20,20,17,40},&amp;#039;en&amp;#039;))&lt;br /&gt;
	self:assertEquals( &amp;#039;20 July 1969, 20:17&amp;#039;,    Date({1969,07,20,20,17},&amp;#039;en&amp;#039;))&lt;br /&gt;
	self:assertEquals( &amp;#039;20 July 1969&amp;#039;,           Date({1969,07,20,20},&amp;#039;en&amp;#039;))&lt;br /&gt;
	self:assertEquals( &amp;#039;20 July 1969&amp;#039;,           Date({1969,07,20},&amp;#039;en&amp;#039;))&lt;br /&gt;
	self:assertEquals( &amp;#039;20 July 1969&amp;#039;,           Date({1969,07,20,nil,17,40},&amp;#039;en&amp;#039;))&lt;br /&gt;
	self:assertEquals( &amp;#039;July 1969&amp;#039;,              Date({1969,07},&amp;#039;en&amp;#039;))&lt;br /&gt;
	self:assertEquals( &amp;#039;1969&amp;#039;,                   Date({1969},&amp;#039;en&amp;#039;))&lt;br /&gt;
	self:assertEquals( &amp;#039;1969&amp;#039;,                   Date({1969,&amp;#039;&amp;#039;,&amp;#039;&amp;#039;,&amp;#039;&amp;#039;,&amp;#039;&amp;#039;,&amp;#039;&amp;#039;},&amp;#039;en&amp;#039;))&lt;br /&gt;
	self:assertEquals( &amp;#039;20 July&amp;#039;,                Date({nil,07,20},&amp;#039;en&amp;#039;))&lt;br /&gt;
	self:assertEquals( &amp;#039;July&amp;#039;,                   Date({nil,07},&amp;#039;en&amp;#039;))&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function suite:test_02_French()&lt;br /&gt;
	self:assertEquals( &amp;#039;1&amp;lt;sup&amp;gt;er&amp;lt;/sup&amp;gt; juin 1999&amp;#039;, Date({1999,6,1},&amp;#039;fr&amp;#039;))&lt;br /&gt;
	self:assertEquals( &amp;#039;2 juin 1999&amp;#039;,   Date({1999,6,2},&amp;#039;fr&amp;#039;))&lt;br /&gt;
	self:assertEquals( &amp;#039;1&amp;lt;sup&amp;gt;er&amp;lt;/sup&amp;gt; mai&amp;#039;, Date({&amp;#039;&amp;#039;,5,1},&amp;#039;fr&amp;#039;))&lt;br /&gt;
	self:assertEquals( &amp;#039;2 mai&amp;#039;, Date({&amp;#039;&amp;#039;,5,2},&amp;#039;fr&amp;#039;))&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function suite:test_03_Catalan()&lt;br /&gt;
	self:assertEquals( &amp;#039;1r de juny de 1999&amp;#039;, Date({1999,6,1},&amp;#039;ca&amp;#039;))&lt;br /&gt;
	self:assertEquals( &amp;#039;2 de juny de 1999&amp;#039;,  Date({1999,6,2},&amp;#039;ca&amp;#039;))&lt;br /&gt;
	self:assertEquals( &amp;#039;1r de maig&amp;#039;,         Date({&amp;#039;&amp;#039;,5,1},&amp;#039;ca&amp;#039;))&lt;br /&gt;
	self:assertEquals( &amp;#039;2 de maig&amp;#039;,          Date({&amp;#039;&amp;#039;,5,2},&amp;#039;ca&amp;#039;))&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function suite:test_04_Gallic()&lt;br /&gt;
	self:assertEquals( &amp;#039;1&amp;lt;sup&amp;gt;ú&amp;lt;/sup&amp;gt; Meitheamh 1999&amp;#039;, Date({1999,6,1},&amp;#039;ga&amp;#039;))&lt;br /&gt;
	self:assertEquals( &amp;#039;2 Meitheamh 1999&amp;#039;,  Date({1999,6,2},&amp;#039;ga&amp;#039;))&lt;br /&gt;
	self:assertEquals( &amp;#039;1&amp;lt;sup&amp;gt;ú&amp;lt;/sup&amp;gt; Bealtaine&amp;#039;, Date({&amp;#039;&amp;#039;,5,1},&amp;#039;ga&amp;#039;))&lt;br /&gt;
	self:assertEquals( &amp;#039;2 Bealtaine&amp;#039;, Date({&amp;#039;&amp;#039;,5,2},&amp;#039;ga&amp;#039;))&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function suite:test_05_Basque()&lt;br /&gt;
	self:assertEquals( &amp;#039;1999ko uztailaren 1ea&amp;#039;,  Date({1999,7,01},&amp;#039;eu&amp;#039;))&lt;br /&gt;
	self:assertEquals( &amp;#039;1999ko uztailaren 2a&amp;#039;,   Date({1999,7,02},&amp;#039;eu&amp;#039;))&lt;br /&gt;
	self:assertEquals( &amp;#039;1999ko uztailaren 11&amp;#039;,   Date({1999,7,11},&amp;#039;eu&amp;#039;))&lt;br /&gt;
	self:assertEquals( &amp;#039;1999ko uztailaren 21ea&amp;#039;, Date({1999,7,21},&amp;#039;eu&amp;#039;))&lt;br /&gt;
	self:assertEquals( &amp;#039;1999ko uztailaren 31&amp;#039;,   Date({1999,7,31},&amp;#039;eu&amp;#039;))&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function suite:test_06_Thai_solar_calendar()&lt;br /&gt;
	self:assertEquals( &amp;#039;1 มกราคม พ.ศ. 2484&amp;#039;, Date({1941,1,1},&amp;#039;th&amp;#039;))&lt;br /&gt;
	self:assertEquals( &amp;#039;มกราคม พ.ศ. 2484&amp;#039;, Date({1941,1},&amp;#039;th&amp;#039;))&lt;br /&gt;
	--self:assertEquals( &amp;#039;กันยายน พ.ศ. 2483&amp;#039;, Date({1940,12},&amp;#039;th&amp;#039;))&lt;br /&gt;
	self:assertEquals( &amp;#039;กันยายน พ.ศ. 2484&amp;#039;, Date({1941,09},&amp;#039;th&amp;#039;))&lt;br /&gt;
	self:assertEquals( &amp;#039;พ.ศ. 2484&amp;#039;, Date({1941},&amp;#039;th&amp;#039;))&lt;br /&gt;
	self:assertEquals( &amp;#039;2482 หรือ 2483&amp;#039;, Date({1940},&amp;#039;th&amp;#039;))&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function suite:test_07_Quechua()&lt;br /&gt;
	self:assertEquals( &amp;#039;9 ñiqin inirupi 2009 watapi&amp;#039;, Date({2009,1,9},&amp;#039;qu&amp;#039;))&lt;br /&gt;
	self:assertEquals( &amp;#039;9 ñiqin inirupi&amp;#039;, Date({nil,1,9},&amp;#039;qu&amp;#039;))&lt;br /&gt;
	self:assertEquals( &amp;#039;inirupi 2009 watapi&amp;#039;, Date({2009,1},&amp;#039;qu&amp;#039;))&lt;br /&gt;
	self:assertEquals( &amp;#039;iniru 2009 watapi&amp;#039;, Date({2009,1},&amp;#039;qu&amp;#039;,&amp;#039;nom&amp;#039;))&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function suite:test_10_YMD_in_50_languages()&lt;br /&gt;
	local datevec = {2010,1,9}&lt;br /&gt;
	self:assertEquals( &amp;#039;9 студзеня 2010&amp;#039;, Date(datevec,&amp;#039;be&amp;#039;))&lt;br /&gt;
	self:assertEquals( &amp;#039;9 студзеня 2010&amp;#039;, Date(datevec,&amp;#039;be-tarask&amp;#039;))&lt;br /&gt;
	self:assertEquals( &amp;#039;9 студзеня 2010&amp;#039;, Date(datevec,&amp;#039;be-x-old&amp;#039;))&lt;br /&gt;
	self:assertEquals( &amp;#039;৯ জানুয়ারি ২০১০&amp;#039;, Date(datevec,&amp;#039;bn&amp;#039;))&lt;br /&gt;
	self:assertEquals( &amp;#039;জানুয়ারী ৯, মারি ২০১০&amp;#039;, Date(datevec,&amp;#039;bpy&amp;#039;))&lt;br /&gt;
	self:assertEquals( &amp;#039;9 de gener de 2010&amp;#039;, Date(datevec,&amp;#039;ca&amp;#039;))&lt;br /&gt;
	self:assertEquals( &amp;#039;2010 шеран 9 январь&amp;#039;, Date(datevec,&amp;#039;ce&amp;#039;))&lt;br /&gt;
	self:assertEquals( &amp;#039;٩ی کانوونی دووەمی ٢٠١٠&amp;#039;, Date(datevec,&amp;#039;ckb&amp;#039;))&lt;br /&gt;
	self:assertEquals( &amp;#039;9. ledna 2010&amp;#039;, Date(datevec,&amp;#039;cs&amp;#039;))&lt;br /&gt;
	self:assertEquals( &amp;#039;9. januar 2010&amp;#039;, Date(datevec,&amp;#039;da&amp;#039;))&lt;br /&gt;
	self:assertEquals( &amp;#039;9. Januar 2010&amp;#039;, Date(datevec,&amp;#039;de&amp;#039;))&lt;br /&gt;
	self:assertEquals( &amp;#039;9 Ιανουαρίου 2010&amp;#039;, Date(datevec,&amp;#039;el&amp;#039;))&lt;br /&gt;
	self:assertEquals( &amp;#039;9 January 2010&amp;#039;, Date(datevec,&amp;#039;en&amp;#039;))&lt;br /&gt;
	self:assertEquals( &amp;#039;la 9-a de januaro 2010&amp;#039;, Date(datevec,&amp;#039;eo&amp;#039;))&lt;br /&gt;
	self:assertEquals( &amp;#039;9 de enero de 2010&amp;#039;, Date(datevec,&amp;#039;es&amp;#039;))&lt;br /&gt;
	self:assertEquals( &amp;#039;9. jaanuar 2010&amp;#039;, Date(datevec,&amp;#039;et&amp;#039;))&lt;br /&gt;
	self:assertEquals( &amp;#039;2010ko urtarrilaren 9a&amp;#039;, Date(datevec,&amp;#039;eu&amp;#039;))&lt;br /&gt;
	self:assertEquals( &amp;#039;&amp;amp;rlm;۹ ژانویهٔ ۲۰۱۰&amp;amp;rlm;&amp;#039;, Date(datevec,&amp;#039;fa&amp;#039;))&lt;br /&gt;
	self:assertEquals( &amp;#039;9. tammikuuta 2010&amp;#039;, Date(datevec,&amp;#039;fi&amp;#039;))&lt;br /&gt;
	self:assertEquals( &amp;#039;9 janvier 2010&amp;#039;, Date(datevec,&amp;#039;fr&amp;#039;))&lt;br /&gt;
	self:assertEquals( &amp;#039;9 Eanáir 2010&amp;#039;, Date(datevec,&amp;#039;ga&amp;#039;))&lt;br /&gt;
	self:assertEquals( &amp;#039;9 de xaneiro de 2010&amp;#039;, Date(datevec,&amp;#039;gl&amp;#039;))&lt;br /&gt;
	self:assertEquals( &amp;#039;&amp;amp;rlm;9 בינואר 2010&amp;amp;rlm;&amp;#039;, Date(datevec,&amp;#039;he&amp;#039;))&lt;br /&gt;
	self:assertEquals( &amp;#039;९ जनवरी २०१०&amp;#039;, Date(datevec,&amp;#039;hi&amp;#039;))&lt;br /&gt;
	self:assertEquals( &amp;#039;9. siječnja 2010.&amp;#039;, Date(datevec,&amp;#039;hr&amp;#039;))&lt;br /&gt;
	self:assertEquals( &amp;#039;9. januara 2010&amp;#039;, Date(datevec,&amp;#039;hsb&amp;#039;))&lt;br /&gt;
	self:assertEquals( &amp;#039;2010. január 9.&amp;#039;, Date(datevec,&amp;#039;hu&amp;#039;))&lt;br /&gt;
	self:assertEquals( &amp;#039;9 de januario 2010&amp;#039;, Date(datevec,&amp;#039;ia&amp;#039;))&lt;br /&gt;
	self:assertEquals( &amp;#039;9. janúar 2010&amp;#039;, Date(datevec,&amp;#039;is&amp;#039;))&lt;br /&gt;
	self:assertEquals( &amp;#039;2010年1月9日&amp;#039;, Date(datevec,&amp;#039;ja&amp;#039;))&lt;br /&gt;
	self:assertEquals( &amp;#039;ಜನವರಿ ೯, ೨೦೧೦&amp;#039;, Date(datevec,&amp;#039;kn&amp;#039;))&lt;br /&gt;
	self:assertEquals( &amp;#039;2010년 1월 9일&amp;#039;, Date(datevec,&amp;#039;ko&amp;#039;))&lt;br /&gt;
	self:assertEquals( &amp;#039;2010 m. sausio 9 d.&amp;#039;, Date(datevec,&amp;#039;lt&amp;#039;))&lt;br /&gt;
	self:assertEquals( &amp;#039;2010. gada 9. janvāris&amp;#039;, Date(datevec,&amp;#039;lv&amp;#039;))&lt;br /&gt;
	self:assertEquals( &amp;#039;9 јануари 2010&amp;#039;, Date(datevec,&amp;#039;mk&amp;#039;))&lt;br /&gt;
	self:assertEquals( &amp;#039;9 ജനുവരി 2010&amp;#039;, Date(datevec,&amp;#039;ml&amp;#039;))&lt;br /&gt;
	self:assertEquals( &amp;#039;जानेवारी ९, इ.स. २०१०&amp;#039;, Date(datevec,&amp;#039;mr&amp;#039;))&lt;br /&gt;
	self:assertEquals( &amp;#039;ज्यानुवरी ९, ई सं २०१०&amp;#039;, Date(datevec,&amp;#039;new&amp;#039;))&lt;br /&gt;
	self:assertEquals( &amp;#039;9. januar 2010&amp;#039;, Date(datevec,&amp;#039;nn&amp;#039;))&lt;br /&gt;
	self:assertEquals( &amp;#039;9. januar 2010&amp;#039;, Date(datevec,&amp;#039;no&amp;#039;))&lt;br /&gt;
	self:assertEquals( &amp;#039;9 genièr de 2010&amp;#039;, Date(datevec,&amp;#039;oc&amp;#039;))&lt;br /&gt;
	self:assertEquals( &amp;#039;9 ਜਨਵਰੀ 2010&amp;#039;, Date(datevec,&amp;#039;pa&amp;#039;))&lt;br /&gt;
	self:assertEquals( &amp;#039;9 stycznia 2010&amp;#039;, Date(datevec,&amp;#039;pl&amp;#039;))&lt;br /&gt;
	self:assertEquals( &amp;#039;9 de janeiro de 2010&amp;#039;, Date(datevec,&amp;#039;pt&amp;#039;))&lt;br /&gt;
	self:assertEquals( &amp;#039;9 ñiqin inirupi 2010 watapi&amp;#039;, Date(datevec,&amp;#039;qu&amp;#039;))&lt;br /&gt;
	self:assertEquals( &amp;#039;9 niki Kamaypi 2010 watapi&amp;#039;, Date(datevec,&amp;#039;qug&amp;#039;))&lt;br /&gt;
	self:assertEquals( &amp;#039;9 января 2010&amp;#039;, Date(datevec,&amp;#039;ru&amp;#039;))&lt;br /&gt;
	self:assertEquals( &amp;#039;9. januára 2010&amp;#039;, Date(datevec,&amp;#039;sk&amp;#039;))&lt;br /&gt;
	self:assertEquals( &amp;#039;9. januarja 2010&amp;#039;, Date(datevec,&amp;#039;sl&amp;#039;))&lt;br /&gt;
	self:assertEquals( &amp;#039;9. јануар 2010.&amp;#039;, Date(datevec,&amp;#039;sr&amp;#039;))&lt;br /&gt;
	self:assertEquals( &amp;#039;9 มกราคม พ.ศ. 2553&amp;#039;, Date(datevec,&amp;#039;th&amp;#039;))&lt;br /&gt;
	self:assertEquals( &amp;#039;9 січня 2010&amp;#039;, Date(datevec,&amp;#039;uk&amp;#039;))&lt;br /&gt;
	self:assertEquals( &amp;#039;9 tháng 1 năm 2010&amp;#039;, Date(datevec,&amp;#039;vi&amp;#039;))&lt;br /&gt;
	self:assertEquals( &amp;#039;2010年1月9日&amp;#039;, Date(datevec,&amp;#039;zh-hans&amp;#039;))&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function suite:test_11_YMDHMS()&lt;br /&gt;
	local datevec = {1569,09,3,20,17,40}&lt;br /&gt;
	self:assertEquals( &amp;#039;3 September 1569, 20:17:40&amp;#039;, Date(datevec,&amp;#039;en&amp;#039;))&lt;br /&gt;
	self:assertEquals( &amp;#039;1569ko irailaren 3a, 20:17:40&amp;#039;, Date(datevec,&amp;#039;eu&amp;#039;))&lt;br /&gt;
	self:assertEquals( &amp;#039;٣ی ئەیلوولی ١٥٦٩، ٢٠:١٧:٤٠&amp;#039;, Date(datevec,&amp;#039;ckb&amp;#039;))&lt;br /&gt;
	self:assertEquals( &amp;#039;3. septembra 1569 ob 20:17:40&amp;#039;, Date(datevec,&amp;#039;sl&amp;#039;))&lt;br /&gt;
	self:assertEquals( &amp;#039;3 tháng 9 năm 1569 lúc 20:17:40&amp;#039;, Date(datevec,&amp;#039;vi&amp;#039;))&lt;br /&gt;
end &lt;br /&gt;
&lt;br /&gt;
function suite:test_12_YMDHM()&lt;br /&gt;
	local datevec = {1569,09,3,20,17}&lt;br /&gt;
	self:assertEquals( &amp;#039;3 September 1569, 20:17&amp;#039;, Date(datevec,&amp;#039;en&amp;#039;))&lt;br /&gt;
	self:assertEquals( &amp;#039;1569ko irailaren 3a, 20:17&amp;#039;, Date(datevec,&amp;#039;eu&amp;#039;))&lt;br /&gt;
	self:assertEquals( &amp;#039;٣ی ئەیلوولی ١٥٦٩، ٢٠:١٧&amp;#039;, Date(datevec,&amp;#039;ckb&amp;#039;))&lt;br /&gt;
	self:assertEquals( &amp;#039;3. septembra 1569 ob 20:17&amp;#039;, Date(datevec,&amp;#039;sl&amp;#039;))&lt;br /&gt;
	self:assertEquals( &amp;#039;3 tháng 9 năm 1569 lúc 20:17&amp;#039;, Date(datevec,&amp;#039;vi&amp;#039;))&lt;br /&gt;
end &lt;br /&gt;
&lt;br /&gt;
function suite:test_13_German()&lt;br /&gt;
	self:assertEquals( &amp;#039;20. Juli 1969, 20:17:40&amp;#039;, Date({1969,07,20,20,17,40},&amp;#039;de&amp;#039;))&lt;br /&gt;
	self:assertEquals( &amp;#039;20. Juli 1969, 20:17&amp;#039;,    Date({1969,07,20,20,17},&amp;#039;de&amp;#039;))&lt;br /&gt;
	self:assertEquals( &amp;#039;20. Juli 1969&amp;#039;,           Date({1969,07,20,20},&amp;#039;de&amp;#039;))&lt;br /&gt;
	self:assertEquals( &amp;#039;20. Juli 1969&amp;#039;,           Date({1969,07,20},&amp;#039;de&amp;#039;))&lt;br /&gt;
	self:assertEquals( &amp;#039;20. Juli 1969&amp;#039;,           Date({1969,07,20,nil,17,40},&amp;#039;de&amp;#039;))&lt;br /&gt;
	self:assertEquals( &amp;#039;Juli 1969&amp;#039;,               Date({1969,07},&amp;#039;de&amp;#039;))&lt;br /&gt;
	self:assertEquals( &amp;#039;1969&amp;#039;,                    Date({1969},&amp;#039;de&amp;#039;))&lt;br /&gt;
	self:assertEquals( &amp;#039;1969&amp;#039;,                    Date({1969,&amp;#039;&amp;#039;,&amp;#039;&amp;#039;,&amp;#039;&amp;#039;,&amp;#039;&amp;#039;,&amp;#039;&amp;#039;},&amp;#039;de&amp;#039;))&lt;br /&gt;
	self:assertEquals( &amp;#039;20. Juli&amp;#039;,                Date({nil,07,20},&amp;#039;de&amp;#039;))&lt;br /&gt;
	self:assertEquals( &amp;#039;Juli&amp;#039;,                    Date({nil,07},&amp;#039;de&amp;#039;))&lt;br /&gt;
	self:assertEquals( &amp;#039;&amp;#039;,                        Date({nil},&amp;#039;de&amp;#039;))&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function suite:test_outer_function()&lt;br /&gt;
	-- rest the p.Date(frame) function accessible to template functions&lt;br /&gt;
	local mod = &amp;#039;{{#invoke:&amp;#039; .. TUT.text .. &amp;#039;| Date&amp;#039;&lt;br /&gt;
	self:assertSameResult( &amp;#039;9 January 2009, 15:28:37 +03:30&amp;#039;, mod..&amp;#039;|year=2009|month=01|day=09|hour=15|minute=28|second=37|tzhour=3|tzmin=30|class=|lang=en}}&amp;#039;)&lt;br /&gt;
	self:assertSameResult( &amp;#039;9 January 2009, 15:28:37&amp;#039;, mod..&amp;#039;|year=2009|month=01|day=09|hour=15|minute=28|second=37|class=|lang=en}}&amp;#039;)&lt;br /&gt;
	self:assertSameResult( &amp;#039;25 mai 1943, 15:28:37&amp;#039;,    mod..&amp;#039;|year=1943|month=05|day=25|hour=15|minute=28|second=37|class=|lang=fr}}&amp;#039;)	&lt;br /&gt;
	self:assertSameResult( &amp;#039;&amp;lt;time class=&amp;quot;dtstart&amp;quot; datetime=&amp;quot;2009-01-09&amp;quot; lang=&amp;quot;pl&amp;quot; dir=&amp;quot;ltr&amp;quot; style=&amp;quot;white-space:nowrap&amp;quot;&amp;gt;9 stycznia 2009&amp;lt;/time&amp;gt;&amp;#039;, mod..&amp;#039;|year=2009|month=01|day=09|class=dtstart|lang=pl}}&amp;#039;)&lt;br /&gt;
	self:assertSameResult( &amp;#039;&amp;lt;time class=&amp;quot;dtstart&amp;quot; datetime=&amp;quot;2009-01-09&amp;quot; lang=&amp;quot;pl&amp;quot; dir=&amp;quot;ltr&amp;quot; style=&amp;quot;white-space:nowrap&amp;quot;&amp;gt;9 styczeń 2009&amp;lt;/time&amp;gt;&amp;#039;,  mod..&amp;#039;|year=2009|month=01|day=09|case=nom|lang=pl}}&amp;#039;)&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function suite:test_class()&lt;br /&gt;
	self:assertEquals(&amp;#039;9 January 2009, 15:28:37&amp;#039;, Date({2009,1,9,15,28,37}, &amp;#039;en&amp;#039;, &amp;#039;&amp;#039;, &amp;#039;&amp;#039;))&lt;br /&gt;
	self:assertEquals(&amp;#039;&amp;lt;time class=&amp;quot;dtstart&amp;quot; datetime=&amp;quot;2009-01-09 15:28:37&amp;quot; lang=&amp;quot;en&amp;quot; dir=&amp;quot;ltr&amp;quot; style=&amp;quot;white-space:nowrap&amp;quot;&amp;gt;9 January 2009, 15:28:37&amp;lt;/time&amp;gt;&amp;#039;, Date({2009,1,9,15,28,37}, &amp;#039;en&amp;#039;, &amp;#039;&amp;#039;, &amp;#039;dtstart&amp;#039;))&lt;br /&gt;
	self:assertEquals(&amp;#039;9 January&amp;#039;, Date({nil,1,9}, &amp;#039;en&amp;#039;, &amp;#039;&amp;#039;, &amp;#039;dtstart&amp;#039;))&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function suite:test_timezones()&lt;br /&gt;
	self:assertEquals(&amp;#039;9 January 2009, 15:28:37 +03:30&amp;#039;, Date({2009,1,9,15,28,37,3,30}, &amp;#039;en&amp;#039;))&lt;br /&gt;
	self:assertEquals(&amp;#039;9 January 2009, 15:28:37 −11:00&amp;#039;, Date({2009,1,9,15,28,37,-11} , &amp;#039;en&amp;#039;))&lt;br /&gt;
	self:assertEquals(&amp;#039;ज्यानुवरी ९, ई सं २००९, १५:२८:३७ −११:००&amp;#039;, Date({2009,1,9,15,28,37,-11} , &amp;#039;new&amp;#039;))&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function suite:test_gramatical_cases()&lt;br /&gt;
	self:assertEquals( &amp;#039;20 July 1969&amp;#039;,   Date({1969,07,20},&amp;#039;en&amp;#039;,&amp;#039;&amp;#039;))&lt;br /&gt;
	self:assertEquals( &amp;#039;21 lipca 1969&amp;#039;,  Date({1969,07,21},&amp;#039;pl&amp;#039;,&amp;#039;&amp;#039;))&lt;br /&gt;
	self:assertEquals( &amp;#039;22 lipiec 1969&amp;#039;, Date({1969,07,22},&amp;#039;pl&amp;#039;,&amp;#039;nom&amp;#039;))&lt;br /&gt;
	self:assertEquals( &amp;#039;23 lipca 1969&amp;#039;,  Date({1969,07,23},&amp;#039;pl&amp;#039;,&amp;#039;gen&amp;#039;))&lt;br /&gt;
	self:assertEquals( &amp;#039;24 lipcem 1969&amp;#039;, Date({1969,07,24},&amp;#039;pl&amp;#039;,&amp;#039;ins&amp;#039;))&lt;br /&gt;
	self:assertEquals( &amp;#039;25 lipcu 1969&amp;#039;,  Date({1969,07,25},&amp;#039;pl&amp;#039;,&amp;#039;loc&amp;#039;))&lt;br /&gt;
	self:assertEquals( &amp;#039;21 июля 1969&amp;#039;,   Date({1969,07,21},&amp;#039;ru&amp;#039;,&amp;#039;&amp;#039;))&lt;br /&gt;
	self:assertEquals( &amp;#039;22 июль 1969&amp;#039;,   Date({1969,07,22},&amp;#039;ru&amp;#039;,&amp;#039;nom&amp;#039;))&lt;br /&gt;
	self:assertEquals( &amp;#039;23 июля 1969&amp;#039;,   Date({1969,07,23},&amp;#039;ru&amp;#039;,&amp;#039;gen&amp;#039;))&lt;br /&gt;
	self:assertEquals( &amp;#039;24 июлем 1969&amp;#039;,  Date({1969,07,24},&amp;#039;ru&amp;#039;,&amp;#039;ins&amp;#039;))&lt;br /&gt;
	self:assertEquals( &amp;#039;25 июле 1969&amp;#039;,   Date({1969,07,25},&amp;#039;ru&amp;#039;,&amp;#039;loc&amp;#039;))&lt;br /&gt;
	self:assertEquals( &amp;#039;marraskuu 1960&amp;#039;,    Date({1960,11},&amp;#039;fi&amp;#039;,&amp;#039;&amp;#039;))&lt;br /&gt;
	self:assertEquals( &amp;#039;marraskuu 1961&amp;#039;,    Date({1961,11},&amp;#039;fi&amp;#039;,&amp;#039;nom&amp;#039;))&lt;br /&gt;
	self:assertEquals( &amp;#039;marraskuun 1962&amp;#039;,   Date({1962,11},&amp;#039;fi&amp;#039;,&amp;#039;gen&amp;#039;))&lt;br /&gt;
	self:assertEquals( &amp;#039;marraskuuta 1963&amp;#039;,  Date({1963,11},&amp;#039;fi&amp;#039;,&amp;#039;ptv&amp;#039;))&lt;br /&gt;
	self:assertEquals( &amp;#039;marraskuussa 1964&amp;#039;, Date({1964,11},&amp;#039;fi&amp;#039;,&amp;#039;ine&amp;#039;))&lt;br /&gt;
	self:assertEquals( &amp;#039;marraskuusta 1965&amp;#039;, Date({1965,11},&amp;#039;fi&amp;#039;,&amp;#039;ela&amp;#039;))&lt;br /&gt;
	self:assertEquals( &amp;#039;marraskuuhun 1966&amp;#039;, Date({1966,11},&amp;#039;fi&amp;#039;,&amp;#039;ill&amp;#039;))&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function suite:test_year_trimming()&lt;br /&gt;
    self:assertEquals( &amp;#039;1 September 999&amp;#039;,  Date({999, 9, 1}, &amp;#039;en&amp;#039;, &amp;#039;&amp;#039;, &amp;#039;&amp;#039;, true))&lt;br /&gt;
    self:assertEquals( &amp;#039;2 September 99&amp;#039;,   Date({ 99, 9, 2}, &amp;#039;en&amp;#039;, &amp;#039;&amp;#039;, &amp;#039;&amp;#039;, &amp;#039;true&amp;#039;))&lt;br /&gt;
    self:assertEquals( &amp;#039;3 September 9&amp;#039;,    Date({  9, 9, 3}, &amp;#039;en&amp;#039;, &amp;#039;&amp;#039;, &amp;#039;&amp;#039;, 1))&lt;br /&gt;
    self:assertEquals( &amp;#039;4 September 0999&amp;#039;, Date({999, 9, 4}, &amp;#039;en&amp;#039;, &amp;#039;&amp;#039;, &amp;#039;&amp;#039;, false))&lt;br /&gt;
    self:assertEquals( &amp;#039;5 September 0999&amp;#039;, Date({999, 9, 5}, &amp;#039;en&amp;#039;, &amp;#039;&amp;#039;, &amp;#039;&amp;#039;, &amp;#039;false&amp;#039;))&lt;br /&gt;
    self:assertEquals( &amp;#039;6 September 999&amp;#039;,  Date({999, 9, 6}, &amp;#039;en&amp;#039;, &amp;#039;&amp;#039;, &amp;#039;&amp;#039;, &amp;#039;100-999&amp;#039;))&lt;br /&gt;
    self:assertEquals( &amp;#039;7 September 0999&amp;#039;, Date({999, 9, 7}, &amp;#039;en&amp;#039;, &amp;#039;&amp;#039;, &amp;#039;&amp;#039;, &amp;#039;100-990&amp;#039;))&lt;br /&gt;
    self:assertEquals( &amp;#039;৮ সেপ্টেম্বর ৯৮৭&amp;#039;,    Date({987, 9, 8}, &amp;#039;bn&amp;#039;, &amp;#039;&amp;#039;, &amp;#039;&amp;#039;, &amp;#039;1&amp;#039;))&lt;br /&gt;
    self:assertEquals( &amp;#039;सप्टेंबर ९, इ.स. ९८७&amp;#039;,    Date({987, 9, 9}, &amp;#039;mr&amp;#039;, &amp;#039;&amp;#039;, &amp;#039;&amp;#039;, &amp;#039;1&amp;#039;))&lt;br /&gt;
    self:assertEquals( &amp;#039;ಸೆಪ್ಟೆಂಬರ್ ೧೦, ೯೮೭&amp;#039;,  Date({987, 9,10}, &amp;#039;kn&amp;#039;, &amp;#039;&amp;#039;, &amp;#039;&amp;#039;, &amp;#039;1&amp;#039;))&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function suite:test_out_of_range_dates()&lt;br /&gt;
	self:assertEquals( &amp;#039;20 July 1969, 20:17:40&amp;#039;, Date({1969,07,20,20,17,40},&amp;#039;en&amp;#039;)) -- correct&lt;br /&gt;
	self:assertEquals( &amp;#039;20 July 1969, 20:17&amp;#039;,    Date({1969,07,20,20,17,80},&amp;#039;en&amp;#039;)) -- bad second&lt;br /&gt;
	self:assertEquals( &amp;#039;20 July 1969&amp;#039;,           Date({1969,07,20,20,67,40},&amp;#039;en&amp;#039;)) -- bad minute&lt;br /&gt;
	self:assertEquals( &amp;#039;20 July 1969&amp;#039;,           Date({1969,07,20,30,17,40},&amp;#039;en&amp;#039;)) -- bad hour&lt;br /&gt;
	self:assertEquals( &amp;#039;July 1969&amp;#039;,              Date({1969,07,80,20,17,40},&amp;#039;en&amp;#039;)) -- bad day&lt;br /&gt;
	self:assertEquals( &amp;#039;1969&amp;#039;,                   Date({1969,13,20,20,17,40},&amp;#039;en&amp;#039;)) -- bad month&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function suite:test_strReplace()&lt;br /&gt;
	self:assertEquals( &amp;#039;new old book&amp;#039;, p.strReplace(&amp;#039;old old book&amp;#039;, &amp;#039;old&amp;#039;, &amp;#039;new&amp;#039;)) &lt;br /&gt;
	self:assertEquals( &amp;#039;&amp;quot;old&amp;quot; new book&amp;#039;, p.strReplace(&amp;#039;&amp;quot;old&amp;quot; old book&amp;#039;, &amp;#039;old&amp;#039;, &amp;#039;new&amp;#039;)) &lt;br /&gt;
	self:assertEquals( &amp;#039;my &amp;quot;old&amp;quot; new book&amp;#039;, p.strReplace(&amp;#039;my &amp;quot;old&amp;quot; old book&amp;#039;, &amp;#039;old&amp;#039;, &amp;#039;new&amp;#039;)) &lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function suite:test_clean_datevec()&lt;br /&gt;
	self:assertDeepEquals( {1969,07,20,20,17,40,3,30}, p.clean_datevec({1969,07,20,20,17,40,3,30})) &lt;br /&gt;
	self:assertDeepEquals({1969,7,20,20,17,40},       p.clean_datevec({1969,07,20,20,17,40})) &lt;br /&gt;
	self:assertDeepEquals({1969,7,20,20,17,40},       p.clean_datevec({&amp;#039;1969&amp;#039;,&amp;#039;07&amp;#039;,&amp;#039;20&amp;#039;,&amp;#039;20&amp;#039;,&amp;#039;17&amp;#039;,&amp;#039;40&amp;#039;})) &lt;br /&gt;
	self:assertDeepEquals({1969,7,20,20,17,40},       p.clean_datevec({&amp;#039;1969&amp;#039;,&amp;#039;July&amp;#039;,&amp;#039;20&amp;#039;,&amp;#039;20&amp;#039;,&amp;#039;17&amp;#039;,&amp;#039;40&amp;#039;})) &lt;br /&gt;
	self:assertDeepEquals({1969,7,20,20,17},          p.clean_datevec({1969,7,20,20,17,90})) -- bad second&lt;br /&gt;
	self:assertDeepEquals({1969,7,20, 20,nil,40},     p.clean_datevec({1969,7,20,20,90,40})) -- bad minute&lt;br /&gt;
	self:assertDeepEquals({1969,7,20,nil,17,40},      p.clean_datevec({1969,7,20,24,17,40})) -- bad hour&lt;br /&gt;
	self:assertDeepEquals({1969,7,nil,20,17,40},      p.clean_datevec({1969,7,32,20,17,40})) -- bad day&lt;br /&gt;
	self:assertDeepEquals({1969,nil,20,20,17,40},     p.clean_datevec({1969,13,20,20,17,40})) -- bad month&lt;br /&gt;
	self:assertDeepEquals({1968,7,20,20,17},          p.clean_datevec({1968,7,20,20,17,60}))  -- bad second&lt;br /&gt;
	self:assertDeepEquals({1970,6,30,23,59,60},       p.clean_datevec({1970,06,30,23,59,60})) -- leap second&lt;br /&gt;
	self:assertDeepEquals({1971,12,31,23,59,60},      p.clean_datevec({1971,12,31,23,59,60})) -- leap second&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function suite:test_getTimestamp()&lt;br /&gt;
	local function get_datecode(datenum)&lt;br /&gt;
		local _, datecode = p.getTimestamp(datenum)&lt;br /&gt;
		return datecode&lt;br /&gt;
	end &lt;br /&gt;
&lt;br /&gt;
	self:assertEquals( &amp;#039;YMDhms&amp;#039;, get_datecode({1961,7,20,20,17,40,3,30})) &lt;br /&gt;
	self:assertEquals( &amp;#039;YMDhms&amp;#039;, get_datecode({1962,7,20,20,17,40})) &lt;br /&gt;
	self:assertEquals( &amp;#039;YMDhm&amp;#039;,  get_datecode({1963,7,20,20,17})) &lt;br /&gt;
	self:assertEquals( &amp;#039;YMD&amp;#039;,    get_datecode({1964,7,20,nil,17})) &lt;br /&gt;
	self:assertEquals( &amp;#039;YMD&amp;#039;,    get_datecode({1965,7,20,20})) &lt;br /&gt;
	self:assertEquals( &amp;#039;YMD&amp;#039;,    get_datecode({1966,7,20})) &lt;br /&gt;
	self:assertEquals( &amp;#039;YM&amp;#039;,     get_datecode({1967,7,nil,20,17})) &lt;br /&gt;
	self:assertEquals( &amp;#039;YM&amp;#039;,     get_datecode({1968,7,nil,20,nil})) &lt;br /&gt;
	self:assertEquals( &amp;#039;YM&amp;#039;,     get_datecode({1969,7,nil,nil,17})) &lt;br /&gt;
	self:assertEquals( &amp;#039;YM&amp;#039;,     get_datecode({1970,7})) &lt;br /&gt;
	self:assertEquals( &amp;#039;Y&amp;#039;,      get_datecode({1971,nil,20,20,17,40})) &lt;br /&gt;
	self:assertEquals( &amp;#039;Y&amp;#039;,      get_datecode({1971,nil,20,20,nil,40})) &lt;br /&gt;
	self:assertEquals( &amp;#039;Y&amp;#039;,      get_datecode({1971})) &lt;br /&gt;
	self:assertEquals( &amp;#039;MDhms&amp;#039;,  get_datecode({nil,7,20,20,17,40,3,30})) &lt;br /&gt;
	self:assertEquals( &amp;#039;MDhms&amp;#039;,  get_datecode({nil,7,20,20,17,40})) &lt;br /&gt;
	self:assertEquals( &amp;#039;MDhm&amp;#039;,   get_datecode({nil,7,20,20,17})) &lt;br /&gt;
	self:assertEquals( &amp;#039;MD&amp;#039;,     get_datecode({nil,7,20,nil,17})) &lt;br /&gt;
	self:assertEquals( &amp;#039;MD&amp;#039;,     get_datecode({nil,7,20,20})) &lt;br /&gt;
	self:assertEquals( &amp;#039;MD&amp;#039;,     get_datecode({nil,7,20})) &lt;br /&gt;
	self:assertEquals( &amp;#039;M&amp;#039;,      get_datecode({nil,7,nil,20,17})) &lt;br /&gt;
	self:assertEquals( &amp;#039;M&amp;#039;,      get_datecode({nil,7,nil,20,nil})) &lt;br /&gt;
	self:assertEquals( &amp;#039;M&amp;#039;,      get_datecode({nil,7,nil,nil,17})) &lt;br /&gt;
	self:assertEquals( &amp;#039;M&amp;#039;,      get_datecode({nil,7})) &lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function suite:test_1()&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function suite:test_checkDateValidity()&lt;br /&gt;
	local check = p.checkDateValidity&lt;br /&gt;
	self:assertEquals(true,  check({1969,2,28}))&lt;br /&gt;
	self:assertEquals(false, check({1969,2,29}))&lt;br /&gt;
	self:assertEquals(true,  check({1968,2,29}))&lt;br /&gt;
	self:assertEquals(false, check({2010,2,29}))&lt;br /&gt;
	self:assertEquals(true,  check({2400,2,29}))&lt;br /&gt;
	self:assertEquals(true,  check({-3,2,29}))&lt;br /&gt;
	self:assertEquals(true,  check({100,2,29}))&lt;br /&gt;
	self:assertEquals(false, check({1969,2,30}))&lt;br /&gt;
	self:assertEquals(false, check({1969,13,30}))&lt;br /&gt;
	self:assertEquals(false, check({1969,nil,28}))&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
return suite&lt;/div&gt;</description>
			<pubDate>Fri, 25 Sep 2026 08:46:46 GMT</pubDate>
			<dc:creator>Shahroudi</dc:creator>
			<comments>https://commons.islamical.org/view/Module_talk:DateI18n/sandbox/testcases</comments>
		</item>
		<item>
			<title>Module:DateI18n/sandbox</title>
			<link>https://commons.islamical.org/w/index.php?title=Module:DateI18n/sandbox&amp;diff=3959&amp;oldid=0</link>
			<guid isPermaLink="false">https://commons.islamical.org/w/index.php?title=Module:DateI18n/sandbox&amp;diff=3959&amp;oldid=0</guid>
			<description>&lt;p&gt;Created page with &amp;quot;--[[     __  __           _       _        ____        _       ___ _  ___          |  \/  | ___   __| |_   _| | ___ _|  _ \  __ _| |_ ___|_ _/ |( _ ) _ __    | |\/| |/ _ \ / _` | | | | |/ _ (_) | | |/ _` | __/ _ \| || |/ _ \| &amp;#039;_ \   | |  | | (_) | (_| | |_| | |  __/_| |_| | (_| | ||  __/| || | (_) | | | |  |_|  |_|\___/ \__,_|\__,_|_|\___(_)____/ \__,_|\__\___|___|_|\___/|_| |_|    This module is intended for processing of date strings.  Please do not modify this code wi...&amp;quot;&lt;/p&gt;
&lt;p&gt;&lt;b&gt;New page&lt;/b&gt;&lt;/p&gt;&lt;div&gt;--[[  &lt;br /&gt;
  __  __           _       _        ____        _       ___ _  ___        &lt;br /&gt;
 |  \/  | ___   __| |_   _| | ___ _|  _ \  __ _| |_ ___|_ _/ |( _ ) _ __  &lt;br /&gt;
 | |\/| |/ _ \ / _` | | | | |/ _ (_) | | |/ _` | __/ _ \| || |/ _ \| &amp;#039;_ \ &lt;br /&gt;
 | |  | | (_) | (_| | |_| | |  __/_| |_| | (_| | ||  __/| || | (_) | | | |&lt;br /&gt;
 |_|  |_|\___/ \__,_|\__,_|_|\___(_)____/ \__,_|\__\___|___|_|\___/|_| |_|&lt;br /&gt;
  &lt;br /&gt;
This module is intended for processing of date strings.&lt;br /&gt;
&lt;br /&gt;
Please do not modify this code without applying the changes first at Module:DateI18n/sandbox&lt;br /&gt;
and testing at Module:DateI18n/sandbox/testcases and Module talk:DateI18n/sandbox/testcases.&lt;br /&gt;
&lt;br /&gt;
Authors and maintainers:&lt;br /&gt;
* User:Parent5446 - original version of the function mimicking Template:ISOdate&lt;br /&gt;
* User:Jarekt - original version of the functions mimicking Template:Date &lt;br /&gt;
]]&lt;br /&gt;
&lt;br /&gt;
-- =======================================&lt;br /&gt;
-- === Dependencies ======================&lt;br /&gt;
-- =======================================&lt;br /&gt;
&lt;br /&gt;
require(&amp;#039;strict&amp;#039;)&lt;br /&gt;
&lt;br /&gt;
-- =======================================&lt;br /&gt;
-- === Local Functions ===================&lt;br /&gt;
-- =======================================&lt;br /&gt;
&lt;br /&gt;
------------------------------------------------------------------------------&lt;br /&gt;
--[[ (copied from Module:Core)&lt;br /&gt;
Function allowing for consistent treatment of boolean-like wikitext input.&lt;br /&gt;
Inputs:&lt;br /&gt;
  1) val - value to be evaluated, outputs as a function of values:&lt;br /&gt;
		true  : true  (boolean), 1 (number), or strings: &amp;quot;yes&amp;quot;, &amp;quot;y&amp;quot;, &amp;quot;true&amp;quot;, &amp;quot;1&amp;quot;&lt;br /&gt;
		false : false (boolean), 0 (number), or strings: &amp;quot;no&amp;quot;, &amp;quot;n&amp;quot;, &amp;quot;false&amp;quot;, &amp;quot;0&amp;quot;&lt;br /&gt;
  2) default - value to return otherwise&lt;br /&gt;
See Also: It works similarly to Module:Yesno&lt;br /&gt;
]]&lt;br /&gt;
local function yesno(val, default)&lt;br /&gt;
	if type(val) == &amp;#039;boolean&amp;#039; then&lt;br /&gt;
		return val&lt;br /&gt;
	elseif type(val) == &amp;#039;number&amp;#039; then&lt;br /&gt;
		val = tostring(val)&lt;br /&gt;
	end&lt;br /&gt;
	if type(val) == &amp;#039;string&amp;#039; then&lt;br /&gt;
		local LUT = {&lt;br /&gt;
			yes=true , y=true , [&amp;#039;true&amp;#039;] =true , t=true , [&amp;#039;1&amp;#039;]=true , on =true,&lt;br /&gt;
			no =false, n=false, [&amp;#039;false&amp;#039;]=false, f=false, [&amp;#039;0&amp;#039;]=false, off=false }&lt;br /&gt;
	    val = LUT[mw.ustring.lower(val)]  -- put in lower case&lt;br /&gt;
	    if (val~=nil) then&lt;br /&gt;
			return val&lt;br /&gt;
		end&lt;br /&gt;
    end&lt;br /&gt;
    return default&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
---------------------------------------------------------------------------------------&lt;br /&gt;
-- trim leading zeros in years prior to year 1000&lt;br /&gt;
-- INPUT:&lt;br /&gt;
--  * datestr   - translated date string &lt;br /&gt;
--  * lang      - language of translation&lt;br /&gt;
-- OUTPUT:&lt;br /&gt;
--  * datestr - updated date string &lt;br /&gt;
&lt;br /&gt;
local function trimYear(datestr, year, lang)&lt;br /&gt;
	local yearStr0, yearStr1, yearStr2, zeroStr&lt;br /&gt;
	yearStr0 = string.format(&amp;#039;%04i&amp;#039;, year ) -- 4 digit year in standard form &amp;quot;0123&amp;quot;&lt;br /&gt;
	yearStr1 = mw.language.new(lang):formatDate( &amp;#039;Y&amp;#039;, yearStr0) -- same as calling {{#time}} parser function&lt;br /&gt;
	--yearStr1 = mw.getCurrentFrame():callParserFunction( &amp;quot;#time&amp;quot;, { &amp;#039;Y&amp;#039;, yearStr0, lang } ) -- translate to a language &lt;br /&gt;
	if yearStr0==yearStr1 then -- most of languages use standard form of year &lt;br /&gt;
		yearStr2 = tostring(year)&lt;br /&gt;
	else -- some languages use different characters for numbers&lt;br /&gt;
		yearStr2 = yearStr1&lt;br /&gt;
		zeroStr = mw.ustring.sub(yearStr1,1,1) -- get &amp;quot;0&amp;quot; in whatever language&lt;br /&gt;
		for i=1,3 do -- trim leading zeros&lt;br /&gt;
			if mw.ustring.sub(yearStr2,1,1)==zeroStr then&lt;br /&gt;
				yearStr2 = mw.ustring.sub(yearStr2, 2, 5-i)&lt;br /&gt;
			else&lt;br /&gt;
				break&lt;br /&gt;
			end&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
	return string.gsub(datestr, yearStr1, yearStr2 ) -- in datestr replace long year with trimmed one&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
---------------------------------------------------------------------------------------&lt;br /&gt;
-- Look up proper format string to be passed to {{#time}} parser function&lt;br /&gt;
-- INPUTS:&lt;br /&gt;
--  * datecode: YMDhms, YMDhm, YMD, YM, Y, MDhms, MDhm, MD, or M&lt;br /&gt;
--  * day     : Number between 1 and 31 (not needed for most languages)&lt;br /&gt;
--  * lang    : language&lt;br /&gt;
-- OUTPUT:&lt;br /&gt;
--  * dFormat : input to {{#time}} function&lt;br /&gt;
local function getDateFormat(datecode, day, lang)&lt;br /&gt;
	local function parseFormat(dFormat, day)&lt;br /&gt;
		if dFormat:find(&amp;#039;default&amp;#039;) and #dFormat&amp;gt;10 then&lt;br /&gt;
			-- Special (and messy) case of dFormat code depending on a day number, where data is a&lt;br /&gt;
			-- JSON-encoded table {”default”:”*”,”dDD”:”*”} including fields for specific 2-digit days.&lt;br /&gt;
			-- Change curly double quotes (possibly used for easier editing in tabular data) in dFormat&lt;br /&gt;
			-- to straight ASCII double quotes (required for parsing of this JSON-encoded table).&lt;br /&gt;
			local D = mw.text.jsonDecode(mw.ustring.gsub(dFormat, &amp;#039;[„“‟”]&amp;#039;, &amp;#039;&amp;quot;&amp;#039;)) --com = mw.dumpObject(D)&lt;br /&gt;
			-- If the desired day is not in that JSON table, then use its &amp;quot;default&amp;quot; case.&lt;br /&gt;
			dFormat = D[string.format(&amp;#039;d%02i&amp;#039;, day)] or D.default&lt;br /&gt;
            -- Change ASCII single quotes to ASCII double quotes used for {{#time}} marking.&lt;br /&gt;
            -- Apostrophes needed in plain-text must not use ASCII single quotes but curly apostrophe&lt;br /&gt;
            -- e.g. { ‟default”: ‟j”, ‟d01”: ‟j’&amp;#039;o&amp;#039;” }, not { ‟default”: ‟j”, ‟d01”: ‟j&amp;#039;&amp;#039;o&amp;#039;” }.&lt;br /&gt;
		end&lt;br /&gt;
		dFormat = dFormat:gsub(&amp;quot;&amp;#039;&amp;quot;, &amp;#039;&amp;quot;&amp;#039;)&lt;br /&gt;
		return dFormat&lt;br /&gt;
	end&lt;br /&gt;
	&lt;br /&gt;
	local T = {}&lt;br /&gt;
	local tab = mw.ext.data.get(&amp;#039;DateI18n.tab&amp;#039;, lang)&lt;br /&gt;
	for _, row in pairs(tab.data) do -- convert the output into a dictionary table&lt;br /&gt;
		local id, _, msg = unpack(row)&lt;br /&gt;
		T[id] = msg&lt;br /&gt;
	end&lt;br /&gt;
    -- Compatibility of legacy data using &amp;#039;HMS&amp;#039; or &amp;#039;HM&amp;#039;, where &amp;#039;M&amp;#039; is ambiguous&lt;br /&gt;
    T.YMDhms = T.YMDhms or T.YMDHMS&lt;br /&gt;
    T.YMDhm  = T.YMDhm  or T.YMDHM&lt;br /&gt;
    datecode = datecode == &amp;#039;YMDHMS&amp;#039; and &amp;#039;YMDhms&amp;#039; or datecode == &amp;#039;YMDHM&amp;#039; and &amp;#039;YMDhm&amp;#039; or datecode&lt;br /&gt;
&lt;br /&gt;
	local dFormat = T[datecode]&lt;br /&gt;
	if dFormat == &amp;#039;default&amp;#039; and (datecode == &amp;#039;YMDhms&amp;#039; or datecode == &amp;#039;YMDhm&amp;#039;)  then &lt;br /&gt;
		-- For most languages adding hour:minute:second is done by adding &amp;quot;, HH:ii:ss to the &lt;br /&gt;
		-- day precission date, those languages are skipped in DateI18n.tab and default to &lt;br /&gt;
		-- English which stores word &amp;quot;default&amp;quot;&lt;br /&gt;
		dFormat = parseFormat(T[&amp;#039;YMD&amp;#039;], day).. &amp;#039;, H:i&amp;#039;&lt;br /&gt;
		if datecode == &amp;#039;YMDhms&amp;#039; then&lt;br /&gt;
			dFormat = dFormat .. &amp;#039;:s&amp;#039;&lt;br /&gt;
		end&lt;br /&gt;
	else&lt;br /&gt;
		dFormat = parseFormat(dFormat, day)&lt;br /&gt;
	end&lt;br /&gt;
	return dFormat&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
---------------------------------------------------------------------------------------&lt;br /&gt;
-- Look up proper format string to be passed to {{#time}} parser function&lt;br /&gt;
-- INPUTS:&lt;br /&gt;
--  * month : month number&lt;br /&gt;
--  * case  : gramatic case abbriviation, like &amp;quot;ins&amp;quot;, &amp;quot;loc&amp;quot;&lt;br /&gt;
--  * lang  : language&lt;br /&gt;
-- OUTPUT:&lt;br /&gt;
--  * dFormat : input to {{#time}} function&lt;br /&gt;
local function MonthCase(month, case, lang)&lt;br /&gt;
	if month == nil or case == nil then&lt;br /&gt;
		return nil&lt;br /&gt;
	end&lt;br /&gt;
	local T = {{},{},{},{},{},{},{},{},{},{},{},{}}&lt;br /&gt;
	local tab = mw.ext.data.get(&amp;#039;I18n/MonthCases.tab&amp;#039;, lang)&lt;br /&gt;
	for _, row in pairs(tab.data) do&lt;br /&gt;
		local mth, cs, msg = unpack(row)&lt;br /&gt;
		T[mth][cs] = msg&lt;br /&gt;
	end&lt;br /&gt;
	return T[month][case]&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
-- ==================================================&lt;br /&gt;
-- === External functions ===========================&lt;br /&gt;
-- ==================================================&lt;br /&gt;
local p = {}&lt;br /&gt;
&lt;br /&gt;
-- ===========================================================================&lt;br /&gt;
-- === Functions accesible from the outside to allow unit-testing&lt;br /&gt;
-- === Please do not use directly as they could change in the future&lt;br /&gt;
-- ===========================================================================&lt;br /&gt;
&lt;br /&gt;
---------------------------------------------------------------------------------------&lt;br /&gt;
-- Single string replacement that ignores part of the string in &amp;quot;...&amp;quot;&lt;br /&gt;
function p.strReplace(String, old, new)&lt;br /&gt;
	if String:find(&amp;#039;&amp;quot;&amp;#039;) then&lt;br /&gt;
		local T={}&lt;br /&gt;
		for i, str in ipairs(mw.text.split( String, &amp;#039;&amp;quot;&amp;#039;, true )) do&lt;br /&gt;
			if i%2==1 then&lt;br /&gt;
				str = str:gsub(old, new, 1)&lt;br /&gt;
			end&lt;br /&gt;
			table.insert(T, str)&lt;br /&gt;
		end&lt;br /&gt;
		return table.concat(T,&amp;#039;&amp;quot;&amp;#039;)&lt;br /&gt;
	else&lt;br /&gt;
		return String:gsub(old, new, 1)&lt;br /&gt;
	end&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
---------------------------------------------------------------------------------------&lt;br /&gt;
-- process datevec&lt;br /&gt;
-- INPUT:&lt;br /&gt;
--  * datevec - Array of {year,month,day,hour,minute,second, tzhour, tzmin} containing broken &lt;br /&gt;
--    down date-time component strings or numbers&lt;br /&gt;
-- OUTPUT:&lt;br /&gt;
--  * datenum - same array but holding only numbers or nuls&lt;br /&gt;
function p.clean_datevec(datevec)&lt;br /&gt;
	-- create datecode based on which variables are provided and check for out-of-bound values&lt;br /&gt;
	&lt;br /&gt;
	-- check special case of month provided as a name&lt;br /&gt;
	local month = datevec[2]&lt;br /&gt;
	if type(month) == &amp;#039;string&amp;#039; and month ~= &amp;#039;&amp;#039; and not tonumber(month) then&lt;br /&gt;
		-- When the month is not a number, check if it&amp;#039;s a month name in the project&amp;#039;s language.&lt;br /&gt;
		datevec[2] = mw.getContentLanguage():formatDate(&amp;#039;n&amp;#039;, month)&lt;br /&gt;
	end&lt;br /&gt;
		&lt;br /&gt;
	-- check bounds&lt;br /&gt;
	local maxval = {  1/0, 12, 31, 23, 59, 59,  23, 59 } -- max values (or  1/0=+inf) for year, month, day, hour, minute, second, tzhour, tzmin&lt;br /&gt;
	local minval = { -1/0, 01, 01, 00, 00, 00, -23, 00 } -- min values (or -1/0=-inf) for year, month, ...&lt;br /&gt;
	local datenum  = {} -- date-time encoded as a vector = [year, month, ... , second, tzhour, tzmin]&lt;br /&gt;
	for i = 1, 8 do&lt;br /&gt;
        local val = tonumber(datevec[i])&lt;br /&gt;
        if val and val &amp;gt;= minval[i] and val &amp;lt;= maxval[i] then -- These tests work with infinite min/max values.&lt;br /&gt;
		    datenum[i] = val&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
	&lt;br /&gt;
	-- leap second&lt;br /&gt;
	if tonumber(datevec[6]) == 60 then -- leap second &amp;#039;60&amp;#039; is valid only at end of 23:59 UTC, on 30 June or 31 December of specific years&lt;br /&gt;
--		datenum[6] = 60 &lt;br /&gt;
		local MDhm = table.concat({unpack(datenum,2,5)}, &amp;#039;,&amp;#039;)&lt;br /&gt;
	    if (MDhm == table.concat({6, 30, 23, 59}, &amp;#039;,&amp;#039;)) or (MDhm == table.concat({12, 31, 23, 59}, &amp;#039;,&amp;#039;)) then&lt;br /&gt;
		   datenum[6] = 60 &lt;br /&gt;
	    end&lt;br /&gt;
	end&lt;br /&gt;
	&lt;br /&gt;
	return datenum&lt;br /&gt;
end&lt;br /&gt;
	&lt;br /&gt;
---------------------------------------------------------------------------------------&lt;br /&gt;
-- process datevec&lt;br /&gt;
-- INPUT:&lt;br /&gt;
--  * datenum - Array of {year,month,day,hour,minute,second, tzhour, tzmin} as numbers or nuls&lt;br /&gt;
-- OUTPUT:&lt;br /&gt;
--  * timeStamp - date string in the format taken by mw.language:formatDate lua function and {{#time}} parser function&lt;br /&gt;
--       https://www.mediawiki.org/wiki/Extension:Scribunto/Lua_reference_manual#mw.language:formatDate&lt;br /&gt;
--       https://www.mediawiki.org/wiki/Help:Extension:ParserFunctions#.23time&lt;br /&gt;
--  * datecode - a code specifying content of the array where Y&amp;#039; is year, &amp;#039;M&amp;#039; is month,&lt;br /&gt;
--     &amp;#039;D&amp;#039; is day, &amp;#039;h&amp;#039; is hour, &amp;#039;m&amp;#039; minute, &amp;#039;s&amp;#039; is second.&lt;br /&gt;
--     Output has to be one of YMDhms, YMDhm, YMD, YM, Y, MDhms, MDhm, MD, M.&lt;br /&gt;
function p.getTimestamp(datenum)&lt;br /&gt;
&lt;br /&gt;
	-- create datecode based on datenum&lt;br /&gt;
	local codes  = { &amp;#039;Y&amp;#039;, &amp;#039;M&amp;#039;, &amp;#039;D&amp;#039;, &amp;#039;h&amp;#039;, &amp;#039;m&amp;#039;, &amp;#039;s&amp;#039;} &lt;br /&gt;
	local datecode = &amp;#039;&amp;#039; -- a string signifying which combination of variables was provided&lt;br /&gt;
	for i, c in ipairs(codes) do&lt;br /&gt;
		datecode = datecode .. (datenum[i] and c or &amp;#039;&amp;#039;) -- if datenum[i] than append codes[i] to datecode&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	-- create timestamp string (for example 2000-02-20 02:20:20) based on which variables were provided&lt;br /&gt;
	local timeStamp&lt;br /&gt;
    -- date starting by a year&lt;br /&gt;
	if datecode == &amp;#039;YMDhms&amp;#039; then&lt;br /&gt;
		timeStamp = string.format(&amp;#039;%04i-%02i-%02i %02i:%02i:%02i&amp;#039;, datenum[1], datenum[2], datenum[3], datenum[4], datenum[5], datenum[6] )&lt;br /&gt;
	elseif datecode == &amp;#039;YMDhm&amp;#039; then&lt;br /&gt;
		timeStamp = string.format(&amp;#039;%04i-%02i-%02i %02i:%02i&amp;#039;, datenum[1], datenum[2], datenum[3], datenum[4], datenum[5] )&lt;br /&gt;
	elseif datecode:sub(1,3)==&amp;#039;YMD&amp;#039; then&lt;br /&gt;
		timeStamp = string.format(&amp;#039;%04i-%02i-%02i&amp;#039;, datenum[1], datenum[2], datenum[3] )&lt;br /&gt;
		datecode  = &amp;#039;YMD&amp;#039; -- &amp;#039;YMDhms&amp;#039;, &amp;#039;YMDhm&amp;#039; and &amp;#039;YMD&amp;#039; are the only supported format starting with &amp;#039;YMD&amp;#039;; all others will be converted to &amp;#039;YMD&amp;#039;.&lt;br /&gt;
	elseif datecode:sub(1,2) == &amp;#039;YM&amp;#039; then&lt;br /&gt;
		timeStamp = string.format(&amp;#039;%04i-%02i&amp;#039;, datenum[1], datenum[2] )&lt;br /&gt;
		datecode  = &amp;#039;YM&amp;#039; &lt;br /&gt;
	elseif datecode:sub(1,1)==&amp;#039;Y&amp;#039; then&lt;br /&gt;
		timeStamp = string.format(&amp;#039;%04i&amp;#039;, datenum[1] )&lt;br /&gt;
		datecode  = &amp;#039;Y&amp;#039; &lt;br /&gt;
    -- date starting by a month (the implied year is 2000)&lt;br /&gt;
	elseif datecode== &amp;#039;MDhms&amp;#039; then&lt;br /&gt;
		timeStamp = string.format(&amp;#039;%04i-%02i-%02i %02i:%02i:%02i&amp;#039;, 2000, datenum[2], datenum[3], datenum[4], datenum[5], datenum[6] )&lt;br /&gt;
	elseif datecode == &amp;#039;MDhm&amp;#039; then&lt;br /&gt;
		timeStamp = string.format(&amp;#039;%04i-%02i-%02i %02i:%02i&amp;#039;, 2000, datenum[2], datenum[3], datenum[4], datenum[5] )&lt;br /&gt;
	elseif datecode:sub(1,2) == &amp;#039;MD&amp;#039; then&lt;br /&gt;
		timeStamp = string.format(&amp;#039;%04i-%02i-%02i&amp;#039;, 2000, datenum[2], datenum[3] )&lt;br /&gt;
		datecode = &amp;#039;MD&amp;#039; -- &amp;#039;MDhms&amp;#039;, &amp;#039;MDhm&amp;#039; and &amp;#039;MD&amp;#039; are the only supported format starting with &amp;#039;MD&amp;#039;; all others will be converted to &amp;#039;MD&amp;#039;&lt;br /&gt;
	elseif datecode:sub(1,1) == &amp;#039;M&amp;#039; then -- Ambiguous: could mean minutes, but here means month (when parsed as a name/abbrev, not as a number).&lt;br /&gt;
		timeStamp = string.format(&amp;#039;%04i-%02i-%02i&amp;#039;, 2000, datenum[2], 1 )&lt;br /&gt;
		datecode  = &amp;#039;M&amp;#039; &lt;br /&gt;
    -- other possible but unrecognized formats (e.g. &amp;#039;DHis&amp;#039;, &amp;#039;DHi&amp;#039;, &amp;#039;D&amp;#039;, &amp;#039;His&amp;#039;, &amp;#039;Hi&amp;#039;);&lt;br /&gt;
    -- note that &amp;#039;Dh&amp;#039;, &amp;#039;D&amp;#039;, &amp;#039;h&amp;#039;, &amp;#039;s&amp;#039; may eventually work, but not &amp;#039;m&amp;#039; for minute only, which is ambiguous with &amp;#039;M&amp;#039; for month only.&lt;br /&gt;
	else&lt;br /&gt;
		timeStamp = nil -- format not supported&lt;br /&gt;
	end&lt;br /&gt;
	return timeStamp, datecode&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
local function isValidLangCode(lang)&lt;br /&gt;
	if not lang then&lt;br /&gt;
		return false&lt;br /&gt;
	end&lt;br /&gt;
	lang = mw.text.trim(lang)&lt;br /&gt;
	return lang ~= &amp;#039;&amp;#039; and lang ~= &amp;#039;⧼Lang⧽&amp;#039; and mw.language.isValidCode(lang)&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
-- ===========================================================================&lt;br /&gt;
-- === Version of the function to be called from other LUA codes&lt;br /&gt;
-- ===========================================================================&lt;br /&gt;
&lt;br /&gt;
--[[ ========================================================================================&lt;br /&gt;
Date&lt;br /&gt;
 &lt;br /&gt;
This function is the core part of the ISOdate template. &lt;br /&gt;
 &lt;br /&gt;
Usage:&lt;br /&gt;
  local Date = require(&amp;#039;Module:DateI18n&amp;#039;)._Date&lt;br /&gt;
  local dateStr = Date({2020, 12, 30, 12, 20, 11}, lang)&lt;br /&gt;
 &lt;br /&gt;
Parameters:&lt;br /&gt;
  * {year,month,day,hour,minute,second, tzhour, tzmin}: broken down date-time component strings or numbers&lt;br /&gt;
		tzhour, tzmin are timezone offsets from UTC, hours and minutes&lt;br /&gt;
  * lang: The language to display it in&lt;br /&gt;
  * case: Language format (genitive, etc.) for some languages&lt;br /&gt;
  * class: CSS class for the &amp;lt;time&amp;gt; node, use &amp;quot;&amp;quot; for no metadata at all&lt;br /&gt;
]]&lt;br /&gt;
function p._Date(datevec, lang, case, class, trim_year)&lt;br /&gt;
	-- make sure inputs are in the right format&lt;br /&gt;
	&lt;br /&gt;
	-- set language&lt;br /&gt;
	if not isValidLangCode(lang) then&lt;br /&gt;
		-- get user&amp;#039;s chosen language&lt;br /&gt;
		-- equivalent to {{int:lang}}&lt;br /&gt;
		lang = mw.getCurrentFrame():callParserFunction(&amp;quot;int&amp;quot;, &amp;quot;lang&amp;quot;)&lt;br /&gt;
		&lt;br /&gt;
		if not isValidLangCode(lang) then&lt;br /&gt;
			-- if that doesn&amp;#039;t work, use the project language&lt;br /&gt;
			-- this is useful on projects which import this module from Commons&lt;br /&gt;
			lang = mw.language.getContentLanguage().code&lt;br /&gt;
			&lt;br /&gt;
			if not isValidLangCode(lang) then&lt;br /&gt;
				-- if that doesn&amp;#039;t work, use English&lt;br /&gt;
				lang = &amp;quot;en&amp;quot;&lt;br /&gt;
			end&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
	if lang == &amp;#039;be-tarask&amp;#039; then&lt;br /&gt;
		lang = &amp;#039;be-x-old&amp;#039;&lt;br /&gt;
	end&lt;br /&gt;
	&lt;br /&gt;
	-- process datevec and extract timeStamp and datecode strings as well as numeric datenum array&lt;br /&gt;
	local datenum  = p.clean_datevec(datevec)&lt;br /&gt;
	local year, month, day = datenum[1], datenum[2], datenum[3]&lt;br /&gt;
	local timeStamp, datecode = p.getTimestamp(datenum)&lt;br /&gt;
	if not timeStamp then -- something went wrong in parserDatevec&lt;br /&gt;
		return &amp;#039;&amp;#039;&lt;br /&gt;
	end&lt;br /&gt;
	-- Commons [[Data:DateI18n.tab]] page stores prefered formats for diferent &lt;br /&gt;
	-- languages and datecodes (specifying year-month-day or just year of month-day, etc)&lt;br /&gt;
	-- Look up country specific format input to {{#time}} function&lt;br /&gt;
	local dFormat = getDateFormat(datecode, day, lang)&lt;br /&gt;
&lt;br /&gt;
	-- By default the gramatical case is not specified (case==&amp;#039;&amp;#039;) allowing the format to be specified &lt;br /&gt;
	-- in [[Data:DateI18n.tab]]. You can overwrite the default grammatical case of the month by &lt;br /&gt;
	-- specifying &amp;quot;case&amp;quot; variable. This is needed mostly by Slavic languages to create more complex &lt;br /&gt;
	-- phrases as it is done in [[c:Module:Complex date]]&lt;br /&gt;
	case = case or &amp;#039;&amp;#039;&lt;br /&gt;
	if (lang==&amp;#039;qu&amp;#039; or lang==&amp;#039;qug&amp;#039;) and case==&amp;#039;nom&amp;#039; then&lt;br /&gt;
		-- Special case related to Quechua and Kichwa languages. The form in the I18n is&lt;br /&gt;
		--  Genitive case with suffix &amp;quot;pi&amp;quot; added to month names provided by {#time}}&lt;br /&gt;
		-- in Nominative case that &amp;quot;pi&amp;quot; should be removed&lt;br /&gt;
		-- see https://commons.wikimedia.org/wiki/Template_talk:Date#Quechua from 2014&lt;br /&gt;
		dFormat = dFormat:gsub(&amp;#039;F&amp;quot;pi&amp;quot;&amp;#039;, &amp;#039;F&amp;#039;)&lt;br /&gt;
	elseif case == &amp;#039;gen&amp;#039; then&lt;br /&gt;
		dFormat = p.strReplace(dFormat, &amp;quot;F&amp;quot;, &amp;quot;xg&amp;quot;)&lt;br /&gt;
	elseif case == &amp;#039;nom&amp;#039; then&lt;br /&gt;
		dFormat = p.strReplace(dFormat, &amp;quot;xg&amp;quot;, &amp;quot;F&amp;quot;)&lt;br /&gt;
	elseif case ~= &amp;#039;&amp;#039; and month ~= nil then&lt;br /&gt;
		-- see is page [[Data:I18n/MonthCases.tab]] on Commons have name of the month &lt;br /&gt;
		-- in specific gramatic case in desired language. If we have it than replace &lt;br /&gt;
		-- &amp;quot;F&amp;quot; and xg&amp;quot; in dFormat&lt;br /&gt;
		local monthMsg = MonthCase(month, case, lang)&lt;br /&gt;
		if  monthMsg and monthMsg ~= &amp;#039;&amp;#039; then -- make sure it exists&lt;br /&gt;
			dFormat = p.strReplace(dFormat, &amp;#039;F&amp;#039;,  &amp;#039;&amp;quot;&amp;#039;..monthMsg..&amp;#039;&amp;quot;&amp;#039;) -- replace default month with month name we already looked up&lt;br /&gt;
			dFormat = p.strReplace(dFormat, &amp;#039;xg&amp;#039;, &amp;#039;&amp;quot;&amp;#039;..monthMsg..&amp;#039;&amp;quot;&amp;#039;)&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
    -- Translate the date using specified format.&lt;br /&gt;
	-- See https://www.mediawiki.org/wiki/Extension:Scribunto/Lua_reference_manual#mw.language:formatDate and &lt;br /&gt;
	-- https://www.mediawiki.org/wiki/Help:Extension:ParserFunctions##time for explanation of the format&lt;br /&gt;
	local langObj = mw.language.new(lang)&lt;br /&gt;
	local datestr = langObj:formatDate(dFormat, timeStamp) -- same as using {{#time}} parser function&lt;br /&gt;
	&lt;br /&gt;
	-- Special case related to Thai solar calendar: prior to 1940 new-year was at different time of year,&lt;br /&gt;
	-- so just year (datecode == &amp;#039;Y&amp;#039;) is ambiguous and is replaced by &amp;quot;YYYY or YYYY&amp;quot; phrase&lt;br /&gt;
	if lang==&amp;#039;th&amp;#039; and datecode==&amp;#039;Y&amp;#039; and year&amp;lt;=1940 then&lt;br /&gt;
		datestr = string.format(&amp;#039;%04i หรือ %04i&amp;#039;, year+542, year+543 ) &lt;br /&gt;
	end&lt;br /&gt;
	&lt;br /&gt;
	-- If year &amp;lt; 1000 than either keep the date padded to the length of 4 digits or trim it.&lt;br /&gt;
	-- Decide if the year will stay padded with zeros (for years in 0-999 range).&lt;br /&gt;
	if year and year &amp;lt; 1000 then&lt;br /&gt;
		trim_year = yesno(trim_year, trim_year or &amp;#039;100-999&amp;#039;)&lt;br /&gt;
		if type(trim_year) == &amp;#039;string&amp;#039; then&lt;br /&gt;
			-- If `trim_year` not a simple boolean, then it&amp;#039;s a range of dates.&lt;br /&gt;
			-- For example &amp;#039;100-999&amp;#039; means to pad 1-or-2-digit years to be 4-digit long, while keeping 3-digit years as is.&lt;br /&gt;
			local YMin, YMax = trim_year:match( &amp;#039;(%d+)-(%d+)&amp;#039; )&lt;br /&gt;
			trim_year = YMin and year &amp;gt;= tonumber(YMin) and year &amp;lt;= tonumber(YMax)&lt;br /&gt;
		end&lt;br /&gt;
		if trim_year then&lt;br /&gt;
			datestr = trimYear(datestr, year, lang) -- in datestr replace long year with trimmed one&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	-- Append a timezone if present (after the hour and minute of the day).&lt;br /&gt;
	if datenum[7] and (datecode:sub(1, 5) == &amp;#039;YMDhm&amp;#039; or datecode:sub(1, 4) == &amp;#039;MDhm&amp;#039;) then&lt;br /&gt;
		-- Use {{#time}} parser function to create timezone string, so that we use the correct character set.&lt;br /&gt;
		local sign = (datenum[7]&amp;lt;0) and &amp;#039;−&amp;#039; or &amp;#039;+&amp;#039;&lt;br /&gt;
		timeStamp = string.format(&amp;quot;2000-01-01 %02i:%02i:00&amp;quot;, math.abs(datenum[7]), datenum[8] or 0)&lt;br /&gt;
		local timezone = langObj:formatDate(&amp;#039;H:i&amp;#039;, timeStamp) -- same as using {{#time}} parser function&lt;br /&gt;
		datestr = string.format(&amp;quot;%s %s%s&amp;quot;, datestr, sign, timezone )&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	-- HTML formating of date string and tagging for microformats (only for absolute dates with a year).&lt;br /&gt;
	if class and class ~= &amp;#039;&amp;#039; and class ~= &amp;#039;-&amp;#039; and datecode:sub(1,1) == &amp;#039;Y&amp;#039; then &lt;br /&gt;
		local pat = &amp;#039;&amp;lt;time class=&amp;quot;%s&amp;quot; datetime=&amp;quot;%s&amp;quot; lang=&amp;quot;%s&amp;quot; dir=&amp;quot;%s&amp;quot; style=&amp;quot;white-space:nowrap&amp;quot;&amp;gt;%s&amp;lt;/time&amp;gt;&amp;#039;&lt;br /&gt;
		datestr = pat:format(class, timeStamp, lang, langObj:getDir(), datestr)&lt;br /&gt;
	end&lt;br /&gt;
	return datestr&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
-- ===========================================================================&lt;br /&gt;
-- === Version of the function to be called from template namespace&lt;br /&gt;
-- ===========================================================================&lt;br /&gt;
&lt;br /&gt;
--[[ ========================================================================================&lt;br /&gt;
Date&lt;br /&gt;
 &lt;br /&gt;
This function is the core part of the ISOdate template. &lt;br /&gt;
 &lt;br /&gt;
Usage:&lt;br /&gt;
{{#invoke:DateI18n|Date|year=|month=|day=|hour=|minute=|second=|tzhour=|tzmin=|lang=en}}&lt;br /&gt;
 &lt;br /&gt;
Parameters:&lt;br /&gt;
  * year, month, day, hour, minute, second: broken down date-time component strings&lt;br /&gt;
  * tzhour, tzmin: timezone offset from UTC, hours and minutes&lt;br /&gt;
  * lang: The language to display it in&lt;br /&gt;
  * case: Language format (genitive, etc.) for some languages&lt;br /&gt;
  * class: CSS class for the &amp;lt;time&amp;gt; node, use &amp;quot;&amp;quot; for no metadata at all&lt;br /&gt;
]]&lt;br /&gt;
function p.Date(frame)&lt;br /&gt;
	-- get args&lt;br /&gt;
	local args = {}&lt;br /&gt;
	for key, value in pairs(frame.args) do &lt;br /&gt;
		local trimmed_key = string.gsub(string.lower(mw.text.trim(key)), &amp;#039; &amp;#039;, &amp;#039;_&amp;#039;)&lt;br /&gt;
		local trimmed_value = mw.text.trim(value)&lt;br /&gt;
		if trimmed_key ~= &amp;#039;class&amp;#039; and trimmed_value == &amp;#039;&amp;#039; then&lt;br /&gt;
			trimmed_value = nil&lt;br /&gt;
		end&lt;br /&gt;
		args[trimmed_key] = trimmed_value&lt;br /&gt;
	end&lt;br /&gt;
	&lt;br /&gt;
	-- default values&lt;br /&gt;
	-- Allows to set the html class of the time node where the date is included. This is useful for microformats.&lt;br /&gt;
	args.class = args.class or &amp;#039;-&amp;#039;&lt;br /&gt;
	if args.class == &amp;#039;&amp;#039; then&lt;br /&gt;
		args.class = &amp;#039;dtstart&amp;#039;&lt;br /&gt;
	end&lt;br /&gt;
	-- By default, pad one- and two-digit years to be 4 digits long, while keeping three-digit years as-is.&lt;br /&gt;
	args.trim_year = args.trim_year or &amp;#039;100-999&amp;#039;&lt;br /&gt;
	&lt;br /&gt;
	return p._Date(	&lt;br /&gt;
		{args.year, args.month, args.day, args.hour, args.minute, args.second, args.tzhour, args.tzmin},&lt;br /&gt;
		args.lang,&lt;br /&gt;
		args.case,	&lt;br /&gt;
		args.class,&lt;br /&gt;
		args.trim_year&lt;br /&gt;
	)	&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function p.getDateFormat(frame)&lt;br /&gt;
	-- get args&lt;br /&gt;
	local args = {}&lt;br /&gt;
	for key, value in pairs(frame.args) do &lt;br /&gt;
		local trimmed_key = string.gsub(string.lower(mw.text.trim(key)), &amp;#039; &amp;#039;, &amp;#039;_&amp;#039;)&lt;br /&gt;
		local trimmed_value = mw.text.trim(value)&lt;br /&gt;
		if trimmed_key ~= &amp;#039;class&amp;#039; and trimmed_value == &amp;#039;&amp;#039; then&lt;br /&gt;
			trimmed_value = nil&lt;br /&gt;
		end&lt;br /&gt;
		args[trimmed_key] = trimmed_value&lt;br /&gt;
	end&lt;br /&gt;
	return getDateFormat(args.datecode, args.day, args.lang)&lt;br /&gt;
end&lt;br /&gt;
return p&lt;/div&gt;</description>
			<pubDate>Fri, 25 Sep 2026 08:46:12 GMT</pubDate>
			<dc:creator>Shahroudi</dc:creator>
			<comments>https://commons.islamical.org/view/Module_talk:DateI18n/sandbox</comments>
		</item>
		<item>
			<title>Module:Int</title>
			<link>https://commons.islamical.org/w/index.php?title=Module:Int&amp;diff=3958&amp;oldid=0</link>
			<guid isPermaLink="false">https://commons.islamical.org/w/index.php?title=Module:Int&amp;diff=3958&amp;oldid=0</guid>
			<description>&lt;p&gt;Created page with &amp;quot;-- This is a helper module for &lt;a href=&quot;/view/Template:Int&quot; title=&quot;Template:Int&quot;&gt;Template:Int&lt;/a&gt;  local trim = mw.text.trim local isValidCode = mw.language.isValidCode local messageNew = mw.message.new  local frameCurrent = mw.getCurrentFrame() local preprocess = frameCurrent.preprocess local pageLang = preprocess(frameCurrent, &amp;#039;{{PAGELANGUAGE}}&amp;#039;)  local export = {}  function export.renderIntMessage(frame) 	local args = frame.args 	local msgId = trim(args[1]) 	local pargs = (frame:getParent() or {}).args 	local msgArgs...&amp;quot;&lt;/p&gt;
&lt;p&gt;&lt;b&gt;New page&lt;/b&gt;&lt;/p&gt;&lt;div&gt;-- This is a helper module for [[Template:Int]]&lt;br /&gt;
&lt;br /&gt;
local trim = mw.text.trim&lt;br /&gt;
local isValidCode = mw.language.isValidCode&lt;br /&gt;
local messageNew = mw.message.new&lt;br /&gt;
&lt;br /&gt;
local frameCurrent = mw.getCurrentFrame()&lt;br /&gt;
local preprocess = frameCurrent.preprocess&lt;br /&gt;
local pageLang = preprocess(frameCurrent, &amp;#039;{{PAGELANGUAGE}}&amp;#039;)&lt;br /&gt;
&lt;br /&gt;
local export = {}&lt;br /&gt;
&lt;br /&gt;
function export.renderIntMessage(frame)&lt;br /&gt;
	local args = frame.args&lt;br /&gt;
	local msgId = trim(args[1])&lt;br /&gt;
	local pargs = (frame:getParent() or {}).args&lt;br /&gt;
	local msgArgs = {}&lt;br /&gt;
	for k, v in pairs(pargs) do&lt;br /&gt;
		local n = tonumber(k) or 0&lt;br /&gt;
		if n &amp;gt;= 2 then&lt;br /&gt;
			msgArgs[n - 1] = trim(v)&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
	local lang = args.lang&lt;br /&gt;
	if not lang or lang == &amp;#039;&amp;#039; or not isValidCode(lang) then&lt;br /&gt;
		lang = pageLang&lt;br /&gt;
	end&lt;br /&gt;
	local msg = messageNew(msgId, msgArgs):inLanguage(lang)&lt;br /&gt;
	if lang == &amp;#039;qqx&amp;#039; or msg:exists() then&lt;br /&gt;
			return msg:isDisabled() and (args.missing or &amp;#039;&amp;#039;) or preprocess(frameCurrent, msg:plain())&lt;br /&gt;
	else&lt;br /&gt;
		return args.missing ~= &amp;#039;&amp;#039; and args.missing or &amp;#039;⧼&amp;#039; .. msgId .. &amp;#039;⧽&amp;#039;&lt;br /&gt;
	end&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
return export&lt;/div&gt;</description>
			<pubDate>Fri, 25 Sep 2026 08:42:22 GMT</pubDate>
			<dc:creator>Shahroudi</dc:creator>
			<comments>https://commons.islamical.org/view/Module_talk:Int</comments>
		</item>
		<item>
			<title>Template:Int</title>
			<link>https://commons.islamical.org/w/index.php?title=Template:Int&amp;diff=3957&amp;oldid=0</link>
			<guid isPermaLink="false">https://commons.islamical.org/w/index.php?title=Template:Int&amp;diff=3957&amp;oldid=0</guid>
			<description>&lt;p&gt;Created page with &amp;quot;&amp;lt;onlyinclude&amp;gt;{{&amp;lt;includeonly&amp;gt;safesubst:&amp;lt;/includeonly&amp;gt;#invoke:Int|renderIntMessage|{{{1}}}|missing={{{missing|}}}|lang={{{lang|}}}}}&amp;lt;/onlyinclude&amp;gt; {{Documentation}} &amp;lt;!-- Add categories to the /doc subpage and interwikis in Wikidata, not here! --&amp;gt;&amp;quot;&lt;/p&gt;
&lt;p&gt;&lt;b&gt;New page&lt;/b&gt;&lt;/p&gt;&lt;div&gt;&amp;lt;onlyinclude&amp;gt;{{&amp;lt;includeonly&amp;gt;safesubst:&amp;lt;/includeonly&amp;gt;#invoke:Int|renderIntMessage|{{{1}}}|missing={{{missing|}}}|lang={{{lang|}}}}}&amp;lt;/onlyinclude&amp;gt;&lt;br /&gt;
{{Documentation}}&lt;br /&gt;
&amp;lt;!-- Add categories to the /doc subpage and interwikis in Wikidata, not here! --&amp;gt;&lt;/div&gt;</description>
			<pubDate>Fri, 25 Sep 2026 08:41:44 GMT</pubDate>
			<dc:creator>Shahroudi</dc:creator>
			<comments>https://commons.islamical.org/view/Template_talk:Int</comments>
		</item>
		<item>
			<title>Module:SDC tracking</title>
			<link>https://commons.islamical.org/w/index.php?title=Module:SDC_tracking&amp;diff=3956&amp;oldid=3955</link>
			<guid isPermaLink="false">https://commons.islamical.org/w/index.php?title=Module:SDC_tracking&amp;diff=3956&amp;oldid=3955</guid>
			<description>&lt;p&gt;conditional wikibase fix&lt;/p&gt;
&lt;table style=&quot;background-color: #fff; color: #202122;&quot; data-mw-interface=&quot;&quot;&gt;
				&lt;col class=&quot;diff-marker&quot; /&gt;
				&lt;col class=&quot;diff-content&quot; /&gt;
				&lt;col class=&quot;diff-marker&quot; /&gt;
				&lt;col class=&quot;diff-content&quot; /&gt;
				&lt;tr class=&quot;diff-title&quot; lang=&quot;en&quot;&gt;
				&lt;td colspan=&quot;2&quot; style=&quot;background-color: #fff; color: #202122; text-align: center;&quot;&gt;← Older revision&lt;/td&gt;
				&lt;td colspan=&quot;2&quot; style=&quot;background-color: #fff; color: #202122; text-align: center;&quot;&gt;Revision as of 08:25, 25 September 2026&lt;/td&gt;
				&lt;/tr&gt;&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot; id=&quot;mw-diff-left-l33&quot;&gt;Line 33:&lt;/td&gt;
&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot;&gt;Line 33:&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;		end&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;		end&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;	end&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;	end&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-side-deleted&quot;&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;+&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;	&lt;/ins&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;	local page  = mw.title.getCurrentTitle()&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;	local page  = mw.title.getCurrentTitle()&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;	&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;	&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;−&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #ffe49c; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;	if &lt;del style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;(&lt;/del&gt;page.namespace == 6&lt;del style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;) &lt;/del&gt;then&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;+&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;	if &lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;mw.wikibase then&lt;/ins&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;−&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #ffe49c; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;del style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;		&lt;/del&gt;args.entity = mw.wikibase.getEntity()&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;+&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;	    if &lt;/ins&gt;page.namespace == 6 then&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;−&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #ffe49c; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;del style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;	&lt;/del&gt;elseif args.item then&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;+&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;	        &lt;/ins&gt;args.entity = mw.wikibase.getEntity()&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;−&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #ffe49c; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;del style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;		&lt;/del&gt;args.entity = mw.wikibase.getEntity(args.item)&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;+&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;	    &lt;/ins&gt;elseif args.item then&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;−&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #ffe49c; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;	end	&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;+&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;	        &lt;/ins&gt;args.entity = mw.wikibase.getEntity(args.item)&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-side-deleted&quot;&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;+&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;	    end&lt;/ins&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-side-deleted&quot;&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;+&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;	end&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-side-deleted&quot;&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;+&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;	&lt;/ins&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;	return args&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;	return args&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;end&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;end&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;/table&gt;</description>
			<pubDate>Fri, 25 Sep 2026 08:25:47 GMT</pubDate>
			<dc:creator>Mojtabakd</dc:creator>
			<comments>https://commons.islamical.org/view/Module_talk:SDC_tracking</comments>
		</item>
		<item>
			<title>Module:SDC tracking</title>
			<link>https://commons.islamical.org/w/index.php?title=Module:SDC_tracking&amp;diff=3955&amp;oldid=0</link>
			<guid isPermaLink="false">https://commons.islamical.org/w/index.php?title=Module:SDC_tracking&amp;diff=3955&amp;oldid=0</guid>
			<description>&lt;p&gt;creating module&lt;/p&gt;
&lt;p&gt;&lt;b&gt;New page&lt;/b&gt;&lt;/p&gt;&lt;div&gt;--[[  &lt;br /&gt;
  __  __           _       _        ____  ____   ____    _                  _    _             &lt;br /&gt;
 |  \/  | ___   __| |_   _| | ___ _/ ___||  _ \ / ___|  | |_ _ __ __ _  ___| | _(_)_ __   __ _ &lt;br /&gt;
 | |\/| |/ _ \ / _` | | | | |/ _ (_)___ \| | | | |      | __| &amp;#039;__/ _` |/ __| |/ / | &amp;#039;_ \ / _` |&lt;br /&gt;
 | |  | | (_) | (_| | |_| | |  __/_ ___) | |_| | |___   | |_| | | (_| | (__|   &amp;lt;| | | | | (_| |&lt;br /&gt;
 |_|  |_|\___/ \__,_|\__,_|_|\___(_)____/|____/ \____|___\__|_|  \__,_|\___|_|\_\_|_| |_|\__, |&lt;br /&gt;
                                                    |_____|                              |___/ &lt;br /&gt;
This module is intended to be the engine behind &amp;quot;Template:SDC_tracking&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
Please do not modify this code without applying the changes first at&lt;br /&gt;
&amp;quot;Module:SDC_tracking/sandbox&amp;quot; and testing at &amp;quot;Module:SDC_tracking/testcases&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
Authors and maintainers:&lt;br /&gt;
* User:Jarekt - original version &lt;br /&gt;
]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
-- =======================================&lt;br /&gt;
-- === Dependencies ======================&lt;br /&gt;
-- =======================================&lt;br /&gt;
require(&amp;#039;strict&amp;#039;) -- used for debugging purposes as it detects cases of unintended global variables&lt;br /&gt;
&lt;br /&gt;
-- =======================================&lt;br /&gt;
-- === Local Functions ===================&lt;br /&gt;
-- =======================================&lt;br /&gt;
&lt;br /&gt;
local function getArgs(frame)&lt;br /&gt;
	-- switch to lowercase parameters to make them case independent&lt;br /&gt;
	local args = {}&lt;br /&gt;
	for name, value in pairs( frame.args ) do &lt;br /&gt;
		if value ~= &amp;#039;&amp;#039; then -- nuke empty strings&lt;br /&gt;
			args[string.lower(name)] = value&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
	local page  = mw.title.getCurrentTitle()&lt;br /&gt;
	&lt;br /&gt;
	if (page.namespace == 6) then&lt;br /&gt;
		args.entity = mw.wikibase.getEntity()&lt;br /&gt;
	elseif args.item then&lt;br /&gt;
		args.entity = mw.wikibase.getEntity(args.item)&lt;br /&gt;
	end	&lt;br /&gt;
	return args&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
-----------------------------------------------------------------------&lt;br /&gt;
local function Category(catName)&lt;br /&gt;
	if catName then&lt;br /&gt;
		return &amp;#039;[[Category:&amp;#039; .. catName .. &amp;#039;]]&amp;#039;&lt;br /&gt;
	else&lt;br /&gt;
		return &amp;#039;&amp;#039;&lt;br /&gt;
	end&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
-- ==================================================&lt;br /&gt;
-- === External functions ===========================&lt;br /&gt;
-- ==================================================&lt;br /&gt;
local p = {}&lt;br /&gt;
&lt;br /&gt;
-- ===========================================================================&lt;br /&gt;
-- === Version of the function to be called from other LUA codes&lt;br /&gt;
-- ===========================================================================&lt;br /&gt;
&lt;br /&gt;
function p._statement_exist(entity, property, positive, negative)&lt;br /&gt;
	-- check if statement exist&lt;br /&gt;
	if entity and entity.statements and entity.statements[property] then&lt;br /&gt;
		return positive&lt;br /&gt;
	else&lt;br /&gt;
		return negative&lt;br /&gt;
	end&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
-----------------------------------------------------------------------&lt;br /&gt;
function p._statement_has_value(entity, property, value, matching, mismatching, missing)&lt;br /&gt;
	value = value or &amp;#039;&amp;#039;&lt;br /&gt;
	if entity and entity.statements and entity.statements[property] then&lt;br /&gt;
		for _, statement in pairs( entity:getAllStatements( property )) do&lt;br /&gt;
			if (statement.mainsnak.snaktype == &amp;quot;value&amp;quot;) then &lt;br /&gt;
				local val = statement.mainsnak.datavalue.value&lt;br /&gt;
				if val.id then &lt;br /&gt;
					val = val.id&lt;br /&gt;
				elseif val.text then&lt;br /&gt;
					val = val.text&lt;br /&gt;
				end&lt;br /&gt;
				if val==value then&lt;br /&gt;
					return matching&lt;br /&gt;
				end				&lt;br /&gt;
			end&lt;br /&gt;
		end&lt;br /&gt;
		return mismatching&lt;br /&gt;
	else&lt;br /&gt;
		return missing&lt;br /&gt;
	end&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
-- ===========================================================================&lt;br /&gt;
-- === Versions of the function to be called from template namespace&lt;br /&gt;
-- ===========================================================================&lt;br /&gt;
&lt;br /&gt;
function p.SDC_statement_exist(frame)&lt;br /&gt;
	local args   = getArgs(frame)&lt;br /&gt;
	&lt;br /&gt;
	-- skip if we are not in file namespace&lt;br /&gt;
	local page = mw.title.getCurrentTitle()&lt;br /&gt;
	if not (page.namespace==6 or page.namespace==args.namespace or args.namespace==&amp;#039;all&amp;#039;) then&lt;br /&gt;
		return &amp;#039;&amp;#039;&lt;br /&gt;
	end	&lt;br /&gt;
	&lt;br /&gt;
	local output = p._statement_exist(args.entity, args.property, args.positive_category, args.negative_category)&lt;br /&gt;
	return Category(output)&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
-----------------------------------------------------------------------&lt;br /&gt;
function p.SDC_statement_has_value (frame)&lt;br /&gt;
	local args   = getArgs(frame)&lt;br /&gt;
		&lt;br /&gt;
	-- skip if we are not in file namespace&lt;br /&gt;
	local page = mw.title.getCurrentTitle()&lt;br /&gt;
	if not (page.namespace==6 or page.namespace==args.namespace or args.namespace==&amp;#039;all&amp;#039;) then&lt;br /&gt;
		return &amp;#039;&amp;#039;&lt;br /&gt;
	end	&lt;br /&gt;
	&lt;br /&gt;
	local output = p._statement_has_value(args.entity, args.property, args.value, &lt;br /&gt;
					args.matching_category, args.mismatching_category, args.missing_category)&lt;br /&gt;
	return Category(output)&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
return p&lt;/div&gt;</description>
			<pubDate>Fri, 25 Sep 2026 08:22:57 GMT</pubDate>
			<dc:creator>Mojtabakd</dc:creator>
			<comments>https://commons.islamical.org/view/Module_talk:SDC_tracking</comments>
		</item>
		<item>
			<title>Template:Infobox template tag</title>
			<link>https://commons.islamical.org/w/index.php?title=Template:Infobox_template_tag&amp;diff=3954&amp;oldid=0</link>
			<guid isPermaLink="false">https://commons.islamical.org/w/index.php?title=Template:Infobox_template_tag&amp;diff=3954&amp;oldid=0</guid>
			<description>&lt;p&gt;creating template&lt;/p&gt;
&lt;p&gt;&lt;b&gt;New page&lt;/b&gt;&lt;/p&gt;&lt;div&gt;&amp;lt;noinclude&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{{documentation}}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/noinclude&amp;gt;&lt;/div&gt;</description>
			<pubDate>Fri, 25 Sep 2026 08:21:11 GMT</pubDate>
			<dc:creator>Mojtabakd</dc:creator>
			<comments>https://commons.islamical.org/view/Template_talk:Infobox_template_tag</comments>
		</item>
		<item>
			<title>Module:Information</title>
			<link>https://commons.islamical.org/w/index.php?title=Module:Information&amp;diff=3953&amp;oldid=3848</link>
			<guid isPermaLink="false">https://commons.islamical.org/w/index.php?title=Module:Information&amp;diff=3953&amp;oldid=3848</guid>
			<description>&lt;p&gt;conditional wikibase fix&lt;/p&gt;
&lt;table style=&quot;background-color: #fff; color: #202122;&quot; data-mw-interface=&quot;&quot;&gt;
				&lt;col class=&quot;diff-marker&quot; /&gt;
				&lt;col class=&quot;diff-content&quot; /&gt;
				&lt;col class=&quot;diff-marker&quot; /&gt;
				&lt;col class=&quot;diff-content&quot; /&gt;
				&lt;tr class=&quot;diff-title&quot; lang=&quot;en&quot;&gt;
				&lt;td colspan=&quot;2&quot; style=&quot;background-color: #fff; color: #202122; text-align: center;&quot;&gt;← Older revision&lt;/td&gt;
				&lt;td colspan=&quot;2&quot; style=&quot;background-color: #fff; color: #202122; text-align: center;&quot;&gt;Revision as of 08:19, 25 September 2026&lt;/td&gt;
				&lt;/tr&gt;&lt;tr&gt;&lt;td colspan=&quot;4&quot; class=&quot;diff-multi&quot; lang=&quot;en&quot;&gt;(One intermediate revision by the same user not shown)&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot; id=&quot;mw-diff-left-l169&quot;&gt;Line 169:&lt;/td&gt;
&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot;&gt;Line 169:&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;	-- === harvest structured data                      ===  &lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;	-- === harvest structured data                      ===  &lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;	-- ====================================================&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;	-- ====================================================&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;−&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #ffe49c; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;	local entity = mw.wikibase.getEntity()&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;+&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;	local entity = &lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;mw.wikibase and mw.wikibase.getEntity and &lt;/ins&gt;mw.wikibase.getEntity()&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;−&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #ffe49c; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;	if namespace==6 then  &lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;+&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;	&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;if mw.wikibase then&lt;/ins&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;−&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #ffe49c; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;del style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;		&lt;/del&gt;entity = mw.wikibase.getEntity()&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;+&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;	    &lt;/ins&gt;if namespace == 6 then&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;−&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #ffe49c; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;del style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;	&lt;/del&gt;elseif args.sdc then&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;+&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;	        &lt;/ins&gt;entity = mw.wikibase.getEntity()&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;−&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #ffe49c; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;del style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;		&lt;/del&gt;entity = mw.wikibase.getEntity(args.sdc)&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;+&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;	    &lt;/ins&gt;elseif args.sdc then&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-side-deleted&quot;&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;+&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;	        &lt;/ins&gt;entity = mw.wikibase.getEntity(args.sdc)&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-side-deleted&quot;&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;+&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;	    end&lt;/ins&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;	end&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;	end&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;	&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;	&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;/table&gt;</description>
			<pubDate>Fri, 25 Sep 2026 08:19:21 GMT</pubDate>
			<dc:creator>Mojtabakd</dc:creator>
			<comments>https://commons.islamical.org/view/Module_talk:Information</comments>
		</item>
		<item>
			<title>Module:Self</title>
			<link>https://commons.islamical.org/w/index.php?title=Module:Self&amp;diff=3951&amp;oldid=3845</link>
			<guid isPermaLink="false">https://commons.islamical.org/w/index.php?title=Module:Self&amp;diff=3951&amp;oldid=3845</guid>
			<description>&lt;p&gt;wikibase fix&lt;/p&gt;
&lt;table style=&quot;background-color: #fff; color: #202122;&quot; data-mw-interface=&quot;&quot;&gt;
				&lt;col class=&quot;diff-marker&quot; /&gt;
				&lt;col class=&quot;diff-content&quot; /&gt;
				&lt;col class=&quot;diff-marker&quot; /&gt;
				&lt;col class=&quot;diff-content&quot; /&gt;
				&lt;tr class=&quot;diff-title&quot; lang=&quot;en&quot;&gt;
				&lt;td colspan=&quot;2&quot; style=&quot;background-color: #fff; color: #202122; text-align: center;&quot;&gt;← Older revision&lt;/td&gt;
				&lt;td colspan=&quot;2&quot; style=&quot;background-color: #fff; color: #202122; text-align: center;&quot;&gt;Revision as of 08:17, 25 September 2026&lt;/td&gt;
				&lt;/tr&gt;&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot; id=&quot;mw-diff-left-l139&quot;&gt;Line 139:&lt;/td&gt;
&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot;&gt;Line 139:&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;	if namespace==6 then&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;	if namespace==6 then&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;		table.insert(cats, &amp;#039;[[Category:Self-published work]]&amp;#039;)&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;		table.insert(cats, &amp;#039;[[Category:Self-published work]]&amp;#039;)&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;−&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #ffe49c; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;		local entity = mw.wikibase.getEntity()&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;+&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;		local entity = &lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;mw.wikibase and mw.wikibase.getEntity and &lt;/ins&gt;mw.wikibase.getEntity()&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;		-- check if SDC statement exist&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;		-- check if SDC statement exist&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;		if not(entity and entity.statements and entity.statements[&amp;#039;P275&amp;#039;]) then&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;		if not(entity and entity.statements and entity.statements[&amp;#039;P275&amp;#039;]) then&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;/table&gt;</description>
			<pubDate>Fri, 25 Sep 2026 08:17:22 GMT</pubDate>
			<dc:creator>Mojtabakd</dc:creator>
			<comments>https://commons.islamical.org/view/Module_talk:Self</comments>
		</item>
		<item>
			<title>Data:DateI18n.tab</title>
			<link>https://commons.islamical.org/w/index.php?title=Data:DateI18n.tab&amp;diff=3950&amp;oldid=0</link>
			<guid isPermaLink="false">https://commons.islamical.org/w/index.php?title=Data:DateI18n.tab&amp;diff=3950&amp;oldid=0</guid>
			<description>&lt;p&gt;create data tab&lt;/p&gt;
&lt;p&gt;&lt;b&gt;New page&lt;/b&gt;&lt;/p&gt;&lt;div&gt;{&lt;br /&gt;
    &amp;quot;license&amp;quot;: &amp;quot;CC0-1.0&amp;quot;,&lt;br /&gt;
    &amp;quot;description&amp;quot;: {&lt;br /&gt;
        &amp;quot;en&amp;quot;: &amp;quot;translation table used by Module:DateI18n for different forms of dates. Outputs are in the format used by {{#time}} parser function. WARNING: This translation data is used across dozens of wikis. Please make sure to maintain compatibility with or update other versions of the module.&amp;quot;&lt;br /&gt;
    },&lt;br /&gt;
    &amp;quot;sources&amp;quot;: &amp;quot;Copied from [[Module:I18n/date]]. See [[Module:DateI18n]] for documentation&amp;quot;,&lt;br /&gt;
    &amp;quot;schema&amp;quot;: {&lt;br /&gt;
        &amp;quot;fields&amp;quot;: [&lt;br /&gt;
            {&lt;br /&gt;
                &amp;quot;name&amp;quot;: &amp;quot;id&amp;quot;,&lt;br /&gt;
                &amp;quot;type&amp;quot;: &amp;quot;string&amp;quot;&lt;br /&gt;
            },&lt;br /&gt;
            {&lt;br /&gt;
                &amp;quot;name&amp;quot;: &amp;quot;comment&amp;quot;,&lt;br /&gt;
                &amp;quot;type&amp;quot;: &amp;quot;string&amp;quot;&lt;br /&gt;
            },&lt;br /&gt;
            {&lt;br /&gt;
                &amp;quot;name&amp;quot;: &amp;quot;message&amp;quot;,&lt;br /&gt;
                &amp;quot;type&amp;quot;: &amp;quot;localized&amp;quot;&lt;br /&gt;
            }&lt;br /&gt;
        ]&lt;br /&gt;
    },&lt;br /&gt;
    &amp;quot;data&amp;quot;: [&lt;br /&gt;
        [&lt;br /&gt;
            &amp;quot;YMDHMS&amp;quot;,&lt;br /&gt;
            &amp;quot;year month day hours minutes seconds&amp;lt;br/&amp;gt;default: YMD + &amp;#039;, H:i:s&amp;#039;&amp;quot;,&lt;br /&gt;
            {&lt;br /&gt;
                &amp;quot;ckb&amp;quot;: &amp;quot;jی Fی Y، H:i:s&amp;quot;,&lt;br /&gt;
                &amp;quot;en&amp;quot;: &amp;quot;default&amp;quot;,&lt;br /&gt;
                &amp;quot;fa&amp;quot;: &amp;quot;j F Y، H:i:s&amp;quot;,&lt;br /&gt;
                &amp;quot;sl&amp;quot;: &amp;quot;j. F Y \&amp;quot;ob\&amp;quot; H:i:s&amp;quot;,&lt;br /&gt;
                &amp;quot;vi&amp;quot;: &amp;quot;j F \&amp;quot;năm\&amp;quot; Y \&amp;quot;lúc\&amp;quot; H:i:s&amp;quot;&lt;br /&gt;
            }&lt;br /&gt;
        ],&lt;br /&gt;
        [&lt;br /&gt;
            &amp;quot;YMDHM&amp;quot;,&lt;br /&gt;
            &amp;quot;year month day hours minutes&amp;lt;br/&amp;gt;default: YMD + &amp;#039;, H:i&amp;#039;&amp;quot;,&lt;br /&gt;
            {&lt;br /&gt;
                &amp;quot;ckb&amp;quot;: &amp;quot;jی Fی Y، H:i&amp;quot;,&lt;br /&gt;
                &amp;quot;en&amp;quot;: &amp;quot;default&amp;quot;,&lt;br /&gt;
                &amp;quot;fa&amp;quot;: &amp;quot;j F Y، H:i&amp;quot;,&lt;br /&gt;
                &amp;quot;sl&amp;quot;: &amp;quot;j. F Y \&amp;quot;ob\&amp;quot; H:i&amp;quot;,&lt;br /&gt;
                &amp;quot;vi&amp;quot;: &amp;quot;j F \&amp;quot;năm\&amp;quot; Y \&amp;quot;lúc\&amp;quot; H:i&amp;quot;&lt;br /&gt;
            }&lt;br /&gt;
        ],&lt;br /&gt;
        [&lt;br /&gt;
            &amp;quot;YMD&amp;quot;,&lt;br /&gt;
            &amp;quot;year month day&amp;quot;,&lt;br /&gt;
            {&lt;br /&gt;
                &amp;quot;be&amp;quot;: &amp;quot;j xg Y&amp;quot;,&lt;br /&gt;
                &amp;quot;be-x-old&amp;quot;: &amp;quot;j xg Y&amp;quot;,&lt;br /&gt;
                &amp;quot;bn&amp;quot;: &amp;quot;j F Y&amp;quot;,&lt;br /&gt;
                &amp;quot;bpy&amp;quot;: &amp;quot;F j, মারি Y&amp;quot;,&lt;br /&gt;
                &amp;quot;ca&amp;quot;: &amp;quot;{”default”:”j xg &amp;#039;de&amp;#039; Y”,”d01”:”j&amp;#039;r&amp;#039; xg &amp;#039;de&amp;#039; Y”}&amp;quot;,&lt;br /&gt;
                &amp;quot;ce&amp;quot;: &amp;quot;Y \&amp;quot;шeран\&amp;quot; j F&amp;quot;,&lt;br /&gt;
                &amp;quot;ckb&amp;quot;: &amp;quot;jی Fی Y&amp;quot;,&lt;br /&gt;
                &amp;quot;cs&amp;quot;: &amp;quot;j. xg Y&amp;quot;,&lt;br /&gt;
                &amp;quot;da&amp;quot;: &amp;quot;j. F Y&amp;quot;,&lt;br /&gt;
                &amp;quot;de&amp;quot;: &amp;quot;j. F Y&amp;quot;,&lt;br /&gt;
                &amp;quot;el&amp;quot;: &amp;quot;j xg Y&amp;quot;,&lt;br /&gt;
                &amp;quot;en&amp;quot;: &amp;quot;j F Y&amp;quot;,&lt;br /&gt;
                &amp;quot;eo&amp;quot;: &amp;quot;\&amp;quot;la\&amp;quot; j\&amp;quot;-a de\&amp;quot; F Y&amp;quot;,&lt;br /&gt;
                &amp;quot;es&amp;quot;: &amp;quot;j \&amp;quot;de\&amp;quot; F \&amp;quot;de\&amp;quot; Y&amp;quot;,&lt;br /&gt;
                &amp;quot;et&amp;quot;: &amp;quot;j. F Y&amp;quot;,&lt;br /&gt;
                &amp;quot;eu&amp;quot;: &amp;quot;{”default”:”Y&amp;#039;ko&amp;#039; F&amp;#039;ren&amp;#039; j&amp;#039;a&amp;#039;”,”d01”:”Y&amp;#039;ko&amp;#039; F&amp;#039;ren&amp;#039; j&amp;#039;ea&amp;#039;”,”d11”:”Y&amp;#039;ko&amp;#039; F&amp;#039;ren&amp;#039; j”,”d21”:”Y&amp;#039;ko&amp;#039; F&amp;#039;ren&amp;#039; j&amp;#039;ea&amp;#039;”,”d31”:”Y&amp;#039;ko&amp;#039; F&amp;#039;ren&amp;#039; j”}&amp;quot;,&lt;br /&gt;
                &amp;quot;fa&amp;quot;: &amp;quot;\&amp;quot;&amp;amp;rlm;\&amp;quot;j F Y\&amp;quot;&amp;amp;rlm;\&amp;quot;&amp;quot;,&lt;br /&gt;
                &amp;quot;fi&amp;quot;: &amp;quot;j. F\&amp;quot;ta\&amp;quot; Y&amp;quot;,&lt;br /&gt;
                &amp;quot;fr&amp;quot;: &amp;quot;{”default”:”j F Y”,”d01”:”j&amp;#039;&amp;lt;sup&amp;gt;er&amp;lt;/sup&amp;gt;&amp;#039; F Y”}&amp;quot;,&lt;br /&gt;
                &amp;quot;ga&amp;quot;: &amp;quot;{”default”:”j F Y”,”d01”:”j&amp;#039;&amp;lt;sup&amp;gt;ú&amp;lt;/sup&amp;gt;&amp;#039; F Y”}&amp;quot;,&lt;br /&gt;
                &amp;quot;gl&amp;quot;: &amp;quot;j \&amp;quot;de\&amp;quot; F \&amp;quot;de\&amp;quot; Y&amp;quot;,&lt;br /&gt;
                &amp;quot;he&amp;quot;: &amp;quot;\&amp;quot;&amp;amp;rlm;\&amp;quot;j xg Y\&amp;quot;&amp;amp;rlm;\&amp;quot;&amp;quot;,&lt;br /&gt;
                &amp;quot;hi&amp;quot;: &amp;quot;j F Y&amp;quot;,&lt;br /&gt;
                &amp;quot;hr&amp;quot;: &amp;quot;j. xg Y.&amp;quot;,&lt;br /&gt;
                &amp;quot;hsb&amp;quot;: &amp;quot;j. xg Y&amp;quot;,&lt;br /&gt;
                &amp;quot;hu&amp;quot;: &amp;quot;Y. F j.&amp;quot;,&lt;br /&gt;
                &amp;quot;ia&amp;quot;: &amp;quot;j \&amp;quot;de\&amp;quot; F Y&amp;quot;,&lt;br /&gt;
                &amp;quot;is&amp;quot;: &amp;quot;j. F Y&amp;quot;,&lt;br /&gt;
                &amp;quot;it&amp;quot;: &amp;quot;{”default”:”j F Y”,”d01”:”jº F Y”}&amp;quot;,&lt;br /&gt;
                &amp;quot;ja&amp;quot;: &amp;quot;Y年Fj日&amp;quot;,&lt;br /&gt;
                &amp;quot;kn&amp;quot;: &amp;quot;F j, Y&amp;quot;,&lt;br /&gt;
                &amp;quot;ko&amp;quot;: &amp;quot;Y년 F j일&amp;quot;,&lt;br /&gt;
                &amp;quot;lt&amp;quot;: &amp;quot;Y \&amp;quot;m\&amp;quot;. F j \&amp;quot;d\&amp;quot;.&amp;quot;,&lt;br /&gt;
                &amp;quot;lv&amp;quot;: &amp;quot;Y\&amp;quot;. gada\&amp;quot; j. F&amp;quot;,&lt;br /&gt;
                &amp;quot;mk&amp;quot;: &amp;quot;j F Y&amp;quot;,&lt;br /&gt;
                &amp;quot;ml&amp;quot;: &amp;quot;j F Y&amp;quot;,&lt;br /&gt;
                &amp;quot;mr&amp;quot;: &amp;quot;F j, इ.स. Y&amp;quot;,&lt;br /&gt;
                &amp;quot;new&amp;quot;: &amp;quot;F j, ई सं Y&amp;quot;,&lt;br /&gt;
                &amp;quot;nn&amp;quot;: &amp;quot;j. F Y&amp;quot;,&lt;br /&gt;
                &amp;quot;no&amp;quot;: &amp;quot;j. F Y&amp;quot;,&lt;br /&gt;
                &amp;quot;oc&amp;quot;: &amp;quot;j F \&amp;quot;de\&amp;quot; Y&amp;quot;,&lt;br /&gt;
                &amp;quot;pa&amp;quot;: &amp;quot;j F Y&amp;quot;,&lt;br /&gt;
                &amp;quot;pl&amp;quot;: &amp;quot;j xg Y&amp;quot;,&lt;br /&gt;
                &amp;quot;pt&amp;quot;: &amp;quot;j \&amp;quot;de\&amp;quot; F \&amp;quot;de\&amp;quot; Y&amp;quot;,&lt;br /&gt;
                &amp;quot;qu&amp;quot;: &amp;quot;j \&amp;quot;ñiqin\&amp;quot; F\&amp;quot;pi\&amp;quot; Y \&amp;quot;watapi\&amp;quot;&amp;quot;,&lt;br /&gt;
                &amp;quot;qug&amp;quot;: &amp;quot;j \&amp;quot;niki\&amp;quot; F\&amp;quot;pi\&amp;quot; Y \&amp;quot;watapi\&amp;quot;&amp;quot;,&lt;br /&gt;
                &amp;quot;ru&amp;quot;: &amp;quot;j xg Y&amp;quot;,&lt;br /&gt;
                &amp;quot;sk&amp;quot;: &amp;quot;j. xg Y&amp;quot;,&lt;br /&gt;
                &amp;quot;sl&amp;quot;: &amp;quot;j. F Y&amp;quot;,&lt;br /&gt;
                &amp;quot;sr&amp;quot;: &amp;quot;j. F Y.&amp;quot;,&lt;br /&gt;
                &amp;quot;th&amp;quot;: &amp;quot;j F \&amp;quot;พ.ศ.\&amp;quot; xkY&amp;quot;,&lt;br /&gt;
                &amp;quot;uk&amp;quot;: &amp;quot;j xg Y&amp;quot;,&lt;br /&gt;
                &amp;quot;vi&amp;quot;: &amp;quot;j F \&amp;quot;năm\&amp;quot; Y&amp;quot;,&lt;br /&gt;
                &amp;quot;yue&amp;quot;: &amp;quot;Y年Fj號&amp;quot;,&lt;br /&gt;
                &amp;quot;zh-hans&amp;quot;: &amp;quot;Y年Fj日&amp;quot;&lt;br /&gt;
            }&lt;br /&gt;
        ],&lt;br /&gt;
        [&lt;br /&gt;
            &amp;quot;YM&amp;quot;,&lt;br /&gt;
            &amp;quot;year month (default: &amp;#039;F Y&amp;#039;)&amp;quot;,&lt;br /&gt;
            {&lt;br /&gt;
                &amp;quot;bpy&amp;quot;: &amp;quot;F, মারি Y&amp;quot;,&lt;br /&gt;
                &amp;quot;ca&amp;quot;: &amp;quot;F \&amp;quot;de\&amp;quot; Y&amp;quot;,&lt;br /&gt;
                &amp;quot;ce&amp;quot;: &amp;quot;Y \&amp;quot;шeран\&amp;quot; F&amp;quot;,&lt;br /&gt;
                &amp;quot;ckb&amp;quot;: &amp;quot;Fی Y&amp;quot;,&lt;br /&gt;
                &amp;quot;en&amp;quot;: &amp;quot;F Y&amp;quot;,&lt;br /&gt;
                &amp;quot;es&amp;quot;: &amp;quot;F \&amp;quot;de\&amp;quot; Y&amp;quot;,&lt;br /&gt;
                &amp;quot;eu&amp;quot;: &amp;quot;Y\&amp;quot;ko\&amp;quot; F&amp;quot;,&lt;br /&gt;
                &amp;quot;fa&amp;quot;: &amp;quot;\&amp;quot;&amp;amp;rlm;\&amp;quot;F Y\&amp;quot;&amp;amp;rlm;\&amp;quot;&amp;quot;,&lt;br /&gt;
                &amp;quot;gl&amp;quot;: &amp;quot;F \&amp;quot;de\&amp;quot; Y&amp;quot;,&lt;br /&gt;
                &amp;quot;he&amp;quot;: &amp;quot;\&amp;quot;&amp;amp;rlm;\&amp;quot;F Y\&amp;quot;&amp;amp;rlm;\&amp;quot;&amp;quot;,&lt;br /&gt;
                &amp;quot;hr&amp;quot;: &amp;quot;F Y.&amp;quot;,&lt;br /&gt;
                &amp;quot;hu&amp;quot;: &amp;quot;Y. F&amp;quot;,&lt;br /&gt;
                &amp;quot;ja&amp;quot;: &amp;quot;Y年F&amp;quot;,&lt;br /&gt;
                &amp;quot;kn&amp;quot;: &amp;quot;F, Y&amp;quot;,&lt;br /&gt;
                &amp;quot;ko&amp;quot;: &amp;quot;Y년 F&amp;quot;,&lt;br /&gt;
                &amp;quot;lt&amp;quot;: &amp;quot;Y \&amp;quot;m\&amp;quot;. F&amp;quot;,&lt;br /&gt;
                &amp;quot;lv&amp;quot;: &amp;quot;Y\&amp;quot;. gada\&amp;quot; F&amp;quot;,&lt;br /&gt;
                &amp;quot;mr&amp;quot;: &amp;quot;F, इ.स. Y&amp;quot;,&lt;br /&gt;
                &amp;quot;new&amp;quot;: &amp;quot;F, ई सं  Y&amp;quot;,&lt;br /&gt;
                &amp;quot;oc&amp;quot;: &amp;quot;F \&amp;quot;de\&amp;quot; Y&amp;quot;,&lt;br /&gt;
                &amp;quot;pt&amp;quot;: &amp;quot;F \&amp;quot;de\&amp;quot; Y&amp;quot;,&lt;br /&gt;
                &amp;quot;qu&amp;quot;: &amp;quot;F\&amp;quot;pi\&amp;quot; Y \&amp;quot;watapi\&amp;quot;&amp;quot;,&lt;br /&gt;
                &amp;quot;qug&amp;quot;: &amp;quot;F\&amp;quot;pi\&amp;quot; Y \&amp;quot;watapi\&amp;quot;&amp;quot;,&lt;br /&gt;
                &amp;quot;sr&amp;quot;: &amp;quot;F Y.&amp;quot;,&lt;br /&gt;
                &amp;quot;th&amp;quot;: &amp;quot;F \&amp;quot;พ.ศ.\&amp;quot; xkY&amp;quot;,&lt;br /&gt;
                &amp;quot;vi&amp;quot;: &amp;quot;F \&amp;quot;năm\&amp;quot; Y&amp;quot;,&lt;br /&gt;
                &amp;quot;yue&amp;quot;: &amp;quot;Y年F&amp;quot;,&lt;br /&gt;
                &amp;quot;zh-hans&amp;quot;: &amp;quot;Y年F&amp;quot;&lt;br /&gt;
            }&lt;br /&gt;
        ],&lt;br /&gt;
        [&lt;br /&gt;
            &amp;quot;MD&amp;quot;,&lt;br /&gt;
            &amp;quot;month day (default: &amp;#039;j F&amp;#039;)&amp;quot;,&lt;br /&gt;
            {&lt;br /&gt;
                &amp;quot;be&amp;quot;: &amp;quot;j xg&amp;quot;,&lt;br /&gt;
                &amp;quot;be-x-old&amp;quot;: &amp;quot;j xg&amp;quot;,&lt;br /&gt;
                &amp;quot;bpy&amp;quot;: &amp;quot;F j&amp;quot;,&lt;br /&gt;
                &amp;quot;ca&amp;quot;: &amp;quot;{”default”:”j xg”,”d01”:”j&amp;#039;r&amp;#039; xg”}&amp;quot;,&lt;br /&gt;
                &amp;quot;ckb&amp;quot;: &amp;quot;jی F&amp;quot;,&lt;br /&gt;
                &amp;quot;cs&amp;quot;: &amp;quot;j. xg&amp;quot;,&lt;br /&gt;
                &amp;quot;da&amp;quot;: &amp;quot;j. F&amp;quot;,&lt;br /&gt;
                &amp;quot;de&amp;quot;: &amp;quot;j. F&amp;quot;,&lt;br /&gt;
                &amp;quot;el&amp;quot;: &amp;quot;j xg&amp;quot;,&lt;br /&gt;
                &amp;quot;en&amp;quot;: &amp;quot;j F&amp;quot;,&lt;br /&gt;
                &amp;quot;eo&amp;quot;: &amp;quot;\&amp;quot;la\&amp;quot; j\&amp;quot;-a de\&amp;quot; F&amp;quot;,&lt;br /&gt;
                &amp;quot;es&amp;quot;: &amp;quot;j \&amp;quot;de\&amp;quot; F&amp;quot;,&lt;br /&gt;
                &amp;quot;et&amp;quot;: &amp;quot;j. F&amp;quot;,&lt;br /&gt;
                &amp;quot;eu&amp;quot;: &amp;quot;{”default”:”F&amp;#039;ren&amp;#039; j&amp;#039;a&amp;#039;”,”d01”:”F&amp;#039;ren&amp;#039; j&amp;#039;ea&amp;#039;”,”d11”:”F&amp;#039;ren&amp;#039; j”,”d21”:”F&amp;#039;ren&amp;#039; j&amp;#039;ea&amp;#039;”,”d31”:”F&amp;#039;ren&amp;#039; j”}&amp;quot;,&lt;br /&gt;
                &amp;quot;fa&amp;quot;: &amp;quot;\&amp;quot;&amp;amp;rlm;\&amp;quot;j F\&amp;quot;&amp;amp;rlm;\&amp;quot;&amp;quot;,&lt;br /&gt;
                &amp;quot;fi&amp;quot;: &amp;quot;j. F\&amp;quot;ta\&amp;quot;&amp;quot;,&lt;br /&gt;
                &amp;quot;fr&amp;quot;: &amp;quot;{”default”:”j F”,”d01”:”j&amp;#039;&amp;lt;sup&amp;gt;er&amp;lt;/sup&amp;gt;&amp;#039; F”}&amp;quot;,&lt;br /&gt;
                &amp;quot;ga&amp;quot;: &amp;quot;{”default”:”j F”,”d01”:”j&amp;#039;&amp;lt;sup&amp;gt;ú&amp;lt;/sup&amp;gt;&amp;#039; F”}&amp;quot;,&lt;br /&gt;
                &amp;quot;gl&amp;quot;: &amp;quot;j \&amp;quot;de\&amp;quot; F&amp;quot;,&lt;br /&gt;
                &amp;quot;he&amp;quot;: &amp;quot;\&amp;quot;&amp;amp;rlm;\&amp;quot;j xg\&amp;quot;&amp;amp;rlm;\&amp;quot;&amp;quot;,&lt;br /&gt;
                &amp;quot;hr&amp;quot;: &amp;quot;j. xg&amp;quot;,&lt;br /&gt;
                &amp;quot;hsb&amp;quot;: &amp;quot;j. xg&amp;quot;,&lt;br /&gt;
                &amp;quot;hu&amp;quot;: &amp;quot;F j.&amp;quot;,&lt;br /&gt;
                &amp;quot;ia&amp;quot;: &amp;quot;j \&amp;quot;de\&amp;quot; F&amp;quot;,&lt;br /&gt;
                &amp;quot;is&amp;quot;: &amp;quot;j. F&amp;quot;,&lt;br /&gt;
                &amp;quot;ja&amp;quot;: &amp;quot;Fj日&amp;quot;,&lt;br /&gt;
                &amp;quot;kn&amp;quot;: &amp;quot;F j&amp;quot;,&lt;br /&gt;
                &amp;quot;ko&amp;quot;: &amp;quot;F j일&amp;quot;,&lt;br /&gt;
                &amp;quot;lt&amp;quot;: &amp;quot;F j \&amp;quot;d\&amp;quot;.&amp;quot;,&lt;br /&gt;
                &amp;quot;lv&amp;quot;: &amp;quot;j. F&amp;quot;,&lt;br /&gt;
                &amp;quot;mr&amp;quot;: &amp;quot;F j&amp;quot;,&lt;br /&gt;
                &amp;quot;new&amp;quot;: &amp;quot;F j&amp;quot;,&lt;br /&gt;
                &amp;quot;nn&amp;quot;: &amp;quot;j. F&amp;quot;,&lt;br /&gt;
                &amp;quot;no&amp;quot;: &amp;quot;j. F&amp;quot;,&lt;br /&gt;
                &amp;quot;pl&amp;quot;: &amp;quot;j xg&amp;quot;,&lt;br /&gt;
                &amp;quot;pt&amp;quot;: &amp;quot;j \&amp;quot;de\&amp;quot; F&amp;quot;,&lt;br /&gt;
                &amp;quot;qu&amp;quot;: &amp;quot;j \&amp;quot;ñiqin\&amp;quot; F\&amp;quot;pi\&amp;quot;&amp;quot;,&lt;br /&gt;
                &amp;quot;qug&amp;quot;: &amp;quot;j \&amp;quot;niki\&amp;quot; F\&amp;quot;pi\&amp;quot;&amp;quot;,&lt;br /&gt;
                &amp;quot;ru&amp;quot;: &amp;quot;j xg&amp;quot;,&lt;br /&gt;
                &amp;quot;sk&amp;quot;: &amp;quot;j. xg&amp;quot;,&lt;br /&gt;
                &amp;quot;sl&amp;quot;: &amp;quot;j. F&amp;quot;,&lt;br /&gt;
                &amp;quot;sr&amp;quot;: &amp;quot;j. F&amp;quot;,&lt;br /&gt;
                &amp;quot;th&amp;quot;: &amp;quot;j F&amp;quot;,&lt;br /&gt;
                &amp;quot;uk&amp;quot;: &amp;quot;j xg&amp;quot;,&lt;br /&gt;
                &amp;quot;yue&amp;quot;: &amp;quot;Fj號&amp;quot;,&lt;br /&gt;
                &amp;quot;zh-hans&amp;quot;: &amp;quot;Fj日&amp;quot;&lt;br /&gt;
            }&lt;br /&gt;
        ],&lt;br /&gt;
        [&lt;br /&gt;
            &amp;quot;Y&amp;quot;,&lt;br /&gt;
            &amp;quot;year (default: &amp;#039;Y&amp;#039;)&amp;quot;,&lt;br /&gt;
            {&lt;br /&gt;
                &amp;quot;bpy&amp;quot;: &amp;quot;মারি Y&amp;quot;,&lt;br /&gt;
                &amp;quot;ce&amp;quot;: &amp;quot;Y \&amp;quot;шо\&amp;quot;&amp;quot;,&lt;br /&gt;
                &amp;quot;en&amp;quot;: &amp;quot;Y&amp;quot;,&lt;br /&gt;
                &amp;quot;fa&amp;quot;: &amp;quot;Y&amp;quot;,&lt;br /&gt;
                &amp;quot;hr&amp;quot;: &amp;quot;Y.&amp;quot;,&lt;br /&gt;
                &amp;quot;ja&amp;quot;: &amp;quot;Y年&amp;quot;,&lt;br /&gt;
                &amp;quot;ko&amp;quot;: &amp;quot;Y년&amp;quot;,&lt;br /&gt;
                &amp;quot;lt&amp;quot;: &amp;quot;Y \&amp;quot;m\&amp;quot;.&amp;quot;,&lt;br /&gt;
                &amp;quot;lv&amp;quot;: &amp;quot;Y\&amp;quot;. gada\&amp;quot;&amp;quot;,&lt;br /&gt;
                &amp;quot;mr&amp;quot;: &amp;quot;इ.स. Y&amp;quot;,&lt;br /&gt;
                &amp;quot;new&amp;quot;: &amp;quot;ई सं Y&amp;quot;,&lt;br /&gt;
                &amp;quot;th&amp;quot;: &amp;quot;\&amp;quot;พ.ศ.\&amp;quot; xkY&amp;quot;,&lt;br /&gt;
                &amp;quot;yue&amp;quot;: &amp;quot;Y年&amp;quot;,&lt;br /&gt;
                &amp;quot;zh-hans&amp;quot;: &amp;quot;Y年&amp;quot;&lt;br /&gt;
            }&lt;br /&gt;
        ],&lt;br /&gt;
        [&lt;br /&gt;
            &amp;quot;M&amp;quot;,&lt;br /&gt;
            &amp;quot;month (default: &amp;#039;F&amp;#039;)&amp;quot;,&lt;br /&gt;
            {&lt;br /&gt;
                &amp;quot;en&amp;quot;: &amp;quot;F&amp;quot;&lt;br /&gt;
            }&lt;br /&gt;
        ]&lt;br /&gt;
    ]&lt;br /&gt;
}&lt;/div&gt;</description>
			<pubDate>Fri, 25 Sep 2026 08:11:47 GMT</pubDate>
			<dc:creator>Mojtabakd</dc:creator>
			<comments>https://commons.islamical.org/view/Talk:Data:DateI18n.tab</comments>
		</item>
		<item>
			<title>File:Button ang.png</title>
			<link>https://commons.islamical.org/w/index.php?title=File:Button_ang.png&amp;diff=4249&amp;oldid=0</link>
			<guid isPermaLink="false">https://commons.islamical.org/w/index.php?title=File:Button_ang.png&amp;diff=4249&amp;oldid=0</guid>
			<description>&lt;p&gt;&lt;/p&gt;
&lt;p&gt;&lt;b&gt;New page&lt;/b&gt;&lt;/p&gt;&lt;div&gt;&lt;br /&gt;
== اجازه‌نامه ==&lt;br /&gt;
{{Ombox&lt;br /&gt;
| type      = style&lt;br /&gt;
| image     = [[پرونده:Emblem-important.svg]]&lt;br /&gt;
| style     = width: 800px; &lt;br /&gt;
| textstyle = &lt;br /&gt;
| text      = این تصویر از &amp;#039;&amp;#039;انبار ویکی‌پدیا&amp;#039;&amp;#039; که با مجوزهای حق نشر آزاد مختلف منتشر کننده آثار است، به اینجا آمده است و انتقال دهنده مجوز دقیقی برای انتشار آن گزارش نکرده‌است. برای اطلاعات بیشتر باید به &amp;#039;&amp;#039;انبار ویکی‌پدیا&amp;#039;&amp;#039; مراجعه کنید. احتمال دارد این تصویر به دلایل &amp;#039;&amp;#039;&amp;#039;نقض حق تکثیر&amp;#039;&amp;#039;&amp;#039; در اینجا و حتی انبار ویکی‌پدیا حذف بشود.&lt;br /&gt;
}}&lt;/div&gt;</description>
			<pubDate>Fri, 18 Sep 2026 14:16:47 GMT</pubDate>
			<dc:creator>Shahroudi</dc:creator>
			<comments>https://commons.islamical.org/view/File_talk:Button_ang.png</comments>
		</item>
		<item>
			<title>File:Button m.png</title>
			<link>https://commons.islamical.org/w/index.php?title=File:Button_m.png&amp;diff=4252&amp;oldid=0</link>
			<guid isPermaLink="false">https://commons.islamical.org/w/index.php?title=File:Button_m.png&amp;diff=4252&amp;oldid=0</guid>
			<description>&lt;p&gt;&lt;/p&gt;
&lt;p&gt;&lt;b&gt;New page&lt;/b&gt;&lt;/p&gt;&lt;div&gt;&lt;br /&gt;
== اجازه‌نامه ==&lt;br /&gt;
{{Ombox&lt;br /&gt;
| type      = style&lt;br /&gt;
| image     = [[پرونده:Emblem-important.svg]]&lt;br /&gt;
| style     = width: 800px; &lt;br /&gt;
| textstyle = &lt;br /&gt;
| text      = این تصویر از &amp;#039;&amp;#039;انبار ویکی‌پدیا&amp;#039;&amp;#039; که با مجوزهای حق نشر آزاد مختلف منتشر کننده آثار است، به اینجا آمده است و انتقال دهنده مجوز دقیقی برای انتشار آن گزارش نکرده‌است. برای اطلاعات بیشتر باید به &amp;#039;&amp;#039;انبار ویکی‌پدیا&amp;#039;&amp;#039; مراجعه کنید. احتمال دارد این تصویر به دلایل &amp;#039;&amp;#039;&amp;#039;نقض حق تکثیر&amp;#039;&amp;#039;&amp;#039; در اینجا و حتی انبار ویکی‌پدیا حذف بشود.&lt;br /&gt;
}}&lt;/div&gt;</description>
			<pubDate>Fri, 18 Sep 2026 14:16:11 GMT</pubDate>
			<dc:creator>Shahroudi</dc:creator>
			<comments>https://commons.islamical.org/view/File_talk:Button_m.png</comments>
		</item>
		<item>
			<title>File:Abdulbaha knighting.jpg</title>
			<link>https://commons.islamical.org/w/index.php?title=File:Abdulbaha_knighting.jpg&amp;diff=4025&amp;oldid=0</link>
			<guid isPermaLink="false">https://commons.islamical.org/w/index.php?title=File:Abdulbaha_knighting.jpg&amp;diff=4025&amp;oldid=0</guid>
			<description>&lt;p&gt;&lt;/p&gt;
&lt;p&gt;&lt;b&gt;New page&lt;/b&gt;&lt;/p&gt;&lt;div&gt;&lt;br /&gt;
== اجازه‌نامه ==&lt;br /&gt;
{{Ombox&lt;br /&gt;
| type      = style&lt;br /&gt;
| image     = [[پرونده:Emblem-important.svg]]&lt;br /&gt;
| style     = width: 800px; &lt;br /&gt;
| textstyle = &lt;br /&gt;
| text      = این تصویر از &amp;#039;&amp;#039;انبار ویکی‌پدیا&amp;#039;&amp;#039; که با مجوزهای حق نشر آزاد مختلف منتشر کننده آثار است، به اینجا آمده است و انتقال دهنده مجوز دقیقی برای انتشار آن گزارش نکرده‌است. برای اطلاعات بیشتر باید به &amp;#039;&amp;#039;انبار ویکی‌پدیا&amp;#039;&amp;#039; مراجعه کنید. احتمال دارد این تصویر به دلایل &amp;#039;&amp;#039;&amp;#039;نقض حق تکثیر&amp;#039;&amp;#039;&amp;#039; در اینجا و حتی انبار ویکی‌پدیا حذف بشود.&lt;br /&gt;
}}&lt;/div&gt;</description>
			<pubDate>Fri, 18 Sep 2026 14:06:05 GMT</pubDate>
			<dc:creator>Shahroudi</dc:creator>
			<comments>https://commons.islamical.org/view/File_talk:Abdulbaha_knighting.jpg</comments>
		</item>
		<item>
			<title>File:26473195.jpg</title>
			<link>https://commons.islamical.org/w/index.php?title=File:26473195.jpg&amp;diff=3990&amp;oldid=0</link>
			<guid isPermaLink="false">https://commons.islamical.org/w/index.php?title=File:26473195.jpg&amp;diff=3990&amp;oldid=0</guid>
			<description>&lt;p&gt;&lt;/p&gt;
&lt;p&gt;&lt;b&gt;New page&lt;/b&gt;&lt;/p&gt;&lt;div&gt;&lt;br /&gt;
== اجازه‌نامه ==&lt;br /&gt;
{{Ombox&lt;br /&gt;
| type      = style&lt;br /&gt;
| image     = [[پرونده:Emblem-important.svg]]&lt;br /&gt;
| style     = width: 800px; &lt;br /&gt;
| textstyle = &lt;br /&gt;
| text      = این تصویر از &amp;#039;&amp;#039;انبار ویکی‌پدیا&amp;#039;&amp;#039; که با مجوزهای حق نشر آزاد مختلف منتشر کننده آثار است، به اینجا آمده است و انتقال دهنده مجوز دقیقی برای انتشار آن گزارش نکرده‌است. برای اطلاعات بیشتر باید به &amp;#039;&amp;#039;انبار ویکی‌پدیا&amp;#039;&amp;#039; مراجعه کنید. احتمال دارد این تصویر به دلایل &amp;#039;&amp;#039;&amp;#039;نقض حق تکثیر&amp;#039;&amp;#039;&amp;#039; در اینجا و حتی انبار ویکی‌پدیا حذف بشود.&lt;br /&gt;
}}&lt;/div&gt;</description>
			<pubDate>Fri, 18 Sep 2026 14:01:16 GMT</pubDate>
			<dc:creator>Shahroudi</dc:creator>
			<comments>https://commons.islamical.org/view/File_talk:26473195.jpg</comments>
		</item>
		<item>
			<title>File:Verovering van Bagdad door de Turken, 1638, RP-P-1896-A-19368-1955.jpg</title>
			<link>https://commons.islamical.org/w/index.php?title=File:Verovering_van_Bagdad_door_de_Turken,_1638,_RP-P-1896-A-19368-1955.jpg&amp;diff=5805&amp;oldid=0</link>
			<guid isPermaLink="false">https://commons.islamical.org/w/index.php?title=File:Verovering_van_Bagdad_door_de_Turken,_1638,_RP-P-1896-A-19368-1955.jpg&amp;diff=5805&amp;oldid=0</guid>
			<description>&lt;p&gt;بارگذاری خودکار از انبار ویکی‌مدیا &lt;a href=&quot;/w/index.php?title=commons:File:Verovering_van_Bagdad_door_de_Turken,_1638,_RP-P-1896-A-19368-1955.jpg&amp;amp;action=edit&amp;amp;redlink=1&quot; class=&quot;new&quot; title=&quot;commons:File:Verovering van Bagdad door de Turken, 1638, RP-P-1896-A-19368-1955.jpg (page does not exist)&quot;&gt;منبع در انبار ویکی‌مدیا&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;b&gt;New page&lt;/b&gt;&lt;/p&gt;&lt;div&gt;== خلاصه ==&lt;br /&gt;
بارگذاری خودکار از انبار ویکی‌مدیا&lt;br /&gt;
[[commons:File:Verovering van Bagdad door de Turken, 1638, RP-P-1896-A-19368-1955.jpg|منبع در انبار ویکی‌مدیا]]&lt;br /&gt;
== اجازه‌نامه ==&lt;br /&gt;
{{Ombox&lt;br /&gt;
| type      = style&lt;br /&gt;
| image     = [[پرونده:Emblem-important.svg]]&lt;br /&gt;
| style     = width: 800px; &lt;br /&gt;
| textstyle = &lt;br /&gt;
| text      = این تصویر از &amp;#039;&amp;#039;انبار ویکی‌پدیا&amp;#039;&amp;#039; که با مجوزهای حق نشر آزاد مختلف منتشر کننده آثار است، به اینجا آمده است و انتقال دهنده مجوز دقیقی برای انتشار آن گزارش نکرده‌است. برای اطلاعات بیشتر باید به &amp;#039;&amp;#039;انبار ویکی‌پدیا&amp;#039;&amp;#039; مراجعه کنید. احتمال دارد این تصویر به دلایل &amp;#039;&amp;#039;&amp;#039;نقض حق تکثیر&amp;#039;&amp;#039;&amp;#039; در اینجا و حتی انبار ویکی‌پدیا حذف بشود.&lt;br /&gt;
}}&lt;/div&gt;</description>
			<pubDate>Fri, 18 Sep 2026 11:59:02 GMT</pubDate>
			<dc:creator>Islambot</dc:creator>
			<comments>https://commons.islamical.org/view/File_talk:Verovering_van_Bagdad_door_de_Turken,_1638,_RP-P-1896-A-19368-1955.jpg</comments>
		</item>
		<item>
			<title>File:Tilla-Kori madrasa inside yard 1 general view.JPG</title>
			<link>https://commons.islamical.org/w/index.php?title=File:Tilla-Kori_madrasa_inside_yard_1_general_view.JPG&amp;diff=5731&amp;oldid=0</link>
			<guid isPermaLink="false">https://commons.islamical.org/w/index.php?title=File:Tilla-Kori_madrasa_inside_yard_1_general_view.JPG&amp;diff=5731&amp;oldid=0</guid>
			<description>&lt;p&gt;بارگذاری خودکار از انبار ویکی‌مدیا &lt;a href=&quot;/w/index.php?title=commons:File:Tilla-Kori_madrasa_inside_yard_1_general_view.JPG&amp;amp;action=edit&amp;amp;redlink=1&quot; class=&quot;new&quot; title=&quot;commons:File:Tilla-Kori madrasa inside yard 1 general view.JPG (page does not exist)&quot;&gt;منبع در انبار ویکی‌مدیا&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;b&gt;New page&lt;/b&gt;&lt;/p&gt;&lt;div&gt;== خلاصه ==&lt;br /&gt;
بارگذاری خودکار از انبار ویکی‌مدیا&lt;br /&gt;
[[commons:File:Tilla-Kori madrasa inside yard 1 general view.JPG|منبع در انبار ویکی‌مدیا]]&lt;br /&gt;
== اجازه‌نامه ==&lt;br /&gt;
{{Ombox&lt;br /&gt;
| type      = style&lt;br /&gt;
| image     = [[پرونده:Emblem-important.svg]]&lt;br /&gt;
| style     = width: 800px; &lt;br /&gt;
| textstyle = &lt;br /&gt;
| text      = این تصویر از &amp;#039;&amp;#039;انبار ویکی‌پدیا&amp;#039;&amp;#039; که با مجوزهای حق نشر آزاد مختلف منتشر کننده آثار است، به اینجا آمده است و انتقال دهنده مجوز دقیقی برای انتشار آن گزارش نکرده‌است. برای اطلاعات بیشتر باید به &amp;#039;&amp;#039;انبار ویکی‌پدیا&amp;#039;&amp;#039; مراجعه کنید. احتمال دارد این تصویر به دلایل &amp;#039;&amp;#039;&amp;#039;نقض حق تکثیر&amp;#039;&amp;#039;&amp;#039; در اینجا و حتی انبار ویکی‌پدیا حذف بشود.&lt;br /&gt;
}}&lt;/div&gt;</description>
			<pubDate>Fri, 18 Sep 2026 11:54:37 GMT</pubDate>
			<dc:creator>Islambot</dc:creator>
			<comments>https://commons.islamical.org/view/File_talk:Tilla-Kori_madrasa_inside_yard_1_general_view.JPG</comments>
		</item>
		<item>
			<title>File:Tilla-Kori madrasa inside mosque 96.JPG</title>
			<link>https://commons.islamical.org/w/index.php?title=File:Tilla-Kori_madrasa_inside_mosque_96.JPG&amp;diff=5730&amp;oldid=0</link>
			<guid isPermaLink="false">https://commons.islamical.org/w/index.php?title=File:Tilla-Kori_madrasa_inside_mosque_96.JPG&amp;diff=5730&amp;oldid=0</guid>
			<description>&lt;p&gt;بارگذاری خودکار از انبار ویکی‌مدیا &lt;a href=&quot;/w/index.php?title=commons:File:Tilla-Kori_madrasa_inside_mosque_96.JPG&amp;amp;action=edit&amp;amp;redlink=1&quot; class=&quot;new&quot; title=&quot;commons:File:Tilla-Kori madrasa inside mosque 96.JPG (page does not exist)&quot;&gt;منبع در انبار ویکی‌مدیا&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;b&gt;New page&lt;/b&gt;&lt;/p&gt;&lt;div&gt;== خلاصه ==&lt;br /&gt;
بارگذاری خودکار از انبار ویکی‌مدیا&lt;br /&gt;
[[commons:File:Tilla-Kori madrasa inside mosque 96.JPG|منبع در انبار ویکی‌مدیا]]&lt;br /&gt;
== اجازه‌نامه ==&lt;br /&gt;
{{Ombox&lt;br /&gt;
| type      = style&lt;br /&gt;
| image     = [[پرونده:Emblem-important.svg]]&lt;br /&gt;
| style     = width: 800px; &lt;br /&gt;
| textstyle = &lt;br /&gt;
| text      = این تصویر از &amp;#039;&amp;#039;انبار ویکی‌پدیا&amp;#039;&amp;#039; که با مجوزهای حق نشر آزاد مختلف منتشر کننده آثار است، به اینجا آمده است و انتقال دهنده مجوز دقیقی برای انتشار آن گزارش نکرده‌است. برای اطلاعات بیشتر باید به &amp;#039;&amp;#039;انبار ویکی‌پدیا&amp;#039;&amp;#039; مراجعه کنید. احتمال دارد این تصویر به دلایل &amp;#039;&amp;#039;&amp;#039;نقض حق تکثیر&amp;#039;&amp;#039;&amp;#039; در اینجا و حتی انبار ویکی‌پدیا حذف بشود.&lt;br /&gt;
}}&lt;/div&gt;</description>
			<pubDate>Fri, 18 Sep 2026 11:52:37 GMT</pubDate>
			<dc:creator>Islambot</dc:creator>
			<comments>https://commons.islamical.org/view/File_talk:Tilla-Kori_madrasa_inside_mosque_96.JPG</comments>
		</item>
		<item>
			<title>File:Tilla-Kori madrasa inside mosque 95 detail near minbar.JPG</title>
			<link>https://commons.islamical.org/w/index.php?title=File:Tilla-Kori_madrasa_inside_mosque_95_detail_near_minbar.JPG&amp;diff=5729&amp;oldid=0</link>
			<guid isPermaLink="false">https://commons.islamical.org/w/index.php?title=File:Tilla-Kori_madrasa_inside_mosque_95_detail_near_minbar.JPG&amp;diff=5729&amp;oldid=0</guid>
			<description>&lt;p&gt;بارگذاری خودکار از انبار ویکی‌مدیا &lt;a href=&quot;/w/index.php?title=commons:File:Tilla-Kori_madrasa_inside_mosque_95_detail_near_minbar.JPG&amp;amp;action=edit&amp;amp;redlink=1&quot; class=&quot;new&quot; title=&quot;commons:File:Tilla-Kori madrasa inside mosque 95 detail near minbar.JPG (page does not exist)&quot;&gt;منبع در انبار ویکی‌مدیا&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;b&gt;New page&lt;/b&gt;&lt;/p&gt;&lt;div&gt;== خلاصه ==&lt;br /&gt;
بارگذاری خودکار از انبار ویکی‌مدیا&lt;br /&gt;
[[commons:File:Tilla-Kori madrasa inside mosque 95 detail near minbar.JPG|منبع در انبار ویکی‌مدیا]]&lt;br /&gt;
== اجازه‌نامه ==&lt;br /&gt;
{{Ombox&lt;br /&gt;
| type      = style&lt;br /&gt;
| image     = [[پرونده:Emblem-important.svg]]&lt;br /&gt;
| style     = width: 800px; &lt;br /&gt;
| textstyle = &lt;br /&gt;
| text      = این تصویر از &amp;#039;&amp;#039;انبار ویکی‌پدیا&amp;#039;&amp;#039; که با مجوزهای حق نشر آزاد مختلف منتشر کننده آثار است، به اینجا آمده است و انتقال دهنده مجوز دقیقی برای انتشار آن گزارش نکرده‌است. برای اطلاعات بیشتر باید به &amp;#039;&amp;#039;انبار ویکی‌پدیا&amp;#039;&amp;#039; مراجعه کنید. احتمال دارد این تصویر به دلایل &amp;#039;&amp;#039;&amp;#039;نقض حق تکثیر&amp;#039;&amp;#039;&amp;#039; در اینجا و حتی انبار ویکی‌پدیا حذف بشود.&lt;br /&gt;
}}&lt;/div&gt;</description>
			<pubDate>Fri, 18 Sep 2026 11:50:46 GMT</pubDate>
			<dc:creator>Islambot</dc:creator>
			<comments>https://commons.islamical.org/view/File_talk:Tilla-Kori_madrasa_inside_mosque_95_detail_near_minbar.JPG</comments>
		</item>
		<item>
			<title>File:Tilla-Kori madrasa inside mosque 91 mihrab detail.JPG</title>
			<link>https://commons.islamical.org/w/index.php?title=File:Tilla-Kori_madrasa_inside_mosque_91_mihrab_detail.JPG&amp;diff=5728&amp;oldid=0</link>
			<guid isPermaLink="false">https://commons.islamical.org/w/index.php?title=File:Tilla-Kori_madrasa_inside_mosque_91_mihrab_detail.JPG&amp;diff=5728&amp;oldid=0</guid>
			<description>&lt;p&gt;بارگذاری خودکار از انبار ویکی‌مدیا &lt;a href=&quot;/w/index.php?title=commons:File:Tilla-Kori_madrasa_inside_mosque_91_mihrab_detail.JPG&amp;amp;action=edit&amp;amp;redlink=1&quot; class=&quot;new&quot; title=&quot;commons:File:Tilla-Kori madrasa inside mosque 91 mihrab detail.JPG (page does not exist)&quot;&gt;منبع در انبار ویکی‌مدیا&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;b&gt;New page&lt;/b&gt;&lt;/p&gt;&lt;div&gt;== خلاصه ==&lt;br /&gt;
بارگذاری خودکار از انبار ویکی‌مدیا&lt;br /&gt;
[[commons:File:Tilla-Kori madrasa inside mosque 91 mihrab detail.JPG|منبع در انبار ویکی‌مدیا]]&lt;br /&gt;
== اجازه‌نامه ==&lt;br /&gt;
{{Ombox&lt;br /&gt;
| type      = style&lt;br /&gt;
| image     = [[پرونده:Emblem-important.svg]]&lt;br /&gt;
| style     = width: 800px; &lt;br /&gt;
| textstyle = &lt;br /&gt;
| text      = این تصویر از &amp;#039;&amp;#039;انبار ویکی‌پدیا&amp;#039;&amp;#039; که با مجوزهای حق نشر آزاد مختلف منتشر کننده آثار است، به اینجا آمده است و انتقال دهنده مجوز دقیقی برای انتشار آن گزارش نکرده‌است. برای اطلاعات بیشتر باید به &amp;#039;&amp;#039;انبار ویکی‌پدیا&amp;#039;&amp;#039; مراجعه کنید. احتمال دارد این تصویر به دلایل &amp;#039;&amp;#039;&amp;#039;نقض حق تکثیر&amp;#039;&amp;#039;&amp;#039; در اینجا و حتی انبار ویکی‌پدیا حذف بشود.&lt;br /&gt;
}}&lt;/div&gt;</description>
			<pubDate>Fri, 18 Sep 2026 11:48:43 GMT</pubDate>
			<dc:creator>Islambot</dc:creator>
			<comments>https://commons.islamical.org/view/File_talk:Tilla-Kori_madrasa_inside_mosque_91_mihrab_detail.JPG</comments>
		</item>
		<item>
			<title>File:Tilla-Kori madrasa inside mosque 7 mihrab ceiling.JPG</title>
			<link>https://commons.islamical.org/w/index.php?title=File:Tilla-Kori_madrasa_inside_mosque_7_mihrab_ceiling.JPG&amp;diff=5727&amp;oldid=0</link>
			<guid isPermaLink="false">https://commons.islamical.org/w/index.php?title=File:Tilla-Kori_madrasa_inside_mosque_7_mihrab_ceiling.JPG&amp;diff=5727&amp;oldid=0</guid>
			<description>&lt;p&gt;بارگذاری خودکار از انبار ویکی‌مدیا &lt;a href=&quot;/w/index.php?title=commons:File:Tilla-Kori_madrasa_inside_mosque_7_mihrab_ceiling.JPG&amp;amp;action=edit&amp;amp;redlink=1&quot; class=&quot;new&quot; title=&quot;commons:File:Tilla-Kori madrasa inside mosque 7 mihrab ceiling.JPG (page does not exist)&quot;&gt;منبع در انبار ویکی‌مدیا&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;b&gt;New page&lt;/b&gt;&lt;/p&gt;&lt;div&gt;== خلاصه ==&lt;br /&gt;
بارگذاری خودکار از انبار ویکی‌مدیا&lt;br /&gt;
[[commons:File:Tilla-Kori madrasa inside mosque 7 mihrab ceiling.JPG|منبع در انبار ویکی‌مدیا]]&lt;br /&gt;
== اجازه‌نامه ==&lt;br /&gt;
{{Ombox&lt;br /&gt;
| type      = style&lt;br /&gt;
| image     = [[پرونده:Emblem-important.svg]]&lt;br /&gt;
| style     = width: 800px; &lt;br /&gt;
| textstyle = &lt;br /&gt;
| text      = این تصویر از &amp;#039;&amp;#039;انبار ویکی‌پدیا&amp;#039;&amp;#039; که با مجوزهای حق نشر آزاد مختلف منتشر کننده آثار است، به اینجا آمده است و انتقال دهنده مجوز دقیقی برای انتشار آن گزارش نکرده‌است. برای اطلاعات بیشتر باید به &amp;#039;&amp;#039;انبار ویکی‌پدیا&amp;#039;&amp;#039; مراجعه کنید. احتمال دارد این تصویر به دلایل &amp;#039;&amp;#039;&amp;#039;نقض حق تکثیر&amp;#039;&amp;#039;&amp;#039; در اینجا و حتی انبار ویکی‌پدیا حذف بشود.&lt;br /&gt;
}}&lt;/div&gt;</description>
			<pubDate>Fri, 18 Sep 2026 11:46:17 GMT</pubDate>
			<dc:creator>Islambot</dc:creator>
			<comments>https://commons.islamical.org/view/File_talk:Tilla-Kori_madrasa_inside_mosque_7_mihrab_ceiling.JPG</comments>
		</item>
		<item>
			<title>File:Signed Mahmud Celaleddin - Levha (calligraphic inscription) - Google Art Project (591903).jpg</title>
			<link>https://commons.islamical.org/w/index.php?title=File:Signed_Mahmud_Celaleddin_-_Levha_(calligraphic_inscription)_-_Google_Art_Project_(591903).jpg&amp;diff=5517&amp;oldid=0</link>
			<guid isPermaLink="false">https://commons.islamical.org/w/index.php?title=File:Signed_Mahmud_Celaleddin_-_Levha_(calligraphic_inscription)_-_Google_Art_Project_(591903).jpg&amp;diff=5517&amp;oldid=0</guid>
			<description>&lt;p&gt;بارگذاری خودکار از انبار ویکی‌مدیا &lt;a href=&quot;/w/index.php?title=commons:File:Signed_Mahmud_Celaleddin_-_Levha_(calligraphic_inscription)_-_Google_Art_Project_(591903).jpg&amp;amp;action=edit&amp;amp;redlink=1&quot; class=&quot;new&quot; title=&quot;commons:File:Signed Mahmud Celaleddin - Levha (calligraphic inscription) - Google Art Project (591903).jpg (page does not exist)&quot;&gt;منبع در انبار ویکی‌مدیا&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;b&gt;New page&lt;/b&gt;&lt;/p&gt;&lt;div&gt;== خلاصه ==&lt;br /&gt;
بارگذاری خودکار از انبار ویکی‌مدیا&lt;br /&gt;
[[commons:File:Signed Mahmud Celaleddin - Levha (calligraphic inscription) - Google Art Project (591903).jpg|منبع در انبار ویکی‌مدیا]]&lt;br /&gt;
== اجازه‌نامه ==&lt;br /&gt;
{{Ombox&lt;br /&gt;
| type      = style&lt;br /&gt;
| image     = [[پرونده:Emblem-important.svg]]&lt;br /&gt;
| style     = width: 800px; &lt;br /&gt;
| textstyle = &lt;br /&gt;
| text      = این تصویر از &amp;#039;&amp;#039;انبار ویکی‌پدیا&amp;#039;&amp;#039; که با مجوزهای حق نشر آزاد مختلف منتشر کننده آثار است، به اینجا آمده است و انتقال دهنده مجوز دقیقی برای انتشار آن گزارش نکرده‌است. برای اطلاعات بیشتر باید به &amp;#039;&amp;#039;انبار ویکی‌پدیا&amp;#039;&amp;#039; مراجعه کنید. احتمال دارد این تصویر به دلایل &amp;#039;&amp;#039;&amp;#039;نقض حق تکثیر&amp;#039;&amp;#039;&amp;#039; در اینجا و حتی انبار ویکی‌پدیا حذف بشود.&lt;br /&gt;
}}&lt;/div&gt;</description>
			<pubDate>Fri, 18 Sep 2026 11:41:16 GMT</pubDate>
			<dc:creator>Islambot</dc:creator>
			<comments>https://commons.islamical.org/view/File_talk:Signed_Mahmud_Celaleddin_-_Levha_(calligraphic_inscription)_-_Google_Art_Project_(591903).jpg</comments>
		</item>
		<item>
			<title>File:Shrine of Imam Ali Najaf August 2023.jpg</title>
			<link>https://commons.islamical.org/w/index.php?title=File:Shrine_of_Imam_Ali_Najaf_August_2023.jpg&amp;diff=5514&amp;oldid=0</link>
			<guid isPermaLink="false">https://commons.islamical.org/w/index.php?title=File:Shrine_of_Imam_Ali_Najaf_August_2023.jpg&amp;diff=5514&amp;oldid=0</guid>
			<description>&lt;p&gt;بارگذاری خودکار از انبار ویکی‌مدیا &lt;a href=&quot;/w/index.php?title=commons:File:Shrine_of_Imam_Ali_Najaf_August_2023.jpg&amp;amp;action=edit&amp;amp;redlink=1&quot; class=&quot;new&quot; title=&quot;commons:File:Shrine of Imam Ali Najaf August 2023.jpg (page does not exist)&quot;&gt;منبع در انبار ویکی‌مدیا&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;b&gt;New page&lt;/b&gt;&lt;/p&gt;&lt;div&gt;== خلاصه ==&lt;br /&gt;
بارگذاری خودکار از انبار ویکی‌مدیا&lt;br /&gt;
[[commons:File:Shrine of Imam Ali Najaf August 2023.jpg|منبع در انبار ویکی‌مدیا]]&lt;br /&gt;
== اجازه‌نامه ==&lt;br /&gt;
{{Ombox&lt;br /&gt;
| type      = style&lt;br /&gt;
| image     = [[پرونده:Emblem-important.svg]]&lt;br /&gt;
| style     = width: 800px; &lt;br /&gt;
| textstyle = &lt;br /&gt;
| text      = این تصویر از &amp;#039;&amp;#039;انبار ویکی‌پدیا&amp;#039;&amp;#039; که با مجوزهای حق نشر آزاد مختلف منتشر کننده آثار است، به اینجا آمده است و انتقال دهنده مجوز دقیقی برای انتشار آن گزارش نکرده‌است. برای اطلاعات بیشتر باید به &amp;#039;&amp;#039;انبار ویکی‌پدیا&amp;#039;&amp;#039; مراجعه کنید. احتمال دارد این تصویر به دلایل &amp;#039;&amp;#039;&amp;#039;نقض حق تکثیر&amp;#039;&amp;#039;&amp;#039; در اینجا و حتی انبار ویکی‌پدیا حذف بشود.&lt;br /&gt;
}}&lt;/div&gt;</description>
			<pubDate>Fri, 18 Sep 2026 11:39:26 GMT</pubDate>
			<dc:creator>Islambot</dc:creator>
			<comments>https://commons.islamical.org/view/File_talk:Shrine_of_Imam_Ali_Najaf_August_2023.jpg</comments>
		</item>
		<item>
			<title>File:Sheikh Junayd Shrine.jpg</title>
			<link>https://commons.islamical.org/w/index.php?title=File:Sheikh_Junayd_Shrine.jpg&amp;diff=5509&amp;oldid=0</link>
			<guid isPermaLink="false">https://commons.islamical.org/w/index.php?title=File:Sheikh_Junayd_Shrine.jpg&amp;diff=5509&amp;oldid=0</guid>
			<description>&lt;p&gt;بارگذاری خودکار از انبار ویکی‌مدیا &lt;a href=&quot;/w/index.php?title=commons:File:Sheikh_Junayd_Shrine.jpg&amp;amp;action=edit&amp;amp;redlink=1&quot; class=&quot;new&quot; title=&quot;commons:File:Sheikh Junayd Shrine.jpg (page does not exist)&quot;&gt;منبع در انبار ویکی‌مدیا&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;b&gt;New page&lt;/b&gt;&lt;/p&gt;&lt;div&gt;== خلاصه ==&lt;br /&gt;
بارگذاری خودکار از انبار ویکی‌مدیا&lt;br /&gt;
[[commons:File:Sheikh Junayd Shrine.jpg|منبع در انبار ویکی‌مدیا]]&lt;br /&gt;
== اجازه‌نامه ==&lt;br /&gt;
{{Ombox&lt;br /&gt;
| type      = style&lt;br /&gt;
| image     = [[پرونده:Emblem-important.svg]]&lt;br /&gt;
| style     = width: 800px; &lt;br /&gt;
| textstyle = &lt;br /&gt;
| text      = این تصویر از &amp;#039;&amp;#039;انبار ویکی‌پدیا&amp;#039;&amp;#039; که با مجوزهای حق نشر آزاد مختلف منتشر کننده آثار است، به اینجا آمده است و انتقال دهنده مجوز دقیقی برای انتشار آن گزارش نکرده‌است. برای اطلاعات بیشتر باید به &amp;#039;&amp;#039;انبار ویکی‌پدیا&amp;#039;&amp;#039; مراجعه کنید. احتمال دارد این تصویر به دلایل &amp;#039;&amp;#039;&amp;#039;نقض حق تکثیر&amp;#039;&amp;#039;&amp;#039; در اینجا و حتی انبار ویکی‌پدیا حذف بشود.&lt;br /&gt;
}}&lt;/div&gt;</description>
			<pubDate>Fri, 18 Sep 2026 11:38:17 GMT</pubDate>
			<dc:creator>Islambot</dc:creator>
			<comments>https://commons.islamical.org/view/File_talk:Sheikh_Junayd_Shrine.jpg</comments>
		</item>
		<item>
			<title>File:Shahram Nazeri.jpg</title>
			<link>https://commons.islamical.org/w/index.php?title=File:Shahram_Nazeri.jpg&amp;diff=5503&amp;oldid=0</link>
			<guid isPermaLink="false">https://commons.islamical.org/w/index.php?title=File:Shahram_Nazeri.jpg&amp;diff=5503&amp;oldid=0</guid>
			<description>&lt;p&gt;بارگذاری خودکار از انبار ویکی‌مدیا &lt;a href=&quot;/w/index.php?title=commons:File:Shahram_Nazeri.jpg&amp;amp;action=edit&amp;amp;redlink=1&quot; class=&quot;new&quot; title=&quot;commons:File:Shahram Nazeri.jpg (page does not exist)&quot;&gt;منبع در انبار ویکی‌مدیا&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;b&gt;New page&lt;/b&gt;&lt;/p&gt;&lt;div&gt;== خلاصه ==&lt;br /&gt;
بارگذاری خودکار از انبار ویکی‌مدیا&lt;br /&gt;
[[commons:File:Shahram Nazeri.jpg|منبع در انبار ویکی‌مدیا]]&lt;br /&gt;
== اجازه‌نامه ==&lt;br /&gt;
{{Ombox&lt;br /&gt;
| type      = style&lt;br /&gt;
| image     = [[پرونده:Emblem-important.svg]]&lt;br /&gt;
| style     = width: 800px; &lt;br /&gt;
| textstyle = &lt;br /&gt;
| text      = این تصویر از &amp;#039;&amp;#039;انبار ویکی‌پدیا&amp;#039;&amp;#039; که با مجوزهای حق نشر آزاد مختلف منتشر کننده آثار است، به اینجا آمده است و انتقال دهنده مجوز دقیقی برای انتشار آن گزارش نکرده‌است. برای اطلاعات بیشتر باید به &amp;#039;&amp;#039;انبار ویکی‌پدیا&amp;#039;&amp;#039; مراجعه کنید. احتمال دارد این تصویر به دلایل &amp;#039;&amp;#039;&amp;#039;نقض حق تکثیر&amp;#039;&amp;#039;&amp;#039; در اینجا و حتی انبار ویکی‌پدیا حذف بشود.&lt;br /&gt;
}}&lt;/div&gt;</description>
			<pubDate>Fri, 18 Sep 2026 11:36:04 GMT</pubDate>
			<dc:creator>Islambot</dc:creator>
			<comments>https://commons.islamical.org/view/File_talk:Shahram_Nazeri.jpg</comments>
		</item>
		<item>
			<title>File:Shah Mosque Door- Sahand Ace.png</title>
			<link>https://commons.islamical.org/w/index.php?title=File:Shah_Mosque_Door-_Sahand_Ace.png&amp;diff=5498&amp;oldid=0</link>
			<guid isPermaLink="false">https://commons.islamical.org/w/index.php?title=File:Shah_Mosque_Door-_Sahand_Ace.png&amp;diff=5498&amp;oldid=0</guid>
			<description>&lt;p&gt;بارگذاری خودکار از انبار ویکی‌مدیا &lt;a href=&quot;/w/index.php?title=commons:File:Shah_Mosque_Door-_Sahand_Ace.png&amp;amp;action=edit&amp;amp;redlink=1&quot; class=&quot;new&quot; title=&quot;commons:File:Shah Mosque Door- Sahand Ace.png (page does not exist)&quot;&gt;منبع در انبار ویکی‌مدیا&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;b&gt;New page&lt;/b&gt;&lt;/p&gt;&lt;div&gt;== خلاصه ==&lt;br /&gt;
بارگذاری خودکار از انبار ویکی‌مدیا&lt;br /&gt;
[[commons:File:Shah Mosque Door- Sahand Ace.png|منبع در انبار ویکی‌مدیا]]&lt;br /&gt;
== اجازه‌نامه ==&lt;br /&gt;
{{Ombox&lt;br /&gt;
| type      = style&lt;br /&gt;
| image     = [[پرونده:Emblem-important.svg]]&lt;br /&gt;
| style     = width: 800px; &lt;br /&gt;
| textstyle = &lt;br /&gt;
| text      = این تصویر از &amp;#039;&amp;#039;انبار ویکی‌پدیا&amp;#039;&amp;#039; که با مجوزهای حق نشر آزاد مختلف منتشر کننده آثار است، به اینجا آمده است و انتقال دهنده مجوز دقیقی برای انتشار آن گزارش نکرده‌است. برای اطلاعات بیشتر باید به &amp;#039;&amp;#039;انبار ویکی‌پدیا&amp;#039;&amp;#039; مراجعه کنید. احتمال دارد این تصویر به دلایل &amp;#039;&amp;#039;&amp;#039;نقض حق تکثیر&amp;#039;&amp;#039;&amp;#039; در اینجا و حتی انبار ویکی‌پدیا حذف بشود.&lt;br /&gt;
}}&lt;/div&gt;</description>
			<pubDate>Fri, 18 Sep 2026 11:34:48 GMT</pubDate>
			<dc:creator>Islambot</dc:creator>
			<comments>https://commons.islamical.org/view/File_talk:Shah_Mosque_Door-_Sahand_Ace.png</comments>
		</item>
		<item>
			<title>File:Saru Taqi, Minister of Safavid empire- Sahand Ace.jpg</title>
			<link>https://commons.islamical.org/w/index.php?title=File:Saru_Taqi,_Minister_of_Safavid_empire-_Sahand_Ace.jpg&amp;diff=5465&amp;oldid=0</link>
			<guid isPermaLink="false">https://commons.islamical.org/w/index.php?title=File:Saru_Taqi,_Minister_of_Safavid_empire-_Sahand_Ace.jpg&amp;diff=5465&amp;oldid=0</guid>
			<description>&lt;p&gt;بارگذاری خودکار از انبار ویکی‌مدیا &lt;a href=&quot;/w/index.php?title=commons:File:Saru_Taqi,_Minister_of_Safavid_empire-_Sahand_Ace.jpg&amp;amp;action=edit&amp;amp;redlink=1&quot; class=&quot;new&quot; title=&quot;commons:File:Saru Taqi, Minister of Safavid empire- Sahand Ace.jpg (page does not exist)&quot;&gt;منبع در انبار ویکی‌مدیا&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;b&gt;New page&lt;/b&gt;&lt;/p&gt;&lt;div&gt;== خلاصه ==&lt;br /&gt;
بارگذاری خودکار از انبار ویکی‌مدیا&lt;br /&gt;
[[commons:File:Saru Taqi, Minister of Safavid empire- Sahand Ace.jpg|منبع در انبار ویکی‌مدیا]]&lt;br /&gt;
== اجازه‌نامه ==&lt;br /&gt;
{{Ombox&lt;br /&gt;
| type      = style&lt;br /&gt;
| image     = [[پرونده:Emblem-important.svg]]&lt;br /&gt;
| style     = width: 800px; &lt;br /&gt;
| textstyle = &lt;br /&gt;
| text      = این تصویر از &amp;#039;&amp;#039;انبار ویکی‌پدیا&amp;#039;&amp;#039; که با مجوزهای حق نشر آزاد مختلف منتشر کننده آثار است، به اینجا آمده است و انتقال دهنده مجوز دقیقی برای انتشار آن گزارش نکرده‌است. برای اطلاعات بیشتر باید به &amp;#039;&amp;#039;انبار ویکی‌پدیا&amp;#039;&amp;#039; مراجعه کنید. احتمال دارد این تصویر به دلایل &amp;#039;&amp;#039;&amp;#039;نقض حق تکثیر&amp;#039;&amp;#039;&amp;#039; در اینجا و حتی انبار ویکی‌پدیا حذف بشود.&lt;br /&gt;
}}&lt;/div&gt;</description>
			<pubDate>Fri, 18 Sep 2026 11:33:43 GMT</pubDate>
			<dc:creator>Islambot</dc:creator>
			<comments>https://commons.islamical.org/view/File_talk:Saru_Taqi,_Minister_of_Safavid_empire-_Sahand_Ace.jpg</comments>
		</item>
		<item>
			<title>File:Samahozor.jpg</title>
			<link>https://commons.islamical.org/w/index.php?title=File:Samahozor.jpg&amp;diff=5456&amp;oldid=0</link>
			<guid isPermaLink="false">https://commons.islamical.org/w/index.php?title=File:Samahozor.jpg&amp;diff=5456&amp;oldid=0</guid>
			<description>&lt;p&gt;بارگذاری خودکار از انبار ویکی‌مدیا &lt;a href=&quot;/w/index.php?title=commons:File:Samahozor.jpg&amp;amp;action=edit&amp;amp;redlink=1&quot; class=&quot;new&quot; title=&quot;commons:File:Samahozor.jpg (page does not exist)&quot;&gt;منبع در انبار ویکی‌مدیا&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;b&gt;New page&lt;/b&gt;&lt;/p&gt;&lt;div&gt;== خلاصه ==&lt;br /&gt;
بارگذاری خودکار از انبار ویکی‌مدیا&lt;br /&gt;
[[commons:File:Samahozor.jpg|منبع در انبار ویکی‌مدیا]]&lt;br /&gt;
== اجازه‌نامه ==&lt;br /&gt;
{{Ombox&lt;br /&gt;
| type      = style&lt;br /&gt;
| image     = [[پرونده:Emblem-important.svg]]&lt;br /&gt;
| style     = width: 800px; &lt;br /&gt;
| textstyle = &lt;br /&gt;
| text      = این تصویر از &amp;#039;&amp;#039;انبار ویکی‌پدیا&amp;#039;&amp;#039; که با مجوزهای حق نشر آزاد مختلف منتشر کننده آثار است، به اینجا آمده است و انتقال دهنده مجوز دقیقی برای انتشار آن گزارش نکرده‌است. برای اطلاعات بیشتر باید به &amp;#039;&amp;#039;انبار ویکی‌پدیا&amp;#039;&amp;#039; مراجعه کنید. احتمال دارد این تصویر به دلایل &amp;#039;&amp;#039;&amp;#039;نقض حق تکثیر&amp;#039;&amp;#039;&amp;#039; در اینجا و حتی انبار ویکی‌پدیا حذف بشود.&lt;br /&gt;
}}&lt;/div&gt;</description>
			<pubDate>Fri, 18 Sep 2026 11:32:33 GMT</pubDate>
			<dc:creator>Islambot</dc:creator>
			<comments>https://commons.islamical.org/view/File_talk:Samahozor.jpg</comments>
		</item>
		<item>
			<title>File:Sahamolmolk - Saniolmolk.jpg</title>
			<link>https://commons.islamical.org/w/index.php?title=File:Sahamolmolk_-_Saniolmolk.jpg&amp;diff=5453&amp;oldid=0</link>
			<guid isPermaLink="false">https://commons.islamical.org/w/index.php?title=File:Sahamolmolk_-_Saniolmolk.jpg&amp;diff=5453&amp;oldid=0</guid>
			<description>&lt;p&gt;بارگذاری خودکار از انبار ویکی‌مدیا &lt;a href=&quot;/w/index.php?title=commons:File:Sahamolmolk_-_Saniolmolk.jpg&amp;amp;action=edit&amp;amp;redlink=1&quot; class=&quot;new&quot; title=&quot;commons:File:Sahamolmolk - Saniolmolk.jpg (page does not exist)&quot;&gt;منبع در انبار ویکی‌مدیا&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;b&gt;New page&lt;/b&gt;&lt;/p&gt;&lt;div&gt;== خلاصه ==&lt;br /&gt;
بارگذاری خودکار از انبار ویکی‌مدیا&lt;br /&gt;
[[commons:File:Sahamolmolk - Saniolmolk.jpg|منبع در انبار ویکی‌مدیا]]&lt;br /&gt;
== اجازه‌نامه ==&lt;br /&gt;
{{Ombox&lt;br /&gt;
| type      = style&lt;br /&gt;
| image     = [[پرونده:Emblem-important.svg]]&lt;br /&gt;
| style     = width: 800px; &lt;br /&gt;
| textstyle = &lt;br /&gt;
| text      = این تصویر از &amp;#039;&amp;#039;انبار ویکی‌پدیا&amp;#039;&amp;#039; که با مجوزهای حق نشر آزاد مختلف منتشر کننده آثار است، به اینجا آمده است و انتقال دهنده مجوز دقیقی برای انتشار آن گزارش نکرده‌است. برای اطلاعات بیشتر باید به &amp;#039;&amp;#039;انبار ویکی‌پدیا&amp;#039;&amp;#039; مراجعه کنید. احتمال دارد این تصویر به دلایل &amp;#039;&amp;#039;&amp;#039;نقض حق تکثیر&amp;#039;&amp;#039;&amp;#039; در اینجا و حتی انبار ویکی‌پدیا حذف بشود.&lt;br /&gt;
}}&lt;/div&gt;</description>
			<pubDate>Fri, 18 Sep 2026 11:32:24 GMT</pubDate>
			<dc:creator>Islambot</dc:creator>
			<comments>https://commons.islamical.org/view/File_talk:Sahamolmolk_-_Saniolmolk.jpg</comments>
		</item>
		<item>
			<title>File:Prince of Talysh Ispahbadan.png</title>
			<link>https://commons.islamical.org/w/index.php?title=File:Prince_of_Talysh_Ispahbadan.png&amp;diff=5397&amp;oldid=0</link>
			<guid isPermaLink="false">https://commons.islamical.org/w/index.php?title=File:Prince_of_Talysh_Ispahbadan.png&amp;diff=5397&amp;oldid=0</guid>
			<description>&lt;p&gt;بارگذاری خودکار از انبار ویکی‌مدیا &lt;a href=&quot;/w/index.php?title=commons:File:Prince_of_Talysh_Ispahbadan.png&amp;amp;action=edit&amp;amp;redlink=1&quot; class=&quot;new&quot; title=&quot;commons:File:Prince of Talysh Ispahbadan.png (page does not exist)&quot;&gt;منبع در انبار ویکی‌مدیا&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;b&gt;New page&lt;/b&gt;&lt;/p&gt;&lt;div&gt;== خلاصه ==&lt;br /&gt;
بارگذاری خودکار از انبار ویکی‌مدیا&lt;br /&gt;
[[commons:File:Prince of Talysh Ispahbadan.png|منبع در انبار ویکی‌مدیا]]&lt;br /&gt;
== اجازه‌نامه ==&lt;br /&gt;
{{Ombox&lt;br /&gt;
| type      = style&lt;br /&gt;
| image     = [[پرونده:Emblem-important.svg]]&lt;br /&gt;
| style     = width: 800px; &lt;br /&gt;
| textstyle = &lt;br /&gt;
| text      = این تصویر از &amp;#039;&amp;#039;انبار ویکی‌پدیا&amp;#039;&amp;#039; که با مجوزهای حق نشر آزاد مختلف منتشر کننده آثار است، به اینجا آمده است و انتقال دهنده مجوز دقیقی برای انتشار آن گزارش نکرده‌است. برای اطلاعات بیشتر باید به &amp;#039;&amp;#039;انبار ویکی‌پدیا&amp;#039;&amp;#039; مراجعه کنید. احتمال دارد این تصویر به دلایل &amp;#039;&amp;#039;&amp;#039;نقض حق تکثیر&amp;#039;&amp;#039;&amp;#039; در اینجا و حتی انبار ویکی‌پدیا حذف بشود.&lt;br /&gt;
}}&lt;/div&gt;</description>
			<pubDate>Fri, 18 Sep 2026 11:29:39 GMT</pubDate>
			<dc:creator>Islambot</dc:creator>
			<comments>https://commons.islamical.org/view/File_talk:Prince_of_Talysh_Ispahbadan.png</comments>
		</item>
		<item>
			<title>File:Pasargad Tomb Cyrus3.jpg</title>
			<link>https://commons.islamical.org/w/index.php?title=File:Pasargad_Tomb_Cyrus3.jpg&amp;diff=5343&amp;oldid=0</link>
			<guid isPermaLink="false">https://commons.islamical.org/w/index.php?title=File:Pasargad_Tomb_Cyrus3.jpg&amp;diff=5343&amp;oldid=0</guid>
			<description>&lt;p&gt;بارگذاری خودکار از انبار ویکی‌مدیا &lt;a href=&quot;/w/index.php?title=commons:File:Pasargad_Tomb_Cyrus3.jpg&amp;amp;action=edit&amp;amp;redlink=1&quot; class=&quot;new&quot; title=&quot;commons:File:Pasargad Tomb Cyrus3.jpg (page does not exist)&quot;&gt;منبع در انبار ویکی‌مدیا&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;b&gt;New page&lt;/b&gt;&lt;/p&gt;&lt;div&gt;== خلاصه ==&lt;br /&gt;
بارگذاری خودکار از انبار ویکی‌مدیا&lt;br /&gt;
[[commons:File:Pasargad Tomb Cyrus3.jpg|منبع در انبار ویکی‌مدیا]]&lt;br /&gt;
== اجازه‌نامه ==&lt;br /&gt;
{{Ombox&lt;br /&gt;
| type      = style&lt;br /&gt;
| image     = [[پرونده:Emblem-important.svg]]&lt;br /&gt;
| style     = width: 800px; &lt;br /&gt;
| textstyle = &lt;br /&gt;
| text      = این تصویر از &amp;#039;&amp;#039;انبار ویکی‌پدیا&amp;#039;&amp;#039; که با مجوزهای حق نشر آزاد مختلف منتشر کننده آثار است، به اینجا آمده است و انتقال دهنده مجوز دقیقی برای انتشار آن گزارش نکرده‌است. برای اطلاعات بیشتر باید به &amp;#039;&amp;#039;انبار ویکی‌پدیا&amp;#039;&amp;#039; مراجعه کنید. احتمال دارد این تصویر به دلایل &amp;#039;&amp;#039;&amp;#039;نقض حق تکثیر&amp;#039;&amp;#039;&amp;#039; در اینجا و حتی انبار ویکی‌پدیا حذف بشود.&lt;br /&gt;
}}&lt;/div&gt;</description>
			<pubDate>Fri, 18 Sep 2026 11:27:04 GMT</pubDate>
			<dc:creator>Islambot</dc:creator>
			<comments>https://commons.islamical.org/view/File_talk:Pasargad_Tomb_Cyrus3.jpg</comments>
		</item>
		<item>
			<title>File:Parvin Etesami Ghabr.jpg</title>
			<link>https://commons.islamical.org/w/index.php?title=File:Parvin_Etesami_Ghabr.jpg&amp;diff=5341&amp;oldid=0</link>
			<guid isPermaLink="false">https://commons.islamical.org/w/index.php?title=File:Parvin_Etesami_Ghabr.jpg&amp;diff=5341&amp;oldid=0</guid>
			<description>&lt;p&gt;بارگذاری خودکار از انبار ویکی‌مدیا &lt;a href=&quot;/w/index.php?title=commons:File:Parvin_Etesami_Ghabr.jpg&amp;amp;action=edit&amp;amp;redlink=1&quot; class=&quot;new&quot; title=&quot;commons:File:Parvin Etesami Ghabr.jpg (page does not exist)&quot;&gt;منبع در انبار ویکی‌مدیا&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;b&gt;New page&lt;/b&gt;&lt;/p&gt;&lt;div&gt;== خلاصه ==&lt;br /&gt;
بارگذاری خودکار از انبار ویکی‌مدیا&lt;br /&gt;
[[commons:File:Parvin Etesami Ghabr.jpg|منبع در انبار ویکی‌مدیا]]&lt;br /&gt;
== اجازه‌نامه ==&lt;br /&gt;
{{Ombox&lt;br /&gt;
| type      = style&lt;br /&gt;
| image     = [[پرونده:Emblem-important.svg]]&lt;br /&gt;
| style     = width: 800px; &lt;br /&gt;
| textstyle = &lt;br /&gt;
| text      = این تصویر از &amp;#039;&amp;#039;انبار ویکی‌پدیا&amp;#039;&amp;#039; که با مجوزهای حق نشر آزاد مختلف منتشر کننده آثار است، به اینجا آمده است و انتقال دهنده مجوز دقیقی برای انتشار آن گزارش نکرده‌است. برای اطلاعات بیشتر باید به &amp;#039;&amp;#039;انبار ویکی‌پدیا&amp;#039;&amp;#039; مراجعه کنید. احتمال دارد این تصویر به دلایل &amp;#039;&amp;#039;&amp;#039;نقض حق تکثیر&amp;#039;&amp;#039;&amp;#039; در اینجا و حتی انبار ویکی‌پدیا حذف بشود.&lt;br /&gt;
}}&lt;/div&gt;</description>
			<pubDate>Fri, 18 Sep 2026 11:25:44 GMT</pubDate>
			<dc:creator>Islambot</dc:creator>
			<comments>https://commons.islamical.org/view/File_talk:Parvin_Etesami_Ghabr.jpg</comments>
		</item>
		<item>
			<title>File:Parvin Etesami.jpg</title>
			<link>https://commons.islamical.org/w/index.php?title=File:Parvin_Etesami.jpg&amp;diff=5340&amp;oldid=0</link>
			<guid isPermaLink="false">https://commons.islamical.org/w/index.php?title=File:Parvin_Etesami.jpg&amp;diff=5340&amp;oldid=0</guid>
			<description>&lt;p&gt;بارگذاری خودکار از انبار ویکی‌مدیا &lt;a href=&quot;/w/index.php?title=commons:File:Parvin_Etesami.jpg&amp;amp;action=edit&amp;amp;redlink=1&quot; class=&quot;new&quot; title=&quot;commons:File:Parvin Etesami.jpg (page does not exist)&quot;&gt;منبع در انبار ویکی‌مدیا&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;b&gt;New page&lt;/b&gt;&lt;/p&gt;&lt;div&gt;== خلاصه ==&lt;br /&gt;
بارگذاری خودکار از انبار ویکی‌مدیا&lt;br /&gt;
[[commons:File:Parvin Etesami.jpg|منبع در انبار ویکی‌مدیا]]&lt;br /&gt;
== اجازه‌نامه ==&lt;br /&gt;
{{Ombox&lt;br /&gt;
| type      = style&lt;br /&gt;
| image     = [[پرونده:Emblem-important.svg]]&lt;br /&gt;
| style     = width: 800px; &lt;br /&gt;
| textstyle = &lt;br /&gt;
| text      = این تصویر از &amp;#039;&amp;#039;انبار ویکی‌پدیا&amp;#039;&amp;#039; که با مجوزهای حق نشر آزاد مختلف منتشر کننده آثار است، به اینجا آمده است و انتقال دهنده مجوز دقیقی برای انتشار آن گزارش نکرده‌است. برای اطلاعات بیشتر باید به &amp;#039;&amp;#039;انبار ویکی‌پدیا&amp;#039;&amp;#039; مراجعه کنید. احتمال دارد این تصویر به دلایل &amp;#039;&amp;#039;&amp;#039;نقض حق تکثیر&amp;#039;&amp;#039;&amp;#039; در اینجا و حتی انبار ویکی‌پدیا حذف بشود.&lt;br /&gt;
}}&lt;/div&gt;</description>
			<pubDate>Fri, 18 Sep 2026 11:25:24 GMT</pubDate>
			<dc:creator>Islambot</dc:creator>
			<comments>https://commons.islamical.org/view/File_talk:Parvin_Etesami.jpg</comments>
		</item>
		<item>
			<title>File:Palestine with the Hauran and the adjacent districts, William Hughes 1843.jpg</title>
			<link>https://commons.islamical.org/w/index.php?title=File:Palestine_with_the_Hauran_and_the_adjacent_districts,_William_Hughes_1843.jpg&amp;diff=5336&amp;oldid=0</link>
			<guid isPermaLink="false">https://commons.islamical.org/w/index.php?title=File:Palestine_with_the_Hauran_and_the_adjacent_districts,_William_Hughes_1843.jpg&amp;diff=5336&amp;oldid=0</guid>
			<description>&lt;p&gt;بارگذاری خودکار از انبار ویکی‌مدیا &lt;a href=&quot;/w/index.php?title=commons:File:Palestine_with_the_Hauran_and_the_adjacent_districts,_William_Hughes_1843.jpg&amp;amp;action=edit&amp;amp;redlink=1&quot; class=&quot;new&quot; title=&quot;commons:File:Palestine with the Hauran and the adjacent districts, William Hughes 1843.jpg (page does not exist)&quot;&gt;منبع در انبار ویکی‌مدیا&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;b&gt;New page&lt;/b&gt;&lt;/p&gt;&lt;div&gt;== خلاصه ==&lt;br /&gt;
بارگذاری خودکار از انبار ویکی‌مدیا&lt;br /&gt;
[[commons:File:Palestine with the Hauran and the adjacent districts, William Hughes 1843.jpg|منبع در انبار ویکی‌مدیا]]&lt;br /&gt;
== اجازه‌نامه ==&lt;br /&gt;
{{Ombox&lt;br /&gt;
| type      = style&lt;br /&gt;
| image     = [[پرونده:Emblem-important.svg]]&lt;br /&gt;
| style     = width: 800px; &lt;br /&gt;
| textstyle = &lt;br /&gt;
| text      = این تصویر از &amp;#039;&amp;#039;انبار ویکی‌پدیا&amp;#039;&amp;#039; که با مجوزهای حق نشر آزاد مختلف منتشر کننده آثار است، به اینجا آمده است و انتقال دهنده مجوز دقیقی برای انتشار آن گزارش نکرده‌است. برای اطلاعات بیشتر باید به &amp;#039;&amp;#039;انبار ویکی‌پدیا&amp;#039;&amp;#039; مراجعه کنید. احتمال دارد این تصویر به دلایل &amp;#039;&amp;#039;&amp;#039;نقض حق تکثیر&amp;#039;&amp;#039;&amp;#039; در اینجا و حتی انبار ویکی‌پدیا حذف بشود.&lt;br /&gt;
}}&lt;/div&gt;</description>
			<pubDate>Fri, 18 Sep 2026 11:25:13 GMT</pubDate>
			<dc:creator>Islambot</dc:creator>
			<comments>https://commons.islamical.org/view/File_talk:Palestine_with_the_Hauran_and_the_adjacent_districts,_William_Hughes_1843.jpg</comments>
		</item>
		<item>
			<title>File:Openwork lantern MET39-40-87.jpg</title>
			<link>https://commons.islamical.org/w/index.php?title=File:Openwork_lantern_MET39-40-87.jpg&amp;diff=5291&amp;oldid=0</link>
			<guid isPermaLink="false">https://commons.islamical.org/w/index.php?title=File:Openwork_lantern_MET39-40-87.jpg&amp;diff=5291&amp;oldid=0</guid>
			<description>&lt;p&gt;بارگذاری خودکار از انبار ویکی‌مدیا &lt;a href=&quot;/w/index.php?title=commons:File:Openwork_lantern_MET39-40-87.jpg&amp;amp;action=edit&amp;amp;redlink=1&quot; class=&quot;new&quot; title=&quot;commons:File:Openwork lantern MET39-40-87.jpg (page does not exist)&quot;&gt;منبع در انبار ویکی‌مدیا&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;b&gt;New page&lt;/b&gt;&lt;/p&gt;&lt;div&gt;== خلاصه ==&lt;br /&gt;
بارگذاری خودکار از انبار ویکی‌مدیا&lt;br /&gt;
[[commons:File:Openwork lantern MET39-40-87.jpg|منبع در انبار ویکی‌مدیا]]&lt;br /&gt;
== اجازه‌نامه ==&lt;br /&gt;
{{Ombox&lt;br /&gt;
| type      = style&lt;br /&gt;
| image     = [[پرونده:Emblem-important.svg]]&lt;br /&gt;
| style     = width: 800px; &lt;br /&gt;
| textstyle = &lt;br /&gt;
| text      = این تصویر از &amp;#039;&amp;#039;انبار ویکی‌پدیا&amp;#039;&amp;#039; که با مجوزهای حق نشر آزاد مختلف منتشر کننده آثار است، به اینجا آمده است و انتقال دهنده مجوز دقیقی برای انتشار آن گزارش نکرده‌است. برای اطلاعات بیشتر باید به &amp;#039;&amp;#039;انبار ویکی‌پدیا&amp;#039;&amp;#039; مراجعه کنید. احتمال دارد این تصویر به دلایل &amp;#039;&amp;#039;&amp;#039;نقض حق تکثیر&amp;#039;&amp;#039;&amp;#039; در اینجا و حتی انبار ویکی‌پدیا حذف بشود.&lt;br /&gt;
}}&lt;/div&gt;</description>
			<pubDate>Fri, 18 Sep 2026 11:22:30 GMT</pubDate>
			<dc:creator>Islambot</dc:creator>
			<comments>https://commons.islamical.org/view/File_talk:Openwork_lantern_MET39-40-87.jpg</comments>
		</item>
		<item>
			<title>File:Nizami adına Ədəbiyyat Muzeyinin binasının pəncərəsində Fəzlullah Nəimi rəsmi (1).JPG</title>
			<link>https://commons.islamical.org/w/index.php?title=File:Nizami_ad%C4%B1na_%C6%8Fd%C9%99biyyat_Muzeyinin_binas%C4%B1n%C4%B1n_p%C9%99nc%C9%99r%C9%99sind%C9%99_F%C9%99zlullah_N%C9%99imi_r%C9%99smi_(1).JPG&amp;diff=5279&amp;oldid=0</link>
			<guid isPermaLink="false">https://commons.islamical.org/w/index.php?title=File:Nizami_ad%C4%B1na_%C6%8Fd%C9%99biyyat_Muzeyinin_binas%C4%B1n%C4%B1n_p%C9%99nc%C9%99r%C9%99sind%C9%99_F%C9%99zlullah_N%C9%99imi_r%C9%99smi_(1).JPG&amp;diff=5279&amp;oldid=0</guid>
			<description>&lt;p&gt;بارگذاری خودکار از انبار ویکی‌مدیا &lt;a href=&quot;/w/index.php?title=commons:File:Nizami_ad%C4%B1na_%C6%8Fd%C9%99biyyat_Muzeyinin_binas%C4%B1n%C4%B1n_p%C9%99nc%C9%99r%C9%99sind%C9%99_F%C9%99zlullah_N%C9%99imi_r%C9%99smi_(1).JPG&amp;amp;action=edit&amp;amp;redlink=1&quot; class=&quot;new&quot; title=&quot;commons:File:Nizami adına Ədəbiyyat Muzeyinin binasının pəncərəsində Fəzlullah Nəimi rəsmi (1).JPG (page does not exist)&quot;&gt;منبع در انبار ویکی‌مدیا&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;b&gt;New page&lt;/b&gt;&lt;/p&gt;&lt;div&gt;== خلاصه ==&lt;br /&gt;
بارگذاری خودکار از انبار ویکی‌مدیا&lt;br /&gt;
[[commons:File:Nizami adına Ədəbiyyat Muzeyinin binasının pəncərəsində Fəzlullah Nəimi rəsmi (1).JPG|منبع در انبار ویکی‌مدیا]]&lt;br /&gt;
== اجازه‌نامه ==&lt;br /&gt;
{{Ombox&lt;br /&gt;
| type      = style&lt;br /&gt;
| image     = [[پرونده:Emblem-important.svg]]&lt;br /&gt;
| style     = width: 800px; &lt;br /&gt;
| textstyle = &lt;br /&gt;
| text      = این تصویر از &amp;#039;&amp;#039;انبار ویکی‌پدیا&amp;#039;&amp;#039; که با مجوزهای حق نشر آزاد مختلف منتشر کننده آثار است، به اینجا آمده است و انتقال دهنده مجوز دقیقی برای انتشار آن گزارش نکرده‌است. برای اطلاعات بیشتر باید به &amp;#039;&amp;#039;انبار ویکی‌پدیا&amp;#039;&amp;#039; مراجعه کنید. احتمال دارد این تصویر به دلایل &amp;#039;&amp;#039;&amp;#039;نقض حق تکثیر&amp;#039;&amp;#039;&amp;#039; در اینجا و حتی انبار ویکی‌پدیا حذف بشود.&lt;br /&gt;
}}&lt;/div&gt;</description>
			<pubDate>Fri, 18 Sep 2026 11:21:34 GMT</pubDate>
			<dc:creator>Islambot</dc:creator>
			<comments>https://commons.islamical.org/view/File_talk:Nizami_ad%C4%B1na_%C6%8Fd%C9%99biyyat_Muzeyinin_binas%C4%B1n%C4%B1n_p%C9%99nc%C9%99r%C9%99sind%C9%99_F%C9%99zlullah_N%C9%99imi_r%C9%99smi_(1).JPG</comments>
		</item>
		<item>
			<title>File:Nakhal Fort (2).jpg</title>
			<link>https://commons.islamical.org/w/index.php?title=File:Nakhal_Fort_(2).jpg&amp;diff=5239&amp;oldid=0</link>
			<guid isPermaLink="false">https://commons.islamical.org/w/index.php?title=File:Nakhal_Fort_(2).jpg&amp;diff=5239&amp;oldid=0</guid>
			<description>&lt;p&gt;بارگذاری خودکار از انبار ویکی‌مدیا &lt;a href=&quot;/w/index.php?title=commons:File:Nakhal_Fort_(2).jpg&amp;amp;action=edit&amp;amp;redlink=1&quot; class=&quot;new&quot; title=&quot;commons:File:Nakhal Fort (2).jpg (page does not exist)&quot;&gt;منبع در انبار ویکی‌مدیا&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;b&gt;New page&lt;/b&gt;&lt;/p&gt;&lt;div&gt;== خلاصه ==&lt;br /&gt;
بارگذاری خودکار از انبار ویکی‌مدیا&lt;br /&gt;
[[commons:File:Nakhal Fort (2).jpg|منبع در انبار ویکی‌مدیا]]&lt;br /&gt;
== اجازه‌نامه ==&lt;br /&gt;
{{Ombox&lt;br /&gt;
| type      = style&lt;br /&gt;
| image     = [[پرونده:Emblem-important.svg]]&lt;br /&gt;
| style     = width: 800px; &lt;br /&gt;
| textstyle = &lt;br /&gt;
| text      = این تصویر از &amp;#039;&amp;#039;انبار ویکی‌پدیا&amp;#039;&amp;#039; که با مجوزهای حق نشر آزاد مختلف منتشر کننده آثار است، به اینجا آمده است و انتقال دهنده مجوز دقیقی برای انتشار آن گزارش نکرده‌است. برای اطلاعات بیشتر باید به &amp;#039;&amp;#039;انبار ویکی‌پدیا&amp;#039;&amp;#039; مراجعه کنید. احتمال دارد این تصویر به دلایل &amp;#039;&amp;#039;&amp;#039;نقض حق تکثیر&amp;#039;&amp;#039;&amp;#039; در اینجا و حتی انبار ویکی‌پدیا حذف بشود.&lt;br /&gt;
}}&lt;/div&gt;</description>
			<pubDate>Fri, 18 Sep 2026 11:20:41 GMT</pubDate>
			<dc:creator>Islambot</dc:creator>
			<comments>https://commons.islamical.org/view/File_talk:Nakhal_Fort_(2).jpg</comments>
		</item>
		<item>
			<title>File:Mount Ararat and the Araratian plain (cropped).jpg</title>
			<link>https://commons.islamical.org/w/index.php?title=File:Mount_Ararat_and_the_Araratian_plain_(cropped).jpg&amp;diff=5220&amp;oldid=0</link>
			<guid isPermaLink="false">https://commons.islamical.org/w/index.php?title=File:Mount_Ararat_and_the_Araratian_plain_(cropped).jpg&amp;diff=5220&amp;oldid=0</guid>
			<description>&lt;p&gt;بارگذاری خودکار از انبار ویکی‌مدیا &lt;a href=&quot;/w/index.php?title=commons:File:Mount_Ararat_and_the_Araratian_plain_(cropped).jpg&amp;amp;action=edit&amp;amp;redlink=1&quot; class=&quot;new&quot; title=&quot;commons:File:Mount Ararat and the Araratian plain (cropped).jpg (page does not exist)&quot;&gt;منبع در انبار ویکی‌مدیا&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;b&gt;New page&lt;/b&gt;&lt;/p&gt;&lt;div&gt;== خلاصه ==&lt;br /&gt;
بارگذاری خودکار از انبار ویکی‌مدیا&lt;br /&gt;
[[commons:File:Mount Ararat and the Araratian plain (cropped).jpg|منبع در انبار ویکی‌مدیا]]&lt;br /&gt;
== اجازه‌نامه ==&lt;br /&gt;
{{Ombox&lt;br /&gt;
| type      = style&lt;br /&gt;
| image     = [[پرونده:Emblem-important.svg]]&lt;br /&gt;
| style     = width: 800px; &lt;br /&gt;
| textstyle = &lt;br /&gt;
| text      = این تصویر از &amp;#039;&amp;#039;انبار ویکی‌پدیا&amp;#039;&amp;#039; که با مجوزهای حق نشر آزاد مختلف منتشر کننده آثار است، به اینجا آمده است و انتقال دهنده مجوز دقیقی برای انتشار آن گزارش نکرده‌است. برای اطلاعات بیشتر باید به &amp;#039;&amp;#039;انبار ویکی‌پدیا&amp;#039;&amp;#039; مراجعه کنید. احتمال دارد این تصویر به دلایل &amp;#039;&amp;#039;&amp;#039;نقض حق تکثیر&amp;#039;&amp;#039;&amp;#039; در اینجا و حتی انبار ویکی‌پدیا حذف بشود.&lt;br /&gt;
}}&lt;/div&gt;</description>
			<pubDate>Fri, 18 Sep 2026 11:18:39 GMT</pubDate>
			<dc:creator>Islambot</dc:creator>
			<comments>https://commons.islamical.org/view/File_talk:Mount_Ararat_and_the_Araratian_plain_(cropped).jpg</comments>
		</item>
		<item>
			<title>File:Monumentbahiyyihkhanum.JPG</title>
			<link>https://commons.islamical.org/w/index.php?title=File:Monumentbahiyyihkhanum.JPG&amp;diff=5212&amp;oldid=0</link>
			<guid isPermaLink="false">https://commons.islamical.org/w/index.php?title=File:Monumentbahiyyihkhanum.JPG&amp;diff=5212&amp;oldid=0</guid>
			<description>&lt;p&gt;بارگذاری خودکار از انبار ویکی‌مدیا &lt;a href=&quot;/w/index.php?title=commons:File:Monumentbahiyyihkhanum.JPG&amp;amp;action=edit&amp;amp;redlink=1&quot; class=&quot;new&quot; title=&quot;commons:File:Monumentbahiyyihkhanum.JPG (page does not exist)&quot;&gt;منبع در انبار ویکی‌مدیا&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;b&gt;New page&lt;/b&gt;&lt;/p&gt;&lt;div&gt;== خلاصه ==&lt;br /&gt;
بارگذاری خودکار از انبار ویکی‌مدیا&lt;br /&gt;
[[commons:File:Monumentbahiyyihkhanum.JPG|منبع در انبار ویکی‌مدیا]]&lt;br /&gt;
== اجازه‌نامه ==&lt;br /&gt;
{{Ombox&lt;br /&gt;
| type      = style&lt;br /&gt;
| image     = [[پرونده:Emblem-important.svg]]&lt;br /&gt;
| style     = width: 800px; &lt;br /&gt;
| textstyle = &lt;br /&gt;
| text      = این تصویر از &amp;#039;&amp;#039;انبار ویکی‌پدیا&amp;#039;&amp;#039; که با مجوزهای حق نشر آزاد مختلف منتشر کننده آثار است، به اینجا آمده است و انتقال دهنده مجوز دقیقی برای انتشار آن گزارش نکرده‌است. برای اطلاعات بیشتر باید به &amp;#039;&amp;#039;انبار ویکی‌پدیا&amp;#039;&amp;#039; مراجعه کنید. احتمال دارد این تصویر به دلایل &amp;#039;&amp;#039;&amp;#039;نقض حق تکثیر&amp;#039;&amp;#039;&amp;#039; در اینجا و حتی انبار ویکی‌پدیا حذف بشود.&lt;br /&gt;
}}&lt;/div&gt;</description>
			<pubDate>Fri, 18 Sep 2026 11:16:52 GMT</pubDate>
			<dc:creator>Islambot</dc:creator>
			<comments>https://commons.islamical.org/view/File_talk:Monumentbahiyyihkhanum.JPG</comments>
		</item>
		<item>
			<title>File:MonumentOfKutalmişoğluSüleymanŞahTarsus.JPG</title>
			<link>https://commons.islamical.org/w/index.php?title=File:MonumentOfKutalmi%C5%9Fo%C4%9FluS%C3%BCleyman%C5%9EahTarsus.JPG&amp;diff=5211&amp;oldid=0</link>
			<guid isPermaLink="false">https://commons.islamical.org/w/index.php?title=File:MonumentOfKutalmi%C5%9Fo%C4%9FluS%C3%BCleyman%C5%9EahTarsus.JPG&amp;diff=5211&amp;oldid=0</guid>
			<description>&lt;p&gt;بارگذاری خودکار از انبار ویکی‌مدیا &lt;a href=&quot;/w/index.php?title=commons:File:MonumentOfKutalmi%C5%9Fo%C4%9FluS%C3%BCleyman%C5%9EahTarsus.JPG&amp;amp;action=edit&amp;amp;redlink=1&quot; class=&quot;new&quot; title=&quot;commons:File:MonumentOfKutalmişoğluSüleymanŞahTarsus.JPG (page does not exist)&quot;&gt;منبع در انبار ویکی‌مدیا&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;b&gt;New page&lt;/b&gt;&lt;/p&gt;&lt;div&gt;== خلاصه ==&lt;br /&gt;
بارگذاری خودکار از انبار ویکی‌مدیا&lt;br /&gt;
[[commons:File:MonumentOfKutalmişoğluSüleymanŞahTarsus.JPG|منبع در انبار ویکی‌مدیا]]&lt;br /&gt;
== اجازه‌نامه ==&lt;br /&gt;
{{Ombox&lt;br /&gt;
| type      = style&lt;br /&gt;
| image     = [[پرونده:Emblem-important.svg]]&lt;br /&gt;
| style     = width: 800px; &lt;br /&gt;
| textstyle = &lt;br /&gt;
| text      = این تصویر از &amp;#039;&amp;#039;انبار ویکی‌پدیا&amp;#039;&amp;#039; که با مجوزهای حق نشر آزاد مختلف منتشر کننده آثار است، به اینجا آمده است و انتقال دهنده مجوز دقیقی برای انتشار آن گزارش نکرده‌است. برای اطلاعات بیشتر باید به &amp;#039;&amp;#039;انبار ویکی‌پدیا&amp;#039;&amp;#039; مراجعه کنید. احتمال دارد این تصویر به دلایل &amp;#039;&amp;#039;&amp;#039;نقض حق تکثیر&amp;#039;&amp;#039;&amp;#039; در اینجا و حتی انبار ویکی‌پدیا حذف بشود.&lt;br /&gt;
}}&lt;/div&gt;</description>
			<pubDate>Fri, 18 Sep 2026 11:16:06 GMT</pubDate>
			<dc:creator>Islambot</dc:creator>
			<comments>https://commons.islamical.org/view/File_talk:MonumentOfKutalmi%C5%9Fo%C4%9FluS%C3%BCleyman%C5%9EahTarsus.JPG</comments>
		</item>
		<item>
			<title>File:Mold cast MET48-101-6ab.jpg</title>
			<link>https://commons.islamical.org/w/index.php?title=File:Mold_cast_MET48-101-6ab.jpg&amp;diff=5209&amp;oldid=0</link>
			<guid isPermaLink="false">https://commons.islamical.org/w/index.php?title=File:Mold_cast_MET48-101-6ab.jpg&amp;diff=5209&amp;oldid=0</guid>
			<description>&lt;p&gt;بارگذاری خودکار از انبار ویکی‌مدیا &lt;a href=&quot;/w/index.php?title=commons:File:Mold_cast_MET48-101-6ab.jpg&amp;amp;action=edit&amp;amp;redlink=1&quot; class=&quot;new&quot; title=&quot;commons:File:Mold cast MET48-101-6ab.jpg (page does not exist)&quot;&gt;منبع در انبار ویکی‌مدیا&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;b&gt;New page&lt;/b&gt;&lt;/p&gt;&lt;div&gt;== خلاصه ==&lt;br /&gt;
بارگذاری خودکار از انبار ویکی‌مدیا&lt;br /&gt;
[[commons:File:Mold cast MET48-101-6ab.jpg|منبع در انبار ویکی‌مدیا]]&lt;br /&gt;
== اجازه‌نامه ==&lt;br /&gt;
{{Ombox&lt;br /&gt;
| type      = style&lt;br /&gt;
| image     = [[پرونده:Emblem-important.svg]]&lt;br /&gt;
| style     = width: 800px; &lt;br /&gt;
| textstyle = &lt;br /&gt;
| text      = این تصویر از &amp;#039;&amp;#039;انبار ویکی‌پدیا&amp;#039;&amp;#039; که با مجوزهای حق نشر آزاد مختلف منتشر کننده آثار است، به اینجا آمده است و انتقال دهنده مجوز دقیقی برای انتشار آن گزارش نکرده‌است. برای اطلاعات بیشتر باید به &amp;#039;&amp;#039;انبار ویکی‌پدیا&amp;#039;&amp;#039; مراجعه کنید. احتمال دارد این تصویر به دلایل &amp;#039;&amp;#039;&amp;#039;نقض حق تکثیر&amp;#039;&amp;#039;&amp;#039; در اینجا و حتی انبار ویکی‌پدیا حذف بشود.&lt;br /&gt;
}}&lt;/div&gt;</description>
			<pubDate>Fri, 18 Sep 2026 11:15:22 GMT</pubDate>
			<dc:creator>Islambot</dc:creator>
			<comments>https://commons.islamical.org/view/File_talk:Mold_cast_MET48-101-6ab.jpg</comments>
		</item>
		<item>
			<title>File:Mezquita de Malek, Kerman, Irán, 2016-09-22, DD 20-22 HDR.jpg</title>
			<link>https://commons.islamical.org/w/index.php?title=File:Mezquita_de_Malek,_Kerman,_Ir%C3%A1n,_2016-09-22,_DD_20-22_HDR.jpg&amp;diff=5168&amp;oldid=0</link>
			<guid isPermaLink="false">https://commons.islamical.org/w/index.php?title=File:Mezquita_de_Malek,_Kerman,_Ir%C3%A1n,_2016-09-22,_DD_20-22_HDR.jpg&amp;diff=5168&amp;oldid=0</guid>
			<description>&lt;p&gt;بارگذاری خودکار از انبار ویکی‌مدیا &lt;a href=&quot;/w/index.php?title=commons:File:Mezquita_de_Malek,_Kerman,_Ir%C3%A1n,_2016-09-22,_DD_20-22_HDR.jpg&amp;amp;action=edit&amp;amp;redlink=1&quot; class=&quot;new&quot; title=&quot;commons:File:Mezquita de Malek, Kerman, Irán, 2016-09-22, DD 20-22 HDR.jpg (page does not exist)&quot;&gt;منبع در انبار ویکی‌مدیا&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;b&gt;New page&lt;/b&gt;&lt;/p&gt;&lt;div&gt;== خلاصه ==&lt;br /&gt;
بارگذاری خودکار از انبار ویکی‌مدیا&lt;br /&gt;
[[commons:File:Mezquita de Malek, Kerman, Irán, 2016-09-22, DD 20-22 HDR.jpg|منبع در انبار ویکی‌مدیا]]&lt;br /&gt;
== اجازه‌نامه ==&lt;br /&gt;
{{Ombox&lt;br /&gt;
| type      = style&lt;br /&gt;
| image     = [[پرونده:Emblem-important.svg]]&lt;br /&gt;
| style     = width: 800px; &lt;br /&gt;
| textstyle = &lt;br /&gt;
| text      = این تصویر از &amp;#039;&amp;#039;انبار ویکی‌پدیا&amp;#039;&amp;#039; که با مجوزهای حق نشر آزاد مختلف منتشر کننده آثار است، به اینجا آمده است و انتقال دهنده مجوز دقیقی برای انتشار آن گزارش نکرده‌است. برای اطلاعات بیشتر باید به &amp;#039;&amp;#039;انبار ویکی‌پدیا&amp;#039;&amp;#039; مراجعه کنید. احتمال دارد این تصویر به دلایل &amp;#039;&amp;#039;&amp;#039;نقض حق تکثیر&amp;#039;&amp;#039;&amp;#039; در اینجا و حتی انبار ویکی‌پدیا حذف بشود.&lt;br /&gt;
}}&lt;/div&gt;</description>
			<pubDate>Fri, 18 Sep 2026 11:14:07 GMT</pubDate>
			<dc:creator>Islambot</dc:creator>
			<comments>https://commons.islamical.org/view/File_talk:Mezquita_de_Malek,_Kerman,_Ir%C3%A1n,_2016-09-22,_DD_20-22_HDR.jpg</comments>
		</item>
</channel></rss>