Модуль:TNTTools

Матеріал з Вікіпедії — вільної енциклопедії.
Перейти до навігації Перейти до пошуку
{{i}} Документація модуля[перегляд] [редагувати] [історія] [очистити кеш]

Містить функції, пов'язані з Module:TNT, які одночасно здійснюють виклики багатомовних таблиць, розташованих у Commons, для створення модулів і багатомовних шаблонів.

TNTTools містить:

  • Функції питання: з булевим чи числовим індексованим поверненням. Викликаються з інших модулів або шаблонів. З допомогою:
    • опції з урахуванням регістру.
    • можливості мати більше одного перекладеного значення тексту (де кожне значення розділене знаком "|").
  • Щоб не писати, додайте "I18n/" як префікс і розширення ".tab" як суфікс для імен таблиць.
  • Декілька прикладів.
local p = {}

local TNT = require('Модуль:TNT')
--local SD = require('Модуль:SimpleDebug')

function p.TNTTabFull (TNTTab)
	if (string.sub(TNTTab, 1, 5)) ~= 'I18n/' then
		TNTTab = 'I18n/'..TNTTab
	end	
	if (string.sub(TNTTab, string.len(TNTTab)-3)) ~= '.tab' then
		TNTTab = TNTTab..'.tab'
	end	
	return TNTTab
end --TNTTabFull

function p.TNTTabCommons (TNTTab)
	return 'Commons:Data:'..p.TNTTabFull(TNTTab)
end	

function p.LnkTNTTab (TNTTab)
	return '[['..p.TNTTabCommons(TNTTab)..']]'
end

function I18nStr (TNTTab, S, IsMsg, params)
	TNTTab = p.TNTTabFull (TNTTab)
	local SEnd = TNT.format(TNTTab, S, unpack(params)) or ''
	if SEnd == '' then
		SEnd = TNT.formatInLanguage('uk',TNTTab, S, unpack(params))
		if IsMsg then
			local icon = '[[Файл:Arbcom ru editing.svg|12px|Не знайдено "'..S..'" поточною мовою. Натисніть тут, щоб відредагувати його.|link='..p.TNTTabCommons(TNTTab)..']]'
			SEnd = SEnd..icon	
		end	
	end	
	return SEnd
end --I18nStr

function p.GetMsgP (TNTTab, S, ...)
	return I18nStr (TNTTab, S, true, {...})
end

function p.GetStrP (TNTTab, S, ...)
	return I18nStr (TNTTab, S, false, {...})
end

function p.TabTransCS (TNTTab, S, CaseSensitive)
	CaseSensitive = ((CaseSensitive ~= nil) and (CaseSensitive == true)) or true
	local Wds = TNT.format (p.TNTTabFull(TNTTab), S)
	if not CaseSensitive then
		Wds = string.lower (Wds)
	end	
    return mw.text.split (Wds, '|')
end --TabTransCS

function p.TabTransMT (TNTTab, S, MaxTrans)
	local FN = p.TNTTabFull(TNTTab)
	local tab = mw.text.split (TNT.format (FN, S), '|')
	if #tab > MaxTrans then
		error (string.format('Знайдено %s перекладів для "%s". Пошук у [[:commons:data:%s]]',#tab,S,FN)) 
							-- Переклад не потрібний
	end
	return tab
end --TabTransMT

function p.SFoundInTNTArr (TNTTab, val, CaseSensitive, S)
	if (S == nil) or (S == '') then
		error('Not arguments trying to find "'..val..'"') --Він не вимагає перекладу, тільки для degug
	end	
	local Arr = p.TabTransCS (TNTTab, S, CaseSensitive)
	if not CaseSensitive then
		val = string.lower (val)
	end	
	for I, W in ipairs(Arr) do
		if W == val then
			return true
		end	
	end	
	return false
end --SFoundInTNTArr

function p.IdxFromTabTrans (TNTTab, val, CaseSensitive, ...)
	local Arr = unpack(arg)
	if Arr == nil then
		error('Not arguments trying to find "'..val..'"') --Він не вимагає перекладу, тільки для degug
	end	
	local Idx = 0
	for I, W in ipairs(Arr) do
		if p.SFoundInTNTArr (TNTTab, val, CaseSensitive, W) then
			Idx = I
			break
		end	
	end	
	return Idx
end	--IdxFromTabTrans

return p