Tillarni topish va qabul

tahrirlash

Moduli tillarni topish uchun ishlatiladi vazifalari bir qator eksport qilmoqda.

getByCode

tahrirlash

getByCode(code)

Kimning kodi taqdim birini pas Vikipediya tilini topadi. U mavjud boʻlsa, u til vakili boʻlgan WikimediaLanguage obyekti qaytaradi. Aks holda, u nil qaytaradi.

Qiyoslash

tahrirlash

Qabul tillarda turli yoʻllar oʻrtasidagi farqlar ayrim misollar yordamida, bu erda koʻrish mumkin.

Kode Module:tili
.getByCode
Module:tili
.getByCode():getWikimediaLanguages()
Module:wikimedia tili
.getByCode
Module:wikimedia tili
.getByCodeWithFallback
Eslatma
fr fr/French fr/French fr/French fr/French Code used by both Wikimedia and Wiktionary.
bs nil (error) bs/Bosnian bs/Bosnian Code used only by Wikimedia, not Wiktionary.
sh sh/Serbo-Croatian sh/Serbo-Croatian
bs/Bosnian
hr/Croatian
sr/Serbian
sh/Serbo-Croatian sh/Serbo-Croatian Code used by both Wikimedia and Wiktionary.
Module:wikimedia languages returns sh as that is a valid Wikimedia code.
:getWikimediaLanguages() maps the code to multiple possible Wikimedia codes.
cmn cmn/Mandarin zh/Chinese nil zh/Chinese Code is used only by Wiktionary, not Wikimedia.
The code is mapped by :getWikimediaLanguages() to the equivalent Wikimedia code zh.
wym wym/Vilamovian nil nil nil Code is used only by Wiktionary, not Wikimedia.
The code is not mapped onto another by :getWikimediaLanguages(), so nil is returned.

WikimediaLanguage objects

tahrirlash

A WikimediaLanguage obʼekt ustida vazifalari biri qaytarilur. Bu Vikipediya tili Lua vakillik va u bilan bogʻliq boʻlgan maʼlumotdir. : Bu foydalanib, unga daʼvat mumkin usullari bir qator bor. Masalan:

local m_wmlanguages = require("Module:wikimedia languages")
local tili = m_wmlanguages.getByCode("bs")
local name = tili:getCanonicalName()
-- "name" will now be "Bosnian"

Language:getCode

tahrirlash

:getCode()

Tilining til kodi qaytaradi. Misol: frantsuz uchun "fr".

Language:getCanonicalName

tahrirlash

:getCanonicalName()

Tilning kanonik nomini qaytaradi. Bu Vikilugʻat bu tilni vakillik qilish uchun ishlatiladi nomidir. Misol: frantsuz uchun "French".

Language:getAllNames

tahrirlash

:getAllNames()

Kanonik nomi, shu jumladan til bilan tanilgan barcha nomlari, bir stol qaytaradi. Nomlari baʼzan bir necha til bir xil nom bilan tanilgan, noyob boʻlishi kafolat boʻlmaydi. Misol: frantsuz uchun {"French", "Modern French"}.

Language:getType

tahrirlash

:getType()

"Vikimediya" qaytaradi.

Language:getWiktionaryLanguage

tahrirlash

:getWiktionaryLanguage()

Bu Wikimedia Language teng Vikilugʼat-ona tilini ifodalaydi: a Til obʼekt (Module:tili qarang) qaytaradi. Koʻp hollarda, bu original Vikimediya til sifatida bir xil kod va nomi boʻladi, lekin ulardan bir necha xil.

Til obʼektlari boʻyicha getWikimediaLanguages usul ham, bu faqat bir obʼekt qaytaradi: farqli oʻlaroq unutmang. Teglar va skript formatlash qoʻllash aniq ekanligini, shuning uchun bu amalga oshiriladi.

Language:getRawData

tahrirlash

:getRawData()

Ushbu funktsiya yozuvlari yoki boshqa tarkib sahifalarida foydalanish uchun emas.

Til haqida maʼlumotlar bir tomchi qaytaradi. Bu BLOB formati hujjatsiz va ehtimol beqaror boʻladi; u bor moduli bilan "yaqin do'st" va hozirgi format oʻzgarishlar sifatida qoʻyiladi moduli oʻz birlik-test, kabi ishlar uchun moʻljallangan ekan.


local export = {}

local WikimediaLanguage = {}

function WikimediaLanguage:getCode()
	return self._code
end

function WikimediaLanguage:getCanonicalName()
	return self._rawData.canonicalName
end

--function WikimediaLanguage:getAllNames()
--	return self._rawData.names
--end

--[==[Given a list of types as strings, returns true if the Wikimedia language has all of them. Possible types are explained in [[Module:wikimedia languages/data]].]==]
function WikimediaLanguage:hasType(...)
	if not self._type then
		self._type = {["Wikimedia language"] = true}
		if self._rawData.type then
			for _, type in ipairs(mw.text.split(self._rawData.type, "%s*,%s*")) do
				self._type[type] = true
			end
		end
	end
	for _, type in ipairs{...} do
		if not self._type[type] then
			return false
		end
	end
	return true
end

function WikimediaLanguage:getWiktionaryLanguage()
	if not self._wiktionaryLanguageObject then
		self._wiktionaryLanguageObject = require("Module:tili").getByCode(self._rawData.wiktionary_code, nil, "allow etym")
	end
	
	return self._wiktionaryLanguageObject
end

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

WikimediaLanguage.__index = WikimediaLanguage

function export.getByCode(code)
	-- Only accept codes the software recognises
	if not mw.language.isKnownLanguageTag(code) then
		return nil
	end
	
	local rawData = mw.loadData("Module:wikimedia languages/data")[code]
	
	-- If there is no specific Wikimedia code, then "borrow" the information
	-- from the general Wiktionary language code
	if not rawData then
		local lang = require("Module:tili").getByCode(code, nil, "allow etym")
		
		if not lang then
			return nil
		end
		
		rawData = {canonicalName = lang:getCanonicalName(), wiktionary_code = code}
	elseif not rawData.canonicalName then
		rawData = {
			canonicalName = require("Module:tili").getByCode(rawData.wiktionary_code, nil, "allow etym"):getCanonicalName(),
			wiktionary_code = rawData.wiktionary_code
		}
	end
	
	return setmetatable({_rawData = rawData, _code = code}, WikimediaLanguage)
end

function export.getByCodeWithFallback(code)
	local object = export.getByCode(code)
	
	if object then
		return object
	end
	
	local lang = require("Module:tili").getByCode(code, nil, "allow etym")
	
	if not lang then
		return nil
	end
	
	return lang:getWikimediaLanguages()[1]
end

return export