Modül:diller
Bu belgeleme Modül:diller/belge (düzenle | geçmiş) sayfasından yansıtılmaktadır. Arayüz düzenleyicilerinin deney yapabilmeleri için ayrıca Modül:diller/deneme tahtası sayfası kullanılabilir.
Bu modül, dillerin objelerini çağırmaya yarar.
Alt sayfalar:
- diller
- diller/ada göre
- diller/asıl adlar
- diller/asıl adlar/belge
- diller/belge
- diller/javascript-arayüzü
- diller/koddan asıl ada
- diller/koddan asıl ada/belge
- diller/tümveri
- diller/tümveri/belge
- diller/veri2
- diller/veri2/belge
- diller/veri3
- diller/veri3/a
- diller/veri3/a/belge
- diller/veri3/b
- diller/veri3/b/belge
- diller/veri3/belge
- diller/veri3/c
- diller/veri3/c/belge
- diller/veri3/d
- diller/veri3/d/belge
- diller/veri3/e
- diller/veri3/e/belge
- diller/veri3/f
- diller/veri3/f/belge
- diller/veri3/g
- diller/veri3/g/belge
- diller/veri3/h
- diller/veri3/h/belge
- diller/veri3/i
- diller/veri3/i/belge
- diller/veri3/j
- diller/veri3/j/belge
- diller/veri3/k
- diller/veri3/k/belge
- diller/veri3/l
- diller/veri3/l/belge
- diller/veri3/m
- diller/veri3/m/belge
- diller/veri3/n
- diller/veri3/n/belge
- diller/veri3/o
- diller/veri3/o/belge
- diller/veri3/p
- diller/veri3/p/belge
- diller/veri3/q
- diller/veri3/q/belge
- diller/veri3/r
- diller/veri3/r/belge
- diller/veri3/s
- diller/veri3/s/belge
- diller/veri3/t
- diller/veri3/t/belge
- diller/veri3/u
- diller/veri3/u/belge
- diller/veri3/v
- diller/veri3/v/belge
- diller/veri3/w
- diller/veri3/w/belge
- diller/veri3/x
- diller/veri3/x/belge
- diller/veri3/y
- diller/veri3/y/belge
- diller/veri3/z
- diller/veri3/z/belge
- diller/verix
- diller/verix/belge
- diller/çıktı
- diller/çıktı/belge
- diller/şablonlar
- diller/şablonlar/belge
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]
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[i] 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,
'[' .. degistirmeler.remove_diacritics .. ']',
'')
yazi = mw.ustring.toNFC(yazi)
end
return yazi
end
local Dil = {}
function Dil:getirKod()
return self._kod
end
function Dil:getirAsilAd()
return self._rawData[1] 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 "[[w:" .. self:getirVikipediMaddesi() .. "|" .. self:getirAsilAd() .. "]]"
end
function Dil:getirVikiveriItemi()
return self._rawData[2] 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[3] 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()[1] or nil
while adim do
table.insert(self._soyZinciri, 1, adim)
adim = #adim:getirSoylar() == 1 and adim:getirSoylar()[1] 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%p].-)%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 .. "?[" .. Arabic_diacritics .. "]" .. "$") 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 = {
["az"] = true,
["crh"] = true,
["gag"] = true,
["kaa"] = true,
["tt"] = true,
["tr"] = true,
["zza"] = true,
}
function Dil:yapSiraAnahtari(ad, alf)
if has_dotted_undotted_i[self:getirKod()] 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[self:getirKod()] 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[i] 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("^[a-z][a-z]$") then
return "diller/veri2"
elseif kod:find("^[a-z][a-z][a-z]$") then
local onek = kod:sub(1, 1)
return "diller/veri3/" .. onek
elseif kod:find("^[a-z-]+$") 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)[kod] 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[ad] or adaGore[ad]
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[ad]
if not kod then
return nil
end
return cikart.yapNesne(kod, getRawLanguageData(kod))
end
function cikart.kodaDonustur(frame)
dil = frame.args["dil"]
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