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