Modül:diller

Merhaba, buraya Modül:diller kelimesinin anlamını aramaya geldiniz. DICTIOUS'da Modül:diller kelimesinin tüm sözlük anlamlarını bulmakla kalmayacak, aynı zamanda etimolojisini, özelliklerini ve Modül:diller kelimesinin tekil ve çoğul olarak nasıl söylendiğini de öğreneceksiniz. Modül:diller kelimesi hakkında bilmeniz gereken her şey burada. Modül:diller kelimesinin tanımı, konuşurken veya metinlerinizi yazarken daha kesin ve doğru olmanıza yardımcı olacaktır. XXX'in ve diğer kelimelerin tanımını bilmek, kelime dağarcığınızı zenginleştirir ve size daha fazla ve daha iyi dilsel kaynaklar sağlar.
Modül belgelemesi

Bu modül, dillerin objelerini çağırmaya yarar.

Alt sayfalar:


local cikart = {}

local find = mw.ustring.find

--[=[	This function checks for things that could plausibly be a language code:
		two or three lowercase letters, two or three groups of three lowercase
		letters with hyphens between them. If such a pattern is not found,
		it is likely the editor simply forgot to enter a language code. ]=]

function cikart.err(dilKodu, param, yazi)
	local sirallar = { "ilk", "ikinci", "üçüncü", "dördüncü" }
	
	local paramType = type(param)
	if paramType == "number" then
		siral = sirallar
		param = siral .. ' parametre'
	elseif paramType == "string" then
		param = 'parametre "' .. param .. '"'
	else
		error("Parametre adı "
				.. (paramType == "table" and "bir tablo" or tostring(param))
				.. ", ama ya bir sayı ya da bir string olmalı.")
	end
	
	-- Can use string.find because language codes only contain ASCII.
	if not dilKodu or dilKodu == "" then
		error("Belirlenmiş " .. param .. " (" .. (yazi or "dil kodu") .. ") eksik.", 2)
	elseif dilKodu:find("^%l%l%l?$")
			or dilKodu:find("^%l%l%l%-%l%l%l$")
			or dilKodu:find("^%l%l%l%-%l%l%l%-%l%l%l$") then
		error("Dil kodu \"" .. dilKodu .. "\" geçersiz.", 2)
	else
		error("Lütfen " .. param .. " kısmına bir " .. (yazi or "dil kodu") .. " girin.", 2)
	end
end

local function yap_girdi_adi_veya_sira_anahtari_degistirmeleri(yazi, degistirmeler)
	if degistirmeler.from then
		for i, from in ipairs(degistirmeler.from) do
			local to = degistirmeler.to or ""
			yazi = mw.ustring.gsub(yazi, from, to)
		end
	end
	
	if degistirmeler.remove_diacritics then
		yazi = mw.ustring.toNFD(yazi)
		yazi = mw.ustring.gsub(yazi,
			'',
			'')
		yazi = mw.ustring.toNFC(yazi)
	end
	
	return yazi
end

local Dil = {}

function Dil:getirKod()
	return self._kod
end


function Dil:getirAsilAd()
	return self._rawData or self._rawData.asilAd
end


function Dil:getirCeviri()
	return self._rawData.ceviri_modulu
end


function Dil:getirDigerAdlari(sadeceDigerAdlari)
	return require("Modül:dil-benzeri").getirDigerAdlari(self, sadeceDigerAdlari)
end


function Dil:getirDigerleri()
	return self._rawData.digerleri or {}
end


function Dil:getirCesitleri(flatten)
	return require("Modül:dil-benzeri").getirCesitleri(self, flatten)
end


function Dil:getirTip()
	return self._rawData.tip or "düzenli"
end


function Dil:getirVikimedyaDilleri()
	if not self._vikimedyaDilNesneleri then
		local m_vikimedya_dilleri = require("Modül:vikimedya dilleri")
		self._vikimedyaDilNesneleri = {}
		local vikimedya_kodlari = self._rawData.vikimedya_kodlari or {self._kod}
		
		for _, wdilkodu in ipairs(vikimedya_kodlari) do
			table.insert(self._vikimedyaDilNesneleri, m_vikimedya_dilleri.getirKodaGore(wdilkodu))
		end
	end
	
	return self._vikimedyaDilNesneleri
end


function Dil:getirVikipediMaddesi()
	if self._rawData.vikipedi_maddesi then
		return self._rawData.vikipedi_maddesi 
	elseif self._vikipedi_maddesi then
		return self._vikipedi_maddesi
	elseif self:getirVikiveriItemi() and mw.wikibase then
		self._vikipedi_maddesi = mw.wikibase.sitelink(self:getirVikiveriItemi(), 'trwiki')
	end
	if not self._vikipedi_maddesi then
		self._vikipedi_maddesi = self:getirKategoriAdi()
	end
	return self._vikipedi_maddesi
end

function Dil:yapVikipediBaglantisi()
	return "]"
end

function Dil:getirVikiveriItemi()
	return self._rawData or self._rawData.vikiveri
end


function Dil:getirAlfabeler()
	if not self._alfabeNesneleri then
		local m_alfabeler = require("Modül:alfabeler")
		self._alfabeNesneleri = {}
		
		for _, alf in ipairs(self._rawData.alfabeler or {"None"}) do
			table.insert(self._alfabeNesneleri, m_alfabeler.getirKodaGore(alf))
		end
	end
	
	return self._alfabeNesneleri
end

function Dil:getirAlfabeKodlari()
	return self._rawData.alfabeler or {"None"}
end

function Dil:getirAile()
	if self._aileNesnesi then
		return self._aileNesnesi
	end
		
	local aile = self._rawData or self._rawData.aile 
	if aile then
		self._aileNesnesi = require("Modül:aileler").getirKodaGore(aile)
	end
	
	return self._aileNesnesi
end


function Dil:getirSoylar()
	if not self._soyNesneleri then
		self._soyNesneleri = {}
		
		if self._rawData.soylar then
			for _, soy in ipairs(self._rawData.soylar) do
				table.insert(self._soyNesneleri, cikart.getirKodaGore(soy) or require("Modül:köken dilleri").getirKodaGore(soy))
			end
		else
			local aile = self:getirAile()
			local protoDil = aile and aile:getirProtoDili() or nil
			
			-- For the case where the current language is the proto-language
			-- of its family, we need to step up a level higher right from the start.
			if protoDil and protoDil:getirKod() == self:getirKod() then
				aile = aile:getirAile()
				protoDil = aile and aile:getirProtoDili() or nil
			end
			
			while not protoDil and not (not aile or aile:getirKod() == "qfa-not") do
				aile = aile:getirAile()
				protoDil = aile and aile:getirProtoDili() or nil
			end
			
			table.insert(self._soyNesneleri, protoDil)
		end
	end
	
	return self._soyNesneleri
end

local function yineleSoyAgaci(dugum, fonk)
	for _, soy in ipairs(dugum:getirSoylar()) do
		if soy then
			local ret = fonk(soy) or yineleSoyAgaci(soy, fonk)
			if ret then
				return ret
			end
		end
	end
end

function Dil:getirSoyZinciri()
	if not self._soyZinciri then
		self._soyZinciri = {}
		local adim = #self:getirSoylar() == 1 and self:getirSoylar() or nil
		
		while adim do
			table.insert(self._soyZinciri, 1, adim)
			adim = #adim:getirSoylar() == 1 and adim:getirSoylar() or nil
		end
	end
	
	return self._soyZinciri
end


function Dil:varmiSoylar(digerDil)
	local function karsilastir(soy)
		return soy:getirKod() == digerDil:getirKod()
	end
	return yineleSoyAgaci(self, karsilastir) or false
end


function Dil:getirKategoriAdi()
	return self:getirAsilAd()
end


function Dil:getirEbeveynler()
	return {"tüm diller"}
end


function Dil:getirStandartKarakterler()
	return self._rawData.standardKarak
end


function Dil:yapGirdiAdi(yazi)
	yazi = mw.ustring.match(yazi, "^?(.-.-)%s*?$") or yazi
	
	if self:getirKod() == "ar" then
		local U = mw.ustring.char
		local taTwiil = U(0x640)
		local waSla = U(0x671)
		-- diacritics ordinarily removed by entry_name replacements
		local Arabic_diacritics = U(0x64B, 0x64C, 0x64D, 0x64E, 0x64F, 0x650, 0x651, 0x652, 0x670)
		
		if yazi == waSla or mw.ustring.find(yazi, "^" .. taTwiil .. "?" .. "$") then
			return yazi
		end
	end
	
	if type(self._rawData.girdi_adi) == "table" then
		yazi = yap_girdi_adi_veya_sira_anahtari_degistirmeleri(yazi, self._rawData.girdi_adi)
	end
	
	return yazi
end


local has_dotted_undotted_i = {
	 = true,
	 = true,
	 = true,
	 = true,
	 = true,
	 = true,
	 = true,
}


function Dil:yapSiraAnahtari(ad, alf)
	if has_dotted_undotted_i then
		ad = ad:gsub("I", "ı")
	end
	
	ad = mw.ustring.lower(ad)
	
	-- Remove initial hyphens and *
	local hyphens_regex = "^+(.)"
	ad = mw.ustring.gsub(ad, hyphens_regex, "%1")
	
	-- If there are language-specific rules to generate the key, use those
	if type(self._rawData.sira_anahtari) == "table" then
		ad = yap_girdi_adi_veya_sira_anahtari_degistirmeleri(ad, self._rawData.sira_anahtari)
	elseif type(self._rawData.sira_anahtari) == "string" then
		ad = require("Modül:" .. self._rawData.sira_anahtari).makeSortKey(ad, self:getirKod(), alf and alf:getirKod())
	end
	
	-- Remove parentheses, as long as they are either preceded or followed by something
	ad = mw.ustring.gsub(ad, "(.)+", "%1")
	ad = mw.ustring.gsub(ad, "+(.)", "%1")
	
	if has_dotted_undotted_i then
		ad = ad:gsub("i", "İ")
	end
	
	return mw.ustring.upper(ad)
end

function Dil:gecersizElleCeviri()
	if self._rawData.gecersiz_ceviri then
		return true
	else
		return false
	end
end


function Dil:alfabeceviri(yazi, alf, modul_gecersiz)
	if not ((modul_gecersiz or self._rawData.ceviri_modulu) and yazi) then
		return nil
	end
	
	if modul_gecersiz then
		--require("Modül:debug").track("module_override")
	end
	
	return require("Modül:" .. (modul_gecersiz or self._rawData.ceviri_modulu)).tr(yazi, self:getirKod(), alf and alf:getirKod() or nil)
end

function Dil:varmiCeviri()
	return self._rawData.ceviri_modulu and true or false
end


function Dil:baglanti_cev()
	return self._rawData.baglanti_cev and true or false
end


function Dil:toJSON()
	local girdiAdiModeli = nil
	
	if self._rawData.girdi_adi then
		girdiAdiModeli = {}
		
		for i, from in ipairs(self._rawData.girdi_adi.from) do
			local to = self._rawData.girdi_adi.to or ""
			table.insert(girdiAdiModeli, {from = from, to = to})
		end
	end
	
	local ret = {
		soylar = self._rawData.soylar,
		asilAdi = self:getirAsilAdi(),
		kategoriAdi = self:getirKategoriAdi(),
		kod = self._kod,
		girdiAdiModeli = girdiAdiModeli,
		aile = self._rawData.aile,
		digerAdlari = self:getirDigerAdlari(true),
		digerleri = self:getirDigerleri(),
		cesitleri = self:getirCesitleri(),
		alfabeler = self._rawData.alfabeler,
		tip = self:getirTip(),
		vikimedyaDilleri = self._rawData.vikimedya_kodlari,
		ceviri_modulu = self._rawData.ceviri_modulu,
		vikiveriItemi = self:getirVikiveriItemi(),
		}
	
	return require("Modül:JSON").toJSON(ret)
end


-- Do NOT use this method!
-- All uses should be pre-approved on the talk page!
function Dil:getRawData()
	return self._rawData
end

Dil.__index = Dil


function cikart.getirVeriModulAdi(kod)
	if kod:find("^$") then
		return "diller/veri2"
	elseif kod:find("^$") then
		local onek = kod:sub(1, 1)
		return "diller/veri3/" .. onek
	elseif kod:find("^+$") then
		return "diller/verix"
	else
		return nil
	end
end


local function getRawLanguageData(kod)
	local moduladi = cikart.getirVeriModulAdi(kod)
	return moduladi and mw.loadData("Modül:" .. moduladi) or nil
end


function cikart.yapNesne(kod, veri)
	if veri and veri.deprecated then
		--require("Modül:debug").track("diller/deprecated")
		--require("Modül:debug").track("diller/deprecated/" .. kod)
	end
	
	return veri and setmetatable({ _rawData = veri, _kod = kod }, Dil) or nil
end


function cikart.getirKodaGore(kod)
	if type(kod) ~= "string" then
		error("The function getByCode expects a string as its first argument, but received " .. ( kod == nil and "nil" or "a " .. type(kod) ) .. ".")
	end
	
	return cikart.yapNesne(kod, getRawLanguageData(kod))
end


function cikart.getirAdaGore(ad)
	local adaGore = mw.loadData("Modül:diller/ada göre")
	local kod = adaGore.all and adaGore.all or adaGore
	
	if not kod then
		return nil
	end
	
	return cikart.yapNesne(kod, getRawLanguageData(kod))
end


function cikart.getirAsilAdaGore(ad)
	local adaGore = mw.loadData("Modül:diller/asıl adlar")
	local kod = adaGore and adaGore
	
	if not kod then
		return nil
	end
	
	return cikart.yapNesne(kod, getRawLanguageData(kod))
end


function cikart.kodaDonustur(frame)
	dil = frame.args
	if cikart.getirAsilAdaGore(dil) then
		return cikart.getirAsilAdaGore(dil):getirKod()
	elseif cikart.getirKodaGore(dil) then
		return cikart.getirKodaGore(dil):getirAsilAd()
	end
end


function cikart.tumDiller(frame)
	tablo = {}
	for _,a in ipairs(mw.loadData("Modül:diller/asıl adlar")) do
		table.insert(a)
	end
	return table.concat(mw.loadData("Modül:diller/asıl adlar"), "\n")
end


function cikart.yineleHepsini()
	mw.incrementExpensiveFunctionCount()
	local m_veri = mw.loadData("Modül:diller/tümveri")
	local fonk, t, var = pairs(m_veri)
	
	return function()
		local kod, veri = fonk(t, var)
		return cikart.yapNesne(kod, veri)
	end
end

return cikart