پودمان:الگو:زبان‌های ویکی‌پدیا/تمرین

از ویکی‌پدیا، دانشنامهٔ آزاد
توضیحات پودمان[نمایش] [ویرایش] [تاریخچه] [پاکسازی]

استفاده[ویرایش]

{{#invoke:الگو:زبان‌های ویکی‌پدیا|main}}

نتیجه:

۱٬۰۰۰٬۰۰۰+ نوشتار
۲۵۰٬۰۰۰+ نوشتار
۱۰۰٬۰۰۰+ نوشتار
local p = {}

local function getWikipediaArticlesCount()
	local result = {}
	-- https://commons.wikimedia.org/wiki/Data:Wikipedia_statistics/data.tab
	local statistics = mw.ext.data.get('Wikipedia statistics/data.tab')
	local fields = {}
	for i, v in ipairs(statistics.schema.fields) do fields[v.name] = i end
	for i, v in ipairs(statistics.data) do
		if v[fields.site]:find('.wikipedia$') and not v[fields.site]:find('^total') then
			table.insert(result, { string.gsub(v[fields.site], '.wikipedia', ''), v[fields.articles] })
		end
	end
	table.sort(result, function (k1, k2) return k1[2] > k2[2] end)
	return result
end

local function firstToUpper(str) -- https://stackoverflow.com/a/2421746
	return mw.ustring.gsub(str, '^%l', mw.ustring.upper)
end
		
function p.main()
	local articlesCount = getWikipediaArticlesCount()
	local result = '<div class="wikipedia-languages nourlexpansion"> <ul class="plainlinks">'
	local index = 1
	local contentLanguage = mw.getContentLanguage()
	for i, v in ipairs({ 1000000, 500000, 250000 }) do
		local count = contentLanguage:formatNum(v)
		result = result .. [[
		<li>
			<div class="wikipedia-languages-count-container">
				<div class="wikipedia-languages-prettybars"></div>
				<div role="heading" aria-level="3" class="wikipedia-languages-count">]] .. count .. [[+ نوشتار</div>
				<div class="wikipedia-languages-prettybars"></div>
			</div>
			<div class="hlist wikipedia-languages-langs inline">
				<ul>
]]
		while articlesCount[index] and articlesCount[index][2] >= v do
			local lang = articlesCount[index][1]
			-- as enwiki, seems only macrolanguages on the top section and let's skip Persian
			if lang ~= 'ceb' and lang ~= 'war' and lang ~= 'arz' and lang ~= 'fa' then
				local persianName = mw.language.fetchLanguageName(lang, 'fa')
				if lang == 'azb' then persianName = 'ترکی آذربایجانی' end
				if lang == 'lld' then persianName = 'لادینو' end
				if lang == 'be-tarask' then persianName = 'بلاروسی کلاسیک' end
				if lang == 'vec' then persianName = 'ونیزی' end
				local nativeName = firstToUpper(mw.language.fetchLanguageName(lang))
				if lang == 'sh' then nativeName = 'Srpskohrvatski' end
				local languageLink = 'زبان ' .. persianName
				if lang == 'simple' then
					lang = 'en'; persianName = 'انگلیسی ساده'
					languageLink = 'ویکی‌پدیای ' .. persianName
				end
				result = result .. '<li title="ویکی‌پدیای ' .. persianName ..
					' با ' .. contentLanguage:formatNum(articlesCount[index][2]) ..
					' نوشتار"><span lang="' .. lang .. '">[[:' .. lang .. ':|' ..
					nativeName .. ']]</span>&nbsp;([[' .. languageLink ..
					'|' .. persianName  .. ']])</li>'
			end
			index = index + 1
		end
		result = result .. '</ul></div></li>'
	end
	return result .. '</ul></div>'
end

return p