Modül:kategori ağacı/dil

Vikisözlük sitesinden
Modül belgelemesi [Düzenle] [Tazele]


local p = {}

local dilDuzenle = require("Modül:tr-araçlar").dilDuzenle
local diller = require('Modül:diller')

function makeCategoryLink(object, tip)
		return "[[:Kategori:" .. object:getirKategoriAdi() .. "|" .. object:getirAsilAd() .. "]]"
end

function bagKutusu(lang, vikipedi, kardes, girdi)
	local wiktionarylinks = "''Yok.''"
	
	local canonicalName = lang:getirAsilAd()
	local wikimediaLanguages = lang:getirVikimedyaDilleri()
	local categoryName = lang:getirKategoriAdi()
	local wikipediaArticle = lang:getirVikipediMaddesi() or vikipedi
	
	if wikimediaLanguages and wikimediaLanguages[1] then
		wiktionarylinks = {}
		
		for _, wikimedialang in ipairs(wikimediaLanguages) do
			table.insert(wiktionarylinks,
				(wikimedialang:getirAsilAd() ~= canonicalName and "(''" .. wikimedialang:getirAsilAd() .. "'') " or "") ..
				"'''[[:" .. wikimedialang:getirKod() .. ":|" .. wikimedialang:getirKod() .. ".wiktionary.org]]'''")
		end
		
		wiktionarylinks = table.concat(wiktionarylinks, "<br/>")
	end
	
	return table.concat{
[=[<div class="main-box right-box">
<div style="text-align: center; margin-bottom: 10px; margin-top: 5px">''']=], categoryName, [=['''</div>

{| style="border: 0; font-size: 90%;"
|-
| style="vertical-align: middle; height: 35px; width: 35px;" | [[Dosya:Vikisözlüklogo-Yazısız-TmY e12.png|35px|none|Vikisözlük]]
|| ''Vikisözlük'ün ]=], categoryName, [=[ versiyon]=], (wikimediaLanguages[2] and "ları" or "u"), [=[''
|-
| colspan="2" style="padding-left: 10px; border-bottom: 1px solid lightgray;" | ]=], wiktionarylinks, [=[

|-
| style="vertical-align: middle; height: 35px" | [[Dosya:Wikipedia-logo.png|35px|none|Vikipedi]]
|| '']=], categoryName, [=[ hakkındaki Vikipedi maddesi''
|-
| colspan="2" style="padding-left: 10px; border-bottom: 1px solid lightgray;" | ]=], (wikipediaArticle == "-" and "''Yok.''" or "'''[[w:" .. wikipediaArticle .. "|" .. wikipediaArticle .. "]]'''"), [=[

|-
| style="vertical-align: middle; height: 35px" | [[Dosya:Wikimedia-logo.svg|35px|none|Vikimedya Commons]]
|| ''Vikimedya Commons'ta bulunan ]=], categoryName, [=[ ile ilgili kardeş projelere olan bağlantılar''
|-
| colspan="2" style="padding-left: 10px; border-bottom: 1px solid lightgray;" | ]=], (kardes == "-" and "''Yok.''" or "'''[[commons:Kategori:" .. (kardes or categoryName) .. "|" .. categoryName .. "]]'''"), [=[

|-
| style="vertical-align: middle; height: 35px" | [[Dosya:Crystal kfind.png|35px|none|Açıklamalar]]
|| ]=], categoryName, [=[ açıklamaları
|-
| colspan="2" style="padding-left: 10px; border-bottom: 1px solid lightgray;" | '''[[Vikisözlük:]=], canonicalName, [=[ içerik politikası]]'''
|-
| style="vertical-align: middle; height: 35px" | [[Dosya:Incomplete list.svg|35px|none|Dizin]]
|| ]=], categoryName, [=[ dizini
|-
| colspan="2" style="padding-left: 10px; border-bottom: 1px solid lightgray;" | '''[[Dizin:]=], canonicalName, [=[]]'''
|-
| style="vertical-align: middle; height: 35px" | [[Dosya:Open book nae 02.svg|35px|none|Girdi]]
|| ]=], categoryName, [=[ girdisi
|-
| colspan="2" style="padding-left: 10px;" | ''']=], require("Modül:bağlantılar").tam_bag({dil = require("Modül:diller").getirKodaGore("tr"), sozcuk = girdi or canonicalName}), [=['''
|}
</div>]=]
}
end

function bilgiKutusu(lang)
	local ret = {}
	
	table.insert(ret, "<div class=\"main-box\" style=\"display:inline-block;padding:0;\">\n")
	table.insert(ret, "<table class=\"main-table\">\n")
	table.insert(ret, "<tr>\n<th colspan=\"2\" class=\"plainlinks\">[//tr.wiktionary.org/w/index.php?title=Modül:" .. require("Modül:diller").getirVeriModulAdi(lang:getirKod()) .. "&action=edit Dil verisini düzenle]</th>\n</tr>\n")
	table.insert(ret, "<tr>\n<th>Asıl adı</th><td style='background:white;'>" .. lang:getirAsilAd() .. "</td>\n</tr>\n")
	
	local digerAdlari = lang:getirDigerAdlari(true)
	if digerAdlari then
		local adlar = {}
		
		for _, ad in ipairs(digerAdlari) do
			table.insert(adlar, "<li>" .. ad .. "</li>")
		end
		
		if #adlar > 0 then
			table.insert(ret, "<tr>\n<th>Diğer adları</th><td style='background:white;'><ul>" .. table.concat(adlar, "\n") .. "</ul></td>\n</tr>\n")
		end
	end
	
	local digerleri = lang:getirDigerleri()
	if digerleri then
		local adlar = {}
		
		for _, ad in ipairs(digerleri) do
			table.insert(adlar, "<li>" .. ad .. "</li>")
		end
		
		if #adlar > 0 then
			table.insert(ret, "<tr>\n<th>Diğer adları</th><td style='background:white;'><ul>" .. table.concat(adlar, "\n") .. "</ul></td>\n</tr>\n")
		end
	end

	local cesitleri = lang:getirCesitleri()
	if cesitleri then
		local adlar = {}
		
		for _, ad in ipairs(cesitleri) do
			if type(ad) == "string" then
				table.insert(adlar, "<li>" .. ad .. "</li>")
			else
				assert(type(ad) == "table")
				local first_var
				local subvars = {}
				for i, var in ipairs(ad) do
					if i == 1 then
						first_var = var
					else
						table.insert(subvars, "<li>" .. var .. "</li>")
					end
				end
				if #subvars > 0 then
					table.insert(adlar, "<li><dl><dt>" .. first_var .. "</dt>\n<dd><ul>" .. table.concat(subvars, "\n") .. "</ul></dd></dl></li>")
				elseif first_var then
					table.insert(adlar, "<li>" .. first_var .. "</li>")
				end
			end
		end
		
		if #adlar > 0 then
			table.insert(ret, "<tr>\n<th>Çeşitleri</th><td style='background:white;'><ul>" .. table.concat(adlar, "\n") .. "</ul></td>\n</tr>\n")
		end
	end
	
	table.insert(ret, "<tr>\n<th>[[Vikisözlük:Diller|Dil kodu]]</th><td style='background:white;'><code>" .. lang:getirKod() .. "</code></td>\n</tr>\n")
	table.insert(ret, "<tr>\n<th>[[Vikisözlük:Dil aileleri|Dil ailesi]]</th>\n")
	
	local fam = lang:getirAile()
	local famCode = fam and fam:getirKod()
	
	if not fam then
		table.insert(ret, "<td style='background:white;'>sınıflandırılmamış</td>")
	elseif famCode == "art" then
		table.insert(ret, "<td style='background:white;'>[[:Kategori:Yapay diller|yapay dil]]</td>")
	else
		table.insert(ret, "<td style='background:white;'>" .. makeCategoryLink(fam, "fam") .. "</td>")
	end
	
	table.insert(ret, "\n</tr>\n<tr>\n<th>Soyu</th>\n")
	
	local ancestors, ancestorChain = lang:getirSoylar(), lang:getirSoyZinciri()
	if ancestors[2] then
		local ancestorList = {}
		
		for i, anc in ipairs(ancestors) do
			ancestorList[i] = "<li>" .. makeCategoryLink(anc) .. "</li>"
		end
		
		table.insert(ret, "<td style='background:white;'><ul>\n" .. table.concat(ancestorList, "\n") .. "</ul></td>\n")
	elseif ancestorChain[1] then
		table.insert(ret, "<td style='background:white;'><ul>\n")
		
		local chain = {}
		
		for i, anc in ipairs(ancestorChain) do
			chain[i] = "<li>" .. makeCategoryLink(anc) .. "</li>"
		end
		
		table.insert(ret, table.concat(chain, "\n<ul>\n"))
		
		for _, _ in ipairs(chain) do
			table.insert(ret, "</ul>")
		end
		
		table.insert(ret, "</td>\n")
	else
		table.insert(ret, "<td style='background:white;'>bilinmiyor</td>\n")
	end
	
	table.insert(ret, "</tr>\n")
	
	local scripts = lang:getirAlfabeler()
	
	if scripts[1] then
		local script_text = {}
		
		for _, sc in ipairs(scripts) do
			local text = {}
			local code = sc:getirKod()
			if code ~= "Hira" then
				if code == "musical" or code == "Zmth" or code == "Zsym" or code == "Ruminumerals" then
				else
				table.insert(text, "<li>" .. makeCategoryLink(sc))
				end
			end
			
			if code == "Jpan" then
				local m_scripts = require("Modül:alfabeler")
				local Hani = m_scripts.getirKodaGore("Hani")
				local Hira = m_scripts.getirKodaGore("Hira")
				local Kana = m_scripts.getirKodaGore("Kana")
				table.insert(text, "<ul>")
				table.insert(text, "<li>" .. makeCategoryLink(Hani) .. "</li>")
				table.insert(text, "<li>" .. makeCategoryLink(Hira) .. "</li>")
				table.insert(text, "<li>" .. makeCategoryLink(Kana) .. "</li>")
				table.insert(text, "</ul>")
			elseif code == "Kore" then
				local m_scripts = require("Modül:alfabeler")
				local Hang = m_scripts.getirKodaGore("Hang")
				local Hani = m_scripts.getirKodaGore("Hani")
				table.insert(text, "<ul>")
				table.insert(text, "<li>" .. makeCategoryLink(Hang) .. "</li>")
				table.insert(text, "<li>" .. makeCategoryLink(Hani) .. "</li>")
				table.insert(text, "</ul>")
			end
			
			table.insert(text, "</li>")
			
			table.insert(script_text, table.concat(text, "\n"))
		end
		
		table.insert(ret, "<tr>\n<th>[[Vikisözlük:Alfabeler|Alfabeler]]</th>\n<td style='background:white;'><ul>\n" .. table.concat(script_text, "\n") .. "</ul></td>\n</tr>\n")
	else
		table.insert(ret, "<tr>\n<th>[[Vikisözlük:Alfabeler|Alfabeler]]</th>\n<td style='background:white;'>belirtilmemiş</td>\n</tr>\n")
	end
	
	if lang:varmiCeviri() then
		local translit_module = lang._rawData.ceviri_modulu
		local translit_module_info = {}
		table.insert(translit_module_info,
			("[[Modül:%s]]"):format(translit_module))
		
		if translit_module == "alfabeçeviri-yönlendirme" then
			local data = mw.loadData("Modül:alfabeçeviri-yönlendirme/veri")[lang:getirKod()]
			if data then
				table.insert(translit_module_info, ":")
				local redirects_to = {}
				local m_scripts = require "Modül:alfabeler"
				for script, data in require "Modül:table".sortedPairs(data) do
					-- Skip boolean fields like "debug_mode" and "noError".
					if type(data) == "table" then
						table.insert(redirects_to,
							("\n* <code>%s</code>: %s"):format(
								script,
								data.module and ("[[Modül:%s]]"):format(data.module)
									or "(yok)"))
					end
				end
				table.insert(translit_module_info, table.concat(redirects_to))
			end
		end
		table.insert(ret, [=[
<tr>
<th>[[Vikisözlük:Alfabe çevirisi ve romanizasyon|Alfabe çevirisi<br>modülü]]</th>
<td style='background:white;'>]=] .. table.concat(translit_module_info) .. [=[</td>
</tr>
]=])
	end
	local wikidataItem = lang:getirVikiveriItemi()
	if wikidataItem and mw.wikibase then
		local URL = mw.wikibase.getEntityUrl(wikidataItem)
		local link
		if URL then
			link = '[' .. URL .. ' ' .. wikidataItem .. ']'
		else
			link = '<span class="error">Geçersiz Vikiveri ögesi: <code>' .. wikidataItem .. '</code></span>'
		end
		table.insert(ret, "<tr><th>Vikiveri</th><td style='background:white;'>" .. link .. "</td></tr>")
	end
	
	table.insert(ret, "</table></div>")
	
	local ok, tree_of_descendants = pcall(
		require("Modül:aile ağacı").print_children,
		lang:getirKod(), {
			protolanguage_under_family = true,
			must_have_descendants = true,
	})
	if ok then
		if tree_of_descendants then
			table.insert(ret, "<div style='clear:left;'></div>")
			table.insert(ret, '<div class="NavFrame main-box" style="display:inline-block;padding:0;width:auto !important;">')
			table.insert(ret, '<div class="NavHead" style="background: #f8f9fa; padding: 10px;"><span style="padding-right: 20px;">Aile ağacı</span></div>')
			table.insert(ret, '<div class="NavContent" style="text-align: left; padding: 10px;">')
			table.insert(ret, tree_of_descendants)
			table.insert(ret, '</div></div>')
		end
	end

	return table.concat(ret)
end

function alt(lang)
	local tablo = {}
	
	local can = lang:getirAsilAd()
	local ekliDil = dilDuzenle(can)
	
	table.insert(tablo, require("Modül:kategori ağacı/konu").yaziSoz(can, require("Modül:temalar").getirAsilAdaGore("maddeler"), ekliDil))
	
	if mw.title.new("Kategori:Kullanıcı " .. lang:getirKod()).exists then
		table.insert(tablo, "<ul><li> [[:Kategori:Kullanıcı " .. lang:getirKod() .. [=[]]: Akıcı bir seviyede ]=] .. can .. [=[ konuşabilen Vikisözlük kullanıcıları.</li></ul>]=])
	end

	return "\n\n"..table.concat(tablo, "\n")
end

function kategoriler(lang, tum)
	if lang:getirKod() == "mul" then
		table.insert(tum.kat, "[[Kategori:Tüm diller| ]]")
	else
		table.insert(tum.kat, "[[Kategori:Tüm diller]]")
	end
	
	local fam = lang:getirAile()
	local famCode = fam and fam:getirKod()
	
	if not fam then
		table.insert(tum.kat, "[[Kategori:Sınıflandırılmamış diller]]")
	elseif famCode == "art" then
		if lang:getirTip() == "appendix-constructed" then
			table.insert(tum.kat, "[[Kategori:Ek alan adında kullanılan yapay diller]]")
		else
			table.insert(tum.kat, "[[Kategori:Yapay diller]]")
		end
		
		for _, anc in ipairs(lang:getirSoylar()) do
			table.insert(tum.kat, "[[Kategori:" .. anc:getirAsilAd() .. " tabanlı yapay diller]]")
		end
	else
		table.insert(tum.kat, "[[Kategori:" .. mw.getContentLanguage():ucfirst(fam:getirKategoriAdi()) .. "]]")
		
		if lang:getirTip() == "reconstructed" then
			table.insert(tum.kat, "[[Kategori:Proto diller|" .. mw.ustring.sub( lang:getirKategoriAdi(), 5 ) .. "]]")
		end
		
		if famCode == "crp" then
			for _, anc in ipairs(lang:getirSoylar()) do
				table.insert(tum.kat, "[[Kategori:" .. anc:getirAsilAd() .. " tabanlı kreyol veya pidgin dilleri]]")
			end
		end
	end
	
	for _, sc in ipairs(lang:getirAlfabeler()) do
		local code = sc:getirKod()
		if code == "musical" or code == "Zmth" or code == "Zsym" or code == "Ruminumerals" then
		else
			table.insert(tum.kat, "[[Kategori:" .. mw.getContentLanguage():ucfirst(sc:getirKategoriAdi() .. " diller" .. (code== "None" and "" or "i")) .. "]]")
		end
		
		if sc:getirKod() == "Jpan" then
			table.insert(tum.kat, "[[Kategori:" .. mw.getContentLanguage():ucfirst(require("Modül:alfabeler").getirKodaGore("Hani"):getirKategoriAdi() .. " dilleri") .. "]]")
			table.insert(tum.kat, "[[Kategori:" .. mw.getContentLanguage():ucfirst(require("Modül:alfabeler").getirKodaGore("Hira"):getirKategoriAdi() .. " dilleri") .. "]]")
			table.insert(tum.kat, "[[Kategori:" .. mw.getContentLanguage():ucfirst(require("Modül:alfabeler").getirKodaGore("Kana"):getirKategoriAdi() .. " dilleri") .. "]]")
		elseif sc:getirKod() == "Kore" then
			table.insert(tum.kat, "[[Kategori:" .. mw.getContentLanguage():ucfirst(require("Modül:alfabeler").getirKodaGore("Hang"):getirKategoriAdi() .. " dilleri") .. "]]")
			table.insert(tum.kat, "[[Kategori:" .. mw.getContentLanguage():ucfirst(require("Modül:alfabeler").getirKodaGore("Hani"):getirKategoriAdi() .. " dilleri") .. "]]")
		end
	end
end

function p.kategoriAgaci(tum)
	local lang = require("Modül:diller").getirKodaGore(tum.par['dil'])
	local vikipedi = tum.par['vikipedi']
	local kardes = tum.par['kardeşproje']
	local girdi = tum.par['girdiadı']
	
	if lang then
		ret = ""
		
		if lang:getirKod() == "und" then
			ret =
				"Bu kategori '''" .. lang:getirKategoriAdi() .. "''' sözcüklerin ana kategorisidir, Vikisözlük'de '''" .. lang:getirKod() .. "''' [[Vikisözlük:Diller|kodu]] ile bulunmaktadır. " ..
				"Bu dil henüz akademisyenler tarafından anlamları çözülememiş sözcükleri içerir."
		end
	
		local canonicalName = lang:getirAsilAd()
		
		ret = ret .. "Bu kategori '''" .. lang:getirKategoriAdi() .. "''' sözcüklerin ana kategorisidir.\n\n" .. canonicalName .. " hakkında bilgi:\n\n" .. bilgiKutusu(lang)
		
		if lang:getirTip() == "reconstructed" then
			ret = ret .. "\n\n" ..
				canonicalName .. " bir yapay dildir. Bu dilin sözcükleri ve kökenleri direkt olarak hiçbir yazılı eserde geçmemektedir, ama ''karşılaştırmalı yöntem'' kullanılarak geliştirilmiştir, " ..
				"ki bu yöntem diller arasındaki tesadüf veya sözcük alma ile açıklanamayan düzenli benzerlikleri bulur ve bu benzerliklerden yola çıkarak antik formları tahmin eder.\n\n" ..
				"Vikisözlük'deki [[Vikisözlük:Kabul edilme kriterleri|kabul edilme kriterleri]]ne göre, " .. canonicalName ..
				" altındaki kategoriler ana madde alanında '''eklenmemeli''', ama YeniKurum: alan adında eklenebilir."
		elseif lang:getirTip() == "appendix-constructed" then
			ret = ret .. "\n\n" ..
				canonicalName .. " nadir kullanılan bir yapay dildir. " ..
				"Vikisözlük'deki [[Vikisözlük:Kabul edilme kriterleri|kabul edilme kriterleri]]ne göre, " .. canonicalName ..
				" altındaki kategoriler ana madde alanında '''eklenmemeli''', ama Ek: alan adında eklenebilir." ..
				" Bu dildeki bütün sözcükler [[Ek:" .. canonicalName .. "]] sayfasında bulunabilir."
		end
		
		local about = mw.title.new("Vikisözlük:" .. canonicalName .. " içerik politikası")
		
		if about.exists then
			ret = ret .. "\n\n" ..
				"Lütfen " .. lang:getirKategoriAdi() .. " girdileri oluşturmadan önce '''[[Vikisözlük:" .. canonicalName .. " içerik politikası]]''' sayfasından bu dil ile ilgili özel durumları ve diğer bilgileri öğrenin."
		end
	
		ret = ret .. alt(lang)
		table.insert(tum.tab, bagKutusu(lang, vikipedi, kardes, girdi))
		kategoriler(lang, tum)
	else
		error("Girdiğiniz " .. tum.par['dil'] .. " isimli dil adı geçerli bir dil değil")
	end
	
	table.insert(tum.gor, ret)
end

return p